diff --git a/src/common/service.h b/src/common/service.h index 8d466a3..84725f7 100644 --- a/src/common/service.h +++ b/src/common/service.h @@ -3,8 +3,15 @@ #define ENABLE_AUTODETECT_INTERNAL_IP #define ENABLE_PROXY_IP -#define _IMPROVED_PACKET_ENCRYPTION_ // 패킷 암호화 개선 +#define _IMPROVED_PACKET_ENCRYPTION_ // 패킷 암호화 개선 #define __PET_SYSTEM__ #define __UDP_BLOCK__ +#define FIX_BOOK_READING_FOR_MAX_LEVEL // Disable experience point deduction for reading a book when in max level +#define FIX_BATTLE_INACTIVITY_TIMEOUT // by #tw1x1: Add battle mode inactivity timeout and reset to standing +#define __BL_LEVEL_FIX__ // Live character level updates +//#define FIX_POS_SYNC // Fix position synching between clients + +// #define TW1X1_TEST // tw1x1 test server features + #endif diff --git a/src/game/char.cpp b/src/game/char.cpp index e9bfaf2..4f0332a 100644 --- a/src/game/char.cpp +++ b/src/game/char.cpp @@ -114,6 +114,9 @@ CHARACTER::CHARACTER() m_stateIdle.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateIdle, &CHARACTER::EndStateEmpty); m_stateMove.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateMove, &CHARACTER::EndStateEmpty); m_stateBattle.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateBattle, &CHARACTER::EndStateEmpty); +#ifdef FIX_POS_SYNC + m_stateSyncing.Set(this, &CHARACTER::BeginStateEmpty, &CHARACTER::StateSyncing, &CHARACTER::EndStateEmpty); +#endif Initialize(); } @@ -1009,10 +1012,8 @@ void CHARACTER::UpdatePacket() { if (GetSectree() == NULL) return; -#ifdef CHAR_SELECT_STATS_IMPROVEMENT if (IsPC() && (!GetDesc() || !GetDesc()->GetCharacter())) return; -#endif TPacketGCCharacterUpdate pack; TPacketGCCharacterUpdate pack2; @@ -1400,7 +1401,6 @@ void CHARACTER::Disconnect(const char * c_pszReason) if (GetDesc()) { -#ifdef CHAR_SELECT_STATS_IMPROVEMENT PointsPacket(); packet_point_change pack; @@ -1411,7 +1411,6 @@ void CHARACTER::Disconnect(const char * c_pszReason) pack.amount = 0; GetDesc()->Packet(&pack, sizeof(struct packet_point_change)); -#endif GetDesc()->BindCharacter(NULL); // BindDesc(NULL); } @@ -1626,16 +1625,11 @@ void CHARACTER::PointsPacket() pack.points[POINT_STAMINA] = GetStamina(); pack.points[POINT_MAX_STAMINA] = GetMaxStamina(); -#ifdef CHAR_SELECT_STATS_IMPROVEMENT for (int i = POINT_ST; i < POINT_IQ + 1; ++i) pack.points[i] = GetRealPoint(i); for (int i = POINT_IQ + 1; i < POINT_MAX_NUM; ++i) pack.points[i] = GetPoint(i); -#else - for (int i = POINT_ST; i < POINT_MAX_NUM; ++i) - pack.points[i] = GetPoint(i); -#endif GetDesc()->Packet(&pack, sizeof(TPacketGCPoints)); } @@ -1813,15 +1807,9 @@ void CHARACTER::SetPlayerProto(const TPlayerTable * t) ComputePoints(); -#ifdef FIX_NEG_HP SetHP(GetMaxHP()); SetSP(GetMaxSP()); SetStamina(GetMaxStamina()); -#else - SetHP(t->hp); - SetSP(t->sp); - SetStamina(t->stamina); -#endif //GM일때 보호모드 if (!test_server) diff --git a/src/game/char.h b/src/game/char.h index aa7f51c..8209fc5 100644 --- a/src/game/char.h +++ b/src/game/char.h @@ -522,10 +522,17 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider CStateTemplate m_stateMove; CStateTemplate m_stateBattle; CStateTemplate m_stateIdle; +#ifdef FIX_POS_SYNC + CStateTemplate m_stateSyncing; +#endif public: virtual void StateMove(); virtual void StateBattle(); +#ifdef FIX_POS_SYNC + virtual void StateSyncing(); + virtual bool BlendSync(long x, long y, unsigned int unDuration); +#endif virtual void StateIdle(); virtual void StateFlag(); virtual void StateFlagBase(); @@ -1364,9 +1371,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider // ADD_GRANDMASTER_SKILL bool UseSkill(DWORD dwVnum, LPCHARACTER pkVictim, bool bUseGrandMaster = true); void ResetSkill(); -#ifdef FIX_REFRESH_SKILL_COOLDOWN void ResetSkillCoolTimes(); -#endif void SetSkillLevel(DWORD dwVnum, BYTE bLev); int GetUsedSkillMasterType(DWORD dwVnum); @@ -1762,9 +1767,7 @@ class CHARACTER : public CEntity, public CFSM, public CHorseRider bool ResetOneSkill(DWORD dwVnum); // END_RESET_ONE_SKILL -#ifdef FIX_REFRESH_SKILL_COOLDOWN void ResetOneSkillCoolTime(DWORD dwVnum); -#endif private : void SendDamagePacket(LPCHARACTER pAttacker, int Damage, BYTE DamageFlag); diff --git a/src/game/char_battle.cpp b/src/game/char_battle.cpp index 1d10bea..cff0afc 100644 --- a/src/game/char_battle.cpp +++ b/src/game/char_battle.cpp @@ -2312,12 +2312,9 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu // if (!cannot_dead) { -#ifdef FIX_NEG_HP if (GetHP() - dam <= 0) dam = GetHP(); -#endif - -#ifdef FIX_BATTLE_INACTIVITY_TIMEOUT + // tw1x1: POS_FIGHTING timer fix // REAL combat activity only: final damage > 0 if (dam > 0) @@ -2334,7 +2331,6 @@ bool CHARACTER::Damage(LPCHARACTER pAttacker, int dam, EDamageType type) // retu } } // tw1x1: end -#endif PointChange(POINT_HP, -dam, false); } diff --git a/src/game/char_skill.cpp b/src/game/char_skill.cpp index ce7b750..1a55f10 100644 --- a/src/game/char_skill.cpp +++ b/src/game/char_skill.cpp @@ -148,10 +148,8 @@ void CHARACTER::SetSkillGroup(BYTE bSkillGroup) p.skill_group = m_points.skill_group; GetDesc()->Packet(&p, sizeof(TPacketGCChangeSkillGroup)); -#ifdef FIX_REFRESH_SKILL_COOLDOWN SkillLevelPacket(); PointsPacket(); -#endif } int CHARACTER::ComputeCooltime(int time) @@ -182,13 +180,11 @@ void CHARACTER::SetSkillLevel(DWORD dwVnum, BYTE bLev) return; } -#ifdef FIX_REFRESH_SKILL_COOLDOWN if (dwVnum == SKILL_COMBO && (bLev == 0 || m_pSkillLevels[dwVnum].bLevel == 0) && m_bComboIndex > 0) { m_bComboIndex = 0; ChatPacket(CHAT_TYPE_COMMAND, "combo %d", 0); } -#endif m_pSkillLevels[dwVnum].bLevel = MIN(40, bLev); @@ -200,10 +196,8 @@ void CHARACTER::SetSkillLevel(DWORD dwVnum, BYTE bLev) m_pSkillLevels[dwVnum].bMasterType = SKILL_MASTER; else { -#ifdef FIX_REFRESH_SKILL_COOLDOWN if (bLev == 0) ResetOneSkillCoolTime(dwVnum); -#endif m_pSkillLevels[dwVnum].bMasterType = SKILL_NORMAL; } @@ -911,22 +905,18 @@ void CHARACTER::ResetSkill() m_pSkillLevels[pair.first] = pair.second; } -#ifdef FIX_REFRESH_SKILL_COOLDOWN ResetSkillCoolTimes(); -#endif ComputePoints(); SkillLevelPacket(); } -#ifdef FIX_REFRESH_SKILL_COOLDOWN void CHARACTER::ResetSkillCoolTimes() { for (std::map::iterator it = m_SkillUseInfo.begin(); it != m_SkillUseInfo.end(); ++it) ResetOneSkillCoolTime(it->first); } -#endif void CHARACTER::ComputePassiveSkill(DWORD dwVnum) { @@ -3504,9 +3494,7 @@ bool CHARACTER::ResetOneSkill(DWORD dwVnum) m_pSkillLevels[dwVnum].bMasterType = 0; m_pSkillLevels[dwVnum].tNextRead = 0; -#ifdef FIX_REFRESH_SKILL_COOLDOWN ResetOneSkillCoolTime(dwVnum); -#endif if (level > 17) level = 17; @@ -3521,7 +3509,6 @@ bool CHARACTER::ResetOneSkill(DWORD dwVnum) return true; } -#ifdef FIX_REFRESH_SKILL_COOLDOWN void CHARACTER::ResetOneSkillCoolTime(DWORD dwVnum) { if (dwVnum >= SKILL_MAX_NUM) @@ -3549,7 +3536,6 @@ void CHARACTER::ResetOneSkillCoolTime(DWORD dwVnum) if (pkSk && IS_SET(pkSk->dwFlag, SKILL_FLAG_TOGGLE)) RemoveAffect(pkSk->dwVnum); } -#endif bool CHARACTER::CanUseSkill(DWORD dwSkillVnum) const { diff --git a/src/game/cmd_general.cpp b/src/game/cmd_general.cpp index 876b4fe..e4856f9 100644 --- a/src/game/cmd_general.cpp +++ b/src/game/cmd_general.cpp @@ -1291,7 +1291,6 @@ ACMD(do_messenger_auth) if (tch) tch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님으로 부터 친구 등록을 거부 당했습니다."), ch->GetName()); -#ifdef CROSS_CHANNEL_FRIEND_REQUEST else { CCI* pkCCI = P2P_MANAGER::Instance().Find(arg2); @@ -1305,7 +1304,6 @@ ACMD(do_messenger_auth) pkDesc->SetRelay(""); } } -#endif } //MessengerManager::instance().AuthToAdd(ch->GetName(), arg2, answer == 'y' ? false : true); // DENY diff --git a/src/game/cmd_gm.cpp b/src/game/cmd_gm.cpp index eea2cf1..a5f55f7 100644 --- a/src/game/cmd_gm.cpp +++ b/src/game/cmd_gm.cpp @@ -574,11 +574,8 @@ ACMD(do_mob_coward) if (!*arg1) { -#ifdef FIX_NEG_CMD_CORE_DOWNER ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /mc "); -#else - ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /mc "); -#endif + return; } @@ -601,11 +598,8 @@ ACMD(do_mob_coward) if (vnum == 0) { -#ifdef FIX_NEG_CMD_CORE_DOWNER ch->ChatPacket(CHAT_TYPE_INFO, "No such mob (%s) by that vnum", arg1); -#else - ch->ChatPacket(CHAT_TYPE_INFO, "No such mob by that vnum"); -#endif + return; } @@ -614,9 +608,7 @@ ACMD(do_mob_coward) if (*arg2) { str_to_number(iCount, arg2); -#ifdef FIX_NEG_CMD_CORE_DOWNER iCount = MINMAX(1, iCount, 40); -#endif } else iCount = 1; @@ -669,11 +661,8 @@ ACMD(do_mob_aggresive) if (!*arg1) { -#ifdef FIX_NEG_CMD_CORE_DOWNER ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /mob "); -#else - ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /mob "); -#endif + return; } @@ -696,11 +685,8 @@ ACMD(do_mob_aggresive) if (vnum == 0) { -#ifdef FIX_NEG_CMD_CORE_DOWNER ch->ChatPacket(CHAT_TYPE_INFO, "No such mob (%s) by that vnum", arg1); -#else - ch->ChatPacket(CHAT_TYPE_INFO, "No such mob by that vnum"); -#endif + return; } @@ -709,9 +695,7 @@ ACMD(do_mob_aggresive) if (*arg2) { str_to_number(iCount, arg2); -#ifdef FIX_NEG_CMD_CORE_DOWNER iCount = MINMAX(1, iCount, 40); -#endif } else iCount = 1; @@ -742,11 +726,8 @@ ACMD(do_mob) if (!*arg1) { -#ifdef FIX_NEG_CMD_CORE_DOWNER ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /mob "); -#else - ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /mob "); -#endif + return; } @@ -769,11 +750,8 @@ ACMD(do_mob) if (vnum == 0) { -#ifdef FIX_NEG_CMD_CORE_DOWNER ch->ChatPacket(CHAT_TYPE_INFO, "No such mob (%s) by that vnum", arg1); -#else - ch->ChatPacket(CHAT_TYPE_INFO, "No such mob by that vnum"); -#endif + return; } @@ -782,9 +760,7 @@ ACMD(do_mob) if (*arg2) { str_to_number(iCount, arg2); -#ifdef FIX_NEG_CMD_CORE_DOWNER iCount = MINMAX(1, iCount, 40); -#endif } else iCount = 1; @@ -816,11 +792,8 @@ ACMD(do_mob_ld) if (!*arg1) { -#ifdef FIX_NEG_CMD_CORE_DOWNER ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /mob "); -#else - ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /mob "); -#endif + return; } @@ -1457,14 +1430,12 @@ ACMD(do_set) LogManager::instance().CharLog(tch, gold, "ZERO_GOLD", "GM"); } -#ifdef FIX_NEG_CMD_CORE_DOWNER if (after_gold > GOLD_MAX) { int difference = after_gold - GOLD_MAX; // If you use extended yang limit, change this int with long long int!!! - [MT2Dev Note] - 19/04/2024 tch->PointChange (POINT_GOLD, -difference, true); after_gold = GOLD_MAX; } -#endif } break; @@ -1688,34 +1659,28 @@ ACMD(do_fishing_simul) int level = 100; ch->ChatPacket(CHAT_TYPE_INFO, "Usage: /fishing_simul "); -#ifdef FIX_NEG_CMD_CORE_DOWNER ch->ChatPacket(CHAT_TYPE_INFO, "Limit: "); -#endif if (*arg1) { -#ifdef FIX_NEG_CMD_CORE_DOWNER if (level > 100) return; -#endif + str_to_number(level, arg1); } if (*arg2) { -#ifdef FIX_NEG_CMD_CORE_DOWNER if (prob_idx > 100) return; -#endif str_to_number(prob_idx, arg2); } if (*arg3) { -#ifdef FIX_NEG_CMD_CORE_DOWNER if (count < 0 || count > 100000) return; -#endif + str_to_number(count, arg3); } diff --git a/src/game/input.h b/src/game/input.h index fe8566c..6980b2c 100644 --- a/src/game/input.h +++ b/src/game/input.h @@ -342,10 +342,8 @@ class CInputP2P : public CInputProcessor void LoginPing(LPDESC d, const char * c_pData); void BlockChat(const char * c_pData); void IamAwake(LPDESC d, const char * c_pData); -#ifdef CROSS_CHANNEL_FRIEND_REQUEST void MessengerRequestAdd(const char* c_pData); void MessengerResponse(const char* c_pData); -#endif protected: CPacketInfoGG m_packetInfoGG; diff --git a/src/game/input_login.cpp b/src/game/input_login.cpp index 7483048..57e3d15 100644 --- a/src/game/input_login.cpp +++ b/src/game/input_login.cpp @@ -1073,10 +1073,8 @@ int CInputLogin::Analyze(LPDESC d, BYTE bHeader, const char * c_pData) break; ///////////////////////////////////// -#ifdef FIX_HEADER_CG_MARK_LOGIN case HEADER_CG_MARK_LOGIN: break; -#endif case HEADER_CG_HACK: break; diff --git a/src/game/input_main.cpp b/src/game/input_main.cpp index 1e7f6c4..2913d3a 100644 --- a/src/game/input_main.cpp +++ b/src/game/input_main.cpp @@ -977,13 +977,11 @@ int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes) char name[CHARACTER_NAME_MAX_LEN + 1]; strlcpy(name, c_pData, sizeof(name)); -#ifdef FIX_MESSENGER_ACTION_SYNC if (MessengerManager::instance().IsInList(ch->GetName(), name)) { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Friends] You are already friends with %s."), name); return CHARACTER_NAME_MAX_LEN; } -#endif if (ch->GetGMLevel() == GM_PLAYER && gm_get_level(name) != GM_PLAYER) { @@ -995,7 +993,6 @@ int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes) if (!tch) { -#ifdef CROSS_CHANNEL_FRIEND_REQUEST const CCI* pkCCI = P2P_MANAGER::instance().Find(name); if (!pkCCI) @@ -1006,17 +1003,13 @@ int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes) // P2P request MessengerManager::instance().P2PRequestToAdd_Stage1(ch, name); -#else - ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("%s 님은 접속되 있지 않습니다."), name); -#endif } else { if (tch == ch) // 자신은 추가할 수 없다. { -#ifdef FIX_MESSENGER_ACTION_SYNC ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("[Friends] You cannot add yourself as a friend.")); -#endif + return CHARACTER_NAME_MAX_LEN; } @@ -1042,9 +1035,7 @@ int CInputMain::Messenger(LPCHARACTER ch, const char* c_pData, size_t uiBytes) char char_name[CHARACTER_NAME_MAX_LEN + 1]; strlcpy(char_name, c_pData, sizeof(char_name)); MessengerManager::instance().RemoveFromList(ch->GetName(), char_name); -#ifdef FIX_MESSENGER_ACTION_SYNC - MessengerManager::instance().RemoveFromList(char_name, ch->GetName());//friend removed from companion too. -#endif + MessengerManager::instance().RemoveFromList(char_name, ch->GetName()); // friend removed from companion too. } return CHARACTER_NAME_MAX_LEN; diff --git a/src/game/input_p2p.cpp b/src/game/input_p2p.cpp index d05f8cb..f341c64 100644 --- a/src/game/input_p2p.cpp +++ b/src/game/input_p2p.cpp @@ -19,10 +19,7 @@ #include "questmanager.h" #include "skill.h" #include "threeway_war.h" - -#ifdef CROSS_CHANNEL_FRIEND_REQUEST #include "crc32.h" -#endif //////////////////////////////////////////////////////////////////////////////// // Input Processor @@ -261,8 +258,6 @@ void CInputP2P::Setup(LPDESC d, const char * c_pData) d->SetP2P(d->GetHostName(), p->wPort, p->bChannel); } - -#ifdef CROSS_CHANNEL_FRIEND_REQUEST void CInputP2P::MessengerRequestAdd(const char* c_pData) { TPacketGGMessengerRequest* p = (TPacketGGMessengerRequest*)c_pData; @@ -300,16 +295,13 @@ void CInputP2P::MessengerResponse(const char* c_pData) break; } } -#endif void CInputP2P::MessengerAdd(const char * c_pData) { TPacketGGMessenger * p = (TPacketGGMessenger *) c_pData; sys_log(0, "P2P: Messenger Add %s %s", p->szAccount, p->szCompanion); MessengerManager::instance().__AddToList(p->szAccount, p->szCompanion); -#ifdef FIX_MESSENGER_ACTION_SYNC MessengerManager::instance().__AddToList(p->szCompanion, p->szAccount, false); -#endif } void CInputP2P::MessengerRemove(const char * c_pData) @@ -317,7 +309,6 @@ void CInputP2P::MessengerRemove(const char * c_pData) TPacketGGMessenger * p = (TPacketGGMessenger *) c_pData; sys_log(0, "P2P: Messenger Remove %s %s", p->szAccount, p->szCompanion); -#ifdef FIX_MESSENGER_ACTION_SYNC // Send removal packet to the person being removed (deletee) LPCHARACTER deletee = CHARACTER_MANAGER::instance().FindPC(p->szCompanion); @@ -333,12 +324,9 @@ void CInputP2P::MessengerRemove(const char * c_pData) deletee->GetDesc()->BufferedPacket(&bLen, sizeof(BYTE)); deletee->GetDesc()->Packet(p->szAccount, strlen(p->szAccount)); } -#endif MessengerManager::instance().__RemoveFromList(p->szAccount, p->szCompanion); -#ifdef FIX_MESSENGER_ACTION_SYNC MessengerManager::instance().__RemoveFromList(p->szCompanion, p->szAccount, false); -#endif } void CInputP2P::FindPosition(LPDESC d, const char* c_pData) @@ -522,7 +510,6 @@ int CInputP2P::Analyze(LPDESC d, BYTE bHeader, const char * c_pData) MessengerAdd(c_pData); break; -#ifdef CROSS_CHANNEL_FRIEND_REQUEST case HEADER_GG_MESSENGER_REQUEST_ADD: MessengerRequestAdd(c_pData); break; @@ -530,7 +517,6 @@ int CInputP2P::Analyze(LPDESC d, BYTE bHeader, const char * c_pData) case HEADER_GG_MESSENGER_RESPONSE: MessengerResponse(c_pData); break; -#endif case HEADER_GG_MESSENGER_REMOVE: MessengerRemove(c_pData); diff --git a/src/game/messenger_manager.cpp b/src/game/messenger_manager.cpp index eca7945..93d92d4 100644 --- a/src/game/messenger_manager.cpp +++ b/src/game/messenger_manager.cpp @@ -12,10 +12,8 @@ #include "char_manager.h" #include "questmanager.h" -#ifdef FIX_MESSENGER_ACTION_SYNC static char __account[CHARACTER_NAME_MAX_LEN * 2 + 1]; static char __companion[CHARACTER_NAME_MAX_LEN * 2 + 1]; -#endif MessengerManager::MessengerManager() { @@ -48,12 +46,10 @@ void MessengerManager::Login(MessengerManager::keyA account) if (m_set_loginAccount.find(account) != m_set_loginAccount.end()) return; -#ifdef FIX_MESSENGER_ACTION_SYNC DBManager::instance().EscapeString(__account, sizeof(__account), account.c_str(), account.size()); if (account.compare(__account)) return; -#endif DBManager::instance().FuncQuery(std::bind(&MessengerManager::LoadList, this, std::placeholders::_1), "SELECT account, companion FROM messenger_list%s WHERE account='%s'", get_table_postfix(), account.c_str()); @@ -123,13 +119,10 @@ void MessengerManager::Logout(MessengerManager::keyA account) m_Relation.erase(account); //m_map_stMobile.erase(account); -#ifdef FIX_MESSENGER_ACTION_SYNC // remove any pending requests from/to this account so they don't get stuck EraseRequestsForAccount(account); -#endif } -#ifdef CROSS_CHANNEL_FRIEND_REQUEST void MessengerManager::RegisterRequestToAdd(const char* name, const char* targetName) { uint32_t dw1 = GetCRC32(name, strlen(name)); @@ -141,7 +134,6 @@ void MessengerManager::RegisterRequestToAdd(const char* name, const char* target uint32_t dwComplex = GetCRC32(buf, strlen(buf)); -#ifdef FIX_MESSENGER_ACTION_SYNC // Check if this requester already sent the same request if (m_set_requestToAdd.find(dwComplex) != m_set_requestToAdd.end()) { @@ -158,9 +150,6 @@ void MessengerManager::RegisterRequestToAdd(const char* name, const char* target // Clear any old incoming requests for this target before adding new one EraseIncomingRequestsForTarget(targetName); RegisterRequestComplex(dw1, dw2, dwComplex); -#else - m_set_requestToAdd.insert(dwComplex); -#endif } // stage 1: starts on the core where "ch" resides. Validate ch and move to stage 2 @@ -240,7 +229,6 @@ void MessengerManager::P2PRequestToAdd_Stage2(const char* characterName, LPCHARA MessengerManager::Instance().RegisterRequestToAdd(characterName, target->GetName()); target->ChatPacket(CHAT_TYPE_COMMAND, "messenger_auth %s", characterName); } -#endif void MessengerManager::RequestToAdd(LPCHARACTER ch, LPCHARACTER target) { @@ -263,7 +251,6 @@ void MessengerManager::RequestToAdd(LPCHARACTER ch, LPCHARACTER target) snprintf(buf, sizeof(buf), "%u:%u", dw1, dw2); DWORD dwComplex = GetCRC32(buf, strlen(buf)); -#ifdef FIX_MESSENGER_ACTION_SYNC std::string requester = ch->GetName(); std::string companion = target->GetName(); @@ -297,9 +284,6 @@ void MessengerManager::RequestToAdd(LPCHARACTER ch, LPCHARACTER target) EraseIncomingRequestsForTarget(target->GetName()); // register complex indexed mappings so we can erase them on disconnect RegisterRequestComplex(dw1, dw2, dwComplex); -#else - m_set_requestToAdd.insert(dwComplex); -#endif target->ChatPacket(CHAT_TYPE_COMMAND, "messenger_auth %s", ch->GetName()); } @@ -343,9 +327,6 @@ bool MessengerManager::AuthToAdd(MessengerManager::keyA account, MessengerManage return false; } -#ifndef FIX_MESSENGER_ACTION_SYNC - m_set_requestToAdd.erase(dwComplex); -#else RemoveComplex(dwComplex); // In-memory quick check (fast, works if lists are loaded) @@ -358,7 +339,6 @@ bool MessengerManager::AuthToAdd(MessengerManager::keyA account, MessengerManage return false; } -#endif if (!bDeny) { @@ -369,7 +349,6 @@ bool MessengerManager::AuthToAdd(MessengerManager::keyA account, MessengerManage return true; } -#ifdef FIX_MESSENGER_ACTION_SYNC void MessengerManager::RegisterRequestComplex(DWORD dw1, DWORD dw2, DWORD dwComplex) { // avoid duplicates @@ -482,9 +461,6 @@ void MessengerManager::EraseIncomingRequestsForTarget(const char* targetName) } void MessengerManager::__AddToList(MessengerManager::keyA account, MessengerManager::keyA companion, bool isRequester) -#else -void MessengerManager::__AddToList(MessengerManager::keyA account, MessengerManager::keyA companion) -#endif { m_Relation[account].insert(companion); m_InverseRelation[companion].insert(account); @@ -492,22 +468,14 @@ void MessengerManager::__AddToList(MessengerManager::keyA account, MessengerMana LPCHARACTER ch = CHARACTER_MANAGER::instance().FindPC(account.c_str()); LPDESC d = ch ? ch->GetDesc() : NULL; -#ifdef FIX_MESSENGER_ACTION_SYNC if (d && isRequester) -#else - if (d) -#endif { ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<메신져> %s 님을 친구로 추가하였습니다."), companion.c_str()); } LPCHARACTER tch = CHARACTER_MANAGER::instance().FindPC(companion.c_str()); -#ifdef CROSS_CHANNEL_FRIEND_REQUEST if (tch || P2P_MANAGER::Instance().Find(companion.c_str())) -#else - if (tch) -#endif SendLogin(account, companion); else SendLogout(account, companion); @@ -521,13 +489,11 @@ void MessengerManager::AddToList(MessengerManager::keyA account, MessengerManage if (m_Relation[account].find(companion) != m_Relation[account].end()) return; -#ifdef FIX_MESSENGER_ACTION_SYNC DBManager::instance().EscapeString(__account, sizeof(__account), account.c_str(), account.size()); DBManager::instance().EscapeString(__companion, sizeof(__companion), companion.c_str(), companion.size()); if (account.compare(__account) || companion.compare(__companion)) return; -#endif sys_log(0, "Messenger Add %s %s", account.c_str(), companion.c_str()); @@ -544,30 +510,19 @@ void MessengerManager::AddToList(MessengerManager::keyA account, MessengerManage P2P_MANAGER::instance().Send(&p2ppck, sizeof(TPacketGGMessenger)); } -#ifdef FIX_MESSENGER_ACTION_SYNC void MessengerManager::__RemoveFromList(MessengerManager::keyA account, MessengerManager::keyA companion, bool isRequester) -#else -void MessengerManager::__RemoveFromList(MessengerManager::keyA account, MessengerManager::keyA companion) -#endif { m_Relation[account].erase(companion); m_InverseRelation[companion].erase(account); -#ifdef FIX_MESSENGER_ACTION_SYNC m_Relation[companion].erase(account); m_InverseRelation[account].erase(companion); -#endif LPCHARACTER ch = CHARACTER_MANAGER::instance().FindPC(account.c_str()); LPDESC d = ch ? ch->GetDesc() : NULL; -#ifdef FIX_MESSENGER_ACTION_SYNC if (d && isRequester) -#else - if (d) -#endif ch->ChatPacket(CHAT_TYPE_INFO, LC_TEXT("<메신져> %s 님을 메신저에서 삭제하였습니다."), companion.c_str()); -#ifdef FIX_MESSENGER_ACTION_SYNC LPCHARACTER tch = CHARACTER_MANAGER::Instance().FindPC(companion.c_str()); if (tch && tch->GetDesc()) @@ -583,7 +538,6 @@ void MessengerManager::__RemoveFromList(MessengerManager::keyA account, Messenge tch->GetDesc()->BufferedPacket(&bLen, sizeof(BYTE)); tch->GetDesc()->Packet(account.c_str(), account.size()); } -#endif } bool MessengerManager::IsInList(MessengerManager::keyA account, MessengerManager::keyA companion) // Fix @@ -608,31 +562,17 @@ void MessengerManager::RemoveFromList(MessengerManager::keyA account, MessengerM if (!IsInList(account, companion)) // Fix return; -#ifdef FIX_MESSENGER_ACTION_SYNC DBManager::instance().EscapeString(__account, sizeof(__account), account.c_str(), account.size()); DBManager::instance().EscapeString(__companion, sizeof(__companion), companion.c_str(), companion.size()); if (account.compare(__account) || companion.compare(__companion)) return; -#else - char companionEscaped[CHARACTER_NAME_MAX_LEN * 2 + 1]; - - DBManager::instance().EscapeString(companionEscaped, sizeof(companionEscaped), companion.c_str(), companion.length()); -#endif sys_log(1, "Messenger Remove %s %s", account.c_str(), companion.c_str()); - - // DBManager::instance().Query("DELETE FROM messenger_list%s WHERE account='%s' AND companion = '%s'", - // get_table_postfix(), account.c_str(), companion.c_str()); // Fix -#ifdef FIX_MESSENGER_ACTION_SYNC DBManager::instance().Query("DELETE FROM messenger_list%s WHERE (account='%s' AND companion = '%s') OR (account = '%s' AND companion = '%s')", get_table_postfix(), account.c_str(), companion.c_str(), companion.c_str(), account.c_str()); -#else - DBManager::instance().Query("DELETE FROM messenger_list%s WHERE account='%s' AND companion = '%s'", - get_table_postfix(), account.c_str(), companion.c_str()); -#endif __RemoveFromList(account, companion); @@ -648,12 +588,10 @@ void MessengerManager::RemoveAllList(keyA account) { std::set company(m_Relation[account]); -#ifdef FIX_MESSENGER_ACTION_SYNC DBManager::instance().EscapeString(__account, sizeof(__account), account.c_str(), account.size()); if (account.compare(__account)) return; -#endif /* SQL Data 삭제 */ DBManager::instance().Query("DELETE FROM messenger_list%s WHERE account='%s' OR companion='%s'", @@ -665,9 +603,7 @@ void MessengerManager::RemoveAllList(keyA account) iter++ ) { this->RemoveFromList(account, *iter); -#ifdef FIX_MESSENGER_ACTION_SYNC this->RemoveFromList(*iter, account); -#endif } /* 복사한 데이타 삭제 */ diff --git a/src/game/messenger_manager.h b/src/game/messenger_manager.h index fa72a63..cafccf9 100644 --- a/src/game/messenger_manager.h +++ b/src/game/messenger_manager.h @@ -3,10 +3,8 @@ #include "db.h" -#ifdef FIX_MESSENGER_ACTION_SYNC #include #include -#endif class MessengerManager : public singleton { @@ -26,27 +24,17 @@ class MessengerManager : public singleton void RequestToAdd(LPCHARACTER ch, LPCHARACTER target); -#ifdef CROSS_CHANNEL_FRIEND_REQUEST void RegisterRequestToAdd(const char* szAccount, const char* szTarget); void P2PRequestToAdd_Stage1(LPCHARACTER ch, const char* targetName); void P2PRequestToAdd_Stage2(const char* characterName, LPCHARACTER target); -#endif // void AuthToAdd(keyA account, keyA companion, bool bDeny); bool AuthToAdd(keyA account, keyA companion, bool bDeny); -#ifdef FIX_MESSENGER_ACTION_SYNC void __AddToList(keyA account, keyA companion, bool isRequester = true); // 실제 m_Relation, m_InverseRelation 수정하는 메소드 -#else - void __AddToList(keyA account, keyA companion); // 실제 m_Relation, m_InverseRelation 수정하는 메소드 -#endif void AddToList(keyA account, keyA companion); -#ifdef FIX_MESSENGER_ACTION_SYNC void __RemoveFromList(keyA account, keyA companion, bool isRequester = true); // 실제 m_Relation, m_InverseRelation 수정하는 메소드 -#else - void __RemoveFromList(keyA account, keyA companion); // 실제 m_Relation, m_InverseRelation 수정하는 메소드 -#endif void RemoveFromList(keyA account, keyA companion); void RemoveAllList(keyA account); @@ -64,27 +52,23 @@ class MessengerManager : public singleton void Destroy(); -#ifdef FIX_MESSENGER_ACTION_SYNC // Helpers to manage friend-request index so requests involving a disconnecting character can be removed void RegisterRequestComplex(DWORD dw1, DWORD dw2, DWORD dwComplex); void RemoveComplex(DWORD dwComplex); void EraseRequestsForAccount(keyA account); void EraseIncomingRequestsForTarget(const char* targetName); -#endif std::set m_set_loginAccount; std::map > m_Relation; std::map > m_InverseRelation; std::set m_set_requestToAdd; -#ifdef FIX_MESSENGER_ACTION_SYNC // Map complex -> (dw1, dw2) std::unordered_map> m_map_requestComplex; // requester CRC -> set of complex values std::unordered_map> m_map_requestsFrom; // target CRC -> set of complex values std::unordered_map> m_map_requestsTo; -#endif }; #endif diff --git a/src/game/packet.h b/src/game/packet.h index e842d21..9ae4391 100644 --- a/src/game/packet.h +++ b/src/game/packet.h @@ -304,10 +304,8 @@ enum HEADER_GG_CHECK_CLIENT_VERSION = 21, HEADER_GG_BLOCK_CHAT = 22, -#ifdef CROSS_CHANNEL_FRIEND_REQUEST HEADER_GG_MESSENGER_REQUEST_ADD = 23, HEADER_GG_MESSENGER_RESPONSE = 24, -#endif HEADER_GG_SIEGE = 25, HEADER_GG_MONARCH_NOTICE = 26, @@ -448,7 +446,6 @@ typedef struct SPacketGGMessenger char szCompanion[CHARACTER_NAME_MAX_LEN + 1]; } TPacketGGMessenger; -#ifdef CROSS_CHANNEL_FRIEND_REQUEST typedef struct SPacketGGMessengerRequest { uint8_t header; @@ -463,7 +460,6 @@ typedef struct SPacketGGMessengerResponse char szTarget[CHARACTER_NAME_MAX_LEN + 1]; BYTE bResponseType; // 0=already_sent, 1=already_received_reverse, 2=quest_running, 3=blocking_requests } TPacketGGMessengerResponse; -#endif typedef struct SPacketGGMessengerMobile { @@ -603,8 +599,38 @@ typedef struct command_attack uint32_t dwVID; uint8_t bCRCMagicCubeProcPiece; uint8_t bCRCMagicCubeFilePiece; +#ifdef FIX_POS_SYNC + BOOL bPacket; + LONG lSX; + LONG lSY; + LONG lX; + LONG lY; + float fSyncDestX; + float fSyncDestY; + DWORD dwBlendDuration; + DWORD dwComboMotion; + DWORD dwTime; +#endif } TPacketCGAttack; +#ifdef FIX_POS_SYNC +typedef struct packet_attack +{ + BYTE bHeader; + BYTE bType; + DWORD dwAttacakerVID; + DWORD dwVID; + BOOL bPacket; + LONG lSX; + LONG lSY; + LONG lX; + LONG lY; + float fSyncDestX; + float fSyncDestY; + DWORD dwBlendDuration; +} TPacketGCAttack; +#endif + enum EMoveFuncType { FUNC_WAIT, @@ -1444,9 +1470,7 @@ enum MESSENGER_SUBHEADER_GC_LOGOUT, MESSENGER_SUBHEADER_GC_INVITE, MESSENGER_SUBHEADER_GC_MOBILE, -#ifdef FIX_MESSENGER_ACTION_SYNC MESSENGER_SUBHEADER_GC_REMOVE_FRIEND -#endif }; typedef struct packet_messenger diff --git a/src/game/packet_info.cpp b/src/game/packet_info.cpp index 07799ed..b7fa9a1 100644 --- a/src/game/packet_info.cpp +++ b/src/game/packet_info.cpp @@ -243,10 +243,8 @@ CPacketInfoGG::CPacketInfoGG() Set(HEADER_GG_SHOUT, sizeof(TPacketGGShout), "Shout", false); Set(HEADER_GG_DISCONNECT, sizeof(TPacketGGDisconnect), "Disconnect", false); Set(HEADER_GG_MESSENGER_ADD, sizeof(TPacketGGMessenger), "MessengerAdd", false); -#ifdef CROSS_CHANNEL_FRIEND_REQUEST Set(HEADER_GG_MESSENGER_REQUEST_ADD, sizeof(TPacketGGMessengerRequest), "MessengerRequestAdd", false); Set(HEADER_GG_MESSENGER_RESPONSE, sizeof(TPacketGGMessengerResponse), "MessengerResponse", false); -#endif Set(HEADER_GG_MESSENGER_REMOVE, sizeof(TPacketGGMessenger), "MessengerRemove", false); Set(HEADER_GG_FIND_POSITION, sizeof(TPacketGGFindPosition), "FindPosition", false); Set(HEADER_GG_WARP_CHARACTER, sizeof(TPacketGGWarpCharacter), "WarpCharacter", false);