Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifndef __INC_METIN_II_CHAR_H__
- #define __INC_METIN_II_CHAR_H__
- #include <boost/unordered_map.hpp>
- #include "../../common/stl.h"
- #include "entity.h"
- #include "FSM.h"
- #include "horse_rider.h"
- #include "vid.h"
- #include "constants.h"
- #include "affect.h"
- #include "affect_flag.h"
- #include "cube.h"
- #include "mining.h"
- class CBuffOnAttributes;
- class CPetSystem;
- #define INSTANT_FLAG_DEATH_PENALTY (1 << 0)
- #define INSTANT_FLAG_SHOP (1 << 1)
- #define INSTANT_FLAG_EXCHANGE (1 << 2)
- #define INSTANT_FLAG_STUN (1 << 3)
- #define INSTANT_FLAG_NO_REWARD (1 << 4)
- #define AI_FLAG_NPC (1 << 0)
- #define AI_FLAG_AGGRESSIVE (1 << 1)
- #define AI_FLAG_HELPER (1 << 2)
- #define AI_FLAG_STAYZONE (1 << 3)
- #define SET_OVER_TIME(ch, time) (ch)->SetOverTime(time)
- extern int g_nPortalLimitTime;
- enum
- {
- MAIN_RACE_WARRIOR_M,
- MAIN_RACE_ASSASSIN_W,
- MAIN_RACE_SURA_M,
- MAIN_RACE_SHAMAN_W,
- MAIN_RACE_WARRIOR_W,
- MAIN_RACE_ASSASSIN_M,
- MAIN_RACE_SURA_W,
- MAIN_RACE_SHAMAN_M,
- MAIN_RACE_MAX_NUM,
- };
- enum
- {
- POISON_LENGTH = 30,
- STAMINA_PER_STEP = 1,
- SAFEBOX_PAGE_SIZE = 9,
- AI_CHANGE_ATTACK_POISITION_TIME_NEAR = 10000,
- AI_CHANGE_ATTACK_POISITION_TIME_FAR = 1000,
- AI_CHANGE_ATTACK_POISITION_DISTANCE = 100,
- SUMMON_MONSTER_COUNT = 3,
- };
- enum
- {
- FLY_NONE,
- FLY_EXP,
- FLY_HP_MEDIUM,
- FLY_HP_BIG,
- FLY_SP_SMALL,
- FLY_SP_MEDIUM,
- FLY_SP_BIG,
- FLY_FIREWORK1,
- FLY_FIREWORK2,
- FLY_FIREWORK3,
- FLY_FIREWORK4,
- FLY_FIREWORK5,
- FLY_FIREWORK6,
- FLY_FIREWORK_CHRISTMAS,
- FLY_CHAIN_LIGHTNING,
- FLY_HP_SMALL,
- FLY_SKILL_MUYEONG,
- };
- enum EDamageType
- {
- DAMAGE_TYPE_NONE,
- DAMAGE_TYPE_NORMAL,
- DAMAGE_TYPE_NORMAL_RANGE,
- //˝şĹł
- DAMAGE_TYPE_MELEE,
- DAMAGE_TYPE_RANGE,
- DAMAGE_TYPE_FIRE,
- DAMAGE_TYPE_ICE,
- DAMAGE_TYPE_ELEC,
- DAMAGE_TYPE_MAGIC,
- DAMAGE_TYPE_POISON,
- DAMAGE_TYPE_SPECIAL,
- };
- enum EPointTypes
- {
- POINT_NONE, // 0
- POINT_LEVEL, // 1
- POINT_VOICE, // 2
- POINT_EXP, // 3
- POINT_NEXT_EXP, // 4
- POINT_HP, // 5
- POINT_MAX_HP, // 6
- POINT_SP, // 7
- POINT_MAX_SP, // 8
- POINT_STAMINA, // 9 ˝şĹ׹̳Ę
- POINT_MAX_STAMINA, // 10 ĂÖ´ë ˝şĹ׹̳Ę
- POINT_GOLD, // 11
- POINT_ST, // 12 ±Ů·Â
- POINT_HT, // 13 ĂĽ·Â
- POINT_DX, // 14 ąÎøĽş
- POINT_IQ, // 15 Á¤˝Ĺ·Â
- POINT_DEF_GRADE, // 16 ...
- POINT_ATT_SPEED, // 17 °ř°ÝĽÓµµ
- POINT_ATT_GRADE, // 18 °ř°Ý·Â MAX
- POINT_MOV_SPEED, // 19 Ŕ̵żĽÓµµ
- POINT_CLIENT_DEF_GRADE, // 20 ąćľîµî±Ţ
- POINT_CASTING_SPEED, // 21 ÁÖą®ĽÓµµ (Äđ´ŮżîŸŔÓ*100) / (100 + ŔĚ°Ş) = ĂÖÁľ Äđ´Ůżî ŸŔÓ
- POINT_MAGIC_ATT_GRADE, // 22 ¸¶ąý°ř°Ý·Â
- POINT_MAGIC_DEF_GRADE, // 23 ¸¶ąýąćľî·Â
- POINT_EMPIRE_POINT, // 24 Á¦±ąÁˇĽö
- POINT_LEVEL_STEP, // 25 ÇŃ ·ąş§żˇĽŔÇ ´Ü°č.. (1 2 3 µÉ ¶§ ş¸»ó, 4 µÇ¸é ·ąş§ ľ÷)
- POINT_STAT, // 26 ´É·Âġ żĂ¸± Ľö ŔÖ´Â °łĽö
- POINT_SUB_SKILL, // 27 ş¸Á¶ ˝şĹł Ć÷ŔÎĆ®
- POINT_SKILL, // 28 ľ×ĆĽşę ˝şĹł Ć÷ŔÎĆ®
- POINT_WEAPON_MIN, // 29 ą«±â ĂÖĽŇ µĄąĚÁö
- POINT_WEAPON_MAX, // 30 ą«±â ĂÖ´ë µĄąĚÁö
- POINT_PLAYTIME, // 31 ÇĂ·ąŔ̽ðŁ
- POINT_HP_REGEN, // 32 HP ȸşą·ü
- POINT_SP_REGEN, // 33 SP ȸşą·ü
- POINT_BOW_DISTANCE, // 34 Č° »çÁ¤°Ĺ¸® Áő°ˇÄˇ (meter)
- POINT_HP_RECOVERY, // 35 ĂĽ·Â ȸşą Áő°ˇ·®
- POINT_SP_RECOVERY, // 36 Á¤˝Ĺ·Â ȸşą Áő°ˇ·®
- POINT_POISON_PCT, // 37 µ¶ Č®·ü
- POINT_STUN_PCT, // 38 ±âŔý Č®·ü
- POINT_SLOW_PCT, // 39 ˝˝·Îżě Č®·ü
- POINT_CRITICAL_PCT, // 40 Ĺ©¸®ĆĽÄĂ Č®·ü
- POINT_PENETRATE_PCT, // 41 °üĹëŸ°Ý Č®·ü
- POINT_CURSE_PCT, // 42 ŔúÁÖ Č®·ü
- POINT_ATTBONUS_HUMAN, // 43 ŔΰŁżˇ°Ô °ÇÔ
- POINT_ATTBONUS_ANIMAL, // 44 µżą°żˇ°Ô µĄąĚÁö % Áő°ˇ
- POINT_ATTBONUS_ORC, // 45 żő±Íżˇ°Ô µĄąĚÁö % Áő°ˇ
- POINT_ATTBONUS_MILGYO, // 46 ąĐ±łżˇ°Ô µĄąĚÁö % Áő°ˇ
- POINT_ATTBONUS_UNDEAD, // 47 ˝ĂĂĽżˇ°Ô µĄąĚÁö % Áő°ˇ
- POINT_ATTBONUS_DEVIL, // 48 ¸¶±Í(ľÇ¸¶)żˇ°Ô µĄąĚÁö % Áő°ˇ
- POINT_ATTBONUS_INSECT, // 49 ąú·ąÁ·
- POINT_ATTBONUS_FIRE, // 50 Čż°Á·
- POINT_ATTBONUS_ICE, // 51 şůĽłÁ·
- POINT_ATTBONUS_DESERT, // 52 »ç¸·Á·
- POINT_ATTBONUS_MONSTER, // 53 ¸đµç ¸ó˝şĹÍżˇ°Ô °ÇÔ
- POINT_ATTBONUS_WARRIOR, // 54 ą«»çżˇ°Ô °ÇÔ
- POINT_ATTBONUS_ASSASSIN, // 55 ŔÚ°´żˇ°Ô °ÇÔ
- POINT_ATTBONUS_SURA, // 56 Ľö¶óżˇ°Ô °ÇÔ
- POINT_ATTBONUS_SHAMAN, // 57 ą«´çżˇ°Ô °ÇÔ
- POINT_ATTBONUS_TREE, // 58 łŞą«żˇ°Ô °ÇÔ 20050729.myevan UNUSED5
- POINT_RESIST_WARRIOR, // 59 ą«»çżˇ°Ô ŔúÇ×
- POINT_RESIST_ASSASSIN, // 60 ŔÚ°´żˇ°Ô ŔúÇ×
- POINT_RESIST_SURA, // 61 Ľö¶óżˇ°Ô ŔúÇ×
- POINT_RESIST_SHAMAN, // 62 ą«´çżˇ°Ô ŔúÇ×
- POINT_STEAL_HP, // 63 »ý¸í·Â ČíĽö
- POINT_STEAL_SP, // 64 Á¤˝Ĺ·Â ČíĽö
- POINT_MANA_BURN_PCT, // 65 ¸¶łŞ ąř
- /// ÇÇÇؽà ş¸łĘ˝ş ///
- POINT_DAMAGE_SP_RECOVER, // 66 °ř°Ý´çÇŇ ˝Ă Á¤˝Ĺ·Â ȸşą Č®·ü
- POINT_BLOCK, // 67 şí·°Ŕ˛
- POINT_DODGE, // 68 ȸÇÇŔ˛
- POINT_RESIST_SWORD, // 69
- POINT_RESIST_TWOHAND, // 70
- POINT_RESIST_DAGGER, // 71
- POINT_RESIST_BELL, // 72
- POINT_RESIST_FAN, // 73
- POINT_RESIST_BOW, // 74 Č»ě ŔúÇ× : ´ëąĚÁö °¨ĽŇ
- POINT_RESIST_FIRE, // 75 Čż° ŔúÇ× : Čż°°ř°Ýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
- POINT_RESIST_ELEC, // 76 Ŕü±â ŔúÇ× : Ŕü±â°ř°Ýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
- POINT_RESIST_MAGIC, // 77 Ľúąý ŔúÇ× : ¸đµçĽúąýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
- POINT_RESIST_WIND, // 78 ąŮ¶÷ ŔúÇ× : ąŮ¶÷°ř°Ýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
- POINT_REFLECT_MELEE, // 79 °ř°Ý ąÝ»ç
- /// ĆŻĽö ÇÇÇؽà ///
- POINT_REFLECT_CURSE, // 80 ŔúÁÖ ąÝ»ç
- POINT_POISON_REDUCE, // 81 µ¶µĄąĚÁö °¨ĽŇ
- /// Ŕű ĽŇ¸ę˝Ă ///
- POINT_KILL_SP_RECOVER, // 82 Ŕű ĽŇ¸ę˝Ă MP ȸşą
- POINT_EXP_DOUBLE_BONUS, // 83
- POINT_GOLD_DOUBLE_BONUS, // 84
- POINT_ITEM_DROP_BONUS, // 85
- /// ȸşą °ü·Ă ///
- POINT_POTION_BONUS, // 86
- POINT_KILL_HP_RECOVERY, // 87
- POINT_IMMUNE_STUN, // 88
- POINT_IMMUNE_SLOW, // 89
- POINT_IMMUNE_FALL, // 90
- //////////////////
- POINT_PARTY_ATTACKER_BONUS, // 91
- POINT_PARTY_TANKER_BONUS, // 92
- POINT_ATT_BONUS, // 93
- POINT_DEF_BONUS, // 94
- POINT_ATT_GRADE_BONUS, // 95
- POINT_DEF_GRADE_BONUS, // 96
- POINT_MAGIC_ATT_GRADE_BONUS, // 97
- POINT_MAGIC_DEF_GRADE_BONUS, // 98
- POINT_RESIST_NORMAL_DAMAGE, // 99
- POINT_HIT_HP_RECOVERY, // 100
- POINT_HIT_SP_RECOVERY, // 101
- POINT_MANASHIELD, // 102 Čć˝ĹĽöČŁ ˝şĹłżˇ ŔÇÇŃ ¸¶łŞ˝Żµĺ Čż°ú Á¤µµ
- POINT_PARTY_BUFFER_BONUS, // 103
- POINT_PARTY_SKILL_MASTER_BONUS, // 104
- POINT_HP_RECOVER_CONTINUE, // 105
- POINT_SP_RECOVER_CONTINUE, // 106
- POINT_STEAL_GOLD, // 107
- POINT_POLYMORPH, // 108 şŻ˝ĹÇŃ ¸ó˝şĹÍ ąřČŁ
- POINT_MOUNT, // 109 Ÿ°íŔÖ´Â ¸ó˝şĹÍ ąřČŁ
- POINT_PARTY_HASTE_BONUS, // 110
- POINT_PARTY_DEFENDER_BONUS, // 111
- POINT_STAT_RESET_COUNT, // 112 ÇÇŔÇ ´Üľŕ »çżëŔ» ĹëÇŃ ˝şĹÝ ¸®ĽÂ Ć÷ŔÎĆ® (1´ç 1Ć÷ŔÎĆ® ¸®ĽÂ°ˇ´É)
- POINT_HORSE_SKILL, // 113
- POINT_MALL_ATTBONUS, // 114 °ř°Ý·Â +x%
- POINT_MALL_DEFBONUS, // 115 ąćľî·Â +x%
- POINT_MALL_EXPBONUS, // 116 °ćÇčġ +x%
- POINT_MALL_ITEMBONUS, // 117 ľĆŔĚĹŰ µĺ·ÓŔ˛ x/10ąč
- POINT_MALL_GOLDBONUS, // 118 µ· µĺ·ÓŔ˛ x/10ąč
- POINT_MAX_HP_PCT, // 119 ĂÖ´ë»ý¸í·Â +x%
- POINT_MAX_SP_PCT, // 120 ĂÖ´ëÁ¤˝Ĺ·Â +x%
- POINT_SKILL_DAMAGE_BONUS, // 121 ˝şĹł µĄąĚÁö *(100+x)%
- POINT_NORMAL_HIT_DAMAGE_BONUS, // 122 ĆňŸ µĄąĚÁö *(100+x)%
- // DEFEND_BONUS_ATTRIBUTES
- POINT_SKILL_DEFEND_BONUS, // 123 ˝şĹł ąćľî µĄąĚÁö
- POINT_NORMAL_HIT_DEFEND_BONUS, // 124 ĆňŸ ąćľî µĄąĚÁö
- // END_OF_DEFEND_BONUS_ATTRIBUTES
- // PC_BANG_ITEM_ADD
- POINT_PC_BANG_EXP_BONUS, // 125 PCąć Ŕüżë °ćÇčġ ş¸łĘ˝ş
- POINT_PC_BANG_DROP_BONUS, // 126 PCąć Ŕüżë µĺ·Ó·ü ş¸łĘ˝ş
- // END_PC_BANG_ITEM_ADD
- POINT_RAMADAN_CANDY_BONUS_EXP, // ¶ó¸¶´Ü »çĹÁ °ćÇčġ Áő°ˇżë
- POINT_ENERGY = 128, // 128 ±â·Â
- // ±â·Â ui żë.
- // ĽąöżˇĽ ľ˛Áö ľĘ±â¸¸, Ŭ¶óŔĚľđĆ®żˇĽ ±â·ÂŔÇ łˇ ˝Ă°ŁŔ» POINT·Î °ü¸®Çϱ⠶§ą®żˇ ŔĚ·¸°Ô ÇŃ´Ů.
- // ľĆ şÎ˛ô·´´Ů
- POINT_ENERGY_END_TIME = 129, // 129 ±â·Â Áľ·á ˝Ă°Ł
- POINT_COSTUME_ATTR_BONUS = 130,
- POINT_MAGIC_ATT_BONUS_PER = 131,
- POINT_MELEE_MAGIC_ATT_BONUS_PER = 132,
- // Ăß°ˇ ĽÓĽş ŔúÇ×
- POINT_RESIST_ICE = 133, // łĂ±â ŔúÇ× : ľóŔ˝°ř°Ýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
- POINT_RESIST_EARTH = 134, // ´ëÁö ŔúÇ× : ľóŔ˝°ř°Ýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
- POINT_RESIST_DARK = 135, // ľîµŇ ŔúÇ× : ľóŔ˝°ř°Ýżˇ ´ëÇŃ ´ëąĚÁö °¨ĽŇ
- POINT_RESIST_CRITICAL = 136, // Ĺ©¸®ĆĽÄĂ ŔúÇ× : »ó´ëŔÇ Ĺ©¸®ĆĽÄĂ Č®·üŔ» °¨ĽŇ
- POINT_RESIST_PENETRATE = 137, // °üĹëŸ°Ý ŔúÇ× : »ó´ëŔÇ °üĹëŸ°Ý Č®·üŔ» °¨ĽŇ
- #ifdef ENABLE_CHEQUE_SYSTEM
- POINT_CHEQUE = 145,
- #endif
- //POINT_MAX_NUM = 129 common/length.h
- };
- enum EPKModes
- {
- PK_MODE_PEACE,
- PK_MODE_REVENGE,
- PK_MODE_FREE,
- PK_MODE_PROTECT,
- PK_MODE_GUILD,
- PK_MODE_MAX_NUM
- };
- enum EPositions
- {
- POS_DEAD,
- POS_SLEEPING,
- POS_RESTING,
- POS_SITTING,
- POS_FISHING,
- POS_FIGHTING,
- POS_MOUNTING,
- POS_STANDING
- };
- enum EBlockAction
- {
- BLOCK_EXCHANGE = (1 << 0),
- BLOCK_PARTY_INVITE = (1 << 1),
- BLOCK_GUILD_INVITE = (1 << 2),
- BLOCK_WHISPER = (1 << 3),
- BLOCK_MESSENGER_INVITE = (1 << 4),
- BLOCK_PARTY_REQUEST = (1 << 5),
- };
- // <Factor> Dynamically evaluated CHARACTER* equivalent.
- // Referring to SCharDeadEventInfo.
- struct DynamicCharacterPtr {
- DynamicCharacterPtr() : is_pc(false), id(0) {}
- DynamicCharacterPtr(const DynamicCharacterPtr& o)
- : is_pc(o.is_pc), id(o.id) {}
- // Returns the LPCHARACTER found in CHARACTER_MANAGER.
- LPCHARACTER Get() const;
- // Clears the current settings.
- void Reset() {
- is_pc = false;
- id = 0;
- }
- // Basic assignment operator.
- DynamicCharacterPtr& operator=(const DynamicCharacterPtr& rhs) {
- is_pc = rhs.is_pc;
- id = rhs.id;
- return *this;
- }
- // Supports assignment with LPCHARACTER type.
- DynamicCharacterPtr& operator=(LPCHARACTER character);
- // Supports type casting to LPCHARACTER.
- operator LPCHARACTER() const {
- return Get();
- }
- bool is_pc;
- uint32_t id;
- };
- /* ŔúŔĺÇĎ´Â µĄŔĚĹÍ */
- typedef struct character_point
- {
- long long points[POINT_MAX_NUM];
- BYTE job;
- BYTE voice;
- BYTE level;
- DWORD exp;
- long long gold;
- #ifdef ENABLE_CHEQUE_SYSTEM
- BYTE cheque;
- #endif
- int hp;
- int sp;
- int iRandomHP;
- int iRandomSP;
- int stamina;
- BYTE skill_group;
- } CHARACTER_POINT;
- /* ŔúŔĺµÇÁö ľĘ´Â Äł¸ŻĹÍ µĄŔĚĹÍ */
- typedef struct character_point_instant
- {
- long long points[POINT_MAX_NUM];
- float fRot;
- int iMaxHP;
- int iMaxSP;
- long position;
- long instant_flag;
- DWORD dwAIFlag;
- DWORD dwImmuneFlag;
- DWORD dwLastShoutPulse;
- WORD parts[PART_MAX_NUM];
- LPITEM pItems[INVENTORY_AND_EQUIP_SLOT_MAX];
- UINT bItemGrid[INVENTORY_AND_EQUIP_SLOT_MAX];
- // żëČĄĽ® ŔÎşĄĹ丮.
- LPITEM pDSItems[DRAGON_SOUL_INVENTORY_MAX_NUM];
- WORD wDSItemGrid[DRAGON_SOUL_INVENTORY_MAX_NUM];
- // by mhh
- LPITEM pCubeItems[CUBE_MAX_NUM];
- LPCHARACTER pCubeNpc;
- #ifdef __SASH_SYSTEM__
- LPITEM pSashMaterials[SASH_WINDOW_MAX_MATERIALS];
- #endif
- LPCHARACTER battle_victim;
- BYTE gm_level;
- BYTE bBasePart; // Ćň»óşą ąřČŁ
- int iMaxStamina;
- BYTE bBlockMode;
- int iDragonSoulActiveDeck;
- LPENTITY m_pDragonSoulRefineWindowOpener;
- } CHARACTER_POINT_INSTANT;
- #define TRIGGERPARAM LPCHARACTER ch, LPCHARACTER causer
- typedef struct trigger
- {
- BYTE type;
- int (*func) (TRIGGERPARAM);
- long value;
- } TRIGGER;
- class CTrigger
- {
- public:
- CTrigger() : bType(0), pFunc(NULL)
- {
- }
- BYTE bType;
- int (*pFunc) (TRIGGERPARAM);
- };
- EVENTINFO(char_event_info)
- {
- DynamicCharacterPtr ch;
- };
- struct TSkillUseInfo
- {
- int iHitCount;
- int iMaxHitCount;
- int iSplashCount;
- DWORD dwNextSkillUsableTime;
- int iRange;
- bool bUsed;
- DWORD dwVID;
- bool isGrandMaster;
- boost::unordered_map<VID, size_t> TargetVIDMap;
- TSkillUseInfo()
- : iHitCount(0), iMaxHitCount(0), iSplashCount(0), dwNextSkillUsableTime(0), iRange(0), bUsed(false),
- dwVID(0), isGrandMaster(false)
- {}
- bool HitOnce(DWORD dwVnum = 0);
- bool UseSkill(bool isGrandMaster, DWORD vid, DWORD dwCooltime, int splashcount = 1, int hitcount = -1, int range = -1);
- DWORD GetMainTargetVID() const { return dwVID; }
- void SetMainTargetVID(DWORD vid) { dwVID=vid; }
- void ResetHitCount() { if (iSplashCount) { iHitCount = iMaxHitCount; iSplashCount--; } }
- };
- typedef struct packet_party_update TPacketGCPartyUpdate;
- class CExchange;
- class CSkillProto;
- class CParty;
- class CDungeon;
- class CWarMap;
- class CAffect;
- class CGuild;
- class CSafebox;
- class CArena;
- #ifdef OFFLINE_SHOP
- #include "../libgame/include/grid.h"
- typedef struct SPrivShop
- {
- DWORD shop_id;
- DWORD shop_vid;
- char szSign[SHOP_SIGN_MAX_LEN + 1];
- BYTE item_count;
- BYTE rest_count;
- BYTE days;
- DWORD date_close;
- long long gold;
- #ifdef ENABLE_CHEQUE_SYSTEM
- int cash;
- #endif
- } TPrivShop;
- typedef std::map<DWORD, TPrivShop> PSHOP_MAP;
- #endif
- #ifdef GIFT_SYSTEM
- typedef struct SGiftItem
- {
- DWORD id;
- WORD pos;
- #ifdef FULL_YANG
- long long count;
- #else
- DWORD count;
- #endif
- DWORD vnum;
- long alSockets[ITEM_SOCKET_MAX_NUM]; // ĽŇÄĎąřČŁ
- TPlayerItemAttribute aAttr[ITEM_ATTRIBUTE_MAX_NUM];
- char szFrom[101];
- char szReason[101];
- DWORD dwDateAdd;
- } TGiftItem;
- typedef std::map<int, std::vector<TGiftItem> > GIFT_MAP;
- #endif
- class CShop;
- typedef class CShop * LPSHOP;
- class CMob;
- class CMobInstance;
- typedef struct SMobSkillInfo TMobSkillInfo;
- //SKILL_POWER_BY_LEVEL
- extern int GetSkillPowerByLevelFromType(int job, int skillgroup, int skilllevel);
- //END_SKILL_POWER_BY_LEVEL
- namespace marriage
- {
- class WeddingMap;
- }
- enum e_overtime
- {
- OT_NONE,
- OT_3HOUR,
- OT_5HOUR,
- };
- class CHARACTER : public CEntity, public CFSM, public CHorseRider
- {
- protected:
- //////////////////////////////////////////////////////////////////////////////////
- // Entity °ü·Ă
- virtual void EncodeInsertPacket(LPENTITY entity);
- virtual void EncodeRemovePacket(LPENTITY entity);
- //////////////////////////////////////////////////////////////////////////////////
- public:
- LPCHARACTER FindCharacterInView(const char * name, bool bFindPCOnly);
- void UpdatePacket();
- //////////////////////////////////////////////////////////////////////////////////
- // FSM (Finite State Machine) °ü·Ă
- protected:
- CStateTemplate<CHARACTER> m_stateMove;
- CStateTemplate<CHARACTER> m_stateBattle;
- CStateTemplate<CHARACTER> m_stateIdle;
- public:
- virtual void StateMove();
- virtual void StateBattle();
- virtual void StateIdle();
- virtual void StateFlag();
- virtual void StateFlagBase();
- void StateHorse();
- protected:
- // STATE_IDLE_REFACTORING
- void __StateIdle_Monster();
- void __StateIdle_Stone();
- void __StateIdle_NPC();
- // END_OF_STATE_IDLE_REFACTORING
- public:
- DWORD GetAIFlag() const { return m_pointsInstant.dwAIFlag; }
- void SetAggressive();
- bool IsAggressive() const;
- void SetCoward();
- bool IsCoward() const;
- void CowardEscape();
- void SetNoAttackShinsu();
- bool IsNoAttackShinsu() const;
- void SetNoAttackChunjo();
- bool IsNoAttackChunjo() const;
- void SetNoAttackJinno();
- bool IsNoAttackJinno() const;
- void SetAttackMob();
- bool IsAttackMob() const;
- virtual void BeginStateEmpty();
- virtual void EndStateEmpty() {}
- void RestartAtSamePos();
- protected:
- DWORD m_dwStateDuration;
- //////////////////////////////////////////////////////////////////////////////////
- public:
- CHARACTER();
- virtual ~CHARACTER();
- void Create(const char * c_pszName, DWORD vid, bool isPC);
- void Destroy();
- void Disconnect(const char * c_pszReason);
- protected:
- void Initialize();
- //////////////////////////////////////////////////////////////////////////////////
- // Basic Points
- #ifdef __SEND_TARGET_INFO__
- private:
- DWORD dwLastTargetInfoPulse;
- public:
- DWORD GetLastTargetInfoPulse() const { return dwLastTargetInfoPulse; }
- void SetLastTargetInfoPulse(DWORD pulse) { dwLastTargetInfoPulse = pulse; }
- #endif
- public:
- DWORD GetPlayerID() const { return m_dwPlayerID; }
- void SetPlayerProto(const TPlayerTable * table);
- void CreatePlayerProto(TPlayerTable & tab); // ŔúŔĺ ˝Ă »çżë
- void SetProto(const CMob * c_pkMob);
- WORD GetRaceNum() const;
- void Save(); // DelayedSave
- void SaveReal(); // ˝ÇÁ¦ ŔúŔĺ
- void FlushDelayedSaveItem();
- #ifdef ENABLE_NEW_AFFECT_POTION
- void SetAffectPotion(LPITEM item);
- #endif
- const char * GetName() const;
- const VID & GetVID() const { return m_vid; }
- void SetName(const std::string& name) { m_stName = name; }
- void SetRace(BYTE race);
- bool ChangeSex();
- DWORD GetAID() const;
- int GetChangeEmpireCount() const;
- void SetChangeEmpireCount();
- int ChangeEmpire(BYTE empire);
- BYTE GetJob() const;
- BYTE GetCharType() const;
- bool IsPC() const { return GetDesc() ? true : false; }
- bool IsNPC() const { return m_bCharType != CHAR_TYPE_PC; }
- bool IsMonster() const { return m_bCharType == CHAR_TYPE_MONSTER; }
- bool IsStone() const { return m_bCharType == CHAR_TYPE_STONE; }
- bool IsDoor() const { return m_bCharType == CHAR_TYPE_DOOR; }
- bool IsBuilding() const { return m_bCharType == CHAR_TYPE_BUILDING; }
- bool IsWarp() const { return m_bCharType == CHAR_TYPE_WARP; }
- bool IsGoto() const { return m_bCharType == CHAR_TYPE_GOTO; }
- // bool IsPet() const { return m_bCharType == CHAR_TYPE_PET; }
- DWORD GetLastShoutPulse() const { return m_pointsInstant.dwLastShoutPulse; }
- void SetLastShoutPulse(DWORD pulse) { m_pointsInstant.dwLastShoutPulse = pulse; }
- int GetLevel() const { return m_points.level; }
- void SetLevel(BYTE level);
- BYTE GetGMLevel() const;
- BOOL IsGM() const;
- void SetGMLevel();
- DWORD GetExp() const { return m_points.exp; }
- void SetExp(DWORD exp) { m_points.exp = exp; }
- DWORD GetNextExp() const;
- LPCHARACTER DistributeExp(); // Á¦ŔĎ ¸ąŔĚ ¶§¸° »ç¶÷Ŕ» ¸®ĹĎÇŃ´Ů.
- void DistributeHP(LPCHARACTER pkKiller);
- void DistributeSP(LPCHARACTER pkKiller, int iMethod=0);
- void SetPosition(int pos);
- bool IsPosition(int pos) const { return m_pointsInstant.position == pos ? true : false; }
- int GetPosition() const { return m_pointsInstant.position; }
- void SetPart(BYTE bPartPos, WORD wVal);
- WORD GetPart(BYTE bPartPos) const;
- WORD GetOriginalPart(BYTE bPartPos) const;
- void SetHP(int hp) { m_points.hp = hp; }
- int GetHP() const { return m_points.hp; }
- void SetSP(int sp) { m_points.sp = sp; }
- int GetSP() const { return m_points.sp; }
- void SetStamina(int stamina) { m_points.stamina = stamina; }
- int GetStamina() const { return m_points.stamina; }
- void SetMaxHP(int iVal) { m_pointsInstant.iMaxHP = iVal; }
- int GetMaxHP() const { return m_pointsInstant.iMaxHP; }
- void SetMaxSP(int iVal) { m_pointsInstant.iMaxSP = iVal; }
- int GetMaxSP() const { return m_pointsInstant.iMaxSP; }
- void SetMaxStamina(int iVal) { m_pointsInstant.iMaxStamina = iVal; }
- int GetMaxStamina() const { return m_pointsInstant.iMaxStamina; }
- void SetRandomHP(int v) { m_points.iRandomHP = v; }
- void SetRandomSP(int v) { m_points.iRandomSP = v; }
- int GetRandomHP() const { return m_points.iRandomHP; }
- int GetRandomSP() const { return m_points.iRandomSP; }
- int GetHPPct() const;
- void SetRealPoint(BYTE idx, int val);
- int GetRealPoint(BYTE idx) const;
- void SetPoint(BYTE idx, long long val);
- long long GetPoint(BYTE idx) const;
- int GetLimitPoint(BYTE idx) const;
- int GetPolymorphPoint(BYTE idx) const;
- //void ClearInfoCounter(void) { infoCounter = 0; }
- //void IncreaseInfoCounter(void) { infoCounter++; }
- //int GetInfoCounter(void) const { return infoCounter; }
- const TMobTable & GetMobTable() const;
- BYTE GetMobRank() const;
- BYTE GetMobBattleType() const;
- BYTE GetMobSize() const;
- DWORD GetMobDamageMin() const;
- DWORD GetMobDamageMax() const;
- WORD GetMobAttackRange() const;
- DWORD GetMobDropItemVnum() const;
- float GetMobDamageMultiply() const;
- // NEWAI
- bool IsBerserker() const;
- bool IsBerserk() const;
- void SetBerserk(bool mode);
- bool IsStoneSkinner() const;
- bool IsGodSpeeder() const;
- bool IsGodSpeed() const;
- void SetGodSpeed(bool mode);
- bool IsDeathBlower() const;
- bool IsDeathBlow() const;
- bool IsReviver() const;
- bool HasReviverInParty() const;
- bool IsRevive() const;
- void SetRevive(bool mode);
- // NEWAI END
- bool IsRaceFlag(DWORD dwBit) const;
- bool IsSummonMonster() const;
- DWORD GetSummonVnum() const;
- DWORD GetPolymorphItemVnum() const;
- DWORD GetMonsterDrainSPPoint() const;
- void MainCharacterPacket(); // ł»°ˇ ¸ŢŔÎÄł¸ŻĹͶó°í ş¸ł»ÁŘ´Ů.
- void ComputePoints();
- void ComputeBattlePoints();
- void PointChange(BYTE type, long long amount, bool bAmount = false, bool bBroadcast = false);
- void PointsPacket();
- void ApplyPoint(BYTE bApplyType, int iVal);
- void CheckMaximumPoints(); // HP, SP µîŔÇ ÇöŔç °ŞŔĚ ĂÖ´ë°Ş ş¸´Ů łôŔşÁö °Ë»çÇĎ°í łô´Ů¸é ł·Ăá´Ů.
- bool Show(long lMapIndex, long x, long y, long z = LONG_MAX, bool bShowSpawnMotion = false);
- void Sitdown(int is_ground);
- void Standup();
- void SetRotation(float fRot);
- void SetRotationToXY(long x, long y);
- float GetRotation() const { return m_pointsInstant.fRot; }
- void MotionPacketEncode(BYTE motion, LPCHARACTER victim, struct packet_motion * packet);
- void Motion(BYTE motion, LPCHARACTER victim = NULL);
- void ChatPacket(BYTE type, const char *format, ...);
- void MonsterChat(BYTE bMonsterChatType);
- void SendGreetMessage();
- void ResetPoint(int iLv);
- void SetBlockMode(BYTE bFlag);
- void SetBlockModeForce(BYTE bFlag);
- bool IsBlockMode(BYTE bFlag) const { return (m_pointsInstant.bBlockMode & bFlag)?true:false; }
- bool IsPolymorphed() const { return m_dwPolymorphRace>0; }
- bool IsPolyMaintainStat() const { return m_bPolyMaintainStat; } // ŔĚŔü ˝şĹÝŔ» ŔŻÁöÇĎ´Â Ćú¸®¸đÇÁ.
- void SetPolymorph(DWORD dwRaceNum, bool bMaintainStat = false);
- DWORD GetPolymorphVnum() const { return m_dwPolymorphRace; }
- int GetPolymorphPower() const;
- // FISING
- void fishing();
- void fishing_take();
- // END_OF_FISHING
- // MINING
- void mining(LPCHARACTER chLoad);
- void mining_cancel();
- void mining_take();
- // END_OF_MINING
- void ResetPlayTime(DWORD dwTimeRemain = 0);
- void CreateFly(BYTE bType, LPCHARACTER pkVictim);
- void ResetChatCounter();
- BYTE IncreaseChatCounter();
- BYTE GetChatCounter() const;
- protected:
- DWORD m_dwPolymorphRace;
- bool m_bPolyMaintainStat;
- DWORD m_dwLoginPlayTime;
- DWORD m_dwPlayerID;
- VID m_vid;
- std::string m_stName;
- BYTE m_bCharType;
- CHARACTER_POINT m_points;
- CHARACTER_POINT_INSTANT m_pointsInstant;
- int m_iMoveCount;
- DWORD m_dwPlayStartTime;
- BYTE m_bAddChrState;
- bool m_bSkipSave;
- std::string m_stMobile;
- char m_szMobileAuth[5];
- BYTE m_bChatCounter;
- // End of Basic Points
- //////////////////////////////////////////////////////////////////////////////////
- // Move & Synchronize Positions
- //////////////////////////////////////////////////////////////////////////////////
- public:
- bool IsStateMove() const { return IsState((CState&)m_stateMove); }
- bool IsStateIdle() const { return IsState((CState&)m_stateIdle); }
- bool IsWalking() const { return m_bNowWalking || GetStamina()<=0; }
- void SetWalking(bool bWalkFlag) { m_bWalking=bWalkFlag; }
- void SetNowWalking(bool bWalkFlag);
- void ResetWalking() { SetNowWalking(m_bWalking); }
- bool Goto(long x, long y); // ąŮ·Î Ŕ̵ż ˝ĂĹ°Áö ľĘ°í ¸ńÇĄ Ŕ§Äˇ·Î BLENDING ˝ĂŲ´Ů.
- void Stop();
- bool CanMove() const; // Ŕ̵żÇŇ Ľö Ŕִ°ˇ?
- void SyncPacket();
- bool Sync(long x, long y); // ˝ÇÁ¦ ŔĚ ¸ŢĽŇµĺ·Î Ŕ̵ż ÇŃ´Ů (°˘ Áľ Á¶°Çżˇ ŔÇÇŃ Ŕ̵ż şŇ°ˇ°ˇ ľřŔ˝)
- bool Move(long x, long y); // Á¶°ÇŔ» °Ë»çÇĎ°í Sync ¸ŢĽŇµĺ¸¦ ĹëÇŘ Ŕ̵ż ÇŃ´Ů.
- void OnMove(bool bIsAttack = false); // żňÁ÷Ŕ϶§ şŇ¸°´Ů. Move() ¸ŢĽŇµĺ Ŕ̿ܿˇĽµµ şŇ¸± Ľö ŔÖ´Ů.
- DWORD GetMotionMode() const;
- float GetMoveMotionSpeed() const;
- float GetMoveSpeed() const;
- void CalculateMoveDuration();
- void SendMovePacket(BYTE bFunc, BYTE bArg, DWORD x, DWORD y, DWORD dwDuration, DWORD dwTime=0, int iRot=-1);
- DWORD GetCurrentMoveDuration() const { return m_dwMoveDuration; }
- DWORD GetWalkStartTime() const { return m_dwWalkStartTime; }
- DWORD GetLastMoveTime() const { return m_dwLastMoveTime; }
- DWORD GetLastAttackTime() const { return m_dwLastAttackTime; }
- void SetLastAttacked(DWORD time); // ¸¶Áö¸·Ŕ¸·Î °ř°ÝąŢŔş ˝Ă°Ł ą× Ŕ§Äˇ¸¦ ŔúŔĺÇÔ
- bool SetSyncOwner(LPCHARACTER ch, bool bRemoveFromList = true);
- bool IsSyncOwner(LPCHARACTER ch) const;
- bool WarpSet(long x, long y, long lRealMapIndex = 0);
- void SetWarpLocation(long lMapIndex, long x, long y);
- void WarpEnd();
- const PIXEL_POSITION & GetWarpPosition() const { return m_posWarp; }
- bool WarpToPID(DWORD dwPID);
- void SaveExitLocation();
- void ExitToSavedLocation();
- void StartStaminaConsume();
- void StopStaminaConsume();
- bool IsStaminaConsume() const;
- bool IsStaminaHalfConsume() const;
- void ResetStopTime();
- DWORD GetStopTime() const;
- protected:
- void ClearSync();
- float m_fSyncTime;
- LPCHARACTER m_pkChrSyncOwner;
- CHARACTER_LIST m_kLst_pkChrSyncOwned; // ł»°ˇ SyncOwnerŔÎ ŔÚµé
- PIXEL_POSITION m_posDest;
- PIXEL_POSITION m_posStart;
- PIXEL_POSITION m_posWarp;
- long m_lWarpMapIndex;
- PIXEL_POSITION m_posExit;
- long m_lExitMapIndex;
- DWORD m_dwMoveStartTime;
- DWORD m_dwMoveDuration;
- DWORD m_dwLastMoveTime;
- DWORD m_dwLastAttackTime;
- DWORD m_dwWalkStartTime;
- DWORD m_dwStopTime;
- bool m_bWalking;
- bool m_bNowWalking;
- bool m_bStaminaConsume;
- // End
- // Quickslot °ü·Ă
- public:
- /////////////// STRONY
- void SyncQuickslot(BYTE bType, UINT bOldPos, UINT bNewPos);
- bool GetQuickslot(UINT pos, TQuickslot ** ppSlot);
- bool SetQuickslot(UINT pos, TQuickslot & rSlot);
- bool DelQuickslot(UINT pos);
- bool SwapQuickslot(UINT a, UINT b);
- void ChainQuickslotItem(LPITEM pItem, BYTE bType, UINT bOldPos);
- ////////////////////////
- protected:
- TQuickslot m_quickslot[QUICKSLOT_MAX_NUM];
- ////////////////////////////////////////////////////////////////////////////////////////
- // Affect
- public:
- void StartAffectEvent();
- void ClearAffect(bool bSave=false);
- void ComputeAffect(CAffect * pkAff, bool bAdd);
- bool AddAffect(DWORD dwType, BYTE bApplyOn, long lApplyValue, DWORD dwFlag, long lDuration, long lSPCost, bool bOverride, bool IsCube = false);
- void RefreshAffect();
- bool RemoveAffect(DWORD dwType);
- bool IsAffectFlag(DWORD dwAff) const;
- bool UpdateAffect(); // called from EVENT
- int ProcessAffect();
- void LoadAffect(DWORD dwCount, TPacketAffectElement * pElements);
- void SaveAffect();
- // Affect loadingŔĚ łˇł »óĹÂŔΰˇ?
- bool IsLoadedAffect() const { return m_bIsLoadedAffect; }
- bool IsGoodAffect(BYTE bAffectType) const;
- void RemoveGoodAffect();
- void RemoveBadAffect();
- CAffect * FindAffect(DWORD dwType, BYTE bApply=APPLY_NONE) const;
- const std::list<CAffect *> & GetAffectContainer() const { return m_list_pkAffect; }
- bool RemoveAffect(CAffect * pkAff);
- protected:
- bool m_bIsLoadedAffect;
- TAffectFlag m_afAffectFlag;
- std::list<CAffect *> m_list_pkAffect;
- public:
- // PARTY_JOIN_BUG_FIX
- void SetParty(LPPARTY pkParty);
- LPPARTY GetParty() const { return m_pkParty; }
- bool RequestToParty(LPCHARACTER leader);
- void DenyToParty(LPCHARACTER member);
- void AcceptToParty(LPCHARACTER member);
- /// ŔÚ˝ĹŔÇ ĆÄĆĽżˇ ´Ů¸Ą character ¸¦ ĂĘ´ëÇŃ´Ů.
- /**
- * @param pchInvitee ĂĘ´ëÇŇ ´ë»ó character. ĆÄĆĽżˇ Âüż© °ˇ´ÉÇŃ »óĹÂŔĚľîľß ÇŃ´Ů.
- *
- * ľçĂř character ŔÇ »óĹ°ˇ ĆÄĆĽżˇ ĂĘ´ëÇĎ°í ĂĘ´ëąŢŔ» Ľö ŔÖ´Â »óĹ°ˇ ľĆ´Ď¶ó¸é ĂĘ´ëÇĎ´Â Äł¸ŻĹÍżˇ°Ô ÇŘ´çÇϴ äĆĂ ¸ŢĽĽÁö¸¦ ŔüĽŰÇŃ´Ů.
- */
- void PartyInvite(LPCHARACTER pchInvitee);
- /// ĂĘ´ëÇß´ř character ŔÇ Ľö¶ôŔ» Ăł¸®ÇŃ´Ů.
- /**
- * @param pchInvitee ĆÄĆĽżˇ Âüż©ÇŇ character. ĆÄĆĽżˇ Âüż©°ˇ´ÉÇŃ »óĹÂŔĚľîľß ÇŃ´Ů.
- *
- * pchInvitee °ˇ ĆÄĆĽżˇ °ˇŔÔÇŇ Ľö ŔÖ´Â »óȲŔĚ ľĆ´Ď¶ó¸é ÇŘ´çÇϴ äĆĂ ¸ŢĽĽÁö¸¦ ŔüĽŰÇŃ´Ů.
- */
- void PartyInviteAccept(LPCHARACTER pchInvitee);
- /// ĂĘ´ëÇß´ř character ŔÇ ĂĘ´ë °ĹşÎ¸¦ Ăł¸®ÇŃ´Ů.
- /**
- * @param [in] dwPID ĂĘ´ë Çß´ř character ŔÇ PID
- */
- void PartyInviteDeny(DWORD dwPID);
- bool BuildUpdatePartyPacket(TPacketGCPartyUpdate & out);
- int GetLeadershipSkillLevel() const;
- bool CanSummon(int iLeaderShip);
- void SetPartyRequestEvent(LPEVENT pkEvent) { m_pkPartyRequestEvent = pkEvent; }
- protected:
- /// ĆÄĆĽżˇ °ˇŔÔÇŃ´Ů.
- /**
- * @param pkLeader °ˇŔÔÇŇ ĆÄĆĽŔÇ ¸®´ő
- */
- void PartyJoin(LPCHARACTER pkLeader);
- /**
- * ĆÄĆĽ °ˇŔÔŔ» ÇŇ Ľö ľřŔ» °ćżěŔÇ żˇ·ŻÄÚµĺ.
- * Error code ´Â ˝Ă°Łżˇ ŔÇÁ¸ŔűŔΰˇżˇ µű¶ó şŻ°ć°ˇ´ÉÇŃ(mutable) type °ú Á¤Ŕű(static) type Ŕ¸·Î łŞ´¶´Ů.
- * Error code ŔÇ °ŞŔĚ PERR_SEPARATOR ş¸´Ů ł·Ŕ¸¸é şŻ°ć°ˇ´ÉÇŃ type ŔĚ°í łôŔ¸¸é Á¤Ŕű type ŔĚ´Ů.
- */
- enum PartyJoinErrCode {
- PERR_NONE = 0, ///< Ăł¸®Ľş°ř
- PERR_SERVER, ///< Ľąöą®Á¦·Î ĆÄĆĽ°ü·Ă Ăł¸® şŇ°ˇ
- PERR_DUNGEON, ///< Äł¸ŻĹÍ°ˇ ´řŔüżˇ ŔÖŔ˝
- PERR_OBSERVER, ///< °üŔü¸đµĺŔÓ
- PERR_LVBOUNDARY, ///< »ó´ë Äł¸ŻĹÍżÍ ·ąş§Â÷ŔĚ°ˇ ł˛
- PERR_LOWLEVEL, ///< »ó´ëĆÄĆĽŔÇ ĂÖ°í·ąş§ş¸´Ů 30·ąş§ ł·Ŕ˝
- PERR_HILEVEL, ///< »ó´ëĆÄĆĽŔÇ ĂÖŔú·ąş§ş¸´Ů 30·ąş§ łôŔ˝
- PERR_ALREADYJOIN, ///< ĆÄĆĽ°ˇŔÔ ´ë»ó Äł¸ŻĹÍ°ˇ ŔĚąĚ ĆÄĆĽÁß
- PERR_PARTYISFULL, ///< ĆÄĆĽŔÎżř Á¦ÇŃ ĂĘ°ú
- PERR_SEPARATOR, ///< Error type separator.
- PERR_DIFFEMPIRE, ///< »ó´ë Äł¸ŻĹÍżÍ ´Ů¸Ą Á¦±ąŔÓ
- PERR_MAX ///< Error code ĂÖ°íġ. ŔĚ ľŐżˇ Error code ¸¦ Ăß°ˇÇŃ´Ů.
- };
- /// ĆÄĆĽ °ˇŔÔŔĚłŞ °áĽş °ˇ´ÉÇŃ Á¶°ÇŔ» °Ë»çÇŃ´Ů.
- /**
- * @param pchLeader ĆÄĆĽŔÇ leader ŔĚ°ĹłŞ ĂĘ´ëÇŃ character
- * @param pchGuest ĂĘ´ëąŢ´Â character
- * @return ¸đµç PartyJoinErrCode °ˇ ąÝČŻµÉ Ľö ŔÖ´Ů.
- */
- static PartyJoinErrCode IsPartyJoinableCondition(const LPCHARACTER pchLeader, const LPCHARACTER pchGuest);
- /// ĆÄĆĽ °ˇŔÔŔĚłŞ °áĽş °ˇ´ÉÇŃ µżŔűŔÎ Á¶°ÇŔ» °Ë»çÇŃ´Ů.
- /**
- * @param pchLeader ĆÄĆĽŔÇ leader ŔĚ°ĹłŞ ĂĘ´ëÇŃ character
- * @param pchGuest ĂĘ´ëąŢ´Â character
- * @return mutable type ŔÇ code ¸¸ ąÝČŻÇŃ´Ů.
- */
- static PartyJoinErrCode IsPartyJoinableMutableCondition(const LPCHARACTER pchLeader, const LPCHARACTER pchGuest);
- LPPARTY m_pkParty;
- DWORD m_dwLastDeadTime;
- LPEVENT m_pkPartyRequestEvent;
- /**
- * ĆÄĆĽĂĘĂ» Event map.
- * key: ĂĘ´ëąŢŔş Äł¸ŻĹÍŔÇ PID
- * value: eventŔÇ pointer
- *
- * ĂĘ´ëÇŃ Äł¸ŻĹ͵鿡 ´ëÇŃ event map.
- */
- typedef std::map< DWORD, LPEVENT > EventMap;
- EventMap m_PartyInviteEventMap;
- // END_OF_PARTY_JOIN_BUG_FIX
- ////////////////////////////////////////////////////////////////////////////////////////
- // Dungeon
- public:
- void SetDungeon(LPDUNGEON pkDungeon);
- LPDUNGEON GetDungeon() const { return m_pkDungeon; }
- LPDUNGEON GetDungeonForce() const;
- protected:
- LPDUNGEON m_pkDungeon;
- int m_iEventAttr;
- ////////////////////////////////////////////////////////////////////////////////////////
- // Guild
- public:
- void SetGuild(CGuild * pGuild);
- CGuild* GetGuild() const { return m_pGuild; }
- void SetWarMap(CWarMap* pWarMap);
- CWarMap* GetWarMap() const { return m_pWarMap; }
- protected:
- CGuild * m_pGuild;
- DWORD m_dwUnderGuildWarInfoMessageTime;
- CWarMap * m_pWarMap;
- ////////////////////////////////////////////////////////////////////////////////////////
- // Item related
- public:
- bool CanHandleItem(bool bSkipRefineCheck = false, bool bSkipObserver = false); // ľĆŔĚĹŰ °ü·Ă ÇŕŔ§¸¦ ÇŇ Ľö Ŕִ°ˇ?
- bool IsItemLoaded() const { return m_bItemLoaded; }
- void SetItemLoaded() { m_bItemLoaded = true; }
- void ClearItem();
- void SetItem(TItemPos Cell, LPITEM item);
- LPITEM GetItem(TItemPos Cell) const;
- LPITEM GetInventoryItem(WORD wCell) const;
- bool IsEmptyItemGrid(TItemPos Cell, BYTE size, int iExceptionCell = -1) const;
- void SetWear(UINT bCell, LPITEM item);
- LPITEM GetWear(UINT bCell) const;
- // MYSHOP_PRICE_LIST
- void UseSilkBotary(void); /// şń´Ü ş¸µű¸® ľĆŔĚĹŰŔÇ »çżë
- /// DB Äł˝Ă·Î şÎĹÍ ąŢľĆżÂ °ˇ°ÝÁ¤ş¸ ¸®˝şĆ®¸¦ ŔŻŔúżˇ°Ô ŔüĽŰÇĎ°í ş¸µű¸® ľĆŔĚĹŰ »çżëŔ» Ăł¸®ÇŃ´Ů.
- /**
- * @param [in] p °ˇ°ÝÁ¤ş¸ ¸®˝şĆ® ĆĐŶ
- *
- * Á˘ĽÓÇŃ ČÄ ĂłŔ˝ şń´Ü ş¸µű¸® ľĆŔĚĹŰ »çżë ˝Ă UseSilkBotary żˇĽ DB Äł˝Ă·Î °ˇ°ÝÁ¤ş¸ ¸®˝şĆ®¸¦ żäĂ»ÇĎ°í
- * ŔŔ´äąŢŔş ˝ĂÁˇżˇ ŔĚ ÇÔĽöżˇĽ ˝ÇÁ¦ şń´Üş¸µű¸® »çżëŔ» Ăł¸®ÇŃ´Ů.
- */
- void UseSilkBotaryReal(const TPacketMyshopPricelistHeader* p);
- // END_OF_MYSHOP_PRICE_LIST
- bool UseItemEx(LPITEM item, TItemPos DestCell);
- bool UseItem(TItemPos Cell, TItemPos DestCell = NPOS);
- // ADD_REFINE_BUILDING
- bool IsRefineThroughGuild() const;
- CGuild * GetRefineGuild() const;
- int ComputeRefineFee(int iCost, int iMultiply = 5) const;
- void PayRefineFee(int iTotalMoney);
- void SetRefineNPC(LPCHARACTER ch);
- // END_OF_ADD_REFINE_BUILDING
- bool RefineItem(LPITEM pkItem, LPITEM pkTarget);
- bool DropItem(TItemPos Cell, BYTE bCount=0);
- bool GiveRecallItem(LPITEM item);
- void ProcessRecallItem(LPITEM item);
- // void PotionPacket(int iPotionType);
- void EffectPacket(int enumEffectType);
- void SpecificEffectPacket(const char filename[128]);
- // ADD_MONSTER_REFINE
- bool DoRefine(LPITEM item, bool bMoneyOnly = false);
- // END_OF_ADD_MONSTER_REFINE
- bool DoRefineWithScroll(LPITEM item);
- /////////// STRONY
- bool RefineInformation(UINT bCell, BYTE bType, int iAdditionalCell = -1);
- void SetRefineMode(int iAdditionalCell = -1);
- void ClearRefineMode();
- bool GiveItem(LPCHARACTER victim, TItemPos Cell);
- bool CanReceiveItem(LPCHARACTER from, LPITEM item) const;
- void ReceiveItem(LPCHARACTER from, LPITEM item);
- bool GiveItemFromSpecialItemGroup(DWORD dwGroupNum, std::vector <DWORD> &dwItemVnums,
- std::vector <DWORD> &dwItemCounts, std::vector <LPITEM> &item_gets, int &count);
- bool MoveItem(TItemPos pos, TItemPos change_pos, BYTE num);
- bool PickupItem(DWORD vid);
- bool EquipItem(LPITEM item, int iCandidateCell = -1);
- bool UnequipItem(LPITEM item);
- // ÇöŔç itemŔ» ÂřżëÇŇ Ľö ŔÖ´Â Áö Č®ŔÎÇĎ°í, şŇ°ˇ´É Çϴٸé Äł¸ŻĹÍżˇ°Ô ŔĚŔŻ¸¦ ľË·ÁÁÖ´Â ÇÔĽö
- bool CanEquipNow(const LPITEM item, const TItemPos& srcCell = NPOS, const TItemPos& destCell = NPOS);
- // ÂřżëÁßŔÎ itemŔ» ąţŔ» Ľö ŔÖ´Â Áö Č®ŔÎÇĎ°í, şŇ°ˇ´É Çϴٸé Äł¸ŻĹÍżˇ°Ô ŔĚŔŻ¸¦ ľË·ÁÁÖ´Â ÇÔĽö
- bool CanUnequipNow(const LPITEM item, const TItemPos& srcCell = NPOS, const TItemPos& destCell = NPOS);
- ////////// STRONY
- bool SwapItem(UINT bCell, UINT bDestCell);
- LPITEM AutoGiveItem(DWORD dwItemVnum, BYTE bCount=1, int iRarePct = -1, bool bMsg = true);
- void AutoGiveItem(LPITEM item, bool longOwnerShip = false);
- int GetEmptyInventory(BYTE size) const;
- int GetEmptyDragonSoulInventory(LPITEM pItem) const;
- void CopyDragonSoulItemGrid(std::vector<WORD>& vDragonSoulItemGrid) const;
- int CountEmptyInventory() const;
- int CountSpecifyItem(DWORD vnum) const;
- void RemoveSpecifyItem(DWORD vnum, DWORD count = 1);
- LPITEM FindSpecifyItem(DWORD vnum) const;
- LPITEM FindItemByID(DWORD id) const;
- int CountSpecifyTypeItem(BYTE type) const;
- void RemoveSpecifyTypeItem(BYTE type, DWORD count = 1);
- bool IsEquipUniqueItem(DWORD dwItemVnum) const;
- // CHECK_UNIQUE_GROUP
- bool IsEquipUniqueGroup(DWORD dwGroupVnum) const;
- // END_OF_CHECK_UNIQUE_GROUP
- void SendEquipment(LPCHARACTER ch);
- // End of Item
- protected:
- /// ÇŃ ľĆŔĚĹŰżˇ ´ëÇŃ °ˇ°ÝÁ¤ş¸¸¦ ŔüĽŰÇŃ´Ů.
- /**
- * @param [in] dwItemVnum ľĆŔĚĹŰ vnum
- * @param [in] dwItemPrice ľĆŔĚĹŰ °ˇ°Ý
- */
- #ifdef ENABLE_CHEQUE_SYSTEM
- void SendMyShopPriceListCmd(DWORD dwItemVnum, TItemPriceType ItemPrice);
- #else
- void SendMyShopPriceListCmd(DWORD dwItemVnum, long long dwItemPrice);
- #endif
- bool m_bNoOpenedShop; ///< ŔĚąř Á˘ĽÓ ČÄ °łŔλóÁˇŔ» ż¬ ŔűŔĚ ŔÖ´ÂÁöŔÇ ż©şÎ(żľú´ř ŔűŔĚ ľř´Ů¸é true)
- bool m_bItemLoaded;
- int m_iRefineAdditionalCell;
- bool m_bUnderRefine;
- DWORD m_dwRefineNPCVID;
- public:
- ////////////////////////////////////////////////////////////////////////////////////////
- // Money related
- long long GetGold() const { return m_points.gold; }
- void SetGold(long long gold) { m_points.gold = gold; }
- bool DropGold(INT gold);
- long long GetAllowedGold() const;
- void GiveGold(long long iAmount);
- #ifdef ENABLE_CHEQUE_SYSTEM
- int GetCheque() const { return m_points.cheque; }
- void SetCheque(BYTE cheque) { m_points.cheque = cheque; }
- #endif
- // End of Money
- ////////////////////////////////////////////////////////////////////////////////////////
- // Shop related
- public:
- void SetShop(LPSHOP pkShop);
- LPSHOP GetShop() const { return m_pkShop; }
- void ShopPacket(BYTE bSubHeader);
- void SetShopOwner(LPCHARACTER ch) { m_pkChrShopOwner = ch; }
- LPCHARACTER GetShopOwner() const { return m_pkChrShopOwner;}
- void OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE bItemCount);
- LPSHOP GetMyShop() const { return m_pkMyShop; }
- void CloseMyShop();
- protected:
- LPSHOP m_pkShop;
- LPSHOP m_pkMyShop;
- std::string m_stShopSign;
- LPCHARACTER m_pkChrShopOwner;
- // End of shop
- ////////////////////////////////////////////////////////////////////////////////////////
- // Exchange related
- public:
- bool ExchangeStart(LPCHARACTER victim);
- void SetExchange(CExchange * pkExchange);
- CExchange * GetExchange() const { return m_pkExchange; }
- protected:
- CExchange * m_pkExchange;
- // End of Exchange
- ////////////////////////////////////////////////////////////////////////////////////////
- // Battle
- public:
- struct TBattleInfo
- {
- int iTotalDamage;
- int iAggro;
- TBattleInfo(int iTot, int iAggr)
- : iTotalDamage(iTot), iAggro(iAggr)
- {}
- };
- typedef std::map<VID, TBattleInfo> TDamageMap;
- typedef struct SAttackLog
- {
- DWORD dwVID;
- DWORD dwTime;
- } AttackLog;
- bool Damage(LPCHARACTER pAttacker, int dam, EDamageType type = DAMAGE_TYPE_NORMAL);
- bool __Profile__Damage(LPCHARACTER pAttacker, int dam, EDamageType type = DAMAGE_TYPE_NORMAL);
- void DeathPenalty(BYTE bExpLossPercent);
- void ReviveInvisible(int iDur);
- bool Attack(LPCHARACTER pkVictim, BYTE bType = 0);
- bool IsAlive() const { return m_pointsInstant.position == POS_DEAD ? false : true; }
- bool CanFight() const;
- bool CanBeginFight() const;
- void BeginFight(LPCHARACTER pkVictim); // pkVictimr°ú ˝Îżě±â ˝ĂŔŰÇŃ´Ů. (°Á¦ŔűŔÓ, ˝ĂŔŰÇŇ Ľö ŔÖłŞ ĂĽĹ©ÇĎ·Á¸é CanBeginFightŔ» »çżë)
- bool CounterAttack(LPCHARACTER pkChr); // ąÝ°ÝÇϱâ (¸ó˝şĹ͸¸ »çżë)
- bool IsStun() const;
- void Stun();
- bool IsDead() const;
- void Dead(LPCHARACTER pkKiller = NULL, bool bImmediateDead=false);
- void Reward(bool bItemDrop);
- void RewardGold(LPCHARACTER pkAttacker);
- bool Shoot(BYTE bType);
- void FlyTarget(DWORD dwTargetVID, long x, long y, BYTE bHeader);
- void ForgetMyAttacker();
- void AggregateMonster();
- void AttractRanger();
- void PullMonster();
- int GetArrowAndBow(LPITEM * ppkBow, LPITEM * ppkArrow, int iArrowCount = 1);
- void UseArrow(LPITEM pkArrow, DWORD dwArrowCount);
- void AttackedByPoison(LPCHARACTER pkAttacker);
- void RemovePoison();
- void AttackedByFire(LPCHARACTER pkAttacker, int amount, int count);
- void RemoveFire();
- void UpdateAlignment(int iAmount);
- int GetAlignment() const;
- //Ľ±ľÇġ ľň±â
- int GetRealAlignment() const;
- void ShowAlignment(bool bShow);
- void SetKillerMode(bool bOn);
- bool IsKillerMode() const;
- void UpdateKillerMode();
- BYTE GetPKMode() const;
- void SetPKMode(BYTE bPKMode);
- void ItemDropPenalty(LPCHARACTER pkKiller);
- void UpdateAggrPoint(LPCHARACTER ch, EDamageType type, int dam);
- //
- // HACK
- //
- public:
- void SetComboSequence(BYTE seq);
- BYTE GetComboSequence() const;
- #ifdef ANTYDMG
- DWORD GetBowTime() {return bow_time;}
- void SetBowTime(DWORD t) {bow_time = t;}
- #endif
- void SetLastComboTime(DWORD time);
- DWORD GetLastComboTime() const;
- int GetValidComboInterval() const;
- void SetValidComboInterval(int interval);
- BYTE GetComboIndex() const;
- void IncreaseComboHackCount(int k = 1);
- void ResetComboHackCount();
- void SkipComboAttackByTime(int interval);
- DWORD GetSkipComboAttackByTime() const;
- protected:
- BYTE m_bComboSequence;
- DWORD m_dwLastComboTime;
- int m_iValidComboInterval;
- BYTE m_bComboIndex;
- int m_iComboHackCount;
- DWORD m_dwSkipComboAttackByTime;
- #ifdef ANTYDMG
- DWORD bow_time;
- #endif
- protected:
- void UpdateAggrPointEx(LPCHARACTER ch, EDamageType type, int dam, TBattleInfo & info);
- void ChangeVictimByAggro(int iNewAggro, LPCHARACTER pNewVictim);
- DWORD m_dwFlyTargetID;
- std::vector<DWORD> m_vec_dwFlyTargets;
- TDamageMap m_map_kDamage; // ľî¶˛ Äł¸ŻĹÍ°ˇ łŞżˇ°Ô ľó¸¶¸¸ĹŔÇ µĄąĚÁö¸¦ ÁÖľú´Â°ˇ?
- // AttackLog m_kAttackLog;
- DWORD m_dwKillerPID;
- int m_iAlignment; // Lawful/Chaotic value -200000 ~ 200000
- int m_iRealAlignment;
- int m_iKillerModePulse;
- BYTE m_bPKMode;
- // Aggro
- DWORD m_dwLastVictimSetTime;
- int m_iMaxAggro;
- // End of Battle
- // Stone
- public:
- void SetStone(LPCHARACTER pkChrStone);
- void ClearStone();
- void DetermineDropMetinStone();
- DWORD GetDropMetinStoneVnum() const { return m_dwDropMetinStone; }
- BYTE GetDropMetinStonePct() const { return m_bDropMetinStonePct; }
- protected:
- LPCHARACTER m_pkChrStone; // łŞ¸¦ ˝şĆůÇŃ µą
- CHARACTER_SET m_set_pkChrSpawnedBy; // ł»°ˇ ˝şĆůÇŃ łđµé
- DWORD m_dwDropMetinStone;
- BYTE m_bDropMetinStonePct;
- // End of Stone
- public:
- enum
- {
- SKILL_UP_BY_POINT,
- SKILL_UP_BY_BOOK,
- SKILL_UP_BY_TRAIN,
- // ADD_GRANDMASTER_SKILL
- SKILL_UP_BY_QUEST,
- // END_OF_ADD_GRANDMASTER_SKILL
- };
- void SkillLevelPacket();
- void SkillLevelUp(DWORD dwVnum, BYTE bMethod = SKILL_UP_BY_POINT);
- bool SkillLevelDown(DWORD dwVnum);
- // ADD_GRANDMASTER_SKILL
- bool UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaster = true);
- void ResetSkill();
- void SetSkillLevel(DWORD dwVnum, BYTE bLev);
- int GetUsedSkillMasterType(DWORD dwVnum);
- bool IsLearnableSkill(DWORD dwSkillVnum) const;
- // END_OF_ADD_GRANDMASTER_SKILL
- bool CheckSkillHitCount(const BYTE SkillID, const VID dwTargetVID);
- bool CanUseSkill(DWORD dwSkillVnum) const;
- bool IsUsableSkillMotion(DWORD dwMotionIndex) const;
- int GetSkillLevel(DWORD dwVnum) const;
- int GetSkillMasterType(DWORD dwVnum) const;
- int GetSkillPower(DWORD dwVnum, BYTE bLevel = 0) const;
- time_t GetSkillNextReadTime(DWORD dwVnum) const;
- void SetSkillNextReadTime(DWORD dwVnum, time_t time);
- void SkillLearnWaitMoreTimeMessage(DWORD dwVnum);
- void ComputePassiveSkill(DWORD dwVnum);
- int ComputeSkill(DWORD dwVnum, LPCHARACTER pkVictim, BYTE bSkillLevel = 0);
- int ComputeSkillAtPosition(DWORD dwVnum, const PIXEL_POSITION& posTarget, BYTE bSkillLevel = 0);
- void ComputeSkillPoints();
- void SetSkillGroup(BYTE bSkillGroup);
- BYTE GetSkillGroup() const { return m_points.skill_group; }
- int ComputeCooltime(int time);
- void GiveRandomSkillBook();
- void DisableCooltime();
- bool LearnSkillByBook(DWORD dwSkillVnum, BYTE bProb = 0);
- bool LearnGrandMasterSkill(DWORD dwSkillVnum);
- private:
- bool m_bDisableCooltime;
- DWORD m_dwLastSkillTime; ///< ¸¶Áö¸·Ŕ¸·Î skill Ŕ» ľ´ ˝Ă°Ł(millisecond).
- // End of Skill
- // MOB_SKILL
- public:
- bool HasMobSkill() const;
- size_t CountMobSkill() const;
- const TMobSkillInfo * GetMobSkill(unsigned int idx) const;
- bool CanUseMobSkill(unsigned int idx) const;
- bool UseMobSkill(unsigned int idx);
- void ResetMobSkillCooltime();
- protected:
- DWORD m_adwMobSkillCooltime[MOB_SKILL_MAX_NUM];
- // END_OF_MOB_SKILL
- // for SKILL_MUYEONG
- public:
- void StartMuyeongEvent();
- void StopMuyeongEvent();
- private:
- LPEVENT m_pkMuyeongEvent;
- // for SKILL_CHAIN lighting
- public:
- int GetChainLightningIndex() const { return m_iChainLightingIndex; }
- void IncChainLightningIndex() { ++m_iChainLightingIndex; }
- void AddChainLightningExcept(LPCHARACTER ch) { m_setExceptChainLighting.insert(ch); }
- void ResetChainLightningIndex() { m_iChainLightingIndex = 0; m_setExceptChainLighting.clear(); }
- int GetChainLightningMaxCount() const;
- const CHARACTER_SET& GetChainLightingExcept() const { return m_setExceptChainLighting; }
- private:
- int m_iChainLightingIndex;
- CHARACTER_SET m_setExceptChainLighting;
- // for SKILL_EUNHYUNG
- public:
- void SetAffectedEunhyung();
- void ClearAffectedEunhyung() { m_dwAffectedEunhyungLevel = 0; }
- bool GetAffectedEunhyung() const { return m_dwAffectedEunhyungLevel; }
- private:
- DWORD m_dwAffectedEunhyungLevel;
- //
- // Skill levels
- //
- protected:
- TPlayerSkill* m_pSkillLevels;
- boost::unordered_map<BYTE, int> m_SkillDamageBonus;
- std::map<int, TSkillUseInfo> m_SkillUseInfo;
- ////////////////////////////////////////////////////////////////////////////////////////
- // AI related
- public:
- void AssignTriggers(const TMobTable * table);
- LPCHARACTER GetVictim() const; // °ř°ÝÇŇ ´ë»ó ¸®ĹĎ
- void SetVictim(LPCHARACTER pkVictim);
- LPCHARACTER GetNearestVictim(LPCHARACTER pkChr);
- LPCHARACTER GetProtege() const; // ş¸ČŁÇŘľß ÇŇ ´ë»ó ¸®ĹĎ
- bool Follow(LPCHARACTER pkChr, float fMinimumDistance = 150.0f);
- bool Return();
- bool IsGuardNPC() const;
- bool IsChangeAttackPosition(LPCHARACTER target) const;
- void ResetChangeAttackPositionTime() { m_dwLastChangeAttackPositionTime = get_dword_time() - AI_CHANGE_ATTACK_POISITION_TIME_NEAR;}
- void SetChangeAttackPositionTime() { m_dwLastChangeAttackPositionTime = get_dword_time();}
- bool OnIdle();
- void OnAttack(LPCHARACTER pkChrAttacker);
- void OnClick(LPCHARACTER pkChrCauser);
- VID m_kVIDVictim;
- protected:
- DWORD m_dwLastChangeAttackPositionTime;
- CTrigger m_triggerOnClick;
- // End of AI
- ////////////////////////////////////////////////////////////////////////////////////////
- // Target
- protected:
- LPCHARACTER m_pkChrTarget; // ł» Ÿ°Ů
- CHARACTER_SET m_set_pkChrTargetedBy; // łŞ¸¦ Ÿ°ŮŔ¸·Î °ˇÁö°í ŔÖ´Â »ç¶÷µé
- public:
- void SetTarget(LPCHARACTER pkChrTarget);
- void BroadcastTargetPacket();
- void ClearTarget();
- void CheckTarget();
- LPCHARACTER GetTarget() const { return m_pkChrTarget; }
- ////////////////////////////////////////////////////////////////////////////////////////
- // Safebox
- public:
- int GetSafeboxSize() const;
- void QuerySafeboxSize();
- void SetSafeboxSize(int size);
- CSafebox * GetSafebox() const;
- void LoadSafebox(int iSize, DWORD dwGold, int iItemCount, TPlayerItem * pItems);
- void ChangeSafeboxSize(BYTE bSize);
- void CloseSafebox();
- /// â°í ż±â żäĂ»
- /**
- * @param [in] pszPassword 1ŔÚ ŔĚ»ó 6ŔÚ ŔĚÇĎŔÇ Ă˘°í şńąĐąřČŁ
- *
- * DB żˇ â°íż±â¸¦ żäĂ»ÇŃ´Ů.
- * â°í´Â ÁßşąŔ¸·Î żÁö ¸řÇϸç, Ăֱ٠â°í¸¦ ´ÝŔş ˝Ă°ŁŔ¸·Î şÎĹÍ 10ĂĘ ŔĚł»żˇ´Â ż Áö ¸řÇŃ´Ů.
- */
- void ReqSafeboxLoad(const char* pszPassword);
- /// â°í ż±â żäĂ»ŔÇ ĂëĽŇ
- /**
- * ReqSafeboxLoad ¸¦ ČŁĂâÇĎ°í CloseSafebox ÇĎÁö ľĘľŇŔ» ¶§ ŔĚ ÇÔĽö¸¦ ČŁĂâÇϸé â°í¸¦ ż Ľö ŔÖ´Ů.
- * â°íż±âŔÇ żäĂ»ŔĚ DB ĽąöżˇĽ ˝ÇĆĐŔŔ´äŔ» ąŢľŇŔ» °ćżě ŔĚ ÇÔĽö¸¦ »çżëÇŘĽ żäĂ»Ŕ» ÇŇ Ľö ŔÖ°Ô ÇŘÁŘ´Ů.
- */
- void CancelSafeboxLoad( void ) { m_bOpeningSafebox = false; }
- void SetMallLoadTime(int t) { m_iMallLoadTime = t; }
- int GetMallLoadTime() const { return m_iMallLoadTime; }
- CSafebox * GetMall() const;
- void LoadMall(int iItemCount, TPlayerItem * pItems);
- void CloseMall();
- void SetSafeboxOpenPosition();
- float GetDistanceFromSafeboxOpen() const;
- protected:
- CSafebox * m_pkSafebox;
- int m_iSafeboxSize;
- int m_iSafeboxLoadTime;
- bool m_bOpeningSafebox; ///< â°í°ˇ ż±â żäĂ» ÁßŔĚ°ĹłŞ ż·ÁŔִ°ˇ ż©şÎ, true ŔĎ °ćżě ż±âżäĂ»ŔĚ°ĹłŞ ż·ÁŔÖŔ˝.
- CSafebox * m_pkMall;
- int m_iMallLoadTime;
- PIXEL_POSITION m_posSafeboxOpen;
- ////////////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////////////
- // Mounting
- public:
- void MountVnum(DWORD vnum);
- DWORD GetMountVnum() const { return m_dwMountVnum; }
- DWORD GetLastMountTime() const { return m_dwMountTime; }
- bool CanUseHorseSkill();
- // Horse
- virtual void SetHorseLevel(int iLevel);
- virtual bool StartRiding();
- virtual bool StopRiding();
- virtual DWORD GetMyHorseVnum() const;
- virtual void HorseDie();
- virtual bool ReviveHorse();
- virtual void SendHorseInfo();
- virtual void ClearHorseInfo();
- void HorseSummon(bool bSummon, bool bFromFar = false, DWORD dwVnum = 0, const char* name = 0);
- LPCHARACTER GetHorse() const { return m_chHorse; } // ÇöŔç ĽŇČŻÁßŔÎ ¸»
- LPCHARACTER GetRider() const; // rider on horse
- void SetRider(LPCHARACTER ch);
- bool IsRiding() const;
- #ifdef __PET_SYSTEM__
- public:
- CPetSystem* GetPetSystem() { return m_petSystem; }
- protected:
- CPetSystem* m_petSystem;
- public:
- #endif
- protected:
- LPCHARACTER m_chHorse;
- LPCHARACTER m_chRider;
- DWORD m_dwMountVnum;
- DWORD m_dwMountTime;
- BYTE m_bSendHorseLevel;
- BYTE m_bSendHorseHealthGrade;
- BYTE m_bSendHorseStaminaGrade;
- ////////////////////////////////////////////////////////////////////////////////////////
- // Detailed Log
- public:
- void DetailLog() { m_bDetailLog = !m_bDetailLog; }
- void ToggleMonsterLog();
- void MonsterLog(const char* format, ...);
- private:
- bool m_bDetailLog;
- bool m_bMonsterLog;
- ////////////////////////////////////////////////////////////////////////////////////////
- // Empire
- public:
- void SetEmpire(BYTE bEmpire);
- BYTE GetEmpire() const { return m_bEmpire; }
- protected:
- BYTE m_bEmpire;
- ////////////////////////////////////////////////////////////////////////////////////////
- // Regen
- public:
- void SetRegen(LPREGEN pkRegen);
- protected:
- PIXEL_POSITION m_posRegen;
- float m_fRegenAngle;
- LPREGEN m_pkRegen;
- size_t regen_id_; // to help dungeon regen identification
- // End of Regen
- ////////////////////////////////////////////////////////////////////////////////////////
- // Resists & Proofs
- public:
- bool CannotMoveByAffect() const; // ĆŻÁ¤ Čż°úżˇ ŔÇÇŘ żňÁ÷ŔĎ Ľö ľř´Â »óĹÂŔΰˇ?
- bool IsImmune(DWORD dwImmuneFlag);
- void UpdateImmuneFlags();
- void SetImmuneFlag(DWORD dw) { m_pointsInstant.dwImmuneFlag = dw; }
- protected:
- void ApplyMobAttribute(const TMobTable* table);
- // End of Resists & Proofs
- ////////////////////////////////////////////////////////////////////////////////////////
- // QUEST
- //
- public:
- void SetQuestNPCID(DWORD vid);
- DWORD GetQuestNPCID() const { return m_dwQuestNPCVID; }
- LPCHARACTER GetQuestNPC() const;
- #ifdef ANTYDMG
- int GetLastTimeDmg(std::string name);
- void SetLastTimeDmg(std::string name, int value);
- void ClearLastTimeDmg();
- //DMG_HACK_END
- #endif
- void SetQuestItemPtr(LPITEM item);
- void ClearQuestItemPtr();
- LPITEM GetQuestItemPtr() const;
- void SetQuestBy(DWORD dwQuestVnum) { m_dwQuestByVnum = dwQuestVnum; }
- DWORD GetQuestBy() const { return m_dwQuestByVnum; }
- int GetQuestFlag(const std::string& flag) const;
- void SetQuestFlag(const std::string& flag, int value);
- #ifdef FIX_SYNC_HACK
- void SetSyncPosition(long x, long y);
- bool CheckSyncPosition(bool sync_check = false);
- void SetSyncCount(int count) { sync_count += count; }
- #endif
- void ConfirmWithMsg(const char* szMsg, int iTimeout, DWORD dwRequestPID);
- private:
- DWORD m_dwQuestNPCVID;
- DWORD m_dwQuestByVnum;
- #ifdef FIX_SYNC_HACK
- DWORD sync_hack;
- int sync_count;
- unsigned int sync_time;
- #endif
- LPITEM m_pQuestItem;
- #ifdef ANTYDMG
- std::map<std::string, int> m_map_DmgTime;
- #endif
- // Events
- public:
- bool StartStateMachine(int iPulse = 1);
- void StopStateMachine();
- void UpdateStateMachine(DWORD dwPulse);
- void SetNextStatePulse(int iPulseNext);
- // Äł¸ŻĹÍ ŔνşĹĎ˝ş ľ÷µĄŔĚĆ® ÇÔĽö. ±âÁ¸żŁ ŔĚ»óÇŃ »óĽÓ±¸Á¶·Î CFSM::Update ÇÔĽö¸¦ ČŁĂâÇĎ°ĹłŞ UpdateStateMachine ÇÔĽö¸¦ »çżëÇߴµĄ, ş°°łŔÇ ľ÷µĄŔĚĆ® ÇÔĽö Ăß°ˇÇÔ.
- void UpdateCharacter(DWORD dwPulse);
- protected:
- DWORD m_dwNextStatePulse;
- // Marriage
- public:
- LPCHARACTER GetMarryPartner() const;
- void SetMarryPartner(LPCHARACTER ch);
- int GetMarriageBonus(DWORD dwItemVnum, bool bSum = true);
- void SetWeddingMap(marriage::WeddingMap* pMap);
- marriage::WeddingMap* GetWeddingMap() const { return m_pWeddingMap; }
- private:
- marriage::WeddingMap* m_pWeddingMap;
- LPCHARACTER m_pkChrMarried;
- // Warp Character
- public:
- void StartWarpNPCEvent();
- void ChannelSwitch(int new_ch);
- public:
- void StartSaveEvent();
- void StartRecoveryEvent();
- void StartCheckSpeedHackEvent();
- void StartDestroyWhenIdleEvent();
- LPEVENT m_pkDeadEvent;
- LPEVENT m_pkStunEvent;
- LPEVENT m_pkSaveEvent;
- LPEVENT m_pkRecoveryEvent;
- LPEVENT m_pkTimedEvent;
- LPEVENT m_pkFishingEvent;
- LPEVENT m_pkAffectEvent;
- LPEVENT m_pkPoisonEvent;
- LPEVENT m_pkFireEvent;
- LPEVENT m_pkWarpNPCEvent;
- LPEVENT m_pkChannelEvent;
- //DELAYED_WARP
- //END_DELAYED_WARP
- // MINING
- LPEVENT m_pkMiningEvent;
- // END_OF_MINING
- LPEVENT m_pkWarpEvent;
- LPEVENT m_pkCheckSpeedHackEvent;
- LPEVENT m_pkDestroyWhenIdleEvent;
- LPEVENT m_pkPetSystemUpdateEvent;
- bool IsWarping() const { return m_pkWarpEvent ? true : false; }
- bool m_bHasPoisoned;
- const CMob * m_pkMobData;
- CMobInstance * m_pkMobInst;
- std::map<int, LPEVENT> m_mapMobSkillEvent;
- friend struct FuncSplashDamage;
- friend struct FuncSplashAffect;
- friend class CFuncShoot;
- public:
- int GetPremiumRemainSeconds(BYTE bType) const;
- private:
- int m_aiPremiumTimes[PREMIUM_MAX_NUM];
- // CHANGE_ITEM_ATTRIBUTES
- static const DWORD msc_dwDefaultChangeItemAttrCycle; ///< µđĆúĆ® ľĆŔĚĹŰ ĽÓĽşşŻ°ć °ˇ´É ÁÖ±â
- static const char msc_szLastChangeItemAttrFlag[]; ///< Ăֱ٠ľĆŔĚĹŰ ĽÓĽşŔ» şŻ°ćÇŃ ˝Ă°ŁŔÇ Quest Flag Ŕ̸§
- static const char msc_szChangeItemAttrCycleFlag[]; ///< ľĆŔĚĹŰ ĽÓĽşş´°ć °ˇ´É ÁÖ±âŔÇ Quest Flag Ŕ̸§
- // END_OF_CHANGE_ITEM_ATTRIBUTES
- // PC_BANG_ITEM_ADD
- private :
- bool m_isinPCBang;
- public :
- bool SetPCBang(bool flag) { m_isinPCBang = flag; return m_isinPCBang; }
- bool IsPCBang() const { return m_isinPCBang; }
- // END_PC_BANG_ITEM_ADD
- // NEW_HAIR_STYLE_ADD
- public :
- bool ItemProcess_Hair(LPITEM item, int iDestCell);
- // END_NEW_HAIR_STYLE_ADD
- public :
- void ClearSkill();
- void ClearSubSkill();
- // RESET_ONE_SKILL
- bool ResetOneSkill(DWORD dwVnum);
- void JewelryStatus();
- void GetCostumeStatus();
- void UpdateSavePositionWindow();
- bool CanSavePosition();
- // END_RESET_ONE_SKILL
- private :
- void SendDamagePacket(LPCHARACTER pAttacker, int Damage, BYTE DamageFlag);
- // ARENA
- private :
- CArena *m_pArena;
- bool m_ArenaObserver;
- int m_nPotionLimit;
- public :
- void SetArena(CArena* pArena) { m_pArena = pArena; }
- void SetArenaObserverMode(bool flag) { m_ArenaObserver = flag; }
- CArena* GetArena() const { return m_pArena; }
- bool GetArenaObserverMode() const { return m_ArenaObserver; }
- void SetPotionLimit(int count) { m_nPotionLimit = count; }
- int GetPotionLimit() const { return m_nPotionLimit; }
- // END_ARENA
- //PREVENT_TRADE_WINDOW
- public:
- bool IsOpenSafebox() const { return m_isOpenSafebox ? true : false; }
- void SetOpenSafebox(bool b) { m_isOpenSafebox = b; }
- int GetSafeboxLoadTime() const { return m_iSafeboxLoadTime; }
- void SetSafeboxLoadTime() { m_iSafeboxLoadTime = thecore_pulse(); }
- //END_PREVENT_TRADE_WINDOW
- private:
- bool m_isOpenSafebox;
- public:
- int GetSkillPowerByLevel(int level, bool bMob = false) const;
- //PREVENT_REFINE_HACK
- int GetRefineTime() const { return m_iRefineTime; }
- void SetRefineTime() { m_iRefineTime = thecore_pulse(); }
- int m_iRefineTime;
- //END_PREVENT_REFINE_HACK
- //RESTRICT_USE_SEED_OR_MOONBOTTLE
- int GetUseSeedOrMoonBottleTime() const { return m_iSeedTime; }
- void SetUseSeedOrMoonBottleTime() { m_iSeedTime = thecore_pulse(); }
- int m_iSeedTime;
- //END_RESTRICT_USE_SEED_OR_MOONBOTTLE
- //PREVENT_PORTAL_AFTER_EXCHANGE
- int GetExchangeTime() const { return m_iExchangeTime; }
- void SetExchangeTime() { m_iExchangeTime = thecore_pulse(); }
- int m_iExchangeTime;
- //END_PREVENT_PORTAL_AFTER_EXCHANGE
- int m_iMyShopTime;
- int GetMyShopTime() const { return m_iMyShopTime; }
- void SetMyShopTime() { m_iMyShopTime = thecore_pulse(); }
- // Hack ąćÁö¸¦ Ŕ§ÇŃ ĂĽĹ©.
- bool IsHack(bool bSendMsg = true, bool bCheckShopOwner = true, int limittime = g_nPortalLimitTime);
- // MONARCH
- BOOL IsMonarch() const;
- // END_MONARCH
- void Say(const std::string & s);
- enum MONARCH_COOLTIME
- {
- MC_HEAL = 10,
- MC_WARP = 60,
- MC_TRANSFER = 60,
- MC_TAX = (60 * 60 * 24 * 7),
- MC_SUMMON = (60 * 60),
- };
- enum MONARCH_INDEX
- {
- MI_HEAL = 0,
- MI_WARP,
- MI_TRANSFER,
- MI_TAX,
- MI_SUMMON,
- MI_MAX
- };
- DWORD m_dwMonarchCooltime[MI_MAX];
- DWORD m_dwMonarchCooltimelimit[MI_MAX];
- void InitMC();
- DWORD GetMC(enum MONARCH_INDEX e) const;
- void SetMC(enum MONARCH_INDEX e);
- bool IsMCOK(enum MONARCH_INDEX e) const;
- DWORD GetMCL(enum MONARCH_INDEX e) const;
- DWORD GetMCLTime(enum MONARCH_INDEX e) const;
- public:
- bool ItemProcess_Polymorph(LPITEM item);
- // by mhh
- LPITEM* GetCubeItem() { return m_pointsInstant.pCubeItems; }
- bool IsCubeOpen () const { return (m_pointsInstant.pCubeNpc?true:false); }
- void SetCubeNpc(LPCHARACTER npc) { m_pointsInstant.pCubeNpc = npc; }
- bool CanDoCube() const;
- public:
- bool IsSiegeNPC() const;
- private:
- //Áß±ą Ŕüżë
- //18ĽĽ ąĚ¸¸ Ŕüżë
- //3˝Ă°Ł : 50 % 5 ˝Ă°Ł 0%
- e_overtime m_eOverTime;
- public:
- bool IsOverTime(e_overtime e) const { return (e == m_eOverTime); }
- void SetOverTime(e_overtime e) { m_eOverTime = e; }
- private:
- int m_deposit_pulse;
- public:
- void UpdateDepositPulse();
- bool CanDeposit() const;
- private:
- void __OpenPrivateShop();
- public:
- struct AttackedLog
- {
- DWORD dwPID;
- DWORD dwAttackedTime;
- AttackedLog() : dwPID(0), dwAttackedTime(0)
- {
- }
- };
- AttackLog m_kAttackLog;
- AttackedLog m_AttackedLog;
- int m_speed_hack_count;
- private :
- std::string m_strNewName;
- public :
- const std::string GetNewName() const { return this->m_strNewName; }
- void SetNewName(const std::string name) { this->m_strNewName = name; }
- public :
- void GoHome();
- private :
- std::set<DWORD> m_known_guild;
- public :
- void SendGuildName(CGuild* pGuild);
- void SendGuildName(DWORD dwGuildID);
- private :
- DWORD m_dwLogOffInterval;
- public :
- DWORD GetLogOffInterval() const { return m_dwLogOffInterval; }
- public:
- bool UnEquipSpecialRideUniqueItem ();
- bool CanWarp () const;
- private:
- DWORD m_dwLastGoldDropTime;
- public:
- void StartHackShieldCheckCycle(int seconds);
- void StopHackShieldCheckCycle();
- bool GetHackShieldCheckMode() const { return m_HackShieldCheckMode; }
- void SetHackShieldCheckMode(bool m) { m_HackShieldCheckMode = m; }
- LPEVENT m_HackShieldCheckEvent;
- private:
- bool m_HackShieldCheckMode;
- public:
- void AutoRecoveryItemProcess (const EAffectTypes);
- public:
- void BuffOnAttr_AddBuffsFromItem(LPITEM pItem);
- void BuffOnAttr_RemoveBuffsFromItem(LPITEM pItem);
- private:
- void BuffOnAttr_ValueChange(BYTE bType, BYTE bOldValue, BYTE bNewValue);
- void BuffOnAttr_ClearAll();
- typedef std::map <BYTE, CBuffOnAttributes*> TMapBuffOnAttrs;
- TMapBuffOnAttrs m_map_buff_on_attrs;
- // ą«Ŕű : żřČ°ÇŃ Ĺ×˝şĆ®¸¦ Ŕ§ÇĎż©.
- public:
- void SetArmada() { cannot_dead = true; }
- void ResetArmada() { cannot_dead = false; }
- private:
- bool cannot_dead;
- #ifdef __PET_SYSTEM__
- private:
- bool m_bIsPet;
- public:
- void SetPet() { m_bIsPet = true; }
- bool IsPet() { return m_bIsPet; }
- #endif
- //ĂÖÁľ µĄąĚÁö ş¸Á¤.
- private:
- float m_fAttMul;
- float m_fDamMul;
- public:
- float GetAttMul() { return this->m_fAttMul; }
- void SetAttMul(float newAttMul) {this->m_fAttMul = newAttMul; }
- float GetDamMul() { return this->m_fDamMul; }
- void SetDamMul(float newDamMul) {this->m_fDamMul = newDamMul; }
- private:
- bool IsValidItemPosition(TItemPos Pos) const;
- //µ¶ŔĎ Ľ±ą° ±â´É ĆĐŶ Ŕӽà ŔúŔĺ
- private:
- unsigned int itemAward_vnum;
- char itemAward_cmd[20];
- //bool itemAward_flag;
- public:
- unsigned int GetItemAward_vnum() { return itemAward_vnum; }
- char* GetItemAward_cmd() { return itemAward_cmd; }
- //bool GetItemAward_flag() { return itemAward_flag; }
- void SetItemAward_vnum(unsigned int vnum) { itemAward_vnum = vnum; }
- void SetItemAward_cmd(char* cmd) { strcpy(itemAward_cmd,cmd); }
- //void SetItemAward_flag(bool flag) { itemAward_flag = flag; }
- public:
- //żëČĄĽ®
- // Äł¸ŻĹÍŔÇ affect, quest°ˇ load µÇ±â Ŕüżˇ DragonSoul_Initialize¸¦ ČŁĂâÇĎ¸é ľČµČ´Ů.
- // affect°ˇ °ˇŔĺ ¸¶Áö¸·żˇ ·ÎµĺµÇľî LoadAffectżˇĽ ČŁĂâÇÔ.
- void DragonSoul_Initialize();
- bool DragonSoul_IsQualified() const;
- void DragonSoul_GiveQualification();
- int DragonSoul_GetActiveDeck() const;
- bool DragonSoul_IsDeckActivated() const;
- bool DragonSoul_ActivateDeck(int deck_idx);
- void DragonSoul_DeactivateAll();
- // ąÝµĺ˝Ă ClearItem Ŕüżˇ şŇ·Żľß ÇŃ´Ů.
- // żÖłÄÇϸé....
- // żëČĄĽ® ÇĎłŞ ÇĎłŞ¸¦ deactivateÇŇ ¶§¸¶´Ů µ¦żˇ activeŔÎ żëČĄĽ®ŔĚ ŔÖ´ÂÁö Č®ŔÎÇĎ°í,
- // activeŔÎ żëČĄĽ®ŔĚ ÇĎłŞµµ ľř´Ů¸é, Äł¸ŻĹÍŔÇ żëČĄĽ® affectżÍ, Č°Ľş »óŸ¦ Á¦°ĹÇŃ´Ů.
- //
- // ÇĎÁö¸¸ ClearItem ˝Ă, Äł¸ŻĹÍ°ˇ ÂřżëÇĎ°í ŔÖ´Â ¸đµç ľĆŔĚĹŰŔ» unequipÇĎ´Â ąŮ¶÷żˇ,
- // żëČĄĽ® Affect°ˇ Á¦°ĹµÇ°í, °á±ą ·Î±×ŔÎ ˝Ă, żëČĄĽ®ŔĚ Č°ĽşČµÇÁö ľĘ´Â´Ů.
- // (UnequipÇŇ ¶§żˇ´Â ·Î±×ľĆżô »óĹÂŔÎÁö, ľĆ´ŃÁö ľË Ľö ľř´Ů.)
- // żëČĄĽ®¸¸ deactivate˝ĂĹ°°í Äł¸ŻĹÍŔÇ żëČĄĽ® µ¦ Č°Ľş »óĹ´ °Çµĺ¸®Áö ľĘ´Â´Ů.
- void DragonSoul_CleanUp();
- // żëČĄĽ® °Čâ
- public:
- bool DragonSoul_RefineWindow_Open(LPENTITY pEntity);
- bool DragonSoul_RefineWindow_Close();
- LPENTITY DragonSoul_RefineWindow_GetOpener() { return m_pointsInstant.m_pDragonSoulRefineWindowOpener; }
- bool DragonSoul_RefineWindow_CanRefine();
- private:
- // SyncPositionŔ» ľÇżëÇĎż© ŸŔŻŔú¸¦ ŔĚ»óÇŃ °÷Ŕ¸·Î ş¸ł»´Â ÇŮ ąćľîÇϱâ Ŕ§ÇĎż©,
- // SyncPositionŔĚ ŔϾ ¶§¸¦ ±â·Ď.
- timeval m_tvLastSyncTime;
- int m_iSyncHackCount;
- public:
- void SetLastSyncTime(const timeval &tv) { memcpy(&m_tvLastSyncTime, &tv, sizeof(timeval)); }
- const timeval& GetLastSyncTime() { return m_tvLastSyncTime; }
- void SetSyncHackCount(int iCount) { m_iSyncHackCount = iCount;}
- int GetSyncHackCount() { return m_iSyncHackCount; }
- #ifdef COOLDOWN_SASH_HAIR_COSTUME_PET_WEAPON_COSTUME
- public:
- time_t SashCooldown;
- time_t HairCooldown;
- time_t CostumeCooldown;
- time_t PetCooldown;
- time_t CostumeWeaponCooldown;
- time_t AutoPotionCooldown;
- #endif
- #ifdef COOLDOWN_PETARDY
- time_t PetardyCooldown;
- #endif
- public:
- void ClearPMCounter(void) { m_iPMCounter = 0; }
- void IncreasePMCounter(void) { m_iPMCounter++; }
- void SetLastPMPulse(void);
- int GetPMCounter(void) const { return m_iPMCounter; }
- int GetLastPMPulse(void) const { return m_iLastPMPulse; }
- protected:
- int m_iLastPMPulse;
- int m_iPMCounter;
- public:
- int GetChannelLastChange(void) { return LastChangeChannel; }
- void SetChannelLastChange(int time);
- int GetShopSearchCount(void) { return ShopSearchCount; }
- void SetShopSearchCount(int count);
- int GetShopSearchTime(void) { return ShopSearchTime; }
- void SetShopSearchTime(int time);
- //hide_costume
- int GetCostumeHairTime(void) { return CostumeHairTime; }
- void SetCostumeHairTime(int time);
- int GetCostumeArmorTime(void) { return CostumeArmorTime; }
- void SetCostumeArmorTime(int time);
- int GetCostumeWeaponTime(void) { return CostumeWeaponTime; }
- void SetCostumeWeaponTime(int time);
- int GetCostumeSashTime(void) { return CostumeSashTime; }
- void SetCostumeSashTime(int time);
- protected:
- int LastChangeChannel;
- int ShopSearchCount;
- int ShopSearchTime;
- int CostumeHairTime;
- int CostumeArmorTime;
- int CostumeWeaponTime;
- int CostumeSashTime;
- public:
- int GetShopCreateTime(void) { return ShopCreateTime; }
- void SetShopCreateTime(int time);
- int GetShopEditTime(void) { return ShopEditTime; }
- void SetShopEditTime(int time);
- protected:
- int ShopCreateTime;
- int ShopEditTime;
- #ifdef COOLDOWN_WYRZUCANIE_ITEMOW
- public:
- int GetDropLastTime(void) { return LastDropTime; }
- void SetDropLastTime(int time);
- protected:
- int LastDropTime;
- #endif
- #ifdef COOLDOWN_SHOW_SHOP
- public:
- int GetShowShopLastTime(void) { return LastShowShopTime; }
- void SetShowShopLastTime(int time);
- protected:
- int LastShowShopTime;
- #endif
- #ifdef __SASH_SYSTEM__
- protected:
- bool m_bSashCombination, m_bSashAbsorption;
- public:
- bool isSashOpened(bool bCombination) {return bCombination ? m_bSashCombination : m_bSashAbsorption;}
- void OpenSash(bool bCombination);
- void CloseSash();
- void ClearSashMaterials();
- bool CleanSashAttr(LPITEM pkItem, LPITEM pkTarget);
- LPITEM* GetSashMaterials() {return m_pointsInstant.pSashMaterials;}
- bool SashIsSameGrade(long lGrade);
- long long GetSashCombinePrice(long lGrade);
- void GetSashCombineResult(DWORD & dwItemVnum, DWORD & dwMinAbs, DWORD & dwMaxAbs);
- BYTE CheckEmptyMaterialSlot();
- void AddSashMaterial(TItemPos tPos, BYTE bPos);
- void RemoveSashMaterial(BYTE bPos);
- BYTE CanRefineSashMaterials();
- void RefineSashMaterials();
- #endif
- public:
- void SendGMHackLog(const char * reason, int type = 0);
- #ifdef OFFLINE_SHOP
- public:
- void OpenMyShop(const char * c_pszSign, TShopItemTable * pTable, BYTE bItemCount, DWORD days);
- void SendShops(bool isGm = false);
- void OpenShop(DWORD id, const char *name, bool onboot = false);
- void SetPrivShop(DWORD shop_id) { bprivShop = shop_id; }
- BOOL IsPrivShop(void) const { return bprivShop>0; }
- DWORD GetPrivShop() const { return bprivShop; }
- void SetPrivShopOwner(DWORD id) { bprivShopOwner = id; }
- DWORD GetPrivShopOwner() const { return bprivShopOwner; }
- void DeleteMyShop();
- DWORD GetShopTime() const { return dw_ShopTime; }
- void SetShopTime(DWORD time) { dw_ShopTime = time; }
- void SetShopSign(const char * name);
- void LoadPrivShops();
- void SendShopBank();
- TPrivShop GetPrivShopTable(DWORD id);
- void RemovePrivShopTable(DWORD id);
- void UpdatePrivShopTable(DWORD id, TPrivShop shop);
- void UpdateShopItems();
- void SendShopCost();
- bool CheckOfflineShopPos(int id);
- private:
- PSHOP_MAP m_mapshops;
- DWORD bprivShop;
- DWORD bprivShopOwner;
- DWORD dw_ShopTime;
- public:
- void StartRefreshShopEvent();
- protected:
- LPEVENT m_pkRefreshShopEvent;
- #endif
- #ifdef GIFT_SYSTEM
- protected:
- void AddGiftGrid(int page);
- int AddGiftGridItem(int page, int size);
- GIFT_MAP m_mapGiftGrid;
- LPEVENT m_pkGiftRefresh;
- DWORD m_dwLastGiftPage;
- public:
- void StartRefreshGift();
- void LoadGiftPage(int page);
- void RefreshGift();
- int GetGiftPages() { return m_mapGiftGrid.size(); }
- int GetLastGiftPage() { return m_dwLastGiftPage; }
- #endif
- #ifdef ANTY_DMG_ADAMS
- private:
- typedef struct SAttackCounter {
- DWORD dwValue;
- DWORD dwMaxValue;
- DWORD dwLastHitTime;
- SAttackCounter() :
- dwValue(0), dwMaxValue(0), dwLastHitTime(0) {}
- void Update()
- {
- if (++dwValue > dwMaxValue)
- dwMaxValue = dwValue;
- DWORD dwCurrentTime = get_dword_time() / 1000;
- if (dwCurrentTime > dwLastHitTime)
- {
- dwValue = 0;
- dwLastHitTime = dwCurrentTime;
- }
- }
- } TAttackCounter;
- typedef std::map<DWORD, TAttackCounter *> TAttackCounterMap;
- typedef TAttackCounterMap::iterator TAttackCounterMapIterator;
- TAttackCounterMap m_map_attack_counter;
- public:
- void CleanOutdatedAttackCounters(bool bForce = false);
- void UpdateAttackCounter(DWORD dwVID);
- float CalculateAttacksPerSecond();
- float GetAllowedAttacksPerSecond();
- bool IsAttackHack();
- #endif
- };
- ESex GET_SEX(LPCHARACTER ch);
- #endif
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement