示例#1
0
 public function Auth()
 {
     /* Load the player stats */
     $this->stats = Accounts::GetLoadedStats($this->id);
     if ($this->stats == null) {
         $this->stats = DB::GetAccountStats($this->id);
     }
     if ($this->stats == null) {
         $this->player->Send(COLOR_RED, '* Error loading your stats, contact an administrator.');
         $this->player->Kick();
         return;
     }
     Log::Append(LOG_JOINQUIT, "[{$this->player->id}] {$this->player->name} logged in");
     /* Set the player authed and stop the limit login time */
     Accounts::EraseLoadedStats($this->id);
     $this->authed = true;
     $this->data['password'] = null;
     KillTimer($this->loginTimer);
     $this->loginTimer = null;
     $this->player->SetAdminLevel($this->data['adminlevel']);
     /* Save the player last ip */
     $data = array();
     $data['id'] = $this->id;
     $data['last_ip'] = $this->player->ip;
     DB::SaveAccount($data);
     /*
      * Set the player starting location
      */
     $location0 = Locations::Find(0);
     $location = Locations::Find($this->stats['location']);
     $vworld = $this->stats['vworld'];
     if ($location != null) {
         if ($location->StayAfterLogout() == false) {
             /* Find the location entrance to location0 */
             while ($location->GetParent() != null && $location->GetParent() != $location0) {
                 $location = $location->GetParent();
             }
             if ($location->GetParent() != null) {
                 $entrance = $location->GetEntrance();
                 $this->stats['x'] = $entrance->position->x;
                 $this->stats['y'] = $entrance->position->y;
                 $this->stats['z'] = $entrance->position->z;
                 $this->stats['angle'] = $entrance->position->angle;
             }
             $location = $location0;
             $vworld = 0;
         }
     } else {
         $location = $location0;
         $vworld = 0;
     }
     $this->player->SetLocation($location);
     $this->player->SetVirtualWorld($vworld);
     /* Set player data */
     $this->player->SetSkin($this->stats['skin']);
     $this->player->SetExperience($this->stats['experience']);
     $this->player->SetLevel($this->stats['level']);
     $this->player->SetSex($this->stats['sex']);
     $this->player->SetAge($this->stats['age']);
     $this->player->SetReports($this->stats['reports']);
     $this->player->SetBank($this->stats['bank']);
     $this->player->FreezeBank($this->stats['bankfreezed']);
     $this->player->SetStrength($this->stats['strength']);
     $this->player->SetSpeedometer($this->stats['speedo']);
     /* Marriage is a special case */
     if ($this->stats['married'] != null) {
         /* Find their marriage */
         $marrystats = DB::GetAccountStats($this->stats['married'], 'sex');
         $marryaccount = DB::GetAccount($this->stats['married'], 'id', 'name');
         $this->player->MarryTo($marryaccount['name'], $marrystats['sex']);
     }
     /* Set the player faction and rank */
     $faction_is_null = 0;
     $rank_is_null = 0;
     if ($this->stats['faction'] == null) {
         $faction_is_null = 1;
     }
     if ($this->stats['rank'] == null) {
         $rank_is_null = 1;
     }
     if ($faction_is_null ^ $rank_is_null) {
         echo "[WARNING] Player {$this->player->name} has faction but not rank, or viceversa. Setting both to null\n";
         $this->stats['faction'] = null;
         $this->stats['rank'] = null;
     }
     $this->player->SetFaction($this->stats['faction']);
     $this->player->SetRank($this->stats['rank']);
     $this->player->SetOnduty($this->stats['onduty']);
     /**
      ** Load player skills
      **/
     $this->player->SetUpgradePoints($this->stats['upgradepts']);
     foreach ($this->stats as $name => $value) {
         if (!strncmp($name, 'sk_', 3)) {
             $name = substr($name, 3);
             $this->player->SetSkill(Players::GetSkillFlag($name), $value);
         }
     }
     /**
      ** Load player properties
      **/
     /* Spawn the player and set his last position, if he had */
     $this->player->LagProtection();
     $this->player->Spawn();
     if ($this->stats['x'] != 0 || $this->stats['y'] != 0 || $this->stats['z'] != 0 || $this->stats['angle'] != 0) {
         $pos = new Position($this->stats['x'], $this->stats['y'], $this->stats['z'], $this->stats['angle']);
         $sector = $location->Locate($pos);
         $this->player->SetPosition($pos);
         $location->StreamObjects($this->player, $pos, $sector);
     }
     /* Set player data required to be set after spawn */
     $this->player->SetHunger($this->stats['hunger']);
     $this->player->SetInjures($this->stats['injures']);
     $this->player->SetMoney($this->stats['money']);
     $this->player->CheckHealth(true);
     $this->player->CheckGuns(true);
     /* Set the player guns */
     for ($i = 0; $i < 13; $i++) {
         if ($this->stats['slot_' . $i] > 0) {
         }
     }
     /* Send the join info to players who requested it */
     foreach (Players::GetJQ() as $p) {
         $p->Send(COLOR_GRAY, "[JOIN] {$this->player->name}({$this->player->id}) has logged in");
     }
     /* Set the player message receiving defaults */
     if ($this->player->togjq == true) {
         Players::AddToJQ($this->player);
     }
     if ($this->player->togooc == true) {
         Players::AddToOOC($this->player);
     }
     /* Check if the player must spawn in jail */
     if ($this->stats['jailtime'] > 0) {
         $this->player->Jail($this->stats['jailtime']);
     }
     /* Show the clock */
     TextDrawShowForPlayer($this->player->id, Core::GetClock());
     $this->player->Update();
 }