function dopassengerof(Player $player, $numparams, $params) { if ($target = Core::FindPlayer($player, $params[1])) { if (IsPlayerInAnyVehicle($target->id)) { $vid = GetPlayerVehicleID($target->id); PutPlayerInVehicle($player->id, $vid, 1); } } return COMMAND_OK; }
public function Update() { if ($this->location == null) { return; } $this->updates++; /* Update player position, speed and area sector */ GetPlayerPos($this->id, &$this->position->x, &$this->position->y, &$this->position->z); GetPlayerFacingAngle($this->id, &$this->position->angle); $this->speed = $this->last_updated_position->DistanceTo($this->position); $sector = $this->location->Locate($this->position); if ($this->sector->id != $sector->id) { $this->sector->RemovePlayer($this); $sector->AddPlayer($this); } $this->sector = $sector; $this->last_updated_position = clone $this->position; /* Save player state */ $this->state = GetPlayerState($this->id); if ($this->firstSpawn) { return; } /* Update ping */ $this->ping = GetPlayerPing($this->id); /* Check the player vehicle */ if (IsPlayerInAnyVehicle($this->id)) { if ($this->vehicle === null) { /* Show incar textdraw */ $this->incar_draw = Players::GetIncarDraw($this->id); TextDrawShowForPlayer($this->id, $this->incar_draw); TextDrawSetString($this->incar_draw, '...'); } $this->vehicle = Vehicles::FindByID(GetPlayerVehicleID($this->id)); if ($this->vehicle != null) { if ($this->state == PLAYER_STATE_DRIVER && $this->vehicle->Type() == VEHICLE_SHOP) { $this->Freeze(); } } } else { if ($this->incar_draw !== null) { /* Hide incar textdraw */ TextDrawHideForPlayer($this->id, $this->incar_draw); $this->incar_draw = null; } if ($this->vehicle != null) { if ($this->vehicle->Type() == VEHICLE_SHOP) { /* Player was freezed in a shop vehicle but left it, so allow him to move again */ $this->Freeze(false); } } $this->vehicle = null; } /* Update the incar textdraw */ if ($this->incar_draw !== null && $this->updates & 1) { if ($this->speedometer == 'mph') { $speed = $this->speed * 4.464; } else { $speed = $this->speed * 7.2; } $string = sprintf('~y~Speed~n~~w~%d %s~n~~y~Fuel~n~~w~%.1f LT', (int) $speed, $this->speedometer, $this->vehicle->Fuel()); TextDrawSetString($this->incar_draw, $string); } /** ** Update the nametag drawing **/ $sectors = $this->sector->FindSectors($this->position, 12.5); $watchplayers = array(); foreach ($sectors as $sector) { foreach ($sector->GetPlayers() as $player) { if ($player->id >= $this->id) { break; } if ($this->position->DistanceTo($player->position) < 12.5) { $watchplayers[$player->id] = $player; } } } ksort($watchplayers); $i = 0; foreach ($watchplayers as $id => $player) { for (; $i < $id; $i++) { if ($this->seeingNametags[$i] == true) { $p = Players::FindByID($i); if ($p) { $this->CanIdentify($p, false); $p->CanIdentify($this, false); } $this->seeingNametags[$i] = false; } } $i++; if ($this->vehicle == $player->vehicle) { $equalv = true; } else { $equalv = false; } if (!$player->vehicle || !$player->vehicle->HasWindows() || $this->vehicle && $equalv) { if ($this->seeingNametags[$id] == false) { $this->CanIdentify($player, true); } } else { if ($this->seeingNametags[$id] == true) { $this->CanIdentify($player, false); } } if (!$this->vehicle || !$this->vehicle->HasWindows() || $player->vehicle && $equalv) { if ($player->seeingNametags[$this->id] == false) { $player->CanIdentify($this, true); } } else { if ($player->seeingNametags[$this->id] == true) { $player->CanIdentify($this, false); } } } while ($i < $this->id) { if ($this->seeingNametags[$i] == true) { $player = Players::FindByID($i); if ($player) { $this->CanIdentify($player, false); $player->CanIdentify($this, false); } } $i++; } /** ** Update the hunger and injures health **/ if ($this->checkhealth && !$this->dead) { $cur = time(); if ($this->timedeath > 0) { if ($cur - $this->timedeath > 60) { /* If the player was 60 seconds dieing, finish him */ $this->Kill(); } else { if ($cur - $this->timedeath > 5) { /* After 5 seconds, other players are allowed to finish him */ GetPlayerHealth($this->id, &$health); if ($health + 2 < $this->hunger * 100 / MAX_HUNGER_POINTS) { $this->Kill(); } } else { $health = $this->hunger * 100 / MAX_HUNGER_POINTS; if ($health <= 0) { $this->Kill(); } else { SetPlayerHealth($this->id, $health); } } } } else { $this->hunger--; $health = $this->hunger * 100 / MAX_HUNGER_POINTS; if ($health == 0) { $this->Kill(); } else { if (!$this->lagprotection) { GetPlayerHealth($this->id, &$tmphealth); if ($tmphealth == 0) { $this->Kill(); } else { if (!($this->hunger % 20)) { /* Update health only every 10 seconds */ SetPlayerHealth($this->id, $health); } GetPlayerArmour($this->id, &$armor); if ($tmphealth + 2 < $health) { SetPlayerHealth($this->id, $health); $armor -= $health - $tmphealth; SetPlayerArmour($this->id, $armor); } if ($armor < 0) { $armor = 0; } /* The lowest possible armor points is 0 */ $injures = 100 - $armor; if ($injures < $this->injures) { /* The player has less injures than he should have */ SetPlayerArmour($this->id, 100 - $this->injures); } else { if ($injures > $this->injures) { /* The player has more injures that the last registered ones */ $this->injures = $injures; } } if ($this->injures == 100) { /* The player is dead, full injures */ if (IsPlayerInAnyVehicle($this->id)) { $this->Kill(); } else { $anim = Animations::GetDeathAnim(); $this->ClearAnimations(); $this->Animate($anim); $this->timedeath = time(); $this->Send(COLOR_YELLOW, '* You are dieing! You will be dead in one minute if you don\'t get a medic help.'); $this->Send(COLOR_YELLOW, '* You can also accept your own death after 10 seconds using /die command.'); SetPlayerArmour($this->id, 0); } } } } } } } /* If the player has lag protection, decrease one unit */ if ($this->lagprotection) { $this->lagprotection--; } if ($this->lagprotection_guns) { $this->lagprotection_guns--; } /* Update the jail time */ if ($this->jailtime != 0 && $this->updates & 1) { $this->jailtime--; if ($this->jailtime < 1) { /* Unjail the player */ $this->jailtime = 1; $this->Unjail(); } else { /* Ensure that the player is still in jail */ $bounds = PoliceDepartment::AdminCellBounds(); if (!$this->position->IsInCube($bounds['min'], $bounds['max'])) { $this->SetLocation(PoliceDepartment::Instance()); $this->SetPosition(PoliceDepartment::AdminCell()); } /* Send the time remaining message */ GameTextForPlayer($this->id, "Jail time remaining: {$this->jailtime} seconds", 1000, 4); } } /* * Update animation */ if ($this->animation && $this->updates & 1 && $this->vehicle == null && ($this->animation->forced || $this->animation->continue)) { ApplyAnimation($this->id, $this->animation->lib, $this->animation->anim, 4.0, $this->animation->loop, $this->animation->movex, $this->animation->movey, $this->animation->continue, $this->animation->time); } }
private static function SendWhisper(Player $player, $target, $text) { $playerv = GetPlayerVehicleID($player->id); $targetv = GetPlayerVehicleID($target->id); if ($playerv == 0 || $playerv != $targetv) { if ($player == $target || $player->vworld != $target->vworld || $player->Position()->DistanceTo($target->Position()) > 3.5) { return; } /* Too far or invalid target */ } Log::Append(LOG_MESSAGE, "{WHISPER} [{$player->id}] {$player->name} whispers to {$target->name}[{$target->id}]: {$text}"); $target->Send(COLOR_WHISPER, "{$player->name} whispers: {$text}"); $player->Send(COLOR_WHISPER, "* Whisper sent to {$target->name}: {$text}"); }