bool MobActivity::UpdateDeathStatus(RwUInt32 MobID, bool death_status) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); CreatureData * creaturelist; for (MONSTERLISTIT it = m_monsterList.begin(); it != m_monsterList.end(); ++it ) { creaturelist = (*it); if(creaturelist != NULL) { if ( creaturelist->MonsterSpawnID == MobID ) { if(death_status == true) { creaturelist->KilledTime = timeGetTime(); creaturelist->IsDead = death_status; creaturelist->CurLP = creaturelist->MaxLP; creaturelist->CurEP = creaturelist->MaxEP; //Delete from all Monster lists //app->RemoveMonsterFromAllMyMonsterLists(creaturelist->MonsterSpawnID); }else{ creaturelist->IsDead = death_status; } return true; } } } return true; }
int GsFunctionsClass::GetTotalSlotSkill(int charID) { CGameServer * app = (CGameServer*)NtlSfxGetApp(); app->db->prepare("SELECT * FROM skills WHERE owner_id = ?"); app->db->setInt(1, charID); app->db->execute(); return app->db->rowsCount(); }
bool QueryClass::DeleteItemById(TBLIDX ItemID) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("DELETE FROM items WHERE id=?"); app->db->setInt(1, ItemID); app->db->execute(); return true; }
bool QueryClass::DeleteFromMailByID(RwUInt32 MailID) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("DELETE FROM mail WHERE id=?"); app->db->setInt(1, MailID); app->db->execute(); return true; }
bool QueryClass::SetMailRead(RwUInt32 MailID) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE mail SET bIsRead=1 WHERE id=?"); app->db->setInt(1, MailID); app->db->execute(); return true; }
bool QueryClass::UpdateMailLock(RwUInt32 MailID, RwUInt32 LockStatus) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE mail SET bIsLock=? WHERE id=?"); app->db->setInt(1, LockStatus); app->db->setInt(2, MailID); app->db->execute(); return true; }
bool QueryClass::SetPlusMoney(RwUInt32 CharID, int Money) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE characters SET money=money+? WHERE CharID=?"); app->db->setInt(1, Money); app->db->setInt(2, CharID); app->db->execute(); return true; }
bool QueryClass::UpdateCharAwayStatus(RwUInt32 CharID, RwUInt32 AwayStatus) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE characters SET MailIsAway=? WHERE CharID=?"); app->db->setInt(1, AwayStatus); app->db->setInt(2, CharID); app->db->execute(); return true; }
bool QueryClass::UpdateItemsCount(RwUInt32 ItemID, RwUInt32 Count) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE items SET count=? WHERE id=?"); app->db->setInt(1, Count); app->db->setInt(2, ItemID); app->db->execute(); return true; }
bool QueryClass::SetMailAccept(RwUInt32 CharID, RwUInt32 MailID) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE mail SET bIsAccept=1 WHERE id=? AND CharID=?"); app->db->setInt(1, MailID); app->db->setInt(2, CharID); app->db->execute(); return true; }
bool QueryClass::UpdateItemOwnerIdWithUniqueID(RwUInt32 NewOwnerID, RwUInt32 UniqueID) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE items SET owner_id=? WHERE id=?"); app->db->setInt(1, NewOwnerID); app->db->setInt(2, UniqueID); app->db->execute(); return true; }
bool QueryClass::InsertRemoveQuickSlot(TBLIDX SkillID, BYTE SlotID, int CharID) { CGameServer * app = (CGameServer*)NtlSfxGetApp(); std::string query = "UPDATE quickslot SET slotId_" +std::to_string((long double)(SlotID)); app->db->prepare(query+" = ? WHERE charId=?"); app->db->setInt(1, SkillID); app->db->setInt(2, CharID); app->db->execute(); return true; }
bool QueryClass::UpdateSPPoint(RwUInt32 CharID, RwUInt32 point) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE characters SET SpPoint = ? WHERE CharID=?"); app->db->setInt(1, point); app->db->setInt(2, CharID); app->db->execute(); return true; }
bool QueryClass::UpdateItemPlaceAndPos(RwUInt32 ItemID, BYTE Place, BYTE Pos) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE items SET place=? , pos=? WHERE id=?"); app->db->setInt(1, Place); app->db->setInt(2, Pos); app->db->setInt(3, ItemID); app->db->execute(); return true; }
bool QueryClass::ChangeItemOwnerByUIdPlacePos(RwUInt32 NewOwnerID, RwUInt32 UniqueID, RwUInt32 Place, RwUInt32 Pos) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE items SET owner_id=? , place=? , pos=? WHERE id=?"); app->db->setInt(1, NewOwnerID); app->db->setInt(2, Place); app->db->setInt(3, Pos); app->db->setInt(4, UniqueID); app->db->execute(); return true; }
bool QueryClass::UpdatePlayerLevel(int _level, int CharID, int _exp, int _maxexp) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("UPDATE characters SET level=? , exp=? , MaxExpInThisLevel=? WHERE CharID=?"); app->db->setInt(1, _level); app->db->setInt(2, _exp); app->db->setInt(3, _maxexp); app->db->setInt(4, CharID); app->db->execute(); return true; }
bool QueryClass::InsertNewSkill(TBLIDX SkillID, int CharID, BYTE SlotID, WORD Time, WORD Exp) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("INSERT INTO skills (skill_id,owner_id,SlotID,TimeRemaining,Exp) VALUES (?,?,?,?,?) "); app->db->setInt(1, SkillID); app->db->setInt(2, CharID); app->db->setInt(3, SlotID); app->db->setInt(4, Time); app->db->setInt(5, Exp); app->db->execute(); return true; }
bool QueryClass::CheckIfSkillAlreadyLearned(TBLIDX SkillID, int CharID) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("SELECT skill_id FROM skills WHERE skill_id=? AND owner_id=?"); app->db->setInt(1, SkillID); app->db->setInt(2, CharID); app->db->execute(); if(app->db->rowsCount() == 0) return false; else return true; }
bool QueryClass::CheckIfCanMoveItemThere(RwUInt32 CharID, BYTE Place, BYTE Pos) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); app->db->prepare("SELECT * FROM items WHERE owner_id=? AND place=? AND pos=?"); app->db->setInt(1, CharID); app->db->setInt(2, Place); app->db->setInt(3, Pos); app->db->execute(); if(app->db->rowsCount() == 0) return true; else return false; }
//--------------------------------------------------------------------------------------// // Select character and login to game-server //--------------------------------------------------------------------------------------// void CClientSession::SendCharSelectReq(CNtlPacket * pPacket) { CCharServer * app = (CCharServer*) NtlSfxGetApp(); sUC_CHARACTER_SELECT_REQ * req = (sUC_CHARACTER_SELECT_REQ*)pPacket->GetPacketData(); CNtlPacket packet(sizeof(sCU_CHARACTER_SELECT_RES)); sCU_CHARACTER_SELECT_RES * res = (sCU_CHARACTER_SELECT_RES *)packet.GetPacketData(); res->wOpCode = CU_CHARACTER_SELECT_RES; res->wResultCode = CHARACTER_SUCCESS; res->charId = req->charId; strcpy_s((char*)res->abyAuthKey, NTL_MAX_SIZE_AUTH_KEY, "Dbo"); strcpy_s(res->szGameServerIP, sizeof(res->szGameServerIP), app->GetConfigFileExternalIP()); res->wGameServerPortForClient = 30001; packet.SetPacketLen( sizeof(sCU_CHARACTER_SELECT_RES) ); int rc = g_pApp->Send( this->GetHandle(), &packet ); }
bool GsFunctionsClass::DeleteItemByUIdPlacePos(CNtlPacket * pPacket, CClientSession * pSession, RwUInt32 UniqueID, RwUInt32 Place, RwUInt32 Pos) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); CNtlPacket packet(sizeof(sGU_ITEM_DELETE)); sGU_ITEM_DELETE * res = (sGU_ITEM_DELETE *)packet.GetPacketData(); res->wOpCode = GU_ITEM_DELETE; res->hSrcItem = UniqueID; res->bySrcPlace = Place; res->bySrcPos = Pos; packet.SetPacketLen(sizeof(sGU_ITEM_DELETE)); g_pApp->Send( pSession->GetHandle() , &packet ); return true; }
bool GsFunctionsClass::UpdateCharMoney(CNtlPacket * pPacket, CClientSession * pSession, RwUInt32 ChangeType, RwUInt32 MoneyAmount, RwUInt32 AvatarHandle) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); CNtlPacket packet(sizeof(sGU_UPDATE_CHAR_ZENNY)); sGU_UPDATE_CHAR_ZENNY * res = (sGU_UPDATE_CHAR_ZENNY *)packet.GetPacketData(); res->byChangeType = ChangeType; res->dwZenny = MoneyAmount; res->handle = AvatarHandle; res->wOpCode = GU_UPDATE_CHAR_ZENNY; packet.SetPacketLen(sizeof(sGU_UPDATE_CHAR_ZENNY)); g_pApp->Send( pSession->GetHandle() , &packet ); return true; }
void MobActivity::SpawnMonsterAtLogin(CNtlPacket * pPacket, CClientSession * pSession) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); sVECTOR3 curpos = pSession->plr->GetPosition(); CreatureData * creaturelist; for (MONSTERLISTIT it = m_monsterList.begin(); it != m_monsterList.end(); ++it ) { creaturelist = (*it); if(creaturelist->IsDead == false) { if(app->mob->CreatureRangeCheck(curpos, creaturelist->Spawn_Loc) == true) { CNtlPacket packet(sizeof(sGU_OBJECT_CREATE)); sGU_OBJECT_CREATE * res = (sGU_OBJECT_CREATE *)packet.GetPacketData(); res->wOpCode = GU_OBJECT_CREATE; res->sObjectInfo.objType = OBJTYPE_MOB; res->handle = creaturelist->MonsterSpawnID; res->sObjectInfo.mobState.sCharStateBase.vCurLoc.x = creaturelist->Spawn_Loc.x; res->sObjectInfo.mobState.sCharStateBase.vCurLoc.y = creaturelist->Spawn_Loc.y; res->sObjectInfo.mobState.sCharStateBase.vCurLoc.z = creaturelist->Spawn_Loc.z; res->sObjectInfo.mobState.sCharStateBase.vCurDir.x = creaturelist->Spawn_Dir.x + rand() % 360; res->sObjectInfo.mobState.sCharStateBase.vCurDir.y = creaturelist->Spawn_Dir.y; res->sObjectInfo.mobState.sCharStateBase.vCurDir.z = creaturelist->Spawn_Dir.z; res->sObjectInfo.mobState.sCharStateBase.byStateID = CHARSTATE_SPAWNING; res->sObjectInfo.mobState.sCharStateBase.bFightMode = creaturelist->FightMode; res->sObjectInfo.mobBrief.tblidx = creaturelist->MonsterID; res->sObjectInfo.mobBrief.wCurEP = creaturelist->CurEP; res->sObjectInfo.mobBrief.wMaxEP = creaturelist->MaxEP; res->sObjectInfo.mobBrief.wCurLP = creaturelist->CurLP; res->sObjectInfo.mobBrief.wMaxLP = creaturelist->MaxLP; res->sObjectInfo.mobBrief.fLastRunningSpeed = creaturelist->Run_Speed; res->sObjectInfo.mobBrief.fLastWalkingSpeed = creaturelist->Walk_Speed; pSession->InsertIntoMyMonsterList(creaturelist->MonsterSpawnID, creaturelist->Spawn_Loc, creaturelist->MonsterID); packet.SetPacketLen( sizeof(sGU_OBJECT_CREATE) ); g_pApp->Send( pSession->GetHandle(), &packet ); } } } }
/// CREATE MONSTER LIST /// bool MobActivity::Create() { CGameServer * app = (CGameServer*) NtlSfxGetApp(); CSpawnTable* pMOBSpawnTbl = app->g_pTableContainer->GetMobSpawnTable( 1 ); for ( CTable::TABLEIT itMOBSpawn = pMOBSpawnTbl->Begin(); itMOBSpawn != pMOBSpawnTbl->End(); ++itMOBSpawn ) { sSPAWN_TBLDAT* pMOBSpwnTblData = (sSPAWN_TBLDAT*) itMOBSpawn->second; sMOB_TBLDAT* pMOBTblData = (sMOB_TBLDAT*)app->g_pTableContainer->GetMobTable()->FindData( pMOBSpwnTblData->mob_Tblidx ); if ( pMOBTblData ) { CreatureData * cr = new CreatureData; cr->Level = pMOBTblData->byLevel; cr->CurEP = pMOBTblData->wBasic_EP; cr->CurLP = pMOBTblData->wBasic_LP; cr->FightMode = false; cr->IsDead = false; cr->MonsterID = pMOBTblData->tblidx; cr->MonsterSpawnID = pMOBSpwnTblData->tblidx; cr->Spawn_Loc = pMOBSpwnTblData->vSpawn_Loc; cr->Spawn_Dir = pMOBSpwnTblData->vSpawn_Dir; cr->MaxEP = pMOBTblData->wBasic_EP; cr->MaxLP = pMOBTblData->wBasic_LP; cr->Spawn_Quantity = pMOBSpwnTblData->bySpawn_Quantity; cr->Move_DelayTime = pMOBSpwnTblData->byMove_DelayTime; cr->Run_Speed = pMOBTblData->fRun_Speed; cr->Run_Speed_origin = pMOBTblData->fRun_Speed_Origin; cr->Walk_Speed = pMOBTblData->fWalk_Speed; cr->Walk_Speed_origin = pMOBTblData->fWalk_Speed_Origin; cr->Spawn_Cool_Time = pMOBSpwnTblData->wSpawn_Cool_Time * 1000; m_monsterList.push_back(cr); } } return true; }
void MobActivity::SpawnNpcAtLogin(CNtlPacket * pPacket, CClientSession * pSession) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); sVECTOR3 curpos = pSession->plr->GetPosition(); CSpawnTable* pNPCSpawnTbl = app->g_pTableContainer->GetNpcSpawnTable( pSession->plr->GetWorldID() ); for ( CTable::TABLEIT itNPCSpawn = pNPCSpawnTbl->Begin(); itNPCSpawn != pNPCSpawnTbl->End(); ++itNPCSpawn ) { sSPAWN_TBLDAT* pNPCSpwnTblData = (sSPAWN_TBLDAT*) itNPCSpawn->second; sNPC_TBLDAT* pNPCTblData = (sNPC_TBLDAT*)app->g_pTableContainer->GetNpcTable()->FindData( pNPCSpwnTblData->mob_Tblidx ); if(app->mob->CreatureRangeCheck(curpos, pNPCSpwnTblData->vSpawn_Loc) == true) { CNtlPacket packet(sizeof(sGU_OBJECT_CREATE)); sGU_OBJECT_CREATE * sPacket = (sGU_OBJECT_CREATE *)packet.GetPacketData(); sPacket->wOpCode = GU_OBJECT_CREATE; sPacket->sObjectInfo.objType = OBJTYPE_NPC; sPacket->handle = pNPCTblData->tblidx; sPacket->sObjectInfo.npcState.sCharStateBase.vCurLoc.x = pNPCSpwnTblData->vSpawn_Loc.x; sPacket->sObjectInfo.npcState.sCharStateBase.vCurLoc.y = pNPCSpwnTblData->vSpawn_Loc.y; sPacket->sObjectInfo.npcState.sCharStateBase.vCurLoc.z = pNPCSpwnTblData->vSpawn_Loc.z; sPacket->sObjectInfo.npcState.sCharStateBase.vCurDir.x = pNPCSpwnTblData->vSpawn_Dir.x; sPacket->sObjectInfo.npcState.sCharStateBase.vCurDir.y = pNPCSpwnTblData->vSpawn_Dir.y; sPacket->sObjectInfo.npcState.sCharStateBase.vCurDir.z = pNPCSpwnTblData->vSpawn_Dir.z; sPacket->sObjectInfo.npcState.sCharStateBase.byStateID = CHARSTATE_SPAWNING; sPacket->sObjectInfo.npcBrief.wCurEP = pNPCTblData->wBasic_EP; sPacket->sObjectInfo.npcBrief.wCurLP = pNPCTblData->wBasic_LP; sPacket->sObjectInfo.npcBrief.wMaxEP = pNPCTblData->wBasic_EP; sPacket->sObjectInfo.npcBrief.wMaxLP = pNPCTblData->wBasic_LP; sPacket->sObjectInfo.npcBrief.tblidx = pNPCSpwnTblData->mob_Tblidx; pSession->InsertIntoMyNpcList(pNPCSpwnTblData->mob_Tblidx, pNPCSpwnTblData->vSpawn_Loc); packet.SetPacketLen( sizeof(sGU_OBJECT_CREATE) ); g_pApp->Send( pSession->GetHandle(), &packet ); } } }
bool MobActivity::RunSpawnCheck(CNtlPacket * pPacket, sVECTOR3 curPos, CClientSession * pSession) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); #pragma region monstercheck CreatureData * creaturelist; for (MONSTERLISTIT it = m_monsterList.begin(); it != m_monsterList.end(); ++it ) { creaturelist = (*it); if(app->mob->CreatureRangeCheck(curPos, creaturelist->Spawn_Loc) == true) { if(pSession->IsMonsterInsideList(creaturelist->MonsterSpawnID) == false) { if ( creaturelist->IsDead == false ) { CNtlPacket packet(sizeof(sGU_OBJECT_CREATE)); sGU_OBJECT_CREATE * res = (sGU_OBJECT_CREATE *)packet.GetPacketData(); res->wOpCode = GU_OBJECT_CREATE; res->sObjectInfo.objType = OBJTYPE_MOB; res->handle = creaturelist->MonsterSpawnID; res->sObjectInfo.mobState.sCharStateBase.vCurLoc.x = creaturelist->Spawn_Loc.x; res->sObjectInfo.mobState.sCharStateBase.vCurLoc.y = creaturelist->Spawn_Loc.y; res->sObjectInfo.mobState.sCharStateBase.vCurLoc.z = creaturelist->Spawn_Loc.z; res->sObjectInfo.mobState.sCharStateBase.vCurDir.x = creaturelist->Spawn_Dir.x; res->sObjectInfo.mobState.sCharStateBase.vCurDir.y = creaturelist->Spawn_Dir.y; res->sObjectInfo.mobState.sCharStateBase.vCurDir.z = creaturelist->Spawn_Dir.z; res->sObjectInfo.mobState.sCharStateBase.byStateID = CHARSTATE_SPAWNING; res->sObjectInfo.mobState.sCharStateBase.bFightMode = creaturelist->FightMode; res->sObjectInfo.mobBrief.tblidx = creaturelist->MonsterID; res->sObjectInfo.mobBrief.wCurEP = creaturelist->CurEP; res->sObjectInfo.mobBrief.wMaxEP = creaturelist->MaxEP; res->sObjectInfo.mobBrief.wCurLP = creaturelist->CurLP; res->sObjectInfo.mobBrief.wMaxLP = creaturelist->MaxLP; res->sObjectInfo.mobBrief.fLastRunningSpeed = creaturelist->Run_Speed; res->sObjectInfo.mobBrief.fLastWalkingSpeed = creaturelist->Walk_Speed; pSession->InsertIntoMyMonsterList(creaturelist->MonsterSpawnID, creaturelist->Spawn_Loc, creaturelist->MonsterID); packet.SetPacketLen( sizeof(sGU_OBJECT_CREATE) ); g_pApp->Send( pSession->GetHandle(), &packet ); } } }else if(pSession->IsMonsterInsideList(creaturelist->MonsterSpawnID) == true){ // printf("remove monster \n"); CNtlPacket packet(sizeof(sGU_OBJECT_DESTROY)); sGU_OBJECT_DESTROY * res = (sGU_OBJECT_DESTROY *)packet.GetPacketData(); res->wOpCode = GU_OBJECT_DESTROY; res->handle = creaturelist->MonsterSpawnID; pSession->RemoveFromMyMonsterList(creaturelist->MonsterSpawnID); packet.SetPacketLen( sizeof(sGU_OBJECT_DESTROY) ); g_pApp->Send( pSession->GetHandle(), &packet ); } } #pragma endregion Monstercheckend #pragma region npccheck CSpawnTable* pNPCSpawnTbl = app->g_pTableContainer->GetNpcSpawnTable( pSession->plr->GetWorldID() ); for ( CTable::TABLEIT itNPCSpawn = pNPCSpawnTbl->Begin(); itNPCSpawn != pNPCSpawnTbl->End(); ++itNPCSpawn ) { sSPAWN_TBLDAT* pNPCSpwnTblData = (sSPAWN_TBLDAT*) itNPCSpawn->second; sNPC_TBLDAT* pNPCTblData = (sNPC_TBLDAT*)app->g_pTableContainer->GetNpcTable()->FindData( pNPCSpwnTblData->mob_Tblidx ); if(pSession->IsNpcInsideList(pNPCSpwnTblData->mob_Tblidx) == false) { if(app->mob->CreatureRangeCheck(curPos, pNPCSpwnTblData->vSpawn_Loc) == true) { CNtlPacket packet(sizeof(sGU_OBJECT_CREATE)); sGU_OBJECT_CREATE * sPacket = (sGU_OBJECT_CREATE *)packet.GetPacketData(); sPacket->wOpCode = GU_OBJECT_CREATE; sPacket->sObjectInfo.objType = OBJTYPE_NPC; sPacket->handle = pNPCTblData->tblidx; sPacket->sObjectInfo.npcState.sCharStateBase.vCurLoc.x = pNPCSpwnTblData->vSpawn_Loc.x; sPacket->sObjectInfo.npcState.sCharStateBase.vCurLoc.y = pNPCSpwnTblData->vSpawn_Loc.y; sPacket->sObjectInfo.npcState.sCharStateBase.vCurLoc.z = pNPCSpwnTblData->vSpawn_Loc.z; sPacket->sObjectInfo.npcState.sCharStateBase.vCurDir.x = pNPCSpwnTblData->vSpawn_Dir.x; sPacket->sObjectInfo.npcState.sCharStateBase.vCurDir.y = pNPCSpwnTblData->vSpawn_Dir.y; sPacket->sObjectInfo.npcState.sCharStateBase.vCurDir.z = pNPCSpwnTblData->vSpawn_Dir.z; sPacket->sObjectInfo.npcState.sCharStateBase.byStateID = CHARSTATE_SPAWNING; sPacket->sObjectInfo.npcBrief.wCurEP = pNPCTblData->wBasic_EP; sPacket->sObjectInfo.npcBrief.wCurLP = pNPCTblData->wBasic_LP; sPacket->sObjectInfo.npcBrief.wMaxEP = pNPCTblData->wBasic_EP; sPacket->sObjectInfo.npcBrief.wMaxLP = pNPCTblData->wBasic_LP; sPacket->sObjectInfo.npcBrief.tblidx = pNPCSpwnTblData->mob_Tblidx; pSession->InsertIntoMyNpcList(pNPCSpwnTblData->mob_Tblidx, pNPCSpwnTblData->vSpawn_Loc); packet.SetPacketLen( sizeof(sGU_OBJECT_CREATE) ); g_pApp->Send( pSession->GetHandle(), &packet ); } } } return true; #pragma endregion Npccheckend }
void MobActivity::MonsterRandomWalk(CNtlPacket * pPacket) { CGameServer * app = (CGameServer*) NtlSfxGetApp(); CreatureData * creaturelist; for (MONSTERLISTIT it = m_monsterList.begin(); it != m_monsterList.end(); ++it ) { creaturelist = (*it); if(creaturelist->IsDead == false) { if (creaturelist->FightMode == false && (rand() % 30) >= 20) { CNtlPacket packet(sizeof(sGU_UPDATE_CHAR_STATE)); sGU_UPDATE_CHAR_STATE * res = (sGU_UPDATE_CHAR_STATE *)packet.GetPacketData(); res->wOpCode = GU_UPDATE_CHAR_STATE; res->handle = creaturelist->MonsterSpawnID; res->sCharState.sCharStateBase.bFightMode = false; res->sCharState.sCharStateBase.byStateID = CHARSTATE_DESTMOVE; res->sCharState.sCharStateDetail.sCharStateDestMove.byDestLocCount = 2; res->sCharState.sCharStateDetail.sCharStateDestMove.avDestLoc[0].x = creaturelist->Spawn_Loc.x + rand() %15; res->sCharState.sCharStateDetail.sCharStateDestMove.avDestLoc[0].y = creaturelist->Spawn_Loc.y; res->sCharState.sCharStateDetail.sCharStateDestMove.avDestLoc[0].z = creaturelist->Spawn_Loc.z + rand() %25; res->sCharState.sCharStateDetail.sCharStateDestMove.avDestLoc[1].x = creaturelist->Spawn_Loc.x + rand() %15; res->sCharState.sCharStateDetail.sCharStateDestMove.avDestLoc[1].y = creaturelist->Spawn_Loc.y; res->sCharState.sCharStateDetail.sCharStateDestMove.avDestLoc[1].z = creaturelist->Spawn_Loc.z + rand() %25; res->sCharState.sCharStateDetail.sCharStateDestMove.bHaveSecondDestLoc = false; packet.SetPacketLen( sizeof(sGU_UPDATE_CHAR_STATE) ); app->UserBroadcast(&packet); } }else if(creaturelist->IsDead == true && timeGetTime() >= creaturelist->KilledTime + creaturelist->Spawn_Cool_Time ) { printf("spawn time %i cur time %i killed time %i \n", creaturelist->Spawn_Cool_Time, timeGetTime(), creaturelist->KilledTime); creaturelist->IsDead = false; //Spawn monster CNtlPacket packet(sizeof(sGU_OBJECT_CREATE)); sGU_OBJECT_CREATE * res = (sGU_OBJECT_CREATE *)packet.GetPacketData(); res->wOpCode = GU_OBJECT_CREATE; res->sObjectInfo.objType = OBJTYPE_MOB; res->handle = creaturelist->MonsterSpawnID; res->sObjectInfo.mobState.sCharStateBase.vCurLoc.x = creaturelist->Spawn_Loc.x; res->sObjectInfo.mobState.sCharStateBase.vCurLoc.y = creaturelist->Spawn_Loc.y; res->sObjectInfo.mobState.sCharStateBase.vCurLoc.z = creaturelist->Spawn_Loc.z; res->sObjectInfo.mobState.sCharStateBase.vCurDir.x = creaturelist->Spawn_Dir.x; res->sObjectInfo.mobState.sCharStateBase.vCurDir.y = creaturelist->Spawn_Dir.y; res->sObjectInfo.mobState.sCharStateBase.vCurDir.z = creaturelist->Spawn_Dir.z; res->sObjectInfo.mobState.sCharStateBase.byStateID = CHARSTATE_SPAWNING; res->sObjectInfo.mobState.sCharStateBase.bFightMode = false; res->sObjectInfo.mobBrief.tblidx = creaturelist->MonsterID; res->sObjectInfo.mobBrief.wCurEP = creaturelist->CurEP; res->sObjectInfo.mobBrief.wMaxEP = creaturelist->MaxEP; res->sObjectInfo.mobBrief.wCurLP = creaturelist->CurLP; res->sObjectInfo.mobBrief.wMaxLP = creaturelist->MaxLP; res->sObjectInfo.mobBrief.fLastRunningSpeed = creaturelist->Run_Speed; res->sObjectInfo.mobBrief.fLastWalkingSpeed = creaturelist->Walk_Speed; packet.SetPacketLen( sizeof(sGU_OBJECT_CREATE) ); app->UserBroadcast(&packet); //Insert into all players list app->InsertMonsterIntoAllMyMonsterLists(pPacket, creaturelist->MonsterSpawnID, creaturelist->Spawn_Loc, creaturelist->MonsterID); } } }