📄 portal.cpp
字号:
//////////////////////////////////////////////////////////////////////////////// Filename : NormalPortal.cpp// Written by : Reiot// Description ://////////////////////////////////////////////////////////////////////////////#include "Portal.h"#include "Zone.h"#include "ZoneGroup.h"#include "ZoneGroupManager.h"#include "ZoneInfo.h"#include "ZoneInfoManager.h"#include "ZonePlayerManager.h"#include "PCSlayerInfo2.h"#include "PCVampireInfo2.h"#include "LogClient.h"#include "Slayer.h"#include "Vampire.h"#include "TimeManager.h"#include "WeatherManager.h"#include "GamePlayer.h"#include "IncomingPlayerManager.h"#include "PacketUtil.h"#include "Slayer.h"#include "Vampire.h"#include "ZoneUtil.h"#include "Properties.h"#include "Guild.h"#include "GuildManager.h"#include "quest/Trigger.h"#include "Gpackets/GCUpdateInfo.h"#include "Gpackets/GCMoveOK.h"////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////class isSameZoneID {public: // constructor isSameZoneID(ZoneID_t ZoneID) : m_ZoneID(ZoneID) {} // operator bool operator () (PortalTargetInfo* pPortalTargetInfo) throw () { return pPortalTargetInfo->getZoneID() == m_ZoneID; }private: // EffectClass identifier ZoneID_t m_ZoneID;};////////////////////////////////////////////////////////////////////////////////// class PrivatePortal member methods////////////////////////////////////////////////////////////////////////////////PrivatePortal::PrivatePortal(ObjectID_t objectID) throw(): Portal(objectID){ __BEGIN_TRY m_pTarget = new PortalTargetInfo(); __END_CATCH}PrivatePortal::~PrivatePortal() throw(){ __BEGIN_TRY SAFE_DELETE(m_pTarget); __END_CATCH}ZoneID_t PrivatePortal::getZoneID() const throw() { __BEGIN_TRY Assert(m_pTarget != NULL); return m_pTarget->getZoneID(); __END_CATCH}void PrivatePortal::setZoneID(ZoneID_t zoneID) throw() { __BEGIN_TRY Assert(m_pTarget != NULL); m_pTarget->setZoneID(zoneID); __END_CATCH}ZoneCoord_t PrivatePortal::getX() const throw() { __BEGIN_TRY Assert(m_pTarget != NULL); return m_pTarget->getX(); __END_CATCH}void PrivatePortal::setX(ZoneCoord_t x) throw() { __BEGIN_TRY Assert(m_pTarget != NULL); m_pTarget->setX(x); __END_CATCH}ZoneCoord_t PrivatePortal::getY() const throw() { __BEGIN_TRY Assert(m_pTarget != NULL); return m_pTarget->getY(); __END_CATCH}void PrivatePortal::setY(ZoneCoord_t y) throw() { __BEGIN_TRY Assert(m_pTarget != NULL); m_pTarget->setY(y); __END_CATCH}bool PrivatePortal::activate (Creature* pCreature) throw (Error){ __BEGIN_TRY __BEGIN_DEBUG Assert(pCreature != NULL); Assert(m_pTarget != NULL); Assert(pCreature->isPC()); transportCreature(pCreature, m_pTarget->getZoneID(), m_pTarget->getX(), m_pTarget->getY(), true); return true; __END_DEBUG __END_CATCH}string PrivatePortal::toString () const throw (){ StringStream msg; msg << "NormalPortal(" << "Type:" << (int)m_PortalType << "ZoneID:" << (int)m_pTarget->getZoneID() << ",X:" << (int)m_pTarget->getX() << ",Y:" << (int)m_pTarget->getY() << ")"; return msg.toString();}////////////////////////////////////////////////////////////////////////////////// class NormalPortal member methods////////////////////////////////////////////////////////////////////////////////bool NormalPortal::activate (Creature* pCreature) throw (Error){ __BEGIN_TRY __BEGIN_DEBUG Assert(pCreature != NULL); Assert(m_pTarget != NULL); Assert(pCreature->isPC()); transportCreature(pCreature, m_pTarget->getZoneID(), m_pTarget->getX(), m_pTarget->getY(), true); return true; __END_DEBUG __END_CATCH}string NormalPortal::toString () const throw (){ StringStream msg; msg << "NormalPortal(" << "Type:" << (int)m_PortalType << "ZoneID:" << (int)m_pTarget->getZoneID() << ",X:" << (int)m_pTarget->getX() << ",Y:" << (int)m_pTarget->getY() << ")"; return msg.toString();}////////////////////////////////////////////////////////////////////////////////// class GuildPortal member methods////////////////////////////////////////////////////////////////////////////////bool GuildPortal::activate (Creature* pCreature) throw (Error){ __BEGIN_TRY __BEGIN_DEBUG Assert(pCreature != NULL); Assert(m_pTarget != NULL); Assert(pCreature->isPC()); static const uint TEAM_ZONEID = 20001; static const uint CLAN_ZONEID = 20001; PlayerCreature* pPlayerCreature = dynamic_cast<PlayerCreature*>(pCreature); Assert( pPlayerCreature != NULL ); Guild* pGuild = g_pGuildManager->getGuild( pPlayerCreature->getGuildID() ); // 家加等 辨靛啊 绝栏搁 傲 公矫 if ( pGuild == NULL ) return false; // 家加等 辨靛狼 酒瘤飘啊 捞 辑滚俊 绝栏搁 公矫 if ( pGuild->getServerGroupID() != g_pConfig->getPropertyInt( "ServerID" ) ) return false; // 辨靛狼 惑怕啊 active啊 酒聪搁 公矫 if ( pGuild->getState() != Guild::GUILD_STATE_ACTIVE ) return false; // Guild Portal 辆幅甫 Slayer, Vampire 滴啊瘤肺 官层具 窍绰单 矫埃捞 绝绢辑 弊成 Zone ID 甫 焊绊 备喊茄促. // 磊扁 辆练狼 辨靛 器呕牢瘤 犬牢茄促. if ( ( pGuild->getRace() == Guild::GUILD_RACE_SLAYER && m_pTarget->getZoneID() == TEAM_ZONEID ) || ( pGuild->getRace() == Guild::GUILD_RACE_VAMPIRE && m_pTarget->getZoneID() == CLAN_ZONEID ) ) { transportCreature(pCreature, pGuild->getZoneID(), m_pTarget->getX(), m_pTarget->getY(), true); } else { return false; } return true; __END_DEBUG __END_CATCH}string GuildPortal::toString () const throw (){ StringStream msg; msg << "GuildPortal(" << "Type:" << (int)m_PortalType << ",X:" << (int)m_pTarget->getX() << ",Y:" << (int)m_pTarget->getY() << ")"; return msg.toString();}////////////////////////////////////////////////////////////////////////////////// class MultiPortal member methods////////////////////////////////////////////////////////////////////////////////bool MultiPortal::activate (Creature* pCreature, ZoneID_t ZoneID) throw (Error){ __BEGIN_TRY __BEGIN_DEBUG Assert(pCreature->isPC()); list<PortalTargetInfo*>::iterator itr = find_if (m_Targets.begin(), m_Targets.end(), isSameZoneID(ZoneID)); if (itr == m_Targets.end()) { // 给 茫疽瘤贩. return false; } Assert((*itr) != NULL); PortalTargetInfo* pPortalTargetInfo = *itr; // by sigi. 2002.5.8 transportCreature(pCreature, pPortalTargetInfo->getZoneID(), pPortalTargetInfo->getX(), pPortalTargetInfo->getY(), true); return true; __END_DEBUG __END_CATCH}string MultiPortal::toString () const throw (){ StringStream msg; msg << "MultiPortal(" << "Type:" << (int)m_PortalType; for(list<PortalTargetInfo*>::const_iterator itr = m_Targets.begin() ; itr != m_Targets.end() ; itr++) { msg << ",ZoneID:" << (int)(*itr)->getZoneID() << ",X:" << (int)(*itr)->getX() << ",Y:" << (int)(*itr)->getY(); } msg << ")"; return msg.toString();}////////////////////////////////////////////////////////////////////////////////// class TriggeredPortal member methods////////////////////////////////////////////////////////////////////////////////bool TriggeredPortal::activate(Creature* pCreature) throw (Error){ __BEGIN_TRY list<Trigger*>& triggers = m_TriggerManager.getTriggers(); list<Trigger*>::iterator itr = triggers.begin(); // 荤角 for甫 馆汗窍绰 巴篮 公狼固窍促. // 力老 霉锅掳 飘府芭俊辑 炼扒阑 父练矫虐瘤 给窍搁, // 墨款磐 咀记捞 角青登搁辑 府畔登绢滚府扁 锭巩捞促. for (; itr != triggers.end(); itr++) { Trigger* pTrigger = *itr; if (pTrigger->isAllSatisfied(Trigger::PASSIVE_TRIGGER, NULL, pCreature)) { if (pTrigger->activate(NULL, pCreature)) { return true; } } else { if (pTrigger->activateCounter(NULL, pCreature)) { return false; } } } return false; __END_CATCH}void TriggeredPortal::load(ZoneID_t zoneid, int left, int top, int right, int bottom) throw (){ __BEGIN_TRY m_TriggerManager.load(zoneid, left, top, right, bottom); /* // AtFirst 牧叼记捞 乐栏搁, 角青窍绊, 昏力茄促. if (m_TriggerManager.hasCondition(Condition::CONDITION_AT_FIRST)) { list<Trigger*>& triggers = m_TriggerManager.getTriggers(); list<Trigger*>::iterator itr = triggers.begin(); for (; itr != triggers.end(); itr++) { Trigger* pTrigger = *itr; if (pTrigger->hasCondition(Condition::CONDITION_AT_FIRST)) { pTrigger->activate(NULL); triggers.erase(itr); break; } } } */ __END_CATCH}string TriggeredPortal::toString() const throw(){ __BEGIN_TRY StringStream msg; return msg.toString(); __END_CATCH}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -