mirror of
https://github.com/wu736139669/SmallGame_Cocos2dx.git
synced 2026-08-05 06:23:09 +00:00
406 lines
11 KiB
C++
406 lines
11 KiB
C++
//
|
|
// TaskManager.cpp
|
|
// OnceAgain
|
|
//
|
|
// Created by mac on 14-4-3.
|
|
//
|
|
//
|
|
|
|
#include "TaskManager.h"
|
|
#include "NetPacket.h"
|
|
#include "NetHttpClient.h"
|
|
#include "PlayerInfoManager.h"
|
|
#include "GameShare_Msg.h"
|
|
#include "GameShare_Global.h"
|
|
#include "GameInfoManager.h"
|
|
#include "Scene_GameList.h"
|
|
#include "GameInfoManager.h"
|
|
#include "TaskDefine.h"
|
|
USING_NS_CC;
|
|
//////////////////////////////////////////////////////////////////////////
|
|
//
|
|
bool CEveryDayCell::isComplete()
|
|
{
|
|
if (mnTaskComplete)
|
|
return true;
|
|
return false;
|
|
}
|
|
void CEveryDayCell::process()
|
|
{
|
|
|
|
}
|
|
//////////////////////////////////////////////////////////////////////////
|
|
CTaskMan::CTaskMan()
|
|
{
|
|
this->reset();
|
|
}
|
|
CTaskMan::~CTaskMan()
|
|
{
|
|
// this->flush();
|
|
}
|
|
|
|
void CTaskMan::reset()
|
|
{
|
|
mVecWeekTask.clear();
|
|
mVecTaskMedalData.clear();
|
|
mVecTaskSystemData.clear();
|
|
}
|
|
void CTaskMan::resetInside()
|
|
{
|
|
clrEveryDayTask(false);
|
|
}
|
|
void CTaskMan::parseNetData(CBasePacket* pBasePacket)
|
|
{
|
|
CResponsePacket* pPk = dynamic_cast<CResponsePacket*>(pBasePacket);
|
|
unsigned int unMsgCode = pPk->getMsgCode();
|
|
CSJson::Value root ;
|
|
if(!CJsonHelper::getJsonFromString(pPk->getContent().c_str(),root))
|
|
return;
|
|
|
|
switch (unMsgCode)
|
|
{
|
|
case eNetMsgMissionSysDayTask:
|
|
{
|
|
|
|
mVecTaskSystemData.clear();
|
|
for (int i = 0; i < root.size(); ++i)
|
|
{
|
|
|
|
sTaskData data;
|
|
CSJson::Value& val = root[i];
|
|
|
|
data.TaskId = val["taskid"].asInt();
|
|
data.TaskName = val["taskname"].asCString();
|
|
data.TaskDetail = val["taskdetail"].asCString();
|
|
int imgId = val["taskimg"].asInt();
|
|
CCString taskStr;
|
|
taskStr.initWithFormat("%d",imgId);
|
|
data.TaskImg = taskStr.m_sString;
|
|
data.TaskRewardType = val["taskrewardtype"].asInt();
|
|
data.TaskRewardId = val["taskrewardid"].asInt();
|
|
data.TaskRewardValue = val["taskrewardvalue"].asInt();
|
|
mVecTaskSystemData.push_back(data);
|
|
}
|
|
//登陆.
|
|
// GameShare_Global::shareGlobal()->loginType = LoginType_QQ;
|
|
CCScene *scene_GameList = Scene_GameList::scene();
|
|
CCDirector::sharedDirector()->pushScene(CCTransitionFade::create(0.4, scene_GameList));
|
|
}
|
|
break;
|
|
case eNetMsgMissionSysTask:
|
|
{
|
|
CSJson::Value& val = root[0];
|
|
sTaskData *data = this->getChgTempData(val["taskid"].asInt());
|
|
if (data->TaskRewardId == 4) {
|
|
CPlayerInfoMan::sharedInstance().getPlayerInfo().nMoney += data->TaskRewardValue;
|
|
}
|
|
if (data->TaskRewardId == 5) {
|
|
CPlayerInfoMan::sharedInstance().getPlayerInfo().nGem += data->TaskRewardValue;
|
|
}
|
|
if (data->TaskRewardId == 3) {
|
|
CPlayerInfoMan::sharedInstance().getPlayerInfo().nPower += data->TaskRewardValue;
|
|
}
|
|
}
|
|
break;
|
|
case eNetMsgMissionSysDayTaskTemp:
|
|
{
|
|
mVecTaskMedalData.clear();
|
|
for (int i = 0; i < root.size(); ++i)
|
|
{
|
|
SMeDalTaskData data;
|
|
CSJson::Value& val = root[i];
|
|
data.TaskId = val["taskid"].asInt();
|
|
data.TaskName = val["taskname"].asCString();
|
|
data.TaskDetail = val["taskdetail"].asCString();
|
|
|
|
data.TaskImg = val["taskimg"].asInt();
|
|
data.TaskRewardType = val["taskrewardtype"].asInt();
|
|
data.TaskRewardId = val["taskrewardid"].asInt();
|
|
data.TaskRewardValue = val["taskrewardvalue"].asInt();
|
|
data.TaskDifficulty = val["taskdifficulty"].asInt();
|
|
data.TaskValue = val["taskvalue"].asInt();
|
|
data.TaskCatelog = val["taskcatelog"].asInt();
|
|
data.TaskRange = val["taskisheap"].asInt();
|
|
mVecTaskMedalData.push_back(data);
|
|
|
|
}
|
|
}
|
|
break;
|
|
case eNetMsgMissionSysDayTaskSelect:{
|
|
|
|
}
|
|
break;
|
|
case eNetMsgMissionSysDayTaskComplate:
|
|
case eNetMsgEveryDay:
|
|
{
|
|
VEC_EVERYDAY vecOld = getEveryDayTaskVec();
|
|
clrEveryDayTask();
|
|
|
|
CSJson::Value* ptempRoot = &root;
|
|
if (unMsgCode == eNetMsgMissionSysDayTaskComplate)
|
|
{
|
|
ptempRoot = &root["arr"];
|
|
}
|
|
CSJson::Value& tempRoot = *ptempRoot;
|
|
|
|
for (int i = 0; i < tempRoot.size(); i++) {
|
|
|
|
CSJson::Value& val = tempRoot[i];
|
|
int isGet = val["taskcomplete"].asInt();
|
|
int kid = val["taskid"].asInt();
|
|
int processVal = val["taskcurrentvalue"].asInt();
|
|
SMeDalTaskData *medalinfo = CTaskMan::sharedInstance().getMedalTaskDataById(kid);
|
|
CEveryDayCell cell;
|
|
cell.setData(medalinfo);
|
|
cell.setCounter(processVal);
|
|
cell.setTaskComplete(isGet);
|
|
cell.setTaskId(kid);
|
|
cell.setGameId(GameShare_Global::shareGlobal()->gameType);
|
|
bool isExist = false;
|
|
int k = 0;
|
|
for (; k < vecOld.size(); ++k){
|
|
if(vecOld[k].getTaskId() == cell.getTaskId()&&vecOld[k].getGameId() == cell.getGameId()){
|
|
isExist = true;
|
|
break;
|
|
}
|
|
}
|
|
if (isExist){
|
|
//clent save data
|
|
//cell.setCounter(vecOld[k].getCounter());
|
|
cell.setPlayAni(vecOld[k].getPlayAni());
|
|
}else{
|
|
if (cell.isComplete()){
|
|
cell.setPlayAni(false);
|
|
}
|
|
}
|
|
addEveryDayTask(cell);
|
|
}
|
|
}
|
|
break;
|
|
case eNetMsgMissionSysWeek:{
|
|
mVecWeekTask.clear();
|
|
for (int i = 0; i < root.size(); ++i) {
|
|
sWeekTask data;
|
|
CSJson::Value& val = root[i];
|
|
data.taskId = val["weektaskid"].asInt();
|
|
data.typeId = val["weektaskcatalog"].asInt();
|
|
|
|
data.taskName = val["weektaskname"].asCString();
|
|
if (data.typeId == 20 || data.typeId == 21 || data.typeId == 22) {
|
|
CCString str;
|
|
sGameInfoData* gameData = CGameInfoMan::sharedInstance().getChgTempData(val["weektaskappendvalue"].asInt());
|
|
str.initWithFormat(val["weektaskname"].asCString(),gameData->gameName.c_str());
|
|
data.taskName = str.getCString();
|
|
}
|
|
data.taskValue = val["weektaskvalue"].asInt();
|
|
data.taskAppendvalue = val["weektaskcompletevalue"].asInt();
|
|
data.completeValue = val["isweektaskcomplete"].asInt();
|
|
data.haveGetReward = val["weekgetreward"].asInt();
|
|
mVecWeekTask.push_back(data);
|
|
}
|
|
|
|
}
|
|
//发出消息.
|
|
CCNotificationCenter::sharedNotificationCenter()->postNotification(kGetWeekTask, NULL);
|
|
break;
|
|
default:
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
sTaskData* CTaskMan::getChgTempData(int nId)
|
|
{
|
|
for (int i = 0; i < mVecTaskSystemData.size(); ++i)
|
|
{
|
|
if(mVecTaskSystemData[i].TaskId == nId)
|
|
{
|
|
return &mVecTaskSystemData[i];
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
SMeDalTaskData* CTaskMan::getMedalTaskDataById(int nTaskId){
|
|
for (int i = 0; i < mVecTaskMedalData.size(); ++i){
|
|
if(mVecTaskMedalData[i].TaskId == nTaskId){
|
|
return &mVecTaskMedalData[i];
|
|
}
|
|
}
|
|
return NULL;
|
|
}
|
|
void CTaskMan::addEveryDayTask(CEveryDayCell& Cell)
|
|
{
|
|
// CEveryDayCell* p = getEveryDayTask(Cell.getGameId(),Cell.getData()->TaskCatelog);
|
|
// if (p)
|
|
// {
|
|
// p->setCounter(Cell.getCounter());
|
|
// return;
|
|
// }
|
|
mVecEveryInfo.push_back(Cell);
|
|
}
|
|
void CTaskMan::clrEveryDayTask(bool bAll)
|
|
{
|
|
if(bAll)
|
|
mVecEveryInfo.clear();
|
|
else
|
|
{
|
|
// for (int i = 0; i < mVecEveryInfo.size();)
|
|
// {
|
|
// if(mVecEveryInfo[i].getData()->TaskRange == 1)
|
|
// {
|
|
// mVecEveryInfo.erase(mVecEveryInfo.begin() + i);
|
|
// }else
|
|
// {
|
|
// ++i;
|
|
// }
|
|
// }
|
|
}
|
|
}
|
|
|
|
CEveryDayCell* CTaskMan::getEveryDayTask(int nGameId,int nTaskType)
|
|
{
|
|
for (int i = 0; i < mVecEveryInfo.size(); ++i)
|
|
{
|
|
CEveryDayCell* p = &mVecEveryInfo[i];
|
|
if(p->getData()->TaskCatelog == nTaskType &&
|
|
p->getGameId() == nGameId)
|
|
return p;
|
|
}
|
|
return NULL;
|
|
}
|
|
void CTaskMan::getEveryDayTaskByGamaId(VEC_EVERYDAYPTR& vecPtr,int nGameId)
|
|
{
|
|
if(nGameId == -1)
|
|
{
|
|
nGameId = GameShare_Global::shareGlobal()->gameType ;
|
|
}
|
|
for (int i = 0; i < mVecEveryInfo.size(); ++i)
|
|
{
|
|
CEveryDayCell* p = &mVecEveryInfo[i];
|
|
if(p->getGameId() == nGameId)
|
|
vecPtr.push_back(p);
|
|
}
|
|
}
|
|
bool CTaskMan::isNewDayTaskComplate(int nGameId)
|
|
{
|
|
VEC_EVERYDAYPTR vec;
|
|
getEveryDayTaskByGamaId(vec,nGameId);
|
|
for (int i = 0; i < vec.size(); ++i)
|
|
{
|
|
if(vec[i]->getPlayAni())
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
void CTaskMan::resetNewDayTask(int nGameId)
|
|
{
|
|
VEC_EVERYDAYPTR vec;
|
|
getEveryDayTaskByGamaId(vec,nGameId);
|
|
for (int i = 0; i < vec.size(); ++i)
|
|
{
|
|
if(vec[i]->getPlayAni())
|
|
vec[i]->setPlayAni(false);
|
|
}
|
|
}
|
|
void CTaskMan::processEveryDayTask(int nTaskType,int nVal,int nGameId )
|
|
{
|
|
if(nGameId == -1)
|
|
{
|
|
nGameId = GameShare_Global::shareGlobal()->gameType ;
|
|
}
|
|
CEveryDayCell* pCell = getEveryDayTask(nGameId,nTaskType);
|
|
if (pCell)
|
|
{
|
|
if (pCell->isComplete())
|
|
return;
|
|
pCell->setCounter(nVal);
|
|
CCLog("CTaskMan::processEveryDayTask: TaskId = %d,TaskCatelog = %d, Val = %d, GameId = %d",pCell->getData()->TaskId,nTaskType,nVal,nGameId);
|
|
switch(pCell->getData()->TaskCatelog)
|
|
{
|
|
case eDayTaskTypeTK_59:
|
|
{
|
|
if (pCell->getCounter() <= pCell->getData()->TaskValue )
|
|
{
|
|
pCell->setTaskComplete(true);
|
|
pCell->setPlayAni(true);
|
|
}
|
|
}
|
|
break;
|
|
default:{
|
|
if (pCell->getCounter() >= pCell->getData()->TaskValue )
|
|
{
|
|
pCell->setTaskComplete(true);
|
|
pCell->setPlayAni(true);
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
|
|
}else
|
|
{
|
|
|
|
}
|
|
}
|
|
void CTaskMan::processEveryDayTaskDelta(int nTaskType,int nDeltaVal,int nGameId )
|
|
{
|
|
if(nGameId == -1)
|
|
{
|
|
nGameId = GameShare_Global::shareGlobal()->gameType ;
|
|
}
|
|
CEveryDayCell* pCell = getEveryDayTask(nGameId,nTaskType);
|
|
if (pCell)
|
|
processEveryDayTask(nTaskType,pCell->getCounter() + nDeltaVal,nGameId);
|
|
}
|
|
void CTaskMan::RequestGetReward(int nId)
|
|
{
|
|
CSJson::Value msg_body;
|
|
msg_body["taskid"] = CSJson::Value(nId);
|
|
NetHttpClient::sendHttpRequest(eNetMsgTypeMissionSys,eNetMsgMissionSysTask,&msg_body);
|
|
}
|
|
void CTaskMan::requestDayTaskTemp()
|
|
{
|
|
NetHttpClient::sendHttpRequest(eNetMsgTypeMissionSys,eNetMsgMissionSysDayTaskTemp);
|
|
}
|
|
void CTaskMan::requestDayTaskSelect(int nGameId)
|
|
{
|
|
CSJson::Value msg_body;
|
|
msg_body["gameid"] = CSJson::Value(nGameId);
|
|
NetHttpClient::sendHttpRequest(eNetMsgTypeMissionSys,eNetMsgMissionSysDayTaskSelect, &msg_body);
|
|
}
|
|
void CTaskMan::requestWeekTaskTemp()
|
|
{
|
|
NetHttpClient::sendHttpRequest(eNetMsgTypeMissionSys,eNetMsgMissionSysWeek);
|
|
}
|
|
void CTaskMan::requestSaveDayTaskComplateState(int nGameId)
|
|
{
|
|
if(nGameId == -1)
|
|
{
|
|
nGameId = GameShare_Global::shareGlobal()->gameType ;
|
|
}
|
|
VEC_EVERYDAYPTR vec;
|
|
CSJson::Value arr;
|
|
CSJson::Value msg_body;
|
|
getEveryDayTaskByGamaId(vec,nGameId);
|
|
for (int i = 0; i < vec.size(); ++i)
|
|
{
|
|
CSJson::Value cell;
|
|
cell["taskcurrentvalue"] = CSJson::Value(vec[i]->getCounter());
|
|
cell["taskid"] = CSJson::Value(vec[i]->getTaskId());
|
|
msg_body["arr"].append(cell);
|
|
//vec[i]->setPlayAni(true);
|
|
}
|
|
msg_body["gameid"] = CSJson::Value(nGameId);
|
|
/*msg_body[""] = msg_arr;*/
|
|
NetHttpClient::sendHttpRequest(eNetMsgTypeMissionSys,eNetMsgMissionSysDayTaskComplate, &msg_body);
|
|
}
|
|
void CTaskMan::requestDayTasklst(int nGameId)
|
|
{
|
|
if(nGameId == -1)
|
|
{
|
|
nGameId = GameShare_Global::shareGlobal()->gameType ;
|
|
}
|
|
|
|
CSJson::Value msg_body;
|
|
msg_body["gameid"] = CSJson::Value(nGameId);
|
|
NetHttpClient::sendHttpRequest(eNetMsgTypeMissionSys, eNetMsgEveryDay, &msg_body);
|
|
} |