mirror of
https://github.com/wu736139669/SmallGame_Cocos2dx.git
synced 2026-08-05 06:23:09 +00:00
376 lines
11 KiB
C++
376 lines
11 KiB
C++
//
|
|
// GameItemManager.cpp
|
|
// OnceAgain
|
|
//
|
|
// Created by mac on 14-4-4.
|
|
//
|
|
//
|
|
|
|
#include "GameItemManager.h"
|
|
#include "NetPacket.h"
|
|
#include "NetHttpClient.h"
|
|
#include "GameInfoManager.h"
|
|
#include "PlayerInfoManager.h"
|
|
//#include "DBUtil.h"
|
|
#include "spine/extension.h"
|
|
#include "DataManager.h"
|
|
#include "RandomUtil.h"
|
|
#include "GameShare_Global.h"
|
|
#include "StringUtil.h"
|
|
#include "TaikoDefine.h"
|
|
#include "GameFruitDefine.h"
|
|
#include "RightTouchDefine.h"
|
|
CItemMan::CItemMan():mnGameOverBuyItemCounter(0)
|
|
{
|
|
|
|
}
|
|
CItemMan::~CItemMan()
|
|
{
|
|
// this->flush();
|
|
}
|
|
|
|
void CItemMan::reset()
|
|
{
|
|
|
|
}
|
|
void CItemMan::resetInside()
|
|
{
|
|
mnGameOverBuyItemCounter = 0;
|
|
clrSuperItem();
|
|
}
|
|
void CItemMan::parseNetData(CBasePacket* pBasePacket)
|
|
{
|
|
CResponsePacket* pPk = dynamic_cast<CResponsePacket*>(pBasePacket);
|
|
unsigned int unMsgCode = pPk->getMsgCode();
|
|
// CSJson::Value root = CJsonHelper::getJsonFromString(pPk->getContent().c_str());
|
|
CSJson::Value root ;
|
|
if(!CJsonHelper::getJsonFromString(pPk->getContent().c_str(),root))
|
|
return ;
|
|
switch (unMsgCode)
|
|
{
|
|
case eNetMsgItemSysGetAll:
|
|
{
|
|
updataTemplateData(pPk->getContent().c_str());
|
|
CDataManager::GetInstance().wirteToFile(TempFileItemSysGetAll,pPk->getContent());
|
|
}
|
|
break;
|
|
case eNetMsgItemSysBuy:{
|
|
CSJson::Value& val = root[0];
|
|
int nItemId = val["propsid"].asInt();
|
|
sItemData* itemData = this->getChgTempData(nItemId);
|
|
if (itemData) {
|
|
if (itemData->ItemType == eItemTypeSuper)
|
|
{
|
|
addSuperItem(*itemData);
|
|
}else
|
|
{
|
|
useItem(nItemId,true);
|
|
}
|
|
|
|
CPlayerInfoMan::sharedInstance().getPlayerInfo().nMoney -= itemData->CurrencyValue;
|
|
}
|
|
}
|
|
break;
|
|
case eNetMsgItemSysGetByGame:
|
|
{
|
|
for (int i=0; i<root.size(); i++) {
|
|
CSJson::Value& val = root[i];
|
|
sGameInfoData* data;
|
|
int gameId = val["gameid"].asInt();
|
|
int itemId = val["propsid"].asInt();
|
|
data = CGameInfoMan::sharedInstance().getChgTempData(gameId);
|
|
if (data) {
|
|
bool isNew = true;
|
|
for (int j=0; j<data->itemId.size(); j++) {
|
|
if (data->itemId[j] == itemId) {
|
|
isNew =false;
|
|
}
|
|
}
|
|
if (isNew) {
|
|
data->itemId.push_back(itemId);
|
|
}
|
|
|
|
}else
|
|
{
|
|
sGameInfoData data;
|
|
data.gameId = gameId;
|
|
data.itemId.push_back(itemId);
|
|
CGameInfoMan::sharedInstance().getMoneyChgTmpData().push_back(data);
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case eNetMsgItemSysGetPlayerPackage:
|
|
{
|
|
clrItem();
|
|
for (int i=0; i < root.size(); i++) {
|
|
CSJson::Value& val = root[i];
|
|
SClientItemData Info;
|
|
Info.fNum = val["propsnum"].asInt();
|
|
Info.pData = this->getChgTempData(val["propsid"].asInt());
|
|
addItem(Info);
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
sItemData* CItemMan::getChgTempData(int nId)
|
|
{
|
|
for (int i = 0; i < mVecItemSystemData.size(); ++i)
|
|
{
|
|
if(mVecItemSystemData[i].ItemId == nId)
|
|
{
|
|
return &mVecItemSystemData[i];
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
void CItemMan::addItem(SClientItemData& item)
|
|
{
|
|
mVecPackageItem.push_back(item);
|
|
}
|
|
|
|
SClientItemData* CItemMan::getItem(int nItemId)
|
|
{
|
|
for (int i = 0; i < mVecPackageItem.size(); ++i)
|
|
{
|
|
if(nItemId == mVecPackageItem[i].pData->ItemId)
|
|
return &mVecPackageItem[i];
|
|
}
|
|
return NULL;
|
|
}
|
|
void CItemMan::releaseItem(int nItemId)
|
|
{
|
|
for (int i = 0; i < mVecPackageItem.size(); ++i)
|
|
{
|
|
if(nItemId == mVecPackageItem[i].pData->ItemId)
|
|
{
|
|
SClientItemData& s = mVecPackageItem[i];
|
|
s.fNum--;
|
|
if (s.fNum <= 0)
|
|
{
|
|
mVecPackageItem.erase(mVecPackageItem.begin() + i);
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|
|
void CItemMan::clrItem()
|
|
{
|
|
mVecPackageItem.clear();
|
|
}
|
|
void CItemMan::addSuperItem(sItemData& item)
|
|
{
|
|
SClientItemData data;
|
|
data.pData = &item;
|
|
data.fExtra1 = 0.f;
|
|
mVecSuperItem.push_back(data);
|
|
}
|
|
void CItemMan::clrSuperItem()
|
|
{
|
|
mVecSuperItem.clear();
|
|
}
|
|
SClientItemData* CItemMan::getSuperItem(int nItemId)
|
|
{
|
|
for (int i = 0; i < mVecSuperItem.size(); ++i)
|
|
{
|
|
if(nItemId == mVecSuperItem[i].pData->ItemId)
|
|
return &mVecSuperItem[i];
|
|
}
|
|
return NULL;
|
|
}
|
|
bool CItemMan::removeSuperItem(int nItemId)
|
|
{
|
|
for (int i = 0; i < mVecSuperItem.size(); ++i)
|
|
{
|
|
if(nItemId == mVecSuperItem[i].pData->ItemId){
|
|
mVecSuperItem.erase(mVecSuperItem.begin() + i);
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
int CItemMan::randSuperItem()
|
|
{
|
|
vector<int> vecRand;
|
|
vecRand.push_back(ItemTag_11);
|
|
vecRand.push_back(ItemTag_12);
|
|
vecRand.push_back(ItemTag_13);
|
|
if(GameShare_Global::shareGlobal()->gameType != Game_Fruit)
|
|
vecRand.push_back(ItemTag_14);
|
|
if(GameShare_Global::shareGlobal()->gameType == Game_Fruit)
|
|
vecRand.push_back(ItemTag_17);
|
|
int nIndex = CRandomUtil::RandomRange(0,vecRand.size()-1);
|
|
return vecRand[nIndex];
|
|
}
|
|
bool CItemMan::useItem(int nItemId,bool bForceUse)
|
|
{
|
|
sItemData* itemData = this->getChgTempData(nItemId);
|
|
if(itemData == NULL)
|
|
return false;
|
|
if (itemData) {
|
|
if (itemData->ItemType == eItemTypeSuper)
|
|
{
|
|
SClientItemData* pSuperItem= getSuperItem(nItemId);
|
|
if(pSuperItem == NULL)
|
|
return false;
|
|
if (pSuperItem){
|
|
switch(nItemId){
|
|
case ItemTag_15:{
|
|
}
|
|
break;
|
|
case ItemTag_16:{
|
|
}
|
|
break;
|
|
case ItemTag_11:{
|
|
removeSuperItem(nItemId);
|
|
}
|
|
break;
|
|
case ItemTag_12:{
|
|
e_GameType eType = GameShare_Global::shareGlobal()->gameType;
|
|
if (eType == Game_TaiKo){
|
|
CTKData.setScore(500000);
|
|
}else if (eType == Game_Fruit){
|
|
CFrData.setScore(500000);
|
|
}else if (eType == Game_Jelly){
|
|
CRtData.setScore(500000);
|
|
}
|
|
removeSuperItem(nItemId);
|
|
}
|
|
break;
|
|
case ItemTag_14:{
|
|
pSuperItem->fExtra1 += 1;
|
|
if(pSuperItem->fExtra1 >= 2){
|
|
removeSuperItem(nItemId);
|
|
}
|
|
}
|
|
break;
|
|
case ItemTag_13:{
|
|
sStrengthenLv* pStreng = NULL;
|
|
e_GameType eType = GameShare_Global::shareGlobal()->gameType;
|
|
if (eType == Game_TaiKo){
|
|
pStreng = CStrengthenMan::sharedInstance().getLvInfoByLvAndId(StrengThenTag_14,30);
|
|
if (pStreng){
|
|
CTKData.setEffectStrengthenVal(eType,StrengThenTag_14,CStringUtil::ToDouble(pStreng->strengthenValue));
|
|
}
|
|
pStreng = CStrengthenMan::sharedInstance().getLvInfoByLvAndId(StrengThenTag_15,30);
|
|
if (pStreng){
|
|
CTKData.setEffectStrengthenVal(eType,StrengThenTag_15,CStringUtil::ToDouble(pStreng->strengthenValue));
|
|
}
|
|
pStreng = CStrengthenMan::sharedInstance().getLvInfoByLvAndId(StrengThenTag_16,30);
|
|
if (pStreng){
|
|
CTKData.setEffectStrengthenVal(eType,StrengThenTag_16,CStringUtil::ToDouble(pStreng->strengthenValue));
|
|
}
|
|
removeSuperItem(nItemId);
|
|
}else if(eType == Game_Jelly){
|
|
pStreng = CStrengthenMan::sharedInstance().getLvInfoByLvAndId(StrengThenTag_3,30);
|
|
if (pStreng){
|
|
CRtData.setEffectStrengthenVal(eType,StrengThenTag_3,CStringUtil::ToDouble(pStreng->strengthenValue));
|
|
|
|
}
|
|
pStreng = CStrengthenMan::sharedInstance().getLvInfoByLvAndId(StrengThenTag_2,30);
|
|
if (pStreng){
|
|
CRtData.setEffectStrengthenVal(eType,StrengThenTag_2,CStringUtil::ToDouble(pStreng->strengthenValue));
|
|
}
|
|
pStreng = CStrengthenMan::sharedInstance().getLvInfoByLvAndId(StrengThenTag_4,30);
|
|
if (pStreng){
|
|
CRtData.setEffectStrengthenVal(eType,StrengThenTag_4,CStringUtil::ToDouble(pStreng->strengthenValue));
|
|
}
|
|
removeSuperItem(nItemId);
|
|
}else if (eType == Game_Fruit){
|
|
pStreng = CStrengthenMan::sharedInstance().getLvInfoByLvAndId(StrengThenTag_5,30);
|
|
if (pStreng){
|
|
CFrData.setEffectStrengthenVal(eType,StrengThenTag_5,CStringUtil::ToDouble(pStreng->strengthenValue));
|
|
}
|
|
pStreng = CStrengthenMan::sharedInstance().getLvInfoByLvAndId(StrengThenTag_6,30);
|
|
if (pStreng){
|
|
CFrData.setEffectStrengthenVal(eType,StrengThenTag_6,CStringUtil::ToDouble(pStreng->strengthenValue));
|
|
}
|
|
pStreng = CStrengthenMan::sharedInstance().getLvInfoByLvAndId(StrengThenTag_7,30);
|
|
if (pStreng){
|
|
CFrData.setEffectStrengthenVal(eType,StrengThenTag_7,CStringUtil::ToDouble(pStreng->strengthenValue));
|
|
}
|
|
removeSuperItem(nItemId);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}else
|
|
{
|
|
SClientItemData* pItem= getItem(nItemId);
|
|
if(pItem == NULL && !bForceUse)
|
|
return false;
|
|
if (GameShare_Global::shareGlobal()->gameType == Game_Jelly){
|
|
CRtData.addEffectByItemId(nItemId);
|
|
}
|
|
else if(GameShare_Global::shareGlobal()->gameType == Game_Fruit){
|
|
CFrData.addEffectByItemId(nItemId);
|
|
}else if (GameShare_Global::shareGlobal()->gameType == Game_TaiKo){
|
|
CTKData.addEffectByItemId(nItemId);
|
|
}
|
|
releaseItem(nItemId);
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
void CItemMan::RequestGetAllItem()
|
|
{
|
|
if(CDataManager::GetInstance().readTemplateData(TempFileItemSysGetAll,this))
|
|
return;
|
|
NetHttpClient::sendHttpRequest(eNetMsgTypeItemSys, eNetMsgItemSysGetAll);
|
|
//
|
|
// string fullDBPath = CCFileUtils::sharedFileUtils()->getWritablePath() + "game.db";
|
|
// DBUtil::initDB(fullDBPath.c_str());
|
|
// if(DBUtil::tableIsExist("tabItemSysGetAll"))
|
|
// {
|
|
// DBUtil::closeDB();
|
|
// }else
|
|
// {
|
|
// string createTableSql = "create table tabItemSysGetAll (propsid integer primary key autoincrement,propstype integer,propsname varchar[36],propsdetail varchar[256],propsimg integer,currencyid integer,currencyvalue integer);";
|
|
// DBUtil::createTable(createTableSql.c_str(),"tabItemSysGetAll");
|
|
// DBUtil::closeDB();
|
|
// NetHttpClient::sendHttpRequest(eNetMsgTypeItemSys, eNetMsgItemSysGetAll);
|
|
// }
|
|
}
|
|
void CItemMan::updataTemplateData(const char* str)
|
|
{
|
|
CSJson::Value root ;
|
|
if(!CJsonHelper::getJsonFromString(str,root))
|
|
return ;
|
|
mVecItemSystemData.clear();
|
|
for (int i = 0; i < root.size(); ++i){
|
|
sItemData data;
|
|
CSJson::Value& val = root[i];
|
|
data.ItemId = val["propsid"].asInt();
|
|
data.ItemType = val["propstype"].asInt();
|
|
data.ItemName = val["propsname"].asCString();
|
|
data.ItemDetail = val["propsdetail"].asCString();
|
|
data.ItemImg = val["propsimg"].asInt();
|
|
data.CurrencyId = val["currencyid"].asInt();
|
|
data.CurrencyValue = val["currencyvalue"].asInt();
|
|
mVecItemSystemData.push_back(data);
|
|
}
|
|
}
|
|
void CItemMan::RequestGetItemInfoByGame(int gameId)
|
|
{
|
|
CSJson::Value msg_body;
|
|
msg_body["gameid"] = CSJson::Value(gameId);
|
|
NetHttpClient::sendHttpRequest(eNetMsgTypeItemSys, eNetMsgItemSysGetByGame,&msg_body);
|
|
}
|
|
void CItemMan::RequestBuyItem(int itemId)
|
|
{
|
|
CSJson::Value msg_body;
|
|
msg_body["propsid"] = CSJson::Value(itemId);
|
|
NetHttpClient::sendHttpRequest(eNetMsgTypeItemSys, eNetMsgItemSysBuy,&msg_body);
|
|
}
|
|
void CItemMan::RequestGetPackItem()
|
|
{
|
|
//CSJson::Value msg_body;
|
|
NetHttpClient::sendHttpRequest(eNetMsgTypeItemSys, eNetMsgItemSysGetPlayerPackage);
|
|
} |