Exemple #1
0
 /**
  * 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';
     }
 }
Exemple #2
0
    /**
     * 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 . '&amp;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();
    }