mirror of
https://github.com/wu736139669/OzgGameRPG.git
synced 2026-08-05 06:24:38 +00:00
战斗画面完成道具部分
This commit is contained in:
@@ -18,6 +18,9 @@
|
||||
|
||||
#define GAME_INIT_SQL "insert into save_data (map_id, player_to_x, player_to_y, player_direction, gold) values(1, 14.5, 9.5, 'down', 200);"
|
||||
|
||||
#define GAME_BATTLE_SELECTED_ID "GAME_BATTLE_SELECTED_ID" //战斗画面选择了一个技能或道具后,临时保存的技能id或道具id
|
||||
#define GAME_BATTLE_FIELD "GAME_BATTLE_FIELD" //战斗画面的执行完毕技能或道具动作后,影响了哪个字段
|
||||
|
||||
#define MAX_GOLD 999999 //金钱最大值
|
||||
#define MAX_STATUS1 9999 //HP最大值
|
||||
#define MAX_STATUS2 999 //MP、攻击力、防御力、速度、技能攻击、技能防御的最大值
|
||||
|
||||
+68
-36
@@ -19,6 +19,8 @@ RPGBattleMenu::~RPGBattleMenu()
|
||||
this->m_parentNode->release();
|
||||
this->m_playerData->release();
|
||||
|
||||
this->m_tableItems->release();
|
||||
|
||||
CCTMXTiledMap *bgLayer = (CCTMXTiledMap*)this->m_parentNode->getChildByTag(kRPGBattleMenuTagBg);
|
||||
if(bgLayer)
|
||||
bgLayer->removeFromParentAndCleanup(true);
|
||||
@@ -29,7 +31,11 @@ RPGBattleMenu::~RPGBattleMenu()
|
||||
if(this->m_parentNode->getChildByTag(kRPGBattleMenuTagSeparate))
|
||||
this->m_parentNode->removeChildByTag(kRPGBattleMenuTagSeparate, true);
|
||||
|
||||
this->m_selectDialogListData->release();
|
||||
//清理技能和道具选择框
|
||||
if(this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagItemsSelectDialog))
|
||||
this->m_parentNode->removeChildByTag(kRPGBattleSceneLayerTagItemsSelectDialog, true);
|
||||
if(this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagSkillSelectDialog))
|
||||
this->m_parentNode->removeChildByTag(kRPGBattleSceneLayerTagSkillSelectDialog, true);
|
||||
|
||||
CCLog("RPGBattleMenu 释放");
|
||||
}
|
||||
@@ -49,9 +55,9 @@ bool RPGBattleMenu::initWithParentNode(CCDictionary* stringList, CppSQLite3DB* d
|
||||
this->m_playerData = playerData;
|
||||
this->m_playerData->retain();
|
||||
|
||||
this->m_selectDialogListData = new CCArray();
|
||||
this->m_selectDialogListData->init();
|
||||
|
||||
this->m_tableItems = new CCArray();
|
||||
this->m_tableItems->init();
|
||||
|
||||
this->setPosition(CCPointZero);
|
||||
|
||||
CCTMXTiledMap *bgLayer = (CCTMXTiledMap*)this->m_parentNode->getChildByTag(kRPGBattleMenuTagBg);
|
||||
@@ -222,9 +228,11 @@ void RPGBattleMenu::onMenu(cocos2d::CCObject *pObject)
|
||||
tableView->setVerticalFillOrder(kCCTableViewFillTopDown);
|
||||
tableView->setTag(197);
|
||||
selectLayer->addChild(tableView);
|
||||
|
||||
}
|
||||
this->m_selectDialogListData->removeAllObjects();
|
||||
|
||||
this->m_tableItems->removeAllObjects();
|
||||
|
||||
string wq = "";
|
||||
JsonBox::Value json;
|
||||
json.loadFromString(this->m_playerData->m_skill.c_str());
|
||||
@@ -259,18 +267,18 @@ void RPGBattleMenu::onMenu(cocos2d::CCObject *pObject)
|
||||
skill->m_enabled = false;
|
||||
else if(this->m_playerData->m_MP < skill->m_MP)
|
||||
skill->m_enabled = false;
|
||||
else if(skill->m_type != 2)
|
||||
skill->m_enabled = false;
|
||||
|
||||
this->m_selectDialogListData->addObject(skill);
|
||||
this->m_tableItems->addObject(skill);
|
||||
|
||||
query.nextRow();
|
||||
}
|
||||
query.finalize();
|
||||
}
|
||||
|
||||
tableView->reloadData();
|
||||
//加载技能数据 end
|
||||
|
||||
((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(false);
|
||||
}
|
||||
break;
|
||||
case kRPGBattleMenuTagItems:
|
||||
@@ -317,32 +325,18 @@ void RPGBattleMenu::onMenu(cocos2d::CCObject *pObject)
|
||||
tableView->setTag(197);
|
||||
selectLayer->addChild(tableView);
|
||||
}
|
||||
this->m_selectDialogListData->removeAllObjects();
|
||||
|
||||
CppSQLite3Query query = this->m_db->execQuery(CCString::createWithFormat(ITEMS_EXISTING_QUERY_TYPE, 3)->getCString());
|
||||
while(!query.eof())
|
||||
{
|
||||
RPGExistingItems *itemsData = RPGExistingItems::create();
|
||||
itemsData->m_dataId = query.getIntField("id");
|
||||
itemsData->m_name = query.getStringField("name_cns");
|
||||
itemsData->m_buy = query.getIntField("buy");
|
||||
itemsData->m_sell = query.getIntField("sell");
|
||||
itemsData->m_type = query.getIntField("type");
|
||||
itemsData->m_attack = query.getFloatField("attack");
|
||||
itemsData->m_defense = query.getFloatField("defense");
|
||||
itemsData->m_speed = query.getFloatField("speed");
|
||||
itemsData->m_skillAttack = query.getFloatField("skill_attack");
|
||||
itemsData->m_skillDefense = query.getFloatField("skill_defense");
|
||||
itemsData->m_total = query.getIntField("total");
|
||||
this->m_selectDialogListData->addObject(itemsData);
|
||||
|
||||
query.nextRow();
|
||||
}
|
||||
query.finalize();
|
||||
this->m_tableItems->removeAllObjects();
|
||||
|
||||
CCArray *existingItems = ((RPGBattleSceneLayer*)this->m_parentNode)->m_existingItems;
|
||||
|
||||
for (int i = 0; i < existingItems->count(); i++)
|
||||
this->m_tableItems->addObject(existingItems->objectAtIndex(i));
|
||||
|
||||
tableView->reloadData();
|
||||
|
||||
//加载道具数据 end
|
||||
|
||||
((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(false);
|
||||
}
|
||||
break;
|
||||
case kRPGBattleMenuTagEscape:
|
||||
@@ -417,6 +411,26 @@ void RPGBattleMenu::onMenu(cocos2d::CCObject *pObject)
|
||||
// break;
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
case kRPGBattleMenuTagCancel2:
|
||||
{
|
||||
//这个选择了一个技能或道具后,到了选择目标对象的一步,使用到的取消按钮
|
||||
|
||||
CCMenuItemSprite *menuCancel = (CCMenuItemSprite*)this->getChildByTag(kRPGBattleMenuTagCancel);
|
||||
menuCancel->setVisible(true);
|
||||
|
||||
CCMenuItemSprite *menuCancel2 = (CCMenuItemSprite*)this->getChildByTag(kRPGBattleMenuTagCancel2);
|
||||
menuCancel2->removeFromParentAndCleanup(true);
|
||||
|
||||
if(this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagItemsSelectDialog))
|
||||
this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagItemsSelectDialog)->setVisible(true);
|
||||
|
||||
if(this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagSkillSelectDialog))
|
||||
this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagSkillSelectDialog)->setVisible(true);
|
||||
|
||||
((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(false);
|
||||
((RPGBattleSceneLayer*)this->m_parentNode)->cancelAllSelected();
|
||||
}
|
||||
break;
|
||||
default:
|
||||
@@ -442,8 +456,26 @@ void RPGBattleMenu::onMenu(cocos2d::CCObject *pObject)
|
||||
|
||||
void RPGBattleMenu::onButton(cocos2d::CCObject *pSender, CCControlEvent event)
|
||||
{
|
||||
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
|
||||
|
||||
CCLog("aaaa");
|
||||
CCMenuItemSprite *menuCancel = (CCMenuItemSprite*)this->getChildByTag(kRPGBattleMenuTagCancel);
|
||||
menuCancel->setVisible(false);
|
||||
|
||||
CCMenuItemSprite *menuCancel2 = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGBattleMenu::onMenu));
|
||||
menuCancel2->setPosition(ccp(75, 660));
|
||||
menuCancel2->setTag(kRPGBattleMenuTagCancel2);
|
||||
menuCancel2->setScale(0.75);
|
||||
this->addChild(menuCancel2);
|
||||
|
||||
if(this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagItemsSelectDialog))
|
||||
this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagItemsSelectDialog)->setVisible(false);
|
||||
|
||||
if(this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagSkillSelectDialog))
|
||||
this->m_parentNode->getChildByTag(kRPGBattleSceneLayerTagSkillSelectDialog)->setVisible(false);
|
||||
|
||||
((RPGBattleSceneLayer*)this->m_parentNode)->enabledTouched(true);
|
||||
|
||||
CCUserDefault::sharedUserDefault()->setIntegerForKey(GAME_BATTLE_SELECTED_ID, ((CCControlButton*)pSender)->getTag());
|
||||
}
|
||||
|
||||
//CCTableView
|
||||
@@ -478,10 +510,10 @@ CCTableViewCell* RPGBattleMenu::tableCellAtIndex(CCTableView *tableView, unsigne
|
||||
else
|
||||
cell->removeAllChildrenWithCleanup(true);
|
||||
|
||||
if(dynamic_cast<RPGSkillBtnData*>(this->m_selectDialogListData->objectAtIndex(idx)) != NULL)
|
||||
if(dynamic_cast<RPGSkillBtnData*>(this->m_tableItems->objectAtIndex(idx)) != NULL)
|
||||
{
|
||||
//点击了技能项
|
||||
RPGSkillBtnData *itemsData = (RPGSkillBtnData*)this->m_selectDialogListData->objectAtIndex(idx);
|
||||
RPGSkillBtnData *itemsData = (RPGSkillBtnData*)this->m_tableItems->objectAtIndex(idx);
|
||||
|
||||
CCControlButton *itemBtn = CCControlButton::create(CCString::createWithFormat("%s (%i)", itemsData->m_name.c_str(), itemsData->m_MP)->getCString(), "Arial", 22);
|
||||
itemBtn->setPosition(ccp(tableView->getContentSize().width / 2, 0));
|
||||
@@ -490,11 +522,11 @@ CCTableViewCell* RPGBattleMenu::tableCellAtIndex(CCTableView *tableView, unsigne
|
||||
cell->addChild(itemBtn);
|
||||
|
||||
}
|
||||
else if(dynamic_cast<RPGExistingItems*>(this->m_selectDialogListData->objectAtIndex(idx)) != NULL)
|
||||
else if(dynamic_cast<RPGExistingItems*>(this->m_tableItems->objectAtIndex(idx)) != NULL)
|
||||
{
|
||||
//点击了道具项
|
||||
|
||||
RPGExistingItems *itemsData = (RPGExistingItems*)this->m_selectDialogListData->objectAtIndex(idx);
|
||||
RPGExistingItems *itemsData = (RPGExistingItems*)this->m_tableItems->objectAtIndex(idx);
|
||||
|
||||
CCControlButton *itemBtn = CCControlButton::create(CCString::createWithFormat("%s (%i)", itemsData->m_name.c_str(), itemsData->m_total)->getCString(), "Arial", 22);
|
||||
itemBtn->setPosition(ccp(tableView->getContentSize().width / 2, 0));
|
||||
@@ -509,6 +541,6 @@ CCTableViewCell* RPGBattleMenu::tableCellAtIndex(CCTableView *tableView, unsigne
|
||||
|
||||
unsigned int RPGBattleMenu::numberOfCellsInTableView(CCTableView *tableView)
|
||||
{
|
||||
return this->m_selectDialogListData->count();
|
||||
return this->m_tableItems->count();
|
||||
}
|
||||
//CCTableView end
|
||||
|
||||
@@ -24,7 +24,9 @@ enum RPGBattleMenuTag
|
||||
kRPGBattleMenuTagItems = 5,
|
||||
kRPGBattleMenuTagEscape = 6,
|
||||
kRPGBattleMenuTagCancel = 7,
|
||||
kRPGBattleMenuTagCancel2 = 9, //这个选择了一个技能或道具后,到了选择目标对象的一步,使用到的取消按钮
|
||||
kRPGBattleMenuTagSelect = 8
|
||||
|
||||
};
|
||||
|
||||
class RPGBattleMenu : public CCMenu, CCTableViewDelegate, CCTableViewDataSource
|
||||
@@ -36,7 +38,7 @@ private:
|
||||
|
||||
CCDictionary* m_stringList;
|
||||
|
||||
CCArray* m_selectDialogListData; //技能数据或道具数据
|
||||
CCArray* m_tableItems; //技能数据或道具数据,需要在RPGBattleSceneLayer里面将数据加载进来
|
||||
|
||||
void createMenuItem(float x, float y, CCString *text, RPGBattleMenuTag tag);
|
||||
void onMenu(CCObject *pObject);
|
||||
@@ -48,7 +50,7 @@ public:
|
||||
RPGPlayer* m_playerData;
|
||||
|
||||
int m_selectedMenuTag; //选中了哪个项(攻击、技能、道具)
|
||||
|
||||
|
||||
RPGBattleMenu();
|
||||
virtual ~RPGBattleMenu();
|
||||
bool initWithParentNode(CCDictionary* stringList, CppSQLite3DB* db, CCNode* parentNode, RPGPlayer* playerData);
|
||||
|
||||
@@ -71,22 +71,22 @@ void RPGBattleMonsterSprite::selected(bool isSelected)
|
||||
|
||||
}
|
||||
|
||||
void RPGBattleMonsterSprite::showEffectResults(cocos2d::CCObject *target, int HPResults, CCNode* player)
|
||||
void RPGBattleMonsterSprite::showEffectResults(cocos2d::CCObject *target, int results, CCNode* player)
|
||||
{
|
||||
addLab(this, kRPGBattleMonsterSpriteTagEffectResults, CCString::createWithFormat("%i", HPResults), 24, kCCTextAlignmentCenter, ccp(this->getContentSize().width / 2, this->getContentSize().height / 2));
|
||||
addLab(this, kRPGBattleMonsterSpriteTagEffectResults, CCString::createWithFormat("%i", results), 24, kCCTextAlignmentCenter, ccp(this->getContentSize().width / 2, this->getContentSize().height / 2));
|
||||
|
||||
CCLabelTTF *effectResults = (CCLabelTTF*)this->getChildByTag(kRPGBattleMonsterSpriteTagEffectResults);
|
||||
|
||||
//增加HP的话则使用绿色
|
||||
if(HPResults > 0)
|
||||
if(results > 0)
|
||||
effectResults->setFontFillColor(ccc3(80, 255, 90));
|
||||
|
||||
CCMoveBy *up = CCMoveBy::create(0.5, ccp(0, 30));
|
||||
CCMoveBy *down = CCMoveBy::create(1, ccp(0, -30));
|
||||
|
||||
this->m_HPResults = HPResults;
|
||||
this->m_results = results;
|
||||
|
||||
effectResults->runAction(CCSequence::create(CCEaseExponentialOut::create(up), CCEaseBounceOut::create(down), CCDelayTime::create(0.5), CCCallFunc::create(this, callfunc_selector(RPGBattleMonsterSprite::showEffectResultsEnd)), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::attackWithTargetEffectLabEnd), player), NULL));
|
||||
effectResults->runAction(CCSequence::create(CCEaseExponentialOut::create(up), CCEaseBounceOut::create(down), CCDelayTime::create(0.5), CCCallFunc::create(this, callfunc_selector(RPGBattleMonsterSprite::showEffectResultsEnd)), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::actionWithTargetEffectLabEnd), player), NULL));
|
||||
|
||||
}
|
||||
|
||||
@@ -106,9 +106,25 @@ void RPGBattleMonsterSprite::animAttack(CCObject* target, CCObject *targetObjDat
|
||||
//private
|
||||
void RPGBattleMonsterSprite::showEffectResultsEnd()
|
||||
{
|
||||
this->m_data->m_HP += this->m_HPResults;
|
||||
if(strcmp(CCUserDefault::sharedUserDefault()->getStringForKey(GAME_BATTLE_FIELD, "").c_str(), "mp") == 0)
|
||||
{
|
||||
this->m_data->m_MP += this->m_results;
|
||||
|
||||
if(this->m_data->m_MP < 0)
|
||||
this->m_data->m_MP = 0;
|
||||
else if(this->m_data->m_MP > this->m_data->m_maxMP)
|
||||
this->m_data->m_MP = this->m_data->m_maxMP;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->m_data->m_HP += this->m_results;
|
||||
|
||||
if(this->m_data->m_HP < 0)
|
||||
this->m_data->m_HP = 0;
|
||||
else if(this->m_data->m_HP > this->m_data->m_maxHP)
|
||||
this->m_data->m_HP = this->m_data->m_maxHP;
|
||||
}
|
||||
|
||||
if(this->m_data->m_HP < 0)
|
||||
this->m_data->m_HP = 0;
|
||||
CCUserDefault::sharedUserDefault()->setStringForKey(GAME_BATTLE_FIELD, "");
|
||||
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ class RPGBattleMonsterSprite : public CCSprite
|
||||
|
||||
private:
|
||||
|
||||
int m_HPResults; //临时保存HP效果值
|
||||
int m_results; //临时保存HP效果值
|
||||
|
||||
void showEffectResultsEnd(); //showEffectResults执行完毕后执行,然后再执行showEffectResults参数中的回调
|
||||
|
||||
@@ -45,7 +45,7 @@ public:
|
||||
|
||||
void selected(bool isSelected);
|
||||
|
||||
void showEffectResults(CCObject* target, int HPResults, CCNode* player); //显示效果值,target为回调对象,攻击的话HPResults传入的是负值,回复的话为正值
|
||||
void showEffectResults(CCObject* target, int results, CCNode* player); //显示效果值,target为回调对象,攻击的话results传入的是负值,回复的话为正值
|
||||
|
||||
void animAttack(CCObject* target, CCObject *targetObjData); //执行一般攻击或技能攻击的动作,target为回调对象,targetObjData为攻击的对象
|
||||
|
||||
|
||||
@@ -285,33 +285,61 @@ void RPGBattlePlayerSprite::animSkill(cocos2d::CCObject *target, cocos2d::CCObje
|
||||
CCLog("使用技能");
|
||||
}
|
||||
|
||||
void RPGBattlePlayerSprite::showEffectResults(cocos2d::CCObject *target, int HPResults, CCNode* srcAttackObj)
|
||||
void RPGBattlePlayerSprite::animUseItem(cocos2d::CCObject *target, cocos2d::CCObject *targetObjData)
|
||||
{
|
||||
this->stopAllActions();
|
||||
|
||||
if(this->getChildByTag(kRPGBattlePlayerSpriteTagArm))
|
||||
this->removeChildByTag(kRPGBattlePlayerSpriteTagArm, true);
|
||||
|
||||
CCAnimation *animation = CCAnimation::createWithSpriteFrames(this->m_spriteFramesUseItem, 0.2);
|
||||
|
||||
CCSequence *animate = CCSequence::create(CCAnimate::create(animation), CCDelayTime::create(0.5), CCCallFunc::create(this, callfunc_selector(RPGBattlePlayerSprite::animNormal)), NULL);
|
||||
this->runAction(CCSequence::createWithTwoActions(animate, CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::useItemResults), (void*)targetObjData)));
|
||||
}
|
||||
|
||||
void RPGBattlePlayerSprite::showEffectResults(cocos2d::CCObject *target, int results, CCNode* srcAttackObj)
|
||||
{
|
||||
//srcAttackObj为发起攻击的Sprite对象
|
||||
|
||||
addLab(this, kRPGBattlePlayerSpriteTagEffectResults, CCString::createWithFormat("%i", HPResults), 24, kCCTextAlignmentCenter, ccp(this->getContentSize().width / 2, this->getContentSize().height / 2));
|
||||
addLab(this, kRPGBattlePlayerSpriteTagEffectResults, CCString::createWithFormat("%i", results), 24, kCCTextAlignmentCenter, ccp(this->getContentSize().width / 2, this->getContentSize().height / 2));
|
||||
|
||||
CCLabelTTF *effectResults = (CCLabelTTF*)this->getChildByTag(kRPGBattlePlayerSpriteTagEffectResults);
|
||||
|
||||
//增加HP的话则使用绿色
|
||||
if(HPResults > 0)
|
||||
if(results > 0)
|
||||
effectResults->setFontFillColor(ccc3(80, 255, 90));
|
||||
|
||||
CCMoveBy *up = CCMoveBy::create(0.5, ccp(0, 30));
|
||||
CCMoveBy *down = CCMoveBy::create(1, ccp(0, -30));
|
||||
|
||||
this->m_HPResults = HPResults;
|
||||
this->m_results = results;
|
||||
|
||||
effectResults->runAction(CCSequence::create(CCEaseExponentialOut::create(up), CCEaseBounceOut::create(down), CCDelayTime::create(0.5), CCCallFunc::create(this, callfunc_selector(RPGBattlePlayerSprite::showEffectResultsEnd)), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::attackWithTargetEffectLabEnd), srcAttackObj), NULL));
|
||||
effectResults->runAction(CCSequence::create(CCEaseExponentialOut::create(up), CCEaseBounceOut::create(down), CCDelayTime::create(0.5), CCCallFunc::create(this, callfunc_selector(RPGBattlePlayerSprite::showEffectResultsEnd)), CCCallFuncND::create(target, callfuncND_selector(RPGBattleSceneLayer::actionWithTargetEffectLabEnd), srcAttackObj), NULL));
|
||||
|
||||
}
|
||||
|
||||
//private
|
||||
void RPGBattlePlayerSprite::showEffectResultsEnd()
|
||||
{
|
||||
this->m_data->m_HP += this->m_HPResults;
|
||||
|
||||
if(this->m_data->m_HP < 0)
|
||||
this->m_data->m_HP = 0;
|
||||
if(strcmp(CCUserDefault::sharedUserDefault()->getStringForKey(GAME_BATTLE_FIELD, "").c_str(), "mp") == 0)
|
||||
{
|
||||
this->m_data->m_MP += this->m_results;
|
||||
|
||||
if(this->m_data->m_MP < 0)
|
||||
this->m_data->m_MP = 0;
|
||||
else if(this->m_data->m_MP > this->m_data->m_maxMP)
|
||||
this->m_data->m_MP = this->m_data->m_maxMP;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->m_data->m_HP += this->m_results;
|
||||
|
||||
if(this->m_data->m_HP < 0)
|
||||
this->m_data->m_HP = 0;
|
||||
else if(this->m_data->m_HP > this->m_data->m_maxHP)
|
||||
this->m_data->m_HP = this->m_data->m_maxHP;
|
||||
}
|
||||
|
||||
CCUserDefault::sharedUserDefault()->setStringForKey(GAME_BATTLE_FIELD, "");
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ class RPGBattlePlayerSprite : public CCSprite
|
||||
|
||||
private:
|
||||
|
||||
int m_HPResults; //临时保存HP效果值
|
||||
int m_results; //临时保存HP效果值
|
||||
|
||||
CCArray* m_spriteFramesNormal; //通常
|
||||
CCArray* m_spriteFramesHurt; //受到攻击
|
||||
@@ -66,7 +66,9 @@ public:
|
||||
|
||||
void animSkill(CCObject* target, CCObject *targetObjData); //执行技能,target为回调对象,targetObjData为目标对象
|
||||
|
||||
void showEffectResults(CCObject* target, int HPResults, CCNode* srcAttackObj); //显示效果值,target为回调对象,攻击的话HPResults传入的是负值,回复的话为正值
|
||||
void animUseItem(CCObject* target, CCObject *targetObjData); //执行使用道具,target为回调对象,targetObjData为目标对象
|
||||
|
||||
void showEffectResults(CCObject* target, int results, CCNode* srcAttackObj); //显示效果值,target为回调对象,攻击的话results传入的是负值,回复的话为正值
|
||||
|
||||
};
|
||||
|
||||
|
||||
+219
-19
@@ -10,11 +10,13 @@
|
||||
#include "RPGLoadingSceneLayer.h"
|
||||
#include "RPGComputingResults.h"
|
||||
#include "RPGStartSceneLayer.h"
|
||||
#include "RPGResultsLogic.h"
|
||||
|
||||
#define MONSTER_QUERY "select * from monster where map_id = %i order by random() limit 1" //随机出现怪物
|
||||
|
||||
#define SAVE_GOLD "update save_data set gold = %i where id = 1" //保存金钱
|
||||
#define UPDATE_PLAYER "update player set hp = %i, mp = %i, attack = %f, defense = %f, speed = %f, skill_attack = %f, skill_defense = %f, level = %i, skill = '%s', next_exp = %i, exp = %i where id = %i" //更新player数据,升级时用到
|
||||
#define UPDATE_EXISTING_ITEMS "update items_existing set total = %i where id = %i" //更新已有道具
|
||||
|
||||
RPGBattleSceneLayer::RPGBattleSceneLayer()
|
||||
{
|
||||
@@ -27,7 +29,8 @@ RPGBattleSceneLayer::~RPGBattleSceneLayer()
|
||||
this->m_monsterDataList->release();
|
||||
this->m_playerList->release();
|
||||
this->m_monsterList->release();
|
||||
|
||||
this->m_existingItems->release();
|
||||
|
||||
CCSpriteFrameCache::sharedSpriteFrameCache()->removeSpriteFramesFromFile("monsters.plist");
|
||||
|
||||
// CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
|
||||
@@ -77,6 +80,32 @@ bool RPGBattleSceneLayer::init()
|
||||
|
||||
this->m_speedTotal = 0; //速度总值的初始化
|
||||
|
||||
//加载已有道具
|
||||
this->m_existingItems = new CCArray();
|
||||
this->m_existingItems->init();
|
||||
|
||||
CppSQLite3Query itemsQuery = this->m_db.execQuery(CCString::createWithFormat(ITEMS_EXISTING_QUERY_TYPE, 3)->getCString());
|
||||
while(!itemsQuery.eof())
|
||||
{
|
||||
RPGExistingItems *itemsData = RPGExistingItems::create();
|
||||
itemsData->m_dataId = itemsQuery.getIntField("id");
|
||||
itemsData->m_name = itemsQuery.getStringField("name_cns");
|
||||
itemsData->m_buy = itemsQuery.getIntField("buy");
|
||||
itemsData->m_sell = itemsQuery.getIntField("sell");
|
||||
itemsData->m_type = itemsQuery.getIntField("type");
|
||||
itemsData->m_attack = itemsQuery.getFloatField("attack");
|
||||
itemsData->m_defense = itemsQuery.getFloatField("defense");
|
||||
itemsData->m_speed = itemsQuery.getFloatField("speed");
|
||||
itemsData->m_skillAttack = itemsQuery.getFloatField("skill_attack");
|
||||
itemsData->m_skillDefense = itemsQuery.getFloatField("skill_defense");
|
||||
itemsData->m_total = itemsQuery.getIntField("total");
|
||||
this->m_existingItems->addObject(itemsData);
|
||||
|
||||
itemsQuery.nextRow();
|
||||
}
|
||||
itemsQuery.finalize();
|
||||
//加载已有道具 end
|
||||
|
||||
//player
|
||||
float playerY = 620;
|
||||
float separateY = 197;
|
||||
@@ -207,6 +236,8 @@ bool RPGBattleSceneLayer::init()
|
||||
monsterData->m_name = query.getStringField("name_cns");
|
||||
monsterData->m_maxHP = query.getIntField("max_hp");
|
||||
monsterData->m_HP = query.getIntField("max_hp"); //跟上面的一样
|
||||
monsterData->m_maxMP = query.getIntField("max_mp");
|
||||
monsterData->m_MP = query.getIntField("max_mp"); //跟上面的一样
|
||||
monsterData->m_attack = query.getFloatField("attack");
|
||||
monsterData->m_defense = query.getFloatField("defense");
|
||||
monsterData->m_speed = query.getFloatField("speed");
|
||||
@@ -448,12 +479,12 @@ void RPGBattleSceneLayer::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
|
||||
CCLog("攻击player");
|
||||
|
||||
RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu);
|
||||
RPGPlayer *playerData = battleMenu->m_playerData;
|
||||
RPGPlayer *srcPlayerData = battleMenu->m_playerData;
|
||||
|
||||
player->selected(false);
|
||||
this->removeChildByTag(kRPGBattleSceneLayerTagBattleMenu, true);
|
||||
|
||||
this->attack(playerData, player->m_data);
|
||||
this->attack(srcPlayerData, player->m_data);
|
||||
}
|
||||
else
|
||||
player->selected(true);
|
||||
@@ -476,12 +507,12 @@ void RPGBattleSceneLayer::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
|
||||
CCLog("攻击怪物");
|
||||
|
||||
RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu);
|
||||
RPGPlayer *playerData = battleMenu->m_playerData;
|
||||
RPGPlayer *srcPlayerData = battleMenu->m_playerData;
|
||||
|
||||
monster->selected(false);
|
||||
battleMenu->removeFromParentAndCleanup(true);
|
||||
this->removeChildByTag(kRPGBattleSceneLayerTagBattleMenu, true);
|
||||
|
||||
this->attack(playerData, monster->m_data);
|
||||
this->attack(srcPlayerData, monster->m_data);
|
||||
|
||||
}
|
||||
else
|
||||
@@ -496,13 +527,129 @@ void RPGBattleSceneLayer::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
|
||||
break;
|
||||
|
||||
case kRPGBattleMenuTagSkill:
|
||||
{
|
||||
CCLog("技能");
|
||||
|
||||
CCLog("a");
|
||||
//检测选中的player
|
||||
for (int i = 0; i < this->m_playerList->count(); i++)
|
||||
{
|
||||
RPGBattlePlayerSprite *player = (RPGBattlePlayerSprite*)this->m_playerList->objectAtIndex(i);
|
||||
if(player->boundingBox().containsPoint(point))
|
||||
{
|
||||
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
|
||||
|
||||
if(player->m_isSelected)
|
||||
{
|
||||
CCLog("对player使用技能");
|
||||
|
||||
// RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu);
|
||||
// RPGPlayer *playerData = battleMenu->m_playerData;
|
||||
//
|
||||
// player->selected(false);
|
||||
// this->removeChildByTag(kRPGBattleSceneLayerTagBattleMenu, true);
|
||||
//
|
||||
// this->attack(playerData, player->m_data);
|
||||
}
|
||||
else
|
||||
player->selected(true);
|
||||
}
|
||||
else
|
||||
player->selected(false);
|
||||
|
||||
}
|
||||
|
||||
//检测选中的怪物
|
||||
for (int i = 0; i < this->m_monsterList->count(); i++)
|
||||
{
|
||||
RPGBattleMonsterSprite *monster = (RPGBattleMonsterSprite*)this->m_monsterList->objectAtIndex(i);
|
||||
if(monster->boundingBox().containsPoint(point))
|
||||
{
|
||||
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
|
||||
|
||||
if(monster->m_isSelected)
|
||||
{
|
||||
CCLog("对怪物使用技能");
|
||||
|
||||
// RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu);
|
||||
// RPGPlayer *playerData = battleMenu->m_playerData;
|
||||
//
|
||||
// monster->selected(false);
|
||||
// battleMenu->removeFromParentAndCleanup(true);
|
||||
//
|
||||
// this->attack(playerData, monster->m_data);
|
||||
|
||||
}
|
||||
else
|
||||
monster->selected(true);
|
||||
}
|
||||
else
|
||||
monster->selected(false);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case kRPGBattleMenuTagItems:
|
||||
{
|
||||
CCLog("道具");
|
||||
|
||||
CCLog("b");
|
||||
//检测选中的player
|
||||
for (int i = 0; i < this->m_playerList->count(); i++)
|
||||
{
|
||||
RPGBattlePlayerSprite *player = (RPGBattlePlayerSprite*)this->m_playerList->objectAtIndex(i);
|
||||
if(player->boundingBox().containsPoint(point))
|
||||
{
|
||||
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
|
||||
|
||||
if(player->m_isSelected)
|
||||
{
|
||||
CCLog("对player使用道具");
|
||||
|
||||
RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu);
|
||||
RPGPlayer *srcPlayerData = battleMenu->m_playerData;
|
||||
|
||||
player->selected(false);
|
||||
this->removeChildByTag(kRPGBattleSceneLayerTagBattleMenu, true);
|
||||
|
||||
this->useItem(srcPlayerData, player->m_data);
|
||||
}
|
||||
else
|
||||
player->selected(true);
|
||||
}
|
||||
else
|
||||
player->selected(false);
|
||||
|
||||
}
|
||||
|
||||
//检测选中的怪物
|
||||
for (int i = 0; i < this->m_monsterList->count(); i++)
|
||||
{
|
||||
RPGBattleMonsterSprite *monster = (RPGBattleMonsterSprite*)this->m_monsterList->objectAtIndex(i);
|
||||
if(monster->boundingBox().containsPoint(point))
|
||||
{
|
||||
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
|
||||
|
||||
if(monster->m_isSelected)
|
||||
{
|
||||
CCLog("对怪物使用道具");
|
||||
|
||||
RPGBattleMenu *battleMenu = (RPGBattleMenu*)this->getChildByTag(kRPGBattleSceneLayerTagBattleMenu);
|
||||
RPGPlayer *srcPlayerData = battleMenu->m_playerData;
|
||||
|
||||
monster->selected(false);
|
||||
this->removeChildByTag(kRPGBattleSceneLayerTagBattleMenu, true);
|
||||
|
||||
this->useItem(srcPlayerData, monster->m_data);
|
||||
}
|
||||
else
|
||||
monster->selected(true);
|
||||
}
|
||||
else
|
||||
monster->selected(false);
|
||||
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
// default:
|
||||
@@ -542,6 +689,11 @@ void RPGBattleSceneLayer::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
|
||||
}
|
||||
|
||||
//保存现有道具到数据库
|
||||
for (int i = 0; i < this->m_existingItems->count(); i++)
|
||||
{
|
||||
RPGExistingItems *itemsData = (RPGExistingItems*)this->m_existingItems->objectAtIndex(i);
|
||||
this->m_db.execDML(CCString::createWithFormat(UPDATE_EXISTING_ITEMS, itemsData->m_total, itemsData->m_dataId)->getCString());
|
||||
}
|
||||
|
||||
this->goToMap();
|
||||
}
|
||||
@@ -712,10 +864,10 @@ void RPGBattleSceneLayer::attack(cocos2d::CCObject *attackObjData, cocos2d::CCOb
|
||||
RPGBattlePlayerSprite *player = (RPGBattlePlayerSprite*)this->getChildByTag(kRPGBattleSceneLayerTagPlayer + ((RPGPlayer*)attackObjData)->m_dataId);
|
||||
player->animAttack(this, targetObjData);
|
||||
}
|
||||
else if(dynamic_cast<RPGMonster*>(attackObjData) != NULL)
|
||||
{
|
||||
|
||||
}
|
||||
// else if(dynamic_cast<RPGMonster*>(attackObjData) != NULL)
|
||||
// {
|
||||
//
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
@@ -739,8 +891,8 @@ void RPGBattleSceneLayer::attackResults(cocos2d::CCNode *sender, void *data)
|
||||
RPGBattleMonsterSprite *targetMonster = (RPGBattleMonsterSprite*)this->getChildByTag(((RPGMonster*)data)->m_tag);
|
||||
particleSysPoint = targetMonster->getPosition();
|
||||
|
||||
int HPResults = RPGComputingResults::attackResults(((RPGBattlePlayerSprite*)sender)->m_data->m_attack, ((RPGMonster*)data)->m_defense);
|
||||
targetMonster->showEffectResults(this, -HPResults, sender);
|
||||
int results = RPGComputingResults::attackResults(((RPGBattlePlayerSprite*)sender)->m_data->m_attack, ((RPGMonster*)data)->m_defense);
|
||||
targetMonster->showEffectResults(this, -results, sender);
|
||||
}
|
||||
else if(dynamic_cast<RPGPlayer*>((CCObject*)data) != NULL)
|
||||
{
|
||||
@@ -750,8 +902,8 @@ void RPGBattleSceneLayer::attackResults(cocos2d::CCNode *sender, void *data)
|
||||
|
||||
particleSysPoint = targetPlayer->getPosition();
|
||||
|
||||
int HPResults = RPGComputingResults::attackResults(((RPGBattlePlayerSprite*)sender)->m_data->m_attack, ((RPGPlayer*)data)->m_defense);
|
||||
targetPlayer->showEffectResults(this, -HPResults, sender);
|
||||
int results = RPGComputingResults::attackResults(((RPGBattlePlayerSprite*)sender)->m_data->m_attack, ((RPGPlayer*)data)->m_defense);
|
||||
targetPlayer->showEffectResults(this, -results, sender);
|
||||
|
||||
}
|
||||
|
||||
@@ -778,7 +930,49 @@ void RPGBattleSceneLayer::attackResults(cocos2d::CCNode *sender, void *data)
|
||||
|
||||
}
|
||||
|
||||
void RPGBattleSceneLayer::attackWithTargetEffectLabEnd(cocos2d::CCNode *sender, void* data)
|
||||
void RPGBattleSceneLayer::useItem(cocos2d::CCObject *useItemObjData, cocos2d::CCObject *targetObjData)
|
||||
{
|
||||
RPGBattlePlayerSprite *srcPlayer = (RPGBattlePlayerSprite*)this->getChildByTag(kRPGBattleSceneLayerTagPlayer + ((RPGPlayer*)useItemObjData)->m_dataId);
|
||||
srcPlayer->animUseItem(this, targetObjData);
|
||||
|
||||
}
|
||||
|
||||
void RPGBattleSceneLayer::useItemResults(cocos2d::CCNode *sender, void *data)
|
||||
{
|
||||
CCPoint particleSysPoint;
|
||||
|
||||
if(dynamic_cast<RPGBattlePlayerSprite*>(sender) != NULL)
|
||||
{
|
||||
if(dynamic_cast<RPGMonster*>((CCObject*)data) != NULL)
|
||||
{
|
||||
//对怪物使用道具
|
||||
|
||||
RPGBattleMonsterSprite *targetMonster = (RPGBattleMonsterSprite*)this->getChildByTag(((RPGMonster*)data)->m_tag);
|
||||
particleSysPoint = targetMonster->getPosition();
|
||||
|
||||
int results = RPGResultsLogic::battleUseItems(this->m_existingItems, (RPGMonster*)data, CCUserDefault::sharedUserDefault()->getIntegerForKey(GAME_BATTLE_SELECTED_ID));
|
||||
targetMonster->showEffectResults(this, results, sender);
|
||||
}
|
||||
else if(dynamic_cast<RPGPlayer*>((CCObject*)data) != NULL)
|
||||
{
|
||||
//player攻击player
|
||||
RPGBattlePlayerSprite *targetPlayer = (RPGBattlePlayerSprite*)this->getChildByTag(kRPGBattleSceneLayerTagPlayer + ((RPGPlayer*)data)->m_dataId);
|
||||
particleSysPoint = targetPlayer->getPosition();
|
||||
|
||||
int results = RPGResultsLogic::battleUseItems(this->m_existingItems, (RPGPlayer*)data, CCUserDefault::sharedUserDefault()->getIntegerForKey(GAME_BATTLE_SELECTED_ID));
|
||||
targetPlayer->showEffectResults(this, results, sender);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//显示使用道具后的粒子效果
|
||||
CCParticleSystemQuad *particleSys = CCParticleSystemQuad::create("use_item.plist");
|
||||
particleSys->setAutoRemoveOnFinish(true);
|
||||
particleSys->setPosition(particleSysPoint);
|
||||
this->addChild(particleSys);
|
||||
}
|
||||
|
||||
void RPGBattleSceneLayer::actionWithTargetEffectLabEnd(cocos2d::CCNode *sender, void* data)
|
||||
{
|
||||
//data为发起攻击的Sprite对象
|
||||
|
||||
@@ -794,6 +988,12 @@ void RPGBattleSceneLayer::attackWithTargetEffectLabEnd(cocos2d::CCNode *sender,
|
||||
targetPlayer->m_data->m_status = kRPGDataStatusDeath;
|
||||
targetPlayer->animDeath();
|
||||
}
|
||||
else
|
||||
{
|
||||
//player复活
|
||||
targetPlayer->m_data->m_status = kRPGDataStatusNormal;
|
||||
targetPlayer->animNormal();
|
||||
}
|
||||
|
||||
sender->removeFromParentAndCleanup(true);
|
||||
|
||||
@@ -819,7 +1019,7 @@ void RPGBattleSceneLayer::attackWithTargetEffectLabEnd(cocos2d::CCNode *sender,
|
||||
RPGBattleMonsterSprite *srcMonster = (RPGBattleMonsterSprite*)data;
|
||||
srcMonster->m_data->m_progress = 0;
|
||||
}
|
||||
|
||||
|
||||
//判断是否胜利了
|
||||
if(!this->judgeLose())
|
||||
this->scheduleUpdate();
|
||||
@@ -892,7 +1092,7 @@ void RPGBattleSceneLayer::attackWithTargetEffectLabEnd(cocos2d::CCNode *sender,
|
||||
player->m_data->m_progress = 0;
|
||||
CCProgressTimer *battleProgress = (CCProgressTimer*)this->getChildByTag(kRPGBattleSceneLayerTagPlayerProgress + player->m_data->m_dataId);
|
||||
battleProgress->setPercentage(player->m_data->m_progress);
|
||||
|
||||
|
||||
//判断是否胜利了
|
||||
if(!this->judgeWin())
|
||||
this->scheduleUpdate();
|
||||
|
||||
@@ -80,6 +80,8 @@ private:
|
||||
|
||||
public:
|
||||
|
||||
CCArray* m_existingItems; //已有道具
|
||||
|
||||
RPGBattleSceneLayer();
|
||||
virtual ~RPGBattleSceneLayer();
|
||||
virtual bool init();
|
||||
@@ -103,10 +105,15 @@ public:
|
||||
void enabledTouched(bool enabled); //是否打开可点击状态(主要可点击player或怪物)
|
||||
void cancelAllSelected(); //取消全部选中的对象
|
||||
|
||||
//攻击
|
||||
void attack(CCObject* attackObjData, CCObject* targetObjData); //player或怪物执行攻击
|
||||
void attackResults(CCNode* sender, void* data); //回调,计算攻击后的结果
|
||||
void attackWithTargetEffectLabEnd(CCNode* sender, void* data); //回调,攻击流程完毕后执行,这个sender是被攻击的对象中显示的伤害值CCLabelTTF
|
||||
|
||||
//道具
|
||||
void useItem(CCObject* useItemObjData, CCObject* targetObjData); //player执行使用道具
|
||||
void useItemResults(CCNode* sender, void* data); //回调,计算使用道具后的结果
|
||||
|
||||
void actionWithTargetEffectLabEnd(CCNode* sender, void* data); //回调,攻击、技能、道具流程完毕后执行,这个sender是目标对象中显示的效果值CCLabelTTF
|
||||
};
|
||||
|
||||
#endif /* defined(__OzgGameRPG__RPGBattleSceneLayer__) */
|
||||
|
||||
@@ -64,6 +64,8 @@ public:
|
||||
string m_name;
|
||||
int m_maxHP;
|
||||
int m_HP; //数据库里面没有这个字段
|
||||
int m_maxMP;
|
||||
int m_MP; //数据库里面没有这个字段
|
||||
float m_attack;
|
||||
float m_defense;
|
||||
float m_speed;
|
||||
|
||||
@@ -97,13 +97,12 @@ bool RPGResultsLogic::useItems(CppSQLite3DB* db, int playerId, int itemsId)
|
||||
CppSQLite3Query query = db->execQuery(CCString::createWithFormat(PLAYER_DETAIL_QUERY, playerId)->getCString());
|
||||
while(!query.eof())
|
||||
{
|
||||
//死亡状态下不能直接恢复hp的道具
|
||||
if(query.getIntField("hp") <= 0 && itemsId != 8)
|
||||
return false;
|
||||
return false; //死亡状态下不能直接恢复hp的道具
|
||||
else if(query.getIntField("hp") <= 0 && itemsId == 8)
|
||||
results = 1; //复活后是1HP
|
||||
else if(query.getIntField("hp") > 0 && itemsId == 8)
|
||||
return false; //活着的人不能使用复活药
|
||||
return false; //活着的时候不能使用复活药
|
||||
else
|
||||
{
|
||||
//恢复HP或MP
|
||||
@@ -134,6 +133,74 @@ bool RPGResultsLogic::useItems(CppSQLite3DB* db, int playerId, int itemsId)
|
||||
return true;
|
||||
}
|
||||
|
||||
int RPGResultsLogic::battleUseItems(CCArray* existingItems, cocos2d::CCObject *targetData, int itemsId)
|
||||
{
|
||||
/*
|
||||
6 草药
|
||||
7 党参
|
||||
8 复活药
|
||||
|
||||
*/
|
||||
|
||||
//道具的效果值
|
||||
int results = 0;
|
||||
|
||||
if(dynamic_cast<RPGPlayer*>(targetData) != NULL)
|
||||
{
|
||||
if(((RPGPlayer*)targetData)->m_status == kRPGDataStatusDeath && itemsId != 8)
|
||||
return 0; //死亡状态下不能直接恢复hp的道具
|
||||
else if(((RPGPlayer*)targetData)->m_status == kRPGDataStatusDeath && itemsId == 8)
|
||||
results = 1; //复活后是1HP
|
||||
else if(((RPGPlayer*)targetData)->m_status != kRPGDataStatusDeath && itemsId == 8)
|
||||
return 0; //活着的时候不能使用复活药
|
||||
else
|
||||
{
|
||||
//恢复HP或MP
|
||||
results = RPGComputingResults::itemCure(itemsId);
|
||||
if(itemsId == 7)
|
||||
CCUserDefault::sharedUserDefault()->setStringForKey(GAME_BATTLE_FIELD, "mp");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
else if(dynamic_cast<RPGMonster*>(targetData) != NULL)
|
||||
{
|
||||
//以下的复活部分是不会触发的
|
||||
|
||||
if(((RPGMonster*)targetData)->m_status == kRPGDataStatusDeath && itemsId != 8)
|
||||
return 0; //死亡状态下不能直接恢复hp的道具
|
||||
else if(((RPGMonster*)targetData)->m_status == kRPGDataStatusDeath && itemsId == 8)
|
||||
results = 1; //复活后是1HP
|
||||
else if(((RPGMonster*)targetData)->m_status != kRPGDataStatusDeath && itemsId == 8)
|
||||
return 0; //活着的时候不能使用复活药
|
||||
else
|
||||
{
|
||||
//恢复HP或MP
|
||||
results = RPGComputingResults::itemCure(itemsId);
|
||||
if(itemsId == 7)
|
||||
CCUserDefault::sharedUserDefault()->setStringForKey(GAME_BATTLE_FIELD, "mp");
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//扣减一个已有道具,没有了就在已有existingItems中删除
|
||||
CCArray* noneExistingItems = CCArray::create();
|
||||
for (int i = 0; i < existingItems->count(); i++)
|
||||
{
|
||||
RPGExistingItems *itemsData = (RPGExistingItems*)existingItems->objectAtIndex(i);
|
||||
|
||||
itemsData->m_total--;
|
||||
|
||||
if(itemsData->m_total <= 0)
|
||||
noneExistingItems->addObject(itemsData); //该道具用完了之后就加入删除列表
|
||||
}
|
||||
//删除用完了的道具
|
||||
existingItems->removeObjectsInArray(noneExistingItems);
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
bool RPGResultsLogic::useSkillCure(CppSQLite3DB *db, int srcPlayerId, int targetPlayerId, int srcSkillId)
|
||||
{
|
||||
RPGPlayer *srcPlayerData;
|
||||
|
||||
@@ -24,7 +24,8 @@ class RPGResultsLogic
|
||||
public:
|
||||
static void discardItems(CppSQLite3DB* db, int itemsId); //丢弃道具
|
||||
static void deductionsItems(CppSQLite3DB* db, int itemsId); //扣减道具数
|
||||
static bool useItems(CppSQLite3DB* db, int playerId, int itemsId); //使用道具,返回成功或失败
|
||||
static bool useItems(CppSQLite3DB* db, int playerId, int itemsId); //地图画面中使用道具,返回成功或失败
|
||||
static int battleUseItems(CCArray* existingItems, CCObject* targetData, int itemsId); //战斗画面中使用道具,existingItems为已有道具,objData为RPGPlayer、RPGMonster,返回的是该道具的效果值
|
||||
|
||||
static bool useSkillCure(CppSQLite3DB* db, int srcPlayerId, int targetPlayerId, int srcSkillId); //使用回复技能
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
ozg game — 单机版RPG(开发中…)
|
||||
ozg game — RPG(开发中…)
|
||||
================
|
||||
|
||||
本游戏主要用于技术的研究和积累
|
||||
@@ -9,7 +9,7 @@ ozg game — 单机版RPG(开发中…)
|
||||
声音文件来自 http://www.66rpg.com/type.php?t=17
|
||||
|
||||
|
||||
目前只在iOS平台下进行测试,战斗系统的技能、道具未完成。
|
||||
目前只在iOS平台下进行测试,战斗系统的技能未完成。
|
||||
|
||||
每次的更新完毕之后,数据结构都可能发生了变化,所以要把旧的数据库删除。
|
||||
|
||||
|
||||
Binary file not shown.
File diff suppressed because one or more lines are too long
@@ -216,6 +216,7 @@
|
||||
46C1009316BF786A00F74D54 /* tolua_fix.c in Sources */ = {isa = PBXBuildFile; fileRef = 46C1008A16BF786A00F74D54 /* tolua_fix.c */; };
|
||||
46C59AD317641FF300F43DC3 /* AudioEngine.lua in Resources */ = {isa = PBXBuildFile; fileRef = 46C59AD117641FF300F43DC3 /* AudioEngine.lua */; };
|
||||
46C59AD417641FF300F43DC3 /* CCBReaderLoad.lua in Resources */ = {isa = PBXBuildFile; fileRef = 46C59AD217641FF300F43DC3 /* CCBReaderLoad.lua */; };
|
||||
8905D0C1190CC5E70031F27E /* use_item.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8905D0C0190CC5E70031F27E /* use_item.plist */; };
|
||||
8909857018F253DE0021AE26 /* battle_msg_style1.tmx in Resources */ = {isa = PBXBuildFile; fileRef = 8909856F18F253DE0021AE26 /* battle_msg_style1.tmx */; };
|
||||
890F1B5C1902E284002F2769 /* attack1.ExportJson in Resources */ = {isa = PBXBuildFile; fileRef = 890F1B501902E284002F2769 /* attack1.ExportJson */; };
|
||||
890F1B5D1902E284002F2769 /* attack2.ExportJson in Resources */ = {isa = PBXBuildFile; fileRef = 890F1B511902E284002F2769 /* attack2.ExportJson */; };
|
||||
@@ -842,6 +843,7 @@
|
||||
46C1008B16BF786A00F74D54 /* tolua_fix.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tolua_fix.h; sourceTree = "<group>"; };
|
||||
46C59AD117641FF300F43DC3 /* AudioEngine.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AudioEngine.lua; sourceTree = "<group>"; };
|
||||
46C59AD217641FF300F43DC3 /* CCBReaderLoad.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CCBReaderLoad.lua; sourceTree = "<group>"; };
|
||||
8905D0C0190CC5E70031F27E /* use_item.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = use_item.plist; sourceTree = "<group>"; };
|
||||
8909856F18F253DE0021AE26 /* battle_msg_style1.tmx */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = battle_msg_style1.tmx; sourceTree = "<group>"; };
|
||||
890F1B501902E284002F2769 /* attack1.ExportJson */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = attack1.ExportJson; sourceTree = "<group>"; };
|
||||
890F1B511902E284002F2769 /* attack2.ExportJson */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = attack2.ExportJson; sourceTree = "<group>"; };
|
||||
@@ -2426,6 +2428,7 @@
|
||||
F293BC4615EB859D00256477 /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8905D0C0190CC5E70031F27E /* use_item.plist */,
|
||||
89D2A12A190B431F00EDD50B /* skill_cure.plist */,
|
||||
89D2A12B190B431F00EDD50B /* skill_fire.plist */,
|
||||
893D34D21906B01100BFE2C5 /* attack_damage.plist */,
|
||||
@@ -2658,6 +2661,7 @@
|
||||
15C1569E1683138E00D239F2 /* Icon-144.png in Resources */,
|
||||
89F5D10F18E7C5C0009D703C /* actor7_4.png in Resources */,
|
||||
9E5C5F6E18EE59BB00A68C36 /* battle_menu_style1.tmx in Resources */,
|
||||
8905D0C1190CC5E70031F27E /* use_item.plist in Resources */,
|
||||
1AC3623516D47C5C000847F2 /* fonts in Resources */,
|
||||
893D34D41906B01100BFE2C5 /* attack_damage.plist in Resources */,
|
||||
89F5D14118E7C5DD009D703C /* map_01.tmx in Resources */,
|
||||
|
||||
BIN
Binary file not shown.
Reference in New Issue
Block a user