From 067ec2bfa125c0f0236013f66c58959600289965 Mon Sep 17 00:00:00 2001 From: arDTDev Date: Thu, 4 Dec 2025 23:54:32 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AA=A8=EB=93=A0=20=EB=B3=80=EA=B2=BD?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=BB=A4=EB=B0=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Client/GlobalScript/Quest/QuestList.cpp | 37 ++++++----- .../RYLClient/EventHandler/GameHandler.cpp | 26 ++++---- .../GameProcess/LoginoutProcess.cpp | 57 ++++++++-------- Client/Client/RYLClient/ItemInstance.cpp | 44 ++++++++++--- Client/Client/RYLClient/RYLClient.vcxproj | 2 +- .../Client/RYLClient/RYLClient.vcxproj.user | 4 +- Client/Client/RYLClient/SkillSystem.cpp | 62 ++++++++++-------- Server/RylServerProject/RylServerProject.sdf | Bin 63983616 -> 63983616 bytes Server/RylServerProject/RylServerProject.suo | Bin 34304 -> 41472 bytes 9 files changed, 136 insertions(+), 96 deletions(-) diff --git a/Client/Client/GlobalScript/Quest/QuestList.cpp b/Client/Client/GlobalScript/Quest/QuestList.cpp index f87c8bb..aa0c729 100644 --- a/Client/Client/GlobalScript/Quest/QuestList.cpp +++ b/Client/Client/GlobalScript/Quest/QuestList.cpp @@ -616,6 +616,11 @@ static void Event_MonsterDrop(int nAmount, int nItemID) lpEventNode->m_fPosZ = 0.0f; lpEventNode->m_strWord = NULL; + // Add debug log for item drop event (English) + char logMsg[128]; + sprintf(logMsg, "[ITEM] Item dropped: ItemID=%d, Amount=%d\n", nItemID, nAmount); + OutputDebugStringA(logMsg); + if (bFalseEvent) g_QuestList.m_lpTriggerNode->m_lstFalseEvent.push_back(lpEventNode); else @@ -926,7 +931,7 @@ BOOL CQuestList::Load(const char *strQuestScriptFile) _SE_RegisterFunction(Script, QuestAward, T_VOID, "QuestAward", T_STRING, 0); _SE_RegisterFunction(Script, QuestSkillPointBonus, T_VOID, "QuestSkillPointBonus", T_INT, 0); _SE_RegisterFunction(Script, QuestCancelItemDel, T_VOID, "QuestCancelItemDel", T_BOOL, 0); - // ¾îºô¸®Æ¼ ½Ã½ºÅÛ + // �����Ƽ �ý��� _SE_RegisterFunction(Script, QuestAbilityPoint, T_VOID, "QuestAbilityPoint", T_INT, 0); @@ -978,7 +983,7 @@ unsigned long QuestNode::CheckQuest(unsigned long dwLevel, unsigned long dwFame, unsigned long count = 0; unsigned long i = 0; - // ¼öÇàÇÒ ¼ö ÀÖ´Â ±¹ÀûÀÎÁö üũ + // ������ �� �ִ� �������� üũ bool bEnableQuest = false ; if ( 0 == m_usNation ) { @@ -1004,22 +1009,22 @@ unsigned long QuestNode::CheckQuest(unsigned long dwLevel, unsigned long dwFame, if ( !bEnableQuest ) { - // ±¹ÀûÀÌ ¸ÂÁö ¾Ê´Â´Ù. + // ������ ���� �ʴ´�. return QuestNode::RES_MISMATCH_NATION ; } if ( !(m_dwClass & (0x00000001 << (dwClass - 1))) ) { - // Ŭ·¡½º°¡ ¸ÂÁö ¾Ê´Â´Ù. + // Ŭ������ ���� �ʴ´�. return QuestNode::RES_MISMATCH_CLASS ; } - // ÀÌ¹Ì ÇÑ Äù½ºÆ®ÀÎÁö °Ë»ç¿Í ¼±°á Äù½ºÆ®¸¦ Çß´ÂÁö °Ë»ç + // �̹� �� ����Ʈ���� �˻�� ���� ����Ʈ�� �ߴ��� �˻� for (unsigned long t = 0; t < wNumCompleted ; t++) { if (lstCompleted[t] == m_wQuestID) { - // ÀÌ¹Ì ÇÑ Äù½ºÆ®ÀÌ´Ù. + // �̹� �� ����Ʈ�̴�. return QuestNode::RES_ALREADY_TAKEN ; } } @@ -1028,7 +1033,7 @@ unsigned long QuestNode::CheckQuest(unsigned long dwLevel, unsigned long dwFame, { if (lstQuestList[t] == m_wQuestID) { - // Áö±Ý Çϰí ÀÖ´Â Äù½ºÆ®ÀÌ´Ù. + // ���� �ϰ� �ִ� ����Ʈ�̴�. return QuestNode::RES_ALREADY_TAKEN ; } } @@ -1046,7 +1051,7 @@ unsigned long QuestNode::CheckQuest(unsigned long dwLevel, unsigned long dwFame, if ( !bCompletePriorQuest ) { - // ¼±°á Äù½ºÆ®¸¦ ÇÏÁö ¾Ê¾Ò´Ù. + // ���� ����Ʈ�� ���� �ʾҴ�. return QuestNode::RES_NOT_COMPLETE_PRIOR_QUEST ; } } @@ -1055,42 +1060,42 @@ unsigned long QuestNode::CheckQuest(unsigned long dwLevel, unsigned long dwFame, { if (m_wMinLevel <= dwLevel && dwLevel <= m_wMaxLevel) { - // Äù½ºÆ®¸¦ ÇÒ ¼ö ÀÖ´Ù. + // ����Ʈ�� �� �� �ִ�. return QuestNode::RES_SUCCESS ; } if ( dwLevel > m_wMaxLevel ) { - // ¼öÇà °¡´ÉÇÑ ÃÖ°í ·¹º§º¸´Ù ³ô´Ù. + // ���� ������ �ְ� �������� ����. return QuestNode::RES_HIGH_THAN_MAX_LEVEL ; } if ( dwLevel + 10 <= m_wMinLevel ) { - // ¼öÇà °¡´ÉÇÑ ÃÖÀú ·¹º§º¸´Ù 10 ·¹º§ ÀÌ»ó ³·´Ù. + // ���� ������ ���� �������� 10 ���� �̻� ����. return QuestNode::RES_10_LOW_THAN_MIN_LEVEL ; } - // ·¹º§¿¡ Á» ³·´Ù. + // ������ �� ����. return QuestNode::RES_LOW_LEVEL ; } if(m_dwMinFame != 0 && m_dwMaxFame != 0) { - // ¸í¼ºÃ¼Å© + // ����üũ if (m_dwMinFame <= dwFame && dwFame <= m_dwMaxFame) { - // Äù½ºÆ®¸¦ ÇÒ ¼ö ÀÖ´Ù. + // ����Ʈ�� �� �� �ִ�. return QuestNode::RES_SUCCESS ; } if ( dwFame > m_dwMaxFame ) { - // ¼öÇà °¡´ÉÇÑ ÃÖ°í ·¹º§º¸´Ù ³ô´Ù. + // ���� ������ �ְ� �������� ����. return QuestNode::RES_HIGH_THAN_MAX_FAME ; } - // ¸í¼ºÀÌ ³·´Ù + // ������ ���� return QuestNode::RES_LOW_FAME; } diff --git a/Client/Client/RYLClient/EventHandler/GameHandler.cpp b/Client/Client/RYLClient/EventHandler/GameHandler.cpp index 4361717..13cdf01 100644 --- a/Client/Client/RYLClient/EventHandler/GameHandler.cpp +++ b/Client/Client/RYLClient/EventHandler/GameHandler.cpp @@ -32,14 +32,14 @@ #include "RYLProfile.h" /* -// Rodin : Å×½ºÆ® ÄÚµå #1 +// Rodin : �׽�Ʈ �ڵ� #1 #include "../GUITextEdit.h" #include "RYLChattingDlg.h" #include "GMMemory.h" */ -// °ÔÀÓ¼­¹ö À̺¥Æ® Çڵ鷯 +// ���Ӽ��� �̺�Ʈ �ڵ鷯 CGameEventHandler::CGameEventHandler() { @@ -57,7 +57,7 @@ int CGameEventHandler::OnOpen(int iErrorCode) CRYLGameData* pGame = CRYLGameData::Instance() ; CRYLNetworkData* pNetworkData = CRYLNetworkData::Instance(); - // µé°í ÀÖ´Â ¾ÆÀÌÅÛ »èÁ¦. + // ��� �ִ� ������ ����. if (pGame->m_lpPickItem) { delete pGame->m_lpPickItem; pGame->m_lpPickItem = 0; } pGame->DeleteAllFieldItem(); @@ -89,10 +89,14 @@ int CGameEventHandler::OnClose() int CGameEventHandler::OnDispatch(PktBase* lpPktBase, INET_Addr& peerAddr) { unsigned long dwCmd = lpPktBase->GetCmd(); + // Debug log for packet dispatch + char logMsg[128]; + sprintf(logMsg, "[PACKET] Dispatch: Cmd=0x%02lx, Len=%d\n", dwCmd, lpPktBase->GetLen()); + OutputDebugStringA(logMsg); /* - // Rodin : Å×½ºÆ® ÄÚµå #1 - // => °ÔÀÓ ¼­¹ö·ÎºÎÅÍ ¹ÞÀº ÆÐŶÀÇ Ä¿¸Çµå¸¦ Âï¾îÁØ´Ù. + // Rodin : �׽�Ʈ �ڵ� #1 + // => ���� ������� ���� ��Ŷ�� Ŀ�ǵ带 ����ش�. if (0x2f != dwCmd && 0x3d != dwCmd && 0x49 != dwCmd) @@ -105,7 +109,7 @@ int CGameEventHandler::OnDispatch(PktBase* lpPktBase, INET_Addr& peerAddr) if (dwCmd == CmdCompressedPacket) { - // µ¹¸é¼­ ÀüºÎ ó¸®ÇØÁØ´Ù. + // ���鼭 ���� ó�����ش�. char* szPacketPos = reinterpret_cast(lpPktBase + 1); char* szPacketEnd = reinterpret_cast(lpPktBase) + lpPktBase->GetLen(); @@ -151,20 +155,20 @@ int CGameEventHandler::OnDispatch(PktBase* lpPktBase, INET_Addr& peerAddr) { if(0 == (find->m_dwIgnoreStatus & BIT(CRYLGameData::Instance()->m_dwClientMode))) { - //by Hades Kang ¿¹¿ÜÀûÀÎ Cmd°¡ ÀÖ´Ù¸é ¿©±â¼­ ó¸® ÇØ¾ß ÇÒµí. + //by Hades Kang �������� Cmd�� �ִٸ� ���⼭ ó�� �ؾ� �ҵ�. ClientSocket::SetNSFlagOff( dwCmd ); find->m_fnEvent(this, lpPktBase); } } } - // rc¸¦ °¡Áö°í ÆÐŶ ó¸® ¼º°ø ¿©ºÎ¸¦ ÆÄ¾Ç. - if(CRYLNetworkData::Instance()->m_dwNetworkError == 1) //1 = ¼­¹ö ¿¡·¯ + // rc�� ������ ��Ŷ ó�� ���� ���θ� �ľ�. + if(CRYLNetworkData::Instance()->m_dwNetworkError == 1) //1 = ���� ���� { CRYLMessageBox *lpMessageBox = new CRYLMessageBox; lpMessageBox->Create(CRYLStringTable::m_strString[296]); - // edith 2009.01.29 Server Error Modal Á¦°Å - // °ÔÀÓÁß ¾Ë¼ö¾ø´Â ¿¡·¯ Áï Server Error°¡ ¶ß°ÔµÇ¸é ¿òÁ÷Àϼö ¾ø¾î¼­ ÁװԵǹǷΠ¿òÁ÷Àϼö ÀÖ°Ô ¼öÁ¤. + // edith 2009.01.29 Server Error Modal ���� + // ������ �˼����� ���� �� Server Error�� �߰ԵǸ� �����ϼ� ��� �װԵǹǷ� �����ϼ� �ְ� ����. lpMessageBox->SetModal(FALSE); } diff --git a/Client/Client/RYLClient/EventHandler/GameProcess/LoginoutProcess.cpp b/Client/Client/RYLClient/EventHandler/GameProcess/LoginoutProcess.cpp index 455f29d..daf987e 100644 --- a/Client/Client/RYLClient/EventHandler/GameProcess/LoginoutProcess.cpp +++ b/Client/Client/RYLClient/EventHandler/GameProcess/LoginoutProcess.cpp @@ -95,8 +95,8 @@ GAME_EVENT_FUNC(ParseCharLogin) &cRealmWarFlag, &cRealmPoint, &cTacticsFlag, - &dwPlayTime, // Ãß°¡. - &lPremiumTime, // ÇÁ¸®¹Ì¾ö¼­ºñ½º Ãß°¡ + &dwPlayTime, // �߰�. + &lPremiumTime, // �����̾����� �߰� &iPremiumType, &pGame->m_csStatus.m_Info, &pGame->m_csStatus.m_Skill, @@ -118,7 +118,8 @@ GAME_EVENT_FUNC(ParseCharLogin) if (0 == CRYLNetworkData::Instance()->m_dwNetworkError) { - // Broadcast µ¥ÀÌÅ͸¦ ÃʱâÈ­ÇÑ´Ù. + OutputDebugStringA("[GAME] Login successful\n"); + // Broadcast �����͸� �ʱ�ȭ�Ѵ�. g_ClientCellMgr.Clear(); GRYLTimer.m_dwStartTime = timeGetTime() ; @@ -130,11 +131,11 @@ GAME_EVENT_FUNC(ParseCharLogin) CRYLCommunityData::Instance()->m_bCheckRelation = bCheckRelation ; pGame->m_vecStartPosition.x = Pos.LastPoint.fPointX * 100.0f; - // edith 2009.05.19 ·Î±×Àνà À§¿¡¼­ ij¸¯ÅÍ ¶³¾îÁö´Â°Å ¼öÁ¤. + // edith 2009.05.19 �α��ν� ������ ij���� �������°� ����. pGame->m_vecStartPosition.y = (Pos.LastPoint.fPointY+2.0f) * 100.0f; pGame->m_vecStartPosition.z = Pos.LastPoint.fPointZ * 100.0f; - // edith 2009.05.19 ³ôÀ̰¡ 1¹ÌÅÍ ÀÌÇϸé 10¹ÌÅÍ·Î ¹Ù²Þ. + // edith 2009.05.19 ���̰� 1���� ���ϸ� 10���ͷ� �ٲ�. if(pGame->m_vecStartPosition.y < 100.0f) pGame->m_vecStartPosition.y = 1000.0f; @@ -144,7 +145,7 @@ GAME_EVENT_FUNC(ParseCharLogin) pGame->m_cTempAdminFlag = cAdminFlag; - // Àӽ÷Π±â¾ïÇØµÒ.. ³ªÁß¿¡ SelfCreature ¿¡ °ªÀ» ¼¼ÆÃÇØÁØ´Ù. + // �ӽ÷� ����ص�.. ���߿� SelfCreature �� ���� �������ش�. pGame->m_cTempGuildWarFlag = cGuildWarFlag; pGame->m_cTempRealmWarFlag = cRealmWarFlag; pGame->m_cTempRealmPoint = cRealmPoint; @@ -157,7 +158,7 @@ GAME_EVENT_FUNC(ParseCharLogin) CRYLGameData::Instance()->m_cChangeNameCount = cNameChangeCount; - // Àåºñ ¾ÆÀÌÅÛ + // ��� ������ unsigned short wBufferSize = 0; while(wBufferSize < wEquipSize) { @@ -175,7 +176,7 @@ GAME_EVENT_FUNC(ParseCharLogin) } } - // Àκ¥ ¾ÆÀÌÅÛ + // �κ� ������ wBufferSize = 0; while(wBufferSize < wInvenSize) { @@ -190,7 +191,7 @@ GAME_EVENT_FUNC(ParseCharLogin) pGame->m_csStatus.AddInventoryItem(lpItem, FALSE); } - // Extra ¾ÆÀÌÅÛ + // Extra ������ wBufferSize = 0; while(wBufferSize < wExtraSize) { @@ -213,7 +214,7 @@ GAME_EVENT_FUNC(ParseCharLogin) break; } } - // Àӽà Àκ¥Å丮 + // �ӽ� �κ��丮 wBufferSize = 0; while( wBufferSize < wTempInvenSize ) { @@ -242,7 +243,7 @@ GAME_EVENT_FUNC(ParseCharLogin) } } - // Exchange ¾ÆÀÌÅÛ + // Exchange ������ wBufferSize = 0; while(wBufferSize < wExchangeSize) { @@ -347,17 +348,17 @@ GAME_EVENT_FUNC(ParseCharLogin) CRYLMessageBox *lpMessageBox; switch(CRYLNetworkData::Instance()->m_dwNetworkError) { - case 2: //2 = µ¥ÀÌÅÍ ¾ò±â ½ÇÆÐ + case 2: //2 = ������ ��� ���� lpMessageBox = new CRYLMessageBox; lpMessageBox->Create(CRYLStringTable::m_strString[307]); break; - case 4: //4 = ÀÌ¹Ì Á¢¼ÓÁß + case 4: //4 = �̹� ������ lpMessageBox = new CRYLMessageBox; lpMessageBox->Create(CRYLStringTable::m_strString[308]); break; - case 24: // Æ÷ÀÎÆ® Ä«µå »ç¿ëÀÚ°¡ ¾Æ´Ô + case 24: // ����Ʈ � ����ڰ� �ƴ� lpMessageBox = new CRYLMessageBox; lpMessageBox->Create(CRYLStringTable::m_strString[445]); break; @@ -433,8 +434,8 @@ GAME_EVENT_FUNC(ParseCharMoveZone) } else { - // edith 2008.07.08 1°³ ä³Î¸¸ ÀÖ´Â ¼­¹ö¸¦ °ËÃâÇÏ´Â ·ÎÁ÷. ÇöÀç 8, 16¹ø¸¸ »ç¿ëÇϰí À־ ´Ù Áö¿î´Ù. - // edith 2009.07.21 Á¸ÀÌ Ãß°¡µÆÀ¸´Ï Ãß 17, 18¹ø Á¸ Ãß°¡ + // edith 2008.07.08 1�� ä�θ� �ִ� ������ �����ϴ� ����. ���� 8, 16���� ����ϰ� �־ �� �����. + // edith 2009.07.21 ���� �߰������� �� 17, 18�� �� �߰� if (CRYLNetworkData::Instance()->m_dwNextZone == 8 || CRYLNetworkData::Instance()->m_dwNextZone == 16 || CRYLNetworkData::Instance()->m_dwNextZone == 17 || CRYLNetworkData::Instance()->m_dwNextZone == 18) { @@ -468,29 +469,29 @@ GAME_EVENT_FUNC(ParseCharMoveZone) CRYLMessageBox *lpMessageBox; switch(CRYLNetworkData::Instance()->m_dwNetworkError) { - case 1: //1 = ±¹°¡Àü¿¡ ±Í¼ÓµÈ »óÅ + case 1: //1 = �������� �ͼӵ� ���� lpMessageBox = new CRYLMessageBox; lpMessageBox->Create(CRYLStringTable::m_strString[388]); break; - case 3: //3 = Á¸ÀÌ Á¸ÀçÇÏÁö ¾ÊÀ½. + case 3: //3 = ���� �������� ����. lpMessageBox = new CRYLMessageBox; lpMessageBox->Create(CRYLStringTable::m_strString[482]); break; - case 5: //5 = ¼¼¼ÇÀÌ ¿­·Á ÀÖÁö ¾ÊÀ½ + case 5: //5 = ������ ���� ���� ���� lpMessageBox = new CRYLMessageBox; lpMessageBox->Create(CRYLStringTable::m_strString[388]); break; // ichabod code - // 6 error : ¹èƲ±×¶ó¿îµå ÀοøÁ¦ÇÑÀ¸·Î ÀÎÇÑ ·Î±×ÀÎ Á¦ÇÑ. + // 6 error : ��Ʋ�׶��� ��������� ���� ��� ����. case 6: lpMessageBox = new CRYLMessageBox; lpMessageBox->Create( CRYLStringTable::m_strString[1581]); break; // hackermz code - // 7 error : ·¹º§Á¦ÇÑÀ¸·Î ÀÎÇÑ ·Î±×ÀÎ Á¦ÇÑ. + // 7 error : ������������ ���� ��� ����. case 7: lpMessageBox = new CRYLMessageBox; lpMessageBox->Create( CRYLStringTable::m_strString[4120]); @@ -520,18 +521,18 @@ GAME_EVENT_FUNC(ParseServerZone) pGame->FadeIn(); pGame->m_bSelectChar = TRUE; - // LagreMap ´Ý±â + // LagreMap �ݱ� CRYLGameScene* pGameScene = static_cast( CRYLSceneManager::Instance()->FindScene( GAME_SCENE ) ) ; pGameScene->GetLargeMapDlg()->SetVisible( FALSE ) ; - // ä³Î ´Ý±â + // � �ݱ� CRYLCharacterSelectScene* pCharacterSelectScene = static_cast( CRYLSceneManager::Instance()->FindScene( CHARACTERSELECT_SCENE ) ) ; pCharacterSelectScene->GetChannelDlg()->SetVisible( FALSE ) ; g_pClientSocket->SetStatusFlag(NS_SERVERMOVE); - // Disconnect() ÇÏ°í ¿Ï·áµÇ¸é ¿¬°á + // Disconnect() �ϰ� �Ϸ�Ǹ� ���� g_pClientSocket->Disconnect(ClientSocket::GameEventHandler); ClientNet::CClientEventHandler* lpGameHandler = CGameEventHandler::Create(); @@ -552,17 +553,17 @@ GAME_EVENT_FUNC(ParseServerZone) CRYLMessageBox *lpMessageBox; switch(CRYLNetworkData::Instance()->m_dwNetworkError) { - case 2: // 2 = ij¸¯ÅÍ Á¸ÀÌ À߸ø µÇ¾î ÀÖ½À´Ï´Ù. + case 2: // 2 = ij���� ���� �߸� �Ǿ� �ֽ��ϴ�. lpMessageBox = new CRYLMessageBox; lpMessageBox->Create(CRYLStringTable::m_strString[389]); break; - case 4: // 4 = ÀοøÀÌ Ãʰú + case 4: // 4 = ��� �ʰ� lpMessageBox = new CRYLMessageBox; lpMessageBox->Create(CRYLStringTable::m_strString[390]); break; - case 5: // 5 = ¼¼¼ÇÀÌ ¿­·Á ÀÖÁö ¾ÊÀ½ + case 5: // 5 = ������ ���� ���� ���� lpMessageBox = new CRYLMessageBox; lpMessageBox->Create(CRYLStringTable::m_strString[388]); break; @@ -591,7 +592,7 @@ GAME_EVENT_FUNC(ParseCSAuth) { // DWORD result1 = lpNPGameLib->Auth( dwAuthCode ) ; // AUTH 1.0 // DWORD result2 = lpNPGameLib->Auth2( &authCode2 ) ; // AUTH 2.0 - // edith 2009.08.11 °ÔÀÓ°¡µå 2.5 ¾÷±×·¹À̵å + // edith 2009.08.11 ���Ӱ��� 2.5 ���׷��̵� DWORD result1 = 0; DWORD result2 = lpNPGameLib->Auth2( &authCode2 ) ; // AUTH 2.0 /* diff --git a/Client/Client/RYLClient/ItemInstance.cpp b/Client/Client/RYLClient/ItemInstance.cpp index 7d78038..8d0fdf4 100644 --- a/Client/Client/RYLClient/ItemInstance.cpp +++ b/Client/Client/RYLClient/ItemInstance.cpp @@ -59,6 +59,16 @@ CItemInstance::CItemInstance() m_cCountCooldown = 0; m_wGrade = 0; + // Output detailed info if possible + if (m_lpItemBase) { + const Item::ItemInfo& info = m_lpItemBase->GetItemInfo(); + char logMsg[256]; + sprintf(logMsg, "[ITEM] CItemInstance created: UID=%lld, Type=%d, Name=%s, TypeName=%s\n", m_lpItemBase->GetUID(), info.m_DetailData.m_cItemType, info.m_StringData.m_szTypeName, info.m_StringData.m_szItemDescribe); + OutputDebugStringA(logMsg); + } else { + OutputDebugStringA("[ITEM] CItemInstance created\n"); + } + m_wPutX = 0; m_wPutY = 0; @@ -96,6 +106,16 @@ CItemInstance::~CItemInstance() { GM_DELETE( ( *it ) ) ; } + + // Output detailed info if possible + if (m_lpItemBase) { + const Item::ItemInfo& info = m_lpItemBase->GetItemInfo(); + char logMsg[256]; + sprintf(logMsg, "[ITEM] CItemInstance destroyed: UID=%lld, Type=%d, Name=%s, TypeName=%s\n", m_lpItemBase->GetUID(), info.m_DetailData.m_cItemType, info.m_StringData.m_szTypeName, info.m_StringData.m_szItemDescribe); + OutputDebugStringA(logMsg); + } else { + OutputDebugStringA("[ITEM] CItemInstance destroyed\n"); + } } Skill::ProtoType* CItemInstance::Render(LPDIRECT3DDEVICE8 lpD3DDevice, bool bAlterSkill ) @@ -111,13 +131,13 @@ Skill::ProtoType* CItemInstance::Render(LPDIRECT3DDEVICE8 lpD3DDevice, bool bAlt { if (m_bSkill) { - // edith 2008.01.21 Äü½½·Ô Desable ¾ÆÀÌÄÜ ÀÛ¾÷ Ãß°¡ÀÛ¾÷À» ÇØÁà¾ßÇÑ´Ù. + // edith 2008.01.21 ������ Desable ������ �۾� �߰��۾��� ������Ѵ�. m_lpSprite->m_lpTexture = g_ItemStorage.GetSkillTexture(GetItemInfo().m_SpriteData.m_szSpriteName, true); if (!m_lpDSprite->m_lpTexture) { - // edith 2008.01.21 Äü½½·Ô Desable ¾ÆÀÌÄÜ ÀÛ¾÷ Ãß°¡ÀÛ¾÷À» ÇØÁà¾ßÇÑ´Ù. - // desable ÅØ½ºÃÄ + // edith 2008.01.21 ������ Desable ������ �۾� �߰��۾��� ������Ѵ�. + // desable �ؽ��� m_lpDSprite->m_lpTexture = g_ItemStorage.GetSkillTexture(GetItemInfo().m_SpriteData.m_szSpriteName, false); } } @@ -130,7 +150,7 @@ Skill::ProtoType* CItemInstance::Render(LPDIRECT3DDEVICE8 lpD3DDevice, bool bAlt CRYLSprite* lpSprite = m_lpSprite; if(m_bSkill && !m_bSkillEnable) { - // ½ºÅ³ÀÌ°í ½ºÅ³ÀÌ Deable µÇ¾îÀÖÀ½ + // ��ų�̰� ��ų�� Deable �Ǿ����� lpSprite = m_lpDSprite; } @@ -434,11 +454,17 @@ int CItemInstance::SetItemInfo(const char* lpSerializedItem_In, size_t& nParseLe GetItemInfo().m_SpriteData.m_nSpriteMaxX, GetItemInfo().m_SpriteData.m_nSpriteMaxY, NULL ) ; - std::vector m_vecSpriteEx ; + std::vector m_vecSpriteEx ; m_lpTooltip = new CGUITooltipItem; ((CGUITooltipItem *)m_lpTooltip)->SetItem(this); + // Output detailed info + const Item::ItemInfo& info = m_lpItemBase->GetItemInfo(); + char logMsg[256]; + sprintf(logMsg, "[ITEM] SetItemInfo: UID=%lld, Type=%d, Name=%s, TypeName=%s\n", m_dwItemUID, GetItemType(), info.m_StringData.m_szTypeName, info.m_StringData.m_szItemDescribe); + OutputDebugStringA(logMsg); + if (GetItemType() == Item::ItemType::POTION) { m_lCoolDownTime = 14000; @@ -625,7 +651,7 @@ BOOL CItemInstance::SetSkillInfo(unsigned short wSkillID, unsigned char cGrade, ((Item::CSkillItem *)m_lpItemBase)->SetMaxNumOrDurability(cGrade); SetNowDurability(cLevel); - // À̵𽺠Ãß°¡ + // �̵� �߰� m_wGrade = cGrade; m_lCoolDownTime = lpSkillProtoType->m_dwCoolDownTime; @@ -726,7 +752,7 @@ bool CItemInstance::GetIsEnableUpgrade(void) cItemType == Item::ItemType::SKILL_A_GUARD || cItemType == Item::ItemType::SKILL_A_ATTACK || cItemType == Item::ItemType::SKILL_A_GUN || cItemType == Item::ItemType::SKILL_A_KNIFE || - // edith 2008.01.14 edith ¾÷±×·¹ÀÌµå °¡´ÉÇÑ ¾ÆÀÌÅÛ Ãß°¡ + // edith 2008.01.14 edith ���׷��̵� ������ ������ �߰� cItemType == Item::ItemType::CON_HELM || cItemType == Item::ItemType::DEX_HELM || cItemType == Item::ItemType::CON_HEAD || cItemType == Item::ItemType::DEX_HEAD || @@ -743,7 +769,7 @@ bool CItemInstance::GetIsEnableUpgrade(void) bool CItemInstance::GetIsEnableAddOption(void) { - // edith 2008.01.14 À§¿¡ ¾÷±×·¹À̵å Ãß°¡·Î ÀÎÇØ¼­ ÁÖ¼®Ã³¸®µÊ. + // edith 2008.01.14 ���� ���׷��̵� �߰��� ���ؼ� �ּ�ó����. if (true == GetIsEnableUpgrade() // || // GetItemType() == Item::ItemType::CON_HELM || @@ -936,7 +962,7 @@ unsigned short CItemInstance::GetSkillID( bool bAlterSkill ) { const Skill::ProtoType* lpSkillBase = g_SkillMgr.GetSkillProtoType(m_lpItemBase->GetPrototypeID()); - // ¾óÅÍ³ÊÆ¼ºê ½ºÅ³ + // ���ͳ�Ƽ�� ��ų if ( 0 != lpSkillBase->m_usChildSkill ) { m_wPreProtoTypeID = lpSkillBase->m_usChildSkill; diff --git a/Client/Client/RYLClient/RYLClient.vcxproj b/Client/Client/RYLClient/RYLClient.vcxproj index 4f9b073..5e42065 100644 --- a/Client/Client/RYLClient/RYLClient.vcxproj +++ b/Client/Client/RYLClient/RYLClient.vcxproj @@ -130,7 +130,7 @@ Effect.lib;SoundLib.lib;Caldron.lib;Zalla3DBaseClass.lib;GlobalScript.lib;ScriptEngine.lib;CharacterActionControl.lib;ws2_32.lib;dsound.lib;eaxguid.lib;d3d8.lib;d3dx8.lib;dxguid.lib;dinput8.lib;shlwapi.lib;ole32.lib;wbemuuid.lib;winmm.lib;dxerr8.lib;odbc32.lib;odbccp32.lib;iphlpapi.lib;ijl15.lib;imm32.lib;../../Engine/SoundLib/vorbis_sdk/lib/ogg_static_d.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbis_static_d.lib;../../Engine/SoundLib/vorbis_sdk/lib/vorbisfile_static_d.lib;luad.lib;%(AdditionalDependencies) - F:\YouxiLand\ROW(playon)\Client.exe + F:\YouxiLand\ROW\Client.exe ../../Engine/SoundLib/vorbis_sdk/lib;../../Library/$(Configuration) LIBC;LIBCD;MSVCRT;MSVCRTD;LIBCMT;%(IgnoreSpecificDefaultLibraries) true diff --git a/Client/Client/RYLClient/RYLClient.vcxproj.user b/Client/Client/RYLClient/RYLClient.vcxproj.user index ea9194d..a7dbb60 100644 --- a/Client/Client/RYLClient/RYLClient.vcxproj.user +++ b/Client/Client/RYLClient/RYLClient.vcxproj.user @@ -5,10 +5,10 @@ WindowsLocalDebugger - F:\YouxiLand\ROW(playon)\Client.exe + F:\YouxiLand\ROW\Client.exe WindowsLocalDebugger 192.168.219.226 false - F:\YouxiLand\ROW(playon) + F:\YouxiLand\ROW \ No newline at end of file diff --git a/Client/Client/RYLClient/SkillSystem.cpp b/Client/Client/RYLClient/SkillSystem.cpp index 4d19115..4839e28 100644 --- a/Client/Client/RYLClient/SkillSystem.cpp +++ b/Client/Client/RYLClient/SkillSystem.cpp @@ -64,11 +64,11 @@ void CSkillSystem::Update() { bActive = CSceneManager::m_EffectManager.ProcessScript(scnt); - if (bActive == 2)// S - M - E ±¸Á¶ÀÇ Script À϶§ targetÀÇ ¸ö¿¡ Ãæµ¹ÇÏ´Â ¼ø°£ + if (bActive == 2)// S - M - E ������ Script �϶� target�� ���� �浹�ϴ� ���� { /* char *esf_name = NULL; esf_name = CSceneManager::m_EffectManager.GetEsfName(scnt); - if (esf_name != NULL) { //È­»ì ²ÉÈ÷´Â È¿°ú¸¦ À§ÇÑ °Í + if (esf_name != NULL) { //ȭ�� ������ ȿ���� ���� �� if (strstr(esf_name,"arrow_normal")!= NULL) { for (int cChr = 0; cChr < g_CharacterData.m_lstCharData.num; cChr++) { if (!g_CharacterData.m_lstCharData[cChr]->m_lpChrModel) continue; @@ -88,12 +88,12 @@ void CSkillSystem::Update() if (CSceneManager::m_EffectManager.CheckScript(scnt, (*it)->m_lpEffectIndex)) { - // ´ë°Å ÆÄÀÌ¾î °ü·Ã ¹ÚÈ÷´Â effect setting(ÃßÈÄ »èÁ¦ÇÑµÚ effect script ¾È¿¡ µé¾î°¡¾ß ÇÒ °ÍÀÓ) + // ��� ���̾� ���� ������ effect setting(���� �����ѵ� effect script �ȿ� ���� �� ����) char *esf_name = NULL; esf_name = CSceneManager::m_EffectManager.GetEsfName(scnt); if (esf_name != NULL) { - // È­»ì ²ÈÈ÷´Â È¿°ú¸¦ À§ÇÑ °Í + // ȭ�� ������ ȿ���� ���� �� int arrow_value = -1; if (strstr(esf_name,"A_Dfire1.esf") != NULL) { arrow_value = 1; } @@ -169,8 +169,8 @@ void CSkillSystem::Update() } } - BOOL bGod = TRUE; // ¹«Àû »óÅ - BOOL bCanDead = FALSE; // Á×Àº »ç¶÷ + BOOL bGod = TRUE; // ���� ���� + BOOL bCanDead = FALSE; // ���� ��� if (lpSkillNode->m_wSkill & 0x8000) { if (lpSkillProtoType) @@ -192,19 +192,19 @@ void CSkillSystem::Update() if (lpSkillNode->m_wSkill == 0x9502 || lpSkillNode->m_wSkill == 0x9506) { - // ÆÄÀ̾/ºí·¡½ºÆ® ½ºÅ³ »ç¿ë½Ã źȯ ¼Òºñ + // ���̾/������Ʈ ��ų ���� źȯ �Һ� unsigned short wAmmo = 4003; CItemInstance *lpItem = pGame->m_csStatus.GetInventoryItemfromID(wAmmo); if (lpItem && !ClientSocket::IsNSFlagChainChecked(CmdCharUseItem) ) { - // ¾ÆÀÌÅÛÀÌ Á¸ÀçÇϰí, ¾ÆÀÌÅÛ »ç¿ëÁßÀÌ ¾Æ´Ò °æ¿ì ¹ß»ç °¡´É + // �������� �����ϰ�, ������ ������� �ƴ� ��� �߻� ���� SendPacket::CharUseItem(g_GameSession, CRYLNetworkData::Instance()->m_dwMyChrID, CRYLNetworkData::Instance()->m_dwMyChrID, &lpItem->m_lpItemBase->GetPos()); - // ÆÄÀ̾ »ç¿ë½Ã ½ºÅ³ »ç¿ëµÇ´Â ºÎºÐ. + // ���̾ ���� ��ų ���Ǵ� �κ�. g_CharacterData.MakeSkillAttackInfo(lpSkillNode->m_dwTargetChrID, lpSkillNode->m_wSkill, lpSkillNode->m_wSkillGrade, lpSkillNode->m_cLevel, lpSkillNode->m_wNumAttack, bGod, bCanDead); @@ -214,7 +214,7 @@ void CSkillSystem::Update() { if (NULL != lpSkillNode->m_lpUseItem) { - // ½ºÅ³ ¾ÆÀÌÅÛÀ» »ç¿ëÇØ¼­ ½ºÅ³À» »ç¿ëÇÏ´Â °æ¿ì + // ��ų �������� ����ؼ� ��ų�� ����ϴ� ��� g_pClientSocket->SetStatusFlag( NS_USEITEM ) ; SendPacket::CharUseItem( g_GameSession, CRYLNetworkData::Instance()->m_dwMyChrID, lpSkillNode->m_dwTargetChrID, @@ -223,7 +223,7 @@ void CSkillSystem::Update() else { // edith - // ÀϹÝÀûÀÎ ½ºÅ³ »ç¿ë½Ã + // �Ϲ����� ��ų ���� g_CharacterData.MakeSkillAttackInfo(lpSkillNode->m_dwTargetChrID, lpSkillNode->m_wSkill, lpSkillNode->m_wSkillGrade, lpSkillNode->m_cLevel, lpSkillNode->m_wNumAttack, bGod, bCanDead); @@ -234,7 +234,7 @@ void CSkillSystem::Update() } } } - // ȰºÎºÐ¿¡ ´ëÇÑ. ½ºÅ³ ÃʱâÈ­. + // Ȱ�κп� ����. ��ų �ʱ�ȭ. pGame->m_bSkillFlag = FALSE; CRYLGameScene* pScene = (CRYLGameScene*)CRYLSceneManager::Instance()->FindScene(GAME_SCENE); @@ -250,7 +250,7 @@ void CSkillSystem::Update() lpSkillNode->m_wSkill != 0x8805 && Skill::Type::CHANT != lpSkillProtoType->m_eSkillType) { - // ForceFeedback : ÆÄÀ̾/½ºÅÚ½º/ij¸ðÇöóÁã/æƮ Á¦¿Ü ÀÏ¹Ý ½ºÅ³ »ç¿ë + // ForceFeedback : ���̾/���ڽ�/ij���ö���/æƮ ���� �Ϲ� ��ų ��� KeyControl::StartForceFeedback(2000, 2000, 1000); } } @@ -320,16 +320,17 @@ void CSkillSystem::Update() if ( !pSelfModel ) return; - int nResult = CSceneManager::GetCharacterEvent( pSelfModel, EVENT_SHOT ); + int nResult = CSceneManager::GetCharacterEvent( pSelfModel, EVENT_SHOT ); if ( nResult ) { + OutputDebugStringA("[GAME] Monster attack event triggered\n"); if ( pGame->m_lpInterface->m_dwRangedWeaponTargetChrID != 0xFFFFFFFF ) { BOOL bAttackable = FALSE; if ( pGame->m_csStatus.m_lstEquipment[ Item::EquipmentPos::WEAPON_HAND1 + pGame->m_csStatus.m_cWeaponPos ] ) - { + { unsigned long dwType = pGame->m_csStatus.m_lstEquipment[Item::EquipmentPos::WEAPON_HAND1 + pGame->m_csStatus.m_cWeaponPos]->GetItemType(); if ( pGame->m_csStatus.m_lstEquipment[ Item::EquipmentPos::SHIELD_HAND1 + pGame->m_csStatus.m_cWeaponPos ] ) @@ -339,23 +340,23 @@ void CSkillSystem::Update() switch(dwType) { case Item::ItemType::BOW: - { + { if ( dwArrowType == Item::ItemType::ARROW ) { lpSkillNode = new CSkillNode; lpSkillNode->Create( pGame->m_lpInterface->m_dwRangedWeaponTargetChrID, AtType::BOW, 0, 0, NULL ); } - } - break; + } + break; case Item::ItemType::CROSSBOW: - { + { if (dwArrowType == Item::ItemType::BOLT) { lpSkillNode = new CSkillNode; lpSkillNode->Create( pGame->m_lpInterface->m_dwRangedWeaponTargetChrID, AtType::CROSSBOW, 0, 0, NULL ); } - } + } break; } } @@ -363,8 +364,11 @@ void CSkillSystem::Update() } } - nResult = CSceneManager::GetCharacterEvent( pSelfModel, EVENT_JUST); + nResult = CSceneManager::GetCharacterEvent( pSelfModel, EVENT_JUST); + if ( nResult ) { + OutputDebugStringA("[GAME] Monster attack judgement event\n"); + } #ifdef _NEW_KEY_ if ( nResult && (g_DeviceInput.GetSkillHold() || KeyControl::IsKeyState(KeyControl::KEY_COLUM_CASTING)) ) #else @@ -384,7 +388,7 @@ void CSkillSystem::Update() if ( pSelfCreature->GetUpperActionID() + 1 == ulAction ) { - // ¾´ ½ºÅ³°ú Áö±Ý ¼±ÅÃµÈ°Ô °°Àº ½ºÅ³À϶§ Ŭ¸®¾î + // �� ��ų�� ���� ���õȰ� ���� ��ų�϶� Ŭ���� g_CharacterData.m_bComboSuccess = TRUE; if ( strcmp( lpSkill->m_szCastingFileName, "NULL" ) ) @@ -392,7 +396,7 @@ void CSkillSystem::Update() pSelfCreature->EndSkill( (char *)lpSkill->m_szCastingFileName ); } - // ½ºÅ³À» Áý¾î³Ö´Â´Ù. + // ��ų�� ����ִ´�. unsigned long ulGrade, ulLevel; ulGrade = pSelfCreature->m_ulSkillComboCount; @@ -460,7 +464,7 @@ void CSkillSystem::Update() lpSkillNode = GetNormalSkillNode(); if (!lpSkillNode) { - // ÀÏ¹Ý °ø°Ý + // �Ϲ� ���� lpSkillNode = new CSkillNode; if ( isLeftAttack ) { @@ -474,7 +478,7 @@ void CSkillSystem::Update() if (!lpSkillNode->m_bFirstAttack) { - // óÀ½ °ø°Ý À϶§ ÆÐŶÀ» º¸³½´Ù. + // ó�� ���� �϶� ��Ŷ�� ������. float fAttackRotation[6]; fAttackRotation[0] = -55.0f; fAttackRotation[1] = 30.0f; @@ -526,7 +530,7 @@ void CSkillSystem::Update() if ( lpSkillNode->m_wNumAttack <= lpSkillNode->m_wNumAttackCount || lpSkillNode->m_wSkill == 0x9305 ) { - // °ø°Ý ¼ö°¡ ³¡³µÀ» ¶§ ½ºÅ³ ³ëµå¸¦ ¾ø¾Ø´Ù. + // ���� ���� ������ �� ��ų ��带 ���ش�. for ( it = m_lstSkillNode.begin(); it != m_lstSkillNode.end(); it++ ) { if ( (*it) == lpSkillNode ) @@ -554,9 +558,9 @@ void CSkillSystem::Update() } else { - if ( bAttack && ( g_DeviceInput.GetIsLeftMousePress() || g_CharacterData.m_bAutoTargetAttack || KeyControl::IsKeyState(KeyControl::KEY_COLUM_ATTACK)) ) // ŸÀ̹ÖÀÌ ¸Â¾ÒÀ»¶§ + if ( bAttack && ( g_DeviceInput.GetIsLeftMousePress() || g_CharacterData.m_bAutoTargetAttack || KeyControl::IsKeyState(KeyControl::KEY_COLUM_ATTACK)) ) // Ÿ�̹��� �¾����� { - // °è¼Ó ÄÞº¸°¡ ´©ÀûµÈ´Ù. + // ��� �޺��� �����ȴ�. if ( pGame->m_csStatus.m_lstEquipment[ 11 + pGame->m_csStatus.m_cWeaponPos ] ) { if ( ++pSelfCreature->m_ulAttackCombo >= g_CharacterData.m_dwMaxCombo ) @@ -595,7 +599,7 @@ void CSkillSystem::Update() { (*itEffect)->m_lpEffect->SetStartPos( pSelfCreature->GetPosition()->x, pSelfCreature->GetPosition()->y, pSelfCreature->GetPosition()->z); - // ½ºÅ³ ÀÌÆåÆ® »çÀÌÁî ¼³Á¤ + // ��ų ����Ʈ ������ ���� if ( CRYLGameData::GetClientIdentity( pSelfCreature->GetCharID() ) == Creature::CT_MONSTER ) { const CMonsterMgr::MonsterProtoType *lpMonster = g_MonsterMgr.GetMonsterProtoType( pSelfCreature->GetCharID() & 0x0000FFFF ); diff --git a/Server/RylServerProject/RylServerProject.sdf b/Server/RylServerProject/RylServerProject.sdf index a9b87712eb09e33e0165741b5d449c97cbaf35e6..92e8724b83372f1f0c5480e1de423144add8b212 100644 GIT binary patch delta 3900 zcmXZbWt7*262|fW?$WUEqZ^j)?(XjH?(Xh-Xn4q_m+tQFZb3yw5it-0QA`xM-+S(z zb3SwC&2#3=i$ss%*%zTupNLRs z#FRqe6`O=Yr3x1cf8Ht-`tST`LMW7&T#rhj(90a5(DRrk`yPiSk8}H7yHN2IF;%K{ z4bOG%{?KI+g(IV1mFm}SWAG|<*u{P?YR0M@>XPEW8$+SkvCfCZx}P{Yb=2F3(VL^* zrVcMwCZ@=~E@9>VpFBo#YFPBELT_Uwy89|DJj3}o;i2`H{6(mv+sUWd}BnkorNfjhhkX%6u1t}GzQjl6f8U<+;q*IVyK?VgG6=YJ7 zIex>wYtw{>qC!Pt;ul^SaUwDl7J8B-^d`yEccEvc&)vJfAfiZ;tx-{(ldXPrv{zUt z2u1$yoKRT!xnz}BM!ZZSN6A^_ta3IvyPQMLDd&=N%X#Fyay~h~TtF@;7m^FhMdYG# zF}b*0LM|znl1s~FGr76kLT)Lyl3UAd=x;#Uc zJX4+}&z9%NbLDyRe0hPqP`12CUMw$>m&(iJ<#M#VLS8Aal2^-X*^AIgv9kK~W# zPvpn)r}Ag=6Zv!bsr-ffO#V{-O8#2@Mt&}TE5DGxlfRdLkbjh4%0J1kL0Y6kdSpOGWI|>{Aq%o18?qw@av~RUBM$k7>c6= zN}?1>qYTQT9Ll2tDxwl9qYA2`8mglPYN8fuqYmn#9_ph38ln*zqY0X#8JeR7TA~$N zqYc`k9onMpfzIEhm@jWallb2yI+ zxQI)*j4QZ`Yq*XZxQSc1jXSuDd$^DH@Bk0-K0d&Qc!ZDeF+Ra#e2UNT1fSz6zQ8kl ziLdZAzQJ>Rix>C~-{S}Th?n>YukbT|!E5}A-|##Bz@PXFZ}2z%!CU-`cVTlJ&if-A z5r~D@h=aI@hxkZt^6hToGLvfTqNt8lqltEdPLwQs{MN~p%R6$i#Lv_?ZP1Hhd z)InX;Lwz(rLo`BTG(l4|Lvyr1OSD33v_V_6Lwj^UM|47GbU{~iLwEE*PxL}>^g&PU@g`m2J5i_8?gzSu?1VP4coB;JFyG9u?Ksx5BqTd z2XP38aRf(k499T-Cvgg=aRz5`4(D+J7jX%faRpa#4cBo4H*pKMaR+yC5BKpN9^fI~ z#|QWjkMI#b#wU1;Pw^R^;B!317kGv*@fE(tH+YV3@dDrBd;EYO@e)7b6@JDqc#U82 z8-B+h_!EEO4gSVIc#D7WE_{w7cz=W=0X^{@;kpUTz37HXvEXay%$c`MyiCoByJjjcD$d3Xjh(aigA}EStD2@^+iBc$y zGAN63D31!Lh)Sr8DyWKTsE!(_iCU6PCTNOgXpR zXpau)h)(E?F6fGG=#C!fiC*Z9KIn^n=#K#yh(Q>PAsC8b7>*GbiBTAhF&K++7>@~< zh)I}?DVU0Bn2s3`W?~j*V-DtG9_C{K7Q$GB#aM!+Scc_@#tN*&Dy+sDti?LSU_CZq zBQ{|(wqPr^VLNtUCw5^s_FymeVLuMwAP(U$j^HSc;W$pMCT`(2?%;03Uf+v2{~v-YPIdqQ delta 3791 zcmW;LWt7kb6UAZKU1DK@Ki#l&cXxMpcQ-8EeSxL!QcHJtH!R&Hq9~|{-J%i(%KP)3 zbDl3VbI#0{J9Wc_tWyy_{>_ux?@$pj;Wy#)XFt-xNF#55IkA)r(5a-gy`o9=R;^b#evq z6oe=URS>2izJde_5-LcfAY4IW1xXY{C`hUxnF5vr1t}DyRFFzRY6WQ&q*ahkL3#xl z6l7G8NkL`>SrlYdkS%#sM6IZoTzhn)#DBlVZhU@f=<&%L4o^?MEi$rO_|v%dS6(rG z92Z{g|Iav5&MxPWbIQ5o+;Sc{ubfZLFBgyt%7x^@auKo5n8@a9APHr!EkUPqqADX)@O%WLGd@;Z6Fyg}Y5Z<065TjZ_sHhH_e zL*6Oxl6T8{J}4iO56eg7qw+ENxO_rBDW8&0%V*@X@;Nz9J}+O8FUptX z%kmZZs(ekpF5i%E%D3d(@*VlEd{4eFzbikG-;*E8@5>*^kK_;KkL1Vl6ZvEL6Zup5 zsr;GzO#WQ{LjF?zO8#2@M*dd*PX1p0LH<$xN&Z>>MSd>-D*q<`F29gp%CF?t@*nb_ z@?Y}b@*DXd`Cs{MwBs#wJcJ+=VTg|eNQguTM`9#F1d<{dk|RJ0q(myDMjE6=I;2Mi zWJD%pMiyj6Hbf#jav&#iAvf|MFY+Nj3ZNhgp)iV|D2kytN}wc4p)|^%EXtugDxe}N zp)#tVDypG6YM>@+p*HHEF6yB^8lWK>p)s1EDVm`U?o;zHP&D))?qz1U?VnRGqzwW zwqZMVU?+BAH}+sJ_F+E`;2;j+Fpl6Tj^Q{?;3Q7rG|u2G&LIxxaRC=`372sNS8)y3 zaRWDT3%79xcX1E*@h%?VJv_ww_yCXaAwI%mJi*8K1fSw5KEpG7jxX>fzQWh|2H)a4 ze2*XSBYwiq_yy1LD}KZ8c!8IAh1d84f8sCvjW_rQ|Ke@DXonDggdh}Qh>rwFh(riS zVkAKXk|G(BBR~qIL@K048l*)!q(=s1L?&cL7Gy;>L?SzKASZGmH}W7a@*zJ8pdbpN zFp8ikilI14pd?D6G|HeX%Aq_epdu=vGOC~|s-Ze+peAaeHtL`*>Y+XwpdlKeF`A$$ znxQ#bpe0(NHQJyp+MzuM7%avTEX6V` zM=VxgC01cI)?h8xVLdirBQ{|(wqPr^VLNtUCw5^s_FymeVLuMwAP(U$j^HSc;W$p< zBu?Qp&fqN0Ar9wp0T*!zmvIGGaShjT12=ICw{Zt|aS!+LE*{`LJjDC>0FUq?KEh)> z!N>RnpW-P#!!vx2FYqP4!q@l)-{L!bk00St$60Oi0ZO|6&&>kJo5uMN(UCcO{ z6TQ$Ieb5*E&>sUZ5Q8unLogJ>FdR`Bfsq)6(HMiV7>DtgfQgud$(Vwvn1<E zVK(MqE}}6H^RWO6u?R*C7GnvPVi}er7Avq4tFRhtuommE9viR`o3I&Muoc^|9XqfS zyRaL3uowHV9|v#{hj182a1_UI94BxRr*Il)a2Dqfhx53Ai@1c#xPq&=hU>V2o4AGB OxP!Z)`+P6-{Qm%WXEyi% diff --git a/Server/RylServerProject/RylServerProject.suo b/Server/RylServerProject/RylServerProject.suo index 623898a8da3eb0a64463c9ed95d6a55d4f0e413e..a2bc1b1e601d8ce84c6cd6ec48d369cf2d628be6 100644 GIT binary patch literal 41472 zcmeHQ3w%`7nZH4KX+*#mMbs!L51Ap8OkN_&yaHlkB7s2LS#gp~l99viR4P(@yQsBj?RK^M+m>HzW&i(s?wMESb!YC7L_GO@ zx%ZxP?)|=V&i8%iJKuTCZ+4E`d*{Ow-&K;rIm%(m=LbeBBjVyqa8FRfSVb9zo5KK~ zA2@J8L@EkyzYIgD2L1tB4@cu21sD!sdyfQ+0*nTn2AB*u5>N^l0~inZ3IHsii~}44 zAP*di>v4eN0Ve<^0FD4m1e^$%1ULzBGT;NXYU3@z6pNKd(8yrt&WHE>b*7SXr(#C_Y>x z%3}QYf+iUs&ho)2%CHjhx1=FUb~U*K|0!P#t-!ZPZ3Dm3hU+S&Ma91Y^t9tHTR08) zDO-B*Q*Tq|8OYNT7$g9!Mqs)C<%BodD_pvKsXObpYj`dVo4$E`U0~4oD~en~)~u zpL!x*{+sc9Az&e(1+WOP7|;q>0$2+8D&T8?uLIlw*2_h>uGQ{kJ@MLsxaC@W7p~m^ zAK(%|0N@Ao0GKz3YcJp%fDnLu8UgeHRsdE4C`pv&O95*DHv=vMTn_jq;9Gzl%{$(> z<^R5V{?-%DwG7*G+cSvL6+Us0Lk2KVm{1=Fcx5OZhJP2ehMnHFzOLqwH|z~WJP}_o z(Clen?&nPts=ZGK<-`QFuwg3G;u zIc?>YomHJRofb<+Rk^3qGg3t+F&^I6=xYxJ!@sUm)OV^Ly0?*Q$s&5cakC{JzL)b2BLoBc|PZW`la; z4e`B}NHFAOIggClV=Q|fVG%g27h0G)FN}NYKrgtBy2lAvfgZM8?R`^!d}V)SbEFr|!QMz>r*i_J6GVUf}hCfw3UXHOu~04g}LHq zTgm>1Ong1S0WIkUHLQIP?plDm4|PFW+|Y1AXcS(X&_ZR=UfYZG2;#$P&SgpmsIP_I z?!h+%CxxKF`8Brf3iUs~vKqQf#IfFt2>i~s0HPeis^|hv4`?ZaMdt%Xa#R_pBaPK6 zU5$uuN3I}Jg6J=32el$DjIw+1Mj5D#;J!m`i!xOf%#a5+ayjsy@5ahc{eIm+r-3cz zM=3i&jcf^b^f??Df(I z;8%H>wgPELpEH)i{!>0B<8K6)^Z+aE;3ZmJkoVK+fSFqPX%FR!pJOE23Jl5kQ|q62 zO2m8ezZLjtZ=DLr6+iW*l>cH#MQV-|v4cTI$l>kaE6O#sTcJT?<%G`^5|{9yEDt4F z(z7MAzhRFbLY+|K#WbZHnF$^5fK0G2q-_x2Bc7GV_$yKVf@q6A$ej3cJf}AUCvB2U zJz+Wc{}dFGIwe>Bw%AxOHPz! z6!qMRQgG==8asSR^?p<hL{4{OJV@)stNH}m)HYymkS^W~yQUpd)Qg<-WJn+B zoa!?F1%BZs}ti+b6j7yR_j|Uk#2_N!WtJ=e}6hCt;M2a z8GLy``1+g}j|L+x270KWAg+P`vktXrM@g#CQf#Mk+&OX2cCzEX7I(CJ zZOCattGMt~2e2TQ9aksrY-&4oz}}(V>j6j8`t60)&+$k+cbscD)`gHbS|dXC^wfZ} z$h73gC4z5_Y?s6uS_WT~K28x5Z6rl8>s3#C8DBFoI`V6)xrTF4JVkojNlG-O*9m=F z3t6sFWmd>4CAuEcTA@mG4P={|SHx8z#ew{k=vw5kW|8PCQ1W$vZv(CbdCcyUq^c(yRa3kQK0nC#MZb8})0Jj2u4!9j~2Y`9+#Pu%i{vKTK z1^h^Rz7N;UfcpWz2RsPa0(cj&74UC>_W+Lo9tAuG;5UDQ>l1*V0zLrzJK#wG)3)LI z3&4M9&(Gkx9q>!Qe**Rbo(230umkWM;Ca9cfENM32D}8=3HS}*Wxy`LD}ddA-vagk zUIn}ccpdNt;7!0=fVTnf0R9UQUsvxZJu~e?#C-(#gO-LU!$YjUmm1wTu1nNcdNhO+ zC1#&iEL!r@6854~rB_o(jh=r!jYF9l(Z~DIzx$GUeQ6iR_xnOO(VD1&o}sRxmNBU| zM+NK$>LJ>Tc2zgg#-Ig4%YyoeHii>-R=nfTVQp~4l4y}g+QjIT6pm8ojn}A_jxn^& zR%eNf{Gu7Y&%&%6BWpg9mO^Brm{jE_6Gl=L>&x}%Frh7qLq~pXHCNSN#iB@WI|)rv z15Ls4N(HVJ7?W^($&n_?cDTI|{Bt?a2^y1Kwi>&rMd@PRs%5vC)jfTBtk4uC^7n3TzoFe;ZM9;B`EiMm=wecpTB4I@3S!)@ zr%na+M*3@GbmUi`Lh6b|QR=!(KZh-(j(wmD{RsUPRjNH)j^2?o>$HOTNB=2jWSLH1 zhh4RZE0D*6-jw|--_YmlFcNE_Qdc}$^5YW0x5cDNFQ2V>R zK55Q9>i0(*iM3FPE*>rUafy)VVp64-Q-nktNl{Fa^jqDk!A)1!AP_(%DCI4Yg5N3zcZ&XlcS8 zyGyVFjC&=M_xQA;_Ob<@KQJ7b z7t|dK{3dBglPw{dYb#}hTt~)zP`#jqJO8*FN~|{Hey7ZV=ReFqmdSuz@lQnF`K98! zi?I)bSUu`qw2q{mwPBGd!++F&wC;1oA76f!)s6O#?Rt#u4Pn|)+1(=c6x-CDRNZJj z(w?~AI91xvDxCxSbm(JDRk~DZ=}Pw=WNct|d#B!SCEAXbmQ6hcfIAFRl`(ye)FnL> z%1PBws$BE*J=@Ea(pT1U*}59u7?f>15B$rWo;+KQRT7>-G#^dj9&&pI?2&o7b|NRnIfa_TI=H zJ#*gtbbQlQi<^%7?8psMlJO^(FS#7a?-TFgfMojge)sEl{{E>mN*6eS2v=FDQG^;@cnG`Pq)sR%n0n#1Wo7(V*Ewnf6_? zjv4Yfe}Y!6lMRF*?LV=PU=gV3L#ZRt^TwM^7m6v$pL$Y2EJ|k(i8I^O_Bl zacl9iVKQ#jQZ`J+tux7n$++Fd*)iq63odaLOg2o$%|U0wWZc|XHcZC(?6YAq&X<@C zlW|_M^q9s%@BMB7Mt33a; z1wIz~0C^e-PvyyG0n`7exBM3a_b3g&us?fMYdeBdX3F4;lV`Kg0?!uceuaUV7a@+8(QHFxfibXi@Rnm6%q41J>CXiTgVey?RJE`9v=Q_ z4z^u_?Gh?u%YgolJ9qb^lWQ~4KCr>65T2=7?(j^zAiiNuVaar(ADReEQN#EhPi6s5LD zb347LICSLKR&&AEYapv)Hft&R4L{^hjKX;$lvg|LCzsPld1m`C^*nfO+0onUUSTztLnX&Wsao0` z@r1g(5w$0m+P$(n66rl_)~s-Qx3|X=Hupr|Y7h3z>hP}c`h&gR(5#+t8x{Smit=)` zC1&gCW^8?tZmkz;IPZe$sQSG zZFVVoHgcvLC*X^_{*r5Q(RKIG+*Zu03S!?88u3hLsP4cW%ah|CewcCq7;Uzm* zvpV{$N>ZNx%&ROPM-;bc93brZT+ZKa0q#Dv9y`!Z{maU3PQILJ6Oy;e!&t!4NP3J+?5Bf}U+9fcAV%2C&sh*{KL)D=%Jl_$FM zmtZ&>vs~2!g@${Hts#?43tt@SMut{+g@0QX5~GNemPg9_vHFb+WP~=vH72zpRX0AUw4h~`-j_Y z`u_dBBlnJ4H?e6vCst)kTzW9sM>e`pIiHQVY227w$GmXmpX)xYj9k=sMI2d@JVa#< z={3gI9h**idBcd$X6_s9{PBHjTbj^)%g@TITX8vBnhQBU&DB`Hs1W~wHjIKa5t+^ z`AazeB{?FRkm2Swq}`{bQ&+ZY^~>LU67%l#e0AYB$Gq?eW)2+x5jWRIr2|zwV=ZOi&^aa1p@L}@-OD}AU^pQ zbHd;`&O5oWdYk;*0WRe)rqE`uQEhhqq7YN!e|1CT|qdjt6E0r8{7W%zYTTJw}{{=x+%T3Yr`FMa=x-4j}O z1$&k?zVhg}sniOx4&+syr}~#cS^i8T$_r4|2>3&2H}Tt0YX*(P%=3n+K4lc9*zj!(W%- zJ50)_|KUQbVL9r5&M{^R#BV}|=>W=Rro1xkVcg_e{u=pGnk(=p=!P`e5~3f+Q>j+| zse{FwpU}A6hb89yq;)B4WBP$Bhuu5;$uS2$Ubp|rU(dRbizHbKn@Z|c z`$3EY#8>qAibQKjZJ0Pu;D+rkY*>1Xc-KEh*tvZQe}_=ykre;(fek0WT77qO@b*ux zIlASxR@&yW-D1~xPS3@+l`J0{idz2jP%4fd+?aO|cVZM8#uKdvdNyTw=g(eY|5KUi z!T)Vr^0m{pzWRq#Qyz=<4aDM zHu|+sXU)0)5zcbNw8w!1qw%}}+K2n;26_x7ylS_=mqluF)5u2bp^mML(SIHxeKa;z zd;8QG1_!(%U5MlFInbjK`*!>)@Y(PR%tq>$q0k!WzxJ+pJ+ko9>@TuME?)L?@6j_^ zOva2@#cx#JsFhymih-YRJ3=|<82)~xotLeRuBw#FD3c@1E816aJ?2_0nBh;ByIX>Np?0r(VQ{5;VbhW_ zxf(MZYG2l|s&*O{;Y7Tl>6un-ilsCXp|j0x_xb(4K$p|*2=?>_1NfnLb9-;^+O=z( zbTh zR+_A}PSj3~(`vHS)z_khEfsY(N43>zbEz%7_&jH95pDFL2rV1^wrtX6^F4vZ0bj)1 zp{GUP8cHQx;OX@Q^px&zvUF9Bno5h+Qf{iNsC1aD70wE@pR3N~s&rIYY)*);RY<7Q zZtH?j#M&?+q6qDn@O}3M-pI;ehzqd;9nGHh<=%*T+Ys#X1%iFLWc6cN_93L5xX3(S zHRUX*|NR9htPVXKZQG&3*XZgJ7+sGL|5>)}P$?|??v_X}GSu3$0bfd1BAiXmIaz;9rxoL6S)b2r9>xHe= zQxyI-`C6@H2gj?QxD7&_fdC@%3c1dir~7!i`QdKmj=Mg&;=^}$4L|+#b?3ZX@txP? z3f=hGQ*l82|tP delta 3257 zcmc&$dr*|u6~FgmcX~nGSlhZ z`R)Ckd+t5=e&?QZ?{!|~oFm+fnkx(;gvb%0h_#4sR#sLLu#P}PBBBt{h!{jHA`TIc z2!JjQ=r?24|8z-OgXN$0q%K=;P#@H2R6?KR6)IttAVa2>^4PclyzCiw(`}i?O;UZ$ zg}YJ5I`(^N#v73DN9;u$KU+or5QB)r2q$9gv;^+#*ikk# z)U$m1?hCu&vcFQ$_(?cv25Lj#>r)%S9zt z7-j-pSP3}S>SQzk+k%6fTsnx2yf&Lmt>(=@<-rVd8*MKuzLI>H>Aw0rJhedWbBGOf^76k)b zD^GzNF$zHu`IVF|LPGqyJmzi}&JPI2y>SBDet|fN7)MMXm>%r$d50M}iw(c^G)`kZ zR9*$;KE+L=ulHWys1##8W#^!q8i=#O9^oM5>IcQIk z3-Y|rqykM}p>*X;5qCx*gVD%nAv)u4f#51GcSRM!%_6gKt$50x#z2p83G~5A8H?l^ zU+CL944;*!d;D|OR8C#!HUpeK84rr46qhLyJ|3@wVYA9pXT$t9$;L3E!@%H4J+YG> zk)b&(0mOtYJZW=__|JBs5_VK-aJ&)D?KXQR7;R9(>4r5h(in*;^Q<^&Hm|3QmBPtW zu@JvcNgG7z<9(?hH_0f0pPov?_JG%ZaD@}YSB*2I!h@;`cX(AFq)OpIbs%T(U2H4) z=zf^x=yprQSAoY;AFanjhRtnV>NY>i*>m#oFE6@&=dGtGtUh?g2|IvmaJE*W#Q?P9$ym$gBfa83L2vvQJzLdAwyN*8KvBn| zbr#~?FxPOowQQ3zD>rvjexXXGQ)yMIfw}K_Qaz@>6W!;UySK^Cw^`YruA{x%Uf*u- zM!#n^Q9@a;veK;iz9;8nuIIb=KeLV_`v2eTF#SU0;R~2+|5^0^!yU5L^0r>y#?po{ z7(E*F7#qfx8aTzRE_5%JFzPVAC3d< zhpr?-muFx;YqnaKb_)9R#AJW-H-#M3xaJITdk zMtldsWm8;`cf#plrR_awAZisXrD3`Kx^%tx9VjKRs|*FPG~t@;-igZ+(+3li*`#8k z`=p?Bzb{!z$QCz)25X{E5%SRI5*UXmTP!FgazWGOL*361Tb1+)oFJV|FZ(gF1p*Ik zc!99DhK#jJe}(K_aCGCv5u79Y4U@1>_X3?j_twJo0~x-ag9YX~<3bZ}@xTA#gSt-s z?B`Qt?D@@7m_8i=Dapm2{#8A(+H%pu+tD{{CwTOAnYb@(XWH>NtU`SwKIeGUvK_cx zv+2`a=e3rfEd4Bf(GmM+X0w_e6X&n$O-W<-Yd7u}yI&iTvoRr-EroMm{%L>yq4K_a zpFFXL!!c>}ggD08pBPk&_E{{n;_lbN$}zO7qbtmHu z`wwNJ)e_M3&yVd1#!y!Ynt|0Q8nnnLdpBe79NLS{7%dcTZGy`me{n)i6I<44QBazG<|IQcxN6 mu;E7mFdC%-=d