Ejemplo n.º 1
0
 /**
  * Godta/avslå søknad
  * @param boolean $outcome - om søknaden blir innvilget eller ikke
  * @param integer $ds_id
  * @param string $reason
  */
 public static function decide($outcome, $ds_id, $reason)
 {
     global $_base, $__server;
     $ds_id = (int) $ds_id;
     // hent søknaden
     $soknad = self::get($ds_id);
     // fant ikke søknaden?
     if (!$soknad) {
         return false;
     }
     // er søknaden allerede behandlet?
     if ($soknad['ds_reply_decision'] != 0) {
         return false;
     }
     // typen
     $type = self::get_type($soknad['ds_type']);
     // har vi tilgang til søknaden?
     if (!access::has($type['access'])) {
         return false;
     }
     // sjekk for tom begrunnelse
     $have_reason = trim(game::format_data($reason)) != "";
     // sett opp params
     $params = unserialize($soknad['ds_params']);
     // sett opp søknadsinfo
     $info = self::get_info($type['name'], $soknad, $params);
     // info er ikke gyldig - søknaden er ikke gyldig
     if (!is_array($info)) {
         // slett søknaden
         self::delete($ds_id);
         return $info;
     }
     // avslå søknad
     if (!$outcome) {
         $msg = 'bb:' . $type['title'] . ': Din søknad ble avslått. (' . $info['bb'] . ') Begrunnelse: ' . ($have_reason ? $reason : 'Ingen begrunnelse gitt.');
         // spesielle handlinger
         switch ($type['name']) {
             case "ff_name":
                 // sett tilbakepengene på bankkontoen
                 if (isset($params['cost']) && $params['cost'] > 0) {
                     $msg .= ' Beløpet på ' . game::format_cash($params['cost']) . ' som ble innbetalt ved søknad er satt inn på kontoen igjen.';
                     ff::bank_static(ff::BANK_TILBAKEBETALING, $params['cost'], $soknad['ds_rel_id'], 'Navnsøknad avslått: ' . $params['name']);
                 }
                 break;
         }
     } else {
         $msg = 'bb:' . $type['title'] . ': Din søknad har blitt innvilget. (' . $info['bb'] . ') Begrunnelse: ' . ($have_reason ? $reason : 'Ingen begrunnelse gitt.');
         // spesielle handlinger
         switch ($type['name']) {
             case "ff_name":
                 $ff = ff::get_ff($soknad['ds_rel_id'], ff::LOAD_SCRIPT);
                 if ($ff) {
                     $ff->change_name($params['name'], $soknad['ds_up_id']);
                     // lagre gammelt navn på FF i søknaden
                     $params['name_old'] = $info['ff_name'];
                 }
                 break;
         }
     }
     // legg til logg hos spilleren
     player::add_log_static("soknader", $msg, 0, $soknad['ds_up_id']);
     // oppdater søknaden
     \Kofradia\DB::get()->exec("UPDATE div_soknader SET ds_params = " . \Kofradia\DB::quote(serialize($params)) . ", ds_reply_decision = " . ($outcome ? 1 : -1) . ", ds_reply_reason = " . \Kofradia\DB::quote($reason) . ", ds_reply_up_id = " . self::up_id() . ", ds_reply_time = " . time() . " WHERE ds_id = {$ds_id}");
     // oppdater cache
     tasks::set("soknader", \Kofradia\DB::get()->query("SELECT COUNT(ds_id) FROM div_soknader WHERE ds_reply_decision = 0")->fetchColumn(0));
     return $info;
 }
