/** * Sett oppdrag som vellykket * * @param integer $o_id */ public function success($o_id, $text = 'Oppdraget «$name» ble utført vellykket!') { $o_id = (int) $o_id; if (!isset($this->oppdrag[$o_id])) { return false; } // kontroller at dette oppdraget er aktivt $oppdrag =& $this->oppdrag[$o_id]; $params = $this->params[$o_id]; if ($oppdrag['uo_active'] == 0) { return false; } // oppdater oppdraget $time = time(); $a = \Kofradia\DB::get()->exec("UPDATE users_oppdrag SET uo_repeats = uo_repeats + 1, uo_success = uo_success + 1, uo_last_time = {$time}, uo_last_state = 1, uo_availiable = 0, uo_locked = 1, uo_active = 0, uo_active_time = 0, uo_params = NULL WHERE uo_up_id = {$this->up->id} AND uo_o_id = {$o_id} AND uo_active != 0"); // ble ikke oppdatert? if ($a == 0) { // hent frisk data og avbryt $this->user_load_all(); return false; } $oppdrag['uo_repeats']++; $oppdrag['uo_success']++; $oppdrag['uo_last_time_prev'] = $oppdrag['uo_last_time']; $oppdrag['uo_last_time'] = time(); $oppdrag['uo_available'] = 0; $oppdrag['uo_locked'] = 1; $oppdrag['uo_active'] = 0; $oppdrag['uo_active_time'] = 0; $oppdrag['uo_params'] = null; // fjern oppdraget fra lokalt (skal ikke være på listen) unset($this->active); $this->active = false; unset($this->oppdrag[$o_id]); unset($this->params[$o_id]); $text = str_replace('$name', $oppdrag['o_title'], $text); // send teksten til brukeren if ($this->user_active) { ess::$b->page->add_message($text); } // sjekk for premie $prize = new container($params['o_params']->get("prize")); $prizes_msg = ''; if (count($prize->items) > 0) { $prizes = array(); foreach ($prize->items as $item) { switch ($item[0]) { case "cash": // gi brukeren pengene $cash = (int) $item[1]; $this->up->update_money($cash, true, true); $prizes[] = game::format_cash($cash); break; case "rank_points": $points = (int) $item[1]; $prizes[] = game::format_num($points) . " poeng"; // legg til ranken player::increase_rank_static($points, $this->up->id, true); break; // kuler // kuler case "bullets": $bullets = (int) $item[1]; // har vi plass til noen kuler? $kap = $this->up->weapon ? $this->up->weapon->data['bullets'] : 0; if ($this->up->weapon) { $free = $kap - $this->up->data['up_weapon_bullets'] - $this->up->data['up_weapon_bullets_auksjon']; $bullets = max(0, min($free, $bullets)); if ($bullets > 0) { // gi kuler \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = up_weapon_bullets + {$bullets} WHERE up_id = {$this->up->id}"); $this->up->data['up_weapon_bullets'] += $bullets; $prizes[] = fwords("%d kule", "%d kuler", $bullets); } } break; } } // mottok premie? if (count($prizes) > 0 && $this->user_active) { $last = ''; if (count($prizes) > 1) { $last = " og " . array_pop($prizes); } $prizes_msg = " Du mottok " . implode(", ", $prizes) . $last . "."; ess::$b->page->add_message("Du mottok " . implode(", ", $prizes) . $last . " for å ha fullført oppdraget «{$oppdrag['o_title']}»."); } } // melding i spillelogg global $_game; player::add_log_static("oppdrag", $text . $prizes_msg, 0, $this->up->id); // fjern fra params $this->up->params->lock(); $this->up->params->remove("oppdrag_id"); $this->up->params->remove("oppdrag", true); $this->link_triggers(); // trigger hos spiller $this->up->trigger("oppdrag", array("success" => true, "oppdrag" => $oppdrag, "params" => $params)); return true; }