Guest User

Untitled

a guest
Oct 13th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.90 KB | None | 0 0
  1. #include "StdAfx.h"
  2. #include "PythonNetworkStream.h"
  3. #include "NetworkActorManager.h"
  4. #include "PythonBackground.h"
  5.  
  6. #include "PythonApplication.h"
  7. #include "AbstractPlayer.h"
  8. #include "../gamelib/ActorInstance.h"
  9.  
  10.  
  11.  
  12.  
  13.  
  14. void CPythonNetworkStream::__GlobalPositionToLocalPosition(LONG& rGlobalX, LONG& rGlobalY)
  15. {
  16.     CPythonBackground&rkBgMgr=CPythonBackground::Instance();
  17.     rkBgMgr.GlobalPositionToLocalPosition(rGlobalX, rGlobalY);
  18. }
  19.  
  20. void CPythonNetworkStream::__LocalPositionToGlobalPosition(LONG& rLocalX, LONG& rLocalY)
  21. {
  22.     CPythonBackground&rkBgMgr=CPythonBackground::Instance();
  23.     rkBgMgr.LocalPositionToGlobalPosition(rLocalX, rLocalY);
  24. }
  25.  
  26. bool CPythonNetworkStream::__CanActMainInstance()
  27. {
  28.     CPythonCharacterManager& rkChrMgr=CPythonCharacterManager::Instance();
  29.     CInstanceBase* pkInstMain=rkChrMgr.GetMainInstancePtr();
  30.     if (!pkInstMain)
  31.         return false;
  32.  
  33.     return pkInstMain->CanAct();
  34. }
  35.  
  36. void CPythonNetworkStream::__ClearNetworkActorManager()
  37. {
  38.     m_rokNetActorMgr->Destroy();
  39. }
  40.  
  41. void __SetWeaponPower(IAbstractPlayer& rkPlayer, DWORD dwWeaponID)
  42. {
  43.     DWORD minPower=0;
  44.     DWORD maxPower=0;
  45.     DWORD minMagicPower=0;
  46.     DWORD maxMagicPower=0;
  47.     DWORD addPower=0;
  48.  
  49.     CItemData* pkWeapon;
  50.     if (CItemManager::Instance().GetItemDataPointer(dwWeaponID, &pkWeapon))
  51.     {
  52.         if (pkWeapon->GetType()==CItemData::ITEM_TYPE_WEAPON)
  53.         {
  54.             minPower=pkWeapon->GetValue(3);
  55.             maxPower=pkWeapon->GetValue(4);
  56.             minMagicPower=pkWeapon->GetValue(1);
  57.             maxMagicPower=pkWeapon->GetValue(2);
  58.             addPower=pkWeapon->GetValue(5);
  59.         }
  60.     }
  61.  
  62.     rkPlayer.SetWeaponPower(minPower, maxPower, minMagicPower, maxMagicPower, addPower);
  63. }
  64.  
  65. //테이블에서 이름이 "." 인 것들
  66. //차후에 서버에서 보내주지 않게 되면 없어질 함수..(서버님께 꼭!!협박; )
  67. bool IsInvisibleRace(WORD raceNum)
  68. {
  69.     switch(raceNum)
  70.     {
  71.     case 20025:
  72.     case 20038:
  73.     case 20039:
  74.         return true;
  75.     default:
  76.         return false;
  77.     }
  78. }
  79.  
  80. static SNetworkActorData s_kNetActorData;
  81.  
  82.  
  83. bool CPythonNetworkStream::RecvCharacterAppendPacket()
  84. {
  85.     TPacketGCCharacterAdd chrAddPacket;
  86.     if (!Recv(sizeof(chrAddPacket), &chrAddPacket))
  87.         return false;
  88.  
  89.     __GlobalPositionToLocalPosition(chrAddPacket.x, chrAddPacket.y);
  90.  
  91.     SNetworkActorData kNetActorData;
  92.     kNetActorData.m_bType=chrAddPacket.bType;
  93.     kNetActorData.m_dwMovSpd=chrAddPacket.bMovingSpeed;
  94.     kNetActorData.m_dwAtkSpd=chrAddPacket.bAttackSpeed;
  95.     kNetActorData.m_dwRace=chrAddPacket.wRaceNum;
  96.    
  97.     kNetActorData.m_dwStateFlags=chrAddPacket.bStateFlag;
  98.     kNetActorData.m_dwVID=chrAddPacket.dwVID;
  99.     kNetActorData.m_fRot=chrAddPacket.angle;
  100.  
  101.     kNetActorData.m_stName="";
  102.  
  103.     kNetActorData.m_stName="";
  104.     kNetActorData.m_kAffectFlags.CopyData(0, sizeof(chrAddPacket.dwAffectFlag[0]), &chrAddPacket.dwAffectFlag[0]);
  105.     kNetActorData.m_kAffectFlags.CopyData(32, sizeof(chrAddPacket.dwAffectFlag[1]), &chrAddPacket.dwAffectFlag[1]);
  106.    
  107.     kNetActorData.SetPosition(chrAddPacket.x, chrAddPacket.y);
  108.  
  109.     kNetActorData.m_sAlignment=0;/*chrAddPacket.sAlignment*/;  
  110.     kNetActorData.m_byPKMode=0;/*chrAddPacket.bPKMode*/;   
  111.     kNetActorData.m_dwGuildID=0;/*chrAddPacket.dwGuild*/;
  112.     kNetActorData.m_dwEmpireID=0;/*chrAddPacket.bEmpire*/;
  113.     kNetActorData.m_dwArmor=0;/*chrAddPacket.awPart[CHR_EQUIPPART_ARMOR]*/;
  114.     kNetActorData.m_dwWeapon=0;/*chrAddPacket.awPart[CHR_EQUIPPART_WEAPON]*/;
  115.     kNetActorData.m_dwHair=0;/*chrAddPacket.awPart[CHR_EQUIPPART_HAIR]*/;  
  116.     #ifdef ENABLE_SASH_SYSTEM
  117.     kNetActorData.m_dwSash=0;
  118.     #endif
  119.     kNetActorData.m_dwMountVnum=0;/*chrAddPacket.dwMountVnum*/;
  120.  
  121.     kNetActorData.m_dwLevel = 0; // 몬스터 레벨 표시 안함
  122.  
  123.     if(kNetActorData.m_bType != CActorInstance::TYPE_PC &&
  124.         kNetActorData.m_bType != CActorInstance::TYPE_NPC)
  125.     {
  126.         const char * c_szName;
  127.         CPythonNonPlayer& rkNonPlayer=CPythonNonPlayer::Instance();
  128.         if (rkNonPlayer.GetName(kNetActorData.m_dwRace, &c_szName))
  129.             kNetActorData.m_stName = c_szName;
  130.         //else
  131.         //  kNetActorData.m_stName=chrAddPacket.name;
  132.  
  133.         __RecvCharacterAppendPacket(&kNetActorData);
  134.     }
  135.     else
  136.     {
  137.         s_kNetActorData = kNetActorData;
  138.     }
  139.  
  140.     return true;
  141. }
  142.  
  143. bool CPythonNetworkStream::RecvCharacterAdditionalInfo()
  144. {
  145.     TPacketGCCharacterAdditionalInfo chrInfoPacket;
  146.     if (!Recv(sizeof(chrInfoPacket), &chrInfoPacket))
  147.         return false;
  148.  
  149.    
  150.     SNetworkActorData kNetActorData = s_kNetActorData;
  151.     if (IsInvisibleRace(kNetActorData.m_dwRace))
  152.         return true;
  153.  
  154.     if(kNetActorData.m_dwVID == chrInfoPacket.dwVID)
  155.     {
  156.         kNetActorData.m_stName = chrInfoPacket.name;
  157.         kNetActorData.m_dwGuildID = chrInfoPacket.dwGuildID;
  158.         kNetActorData.m_dwLevel = chrInfoPacket.dwLevel;
  159.         kNetActorData.m_sAlignment=chrInfoPacket.sAlignment;   
  160.         kNetActorData.m_byPKMode=chrInfoPacket.bPKMode;
  161.         kNetActorData.m_dwGuildID=chrInfoPacket.dwGuildID;
  162.         kNetActorData.m_dwEmpireID=chrInfoPacket.bEmpire;
  163.         kNetActorData.m_dwArmor=chrInfoPacket.awPart[CHR_EQUIPPART_ARMOR];
  164.         kNetActorData.m_dwWeapon=chrInfoPacket.awPart[CHR_EQUIPPART_WEAPON];
  165.         kNetActorData.m_dwHair=chrInfoPacket.awPart[CHR_EQUIPPART_HAIR];
  166.         #ifdef ENABLE_SASH_SYSTEM
  167.         kNetActorData.m_dwSash = chrInfoPacket.awPart[CHR_EQUIPPART_SASH];
  168.         #endif     
  169.         kNetActorData.m_dwMountVnum=chrInfoPacket.dwMountVnum;
  170.  
  171.         __RecvCharacterAppendPacket(&kNetActorData);
  172.     }
  173.     else
  174.     {
  175.         TraceError("TPacketGCCharacterAdditionalInfo name=%s vid=%d race=%d Error",chrInfoPacket.name,chrInfoPacket.dwVID,kNetActorData.m_dwRace);
  176.     }
  177.     return true;
  178. }
  179.  
  180. bool CPythonNetworkStream::RecvCharacterAppendPacketNew()
  181. {
  182.     TraceError("TPacketGCCharacterAdd2는 쓰지 않는 패킷입니다.");
  183.     TPacketGCCharacterAdd2 chrAddPacket;
  184.     if (!Recv(sizeof(chrAddPacket), &chrAddPacket))
  185.         return false;
  186.     if(IsInvisibleRace(chrAddPacket.wRaceNum))
  187.         return true;
  188.  
  189.     __GlobalPositionToLocalPosition(chrAddPacket.x, chrAddPacket.y);
  190.  
  191.     SNetworkActorData kNetActorData;
  192.     kNetActorData.m_dwLevel = 0;
  193.     kNetActorData.m_bType=chrAddPacket.bType;
  194.     kNetActorData.m_dwGuildID=chrAddPacket.dwGuild;
  195.     kNetActorData.m_dwEmpireID=chrAddPacket.bEmpire;   
  196.     kNetActorData.m_dwMovSpd=chrAddPacket.bMovingSpeed;
  197.     kNetActorData.m_dwAtkSpd=chrAddPacket.bAttackSpeed;
  198.     kNetActorData.m_dwRace=chrAddPacket.wRaceNum;
  199.     kNetActorData.m_dwArmor=chrAddPacket.awPart[CHR_EQUIPPART_ARMOR];
  200.     kNetActorData.m_dwWeapon=chrAddPacket.awPart[CHR_EQUIPPART_WEAPON];
  201.     kNetActorData.m_dwHair=chrAddPacket.awPart[CHR_EQUIPPART_HAIR];
  202.     #ifdef ENABLE_SASH_SYSTEM
  203.     kNetActorData.m_dwSash = chrAddPacket.awPart[CHR_EQUIPPART_SASH];
  204.     #endif
  205.     kNetActorData.m_dwStateFlags=chrAddPacket.bStateFlag;
  206.     kNetActorData.m_dwVID=chrAddPacket.dwVID;
  207.     kNetActorData.m_dwMountVnum=chrAddPacket.dwMountVnum;
  208.     kNetActorData.m_fRot=chrAddPacket.angle;
  209.     kNetActorData.m_kAffectFlags.CopyData(0, sizeof(chrAddPacket.dwAffectFlag[0]), &chrAddPacket.dwAffectFlag[0]);
  210.     kNetActorData.m_kAffectFlags.CopyData(32, sizeof(chrAddPacket.dwAffectFlag[1]), &chrAddPacket.dwAffectFlag[1]);
  211.     kNetActorData.SetPosition(chrAddPacket.x, chrAddPacket.y);
  212.     kNetActorData.m_sAlignment=chrAddPacket.sAlignment;
  213.     kNetActorData.m_byPKMode=chrAddPacket.bPKMode;
  214.     kNetActorData.m_stName=chrAddPacket.name;
  215.     __RecvCharacterAppendPacket(&kNetActorData);
  216.  
  217.     return true;
  218. }
  219.  
  220. bool CPythonNetworkStream::RecvCharacterUpdatePacket()
  221. {
  222.     TPacketGCCharacterUpdate chrUpdatePacket;
  223.     if (!Recv(sizeof(chrUpdatePacket), &chrUpdatePacket))
  224.         return false;
  225.  
  226.     SNetworkUpdateActorData kNetUpdateActorData;
  227.     kNetUpdateActorData.m_dwGuildID=chrUpdatePacket.dwGuildID;
  228.     kNetUpdateActorData.m_dwMovSpd=chrUpdatePacket.bMovingSpeed;
  229.     kNetUpdateActorData.m_dwAtkSpd=chrUpdatePacket.bAttackSpeed;
  230.     kNetUpdateActorData.m_dwArmor=chrUpdatePacket.awPart[CHR_EQUIPPART_ARMOR];
  231.     kNetUpdateActorData.m_dwWeapon=chrUpdatePacket.awPart[CHR_EQUIPPART_WEAPON];
  232.     kNetUpdateActorData.m_dwHair=chrUpdatePacket.awPart[CHR_EQUIPPART_HAIR];
  233.     #ifdef ENABLE_SASH_SYSTEM
  234.     kNetUpdateActorData.m_dwSash = chrUpdatePacket.awPart[CHR_EQUIPPART_SASH];
  235.     #endif
  236.     kNetUpdateActorData.m_dwVID=chrUpdatePacket.dwVID; 
  237.     kNetUpdateActorData.m_kAffectFlags.CopyData(0, sizeof(chrUpdatePacket.dwAffectFlag[0]), &chrUpdatePacket.dwAffectFlag[0]);
  238.     kNetUpdateActorData.m_kAffectFlags.CopyData(32, sizeof(chrUpdatePacket.dwAffectFlag[1]), &chrUpdatePacket.dwAffectFlag[1]);
  239.     kNetUpdateActorData.m_sAlignment=chrUpdatePacket.sAlignment;
  240.     kNetUpdateActorData.m_byPKMode=chrUpdatePacket.bPKMode;
  241.     kNetUpdateActorData.m_dwStateFlags=chrUpdatePacket.bStateFlag;
  242.     kNetUpdateActorData.m_dwMountVnum=chrUpdatePacket.dwMountVnum;
  243.     __RecvCharacterUpdatePacket(&kNetUpdateActorData);
  244.  
  245.     return true;
  246. }
  247.  
  248. bool CPythonNetworkStream::RecvCharacterUpdatePacketNew()
  249. {
  250.     TPacketGCCharacterUpdate2 chrUpdatePacket;
  251.     if (!Recv(sizeof(chrUpdatePacket), &chrUpdatePacket))
  252.         return false;
  253.  
  254.     SNetworkUpdateActorData kNetUpdateActorData;
  255.     kNetUpdateActorData.m_dwGuildID=chrUpdatePacket.dwGuildID;
  256.     kNetUpdateActorData.m_dwMovSpd=chrUpdatePacket.bMovingSpeed;
  257.     kNetUpdateActorData.m_dwAtkSpd=chrUpdatePacket.bAttackSpeed;
  258.     kNetUpdateActorData.m_dwArmor=chrUpdatePacket.awPart[CHR_EQUIPPART_ARMOR];
  259.     kNetUpdateActorData.m_dwWeapon=chrUpdatePacket.awPart[CHR_EQUIPPART_WEAPON];
  260.     kNetUpdateActorData.m_dwHair=chrUpdatePacket.awPart[CHR_EQUIPPART_HAIR];
  261.     #ifdef ENABLE_SASH_SYSTEM
  262.     kNetUpdateActorData.m_dwSash = chrUpdatePacket.awPart[CHR_EQUIPPART_SASH];
  263.     #endif
  264.     kNetUpdateActorData.m_dwVID=chrUpdatePacket.dwVID;
  265.     kNetUpdateActorData.m_kAffectFlags.CopyData(0, sizeof(chrUpdatePacket.dwAffectFlag[0]), &chrUpdatePacket.dwAffectFlag[0]);
  266.     kNetUpdateActorData.m_kAffectFlags.CopyData(32, sizeof(chrUpdatePacket.dwAffectFlag[1]), &chrUpdatePacket.dwAffectFlag[1]);
  267.     kNetUpdateActorData.m_sAlignment=chrUpdatePacket.sAlignment;
  268.     kNetUpdateActorData.m_byPKMode=chrUpdatePacket.bPKMode;
  269.     kNetUpdateActorData.m_dwStateFlags=chrUpdatePacket.bStateFlag;
  270.     kNetUpdateActorData.m_dwMountVnum=chrUpdatePacket.dwMountVnum;
  271.     __RecvCharacterUpdatePacket(&kNetUpdateActorData);
  272.  
  273.     return true;
  274. }
  275.  
  276. void CPythonNetworkStream::__RecvCharacterAppendPacket(SNetworkActorData * pkNetActorData)
  277. {
  278.     // NOTE : 카메라가 땅에 묻히는 문제의 해결을 위해 메인 캐릭터가 지형에 올려지기
  279.     //        전에 맵을 업데이트 해 높이를 구할 수 있도록 해놓아야 합니다.
  280.     //        단, 게임이 들어갈때가 아닌 이미 캐릭터가 추가 된 이후에만 합니다.
  281.     //        헌데 이동인데 왜 Move로 안하고 Append로 하는지..? - [levites]
  282.     IAbstractPlayer& rkPlayer = IAbstractPlayer::GetSingleton();
  283.     if (rkPlayer.IsMainCharacterIndex(pkNetActorData->m_dwVID))
  284.     {
  285.         rkPlayer.SetRace(pkNetActorData->m_dwRace);
  286.  
  287.         __SetWeaponPower(rkPlayer, pkNetActorData->m_dwWeapon);
  288.  
  289.         if (rkPlayer.NEW_GetMainActorPtr())
  290.         {
  291.             CPythonBackground::Instance().Update(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY, 0.0f);
  292.             CPythonCharacterManager::Instance().Update();
  293.  
  294.             // NOTE : 사귀 타워일 경우 GOTO 로 이동시에도 맵 이름을 출력하도록 처리
  295.             {
  296.                 std::string strMapName = CPythonBackground::Instance().GetWarpMapName();
  297.                 if (strMapName == "metin2_map_deviltower1")
  298.                     __ShowMapName(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY);
  299.             }
  300.         }
  301.         else
  302.         {
  303.             __ShowMapName(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY);
  304.         }
  305.     }
  306.  
  307.     m_rokNetActorMgr->AppendActor(*pkNetActorData);
  308.  
  309.     if (GetMainActorVID()==pkNetActorData->m_dwVID)
  310.     {
  311.         rkPlayer.SetTarget(0);
  312.         if (m_bComboSkillFlag)
  313.             rkPlayer.SetComboSkillFlag(m_bComboSkillFlag);
  314.  
  315.         __SetGuildID(pkNetActorData->m_dwGuildID);
  316.         //CPythonApplication::Instance().SkipRenderBuffering(10000);
  317.     }
  318. }
  319.  
  320. void CPythonNetworkStream::__RecvCharacterUpdatePacket(SNetworkUpdateActorData * pkNetUpdateActorData)
  321. {
  322.     m_rokNetActorMgr->UpdateActor(*pkNetUpdateActorData);
  323.  
  324.     IAbstractPlayer& rkPlayer = IAbstractPlayer::GetSingleton();
  325.     if (rkPlayer.IsMainCharacterIndex(pkNetUpdateActorData->m_dwVID))
  326.     {
  327.         __SetGuildID(pkNetUpdateActorData->m_dwGuildID);
  328.         __SetWeaponPower(rkPlayer, pkNetUpdateActorData->m_dwWeapon);
  329.  
  330.         __RefreshStatus();
  331.         __RefreshAlignmentWindow();
  332.         __RefreshEquipmentWindow();
  333.         __RefreshInventoryWindow();
  334.     }
  335.     else
  336.     {
  337.         rkPlayer.NotifyCharacterUpdate(pkNetUpdateActorData->m_dwVID);
  338.     }
  339. }
  340.  
  341. bool CPythonNetworkStream::RecvCharacterDeletePacket()
  342. {
  343.     TPacketGCCharacterDelete chrDelPacket;
  344.  
  345.     if (!Recv(sizeof(chrDelPacket), &chrDelPacket))
  346.     {
  347.         TraceError("CPythonNetworkStream::RecvCharacterDeletePacket - Recv Error");
  348.         return false;
  349.     }
  350.  
  351.     m_rokNetActorMgr->RemoveActor(chrDelPacket.dwVID);
  352.  
  353.     // 캐릭터가 사라질때 개인 상점도 없애줍니다.
  354.     // Key Check 를 하기때문에 없어도 상관은 없습니다.
  355.     PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME],
  356.         "BINARY_PrivateShop_Disappear",
  357.         Py_BuildValue("(i)", chrDelPacket.dwVID)
  358.     );
  359.  
  360.     return true;
  361. }
  362.  
  363.  
  364. bool CPythonNetworkStream::RecvCharacterMovePacket()
  365. {
  366.     TPacketGCMove kMovePacket;
  367.     if (!Recv(sizeof(TPacketGCMove), &kMovePacket))
  368.     {
  369.         Tracen("CPythonNetworkStream::RecvCharacterMovePacket - PACKET READ ERROR");
  370.         return false;
  371.     }
  372.  
  373.     __GlobalPositionToLocalPosition(kMovePacket.lX, kMovePacket.lY);
  374.  
  375.     SNetworkMoveActorData kNetMoveActorData;
  376.     kNetMoveActorData.m_dwArg=kMovePacket.bArg;
  377.     kNetMoveActorData.m_dwFunc=kMovePacket.bFunc;
  378.     kNetMoveActorData.m_dwTime=kMovePacket.dwTime;
  379.     kNetMoveActorData.m_dwVID=kMovePacket.dwVID;
  380.     kNetMoveActorData.m_fRot=kMovePacket.bRot*5.0f;
  381.     kNetMoveActorData.m_lPosX=kMovePacket.lX;
  382.     kNetMoveActorData.m_lPosY=kMovePacket.lY;
  383.     kNetMoveActorData.m_dwDuration=kMovePacket.dwDuration;
  384.  
  385.     m_rokNetActorMgr->MoveActor(kNetMoveActorData);
  386.  
  387.     return true;
  388. }
  389.  
  390. bool CPythonNetworkStream::RecvOwnerShipPacket()
  391. {
  392.     TPacketGCOwnership kPacketOwnership;
  393.  
  394.     if (!Recv(sizeof(kPacketOwnership), &kPacketOwnership))
  395.         return false;
  396.  
  397.     m_rokNetActorMgr->SetActorOwner(kPacketOwnership.dwOwnerVID, kPacketOwnership.dwVictimVID);
  398.  
  399.     return true;
  400. }
  401.  
  402. bool CPythonNetworkStream::RecvSyncPositionPacket()
  403. {
  404.     TPacketGCSyncPosition kPacketSyncPos;
  405.     if (!Recv(sizeof(kPacketSyncPos), &kPacketSyncPos))
  406.         return false;
  407.  
  408.     TPacketGCSyncPositionElement kSyncPos;
  409.  
  410.     UINT uSyncPosCount=(kPacketSyncPos.wSize-sizeof(kPacketSyncPos))/sizeof(kSyncPos);
  411.     for (UINT iSyncPos=0; iSyncPos<uSyncPosCount; ++iSyncPos)
  412.     {      
  413.         if (!Recv(sizeof(TPacketGCSyncPositionElement), &kSyncPos))
  414.             return false;
  415.  
  416. #ifdef __MOVIE_MODE__
  417.         return true;
  418. #endif __MOVIE_MODE__
  419.  
  420.         //Tracenf("CPythonNetworkStream::RecvSyncPositionPacket %d (%d, %d)", kSyncPos.dwVID, kSyncPos.lX, kSyncPos.lY);
  421.  
  422.         __GlobalPositionToLocalPosition(kSyncPos.lX, kSyncPos.lY);
  423.         m_rokNetActorMgr->SyncActor(kSyncPos.dwVID, kSyncPos.lX, kSyncPos.lY);
  424.  
  425.         /*
  426.         CPythonCharacterManager & rkChrMgr = CPythonCharacterManager::Instance();
  427.         CInstanceBase * pkChrInst = rkChrMgr.GetInstancePtr(kSyncPos.dwVID);
  428.  
  429.         if (pkChrInst)
  430.         {          
  431.             pkChrInst->NEW_SyncPixelPosition(kSyncPos.lX, kSyncPos.lY);    
  432.         }
  433.         */
  434. }
  435.  
  436.     return true;
  437. }
  438.  
  439.  
  440. /*
  441. bool CPythonNetworkStream::RecvCharacterAppendPacket()
  442. {
  443.     TPacketGCCharacterAdd chrAddPacket;
  444.  
  445.     if (!Recv(sizeof(chrAddPacket), &chrAddPacket))
  446.         return false;
  447.  
  448.     __GlobalPositionToLocalPosition(chrAddPacket.lX, chrAddPacket.lY);
  449.  
  450.     SNetworkActorData kNetActorData;
  451.     kNetActorData.m_dwGuildID=chrAddPacket.dwGuild;
  452.     kNetActorData.m_dwEmpireID=chrAddPacket.bEmpire;
  453.     kNetActorData.m_dwMovSpd=chrAddPacket.bMovingSpeed;
  454.     kNetActorData.m_dwAtkSpd=chrAddPacket.bAttackSpeed;
  455.     kNetActorData.m_dwRace=chrAddPacket.wRaceNum;
  456.     kNetActorData.m_dwShape=chrAddPacket.parts[CRaceData::PART_MAIN];
  457.     kNetActorData.m_dwStateFlags=chrAddPacket.bStateFlag;
  458.     kNetActorData.m_dwVID=chrAddPacket.dwVID;
  459.     kNetActorData.m_dwWeapon=chrAddPacket.parts[CRaceData::PART_WEAPON];
  460.     kNetActorData.m_fRot=chrAddPacket.angle;
  461.     kNetActorData.m_kAffectFlags.CopyData(0, sizeof(chrAddPacket.dwAffectFlag[0]), &chrAddPacket.dwAffectFlag[0]);
  462.     kNetActorData.m_kAffectFlags.CopyData(32, sizeof(chrAddPacket.dwAffectFlag[1]), &chrAddPacket.dwAffectFlag[1]);
  463.     kNetActorData.SetPosition(chrAddPacket.lX, chrAddPacket.lY);
  464.     kNetActorData.m_stName=chrAddPacket.name;
  465.     __RecvCharacterAppendPacket(&kNetActorData);
  466.     return true;
  467. }
  468. */
Advertisement
Add Comment
Please, Sign In to add comment