#ifndef _GAMESERVER_TRIGGERMANAGER_H #define _GAMESERVER_TRIGGERMANAGER_H #pragma once #include "..\\..\\SolarTrigger\\TriggerManager.h" #include "TriggerLastedState.h" class Trigger; //================================================================================================== // class TriggerManagerEx : public TriggerManager { public: enum { MAX_SWITCH_NUM = 255, }; TriggerManagerEx(); virtual ~TriggerManagerEx(); // °¢Á¾ ¼ÂÆÃ!! void Init(TriggerGroupInfo& IN rInfo, GameField* pField); void Release(); void Update(); inline GameField* GetField() const { return m_pField; } inline BOOL IsCanProcess() { return m_pField && m_pField->IsReady(); } inline BYTE GetSwitchValue(BYTE index) { return SWITCH.Get(index); } inline void SetSwitchValue(BYTE index, BYTE value) { SWITCH.Set(index, value); } //----------------------------------------------------------// void SetAttribute(const INT iTileID, const WORD attribute); void UnsetAttribute(const INT iTileID, const WORD attribute); #ifdef _NA_002098_20110307_ADD_NPC_CONTROL_TRIGGER_BASE const TriggerAreaManagerForNpc* GetAreaManagerForNpc() const; bool CreateAreaForNpc(int area_id, CODETYPE unit_id, TriggerAreaLocalStorageForNpc* area_item); bool OnEnterAreaForNpc(TRIGGER_NPC_ENTER_AREA* msg); bool OnLeaveAreaForNpc(TRIGGER_NPC_LEAVE_AREA* msg); #endif bool CreateAreaForMonster(int area_id, CODETYPE monster_code, TriggerAreaLocalStorageForNpc* area_item); //------------- GameLogic -------------------------------// // NOTE: f110928.3L, prevent the client enter area request hacking loophole. // USAGES: CheckAreaIdBasedOnPos(id, NULL, &tile_no);CheckAreaIdBasedOnPos(id, &position, NULL); bool CheckAreaIdBasedOnPos(const int area_id, const WzVector* check_pos, const int* or_tile_no); WzSpecialArea* GetAreaInfo(INT index); //< Æ®¸®°Å¿¡¼­´Â À妽º¹æ½ÄÀÇ ¿µ¿ªÃ£±â¸¸À» »ç¿ë!!!!! int CreateNPC(WORD monsterCode, DWORD numberOfNpc, WzVector* pvPos, DWORD areaID, WORD wGroupID, int iAngle = -1); void CreateMapNPC(WORD NPCCode, const WzVector* pvPos, MAPOBJECT_INFO* pMapInfo); WzVector GetRandomPosInTile(int iTile); BOOL KillMonster(MONSTERCODE monsterCode, Player* pPlayer, BOOL IsExpItemDrop); BOOL KillOneMonster(NPC* pNpc, Player* pPlayer, BOOL IsExpItemDrop); //_NA_0_20100222_UNIT_TRIGGERS_ADD void AddExpAllMember(DWORD64 Exp); MapObject* FindMapObject(const DWORD object_key); //__NA_276_20070213_UNIT_TRIGGER { NPC* CreateNPCForUnitID(const DWORD UnitID); void DestroyNPCForUnitID(const DWORD UnitID); NPC* FindNPCForUnitID(const DWORD unitID); //} MAPOBJECT_INFO* FindMapObjectInfo(const DWORD objectKey); MapNpc* FindMapNpc(const DWORD objectKey); NPC* FindNPC(const DWORD object_key); DWORD GetPlayerNum(); void ClearMission(); void SendToAll(MSG_BASE_FORWARD* pMsg, WORD wSize); template void ForeachPlayer(_OPERATOR& Opr); // _NA_0_20100222_UNIT_TRIGGERS_ADD template void ForeachNPC(_OPERATOR& Opr); static BOOL Check_RewardWindow(Player* pPlayer, BOOL bGMSpecial = FALSE); static BOOL Process_RewardWindow(Player* pPlayer); protected: virtual BaseTrigger* AllocTrigger(); virtual void FreeTrigger(BaseTrigger* pTrigger); ////////////////////////////////////////////////////////////////////////// // private: GameField* m_pField; BOOL m_bInitCompleted; // ÃʱâÈ­¸¦ Çߴ°¡? #ifdef _NA_002098_20110307_ADD_NPC_CONTROL_TRIGGER_BASE TriggerAreaManagerForNpc trigger_area_manager_for_npc_; #endif public: TriggerLastedStateDelegator MAP_STATE; typedef PROPERTY_ARRAY SWITCH_CONTROL; SWITCH_CONTROL SWITCH; }; //================================================================================================== template void TriggerManagerEx::ForeachPlayer(_OPERATOR& Opr) { if(m_pField) m_pField->ForAllPlayer(Opr); } //_NA_0_20100222_UNIT_TRIGGERS_ADD template void TriggerManagerEx::ForeachNPC(_OPERATOR& Opr) { if(m_pField) m_pField->ForAllNPC(Opr); } #ifdef _NA_002098_20110307_ADD_NPC_CONTROL_TRIGGER_BASE inline const TriggerAreaManagerForNpc* TriggerManagerEx::GetAreaManagerForNpc() const { return &trigger_area_manager_for_npc_; } #endif #endif //_GAMESERVER_TRIGGERMANAGER_H