mirror of
https://github.com/wu736139669/OzgGameRPG.git
synced 2026-08-05 06:24:38 +00:00
技能部分完成,数据结构调整
This commit is contained in:
@@ -33,6 +33,12 @@ using namespace CocosDenshion;
|
||||
//查询现有道具
|
||||
#define ITEMS_QUERY "select * from items where id in(%s) order by id asc"
|
||||
|
||||
//获取一个player的详细数据
|
||||
#define PLAYER_DETAIL_QUERY "select p.*, arms.name_cns as arms_name, armor.name_cns as armor_name from player as p left join items as arms on p.items_id_arms = arms.id left join items as armor on p.items_id_armor = armor.id where p.id = %i"
|
||||
|
||||
//查询一个角色的技能
|
||||
#define SKILL_QUERY "select * from skill where id in(%s)"
|
||||
|
||||
//技能的属性
|
||||
enum RPGSkillAttr
|
||||
{
|
||||
|
||||
@@ -21,7 +21,7 @@ public:
|
||||
|
||||
static int attackResults(float attack, float defense); //一般攻击
|
||||
static int skillAttackResults(float playerSkillAttack, float skillAttack, RPGSkillAttr attackAttr, float skillDefense, RPGSkillAttr defenseAttr); //技能攻击
|
||||
static int skillCureResults(float playerSkillAttack, float skillAttack); //治疗
|
||||
static int skillCureResults(float playerSkillAttack, float skillAttack); //技能治疗
|
||||
|
||||
static int itemCure(int itemsId); //道具治疗
|
||||
|
||||
|
||||
+2
-1
@@ -82,7 +82,8 @@ public:
|
||||
int m_dataId;
|
||||
string m_name;
|
||||
float m_skillAttack;
|
||||
int m_mp;
|
||||
int m_MP;
|
||||
int m_type;
|
||||
|
||||
RPGSkill();
|
||||
virtual ~RPGSkill();
|
||||
|
||||
@@ -21,7 +21,7 @@ RPGMapChoicePlayerMenuLayer::~RPGMapChoicePlayerMenuLayer()
|
||||
CCLog("RPGMapChoicePlayerMenuLayer 释放");
|
||||
}
|
||||
|
||||
bool RPGMapChoicePlayerMenuLayer::init(CppSQLite3DB *db, CCObject* target, SEL_CallFuncO selector, float width, float height)
|
||||
bool RPGMapChoicePlayerMenuLayer::init(CppSQLite3DB *db, CCString* titleLab, CCObject* target, SEL_CallFuncO selector, float width, float height)
|
||||
{
|
||||
if(CCLayerColor::initWithColor(ccc4(0, 0, 0, 200), width, height))
|
||||
{
|
||||
@@ -41,6 +41,16 @@ bool RPGMapChoicePlayerMenuLayer::init(CppSQLite3DB *db, CCObject* target, SEL_C
|
||||
mainMenu->setPosition(CCPointZero);
|
||||
this->addChild(mainMenu);
|
||||
|
||||
CCMenuItemSprite *menuBack = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapChoicePlayerMenuLayerTagMainMenuBack);
|
||||
if(!menuBack)
|
||||
{
|
||||
menuBack = CCMenuItemSprite::create(CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), CCSprite::createWithSpriteFrameName("commons_btn_back_04.png"), this, menu_selector(RPGMapChoicePlayerMenuLayer::onMenu));
|
||||
menuBack->setPosition(ccp(40, 600));
|
||||
menuBack->setTag(kRPGMapChoicePlayerMenuLayerTagMainMenuBack);
|
||||
menuBack->setScale(0.5);
|
||||
mainMenu->addChild(menuBack);
|
||||
}
|
||||
|
||||
this->setPosition(ccp((CCDirector::sharedDirector()->getWinSize().width - width) / 2, (CCDirector::sharedDirector()->getWinSize().height - height) / 2));
|
||||
|
||||
//显示4个角色
|
||||
@@ -48,9 +58,20 @@ bool RPGMapChoicePlayerMenuLayer::init(CppSQLite3DB *db, CCObject* target, SEL_C
|
||||
CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY);
|
||||
while(!query.eof())
|
||||
{
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
CCSprite *playerSprite = NULL;
|
||||
if(query.getIntField("hp") <= 0)
|
||||
{
|
||||
//死亡
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_2.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(10));
|
||||
}
|
||||
else
|
||||
{
|
||||
//正常
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(1));
|
||||
}
|
||||
|
||||
CCSprite *playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(1));
|
||||
CCMenuItemSprite *player = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapChoicePlayerMenuLayerTagMainMenuPlayer + query.getIntField("id"));
|
||||
if(!player)
|
||||
{
|
||||
@@ -66,6 +87,8 @@ bool RPGMapChoicePlayerMenuLayer::init(CppSQLite3DB *db, CCObject* target, SEL_C
|
||||
}
|
||||
query.finalize();
|
||||
|
||||
addLab(this, kRPGMapChoicePlayerMenuLayerTagTitleLab, titleLab, ccp(600, 400));
|
||||
|
||||
CCNotificationCenter::sharedNotificationCenter()->addObserver(this->m_target, selector, "onChoicePlayer", NULL);
|
||||
|
||||
return true;
|
||||
@@ -73,10 +96,10 @@ bool RPGMapChoicePlayerMenuLayer::init(CppSQLite3DB *db, CCObject* target, SEL_C
|
||||
return false;
|
||||
}
|
||||
|
||||
RPGMapChoicePlayerMenuLayer* RPGMapChoicePlayerMenuLayer::create(CppSQLite3DB *db, CCObject* target, SEL_CallFuncO selector, float width, float height)
|
||||
RPGMapChoicePlayerMenuLayer* RPGMapChoicePlayerMenuLayer::create(CppSQLite3DB *db, CCString* titleLab, CCObject* target, SEL_CallFuncO selector, float width, float height)
|
||||
{
|
||||
RPGMapChoicePlayerMenuLayer *obj = new RPGMapChoicePlayerMenuLayer();
|
||||
if(obj && obj->init(db, target, selector, width, height))
|
||||
if(obj && obj->init(db, titleLab, target, selector, width, height))
|
||||
{
|
||||
obj->autorelease();
|
||||
return obj;
|
||||
@@ -88,4 +111,5 @@ RPGMapChoicePlayerMenuLayer* RPGMapChoicePlayerMenuLayer::create(CppSQLite3DB *d
|
||||
void RPGMapChoicePlayerMenuLayer::onMenu(cocos2d::CCObject *pObject)
|
||||
{
|
||||
CCNotificationCenter::sharedNotificationCenter()->postNotification("onChoicePlayer", pObject);
|
||||
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
|
||||
#include "cocos2d.h"
|
||||
#include "RPGBaseSceneLayer.h"
|
||||
#include "RPGBaseSceneLayer.h"
|
||||
#include "OzgCCUtility.h"
|
||||
|
||||
USING_NS_CC;
|
||||
@@ -29,7 +30,9 @@ USING_NS_CC;
|
||||
enum RPGMapChoicePlayerMenuLayerTag
|
||||
{
|
||||
kRPGMapChoicePlayerMenuLayerTagMainMenu = 1,
|
||||
kRPGMapChoicePlayerMenuLayerTagMainMenuBack = 4,
|
||||
kRPGMapChoicePlayerMenuLayerTagBg = 2,
|
||||
kRPGMapChoicePlayerMenuLayerTagTitleLab = 3,
|
||||
kRPGMapChoicePlayerMenuLayerTagMainMenuPlayer = 100
|
||||
};
|
||||
|
||||
@@ -48,8 +51,8 @@ public:
|
||||
RPGMapChoicePlayerMenuLayer();
|
||||
virtual ~RPGMapChoicePlayerMenuLayer();
|
||||
|
||||
bool init(CppSQLite3DB *db, CCObject* target, SEL_CallFuncO selector, float width, float height);
|
||||
static RPGMapChoicePlayerMenuLayer* create(CppSQLite3DB *db, CCObject* target, SEL_CallFuncO selector, float width, float height);
|
||||
bool init(CppSQLite3DB *db, CCString* titleLab, CCObject* target, SEL_CallFuncO selector, float width, float height);
|
||||
static RPGMapChoicePlayerMenuLayer* create(CppSQLite3DB *db, CCString* titleLab, CCObject* target, SEL_CallFuncO selector, float width, float height);
|
||||
};
|
||||
|
||||
#endif /* defined(__OzgGameRPG__RPGMapChoicePlayerMenuLayer__) */
|
||||
|
||||
@@ -248,8 +248,8 @@ void RPGMapItemsMenuLayer::onMenu(cocos2d::CCObject *pObject)
|
||||
void RPGMapItemsMenuLayer::onDialog(cocos2d::CCObject *pObject)
|
||||
{
|
||||
this->getParent()->removeChildByTag(kRPGMapItemsMenuLayerTagDialog, true);
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayerBg, true);
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer, true);
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerLab, true);
|
||||
this->setVisible(true);
|
||||
}
|
||||
|
||||
@@ -272,13 +272,19 @@ void RPGMapItemsMenuLayer::onButton(cocos2d::CCObject *pSender, CCControlEvent e
|
||||
//因为动态获取地图的大小会导致了菜单层显示错位,所以定死了
|
||||
float width = 960;
|
||||
float height = 640;
|
||||
RPGMapChoicePlayerMenuLayer *choicePlayer = RPGMapChoicePlayerMenuLayer::create(this->m_db, this, callfuncO_selector(RPGMapItemsMenuLayer::onChoicePlayer), width, height);
|
||||
|
||||
//临时背景
|
||||
CCTMXTiledMap *mainBg = CCTMXTiledMap::create("map_menu3_style1.tmx");
|
||||
mainBg->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width / 2, CCDirector::sharedDirector()->getWinSize().height / 2));
|
||||
mainBg->setAnchorPoint(ccp(0.5, 0.5));
|
||||
mainBg->setTag(kRPGMapSceneLayerTagChoicePlayerMenuLayerBg);
|
||||
this->getParent()->addChild(mainBg);
|
||||
|
||||
CCString *title = CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("menu_items_choice"))->getCString(), this->m_selectedItems->m_name.c_str());
|
||||
RPGMapChoicePlayerMenuLayer *choicePlayer = RPGMapChoicePlayerMenuLayer::create(this->m_db, title, this, callfuncO_selector(RPGMapItemsMenuLayer::onChoicePlayer), width, height);
|
||||
choicePlayer->setTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer);
|
||||
this->getParent()->addChild(choicePlayer);
|
||||
|
||||
CCString *labText = CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("menu_items_choice"))->getCString(), this->m_selectedItems->m_name.c_str());
|
||||
addLab(this->getParent(), kRPGMapSceneLayerTagChoicePlayerLab, labText, ccp(650, 470));
|
||||
|
||||
this->setVisible(false);
|
||||
}
|
||||
|
||||
@@ -286,25 +292,35 @@ void RPGMapItemsMenuLayer::onChoicePlayer(cocos2d::CCObject *pObject)
|
||||
{
|
||||
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
|
||||
|
||||
CCMenuItem *player = (CCMenuItem*)pObject;
|
||||
|
||||
bool isSuccess = RPGResultsLogic::useItems(this->m_db, player->getTag() - kRPGMapChoicePlayerMenuLayerTagMainMenuPlayer, this->m_selectedItems->m_dataId);
|
||||
if(!isSuccess)
|
||||
CCMenuItem *menuItem = (CCMenuItem*)pObject;
|
||||
if(menuItem->getTag() == kRPGMapChoicePlayerMenuLayerTagMainMenuBack)
|
||||
{
|
||||
//道具使用失败
|
||||
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
|
||||
RPGDialogLayer *dialog = RPGDialogLayer::create(((CCString*)this->m_stringList->objectForKey("menu_items_fail"))->getCString(), ((CCString*)this->m_stringList->objectForKey("confirm_exit_ok"))->getCString(), kRPGMapItemsMenuLayerTagDialogOK, winSize.width, winSize.height, this, menu_selector(RPGMapItemsMenuLayer::onDialog));
|
||||
dialog->setTag(kRPGMapItemsMenuLayerTagDialog);
|
||||
this->getParent()->addChild(dialog);
|
||||
|
||||
//按了退出
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayerBg, true);
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer, true);
|
||||
this->setVisible(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
//道具使用成功
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer, true);
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerLab, true);
|
||||
this->setVisible(true);
|
||||
bool isSuccess = RPGResultsLogic::useItems(this->m_db, menuItem->getTag() - kRPGMapChoicePlayerMenuLayerTagMainMenuPlayer, this->m_selectedItems->m_dataId);
|
||||
if(!isSuccess)
|
||||
{
|
||||
//道具使用失败
|
||||
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
|
||||
RPGDialogLayer *dialog = RPGDialogLayer::create(((CCString*)this->m_stringList->objectForKey("menu_items_fail"))->getCString(), ((CCString*)this->m_stringList->objectForKey("confirm_exit_ok"))->getCString(), kRPGMapItemsMenuLayerTagDialogOK, winSize.width, winSize.height, this, menu_selector(RPGMapItemsMenuLayer::onDialog));
|
||||
dialog->setTag(kRPGMapItemsMenuLayerTagDialog);
|
||||
this->getParent()->addChild(dialog);
|
||||
|
||||
this->loadItemsData();
|
||||
}
|
||||
else
|
||||
{
|
||||
//道具使用成功
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayerBg, true);
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer, true);
|
||||
this->setVisible(true);
|
||||
|
||||
this->loadItemsData();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -28,7 +28,7 @@ RPGMapMenuLayer::~RPGMapMenuLayer()
|
||||
|
||||
// CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();
|
||||
|
||||
// CCLog("RPGMapMenuLayer释放");
|
||||
CCLog("RPGMapMenuLayer释放");
|
||||
}
|
||||
|
||||
bool RPGMapMenuLayer::init(CCDictionary* stringList, CppSQLite3DB* db, float width, float height)
|
||||
@@ -280,9 +280,20 @@ void RPGMapMenuLayer::setDefaultInterface()
|
||||
CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY);
|
||||
while(!query.eof())
|
||||
{
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
CCSprite *playerSprite = NULL;
|
||||
if(query.getIntField("hp") <= 0)
|
||||
{
|
||||
//死亡
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_2.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(10));
|
||||
}
|
||||
else
|
||||
{
|
||||
//正常
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(1));
|
||||
}
|
||||
|
||||
CCSprite *playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(1));
|
||||
playerSprite->setPosition(ccp(150, playerY));
|
||||
playerSprite->setScale(2);
|
||||
playerSprite->setTag(kRPGMapMenuLayerTagDefualtPlayerTex + query.getIntField("id"));
|
||||
|
||||
@@ -20,7 +20,7 @@ enum RPGMapSceneLayerTag
|
||||
kRPGMapSceneLayerTagMainMenuCommand = 4,
|
||||
kRPGMapSceneLayerTagMenuLayer = 5,
|
||||
kRPGMapSceneLayerTagChoicePlayerMenuLayer = 6,
|
||||
kRPGMapSceneLayerTagChoicePlayerLab = 7,
|
||||
kRPGMapSceneLayerTagChoicePlayerMenuLayerBg = 7,
|
||||
kRPGMapSceneLayerTagPlayer = 1999,
|
||||
kRPGMapSceneLayerTagNPC = 2000
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
#include "RPGMapSkillMenuLayer.h"
|
||||
#include "RPGMapMenuLayer.h"
|
||||
#include "RPGMapSceneLayer.h"
|
||||
#include "RPGMapChoicePlayerMenuLayer.h"
|
||||
#include "OzgCCUtility.h"
|
||||
|
||||
RPGMapSkillMenuLayer::RPGMapSkillMenuLayer()
|
||||
{
|
||||
@@ -18,6 +20,7 @@ RPGMapSkillMenuLayer::RPGMapSkillMenuLayer()
|
||||
RPGMapSkillMenuLayer::~RPGMapSkillMenuLayer()
|
||||
{
|
||||
this->m_stringList->release();
|
||||
this->m_skillList->release();
|
||||
|
||||
CCLog("RPGMapSkillMenuLayer 释放");
|
||||
}
|
||||
@@ -31,6 +34,13 @@ bool RPGMapSkillMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB
|
||||
|
||||
this->m_db = db;
|
||||
|
||||
this->m_skillList = new CCArray();
|
||||
this->m_skillList->init();
|
||||
|
||||
this->m_statusIsDefault = true;
|
||||
|
||||
this->m_enabledPlayerSkill = true; //默认可以点击技能项
|
||||
|
||||
CCMenu *mainMenu = CCMenu::create();
|
||||
mainMenu->setTag(kRPGMapSkillMenuLayerTagMainMenu);
|
||||
mainMenu->setAnchorPoint(CCPointZero);
|
||||
@@ -52,6 +62,43 @@ bool RPGMapSkillMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB
|
||||
mainBg->setTag(kRPGMapSkillMenuLayerTagBg);
|
||||
this->addChild(mainBg);
|
||||
|
||||
//显示上面的4个角色
|
||||
float playerX = 200;
|
||||
CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY);
|
||||
while(!query.eof())
|
||||
{
|
||||
CCSprite *playerSprite = NULL;
|
||||
if(query.getIntField("hp") <= 0)
|
||||
{
|
||||
//死亡
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_2.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(10));
|
||||
}
|
||||
else
|
||||
{
|
||||
//正常
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(1));
|
||||
}
|
||||
|
||||
CCMenuItemSprite *player = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapSkillMenuLayerTagMainMenuPlayer + query.getIntField("id"));
|
||||
if(!player)
|
||||
{
|
||||
player = CCMenuItemSprite::create(playerSprite, playerSprite, this, menu_selector(RPGMapSkillMenuLayer::onMenu));
|
||||
player->setPosition(ccp(playerX, 560));
|
||||
player->setScale(2);
|
||||
player->setTag(kRPGMapSkillMenuLayerTagMainMenuPlayer + query.getIntField("id"));
|
||||
mainMenu->addChild(player);
|
||||
}
|
||||
|
||||
playerX += 200;
|
||||
query.nextRow();
|
||||
}
|
||||
query.finalize();
|
||||
|
||||
//默认选中第一个
|
||||
this->onMenu(mainMenu->getChildByTag(kRPGMapSkillMenuLayerTagMainMenuPlayer + 1));
|
||||
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -69,11 +116,93 @@ RPGMapSkillMenuLayer* RPGMapSkillMenuLayer::create(cocos2d::CCDictionary *string
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//CCTableView
|
||||
void RPGMapSkillMenuLayer::scrollViewDidScroll(CCScrollView *scrollView)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void RPGMapSkillMenuLayer::scrollViewDidZoom(CCScrollView *scrollView)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void RPGMapSkillMenuLayer::tableCellTouched(CCTableView *tableView, CCTableViewCell *cell)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
CCSize RPGMapSkillMenuLayer::cellSizeForTable(CCTableView *tableView)
|
||||
{
|
||||
return CCSizeMake(tableView->getContentSize().width, 80);
|
||||
}
|
||||
|
||||
CCTableViewCell* RPGMapSkillMenuLayer::tableCellAtIndex(CCTableView *tableView, unsigned int idx)
|
||||
{
|
||||
CCTableViewCell *cell = tableView->dequeueCell();
|
||||
if (!cell)
|
||||
{
|
||||
cell = new CCTableViewCell();
|
||||
cell->autorelease();
|
||||
}
|
||||
else
|
||||
cell->removeAllChildrenWithCleanup(true);
|
||||
|
||||
float x = 100;
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
int index = idx * 5 + i;
|
||||
|
||||
if(index >= this->m_skillList->count())
|
||||
break;
|
||||
|
||||
RPGSkill *skillData = (RPGSkill*)this->m_skillList->objectAtIndex(index);
|
||||
|
||||
CCControlButton *skillBtn = CCControlButton::create(CCString::createWithFormat("%s (%i)", skillData->m_name.c_str(), skillData->m_MP)->getCString(), "Arial", 22);
|
||||
skillBtn->setPosition(ccp(x, 0));
|
||||
skillBtn->setTag(skillData->m_dataId);
|
||||
skillBtn->addTargetWithActionForControlEvents(this, cccontrol_selector(RPGMapSkillMenuLayer::onButton), CCControlEventTouchUpInside);
|
||||
cell->addChild(skillBtn);
|
||||
|
||||
//如果是非回复类技能的话,则禁用点击
|
||||
if(skillData->m_type != 2)
|
||||
{
|
||||
skillBtn->setTitleColorForState(ccc3(144, 144, 144), CCControlStateNormal);
|
||||
skillBtn->setEnabled(false);
|
||||
}
|
||||
//MP不够的话,禁用点击
|
||||
else if(!this->m_enabledPlayerSkill)
|
||||
{
|
||||
skillBtn->setTitleColorForState(ccc3(144, 144, 144), CCControlStateNormal);
|
||||
skillBtn->setEnabled(false);
|
||||
}
|
||||
|
||||
x += 170;
|
||||
}
|
||||
|
||||
return cell;
|
||||
}
|
||||
|
||||
unsigned int RPGMapSkillMenuLayer::numberOfCellsInTableView(CCTableView *tableView)
|
||||
{
|
||||
int rowItemCount = 5;
|
||||
int size = this->m_skillList->count();
|
||||
|
||||
if(size % rowItemCount == 0)
|
||||
return size / rowItemCount;
|
||||
else
|
||||
return size / rowItemCount + 1;
|
||||
}
|
||||
//CCTableView end
|
||||
|
||||
//private
|
||||
void RPGMapSkillMenuLayer::onMenu(cocos2d::CCObject *pObject)
|
||||
{
|
||||
//第一次显示数据的话则不播放效果音
|
||||
if(!this->m_statusIsDefault)
|
||||
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
|
||||
|
||||
CCMenuItem *menuItem = (CCMenuItem*)pObject;
|
||||
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
|
||||
|
||||
switch (menuItem->getTag())
|
||||
{
|
||||
@@ -98,4 +227,189 @@ void RPGMapSkillMenuLayer::onMenu(cocos2d::CCObject *pObject)
|
||||
break;
|
||||
}
|
||||
|
||||
if(menuItem->getTag() >= kRPGMapSkillMenuLayerTagMainMenuPlayer && menuItem->getTag() <= kRPGMapSkillMenuLayerTagMainMenuPlayer + 99)
|
||||
{
|
||||
// CCLog("点击了上面4个player的其中一个");
|
||||
CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapSkillMenuLayerTagMainMenu);
|
||||
|
||||
CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY);
|
||||
while(!query.eof())
|
||||
{
|
||||
if(menuItem->getTag() == kRPGMapSkillMenuLayerTagMainMenuPlayer + query.getIntField("id"))
|
||||
{
|
||||
this->m_statusIsDefault = false;
|
||||
|
||||
int dataId = query.getIntField("id");
|
||||
this->setPlayerSkill(dataId);
|
||||
|
||||
//选中的光标部分
|
||||
CCMenuItemSprite *player = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapSkillMenuLayerTagMainMenuPlayer + dataId);
|
||||
|
||||
CCSprite *handCursor = (CCSprite*)this->getChildByTag(kRPGMapMenuLayerTagHandCursor);
|
||||
if(!handCursor)
|
||||
{
|
||||
handCursor = CCSprite::createWithSpriteFrameName("gui_hand.png");
|
||||
handCursor->setScale(0.3);
|
||||
handCursor->setTag(kRPGMapMenuLayerTagHandCursor);
|
||||
this->addChild(handCursor);
|
||||
}
|
||||
|
||||
//光标的位置
|
||||
handCursor->setPosition(ccp(player->getPositionX() + 60, 555));
|
||||
|
||||
break;
|
||||
}
|
||||
query.nextRow();
|
||||
}
|
||||
query.finalize();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void RPGMapSkillMenuLayer::setPlayerSkill(int dataId)
|
||||
{
|
||||
CCTableView *tableView = (CCTableView*)this->getChildByTag(kRPGMapSkillMenuLayerTagItemListTable);
|
||||
if(!tableView)
|
||||
{
|
||||
tableView = CCTableView::create(this, CCSizeMake(850, 420));
|
||||
tableView->setDirection(kCCScrollViewDirectionVertical);
|
||||
tableView->setPosition(ccp(30, 30));
|
||||
tableView->setDelegate(this);
|
||||
tableView->setVerticalFillOrder(kCCTableViewFillTopDown);
|
||||
tableView->setTag(kRPGMapSkillMenuLayerTagItemListTable);
|
||||
this->addChild(tableView);
|
||||
}
|
||||
|
||||
CppSQLite3Query query = this->m_db->execQuery(CCString::createWithFormat(PLAYER_DETAIL_QUERY, dataId)->getCString());
|
||||
while(!query.eof())
|
||||
{
|
||||
this->m_selectedPlayerId = query.getIntField("id");
|
||||
|
||||
if(query.getFloatField("mp") <= 0 || query.getFloatField("hp") <= 0)
|
||||
this->m_enabledPlayerSkill = false;
|
||||
|
||||
//数据处理部分
|
||||
this->m_skillList->removeAllObjects();
|
||||
|
||||
string wq = "";
|
||||
JsonBox::Value json;
|
||||
json.loadFromString(query.getStringField("skill"));
|
||||
JsonBox::Array jsonArr = json.getArray();
|
||||
for (int i = 0; i < jsonArr.size(); i++)
|
||||
{
|
||||
char* str = (char*)malloc(10 * sizeof(char));
|
||||
OzgCCUtility::itoa(jsonArr[i].getInt(), str);
|
||||
wq.append(str);
|
||||
|
||||
if(i + 1 < jsonArr.size())
|
||||
wq.append(", ");
|
||||
|
||||
free(str);
|
||||
}
|
||||
if((int)wq.length() > 0)
|
||||
{
|
||||
CppSQLite3Query skillQuery = this->m_db->execQuery(CCString::createWithFormat(SKILL_QUERY, wq.c_str())->getCString());
|
||||
while(!skillQuery.eof())
|
||||
{
|
||||
RPGSkill *skill = RPGSkill::create();
|
||||
skill->m_dataId = skillQuery.getIntField("id");
|
||||
skill->m_name = skillQuery.getStringField("name_cns");
|
||||
skill->m_MP = skillQuery.getIntField("mp");
|
||||
skill->m_skillAttack = skillQuery.getIntField("skill_attack");
|
||||
skill->m_type = skillQuery.getIntField("type");
|
||||
|
||||
this->m_skillList->addObject(skill);
|
||||
|
||||
skillQuery.nextRow();
|
||||
}
|
||||
skillQuery.finalize();
|
||||
}
|
||||
|
||||
tableView->reloadData();
|
||||
|
||||
query.nextRow();
|
||||
}
|
||||
query.finalize();
|
||||
|
||||
}
|
||||
|
||||
void RPGMapSkillMenuLayer::onButton(cocos2d::CCObject *pSender, CCControlEvent event)
|
||||
{
|
||||
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
|
||||
|
||||
CCControlButton *skillBtn = (CCControlButton*)pSender;
|
||||
for (int i = 0; i < this->m_skillList->count(); i++)
|
||||
{
|
||||
//判断选中道具
|
||||
RPGSkill *skillData = (RPGSkill*)this->m_skillList->objectAtIndex(i);
|
||||
if(skillBtn->getTag() == skillData->m_dataId)
|
||||
{
|
||||
this->m_selectedSkill = skillData;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//因为动态获取地图的大小会导致了菜单层显示错位,所以定死了
|
||||
float width = 960;
|
||||
float height = 640;
|
||||
|
||||
//临时背景
|
||||
CCTMXTiledMap *mainBg = CCTMXTiledMap::create("map_menu3_style1.tmx");
|
||||
mainBg->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width / 2, CCDirector::sharedDirector()->getWinSize().height / 2));
|
||||
mainBg->setAnchorPoint(ccp(0.5, 0.5));
|
||||
mainBg->setTag(kRPGMapSceneLayerTagChoicePlayerMenuLayerBg);
|
||||
this->getParent()->addChild(mainBg);
|
||||
|
||||
CCString *title = CCString::createWithFormat(((CCString*)this->m_stringList->objectForKey("menu_skill_choice"))->getCString(), this->m_selectedSkill->m_name.c_str());
|
||||
RPGMapChoicePlayerMenuLayer *choicePlayer = RPGMapChoicePlayerMenuLayer::create(this->m_db, title, this, callfuncO_selector(RPGMapSkillMenuLayer::onChoicePlayer), width, height);
|
||||
choicePlayer->setTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer);
|
||||
this->getParent()->addChild(choicePlayer);
|
||||
|
||||
this->setVisible(false);
|
||||
}
|
||||
|
||||
void RPGMapSkillMenuLayer::onChoicePlayer(CCObject* pObject)
|
||||
{
|
||||
SimpleAudioEngine::sharedEngine()->playEffect("audio_effect_btn.wav");
|
||||
|
||||
CCMenuItem *menuItem = (CCMenuItem*)pObject;
|
||||
if(menuItem->getTag() == kRPGMapChoicePlayerMenuLayerTagMainMenuBack)
|
||||
{
|
||||
//按了退出
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayerBg, true);
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer, true);
|
||||
this->setVisible(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
bool isSuccess = RPGResultsLogic::useSkillCure(this->m_db, this->m_selectedPlayerId, menuItem->getTag() - kRPGMapChoicePlayerMenuLayerTagMainMenuPlayer, this->m_selectedSkill->m_dataId);
|
||||
if(!isSuccess)
|
||||
{
|
||||
CCLog("技能使用失败");
|
||||
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
|
||||
RPGDialogLayer *dialog = RPGDialogLayer::create(((CCString*)this->m_stringList->objectForKey("menu_skill_fail"))->getCString(), ((CCString*)this->m_stringList->objectForKey("confirm_exit_ok"))->getCString(), kRPGMapSkillMenuLayerTagDialogOK, winSize.width, winSize.height, this, menu_selector(RPGMapSkillMenuLayer::onDialog));
|
||||
dialog->setTag(kRPGMapSkillMenuLayerTagDialog);
|
||||
this->getParent()->addChild(dialog);
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
CCLog("技能使用成功");
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayerBg, true);
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer, true);
|
||||
this->setVisible(true);
|
||||
|
||||
this->setPlayerSkill(this->m_selectedPlayerId); //刷新正在显示的技能数据
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void RPGMapSkillMenuLayer::onDialog(cocos2d::CCObject *pObject)
|
||||
{
|
||||
this->getParent()->removeChildByTag(kRPGMapSkillMenuLayerTagDialog, true);
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayerBg, true);
|
||||
this->getParent()->removeChildByTag(kRPGMapSceneLayerTagChoicePlayerMenuLayer, true);
|
||||
this->setVisible(true);
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "JsonBox.h"
|
||||
#include "RPGMapRoleSprite.h"
|
||||
#include "RPGBaseSceneLayer.h"
|
||||
#include "RPGResultsLogic.h"
|
||||
|
||||
USING_NS_CC;
|
||||
USING_NS_CC_EXT;
|
||||
@@ -23,19 +24,36 @@ enum RPGMapSkillMenuLayerTag
|
||||
{
|
||||
kRPGMapSkillMenuLayerTagMainMenu = 1,
|
||||
kRPGMapSkillMenuLayerTagMainMenuBack = 2,
|
||||
kRPGMapSkillMenuLayerTagBg = 3
|
||||
|
||||
kRPGMapSkillMenuLayerTagBg = 3,
|
||||
kRPGMapSkillMenuLayerTagItemListTable = 4,
|
||||
kRPGMapSkillMenuLayerTagMainMenuPlayer = 100,
|
||||
kRPGMapSkillMenuLayerTagDialogOK = 5,
|
||||
kRPGMapSkillMenuLayerTagDialog = 86
|
||||
};
|
||||
|
||||
class RPGMapSkillMenuLayer : public CCLayerColor//, CCTableViewDelegate, CCTableViewDataSource
|
||||
class RPGMapSkillMenuLayer : public CCLayerColor, CCTableViewDelegate, CCTableViewDataSource
|
||||
{
|
||||
|
||||
private:
|
||||
CCDictionary* m_stringList;
|
||||
CppSQLite3DB* m_db;
|
||||
|
||||
CCArray* m_skillList;
|
||||
|
||||
bool m_statusIsDefault; //是否为第一次进入状态界面,如果是的话就不播放效果音了
|
||||
|
||||
int m_selectedPlayerId; //选中上面的player的id
|
||||
bool m_enabledPlayerSkill; //是否允许点击技能项,死亡状态、相关异常状态或MP为0时设置为false
|
||||
RPGSkill* m_selectedSkill; //选中的技能
|
||||
|
||||
void onMenu(cocos2d::CCObject *pObject);
|
||||
|
||||
void setPlayerSkill(int dataId);
|
||||
|
||||
void onButton(CCObject* pSender, CCControlEvent event); //点击了items列表的其中一个后触发
|
||||
void onChoicePlayer(CCObject* pObject); //在player选择框中,选中一个player后触发
|
||||
void onDialog(cocos2d::CCObject *pObject);
|
||||
|
||||
public:
|
||||
|
||||
RPGMapSkillMenuLayer();
|
||||
@@ -44,6 +62,19 @@ public:
|
||||
bool init(CCDictionary* stringList, CppSQLite3DB* db, float width, float height);
|
||||
static RPGMapSkillMenuLayer* create(CCDictionary* stringList, CppSQLite3DB* db, float width, float height);
|
||||
|
||||
//CCTableViewDelegate继承自CCScrollViewDelegate
|
||||
virtual void scrollViewDidScroll(CCScrollView* scrollView);
|
||||
virtual void scrollViewDidZoom(CCScrollView* scrollView);
|
||||
|
||||
//点击哪个cell
|
||||
virtual void tableCellTouched(CCTableView* tableView, CCTableViewCell* cell);
|
||||
//每个cell的size
|
||||
virtual CCSize cellSizeForTable(CCTableView *tableView);
|
||||
//生成cell
|
||||
virtual CCTableViewCell* tableCellAtIndex(CCTableView *tableView, unsigned int idx);
|
||||
//cell的数量
|
||||
virtual unsigned int numberOfCellsInTableView(CCTableView *tableView);
|
||||
|
||||
};
|
||||
|
||||
#endif /* defined(__OzgGameRPG__RPGMapSkillMenuLayer__) */
|
||||
|
||||
@@ -11,12 +11,6 @@
|
||||
#include "RPGMapSceneLayer.h"
|
||||
#include "OzgCCUtility.h"
|
||||
|
||||
//获取一个player的详细数据
|
||||
#define PLAYER_DETAIL_QUERY "select p.*, arms.name_cns as arms_name, armor.name_cns as armor_name from player as p left join items as arms on p.items_id_arms = arms.id left join items as armor on p.items_id_armor = armor.id where p.id = %i"
|
||||
|
||||
//查询一个角色的技能
|
||||
#define SKILL_QUERY "select * from skill where id in(%s)"
|
||||
|
||||
RPGMapStatusMenuLayer::RPGMapStatusMenuLayer()
|
||||
{
|
||||
|
||||
@@ -27,7 +21,7 @@ RPGMapStatusMenuLayer::~RPGMapStatusMenuLayer()
|
||||
this->m_stringList->release();
|
||||
this->m_skillList->release();
|
||||
|
||||
// CCLog("RPGMapStatusMenuLayer 释放");
|
||||
CCLog("RPGMapStatusMenuLayer 释放");
|
||||
}
|
||||
|
||||
bool RPGMapStatusMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB *db, float width, float height)
|
||||
@@ -70,14 +64,25 @@ bool RPGMapStatusMenuLayer::init(cocos2d::CCDictionary *stringList, CppSQLite3DB
|
||||
CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY);
|
||||
while(!query.eof())
|
||||
{
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
CCSprite *playerSprite = NULL;
|
||||
if(query.getIntField("hp") <= 0)
|
||||
{
|
||||
//死亡
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_2.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(10));
|
||||
}
|
||||
else
|
||||
{
|
||||
//正常
|
||||
CCArray *frames = OzgCCUtility::createSpriteFrames(CCString::createWithFormat("%s_0.png", query.getStringField("tex_prefix"))->getCString(), 3, 4);
|
||||
playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(1));
|
||||
}
|
||||
|
||||
CCSprite *playerSprite = CCSprite::createWithSpriteFrame((CCSpriteFrame*)frames->objectAtIndex(1));
|
||||
CCMenuItemSprite *player = (CCMenuItemSprite*)mainMenu->getChildByTag(kRPGMapStatusMenuLayerTagMainMenuPlayer + query.getIntField("id"));
|
||||
if(!player)
|
||||
{
|
||||
player = CCMenuItemSprite::create(playerSprite, playerSprite, this, menu_selector(RPGMapStatusMenuLayer::onMenu));
|
||||
player->cocos2d::CCNode::setPosition(ccp(playerX, 560));
|
||||
player->setPosition(ccp(playerX, 560));
|
||||
player->setScale(2);
|
||||
player->setTag(kRPGMapStatusMenuLayerTagMainMenuPlayer + query.getIntField("id"));
|
||||
mainMenu->addChild(player);
|
||||
@@ -141,9 +146,9 @@ void RPGMapStatusMenuLayer::onMenu(cocos2d::CCObject *pObject)
|
||||
break;
|
||||
}
|
||||
|
||||
//player status
|
||||
if(menuItem->getTag() >= kRPGMapStatusMenuLayerTagMainMenuPlayer && menuItem->getTag() <= kRPGMapStatusMenuLayerTagMainMenuPlayer + 99)
|
||||
{
|
||||
// CCLog("点击了上面4个player的其中一个");
|
||||
CCMenu *mainMenu = (CCMenu*)this->getChildByTag(kRPGMapMenuLayerTagMainMenu);
|
||||
|
||||
CppSQLite3Query query = this->m_db->execQuery(PLAYER_QUERY);
|
||||
@@ -230,8 +235,9 @@ void RPGMapStatusMenuLayer::setStatusPlayer(int dataId)
|
||||
RPGSkill *skill = RPGSkill::create();
|
||||
skill->m_dataId = skillQuery.getIntField("id");
|
||||
skill->m_name = skillQuery.getStringField("name_cns");
|
||||
skill->m_mp = skillQuery.getIntField("mp");
|
||||
skill->m_MP = skillQuery.getIntField("mp");
|
||||
skill->m_skillAttack = skillQuery.getIntField("skill_attack");
|
||||
skill->m_type = skillQuery.getIntField("type");
|
||||
|
||||
this->m_skillList->addObject(skill);
|
||||
|
||||
@@ -338,7 +344,7 @@ CCTableViewCell* RPGMapStatusMenuLayer::tableCellAtIndex(CCTableView *tableView,
|
||||
|
||||
RPGSkill *skillData = (RPGSkill*)this->m_skillList->objectAtIndex(index);
|
||||
|
||||
CCLabelTTF *textLab = CCLabelTTF::create(CCString::createWithFormat("%s (%i)", skillData->m_name.c_str(), skillData->m_mp)->getCString(), "Arial", 20, CCSizeMake(200, 25), kCCTextAlignmentLeft);
|
||||
CCLabelTTF *textLab = CCLabelTTF::create(CCString::createWithFormat("%s (%i)", skillData->m_name.c_str(), skillData->m_MP)->getCString(), "Arial", 20, CCSizeMake(200, 25), kCCTextAlignmentLeft);
|
||||
textLab->setPosition(ccp(x, 0));
|
||||
cell->addChild(textLab);
|
||||
|
||||
|
||||
@@ -8,15 +8,15 @@
|
||||
|
||||
#include "RPGResultsLogic.h"
|
||||
|
||||
//获取一个player的数据
|
||||
#define PLAYER_DETAIL_QUERY "select * from player where id = %i"
|
||||
|
||||
//使用道具后player的数据更新
|
||||
#define ITEMS_USE_UPDATE "update player set %s = %i where id = %i"
|
||||
//执行操作后player的数据更新
|
||||
#define PLAYER_UPDATE "update player set %s = %i where id = %i"
|
||||
|
||||
//使用道具后现有道具的变化
|
||||
#define SAVEDATA_ITEMS_UPDATE "update save_data set items = '%s' where id = 1"
|
||||
|
||||
//查询一个技能的明细
|
||||
#define SKILL_DETAIL_QUERY "select * from skill where id = %i"
|
||||
|
||||
void RPGResultsLogic::deductionsItems(CppSQLite3DB *db, int itemsId)
|
||||
{
|
||||
CppSQLite3Query query = db->execQuery(SAVEDATA_QUERY);
|
||||
@@ -104,7 +104,7 @@ bool RPGResultsLogic::useItems(CppSQLite3DB* db, int playerId, int itemsId)
|
||||
|
||||
//使用道具
|
||||
{
|
||||
CCString *sql = CCString::createWithFormat(ITEMS_USE_UPDATE, field.c_str(), results, playerId);
|
||||
CCString *sql = CCString::createWithFormat(PLAYER_UPDATE, field.c_str(), results, playerId);
|
||||
db->execDML(sql->getCString());
|
||||
|
||||
CCLog("%s", sql->getCString());
|
||||
@@ -116,3 +116,79 @@ bool RPGResultsLogic::useItems(CppSQLite3DB* db, int playerId, int itemsId)
|
||||
CCLog("对player%d 使用了一个道具%d", playerId, itemsId);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool RPGResultsLogic::useSkillCure(CppSQLite3DB *db, int srcPlayerId, int targetPlayerId, int srcSkillId)
|
||||
{
|
||||
RPGPlayer *srcPlayerData;
|
||||
RPGSkill *srcSkillData;
|
||||
|
||||
RPGPlayer *targetPlayerData;
|
||||
|
||||
//查询使用技能的player
|
||||
CppSQLite3Query srcPlayerQuery = db->execQuery(CCString::createWithFormat(PLAYER_DETAIL_QUERY, srcPlayerId)->getCString());
|
||||
while(!srcPlayerQuery.eof())
|
||||
{
|
||||
srcPlayerData = RPGPlayer::create();
|
||||
srcPlayerData->m_dataId = srcPlayerQuery.getIntField("id");
|
||||
srcPlayerData->m_maxMP = srcPlayerQuery.getIntField("max_mp");
|
||||
srcPlayerData->m_MP = srcPlayerQuery.getIntField("mp");
|
||||
srcPlayerData->m_skillAttack = srcPlayerQuery.getFloatField("skill_attack");
|
||||
|
||||
srcPlayerQuery.nextRow();
|
||||
}
|
||||
srcPlayerQuery.finalize();
|
||||
|
||||
//查询使用的技能
|
||||
CppSQLite3Query srcSkillQuery = db->execQuery(CCString::createWithFormat(SKILL_DETAIL_QUERY, srcSkillId)->getCString());
|
||||
while(!srcSkillQuery.eof())
|
||||
{
|
||||
srcSkillData = RPGSkill::create();
|
||||
srcSkillData->m_dataId = srcSkillQuery.getIntField("id");
|
||||
srcSkillData->m_MP = srcSkillQuery.getIntField("mp");
|
||||
srcSkillData->m_name = srcSkillQuery.getStringField("name_cns");
|
||||
srcSkillData->m_skillAttack = srcSkillQuery.getFloatField("skill_attack");
|
||||
|
||||
srcSkillQuery.nextRow();
|
||||
}
|
||||
srcSkillQuery.finalize();
|
||||
|
||||
//查询目标player
|
||||
CppSQLite3Query targetPlayerQuery = db->execQuery(CCString::createWithFormat(PLAYER_DETAIL_QUERY, targetPlayerId)->getCString());
|
||||
while(!targetPlayerQuery.eof())
|
||||
{
|
||||
targetPlayerData = RPGPlayer::create();
|
||||
targetPlayerData->m_dataId = targetPlayerQuery.getIntField("id");
|
||||
targetPlayerData->m_maxHP = targetPlayerQuery.getIntField("max_hp");
|
||||
targetPlayerData->m_HP = targetPlayerQuery.getIntField("hp");
|
||||
|
||||
targetPlayerQuery.nextRow();
|
||||
}
|
||||
targetPlayerQuery.finalize();
|
||||
|
||||
//执行逻辑
|
||||
if(srcPlayerData && srcSkillData && targetPlayerData)
|
||||
{
|
||||
//计算player时候技能后的效果值
|
||||
int targetResults = RPGComputingResults::skillCureResults(srcPlayerData->m_skillAttack, srcSkillData->m_skillAttack);
|
||||
targetPlayerData->m_HP += targetResults;
|
||||
|
||||
CCLog("player %i 回复了 %i HP", targetPlayerId, targetResults);
|
||||
|
||||
//超过HP最大值
|
||||
if(targetPlayerData->m_HP > targetPlayerData->m_maxHP)
|
||||
targetPlayerData->m_HP = targetPlayerData->m_maxHP;
|
||||
db->execDML(CCString::createWithFormat(PLAYER_UPDATE, "hp", targetPlayerData->m_HP, targetPlayerData->m_dataId)->getCString());
|
||||
|
||||
//扣减使用者的MP
|
||||
srcPlayerData->m_MP -= srcSkillData->m_MP;
|
||||
if(srcPlayerData->m_MP < 0)
|
||||
srcPlayerData->m_MP = 0;
|
||||
|
||||
CCLog("player %i 消耗了 %i MP", srcPlayerId, srcSkillData->m_MP);
|
||||
|
||||
db->execDML(CCString::createWithFormat(PLAYER_UPDATE, "mp", srcPlayerData->m_MP, srcPlayerData->m_dataId)->getCString());
|
||||
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,8 @@ public:
|
||||
static void deductionsItems(CppSQLite3DB* db, int itemsId); //扣减道具数
|
||||
static bool useItems(CppSQLite3DB* db, int playerId, int itemsId); //使用道具,返回成功或失败
|
||||
|
||||
static bool useSkillCure(CppSQLite3DB* db, int srcPlayerId, int targetPlayerId, int srcSkillId); //使用回复技能
|
||||
|
||||
};
|
||||
|
||||
#endif /* defined(__OzgGameRPG__RPGResultsLogic__) */
|
||||
|
||||
@@ -9,7 +9,7 @@ ozg game — 单机版RPG
|
||||
声音文件来自 http://www.66rpg.com/type.php?t=17
|
||||
|
||||
|
||||
目前只在iOS平台下进行测试,战斗画面的攻击、技能、道具,地图界面的技能、道具均未完成。
|
||||
目前只在iOS平台下进行测试,战斗画面的攻击、技能、道具,地图界面的装备均未完成。
|
||||
|
||||
每次更新数据库都需要把模拟器里面的数据库删除。
|
||||
|
||||
|
||||
Binary file not shown.
@@ -38,12 +38,16 @@
|
||||
<string>退出</string>
|
||||
<key>menu_skill</key>
|
||||
<string>技能</string>
|
||||
<key>menu_skill_choice</key>
|
||||
<string>对谁使用[%s]技能呢?</string>
|
||||
<key>menu_skill_fail</key>
|
||||
<string>技能使用失败</string>
|
||||
<key>menu_status</key>
|
||||
<string>状态</string>
|
||||
<key>menu_items</key>
|
||||
<string>道具</string>
|
||||
<key>menu_items_choice</key>
|
||||
<string>对谁使用[%s]呢?</string>
|
||||
<string>对谁使用[%s]道具呢?</string>
|
||||
<key>menu_items_fail</key>
|
||||
<string>道具使用失败</string>
|
||||
<key>menu_equip</key>
|
||||
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
Reference in New Issue
Block a user