コード例 #1
0
ファイル: Npc.cpp プロジェクト: R3aLisT/ProjectXKOServer
/**
* @brief	Executes the death process.
*
* @param	pKiller	The killer.
*/
void CNpc::OnDeathProcess(Unit *pKiller)
{
	CUser * pUser = TO_USER(pKiller);

	if (TO_NPC(this) != nullptr && pUser != nullptr)
	{
		if (pUser->isPlayer())
		{
			if (!m_bMonster)
			{
				switch (m_tNpcType)
				{
				case NPC_BIFROST_MONUMENT:
					pUser->BifrostProcess(pUser);
					break;
				case NPC_PVP_MONUMENT:
					PVPMonumentProcess(pUser);
					break;
				case NPC_BATTLE_MONUMENT:
					BattleMonumentProcess(pUser);
					break;
				case NPC_HUMAN_MONUMENT:
					NationMonumentProcess(pUser);
					break;
				case NPC_KARUS_MONUMENT:
					NationMonumentProcess(pUser);
					break;
				case NPC_CHAOS_STONE:
			         {
			         	if (pUser == nullptr)
			         	return ;
			         	if (pUser->isInPKZone())
			         	ChaosStoneProcess(pUser,5);
			         }
			               break;
				   
				   }
					
				}
			}
			else if (m_bMonster)
			{
				if (m_sSid == 700 || m_sSid == 750)
				{
					if (pUser->CheckExistEvent(STARTER_SEED_QUEST, 1))
						pUser->SaveEvent(STARTER_SEED_QUEST, 2);
				}
				else if (g_pMain->m_MonsterRespawnListArray.GetData(m_sSid) != nullptr) {
					if (pUser->isInPKZone() || GetZoneID() == ZONE_JURAD_MOUNTAIN)
						g_pMain->SpawnEventNpc(g_pMain->m_MonsterRespawnListArray.GetData(m_sSid)->sSid, true, GetZoneID(), GetX(), GetY(), GetZ(), g_pMain->m_MonsterRespawnListArray.GetData(m_sSid)->sCount);
				} else if (m_tNpcType == NPC_CHAOS_STONE && pUser->isInPKZone()) {
					ChaosStoneProcess(pUser,5);
				}
			}

			DateTime time;
			g_pMain->WriteDeathUserLogFile(string_format("[ %s - %d:%d:%d ] Killer=%s,SID=%d,Target=%s,Zone=%d,X=%d,Z=%d\n",m_bMonster ? "MONSTER" : "NPC",time.GetHour(),time.GetMinute(),time.GetSecond(),pKiller->GetName().c_str(),m_sSid,GetName().c_str(),GetZoneID(),uint16(GetX()),uint16(GetZ())));
		}
	}
コード例 #2
0
ファイル: Npc.cpp プロジェクト: gonullu2/koserver
/**
* @brief	Executes the death action.
*
* @param	pKiller	The killer.
*/
void CNpc::OnDeath(Unit *pKiller)
{
	if (m_NpcState == NPC_DEAD)
		return;

	ASSERT(GetMap() != nullptr);
	ASSERT(GetRegion() != nullptr);

	m_NpcState = NPC_DEAD;

	if (m_byObjectType == SPECIAL_OBJECT)
	{
		_OBJECT_EVENT *pEvent = GetMap()->GetObjectEvent(GetProtoID());
		if (pEvent != nullptr)
			pEvent->byLife = 0;
	}

	Unit::OnDeath(pKiller);

	CNpc * pNpc = TO_NPC(this);
	CUser * pUser = TO_USER(pKiller);

	if (pNpc != nullptr && pUser != nullptr)
	{
		if (pNpc->isMonster() && pUser->isPlayer())
		{
			if (pNpc->m_sSid == 700 || pNpc->m_sSid == 750)
			{
				if (pUser->CheckExistEvent(STARTER_SEED_QUEST, 0) || pUser->CheckExistEvent(STARTER_SEED_QUEST, 1))
					pUser->SaveEvent(STARTER_SEED_QUEST, 2);
			}
		}
	}

	GetRegion()->Remove(TO_NPC(this));
	SetRegion();
}
コード例 #3
0
ファイル: Npc.cpp プロジェクト: r1errico/koserver
/**
* @brief	Executes the death process.
*
* @param	pKiller	The killer.
*/
void CNpc::OnDeathProcess(Unit *pKiller)
{
	CUser * pUser = TO_USER(pKiller);

	if (TO_NPC(this) != nullptr && pUser != nullptr)
	{
		if (pUser->isPlayer())
		{
			if (!m_bMonster)
			{
				switch (m_tNpcType)
				{
				case NPC_BIFROST_MONUMENT:
					pUser->BifrostProcess(pUser);
					break;
				case NPC_PVP_MONUMENT:
					PVPMonumentProcess(pUser);
					break;
				case NPC_BATTLE_MONUMENT:
					BattleMonumentProcess(pUser);
					break;
				case NPC_HUMAN_MONUMENT:
					NationMonumentProcess(pUser);
					break;
				case NPC_KARUS_MONUMENT:
					NationMonumentProcess(pUser);
					break;
				}
			}
			else if (m_bMonster)
			{
				if (m_sSid == 700 || m_sSid == 750)
				{
					if (pUser->CheckExistEvent(STARTER_SEED_QUEST, 1))
						pUser->SaveEvent(STARTER_SEED_QUEST, 2);
				}
				else if (g_pMain->m_MonsterRespawnListArray.GetData(m_sSid) != nullptr) {
					if (pUser->isInPKZone() || GetZoneID() == ZONE_JURAD_MOUNTAIN)
						g_pMain->SpawnEventNpc(g_pMain->m_MonsterRespawnListArray.GetData(m_sSid)->sSid, true, GetZoneID(), GetX(), GetY(), GetZ(), g_pMain->m_MonsterRespawnListArray.GetData(m_sSid)->sCount);
				} else if (m_tNpcType == NPC_CHAOS_STONE && pUser->isInPKZone()) {
					ChaosStoneProcess(pUser,5);
				}
			}
		}
	}
}