Ejemplo n.º 2
0
    /**
     * Spiller blir drept
     * @param bool $instant døde spilleren momentant?
     * @param player $by_up hvem som forårsaket dødsfallet
     */
    public function dies($instant, player $by_up = NULL)
    {
        // er ikke aktivert?
        if (!$this->active) {
            return false;
        }
        $ret = array();
        if ($instant) {
            $ret['penger_bank'] = 0;
        }
        $prev_level = $this->data['up_access_level'];
        $this->active = false;
        $this->data['up_access_level'] = 0;
        $this->data['up_deactivated_time'] = time();
        $this->data['up_deactivated_up_id'] = $by_up ? $by_up->id : NULL;
        $this->data['up_deactivated_dead'] = $instant ? 1 : 2;
        $this->data['up_deactivated_reason'] = NULL;
        $this->data['up_deactivated_note'] = NULL;
        $this->data['up_deactivated_points'] = $this->data['up_points'];
        $this->data['up_deactivated_rank_pos'] = $this->data['upr_rank_pos'];
        // deaktiver spilleren
        $by_up_id = $by_up ? $by_up->id : 'NULL';
        $a = \Kofradia\DB::get()->exec("\n\t\t\tUPDATE users_players LEFT JOIN users_players_rank ON upr_up_id = up_id\n\t\t\tSET\n\t\t\t\tup_access_level = 0, up_deactivated_time = {$this->data['up_deactivated_time']}, up_deactivated_up_id = {$by_up_id}, up_deactivated_dead = {$this->data['up_deactivated_dead']},\n\t\t\t\tup_deactivated_reason = NULL, up_deactivated_note = NULL,\n\t\t\t\tup_deactivated_points = up_points, up_deactivated_rank_pos = upr_rank_pos\n\t\t\tWHERE up_id = {$this->id} AND up_access_level != 0");
        if ($a == 0) {
            return false;
        }
        // har vi noen som skal få penger vi har i banken?
        if ($this->data['up_bank'] > 0) {
            // hent liste over FF-id vi er med i
            $ff_list = $this->get_ff_id_list();
            $num_ff = count($ff_list);
            if ($num_ff > 0) {
                $ff_ids = implode(",", $ff_list);
                // familier som skal få penger
                $result = \Kofradia\DB::get()->query("\n\t\t\t\t\tSELECT ff_id\n\t\t\t\t\tFROM ff\n\t\t\t\t\tWHERE ff_id IN ({$ff_ids}) AND ff_type = 1 AND ff_is_crew = 0");
                $num_ff = $result->rowCount();
            }
            // har vi noen familier eller ble drept instant
            if ($num_ff > 0 || $instant) {
                // hent ut beløpet i banken og sett bankkontoen til 10 %
                \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players, (SELECT up_id ref_up_id, @bank := up_bank FROM users_players WHERE up_id = {$this->id}) ref\n\t\t\t\t\tSET up_bank = up_bank * 0.1\n\t\t\t\t\tWHERE ref_up_id = up_id");
                $bank = \Kofradia\DB::get()->query("SELECT @bank")->fetchColumn(0);
                if ($num_ff > 0 && $instant) {
                    $f_ff = 0.3;
                    $f_up = 0.6;
                } elseif ($num_ff > 0) {
                    $f_ff = 0.9;
                    $f_up = 0;
                } else {
                    $f_ff = 0;
                    $f_up = 0.9;
                }
                // noe til familie?
                if ($f_ff > 0) {
                    // hvor mye hver familie skal få
                    $ff_bank_each = bcdiv(bcmul($bank, $f_ff), $num_ff);
                    // del ut pengene til familiene
                    while ($row = $result->fetch()) {
                        ff::bank_static(ff::BANK_DONASJON, $ff_bank_each, $row['ff_id'], "Testamentert", $this->id);
                    }
                }
                // noe til angriper?
                if ($f_up > 0) {
                    $ret['penger_bank'] = bcmul($bank, $f_up);
                    $by_up->data['up_cash'] = bcadd($by_up->data['up_cash'], $ret['penger_bank']);
                    \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash + {$ret['penger_bank']} WHERE up_id = {$by_up->id}");
                }
            }
        }
        $info = $instant ? 'ble drept av ' . $by_up->data['up_name'] : ($by_up ? 'døde av skadene påført av ' . $by_up->data['up_name'] : 'døde pga. lav helse og energi');
        putlog("INFO", "%bDrept%b: Spilleren {$this->data['up_name']} " . ($instant ? 'ble drept ' : 'døde av skader ') . $this->generate_profile_url());
        putlog("DF", "%bDrept%b: Spilleren {$this->data['up_name']} {$info} " . $this->generate_minside_url());
        // hent familier
        $familier = array();
        $list = $this->get_ff_list();
        foreach ($list as $row) {
            if ($row['ff_type'] != 1 || $row['ff_is_crew'] != 0) {
                continue;
            }
            $familier[] = '<a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $row['ff_id'] . '">' . htmlspecialchars($row['ff_name']) . '</a>';
        }
        // live-feed
        livefeed::add_row('<user id="' . $this->id . '" />' . (count($familier) > 0 ? ' (medlem av ' . implode(", ", $familier) . ')' : '') . ' ' . ($instant ? 'ble drept' : ($by_up ? 'døde av et tidligere angrep' : 'døde pga. lav helse og energi')) . '.');
        $ret = array_merge($ret, $this->release_relations($prev_level, $by_up, $instant));
        // behandle hitlist
        $ret = array_merge($ret, etterlyst::player_dies($this, $by_up, $instant));
        // informer spilleren på e-post
        $email = new email();
        $email->text = 'Hei,

Din spiller ' . $this->data['up_name'] . ' ' . ($instant ? 'har blitt drept av en annen spiller' : 'døde på grunn av lav energi og lav helse') . '.

Du kan se informasjon om din spiller og opprette en ny spiller ved å logge inn på din bruker.

--
www.kofradia.no';
        $email->send($this->user->data['u_email'], "Din spiller {$this->data['up_name']} " . ($instant ? 'har blitt drept' : 'er død'));
        // legg til hendelse hos spilleren
        $this->add_log("dead", $instant ? 1 : 0);
        return $ret;
    }
