Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. char __fastcall CWorld::EnterWorld(
  2.         CWorld *this,
  3.         CCreature *creature,
  4.         FVector *AppearingPos,
  5.         unsigned int AppearingZoneID,
  6.         bool isByLogin,
  7.         bool isByDirectMoveZone)
  8. {
  9.   CWorld *v9; // rbx
  10.   CCreature_vtbl *v11; // rax
  11.   User *v12; // r14
  12.   FVector *v13; // rax
  13.   CWorld *v14; // rax
  14.   CGeoData *v15; // rax
  15.   CUserSocket *v16; // rsi
  16.   CUserSocket_vtbl *v17; // rdi
  17.   CWorld *v18; // rax
  18.   FVector *v19; // rax
  19.   FVector v20; // [rsp+40h] [rbp-48h] BYREF
  20.  
  21.   v9 = this;
  22.   if ( !creature )
  23.   {
  24.     CLog::Add(&Log, 2, "creature null at file[%s], line[%d]", "world_server.cpp", 1962);
  25.     return 0;
  26.   }
  27.   if ( !creature->m_data )
  28.   {
  29.     CLog::Add(&Log, 2, "creature data null at file[%s], line[%d]", "world_server.cpp", 1968);
  30.     return 0;
  31.   }
  32.   v11 = creature->__vftable;
  33.   creature->m_bIsRestarting = 0;
  34.   if ( v11->IsPC(creature) )
  35.   {
  36.     creature->m_data->m_bIsActive = 1;
  37.     v12 = creature->CastUser(creature);
  38.     v12->SendUserInfo(v12, 0i64, 0i64);
  39.     User::SendVitalityEffectInfo(v12, 0i64);
  40.     if ( g_nCheckCastleId == 2 )
  41.     {
  42.       if ( v12->m_AreaMod.m_bIsInBattleField )
  43.       {
  44.         v13 = v12->GetPos(v12, &v20);
  45.         v12->m_nCurCastleId = CCastle::GetBattleFieldCastleId(v13);
  46.       }
  47.       else
  48.       {
  49.         v12->m_nCurCastleId = 0;
  50.       }
  51.     }
  52.     if ( isByLogin )
  53.     {
  54.       v12->OnActivate(v12);
  55.       AppearingPos->z = AppearingPos->z + 5.0;
  56.       if ( v12->m_data->m_moveType != CMT_FLY && !v12->m_AreaMod.m_bIsUnderWater )
  57.       {
  58.         v14 = CWorld::Inst();
  59.         v15 = v14->GetGeo(v14);
  60.         AppearingPos->z = (double)(int)CGeoData::FindGround(
  61.                                          v15,
  62.                                          (int)AppearingPos->x,
  63.                                          (int)AppearingPos->y,
  64.                                          (int)AppearingPos->z);
  65.         CSharedObject::SetPos(v12->m_data, AppearingPos);
  66.       }
  67.     }
  68.     User::SendQuestList(v12, 0i64);
  69.     if ( g_bFreeOpenServer )
  70.     {
  71.       v16 = v12->GetSocket(v12);
  72.       v17 = v16->__vftable;
  73.       User::CheckPremiumType(v12, PUT_FREE_USER);
  74.       v17->Send(v16, "chdc", 254i64);
  75.       v9 = this;
  76.     }
  77.   }
  78.   v18 = CWorld::Inst();
  79.   if ( !CWorld::IsValidPosition(v18, (int)AppearingPos->x, (int)AppearingPos->y) )
  80.   {
  81.     CLog::Add(
  82.       &Log,
  83.       2,
  84.       "invalid position (%d, %d) at file[%s], line[%d]",
  85.       (unsigned int)(int)AppearingPos->x,
  86.       (int)AppearingPos->y,
  87.       "world_server.cpp",
  88.       2029);
  89.     return 0;
  90.   }
  91.   creature->m_nBeforeEnterWorldTick = GetTickCount();
  92.   if ( !isByDirectMoveZone )
  93.   {
  94.     creature->AddRef(creature, "world_server.cpp", 2036i64, ORT_SERIALIZED_WORLD_THREAD);
  95.     FVector::FVector(&v20, AppearingPos);
  96.     CWorld::AsyncEnterWorld(v9, creature, v19, AppearingZoneID, isByLogin);
  97.   }
  98.   return 1;
  99. }