void ZBirdDummyAIJoinFlood::OnRun() { unsigned long int nNowTime = timeGetTime(); if (m_bReserved) { if ((nNowTime - m_nReservedTime) > 10000) { ZBIRDPOSTCMD2(m_pClient, MC_MATCH_STAGE_LEAVE, MCommandParameterUID(m_pClient->GetPlayerUID()), MCommandParameterUID(m_uidWantedRoom)); m_bReserved = false; } } }
void ZBirdDummyAIMakeRoomFlood::OnRun() { unsigned long int nNowTime = timeGetTime(); if (m_bInCombat) { if ((nNowTime - m_nKillLastTime) > BIRDDUMMY_AI_KILL_DELAY) { m_nKillCount++; ZBIRDPOSTCMD1(m_pClient, MC_MATCH_REQUEST_SUICIDE, MCommandParameterUID(m_pClient->GetPlayerUID())); m_nKillLastTime = nNowTime; if (m_nKillCount > 50) { m_nKillCount = 0; ZBIRDPOSTCMD2(m_pClient, MC_MATCH_STAGE_LEAVEBATTLE_TO_SERVER, MCommandParameterUID(m_pClient->GetPlayerUID()), MCommandParameterUID(m_pClient->GetStageUID())); } } } }
void ZActor::Attack_Melee() { m_Animation.Input(ZA_INPUT_ATTACK_MELEE); ZPOSTCMD1(MC_QUEST_PEER_NPC_ATTACK_MELEE, MCommandParameterUID(GetUID())); }
void ZBirdDummyAIMakeRoomFlood::OnCommand(MCommand* pCmd) { Sleep(1); if (m_pClient == NULL) return; m_nLastCommandTime = timeGetTime(); switch (pCmd->GetID()) { case MC_MATCH_CHANNEL_RESPONSE_RULE: { } break; case MC_MATCH_CHANNEL_RESPONSE_JOIN: { MUID uidChannel; char szChannelName[256]; pCmd->GetParameter(&uidChannel, 0, MPT_UID); pCmd->GetParameter(szChannelName, 2, MPT_STR, sizeof(szChannelName) ); static int nChannelID = 0; char szStageName[256]; sprintf(szStageName, "%s_stage%d", m_szUserID, nChannelID); nChannelID++; ZBIRDPOSTCMD4(m_pClient, MC_MATCH_STAGE_CREATE, MCommandParameterUID(m_pClient->GetPlayerUID()), MCmdParamStr(szStageName), MCmdParamBool(false), MCmdParamStr("")); } break; case MC_MATCH_STAGE_LIST: { } break; case MC_MATCH_RESPONSE_STAGE_JOIN: { int nResult; pCmd->GetParameter(&nResult, 0, MPT_INT); // 방생성 실패면 다시 만든다 if (nResult != MOK) { int nRandNum = rand() % 100000; char szStageName[256]; sprintf(szStageName, "%s_stage%d", "꼬붕즐", nRandNum); ZBIRDPOSTCMD4(m_pClient, MC_MATCH_STAGE_CREATE, MCommandParameterUID(m_pClient->GetPlayerUID()), MCmdParamStr(szStageName), MCmdParamBool(false), MCmdParamStr("")); } } break; case MC_MATCH_STAGE_JOIN: { MUID uidChar, uidStage; char szStageName[256]; pCmd->GetParameter(&uidChar, 0, MPT_UID); pCmd->GetParameter(&uidStage, 1, MPT_UID); pCmd->GetParameter(szStageName, 2, MPT_STR, sizeof(szStageName) ); if (uidChar == m_pClient->GetPlayerUID()) { m_nKillCount = 0; ZBIRDPOSTCMD3(m_pClient, MC_MATCH_STAGE_START, MCommandParameterUID(m_pClient->GetPlayerUID()), MCommandParameterUID(m_pClient->GetStageUID()), MCommandParameterInt(3)); static unsigned long int stJoinCount = 0; stJoinCount++; char szTemp[512]; if ((stJoinCount % 100) == 0) { sprintf(szTemp, "Join Flood(%u)", stJoinCount++); AddToLogFrame(m_nID, szTemp); } } } break; case MC_MATCH_STAGE_LAUNCH: { ZBIRDPOSTCMD2(m_pClient, MC_MATCH_LOADING_COMPLETE, MCommandParameterUID(m_pClient->GetPlayerUID()), MCmdParamInt(100)); // 게임에 들어갔다고 알림 ZBIRDPOSTCMD2(m_pClient, MC_MATCH_STAGE_REQUEST_ENTERBATTLE, MCommandParameterUID(m_pClient->GetPlayerUID()), MCommandParameterUID(m_pClient->GetStageUID())); } break; case MC_MATCH_STAGE_ENTERBATTLE: { MUID uidChar, uidStage; int nParam; pCmd->GetParameter(&uidChar, 0, MPT_UID); pCmd->GetParameter(&uidStage, 1, MPT_UID); pCmd->GetParameter(&nParam, 2, MPT_INT); MCommandParameter* pParam = pCmd->GetParameter(3); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); MTD_PeerListNode* pPeerNode = (MTD_PeerListNode*)MGetBlobArrayElement(pBlob, 0); //OnStageEnterBattle(uidChar, uidStage, MCmdEnterBattleParam(nParam), pPeerNode); if (uidChar == m_pClient->GetPlayerUID()) { m_bInCombat = true; } ZBIRDPOSTCMD2(m_pClient, MC_MATCH_STAGE_LEAVEBATTLE_TO_SERVER, MCommandParameterUID(m_pClient->GetPlayerUID()), MCommandParameterUID(m_pClient->GetStageUID())); } break; case MC_MATCH_STAGE_LEAVEBATTLE_TO_CLIENT: { MUID uidChar, uidStage; pCmd->GetParameter(&uidChar, 0, MPT_UID); pCmd->GetParameter(&uidStage, 1, MPT_UID); if (uidChar == m_pClient->GetPlayerUID()) { ZBIRDPOSTCMD2(m_pClient, MC_MATCH_STAGE_LEAVEBATTLE_TO_SERVER, MCommandParameterUID(m_pClient->GetPlayerUID()), MCommandParameterUID(m_pClient->GetStageUID())); m_bInCombat = false; } } break; case MC_MATCH_STAGE_FINISH_GAME: { MUID uidStage; pCmd->GetParameter(&uidStage, 0, MPT_UID); ZBIRDPOSTCMD2(m_pClient, MC_MATCH_STAGE_LEAVEBATTLE_TO_SERVER, MCommandParameterUID(m_pClient->GetPlayerUID()), MCommandParameterUID(m_pClient->GetStageUID())); } break; } }
void ZBirdDummyAIJoinFlood::OnCommand(MCommand* pCmd) { Sleep(1); if (m_pClient == NULL) return; m_nLastCommandTime = timeGetTime(); switch (pCmd->GetID()) { case MC_MATCH_CHANNEL_RESPONSE_RULE: { } break; case MC_MATCH_CHANNEL_RESPONSE_JOIN: { MUID uidChannel; char szChannelName[256]; pCmd->GetParameter(&uidChannel, 0, MPT_UID); pCmd->GetParameter(szChannelName, 2, MPT_STR, sizeof(szChannelName) ); static int nChannelID = 0; char szStageName[256]; sprintf(szStageName, "%s_stage%d", m_szUserID, nChannelID); nChannelID++; } break; case MC_MATCH_STAGE_LIST: { int nPrevStageCount, nNextStageCount; pCmd->GetParameter(&nPrevStageCount, 0, MPT_INT); pCmd->GetParameter(&nNextStageCount, 1, MPT_INT); MCommandParameter* pParam = pCmd->GetParameter(2); if(pParam->GetType()!=MPT_BLOB) break; void* pBlob = pParam->GetPointer(); int nCount = MGetBlobArrayCount(pBlob); for(int i=0; i<nCount; i++) { MTD_StageListNode* pNode = (MTD_StageListNode*)MGetBlobArrayElement(pBlob, i); // log debug if( pNode ) { if (stricmp(pNode->szStageName, m_szLastStage)) { strcpy(m_szLastStage, pNode->szStageName); m_uidWantedRoom = pNode->uidStage; ZBIRDPOSTCMD2(m_pClient, MC_MATCH_REQUEST_STAGE_JOIN, MCommandParameterUID(m_pClient->GetPlayerUID()), MCommandParameterUID(pNode->uidStage)); break; } } } } break; case MC_MATCH_RESPONSE_STAGE_JOIN: { int nResult; pCmd->GetParameter(&nResult, 0, MPT_INT); if (nResult != MOK) { ZBIRDPOSTCMD2(m_pClient, MC_MATCH_REQUEST_STAGE_JOIN, MCommandParameterUID(m_pClient->GetPlayerUID()), MCommandParameterUID(m_uidWantedRoom)); } } break; case MC_MATCH_STAGE_JOIN: { m_nReservedTime = timeGetTime(); m_bReserved = true; MUID uidChar, uidStage; char szStageName[256]; pCmd->GetParameter(&uidChar, 0, MPT_UID); pCmd->GetParameter(&uidStage, 1, MPT_UID); pCmd->GetParameter(szStageName, 2, MPT_STR, sizeof(szStageName) ); // ZBIRDPOSTCMD2(m_pClient, MC_MATCH_STAGE_LEAVE, // MCommandParameterUID(m_pClient->GetPlayerUID()), // MCommandParameterUID(m_uidWantedRoom)); static unsigned long int stJoinCount = 0; stJoinCount++; char szTemp[512]; if ((stJoinCount % 100) == 0) { sprintf(szTemp, "Join Flood(%u)", stJoinCount++); AddToLogFrame(m_nID, szTemp); } } break; } }