// Network.cpp: implementation of the CNetwork class. // ////////////////////////////////////////////////////////////////////// //#include #include "Network.h" #include "Network\Packet\PacketCommand.h" #include "Network\Packet\PacketStruct\ServerInfo.h" #include "ClientMain.h" #include #include "GUITextEdit.h" #include "GUITooltipItem.h" #include "DataTable.h" #include "GUIMessageBox.h" #include "GUIMessageBoxManager.h" #include "SkillSystem.h" #include "HumanVault.h" #include "HumanStreetStall.h" #include "Item\ItemMgr.h" #include "Item\ItemFactory.h" #include "Skill\SkillMgr.h" #include "Creature\Monster\MonsterMgr.h" #define CLIENT_VERSION 1 ClientSocket *CNetwork::m_pSocket; NetworkState CNetwork::m_nsNetworkStateforCastObject; NetworkState CNetwork::m_nsNetworkState; unsigned long CNetwork::m_dwNetworkError; long CNetwork::m_lShoutCounter; long CNetwork::m_lFameInfoCounter; long CNetwork::m_lPartyFindCounter; long CNetwork::m_lPartyCmdCounter; long CNetwork::m_lSetSkillCounter; // chant, enchant ½ÃÀü effect add ½ÃÄÑÁÖ´Â ÇÔ¼ö // lpUseCreature : ÀÌ ½ºÅ³À» ¾´ CCreature pointer static void SetHitEffect(AtType &pAtType, CCreature *lpCreature,CCreature *lpUseCreature,int iDIndex) { const Skill::ProtoType *lpSkillTypeTemp = g_SkillMgr.GetSkillProtoType(pAtType.m_wType); if(lpSkillTypeTemp) { const Skill::ProtoType *lpSkillType = &lpSkillTypeTemp[pAtType.m_cSkillLockCount]; if(lpSkillType) { if(lpSkillType->m_eSkillType == Skill::Type::CHANT) { if(strcmp(lpSkillType->m_szEffectFileName, "")) { // Chant ½ÃÀü effect float fChrDir = lpCreature->m_fDirection; fChrDir = -fChrDir; fChrDir -= FLOAT_PHI / 2.0f; vector3 vecChrToward; vecChrToward.x = cosf(fChrDir); vecChrToward.z = sinf(fChrDir); vecChrToward.y = 0.0f; vecChrToward.Normalize(); CEffScript *test_script; // _ASSERTE(_CrtCheckMemory()); test_script = new CEffScript; if(g_CharacterData.GetClientType(lpCreature->m_dwChrID, TRUE) == CT_MONSTER && lpCreature->GetChantFlag(17)) { test_script->GetScriptBinData((char *)lpSkillType->m_szEffectFileName, false); } else { test_script->GetScriptBinData((char *)lpSkillType->m_szEffectFileName, true); } test_script->SetStartPos(lpCreature->m_vecPos.x, lpCreature->m_vecPos.y, lpCreature->m_vecPos.z); test_script->SetEndPos((D3DXVECTOR3 *)&lpCreature->m_vecPos, 1); test_script->SetChant(true); test_script->SetPlayer(lpCreature,lpCreature->m_dwChrID); test_script->SetChr(lpCreature->m_lpChrModel,lpCreature->m_lpChrModel); test_script->SetChrFwd(-vecChrToward.x,-vecChrToward.y,-vecChrToward.z); if(g_ClientMain.m_csStatus.CheckPartyMember(lpCreature->m_dwChrID) || lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) { test_script->SetMine(true); } else { test_script->SetMine(false); } CSceneManager::m_EffectManager.AddEffScript(test_script); // } } else // 2Â÷ Skill ÀÌÆÑÆ® { if(strcmp(lpSkillType->m_szHitFileName, "")) { if((strstr(lpSkillType->m_szHitFileName,"E_Lightning") != NULL) || iDIndex != 0) { // óÀ½ Ÿ°ÙÆÃ µÈ ¸÷ÀÌ ¾Æ´Ò¶§ CEffScript *test_script; // _ASSERTE(_CrtCheckMemory()); test_script = new CEffScript; if(g_CharacterData.GetClientType(lpCreature->m_dwChrID, TRUE) == CT_MONSTER && lpCreature->GetChantFlag(17)) { test_script->GetScriptBinData((char *)lpSkillType->m_szHitFileName, false); } else { test_script->GetScriptBinData((char *)lpSkillType->m_szHitFileName, true); } //if(lpUseCreature != NULL && (strstr(lpSkillType->m_szHitFileName,"E_Lightning") != NULL)) { if(lpUseCreature != NULL && ( (strstr(lpSkillType->m_szHitFileName,"E_Lightning") != NULL) || // lightning (strstr(lpSkillType->m_szHitFileName,"E_Grease") != NULL) || // ±×¸®½º (strstr(lpSkillType->m_szHitFileName,"E_Entangle") != NULL) || // ÀÎÅÞ±Û (strstr(lpSkillType->m_szHitFileName,"E_LSTRENGTH") != NULL) || // ·Î¿ì¾î ½ºÆ®·À½º (strstr(lpSkillType->m_szHitFileName,"E_A_Rot") != NULL) || // ¶ù (strstr(lpSkillType->m_szHitFileName,"E_A_Shock") != NULL) || // ¼îÅ© (strstr(lpSkillType->m_szHitFileName,"E_A_Root") != NULL) || // ·çÆ® (strstr(lpSkillType->m_szHitFileName,"E_CureWounds") != NULL) || // Å¥¾î¿îÁî (strstr(lpSkillType->m_szHitFileName,"E_purification") != NULL) || // Ç»¸®ÇÇ ÄÉÀÌ¼Ç (strstr(lpSkillType->m_szHitFileName,"E_Dispel") != NULL) // µð½ºÆç )) { // ±¤¿ª effect (½ð»ç¶÷ Á¸ÀçÇÒ¶§) float fChrDir = lpUseCreature->m_fDirection; fChrDir = -fChrDir; fChrDir -= FLOAT_PHI / 2.0f; vector3 vecChrToward; vecChrToward.x = cosf(fChrDir); vecChrToward.z = sinf(fChrDir); vecChrToward.y = 0.0f; vecChrToward.Normalize(); test_script->SetStartPos(lpUseCreature->m_vecPos.x,lpUseCreature->m_vecPos.y,lpUseCreature->m_vecPos.z); test_script->SetPlayer(lpUseCreature,lpUseCreature->m_dwChrID); test_script->SetChr(lpUseCreature->m_lpChrModel,lpCreature->m_lpChrModel); test_script->SetChrFwd(-vecChrToward.x,-vecChrToward.y,-vecChrToward.z); if(lpUseCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) { LPEffectNode lpEffect; lpEffect = new EffectNode; lpEffect->m_lpEffect = test_script; lpEffect->m_dwTargetID = lpCreature->m_dwChrID; g_SkillSystem.m_lstEffect.push_back(lpEffect); } } else { float fChrDir = lpCreature->m_fDirection; fChrDir = -fChrDir; fChrDir -= FLOAT_PHI / 2.0f; vector3 vecChrToward; vecChrToward.x = cosf(fChrDir); vecChrToward.z = sinf(fChrDir); vecChrToward.y = 0.0f; vecChrToward.Normalize(); test_script->SetStartPos(lpCreature->m_vecPos.x, lpCreature->m_vecPos.y, lpCreature->m_vecPos.z); test_script->SetPlayer(lpCreature,lpCreature->m_dwChrID); test_script->SetChr(lpCreature->m_lpChrModel,lpCreature->m_lpChrModel); test_script->SetChrFwd(-vecChrToward.x,-vecChrToward.y,-vecChrToward.z); } test_script->SetEndPos(lpCreature->m_vecPos.x,lpCreature->m_vecPos.y,lpCreature->m_vecPos.z); if(g_ClientMain.m_csStatus.CheckPartyMember(lpCreature->m_dwChrID) || lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) { test_script->SetMine(true); } else { test_script->SetMine(false); } CSceneManager::m_EffectManager.AddEffScript(test_script); } // if(iDIndex != 0) } // if(strcmp(lpSkillType->m_szHitFileName, "")) } } } } ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CNetwork::CNetwork() { m_nsNetworkState = NS_NOWAITING; m_nsNetworkStateforCastObject = NS_NOWAITING; m_bLoginSuccess = FALSE; m_bUpdateAddressPacket = TRUE; m_bCompleteDeposit = FALSE; m_bCharLoginSuccess = FALSE; m_lUDPPacketTotalByte = m_lUDPPacketOldByte = 0; m_lTCPPacketTotalByte = m_lTCPPacketOldByte = 0; m_lShoutCounter = 0; m_lFameInfoCounter = 0; m_lPartyFindCounter = 0; m_lSetSkillCounter = 0; } CNetwork::~CNetwork() { if(m_pSocket) { delete m_pSocket; m_pSocket = NULL; } } BOOL CNetwork::Create(HWND hWnd) { m_pSocket = new ClientSocket(hWnd); if(m_pSocket == NULL) return FALSE; return TRUE; } BOOL CNetwork::ConnectToGameServer(char *strServerIP) { m_nsNetworkState = NS_CONNECTGAMESERVER; if(m_pSocket->ConnectToGameServer(strServerIP)) return TRUE; else return FALSE; } BOOL CNetwork::ConnectToAuthServer(char *strServerIP) { m_nsNetworkState = NS_CONNECTAUTHSERVER; if(m_pSocket->ConnectToAuthServer(strServerIP)) return TRUE; else return FALSE; } BOOL CNetwork::Login(void) { g_ClientMain.m_csStatus.Destroy(); if(m_nsNetworkState == NS_CONNECTAUTHSERVER) { m_nsNetworkState = NS_USERLOGIN; m_pSocket->UserLogin(g_ClientMain.m_dwSessionID, g_ClientMain.m_dwUserID, g_ClientMain.m_dwServerID, g_ClientMain.m_dwVersion); // m_pSocket->UserLogin(g_ClientMain.m_dwUserID, g_ClientMain.m_dwServerID, (void*)g_ClientMain.m_dwServerPointer); } else if(m_nsNetworkState == NS_SERVERMOVE) { m_nsNetworkState = NS_CHARLOGIN; m_pSocket->CharLogin(g_ClientMain.m_dwUserID, g_ClientMain.m_scLoginChar[g_ClientMain.m_dwSelectChr].UID, g_ClientMain.m_dwSessionID); // m_pSocket->CharLogin(g_ClientMain.m_dwUserID, g_ClientMain.m_dwMyChrID, m_pSocket->GetRegPointer()); } return TRUE; } BOOL CNetwork::CharSelect(unsigned long dwChrID) { m_nsNetworkState = NS_CHARSELECT; if(m_pSocket->CharSelect(g_ClientMain.m_dwUserID, dwChrID)) return TRUE; else return FALSE; } void CNetwork::PacketProcess(LPARAM lParam, BOOL bUDP) { switch(WSAGETSELECTEVENT(lParam)) { case FD_CONNECT: Login(); break; case FD_READ: PacketProcess(bUDP); break; case FD_CLOSE: MessageBox(NULL, g_StringTable.m_strString[270], g_StringTable.m_strString[21], MB_OK); SendMessage(g_ClientMain.m_hWnd, WM_DESTROY, 0, 0); g_ClientMain.m_dwClientMode = CLIENT_END; /* CGUIMessageBox *lpMessageBox; lpMessageBox = new CGUIMessageBox; lpMessageBox->Create("Á¢¼ÓÀÌ ²÷°å½À´Ï´Ù.", MB_EXIT | MB_CONFIRM);*/ break; } switch(WSAGETSELECTERROR(lParam)) { case WSAENETDOWN: break; case WSAECONNREFUSED: break; default: break; } } void CNetwork::PacketProcess(BOOL bUDP) { unsigned long dwError; bool bRecv = false; int nRecv; if(bUDP) { m_pSocket->UDPRecv(); } else { m_pSocket->Recv(); } while((bUDP ? nRecv = m_pSocket->PutUDPRecvBufferToPtBuffer(m_aryBuffer, BUFFERSIZE) : nRecv = m_pSocket->PutRecvBufferToPtBuffer(m_aryBuffer, BUFFERSIZE))) { if(bUDP) { m_lUDPPacketTotalByte += nRecv; } else { m_lTCPPacketTotalByte += nRecv; } m_cNetworkPacketCommand = ((LPPktBase)m_aryBuffer)->GetCmd(); switch(m_cNetworkPacketCommand) { case CmdUserLogin: if(!ParseUserLogin(m_aryBuffer)) ProcessError(); break; case CmdCharSelect: if(!ParseCharSelect(m_aryBuffer)) ProcessError(); break; case CmdCharLogin: if(!ParseCharLogin(m_aryBuffer)) ProcessError(); break; case CmdCharCreate: if(!ParseCharCreate(m_aryBuffer)) ProcessError(); break; case CmdCharDelete: if(!ParseCharDelete(m_aryBuffer)) ProcessError(); break; case CmdCharUpdateAddress: if(!ParseCharUpdateAddress(m_aryBuffer)) ProcessError(); break; case CmdCharMove: // if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_ZONEMOVE && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharMove(m_aryBuffer)) ProcessError(); break; case CmdCharCellLogin: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharCellLogin(m_aryBuffer)) ProcessError(); break; case CmdCharCellLogout: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharCellLogout(m_aryBuffer)) ProcessError(); break; case CmdCharAddressInfo: // if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_ZONEMOVE && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharAddressInfo(m_aryBuffer)) ProcessError(); break; case CmdCharChat: if(!ParseCharChat(m_aryBuffer)) ProcessError(); break; case CmdMonMove: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseMonMove(m_aryBuffer)) ProcessError(); break; case CmdCharAttack: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharAttack(m_aryBuffer)) ProcessError(); break; case CmdCharRespawn: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharRespawn(m_aryBuffer)) ProcessError(); break; case CmdCharAttackInfo: // if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_ZONEMOVE && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharAttackInfo(m_aryBuffer)) ProcessError(); break; case CmdGameCellInfo: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseGameCellInfo(m_aryBuffer)) ProcessError(); break; case CmdCharPullDown: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharPullDown(m_aryBuffer)) ProcessError(); break; case CmdCharPullDownInfo: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharPullDownInfo(m_aryBuffer)) ProcessError(); break; case CmdCharPickUp: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharPickUp(m_aryBuffer)) ProcessError(); break; case CmdCharPickUpInfo: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharPickUpInfo(m_aryBuffer)) ProcessError(); break; case CmdCharAttacked: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharAttacked(m_aryBuffer)) ProcessError(); break; case CmdCharTakeItem: if(!ParseCharTakeItem(m_aryBuffer)) ProcessError(); break; case CmdCharSwapItem: if(!ParseCharSwapItem(m_aryBuffer)) ProcessError(); break; case CmdCharTradeItem: if(!ParseCharTradeItem(m_aryBuffer)) ProcessError(); break; case CmdCharShapeInfo: // if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_ZONEMOVE && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharShapeInfo(m_aryBuffer)) ProcessError(); break; case CmdCharPartyCmd: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharPartyCmd(m_aryBuffer)) ProcessError(); break; case CmdCharPartyInfo: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharPartyInfo(m_aryBuffer)) ProcessError(); break; case CmdCharUseItem: if(!ParseCharUseItem(m_aryBuffer)) ProcessError(); break; case CmdCharSkillLock: if(!ParseCharSkillLock(m_aryBuffer)) ProcessError(); break; case CmdCharSkillErase: if(!ParseCharSkillErase(m_aryBuffer)) ProcessError(); break; case CmdCharSkillCreate: if(!ParseCharSkillCreate(m_aryBuffer)) ProcessError(); break; case CmdCharRepairItem: if(!ParseCharRepairItem(m_aryBuffer)) ProcessError(); break; case CmdCharInstallSocket: if(!ParseCharInstallSocket(m_aryBuffer)) ProcessError(); break; case CmdCharSplitItem: if(!ParseCharSplitItem(m_aryBuffer)) ProcessError(); break; case CmdCharUpgradeItem: if(!ParseCharUpgradeItem(m_aryBuffer)) ProcessError(); break; case CmdCharAward: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharAward(m_aryBuffer)) ProcessError(); break; case CmdCharLevelUp: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharLevelUp(m_aryBuffer)) ProcessError(); break; case CmdCharLevelUpInfo: // if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_ZONEMOVE && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharLevelUpInfo(m_aryBuffer)) ProcessError(); break; case CmdCharIncreasePoint: if(!ParseCharIncreasePoint(m_aryBuffer)) ProcessError(); break; case CmdCharHPRegen: if(!ParseCharHPRegen(m_aryBuffer)) ProcessError(); break; case CmdCharBindPosition: if(!ParseCharBindPos(m_aryBuffer)) ProcessError(); break; case CmdCharQuickSlotMove: if(!ParseCharQuickSlotMove(m_aryBuffer)) ProcessError(); break; case CmdCharPartyMemInfo: // if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_ZONEMOVE && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharPartyMemInfo(m_aryBuffer)) ProcessError(); break; case CmdCharClassUpgrade: if(!ParseCharClassUpgrade(m_aryBuffer)) ProcessError(); break; case CmdCellBroadCasting: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCellBroadCasting(m_aryBuffer)) ProcessError(); break; case CmdCharCastObjectInfo: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharCastObjectInfo(m_aryBuffer)) ProcessError(); break; case CmdCharPartyCmdInfo: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharPartyCmdInfo(m_aryBuffer)) ProcessError(); break; case CmdCharRequireInfo: // if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_ZONEMOVE && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharRequireInfo(m_aryBuffer)) ProcessError(); break; case CmdCharWhisper: if(!ParseCharWhisper(m_aryBuffer)) ProcessError(); break; case CmdCharExchangeCmd: if(!ParseCharExchangeCmd(m_aryBuffer)) ProcessError(); break; case CmdCharExchangeItem: if(!ParseCharExchangeItem(m_aryBuffer)) ProcessError(); break; case CmdCharTakeGold: if(!ParseCharTakeGold(m_aryBuffer)) ProcessError(); break; case CmdCharDuelCmd: if(!ParseCharDuelCmd(m_aryBuffer)) ProcessError(); break; case CmdCharFameInfo: if(!ParseCharFameInfo(m_aryBuffer)) ProcessError(); break; case CmdCharPartyFind: if(!ParseCharPartyFind(m_aryBuffer)) ProcessError(); break; case CmdCharSpellInfo: if(g_ClientMain.m_dwClientMode != CLIENT_GAME && g_ClientMain.m_dwClientMode != CLIENT_GAMELOADING) break; if(!ParseCharSpellInfo(m_aryBuffer)) ProcessError(); break; case CmdCharControlOption: if(!ParseControlOption(m_aryBuffer)) ProcessError(); break; case CmdCharSkillUnLock: if(!ParseCharSkillUnLock(m_aryBuffer)) ProcessError(); break; case CmdServerZone: if(!ParseServerZone(m_aryBuffer)) ProcessError(); break; case CmdCharMoveZone: if(!ParseCharMoveZone(m_aryBuffer)) ProcessError(); break; case CmdDepositUpdate: if(!ParseDepositUpdate(m_aryBuffer)) ProcessError(); break; case CmdDeposit: if(!ParseDeposit(m_aryBuffer)) ProcessError(); break; case CmdCharStallOpen: if(!ParseCharStallOpen(m_aryBuffer)) ProcessError(); break; case CmdCharStallEnter: if(!ParseCharStallEnter(m_aryBuffer)) ProcessError(); break; case CmdCharStallRegisterItem: if(!ParseCharStallRegisterItem(m_aryBuffer)) ProcessError(); break; case CmdCharStallItemInfo: if(!ParseCharStallItemInfo(m_aryBuffer)) ProcessError(); break; case CmdCharTeamBattleInfo: if(!ParseCharTeamBattleInfo(m_aryBuffer)) ProcessError(); break; case CmdEliteBonus: if(!ParseCharEliteBonus(m_aryBuffer)) ProcessError(); break; case CmdCharStartQuest: if(!ParseCharStartQuest(m_aryBuffer)) ProcessError(); break; case CmdCharOperateTrigger: if(!ParseCharOperateTrigger(m_aryBuffer)) ProcessError(); break; case CmdFriendDB: if(!ParseCharFriendDB(m_aryBuffer)) ProcessError(); break; case CmdFriendAck: if(!ParseCharFriendAck(m_aryBuffer)) ProcessError(); break; case CmdFriendAddRequest: if(!ParseCharFriendRegistered(m_aryBuffer)) ProcessError(); break; case CmdQuestDB: if(!ParseCharQuestInfo(m_aryBuffer)) ProcessError(); break; case CmdCharEndQuest: if(!ParseCharEndQuest(m_aryBuffer)) ProcessError(); break; case CmdCharPeaceMode: if(!ParseCharPeaceMode(m_aryBuffer)) ProcessError(); break; case CmdCharAuthorizePanel: if(!ParseCharAuthorizePanel(m_aryBuffer)) ProcessError(); break; /* // Connected Login Server case CmdLULUAck: //·Î±×Àμ­¹ö¿¡¼­ ij¸¯ÅÍ Á¤º¸¸¦ °¡Á®¿È if(!ParseLUAck(m_aryBuffer)) ProcessError(); break; case CmdLUCSAck: //ij¸¯ÅÍ ¼±ÅÃÇßÀ½ ¿©±â¼­ ¿¡ÀÌÀüÆ® ¼­¹ö ÁøÀÔÇÔ if(!ParseLUCSAck(m_aryBuffer)) ProcessError(); break; case CmdSULiAck: //¿¡ÀÌÀüÆ® ¼­¹ö¿¡ Á¢¼Ó ÇßÀ½ if(!ParseSULiAck(m_aryBuffer)) ProcessError(); break; case CmdSULiChInfo: //ij¸¯ÅÍ Á¤º¸¸¦ ¹Þ¾Æ¿È if(!ParseSULiChInfo(m_aryBuffer)) ProcessError(); break; case CmdSUUAAck: if(!ParseSUUAAck(m_aryBuffer)) ProcessError(); break; case CmdSUCt: if(!ParseSUCt(m_aryBuffer)) ProcessError(); dwError = 0; break;*/ default: dwError = 0; break; } } } BOOL CNetwork::ParseUserLogin(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long UserID; m_dwNetworkError = m_pSocket->HandleUserLogin(aryBuffer, &UserID, g_ClientMain.m_scLoginChar); if(0 == m_dwNetworkError) { if(UserID == g_ClientMain.m_dwUserID) m_bLoginSuccess = TRUE; return TRUE; } return FALSE; } BOOL CNetwork::ParseCharSelect(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned short aryChannel[2]; unsigned char cZone; m_dwNetworkError = m_pSocket->HandleCharSelect(aryBuffer, &cZone, aryChannel); if(0 == m_dwNetworkError) { if(cZone == 3) { g_ClientMain.m_dwChannelID = 0; } if(g_ClientMain.m_bTestServerVersion) { g_ClientMain.m_dwChannelID = 0; m_pSocket->ServerZone(cZone, g_ClientMain.m_dwChannelID); } else { if(cZone == 2 || cZone == 4 || cZone == 5 || cZone == 6) { g_ClientMain.m_dwChannelID = 0; } m_pSocket->ServerZone(cZone, g_ClientMain.m_dwChannelID); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharMoveZone(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned short aryChannel[2]; unsigned char cZone; m_dwNetworkError = m_pSocket->HandleCharMoveZone(aryBuffer, &cZone, aryChannel); if(0 == m_dwNetworkError) { unsigned long dwChannelCount = 0; for(unsigned long i = 0; i < 2; i++) { if(aryChannel[i]) dwChannelCount++; } g_ClientMain.m_dwNextZone = cZone; if(dwChannelCount == 1) { for(i = 0; i < 2; i++) { if(aryChannel[i]) { g_ClientMain.m_dwClientMode = CLIENT_ZONEMOVE; m_nsNetworkState = NS_ZONEMOVE; if(g_ClientMain.m_bTestServerVersion) { m_pSocket->ServerZone(g_ClientMain.m_dwNextZone, 0); } else { if(g_ClientMain.m_dwNextZone == 2 || g_ClientMain.m_dwNextZone == 4 || g_ClientMain.m_dwNextZone == 5 || g_ClientMain.m_dwNextZone == 6) { m_pSocket->ServerZone(g_ClientMain.m_dwNextZone, 0); } else { m_pSocket->ServerZone(g_ClientMain.m_dwNextZone, i); } } break; } } } else { if(g_ClientMain.m_lpInterface) { if(dwChannelCount == 1 && !aryChannel[0]) { g_ClientMain.m_lpInterface->InitChannel(2, aryChannel); } else { g_ClientMain.m_lpInterface->InitChannel((unsigned char)dwChannelCount, aryChannel); } } } return TRUE; } return FALSE; } BOOL CNetwork::ParseServerZone(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwServerID; m_dwNetworkError = m_pSocket->HandleServerZone(aryBuffer, &dwServerID); if(0 == m_dwNetworkError) { SERVER_ID siServer; siServer.dwID = g_ClientMain.m_dwServerID = dwServerID; g_ClientMain.m_dwChannelID = siServer.GetChannel(); g_ClientMain.m_dwPresentZone = siServer.GetZone(); g_ClientMain.m_lpCommonInterface->FadeIn(); g_ClientMain.m_bSelectChar = TRUE; if(g_ClientMain.m_lpBackGroundMusic) { try { g_ClientMain.m_lpBackGroundMusic->Destroy(); g_ClientMain.m_lpBackGroundMusic = NULL; } catch(exception & e) { e = 0; g_ClientMain.m_lpBackGroundMusic = NULL; } } m_nsNetworkState = NS_SERVERMOVE; m_pSocket->ConnectToGameServer(m_pSocket->GetRegString()); return TRUE; } else { if(g_ClientMain.m_dwClientMode == CLIENT_ZONEMOVE) { g_ClientMain.m_dwClientMode = CLIENT_GAME; } } return FALSE; } BOOL CNetwork::ParseCharCreate(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long ChrID, Slot; CHAR_VIEW lpCharView; m_dwNetworkError = m_pSocket->HandleCharCreate(aryBuffer, &ChrID, &Slot, &lpCharView); g_MessageBoxManager.DestroyList(); if(0 == m_dwNetworkError) { memcpy(&g_ClientMain.m_scLoginChar[Slot], &lpCharView, sizeof(CHAR_VIEW)); return TRUE; } return FALSE; } BOOL CNetwork::ParseCharDelete(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long UserID, Slot; m_dwNetworkError = m_pSocket->HandleCharDelete(aryBuffer, &UserID, &Slot); g_MessageBoxManager.DestroyList(); if(0 == m_dwNetworkError) { if(UserID == g_ClientMain.m_dwUserID) { ZeroMemory(&g_ClientMain.m_scLoginChar[Slot], sizeof(CHAR_VIEW)); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharLogin(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; CHAR_POS Pos; bool bPeace; unsigned short wEquipSize, wInvenSize, wExtraSize, wExchangeSize; char *lpEquipBuffer, *lpInvenBuffer, *lpExtraBuffer, *lpExchangeBuffer, cAdmin; QUICK pQuickSlot; m_dwNetworkError = m_pSocket->HandleCharLogin(aryBuffer, &cAdmin, &bPeace, &g_ClientMain.m_csStatus.m_Info, &g_ClientMain.m_csStatus.m_Skill, &pQuickSlot, &Pos, &g_ClientMain.m_dwServerTime, &wEquipSize, &lpEquipBuffer, &wInvenSize, &lpInvenBuffer, &wExtraSize, &lpExtraBuffer, &wExchangeSize, &lpExchangeBuffer); if(0 == m_dwNetworkError) { g_ClientMain.m_dwMyChrID = g_ClientMain.m_csStatus.m_Info.UID; g_ClientMain.m_bPeaceMode = bPeace; g_ClientMain.m_vecStartPosition.x = Pos.LastPoint.fPointX * 100.0f; g_ClientMain.m_vecStartPosition.y = Pos.LastPoint.fPointY * 100.0f; g_ClientMain.m_vecStartPosition.z = Pos.LastPoint.fPointZ * 100.0f; // ¾îµå¹Î ¸ðµå if(cAdmin) g_ClientMain.m_bAdminMode = TRUE; else g_ClientMain.m_bAdminMode = FALSE; // Àåºñ ¾ÆÀÌÅÛ unsigned short wBufferSize = 0; while(wBufferSize < wEquipSize) { CItemInstance *lpItem; lpItem = new CItemInstance; size_t nDBSize = wEquipSize - wBufferSize; lpItem->SetItemInfo(lpEquipBuffer, nDBSize); wBufferSize += nDBSize; lpEquipBuffer += nDBSize; g_ClientMain.m_csStatus.AddEquipItem(lpItem->m_lpItemBase->GetPos().m_cIndex, lpItem, FALSE); } // Àκ¥ ¾ÆÀÌÅÛ wBufferSize = 0; while(wBufferSize < wInvenSize) { CItemInstance *lpItem; lpItem = new CItemInstance; size_t nDBSize = wInvenSize - wBufferSize; lpItem->SetItemInfo(lpInvenBuffer, nDBSize); wBufferSize += nDBSize; lpInvenBuffer += nDBSize; g_ClientMain.m_csStatus.AddInventoryItem(lpItem, FALSE); } // Extra ¾ÆÀÌÅÛ wBufferSize = 0; while(wBufferSize < wExtraSize) { CItemInstance *lpItem; lpItem = new CItemInstance; size_t nDBSize = wExtraSize - wBufferSize; lpItem->SetItemInfo(lpExtraBuffer, nDBSize); if(nDBSize) { wBufferSize += nDBSize; lpExtraBuffer += nDBSize; switch(lpItem->GetItemPos()) { case ClientSocket::ItemPos_Upgrade: g_ClientMain.m_csStatus.m_lpUpgrade[lpItem->m_lpItemBase->GetPos().m_cIndex] = lpItem; break; case ClientSocket::ItemPos_Temp: g_ClientMain.SetPickItem(lpItem, FALSE); break; } } else { delete lpItem; break; } } // Exchange ¾ÆÀÌÅÛ wBufferSize = 0; while(wBufferSize < wExchangeSize) { CItemInstance *lpItem; lpItem = new CItemInstance; size_t nDBSize = wExchangeSize - wBufferSize; lpItem->SetItemInfo(lpExchangeBuffer, nDBSize); if(nDBSize) { wBufferSize += nDBSize; lpExchangeBuffer += nDBSize; g_ClientMain.m_csStatus.AddExchangeItem(lpItem, TRUE, FALSE); } else { delete lpItem; break; } } g_ClientMain.m_csStatus.SetClassSkill(); for(int i = 0; i < 20; i++) { if(g_ClientMain.m_csStatus.m_Skill.SSlot[i].SKILLINFO.wSkill) { g_ClientMain.m_csStatus.m_lstSkillSlot[i] = new CItemInstance; g_ClientMain.m_csStatus.m_lstSkillSlot[i]->SetSkillInfo(g_ClientMain.m_csStatus.m_Skill.SSlot[i].SKILLINFO.wSkill, g_ClientMain.m_csStatus.m_Skill.SSlot[i].SKILLINFO.cLockCount, g_ClientMain.m_csStatus.m_Skill.SSlot[i].SKILLINFO.cSkillLevel, ClientSocket::ItemPos_SSlot, i, 0); } else { g_ClientMain.m_csStatus.m_lstSkillSlot[i] = NULL; } } for(i = 0; i < 10; i++) { if(pQuickSlot.Slots[i].wID) { switch(pQuickSlot.Slots[i].nType) { case QUICKSLOT::SKILL: g_ClientMain.m_csStatus.m_lstQuickSlot[i] = new CItemInstance; if(!g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetSkillInfo(pQuickSlot.Slots[i].wID, pQuickSlot.Slots[i].nSkillLockCount, pQuickSlot.Slots[i].nSkillLevel, ClientSocket::ItemPos_QSlot, i, 0)) { g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetItemPos(ClientSocket::ItemPos_QSlot); g_ClientMain.m_csStatus.m_lstQuickSlot[i]->m_lpItemBase = new Item::CItem; g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetPos(i); g_ClientMain.m_Network.SendQuickSlotMove(g_ClientMain.m_csStatus.m_lstQuickSlot[i], ClientSocket::ItemPos_None, i); } // g_ClientMain.m_csStatus.m_lstQuickSlot[i]->ShowTooltip(FALSE); break; case QUICKSLOT::ITEM: { Item::ItemPos pItemIndex; pItemIndex.m_cIndex = i; pItemIndex.m_cPos = ClientSocket::ItemPos_QSlot; g_ClientMain.m_csStatus.m_lstQuickSlot[i] = new CItemInstance; if(!g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetItemInfofromID(pQuickSlot.Slots[i].wID, pItemIndex)) { g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetItemPos(ClientSocket::ItemPos_QSlot); g_ClientMain.m_csStatus.m_lstQuickSlot[i]->m_lpItemBase = new Item::CItem; g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetPos(i); g_ClientMain.m_Network.SendQuickSlotMove(g_ClientMain.m_csStatus.m_lstQuickSlot[i], ClientSocket::ItemPos_None, i); } else { g_ClientMain.m_csStatus.SetQuickSlotItemNumber(g_ClientMain.m_csStatus.m_lstQuickSlot[i]); } } break; default: { g_ClientMain.m_csStatus.m_lstQuickSlot[i] = new CItemInstance; g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetItemPos(ClientSocket::ItemPos_QSlot); g_ClientMain.m_csStatus.m_lstQuickSlot[i]->m_lpItemBase = new Item::CItem; g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetPos(i); g_ClientMain.m_Network.SendQuickSlotMove(g_ClientMain.m_csStatus.m_lstQuickSlot[i], ClientSocket::ItemPos_None, i); } break; } } } m_bCharLoginSuccess = TRUE; if(m_bCharLoginSuccess && m_bCompleteDeposit) { m_nsNetworkState = NS_UPDATEADDRESS; m_bUpdateAddressPacket = FALSE; } return TRUE; } return FALSE; } /*BOOL CNetwork::ParseCharInfo(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; m_dwNetworkError = m_pSocket->HandleCharInfo(aryBuffer, &g_ClientMain.m_csStatus.m_Info); // m_dwNetworkError = m_pSocket->HandleSULiChInfoPt(aryBuffer, // &g_ClientMain.m_csStatus.m_Info, &g_ClientMain.m_csStatus.m_Item, &g_ClientMain.m_csStatus.m_InfoEx, // &g_ClientMain.m_csStatus.m_Relation, &g_ClientMain.m_csStatus.m_InfoPos, &g_ClientMain.m_dwServerTime); if(0 == m_dwNetworkError) { g_ClientMain.m_dwStartTime = GetTickCount(); return TRUE; } return FALSE; }*/ BOOL CNetwork::ParseCharUpdateAddress(char *aryBuffer) { if(m_nsNetworkState == NS_UPDATEADDRESS) { m_nsNetworkState = NS_NOWAITING; } m_dwNetworkError = m_pSocket->HandleCharUpdateAddress(aryBuffer); if(0 == m_dwNetworkError) { if(!m_bUpdateAddressPacket) { m_bUpdateAddressPacket = TRUE; // °ÔÀÓ½ÃÀÛ g_ClientMain.m_csStatus.StatusUpdate(); g_ClientMain.m_lpInterface->InitGame(); SOCKADDR_IN pPubAddress, pPriAddress; pPubAddress = m_pSocket->GetPubAddress(); pPriAddress = m_pSocket->GetPriAddress(); #ifdef _DEBUG char a[200]; sprintf(a, "0. 0x%08x = Pub : %d.%d.%d.%d:%d, Pri : %d.%d.%d.%d:%d", g_ClientMain.m_dwMyChrID, pPubAddress.sin_addr.s_net, pPubAddress.sin_addr.s_host, pPubAddress.sin_addr.s_lh, pPubAddress.sin_addr.s_impno, pPubAddress.sin_port, pPriAddress.sin_addr.s_net, pPriAddress.sin_addr.s_host, pPriAddress.sin_addr.s_lh, pPriAddress.sin_addr.s_impno, pPriAddress.sin_port); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); #endif } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharMove(char *aryBuffer) { unsigned long dwChrID, dwChant, dwEnchant, dwPtCount; unsigned short wUpperAction, wLowerAction; char wLevel; float fDir; vector3 vecDst; m_dwNetworkError = m_pSocket->HandleCharMove(aryBuffer, &dwChrID, (LPPOS)&vecDst, &fDir, &wUpperAction, &wLowerAction, &wLevel, &dwChant, &dwEnchant, &dwPtCount); if(0 == m_dwNetworkError) { g_CharacterData.AddActionData(dwChrID, wUpperAction, wLowerAction, fDir, vecDst); return TRUE; } return FALSE; } BOOL CNetwork::ParseCharCellLogin(char *aryBuffer) { unsigned long dwChrID; unsigned char cCommand; SOCKADDR_IN pPubAddress, pPriAddress; POS pPos; vector3 vecPos; m_dwNetworkError = m_pSocket->HandleCharCellLogin(aryBuffer, &dwChrID, &pPos, &pPubAddress, &pPriAddress, &cCommand); vecPos = vector3(pPos.fPointX * 100.0f, 0.0f, pPos.fPointZ * 100.0f); vecPos.y = CSceneManager::m_HeightField.GetHeight(vecPos) + 15.0f; if(dwChrID == g_ClientMain.m_dwMyChrID) return TRUE; if(0 == m_dwNetworkError) { switch(cCommand) { case ClientSocket::CellOper_Login: if(g_CharacterData.GetClientType(dwChrID) == CT_PC) { unsigned long dwResult = m_pSocket->InsertIntoAddressList(ClientSocket::ListType_Client, dwChrID, pPubAddress, pPriAddress); #ifdef _DEBUG char a[200]; sprintf(a, "1. 0x%08x = Pub : %d.%d.%d.%d:%d, Pri : %d.%d.%d.%d:%d %d", dwChrID, pPubAddress.sin_addr.s_net, pPubAddress.sin_addr.s_host, pPubAddress.sin_addr.s_lh, pPubAddress.sin_addr.s_impno, pPubAddress.sin_port, pPriAddress.sin_addr.s_net, pPriAddress.sin_addr.s_host, pPriAddress.sin_addr.s_lh, pPriAddress.sin_addr.s_impno, pPriAddress.sin_port, m_pSocket->GetPeerType(pPubAddress, pPriAddress)); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); #endif if(dwResult == ClientSocket::ListOper_Insert) { m_pSocket->CharRequireInfo(g_ClientMain.m_dwMyChrID, dwChrID, ClientSocket::Require_Shape); m_lstSendShape.push_back(dwChrID); if(!g_CharacterData.GetCreature(dwChrID)) { g_CharacterData.AddCharacter(dwChrID, vecPos); // °ø°£¸¸ ¸¸µë } } } break; case ClientSocket::CellOper_Respawn: if(g_CharacterData.GetClientType(dwChrID) == CT_PC) { unsigned long dwResult = m_pSocket->InsertIntoAddressList(ClientSocket::ListType_Client, dwChrID, pPubAddress, pPriAddress); #ifdef _DEBUG char a[200]; sprintf(a, "2. 0x%08x = Pub : %d.%d.%d.%d:%d, Pri : %d.%d.%d.%d:%d %d", dwChrID, pPubAddress.sin_addr.s_net, pPubAddress.sin_addr.s_host, pPubAddress.sin_addr.s_lh, pPubAddress.sin_addr.s_impno, pPubAddress.sin_port, pPriAddress.sin_addr.s_net, pPriAddress.sin_addr.s_host, pPriAddress.sin_addr.s_lh, pPriAddress.sin_addr.s_impno, pPriAddress.sin_port, m_pSocket->GetPeerType(pPubAddress, pPriAddress)); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); #endif if(dwResult == ClientSocket::ListOper_Insert) { m_pSocket->CharRequireInfo(g_ClientMain.m_dwMyChrID, dwChrID, ClientSocket::Require_Shape); m_lstSendShape.push_back(dwChrID); if(!g_CharacterData.GetCreature(dwChrID)) { g_CharacterData.AddCharacter(dwChrID, vecPos); // °ø°£¸¸ ¸¸µë } } } else if(g_CharacterData.GetClientType(dwChrID) == CT_MONSTER) { // ¸ó½ºÅÍ ¸®½ºÆù ½Ã } break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharCellLogout(char *aryBuffer) { unsigned long dwChrID; unsigned char cCommand; m_dwNetworkError = m_pSocket->HandleCharCellLogout(aryBuffer, &dwChrID, &cCommand); // if(dwChrID == g_ClientMain.m_dwMyChrID) return TRUE; if(0 == m_dwNetworkError) { switch(cCommand) { case ClientSocket::CellOper_Logout: switch(g_CharacterData.GetClientType(dwChrID)) { case CT_PC: m_pSocket->DeleteFromAddressList(ClientSocket::ListType_Client, dwChrID); g_CharacterData.UnLoadChr(dwChrID); break; case CT_MONSTER: { CCreature *lpCreature = g_CharacterData.GetCreature(dwChrID); /* char a[MAX_PATH]; sprintf(a, "0x%08x³ðÀÌ Á×¾ú´Ù.", dwChrID); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 0);*/ if(lpCreature) { lpCreature->Dead(); } } break; } break; case ClientSocket::CellOper_Respawn: m_pSocket->DeleteFromAddressList(ClientSocket::ListType_Client, dwChrID); g_CharacterData.UnLoadChr(dwChrID); break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharAddressInfo(char *aryBuffer) { unsigned long dwChrID; SOCKADDR_IN PublicAddress, PrivateAddress; m_dwNetworkError = m_pSocket->HandleCharAddressInfo(aryBuffer, &dwChrID, &PublicAddress, &PrivateAddress); if(0 == m_dwNetworkError) { if(g_ClientMain.m_csStatus.CheckPartyMember(dwChrID)) { if(!m_pSocket->IsExistToList(ClientSocket::ListType_Party, dwChrID)) { // ÆÄƼ¸®½ºÆ® Ãß°¡ unsigned long dwResult = m_pSocket->InsertIntoAddressList(ClientSocket::ListType_Party, dwChrID, PublicAddress, PrivateAddress); #ifdef _DEBUG char a[200]; sprintf(a, "3. 0x%08x = Pub : %d.%d.%d.%d:%d, Pri : %d.%d.%d.%d:%d %d", dwChrID, PublicAddress.sin_addr.s_net, PublicAddress.sin_addr.s_host, PublicAddress.sin_addr.s_lh, PublicAddress.sin_addr.s_impno, PublicAddress.sin_port, PrivateAddress.sin_addr.s_net, PrivateAddress.sin_addr.s_host, PrivateAddress.sin_addr.s_lh, PrivateAddress.sin_addr.s_impno, PrivateAddress.sin_port, m_pSocket->GetPeerType(PublicAddress, PrivateAddress)); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); #endif if(dwResult == ClientSocket::ListOper_Insert) { // m_pSocket->CharRequireInfo(g_ClientMain.m_dwMyChrID, dwChrID, ClientSocket::Require_Shape); // m_lstSendShape.push_back(dwChrID); if(!g_CharacterData.GetCreature(dwChrID)) { g_CharacterData.AddCharacter(dwChrID, vector3(0.0f, 0.0f, 0.0f)); // °ø°£¸¸ ¸¸µë } } } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharChat(char *aryBuffer) { unsigned long dwSender; unsigned short wCommand; char strMessage[MAX_PATH]; m_dwNetworkError = m_pSocket->HandleCharChat(aryBuffer, &dwSender, &wCommand, strMessage); if(m_dwNetworkError == 0) { switch(wCommand) { case CHATMODE_CHAT: g_TextEdit.AddNormalChatMessage(strMessage, dwSender, wCommand); break; case CHATMODE_PARTY: g_TextEdit.AddNormalChatMessage(strMessage, dwSender, wCommand); g_TextEdit.AddPartyChatMessage(strMessage, dwSender, wCommand); break; case CHATMODE_GUILD: g_TextEdit.AddNormalChatMessage(strMessage, dwSender, wCommand); g_TextEdit.AddGuildChatMessage(strMessage, dwSender, wCommand); break; case ClientSocket::ChatType_Stall: g_TextEdit.AddStallChatMessage(strMessage, dwSender, wCommand); break; case ClientSocket::ChatType_Shout: // ¿ÜÄ¡±â g_TextEdit.AddMessage(strMessage, dwSender, wCommand); break; case 255: // °øÁö g_TextEdit.AddNotice(strMessage, 0); break; } /* switch(wCommand) { case 4: // °øÁö CUserInterface::AddNoticeMessage(strMessage, dwCmd); break; default: // äÆÃ ¸Þ½ÃÁö g_TextEdit.AddChatMessage(strMessage, dwSender, wCommand); break; }*/ return TRUE; } return FALSE; } BOOL CNetwork::ParseMonMove(char *aryBuffer) { unsigned long dwMonID; unsigned short wAction, wAniNum; float fDir, fVec; POS Pos; m_dwNetworkError = m_pSocket->HandleMonMove(aryBuffer, &dwMonID, &Pos, &fDir, &fVec, &wAction, &wAniNum); //#pragma message(__FILE__LINE__" TODO : ¿©±â ¸ó½ºÅÍ ¾Ö´Ï³Ñ¹ö °íÄ¡½Ã¿À\n") if(m_dwNetworkError == 0) { fDir += FLOAT_PHI / 2.0f; fDir = -fDir; Pos.fPointX *= 100.0f; Pos.fPointY *= 100.0f; Pos.fPointZ *= 100.0f; /* if(Action & 0xFFFF0000) { unsigned short wState = (Action & 0xFFFF0000) >> 16; if(wState == 5) { int abc = 0; } }*/ unsigned long dwFrame; const CMonsterMgr::MonsterProtoType *lpMonster = g_MonsterMgr.GetMonsterProtoType(dwMonID & 0x0000FFFF); if(lpMonster) { if(wAction == CA_WALK) { dwFrame = lpMonster->m_MonsterInfo.m_MonsterMotions[0].m_dwFrame; } else if(wAction == CA_RUN) { dwFrame = lpMonster->m_MonsterInfo.m_MonsterMotions[1].m_dwFrame; } } else { dwFrame = 20; } if(!g_CharacterData.GetIsExistChar(dwMonID)) { if(lpMonster) { g_CharacterData.AddCharacter(dwMonID, lpMonster->m_MonsterInfo.m_strName, (char *)lpMonster->m_MonsterInfo.m_strModelingFlag, (vector3 &)Pos, fDir); /* char strText[100]; sprintf(strText, "0x%08xÀÎ ¸ó½ºÅ͸¦ Ãß°¡ Çß½À´Ï´Ù.", dwMonID); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128);*/ CCreature *lpCreature = g_CharacterData.GetCreature(dwMonID); if(lpCreature) { lpCreature->m_fScale = lpMonster->m_MonsterInfo.m_fSize; if(lpCreature->m_lpChrModel) { lpCreature->m_lpChrModel->SetScale(lpMonster->m_MonsterInfo.m_fSize); } else { int a = 0; } } } } g_CharacterData.AddActionData(dwMonID, wAction, wAction, fDir, (vector3 &)Pos, fVec, wAniNum, dwFrame); // g_CharacterData.AddActionData(dwMonID, CA_RUN, CA_RUN, fDir, (vector3 &)Pos, fVec); return TRUE; } return FALSE; } BOOL CNetwork::ParseCharAttack(char *aryBuffer) { unsigned long dwChrID, dwIndex, dwValue, dwLeftIndex, dwLeftValue; unsigned char cDefenserNum; unsigned short wHp, wMp; DefenserNode *Node; AtType pAtType; char cJudge; m_dwNetworkError = m_pSocket->HandleCharAttack(aryBuffer, &dwChrID, &pAtType, &wHp, &wMp, &dwIndex, &dwValue, &dwLeftIndex, &dwLeftValue, &cJudge, &cDefenserNum, &Node); if(pAtType.m_wType & 0x8000) { int a = 0; } if(m_dwNetworkError == 0) { List SendCharacterList; g_CharacterData.GetSendCharacterAroundList(SendCharacterList); for(int i=0;iRegistInstanceUDPList(SendCharacterList[i]); } m_pSocket->CharAttackInfo(dwChrID, pAtType, cDefenserNum, Node); CCreature *lpCreature; if(g_CharacterData.GetClientType(dwChrID) == CT_MONSTER) { lpCreature = g_CharacterData.GetCreature(dwChrID); lpCreature->Attack(CA_ATTACK, CA_ATTACK); } BOOL bShow = FALSE; stDamage pDamage; pDamage.wMode = cJudge; pDamage.sLifeTime = 1500; pDamage.fScale = 1.0f; switch(cJudge) { case ClientSocket::Judge_Heal: pDamage.lValue = wHp - g_ClientMain.m_csStatus.m_Info.HP; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lstDamageNumber.Add(pDamage); bShow = TRUE; break; case ClientSocket::Judge_ManaHeal: pDamage.lValue = wMp - g_ClientMain.m_csStatus.m_Info.MP; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lstDamageNumber.Add(pDamage); bShow = TRUE; break; case ClientSocket::Judge_Chant: break; case ClientSocket::Judge_Enchant: break; case ClientSocket::Judge_Disenchant: break; case ClientSocket::Judge_NonShow: break; case ClientSocket::Judge_Evade: bShow = TRUE; break; case ClientSocket::Judge_Resist: bShow = TRUE; break; default: if(g_ClientMain.m_csStatus.m_Info.HP > wHp) { pDamage.lValue = g_ClientMain.m_csStatus.m_Info.HP - wHp; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lstDamageNumber.Add(pDamage); bShow = TRUE; } break; } if(bShow) { DefenserNode DNode; DNode.m_dwCharID = g_ClientMain.m_dwMyChrID; DNode.m_wDamage = pDamage.lValue; DNode.m_wMaxHP = g_ClientMain.m_csStatus.m_lAddMaxHP + g_ClientMain.m_csStatus.m_MaxHP; DNode.m_sCurrHP = wHp; DNode.m_wMaxMP = g_ClientMain.m_csStatus.m_lAddMaxMP + g_ClientMain.m_csStatus.m_MaxMP; DNode.m_sCurrMP = wMp; DNode.m_cJudge = pDamage.wMode; List SendCharacterList; g_CharacterData.GetSendCharacterAroundList(SendCharacterList); for(int i=0;iRegistInstanceUDPList(SendCharacterList[i]); } m_pSocket->CharAttackInfo(dwChrID, pAtType, 1, &DNode); } g_ClientMain.m_csStatus.m_Info.HP = wHp; g_ClientMain.m_csStatus.m_Info.MP = wMp; if(wHp <= 0) { // ÀÚ»ì g_ClientMain.m_csStatus.m_Info.HP = 0; g_CharacterData.InitGlobalAction(); g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_sCurrHP = 0; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->Dead(); g_ClientMain.m_csStatus.ChantDisable(); g_ClientMain.SetAutoRun(FALSE); SendMovingPacket(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwUpperChrAction, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_fDirection, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos); } // Àåºñ ³»±¸µµ ´Þ±â if(dwIndex < Item::EquipmentPos::MAX_EQUPMENT_POS && g_ClientMain.m_csStatus.m_lstEquipment[dwIndex]) { g_ClientMain.m_csStatus.m_lstEquipment[dwIndex]->SetNowDurability(dwValue); if(dwValue == 0) { g_TextEdit.AddMessage(g_StringTable.m_strString[271], g_ClientMain.m_dwMyChrID, 129); } } // Àåºñ ³»±¸µµ ´Þ±â if(dwLeftIndex < Item::EquipmentPos::MAX_EQUPMENT_POS && g_ClientMain.m_csStatus.m_lstEquipment[dwLeftIndex]) { g_ClientMain.m_csStatus.m_lstEquipment[dwLeftIndex]->SetNowDurability(dwLeftValue); if(dwLeftValue == 0) { unsigned long dwType = g_ClientMain.m_csStatus.m_lstEquipment[dwLeftIndex]->GetItemType(); if(dwType == Item::CItemType::ARROW || dwType == Item::CItemType::BOLT) { delete g_ClientMain.m_csStatus.m_lstEquipment[dwLeftIndex]; g_ClientMain.m_csStatus.m_lstEquipment[dwLeftIndex] = NULL; switch(dwType) { case Item::CItemType::ARROW: g_TextEdit.AddMessage(g_StringTable.m_strString[356], g_ClientMain.m_dwMyChrID, 129); break; case Item::CItemType::BOLT: g_TextEdit.AddMessage(g_StringTable.m_strString[357], g_ClientMain.m_dwMyChrID, 129); break; } } else { g_TextEdit.AddMessage(g_StringTable.m_strString[271], g_ClientMain.m_dwMyChrID, 129); } } } if(cDefenserNum) { for(int i = 0; i < cDefenserNum; i++) { lpCreature = g_CharacterData.GetCreature(Node[i].m_dwCharID); if(lpCreature) { if(lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) { g_ClientMain.m_csStatus.m_Info.HP = Node[i].m_sCurrHP; g_ClientMain.m_csStatus.m_Info.MP = Node[i].m_sCurrMP; if(Node[i].m_sCurrHP <= 0) { g_ClientMain.m_csStatus.m_Info.HP = 0; g_CharacterData.m_bAutoTargetAttack = false; g_CharacterData.m_dwAutoTargetID = 0xFFFFFFFF; } } else { // ½ºÅ³ 2Â÷ ÀÌÆåÆ®¸¦ ºÙÀδÙ. if((pAtType.m_wType & 0x8000) && (pAtType.m_cSkillLevel || pAtType.m_cSkillLockCount)) { CCreature *AttCreature = NULL; AttCreature = g_CharacterData.GetCreature(dwChrID); if(AttCreature != NULL) { SetHitEffect(pAtType, lpCreature,AttCreature,i); } else { SetHitEffect(pAtType, lpCreature,NULL,i); } } lpCreature->m_wMaxHP = Node[i].m_wMaxHP; lpCreature->m_sCurrHP = Node[i].m_sCurrHP; lpCreature->m_wMaxMP = Node[i].m_wMaxMP; lpCreature->m_sCurrMP = Node[i].m_sCurrMP; } stDamage pDamage; pDamage.wMode = Node[i].m_cJudge; switch(pDamage.wMode) { case ClientSocket::Judge_ManaShell: lpCreature->AddBodyEffect("chant_ManaShell.esf", (unsigned long)0, true); pDamage.wMode = ClientSocket::Judge_Guard; case ClientSocket::Judge_Guard: pDamage.sLifeTime = 1500; pDamage.lValue = Node[i].m_wDamage; pDamage.fScale = 1.0f; lpCreature->m_lstDamageNumber.Add(pDamage); { CEffScript *test_script; // _ASSERTE(_CrtCheckMemory()); test_script = new CEffScript; CSceneManager::AddEffectScript(test_script); test_script->GetScriptBinData("guard_blocking.esf"); test_script->SetStartPos(lpCreature->m_vecPos.x, lpCreature->m_vecPos.y, lpCreature->m_vecPos.z); test_script->SetEndPos(lpCreature->m_vecPos.x, lpCreature->m_vecPos.y, lpCreature->m_vecPos.z); } break; case ClientSocket::Judge_Critical: pDamage.sLifeTime = 1500; pDamage.lValue = Node[i].m_wDamage; pDamage.fScale = 1.0f; lpCreature->m_lstDamageNumber.Add(pDamage); { CEffScript *test_script; // _ASSERTE(_CrtCheckMemory()); test_script = new CEffScript; CSceneManager::AddEffectScript(test_script); test_script->GetScriptBinData("guard_critical.esf"); test_script->SetStartPos(lpCreature->m_vecPos.x, lpCreature->m_vecPos.y, lpCreature->m_vecPos.z); test_script->SetEndPos(lpCreature->m_vecPos.x, lpCreature->m_vecPos.y, lpCreature->m_vecPos.z); } break; case ClientSocket::Judge_Chant: break; case ClientSocket::Judge_Enchant: break; case ClientSocket::Judge_Disenchant: break; case ClientSocket::Judge_NonShow: break; case ClientSocket::Judge_Evade: pDamage.sLifeTime = 1500; pDamage.lValue = Node[i].m_wDamage; pDamage.fScale = 1.0f; lpCreature->m_lstDamageNumber.Add(pDamage); break; case ClientSocket::Judge_Resist: pDamage.sLifeTime = 1500; pDamage.lValue = Node[i].m_wDamage; pDamage.fScale = 1.0f; lpCreature->m_lstDamageNumber.Add(pDamage); break; default: pDamage.sLifeTime = 1500; pDamage.lValue = Node[i].m_wDamage; pDamage.fScale = 1.0f; lpCreature->m_lstDamageNumber.Add(pDamage); break; } /* char a[200]; sprintf(a, "ID°¡ 0x%08xÀÎ %sÀ» %d¸¸Å­ Á¤¸» ¾ÆÇÁ°Ô ¶§·È½À´Ï´Ù.", lpCreature->m_dwChrID, lpCreature->m_strName, Node[i].m_wDamage); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 0);*/ if(Node[i].m_sCurrHP <= 0 && cJudge != ClientSocket::Judge_NonShow) { lpCreature->m_wMaxHP = 0; lpCreature->m_sCurrHP = -1; lpCreature->m_wMaxMP = 0; lpCreature->m_sCurrMP = -1; if(g_CharacterData.GetClientType(lpCreature->m_dwChrID) == CT_PC) { char strText[MAX_PATH], *strName = g_CharacterData.GetCreatureName(Node[i].m_dwCharID); unsigned long dwCreatureType = g_CharacterData.GetClientType(Node[i].m_dwCharID); if(strName) { if(dwCreatureType == CT_PC) { sprintf(strText, g_StringTable.m_strString[372], strName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); } } else { g_TextEdit.AddMessage(g_StringTable.m_strString[373], g_ClientMain.m_dwMyChrID, 128); } lpCreature->Dead(); if(lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) { SendMovingPacket(lpCreature->m_dwUpperChrAction, lpCreature->m_dwLowerChrAction, lpCreature->m_fDirection, lpCreature->m_vecPos); } } else { lpCreature->Dead(); } } } } } return TRUE; } else { if(pAtType.m_wType & 0x8000) { const Skill::ProtoType *lpSkillProtoType = g_SkillMgr.GetSkillProtoType(pAtType.m_wType); if(lpSkillProtoType && lpSkillProtoType->m_cEndCoolDown) { g_ClientMain.SetSkillCoolDown(pAtType.m_wType); } } } return FALSE; } BOOL CNetwork::ParseCharRespawn(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID, dwGold; unsigned short wHp, wMp; POS Pos; __int64 ddExp; m_dwNetworkError = m_pSocket->HandleCharRespawn(aryBuffer, &dwChrID, &wHp, &wMp, &Pos, &ddExp, &dwGold); if(m_dwNetworkError == 0) { if(dwChrID == g_ClientMain.m_dwMyChrID) { if(g_ClientMain.m_dwPresentZone == 100) { if(g_ClientMain.m_lpBackGroundMusic) { try { g_ClientMain.m_lpBackGroundMusic->Destroy(); g_ClientMain.m_lpBackGroundMusic = NULL; } catch(exception & e) { e = 0; g_ClientMain.m_lpBackGroundMusic = NULL; } } g_ClientMain.m_dwPresentZone = g_ClientMain.m_dwNextZone; g_ClientMain.m_lpInterface->InitZone(g_ClientMain.m_dwPresentZone); g_ClientMain.m_lpCommonInterface->InitLoading(); g_ClientMain.m_dwClientState = GAME_PLAYING; } g_ClientMain.m_csStatus.m_Info.HP = wHp; g_ClientMain.m_csStatus.m_Info.MP = wMp; g_ClientMain.m_csStatus.m_Info.Exp = ddExp; g_ClientMain.m_csStatus.m_Info.Gold = dwGold; CCreature *lpCreature = g_CharacterData.GetCreature(dwChrID); lpCreature->Respawn(); vector3 vecPos = vector3(Pos.fPointX * 100.0f, 0.0f, Pos.fPointZ * 100.0f); vecPos.y = g_ClientMain.m_lpSceneManager->m_HeightField.GetHeight(vecPos) + 15.0f; lpCreature->m_lpChrModel->SetPosition(vecPos); CEffScript *pRespawnEff; // _ASSERTE(_CrtCheckMemory()); pRespawnEff=new CEffScript; CSceneManager::AddEffectScript(pRespawnEff); pRespawnEff->GetScriptBinData("respawn.esf"); pRespawnEff->SetStartPos(Pos.fPointX * 100.0f, Pos.fPointY * 100.0f, Pos.fPointZ * 100.0f); pRespawnEff->SetEndPos((D3DXVECTOR3 *)&(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos), 1); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharAttackInfo(char *aryBuffer) { unsigned long dwChrID; unsigned char cDefenserNum; DefenserNode *Node; AtType pAtType; m_dwNetworkError = m_pSocket->HandleCharAttackInfo(aryBuffer, &dwChrID, &pAtType, &cDefenserNum, &Node); if(m_dwNetworkError == 0) { if(Node[0].m_cJudge != ClientSocket::Judge_Poisoned && dwChrID == g_ClientMain.m_dwMyChrID) return TRUE; CCreature *lpCreature; if(g_CharacterData.GetClientType(dwChrID) == CT_MONSTER) { lpCreature = g_CharacterData.GetCreature(dwChrID); if(lpCreature) { lpCreature->Attack(CA_ATTACK, CA_ATTACK); } } char *strKillerName = g_CharacterData.GetCreatureName(dwChrID); unsigned long dwKillerType = g_CharacterData.GetClientType(dwChrID); if(cDefenserNum) { for(int i = 0; i < cDefenserNum; i++) { if(Node[i].m_dwCharID == g_ClientMain.m_dwMyChrID) continue; lpCreature = g_CharacterData.GetCreature(Node[i].m_dwCharID); if(lpCreature) { lpCreature->m_wMaxHP = Node[i].m_wMaxHP; lpCreature->m_sCurrHP = Node[i].m_sCurrHP; lpCreature->m_wMaxMP = Node[i].m_wMaxMP; lpCreature->m_sCurrMP = Node[i].m_sCurrMP; lpCreature->m_sDamage = Node[i].m_wDamage; stDamage pDamage; pDamage.sLifeTime = 1500; pDamage.lValue = Node[i].m_wDamage; pDamage.wMode = Node[i].m_cJudge; pDamage.fScale = 0.5f; switch(Node[i].m_cJudge) { case ClientSocket::Judge_ManaShell: lpCreature->AddBodyEffect("chant_ManaShell.esf",(unsigned long)0,true); pDamage.wMode = ClientSocket::Judge_Guard; lpCreature->m_lstDamageNumber.Add(pDamage); break; case ClientSocket::Judge_ManaHeal: lpCreature->m_lstDamageNumber.Add(pDamage); break; case ClientSocket::Judge_Heal: lpCreature->m_lstDamageNumber.Add(pDamage); break; case ClientSocket::Judge_Chant: break; case ClientSocket::Judge_Enchant: break; case ClientSocket::Judge_Disenchant: break; case ClientSocket::Judge_NonShow: break; case ClientSocket::Judge_Evade: lpCreature->m_lstDamageNumber.Add(pDamage); break; case ClientSocket::Judge_Resist: lpCreature->m_lstDamageNumber.Add(pDamage); break; default: g_CharacterData.RegistAttacked(dwChrID, Node[i].m_dwCharID, pAtType.m_wType); lpCreature->m_lstDamageNumber.Add(pDamage); break; } // ½ºÅ³ 2Â÷ ÀÌÆåÆ®¸¦ ºÙÀδÙ. if((pAtType.m_wType & 0x8000) && (pAtType.m_cSkillLevel || pAtType.m_cSkillLockCount)) { CCreature *AttCreature = NULL; AttCreature = g_CharacterData.GetCreature(dwChrID); if(AttCreature != NULL) { SetHitEffect(pAtType, lpCreature,AttCreature,i); } else { SetHitEffect(pAtType, lpCreature,NULL,i); } } if(Node[i].m_sCurrHP <= 0 && Node[i].m_cJudge != ClientSocket::Judge_NonShow) { lpCreature->m_wMaxHP = 0; lpCreature->m_sCurrHP = -1; lpCreature->m_wMaxMP = 0; lpCreature->m_sCurrMP = -1; lpCreature->Dead(); if(g_CharacterData.GetClientType(lpCreature->m_dwChrID) == CT_PC) { char strText[MAX_PATH], *strName = g_CharacterData.GetCreatureName(lpCreature->m_dwChrID); if(strName) { char strTemp[50]; if(dwKillerType == CT_PC) { if(lpCreature->m_dwChrID != dwChrID) { if(strKillerName) { strcpy(strTemp, strKillerName); strcat(strTemp, g_StringTable.m_strString[374]); } else { strcpy(strTemp, g_StringTable.m_strString[375]); } sprintf(strText, g_StringTable.m_strString[376], strTemp, strName); } else { if(strKillerName) { strcpy(strTemp, strKillerName); strcat(strTemp, g_StringTable.m_strString[374]); } else { strcpy(strTemp, g_StringTable.m_strString[375]); } sprintf(strText, g_StringTable.m_strString[377], strTemp); } } else { if(strKillerName) { strcpy(strTemp, strKillerName); strcat(strTemp, g_StringTable.m_strString[378]); } else { strcpy(strTemp, g_StringTable.m_strString[379]); } sprintf(strText, g_StringTable.m_strString[380], strName, strTemp); } if(g_CharacterData.GetClientType(lpCreature->m_dwChrID, TRUE) == CT_PC) { g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 129); } else { g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); } } } /* if(g_CharacterData.GetClientType(lpCreature->m_dwChrID) == CT_PC) { if(lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) { SendMovingPacket(lpCreature->m_dwUpperChrAction, lpCreature->m_dwLowerChrAction, lpCreature->m_fDirection, lpCreature->m_vecPos); } }*/ } } } } return TRUE; } return FALSE; } /*BOOL CNetwork::ParseCharItemInfo(char *aryBuffer) { unsigned long dwChrID; unsigned char cPos; unsigned short wSize; char *lpItemBuffer; m_dwNetworkError = m_pSocket->HandleCharItemInfo(aryBuffer, &dwChrID, &cPos, &wSize, &lpItemBuffer); if(0 == m_dwNetworkError) { // Item_DB::LPITEM_BASE lpItemBaseDB = reinterpret_cast(lpItemBuffer); // Item::LPItemBase lpItembase = Item::MakeItemFromItemDB(lpItemBaseDB); // lpItemBuffer += lpItemBaseDB->GetRealSize();// ¿©·¯°³À϶§ unsigned short wBufferSize = 0; while(wBufferSize < wSize) { Item_DB::LPITEM_BASE lpItemBaseDB = reinterpret_cast(lpItemBuffer); CItemInstance *lpItem; lpItem = new CItemInstance; ItemIndex pItemIndex; pItemIndex.m_cIndex = 0xFF; int nDBSize = lpItem->SetItemInfo(lpItemBaseDB, cPos, pItemIndex); wBufferSize += nDBSize; lpItemBuffer += nDBSize; // ÀÌ °÷Àº À妽º¿Í Æ÷Áö¼ÇÀ» Áý¾î³ÖÀ» ÇÊ¿ä ¾ø´Ù. switch(cPos) { case ClientSocket::ItemPos_Inven: g_ClientMain.m_csStatus.AddInventoryItem(lpItem); break; case ClientSocket::ItemPos_Equip: if(lpItem->m_lpItemBase->m_ItemInfo.m_nItemIndex.m_cIndex == 128) { g_ClientMain.SetPickItem(lpItem, FALSE); g_ClientMain.m_lpPickItem->m_dwItemPos = ClientSocket::ItemPos_Temp; g_ClientMain.m_lpPickItem->m_lpItemBase->m_ItemInfo.m_nItemIndex.m_cIndex = 0; } else { g_ClientMain.m_csStatus.m_lstEquipment[lpItem->m_lpItemBase->m_ItemInfo.m_nItemIndex.m_cIndex] = lpItem; } break; } } return TRUE; } /* unsigned long dwChrID; unsigned char cPos; // 1 Àåºñ 2 Àκ¥ unsigned short wLength; unsigned char *lpItem; // m_dwNetworkError = m_pSocket->HandleCharItemInfo(aryBuffer, &dwChrID, &cPos, &wLength, &lpItem); if(0 == m_dwNetworkError) { for(int i = 0; i < wLength; i++) { } return TRUE; } return FALSE; }*/ BOOL CNetwork::ParseGameCellInfo(char *aryBuffer) { unsigned char cObjectNum; LPFieldObject lpFieldObject; m_dwNetworkError = m_pSocket->HandleGameCellInfo(aryBuffer, &cObjectNum, &lpFieldObject); if(0 == m_dwNetworkError) { unsigned long dwMonsterID[1000], dwMonsterCount = 0; for(int i = 0; i < cObjectNum; i++) { if((lpFieldObject->m_dwOID & 0x80000000) && (lpFieldObject->m_dwTypeID == 0x80000000)) { dwMonsterID[dwMonsterCount] = lpFieldObject->m_dwOID; dwMonsterCount++; } else { g_ClientMain.AddFieldObject(lpFieldObject); } lpFieldObject++; } if(dwMonsterCount) { int j; BOOL bAlive; /* for(i = 0; i < g_CharacterData.m_lstCharData.num;) { if(g_CharacterData.GetClientType(g_CharacterData.m_lstCharData[i]->m_dwChrID) == CT_MONSTER) { bAlive = FALSE; for(j = 0; j < dwMonsterCount; j++) { if(g_CharacterData.m_lstCharData[i]->m_dwChrID == dwMonsterID[j]) { bAlive = TRUE; break; } } if(!bAlive) { g_CharacterData.UnLoadChr(g_CharacterData.m_lstCharData[i]->m_dwChrID); } else { i++; } } else { i++; } }*/ for(i = g_CharacterData.m_lstCharData.num - 1; i >= 1; i--) { if(g_CharacterData.GetClientType(g_CharacterData.m_lstCharData[i]->m_dwChrID) == CT_MONSTER) { /////////////´Ü°Å bAlive = FALSE; for(j = 0; j < dwMonsterCount; j++) { if(g_CharacterData.m_lstCharData[i]->m_dwChrID == dwMonsterID[j]) { bAlive = TRUE; break; } } if(!bAlive) { //g_CharacterData.UnLoadChr(g_CharacterData.m_lstCharData[i]->m_dwChrID); }/* else { i++; }*/ }/* else { i++; }*/ } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharPullDownInfo(char *aryBuffer) { unsigned long dwChrID; FieldObject FieldObject; m_dwNetworkError = m_pSocket->HandleCharPullDownInfo(aryBuffer, &dwChrID, &FieldObject); if(0 == m_dwNetworkError) { g_ClientMain.AddFieldObject(&FieldObject); return TRUE; } return FALSE; } BOOL CNetwork::ParseCharPickUp(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID, dwObjectID, dwGold, dwSize; unsigned char cNum; char *lpItemBuffer; Item::ItemPos pItemIndex; m_dwNetworkError = m_pSocket->HandleCharPickUp(aryBuffer, &dwChrID, &dwObjectID, &pItemIndex, &dwGold, &dwSize, &cNum, &lpItemBuffer); if(0 == m_dwNetworkError) { /* Item_DB::LPITEM_BASE lpItemBaseDB = reinterpret_cast(lpItemBuffer); Item::LPItemBase lpItembase = Item::MakeItemFromItemDB(lpItemBase DB); lpItemBuffer += lpItemBaseDB->GetRealSize();*/// ¿©·¯°³À϶§ char strSoundFilename[256]; sprintf(strSoundFilename,"%s\\Interface\\money.mnd",SOUNDFILEPATH); CSoundManager &sm = CSoundManager::GetInstance(); ISoundObject &sb = sm.GetBuffer(strSoundFilename, false); int nBuffer=sb.Play(false); if(dwSize) // ¾ÆÀÌÅÛÀ϶§ { char strString[200]; CItemInstance *lpItem; lpItem = new CItemInstance; lpItem->SetItemInfo(lpItemBuffer, (size_t &)dwSize); g_ClientMain.m_csStatus.AddInventoryItem(lpItem); if(lpItem->GetIsEnableStack()) { sprintf(strString, g_StringTable.m_strString[272], lpItem->GetItemInfo().m_SpriteData.m_szName, lpItem->GetNowDurability()); g_TextEdit.AddMessage(strString, g_ClientMain.m_dwMyChrID, 128); } else { sprintf(strString, g_StringTable.m_strString[273], lpItem->GetItemInfo().m_SpriteData.m_szName); g_TextEdit.AddMessage(strString, g_ClientMain.m_dwMyChrID, 128); } } else { if(dwGold) { g_ClientMain.m_csStatus.m_Info.Gold += dwGold; char strString[200]; sprintf(strString, g_StringTable.m_strString[274], dwGold); g_TextEdit.AddMessage(strString, g_ClientMain.m_dwMyChrID, 128); } else { char strString[200]; CItemInstance *lpExistItem = g_ClientMain.m_csStatus.GetInventoryItem(pItemIndex.m_cIndex); if(lpExistItem) { sprintf(strString, g_StringTable.m_strString[272], lpExistItem->GetItemInfo().m_SpriteData.m_szName, cNum); g_TextEdit.AddMessage(strString, g_ClientMain.m_dwMyChrID, 128); // ½ºÅÃÀÌ ÀϾ´Ù. unsigned dwNum = lpExistItem->GetNowDurability() + cNum; lpExistItem->SetNowDurability(dwNum); g_ClientMain.m_csStatus.SetQuickSlot(lpExistItem); } } } return TRUE; } else { if(m_dwNetworkError == 2 || m_dwNetworkError == 3 || m_dwNetworkError == 6) { g_ClientMain.DeleteFieldObject(dwObjectID); } } return FALSE; } BOOL CNetwork::ParseCharPickUpInfo(char *aryBuffer) { unsigned long dwChrID, dwObjectID; m_dwNetworkError = m_pSocket->HandleCharPickUpInfo(aryBuffer, &dwChrID, &dwObjectID); if(0 == m_dwNetworkError) { g_ClientMain.DeleteFieldObject(dwObjectID); return TRUE; } return FALSE; } BOOL CNetwork::ParseCharAttacked(char *aryBuffer) { unsigned long dwChrID; unsigned short wJudge; unsigned char cIndex, cValue; float fDir; POS psPos; AtType pAtType; unsigned short wHp, wMp; m_dwNetworkError = m_pSocket->HandleCharAttacked(aryBuffer, &dwChrID, &pAtType, &psPos, &fDir, &wJudge, &wHp, &wMp, &cIndex, &cValue); if(m_dwNetworkError == 0) { if(g_CharacterData.m_nFocusCharacter == -1) return TRUE; stDamage pDamage; pDamage.sLifeTime = 1500; pDamage.wMode = wJudge; pDamage.fScale = 1.0f; switch(wJudge) { case ClientSocket::Judge_ManaShell: g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->AddBodyEffect("chant_ManaShell.esf", (unsigned long)0, true); pDamage.wMode = ClientSocket::Judge_Guard; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lstDamageNumber.Add(pDamage); break; case ClientSocket::Judge_ManaHeal: pDamage.lValue = wMp - g_ClientMain.m_csStatus.m_Info.MP; if(!pDamage.lValue) { g_TextEdit.AddMessage(g_StringTable.m_strString[275], g_ClientMain.m_dwMyChrID, 129); } g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lstDamageNumber.Add(pDamage); break; case ClientSocket::Judge_Heal: pDamage.lValue = wHp - g_ClientMain.m_csStatus.m_Info.HP; if(!pDamage.lValue) { g_TextEdit.AddMessage(g_StringTable.m_strString[275], g_ClientMain.m_dwMyChrID, 129); } g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lstDamageNumber.Add(pDamage); break; case ClientSocket::Judge_Chant: break; case ClientSocket::Judge_NonShow: break; case ClientSocket::Judge_Enchant: break; case ClientSocket::Judge_Disenchant: break; case ClientSocket::Judge_Evade: g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lstDamageNumber.Add(pDamage); break; case ClientSocket::Judge_Resist: g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lstDamageNumber.Add(pDamage); break; default: pDamage.lValue = g_ClientMain.m_csStatus.m_Info.HP - wHp; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lstDamageNumber.Add(pDamage); break; } BOOL bCastCancel = TRUE; if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->GetChantFlag(18) || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->GetChantFlag(23)) { if(pAtType.m_wType & 0x8000) { const Skill::ProtoType *lpSkillType = g_SkillMgr.GetSkillProtoType(pAtType.m_wType); if(lpSkillType) { if(lpSkillType->m_bProtection) { bCastCancel = FALSE; } } } else { bCastCancel = FALSE; } } if(pAtType.m_wType & 0x8000) { const Skill::ProtoType *lpSkillType = g_SkillMgr.GetSkillProtoType(pAtType.m_wType); if(lpSkillType) { if(!lpSkillType->m_bInterrupt) { bCastCancel = FALSE; } } } if(bCastCancel) { /////////////////////////////////////////////////////////////////////////////////////// // ½ºÅ³ ij½ºÆÃ ½ÇÆÐ..... if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bStillCasting && !(wJudge == ClientSocket::Judge_Heal || wJudge == ClientSocket::Judge_ManaHeal)) { CCameraControl::SetFadeOut(1.0f, 1.0f, 30.0f); g_CharacterData.m_bSkillExecuted = FALSE; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->CancelSkill(); const Skill::ProtoType *lpSkillTypeTemp = g_SkillMgr.GetSkillProtoType(g_ClientMain.m_csStatus.m_lpQuickSelected->GetProtoTypeID()); const Skill::ProtoType *lpSkillType = &lpSkillTypeTemp[g_CharacterData.m_dwCastingSkillGrade]; unsigned long cLevel; if(Skill::Type::INSTANCE == lpSkillType->m_eSkillType) { cLevel = (unsigned char)g_CharacterData.m_dwCastingSkillTick; } else { unsigned long dwLevelTick = lpSkillType->m_LevelTick * ((500 - ((g_ClientMain.m_csStatus.m_Info.DEX + g_ClientMain.m_csStatus.m_lAddDEX) - 20)) / 500.0f); cLevel = g_CharacterData.m_dwCastingSkillTick / dwLevelTick; } unsigned long dwDefenser[10]; ZeroMemory(&dwDefenser, sizeof(unsigned long) * 10); SendCharAttack(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_fDirection - FLOAT_PHI / 2.0f, g_ClientMain.m_csStatus.m_lpQuickSelected->GetProtoTypeID(), g_CharacterData.m_dwCastingSkillGrade, cLevel, 0, 0, dwDefenser); g_ClientMain.SetSkillCoolDown(g_CharacterData.m_dwCastingSkillGrade, 0); }/**/ /////////////////////////////////////////////////////////////////////////////////////// } switch(pDamage.wMode) { case ClientSocket::Judge_Resist: case ClientSocket::Judge_Guard: { CEffScript *test_script; // _ASSERTE(_CrtCheckMemory()); test_script = new CEffScript; CSceneManager::AddEffectScript(test_script); test_script->GetScriptBinData("guard_blocking.esf"); test_script->SetStartPos(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.x, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.y, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.z); test_script->SetEndPos(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.x, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.y, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.z); } break; case ClientSocket::Judge_Critical: { CEffScript *test_script; // _ASSERTE(_CrtCheckMemory()); test_script = new CEffScript; CSceneManager::AddEffectScript(test_script); test_script->GetScriptBinData("guard_critical.esf"); test_script->SetStartPos(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.x, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.y, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.z); test_script->SetEndPos(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.x, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.y, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos.z); } break; } if(g_CharacterData.GetClientType(dwChrID) == CT_MONSTER || pDamage.wMode == ClientSocket::Judge_Poisoned) { DefenserNode DNode; DNode.m_dwCharID = g_ClientMain.m_dwMyChrID; if(wJudge == ClientSocket::Judge_ManaHeal) DNode.m_wDamage = wMp - g_ClientMain.m_csStatus.m_Info.MP; else if(wJudge == ClientSocket::Judge_Heal) DNode.m_wDamage = wHp - g_ClientMain.m_csStatus.m_Info.HP; else DNode.m_wDamage = g_ClientMain.m_csStatus.m_Info.HP - wHp; DNode.m_wMaxHP = g_ClientMain.m_csStatus.m_MaxHP; DNode.m_sCurrHP = wHp; DNode.m_wMaxMP = g_ClientMain.m_csStatus.m_MaxMP; DNode.m_sCurrMP = wMp; DNode.m_cJudge = wJudge; List SendCharacterList; g_CharacterData.GetSendCharacterAroundList(SendCharacterList); for(int i=0;iRegistInstanceUDPList(SendCharacterList[i]); } m_pSocket->CharAttackInfo(dwChrID, pAtType, 1, &DNode); } if(g_CharacterData.GetClientType(dwChrID) == CT_MONSTER) { CCreature *lpCreature; lpCreature = g_CharacterData.GetCreature(dwChrID); if(lpCreature) { if(lpCreature->m_lpChrModel) { // char a[200]; // sprintf(a, "ID°¡ 0x%08xÀÎ ¿ì¶óÁú°°Àº %s³ðÀÌ %d¸¸Å­ ¶§·È½À´Ï´Ù.", dwChrID, lpCreature->m_strName, DNode.m_wDamage); // g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); if(lpCreature->m_dwLowerChrAction == CA_RUN || lpCreature->m_dwLowerChrAction == CA_WALK) lpCreature->m_lpChrModel->AddMotion("ATTACK", 3, 1.0f); else lpCreature->SetAction(CA_ATTACK, CA_ATTACK); lpCreature->m_lpChrModel->SetDirection(-(fDir) - FLOAT_PHI / 2.0f); } } else { const CMonsterMgr::MonsterProtoType *lpMonster = g_MonsterMgr.GetMonsterProtoType(dwChrID & 0x0000FFFF); if(lpMonster) { vector3 vecPos = vector3(psPos.fPointX * 100.0f, psPos.fPointY * 100.0f, psPos.fPointZ * 100.0f); g_CharacterData.AddCharacter(dwChrID, lpMonster->m_MonsterInfo.m_strName, (char *)lpMonster->m_MonsterInfo.m_strModelingFlag, vecPos, -(fDir) - FLOAT_PHI / 2.0f); lpCreature = g_CharacterData.GetCreature(dwChrID); if(lpCreature && lpCreature->m_lpChrModel) { if(lpCreature->m_dwLowerChrAction == CA_RUN || lpCreature->m_dwLowerChrAction == CA_WALK) lpCreature->m_lpChrModel->AddMotion("ATTACK", 3, 1.0f); else lpCreature->SetAction(CA_ATTACK, CA_ATTACK); } } } } g_CharacterData.RegistAttacked(dwChrID, g_ClientMain.m_dwMyChrID, pAtType.m_wType); // Àåºñ ³»±¸µµ ´Þ±â if(cIndex < Item::EquipmentPos::MAX_EQUPMENT_POS && g_ClientMain.m_csStatus.m_lstEquipment[cIndex]) { g_ClientMain.m_csStatus.m_lstEquipment[cIndex]->SetNowDurability(cValue); if(cValue == 0) { g_TextEdit.AddMessage(g_StringTable.m_strString[271], g_ClientMain.m_dwMyChrID, 129); } } // ½ºÅ³ 2Â÷ ÀÌÆåÆ®¸¦ ºÙÀδÙ. if((pAtType.m_wType & 0x8000) && (pAtType.m_cSkillLevel || pAtType.m_cSkillLockCount)) { CCreature *AttCreature = NULL; AttCreature = g_CharacterData.GetCreature(dwChrID); if(AttCreature != NULL) { if( g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter] == AttCreature ) // ¸¶¹ýÀ» ½ð»ç¶÷ÀÌ ÀÚ½ÅÀ϶§ SetHitEffect(pAtType, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter],AttCreature,0); else SetHitEffect(pAtType, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter],AttCreature,1); } else { SetHitEffect(pAtType, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter],NULL,1); } } /* char a[100]; sprintf(a, "%d·Î HP°¡ ¿Ô´Ù.", wHp); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128);*/ if(wHp > 0) { g_ClientMain.m_csStatus.m_Info.HP = wHp; } else if(wJudge != ClientSocket::Judge_NonShow) { g_ClientMain.m_csStatus.m_Info.HP = 0; g_CharacterData.InitGlobalAction(); char strText[MAX_PATH], *strName = g_CharacterData.GetCreatureName(dwChrID); unsigned long dwCreatureType = g_CharacterData.GetClientType(dwChrID); if(strName) { if(dwCreatureType == CT_PC) { sprintf(strText, g_StringTable.m_strString[381], strName); } else { sprintf(strText, g_StringTable.m_strString[382], strName); } g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 129); } else { g_TextEdit.AddMessage(g_StringTable.m_strString[383], g_ClientMain.m_dwMyChrID, 129); } g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_sCurrHP = 0; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->Dead(); g_ClientMain.m_csStatus.ChantDisable(); g_ClientMain.SetAutoRun(FALSE); SendMovingPacket(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwUpperChrAction, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_fDirection, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos); } g_ClientMain.m_csStatus.m_Info.MP = wMp; return TRUE; } return FALSE; } BOOL CNetwork::ParseCharTakeItem(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID; TakeType pTakeType; m_dwNetworkError = m_pSocket->HandleCharTakeItem(aryBuffer, &dwChrID, &pTakeType); if(0 == m_dwNetworkError) { if(dwChrID != g_ClientMain.m_dwMyChrID) return FALSE; /* list::iterator it; for(it = g_ClientMain.m_csStatus.m_lstInventory.being(); it <= g_ClientMain.m_csStatus.m_lstInventory.end(); it++) { if((*it)->m_lpItem->m_lpItemBase->m_ItemInfo.m_nItemIndex.m_cIndex == pTakeType.m_srcPos.m_cIndex) { if(pTakeType.m_srcPos.m_cPos == TakeType::TS_INVEN) { g_ClientMain.m_lpPickItem->m_lpItem->m_lpItemBase->m_ItemInfo.m_nItemIndex = pTakeType.m_dstPos; g_ClientMain.m_csStatus.m_lstEquipment[pTakeType.m_dstPos.m_cIndex] = g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } } }*/ // list::iterator it; // for(it = g_ClientMain.m_csStatus.m_lstInventory.being(); it <= g_ClientMain.m_csStatus.m_lstInventory.end(); it++) // if(pTakeType.m_srcPos.m_cPos == TakeType::TS_INVEN) if(g_ClientMain.m_lpPickItem->GetIsEnableStack()) // ½ºÅà °¡´ÉÇÑ ¹°°Ç { switch(pTakeType.m_dstPos.m_cPos) { case TakeType::TS_INVEN: { CItemInstance *lpInstance = g_ClientMain.m_csStatus.GetInventoryItem(pTakeType.m_dstPos.m_cIndex); if(lpInstance) { // ¸ñÀûÁö¿¡ ¾ÆÀÌÅÛÀÌ ÀÖ´Ù. unsigned long dwNum = lpInstance->GetNowDurability() + pTakeType.m_cNum; lpInstance->SetNowDurability(dwNum); g_ClientMain.m_csStatus.SetQuickSlot(lpInstance); if(g_ClientMain.m_lpPickItem->GetNowDurability() == pTakeType.m_cNum) { delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } else { dwNum = g_ClientMain.m_lpPickItem->GetNowDurability() - pTakeType.m_cNum; g_ClientMain.m_lpPickItem->SetNowDurability(dwNum); } } else { // ¸ñÀûÁö¿¡ ¾ÆÀÌÅÛÀÌ ¾ø´Ù. g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_dstPos); g_ClientMain.m_csStatus.AddInventoryItem(g_ClientMain.m_lpPickItem); g_ClientMain.SetPickItem(NULL); } } break; case TakeType::TS_EQUIP: { CItemInstance *lpInstance = g_ClientMain.m_csStatus.m_lstEquipment[pTakeType.m_dstPos.m_cIndex]; if(lpInstance) { // ¸ñÀûÁö¿¡ ¾ÆÀÌÅÛÀÌ ÀÖ´Ù. unsigned long dwNum = lpInstance->GetNowDurability() + pTakeType.m_cNum; lpInstance->SetNowDurability(dwNum); g_ClientMain.m_csStatus.SetQuickSlot(lpInstance); if(g_ClientMain.m_lpPickItem->GetNowDurability() == pTakeType.m_cNum) { delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } else { dwNum = g_ClientMain.m_lpPickItem->GetNowDurability() - pTakeType.m_cNum; g_ClientMain.m_lpPickItem->SetNowDurability(dwNum); } } else { // ¸ñÀûÁö¿¡ ¾ÆÀÌÅÛÀÌ ¾ø´Ù. g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_dstPos); g_ClientMain.m_csStatus.m_lstEquipment[pTakeType.m_dstPos.m_cIndex] = g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } } break; case TakeType::TS_UPGRADE: if(g_ClientMain.m_csStatus.m_lpUpgrade[pTakeType.m_dstPos.m_cIndex]) { // ¸ñÀûÁö¿¡ ¾ÆÀÌÅÛÀÌ ÀÖ´Ù. unsigned long dwNum = g_ClientMain.m_csStatus.m_lpUpgrade[pTakeType.m_dstPos.m_cIndex]->GetNowDurability() + pTakeType.m_cNum; g_ClientMain.m_csStatus.m_lpUpgrade[pTakeType.m_dstPos.m_cIndex]->SetNowDurability(dwNum); if(g_ClientMain.m_lpPickItem->GetNowDurability() == pTakeType.m_cNum) { delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } else { dwNum = g_ClientMain.m_lpPickItem->GetNowDurability() - pTakeType.m_cNum; g_ClientMain.m_lpPickItem->SetNowDurability(dwNum); } } else { // ¸ñÀûÁö¿¡ ¾ÆÀÌÅÛÀÌ ¾ø´Ù. g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_dstPos); g_ClientMain.m_csStatus.m_lpUpgrade[pTakeType.m_dstPos.m_cIndex] = g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } break; case TakeType::TS_EXCHANGE: { CItemInstance *lpInstance = g_ClientMain.m_csStatus.GetExchangeItem(pTakeType.m_dstPos.m_cIndex); if(lpInstance) { // ¸ñÀûÁö¿¡ ¾ÆÀÌÅÛÀÌ ÀÖ´Ù. unsigned long dwNum = lpInstance->GetNowDurability() + pTakeType.m_cNum; lpInstance->SetNowDurability(dwNum); g_ClientMain.m_csStatus.SetQuickSlot(lpInstance); if(g_ClientMain.m_lpPickItem->GetNowDurability() == pTakeType.m_cNum) { delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } else { dwNum = g_ClientMain.m_lpPickItem->GetNowDurability() - pTakeType.m_cNum; g_ClientMain.m_lpPickItem->SetNowDurability(dwNum); } } else { // ¸ñÀûÁö¿¡ ¾ÆÀÌÅÛÀÌ ¾ø´Ù. g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_dstPos); g_ClientMain.m_csStatus.AddExchangeItem(g_ClientMain.m_lpPickItem); g_ClientMain.SetPickItem(NULL); } } break; case ClientSocket::ItemPos_Deposit: { CItemInstance *lpInstance = g_ClientMain.m_csStatus.GetDepositItem(pTakeType.m_dstPos.m_cIndex); g_ClientMain.m_csStatus.PayDepositPrice(g_ClientMain.m_lpPickItem->m_ipPreIndex.m_cPos, pTakeType.m_dstPos.m_cPos); if(lpInstance) { // ¸ñÀûÁö¿¡ ¾ÆÀÌÅÛÀÌ ÀÖ´Ù. unsigned long dwNum = lpInstance->GetNowDurability() + pTakeType.m_cNum; lpInstance->SetNowDurability(dwNum); g_ClientMain.m_csStatus.SetQuickSlot(lpInstance); if(g_ClientMain.m_lpPickItem->GetNowDurability() == pTakeType.m_cNum) { delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } else { dwNum = g_ClientMain.m_lpPickItem->GetNowDurability() - pTakeType.m_cNum; g_ClientMain.m_lpPickItem->SetNowDurability(dwNum); } } else { // ¸ñÀûÁö¿¡ ¾ÆÀÌÅÛÀÌ ¾ø´Ù. g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_dstPos); g_ClientMain.m_csStatus.AddDepositItem(g_ClientMain.m_lpPickItem); g_ClientMain.SetPickItem(NULL); } } break; } } else { // ±×³É Æò¹üÇÑ Àåºñ switch(pTakeType.m_dstPos.m_cPos) { case TakeType::TS_EQUIP: g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_dstPos); g_ClientMain.m_csStatus.AddEquipItem(pTakeType.m_dstPos.m_cIndex, g_ClientMain.m_lpPickItem); g_ClientMain.m_Network.SendCharShape(); g_ClientMain.m_csStatus.StatusUpdate(); g_ClientMain.SetPickItem(NULL); break; case TakeType::TS_INVEN: g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_dstPos); g_ClientMain.m_csStatus.AddInventoryItem(g_ClientMain.m_lpPickItem); g_ClientMain.SetPickItem(NULL); break; case TakeType::TS_UPGRADE: g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_dstPos); g_ClientMain.m_csStatus.m_lpUpgrade[pTakeType.m_dstPos.m_cIndex] = g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); break; case TakeType::TS_EXCHANGE: g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_dstPos); g_ClientMain.m_csStatus.AddExchangeItem(g_ClientMain.m_lpPickItem); g_ClientMain.SetPickItem(NULL); break; case ClientSocket::ItemPos_Deposit: g_ClientMain.m_csStatus.PayDepositPrice(g_ClientMain.m_lpPickItem->m_ipPreIndex.m_cPos, pTakeType.m_dstPos.m_cPos); g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_dstPos); g_ClientMain.m_csStatus.AddDepositItem(g_ClientMain.m_lpPickItem); g_ClientMain.SetPickItem(NULL); break; } } if(g_ClientMain.m_csStatus.m_lstExchange.empty() || !g_ClientMain.m_csStatus.m_dwExchangeGold) { g_ClientMain.m_lpInterface->ProcessExchangeCmd(g_ClientMain.m_dwMyChrID, 100); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharSplitItem(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID; TakeType pTakeType; unsigned char cSize; size_t dwSize; char *lpItemBuffer; m_dwNetworkError = m_pSocket->HandleCharSplitItem(aryBuffer, &dwChrID, &pTakeType, &cSize, &lpItemBuffer); if(0 == m_dwNetworkError) { if(dwChrID != g_ClientMain.m_dwMyChrID) return FALSE; dwSize = cSize; CItemInstance *lpExistItem = NULL; switch(pTakeType.m_srcPos.m_cPos) { case ClientSocket::ItemPos_Inven: lpExistItem = g_ClientMain.m_csStatus.GetInventoryItem(pTakeType.m_srcPos.m_cIndex); break; case ClientSocket::ItemPos_Upgrade: lpExistItem = g_ClientMain.m_csStatus.m_lpUpgrade[1]; break; case ClientSocket::ItemPos_Exchange: lpExistItem = g_ClientMain.m_csStatus.GetExchangeItem(pTakeType.m_srcPos.m_cIndex); break; case ClientSocket::ItemPos_Equip: lpExistItem = g_ClientMain.m_csStatus.m_lstEquipment[pTakeType.m_srcPos.m_cIndex]; break; case ClientSocket::ItemPos_Deposit: lpExistItem = g_ClientMain.m_csStatus.GetDepositItem(pTakeType.m_srcPos.m_cIndex); break; } if(!lpExistItem) return FALSE; CItemInstance *lpItem; lpItem = new CItemInstance; lpItem->SetItemInfo(lpItemBuffer, dwSize); lpItem->SetPos(pTakeType.m_dstPos); switch(pTakeType.m_dstPos.m_cPos) { case ClientSocket::ItemPos_Inven: g_ClientMain.m_csStatus.AddInventoryItem(lpItem); break; case ClientSocket::ItemPos_Exchange: g_ClientMain.m_csStatus.AddExchangeItem(lpItem); break; case ClientSocket::ItemPos_Upgrade: g_ClientMain.m_csStatus.m_lpUpgrade[pTakeType.m_dstPos.m_cIndex] = lpItem; break; case ClientSocket::ItemPos_Equip: g_ClientMain.m_csStatus.m_lstEquipment[pTakeType.m_dstPos.m_cIndex] = lpItem; break; case ClientSocket::ItemPos_Deposit: g_ClientMain.m_csStatus.PayDepositPrice(pTakeType.m_srcPos.m_cPos, pTakeType.m_dstPos.m_cPos); g_ClientMain.m_csStatus.AddDepositItem(lpItem); break; } delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); if(g_ClientMain.m_csStatus.m_lstExchange.empty() || !g_ClientMain.m_csStatus.m_dwExchangeGold) { g_ClientMain.m_lpInterface->ProcessExchangeCmd(g_ClientMain.m_dwMyChrID, 100); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharPullDown(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID; Item::ItemPos pItemIndex; FieldObject FieldObject; m_dwNetworkError = m_pSocket->HandleCharPullDown(aryBuffer, &dwChrID, &pItemIndex, &FieldObject); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); if(g_ClientMain.m_csStatus.m_lstExchange.empty() || !g_ClientMain.m_csStatus.m_dwExchangeGold) { g_ClientMain.m_lpInterface->ProcessExchangeCmd(g_ClientMain.m_dwMyChrID, 100); } return TRUE; } } else { if(m_dwNetworkError == 5) { delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); if(g_ClientMain.m_csStatus.m_lstExchange.empty() || !g_ClientMain.m_csStatus.m_dwExchangeGold) { g_ClientMain.m_lpInterface->ProcessExchangeCmd(g_ClientMain.m_dwMyChrID, 100); } } } return FALSE; } BOOL CNetwork::ParseCharSwapItem(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID; TakeType pSrcType, pDstType; m_dwNetworkError = m_pSocket->HandleCharSwapItem(aryBuffer, &dwChrID, &pSrcType, &pDstType); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { CItemInstance *lpTemp; switch(pDstType.m_srcPos.m_cPos) { case ClientSocket::ItemPos_Equip: lpTemp = g_ClientMain.m_csStatus.m_lstEquipment[pDstType.m_srcPos.m_cIndex]; break; case ClientSocket::ItemPos_Inven: lpTemp = g_ClientMain.m_csStatus.GetInventoryItem(pDstType.m_srcPos.m_cIndex); { CItemInstance *lpStallItem = g_ClientMain.m_csStatus.GetStreetTradeItem(lpTemp->m_dwItemUID); if(lpStallItem) { TakeType pTakeType; pTakeType.m_srcPos.m_cPos = ClientSocket::ItemPos_Stall; pTakeType.m_srcPos.m_cIndex = 0; pTakeType.m_dstPos = lpStallItem->m_lpItemBase->GetPos(); if(lpStallItem->GetIsEnableStack()) { pTakeType.m_cNum = lpStallItem->GetNowDurability(); } else { pTakeType.m_cNum = 1; } g_ClientMain.m_Network.m_nsNetworkState = NS_STALLREGISTERITEM; g_ClientMain.m_Network.m_pSocket->CharStallRegisterItem(g_ClientMain.m_dwMyChrID, pTakeType, 0, ClientSocket::StallCmd_Cancel); } } g_ClientMain.m_csStatus.DeleteInventoryItem(lpTemp); break; case ClientSocket::ItemPos_Exchange: lpTemp = g_ClientMain.m_csStatus.GetExchangeItem(pDstType.m_srcPos.m_cIndex); g_ClientMain.m_csStatus.DeleteExchangeItem(lpTemp); break; case ClientSocket::ItemPos_Upgrade: lpTemp = g_ClientMain.m_csStatus.m_lpUpgrade[pDstType.m_srcPos.m_cIndex]; break; case ClientSocket::ItemPos_Deposit: lpTemp = g_ClientMain.m_csStatus.GetDepositItem(pDstType.m_srcPos.m_cIndex); g_ClientMain.m_csStatus.DeleteDepositItem(lpTemp); break; } lpTemp->SetPos(pDstType.m_dstPos); if(!g_ClientMain.m_lpPickItem) { CItemInstance *lpTemp; switch(pSrcType.m_srcPos.m_cPos) { case ClientSocket::ItemPos_Equip: lpTemp = g_ClientMain.m_csStatus.m_lstEquipment[pSrcType.m_srcPos.m_cIndex]; g_ClientMain.m_csStatus.m_lstEquipment[pSrcType.m_srcPos.m_cIndex] = NULL; break; case ClientSocket::ItemPos_Inven: lpTemp = g_ClientMain.m_csStatus.GetInventoryItem(pSrcType.m_srcPos.m_cIndex); { CItemInstance *lpStallItem = g_ClientMain.m_csStatus.GetStreetTradeItem(lpTemp->m_dwItemUID); if(lpStallItem) { TakeType pTakeType; pTakeType.m_srcPos.m_cPos = ClientSocket::ItemPos_Stall; pTakeType.m_srcPos.m_cIndex = 0; pTakeType.m_dstPos = lpStallItem->m_lpItemBase->GetPos(); if(lpStallItem->GetIsEnableStack()) { pTakeType.m_cNum = lpStallItem->GetNowDurability(); } else { pTakeType.m_cNum = 1; } g_ClientMain.m_Network.m_nsNetworkState = NS_STALLREGISTERITEM; g_ClientMain.m_Network.m_pSocket->CharStallRegisterItem(g_ClientMain.m_dwMyChrID, pTakeType, 0, ClientSocket::StallCmd_Cancel); } } g_ClientMain.m_csStatus.DeleteInventoryItem(lpTemp); break; case ClientSocket::ItemPos_Exchange: lpTemp = g_ClientMain.m_csStatus.GetExchangeItem(pSrcType.m_srcPos.m_cIndex); g_ClientMain.m_csStatus.DeleteExchangeItem(lpTemp); break; case ClientSocket::ItemPos_Upgrade: lpTemp = g_ClientMain.m_csStatus.m_lpUpgrade[pSrcType.m_srcPos.m_cIndex]; g_ClientMain.m_csStatus.m_lpUpgrade[pSrcType.m_srcPos.m_cIndex] = NULL; break; case ClientSocket::ItemPos_Deposit: lpTemp = g_ClientMain.m_csStatus.GetDepositItem(pSrcType.m_srcPos.m_cIndex); g_ClientMain.m_csStatus.DeleteDepositItem(lpTemp); break; } if(lpTemp) { g_ClientMain.SetPickItem(lpTemp); } else { return FALSE; } } g_ClientMain.m_csStatus.PayDepositPrice(g_ClientMain.m_lpPickItem->m_ipPreIndex.m_cPos, pSrcType.m_dstPos.m_cPos); g_ClientMain.m_lpPickItem->SetPos(pSrcType.m_dstPos); switch(pSrcType.m_dstPos.m_cPos) { case ClientSocket::ItemPos_Equip: g_ClientMain.m_csStatus.AddEquipItem(pSrcType.m_dstPos.m_cIndex, g_ClientMain.m_lpPickItem); g_ClientMain.m_Network.SendCharShape(); g_ClientMain.m_csStatus.StatusUpdate(); break; case ClientSocket::ItemPos_Exchange: g_ClientMain.m_csStatus.AddExchangeItem(g_ClientMain.m_lpPickItem); break; case ClientSocket::ItemPos_Inven: g_ClientMain.m_csStatus.AddInventoryItem(g_ClientMain.m_lpPickItem); break; case ClientSocket::ItemPos_Deposit: g_ClientMain.m_csStatus.AddDepositItem(g_ClientMain.m_lpPickItem); break; case ClientSocket::ItemPos_Upgrade: g_ClientMain.m_csStatus.m_lpUpgrade[pSrcType.m_dstPos.m_cIndex] = g_ClientMain.m_lpPickItem; break; } g_ClientMain.SetPickItem(lpTemp); if(g_ClientMain.m_csStatus.m_lstExchange.empty() || !g_ClientMain.m_csStatus.m_dwExchangeGold) { g_ClientMain.m_lpInterface->ProcessExchangeCmd(g_ClientMain.m_dwMyChrID, 100); } return TRUE; } } return FALSE; } BOOL CNetwork::ParseCharTradeItem(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID, dwNPCID, dwGold = 0; size_t dwSize; unsigned short wSize; unsigned char cPos, cNum; Item::ItemPos pItemIndex; char *lpItemBuffer; m_dwNetworkError = m_pSocket->HandleCharTradeItem(aryBuffer, &dwChrID, &dwNPCID, &cPos, &pItemIndex, &cNum, &dwGold, &wSize, &lpItemBuffer); if(0 == m_dwNetworkError) { dwSize = wSize; if(dwChrID == g_ClientMain.m_dwMyChrID) { switch(wSize) { case 0: // ÆÈ¶§ // if(dwGold) // { g_ClientMain.m_csStatus.m_Info.Gold = g_ClientMain.m_csStatus.m_Info.Gold + dwGold; /* } else { if(g_ClientMain.m_lpPickItem->GetIsEnableStack()) { g_ClientMain.m_csStatus.m_Info.Gold = g_ClientMain.m_csStatus.m_Info.Gold + (g_ClientMain.m_lpPickItem->m_lpItemBase->GetSellPrice() * g_ClientMain.m_lpPickItem->GetNowDurability()); } else { g_ClientMain.m_csStatus.m_Info.Gold = g_ClientMain.m_csStatus.m_Info.Gold + g_ClientMain.m_lpPickItem->m_lpItemBase->GetSellPrice(); } }*/ if(g_ClientMain.m_lpPickItem && g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos() == pItemIndex) { g_ClientMain.m_csStatus.SetQuickSlot(g_ClientMain.m_lpPickItem); delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } else { CItemInstance *lpItem = g_ClientMain.m_csStatus.GetInventoryItem(pItemIndex); if(lpItem) { if(lpItem->GetIsEnableStack()) { unsigned long dwNum = lpItem->GetNowDurability() - cNum; lpItem->SetNowDurability(dwNum); } else { lpItem->SetNowDurability(0); } g_ClientMain.m_csStatus.SetQuickSlot(lpItem); if(lpItem->GetNowDurability() == 0) { g_ClientMain.m_csStatus.DeleteInventoryItem(lpItem); } } } break; default: // »ì¶§ { g_ClientMain.m_csStatus.m_Info.Gold = g_ClientMain.m_csStatus.m_Info.Gold - dwGold; CItemInstance *lpItem; lpItem = new CItemInstance; lpItem->SetItemInfo(lpItemBuffer, dwSize); g_ClientMain.m_csStatus.AddInventoryItem(lpItem); // if(0 != dwGold) // { // } // else // { /* char strText[MAX_PATH]; sprintf(strText, "%d", dwGold); MessageBox(NULL, strText, g_StringTable.m_strString[21], MB_OK);*/ /* if(g_ClientMain.m_lpInterface->GetIsBlackMarket()) { if(lpItem->GetIsEnableStack()) { g_ClientMain.m_csStatus.m_Info.Gold = g_ClientMain.m_csStatus.m_Info.Gold - (lpItem->m_lpItemBase->GetBuyBlackPrice() * lpItem->GetNowDurability()); } else { g_ClientMain.m_csStatus.m_Info.Gold = g_ClientMain.m_csStatus.m_Info.Gold - lpItem->m_lpItemBase->GetBuyBlackPrice(); } } else { if(lpItem->GetIsEnableStack()) { g_ClientMain.m_csStatus.m_Info.Gold = g_ClientMain.m_csStatus.m_Info.Gold - (lpItem->m_lpItemBase->GetBuyPrice() * lpItem->GetNowDurability()); } else { g_ClientMain.m_csStatus.m_Info.Gold = g_ClientMain.m_csStatus.m_Info.Gold - lpItem->m_lpItemBase->GetBuyPrice(); } } }*/ } break; } return TRUE; } } return FALSE; } BOOL CNetwork::ParseCharShapeInfo(char *aryBuffer) { CHAR_VIEW pCharView; unsigned char cSelectedHand; unsigned long dwStatusFlag; char strStallName[32]; bool bPeace; m_dwNetworkError = m_pSocket->HandleCharShapeInfo(aryBuffer, &pCharView, &cSelectedHand, &dwStatusFlag, &bPeace, (char *)strStallName); if(0 == m_dwNetworkError) { CCreature *lpCreature = g_CharacterData.GetCreature(pCharView.UID); if(lpCreature) { lpCreature->m_dwSpendTime[1] = lpCreature->m_dwSpendTime[2] = lpCreature->m_dwSpendTime[3] = lpCreature->m_dwSpendTime[4] = lpCreature->m_dwSpendTime[5] = GetTickCount(); // ij¸¯ÅÍ º¹Àå char *strTemp; for(int i = 0; i < 15; i++) { strTemp = (char *)g_ItemMgr.GetEquipName(pCharView.Equip[i]); if(strTemp) strcpy(lpCreature->m_strShape[i], strTemp); else strcpy(lpCreature->m_strShape[i], ""); // strcpy(lpCreature->m_strShape[i], g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strShape[i]); } lpCreature->m_dwPartyID = pCharView.Party; lpCreature->m_wClass = pCharView.Class; lpCreature->m_dwWeaponPos = cSelectedHand; lpCreature->m_cLevel = pCharView.Level; lpCreature->m_cNation = pCharView.Nationality; lpCreature->m_cSex = pCharView.Sex; lpCreature->m_bPeaceMode = bPeace; strcpy(lpCreature->m_strStreetStallName, strStallName); if(lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) lpCreature->SetChantEffect(dwStatusFlag, TRUE); else lpCreature->SetChantEffect(dwStatusFlag, FALSE); if(!lpCreature->m_bUsed) { lpCreature->m_bUsed = TRUE; strcpy(lpCreature->m_strName, pCharView.Name); switch(pCharView.Nationality) { case NATION_HUMAN: if(pCharView.Sex == 1) strcpy(lpCreature->m_strGCMDSName, "PC_MAN.GCMDS"); else strcpy(lpCreature->m_strGCMDSName, "PC_WOMAN.GCMDS"); break; case NATION_AKHAN: if(pCharView.Sex == 1) strcpy(lpCreature->m_strGCMDSName, "PC_Akhan_A.GCMDS"); else strcpy(lpCreature->m_strGCMDSName, "PC_Akhan_B.GCMDS"); break; } sprintf(lpCreature->m_strFaceType, "FACE%02d", pCharView.Face); sprintf(lpCreature->m_strHairStyle, "HAIR%02d", pCharView.Hair); // strcpy(lpCreature->m_strGCMDSName, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strGCMDSName); // strcpy(lpCreature->m_strFaceType, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strFaceType); // strcpy(lpCreature->m_strHairStyle, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strHairStyle); lpCreature->m_lpChrModel = g_CharacterData.AllocCharacter(lpCreature->m_strGCMDSName, lpCreature->m_strFaceType, lpCreature->m_strHairStyle, lpCreature->m_ChrNodeID, lpCreature->m_strShape); lpCreature->m_lpChrModel->SetPosition(lpCreature->m_vecPos); lpCreature->m_lpChrModel->SetDirection(lpCreature->m_fDirection); lpCreature->m_bFirstPositionSend = FALSE; if(lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) lpCreature->SetChantEffect(lpCreature->m_dwChant, TRUE); else lpCreature->SetChantEffect(lpCreature->m_dwChant, FALSE); m_lstRecvShape.push_back(pCharView.UID); list::iterator it; for(it = m_lstSendShape.begin(); it != m_lstSendShape.end(); it++) { if((*it) == pCharView.UID) { m_lstSendShape.erase(it); break; } } } else { lpCreature->SetShape(lpCreature->m_strShape); } lpCreature->m_dwSpendTime[4] = GetTickCount(); } else { g_CharacterData.AddCharacter(pCharView.UID, vector3(0.0f, 0.0f, 0.0f)); CCreature *lpCreature = g_CharacterData.GetCreature(pCharView.UID); if(lpCreature) { lpCreature->m_dwSpendTime[1] = lpCreature->m_dwSpendTime[2] = lpCreature->m_dwSpendTime[3] = lpCreature->m_dwSpendTime[4] = lpCreature->m_dwSpendTime[5] = GetTickCount(); char *strTemp; for(int i = 0; i < 15; i++) { strTemp = (char *)g_ItemMgr.GetEquipName(pCharView.Equip[i]); if(strTemp) strcpy(lpCreature->m_strShape[i], strTemp); else strcpy(lpCreature->m_strShape[i], ""); // strcpy(lpCreature->m_strShape[i], g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strShape[i]); } lpCreature->m_dwPartyID = pCharView.Party; lpCreature->m_bUsed = TRUE; lpCreature->m_wClass = pCharView.Class; lpCreature->m_dwWeaponPos = cSelectedHand; lpCreature->m_cLevel = pCharView.Level; lpCreature->m_cNation = pCharView.Nationality; lpCreature->m_cSex = pCharView.Sex; lpCreature->m_bPeaceMode = bPeace; strcpy(lpCreature->m_strStreetStallName, strStallName); if(lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) lpCreature->SetChantEffect(dwStatusFlag, TRUE); else lpCreature->SetChantEffect(dwStatusFlag, FALSE); strcpy(lpCreature->m_strName, pCharView.Name); switch(pCharView.Nationality) { case NATION_HUMAN: if(pCharView.Sex == 1) strcpy(lpCreature->m_strGCMDSName, "PC_MAN.GCMDS"); else strcpy(lpCreature->m_strGCMDSName, "PC_WOMAN.GCMDS"); break; case NATION_AKHAN: if(pCharView.Sex == 1) strcpy(lpCreature->m_strGCMDSName, "PC_Akhan_A.GCMDS"); else strcpy(lpCreature->m_strGCMDSName, "PC_Akhan_B.GCMDS"); break; } sprintf(lpCreature->m_strFaceType, "FACE%02d", pCharView.Face); sprintf(lpCreature->m_strHairStyle, "HAIR%02d", pCharView.Hair); // strcpy(lpCreature->m_strGCMDSName, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strGCMDSName); // strcpy(lpCreature->m_strFaceType, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strFaceType); // strcpy(lpCreature->m_strHairStyle, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strHairStyle); lpCreature->m_lpChrModel = g_CharacterData.AllocCharacter(lpCreature->m_strGCMDSName, lpCreature->m_strFaceType, lpCreature->m_strHairStyle, lpCreature->m_ChrNodeID, lpCreature->m_strShape); lpCreature->m_lpChrModel->SetPosition(lpCreature->m_vecPos); lpCreature->m_lpChrModel->SetDirection(lpCreature->m_fDirection); lpCreature->m_bFirstPositionSend = FALSE; if(lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) lpCreature->SetChantEffect(lpCreature->m_dwChant, TRUE); else lpCreature->SetChantEffect(lpCreature->m_dwChant, FALSE); m_lstRecvShape.push_back(pCharView.UID); lpCreature->m_dwSpendTime[4] = GetTickCount(); } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharPartyCmd(char *aryBuffer) { unsigned long dwSenderID, dwRecvID, dwPartyID; unsigned short wCmd; char strName[32]; AddressInfo pAddressInfo; m_dwNetworkError = m_pSocket->HandleCharPartyCmd(aryBuffer, &pAddressInfo, strName, &dwSenderID, &dwRecvID, &dwPartyID, &wCmd); if(0 == m_dwNetworkError) { switch(wCmd) { case ClientSocket::PartyCmd_Invite: if(g_ClientMain.m_lpInterface) { if(g_ClientMain.m_lpInterface->GetBusy()) { SendPartyCmd(dwSenderID, ClientSocket::PartyCmd_Refuse); } else { g_ClientMain.m_lpInterface->m_dwPartyCmdResult = 0; g_ClientMain.m_lpInterface->m_dwPartyCmdType = ClientSocket::PartyCmd_Invite; g_ClientMain.m_lpInterface->m_dwPartyCmdSenderID = dwSenderID; char strText[200]; sprintf(strText, g_StringTable.m_strString[276], strName); CGUIMessageBox *lpMessageBox; lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(strText, MB_EXIT | MB_YES | MB_NO); lpMessageBox->SetResult(&g_ClientMain.m_lpInterface->m_dwPartyCmdResult); lpMessageBox->SetEnableEnter(FALSE); } } break; case ClientSocket::PartyCmd_Accept: { char strText[200]; sprintf(strText, g_StringTable.m_strString[277], strName); g_ClientMain.m_csStatus.AddPartyPlayer(dwSenderID, dwRecvID, strName); g_ClientMain.m_bPartyFind = FALSE; g_ClientMain.m_bPartyPlayerFind = FALSE; if(dwSenderID != g_ClientMain.m_dwMyChrID) { unsigned long dwResult = m_pSocket->InsertIntoAddressList(ClientSocket::ListType_Party, pAddressInfo.m_dwCharID, pAddressInfo.m_PublicAddress, pAddressInfo.m_PrivateAddress); #ifdef _DEBUG char a[200]; sprintf(a, "4. 0x%08x = Pub : %d.%d.%d.%d:%d, Pri : %d.%d.%d.%d:%d %d", pAddressInfo.m_dwCharID, pAddressInfo.m_PublicAddress.sin_addr.s_net, pAddressInfo.m_PublicAddress.sin_addr.s_host, pAddressInfo.m_PublicAddress.sin_addr.s_lh, pAddressInfo.m_PublicAddress.sin_addr.s_impno, pAddressInfo.m_PublicAddress.sin_port, pAddressInfo.m_PrivateAddress.sin_addr.s_net, pAddressInfo.m_PrivateAddress.sin_addr.s_host, pAddressInfo.m_PrivateAddress.sin_addr.s_lh, pAddressInfo.m_PrivateAddress.sin_addr.s_impno, pAddressInfo.m_PrivateAddress.sin_port, m_pSocket->GetPeerType(pAddressInfo.m_PublicAddress, pAddressInfo.m_PrivateAddress)); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); #endif if(dwResult == ClientSocket::ListOper_Insert) { if(!g_CharacterData.GetCreature(pAddressInfo.m_dwCharID)) { // m_pSocket->CharRequireInfo(g_ClientMain.m_dwMyChrID, pAddressInfo.m_dwCharID, ClientSocket::Require_Shape); // m_lstSendShape.push_back(pAddressInfo.m_dwCharID); g_CharacterData.AddCharacter(pAddressInfo.m_dwCharID, vector3(0.0f, 0.0f, 0.0f)); // °ø°£¸¸ ¸¸µë } } // CharAddressRequireInfo(g_ClientMain.m_dwMyChrID, dwSenderID); } g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); } break; case ClientSocket::PartyCmd_Refuse: { char strText[200]; sprintf(strText, g_StringTable.m_strString[278], strName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 129); } break; case ClientSocket::PartyCmd_Login: { g_ClientMain.m_bPartyFind = FALSE; g_ClientMain.m_bPartyPlayerFind = FALSE; char *strName = g_ClientMain.m_csStatus.LoginPartyPlayer(dwSenderID, dwRecvID); if(strName) { if(dwSenderID != g_ClientMain.m_dwMyChrID) { unsigned long dwResult = m_pSocket->InsertIntoAddressList(ClientSocket::ListType_Party, pAddressInfo.m_dwCharID, pAddressInfo.m_PublicAddress, pAddressInfo.m_PrivateAddress); #ifdef _DEBUG char a[200]; sprintf(a, "5. 0x%08x = Pub : %d.%d.%d.%d:%d, Pri : %d.%d.%d.%d:%d %d", pAddressInfo.m_dwCharID, pAddressInfo.m_PublicAddress.sin_addr.s_net, pAddressInfo.m_PublicAddress.sin_addr.s_host, pAddressInfo.m_PublicAddress.sin_addr.s_lh, pAddressInfo.m_PublicAddress.sin_addr.s_impno, pAddressInfo.m_PublicAddress.sin_port, pAddressInfo.m_PrivateAddress.sin_addr.s_net, pAddressInfo.m_PrivateAddress.sin_addr.s_host, pAddressInfo.m_PrivateAddress.sin_addr.s_lh, pAddressInfo.m_PrivateAddress.sin_addr.s_impno, pAddressInfo.m_PrivateAddress.sin_port, m_pSocket->GetPeerType(pAddressInfo.m_PublicAddress, pAddressInfo.m_PrivateAddress)); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); #endif if(dwResult == ClientSocket::ListOper_Insert) { if(!g_CharacterData.GetCreature(pAddressInfo.m_dwCharID)) { // m_pSocket->CharRequireInfo(g_ClientMain.m_dwMyChrID, pAddressInfo.m_dwCharID, ClientSocket::Require_Shape); // m_lstSendShape.push_back(pAddressInfo.m_dwCharID); g_CharacterData.AddCharacter(pAddressInfo.m_dwCharID, vector3(0.0f, 0.0f, 0.0f)); // °ø°£¸¸ ¸¸µë } } // CharAddressRequireInfo(g_ClientMain.m_dwMyChrID, dwSenderID); } char strText[200]; sprintf(strText, g_StringTable.m_strString[279], strName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); } } break; case ClientSocket::PartyCmd_Logout: { g_ClientMain.m_bPartyFind = FALSE; g_ClientMain.m_bPartyPlayerFind = FALSE; char *strName = g_ClientMain.m_csStatus.LogoutPartyPlayer(dwSenderID); if(strName) { if(dwSenderID != g_ClientMain.m_dwMyChrID) { m_pSocket->DeleteFromAddressList(ClientSocket::ListType_Party, dwSenderID); } g_CharacterData.UnLoadChr(dwSenderID); char strText[200]; sprintf(strText, g_StringTable.m_strString[280], strName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); } } break; case ClientSocket::PartyCmd_Banish: g_ClientMain.m_bPartyFind = FALSE; g_ClientMain.m_bPartyPlayerFind = FALSE; if(dwSenderID == g_ClientMain.m_dwMyChrID) { for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i]) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i] != g_ClientMain.m_dwMyChrID) { m_pSocket->DeleteFromAddressList(ClientSocket::ListType_Party, g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i]); } } } g_ClientMain.m_csStatus.DestroyParty(); g_TextEdit.AddMessage(g_StringTable.m_strString[281], g_ClientMain.m_dwMyChrID, 129); SendCharShape(); } else { for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i] == dwSenderID) { char strText[200]; sprintf(strText, g_StringTable.m_strString[282], g_ClientMain.m_csStatus.m_PartyInfo.Name[i]); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); break; } } m_pSocket->DeleteFromAddressList(ClientSocket::ListType_Party, dwSenderID); g_ClientMain.m_csStatus.DeletePartyPlayer(dwSenderID); } break; case ClientSocket::PartyCmd_Secession: g_ClientMain.m_bPartyFind = FALSE; g_ClientMain.m_bPartyPlayerFind = FALSE; if(dwSenderID == g_ClientMain.m_dwMyChrID) { for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i]) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i] != g_ClientMain.m_dwMyChrID) { m_pSocket->DeleteFromAddressList(ClientSocket::ListType_Party, g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i]); } } } g_ClientMain.m_csStatus.DestroyParty(); g_TextEdit.AddMessage(g_StringTable.m_strString[283], g_ClientMain.m_dwMyChrID, 128); SendCharShape(); } else { for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i] == dwSenderID) { m_pSocket->DeleteFromAddressList(ClientSocket::ListType_Party, dwSenderID); char strText[200]; sprintf(strText, g_StringTable.m_strString[284], g_ClientMain.m_csStatus.m_PartyInfo.Name[i]); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); break; } } g_ClientMain.m_csStatus.DeletePartyPlayer(dwSenderID); } break; case ClientSocket::PartyCmd_Transfer: { g_ClientMain.m_bPartyFind = FALSE; g_ClientMain.m_bPartyPlayerFind = FALSE; for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i] == dwSenderID) { char strText[200]; sprintf(strText, g_StringTable.m_strString[285], g_ClientMain.m_csStatus.m_PartyInfo.Name[i]); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); break; } } g_ClientMain.m_csStatus.m_PartyInfo.m_dwLeaderID = dwSenderID; } break; case ClientSocket::PartyCmd_Destroy: { g_ClientMain.m_bPartyFind = FALSE; g_ClientMain.m_bPartyPlayerFind = FALSE; for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i]) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i] != g_ClientMain.m_dwMyChrID) { m_pSocket->DeleteFromAddressList(ClientSocket::ListType_Party, g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i]); } } } g_ClientMain.m_csStatus.DestroyParty(); // SendCharShape(); g_TextEdit.AddMessage(g_StringTable.m_strString[286], g_ClientMain.m_dwMyChrID, 129); } break; case ClientSocket::PartyCmd_FindParty: g_ClientMain.m_bPartyFind = dwRecvID; break; case ClientSocket::PartyCmd_FindMember: g_ClientMain.m_bPartyPlayerFind = dwRecvID; break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharPartyInfo(char *aryBuffer) { m_dwNetworkError = m_pSocket->HandleCharPartyInfo(aryBuffer, &g_ClientMain.m_csStatus.m_PartyInfo); if(0 == m_dwNetworkError) { /* for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i]) { if(g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i] != g_ClientMain.m_dwMyChrID) { CharAddressRequireInfo(g_ClientMain.m_dwMyChrID, g_ClientMain.m_csStatus.m_PartyInfo.MemberCID[i]); } } }*/ return TRUE; } else { g_ClientMain.m_csStatus.m_PartyInfo.m_cMemberNum = 0; } return FALSE; } BOOL CNetwork::ParseCharUseItem(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwSenderID, dwRecverID; Item::ItemPos pItemIndex; m_dwNetworkError = m_pSocket->HandleCharUseItem(aryBuffer, &dwSenderID, &dwRecverID, &pItemIndex); if(0 == m_dwNetworkError) { CItemInstance *lpItem = g_ClientMain.m_csStatus.GetInventoryItem(pItemIndex.m_cIndex); if(lpItem) { switch(lpItem->GetItemType()) { case Item::CItemType::SKILLBOOK: if(dwSenderID == g_ClientMain.m_dwMyChrID && dwSenderID == dwRecverID) { g_ClientMain.m_csStatus.DeleteInventoryItem(lpItem); delete lpItem; } break; case Item::CItemType::POTION: case Item::CItemType::AMMO: { unsigned dwNum = lpItem->GetNowDurability() - 1; lpItem->SetNowDurability(dwNum); if(lpItem->GetNowDurability() <= 0) { g_ClientMain.m_csStatus.DeleteInventoryItem(lpItem); delete lpItem; } else { g_ClientMain.m_csStatus.SetQuickSlot(lpItem); } } break; } } else { } g_ClientMain.m_csStatus.StatusUpdate(); return TRUE; } return FALSE; } BOOL CNetwork::ParseCharSkillLock(char *aryBuffer) { unsigned long dwChrID; unsigned short wSkill; unsigned char cIndex; m_dwNetworkError = m_pSocket->HandleCharSkillLock(aryBuffer, &dwChrID, &wSkill, &cIndex); if(0 == m_dwNetworkError) { if(g_ClientMain.m_dwMyChrID == dwChrID) { if(g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill == wSkill) { g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cLockCount++; g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel = 0; if(g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]) { delete g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]; g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex] = new CItemInstance; g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->SetSkillInfo(g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill, g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cLockCount, g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel, ClientSocket::ItemPos_SSlot, cIndex, 0); char strText[MAX_PATH]; sprintf(strText, g_StringTable.m_strString[287], g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->GetItemInfo().m_SpriteData.m_szName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); g_ClientMain.m_csStatus.StatusUpdate(); } long lCoolTime; for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_lstQuickSlot[i] && g_ClientMain.m_csStatus.m_lstQuickSlot[i]->GetProtoTypeID() == wSkill) { lCoolTime = g_ClientMain.m_csStatus.m_lstQuickSlot[i]->m_lCoolDownTimeCount; BOOL bSelected = FALSE; if(g_ClientMain.m_csStatus.m_lpQuickSelected == g_ClientMain.m_csStatus.m_lstQuickSlot[i]) { bSelected = TRUE; g_ClientMain.m_Network.SetChant(NULL); g_ClientMain.m_csStatus.SetActivateSkill(NULL); } delete g_ClientMain.m_csStatus.m_lstQuickSlot[i]; g_ClientMain.m_csStatus.m_lstQuickSlot[i] = new CItemInstance; g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetSkillInfo(g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill, g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cLockCount, g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel, ClientSocket::ItemPos_QSlot, i, lCoolTime); if(bSelected) { g_ClientMain.m_Network.SetChant(g_ClientMain.m_csStatus.m_lstQuickSlot[i]); g_ClientMain.m_csStatus.SetActivateSkill(g_ClientMain.m_csStatus.m_lstQuickSlot[i]); } } } } g_ClientMain.m_csStatus.StatusUpdate(); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharSkillErase(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID; unsigned short wSkill; unsigned char cIndex; m_dwNetworkError = m_pSocket->HandleCharSkillErase(aryBuffer, &dwChrID, &wSkill, &cIndex); if(0 == m_dwNetworkError) { if(g_ClientMain.m_dwMyChrID == dwChrID) { if(g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill == wSkill) { g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel--; g_ClientMain.m_csStatus.m_Skill.wSkillNum--; if(g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]) { unsigned long dwNum = g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->GetNowDurability() - 1; g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->SetNowDurability(dwNum); } for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_lstQuickSlot[i] && g_ClientMain.m_csStatus.m_lstQuickSlot[i]->GetProtoTypeID() == wSkill) { unsigned long dwNum = g_ClientMain.m_csStatus.m_lstQuickSlot[i]->GetNowDurability() - 1; g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetNowDurability(dwNum); } } if(!g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel && !g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cLockCount) { if(g_ClientMain.m_csStatus.m_lpQuickSelected) { if(g_ClientMain.m_csStatus.m_lpQuickSelected->GetProtoTypeID() == wSkill) { g_ClientMain.m_Network.SetChant(NULL); g_ClientMain.m_csStatus.SetActivateSkill(NULL); } } for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_lstQuickSlot[i]) { if(g_ClientMain.m_csStatus.m_lstQuickSlot[i]->GetProtoTypeID() == wSkill) { g_ClientMain.m_Network.SendQuickSlotMove(g_ClientMain.m_csStatus.m_lstQuickSlot[i], ClientSocket::ItemPos_None, 0); } } } delete g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]; g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex] = NULL; for(int j = cIndex; j < 19; j++) { g_ClientMain.m_csStatus.m_Skill.SSlot[j].dwSkillSlot = g_ClientMain.m_csStatus.m_Skill.SSlot[j + 1].dwSkillSlot; g_ClientMain.m_csStatus.m_lstSkillSlot[j] = g_ClientMain.m_csStatus.m_lstSkillSlot[j + 1]; } g_ClientMain.m_csStatus.m_Skill.SSlot[19].dwSkillSlot = 0; g_ClientMain.m_csStatus.m_Skill.wSlotNum--; g_ClientMain.m_csStatus.m_lstSkillSlot[19] = NULL; } g_ClientMain.m_csStatus.StatusUpdate(); } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharSkillCreate(char *aryBuffer) { unsigned long dwChrID; unsigned short wSkill; unsigned char cIndex; m_dwNetworkError = m_pSocket->HandleCharSkillCreate(aryBuffer, &dwChrID, &wSkill, &cIndex); if(0 == m_dwNetworkError) { if(g_ClientMain.m_dwMyChrID == dwChrID) { /* for(int ccIndex = 0; ccIndex < 20; ccIndex++) { if(g_ClientMain.m_csStatus.m_Skill.SSlot[ccIndex].SKILLINFO.wSkill == wSkill) { break; } } if(ccIndex != 20) { if(ccIndex != cIndex) cIndex = ccIndex; } else { for(ccIndex = 0; ccIndex < 20; ccIndex++) { if(!g_ClientMain.m_csStatus.m_Skill.SSlot[ccIndex].SKILLINFO.wSkill) { break; } } if(ccIndex != cIndex) cIndex = ccIndex; }*/ if(g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill) { if(g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill == wSkill) { g_ClientMain.m_csStatus.m_Skill.wSkillNum++; g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel++; if(g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]) { char strText[MAX_PATH]; sprintf(strText, g_StringTable.m_strString[288], g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->GetItemInfo().m_SpriteData.m_szName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); unsigned long dwNum = g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->GetNowDurability() + 1; g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->SetNowDurability(dwNum); g_ClientMain.m_csStatus.StatusUpdate(); } for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_lstQuickSlot[i] && g_ClientMain.m_csStatus.m_lstQuickSlot[i]->GetProtoTypeID() == wSkill) { unsigned long dwNum = g_ClientMain.m_csStatus.m_lstQuickSlot[i]->GetNowDurability() + 1; g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetNowDurability(dwNum); } } } } else { g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill = wSkill; g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cLockCount = 0; g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel = 1; g_ClientMain.m_csStatus.m_Skill.wSkillNum++; g_ClientMain.m_csStatus.m_Skill.wSlotNum++; g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex] = new CItemInstance; g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->SetSkillInfo(g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill, g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cLockCount, g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel, ClientSocket::ItemPos_SSlot, cIndex, 0); if(g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]) { char strText[MAX_PATH]; sprintf(strText, g_StringTable.m_strString[289], g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->GetItemInfo().m_SpriteData.m_szName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); g_ClientMain.m_csStatus.StatusUpdate(); } } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharRepairItem(char *aryBuffer) { unsigned long dwChrID, dwGold; Item::ItemPos pItemIndex; m_dwNetworkError = m_pSocket->HandleCharRepairItem(aryBuffer, &dwChrID, &pItemIndex, &dwGold); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { switch(pItemIndex.m_cPos) { case ClientSocket::ItemPos_Equip: { if(g_ClientMain.m_csStatus.m_lstEquipment[pItemIndex.m_cIndex]) { g_ClientMain.m_csStatus.m_lstEquipment[pItemIndex.m_cIndex]->SetNowDurability( g_ClientMain.m_csStatus.m_lstEquipment[pItemIndex.m_cIndex]->GetMaxDurability()); } } break; case ClientSocket::ItemPos_Inven: { CItemInstance *lpItem = g_ClientMain.m_csStatus.GetInventoryItem(pItemIndex.m_cIndex); if(lpItem) { lpItem->SetNowDurability(lpItem->GetMaxDurability()); } } break; } if(g_ClientMain.m_csStatus.m_Info.Gold > dwGold) g_ClientMain.m_csStatus.m_Info.Gold -= dwGold; else g_ClientMain.m_csStatus.m_Info.Gold = 0; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharInstallSocket(char *aryBuffer) { unsigned long dwChrID; Item::ItemPos pEquipItemIndex, pSocketItemIndex; char *lpItemBuffer; size_t dwSize; unsigned short wSize; m_dwNetworkError = m_pSocket->HandleCharInstallSocket(aryBuffer, &dwChrID, &pEquipItemIndex, &pSocketItemIndex, &wSize, &lpItemBuffer); if(0 == m_dwNetworkError) { dwSize = wSize; if(g_ClientMain.m_dwMyChrID == dwChrID) { CItemInstance *lpItem; switch(pEquipItemIndex.m_cPos) { case ClientSocket::ItemPos_Equip: delete g_ClientMain.m_csStatus.m_lstEquipment[pEquipItemIndex.m_cIndex]; break; case ClientSocket::ItemPos_Inven: lpItem = g_ClientMain.m_csStatus.GetInventoryItem(pEquipItemIndex.m_cIndex); g_ClientMain.m_csStatus.DeleteInventoryItem(lpItem); delete lpItem; break; } lpItem = new CItemInstance; lpItem->SetItemInfo(lpItemBuffer, dwSize); switch(pEquipItemIndex.m_cPos) { case ClientSocket::ItemPos_Equip: g_ClientMain.m_csStatus.m_lstEquipment[pEquipItemIndex.m_cIndex] = lpItem; break; case ClientSocket::ItemPos_Inven: g_ClientMain.m_csStatus.AddInventoryItem(lpItem); break; } delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); g_ClientMain.m_csStatus.StatusUpdate(); } if(g_ClientMain.m_csStatus.m_lstExchange.empty() || !g_ClientMain.m_csStatus.m_dwExchangeGold) { g_ClientMain.m_lpInterface->ProcessExchangeCmd(g_ClientMain.m_dwMyChrID, 100); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharUpgradeItem(char *aryBuffer) { unsigned long dwChrID; Item::ItemPos pEquipItemIndex, pSocketItemIndex; char *lpItemBuffer; unsigned char cSize; size_t dwSize; m_dwNetworkError = m_pSocket->HandleCharUpgradeItem(aryBuffer, &dwChrID, &cSize, &lpItemBuffer); if(0 == m_dwNetworkError) { dwSize = cSize; if(g_ClientMain.m_dwMyChrID == dwChrID) { unsigned char cPos = g_ClientMain.m_csStatus.m_lpUpgrade[0]->GetItemPos(); // Item::ItemPos pItemIndex = g_ClientMain.m_csStatus.m_lpUpgrade[0]->m_lpItemBase->GetPos(); delete g_ClientMain.m_csStatus.m_lpUpgrade[0]; g_ClientMain.m_csStatus.m_lpUpgrade[0] = new CItemInstance; g_ClientMain.m_csStatus.m_lpUpgrade[0]->SetItemInfo(lpItemBuffer, dwSize); // g_ClientMain.m_csStatus.m_lpUpgrade[0]->m_lpItemBase = Item::CItemFactory::GetInstance().CreateItem(lpItemBuffer, (size_t &)cSize); // g_ClientMain.m_csStatus.m_lpUpgrade[0]->SetItemPos(cPos); // g_ClientMain.m_csStatus.m_lpUpgrade[0]->SetPos(pEquipItemIndex.m_cIndex); delete g_ClientMain.m_csStatus.m_lpUpgrade[1]; g_ClientMain.m_csStatus.m_lpUpgrade[1] = NULL; g_ClientMain.m_csStatus.StatusUpdate(); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharAward(char *aryBuffer) { unsigned long dwChrID, dwExp; m_dwNetworkError = m_pSocket->HandleCharAward(aryBuffer, &dwChrID, &dwExp); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { g_ClientMain.m_csStatus.m_Info.Exp += dwExp; char a[100]; sprintf(a, g_StringTable.m_strString[290], dwExp); // sprintf(a, "»ç¾ÇÇÑ ¸ó½ºÅͰ¡ Á׾ °æÇèÄ¡ %dÀ¸·Î »êÈ­µÇ¾ú½À´Ï´Ù.", dwExp); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); if(g_ClientMain.m_csStatus.m_Info.Exp >= g_dtDateTable.MAXEXPTABLE[g_ClientMain.m_csStatus.m_Info.Level]) { g_ClientMain.m_csStatus.m_Info.Exp = 0; /* for(int i = g_ClientMain.m_csStatus.m_Info.Level;; i++) { if(g_ClientMain.m_csStatus.m_Info.Exp < g_dtDateTable.MAXEXPTABLE[i]) break; g_ClientMain.m_csStatus.m_Info.Exp -= g_dtDateTable.MAXEXPTABLE[i]; }*/ } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharLevelUp(char *aryBuffer) { unsigned long dwChrID; unsigned char cLevel; ChState pChState; m_dwNetworkError = m_pSocket->HandleCharLevelUp(aryBuffer, &dwChrID, &cLevel, &pChState); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { char a[100]; sprintf(a, g_StringTable.m_strString[291], cLevel); // sprintf(a, "¿ì¸®ÀÇ ¿ë»ç°¡ ·¹º§ %d¿¡¼­ ·¹º§ %d·Î ¼ºÀåÇß½À´Ï´Ù.", g_ClientMain.m_csStatus.m_Info.Level, cLevel); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); g_ClientMain.m_csStatus.m_Info.Level = cLevel; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_cLevel = g_ClientMain.m_csStatus.m_Info.Level; g_ClientMain.m_csStatus.m_Info.IP = pChState.m_wIP; g_ClientMain.m_csStatus.m_Info.STR = pChState.m_wSTR; g_ClientMain.m_csStatus.m_Info.DEX = pChState.m_wDEX; g_ClientMain.m_csStatus.m_Info.INT = pChState.m_wINT; g_ClientMain.m_csStatus.m_Info.CON = pChState.m_wCON; g_ClientMain.m_csStatus.m_Info.WIS = pChState.m_wWIS; g_ClientMain.m_csStatus.StatusUpdate(); g_ClientMain.m_csStatus.m_Info.HP = g_ClientMain.m_csStatus.m_MaxHP; g_ClientMain.m_csStatus.m_Info.MP = g_ClientMain.m_csStatus.m_MaxMP; if(cLevel >= 10) { char strTrainer[MAX_PATH], strClass[3][MAX_PATH], strMessage[MAX_PATH]; unsigned long dwClass; BOOL bShow = TRUE; strcpy(strTrainer, g_StringTable.m_strString[450 + g_ClientMain.m_csStatus.m_Info.Class]); switch(g_ClientMain.m_csStatus.m_Info.Class) { case 1: // Fighter dwClass = 2; strcpy(strClass[0], g_StringTable.m_strString[455]); strcpy(strClass[1], g_StringTable.m_strString[456]); break; case 2: // Rogue dwClass = 2; strcpy(strClass[0], g_StringTable.m_strString[457]); strcpy(strClass[1], g_StringTable.m_strString[458]); break; case 3: // Mage dwClass = 2; strcpy(strClass[0], g_StringTable.m_strString[459]); strcpy(strClass[1], g_StringTable.m_strString[460]); break; case 4: // Acolyte dwClass = 2; strcpy(strClass[0], g_StringTable.m_strString[461]); strcpy(strClass[1], g_StringTable.m_strString[462]); break; case 17: // Combatent dwClass = 3; strcpy(strClass[0], g_StringTable.m_strString[469]); strcpy(strClass[1], g_StringTable.m_strString[470]); strcpy(strClass[2], g_StringTable.m_strString[471]); break; case 18: // Opiciator dwClass = 3; strcpy(strClass[0], g_StringTable.m_strString[472]); strcpy(strClass[1], g_StringTable.m_strString[473]); strcpy(strClass[2], g_StringTable.m_strString[474]); break; default: bShow = FALSE; break; } if(bShow) { sprintf(strMessage, "´ç½ÅÀº %d·¹º§ÀÌ µÇ¾ú½À´Ï´Ù. %s Æ®·¹À̳ʸ¦ ã¾Æ°¡ %s", cLevel, strTrainer, strClass[0]); for(unsigned long i = 1; i < dwClass; i++) { strcat(strMessage, ", "); strcat(strMessage, strClass[i]); } strcat(strMessage, "Áß Çϳª·Î ÀüÁ÷ ÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù."); g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 128); } } List SendCharacterList; g_CharacterData.GetSendCharacterAroundList(SendCharacterList); for(int i=0;iRegistInstanceUDPList(SendCharacterList[i]); } m_pSocket->CharLevelUpInfo(g_ClientMain.m_dwMyChrID, cLevel); CCreature *pCreature=g_CharacterData.GetCreature(g_ClientMain.m_dwMyChrID); if(pCreature && pCreature->m_lpChrModel) { vector3 vecPos; pCreature->m_lpChrModel->GetPosition(vecPos); CEffScript *pLevelUpEff; // _ASSERTE(_CrtCheckMemory()); pLevelUpEff=new CEffScript; CSceneManager::AddEffectScript(pLevelUpEff); pLevelUpEff->GetScriptBinData("respawn.esf"); pLevelUpEff->SetStartPos(vecPos.x,vecPos.y,vecPos.z); pLevelUpEff->SetEndPos((D3DXVECTOR3 *)&(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos), 1); } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharLevelUpInfo(char *aryBuffer) { unsigned long dwChrID; unsigned char cLevel; m_dwNetworkError = m_pSocket->HandleCharLevelUpInfo(aryBuffer, &dwChrID, &cLevel); if(0 == m_dwNetworkError) { //dwChrID°¡ ·¹º§¾÷ Çß´Ù. CCreature *lpCreature = g_CharacterData.GetCreature(dwChrID); if(lpCreature) { lpCreature->m_cLevel = cLevel; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharIncreasePoint(char *aryBuffer) { unsigned long dwChrID; ChState pChState; m_dwNetworkError = m_pSocket->HandleCharIncreasePoint(aryBuffer, &dwChrID, &pChState); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { g_ClientMain.m_csStatus.m_Info.IP = pChState.m_wIP; g_ClientMain.m_csStatus.m_Info.STR = pChState.m_wSTR; g_ClientMain.m_csStatus.m_Info.DEX = pChState.m_wDEX; g_ClientMain.m_csStatus.m_Info.INT = pChState.m_wINT; g_ClientMain.m_csStatus.m_Info.CON = pChState.m_wCON; g_ClientMain.m_csStatus.m_Info.WIS = pChState.m_wWIS; g_ClientMain.m_csStatus.StatusUpdate(); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharHPRegen(char *aryBuffer) { unsigned long dwChrID; unsigned short wHP, wMP; m_dwNetworkError = m_pSocket->HandleCharHPRegen(aryBuffer, &dwChrID, &wHP, &wMP); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { g_ClientMain.m_csStatus.m_Info.HP = wHP; g_ClientMain.m_csStatus.m_Info.MP = wMP; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharBindPos(char *aryBuffer) { unsigned long dwChrID; unsigned char cCmd; char cZone; POS psPos; m_dwNetworkError = m_pSocket->HandleCharBindPos(aryBuffer, &dwChrID, &cCmd, &psPos, &cZone); if(0 == m_dwNetworkError) { switch(cCmd) { case 0: g_TextEdit.AddMessage(g_StringTable.m_strString[292], g_ClientMain.m_dwMyChrID, 128); break; case 1: { if(cZone == 100) { if(g_ClientMain.m_lpBackGroundMusic) { try { g_ClientMain.m_lpBackGroundMusic->Destroy(); g_ClientMain.m_lpBackGroundMusic = NULL; } catch(exception & e) { e = 0; g_ClientMain.m_lpBackGroundMusic = NULL; } } g_ClientMain.m_dwNextZone = g_ClientMain.m_dwPresentZone; g_ClientMain.m_dwPresentZone = cZone; g_ClientMain.m_lpInterface->InitZone(g_ClientMain.m_dwPresentZone); g_ClientMain.m_lpCommonInterface->InitLoading(); g_ClientMain.m_dwClientState = GAME_PLAYING; } vector3 vecPos = vector3(psPos.fPointX * 100.0f, psPos.fPointY * 100.0f, psPos.fPointZ * 100.0f); g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lpChrModel->SetPosition(vecPos); g_TextEdit.AddMessage(g_StringTable.m_strString[293], g_ClientMain.m_dwMyChrID, 128); } break; case 2: { vector3 vecPos = vector3(psPos.fPointX * 100.0f, psPos.fPointY * 100.0f, psPos.fPointZ * 100.0f); g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_lpChrModel->SetPosition(vecPos); g_TextEdit.AddMessage(g_StringTable.m_strString[293], g_ClientMain.m_dwMyChrID, 128); // ¸®ÄÝ ½ºÅ³ CEffScript *test_script; test_script = new CEffScript; if(test_script) { if(test_script->GetScriptBinData("recall2.esf")) { // ½ºÅ³ »ç¿ë½Ã Ÿ°Ý ÀÌÆÑÆ® ó¸® test_script->SetStartPos(vecPos.x, vecPos.y, vecPos.z); test_script->SetEndPos(vecPos.x, vecPos.y, vecPos.z); float fChrDir = g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_fDirection; fChrDir = -fChrDir; fChrDir -= FLOAT_PHI / 2.0f; vector3 vecChrToward; vecChrToward.x = cosf(fChrDir); vecChrToward.z = sinf(fChrDir); vecChrToward.y = 0.0f; vecChrToward.Normalize(); test_script->SetChrFwd(-vecChrToward.x, -vecChrToward.y, -vecChrToward.z); test_script->SetMine(true); test_script->SetBSkill(true); if(!CSceneManager::m_EffectManager.AddEffScript(test_script)) // ÀÌÆåÆ® ½ºÅ©¸³Æ®¸¦ ÀÐÀ¸¸é ³ª¿À´Â À妽º { delete test_script; } } else { delete test_script; } } CastObject pCastObject; pCastObject.m_wTypeID = 0; pCastObject.m_cObjectType = 200; pCastObject.m_cObjectLevel = 0; pCastObject.m_DstPos.fPointX = vecPos.x; pCastObject.m_DstPos.fPointY = vecPos.y; pCastObject.m_DstPos.fPointZ = vecPos.z; List SendCharacterList; g_CharacterData.GetSendCharacterAroundList(SendCharacterList); for(int i=0;iRegistInstanceUDPList(SendCharacterList[i]); } g_ClientMain.m_Network.m_pSocket->CharCastObjectInfo(g_ClientMain.m_dwMyChrID, g_ClientMain.m_dwMyChrID, pCastObject); } break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharQuickSlotMove(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; TakeType pTakeType; m_dwNetworkError = m_pSocket->HandleCharQuickSlotMove(aryBuffer, &pTakeType); if(0 == m_dwNetworkError) { switch(pTakeType.m_srcPos.m_cPos) { case TakeType::TS_INVEN: // Move g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex] = new CItemInstance; g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex]->SetItemInfofromID(g_ClientMain.m_lpPickItem->GetProtoTypeID(), pTakeType.m_dstPos); { CItemInstance *lpExistItem = g_ClientMain.m_csStatus.GetInventoryItem(g_ClientMain.m_lpPickItem->m_lpItemBase->GetPos()); if(lpExistItem) { unsigned long dwNum = lpExistItem->GetNowDurability() + g_ClientMain.m_lpPickItem->GetNowDurability(); lpExistItem->SetNowDurability(dwNum); g_ClientMain.m_csStatus.SetQuickSlot(lpExistItem); delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } else { g_ClientMain.m_csStatus.AddInventoryItem(g_ClientMain.m_lpPickItem); g_ClientMain.SetPickItem(NULL); } } return TRUE; case TakeType::TS_TEMP: g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex] = new CItemInstance; g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex]->SetItemInfofromID(g_ClientMain.m_lpPickItem->GetProtoTypeID(), pTakeType.m_dstPos); { FieldInstance pFI; Item::ItemPos pItemIndex; pFI.m_dwTypeID = g_ClientMain.m_lpPickItem->GetProtoTypeID(); pFI.m_cNum = g_ClientMain.m_lpPickItem->GetNowDurability(); if(g_ClientMain.m_csStatus.GetAbleInven(&pFI, pItemIndex, TRUE)) { CItemInstance *lpExistItem = g_ClientMain.m_csStatus.GetInventoryItem(pItemIndex.m_cIndex); if(lpExistItem) { SendTakeItem(g_ClientMain.m_lpPickItem, &lpExistItem->m_lpItemBase->GetPos(), g_ClientMain.m_lpPickItem->GetNowDurability()); /* lpExistItem->m_lpItemBase->m_nNowDurability += g_ClientMain.m_lpPickItem->m_lpItemBase->m_nNowDurability; g_ClientMain.m_csStatus.SetQuickSlot(lpExistItem); delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL);*/ } else { SendTakeItem(g_ClientMain.m_lpPickItem, &pItemIndex, g_ClientMain.m_lpPickItem->GetNowDurability()); } } } return TRUE; case TakeType::TS_SSLOT: // Move g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex] = g_ClientMain.m_lpPickItem; g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex]->SetPos(pTakeType.m_dstPos); if(pTakeType.m_cNum == 0) { g_ClientMain.m_Network.SetChant(g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex]); g_ClientMain.m_csStatus.SetActivateSkill(g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex]); } g_ClientMain.SetPickItem(NULL); return TRUE; } switch(pTakeType.m_dstPos.m_cPos) { case TakeType::TS_QSLOT: // Swap { CItemInstance *lpQuick = g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex]; g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex] = g_ClientMain.m_lpPickItem; g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_dstPos.m_cIndex]->SetPos(pTakeType.m_dstPos); if(lpQuick) { if(lpQuick == g_ClientMain.m_csStatus.m_lpQuickSelected) { g_ClientMain.m_csStatus.m_lpQuickSelected = NULL; } g_ClientMain.SetPickItem(lpQuick); g_ClientMain.m_lpPickItem->SetPos(pTakeType.m_srcPos); } else { g_ClientMain.SetPickItem(NULL); } } break; case TakeType::TS_NONE: // Delete if(g_ClientMain.m_lpPickItem && g_ClientMain.m_lpPickItem->GetItemPos() == ClientSocket::ItemPos_QSlot) { delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } else { if(g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_srcPos.m_cIndex]) { delete g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_srcPos.m_cIndex]; g_ClientMain.m_csStatus.m_lstQuickSlot[pTakeType.m_srcPos.m_cIndex] = NULL; } } break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharPartyMemInfo(char *aryBuffer) { unsigned long dwChrID, dwPartyID, dwChant, dwEnchant; unsigned short wMaxHP, wMaxMP; unsigned short wCurHP, wCurMP; unsigned char cClass; char cLevel; SOCKADDR_IN pPubAddress, pPriAddress; m_dwNetworkError = m_pSocket->HandleCharPartyMemInfo(aryBuffer, &dwChrID, &dwPartyID, &cClass, &cLevel, &wMaxHP, &wCurHP, &wMaxMP, &wCurMP, &dwChant, &dwEnchant, &pPubAddress, &pPriAddress); if(0 == m_dwNetworkError) { if(dwPartyID == g_ClientMain.m_csStatus.m_PartyInfo.m_dwPartyID) { CCreature *lpCreature; unsigned long dwResult = m_pSocket->InsertIntoAddressList(ClientSocket::ListType_Party, dwChrID, pPubAddress, pPriAddress); #ifdef _DEBUG char a[200]; sprintf(a, "6. 0x%08x = Pub : %d.%d.%d.%d:%d, Pri : %d.%d.%d.%d:%d %d", dwChrID, pPubAddress.sin_addr.s_net, pPubAddress.sin_addr.s_host, pPubAddress.sin_addr.s_lh, pPubAddress.sin_addr.s_impno, pPubAddress.sin_port, pPriAddress.sin_addr.s_net, pPriAddress.sin_addr.s_host, pPriAddress.sin_addr.s_lh, pPriAddress.sin_addr.s_impno, pPriAddress.sin_port, m_pSocket->GetPeerType(pPubAddress, pPriAddress)); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); #endif if(dwResult == ClientSocket::ListOper_Insert) { // m_pSocket->CharRequireInfo(g_ClientMain.m_dwMyChrID, dwChrID, ClientSocket::Require_Shape); // m_lstSendShape.push_back(dwChrID); if(!g_CharacterData.GetCreature(dwChrID)) { g_CharacterData.AddCharacter(dwChrID, vector3(0.0f, 0.0f, 0.0f)); // °ø°£¸¸ ¸¸µë } } lpCreature = g_CharacterData.GetCreature(dwChrID); if(lpCreature) { lpCreature->m_dwPartyID = dwPartyID; lpCreature->m_cLevel = cLevel; lpCreature->m_wClass = cClass; lpCreature->m_wMaxHP = wMaxHP; lpCreature->m_wMaxMP = wMaxMP; lpCreature->m_sCurrHP = wCurHP; lpCreature->m_sCurrMP = wCurMP; } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharClassUpgrade(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID; unsigned short wClass; ChState pState; m_dwNetworkError = m_pSocket->HandleCharClassUpgrade(aryBuffer, &dwChrID, &wClass, &pState); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { // ÀüÁ÷ ÀüÀÇ Á¤º¸ ¼¼ÆÃ g_ClientMain.m_csStatus.m_BeforeInfo = g_ClientMain.m_csStatus.m_Info; g_ClientMain.m_csStatus.m_Info.Class = wClass; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_wClass = g_ClientMain.m_csStatus.m_Info.Class; g_ClientMain.m_csStatus.m_Info.STR = pState.m_wSTR; g_ClientMain.m_csStatus.m_Info.DEX = pState.m_wDEX; g_ClientMain.m_csStatus.m_Info.CON = pState.m_wCON; g_ClientMain.m_csStatus.m_Info.INT = pState.m_wINT; g_ClientMain.m_csStatus.m_Info.WIS = pState.m_wWIS; g_ClientMain.m_csStatus.m_Info.IP = pState.m_wIP; g_ClientMain.m_csStatus.SetClassSkill(); g_ClientMain.m_csStatus.StatusUpdate(); char strText[MAX_PATH]; sprintf(strText, g_StringTable.m_strString[294], g_ClientMain.m_lpCommonInterface->GetClassName(wClass)); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); // ÀüÁ÷ effect script load CEffScript *test_script; // _ASSERTE(_CrtCheckMemory()); test_script = new CEffScript; // ÀüÁ÷ effect ptr Setting g_ClientMain.m_ClassEffectPtr = test_script; /* [1], "Fighter" [2], "Rogue"); [3], "Mage"); [4], "Acolyte"); [5], "Defender"); [6], "Warrior"); [7], "Assasin"); [8], "Archer"); [9], "Sorcerer"); [10], "Enchanter"); [11], "Priest"); [12], "Cleric"); [13], "Adventurer"); */ test_script->SetInterfaceSet(true); switch(wClass) { case 5: //defender test_script->GetScriptBinData("inter_job_defender.esf"); break; case 6: //warrior test_script->GetScriptBinData("inter_job_warrior.esf"); break; case 7: //Assasin test_script->GetScriptBinData("inter_job_assassin1.esf"); break; case 8: //Archer test_script->GetScriptBinData("inter_job_archer1.esf"); break; case 9://sorcerer test_script->GetScriptBinData("inter_job_sorcerer1.esf"); break; case 10://enchanter test_script->GetScriptBinData("inter_job_enchanter1.esf"); break; case 11: //priest test_script->GetScriptBinData("inter_job_priest.esf"); break; case 12: //cleric test_script->GetScriptBinData("inter_job_cleric.esf"); break; //akhan class case 19: //templer test_script->GetScriptBinData("inter_job_templar1.esf"); break; case 20: //attacker test_script->GetScriptBinData("inter_job_attacker1.esf"); break; case 21: //gunner test_script->GetScriptBinData("inter_job_gunner1.esf"); break; case 22: //rune ope test_script->GetScriptBinData("inter_job_runeoff1.esf"); break; case 23: //life ope test_script->GetScriptBinData("inter_job_lifeoff1.esf"); break; case 24: //shadow ope test_script->GetScriptBinData("inter_job_shadowoff1.esf"); break; default: break; } test_script->m_InterfacePos[0] += (-190.0f); test_script->m_InterfacePos[1] += 10.0f; CSceneManager::m_EffectManager.AddInterfaceScript(test_script); return TRUE; } } return FALSE; } BOOL CNetwork::ParseCellBroadCasting(char *aryBuffer) { LPINETAddressInfo lpAddress; unsigned short wCharNum; m_dwNetworkError = m_pSocket->HandleCellBroadCasting(aryBuffer, &wCharNum, &lpAddress); if(0 == m_dwNetworkError) { /* char a[100]; sprintf(a, "BroadCasting : %d", wCharNum); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 129);*/ m_pSocket->m_ClientList->DeleteAllFromList(); unsigned long dwResult; SOCKADDR_IN siPublic, siPrivate; for(int i = 0; i < wCharNum; i++) { if(lpAddress[i].m_dwCharID == g_ClientMain.m_dwMyChrID) continue; siPublic = lpAddress[i].GetPublicAddress(); siPrivate = lpAddress[i].GetPrivateAddress(); dwResult = m_pSocket->InsertIntoAddressList(ClientSocket::ListType_Client, lpAddress[i].m_dwCharID, siPublic, siPrivate); #ifdef _DEBUG char a[200]; sprintf(a, "7. 0x%08x = Pub : %d.%d.%d.%d:%d, Pri : %d.%d.%d.%d:%d %d", lpAddress[i].m_dwCharID, siPublic.sin_addr.s_net, siPublic.sin_addr.s_host, siPublic.sin_addr.s_lh, siPublic.sin_addr.s_impno, siPublic.sin_port, siPrivate.sin_addr.s_net, siPrivate.sin_addr.s_host, siPrivate.sin_addr.s_lh, siPrivate.sin_addr.s_impno, siPrivate.sin_port, m_pSocket->GetPeerType(siPublic, siPrivate)); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); #endif if(dwResult == ClientSocket::ListOper_Insert) { CCreature *lpCreature = g_CharacterData.GetCreature(lpAddress[i].m_dwCharID); if(!lpCreature || (lpCreature && lpCreature->m_bUsed == FALSE)) { m_pSocket->CharRequireInfo(g_ClientMain.m_dwMyChrID, lpAddress[i].m_dwCharID, ClientSocket::Require_Shape); if(!lpCreature) { m_lstSendShape.push_back(lpAddress[i].m_dwCharID); g_CharacterData.AddCharacter(lpAddress[i].m_dwCharID, vector3(0.0f, 0.0f, 0.0f)); // °ø°£¸¸ ¸¸µë } } } if(g_ClientMain.m_csStatus.CheckPartyMember(lpAddress[i].m_dwCharID)) { dwResult = m_pSocket->InsertIntoAddressList(ClientSocket::ListType_Party, lpAddress[i].m_dwCharID, siPublic, siPrivate); #ifdef _DEBUG char a[200]; sprintf(a, "8. 0x%08x = Pub : %d.%d.%d.%d:%d, Pri : %d.%d.%d.%d:%d %d", lpAddress[i].m_dwCharID, siPublic.sin_addr.s_net, siPublic.sin_addr.s_host, siPublic.sin_addr.s_lh, siPublic.sin_addr.s_impno, siPublic.sin_port, siPrivate.sin_addr.s_net, siPrivate.sin_addr.s_host, siPrivate.sin_addr.s_lh, siPrivate.sin_addr.s_impno, siPrivate.sin_port, m_pSocket->GetPeerType(siPublic, siPrivate)); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); #endif if(dwResult == ClientSocket::ListOper_Insert) { CCreature *lpCreature = g_CharacterData.GetCreature(lpAddress[i].m_dwCharID); if(!lpCreature) { g_CharacterData.AddCharacter(lpAddress[i].m_dwCharID, vector3(0.0f, 0.0f, 0.0f)); // °ø°£¸¸ ¸¸µë } } } } BOOL bAlive; for(i = 1; i < g_CharacterData.m_lstCharData.num;) { if(g_CharacterData.GetClientType(g_CharacterData.m_lstCharData[i]->m_dwChrID) == CT_PC) { bAlive = FALSE; for(int j = 0; j < wCharNum; j++) { if(g_CharacterData.m_lstCharData[i]->m_dwChrID == lpAddress[j].m_dwCharID) { bAlive = TRUE; break; } } if(!bAlive && !g_ClientMain.m_csStatus.CheckPartyMember(g_CharacterData.m_lstCharData[i]->m_dwChrID)) { g_CharacterData.UnLoadChr(g_CharacterData.m_lstCharData[i]->m_dwChrID); } else { i++; } } else { i++; } } /* /* BOOL bExist; for(i = g_CharacterData.m_lstCharData.num - 1; i >= 1; i--) { if(g_CharacterData.GetClientType(g_CharacterData.m_lstCharData[i]->m_dwChrID) == CT_PC) { /////////////´Ü°Å bExist = FALSE; for(int j = 0; j < wCharNum; j++) { if(g_CharacterData.m_lstCharData[i]->m_dwChrID == lpAddress[j].m_dwCharID) { bExist = TRUE; break; } } if(!bExist) { g_CharacterData.UnLoadChr(g_CharacterData.m_lstCharData[i]->m_dwChrID); } } } /* for(i = 0; i < g_CharacterData.m_lstCharData.num; i++) { if(g_CharacterData.GetClientType(g_CharacterData.m_lstCharData[j]->m_dwChrID) == CT_PC) { bExist = FALSE; for(int j = 0; j < wCharNum; j++) { if(g_CharacterData.m_lstCharData[i]->m_dwChrID == lpAddress[j].m_dwCharID) { bExist = TRUE; break; } } if(!bExist) { g_CharacterData.UnLoadChr(g_CharacterData.m_lstCharData[i]->m_dwChrID); } } }*/ return TRUE; } return FALSE; } BOOL CNetwork::ParseCharCastObjectInfo(char *aryBuffer) { unsigned long dwChrID, dwRecvChrID; CastObject pCastObject; m_dwNetworkError = m_pSocket->HandleCharCastObjectInfo(aryBuffer, &dwChrID, &dwRecvChrID, &pCastObject); if(0 == m_dwNetworkError) { if(pCastObject.m_cObjectType <= 43) { unsigned short wSkill = pCastObject.m_wTypeID; unsigned short wGrade = pCastObject.m_cObjectLevel; CCreature *lpCreature = g_CharacterData.GetCreature(dwChrID); if(wSkill & 0x8000) { const Skill::ProtoType *lpSkillTypeTemp = g_SkillMgr.GetSkillProtoType(wSkill); const Skill::ProtoType *lpSkillType = NULL; if(lpSkillTypeTemp) lpSkillType = &lpSkillTypeTemp[wGrade]; if(lpCreature && lpSkillType) { lpCreature->CancelSkill(); lpCreature->EndSkill((char *)lpSkillType->m_szCastingFileName); CEffScript *test_script; // _ASSERTE(_CrtCheckMemory()); test_script = new CEffScript; if(test_script) { if(lpCreature->m_cSex == 1) test_script->SetSkillInfo(1, pCastObject.m_cObjectType); else test_script->SetSkillInfo(2, pCastObject.m_cObjectType); if(test_script->GetScriptBinData((char *)lpSkillType->m_szEffectFileName)) { // ½ºÅ³ »ç¿ë½Ã Ÿ°Ý ÀÌÆÑÆ® ó¸® if(wSkill == 0x8603) // chain action g_CharacterData.m_SkillAttackValue = lpSkillType->m_cStrikeNum; //Hit Count Setting test_script->SetStartPos(lpCreature->m_vecPos.x, lpCreature->m_vecPos.y, lpCreature->m_vecPos.z); test_script->SetEndPos(pCastObject.m_DstPos.fPointX, pCastObject.m_DstPos.fPointY, pCastObject.m_DstPos.fPointZ); CCreature *lpTargetCreature = g_CharacterData.GetCreature(dwRecvChrID); if(lpTargetCreature) { test_script->SetChr(lpCreature->m_lpChrModel, lpTargetCreature->m_lpChrModel); } float fChrDir = lpCreature->m_fDirection; fChrDir = -fChrDir; fChrDir -= FLOAT_PHI / 2.0f; vector3 vecChrToward; vecChrToward.x = cosf(fChrDir); vecChrToward.z = sinf(fChrDir); vecChrToward.y = 0.0f; vecChrToward.Normalize(); test_script->SetChrFwd(-vecChrToward.x, -vecChrToward.y, -vecChrToward.z); test_script->SetPlayer(lpCreature,lpCreature->m_dwChrID); test_script->SetMine(false); test_script->SetBSkill(true); if(!CSceneManager::m_EffectManager.AddEffScript(test_script)) // ÀÌÆåÆ® ½ºÅ©¸³Æ®¸¦ ÀÐÀ¸¸é ³ª¿À´Â À妽º { delete test_script; } } else { delete test_script; } } } } else if(wSkill == AtType::Bow || wSkill == AtType::CrossBow) { if(lpCreature) { CEffScript *test_script; // _ASSERTE(_CrtCheckMemory()); test_script = new CEffScript; if(test_script) { if(lpCreature->m_cSex == 1) test_script->SetSkillInfo(1, pCastObject.m_cObjectType); else test_script->SetSkillInfo(2, pCastObject.m_cObjectType); if(test_script->GetScriptBinData("arrow_normal.esf")) { test_script->SetStartPos(lpCreature->m_vecPos.x, lpCreature->m_vecPos.y, lpCreature->m_vecPos.z); CCreature *lpTargetCreature = g_CharacterData.GetCreature(dwRecvChrID); if(lpTargetCreature) { test_script->SetEndPos((D3DXVECTOR3 *)&lpTargetCreature->m_vecPos, 1); test_script->SetChr(lpCreature->m_lpChrModel, lpTargetCreature->m_lpChrModel); } float fChrDir = lpCreature->m_fDirection; fChrDir = -fChrDir; fChrDir -= FLOAT_PHI / 2.0f; vector3 vecChrToward; vecChrToward.x = cosf(fChrDir); vecChrToward.z = sinf(fChrDir); vecChrToward.y = 0.0f; vecChrToward.Normalize(); test_script->SetChrFwd(-vecChrToward.x, -vecChrToward.y, -vecChrToward.z); test_script->SetMine(false); test_script->SetBSkill(true); if(!CSceneManager::m_EffectManager.AddEffScript(test_script)) // ÀÌÆåÆ® ½ºÅ©¸³Æ®¸¦ ÀÐÀ¸¸é ³ª¿À´Â À妽º { delete test_script; } } else { delete test_script; } } } } } else if(pCastObject.m_cObjectType == 200) { CEffScript *test_script; test_script = new CEffScript; if(test_script) { if(test_script->GetScriptBinData("recall2.esf")) { // ½ºÅ³ »ç¿ë½Ã Ÿ°Ý ÀÌÆÑÆ® ó¸® test_script->SetStartPos(pCastObject.m_DstPos.fPointX, pCastObject.m_DstPos.fPointY, pCastObject.m_DstPos.fPointZ); test_script->SetEndPos(pCastObject.m_DstPos.fPointX, pCastObject.m_DstPos.fPointY, pCastObject.m_DstPos.fPointZ); float fChrDir = g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_fDirection; fChrDir = -fChrDir; fChrDir -= FLOAT_PHI / 2.0f; vector3 vecChrToward; vecChrToward.x = cosf(fChrDir); vecChrToward.z = sinf(fChrDir); vecChrToward.y = 0.0f; vecChrToward.Normalize(); test_script->SetChrFwd(-vecChrToward.x, -vecChrToward.y, -vecChrToward.z); test_script->SetMine(false); test_script->SetBSkill(true); if(!CSceneManager::m_EffectManager.AddEffScript(test_script)) // ÀÌÆåÆ® ½ºÅ©¸³Æ®¸¦ ÀÐÀ¸¸é ³ª¿À´Â À妽º { delete test_script; } } else { delete test_script; } } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharPartyCmdInfo(char *aryBuffer) { unsigned long dwMemberID, dwPartyID; unsigned short wPartyCmd; m_dwNetworkError = m_pSocket->HandleCharPartyCmdInfo(aryBuffer, &dwMemberID, &dwPartyID, &wPartyCmd); if(0 == m_dwNetworkError) { CCreature *lpCreature = g_CharacterData.GetCreature(dwMemberID); if(lpCreature) { switch(wPartyCmd) { case ClientSocket::PartyCmd_Secession: case ClientSocket::PartyCmd_Banish: lpCreature->m_dwPartyID = 0; break; case ClientSocket::PartyCmd_Accept: lpCreature->m_dwPartyID = dwPartyID; break; case ClientSocket::PartyCmd_Destroy: { for(int i = 0; i < g_CharacterData.m_lstCharData.num; i++) { if(g_CharacterData.m_lstCharData[i]->m_dwPartyID == dwPartyID) { g_CharacterData.m_lstCharData[i]->m_dwPartyID = 0; } } } break; } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharRequireInfo(char *aryBuffer) { unsigned long dwChrID; unsigned char cCmd; SOCKADDR_IN pPubAddress, pPriAddress; m_dwNetworkError = m_pSocket->HandleCharRequireInfo(aryBuffer, &dwChrID, &pPubAddress, &pPriAddress, &cCmd); if(0 == m_dwNetworkError) { switch(cCmd) { case ClientSocket::Require_Shape: { unsigned long dwResult = m_pSocket->InsertIntoAddressList(ClientSocket::ListType_Client, dwChrID, pPubAddress, pPriAddress); #ifdef _DEBUG char a[200]; sprintf(a, "9. 0x%08x = Pub : %d.%d.%d.%d:%d, Pri : %d.%d.%d.%d:%d %d", dwChrID, pPubAddress.sin_addr.s_net, pPubAddress.sin_addr.s_host, pPubAddress.sin_addr.s_lh, pPubAddress.sin_addr.s_impno, pPubAddress.sin_port, pPriAddress.sin_addr.s_net, pPriAddress.sin_addr.s_host, pPriAddress.sin_addr.s_lh, pPriAddress.sin_addr.s_impno, pPriAddress.sin_port, m_pSocket->GetPeerType(pPubAddress, pPriAddress)); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); #endif if(dwResult == ClientSocket::ListOper_Insert) { m_pSocket->CharRequireInfo(g_ClientMain.m_dwMyChrID, dwChrID, ClientSocket::Require_Shape); m_lstSendShape.push_back(dwChrID); if(!g_CharacterData.GetCreature(dwChrID)) { vector3 vecPos = vector3(0.0f, 0.0f, 0.0f); g_CharacterData.AddCharacter(dwChrID, vecPos); // °ø°£¸¸ ¸¸µë } } SendCharShape(dwChrID); } break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharWhisper(char *aryBuffer) { char strSendName[MAX_PATH], strRecvName[MAX_PATH], strMessage[MAX_PATH]; m_dwNetworkError = m_pSocket->HandleCharWhisper(aryBuffer, strSendName, strRecvName, strMessage); char strChat[MAX_PATH]; if(0 == m_dwNetworkError) { sprintf(strChat, "(from. %s) %s", strSendName, strMessage); strcpy(g_ClientMain.m_strRecentChatChrID, strSendName); g_TextEdit.AddMessage(strChat, g_ClientMain.m_dwMyChrID, 10); return TRUE; } else { switch(m_dwNetworkError) { case 2: if(strcmp(g_ClientMain.m_strWhisperChrID, "")) { strcpy(g_ClientMain.m_strWhisperChrID, ""); } sprintf(strChat, g_StringTable.m_strString[351], strRecvName); g_TextEdit.AddMessage(strChat, g_ClientMain.m_dwMyChrID, 129); break; } } return FALSE; } BOOL CNetwork::ParseCharExchangeCmd(char *aryBuffer) { unsigned long dwSendID, dwRecvID; unsigned char cCmd; m_dwNetworkError = m_pSocket->HandleCharExchangeCmd(aryBuffer, &dwSendID, &dwRecvID, &cCmd); if(0 == m_dwNetworkError) { switch(cCmd) { case ClientSocket::ExchangeCmd_Propose: if(g_ClientMain.m_lpInterface) { if(g_ClientMain.m_lpInterface->GetBusy()) { SendExchangeCmd(dwSendID, ClientSocket::ExchangeCmd_Refuse); } else { g_ClientMain.m_lpInterface->m_dwExchangeCmdResult = 0; g_ClientMain.m_lpInterface->m_dwExchangeCmdType = ClientSocket::ExchangeCmd_Propose; g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID = dwSendID; char strText[200]; CCreature *lpCreature = g_CharacterData.GetCreature(dwSendID); if(lpCreature) { sprintf(strText, g_StringTable.m_strString[353], lpCreature->m_strName); CGUIMessageBox *lpMessageBox; lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(strText, MB_EXIT | MB_YES | MB_NO); lpMessageBox->SetResult(&g_ClientMain.m_lpInterface->m_dwExchangeCmdResult); lpMessageBox->SetEnableEnter(FALSE); } } } break; case ClientSocket::ExchangeCmd_Refuse: { char strText[200]; CCreature *lpCreature = g_CharacterData.GetCreature(dwSendID); if(lpCreature) { sprintf(strText, g_StringTable.m_strString[354], lpCreature->m_strName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 129); } } break; case ClientSocket::ExchangeCmd_Accept: if(dwSendID == g_ClientMain.m_dwMyChrID) g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID = dwRecvID; else g_ClientMain.m_lpInterface->m_dwExchangeCmdSenderID = dwSendID; case ClientSocket::ExchangeCmd_OK: case ClientSocket::ExchangeCmd_Cancel: case ClientSocket::ExchangeCmd_Exchange: case ClientSocket::ExchangeCmd_Quit: case ClientSocket::ExchangeCmd_Lock: case ClientSocket::ExchangeCmd_UnLock: g_ClientMain.m_lpInterface->ProcessExchangeCmd(dwSendID, cCmd); break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharExchangeItem(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID, dwSize; unsigned char cType, cNum; Item::ItemPos pItemIndex; char *lpItemBuffer; m_dwNetworkError = m_pSocket->HandleCharExchangeItem(aryBuffer, &dwChrID, &dwSize, &pItemIndex, &cType, &cNum, &lpItemBuffer); if(0 == m_dwNetworkError) { switch(cType) { case 0: // Item if(dwSize) { CItemInstance *lpItem = g_ClientMain.m_csStatus.GetExchangeItem(pItemIndex.m_cIndex, FALSE); if(lpItem) { g_ClientMain.m_csStatus.DeleteExchangeItem(lpItem, FALSE); } lpItem = new CItemInstance; lpItem->SetItemInfo(lpItemBuffer, (size_t &)dwSize); // lpItem->m_lpItemBase = Item::CItemFactory::GetInstance().CreateItem(lpItemBuffer, (size_t &)dwSize); // lpItem->SetItemPos(ClientSocket::ItemPos_Exchange); // lpItem->SetPos(pItemIndex.m_cIndex); g_ClientMain.m_csStatus.AddExchangeItem(lpItem, FALSE); g_ClientMain.m_lpInterface->InitPos(lpItem); } else { CItemInstance *lpExistItem = g_ClientMain.m_csStatus.GetExchangeItem(pItemIndex.m_cIndex, FALSE); if(lpExistItem) { unsigned long dwNum = lpExistItem->GetNowDurability() + cNum; lpExistItem->SetNowDurability(dwNum); } } break; case 1: // Gold g_ClientMain.m_csStatus.m_dwExchange2Gold = dwSize; break; case 2: { CItemInstance *lpExistItem = g_ClientMain.m_csStatus.GetExchangeItem(pItemIndex.m_cIndex, FALSE); if(lpExistItem) { g_ClientMain.m_csStatus.DeleteExchangeItem(lpExistItem, FALSE); } } break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharTakeGold(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID, dwGold; unsigned char cSrcPos, cDstPos; m_dwNetworkError = m_pSocket->HandleCharTakeGold(aryBuffer, &dwChrID, &cSrcPos, &cDstPos, &dwGold); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { switch(cSrcPos) { case ClientSocket::ItemPos_Inven: if(dwGold <= g_ClientMain.m_csStatus.m_Info.Gold) g_ClientMain.m_csStatus.m_Info.Gold -= dwGold; else g_ClientMain.m_csStatus.m_Info.Gold = 0; break; case ClientSocket::ItemPos_Exchange: // ±³È¯Ã¢¿¡¼­ µ· »©±â if(dwGold <= g_ClientMain.m_csStatus.m_dwExchangeGold) g_ClientMain.m_csStatus.m_dwExchangeGold -= dwGold; else g_ClientMain.m_csStatus.m_dwExchangeGold = 0; break; case ClientSocket::ItemPos_Deposit: if(dwGold <= g_ClientMain.m_csStatus.m_dwDepositGold) g_ClientMain.m_csStatus.m_dwDepositGold -= dwGold; else g_ClientMain.m_csStatus.m_dwDepositGold = 0; break; } switch(cDstPos) { case ClientSocket::ItemPos_Inven: if(0xFFFFFFFF - g_ClientMain.m_csStatus.m_Info.Gold >= dwGold) g_ClientMain.m_csStatus.m_Info.Gold += dwGold; else g_ClientMain.m_csStatus.m_Info.Gold = 0xFFFFFFFF; break; case ClientSocket::ItemPos_Exchange: // ±³È¯Ã¢¿¡ µ· ³Ö±â if(0xFFFFFFFF - g_ClientMain.m_csStatus.m_dwExchangeGold >= dwGold) g_ClientMain.m_csStatus.m_dwExchangeGold += dwGold; else g_ClientMain.m_csStatus.m_dwExchangeGold = 0xFFFFFFFF; break; case ClientSocket::ItemPos_Deposit: if(0xFFFFFFFF - g_ClientMain.m_csStatus.m_dwDepositGold >= dwGold) g_ClientMain.m_csStatus.m_dwDepositGold += dwGold; else g_ClientMain.m_csStatus.m_dwDepositGold = 0xFFFFFFFF; break; } return TRUE; } } return FALSE; } BOOL CNetwork::ParseCharDuelCmd(char *aryBuffer) { unsigned long dwSendID, dwRecvID; unsigned char cCmd; m_dwNetworkError = m_pSocket->HandleCharDuelCmd(aryBuffer, &dwSendID, &dwRecvID, &cCmd); if(0 == m_dwNetworkError) { switch(cCmd) { case ClientSocket::DuelCmd_Propose: if(g_ClientMain.m_lpInterface->GetBusy()) { m_pSocket->CharDuelCmd(g_ClientMain.m_dwMyChrID, dwSendID, ClientSocket::DuelCmd_Refuse); } else if(g_ClientMain.m_lpInterface) { g_ClientMain.m_lpInterface->m_dwDuelCmdResult = 0; g_ClientMain.m_lpInterface->m_dwDuelCmdType = ClientSocket::DuelCmd_Propose; g_ClientMain.m_lpInterface->m_dwDuelCmdSenderID = dwSendID; char strText[200]; CCreature *lpCreature = g_CharacterData.GetCreature(dwSendID); if(lpCreature) { sprintf(strText, g_StringTable.m_strString[359], lpCreature->m_strName, lpCreature->m_cLevel, g_ClientMain.m_lpCommonInterface->GetClassName(lpCreature->m_wClass)); CGUIMessageBox *lpMessageBox; lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(strText, MB_EXIT | MB_YES | MB_NO); lpMessageBox->SetResult(&g_ClientMain.m_lpInterface->m_dwDuelCmdResult); lpMessageBox->SetEnableEnter(FALSE); } } break; case ClientSocket::DuelCmd_Refuse: { char strText[200]; CCreature *lpCreature = g_CharacterData.GetCreature(dwSendID); if(lpCreature) { sprintf(strText, g_StringTable.m_strString[360], lpCreature->m_strName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 129); } } break; case ClientSocket::DuelCmd_Ready: // µà¾ó ½ÃÀÛ { g_CharacterData.InitDuelTarget(); if(dwSendID == g_ClientMain.m_dwMyChrID) g_CharacterData.SetPreDuelTarget(dwRecvID); // g_CharacterData.m_dwPreDuelTargetID = dwRecvID; else g_CharacterData.SetPreDuelTarget(dwSendID); // g_CharacterData.m_dwPreDuelTargetID = dwSendID; if(g_CharacterData.m_lpDuelReady) { CSceneManager::m_EffectManager.DeleteInterfaceScript(g_CharacterData.m_lpDuelReady); g_CharacterData.m_lpDuelReady = NULL; } // _ASSERTE(_CrtCheckMemory()); g_CharacterData.m_lpDuelReady = new CEffScript; g_CharacterData.m_lpDuelReady->SetInterfaceSet(true); g_CharacterData.m_lpDuelReady->GetScriptBinData("inter_duel.esf"); CSceneManager::m_EffectManager.AddInterfaceScript(g_CharacterData.m_lpDuelReady); } break; case ClientSocket::DuelCmd_Logout: { if(dwSendID == g_ClientMain.m_dwMyChrID) g_CharacterData.InitDuelTarget(); else g_CharacterData.DeleteDuelTarget(dwSendID); // g_CharacterData.m_dwDuelTargetID = 0; // g_CharacterData.m_dwPreDuelTargetID = 0; char strText[200]; CCreature *lpCreature = g_CharacterData.GetCreature(dwSendID); if(lpCreature) { sprintf(strText, g_StringTable.m_strString[361], lpCreature->m_strName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 129); } SendFameInfo(ClientSocket::FameInfoType_Fame); } break; case ClientSocket::DuelCmd_Dead: { if(dwSendID == g_ClientMain.m_dwMyChrID) g_CharacterData.InitDuelTarget(); else g_CharacterData.DeleteDuelTarget(dwSendID); // g_CharacterData.m_dwDuelTargetID = 0; // g_CharacterData.m_dwPreDuelTargetID = 0; if(dwSendID != g_ClientMain.m_dwMyChrID) { char strText[200]; CCreature *lpCreature = g_CharacterData.GetCreature(dwSendID); if(lpCreature) { sprintf(strText, g_StringTable.m_strString[362], lpCreature->m_strName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 129); } } SendFameInfo(ClientSocket::FameInfoType_Fame); } break; case ClientSocket::DuelCmd_Cancel: g_CharacterData.InitDuelTarget(); break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharFameInfo(char *aryBuffer) { unsigned long dwChrID, dwFameOrMerits; unsigned char cCmd; unsigned char cRaceRank, cClassRank; m_dwNetworkError = m_pSocket->HandleCharFameInfo(aryBuffer, &dwChrID, &cCmd, &dwFameOrMerits, &cRaceRank, &cClassRank); if(0 == m_dwNetworkError) { switch(cCmd) { case ClientSocket::FameInfoType_Fame: { g_ClientMain.m_csStatus.m_Info.Fame = dwFameOrMerits; char strText[200], strRace[100], strClass[100]; if(cRaceRank) sprintf(strRace, g_StringTable.m_strString[363], cRaceRank); else strcpy(strRace, g_StringTable.m_strString[369]); if(cClassRank) sprintf(strClass, g_StringTable.m_strString[363], cClassRank); else strcpy(strClass, g_StringTable.m_strString[369]); sprintf(strText, g_StringTable.m_strString[364], g_ClientMain.m_csStatus.m_Info.Fame, strRace, strClass); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); } break; case ClientSocket::FameInfoType_Merits: { g_ClientMain.m_csStatus.m_Info.Merits = dwFameOrMerits; char strText[200], strRace[100], strClass[100]; if(cRaceRank) sprintf(strRace, g_StringTable.m_strString[363], cRaceRank); else strcpy(strRace, g_StringTable.m_strString[369]); if(cClassRank) sprintf(strClass, g_StringTable.m_strString[363], cClassRank); else strcpy(strClass, g_StringTable.m_strString[369]); sprintf(strText, g_StringTable.m_strString[384], g_ClientMain.m_csStatus.m_Info.Merits, strRace, strClass); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); } break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharPartyFind(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID; unsigned char cMemberFindPartyNum, cPartyFindMemberNum; LPMemberFindParty lpMember; LPPartyFindMember lpParty; m_dwNetworkError = m_pSocket->HandleCharPartyFind(aryBuffer, &dwChrID, &cMemberFindPartyNum, &cPartyFindMemberNum, &lpMember, &lpParty); if(0 == m_dwNetworkError) { unsigned long i; g_ClientMain.m_cNumMember = cMemberFindPartyNum; ZeroMemory(g_ClientMain.m_mfpMember, sizeof(g_ClientMain.m_mfpMember)); for(i = 0; i < cMemberFindPartyNum; i++) { strcpy(g_ClientMain.m_mfpMember[i].m_strName, lpMember[i].m_strName); g_ClientMain.m_mfpMember[i].m_cLevel = lpMember[i].m_cLevel; g_ClientMain.m_mfpMember[i].m_cClass = lpMember[i].m_cClass; } g_ClientMain.m_cNumParty = cPartyFindMemberNum; ZeroMemory(g_ClientMain.m_pfmParty, sizeof(g_ClientMain.m_pfmParty)); for(i = 0; i < cPartyFindMemberNum; i++) { strcpy(g_ClientMain.m_pfmParty[i].m_strLeaderName, lpParty[i].m_strLeaderName); g_ClientMain.m_pfmParty[i].m_cAverageLevel = lpParty[i].m_cAverageLevel; g_ClientMain.m_pfmParty[i].m_cMemberNum = lpParty[i].m_cMemberNum; } /* g_ClientMain.m_cNumMember = 20; ZeroMemory(g_ClientMain.m_mfpMember, sizeof(g_ClientMain.m_mfpMember)); for(i = 0; i < 20; i++) { strcpy(g_ClientMain.m_mfpMember[i].m_strName, "Belldandy"); g_ClientMain.m_mfpMember[i].m_cLevel = i + 1; g_ClientMain.m_mfpMember[i].m_cClass = 18; } g_ClientMain.m_cNumParty = 20; ZeroMemory(g_ClientMain.m_pfmParty, sizeof(g_ClientMain.m_pfmParty)); for(i = 0; i < 20; i++) { strcpy(g_ClientMain.m_pfmParty[i].m_strLeaderName, "Belldandy"); g_ClientMain.m_pfmParty[i].m_cAverageLevel = i + 1; g_ClientMain.m_pfmParty[i].m_cMemberNum = 18; }*/ return TRUE; } return FALSE; } BOOL CNetwork::ParseCharSpellInfo(char *aryBuffer) { unsigned long dwChrID; unsigned char cSpellType; unsigned short wEnchantLevel; bool bOnOff; m_dwNetworkError = m_pSocket->HandleCharSpellInfo(aryBuffer, &dwChrID, &cSpellType, &wEnchantLevel, &bOnOff); if(0 == m_dwNetworkError) { CCreature *lpCreature = g_CharacterData.GetCreature(dwChrID); if(lpCreature) { if(bOnOff) { if(lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) lpCreature->SetChantEffect(cSpellType, TRUE, TRUE); else lpCreature->SetChantEffect(cSpellType, TRUE, FALSE); if(lpCreature->GetChantFlag(17) && lpCreature->m_dwChrID == g_CharacterData.m_dwAutoTargetID) { g_CharacterData.m_bAutoTargetAttack = false; g_CharacterData.m_dwAutoTargetID = 0xFFFFFFFF; } } else { if(lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) lpCreature->SetChantEffect(cSpellType, FALSE, TRUE); else lpCreature->SetChantEffect(cSpellType, FALSE, FALSE); } } if(dwChrID == g_ClientMain.m_dwMyChrID) { if(bOnOff) { g_ClientMain.m_csStatus.m_aryEnchantLevel[cSpellType - 1] = wEnchantLevel; } else { g_ClientMain.m_csStatus.m_aryEnchantLevel[cSpellType - 1] = 0; unsigned short wSkill = g_ClientMain.m_csStatus.GetSkillIDbyChantID(cSpellType); if(wSkill) g_ClientMain.SetSkillCoolDown(wSkill); } g_ClientMain.m_csStatus.StatusUpdate(); if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->GetChantFlag(25) || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->GetChantFlag(26)) { g_CharacterData.InitGlobalAction(); if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_RUN || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_SWIM || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_WALK || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_WALKBACK || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_WALKLEFT || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_WALKRIGHT || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_FORWARDJUMP || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_BACKJUMP || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_JUMPATTACK || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_FRONTDASH || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_BACKDASH || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_LEFTDASH || g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwLowerChrAction == CA_RIGHTDASH) { g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bUpperAble = TRUE; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bLowerAble = TRUE; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bUpperAnimating = FALSE; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bLowerAnimating = FALSE; if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->GetChantFlag(25)) g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->SetAction(CA_WAIT, CA_WAIT); else g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->SetAction(CA_STUN, CA_STUN); } } } return TRUE; } return FALSE; } BOOL CNetwork::ParseControlOption(char *aryBuffer) { RejectOption roOption; unsigned long dwChrID; m_dwNetworkError = m_pSocket->HandleControlOption(aryBuffer, &dwChrID, &roOption); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { g_ClientMain.m_roOption.m_wReject = roOption.m_wReject; return TRUE; } } return FALSE; } BOOL CNetwork::ParseCharSkillUnLock(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned long dwChrID, dwGold; unsigned short wSkill; unsigned char cIndex; Item::ItemPos pItemIndex; m_dwNetworkError = m_pSocket->HandleCharSkillUnLock(aryBuffer, &dwChrID, &wSkill, &cIndex, &pItemIndex, &dwGold); if(0 == m_dwNetworkError) { if(g_ClientMain.m_dwMyChrID == dwChrID) { if(g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill == wSkill) { g_ClientMain.m_csStatus.m_Skill.wSkillNum -= g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel; g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cLockCount--; g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel = 6; if(g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]) { delete g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]; g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex] = new CItemInstance; g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->SetSkillInfo(g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill, g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cLockCount, g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel, ClientSocket::ItemPos_SSlot, cIndex, 0); char strText[MAX_PATH]; sprintf(strText, g_StringTable.m_strString[385], g_ClientMain.m_csStatus.m_lstSkillSlot[cIndex]->GetItemInfo().m_SpriteData.m_szName); g_TextEdit.AddMessage(strText, g_ClientMain.m_dwMyChrID, 128); g_ClientMain.m_csStatus.StatusUpdate(); } long lCoolTime; for(int i = 0; i < 10; i++) { if(g_ClientMain.m_csStatus.m_lstQuickSlot[i] && g_ClientMain.m_csStatus.m_lstQuickSlot[i]->GetProtoTypeID() == wSkill) { lCoolTime = g_ClientMain.m_csStatus.m_lstQuickSlot[i]->m_lCoolDownTimeCount; BOOL bSelected = FALSE; if(g_ClientMain.m_csStatus.m_lpQuickSelected == g_ClientMain.m_csStatus.m_lstQuickSlot[i]) { bSelected = TRUE; g_ClientMain.m_Network.SetChant(NULL); g_ClientMain.m_csStatus.SetActivateSkill(NULL); } delete g_ClientMain.m_csStatus.m_lstQuickSlot[i]; g_ClientMain.m_csStatus.m_lstQuickSlot[i] = new CItemInstance; g_ClientMain.m_csStatus.m_lstQuickSlot[i]->SetSkillInfo(g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.wSkill, g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cLockCount, g_ClientMain.m_csStatus.m_Skill.SSlot[cIndex].SKILLINFO.cSkillLevel, ClientSocket::ItemPos_QSlot, i, lCoolTime); if(bSelected) { g_ClientMain.m_Network.SetChant(g_ClientMain.m_csStatus.m_lstQuickSlot[i]); g_ClientMain.m_csStatus.SetActivateSkill(g_ClientMain.m_csStatus.m_lstQuickSlot[i]); } } } } // ¾ÆÀÌÅÛ »èÁ¦ CItemInstance *lpItem = g_ClientMain.m_csStatus.GetInventoryItem(pItemIndex.m_cIndex); if(lpItem) { unsigned long dwNum = lpItem->GetNowDurability() - 1; lpItem->SetNowDurability(dwNum); if(lpItem->GetNowDurability() <= 0) { g_ClientMain.m_csStatus.DeleteInventoryItem(lpItem); delete lpItem; } else { g_ClientMain.m_csStatus.SetQuickSlot(lpItem); } } else { } // °ñµå g_ClientMain.m_csStatus.m_Info.Gold = dwGold; g_ClientMain.m_csStatus.StatusUpdate(); } return TRUE; } return FALSE; } BOOL CNetwork::ParseDepositUpdate(char *aryBuffer) { unsigned long dwFlag; unsigned char cTab; unsigned short wStoreSize; bool bComplete; char *lpStoreBuffer; m_dwNetworkError = m_pSocket->HandleDepositUpdate(aryBuffer, &dwFlag, &cTab, &bComplete, &wStoreSize, &lpStoreBuffer); if(0 == m_dwNetworkError) { g_ClientMain.m_csStatus.m_dwDepositFlag = dwFlag; // â°í ¾ÆÀÌÅÛ unsigned short wBufferSize = 0; while(wBufferSize < wStoreSize) { CItemInstance *lpItem; lpItem = new CItemInstance; size_t nDBSize = wStoreSize - wBufferSize; lpItem->SetItemInfo(lpStoreBuffer, nDBSize); wBufferSize += nDBSize; lpStoreBuffer += nDBSize; g_ClientMain.m_csStatus.AddDepositItem(lpItem, FALSE); } if(g_ClientMain.m_csStatus.m_dwDepositFlag & PktDepositUpdateDB::ITEM_TAB1) g_ClientMain.m_csStatus.m_dwMaxTab = 1; if(g_ClientMain.m_csStatus.m_dwDepositFlag & PktDepositUpdateDB::ITEM_TAB2) g_ClientMain.m_csStatus.m_dwMaxTab = 2; if(g_ClientMain.m_csStatus.m_dwDepositFlag & PktDepositUpdateDB::ITEM_TAB3) g_ClientMain.m_csStatus.m_dwMaxTab = 3; if(g_ClientMain.m_csStatus.m_dwDepositFlag & PktDepositUpdateDB::ITEM_TAB4) g_ClientMain.m_csStatus.m_dwMaxTab = 4; if(g_ClientMain.m_csStatus.m_dwDepositFlag & PktDepositUpdateDB::USED_DEPOSIT) g_ClientMain.m_csStatus.m_cUsedDeposit = 1; else g_ClientMain.m_csStatus.m_cUsedDeposit = 0; if(g_ClientMain.m_csStatus.m_dwDepositFlag & PktDepositUpdateDB::SAVED_PASSWORD) g_ClientMain.m_csStatus.m_cSavePass = 1; else g_ClientMain.m_csStatus.m_cSavePass = 0; if(bComplete) { m_bCompleteDeposit = TRUE; if(m_bCharLoginSuccess && m_bCompleteDeposit) { m_nsNetworkState = NS_UPDATEADDRESS; m_bUpdateAddressPacket = FALSE; } } return TRUE; } return FALSE; } BOOL CNetwork::ParseDeposit(char *aryBuffer) { unsigned char cCmd; unsigned long dwGold; char cSavePass; m_dwNetworkError = m_pSocket->HandleDeposit(aryBuffer, &cCmd, &dwGold, &cSavePass); if(0 == m_dwNetworkError) { // â°í ¾ÆÀÌÅÛ switch(cCmd) { case PktDeposit::LOGIN: ((CHumanVault *)g_ClientMain.m_lpInterface->m_lstWindow[19])->ShowNormal(); ((CHumanVault *)g_ClientMain.m_lpInterface->m_lstWindow[19])->m_bLogined = TRUE; strcpy(((CHumanVault *)g_ClientMain.m_lpInterface->m_lstWindow[19])->m_strCurPass, ""); strcpy(((CHumanVault *)g_ClientMain.m_lpInterface->m_lstWindow[19])->m_strNewPass, ""); g_ClientMain.SetFocus(); g_TextEdit.InitMessage(); g_TextEdit.m_dwEditMode = EDITMODE_CHAT; g_TextEdit.SetEditLength(100); break; case PktDeposit::BUY_TAB: { unsigned long dwGold[4] = { 0, 100000, 1000000, 5000000 }; g_ClientMain.m_csStatus.m_Info.Gold -= dwGold[g_ClientMain.m_csStatus.m_dwMaxTab]; g_ClientMain.m_csStatus.m_dwMaxTab++; } break; case PktDeposit::LOGOUT: break; case PktDeposit::CHANGE_PASS: if(!g_ClientMain.m_csStatus.m_cUsedDeposit) { m_pSocket->StoreLogin(((CHumanVault *)g_ClientMain.m_lpInterface->m_lstWindow[19])->m_strNewPass, ((CHumanVault *)g_ClientMain.m_lpInterface->m_lstWindow[19])->m_cSavePass); g_ClientMain.m_csStatus.m_cUsedDeposit = 1; } else { ((CHumanVault *)g_ClientMain.m_lpInterface->m_lstWindow[19])->ShowNormal(); g_ClientMain.SetFocus(); g_TextEdit.InitMessage(); g_TextEdit.m_dwEditMode = EDITMODE_CHAT; g_TextEdit.SetEditLength(100); } break; case PktDeposit::SAVED_PASS: g_ClientMain.m_csStatus.m_dwDepositGold = dwGold; g_ClientMain.m_csStatus.m_cSavePass = cSavePass; break; } return TRUE; } else { switch(m_dwNetworkError) { case 3: g_TextEdit.InitMessage(); strcpy(((CHumanVault *)g_ClientMain.m_lpInterface->m_lstWindow[19])->m_strCurPass, ""); strcpy(((CHumanVault *)g_ClientMain.m_lpInterface->m_lstWindow[19])->m_strNewPass, ""); switch(cCmd) { case PktDeposit::LOGIN: g_TextEdit.m_dwEditMode = EDITMODE_DEPOSITPASS; break; case PktDeposit::CHANGE_PASS: g_TextEdit.m_dwEditMode = EDITMODE_CURPASS; break; } break; } } return FALSE; } BOOL CNetwork::ParseCharStallOpen(char *aryBuffer) { unsigned long dwChrID; char strStallName[32]; m_dwNetworkError = m_pSocket->HandleCharStallOpen(aryBuffer, &dwChrID, strStallName); if(0 == m_dwNetworkError) { CCreature *lpCreature = g_CharacterData.GetCreature(dwChrID); if(strcmp(strStallName, "")) { // ³ëÁ¡»óÀ» ¿­¾ú´Ù. if(lpCreature) { strcpy(lpCreature->m_strStreetStallName, strStallName); if(lpCreature->m_dwChrID == g_ClientMain.m_dwMyChrID) { if(g_ClientMain.m_lpInterface) g_ClientMain.m_lpInterface->InitStreetStall(lpCreature->m_dwChrID, lpCreature->m_strName); } } } else { // ³ëÁ¡»óÀ» ´Ý¾Ò´Ù. if(lpCreature) strcpy(lpCreature->m_strStreetStallName, ""); if(((CHumanStreetStall *)g_ClientMain.m_lpInterface->m_lstWindow[20])) { if(((CHumanStreetStall *)g_ClientMain.m_lpInterface->m_lstWindow[20])->m_bShow) { if(((CHumanStreetStall *)g_ClientMain.m_lpInterface->m_lstWindow[20])->m_dwMarketOwnerID == dwChrID) { ((CHumanStreetStall *)g_ClientMain.m_lpInterface->m_lstWindow[20])->ShowWindow(FALSE); } } } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharStallEnter(char *aryBuffer) { unsigned long dwCustomerID, dwOwner; m_dwNetworkError = m_pSocket->HandleCharStallEnter(aryBuffer, &dwCustomerID, &dwOwner); if(0 == m_dwNetworkError) { if(dwOwner) { if(dwCustomerID == g_ClientMain.m_dwMyChrID) { // ³»°¡ µé¾î°¬´Ù. g_ClientMain.m_bStreetStallEnter = TRUE; CCreature *lpCreature = g_CharacterData.GetCreature(dwOwner); if(lpCreature) { if(g_ClientMain.m_lpInterface) { g_ClientMain.m_lpInterface->InitStreetStall(lpCreature->m_dwChrID, lpCreature->m_strName); return TRUE; } } } else { // ´©°¡ µé¾î¿Ô´Ù. CCreature *lpCreature = g_CharacterData.GetCreature(dwCustomerID); char strText[MAX_PATH]; if(lpCreature) { sprintf(strText, g_StringTable.m_strString[392], lpCreature->m_strName); } else { strcpy(strText, g_StringTable.m_strString[393]); } g_TextEdit.AddStallChatMessage(strText, dwCustomerID, 128); } } else { if(dwCustomerID != g_ClientMain.m_dwMyChrID) { // »ç¶÷ÀÌ ³ª°¬´Ù. CCreature *lpCreature = g_CharacterData.GetCreature(dwCustomerID); char strText[MAX_PATH]; if(lpCreature) { sprintf(strText, g_StringTable.m_strString[394], lpCreature->m_strName); } else { strcpy(strText, g_StringTable.m_strString[395]); } g_TextEdit.AddStallChatMessage(strText, dwCustomerID, 128); } else { g_ClientMain.m_bStreetStallEnter = FALSE; } } } return FALSE; } BOOL CNetwork::ParseCharStallRegisterItem(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; unsigned char cCmd; unsigned long dwChrID, dwGold; TakeType pTakeType; m_dwNetworkError = m_pSocket->HandleCharStallRegisterItem(aryBuffer, &dwChrID, &pTakeType, &dwGold, &cCmd); if(0 == m_dwNetworkError) { switch(cCmd) { case ClientSocket::StallCmd_Register: { // ¹°°ÇÀ» µî·ÏÇß´Ù. CItemInstance *lpItem = new CItemInstance; if(lpItem->SetItemInfo(g_ClientMain.m_lpPickItem, pTakeType.m_dstPos)) { lpItem->m_lpItemBase->SetStallPrice(dwGold); lpItem->m_bTradeItem = TRUE; g_ClientMain.m_csStatus.AddStreetTradeItem(lpItem); g_ClientMain.m_csStatus.AddInventoryItem(g_ClientMain.m_lpPickItem); g_ClientMain.SetPickItem(NULL); } else { g_ClientMain.m_Network.m_pSocket->CharStallRegisterItem(g_ClientMain.m_dwMyChrID, pTakeType, dwGold, ClientSocket::StallCmd_Cancel); } } break; case ClientSocket::StallCmd_ChangePrice: // °¡°ÝÀ» ¹Ù²å´Ù. { CItemInstance *lpItem = g_ClientMain.m_csStatus.GetStreetTradeItem(pTakeType.m_dstPos); if(lpItem) { lpItem->m_lpItemBase->SetStallPrice(dwGold); } } break; case ClientSocket::StallCmd_Cancel: // ¹°°ÇÀ» ³»¸®°Å³ª ÆÈ·È´Ù. { CItemInstance *lpItem = g_ClientMain.m_csStatus.GetStreetTradeItem(pTakeType.m_dstPos); if(lpItem) { if(lpItem->GetIsEnableStack()) { if(lpItem->GetNowDurability() > pTakeType.m_cNum) { unsigned long dwNum = lpItem->GetNowDurability() - pTakeType.m_cNum; lpItem->SetNowDurability(dwNum); } else { g_ClientMain.m_csStatus.DeleteStreetTradeItem(lpItem); } } else { g_ClientMain.m_csStatus.DeleteStreetTradeItem(lpItem); } } else if(g_ClientMain.m_lpPickItem) { if(dwChrID == g_ClientMain.m_dwMyChrID) { delete g_ClientMain.m_lpPickItem; g_ClientMain.SetPickItem(NULL); } } } break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharStallItemInfo(char *aryBuffer) { unsigned long dwSize, *dwPrice; char *lpBuffer; unsigned short wItemNum; m_dwNetworkError = m_pSocket->HandleCharStallItemInfo(aryBuffer, &dwSize, &lpBuffer, &wItemNum, &dwPrice); if(0 == m_dwNetworkError) { unsigned short wBufferSize = 0, count = 0; while(wBufferSize < dwSize) { CItemInstance *lpItem; lpItem = new CItemInstance; size_t nDBSize = dwSize - wBufferSize; lpItem->SetItemInfo(lpBuffer, nDBSize); lpItem->m_bTradeItem = TRUE; lpItem->m_lpItemBase->SetStallPrice(dwPrice[count]); count++; wBufferSize += nDBSize; lpBuffer += nDBSize; g_ClientMain.m_csStatus.AddStreetTradeItem(lpItem, FALSE); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharTeamBattleInfo(char *aryBuffer) { unsigned long aryMemberID[10], dwChrID; unsigned char cMember, cCmd, aryMemberLevel[10]; char strName[16]; ZeroMemory(strName, sizeof(strName)); m_dwNetworkError = m_pSocket->HandleCharTeamBattleInfo(aryBuffer, &dwChrID, strName, &cCmd, &cMember, aryMemberID, aryMemberLevel); if(0 == m_dwNetworkError) { if(!g_ClientMain.m_lpInterface) return TRUE; switch(cCmd) { case ClientSocket::DuelCmd_RequestPartyInfo: { g_ClientMain.m_lpInterface->m_dwPartyDuelCmdResult = 0; g_ClientMain.m_lpInterface->m_dwPartyDuelCmdType = ClientSocket::DuelCmd_RequestPartyInfo; g_ClientMain.m_lpInterface->m_dwPartyDuelCmdSenderID = dwChrID; char strText[MAX_PATH], strTemp[MAX_PATH]; sprintf(strText, g_StringTable.m_strString[396], strName, cMember, aryMemberLevel[0]); for(unsigned long i = 1; i < cMember; i++) { sprintf(strTemp, ",%d", aryMemberLevel[i]); strcat(strText, strTemp); } strcat(strText, g_StringTable.m_strString[397]); CGUIMessageBox *lpMessageBox; lpMessageBox = new CGUIMessageBox; lpMessageBox->SetWordBreak(TRUE); lpMessageBox->Create(strText, MB_EXIT | MB_YES | MB_NO); lpMessageBox->SetResult(&g_ClientMain.m_lpInterface->m_dwPartyDuelCmdResult); } break; case ClientSocket::DuelCmd_PartyPropose: { g_ClientMain.m_lpInterface->m_dwPartyDuelCmdResult = 0; g_ClientMain.m_lpInterface->m_dwPartyDuelCmdType = ClientSocket::DuelCmd_PartyPropose; g_ClientMain.m_lpInterface->m_dwPartyDuelCmdSenderID = dwChrID; char strText[MAX_PATH], strTemp[MAX_PATH]; sprintf(strText, g_StringTable.m_strString[396], strName, cMember, aryMemberLevel[0]); for(unsigned long i = 1; i < cMember; i++) { sprintf(strTemp, ",%d", aryMemberLevel[i]); strcat(strText, strTemp); } strcat(strText, g_StringTable.m_strString[398]); CGUIMessageBox *lpMessageBox; lpMessageBox = new CGUIMessageBox; lpMessageBox->SetWordBreak(TRUE); lpMessageBox->Create(strText, MB_EXIT | MB_YES | MB_NO); lpMessageBox->SetResult(&g_ClientMain.m_lpInterface->m_dwPartyDuelCmdResult); } break; case ClientSocket::DuelCmd_PartyReady: // ÆÀ ¹èƲ ½ÃÀÛ { g_CharacterData.InitDuelTarget(); for(unsigned long i = 0; i < cMember; i++) { g_CharacterData.SetPreDuelTarget(aryMemberID[i]); } if(g_CharacterData.m_lpDuelReady) { CSceneManager::m_EffectManager.DeleteInterfaceScript(g_CharacterData.m_lpDuelReady); g_CharacterData.m_lpDuelReady = NULL; } // _ASSERTE(_CrtCheckMemory()); g_CharacterData.m_lpDuelReady = new CEffScript; g_CharacterData.m_lpDuelReady->SetInterfaceSet(true); g_CharacterData.m_lpDuelReady->GetScriptBinData("inter_duel.esf"); CSceneManager::m_EffectManager.AddInterfaceScript(g_CharacterData.m_lpDuelReady); } break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharEliteBonus(char *aryBuffer) { char cNation; unsigned char cLevel; m_dwNetworkError = m_pSocket->HandleCharEliteBonus(aryBuffer, &cNation, &cLevel); if(0 == m_dwNetworkError) { g_ClientMain.m_cEliteNation = cNation; g_ClientMain.m_cEliteLevel = cLevel; return TRUE; } return FALSE; } BOOL CNetwork::ParseCharStartQuest(char *aryBuffer) { unsigned long dwChrID, dwNpcID; unsigned short wQuestID; m_dwNetworkError = m_pSocket->HandleCharStartQuest(aryBuffer, &dwChrID, &dwNpcID, &wQuestID); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { LPNPCNode lpNode = g_NPCList.GetNPCNode(dwNpcID); if(lpNode) { LPQuestNode lpQuest = lpNode->GetQuestforID(wQuestID); if(lpQuest) { // CharStatus¿¡ ÀÖ´Â Äù½ºÆ® ±¸Á¶Ã¼¿Í ½ºÅ©¸³Æ®¿¡ ÀÖ´Â Äù½ºÆ®¸¦ ¸µÅ©½ÃŲ´Ù. // ÀÚµ¿ÀûÀ¸·Î ÆäÀÌÁî1ÀÌ ½ÃÀÛ LPQuestInstance lpQuestInstance = new QuestInstance; lpQuestInstance->m_dwQuestID = wQuestID; lpQuestInstance->m_lpQuestScript = lpQuest; lpQuestInstance->StartPhase(1); g_ClientMain.m_csStatus.m_lstQuest.push_front(lpQuestInstance); } } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharOperateTrigger(char *aryBuffer) { unsigned long dwChrID; unsigned short wQuestID; unsigned char cPhase, cTrigger, cCount; m_dwNetworkError = m_pSocket->HandleCharOperateTrigger(aryBuffer, &dwChrID, &wQuestID, &cPhase, &cTrigger, &cCount); BOOL bSuccessTrigger; if(0 == m_dwNetworkError) { bSuccessTrigger = TRUE; } else { bSuccessTrigger = FALSE; } if(dwChrID == g_ClientMain.m_dwMyChrID) { LPQuestInstance lpQuest = g_ClientMain.m_csStatus.GetProcessQuest(wQuestID); if(lpQuest) { if(lpQuest->m_dwPresentPhase == cPhase) { // ÇöÀç ÆäÀÌÁî lpQuest->StartTrigger(lpQuest->m_lpPhaseScript->m_lstTrigger[cTrigger], bSuccessTrigger); } else { // ´Ù¸¥ ÆäÀÌÁî lpQuest->StartPhase(cPhase); lpQuest->StartTrigger(lpQuest->m_lpPhaseScript->m_lstTrigger[cTrigger], bSuccessTrigger); } if(bSuccessTrigger) { lpQuest->m_lstTriggerCount[cTrigger] = cCount; } } else { // ½ÇÇàÁßÀÌÁö ¾ÊÀº Äù½ºÆ® } } return TRUE; } BOOL CNetwork::ParseCharDisappearItme(char *aryBuffer) { unsigned long dwChrID; Item::ItemPos pItemIndex; unsigned char cNum; m_dwNetworkError = m_pSocket->HandleCharDisappearItme(aryBuffer, &dwChrID, &pItemIndex, &cNum); if(0 == m_dwNetworkError) { if(g_ClientMain.m_lpPickItem) { switch(g_ClientMain.m_lpPickItem->GetItemPos()) { case ClientSocket::ItemPos_Inven: g_ClientMain.m_csStatus.AddInventoryItem(g_ClientMain.m_lpPickItem); break; } } CItemInstance *lpTemp = g_ClientMain.m_csStatus.GetInventoryItem(pItemIndex); if(lpTemp) { if(cNum == 0) { g_ClientMain.m_csStatus.DeleteInventoryItem(lpTemp); } else { lpTemp->SetNowDurability(cNum); } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharFriendDB(char *aryBuffer) { char *lpFriendList; unsigned long dwSize; unsigned char cDataType; m_dwNetworkError = m_pSocket->HandleCharFriendDB(aryBuffer, &cDataType, &lpFriendList, &dwSize); if(0 == m_dwNetworkError) { switch(cDataType) { case PktFriendDB::FRIEND_LIST: { unsigned long dwNum = dwSize / sizeof(FriendInfo); FriendInfo *lpFriendInfo; for(unsigned long i = 0; i < dwNum; i++) { lpFriendInfo = new FriendInfo; lpFriendInfo->m_dwCID = ((FriendInfo *)lpFriendList)->m_dwCID; lpFriendInfo->m_dwStatusFlag = ((FriendInfo *)lpFriendList)->m_dwStatusFlag; strcpy(lpFriendInfo->m_szName, ((FriendInfo *)lpFriendList)->m_szName); g_ClientMain.m_csStatus.m_lstFriendList.push_back(lpFriendInfo); lpFriendList += sizeof(FriendInfo); } } break; case PktFriendDB::BAN_LIST: { unsigned long dwNum = dwSize / sizeof(BanInfo); BanInfo *lpBanInfo; for(unsigned long i = 0; i < dwNum; i++) { lpBanInfo = new BanInfo; lpBanInfo->m_dwCID = ((BanInfo *)lpFriendList)->m_dwCID; strcpy(lpBanInfo->m_szName, ((BanInfo *)lpFriendList)->m_szName); g_ClientMain.m_csStatus.m_lstBanList.push_back(lpBanInfo); lpFriendList += sizeof(BanInfo); } } break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharFriendAck(char *aryBuffer) { unsigned char cCmd; unsigned long dwCID; char *strName; m_dwNetworkError = m_pSocket->HandleCharFriendAck(aryBuffer, &cCmd, &dwCID, &strName); char strMessage[MAX_PATH]; if(0 == m_dwNetworkError) { switch(cCmd) { case PktFriendAck::ADD_FRIEND_ACK: g_ClientMain.m_csStatus.AddFriend(dwCID, strName); sprintf(strMessage, g_StringTable.m_strString[407], strName); g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 128); break; case PktFriendAck::MOVE_BAN_TO_FRIEND: g_ClientMain.m_csStatus.DeleteBan(dwCID); g_ClientMain.m_csStatus.AddFriend(dwCID, strName); sprintf(strMessage, g_StringTable.m_strString[407], strName); g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 128); break; case PktFriendAck::REMOVE_FRIEND_ACK: g_ClientMain.m_csStatus.DeleteFriend(dwCID); sprintf(strMessage, g_StringTable.m_strString[408], strName); g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 128); break; case PktFriendAck::FRIEND_LOGIN: { FriendInfo *lpFriend = g_ClientMain.m_csStatus.GetFriend(dwCID); if(lpFriend) { lpFriend->SetLoginStatus(true); sprintf(strMessage, g_StringTable.m_strString[409], strName); g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 128); } } break; case PktFriendAck::FRIEND_LOGOUT: { FriendInfo *lpFriend = g_ClientMain.m_csStatus.GetFriend(dwCID); if(lpFriend) { lpFriend->SetLoginStatus(false); sprintf(strMessage, g_StringTable.m_strString[410], strName); g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 128); } } break; case PktFriendAck::ADD_BAN_ACK: g_ClientMain.m_csStatus.AddBan(dwCID, strName); sprintf(strMessage, g_StringTable.m_strString[411], strName); g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 128); break; case PktFriendAck::MOVE_FRIEND_TO_BAN: g_ClientMain.m_csStatus.DeleteFriend(dwCID); g_ClientMain.m_csStatus.AddBan(dwCID, strName); sprintf(strMessage, g_StringTable.m_strString[411], strName); g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 128); break; case PktFriendAck::REMOVE_BAN_ACK: g_ClientMain.m_csStatus.DeleteBan(dwCID); sprintf(strMessage, g_StringTable.m_strString[412], strName); g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 128); break; } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharFriendRegistered(char *aryBuffer) { char strName[16]; unsigned long dwChrID; m_dwNetworkError = m_pSocket->HandleCharFriendRegistered(aryBuffer, &dwChrID, strName); if(0 == m_dwNetworkError) { char strMessage[MAX_PATH]; if(g_ClientMain.m_csStatus.GetIsFriend(dwChrID)) { sprintf(strMessage, g_StringTable.m_strString[413], strName, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strName); g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 128); } else { sprintf(strMessage, g_StringTable.m_strString[414], strName); CGUIMessageBox *lpMessageBox = new CGUIMessageBox; lpMessageBox->SetWordBreak(TRUE); lpMessageBox->Create(strMessage, MB_YES | MB_NO | MB_EXIT); lpMessageBox->SetResult(&g_ClientMain.m_dwFriendResult); g_ClientMain.m_dwFriendResult = 0; strcpy(g_ClientMain.m_strFriendName, strName); } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharQuestInfo(char *aryBuffer) { unsigned long dwChrID; unsigned short wEQNum, wHQNum; PktQuestDB::ExecutingQuest *lpEQ; unsigned short *lpHQ; m_dwNetworkError = m_pSocket->HandleCharQuestInfo(aryBuffer, &dwChrID, &wEQNum, &lpEQ, &wHQNum, &lpHQ); if(0 == m_dwNetworkError) { unsigned long i; for(i = 0; i < wEQNum; i++) { LPQuestNode lpQuest = g_NPCList.GetQuest(lpEQ[i].m_wQuestID); if(lpQuest) { LPQuestInstance lpQuestInstance = new QuestInstance; lpQuestInstance->m_dwQuestID = lpEQ[i].m_wQuestID; lpQuestInstance->m_lpQuestScript = lpQuest; lpQuestInstance->m_dwPresentPhase = lpEQ[i].m_cPhase; lpQuestInstance->m_lpPhaseScript = lpQuestInstance->m_lpQuestScript->GetPhase(lpQuestInstance->m_dwPresentPhase); for(unsigned long j = 0; j < PktQuestDB::MAX_TRIGGER; j++) { lpQuestInstance->m_lstTriggerCount.push_back((unsigned long)lpEQ[i].m_cTriggerCount[j]); } g_ClientMain.m_csStatus.m_lstQuest.push_back(lpQuestInstance); } } return TRUE; }/**/ return TRUE; } BOOL CNetwork::ParseCharEndQuest(char *aryBuffer) { unsigned long dwChrID; unsigned short wQuestID; bool bSave; m_dwNetworkError = m_pSocket->HandleCharEndQuest(aryBuffer, &dwChrID, &wQuestID, &bSave); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { LPQuestInstance lpQuest = g_ClientMain.m_csStatus.GetProcessQuest(wQuestID); if(lpQuest) { g_ClientMain.m_csStatus.DeleteQuest(lpQuest); } else { // ½ÇÇàÁßÀÌÁö ¾ÊÀº Äù½ºÆ® } } return TRUE; } return TRUE; } BOOL CNetwork::ParseCharPeaceMode(char *aryBuffer) { unsigned long dwChrID; unsigned char cHour; bool bPeace; m_dwNetworkError = m_pSocket->HandleCharPeaceMode(aryBuffer, &dwChrID, &cHour, &bPeace); if(0 == m_dwNetworkError) { if(dwChrID == g_ClientMain.m_dwMyChrID) { if(cHour) { char strMessage[MAX_PATH]; if(bPeace) { sprintf(strMessage, "%d½Ã°£ ÀÌÈÄ¿¡ °¡ÀÔÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.", cHour); } else { sprintf(strMessage, "%d½Ã°£ ÀÌÈÄ¿¡ Å»ÅðÇÏ½Ç ¼ö ÀÖ½À´Ï´Ù.", cHour); } g_TextEdit.AddMessage(strMessage, g_ClientMain.m_dwMyChrID, 129); } else { g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bPeaceMode = bPeace; } } return TRUE; } return FALSE; } BOOL CNetwork::ParseCharAuthorizePanel(char *aryBuffer) { unsigned long dwCasterID; char strCasterName[16]; unsigned char cCmd; m_dwNetworkError = m_pSocket->HandleCharAuthorizePanel(aryBuffer, &dwCasterID, strCasterName, &cCmd); if(0 == m_dwNetworkError) { if(!g_ClientMain.m_cAuthorizeCmd) { char strMessage[MAX_PATH]; switch(cCmd) { case ClientSocket::APCmd_Resurrection: sprintf(strMessage, "%s´ÔÀÌ ·¹Àú·º¼ÇÀ» ´ç½Å¿¡°Ô ½ÃÀüÇϼ̽À´Ï´Ù. ÇöÀç ÀÚ¸®¿¡¼­ µÇ»ì¾Æ³ª½Ã°Ú½À´Ï±î? HP¿Í MP´Â 10¾¿ ³²°Ô µË´Ï´Ù.", strCasterName); break; case ClientSocket::APCmd_Recall: sprintf(strMessage, "%s´ÔÀÌ ¸®ÄÝÀ» ½ÃÀüÇϼ̽À´Ï´Ù. ÇØ´ç À§Ä¡·Î À̵¿ÇϽðڽÀ´Ï±î?", strCasterName); break; } CGUIMessageBox *lpMessageBox = new CGUIMessageBox; lpMessageBox->SetWordBreak(TRUE); lpMessageBox->Create(strMessage, MB_YES | MB_NO | MB_EXIT); lpMessageBox->SetResult(&g_ClientMain.m_dwAuthorizeResult); g_ClientMain.m_dwAuthorizeResult = 0; g_ClientMain.m_dwAuthorizeCasterID = dwCasterID; g_ClientMain.m_cAuthorizeCmd = cCmd; } return TRUE; } return FALSE; } /*BOOL CNetwork::ParseLUAck(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; m_dwNetworkError = m_pSocket->HandleLULUAckPt(aryBuffer, &g_ClientMain.m_dwUserID, g_ClientMain.m_scLoginChar); if(0 == m_dwNetworkError) { return TRUE; } return FALSE; } BOOL CNetwork::ParseLUCSAck(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; m_dwNetworkError = m_pSocket->HandleLUCSAckPt(m_aryBuffer, &g_ClientMain.m_dwUserID); if(0 == m_dwNetworkError) { ConnectToAgentServer(); return TRUE; } return FALSE; } BOOL CNetwork::ParseSULiAck(char *aryBuffer) { POS Pos; m_nsNetworkState = NS_NOWAITING; m_dwNetworkError = m_pSocket->HandleSULiAckPt(m_aryBuffer, &g_ClientMain.m_dwMyChrID, &Pos); if(0 == m_dwNetworkError) { g_ClientMain.m_vecStartPosition.x = Pos.fPointX * 100.0f; g_ClientMain.m_vecStartPosition.y = Pos.fPointY * 100.0f; g_ClientMain.m_vecStartPosition.z = Pos.fPointZ * 100.0f; // m_nServerIndexX = g_ClientMain.m_vecStartPosition.x / 800.0f; // m_nServerIndexY = g_ClientMain.m_vecStartPosition.z / 800.0f; m_nsNetworkState = NS_RECVCHARINFO; m_pSocket->GSSUpdateClientUDP(g_ClientMain.m_dwMyChrID); return TRUE; } return FALSE; } BOOL CNetwork::ParseSULiChInfo(char *aryBuffer) { m_nsNetworkState = NS_NOWAITING; m_dwNetworkError = m_pSocket->HandleSULiChInfoPt(aryBuffer, &g_ClientMain.m_csStatus.m_Info, &g_ClientMain.m_csStatus.m_Item, &g_ClientMain.m_csStatus.m_InfoEx, &g_ClientMain.m_csStatus.m_Relation, &g_ClientMain.m_csStatus.m_InfoPos, &g_ClientMain.m_dwServerTime); if(0 == m_dwNetworkError) { g_ClientMain.m_dwStartTime = GetTickCount(); // ½ºÅ³ â »¶³ª´Â °ÍÀ» Àâ±âÀ§ÇÑ ÄÚµå ////////////////////////////////////////////////////////////////////////////// /* for(int i = 0; i < MAX_SKILLSLOT; i++) { if(!GetSkillData(m_Status.m_InfoEx.Skill.SSlot[i].SKILLINFO.wSkill)) { m_Status.m_InfoEx.Skill.SSlot[i].SKILLINFO.wSkill = 0; } }*/ /* ////////////////////////////////////////////////////////////////////////////// g_ClientMain.m_csStatus.StatusUpdate(); // °ÔÀÓ ½ÃÀÛ g_ClientMain.m_lpInterface->InitGame(); return TRUE; } return FALSE; } BOOL CNetwork::ParseSUUAAck(char *aryBuffer) { m_dwNetworkError = m_pSocket->HandleSUUAAckPt(aryBuffer); if(!m_pSocket->IsRealIP()) { m_pSocket->UASConnect(g_ClientMain.m_dwMyChrID); } if(m_dwNetworkError != 0) { return FALSE; // CUserInterface::AddChatMessage("UDP Connect Failed",m_dwChrID,0); } return TRUE; } BOOL CNetwork::ParseSUCt(char *aryBuffer) { unsigned long dwSender, dwCmd; char strMessage[MAX_PATH]; m_dwNetworkError = m_pSocket->HandleSUCtPt(aryBuffer, &dwSender, strMessage, (int *)&dwCmd); if(m_dwNetworkError == 0) { switch(dwCmd) { /* case 3: // NPC ´ëÈ­ if(CUserInterface::m_nSelectNPCMethod == 0) { CUserInterface::AddChatMessage(strMessage, dwSender, dwCmd); } break; case 4: // °øÁö CUserInterface::AddNoticeMessage(strMessage, dwCmd); break; */ /* default: // äÆÃ ¸Þ½ÃÁö g_TextEdit.AddChatMessage(strMessage, dwSender, dwCmd); break; } return TRUE; } else { return FALSE; } }*/ void CNetwork::ProcessError(void) { CGUIMessageBox *lpMessageBox; if(m_dwNetworkError == 1) //1 = ¼­¹ö ¿¡·¯ { lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[296]); return; } switch(m_cNetworkPacketCommand) { case CmdUserLogin: switch(m_dwNetworkError) { case 2: //2 = µ¥ÀÌÅÍ ¾ò±â ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[297]); break; case 3: MessageBox(NULL, g_StringTable.m_strString[298], g_StringTable.m_strString[21], MB_OK); SendMessage(g_ClientMain.m_hWnd, WM_DESTROY, 0, 0); g_ClientMain.m_dwClientMode = CLIENT_END; break; case 4: lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[386]); break; case 5: lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[387]); break; } break; case CmdCharSelect: switch(m_dwNetworkError) { case 2: //2 = ¼­¹ö Æ÷È­ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[365]); break; case 3: //3 = ij¸¯ÅÍ ·Îµå ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[370]); break; /* case 4: //4 = ¼­¹ö ã±â ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[371]); break;*/ } break; case CmdCharMoveZone: switch(m_dwNetworkError) { case 5: //2 = ¼¼¼ÇÀÌ ¿­·Á ÀÖÁö ¾ÊÀ½ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[388]); break; } break; case CmdServerZone: switch(m_dwNetworkError) { case 2: // 2 = ij¸¯ÅÍ Á¸ÀÌ À߸ø µÇ¾î ÀÖ½À´Ï´Ù. lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[389]); break; case 4: // 4 = ÀοøÀÌ Ãʰú lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[390]); break; case 5: // 5 = ¼¼¼¢ÀÌ ¿­·Á ÀÖÁö ¾ÊÀ½ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[388]); break; } break; case CmdCharCreate: switch(m_dwNetworkError) { case 2: //2 = µ¥ÀÌÅÍ ¾ò±â ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[299]); break; case 3: //3 = Á¸ÀçÇϴ ij¸¯ÅÍ À̸§ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[300]); break; case 4: //4 = ºñ¾îÀÖÁö ¾ÊÀº ½½·Ô lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[301]); break; case 5: //5 = Àû´çÇÏÁö ¾ÊÀº À̸§ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[302]); break; case 6: //6 = À߸øµÈ »ý¼º µ¥ÀÌÅÍ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[303]); break; case 7: //7 = ±ÝÁöµÈ ´Ü¾î µé¾î°£ ij¸¯ÅÍ À̸§ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[304]); break; case 8: //8 = ¼¼¼ÇÀÌ ¿­·Á ÀÖÁö ¾ÊÀ½ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[388]); break; } break; case CmdCharDelete: switch(m_dwNetworkError) { case 2: //2 = µ¥ÀÌÅÍ »èÁ¦ ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[305]); break; case 3: //3 = ÀÌ¹Ì ·Î±×ÀÎ »èÁ¦ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[306]); break; case 4: //4 = ¼¼¼ÇÀÌ ¿­·Á ÀÖÁö ¾ÊÀ½ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[388]); break; } break; case CmdCharLogin: switch(m_dwNetworkError) { case 2: //2 = µ¥ÀÌÅÍ ¾ò±â ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[307]); break; case 4: //4 = ÀÌ¹Ì Á¢¼ÓÁß lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[308]); break; } break; case CmdCharTakeItem: switch(m_dwNetworkError) { case 2: //2 = ¾ÆÀÌÅÛ À̵¿ ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[309]); break; } break; case CmdCharSwapItem: switch(m_dwNetworkError) { case 2: //2 = ¼Ò½º À̵¿ ½ÇÆÐ case 3: //3 = ´ë»ó À̵¿ ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[310]); break; case 4: //4 = ½º¿Ò ºÒ°¡´É lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[311]); break; } break; case CmdCharTradeItem: switch(m_dwNetworkError) { case 2: //2 = ¾ÆÀÌÅÛ ÃßÃâ ½ÇÆÐ(Àåºñ/Àκ¥) lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[312]); break; case 3: //3 = NPC ãÀ» ¼ö ¾øÀ½ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[313]); break; case 4: //4 = ¾ÆÀÌÅÛ »ç±â ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[314]); break; case 5: //5 = ¾ÆÀÌÅÛ ³Ö±â ½ÇÆÐ(Àåºñ/Àκ¥) lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[315]); break; } break; case CmdCharPickUp: switch(m_dwNetworkError) { case 2: //2 = ¼¿ ¾ò±â ½ÇÆÐ case 3: //3 = ¼¿·ÎºÎÅÍ ¾ÆÀÌÅÛ ¾ò±â ½ÇÆÐ case 6: //4 = ¾ÆÀÌÅÛÀÌ ¾øÀ½ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[316]); break; case 5: //5 = ¼ÒÀ¯±ÇÀÌ ¾øÀ½ g_TextEdit.AddMessage(g_StringTable.m_strString[317], g_ClientMain.m_dwMyChrID, 129); break; case 4: //4 = Àκ¥¿¡ ³Ö±â ½ÇÆÐ case 7: //7 = ¾ÆÀÌÅÛ »ý¼º ½ÇÆÐ g_TextEdit.AddMessage(g_StringTable.m_strString[318], g_ClientMain.m_dwMyChrID, 129); break; } break; case CmdCharPullDown: switch(m_dwNetworkError) { case 2: //2 = ¼¿ ¾ò±â ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[319]); break; case 3: //3 = Àκ¥¿¡¼­ ¾ÆÀÌÅÛ ¾ò±â ½ÇÆÐ case 4: //4 = ¾ÆÀÌÅÛ ¶³±¸±â ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[320]); break; case 5: //5 = ºÎÀûÀýÇÑ ¾ÆÀÌÅÛÀÔ´Ï´Ù. lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[321]); break; } break; case CmdCharPartyCmd: switch(m_dwNetworkError) { case 2: //2 = ÀÌ¹Ì ÆÄƼ¿¡ °¡ÀԵǾî ÀÖ´Â °æ¿ì lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[322]); break; case 3: //3 = °¡ÀÔ ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[323]); break; case 4: //4 = ÅðÀå ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[324]); break; case 5: //5 = Å»Åð ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[325]); break; case 6: //4 = ¾çµµ ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[326]); break; case 7: //5 = ÆÄƼ Àοø Ãʰú lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[327]); break; case 9: // 9 = ÆÄƼ °ÅºÎ g_TextEdit.AddMessage(g_StringTable.m_strString[366], g_ClientMain.m_dwMyChrID, 129); break; } break; case CmdCharUseItem: switch(m_dwNetworkError) { case 2: //2 = »ç¿ë ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[328]); break; } break; case CmdCharSkillLock: switch(m_dwNetworkError) { case 2: //2 = ÇØ´ç À妽º¿¡ ½ºÅ³ ¾øÀ½ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[329]); break; case 3: //3 = ½ºÅ³´ç ¶ô ¼ö Ãʰú lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[330]); break; case 4: //4 = ¶ô ÇÒ¼ö ¾ø´Â ½ºÅ³ ·¹º§ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[331]); break; } break; case CmdCharSkillErase: switch(m_dwNetworkError) { case 2: //2 = ÇØ´ç À妽º¿¡ ½ºÅ³ ¾øÀ½ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[332]); break; case 3: //3 = ½ºÅ³ Áö¿ì±â ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[333]); break; } break; case CmdCharSkillCreate: switch(m_dwNetworkError) { case 2: //2 = ½½·Ô´ç ½ºÅ³ ¼ö Ãʰú lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[334]); break; case 3: //3 = ´Ù¸¥ ·¹º§ ½ºÅ³ ÀÍÈú¼ö ¾øÀ½ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[335]); break; case 4: //4 = ³²´Â ½ºÅ³ ½½·Ô ¾øÀ½ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[336]); { char strText[MAX_PATH], strTemp[MAX_PATH]; strcpy(strText, "[SkillErr Log] "); sprintf(strTemp, "Skill Create Failed = Level : %d, Int : %d, AddInt : %d", g_ClientMain.m_csStatus.m_Info.Level, g_ClientMain.m_csStatus.m_Info.INT, g_ClientMain.m_csStatus.m_lAddINT); strcat(strText, strTemp); m_pSocket->CharChat(g_ClientMain.m_dwMyChrID, ClientSocket::ChatType_ClientLog, strText, strlen(strText)); } break; case 5: //5 = ÇØ´ç Ŭ·¡½º ½ºÅ³ ¾Æ´Ô lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[337]); break; case 6: //6 = ½ºÅ³ Á¦ÇÑ ½ºÅ×ÀÌÅͽº Ãʰú lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[338]); break; } break; case CmdCharUpgradeItem: switch(m_dwNetworkError) { case 2: //2 = Àåºñ ¾ò±â ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[339]); break; case 3: //3 = ±¤¹° ¾ò±â ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[340]); break; case 4: //4 = Àåºñ ¾ÆÀÌÅÛ ¾Æ´Ô lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[341]); break; case 5: //5 = ±¤¹° ¾ÆÀÌÅÛ ¾Æ´Ô lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[342]); break; case 6: //6 = ¿ä±¸ ±¤¹° Ʋ¸² lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[343]); break; case 7: //7 = ¿ä±¸ ±¤¹° ¼ö Ʋ¸² lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[344]); break; case 8: //8 = Àåºñ Á¦°Å ½ÇÆÐ case 9: //9 = ¾ÆÀÌÅÛ »ý¼º ½ÇÆÐ case 10: //10 = ±¤¹° Á¦°Å ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[345]); break; } break; case CmdCharInstallSocket: switch(m_dwNetworkError) { case 2: //2 = Àåºñ ¾ò±â ½ÇÆÐ case 4: //4 = Àåºñ ¾ÆÀÌÅÛ ¾Æ´Ô lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[346]); break; case 3: //3 = Áª ¾ò±â ½ÇÆÐ case 5: //5 = Áª ¾ÆÀÌÅÛ ¾Æ´Ô lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[347]); break; case 6: //6 = Áª Á¦°Å ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[348]); break; } break; case CmdCharIncreasePoint: switch(m_dwNetworkError) { case 2: //2 = ÇÊ¿ä Áõ°¡ Æ÷ÀÎÆ® ºÎÁ· lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[349]); break; } break; case CmdCharSplitItem: switch(m_dwNetworkError) { case 2: //2 = ¾ÆÀÌÅÛ ½ºÅà ½ÇÆÐ lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[350]); break; } break; case CmdCharExchangeCmd: switch(m_dwNetworkError) { case 2: g_TextEdit.AddMessage(g_StringTable.m_strString[352], g_ClientMain.m_dwMyChrID, 129); break; case 3: g_TextEdit.AddMessage(g_StringTable.m_strString[355], g_ClientMain.m_dwMyChrID, 129); break; case 4: // 4 = ±³È¯ °ÅºÎ g_TextEdit.AddMessage(g_StringTable.m_strString[367], g_ClientMain.m_dwMyChrID, 129); break; } break; case CmdCharDuelCmd: switch(m_dwNetworkError) { case 3: // 3 = µà¾ó °ÅºÎ g_TextEdit.AddMessage(g_StringTable.m_strString[368], g_ClientMain.m_dwMyChrID, 129); break; } break; case CmdCharShapeInfo: // lpMessageBox = new CGUIMessageBox; // lpMessageBox->Create("ij¸¯ÅÍ ¸ð¾çÀ» ¹Þ´Âµ¥ ½ÇÆÐÇß½À´Ï´Ù."); break; case CmdCharTakeGold: switch(m_dwNetworkError) { case 2: lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[399]); break; case 3: lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[400]); break; } break; case CmdDeposit: switch(m_dwNetworkError) { case 2: // 2 = INSUFFICIENT_MONEY lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[401]); break; case 3: // 3 = AUTH_FAILED lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[402]); break; case 4: // 4 = INVALID_ARGUMENT lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[403]); break; } break; case CmdCharStallEnter: switch(m_dwNetworkError) { case 2: // 2 = ³ëÁ¡»óÀÌ ²Ë Â÷ÀÖ´Ù. break; case 3: // 3 = ÀÌ¹Ì µé¾î°¡ ÀÖ´Ù. SendStallLeave(); break; case 4: // 4 = ÀÌ¹Ì ³ª°¡ ÀÖ´Ù. break; } break; case CmdCharWhisper: switch(m_dwNetworkError) { case 3: // 3 = ±Í¼Ó¸» °ÅºÎ g_TextEdit.AddMessage(g_StringTable.m_strString[358], g_ClientMain.m_dwMyChrID, 129); break; case 4: // 4 = ´Ù¸¥ Á¾Á· ±Ó¼Ó¸» g_TextEdit.AddMessage(g_StringTable.m_strString[404], g_ClientMain.m_dwMyChrID, 129); break; } break; case CmdCharPeaceMode: switch(m_dwNetworkError) { case 2: g_TextEdit.AddMessage("¸ðµåÀüȯ¿¡ ½ÇÆÐÇß½À´Ï´Ù. ´Ù½Ã ½ÃµµÇØ ÁÖ¼¼¿ä.", g_ClientMain.m_dwMyChrID, 129); g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bPeaceMode = !g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bPeaceMode; break; } break; /* case CmdCharInfo: break; case CmdCharUpdateAddress: break; case CmdCharMove: break; case CmdCharCellLogin: break; case CmdCharCellLogout: break; case CmdCharAddressInfo: break; case CmdCharChat: break; case CmdMonMove: break; case CmdCharAttack: break; case CmdCharRespawn: break; case CmdCharAttackInfo: break; case CmdCharItemInfo: break; case CmdGameCellInfo: break; case CmdCharPullDownInfo: break; case CmdCharPickUpInfo: break; case CmdCharAttacked: break; case CmdCharShapeInfo: break; case CmdCharPartyInfo: break; case CmdCharRepairItem: break; case CmdCharAward: break; case CmdCharLevelUp: break; case CmdCharLevelUpInfo: break; case CmdCharHPRegen: break; */ default: { /* CGUIMessageBox *lpMessageBox; lpMessageBox = new CGUIMessageBox; lpMessageBox->Create("Unknown Packet*/ /* char strError[MAX_PATH], strPacket[MAX_PATH]; sprintf(strPacket, "0x%04x", ((LPPktBase)m_aryBuffer)->GetCmd()); sprintf(strError, "0x%04x", m_dwNetworkError); MessageBox(NULL, strError, strPacket, MB_OK);//"Risk Your Life ÆÐŶ ¿¡·¯", MB_OK);*/ } break; } } /*BOOL CNetwork::LoginLoginServer(unsigned long dwUserID, unsigned long dwServerID, unsigned long dwLoginChrPointer) { m_nsNetworkState = NS_IDPASSLOGINSERVER; if(m_pSocket->LoginUser(dwUserID, dwServerID, (void*)dwLoginChrPointer)) return TRUE; else return FALSE; } void CNetwork::LoginCharSelect(unsigned long dwChrSelect) { // m_nsNetworkState = NS_CREATECHRSELECT; // m_pSocket->GLSSelectCharacter(g_ClientMain.m_dwUserID, g_ClientMain.m_scLoginChar[dwChrSelect].UID); } void CNetwork::ConnectToAgentServer() { // m_nsNetworkState = NS_CONNECTAGENTSERVER; // m_pSocket->ConnectToGSS(); } void CNetwork::LoginAgentServer() { // m_nsNetworkState = NS_LOGINAGENTSERVER; // m_pSocket->GSSLoginChar(g_ClientMain.m_dwUserID, g_ClientMain.m_scLoginChar[0].UID); }*/ bool CNetwork::IsExistToList(unsigned short List_In, unsigned long CharID_In) { return m_pSocket->IsExistToList(List_In, CharID_In); } bool CNetwork::CharAddressRequireInfo(unsigned long SenderID_In, unsigned long CharID_In) { #ifdef _DEBUG g_ClientMain.m_lpInterface->m_dwSpendTime[0] = GetTickCount(); #endif return m_pSocket->CharRequireInfo(SenderID_In, CharID_In, ClientSocket::Require_UDPInfo); } BOOL CNetwork::SendChatMessage(const char *strName, const char *strMessage, unsigned long dwCommand) { char strNameMsg[MAX_PATH]; /* switch(dwCommand) { case 1: // ±Ó¼Ó¸» memset(strNameMsg, 0, MAX_PATH); strcpy(strNameMsg, strName); strcat(&strNameMsg[0x10], g_ClientMain.m_csStatus.m_Info.Name); strcat(&strNameMsg[0x20], strMessage); // if(!m_pSocket->GSSChat(g_ClientMain.m_dwMyChrID, strNameMsg, 0x20 + strlen(strMessage), dwCommand)) return FALSE; break; /* case 6: // ¹«½Ã memset(strNameMsg, 0, 0x10); strcpy(strNameMsg, name); m_pSocket->GSSChat(m_dwChrID, strNameMsg, 0x10, dwCommand); break;*/ /* case 10: m_pSocket->GSSChat(m_dwChrID, NULL, 0, dwCommand); break; default: sprintf(strNameMsg, "%s : %s", g_ClientMain.m_csStatus.m_Info.Name, strMessage); if(!m_pSocket->CharChat(g_ClientMain.m_dwMyChrID, dwCommand, strNameMsg, strlen(strNameMsg))) return FALSE; break; }*/ if(dwCommand == ClientSocket::ChatType_Shout && CNetwork::m_lShoutCounter > 0) return FALSE; switch(dwCommand) { case 10: sprintf(strNameMsg, "(to. %s) %s", strName, strMessage); break; case ClientSocket::ChatType_Stall: { char strName[16]; memcpy(strName, g_ClientMain.m_csStatus.m_Info.Name, 15); strName[15] = 0; sprintf(strNameMsg, "%s : %s", strName, strMessage); } break; default: { char strName[16]; memcpy(strName, g_ClientMain.m_csStatus.m_Info.Name, 15); strName[15] = 0; sprintf(strNameMsg, "%s : %s", strName, strMessage); strcpy(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strChatMessage, strNameMsg); g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_fChatTimer = 2000.0f; } break; } List SendCharacterList; if(g_ClientMain.m_bAdminMode) { g_CharacterData.GetSendCharacterAroundList(SendCharacterList); } else { if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bPeaceMode) g_CharacterData.GetSendCharacterAroundList(SendCharacterList); else g_CharacterData.GetSendCharacterChatList(SendCharacterList); } for(int i=0;iRegistInstanceUDPList(SendCharacterList[i]); } /**/ switch(dwCommand) { case CHATMODE_CHAT: g_TextEdit.AddNormalChatMessage(strNameMsg, g_ClientMain.m_dwMyChrID, dwCommand); if(!m_pSocket->CharChat(g_ClientMain.m_dwMyChrID, ClientSocket::ChatType_Normal, strNameMsg, strlen(strNameMsg))) return FALSE; break; case CHATMODE_PARTY: g_TextEdit.AddPartyChatMessage(strNameMsg, g_ClientMain.m_dwMyChrID, dwCommand); g_TextEdit.AddNormalChatMessage(strNameMsg, g_ClientMain.m_dwMyChrID, dwCommand); if(!m_pSocket->CharChat(g_ClientMain.m_dwMyChrID, ClientSocket::ChatType_Party, strNameMsg, strlen(strNameMsg))) return FALSE; break; case CHATMODE_GUILD: g_TextEdit.AddGuildChatMessage(strNameMsg, g_ClientMain.m_dwMyChrID, dwCommand); g_TextEdit.AddNormalChatMessage(strNameMsg, g_ClientMain.m_dwMyChrID, dwCommand); if(!m_pSocket->CharChat(g_ClientMain.m_dwMyChrID, ClientSocket::ChatType_Guild, strNameMsg, strlen(strNameMsg))) return FALSE; break; case ClientSocket::ChatType_Shout: m_pSocket->CharChat(g_ClientMain.m_dwMyChrID, ClientSocket::ChatType_Shout, strNameMsg, strlen(strNameMsg)); m_lShoutCounter = 30000; break; case ClientSocket::ChatType_Stall: if(!m_pSocket->CharChat(g_ClientMain.m_dwMyChrID, ClientSocket::ChatType_Stall, strNameMsg, strlen(strNameMsg))) return FALSE; break; case 10: // ±Ó¼Ó¸» { char strMyName[16]; memcpy(strMyName, g_ClientMain.m_csStatus.m_Info.Name, 15); strMyName[15] = 0; g_TextEdit.AddMessage(strNameMsg, g_ClientMain.m_dwMyChrID, dwCommand); if(!m_pSocket->CharWhisper((char *)strMyName, (char *)strName, (char *)strMessage, strlen(strMessage))) return FALSE; } break; } return TRUE; } BOOL CNetwork::SendMovingPacket(unsigned long dwUpperAni, unsigned long dwLowerAni, float fDir, vector3 &vecMove) { List SendCharacterList; g_CharacterData.GetSendCharacterList(SendCharacterList); for(int i=0;iRegistInstanceUDPList(SendCharacterList[i])) { if(!g_ClientMain.m_csStatus.CheckPartyMember(SendCharacterList[i])) g_CharacterData.UnLoadChr(SendCharacterList[i]); } } /* char a[200]; sprintf(a, "%d, %d, %d", m_pSocket->m_ClientList->GetListCount(), SendCharacterList.num, m_pSocket->m_InstanceClientList->GetListCount()); g_TextEdit.AddMessage(a, g_ClientMain.m_dwMyChrID, 128); /**/ if(m_pSocket->CharMove(g_ClientMain.m_dwMyChrID, (LPPOS)&vecMove, fDir, dwUpperAni, dwLowerAni, g_ClientMain.m_csStatus.m_Info.Level, 0, 0)) { int b=0; } else { int a=0; } return TRUE; } BOOL CNetwork::SendMoveUpdatePacket(float fDir, vector3 &vecPosition) { if(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bSitMode) m_pSocket->CharMoveUpdate(g_ClientMain.m_dwMyChrID, true, (LPPOS)&vecPosition, fDir); else m_pSocket->CharMoveUpdate(g_ClientMain.m_dwMyChrID, false, (LPPOS)&vecPosition, fDir); return TRUE; } BOOL CNetwork::SendCreateChar(unsigned long dwSlot, CHAR_CREATE &pCreateChar) { m_nsNetworkState = NS_CREATECHAR; if(m_pSocket->CharCreate(g_ClientMain.m_dwUserID, dwSlot, pCreateChar)) return TRUE; else return FALSE; } BOOL CNetwork::SendDeleteChar(unsigned long dwSlot, unsigned long dwUID) { m_nsNetworkState = NS_DELETECHAR; if(m_pSocket->CharDelete(g_ClientMain.m_dwUserID, dwUID, dwSlot)) return TRUE; else return FALSE; } BOOL CNetwork::SendCharAttack(vector3 &vecPos, float fDir, unsigned short wType, unsigned char cSkillLock, unsigned char cSkillLevel, unsigned char cAtCount, unsigned short wDefenserNum, unsigned long dwDefenser[10]) { AtNode AtList; AtList.m_wDefenserNum = wDefenserNum; for(int i = 0; i < 10; i++) { AtList.m_dwDefenser[i] = dwDefenser[i]; } AtType pAtType; pAtType.m_cAtCount = cAtCount; pAtType.m_cSkillLevel = cSkillLevel; pAtType.m_cSkillLockCount = cSkillLock; pAtType.m_wType = wType; POS psPos; psPos.fPointX = vecPos.x / 100.0f; psPos.fPointY = vecPos.y / 100.0f; psPos.fPointZ = vecPos.z / 100.0f; if(m_pSocket->CharAttack(g_ClientMain.m_dwUserID, &psPos, fDir, pAtType, AtList)) return TRUE; else return FALSE; } BOOL CNetwork::SendCharRespawn(unsigned long dwChrID) { if(g_ClientMain.m_dwPresentZone == 3 || g_ClientMain.m_dwPresentZone == 6) { if(g_ClientMain.m_lpInterface && !g_ClientMain.m_lpInterface->GetIsRespawn()) { g_ClientMain.m_lpInterface->InitRespawn((unsigned char)g_ClientMain.m_dwPresentZone); } return FALSE; } else if(g_ClientMain.m_dwPresentZone == 4 || g_ClientMain.m_dwPresentZone == 5) { if(!g_ClientMain.m_lpInterface->GetIsRespawn()) { CGUIMessageBox *lpMessageBox; lpMessageBox = new CGUIMessageBox; lpMessageBox->SetWordBreak(TRUE); lpMessageBox->Create(g_StringTable.m_strString[405], MB_YES | MB_NO | MB_EXIT); lpMessageBox->SetResult(&g_ClientMain.m_dwRespawnResult); g_ClientMain.m_dwRespawnResult = 0; } return FALSE; } else { m_nsNetworkState = NS_RESPAWN; POS psPos = { 0.0f, 0.0f, 0.0f }; if(m_pSocket->CharRespawn(dwChrID, 0, psPos)) return TRUE; else return FALSE; } } BOOL CNetwork::SendFieldObjectPickUp(unsigned long dwFieldID, Item::ItemPos &pItemIndex) { m_nsNetworkState = NS_TAKEITEM; if(m_pSocket->CharPickUp(g_ClientMain.m_dwMyChrID, dwFieldID, pItemIndex)) return TRUE; else return FALSE; } BOOL CNetwork::SendTakeItem(CItemInstance *lpTakeItem, Item::ItemPos *lpTakeIndex, unsigned char cNum) { if(lpTakeItem->m_lpItemBase->GetPos().m_cPos != ClientSocket::ItemPos_Deposit && lpTakeIndex->m_cPos == ClientSocket::ItemPos_Deposit) { if(g_ClientMain.m_csStatus.m_Info.Gold < g_ClientMain.m_csStatus.m_Info.Level * 20) { CGUIMessageBox *lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[401]); lpMessageBox->SetTimer(1000); return FALSE; } } m_nsNetworkState = NS_TAKEITEM; TakeType pTakeType; pTakeType.m_srcPos = lpTakeItem->m_lpItemBase->GetPos(); pTakeType.m_dstPos = *lpTakeIndex; pTakeType.m_cNum = cNum; if(m_pSocket->CharTakeItem(g_ClientMain.m_dwMyChrID, pTakeType)) return TRUE; else return FALSE; } BOOL CNetwork::SendSplitItem(CItemInstance *lpTakeItem, Item::ItemPos *lpTakeIndex, unsigned char cNum) { if(lpTakeItem->m_lpItemBase->GetPos().m_cPos != ClientSocket::ItemPos_Deposit && lpTakeIndex->m_cPos == ClientSocket::ItemPos_Deposit) { if(g_ClientMain.m_csStatus.m_Info.Gold < g_ClientMain.m_csStatus.m_Info.Level * 20) { CGUIMessageBox *lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[401]); lpMessageBox->SetTimer(1000); return FALSE; } } m_nsNetworkState = NS_TAKEITEM; TakeType pTakeType; pTakeType.m_srcPos = lpTakeItem->m_lpItemBase->GetPos(); pTakeType.m_dstPos = *lpTakeIndex; pTakeType.m_cNum = cNum; if(m_pSocket->CharSplitItem(g_ClientMain.m_dwMyChrID, pTakeType)) return TRUE; else return FALSE; } BOOL CNetwork::SendQuickSlotMove(CItemInstance *lpTakeItem, unsigned char cPos, unsigned char cIndex, unsigned char cNum) { m_nsNetworkState = NS_TAKEITEM; TakeType pTakeType; pTakeType.m_srcPos = lpTakeItem->m_lpItemBase->GetPos(); pTakeType.m_dstPos.m_cPos = cPos; pTakeType.m_dstPos.m_cIndex = cIndex; pTakeType.m_cNum = cNum; unsigned short wSkill = 0; if(lpTakeItem->m_bClassSkill) { wSkill = lpTakeItem->GetProtoTypeID(); } if(m_pSocket->CharQuickSlotMove(pTakeType, wSkill)) return TRUE; else return FALSE; } BOOL CNetwork::SendFieldObjectPullDown(unsigned long dwNum, Item::ItemPos &pItemIndex) { m_nsNetworkState = NS_TAKEITEM; if(m_pSocket->CharPullDown(g_ClientMain.m_dwMyChrID, pItemIndex, dwNum)) return TRUE; else return FALSE; } BOOL CNetwork::SendSwapItem(CItemInstance *lpSrcItem, Item::ItemPos *lpSrcIndex, CItemInstance *lpDstItem) { if(lpSrcItem->m_lpItemBase->GetPos().m_cPos != ClientSocket::ItemPos_Deposit && lpSrcIndex->m_cPos == ClientSocket::ItemPos_Deposit) { if(g_ClientMain.m_csStatus.m_Info.Gold < g_ClientMain.m_csStatus.m_Info.Level * 20) { CGUIMessageBox *lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[401]); lpMessageBox->SetTimer(1000); return FALSE; } } m_nsNetworkState = NS_TAKEITEM; TakeType SrcTakeType, DstTakeType; SrcTakeType.m_srcPos = lpSrcItem->m_lpItemBase->GetPos(); // SrcTakeType.m_dstPos.m_cPos = lpDstItem->m_dwItemPos; SrcTakeType.m_dstPos = *lpSrcIndex; if(lpSrcItem->GetIsEnableStack()) SrcTakeType.m_cNum = lpSrcItem->GetNowDurability(); else SrcTakeType.m_cNum = 1; DstTakeType.m_srcPos = lpDstItem->m_lpItemBase->GetPos(); DstTakeType.m_dstPos.m_cPos = ClientSocket::ItemPos_Temp; DstTakeType.m_dstPos.m_cIndex = 0; if(lpDstItem->GetIsEnableStack()) DstTakeType.m_cNum = lpDstItem->GetNowDurability(); else DstTakeType.m_cNum = 1; if(m_pSocket->CharSwapItem(g_ClientMain.m_dwMyChrID, SrcTakeType, DstTakeType)) return TRUE; else return FALSE; } BOOL CNetwork::SendTradeItem(unsigned long dwNPCID, unsigned short wTypeID, unsigned long dwNum, Item::ItemPos &pSrcPos, Item::ItemPos &pDstPos) { m_nsNetworkState = NS_TRADEITEM; TakeType pTakeType; pTakeType.m_srcPos = pSrcPos; pTakeType.m_dstPos = pDstPos; pTakeType.m_cNum = dwNum; if(m_pSocket->CharTradeItem(g_ClientMain.m_dwMyChrID, dwNPCID, wTypeID, pTakeType)) return TRUE; else return FALSE; } BOOL CNetwork::SendCharShape(unsigned long dwChrID) { CHAR_VIEW pCharView; g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwWeaponPos = g_ClientMain.m_csStatus.m_cWeaponPos; pCharView.UID = g_ClientMain.m_dwMyChrID; char strName[16]; memcpy(strName, g_ClientMain.m_csStatus.m_Info.Name, 15); strName[15] = 0; strcpy(pCharView.Name, strName); // ij¸¯ÅÍ À̸§ pCharView.Sex = g_ClientMain.m_csStatus.m_Info.Sex; // ij¸¯ÅÍ ¼º pCharView.Hair = g_ClientMain.m_csStatus.m_Info.Hair; // ij¸¯ÅÍ ¸Ó¸® ¸ð¾ç pCharView.Face = g_ClientMain.m_csStatus.m_Info.Face; // ij¸¯ÅÍ ¾ó±¼ ¸ð¾ç pCharView.Nationality = g_ClientMain.m_csStatus.m_Info.Nationality; // ij¸¯ÅÍ ±¹°¡ pCharView.Class = g_ClientMain.m_csStatus.m_Info.Class; // ij¸¯ÅÍ Å¬·¡½º pCharView.Merits = g_ClientMain.m_csStatus.m_Info.Merits; // °øÇåµµ pCharView.Fame = g_ClientMain.m_csStatus.m_Info.Fame; // ¸í¼º pCharView.Guild = g_ClientMain.m_csStatus.m_Info.Guild; // ij¸¯ÅÍ ±æµå pCharView.Party = g_ClientMain.m_csStatus.m_PartyInfo.m_dwPartyID; // ij¸¯ÅÍ ÆÄƼ pCharView.Level = g_ClientMain.m_csStatus.m_Info.Level; // ij¸¯ÅÍ ·¹º§ for(int i = 0; i < 15; i++) // Àåºñ(°Ñº¸±â) { if(g_ClientMain.m_csStatus.m_lstEquipment[i]) pCharView.Equip[i] = g_ClientMain.m_csStatus.m_lstEquipment[i]->GetProtoTypeID(); else pCharView.Equip[i] = 0; } char strShape[15][256], *strTemp; for(i = 0; i < 15; i++) // Àåºñ(°Ñº¸±â) { strTemp = (char *)g_ItemMgr.GetEquipName(pCharView.Equip[i]); if(strTemp) { strcpy(strShape[i], strTemp); } else { strcpy(strShape[i], ""); } } /**/ bool bResult = false; if(dwChrID != 0xFFFFFFFF) { bResult = m_pSocket->CharShapeInfo(dwChrID, &pCharView, (unsigned char)g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwWeaponPos, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwChant, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bPeaceMode, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strStreetStallName); } else { g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->SetShape(strShape); List SendCharacterList; g_CharacterData.GetSendCharacterAroundList(SendCharacterList); for(i=0;iRegistInstanceUDPList(SendCharacterList[i]); } bResult = m_pSocket->CharShapeInfo(&pCharView, (unsigned char)g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwWeaponPos, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_dwChant, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_bPeaceMode, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_strStreetStallName); } if(bResult) return TRUE; else return FALSE; } BOOL CNetwork::SendCharSwitchHand(void) { if(m_pSocket->CharSwitchHand(g_ClientMain.m_csStatus.m_cWeaponPos + 1)) return TRUE; else return FALSE; } BOOL CNetwork::SendMyInfoforParty(void) { if(m_pSocket->CharPartyMemInfo(g_ClientMain.m_dwMyChrID, g_ClientMain.m_csStatus.m_PartyInfo.m_dwPartyID, g_ClientMain.m_csStatus.m_Info.Class, g_ClientMain.m_csStatus.m_Info.Level, g_ClientMain.m_csStatus.m_MaxHP + g_ClientMain.m_csStatus.m_lAddMaxHP, g_ClientMain.m_csStatus.m_Info.HP, g_ClientMain.m_csStatus.m_MaxMP + g_ClientMain.m_csStatus.m_lAddMaxMP, g_ClientMain.m_csStatus.m_Info.MP, 0, 0)) return TRUE; else return FALSE; } BOOL CNetwork::SendFameInfo(unsigned short wCmd) { if(CNetwork::m_lFameInfoCounter <= 0) { m_pSocket->CharFameInfo(g_ClientMain.m_dwMyChrID, wCmd); m_lFameInfoCounter = 3000; } return TRUE; } long CNetwork::SendPartyFind(void) { long lCounter = m_lPartyFindCounter; if(CNetwork::m_lPartyFindCounter <= 0) { m_pSocket->CharPartyFind(g_ClientMain.m_dwMyChrID); m_lPartyFindCounter = 10000; } return lCounter; } long CNetwork::SendPartyCmd(unsigned long dwReferenceID, unsigned short wCmd) { long lCounter = m_lPartyCmdCounter; if(wCmd == ClientSocket::PartyCmd_FindParty || wCmd == ClientSocket::PartyCmd_FindMember) { if(CNetwork::m_lPartyCmdCounter <= 0) { m_pSocket->CharPartyCmd(g_ClientMain.m_dwMyChrID, dwReferenceID, g_ClientMain.m_csStatus.m_PartyInfo.m_dwPartyID, wCmd); m_lPartyCmdCounter = 3000; } } else { m_pSocket->CharPartyCmd(g_ClientMain.m_dwMyChrID, dwReferenceID, g_ClientMain.m_csStatus.m_PartyInfo.m_dwPartyID, wCmd); lCounter = m_lPartyFindCounter = 0; } return lCounter; } void CNetwork::SendChant(CItemInstance *lpChantSkill) { /* if(g_ClientMain.m_csStatus.m_lpQuickSelected) { Skill::LPProtoType lpSkillType = g_SkillMgr.GetSkillProtoType(g_ClientMain.m_csStatus.m_lpQuickSelected->GetProtoTypeID()); if(lpSkillType && Skill::Type::CHANT == lpSkillType->m_cSkillType) { unsigned long dwDefenser[10]; ZeroMemory(&dwDefenser, sizeof(unsigned long) * 10); dwDefenser[0] = g_ClientMain.m_dwMyChrID; g_ClientMain.m_Network.SendCharAttack(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_fDirection - FLOAT_PHI / 2.0f, g_ClientMain.m_csStatus.m_lpQuickSelected->GetProtoTypeID(), 0, 0, 1, 1, dwDefenser); } }*/ if(lpChantSkill) { if(Skill::Type::CHANT == lpChantSkill->GetSkillType()) { unsigned long dwDefenser[10]; ZeroMemory(&dwDefenser, sizeof(unsigned long) * 10); dwDefenser[0] = g_ClientMain.m_dwMyChrID; g_ClientMain.m_Network.SendCharAttack(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_fDirection - FLOAT_PHI / 2.0f, lpChantSkill->GetProtoTypeID(), lpChantSkill->GetMaxDurability(), lpChantSkill->GetNowDurability(), 1, 1, dwDefenser); g_ClientMain.m_csStatus.m_bUseChant = TRUE; } } else { if(g_ClientMain.m_csStatus.m_lpQuickSelected) { if(Skill::Type::CHANT == g_ClientMain.m_csStatus.m_lpQuickSelected->GetSkillType()) { unsigned long dwDefenser[10]; ZeroMemory(&dwDefenser, sizeof(unsigned long) * 10); dwDefenser[0] = g_ClientMain.m_dwMyChrID; g_ClientMain.m_Network.SendCharAttack(g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_vecPos, g_CharacterData.m_lstCharData[g_CharacterData.m_nFocusCharacter]->m_fDirection - FLOAT_PHI / 2.0f, g_ClientMain.m_csStatus.m_lpQuickSelected->GetProtoTypeID(), 0, 0, 1, 1, dwDefenser); g_ClientMain.m_csStatus.m_bUseChant = FALSE; } } } } BOOL CNetwork::SendExchangeCmd(unsigned long dwSendID, unsigned short wCmd) { if(m_pSocket->CharExchangeCmd(g_ClientMain.m_dwMyChrID, dwSendID, wCmd)) return TRUE; return FALSE; } void CNetwork::SetChant(CItemInstance *lpChantSkill) { if(lpChantSkill) { if(lpChantSkill->GetSkillType() == Skill::Type::CHANT) { if(g_ClientMain.m_csStatus.m_bUseChant) { SendChant(NULL); } m_lSetSkillCounter = 1000; } } else { if(g_ClientMain.m_csStatus.m_bUseChant) { SendChant(NULL); } m_lSetSkillCounter = 0; } } void CNetwork::SendClientLog(unsigned short wCmd, char *strString, char *strString2) { char strText[MAX_PATH]; static BOOL bBadStatus = TRUE; switch(wCmd) { case 0: // ½ºÅ×ÀÌÅͽº ÀÌ»ó if(bBadStatus) { strcpy(strText, "[Hack Log] "); strcat(strText, g_StringTable.m_strString[391]); g_ClientMain.m_Network.m_pSocket->CharChat(g_ClientMain.m_dwMyChrID, ClientSocket::ChatType_ClientLog, strText, strlen(strText)); bBadStatus = FALSE; } break; case 1: // ¿å¼³ char Temp[MAX_PATH]; strcpy(Temp, "None"); if(!strString) { strString2 = Temp; } sprintf(strText, "[Abuse Log] ''%s'', ''%s''", strString, strString2); g_ClientMain.m_Network.m_pSocket->CharChat(g_ClientMain.m_dwMyChrID, ClientSocket::ChatType_ClientLog, strText, strlen(strText)); break; } } BOOL CNetwork::SendStallEnter(unsigned long dwStallChrID) { if(!g_ClientMain.m_bStreetStallEnter) { g_ClientMain.m_Network.m_pSocket->CharStallEnter(g_ClientMain.m_dwMyChrID, dwStallChrID); return TRUE; } else { if(g_ClientMain.m_lpInterface && g_ClientMain.m_lpInterface->GetIsTrade()) { CGUIMessageBox *lpMessageBox = new CGUIMessageBox; lpMessageBox->Create(g_StringTable.m_strString[406]); } else { g_ClientMain.m_bStreetStallEnter = FALSE; } } return FALSE; } BOOL CNetwork::SendStallLeave(void) { if(g_ClientMain.m_bStreetStallEnter) { g_ClientMain.m_Network.m_pSocket->CharStallEnter(g_ClientMain.m_dwMyChrID, 0); return TRUE; } return FALSE; }