#ifndef _MODIFY_CHARACTER_H_ #define _MODIFY_CHARACTER_H_ #include < Creature/Character/Character.h > #include < Network/Protocol/Ryl_AdminMgrProtocol.h > #include < Pattern/Singleton.h > // Àüó¸® ------------------------ class CPacketDispatch; class CModifyCharacterMgr; class CBuffer; class CSession; //-------------------------------- // Ryl_ItemData.cpp namespace ItemData { // ¾ÆÀÌÅÛ ÁÂÇ¥¸¦ ¸¸µç´Ù. Item::ItemPos MakeItemPos(unsigned char cPos, unsigned char cX, unsigned char cY, unsigned char cZ); // ¾î¶²À§Ä¡¿¡ ¾ÆÀÌÅÛÀÌ Á¸ÀçÇÒ±î? inline bool IsArrayContainer(unsigned char cTakePos); // ¾ÆÀÌÅÛÀ» º¹»çÇÑ´Ù. Item::CItem* CloneItem(Item::CItem* lpSrcItem, PktAdminMgr::CreateItemInfo EquipInfo); // ÇѰ³ÀÇ UID¿¡ 3¸íÀÇ Ä³¸¯ÅͰ¡ ÀÖ°í 3¸íÀÇ Ä³¸¯ÅÍ´Â 1°³ÀÇ Ã¢°í¸¦ »ç¿ëÇÑ´Ù.. // ¿©·¯ °èÁ¤ÀÇ Ã¢°í Á¢±ÙÀ» ¸·ÀÚ.. // â°íµ¥ÀÌÅͰ¡ °»½Å‰çÀ»°æ¿ì ÇØ´ç UID¿¡ °É·ÁÀִ ij¸¯Å͸¦ ÀÛ¾÷ÁßÀÎ °ü¸®Àڵ鿡°Ô â°í Á¤º¸¸¦ °»½Å½ÃÄÑ ÁÖÀÚ. class CDepositLock { public: struct DepositInfo { unsigned long m_dwCID; CPacketDispatch* m_lpPacketDispatch; DepositInfo() : m_dwCID(0) , m_lpPacketDispatch(NULL) { ;} DepositInfo(unsigned long dwCID, CPacketDispatch* lpPacketDispatch) : m_dwCID(dwCID) , m_lpPacketDispatch(lpPacketDispatch) { ;} }; typedef std::map< unsigned long, DepositInfo > isMapDeposit; typedef isMapDeposit::iterator isDepositPos; public: isDepositPos begin() { return m_DepositUser.begin(); } isDepositPos end() { return m_DepositUser.end(); } size_t size() { return m_DepositUser.size(); } bool isUse(unsigned long dwUID, unsigned long dwCID, CPacketDispatch* lpPacketDispatch, bool& bisLock); void DepositLock(unsigned long dwUID, unsigned long dwCID, CPacketDispatch* lpPacketDispatch); void DepositUnLock(unsigned long dwUID); CPacketDispatch* GetDispatch(unsigned long dwUID); void RemoveAllSelectDispatch(CPacketDispatch* lpPacketDispatch); bool GetLockInfo(unsigned long dwUID, DepositInfo& Info); private: isMapDeposit m_DepositUser; }; }; // LearnSkill.cpp // ƯÁ¤ ij¸¯ÅͰ¡ ½Àµæ°¡´ÉÇÑ ½ºÅ³À» Ç¥½ÃÇϱâ À§ÇØ ÇÊ¿äÇÑ Å¬·¡½º // ½ºÅ³ ½ºÅ©¸³Æ®¸¦ ·ÎµåÇÏ¿© ¾ÆÀÌÅÛŸÀÔÀ» Á¦¿ÜÇÑ ¸ðµç ½ºÅ³ÀÇ ID¸¸ º¸°ü class CSkillID : public CStaticSingleton { public: typedef std::list isListSkillUID; typedef isListSkillUID::iterator isListSkillPos; ~CSkillID() { m_listSkillUID.clear(); } isListSkillPos begin() { return m_listSkillUID.begin(); } isListSkillPos end() { return m_listSkillUID.end(); } void insert(unsigned short SkillUID) { m_listSkillUID.push_back(SkillUID); } bool ReadSkillScript(char* szScriptName = "./Script/Game/SkillScript.txt"); private: isListSkillUID m_listSkillUID; }; // Item::CEquipment ´Ù¿î ij½ºÆ® Ŭ·¡½º (¸â¹ö º¯¼ö Ãß°¡ÇÏÁö ¸¶½Ã¿À!) class CModifyEquipment : public Item::CEquipment { public: void AdjustData(PktAdminMgr::CreateItemInfo EquipInfo) { m_cMaxNumOrDurability = EquipInfo.m_cMaxDurability; m_cMaxSocket = EquipInfo.m_cMaxSocketNum; m_cUpgradeLevel = EquipInfo.m_cUpgradeLevel; m_cSeasonRecord = EquipInfo.m_cSeasonRecord; m_cCoreLevel = EquipInfo.m_cCoreLevel; for(m_cSocketNum = 0; m_cSocketNum < m_cMaxSocket; ++m_cSocketNum) { if (0 == EquipInfo.m_cSocket[m_cSocketNum]) break; } CopyMemory(m_cSocket, EquipInfo.m_cSocket, sizeof(unsigned char) * m_cSocketNum); CopyMemory(m_usRuneSocket, EquipInfo.m_usRuneSocket, sizeof(unsigned short) * Item::EquipmentInfo::MAX_RUNE_SOCKET_NUM); CopyMemory(m_wAttribute, EquipInfo.m_usAttribute, sizeof(unsigned short) * Item::Attribute::MAX_ATTRIBUTE_NUM); } void AddGemAttribute() { ApplyGemAttribute(APPLY); } void RemoveGemAttribute() { ApplyGemAttribute(REMOVE); } void AddUpgradeAttribute() { ApplyUpgradeAttribute(APPLY); } void RemoveUpgradeAttribute() { ApplyUpgradeAttribute(REMOVE); } void AddRuneAttribute() { ApplyRuneAttribute(APPLY); } void RemoveRuneAttribute() { ApplyRuneAttribute(REMOVE); } }; // Item::CItem ´Ù¿î ij½ºÆ® Ŭ·¡½º (¸â¹ö º¯¼ö Ãß°¡ÇÏÁö ¸¶½Ã¿À!) class CModifyItem : public Item::CItem { public: void SetUID(unsigned __int64 UID); void SetPrototoypID(unsigned short PrototypeID); }; // ij¸¯ÅÍ Á¤º¸ ¼öÁ¤À» À§ÇÑ È®Àå Ŭ·¡½º class CModifyCharacter : public CCharacter { friend CModifyCharacterMgr; public: #pragma pack(1) struct CHAR_EXTRA_DATA { CHAR_INFOEX m_CharInfoEX; QUEST m_Quest; HISTORY m_History; CONFIG m_Config; }; #pragma pack() enum MASK { ON_BASIC = 1, // ON_BASIC Á¤º¸ ¼öÁ¤ ON_EXTRA = 2, // ON_EXTRA Á¤º¸ ¼öÁ¤ ON_FRIEND = 4, // ON_FRIEND Á¤º¸ ¼öÁ¤ ON_BAN = 8, // ON_BAN Á¤º¸ ¼öÁ¤ ON_STROE12 = 16, // ON_STROE12 Á¤º¸ ¼öÁ¤ ON_STORE34 = 32, // ON_STORE34 Á¤º¸ ¼öÁ¤ OFF_BASIC = 62, // ON_BASIC Á¤º¸ ¾øÀ½ OFF_EXTRA = 61, // ON_EXTRA Á¤º¸ ¾øÀ½ OFF_FRIEND = 59, // ON_FRIEND Á¤º¸ ¾øÀ½ OFF_BAN = 55, // ON_BAN Á¤º¸ ¾øÀ½ OFF_STORE12 = 47, // ON_STROE12 Á¤º¸ ¾øÀ½ OFF_STORE34 = 31, // ON_STORE34 Á¤º¸ ¾øÀ½ }; CModifyCharacter(); ~CModifyCharacter() { } BYTE m_byChangedInfo; void SetUID(unsigned long dwUID) { m_dwUID = dwUID; } // ij¸¯ÅÍ UID º¯°æ void SetCID(unsigned long dwCID) { m_dwCID = dwCID; } // ij¸¯ÅÍ CID º¯°æ void SetUserNation(unsigned char cNation) { m_cQuestNation = cNation; } // ij¸¯ÅÍ ±¹Àû º¯°æ void SetServerGroup(unsigned long dwServerGroup) { m_dwServerGroup = dwServerGroup; } // ¼­¹ö±×·ì º¯°æ void SetOldServerGroup(unsigned char cGroupID) { m_cOldServerGroupID = cGroupID; } // Old ¼­¹ö ±×·ì º¯°æ unsigned long GetServerGroup() { return m_dwServerGroup; } // ÇöÀç ¼­¹ö±×·ì ¾ò±â void SetModifyAdmin(char* Account, int Length); // ¿¡µðÆÃÁßÀÎ °ü¸®ÀÚ ¾ÆÀ̵𠺯°æ void SetDispatch(CPacketDispatch* lpPacketDispatch) { m_lpPacketDispatch = lpPacketDispatch; } // ¿¡µðÆÃÁßÀÎ °ü¸®ÀÚ Dispatchº¯°æ CPacketDispatch* GetDispatch() { return m_lpPacketDispatch; } // ¿¡µðÆÃÁßÀÎ °ü¸®ÀÚÀÇ Dispatch¸¦ °¡Á®¿Â´Ù unsigned short GetMaxHP() { return m_CreatureStatus.m_StatusInfo.m_nMaxHP; } // ij¸¯ÅÍÀÇ ÃÖ´ë ü·Â unsigned short GetNowHP() { return m_CreatureStatus.m_nNowHP; } // ij¸¯ÅÍÀÇ ÇöÀç ü·Â unsigned short GetMaxMP() { return m_CreatureStatus.m_StatusInfo.m_nMaxMP; } // ij¸¯ÅÍÀÇ ÃÖ´ë ¸¶³ª unsigned short GetNowMP() { return m_CreatureStatus.m_nNowMP; } // ij¸¯ÅÍÀÇ ÇöÀç ¸¶³ª char* GetName() { return m_DBData.m_Info.Name; } // ij¸¯¸í ¾ò±â void ChangeName(char* szName); // ij¸¯¸í º¯°æ void GetModifyCharStatus(PktAdminMgr::CHAR_STATUS_ST& StatusST); // ½ºÅ×ÀÌÅͽº Á¤º¸ ¾ò±â CHAR_EXTRA_DATA& GetExtraData() { return m_ExtraData; } // ±âŸ Á¤º¸ ¾ò±â bool UpdataStatus(PktAdminMgr::CHAR_STATUS_ST& StatusST); // ½ºÅ×ÀÌÅͽº Á¤º¸ ¼öÁ¤ bool SetGold(unsigned long dwGold); // ij¸¯ÅÍ ¼ÒÁö±Ý º¯°æ Item::CItem* UIDbyItem(unsigned __int64 ItemUID, unsigned char cTakeType); // ¾ÆÀÌÅÛUID·Î ij¸¯ÅÍ ¾ÆÀÌÅÛ °Ë»ö unsigned short GetMaxSkillPoint(); // ij¸¯ÅͰ¡ »ç¿ëÇÒ ¼ö ÀÖ´Â ½ºÅ³ Æ÷ÀÎÆ® unsigned short GetSkillPoint() { return m_DBData.m_Skill.GetSkillNum(); } // ÇöÀç ½ºÅ³ ¼ö SKILL& GetSkill() { return m_DBData.m_Skill; } // ij¸¯ÅÍÀÇ ½ºÅ³ Á¤º¸ unsigned char AppendSkill(unsigned short wSkillID, char cLevel, char cLockCount); // ½ºÅ³ Ãß°¡ unsigned char DeleteSkill(unsigned short wSkillID, char cLevel, char cLockCount); // ½ºÅ³ »èÁ¦ short GetSkillLevelEX(unsigned short usSkillType, char cLockCount); // ½ºÅ³ ·¹º§ ¾ò±â bool ChkEmptySlot(SKILL Skill); // ºó ½½·ÔÀÌ ÀÖ´ÂÁö üũ CHAR_POS& GetLastPos() { return m_DBData.m_Pos; } // ij¸¯ÅÍÀÇ ¸¶Áö¸· À§Ä¡ ¾ò±â Position& GetCurPos() { return m_CurrentPos; } // ij¸¯ÅÍÀÇ ¸¶Áö¸· À§Ä¡¸¦ ¾ò±â(µ¥ÀÌÅͺ£À̽º Á¤º¸) void SetServerID(unsigned long dwServerID) { m_ExtraData.m_CharInfoEX.ServerID = dwServerID; } // ij¸¯ÅÍÀÇ ¸¶Áö¸· ¼­¹ö ¾ÆÀ̵ð(Á¸) ¼öÁ¤ unsigned long GetServerID() { return m_ExtraData.m_CharInfoEX.ServerID; } // ¸¶Áö¸· Á¸ ¾ò±â void Reset(); // ÀüºÎ ÃʱâÈ­ void OnChangedInfo(int iMask); // Á¤º¸°¡ º¯°æµÈ ¼½¼Ç ÀúÀå void OffChangedInfo(int iMask); // Á¤º¸ º¯°æ ¼½¼ÇÀ» ÇØÁ¦ void SetNextClose() { m_bScheduleClose = true; } // ÀúÀåÈÄ Ä³¸¯ÅÍ´ÝÀ½ ¼³Á¤ bool isClose() { return m_bScheduleClose; } // ij¸¯ÅÍÀÇ ´ÝÈù »óÅ ¿©ºÎ void SetClientKey(unsigned long dwClientKey) { m_dwClientRequestKey = dwClientKey; } // °ü¸®ÀÚÀÇ Å¬¶óÀÌ¾ðÆ® Å°¸¦ º¯°æ ( Ŭ¶óÀÌ¾ðÆ®°¡ MDI·Î °è¹ßµÇ¾ú±â¶§¹®¿¡ ÀÖ¾î¾ßÇÔ ) unsigned long GetClientKey() { return m_dwClientRequestKey; } // °ü¸®ÀÚÀÇ Å¬¶óÀ̾ðƮŰ °¡Á®¿À±â unsigned char GetOldServerGroupID() { return m_cOldServerGroupID; } // ÀÌÀü ¼­¹ö±º ID ¾ò±â (Part2Selectable) CSession* GetCheckSession(unsigned long dwUID); // ¼¼¼Ç ¹«°á¼º üũ void SetSaveState(bool bSave) { m_bSave = bSave; } // ÀúÀåÀÓÀ» ¾Ë¸®ÀÚ bool GetSaveState() { return m_bSave; } // ÀúÀå ÁßÀÎÁö ¿©ºÎ // Áߺ¹ ¾ÆÀÌÅÛ °Ë»ç °ü·Ã typedef std::set <__int64> ModifyCharItemSerialInfo; typedef std::vector<__int64> OverlapSerialInfo; ModifyCharItemSerialInfo m_ModifyCharItemSerialInfo; OverlapSerialInfo m_OverlapSerialInfo; void SetOwnCopyItemState(bool IsOwn) { m_bIsOwnCopyItem = IsOwn; } // º¹»ç ¾ÆÀÌÅÛ ¼ÒÀ¯¿©ºÎ ¼ÂÆÃ bool IsOwnCopyItem() { return m_bIsOwnCopyItem; } // º¹»ç ¾ÆÀÌÅÛ ¼ÒÀ¯¿©ºÎ void ParseQuestData(); void SetQuestData(); unsigned char GetUserNation() { return m_cQuestNation; } char GetChance() { return m_DBData.m_Info.Chance; } unsigned char GetNameChangeChance() { return m_ExtraData.m_CharInfoEX.cNameChangeCount; } void SetNameChangeChance(unsigned char cChance) { m_ExtraData.m_CharInfoEX.cNameChangeCount = cChance; } void RevisionQuestNation(); // Äù½ºÆ® Á¾¼Ó¼º üũ¿ë ±¹Àû ¼³Á¤(2005-11-23 Ãß°¡) private: CPacketDispatch* m_lpPacketDispatch; // Á¢±ÙÁßÀÎ °ü¸®ÀÚ µð½ºÆÐÄ¡ unsigned long m_dwServerGroup; // ÇØ´ç ij¸¯ÅͰ¡ Á¸ÀçÇÏ´Â Áß°è¼­¹öÀÇ ±×·ì char m_szModifyAdmin[40]; // ¿¡µðÆÃÁßÀÎ °ü¸®ÀÚ °èÁ¤¸í bool m_bScheduleClose; // ¾÷µ¥ÀÌÆ®ÈÄ Ä³¸¯ÅÍ ¼¼¼ÇÀ» ´ÝÀ»Áö ¿©ºÎ unsigned long m_dwClientRequestKey; // Ŭ¶óÀÌ¾ðÆ® ¼öÁ¤Ã¢(¹®¼­)ÀÇ ½Äº°¹øÈ£ bool m_bSave; // ÀúÀå ÁßÀÎÁö ¿©ºÎ bool m_bIsOwnCopyItem; // º¹»ç ¾ÆÀÌÅÛ ¼ÒÀ¯ ¿©ºÎ unsigned char m_cQuestNation; // ±¹Àû Äù½ºÆ® Á¾¼Ó¼º °Ë»ç¿ë unsigned char m_cOldServerGroupID; // Part2Selectable ŸÀÔÀ϶§ ÇÊ¿äÇÑ Á¤º¸ CHAR_EXTRA_DATA m_ExtraData; // ij¸¯ÅÍ Á¤º¸ ±¸Á¶Ã¼ (±âŸ, Äù½ºÆ®, È÷½ºÅ丮, ¼³Á¤) }; // Á¤º¸ ¿­¶÷, ¼öÁ¤ ÁßÀΠij¸¯ÅÍ ¸ñ·Ï °ü¸® // °¢ ¼­¹ö ±×·ìÀÇ Dispatch°¡ °¢°¢ 1°³¾¿ ¼ÒÀ¯ class CModifyCharacterMgr { public: typedef std::map isMapCharList; typedef isMapCharList::iterator iterator; iterator begin() { return m_mapModifyChar.begin(); } iterator end() { return m_mapModifyChar.end(); } size_t size() { return m_mapModifyChar.size(); } CModifyCharacter* GetCharacter(unsigned long dwCID); // ij¸¯ÅÍ ¾ò±â CModifyCharacter* InsertChar(unsigned long dwCID); // ij¸¯ÅÍ µî·Ï bool EraseChar(unsigned long dwCID); // ij¸¯ÅÍ »èÁ¦ void AllRemoveChar(CPacketDispatch* lpPacketDispatch); // lpPacketDispatch¸¦ »ç¿ëÇϴ ij¸¯Å͸¦ ¸ñ·Ï¿¡¼­ ¸ðµÎ »èÁ¦ void isUIDSendAll(unsigned long dwUID, CBuffer* lpBuffer); // UID°¡ °°Àº ij¸¯ÅÍ ¸ñ·ÏÀÇ Dispatch·Î ÆÐŶ Àü¼Û private: CModifyCharacter* CreateCharacter() { return new CModifyCharacter; } isMapCharList m_mapModifyChar; }; #endif