Guest User

Untitled

a guest
Apr 21st, 2018
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.40 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. kNetActorData.m_dwMountVnum=0;/*chrAddPacket.dwMountVnum*/;
  117.  
  118. kNetActorData.m_dwLevel = 0; // 몬스터 레벨 표시 안함
  119.  
  120. if(kNetActorData.m_bType != CActorInstance::TYPE_PC &&
  121. kNetActorData.m_bType != CActorInstance::TYPE_NPC)
  122. {
  123. const char * c_szName;
  124. CPythonNonPlayer& rkNonPlayer=CPythonNonPlayer::Instance();
  125. if (rkNonPlayer.GetName(kNetActorData.m_dwRace, &c_szName))
  126. kNetActorData.m_stName = c_szName;
  127. //else
  128. // kNetActorData.m_stName=chrAddPacket.name;
  129.  
  130. __RecvCharacterAppendPacket(&kNetActorData);
  131. }
  132. else
  133. {
  134. s_kNetActorData = kNetActorData;
  135. }
  136.  
  137. return true;
  138. }
  139.  
  140. bool CPythonNetworkStream::RecvCharacterAdditionalInfo()
  141. {
  142. TPacketGCCharacterAdditionalInfo chrInfoPacket;
  143. if (!Recv(sizeof(chrInfoPacket), &chrInfoPacket))
  144. return false;
  145.  
  146.  
  147. SNetworkActorData kNetActorData = s_kNetActorData;
  148. if (IsInvisibleRace(kNetActorData.m_dwRace))
  149. return true;
  150.  
  151. if(kNetActorData.m_dwVID == chrInfoPacket.dwVID)
  152. {
  153. kNetActorData.m_stName = chrInfoPacket.name;
  154. kNetActorData.m_dwGuildID = chrInfoPacket.dwGuildID;
  155. kNetActorData.m_dwLevel = chrInfoPacket.dwLevel;
  156. kNetActorData.m_sAlignment=chrInfoPacket.sAlignment;
  157. kNetActorData.m_byPKMode=chrInfoPacket.bPKMode;
  158. kNetActorData.m_dwGuildID=chrInfoPacket.dwGuildID;
  159. kNetActorData.m_dwEmpireID=chrInfoPacket.bEmpire;
  160. kNetActorData.m_dwArmor=chrInfoPacket.awPart[CHR_EQUIPPART_ARMOR];
  161. kNetActorData.m_dwWeapon=chrInfoPacket.awPart[CHR_EQUIPPART_WEAPON];
  162. kNetActorData.m_dwHair=chrInfoPacket.awPart[CHR_EQUIPPART_HAIR];
  163. kNetActorData.m_dwMountVnum=chrInfoPacket.dwMountVnum;
  164.  
  165. __RecvCharacterAppendPacket(&kNetActorData);
  166. }
  167. else
  168. {
  169. TraceError("TPacketGCCharacterAdditionalInfo name=%s vid=%d race=%d Error",chrInfoPacket.name,chrInfoPacket.dwVID,kNetActorData.m_dwRace);
  170. }
  171. return true;
  172. }
  173.  
  174. bool CPythonNetworkStream::RecvCharacterAppendPacketNew()
  175. {
  176. TraceError("TPacketGCCharacterAdd2는 쓰지 않는 패킷입니다.");
  177. TPacketGCCharacterAdd2 chrAddPacket;
  178. if (!Recv(sizeof(chrAddPacket), &chrAddPacket))
  179. return false;
  180. if(IsInvisibleRace(chrAddPacket.wRaceNum))
  181. return true;
  182.  
  183. __GlobalPositionToLocalPosition(chrAddPacket.x, chrAddPacket.y);
  184.  
  185. SNetworkActorData kNetActorData;
  186. kNetActorData.m_dwLevel = 0;
  187. kNetActorData.m_bType=chrAddPacket.bType;
  188. kNetActorData.m_dwGuildID=chrAddPacket.dwGuild;
  189. kNetActorData.m_dwEmpireID=chrAddPacket.bEmpire;
  190. kNetActorData.m_dwMovSpd=chrAddPacket.bMovingSpeed;
  191. kNetActorData.m_dwAtkSpd=chrAddPacket.bAttackSpeed;
  192. kNetActorData.m_dwRace=chrAddPacket.wRaceNum;
  193. kNetActorData.m_dwArmor=chrAddPacket.awPart[CHR_EQUIPPART_ARMOR];
  194. kNetActorData.m_dwWeapon=chrAddPacket.awPart[CHR_EQUIPPART_WEAPON];
  195. kNetActorData.m_dwHair=chrAddPacket.awPart[CHR_EQUIPPART_HAIR];
  196. kNetActorData.m_dwStateFlags=chrAddPacket.bStateFlag;
  197. kNetActorData.m_dwVID=chrAddPacket.dwVID;
  198. kNetActorData.m_dwMountVnum=chrAddPacket.dwMountVnum;
  199. kNetActorData.m_fRot=chrAddPacket.angle;
  200. kNetActorData.m_kAffectFlags.CopyData(0, sizeof(chrAddPacket.dwAffectFlag[0]), &chrAddPacket.dwAffectFlag[0]);
  201. kNetActorData.m_kAffectFlags.CopyData(32, sizeof(chrAddPacket.dwAffectFlag[1]), &chrAddPacket.dwAffectFlag[1]);
  202. kNetActorData.SetPosition(chrAddPacket.x, chrAddPacket.y);
  203. kNetActorData.m_sAlignment=chrAddPacket.sAlignment;
  204. kNetActorData.m_byPKMode=chrAddPacket.bPKMode;
  205. kNetActorData.m_stName=chrAddPacket.name;
  206. __RecvCharacterAppendPacket(&kNetActorData);
  207.  
  208. return true;
  209. }
  210.  
  211. bool CPythonNetworkStream::RecvCharacterUpdatePacket()
  212. {
  213. TPacketGCCharacterUpdate chrUpdatePacket;
  214. if (!Recv(sizeof(chrUpdatePacket), &chrUpdatePacket))
  215. return false;
  216.  
  217. SNetworkUpdateActorData kNetUpdateActorData;
  218. kNetUpdateActorData.m_dwGuildID=chrUpdatePacket.dwGuildID;
  219. kNetUpdateActorData.m_dwMovSpd=chrUpdatePacket.bMovingSpeed;
  220. kNetUpdateActorData.m_dwAtkSpd=chrUpdatePacket.bAttackSpeed;
  221. kNetUpdateActorData.m_dwArmor=chrUpdatePacket.awPart[CHR_EQUIPPART_ARMOR];
  222. kNetUpdateActorData.m_dwWeapon=chrUpdatePacket.awPart[CHR_EQUIPPART_WEAPON];
  223. kNetUpdateActorData.m_dwHair=chrUpdatePacket.awPart[CHR_EQUIPPART_HAIR];
  224. kNetUpdateActorData.m_dwVID=chrUpdatePacket.dwVID;
  225. kNetUpdateActorData.m_kAffectFlags.CopyData(0, sizeof(chrUpdatePacket.dwAffectFlag[0]), &chrUpdatePacket.dwAffectFlag[0]);
  226. kNetUpdateActorData.m_kAffectFlags.CopyData(32, sizeof(chrUpdatePacket.dwAffectFlag[1]), &chrUpdatePacket.dwAffectFlag[1]);
  227. kNetUpdateActorData.m_sAlignment=chrUpdatePacket.sAlignment;
  228. kNetUpdateActorData.m_byPKMode=chrUpdatePacket.bPKMode;
  229. kNetUpdateActorData.m_dwStateFlags=chrUpdatePacket.bStateFlag;
  230. kNetUpdateActorData.m_dwMountVnum=chrUpdatePacket.dwMountVnum;
  231. __RecvCharacterUpdatePacket(&kNetUpdateActorData);
  232.  
  233. return true;
  234. }
  235.  
  236. bool CPythonNetworkStream::RecvCharacterUpdatePacketNew()
  237. {
  238. TPacketGCCharacterUpdate2 chrUpdatePacket;
  239. if (!Recv(sizeof(chrUpdatePacket), &chrUpdatePacket))
  240. return false;
  241.  
  242. SNetworkUpdateActorData kNetUpdateActorData;
  243. kNetUpdateActorData.m_dwGuildID=chrUpdatePacket.dwGuildID;
  244. kNetUpdateActorData.m_dwMovSpd=chrUpdatePacket.bMovingSpeed;
  245. kNetUpdateActorData.m_dwAtkSpd=chrUpdatePacket.bAttackSpeed;
  246. kNetUpdateActorData.m_dwArmor=chrUpdatePacket.awPart[CHR_EQUIPPART_ARMOR];
  247. kNetUpdateActorData.m_dwWeapon=chrUpdatePacket.awPart[CHR_EQUIPPART_WEAPON];
  248. kNetUpdateActorData.m_dwHair=chrUpdatePacket.awPart[CHR_EQUIPPART_HAIR];
  249. kNetUpdateActorData.m_dwVID=chrUpdatePacket.dwVID;
  250. kNetUpdateActorData.m_kAffectFlags.CopyData(0, sizeof(chrUpdatePacket.dwAffectFlag[0]), &chrUpdatePacket.dwAffectFlag[0]);
  251. kNetUpdateActorData.m_kAffectFlags.CopyData(32, sizeof(chrUpdatePacket.dwAffectFlag[1]), &chrUpdatePacket.dwAffectFlag[1]);
  252. kNetUpdateActorData.m_sAlignment=chrUpdatePacket.sAlignment;
  253. kNetUpdateActorData.m_byPKMode=chrUpdatePacket.bPKMode;
  254. kNetUpdateActorData.m_dwStateFlags=chrUpdatePacket.bStateFlag;
  255. kNetUpdateActorData.m_dwMountVnum=chrUpdatePacket.dwMountVnum;
  256. __RecvCharacterUpdatePacket(&kNetUpdateActorData);
  257.  
  258. return true;
  259. }
  260.  
  261. void CPythonNetworkStream::__RecvCharacterAppendPacket(SNetworkActorData * pkNetActorData)
  262. {
  263. // NOTE : 카메라가 땅에 묻히는 문제의 해결을 위해 메인 캐릭터가 지형에 올려지기
  264. // 전에 맵을 업데이트 해 높이를 구할 수 있도록 해놓아야 합니다.
  265. // 단, 게임이 들어갈때가 아닌 이미 캐릭터가 추가 된 이후에만 합니다.
  266. // 헌데 이동인데 왜 Move로 안하고 Append로 하는지..? - [levites]
  267. IAbstractPlayer& rkPlayer = IAbstractPlayer::GetSingleton();
  268. if (rkPlayer.IsMainCharacterIndex(pkNetActorData->m_dwVID))
  269. {
  270. rkPlayer.SetRace(pkNetActorData->m_dwRace);
  271.  
  272. __SetWeaponPower(rkPlayer, pkNetActorData->m_dwWeapon);
  273.  
  274. if (rkPlayer.NEW_GetMainActorPtr())
  275. {
  276. CPythonBackground::Instance().Update(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY, 0.0f);
  277. CPythonCharacterManager::Instance().Update();
  278.  
  279. // NOTE : 사귀 타워일 경우 GOTO 로 이동시에도 맵 이름을 출력하도록 처리
  280. {
  281. std::string strMapName = CPythonBackground::Instance().GetWarpMapName();
  282. if (strMapName == "metin2_map_deviltower1")
  283. __ShowMapName(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY);
  284. }
  285. }
  286. else
  287. {
  288. __ShowMapName(pkNetActorData->m_lCurX, pkNetActorData->m_lCurY);
  289. }
  290. }
  291.  
  292. m_rokNetActorMgr->AppendActor(*pkNetActorData);
  293.  
  294. if (GetMainActorVID()==pkNetActorData->m_dwVID)
  295. {
  296. rkPlayer.SetTarget(0);
  297. if (m_bComboSkillFlag)
  298. rkPlayer.SetComboSkillFlag(m_bComboSkillFlag);
  299.  
  300. __SetGuildID(pkNetActorData->m_dwGuildID);
  301. //CPythonApplication::Instance().SkipRenderBuffering(10000);
  302. }
  303. }
  304.  
  305. void CPythonNetworkStream::__RecvCharacterUpdatePacket(SNetworkUpdateActorData * pkNetUpdateActorData)
  306. {
  307. m_rokNetActorMgr->UpdateActor(*pkNetUpdateActorData);
  308.  
  309. IAbstractPlayer& rkPlayer = IAbstractPlayer::GetSingleton();
  310. if (rkPlayer.IsMainCharacterIndex(pkNetUpdateActorData->m_dwVID))
  311. {
  312. __SetGuildID(pkNetUpdateActorData->m_dwGuildID);
  313. __SetWeaponPower(rkPlayer, pkNetUpdateActorData->m_dwWeapon);
  314.  
  315. __RefreshStatus();
  316. __RefreshAlignmentWindow();
  317. __RefreshEquipmentWindow();
  318. __RefreshInventoryWindow();
  319. }
  320. else
  321. {
  322. rkPlayer.NotifyCharacterUpdate(pkNetUpdateActorData->m_dwVID);
  323. }
  324. }
  325.  
  326. bool CPythonNetworkStream::RecvCharacterDeletePacket()
  327. {
  328. TPacketGCCharacterDelete chrDelPacket;
  329.  
  330. if (!Recv(sizeof(chrDelPacket), &chrDelPacket))
  331. {
  332. TraceError("CPythonNetworkStream::RecvCharacterDeletePacket - Recv Error");
  333. return false;
  334. }
  335.  
  336. m_rokNetActorMgr->RemoveActor(chrDelPacket.dwVID);
  337.  
  338. // 캐릭터가 사라질때 개인 상점도 없애줍니다.
  339. // Key Check 를 하기때문에 없어도 상관은 없습니다.
  340. PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_GAME],
  341. "BINARY_PrivateShop_Disappear",
  342. Py_BuildValue("(i)", chrDelPacket.dwVID)
  343. );
  344.  
  345. return true;
  346. }
  347.  
  348.  
  349. bool CPythonNetworkStream::RecvCharacterMovePacket()
  350. {
  351. TPacketGCMove kMovePacket;
  352. if (!Recv(sizeof(TPacketGCMove), &kMovePacket))
  353. {
  354. Tracen("CPythonNetworkStream::RecvCharacterMovePacket - PACKET READ ERROR");
  355. return false;
  356. }
  357.  
  358. __GlobalPositionToLocalPosition(kMovePacket.lX, kMovePacket.lY);
  359.  
  360. SNetworkMoveActorData kNetMoveActorData;
  361. kNetMoveActorData.m_dwArg=kMovePacket.bArg;
  362. kNetMoveActorData.m_dwFunc=kMovePacket.bFunc;
  363. kNetMoveActorData.m_dwTime=kMovePacket.dwTime;
  364. kNetMoveActorData.m_dwVID=kMovePacket.dwVID;
  365. kNetMoveActorData.m_fRot=kMovePacket.bRot*5.0f;
  366. kNetMoveActorData.m_lPosX=kMovePacket.lX;
  367. kNetMoveActorData.m_lPosY=kMovePacket.lY;
  368. kNetMoveActorData.m_dwDuration=kMovePacket.dwDuration;
  369.  
  370. m_rokNetActorMgr->MoveActor(kNetMoveActorData);
  371.  
  372. return true;
  373. }
  374.  
  375. bool CPythonNetworkStream::RecvOwnerShipPacket()
  376. {
  377. TPacketGCOwnership kPacketOwnership;
  378.  
  379. if (!Recv(sizeof(kPacketOwnership), &kPacketOwnership))
  380. return false;
  381.  
  382. m_rokNetActorMgr->SetActorOwner(kPacketOwnership.dwOwnerVID, kPacketOwnership.dwVictimVID);
  383.  
  384. return true;
  385. }
  386.  
  387. bool CPythonNetworkStream::RecvSyncPositionPacket()
  388. {
  389. TPacketGCSyncPosition kPacketSyncPos;
  390. if (!Recv(sizeof(kPacketSyncPos), &kPacketSyncPos))
  391. return false;
  392.  
  393. TPacketGCSyncPositionElement kSyncPos;
  394.  
  395. UINT uSyncPosCount=(kPacketSyncPos.wSize-sizeof(kPacketSyncPos))/sizeof(kSyncPos);
  396. for (UINT iSyncPos=0; iSyncPos<uSyncPosCount; ++iSyncPos)
  397. {
  398. if (!Recv(sizeof(TPacketGCSyncPositionElement), &kSyncPos))
  399. return false;
  400.  
  401. #ifdef __MOVIE_MODE__
  402. return true;
  403. #endif __MOVIE_MODE__
  404.  
  405. //Tracenf("CPythonNetworkStream::RecvSyncPositionPacket %d (%d, %d)", kSyncPos.dwVID, kSyncPos.lX, kSyncPos.lY);
  406.  
  407. __GlobalPositionToLocalPosition(kSyncPos.lX, kSyncPos.lY);
  408. m_rokNetActorMgr->SyncActor(kSyncPos.dwVID, kSyncPos.lX, kSyncPos.lY);
  409.  
  410. /*
  411. CPythonCharacterManager & rkChrMgr = CPythonCharacterManager::Instance();
  412. CInstanceBase * pkChrInst = rkChrMgr.GetInstancePtr(kSyncPos.dwVID);
  413.  
  414. if (pkChrInst)
  415. {
  416. pkChrInst->NEW_SyncPixelPosition(kSyncPos.lX, kSyncPos.lY);
  417. }
  418. */
  419. }
  420.  
  421. return true;
  422. }
  423.  
  424.  
  425. /*
  426. bool CPythonNetworkStream::RecvCharacterAppendPacket()
  427. {
  428. TPacketGCCharacterAdd chrAddPacket;
  429.  
  430. if (!Recv(sizeof(chrAddPacket), &chrAddPacket))
  431. return false;
  432.  
  433. __GlobalPositionToLocalPosition(chrAddPacket.lX, chrAddPacket.lY);
  434.  
  435. SNetworkActorData kNetActorData;
  436. kNetActorData.m_dwGuildID=chrAddPacket.dwGuild;
  437. kNetActorData.m_dwEmpireID=chrAddPacket.bEmpire;
  438. kNetActorData.m_dwMovSpd=chrAddPacket.bMovingSpeed;
  439. kNetActorData.m_dwAtkSpd=chrAddPacket.bAttackSpeed;
  440. kNetActorData.m_dwRace=chrAddPacket.wRaceNum;
  441. kNetActorData.m_dwShape=chrAddPacket.parts[CRaceData::PART_MAIN];
  442. kNetActorData.m_dwStateFlags=chrAddPacket.bStateFlag;
  443. kNetActorData.m_dwVID=chrAddPacket.dwVID;
  444. kNetActorData.m_dwWeapon=chrAddPacket.parts[CRaceData::PART_WEAPON];
  445. kNetActorData.m_fRot=chrAddPacket.angle;
  446. kNetActorData.m_kAffectFlags.CopyData(0, sizeof(chrAddPacket.dwAffectFlag[0]), &chrAddPacket.dwAffectFlag[0]);
  447. kNetActorData.m_kAffectFlags.CopyData(32, sizeof(chrAddPacket.dwAffectFlag[1]), &chrAddPacket.dwAffectFlag[1]);
  448. kNetActorData.SetPosition(chrAddPacket.lX, chrAddPacket.lY);
  449. kNetActorData.m_stName=chrAddPacket.name;
  450. __RecvCharacterAppendPacket(&kNetActorData);
  451. return true;
  452. }
  453. */
Advertisement
Add Comment
Please, Sign In to add comment