/** * 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(); }
/** * 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; }
/** * 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 . '&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 . '&u&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 . '&a&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(); }
/** * 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; }
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}"); }
/** * 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 . '">« 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(); }
/** * 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="./">« 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(); }
/** * 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']}"); }