示例#1
0
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;
}
示例#2
0
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();
 }
示例#3
0
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;
}
示例#4
0
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;
}
示例#5
0
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;
}
示例#6
0
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;
}
示例#7
0
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;
}
示例#8
0
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;
}
示例#9
0
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;
}
示例#10
0
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;
}
示例#11
0
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;
}
示例#12
0
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;
 }
示例#13
0
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;
}
示例#14
0
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;
}
示例#15
0
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;
}
示例#16
0
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;
}
示例#17
0
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;
}
示例#18
0
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;
}
示例#19
0
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;
}
示例#20
0
//--------------------------------------------------------------------------------------//
//		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 );
}
示例#21
0
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;
}
示例#22
0
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;
}
示例#23
0
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 );
			
			}
		}
	}
}
示例#24
0
/// 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;
}
示例#25
0
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 );
				
		}
	}
}
示例#26
0
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
}
示例#27
0
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);
		}
	}
}