예제 #1
0
 /**
  * Frigjør en spiller fra aktive auksjoner
  * @param player $up
  * @param int $up_id
  * @param int $type skal dette kun gjelde en bestemt type auksjon?
  */
 public static function player_release(player $up = null, $up_id = null, $type = null)
 {
     if ($up) {
         $up_id = $up->id;
     }
     $type = $type ? " AND a_type = " . (int) $type : "";
     // hent auksjonene spilleren selv holder
     $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT a_id\n\t\t\tFROM auksjoner\n\t\t\tWHERE a_completed = 0 AND a_up_id = {$up_id}{$type}");
     while ($row = $result->fetch()) {
         $a = auksjon::get($row['a_id']);
         if ($a) {
             $a->handle_delete();
         }
     }
     // hent budene vi har og sett de som inaktive
     $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ab_id, ab_up_id, ab_bid, a_id, a_type, a_params\n\t\t\tFROM auksjoner_bud JOIN auksjoner ON a_id = ab_a_id\n\t\t\tWHERE a_completed = 0 AND ab_up_id = {$up_id} AND ab_active != 0{$type}");
     while ($row = $result->fetch()) {
         self::set_bud_inactive($row, null, $up);
     }
 }
예제 #2
0
 /**
  * Frigjør relasjon grunnet lav helse
  */
 public function release_relations_low_health($release_all = null, player $up_attack = null, $instant = null)
 {
     $ret = array("ffm" => array());
     // behandle FF
     $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ff_id\n\t\t\tFROM ff_members\n\t\t\t\tJOIN ff ON ffm_ff_id = ff_id AND ff_inactive = 0" . ($release_all ? "" : " AND ff_is_crew = 0") . "\n\t\t\tWHERE ffm_up_id = {$this->id} AND ffm_status != " . ff_member::STATUS_KICKED . " AND ffm_status != " . ff_member::STATUS_DEACTIVATED);
     $lost = false;
     while ($row = $result->fetch()) {
         $ff = ff::get_ff($row['ff_id'], ff::LOAD_SCRIPT);
         if ($ff && isset($ff->members['list'][$this->id])) {
             $ffm = $ff->members['list'][$this->id];
             if ($ffm->data['ffm_status'] == ff_member::STATUS_MEMBER) {
                 $ret['ffm'][] = $ffm;
             }
             $ffm->remove_player(true, $instant ? $up_attack : null);
         }
         $lost = true;
     }
     // oppdater tidspunkt for når man mistet FF
     if ($lost) {
         \Kofradia\DB::get()->exec("UPDATE users_players SET up_health_ff_time = 0 WHERE up_id = {$this->id}");
     }
     // fjern fra aktive auksjoner for firma
     if (!$release_all) {
         auksjon::player_release($this, null, auksjon::TYPE_FIRMA);
     }
     return $ret;
 }
예제 #3
0
 * 
 * Hvis en spiller har under 25 % våpentrening mister spilleren våpenet (om det er bedre våpen enn glock)
 */
