/** * Construct * @param player $up * @param int $up_id hvis man ikke har spillerobjekt fra før */ public function __construct(player $up = null, $up_id = null, &$ref = null) { // lagre referanse? if ($ref === true) { $ref = $this; } // har vi spillerobjekt? if ($up) { $this->up = $up; } else { $this->up = player::get($up_id); if (!$this->up) { throw new HSException("Fant ikke gyldig spiller som det var referert til. Oppdragsystemet kan ikke fortsette."); } $this->up->oppdrag = $this; } $this->user_active = login::is_active_user($this->up); // sjekk om vi er på et aktivt oppdrag if ($this->up->params->get("oppdrag")) { // hent ut detaljer om oppdraget $oppdrag = new params($this->up->params->get("oppdrag")); // legg til som oppdrag $this->oppdrag[$oppdrag->get("o_id")] = $oppdrag->params; $this->load_params(); // sett som aktivt $this->active_set($oppdrag->get("o_id")); } // sett opp triggere for oppdragene som er tilgjengelige nå $this->load_triggers(); }
/** * Juster wanted nivå og sett i fengsel ved sannsynlighet * @param int $rank_points antall rankpoeng man skaffet (grunnlag for hvor mye wanted nivået går opp) * @param bool $success var handlingen vellykket slik at man ikke skal kunne komme i fengsel? * @param bool $force tving spilleren i fengsel * @param int $force_time tidspunkt når spiller skal slippes løs når man tvinger spilleren i fengsel */ public function fengsel_rank($rank_points, $success = false, $force = false, $force_time = NULL) { // finn ut hvor mye vi skal øke $increase = 100; if ($rank_points >= 0 && $rank_points <= 50) { $increase = $rank_points * 2 + 5; } // øk wanted level \Kofradia\DB::get()->exec("UPDATE users_players SET up_wanted_level = LEAST(1000, up_wanted_level * 1.10 + {$increase}) WHERE up_id = {$this->id}"); // hent wanted level og test fengsel $result = \Kofradia\DB::get()->query("SELECT up_wanted_level, up_fengsel_time FROM users_players WHERE up_id = {$this->id}"); $row = $result->fetch(\PDO::FETCH_NUM); $old_wanted_level = $this->data['up_wanted_level']; $this->data['up_wanted_level'] = $row[0]; $this->data['up_fengsel_time'] = $row[1]; $go_fengsel = $force || !$success && rand(200, 999) < $this->data['up_wanted_level']; $fengsel_time_wait = $this->fengsel_wait(); $fengsel_time_wait_new = $force_time ? (int) $force_time : ceil($this->data['up_wanted_level'] / 3); $fengsel_time_new = time() + $fengsel_time_wait_new; $change = $this->data['up_wanted_level'] - $old_wanted_level; // sette i fengsel eller forlenge tiden? $fengsel = false; if ($go_fengsel && ($fengsel_time_wait == 0 || $fengsel_time_wait < $fengsel_time_wait_new)) { // sett i fengsel \Kofradia\DB::get()->exec("\n\t\t\t\tUPDATE users_players\n\t\t\t\tSET\n\t\t\t\t\tup_fengsel_num = up_fengsel_num + IF(up_fengsel_time <= " . time() . ", 1, 0),\n\t\t\t\t\tup_fengsel_time = " . $fengsel_time_new . "/*,\n\t\t\t\t\tup_wanted_level = (up_wanted_level - {$increase}) / 1.10*/\n\t\t\t\tWHERE up_id = {$this->id}"); // hent ny data $result = \Kofradia\DB::get()->query("SELECT up_fengsel_num, up_wanted_level FROM users_players WHERE up_id = {$this->id}"); $row = $result->fetch(); $this->data['up_fengsel_num'] = $row['up_fengsel_num']; $this->data['up_fengsel_time'] = $fengsel_time_new; $this->data['up_wanted_level'] = $row['up_wanted_level']; // gi melding hvis aktiv bruker (den som viser siden) if ($fengsel_time_wait == 0 && login::is_active_user($this) && isset(ess::$b->page)) { ess::$b->page->add_message('Du ble tatt og kom i fengsel. Du slipper ut om ' . game::counter($fengsel_time_wait_new, true) . '. Wanted nivået er nå på ' . game::format_num($this->data['up_wanted_level'] / 10, 1) . ' %.', null, null, "fengsel"); } $fengsel = true; } // trigger $this->trigger("fengsel_rank", array("fengsel" => $fengsel, "fengsel_time" => $fengsel ? $fengsel_time_wait_new : 0, "wanted_level_old" => $old_wanted_level, "wanted_level_change" => $change)); return $fengsel ? false : $change; }