public static function SendLocationInfo(Player $player, $name, $owner = null, $price = -1) { $str = "~r~{$name}"; if ($owner != null) { $str .= "~n~~y~Owner:~w~ {$owner}"; } if ($price > -1) { $str .= "~n~~y~Price:~w~ {$price}\$"; } GameTextForPlayer($player->id, $str, 3000, 4); }
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); } }
protected function OnWalkin(Player $player, LocationEntrance $entrance) { $str = "~r~{$this->name}"; if ($this->cheapest) { $price = Core::FixIntegerDots($this->cheapest->GetPrice()); $str .= "~n~~y~Price:~w~ {$this->cheapest->GetPrice()}\$"; if ($this->maxrooms > 1) { $str .= " ~y~(Apartment~w~ {$this->cheapest->Number()}~y~)"; } } if ($this->maxrooms > 1) { if ($room = $this->GetRoom($player)) { $str .= "~n~~y~Your apartment:~w~ {$room->Number()}"; } $faction = $player->GetFaction(); if ($faction && ($room = $this->GetRoom($faction))) { $str .= "~n~~y~Your faction apartment:~w~ {$room->Number()}"; } } else { if ($room = $this->GetRoom($player)) { $str .= "~n~~y~You own this house"; } else { if (($faction = $player->GetFaction()) && ($room = $this->GetRoom($faction))) { $str .= "~n~~y~Your faction owns this house"; } } } GameTextForPlayer($player->id, $str, 5000, 4); }
/** ** Callbacks **/ public static function OnPlayerConnect($playerid) { /* Add to connected players list */ $player = new Player($playerid); Players::$players[$playerid] = $player; Players::$players_by_id[$playerid] = $player; /* TODO: Remove this */ AllowPlayerTeleport($playerid, 1); /* Set a nice view when connecting */ SetPlayerCameraPos($playerid, 1848.1669, -935.7288, 120.4602); SetPlayerCameraLookAt($playerid, 1954.8025, -1287.2996, 57.9777); GameTextForPlayer($playerid, 'Welcome to~n~~g~Italy~w~Mafia ~r~RolePlay', 3000, 6); Log::Append(LOG_JOINQUIT, "[{$player->id}] {$player->name}({$player->ip}) connected"); return CALLBACK_OK; }
protected function OnWalkout(Player $player, LocationEntrance $entrance) { GameTextForPlayer($player->id, "Exit to the {$entrance->name} entrance", 3000, 4); }