/** * Forlat FF * @param bool $log lagre logg for at medlemmet forlater FF * @param bool $kicked blir kastet ut * @param bool $deactivated ble spilleren deaktivert/drept? * @param player $up_attack spilleren som førte til hendelsen (angrep) */ public function leave($log = true, $kicked = false, $deactivated = false, player $up_attack = null) { global $_game; // ikke medlem? if ($this->status != self::STATUS_MEMBER || $this->crew) { throw new HSException("Brukeren er ikke medlem av FF."); } // oppdater brukerinfo $this->data['ffm_status'] = $deactivated || $kicked ? self::STATUS_DEACTIVATED : self::STATUS_KICKED; $more = $deactivated ? ", ffm_ff_name = " . \Kofradia\DB::quote($this->ff->data['ff_name']) : ""; \Kofradia\DB::get()->exec("UPDATE ff_members SET ffm_date_part = " . time() . ", ffm_status = {$this->data['ffm_status']}{$more} WHERE ffm_ff_id = {$this->ff->id} AND ffm_up_id = {$this->id}"); $this->reattach(); // oppdater ff_pay_points hvis ikke crewmedlem if ($this->data['up_access_level'] < $_game['access_noplay'] && $this->data['ffm_pay_points'] !== null) { $points = $this->data['up_points_rel'] - $this->data['ffm_pay_points']; putlog("NOTICE", "FF RANK: FF {$this->ff->data['ff_name']} (#{$this->ff->id}), spilleren {$this->data['up_name']} (#{$this->id}) forlot FF. {$points} rankpoeng overført til ff_pay_points."); \Kofradia\DB::get()->exec("UPDATE ff SET ff_pay_points = ff_pay_points + {$points} WHERE ff_id = {$this->ff->id}"); } // sjekk om brukeren er involvert i salg av FF $this->sell_remove(); // legg til logg if ($log) { $this->ff->add_log($deactivated ? "member_deactivated" : "member_leave", $this->id . ":" . urlencode($this->get_priority_name())); } if ($deactivated) { player::add_log_static("ff_low_health", $this->ff->id . ":" . urlencode($this->ff->data['ff_name']) . ":" . urlencode($this->get_priority_name()) . ($this->data['ffm_parent_up_id'] ? ":" . $this->data['ffm_parent_up_id'] : ""), null, $this->id); } // fjern forum lenke $this->forum_link(false); // sjekk om brukeren har noen soldiers under seg if ($this->data['ffm_priority'] == 3) { $this->leave_capo_priority(); } $died = false; // boss og ingen andre er boss? // hvis boss ble sparket (noe kun moderator kan gjøre), skjer ingenting if (!$kicked && $this->data['ffm_priority'] == 1 && (!isset($this->ff->members['members_priority'][1]) || count($this->ff->members['members_priority'][1]) == 0)) { // har vi medeier og medeier kan ta over? if ($this->ff->type['pri2_takeover'] && isset($this->ff->members['members_priority'][2]) && count($this->ff->members['members_priority'][2]) > 0) { // velg medeier som skal ta over $underboss = array_rand($this->ff->members['members_priority'][2]); $this->ff->members['list'][$underboss]->change_priority(1, NULL, true); } else { // FF dør ut $this->ff->dies($up_attack); $died = true; } } // fjern antall nye logg hendelser og lagre tidspunkt for utkastelse $up = player::get($this->id); $up->data['up_health_ff_time'] = time(); \Kofradia\DB::get()->exec("\n\t\t\tUPDATE users_players, ff_members\n\t\t\tSET up_log_ff_new = GREATEST(0, up_log_ff_new - ffm_log_new), up_health_ff_time = {$up->data['up_health_ff_time']}\n\t\t\tWHERE up_id = {$this->id} AND ffm_up_id = up_id AND ffm_ff_id = {$this->ff->id}"); // slett evt. avisartikler som tilhørte spilleren new avis_slett_artikler(); // trigger $up->trigger("ff_leave", array("ff" => $this->ff, "member" => $this, "log" => $log, "kicked" => $kicked, "deactivated" => $deactivated, "up" => $up_attack)); if ($died) { return 'died'; } }
/** * Behandle nedleggelse */ protected function page_drop_handle() { // allerede lagt ned? if (!$this->ff->active) { ess::$b->page->add_message(ucfirst($this->ff->type['refobj']) . " er allerde oppløst."); redirect::handle(); } // sjekk for aktiv auksjon $result = \Kofradia\DB::get()->query("SELECT a_id, a_params FROM auksjoner WHERE a_type = " . auksjon::TYPE_FIRMA . " AND a_end >= " . time() . " AND a_completed = 0 AND a_active != 0"); while ($row = $result->fetch()) { $params = new params($row['a_params']); if ($params->get("ff_id") == $this->ff->id) { ess::$b->page->add_message(ucfirst($this->ff->type['refobj']) . ' ligger allerede ute på auksjon og kan ikke legges ned på nytt nå.', "error"); redirect::handle("/auksjoner?a_id={$row['a_id']}", redirect::ROOT); } } ess::$b->page->add_title("Legg ned {$this->ff->type['refobj']}"); // godkjent å legge ned FF? if (isset($_POST['confirm']) && (isset($_POST['pass']) || $this->ff->mod) && validate_sid()) { // kontroller passordet if (!$this->ff->mod && !password::verify_hash($_POST['pass'], login::$user->data['u_pass'], 'user')) { ess::$b->page->add_message("Passordet du skrev inn stemmer ikke.", "error"); } else { // melding putlog("CREWCHAN", "%u" . login::$user->player->data['up_name'] . "%u la ned {$this->ff->type['refobj']} %u{$this->ff->data['ff_name']}%u"); // legg ned FF $this->ff->dies(); ess::$b->page->add_message("Du har lagt ned {$this->ff->type['refobj']} {$this->ff->data['ff_name']}."); redirect::handle(""); } } echo ' <div class="section" style="width: 220px"> <h1>Legg ned ' . $this->ff->type['refobj'] . '</h1> <p class="h_right"><a href="panel?ff_id=' . $this->ff->id . '">Tilbake</a></p> <boxes /> <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <p>Du er i ferd med å <u>legge ned ' . $this->ff->type['refobj'] . '</u>. Når du legger ned ' . $this->ff->type['refobj'] . ' vil ' . $this->ff->type['refobj'] . ' bli oppløst. Du og alle medlemmer vil miste tilgang til ' . $this->ff->type['refobj'] . ' og dets forum.</p>' . ($this->ff->type['type'] == 'familie' ? $this->ff->competition || $this->ff->params->get("die_no_new") ? '' : ' <p>En ny broderskapkonkurranse vil bli opprettet som vil gjøre det mulig om å konkurrere om et nytt broderskap som tar denne sin plass.' : ' <p>Firmaet vil bli lagt ut på en auksjon, og vinneren av auksjonen vil fortsette driften av firmaet. Du vil ikke motta noe fra denne auksjonen.</p>') . ' <p>Du kan alternativt <a href="panel?ff_id=' . $this->ff->id . '&a=sell">selge</a> ' . $this->ff->type['refobj'] . '.</p>' . ($this->ff->competition ? ' <p><b>Merk:</b> Du har ikke mulighet til å opprette ny ' . $this->ff->type['refobj'] . ' i samme konkurranse etter at du har lagt ned ' . $this->ff->type['refobj'] . '.</p>' : '') . ' <dl class="dd_right"> <dt>Penger i banken</dt> <dd>' . game::format_cash($this->ff->data['ff_bank']) . '</dd> <dt>Antall medlemmer</dt> <dd>' . count($this->ff->members['members']) . '</dd> </dl>' . (!$this->ff->mod ? ' <dl class="dd_right"> <dt>Brukerpassord</dt> <dd><input type="password" name="pass" class="styled w100" /></dd> </dl>' : '') . ' <p class="c"> <span class="red">' . show_sbutton("Bekreft, legg ned {$this->ff->type['refobj']}", 'name="confirm"') . '</span> <a href="panel?ff_id=' . $this->ff->id . '">Tilbake</a> </p> </form> </div>'; $this->ff->load_page(); }