예제 #1
0
 /**
  * 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;
 }