/*virtual*/ void CEarthBoss::HandleEvent(CEvent* pEvent) { if (pEvent->GetEventID() == "New_Player") SetTarget((CEntity*)(pEvent->GetParam())); if (pEvent->GetDestination() == this) { if (pEvent->GetEventID() == "ModifyHealth") ModifyHealth( *(int*)(pEvent->GetParam()) ); if (pEvent->GetDestination() == this && pEvent->GetEventID() == "Set_State") m_pEState->SetState((CEntityState::ENTITY_STATE)(int)(pEvent->GetParam()) ); if (pEvent->GetDestination() == this && pEvent->GetEventID() == "Dodge_Pitfall") HandleCollision((const IEntity*)pEvent->GetSender(), *(const RECT*)pEvent->GetParam()); if (pEvent->GetDestination() == this && pEvent->GetEventID() == "Kill_Self") { CRemoveEntityMessage* pDestroyMsg = new CRemoveEntityMessage(this); CSGD_MessageSystem::GetInstance()->SendMsg(pDestroyMsg); pDestroyMsg = nullptr; } if (pEvent->GetEventID() == "Self Destruct") { CRemoveEntityMessage* pMsg = new CRemoveEntityMessage(this); CSGD_MessageSystem::GetInstance()->SendMsg(pMsg); pMsg = nullptr; CDropEXPMessage* free_money = new CDropEXPMessage(m_nExpPts); CSGD_MessageSystem::GetInstance()->SendMsg(free_money); free_money = nullptr; } } }
void Health::HandleLCMSG(StringHash eventType, VariantMap& eventData) { const PODVector<unsigned char>& data = eventData[LcMsg::P_DATA].GetBuffer(); MemoryBuffer msg(data); int clientID = msg.ReadInt(); String lc = msg.ReadString(); if (lc == "Health") { if (clientID_ == clientID) { int healthMod = msg.ReadInt(); int operation = msg.ReadInt(); ModifyHealth(healthMod, operation, false); if (isServer_) { msg_.Clear(); msg_.WriteInt(clientID_); msg_.WriteString("Health"); msg_.WriteInt(healthMod); msg_.WriteInt(operation); VariantMap vm0; vm0[ExclusiveNetBroadcast::P_EXCLUDEDCONNECTION] = conn_; vm0[ExclusiveNetBroadcast::P_MSG] = msg_.GetBuffer(); SendEvent(E_EXCLUSIVENETBROADCAST, vm0); } } } }
void Creature::RegenerateHealth() { uint32 curValue = GetHealth(); uint32 maxValue = GetMaxHealth(); if (curValue >= maxValue) return; float HealthIncreaseRate = sWorld.getRate(RATE_HEALTH); float Spirit = GetStat(STAT_SPIRIT); if( HealthIncreaseRate <= 0 ) HealthIncreaseRate = 1; uint32 addvalue = 0; if(isPet()) { if( GetPower(POWER_MANA) > 0 ) addvalue = uint32(Spirit * 0.25 * HealthIncreaseRate); else addvalue = uint32(Spirit * 0.80 * HealthIncreaseRate); } else addvalue = maxValue/3; ModifyHealth(addvalue); }
void Health::HandleModifyHealth(StringHash eventType, VariantMap& eventData) { Node* clientNode = (Node*)(eventData[ModifyClientHealth::P_NODE].GetPtr()); if (clientNode == node_) { int healthMod = eventData[ModifyClientHealth::P_HEALTH].GetInt(); int operation = eventData[ModifyClientHealth::P_OPERATION].GetInt(); bool sendToServer = eventData[ModifyClientHealth::P_SENDTOSERVER].GetBool(); ModifyHealth(healthMod, operation, sendToServer); } }