Ejemplo n.º 1
0
 /**
  * Opprett auksjon for FF
  */
 public static function create_auksjon_ff(ff $ff, $start = null, $end = null)
 {
     $time = time();
     if (!$start) {
         $start = $time;
     } else {
         $start = (int) $start;
     }
     if (!$end) {
         // varighet er til 21:00 med minimum 12 timer
         $date = ess::$b->date->get();
         $date->setTime(21, 0, 0);
         $min_time = 3600 * 12;
         if ($date->format("U") < $time + $min_time) {
             $date->modify("+1 day");
         }
         $expire = $date->format("U");
     } else {
         $expire = (int) $end;
     }
     // sett opp params for ff_id
     $params = new params();
     $params->update("ff_id", $ff->id);
     // opprett auksjonen
     \Kofradia\DB::get()->exec("INSERT INTO auksjoner SET a_type = " . self::TYPE_FIRMA . ", a_title = " . \Kofradia\DB::quote($ff->data['ff_name']) . ", a_start = {$start}, a_end = {$expire}, a_bid_start = 1000000, a_bid_jump = 500000, a_active = 1, a_params = " . \Kofradia\DB::quote($params->build()));
     $a_id = \Kofradia\DB::get()->lastInsertId();
     // logg
     putlog("INFO", "%bAUKSJON:%b Auksjon for %u" . $ff->data['ff_name'] . "%u ble opprettet " . ess::$s['spath'] . "/auksjoner?a_id={$a_id}");
     // live-feed
     livefeed::add_row('<a href="' . ess::$s['rpath'] . '/auksjoner?a_id=' . $a_id . '">Auksjon</a> for <a href="' . ess::$s['rpath'] . '/ff/?ff_id=' . $ff->id . '">' . htmlspecialchars($ff->data['ff_name']) . '</a> ble opprettet.');
     self::update_cache();
 }
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
    /**
     * Publiser utgivelse
     */
    protected function pub_publish(ff_avis_utgivelse $ffn)
    {
        // allerede publisert
        if ($ffn->data['ffn_published'] != 0) {
            ess::$b->page->add_message("Utgivelsen er allerede publisert.", "error");
            redirect::handle();
        }
        // kontroller beskrivelse
        $desc_plain = strip_tags(game::format_data($ffn->data['ffn_description']));
        if (mb_strlen($desc_plain) < 30) {
            ess::$b->page->add_message("Beskrivelsen for utgivelsen må inneholde minimum 30 bokstaver/tall før den kan publiseres.", "error");
            redirect::handle();
        }
        // sjekk når siste publisering ble utført
        $result = \Kofradia\DB::get()->query("SELECT ffn_published_time FROM ff_newspapers WHERE ffn_ff_id = {$this->ff->id} AND ffn_published != 0 ORDER BY ffn_published_time DESC LIMIT 1");
        $last = $result->rowCount() > 0 ? $result->fetchColumn(0) : 0;
        // har det gått lang nok tid?
        $delay = ff_avis::FFN_PUBLISH_DELAY + $last - time();
        if ($delay > 0) {
            ess::$b->page->add_message("Du må vente " . game::timespan(ff_avis::FFN_PUBLISH_DELAY, game::TIME_FULL) . " mellom hver utgivelse som utføres. Gjenstår før neste utgivelse kan publiseres: " . game::timespan($delay, game::TIME_FULL) . ".", "error");
            redirect::handle();
        }
        // hent artiklene med pris
        $result = \Kofradia\DB::get()->query("SELECT ffna_id, ffna_up_id, ffna_title, ffna_price FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} ORDER BY ffna_title");
        // for få artikler?
        if ($result->rowCount() < 4) {
            ess::$b->page->add_message("Utgivelsen må inneholde minimum 4 artikler for å bli publisert.", "error");
            redirect::handle();
        }
        // kun eier
        if (!$this->ff->access(1)) {
            ess::$b->page->add_message("Kun " . htmlspecialchars($this->ff->type['priority'][1]) . " kan publisere utgivelsen.", "error");
            redirect::handle();
        }
        // finn total pris for artiklene
        $articles = array();
        $articles_price = 0;
        while ($row = $result->fetch()) {
            $articles_price += $row['ffna_price'];
            $articles[] = $row;
        }
        $total_price = $articles_price + ff_avis::FFN_PUBLISH_COST;
        // godkjenne publisering?
        if (isset($_POST['approve'])) {
            $price = game::intval(postval("price"));
            $sid = postval("sid");
            // kontroller pris
            if ($price != $total_price) {
                ess::$b->page->add_message("Det ser ut som prisen har endret seg. Prøv på nytt.", "error");
            } elseif ($sid != login::$info['ses_id']) {
                ess::$b->page->add_message("Ugyldig.", "error");
            } elseif ($total_price > 0 && $this->ff->data['ff_bank'] < $total_price) {
                ess::$b->page->add_message("Det er ikke nok penger i firmabanken.", "error");
            } else {
                \Kofradia\DB::get()->beginTransaction();
                // trekk fra pengene fra firmabanken
                if ($total_price > 0 && !$this->ff->bank(ff::BANK_BETALING, $total_price, "Publisering av utgivelse: {$ffn->data['ffn_title']} (id: {$ffn->id})")) {
                    \Kofradia\DB::get()->commit();
                    // var tidligere rollback, men trenger ikke være det
                    ess::$b->page->add_message("Det er ikke nok penger i firmabanken.", "error");
                } else {
                    // oppdater utgivelsen
                    \Kofradia\DB::get()->exec("UPDATE ff_newspapers SET ffn_published = 1, ffn_published_time = " . time() . ", ffn_published_up_id = " . login::$user->player->id . " WHERE ffn_id = {$ffn->id}");
                    // utbetal til journalistene
                    \Kofradia\DB::get()->exec("UPDATE users_players, ff_members, (SELECT ffna_up_id, SUM(ffna_price) AS ffna_sum, COUNT(ffna_price) AS ffna_count FROM ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_price > 0 GROUP BY ffna_up_id) AS ref SET up_bank = up_bank + ffna_sum, up_bank_received = up_bank_received + ffna_sum, up_bank_profit = up_bank_profit + ffna_sum, up_bank_num_received = up_bank_num_received + ffna_count, up_log_new = up_log_new + ffna_count, ffm_earnings = ffm_earnings + ffna_sum WHERE ffna_up_id = up_id AND ffm_up_id = up_id AND ffm_ff_id = {$this->ff->id}");
                    // lagre overføringslogg
                    \Kofradia\DB::get()->exec("INSERT INTO bank_log (bl_sender_up_id, bl_receiver_up_id, amount, time) SELECT " . login::$user->player->id . ", ffna_up_id, ffna_price, " . time() . " FROM users_players, ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_up_id = up_id AND ffna_price > 0");
                    // spillelogg
                    \Kofradia\DB::get()->exec("INSERT INTO users_log (time, ul_up_id, type, note, num) SELECT " . time() . ", ffna_up_id, " . gamelog::$items['bankoverforing'] . ", CONCAT(ffna_price, ':Utbetaling for avisartikkel.'), " . login::$user->player->id . " FROM users_players, ff_newspapers_articles WHERE ffna_ffn_id = {$ffn->id} AND ffna_up_id = up_id AND ffna_price > 0");
                    \Kofradia\DB::get()->commit();
                    // live-feed
                    livefeed::add_row('Avisutgivelsen <a href="' . ess::$s['relative_path'] . '/ff/avis?ff_id=' . $this->ff->id . '&amp;ffn=' . $ffn->id . '">' . htmlspecialchars($ffn->data['ffn_title']) . '</a> ble publisert av <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $this->ff->id . '">' . htmlspecialchars($this->ff->data['ff_name']) . '</a>.');
                    ess::$b->page->add_message("Utgivelsen er nå publisert.");
                    redirect::handle();
                }
            }
        }
        echo '
<p class="c">Publiser utgivelse | <a href="avis?ff_id=' . $this->ff->id . '&amp;u&amp;ffn=' . $ffn->id . '">Tilbake</a></p>
<div class="section center w200">
	<h2>Utgivelsesinformasjon</h2>
	<dl class="dd_right">
		<dt>Tittel</dt>
		<dd>' . htmlspecialchars($ffn->data['ffn_title']) . '</dd>
		<dt>Opprettet</dt>
		<dd>' . ess::$b->date->get($ffn->data['ffn_created_time'])->format() . '</dd>
		<dt>Salgspris</dt>
		<dd>' . game::format_cash($ffn->data['ffn_cost']) . '</dd>
	</dl>
</div>
<div class="section center w200">
	<h2>Beskrivelse av utgivelsen</h2>' . (($d = $this->ff->format_description($ffn->data['ffn_description'])) != '' ? '
	<div class="p">' . $d . '</div>' : '
	<p>Ingen beskrivelse.</p>') . '
</div>
<form action="" method="post">
	<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
	<input type="hidden" name="price" value="' . $total_price . '" />
	<div class="section center w350">
		<h2>Prisoversikt</h2>
		<dl class="dd_right">
			<dt>Publisering av utgivelse</dt>
			<dd>' . game::format_cash(ff_avis::FFN_PUBLISH_COST) . '</dd>';
        foreach ($articles as $row) {
            echo '
			<dt><a href="avis?ff_id=' . $this->ff->id . '&amp;a&amp;ffna_id=' . $row['ffna_id'] . '">' . htmlspecialchars($row['ffna_title']) . '</a> (<user id="' . $row['ffna_up_id'] . '" />)</dt>
			<dd>' . game::format_cash($row['ffna_price']) . '</dd>';
        }
        echo '
		</dl>
		<dl class="dd_right">
			<dt>I firmabanken</dt>
			<dd>' . game::format_cash($this->ff->data['ff_bank']) . '</dd>
			<dt><u>Samlet kostnader</u></dt>
			<dd><u>' . game::format_cash($total_price) . '</u></dd>
		</dl>
		<p class="c">' . show_sbutton("Publiser utgivelsen", 'name="approve"') . '</p>
	</div>
</form>
<div class="hr fhr"><hr /></div>';
        // vis utgivelsen
        echo $ffn->build_avis_html();
    }
Ejemplo n.º 4
0
 /**
  * Godta salg
  */
 public function sell_approve()
 {
     global $_game;
     // hent status
     $status = $this->sell_status(true);
     if (!$status) {
         return false;
     }
     // sørg for at dette er brukeren som skulle selges til
     if (!$this->uinfo || $status['up_id'] != $this->uinfo->id) {
         $this->params->commit();
         throw new HSException("Kun brukeren som har mottatt salget kan behandle det.");
     }
     // forsøk å trekk fra pengene fra brukeren
     if ($status['amount'] > 0) {
         $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$status['amount']}, up_bank_sent = up_bank_sent + {$status['amount']}, up_bank_num_sent = up_bank_num_sent + 1 WHERE up_id = {$status['up_id']} AND up_cash >= {$status['amount']}");
         if ($a == 0) {
             // har ikke råd
             $this->params->commit();
             return 'player_cash';
         }
     }
     // forsøk å trekk fra pengene fra banken
     if (!$this->bank(self::BANK_BETALING, $status['fee'], "Gebyr for salg av {$this->refstring}.", true)) {
         // FF dekker ikke gebyret
         if ($status['amount'] > 0) {
             // gi tilbake pengene
             \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash + {$status['amount']}, up_bank_sent = up_bank_sent - {$status['amount']}, up_bank_num_sent = up_bank_num_sent - 1 WHERE up_id = {$status['up_id']}");
         }
         $this->params->commit();
         return 'ff_cash';
     }
     // banklogg
     if ($status['amount'] > 0) {
         \Kofradia\DB::get()->exec("INSERT INTO bank_log SET bl_sender_up_id = {$status['up_id']}, bl_receiver_up_id = {$status['init_up_id']}, amount = {$status['amount']}, time = " . time());
     }
     // fjern fra params
     $this->params->remove("sell");
     // sett selger som underboss
     $init_u = $this->members['members'][$status['init_up_id']];
     $init_u->change_priority(2, NULL, true);
     // sett kjøper som boss
     $buy_u = $this->members['members'][$status['up_id']];
     $buy_u->change_priority(1, NULL, true);
     // gi pengene til selger
     if ($status['amount'] > 0) {
         \Kofradia\DB::get()->exec("UPDATE users_players SET up_bank = up_bank + {$status['amount']}, up_bank_received = up_bank_received + {$status['amount']}, up_bank_num_received = up_bank_num_received + 1 WHERE up_id = {$status['init_up_id']}");
     }
     // legg til logg hos selgeren
     player::add_log_static("ff_diverse", '<user id="' . $this->uinfo->id . '" /> godtok salget av ' . $this->refstring . ' <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $this->id . '">' . htmlspecialchars($this->data['ff_name']) . '</a> for ' . game::format_cash($status['amount']) . ' og er nå satt som ' . $this->type['priority'][1] . '. Du ble satt som ' . $this->type['priority'][2] . '.', $this->id, $status['init_up_id']);
     // logg i FF: {TYPE=approve}:BOSS:UBOSS:FEE:AMOUNT
     $this->add_log("sell", "approve:{$status['init_up_id']}:{$status['up_id']}:{$status['fee']}:{$status['amount']}");
     // live-feed
     livefeed::add_row(ucfirst($this->type['refobj']) . ' <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $this->id . '">' . htmlspecialchars($this->data['ff_name']) . '</a> ble solgt til <user id="' . $buy_u->id . '" />.');
     // avslutt transaction
     $this->params->commit();
     return true;
 }
Ejemplo n.º 5
0
 private function announce($day, $res)
 {
     if (!$res[1] && !$res[2]) {
         $html = "Ingen vant eller deltok på luken for " . $day . ". desember i julekalenderen.";
         $text = $html;
     } else {
         $html = "";
         $text = "";
         if ($res[1]) {
             $up = player::get($res[1]);
             $html .= '<user id="' . $res[1] . '" /> ble den heldige vinner av luken for ' . $day . '. desember i julekalenderen.';
             $text .= $up->data['up_name'] . ' ble den heldige vinner av luken for ' . $day . '. desember i julekalenderen.';
         }
         if ($res[2]) {
             $up = player::get($res[2]);
             if (!$res[1]) {
                 $html .= 'Ingen svarte riktig for luken til ' . $day . '. desember i julekalenderen.';
                 $text .= 'Ingen svarte riktig for luken til ' . $day . '. desember i julekalenderen.';
             }
             $html .= ' <user id="' . $res[2] . '" /> vant deltakerpremien.';
             $text .= ' ' . $up->data['up_name'] . ' vant deltakerpremien.';
         }
     }
     livefeed::add_row($html);
     putlog("INFO", "%bJULEKALENDER%b: {$text}");
 }
Ejemplo n.º 6
0
    /**
     * Behandle valg av bygning
     */
    protected function page_br_handle()
    {
        // allerede valgt bygning?
        if ($this->ff->data['br_id'] && !$this->ff->mod) {
            ess::$b->page->add_message(ucfirst($this->ff->type['refobj']) . " er allerede tilknyttet en bygning.");
            redirect::handle();
        }
        ess::$b->page->add_title("Velg bygning");
        $bydel = login::$user->player->bydel;
        // hent ledige bygninger i denne bydelen
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT br_id, br_pos_x, br_pos_y\n\t\t\tFROM bydeler_resources\n\t\t\t\tLEFT JOIN (SELECT DISTINCT ff_br_id FROM ff WHERE ff_inactive = 0 AND ff_br_id IS NOT NULL) ref ON ff_br_id = br_id\n\t\t\tWHERE br_b_id = {$bydel['id']} AND br_type = 1 AND ff_br_id IS NULL");
        $resources_free = array();
        while ($row = $result->fetch()) {
            $resources_free[$row['br_id']] = $row;
        }
        // velge bygning?
        if (isset($_POST['br'])) {
            $br_id = (int) $_POST['br'];
            // ikke gyldig bygning?
            if (!isset($resources_free[$br_id])) {
                ess::$b->page->add_message("Fant ikke valgt bygning.");
            } else {
                // oppdater FF
                \Kofradia\DB::get()->exec("UPDATE ff SET ff_br_id = {$br_id} WHERE ff_id = {$this->ff->id}");
                global $__server;
                putlog("INFO", ucfirst($this->ff->type['refobj']) . " %u{$this->ff->data['ff_name']}%u har nå valgt" . ($this->ff->data['br_id'] ? ' ny' : '') . " bygning på {$bydel['name']}. {$__server['path']}/ff/?ff_id={$this->ff->id}");
                putlog("CREWCHAN", ucfirst($this->ff->type['refobj']) . " %u{$this->ff->data['ff_name']}%u har nå valgt" . ($this->ff->data['br_id'] ? ' ny' : '') . " bygning på {$bydel['name']}. {$__server['path']}/ff/?ff_id={$this->ff->id}");
                // live-feed
                livefeed::add_row(ucfirst($this->ff->refstring) . ' <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $this->ff->id . '">' . htmlspecialchars($this->ff->data['ff_name']) . '</a> har valgt bygning på ' . htmlspecialchars($bydel['name']) . '.');
                // første familien i spillet?
                if ($this->ff->type['type'] == "familie") {
                    hall_of_fame::trigger("familie", $this->ff);
                    hall_of_fame::trigger("ff_owner", $this->ff);
                }
                ess::$b->page->add_message("Du har valgt bygning for {$this->ff->type['refobj']} på {$bydel['name']}.");
                redirect::handle("?ff_id={$this->ff->id}");
            }
        }
        // hent FF-ene i denne bydelen
        $result = \Kofradia\DB::get()->query("SELECT ff_id, ff_name, br_pos_x, br_pos_y FROM ff JOIN bydeler_resources ON ff_br_id = br_id WHERE br_b_id = {$bydel['id']} AND ff_inactive = 0");
        $resources = array();
        while ($row = $result->fetch()) {
            $resources[$row['ff_id']] = $row;
        }
        ess::$b->page->add_css('
#default_main { overflow: visible }
.bydel_parent { position: relative }
.bydel_resource { position: absolute }
.bydel_resource img { cursor: pointer; z-index: 100 }
.bydel_resource div {
	position: absolute;
	left: 28px;
	top: 2px;
	font-size: 11px;
	background-color: #0B0B0B;
	color: #AAA;
	padding: 2px;
	z-index: 1000;
	white-space: nowrap;
}
');
        ess::$b->page->add_js_file("../js/bydeler.js");
        ess::$b->page->add_js_domready('
	var bydel_resources = new Hash(' . js_encode($resources) . ');
	var bydel_resources_free = new Hash(' . js_encode($resources_free) . ');
	var bydel_x = ' . $bydel['b_coords_x'] . ';
	var bydel_y = ' . $bydel['b_coords_y'] . ';
	
	var kart = $("bydelskart");
	kart.getParent().setStyle("position", "relative");
	var pos = kart.getPosition(kart.getParent());
	var bydel_container = new Element("div", {"styles": {"position": "absolute", "left": 4, "top": 0}}).inject(kart, "before");
	
	bydel_resources.each(function(value)
	{
		new BydelResourceFF(value, bydel_container, bydel_x, bydel_y);
	});
	
	var select_br = function()
	{
		if (confirm("Er du sikker på at du vil velge denne bygningen for ' . $this->ff->type['refobj'] . '? Dette kan ikke endres senere."))
		{
			$("br_id").set("value", this.options.data["br_id"]).form.submit();
		}
	};
	
	bydel_resources_free.each(function(value)
	{
		new BydelResourceSelect(value, bydel_container, bydel_x, bydel_y, select_br);
	});');
        echo '
<div class="bg1_c" style="width: ' . ($bydel['b_size_x'] + 30) . 'px; margin: 40px auto">
	<h1 class="bg1">Du er på ' . $bydel['name'] . '<span class="left"></span><span class="right"></span></h1>
	<p class="h_left"><a href="./?ff_id=' . $this->ff->id . '">&laquo; Tilbake</a></p>
	<div class="bg1" style="overflow: visible; padding-top: 1px; margin-top: -1px">
		<form action="" method="post">
			<input type="hidden" name="br" id="br_id" />
			<boxes />' . (count($resources_free) == 0 ? '
			<p>Det er ingen ledige plasser i denne bydelen.</p>' : '
			<p>Det er ' . count($resources_free) . ' ' . fword("ledig plass", "ledige plasser", count($resources_free)) . ' i denne bydelen.</p>') . '
			<p class="c bydel_parent"><img src="' . IMGS_HTTP . '/bydeler/bydel_' . $bydel['id'] . '.png" id="bydelskart" alt="Bydelskart for ' . htmlspecialchars($bydel['name']) . '" /></p>
		</form>
	</div>
</div>';
        $this->ff->load_page();
    }
Ejemplo n.º 7
0
    /**
     * Opprette en familie
     */
    protected function ff_create()
    {
        // har ikke høy nok rank?
        if ($this->up->rank['number'] < ff::$types[1]['priority_rank'][1]) {
            ess::$b->page->add_message("Du må ha oppnådd ranken <b>" . game::$ranks['items_number'][ff::$types[1]['priority_rank'][1]]['name'] . "</b> for å kunne danne et broderskap.", "error");
            redirect::handle();
        }
        // har for lav helse?
        if ($this->up->get_health_percent() < player::FF_HEALTH_LOW * 100) {
            ess::$b->page->add_message("Du har for lite helse til å kunne danne et broderskap. Du må ha minimium " . player::FF_HEALTH_LOW * 100 . " % helse.", "error");
            redirect::handle();
        }
        // se om brukeren er invitert eller medlem av en annen familie
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT COUNT(ff_id)\n\t\t\tFROM ff_members JOIN ff ON ffm_ff_id = ff_id\n\t\t\tWHERE ffm_up_id = " . $this->up->id . " AND ff_inactive = 0 AND ff_type = 1 AND ff_is_crew = 0 AND (ffm_status = 0 OR ffm_status = 1)");
        if ($result->fetchColumn(0) >= ff::MAX_FAMILIES && !access::has("mod")) {
            ess::$b->page->add_message("Du er allerede invitert eller medlem av for mange broderskap.");
            redirect::handle();
        }
        // se om brukeren tidligere har opprettet en familie i noen av konkurransene
        $time = time();
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ff_date_reg, ff_inactive_time\n\t\t\tFROM ff_free\n\t\t\t\tJOIN ff ON ff_fff_id = fff_id AND ff_inactive != 0\n\t\t\t\tJOIN ff_members ON ffm_ff_id = ff_id AND ffm_up_id = " . $this->up->id . " AND ffm_priority = 1\n\t\t\tWHERE {$time} >= fff_time_start AND fff_active = 1 AND fff_ff_count < " . ff::MAX_FFF_FF_COUNT . "\n\t\t\tLIMIT 1");
        if ($result->rowCount() > 0) {
            $row = $result->fetch();
            ess::$b->page->add_message("Du opprettet et broderskap i denne konkurransen " . ess::$b->date->get($row['ff_date_reg'])->format() . " som ble lagt ned " . ess::$b->date->get($row['ff_inactive_time'])->format() . ". Du må vente på en ny konkurranse for å opprette nytt broderskap.", "error");
            redirect::handle();
        }
        // se om det er ledig plass for en familie
        $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT fff_id, fff_time_start, fff_time_expire, fff_ff_count\n\t\t\tFROM ff_free\n\t\t\tWHERE {$time} >= fff_time_start AND fff_active = 1 AND fff_ff_count < " . ff::MAX_FFF_FF_COUNT . "\n\t\t\tORDER BY fff_time_start");
        $total_free = 0;
        $fafs = array();
        while ($row = $result->fetch()) {
            $fafs[$row['fff_id']] = $row;
            $total_free += ff::MAX_FFF_FF_COUNT - $row['fff_ff_count'];
        }
        // ingen ledige plasser?
        if ($total_free == 0) {
            ess::$b->page->add_message("Det er ikke lenger noen ledige plasser for broderskap.", "error");
            redirect::handle();
        }
        // danne familien
        if (isset($_POST['confirm']) && validate_sid()) {
            // trekk fra pengene fra brukeren
            $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - " . ff::CREATE_COST . " WHERE up_id = " . $this->up->id . " AND up_cash >= " . ff::CREATE_COST);
            // ble ikke brukeren oppdatert?
            if ($a == 0) {
                ess::$b->page->add_message("Du har ikke nok penger på hånda.", "error");
            } else {
                // forsøk å danne familie
                $fff_id = NULL;
                foreach ($fafs as $faf) {
                    $a = \Kofradia\DB::get()->exec("UPDATE ff_free SET fff_ff_count = fff_ff_count + 1 WHERE fff_id = {$faf['fff_id']} AND fff_ff_count < " . ff::MAX_FFF_FF_COUNT . " AND fff_active = 1");
                    if ($a > 0) {
                        $fff_id = $faf['fff_id'];
                        break;
                    }
                }
                // fant ingen ledig konkurranse?
                if (!$fff_id) {
                    // gi tilbake pengene
                    \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash + " . ff::CREATE_COST . " WHERE up_id = " . $this->up->id);
                    ess::$b->page->add_message("Det er ikke lenger noen ledige plasser for broderskap.", "error");
                    redirect::handle();
                } else {
                    // opprett familien
                    \Kofradia\DB::get()->exec("INSERT INTO ff SET ff_date_reg = " . time() . ", ff_type = 1, ff_name = " . \Kofradia\DB::quote($this->up->data['up_name'] . "'s broderskap") . ", ff_up_limit = " . \Kofradia\DB::quote(ff::MEMBERS_LIMIT_DEFAULT) . ", ff_fff_id = {$fff_id}");
                    $ff_id = \Kofradia\DB::get()->lastInsertId();
                    // legg til brukeren som boss
                    \Kofradia\DB::get()->exec("INSERT INTO ff_members SET ffm_up_id = " . $this->up->id . ", ffm_ff_id = {$ff_id}, ffm_date_created = " . time() . ", ffm_date_join = " . time() . ", ffm_priority = 1, ffm_status = 1, ffm_pay_points = " . $this->up->data['up_points']);
                    // logg
                    putlog("INFO", "Broderskap: %u" . $this->up->data['up_name'] . "%u opprettet et broderskap og er nå del av en konkurranse " . ess::$s['path'] . "/ff/?ff_id={$ff_id}");
                    // fiks forum link for boss
                    $ff = ff::get_ff($ff_id, ff::LOAD_SCRIPT);
                    if ($ff) {
                        $ff->members['members'][$this->up->id]->forum_link(true);
                    }
                    // live-feed
                    livefeed::add_row(ucfirst($ff->type['refobj']) . ' <a href="' . ess::$s['relative_path'] . '/ff/?ff_id=' . $ff->id . '">' . htmlspecialchars($ff->data['ff_name']) . '</a> ble opprettet av <user id="' . $this->up->id . '" />.');
                    ess::$b->page->add_message("Broderskapet ble opprettet.");
                    redirect::handle("?ff_id={$ff_id}");
                }
            }
        }
        ess::$b->page->add_title("Danne nytt broderskap");
        echo '
<div class="bg1_c xsmall">
	<h1 class="bg1">Danne nytt broderskap<span class="left"></span><span class="right"></span></h1>
	<p class="h_left"><a href="./">&laquo; Tilbake</a></p>
	<div class="bg1">
		<boxes />
		<p>For øyeblikket er det ' . $total_free . ' ' . fword("ledig broderskapplass", "ledige broderskapplasser", $total_free) . '.</p>
		<dl class="dd_right">
			<dt>Broderskapnavn</dt>
			<dd>' . $this->up->data['up_name'] . '\'s broderskap</dd>
			<dt>Kostnad å opprette</dt>
			<dd>' . game::format_cash(ff::CREATE_COST) . '</dd>
		</dl>
		<p>Du vil kunne sende søknad om å endre navnet på broderskapet etter den er opprettet.</p>
		<p>Dette vil danne et konkurrende broderskap. I løpet av en gitt periode vil broderskapet få i oppdrag om å ranke mer enn to andre broderskap. Broderskapet som oppnår mest samlet rank får beholde broderskapet, mens de to andre broderskapene dør ut.</p>
		<form action="" method="post">
			<input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" />
			<p class="c">
				' . show_sbutton("Opprett konkurrende broderskap", 'name="confirm"') . '
				<a href="./">Tilbake</a>
			</p>
		</form>
	</div>
</div>';
        ess::$b->page->load();
    }
Ejemplo n.º 8
0
 /**
  * Legg til forumtråd
  * @param \Kofradia\Forum\Category $forum
  * @param array $data (ft_id, ft_title, ft_type)
  */
 public static function add_topic_added(Category $forum, $data)
 {
     // finn ut hvor loggen skal plasseres
     $location = "INFO";
     // crewforum, crewforum arkiv eller idémyldringsforumet
     if ($forum->id >= 5 && $forum->id <= 7) {
         $location = "CREWCHAN";
         // legg til hendelse i spilleloggen
         $type = $forum->id == 5 ? 'crewforum_emne' : ($forum->id == 6 ? 'crewforuma_emne' : 'crewforumi_emne');
         $access_levels = implode(",", \ess::$g['access']['crewet']);
         \Kofradia\DB::get()->exec("INSERT INTO users_log SET time = " . time() . ", ul_up_id = 0, type = " . intval(\gamelog::$items[$type]) . ", note = " . \Kofradia\DB::quote(\login::$user->player->id . ":" . $data['ft_title']) . ", num = {$data['ft_id']}");
         \Kofradia\DB::get()->exec("UPDATE users SET u_log_crew_new = u_log_crew_new + 1 WHERE u_access_level IN ({$access_levels}) AND (u_id != " . \login::$user->id . " OR u_log_crew_new > 0)");
         // send e-post til crewet
         $email = new email();
         $email->text = "*{$data['ft_title']}* ble opprettet av " . \login::$user->player->data['up_name'] . "\r\n" . \ess::$s['path'] . "/forum/topic?id={$data['ft_id']}\r\n\r\nForum: " . $forum->get_name() . "\r\nAutomatisk melding for Kofradia Crewet";
         $result = \Kofradia\DB::get()->query("SELECT u_email FROM users WHERE u_access_level IN ({$access_levels}) AND u_id != " . \login::$user->id);
         while ($row = $result->fetch()) {
             $email->send($row['u_email'], \login::$user->player->data['up_name'] . " opprettet {$data['ft_title']} -- " . $forum->get_name() . "");
         }
     } elseif ($forum->id == 4) {
         $location = "";
         // legg til hendelse i spilleloggen
         $type = $forum->id == 4 ? 'crewforume_emne' : 'crewforum_emne';
         $access_levels = implode(",", \ess::$g['access']['seniormod']);
         \Kofradia\DB::get()->exec("INSERT INTO users_log SET time = " . time() . ", ul_up_id = 0, type = " . intval(\gamelog::$items[$type]) . ", note = " . \Kofradia\DB::quote(\login::$user->player->id . ":" . $data['ft_title']) . ", num = {$data['ft_id']}");
         \Kofradia\DB::get()->exec("UPDATE users SET u_log_crew_new = u_log_crew_new + 1 WHERE u_access_level IN ({$access_levels}) AND (u_id != " . \login::$user->id . " OR u_log_crew_new > 0)");
         // send e-post til crewet
         $email = new email();
         $email->text = "*{$data['ft_title']}* ble opprettet av " . \login::$user->player->data['up_name'] . "\r\n" . \ess::$s['path'] . "/forum/topic?id={$data['ft_id']}\r\n\r\nForum: " . $forum->get_name() . "\r\nAutomatisk melding for Kofradia Crewet";
         $result = \Kofradia\DB::get()->query("SELECT u_email FROM users WHERE u_access_level IN ({$access_levels}) AND u_id != " . \login::$user->id);
         while ($row = $result->fetch()) {
             $email->send($row['u_email'], \login::$user->player->data['up_name'] . " opprettet {$data['ft_title']} -- " . $forum->get_name() . "");
         }
     } elseif (!$forum->ff) {
         // live-feed
         \livefeed::add_row('<user id="' . \login::$user->player->id . '" /> opprettet <a href="' . \ess::$s['relative_path'] . '/forum/topic?id=' . $data['ft_id'] . '">' . htmlspecialchars($data['ft_title']) . '</a> i ' . htmlspecialchars($forum->get_name()) . '.');
     }
     // legg til som logg
     self::putlog($forum, $location, "FORUMTRÅD: (" . $forum->get_name() . ") '" . \login::$user->player->data['up_name'] . "' opprettet '{$data['ft_title']}' " . \ess::$s['path'] . "/forum/topic?id={$data['ft_id']}");
 }