// sett ned våpentreningen
$expire = time() - 172800;
// kun for de som har vært aktive siste 48 timer
\Kofradia\DB::get()->exec("\n\tUPDATE users_players\n\tSET up_weapon_training = GREATEST(0.1, up_weapon_training * 0.988)\n\tWHERE up_weapon_training > 0.1\n\t\tAND up_last_online > {$expire}");
// hent de spillerene som skal nedgradere eller miste våpenet sitt
$result = \Kofradia\DB::get()->query("\n\tSELECT up_id, up_name, up_weapon_id, up_weapon_bullets\n\tFROM users_players\n\tWHERE up_weapon_training < 0.25 AND up_weapon_id > 1 AND up_access_level != 0");
while ($row = $result->fetch()) {
    if (!isset(weapon::$weapons[$row['up_weapon_id']])) {
        continue;
    }
    $w =& weapon::$weapons[$row['up_weapon_id']];
    // fjern fra evt. auksjoner
    auksjon::player_release(null, $row['up_id'], auksjon::TYPE_KULER);
    // skal vi nedgradere våpenet?
    // man vil aldri miste våpen, det blir alltid nedgradert til dårligste våpen
    // beholder resten av koden i tilfelle vi ønsker å gjøre forandringer igjen
    if ($row['up_weapon_id'] > 1) {
        $new_id = $row['up_weapon_id'] - 1;
        $new_w =& weapon::$weapons[$new_id];
        $training = weapon::DOWNGRADE_TRAINING;
        // sett til 50 % på forrige våpen
        $a = \Kofradia\DB::get()->exec("\n\t\t\tUPDATE users_players\n\t\t\tSET up_weapon_id = {$new_id}, up_weapon_bullets = 0, up_weapon_training = {$training}\n\t\t\tWHERE up_id = {$row['up_id']} AND up_weapon_id = {$row['up_weapon_id']}");
        if ($a > 0) {
            // gi hendelse
            player::add_log_static("weapon_lost", $row['up_weapon_id'] . ":" . urlencode($w['name']) . ":" . urlencode($row['up_weapon_bullets']) . ":" . urlencode($new_w['name']) . ":" . $training, 1, $row['up_id']);
            // logg
            putlog("LOG", "NEDGRADERT VÅPEN: {$row['up_name']} mistet våpenet {$w['name']} med {$row['up_weapon_bullets']} kuler grunnet lav våpentrening. Fikk i stedet våpenet {$new_w['name']}.");
        }
예제 #4
0
파일: class.ff.php 프로젝트: Kuzat/kofradia
 /**
  * FF dør ut
  * @param player $up_attack spilleren som angrep eier som førte til at FF ble lagt ned
  */
 public function dies(player $up_attack = null)
 {
     global $_game, $__server;
     // allerede inaktiv?
     if (!$this->active) {
         throw new HSException("FF er allerede lagt ned.");
     }
     // legg til logg hos medlemmer og inviterte
     foreach ($this->members['members'] as $member) {
         // brukerlogg
         player::add_log_static("ff_dead", $this->refstring . ":" . urlencode($this->data['ff_name']), $this->id, $member->id);
     }
     foreach ($this->members['invited'] as $member) {
         // brukerlogg
         player::add_log_static("ff_dead_invited", $this->refstring . ":" . urlencode($this->data['ff_name']), $this->id, $member->id);
     }
     // fjern fra menyen hos medlemmer
     $this->remove_menu_entries();
     // logg
     putlog("CREWCHAN", ucfirst($this->refstring) . " %u{$this->data['ff_name']}%u har blitt oppløst. {$__server['path']}/ff/?ff_id={$this->id}");
     putlog("INFO", ucfirst($this->refstring) . " %u{$this->data['ff_name']}%u har blitt oppløst.");
     // live-feed
     livefeed::add_row(ucfirst($this->refstring) . " " . htmlspecialchars($this->data['ff_name']) . " ble oppløst.");
     // broderskap?
     if ($this->type['type'] == "familie") {
         // sett FF til inaktiv
         $time = time();
         $this->active = false;
         $this->data['ff_inactive'] = 1;
         $this->data['ff_inactive_time'] = $time;
         \Kofradia\DB::get()->exec("UPDATE ff SET ff_inactive = 1, ff_inactive_time = {$time} WHERE ff_id = {$this->id}");
         // legg ut konkurranse om nytt broderskap
         $others = false;
         if ($this->competition) {
             // er vi det eneste broderskapet igjen i konkurransen?
             $result = \Kofradia\DB::get()->query("SELECT COUNT(ff_id) FROM ff WHERE ff_fff_id = {$this->data['fff_id']} AND ff_inactive = 0 AND ff_id != {$this->id}");
             $others = $result->fetchColumn(0) > 0;
         }
         if (!$this->data['ff_is_crew'] && !$this->params->get("die_no_new") && !$others) {
             self::create_competition();
             // sett params slik at det ikke blir lagt ut ny konkurranse dersom broderskapet blir aktivert og så deaktivert igjen
             $this->params->update("die_no_new", 1, true);
         }
         // hendelse
         $this->add_log("dissolve", null);
     } else {
         $name_old = $this->data['ff_name'];
         // nullstill firmaet
         $this->reset((bool) $up_attack);
         $this->reset_members();
         // hendelse
         $this->add_log("dissolve", null);
         if ($up_attack) {
             // angriper overtar firmaet
             $this->player_set_priority($up_attack->id, 1, null, true);
             $this->reset_date_reg(true);
             // gi hendelse til angriper
             $up_attack->add_log("ff_takeover", $this->id . ":" . urlencode($name_old) . ":" . urlencode($this->data['ff_name']) . ":" . urlencode($this->type['refobj']) . ":" . urlencode($this->type['priority'][1]), 0);
             // live-feed
             livefeed::add_row('<user id="' . $up_attack->id . '" /> tok over driften av ' . $this->type['refobj'] . ' <a href="' . ess::$s['rpath'] . '/ff/?ff_id=' . $this->id . '">' . htmlspecialchars($this->data['ff_name']) . '</a>' . ($name_old != $this->data['ff_name'] ? ' (tidligere ' . htmlspecialchars($name_old) . ')' : '') . '.');
         } else {
             // opprett ny auksjon
             auksjon::create_auksjon_ff($this);
         }
     }
 }
예제 #5
0
 /**
  * Trekke tilbake bud
  * Bud på kuleauksjoner skal ikke trekkes tilbake
  */
 protected function bid_delete()
 {
     // hent budet
     $result = \Kofradia\DB::get()->query("SELECT ab_id, ab_bid, ab_time FROM auksjoner_bud WHERE ab_a_id = {$this->auksjon->id} AND ab_up_id = {$this->up->id} AND ab_active != 0");
     $bud = $result->fetch();
     // har ikke noe bud?
     if (!$bud) {
         ess::$b->page->add_message("Du har ikke noe bud på denne auksjonen.", "error");
         redirect::handle();
     }
     // for gammelt?
     if ($bud['ab_time'] < time() - auksjon::MAX_TIME_REMOVE) {
         ess::$b->page->add_message("Budet ditt har stått i mer enn " . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL) . " og er bindende. Du må vente til noen nyere bud har stått lengre enn " . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL) . ".", "error");
         redirect::handle();
     }
     // fjern budet vi har på auksjonen
     if (!auksjon::set_bud_inactive($bud, $this->auksjon, $this->up, true)) {
         ess::$b->page->add_message("Budet ditt hadde endret seg.", "error");
         redirect::handle();
     }
     // behandle forskjellige auksjonstyper
     switch ($this->auksjon->data['a_type']) {
         // firma
         case auksjon::TYPE_FIRMA:
             // informer om handlingen
             putlog("INFO", "%bAUKSJONER:%b %u{$this->up->data['up_name']}%u fjernet sitt bud på %b" . game::format_cash($bud['ab_bid']) . "%b fra %b{$this->auksjon->data['a_title']}%b " . ess::$s['spath'] . "/auksjoner?a_id={$this->auksjon->id}");
             break;
     }
     // var dette det siste budet?
     $result = \Kofradia\DB::get()->query("SELECT ab_id FROM auksjoner_bud WHERE ab_a_id = {$this->auksjon->id} AND ab_active != 0 AND ab_id > {$bud['ab_id']} LIMIT 1");
     $msg = '';
     if ($result->rowCount() == 0) {
         // sørg for at det er minimum 2 min igjen av auksjonen
         $end_min = time() + 120;
         if ($this->auksjon->data['a_end'] < $end_min) {
             \Kofradia\DB::get()->exec("UPDATE auksjoner SET a_end = {$end_min} WHERE a_id = {$this->auksjon->id} AND a_end < {$end_min}");
             $msg .= " Auksjonen ble forlenget til " . ess::$b->date->get($end_min)->format(date::FORMAT_SEC) . ".";
             putlog("LOG", "%bAUKSJONER:%b %b{$this->auksjon->data['a_title']}%b ble utsatt til " . ess::$b->date->get($end_min)->format(date::FORMAT_SEC) . " " . ess::$s['spath'] . "/auksjoner?a_id={$this->auksjon->id}");
         }
     }
     ess::$b->page->add_message("Du trakk tilbake budet ditt på " . game::format_cash($bud['ab_bid']) . " innen det gikk " . game::timespan(auksjon::MAX_TIME_REMOVE, game::TIME_FULL) . ".{$msg}");
     redirect::handle();
 }