#ifndef _SIEGE_OBJECT_H_ #define _SIEGE_OBJECT_H_ #pragma once #include #include #include #include #include #include #include using namespace Siege; // Àü¹æ ÂüÁ¶ class CCharacter; namespace BroadCastSiege { class CSerializeSiegeObjectData; } class CSiegeObject : public CSkillMonster, public ICharSphereTreeCallBack { public: typedef std::set BroadCastSet; virtual ~CSiegeObject(); // --------------------------------------------------------------------- // CSkillMonster ·ÎºÎÅÍ »ó¼Ó¹ÞÀº ÇÔ¼ö // Àû¾Æ±º ½Äº° virtual EnemyCheck::EnemyType IsEnemy(CCreature* lpTarget, unsigned char* cResult = NULL); // ÀÚü °ø°Ý ´É·Â ±¸Çö ÇÔ¼ö virtual void NormalBehavior(unsigned long dwTick) { } virtual void AttackBehavior(unsigned long dwTick) { } virtual void SearchPlayer(void) { } bool SkillAttack(void); virtual bool Dead(CAggresiveCreature* pOffencer) { return false; } virtual void MoveTo(const Position& NewPosition); // --------------------------------------------------------------------- // --------------------------------------------------------------------- // ij¸¯ÅͰ¡ Á¶Á¾Çؼ­ °ø°ÝÇÒ °æ¿ì Attack Packet ó¸® ÇÔ¼ö virtual bool AttackCID(CCharacter* lpRideChar, AtType attackType, AtNode& attackNode, unsigned short& wError) { return false; } virtual bool Attack(AtType attackType, unsigned char cDefenderNum, CAggresiveCreature** ppDefenders, unsigned char* cDefenserJudges, unsigned short* wDefenserMPHeal) { return false; } virtual bool MissileAttack(AtType attackType, float fDir, float nRange, float fAngle, char cTargetType) { return false; } // --------------------------------------------------------------------- // --------------------------------------------------------------------- // SiegeObject ó¸® ÇÔ¼ö virtual bool Build(unsigned char cUpgradeStep = 0) { return false; } // ±¸Ãà ¿Ï·á½Ã ó¸® virtual bool Cancel() { return false; } // ±¸Ãà Ãë¼Ò ¿Ï·á virtual bool Upgrade(unsigned char cUpgradeStep) { return false; } // ¾÷±×·¹ÀÌµå ¿Ï·á½Ã ó¸® virtual bool Repair(unsigned short wRepairHP) { return false; } // ¼ö¸® ¿Ï·á½Ã ó¸® virtual bool Restore() { return false; } // º¹±¸ ¿Ï·á½Ã ó¸® virtual bool Destroy(unsigned char cOffencerNation, bool bTakeGold) { return false; } // ÆÄ±« ¿Ï·á½Ã ó¸® (ÀÚü ÆÄ±«, ÆÄ±«µÊ) virtual bool Destroy(unsigned long dwOffencerGID) { return false; } // ±æµå ¿ä»õ ÆÄ±« ¿Ï·á½Ã ó¸® (ÀÚü ÆÄ±«, ÆÄ±«µÊ) virtual bool Update(unsigned char cState, unsigned long dwValue1, unsigned long dwValue2, unsigned long dwOwnerID, unsigned char cSubCmd) { return false; } // Á¤º¸ ¾÷µ¥ÀÌÆ® virtual bool ChangeType(unsigned short wChangeType) { return false; } // º¯Çü ¿Ï·á½Ã ó¸® // ½ºÅ¸ÅÍŶ ¾ÆÀÌÅÛÀ¸·Î Àüȯ (bFullMaterial ÀÌ true À̸é ÀÚÀçÀÇ 90%¸¦ µ¹·ÁÁØ´Ù.) virtual bool ToStarterKit(bool bFullMaterial=false) { return false; } virtual unsigned long GetRepairGold() const { return Siege::MAX_REPAIR_GOLD; } unsigned long GetRepairHP(); // Rider °ü·Ã Á¤º¸ virtual unsigned char IsRider(unsigned long dwCID) const; // ÇØ´ç ij¸¯ÅͰ¡ º´±â¿¡ ž½ÂÇØ Àִ°¡? virtual bool Ride(unsigned long dwCID) { return false; } // º´±â ž½Â virtual bool GetOff(unsigned long dwCID) { return false; } // º´±â ³»¸² virtual void AllGetOff() { GetOff(m_dwRiderCID); } // º´±â¿¡¼­ ¸ðµÎ ³»¸² // ¼º ¿ÀºêÁ§Æ® °ü·ÃµÈ ÇÔ¼ö (»ó¡¹° ¾÷±×·¹À̵忡 µû¸¥ È¿°ú) void UpgradeByEmblem(unsigned char cUpgradeType, unsigned char cUpgradeStep); void DegradeByEmblem(unsigned char cUpgradeType, unsigned char cUpgradeStep); unsigned short GetDefaultNowHP(); // »ó¡¹°ÀÇ ¾÷±×·¹À̵å È¿°ú°¡ ¾ø´Â ÇöÀç HP ¾ò±â // --------------------------------------------------------------------- // ¹Ý°æ 5¼¿¿¡ ÆÐŶÀ» Àü¼ÛÇÏ´Â ÇÔ¼ö void SendHPUpdateToDBAgent(bool bForce=false); // ÀÌÀü ºê·Îµåij½ºÆ® ÇÔ¼ö // void SendToRadiusCell(const char* szPacket, unsigned long dwPacketSize, unsigned char cCMD_In); // bool SerializeOut(char* szBuffer_In, unsigned short& wDataLen); void RangeTest(); virtual void RangeTestCallBack( const Position& centerPos, float fDistance, CCharSphereNode* pNode ); void SendToRange( float fRadius, const char* szPacket, unsigned long dwPacketSize, unsigned char cCMD_In ); BroadCastSiege::CSerializeSiegeObjectData& GetSerializeData(void) { return m_SerializeSiegeObjectData; } // Get / Set ÇÔ¼ö bool IsEmblem() const { return (Siege::EMBLEM == m_wObjectType); } bool IsCamp() const; bool IsGate() const { return (Siege::GATE == m_wObjectType); } bool IsGuard() const { return (Siege::GUARD == m_wObjectType); } bool IsCastleObject() const; bool IsCastleArms() const; bool IsSiegeArms() const; bool IsRidable() const; // Å»¼ö ÀÖ´Â ¿ÀºêÁ§Æ®Àΰ¡? bool IsCastleNPC() const { return (m_wObjectType == Siege::BACKDOOR || m_wObjectType == Siege::CASTLE_ARMS_NPC); } bool IsMaxHP() const { return (m_CreatureStatus.m_nNowHP == m_CreatureStatus.m_StatusInfo.m_nMaxHP); } bool IsPeaceMode(); bool IsRideArms(void) const { return false; } bool IsWorldWeapon() const; unsigned short GetObjectType() const { return m_wObjectType; } unsigned long GetCID() const { return m_dwCID; } unsigned long GetNowHP() const { return m_CreatureStatus.m_nNowHP; } unsigned long GetMaxHP() const { return m_CreatureStatus.m_StatusInfo.m_nMaxHP; } unsigned char GetState() const { return m_cState; } unsigned char GetSubState() const { return m_cSubState; } unsigned char GetUpgradeStep() const { return m_cUpgradeStep; } unsigned char GetUpgradeType() const { return m_cUpgradeType; } const Position& GetPosition() const { return m_CurrentPos; } unsigned char GetMaterialNum() const { return m_cMaterial; } unsigned char GetSiegeCount() const { return m_cSiegeCount; } float GetDefaultDir() const { return m_fDefaultDir; } unsigned long GetRiderCID() const { return m_dwRiderCID; } virtual void GetRiders( unsigned long* pRiders ) const; virtual unsigned char GetRiderNum() const; unsigned long GetDevelopGold(unsigned short wDefaultObjectType=Siege::DEFAULT_TYPE) const; unsigned char GetDevelopSpeed(unsigned short wDefaultObjectType=Siege::DEFAULT_TYPE) const; unsigned long GetUpgradeGold() const; unsigned char GetUpgradeSpeed(unsigned char cDefaultUpgradeType=Siege::NO_JEWEL) const; float GetBonusRate() const; int GetKID() const; unsigned char GetNation() const; unsigned long GetGID() const; CAggresiveCreature* GetDuelOpponent(void) const; char GetConsumeMPCount(void) { return m_cConsumeMPCount; } unsigned long GetCastleID() const { return m_dwCampOrCastleID; } unsigned long GetCampID() const { return m_dwCampOrCastleID; } unsigned long GetOwnerID() const { return m_dwOwnerID; } void SetGID(unsigned long dwGID) { m_dwGID = dwGID; } void SetFullMP() { m_CreatureStatus.m_nNowMP = m_CreatureStatus.m_StatusInfo.m_nMaxMP; } void SetState(unsigned char cState) { m_cState = cState; } void SetSubState(unsigned char cSubState) { m_cSubState = cSubState; } void SetMaterialNum(unsigned char cMaterial); void SetSiegeCount(unsigned char cSiegeCount) { m_cSiegeCount = cSiegeCount; } void SetNation(unsigned char cNation); protected: CSiegeObject(MonsterCreateInfo& MonsterCreate, const CastleObjectInfo& CastleObject); CSiegeObject(MonsterCreateInfo& MonsterCreate, unsigned long dwCampID, unsigned long dwGID, unsigned long dwHP, unsigned short wObjectType, unsigned char cState, unsigned char cSubState, unsigned char cUpgradeStep, unsigned char cMaterial, unsigned char cSiegeCount, bool bFullHP); CSiegeObject(MonsterCreateInfo& MonsterCreate, unsigned long dwOwnerID, unsigned char cNation, unsigned long dwHP, unsigned short wObjectType, unsigned char cState, unsigned char cUpgradeStep); void UpdateObjectInfo(unsigned char cHPType=Siege::NOW_HP, unsigned short wRepairHP=0); // »óÅÂ, ¾÷±×·¹ÀÌµå º¯È­½Ã¿¡ ³»ºÎ°ªµé º¯°æ unsigned long m_dwCampOrCastleID; // CastleID : ¼º »ó¡¹°, ¼º¹®, µÞ¹®, °¡µå, ±Ù°Å¸®/¿ø°Å¸® ¼ö¼ºº´±â // CampID : ±æµå ¿ä»õ »ó¡¹°, °æºñº´ unsigned long m_dwOwnerID; // CID : ±Ù°Å¸®/¿ø°Å¸® ¼ö¼ºº´±â, ±Ù°Å¸®/¿ø°Å¸® °ø¼ºº´±â, ºñ°øÁ¤ unsigned long m_dwGID; // GID : ±æµå ¿ä»õ ¹× ¿ùµå ¿þÆùÀÇ ¼ÒÀ¯ ±æµåÀÇ ±æµåID // ÁÖÀÇ!! °ø¼ºÀü °ü·Ã ¿ÀºêÁ§Æ®´Â GID ¸¦ »ç¿ëÇÏÁö ¾Ê´Â´Ù!! unsigned char m_cNation; // °ø¼ºÀü °ü·Ã ¿ÀºêÁ§Æ®°¡ »ç¿ëÇÏ´Â ±¹°¡ unsigned short m_wObjectType; // °ø¼º °ü·Ã ¿ÀºêÁ§Æ® ŸÀÔ unsigned char m_cState; // ÇöÀç ¿ÀºêÁ§Æ®ÀÇ »óÅ unsigned char m_cSubState; // ÇöÀç ¿ÀºêÁ§Æ®ÀÇ ¼­ºê »óÅ (Use EMBLEM & GATE) unsigned char m_cUpgradeStep; // ÇöÀç ¿ÀºêÁ§Æ®ÀÇ ¾÷±×·¹ÀÌµå ´Ü°è unsigned char m_cUpgradeType; // ¼º »ó¡¹°ÀÇ ¾÷±×·¹À̵å ŸÀÔ (Only EMBLEM) unsigned char m_cMaterial; // °ø¼º ÀÚÀç °¹¼ö unsigned char m_cSiegeCount; // °ø¼º Áö³­ Ƚ¼ö float m_fDefaultDir; // ¼ö¼º º´±âÀÇ ±âº» ¹æÇâ unsigned long m_dwRiderCID; // ¼ö¼º º´±â, °ø¼º º´±â¿¡ ž½ÂÇÑ Ä³¸¯ÅÍÀÇ CID unsigned char m_cHPUpdateCount; // HP Á¤º¸ ¾÷µ¥ÀÌÆ® Ä«¿îÆ® // Rider Á¤º¸°¡ ÇÊ¿äÇÑ ÀÌÀ¯ // 1. ¸î¸íÀ̳ª Ÿ°í ÀÖ´ÂÁö ¾Ë¼ö°¡ ¾ø´Ù. // 2. ´©±º°¡°¡ ³»·ÈÀ» °æ¿ì ´©°¡ ³»·È´ÂÁö ¾Ë¼ö°¡ ¾ø´Ù. // // * µå¶ø½±¿¡ Ÿ°í ³»¸±¶§ ¼ÒÀ¯ÁÖüũ¸¦ ÇÏ¸é ¾ÈµÈ´Ù. // ---------------------------------------------------------------------------------------- // New BroadCast Data BroadCastSiege::CSerializeSiegeObjectData m_SerializeSiegeObjectData; // °ø¼º ¿ÀºêÁ§Æ® µ¥ÀÌÅÍ º¸°ü ¹× º¯°æµÈ µ¥ÀÌÅÍ º¸°ü char m_szBroadCastBuffer[ BroadCastSiege::MAX_SIEGEBROADCAST_BUFFER_SIZE ]; char m_szDeltaBuffer[ BroadCastSiege::MAX_SIEGEBROADCAST_BUFFER_SIZE ]; unsigned long m_dwBroadCastSize; unsigned long m_dwDeltaSize; BroadCastSet m_BroadCastSet; // ---------------------------------------------------------------------------------------- friend class CSiegeObjectMgr; }; #endif // _SIEGE_OBJECT_H_