Ejemplo n.º 3
0
    /**
     * Betale leie for garasje
     */
    protected function garasje_betale_show()
    {
        ess::$b->page->add_title("Betale leie");
        // hent informasjon om garasjen
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ugg_time, ugg_time_next_rent, ugg_ff_id, ugg_cost_total, ugg_places\n\t\t\tFROM users_garage\n\t\t\tWHERE ugg_up_id = {$this->gta->up->id} AND ugg_b_id = {$this->gta->up->data['up_b_id']}");
        $garasje = $result->fetch();
        // har vi ingen garasje eller kan ikke betale leie nå?
        if (!$garasje || !gta::can_pay($garasje['ugg_time_next_rent'])) {
            redirect::handle("/gta/garasje", redirect::ROOT);
        }
        // hent alle firmaene og plukk ut det korrekte
        $ff_list = $this->gta->get_ff();
        if (!isset($ff_list[$garasje['ugg_ff_id']])) {
            throw new HSException("Mangler firma for garasje.");
        }
        $ff = $ff_list[$garasje['ugg_ff_id']];
        // beregn pris for neste periode
        $price = $garasje['ugg_places'] * $ff['price'];
        // utføre betaling?
        if (isset($_POST['pay'])) {
            $places = (int) postval("places");
            $price_old = (int) postval("price");
            // bydel forandret seg
            if (postval("b_id") != $this->gta->up->data['up_b_id']) {
                ess::$b->page->add_message("Du har reist til en annen bydel siden du sist viste siden.", "error");
                redirect::handle("/gta/garasje", redirect::ROOT);
            }
            if ($places != $garasje['ugg_places']) {
                ess::$b->page->add_message("Kapasiteten i garasjen har endret seg.", "error");
            } elseif ($price_old != $price) {
                ess::$b->page->add_message("Leieprisen hos utleiefirmaet har endret seg.", "error");
            } else {
                // trekk fra penger
                $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$price} WHERE up_id = {$this->gta->up->id} AND up_cash >= {$price}");
                if ($a == 0) {
                    ess::$b->page->add_message("Du har ikke råd til å betale for denne leien.", "error");
                } else {
                    // sett opp tidspunkt for neste innbetaling
                    $next = ess::$b->date->get($garasje['ugg_time_next_rent']);
                    $next->setTime(6, 0, 0);
                    $next->modify("+7 days");
                    $next = $next->format("U");
                    // oppdater garasje
                    $a = \Kofradia\DB::get()->exec("UPDATE users_garage SET ugg_time_next_rent = {$next}, ugg_cost_total = ugg_cost_total + {$price} WHERE ugg_up_id = {$this->gta->up->id} AND ugg_b_id = {$this->gta->up->data['up_b_id']} AND ugg_time_next_rent = {$garasje['ugg_time_next_rent']} AND ugg_places = {$garasje['ugg_places']}");
                    // kunne ikke oppdatere garasje
                    if ($a == 0) {
                        // gi tilbake pengene
                        \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash + {$price} WHERE up_id = {$this->gta->up->id}");
                    } else {
                        // gi pengene til firmaet
                        ff::bank_static(ff::BANK_TJENT, round($price * ff::GTA_PERCENT), $ff['ff_id']);
                        ess::$b->page->add_message('Du har utvidet leieavtalen på <b>' . game::$bydeler[$this->gta->up->data['up_b_id']]['name'] . '</b> hos firmaet <a href="&rpath;/ff/?ff_id=' . $ff['ff_id'] . '">' . htmlspecialchars($ff['ff_name']) . '</a> med 7 dager for ' . game::format_cash($price) . '.');
                    }
                    redirect::handle("/gta/garasje", redirect::ROOT);
                }
            }
        }
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Betale leie for garasje på ' . htmlspecialchars($this->gta->up->bydel['name']) . '<span class="left2"></span><span class="right2"></span></h1>
	<div class="bg1">
		<p class="c"><a href="&rpath;/gta/garasje">Tilbake</a></p>
		<dl class="dd_right">
			<dt>Utleiefirma</dt>
			<dd><a href="&rpath;/ff/?ff_id=' . $ff['ff_id'] . '">' . htmlspecialchars($ff['ff_name']) . '</a></dd>
			<dt>Kapasitet</dt>
			<dd>' . game::format_num($garasje['ugg_places']) . '</dd>
			<dt>Leiepris per plass</dt>
			<dd>' . game::format_cash($ff['price']) . '</dd>
			<dt>Neste betalingsfrist</dt>
			<dd>' . ess::$b->date->get($garasje['ugg_time_next_rent'])->format() . '</dd>
		</dl>
		<form action="" method="post">
			<input type="hidden" name="price" value="' . $price . '" />
			<input type="hidden" name="places" value="' . $garasje['ugg_places'] . '" />
			<input type="hidden" name="b_id" value="' . $this->gta->up->data['up_b_id'] . '" />
			<dl class="dd_right">
				<dt>Total leiepris neste periode</dt>
				<dd>' . game::format_cash($price) . '</dd>
			</dl>
			<p class="c">' . show_sbutton("Utfør betaling for neste leie", 'name="pay"') . '</p>
		</form>
		<p class="c">Husk at det kan hende det lønner seg å bytte til et <a href="&rpath;/gta/garasje/detaljer">annet firma</a>. Du kan også <a href="&rpath;/gta/garasje/endre">justere kapasiteten</a> før du betaler for å få billigere leie.</p>
	</div>
</div>';
    }