/** * Fjern en dusør hvis den eksisterer (ved drap) * @param player $up spilleren det gjelder * @param player $killer spilleren som forårsaket at spilleren ble drept/døde av skadene sine * @param bool $instant døde spilleren momentant? */ public static function player_dies(player $up, player $killer = NULL, $instant = NULL) { // hent og fjern mulig dusør $hitlist = \Kofradia\DB::get()->query("SELECT hl_id, hl_by_up_id, hl_time, hl_amount_valid FROM hitlist WHERE hl_up_id = {$up->id}"); if ($hitlist->rowCount() == 0) { return array("hitlist" => 0); } // fjern alle oppføringene \Kofradia\DB::get()->exec("DELETE FROM hitlist WHERE hl_up_id = {$up->id}"); // deaktiverte seg? if (!$killer) { $list = array(); // sett opp oversikt gruppert over hvem som satt hitlistene while ($row = $hitlist->fetch()) { if (!isset($list[$row['hl_by_up_id']])) { $list[$row['hl_by_up_id']] = 0; } $list[$row['hl_by_up_id']] += $row['hl_amount_valid']; } // pengene skal gis tilbake til de spillerene som satte dusøren, dersom de fremdeles er i live foreach ($list as $up_id => $sum) { // gi pengene tilbake hvis spilleren fremdeles er i live $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_bank = up_bank + {$sum} WHERE up_id = {$up_id} AND up_access_level != 0"); // fikk penger? if ($a > 0) { // hendelse om at pengene er returnert player::add_log_static("etterlyst_deactivate", $up->id, $sum, $up_id); } } return array("hitlist" => 0); } elseif ($killer->active) { // beregn total verdi $sum = 0; $oldest_time = null; while ($row = $hitlist->fetch()) { $sum += $row['hl_amount_valid']; if ($oldest_time == null || $row['hl_time'] < $oldest_time) { $oldest_time = $row['hl_time']; } } // gi pengene $f = $instant ? 'up_cash' : 'up_bank'; \Kofradia\DB::get()->exec("UPDATE users_players SET {$f} = {$f} + {$sum} WHERE up_id = {$killer->id}"); $killer->data[$f] = bcadd($killer->data[$f], $sum); // hendelse om at man mottok penger fra hitlist for drapet // gamelog syntax: offer_up_id:bool(instant?) $killer->add_log("etterlyst_receive", $up->id . ":" . ($instant ? '1' : '0'), $sum); return array("hitlist" => $sum, "hitlist_oldest_time" => $oldest_time); } }
/** * Behandle auksjonen når den er ferdig */ protected function handle_complete() { // forsøk å sett som behandlet $this->data['a_completed'] = 1; $affected = \Kofradia\DB::get()->exec("UPDATE auksjoner SET a_completed = 1 WHERE a_id = {$this->id} AND a_completed = 0"); // allerede behandlet? if ($affected == 0) { return; } // hent vinnerbudet $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT ab_id, ab_bid, ab_up_id\n\t\t\tFROM auksjoner_bud\n\t\t\tWHERE ab_a_id = {$this->id} AND ab_active != 0\n\t\t\tORDER BY ab_time DESC LIMIT 1"); $bud = $result->fetch(); unset($result); // har ikke noe bud? if (!$bud) { // behandle hver type auksjon forskjellig switch ($this->data['a_type']) { // firma case self::TYPE_FIRMA: // forleng auksjonen med 3 timer fra nå $this->data['a_end'] = time() + 10800; $this->data['a_completed'] = 0; $this->status = self::STATUS_ACTIVE; \Kofradia\DB::get()->exec("UPDATE auksjoner SET a_end = {$this->data['a_end']}, a_completed = 0 WHERE a_id = {$this->id}"); break; // kuler // kuler case self::TYPE_KULER: // gi kulene tilbake til personen som startet auksjonen $kuler = (int) $this->params->get("bullets"); if ($kuler && $this->data['a_up_id']) { player::add_log_static("auksjon_kuler_no_bid", $this->id, $kuler, $this->data['a_up_id']); \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = up_weapon_bullets + {$kuler}, up_weapon_bullets_auksjon = GREATEST(0, up_weapon_bullets_auksjon - {$kuler}) WHERE up_id = {$this->data['a_up_id']}"); } break; } } else { $up = player::get($bud['ab_up_id']); // behandle hver type auksjon forskjellig switch ($this->data['a_type']) { // firma case self::TYPE_FIRMA: // inviter spilleren til firmaet $ff_id = $this->params->get("ff_id"); if ($ff_id) { $ff = ff::get_ff($ff_id, ff::LOAD_SCRIPT); $ff->player_set_priority($bud['ab_up_id'], 1); $ff->reset_date_reg(true); // første firma av denne typen i spillet? hall_of_fame::trigger("ff_owner", $ff); } break; // kuler // kuler case self::TYPE_KULER: // gi kulene til vinneren av auksjonen $kuler = (int) $this->params->get("bullets"); if ($kuler) { // oppdater antall auksjonskuler for spilleren som holdt auksjonen if ($this->data['a_up_id']) { \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets_auksjon = GREATEST(0, up_weapon_bullets_auksjon - {$kuler}) WHERE up_id = {$this->data['a_up_id']}"); } // gi kulene til vinneren $up->add_log("auksjon_kuler_won", $this->id . ":" . $bud['ab_bid'], $kuler); $up->data['up_weapon_bullets'] += $kuler; $up->data['up_weapon_bullets'] = max(0, $up->data['up_weapon_bullets'] - $kuler); \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = up_weapon_bullets + {$kuler}, up_weapon_bullets_auksjon = GREATEST(0, up_weapon_bullets_auksjon - {$kuler}) WHERE up_id = {$bud['ab_up_id']}"); } break; } // live-feed livefeed::add_row('<user id="' . $bud['ab_up_id'] . '" /> vant auksjonen <a href="' . ess::$s['relative_path'] . '/auksjoner?a_id=' . $this->id . '">' . htmlspecialchars($this->data['a_title']) . '</a>.'); // gi penger til den som la ut auksjonen if ($this->data['a_up_id']) { \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players\n\t\t\t\t\tSET up_cash = up_cash + {$bud['ab_bid']}, up_auksjoner_total_in = up_auksjoner_total_in = {$bud['ab_bid']}\n\t\t\t\t\tWHERE up_id = {$this->data['a_up_id']}"); } // oppdater statistikk til spilleren som vant budet \Kofradia\DB::get()->exec("\n\t\t\t\tUPDATE users_players\n\t\t\t\tSET up_auksjoner_total_out = up_auksjoner_total_out = {$bud['ab_bid']}\n\t\t\t\tWHERE up_id = {$bud['ab_up_id']}"); // hent alle budene som skal settes inaktive $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT ab_id, ab_bid, ab_up_id\n\t\t\t\tFROM auksjoner_bud\n\t\t\t\tWHERE ab_a_id = {$this->id} AND ab_active != 0 AND ab_id != {$bud['ab_id']}"); while ($row = $result->fetch()) { self::set_bud_inactive($row, $this); } // behandle trigger $up->trigger("auksjon_won", array("auksjon" => $this, "bud" => $bud)); } // behandle trigger if ($this->data['a_up_id']) { $up = player::get($this->data['a_up_id']); if ($up) { $up->trigger("auksjon_complete", array("auksjon" => $this, "winner_bud" => $bud)); } } // oppdater cache self::update_cache(); }
/** * Åpne oppdrag (gjør det mulig å gjennomføre) * * @param int $o_id */ public function unlock($o_id, $text = 'Du har gjennomført første delen av oppdraget «$name».') { $o_id = (int) $o_id; $a = \Kofradia\DB::get()->exec("UPDATE users_oppdrag SET uo_locked = 0, uo_params = NULL WHERE uo_up_id = {$this->up->id} AND uo_o_id = {$o_id} AND uo_locked != 0"); $updated = $a > 0; // oppdater lokal data if (isset($this->oppdrag[$o_id])) { $this->oppdrag[$o_id]['uo_locked'] = 0; $this->oppdrag[$o_id]['uo_params'] = NULL; } // oppdater triggers $this->link_triggers(); // ikke allerede oppdatert if ($updated) { $text = str_replace('$name', $this->oppdrag[$o_id]['o_title'], $text); // send teksten til brukeren if ($this->user_active) { ess::$b->page->add_message($text); } // melding i spillelogg global $_game; player::add_log_static("oppdrag", $text, 0, $this->up->id); return true; } // ikke oppdatert av dette scriptet return false; }
/** * Crewside */ protected static function page_crew() { global $__server, $_lang; ess::$b->page->add_title("Crew"); $subpage2 = getval("b"); redirect::store(page_min_side::addr(NULL, $subpage2 != "" ? "b=" . $subpage2 : '')); ess::$b->page->add_css(' .minside_crew_links .active { color: #CCFF00 }'); $links = array(); $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "", "player")) . '">Min spiller</a>'; $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "")) . '"' . ($subpage2 == "" ? ' class="active"' : '') . '>Oversikt / logg</a>'; if (access::has("forum_mod")) { $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=addlog")) . '"' . ($subpage2 == "addlog" ? ' class="active"' : '') . '>Nytt notat</a>'; } $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=blokk")) . '"' . ($subpage2 == "blokk" ? ' class="active"' : '') . '>Blokkeringer</a>'; if (access::has("mod")) { $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=banka")) . '"' . ($subpage2 == "banka" ? ' class="active"' : '') . '>Bankpassord</a>'; } if (access::has("mod")) { $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=birth")) . '"' . ($subpage2 == "birth" ? ' class="active"' : '') . '>Fødselsdato</a>'; } if (access::has("mod")) { $links[] = '<a href="' . htmlspecialchars(page_min_side::addr("set", "b=pass")) . '">Passord</a>'; } if (access::has("admin")) { $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=level")) . '"' . ($subpage2 == "level" ? ' class="active"' : '') . '>Tilgangsnivå</a>'; } $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=send_email")) . '"' . ($subpage2 == "send_email" ? ' class="active"' : '') . '>Send e-post</a>'; $links[] = '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=warning")) . '"' . ($subpage2 == "warning" ? ' class="active"' : '') . '>Gi advarsel</a>'; echo ' <p class="c minside_crew_links">' . implode(" | ", $links) . '</p>'; if ($subpage2 == "") { // javascript for rapporteringer ess::$b->page->add_js_domready(' var w = $("minside_reports"); var xhr = new Request({ url: relative_path + "/ajax/minside_report", data: { u_id: ' . page_min_side::$active_user->id . ' }, evalScripts: function(script) { ajax.js += script; } }); xhr.addEvent("success", function(text) { w.set("html", text); w.getElements(".pagenumbers").each(function(elm) { elm.addEvent("set_page", function(s) { load(null, s, true); }); }); ajax.refresh(); }); xhr.addEvent("failure", function(x) { var p = new Element("p", {html: "Feil: " + x}).inject(w.empty()); }); function load(a, s, goto) { if (a !== null) xhr.options.data.a = a; if (s) xhr.options.data.s = s; if (goto) w.getParent().goto(-10); w.set("html", "<p>Laster inn data..</p>"); xhr.send(); } $("minside_reports_from").addEvent("click", function() { load("from", 1, true); }); $("minside_reports_to").addEvent("click", function() { load("to", 1, true); }); $("minside_reports_all").addEvent("click", function() { load("", 1, true); }); load();'); // css for rapporteringer ess::$b->page->add_css(' .rap_wrap { margin: 1em 0; background-color: #222222; position: relative; overflow: auto; } .rap_time { position: absolute; top: 8px; right: 5px; margin: 0; color: #777777; } .rap_time span { color: #EEEEEE; } .rap_w { margin: 0; padding: 5px; background-color: #282828; } .rap_u { font-size: 14px; } .rap_wrap .col2_w { margin: 0 } .rap_wrap .col_w.left { width: 40% } .rap_wrap .col_w.right { width: 60% } .rap_wrap .col_w.left .col { margin: 0 0 0 5px } .rap_wrap .col_w.right .col { margin: 5px 5px 5px 0 } .rap_note { background-color: #1C1C1C; padding: 5px !important; overflow: auto; border: 1px dotted #525252 } '); // faner ess::$b->page->add_js_domready(' $$(".minside_fane_link").addEvent("click", function(elm) { $$(".minside_fane").setStyle("display", "none"); $$(".minside_fane_link").removeClass("minside_fane_active"); this.addClass("minside_fane_active"); $(this.get("rel")).setStyle("display", ""); }); $$(".minside_fane_active").fireEvent("click");'); ess::$b->page->add_css(' .minside_fane_active, .minside_fane_active:hover { color: #CCFF00; }'); echo ' <div class="col2_w"> <div class="col_w left"> <div class="col"> <div class="bg1_c"> <h1 class="bg1">Oversikt<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">'; // hent blokkeringer for brukeren $result = \Kofradia\DB::get()->query("SELECT ub_id, ub_type, ub_time_expire, ub_reason FROM users_ban WHERE ub_u_id = " . page_min_side::$active_user->id . " AND ub_time_expire > " . time()); if ($result->rowCount() > 0) { while ($row = $result->fetch()) { $access = access::has(blokkeringer::$types[$row['ub_type']]['access']); echo ' <p>Blokkert: ' . ($access ? '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=blokk&t={$row['ub_type']}")) . '">' : '') . htmlspecialchars(blokkeringer::$types[$row['ub_type']]['title']) . ($access ? '</a>' : '') . ' (til ' . ess::$b->date->get($row['ub_time_expire'])->format(date::FORMAT_SEC) . ', ' . game::counter($row['ub_time_expire'] - time()) . ')</p>'; } } echo ' <p>Trykk deg inn på de forskjellige spillerene til brukeren for å se informasjon knyttet opp mot dem.</p> </div> </div> </div> </div> <div class="col_w right"> <div class="col"> <div class="bg1_c"> <h1 class="bg1">Crewnotat for brukeren<span class="left2"></span><span class="right2"></span></h1> <p class="h_right"><a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=enote")) . '">rediger</a></p> <div class="bg1"> <p>Her kan hvem som helst i crewet legge til eller endre et notat for denne brukeren for å memorere ting som har med <u>brukeren</u> å gjøre.</p>' . (empty(page_min_side::$active_user->data['u_note_crew']) ? ' <p>Ingen notat er registrert.</p>' : ' <div class="p">' . game::bb_to_html(page_min_side::$active_user->data['u_note_crew']) . '</div>') . ' </div> </div> </div> </div> </div> <p class="c"><a class="minside_fane_link minside_fane_active" rel="minside_fane2">Loggoppføringer</a> | <a class="minside_fane_link" rel="minside_fane1">Rapporteringer</a></p> <div id="minside_fane1" class="minside_fane"> <p class="c">Filter: <a id="minside_reports_from">Brukerens egne rapporteringer</a> | <a id="minside_reports_to">Andres rapporteringer</a> | <a id="minside_reports_all">Alle</a></p> <div id="minside_reports"> <p>Laster inn..</p> </div> </div> <div id="minside_fane2" class="minside_fane"> <p class="c">Loggoppføringer for denne brukeren</p>'; // hent loggene for denne brukeren $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 50); $result = $pagei->query("SELECT lc_id, lc_up_id, lc_time, lc_lca_id, lc_a_up_id, lc_log FROM log_crew JOIN users_players ON up_u_id = " . page_min_side::$active_user->id . " WHERE lc_a_up_id = up_id ORDER BY lc_time DESC"); // ingen handlinger? if ($result->rowCount() == 0) { echo ' <p class="c">Ingen oppføringer eksisterer.</p>'; } else { $rows = array(); while ($row = $result->fetch()) { $rows[$row['lc_id']] = $row; } $data = crewlog::load_summary_data($rows); $logs = array(); foreach ($data as $row) { // hent sammendrag $summary = crewlog::make_summary($row, NULL, $row['lc_a_up_id'] != page_min_side::$active_player->id); $day = ess::$b->date->get($row['lc_time'])->format(date::FORMAT_NOTIME); $logs[$day][] = '<p><span class="time">' . ess::$b->date->get($row['lc_time'])->format("H:i") . ':</span> ' . $summary . '</p>'; } ess::$b->page->add_css('.crewlog .time { color: #888888; padding-right: 5px }'); foreach ($logs as $day => $items) { echo ' <div class="bg1_c"> <h1 class="bg1">' . $day . '<span class="left2"></span><span class="right2"></span></h1> <div class="bg1 crewlog"> ' . implode(' ', $items) . ' </div> </div>'; } echo ' <p class="c">' . $pagei->pagenumbers() . '</p>'; } echo ' </div>'; } elseif ($subpage2 == "addlog" && access::has("forum_mod")) { // legge til? if (isset($_POST['notat'])) { $notat = trim(postval("notat")); $notat_bb = trim(game::bb_to_html($notat)); if (empty($notat_bb)) { ess::$b->page->add_message("Notatet kan ikke være tomt.", "error"); } else { // legg til i crewloggen crewlog::log("user_add_note", page_min_side::$active_player->id, $notat); ess::$b->page->add_message("Notatet ble registrert."); redirect::handle(page_min_side::addr()); } } ess::$b->page->add_title("Nytt notat"); ess::$b->page->add_js_domready('$("notat_felt").focus();'); echo ' <div class="bg1_c"> <h1 class="bg1">Legg til notat i crewloggen<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Notat: (Vil bli lagt til som vanlig logg i <a href="' . htmlspecialchars(page_min_side::addr(NULL)) . '">Crewloggen</a>.)</p> <form action="" method="post"> <p><textarea name="notat" id="notat_felt" rows="10" cols="30" style="width: 98%; overflow: auto">' . htmlspecialchars(postval("notat")) . '</textarea></p> <p>' . show_sbutton("Legg til notat") . '</p> </form> </div> </div>'; } elseif ($subpage2 == "blokk") { ess::$b->page->add_title("Blokkeringer"); $type = false; if (isset($_GET['t'])) { // kontroller type $type_id = intval($_GET['t']); // fant ikke? if (!isset(blokkeringer::$types[$type_id])) { ess::$b->page->add_message("Ugyldig type '.{$type_id}.'.", "error"); } else { $type = blokkeringer::$types[$type_id]; // har vi tilgang til å gjøre noe med denne blokkeringen? if (!access::has($type['access'])) { ess::$b->page->add_message('Du har ikke tilgang til denne typen blokkering. (' . htmlspecialchars($type['title']) . ')', "error"); $type = false; } } } // vise en type blokkering? if ($type) { redirect::store(page_min_side::addr(NULL, "b=blokk&t={$type_id}")); // sjekk om det er en aktiv blokkering for denne typen $active = blokkeringer::check($type_id, page_min_side::$active_user->id); if ($active) { // hent informasjon om blokkeringen $info = blokkeringer::get_info($active['ub_id']); } // handling: legg til blokkering if (isset($_POST['add']) && $active) { ess::$b->page->add_message("Det er allerede en blokkering på brukeren som varer til " . ess::$b->date->get($active['ub_time_expire'])->format() . ".", "error"); } elseif (isset($_POST['add'])) { // kontroller verdier $date_type = isset($_POST['date_type']) && $_POST['date_type'] == "abs" ? "abs" : "rel"; $rel_weeks = intval(postval("rel_weeks")); $rel_days = intval(postval("rel_days")); $rel_hours = intval(postval("rel_hours")); $rel_mins = intval(postval("rel_mins")); $abs_date = postval("abs_date"); $abs_time = postval("abs_time"); // sjekk type og verdiene $expire = false; // bestemt dato/tidspunkt if ($date_type == "abs") { // kontroller datoen if (!($abs_date_m = check_date($abs_date, "%y-%m-%d"))) { ess::$b->page->add_message('Datoen du skrev inn er ikke gyldig.', "error"); } elseif (!($abs_time_m = check_date($abs_time, "%h:%i:%s"))) { ess::$b->page->add_message('Tidspunktet du skrev inn er ikke gyldig.', "error"); } else { // ok $date = ess::$b->date->get(); $date->setTime($abs_time_m[1], $abs_time_m[2], $abs_time_m[3]); $date->setDate($abs_date_m[1], $abs_date_m[2], $abs_date_m[3]); $expire = $date->format("U"); } } else { // sjekk uker if ($rel_weeks < 0 || $rel_weeks > 9) { ess::$b->page->add_message('Antall uker kan ikke være under 0 eller over 9.', "error"); } elseif ($rel_days < 0 || $rel_days > 6) { ess::$b->page->add_message('Antall dager kan ikke være under 0 eller over 6.', "error"); } elseif ($rel_hours < 0 || $rel_hours > 23) { ess::$b->page->add_message('Antall timer kan ikke være under 0 eller over 23.', "error"); } elseif ($rel_mins < 0 || $rel_mins > 59) { ess::$b->page->add_message('Antall minutter kan ikke være under 0 eller over 59.', "error"); } else { // ok $expire = time() + $rel_weeks * 604800 + $rel_days * 86400 + $rel_hours * 3600 + $rel_mins * 60; } } // sjekke videre? if ($expire) { // sjekk at datoen er minst 1 min fremover i tid if ($expire < time() + 60) { ess::$b->page->add_message('Du kan ikke legge til en blokkering for mindre enn 1 minutt.', "error"); } else { // kontroller begrunnelse og intern informasjon $log = trim(postval("log")); $note = trim(postval("note")); // mangler begrunnelse? if ($log == "") { ess::$b->page->add_message('Mangler begrunnelse.', "error"); } elseif ($note == "") { ess::$b->page->add_message("Mangler intern informasjon", "error"); } else { // forsøk å legg til blokkeringen $add = blokkeringer::add(page_min_side::$active_user->id, $type_id, $expire, $log, $note); if ($add !== true) { ess::$b->page->add_message("Det er allerede en blokkering på brukeren som varer til " . ess::$b->date->get($add['ub_time_expire'])->format() . ".", "error"); } else { // legg til crewlogg crewlog::log("user_ban_active", page_min_side::$active_player->id, $log, array("type" => $type_id, "time_end" => $expire, "note" => $note)); ess::$b->page->add_message('Brukeren er nå blokkert til ' . ess::$b->date->get($expire)->format() . '. (' . htmlspecialchars($type['title']) . ')'); redirect::handle(); } } } } } elseif (isset($_POST['edit']) && !$active) { // ingen blokkering å redigere? ess::$b->page->add_message("Brukeren har ikke lengre denne blokkeringen.", "error"); } elseif (isset($_POST['edit'])) { // godkjent handling? if (isset($_POST['log_change'])) { // kontroller verdier $date = postval("date"); $time = postval("time"); // kontroller datoen if (!($date_m = check_date($date, "%y-%m-%d"))) { ess::$b->page->add_message('Datoen du skrev inn er ikke gyldig.', "error"); } elseif (!($time_m = check_date($time, "%h:%i:%s"))) { ess::$b->page->add_message('Tidspunktet du skrev inn er ikke gyldig.', "error"); } else { $date = ess::$b->date->get(); $date->setTime($time_m[1], $time_m[2], $time_m[3]); $date->setDate($date_m[1], $date_m[2], $date_m[3]); $expire = $date->format("U"); // sjekk at datoen er minst 1 min fremover i tid if ($expire < time() + 60) { ess::$b->page->add_message('Du kan ikke legge til en blokkering for mindre enn 1 minutt.', "error"); } else { // kontroller begrunnelse for utestengelse, begrunnelse for endring og intern informasjon $log_ban = trim(postval("log_ban")); $log_change = trim(postval("log_change")); $note = trim(postval("note")); // mangler begrunnelse for endring? if ($log_change == "") { ess::$b->page->add_message('Mangler begrunnelse for endring.', "error"); } elseif ($log_ban == "") { ess::$b->page->add_message('Mangler begrunnelse for utestengelse.', "error"); } elseif ($note == "") { ess::$b->page->add_message('Mangler intern informasjon.', "error"); } elseif ($expire == $info['ub_time_expire'] && $log_ban == $info['ub_reason'] && $note == $info['ub_note']) { ess::$b->page->add_message('Ingen endringer ble utført.', "error"); } else { // oppdater blokkeringen $edit = blokkeringer::edit($active['ub_id'], $expire, $log_ban, $note); if ($edit == 0) { ess::$b->page->add_message("Blokkeringen kunne ikke bli oppdatert. Den er mest sannsynlig ikke lengre aktiv.", "error"); } else { // legg til crewlogg $data = array("type" => $type_id, "time_end_old" => $info['ub_time_expire'], "log_old" => $info['ub_reason'], "note_old" => $info['ub_note']); if ($expire != $info['ub_time_expire']) { $data["time_end_new"] = $expire; } if ($log_ban != $info['ub_reason']) { $data["log_new"] = $log_ban; } if ($note != $info['ub_note']) { $data["note_new"] = $note; } crewlog::log("user_ban_change", page_min_side::$active_player->id, $log_change, $data); ess::$b->page->add_message('Du har oppdatert blokkeringen. Brukeren er nå blokkert til ' . ess::$b->date->get($expire)->format() . '. (' . htmlspecialchars($type['title']) . ')'); redirect::handle(); } } } } } } elseif (isset($_POST['delete']) && !$active) { // ingen blokkering å slette? ess::$b->page->add_message("Brukeren har ikke lengre denne blokkeringen.", "error"); } elseif (isset($_POST['delete'])) { // godkjent handling? if (isset($_POST['log'])) { $log = trim(postval("log")); // mangler logg? if ($log == "") { ess::$b->page->add_message('Mangler begrunnelse.', "error"); } else { // fjern blokkeringen $delete = blokkeringer::delete($active['ub_id']); if ($delete == 0) { ess::$b->page->add_message("Blokkeringen kunne ikke bli oppdatert. Den er mest sannsynlig ikke lengre aktiv.", "error"); } else { // legg til crewlogg crewlog::log("user_ban_delete", page_min_side::$active_player->id, $log, array("type" => $type_id, "time_end" => $info['ub_time_expire'], "log" => $info['ub_reason'], "note" => $info['ub_note'])); ess::$b->page->add_message('Du har fjernet blokkeringen. (' . htmlspecialchars($type['title']) . ')'); redirect::handle(); } } } } echo ' <div class="bg1_c" style="width: 350px"> <h1 class="bg1">Blokkering: ' . htmlspecialchars($type['title']) . '<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes /> <p class="r">Tilgangsnivå: ' . access::name($type['access']) . '</p> <p><u>Hensikt:</u> ' . $type['description'] . '</p>'; // blokkert? if ($active) { echo ' <p>Brukeren er blokkert.</p> <dl class="dd_right"> <dt>Lagt til</dt> <dd>' . ess::$b->date->get($info['ub_time_added'])->format(date::FORMAT_SEC) . '<br />' . game::timespan($info['ub_time_added'], game::TIME_ABS | game::TIME_ALL, 5) . '</dd> <dt>Utestengt til</dt> <dd>' . ess::$b->date->get($info['ub_time_expire'])->format(date::FORMAT_SEC) . '<br />' . game::counter($info['ub_time_expire'] - time()) . '</dd> </dl> <div class="section"> <h2>Begrunnelse</h2> <div class="p">' . (($reason = game::bb_to_html($info['ub_reason'])) == "" ? 'Ikke oppgitt.' : $reason) . '</div> <h2>Intern informasjon</h2> <div class="p">' . (($note = game::bb_to_html($info['ub_note'])) == "" ? 'Ikke oppgitt.' : $note) . '</div> </div>'; // handling: redigere blokkering if (isset($_POST['edit'])) { echo ' <p>Du er i ferd med å endre blokkeringen til brukeren.</p> <form action="" method="post"> <dl class="dd_right dl_2x"> <dt>Til</dt> <dd> Dato: <input type="text" name="date" id="ban_date" value="' . htmlspecialchars(postval("date", ess::$b->date->get($info['ub_time_expire'])->format("Y-m-d"))) . '" class="styled w80" /> <input type="text" name="time" id="ban_time" value="' . htmlspecialchars(postval("time", ess::$b->date->get($info['ub_time_expire'])->format("H:i:s"))) . '" class="styled w80" /> </dd> <dt>Begrunnelse for endring</dt> <dd><textarea name="log_change" cols="30" rows="5">' . htmlspecialchars(postval("log_change")) . '</textarea></dd> <dt>Begrunnelse for blokkering</dt> <dd><textarea name="log_ban" cols="30" rows="5">' . htmlspecialchars(postval("log_ban", $info['ub_reason'])) . '</textarea></dd> <dt>Intern informasjon</dt> <dd><textarea name="note" cols="30" rows="5">' . htmlspecialchars(postval("note", $info['ub_note'])) . '</textarea></dd> <dd> ' . show_sbutton("Lagre endringer", 'name="edit"') . ' ' . show_sbutton("Avbryt") . ' </dd> </dl> </form>'; } elseif (isset($_POST['delete'])) { echo ' <p>Du er i ferd med å fjerne blokkeringen til brukeren.</p> <form action="" method="post"> <dl class="dd_right dl_2x"> <dt>Begrunnelse for fjerning</dt> <dd><textarea name="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd> <form action="" method="post"> <dd> ' . show_sbutton("Fjern", 'name="delete"') . ' ' . show_sbutton("Avbryt") . ' </dd> </form> </dl> </form>'; } else { echo ' <form action="" method="post"> <p> ' . show_sbutton("Endre", 'name="edit"') . ' ' . show_sbutton("Fjern", 'name="delete"') . ' <a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=blokk")) . '" class="button">Tilbake</a> </p> </form>'; } } else { $date_type = isset($_POST['type']) && $_POST['type'] == "abs" ? "abs" : "rel"; $hide_rel = $date_type == "rel" ? '' : ' hide'; $hide_abs = $date_type == "abs" ? '' : ' hide'; echo ' <p>Brukeren har ingen aktiv blokkering.</p> <form action="" method="post"> <input type="hidden" name="date_type" value="' . $date_type . '" /> <dl class="dd_right dl_2x"> <dt class="date_rel' . $hide_rel . '">Varighet (<a href="#" onclick="handleClass(\'.date_abs\', \'.date_rel\', event, this.parentNode.parentNode); $(\'date_type\').value=\'abs\'">velg dato</a>)</dt> <dd class="date_rel' . $hide_rel . '"> <input type="text" name="rel_weeks" class="styled w30 r" style="width: 10px" value="' . intval(postval("rel_weeks")) . '" maxlength="1" /> uker <input type="text" name="rel_days" class="styled w30 r" style="width: 10px" value="' . intval(postval("rel_days")) . '" maxlength="1" /> dager <input type="text" name="rel_hours" class="styled w30 r" style="width: 17px" value="' . intval(postval("rel_hours")) . '" maxlength="2" /> timer <input type="text" name="rel_mins" class="styled w30 r" style="width: 17px" value="' . intval(postval("rel_mins")) . '" maxlength="2" /> minutter </dd> <dt class="date_abs' . $hide_abs . '">Til (<a href="#" onclick="handleClass(\'.date_rel\', \'.date_abs\', event, this.parentNode.parentNode); $(\'date_type\').value=\'rel\'">velg varighet</a>)</dt> <dd class="date_abs' . $hide_abs . '"> Dato: <input type="text" name="abs_date" value="' . htmlspecialchars(postval("abs_date", ess::$b->date->get()->format("Y-m-d"))) . '" class="styled w80" /> <input type="text" name="abs_time" value="' . htmlspecialchars(postval("abs_time", ess::$b->date->get()->format("H:i:s"))) . '" class="styled w60" /> </dd> <dt>Begrunnelse</dt> <dd><textarea name="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd> <dt>Intern informasjon</dt> <dd><textarea name="note" cols="30" rows="5">' . htmlspecialchars(postval("note")) . '</textarea></dd> <dd> ' . show_sbutton("Legg til blokkering", 'name="add"') . ' <a href="' . htmlspecialchars(page_min_side::addr(NULL, "a=blokk")) . '" class="button">Tilbake</a> </dd> </dl> </form>'; } echo ' </div> </div>'; } else { // filtrer ut de blokkeringene vi har tilgang til å sette $types = blokkeringer::$types; $links = array(); foreach ($types as $id => $type) { if (!access::has($type['access'])) { continue; } $links[$type['title']] = ' <li><a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=blokk&t={$id}")) . '" title="' . htmlspecialchars($type['description']) . '">' . htmlspecialchars($type['title']) . '</a></li>'; } // sorter ksort($links); $links = implode('', $links); // vis oversikt echo ' <div class="bg1_c" style="width: 350px"> <h1 class="bg1">Blokkeringer<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Velg type:</p>'; if ($links == '') { echo ' <p>Du har ikke tilgang til noen blokkeringstyper.</p>'; } else { echo ' <ul>' . $links . ' </ul>'; } echo ' </div> </div>'; // hent alle aktive blokkeringer $result = \Kofradia\DB::get()->query("SELECT ub_type, ub_time_expire, ub_reason FROM users_ban WHERE ub_u_id = " . page_min_side::$active_user->id . " AND ub_time_expire > " . time() . " ORDER BY ub_time_expire"); if ($result->rowCount() > 0) { echo ' <div class="bg1_c" style="width: 350px"> <h1 class="bg1">Aktive blokkeringer<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <table class="table tablem" style="width: 100%"> <thead> <tr> <th>Type</th> <th>Dato</th> <th>Begrunnelse</th> </tr> </thead> <tbody>'; $i = 0; while ($row = $result->fetch()) { $type = blokkeringer::get_type($row['ub_type']); $access = access::has($type['access']); echo ' <tr' . (++$i % 2 == 0 ? ' class="color"' : '') . '> <td>' . ($access ? '<a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=blokk&t={$row['ub_type']}")) . '">' : '') . htmlspecialchars($type['title']) . ($access ? '</a>' : '') . '</td> <td> ' . ess::$b->date->get($row['ub_time_expire'])->format(date::FORMAT_SEC) . '<br /> (' . game::timespan($row['ub_time_expire'], game::TIME_ABS | game::TIME_ALL, 5) . ') </td> <td>' . game::format_data($row['ub_reason'], "bb-opt", "Ingen begrunnelse gitt.") . '</td> </tr>'; } echo ' </tbody> </table> </div> </div>'; } } } elseif ($subpage2 == "send_email") { ess::$b->page->add_title("Send e-post"); // har tekst? $show_form = true; if (isset($_POST['text']) && !isset($_POST['edit'])) { $subject = trim(postval("subject")); $text = trim(postval("text")); // mangler emne? if (empty($subject)) { ess::$b->page->add_message("Du må fylle ut emnefeltet.", "error"); } elseif (empty($text)) { ess::$b->page->add_message("Du må fylle ut innholdet.", "error"); } else { $email_subject = $subject; $email_text = $text . "\n\n--\n" . login::$user->player->data['up_name'] . "\nwww.kofradia.no\n\nDenne meldingen ble sendt til " . page_min_side::$active_user->data['u_email'] . " som tilhører " . page_min_side::$active_player->data['up_name']; // godkjent? if (isset($_POST['send'])) { // send e-posten $email = new email(); $email->text = $email_text; $email->headers['BCC'] = "*****@*****.**"; $email->headers['Reply-To'] = "*****@*****.**"; $email->send(page_min_side::$active_user->data['u_email'], $email_subject); // legg til crewlogg crewlog::log("user_send_email", page_min_side::$active_player->id, NULL, array("email" => page_min_side::$active_user->data['u_email'], "email_subject" => $email_subject, "email_content" => $email_text)); ess::$b->page->add_message("E-posten ble sendt til " . htmlspecialchars(page_min_side::$active_user->data['u_email']) . "."); redirect::handle(page_min_side::addr("")); } echo ' <div class="bg1_c" style="width: 400px"> <h1 class="bg1">Send e-post<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p><b>Mottaker:</b> ' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</p> <p><b>Emne:</b> ' . htmlspecialchars($email_subject) . '</p> <p style="font-family: monospace">' . nl2br(htmlspecialchars($email_text)) . '</p> <form action="" method="post"> <input type="hidden" id="email_subject" name="subject" value="' . htmlspecialchars($subject) . '" /> <input type="hidden" id="email_text" name="text" value="' . htmlspecialchars($text) . '" /> <p>' . show_sbutton("Send e-posten", 'name="send"') . ' ' . show_sbutton("Tilbake / endre", 'name="edit"') . '</p> </form> </div> </div>'; $show_form = false; } } if ($show_form) { ess::$b->page->add_js_domready('$("email_subject").focus();'); echo ' <div class="bg1_c" style="width: 400px"> <h1 class="bg1">Send e-post<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <boxes /> <p>Her sender du e-post til brukeren på vegne av Kofradia. Avsender vil være den normale avsendere all e-post fra Kofradia blir sendt fra.</p> <form action="" method="post"> <dl class="dd_right dl_2x"> <dt>Mottaker</dt> <dd>' . htmlspecialchars(page_min_side::$active_user->data['u_email']) . '</dd> <dt>Emne</dt> <dd><input type="text" value="' . htmlspecialchars(postval("subject")) . '" name="subject" id="email_subject" class="styled w200" /></dd> <dt>Innhold</dt> <dd><textarea name="text" id="email_text" cols="50" rows="10">' . htmlspecialchars(postval("text", "Hei,\n\n")) . '</textarea></dd> <dd>' . show_sbutton("Forhåndsvis / fortsett") . '</dd> </dl> </form> </div> </div>'; } } elseif ($subpage2 == "warning") { ess::$b->page->add_title("Gi advarsel til brukeren"); $types = crewlog::$user_warning_types; // legge til advarsel? if (isset($_POST['log'])) { $log = trim(postval("log")); $note = trim(postval("note")); $type = postval("type"); $priority = (int) postval("priority"); $notify = isset($_POST['notify']); if (empty($log) || empty($note)) { ess::$b->page->add_message("Både begrunnelse og intern informasjon må fylles ut.", "error"); } elseif (!isset($types[$type])) { ess::$b->page->add_message("Ugyldig kategori.", "error"); } elseif ($priority < 1 || $priority > 3) { ess::$b->page->add_message("Ugylig alvorlighet.", "error"); } else { $data = array("type" => $types[$type], "note" => $note, "priority" => $priority); // legge til spillerlogg? if ($notify) { $data['notified'] = 1; $data['notified_id'] = player::add_log_static(gamelog::$items['advarsel'], urlencode($types[$type]) . ':' . urlencode($log), NULL, page_min_side::$active_player->id); ess::$b->page->add_message("Advarselen ble lagret. Brukeren ble informert."); } else { ess::$b->page->add_message("Advarselen ble lagret. Du har ikke informert brukeren om denne advarselen."); } // legg til advarselen crewlog::log("user_warning", page_min_side::$active_player->id, $log, $data); redirect::handle(); } } echo ' <div class="bg1_c" style="width: 400px"> <h1 class="bg1">Gi advarsel til brukeren<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <form action="" method="post"> <boxes /> <p>Dette kan benyttes som et verktøy for å gi advarsler til brukere. Det kan velges om brukeren skal motta advarselen eller ikke. Hvis man ikke velger å informere brukeren om noe, blir det alikevel søkbart i crewloggen for brukeren.</p> <p>Alvorligheten av advarselen blir benyttet for å automatisere en poengsum brukeren får avhengig av antall advarseler. En advarsel med høy alvorlighet varer lenger og teller mer enn en med lav alvorlighet.</p> <dl class="dd_right"> <dt>Kategori</dt> <dd> <select name="type">'; $type = isset($_POST['type']) && isset($types[$_POST['type']]) ? intval($_POST['type']) : false; if ($type === false) { echo ' <option value="">Velg ..</option>'; } foreach ($types as $key => $row) { echo ' <option value="' . $key . '"' . ($key === $type ? ' selected="selected"' : '') . '>' . htmlspecialchars($row) . '</option>'; } echo ' </select> </dd> <dt>Alvorlighet/prioritet</dt> <dd> <select name="priority">'; $priority = isset($_POST['priority']) && is_numeric($_POST['priority']) && $_POST['priority'] >= 1 && $_POST['priority'] <= 3 ? $_POST['priority'] : 2; echo ' <option value="1"' . ($priority == 1 ? ' selected="selected"' : '') . '>Lav</option> <option value="2"' . ($priority == 2 ? ' selected="selected"' : '') . '>Moderat</option> <option value="3"' . ($priority == 3 ? ' selected="selected"' : '') . '>Høy</option> </select> </dd> </dl> <p>Begrunnelse:</p> <p><textarea name="log" rows="10" cols="30" style="width: 98%">' . htmlspecialchars(postval("log")) . '</textarea></p> <p>Intern informasjon:</p> <p><textarea name="note" rows="10" cols="30" style="width: 98%">' . htmlspecialchars(postval("note")) . '</textarea></p> <p><input type="checkbox" name="notify"' . ($_SERVER['REQUEST_METHOD'] == "POST" && !isset($_POST['notify']) ? '' : ' checked="checked"') . ' id="warning_notify" /><label for="warning_notify"> Gi brukeren informasjon om denne advarselen. Kun kategori og begrunnelse vil bli oppgitt til brukeren som en logg i hendelser.</label></p> <p class="c">' . show_sbutton("Lagre") . '</p> </form> </div> </div>'; // analyser advarsler $lca_id = crewlog::$actions['user_warning'][0]; $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 15); $result = $pagei->query("\n\t\t\t\tSELECT lc_id, lc_up_id, lc_time, lc_log, lcd_data_int\n\t\t\t\tFROM log_crew\n\t\t\t\t\tJOIN users_players ON lc_a_up_id = up_id AND up_u_id = " . page_min_side::$active_user->id . "\n\t\t\t\t\tLEFT JOIN log_crew_data ON lcd_lc_id = lc_id AND lcd_lce_id = 5\n\t\t\t\tWHERE lc_lca_id = {$lca_id} AND (lcd_data_int IS NULL OR lcd_data_int = 0)\n\t\t\t\tORDER BY lc_time DESC"); $data = array(); while ($row = $result->fetch()) { $data[$row['lc_id']] = $row; } // sett opp data $data = crewlog::load_summary_data($data); echo ' <div class="bg1_c ' . (count($data) == 0 ? 'xsmall' : 'medium') . '"> <h1 class="bg1">Tidligere advarsler<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">'; if (count($data) == 0) { echo ' <p>Brukeren har ingen tidligere advarsler.</p>'; } else { ess::$b->page->add_css(' .advarsel { border: 1px solid #292929; margin: 10px 0; padding: 0 10px }'); foreach ($data as $row) { $priority = $row['data']['priority'] == 1 ? "lav" : ($row['data']['priority'] == 2 ? "moderat" : "høy"); echo ' <div class="advarsel"> <p><b>' . ess::$b->date->get($row['lc_time'])->format() . '</b>: ' . $row['data']['type'] . ' (alvorlighet: <b>' . $priority . '</b>):</p> <ul> <li>' . game::format_data($row['lc_log']) . '</li> <li>Internt notat: ' . game::format_data($row['data']['note']) . '</li> </ul> <p>' . (empty($row['data']['notified']) ? 'Ble IKKE varslet.' : 'Ble varslet.') . ' Av <user id="' . $row['lc_up_id'] . '" /></p> </div>'; } echo ' <p class="c">' . $pagei->pagenumbers() . '</p>'; } echo ' </div> </div>'; } elseif ($subpage2 == "enote") { ess::$b->page->add_title("Endre notat for bruker"); // lagre endringer? if (isset($_POST['notat'])) { $notat = postval("notat"); if ($notat == page_min_side::$active_user->data['u_note_crew']) { ess::$b->page->add_message("Ingen endringer ble utført.", "error"); } else { \Kofradia\DB::get()->exec("UPDATE users SET u_note_crew = " . \Kofradia\DB::quote($notat) . " WHERE u_id = " . page_min_side::$active_user->id); // legg til crewlogg crewlog::log("user_note_crew", page_min_side::$active_player->id, NULL, array("note_old" => page_min_side::$active_user->data['u_note_crew'], "note_diff" => diff::make(page_min_side::$active_user->data['u_note_crew'], $notat))); ess::$b->page->add_message("Notatet ble endret."); redirect::handle(); } } echo ' <div class="bg1_c" style="width: 400px"> <h1 class="bg1">Endre crewnotat for bruker<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <form action="" method="post"> <p>Dette endrer notatet som er tilknyttet brukeren. Du kan også tilknytte <a href="' . htmlspecialchars(page_min_side::addr(NULL, "b=enote", "player")) . '">informasjon til spilleren</a>, hvis det heller er ønskelig.</p> <p>Notat:</p> <p><textarea name="notat" rows="10" cols="30" style="width: 98%">' . htmlspecialchars(page_min_side::$active_user->data['u_note_crew']) . '</textarea></p> <p class="c">' . show_sbutton("Lagre") . '</p> </form> </div> </div>'; } elseif ($subpage2 == "level" && access::has("admin")) { // nivåer man kan bytte til static $levels = array(1 => "Vanlig bruker", 14 => "Skjult nostat (crewtilgang)", -4 => "Ressurs", 12 => "Ressurs (nostat)", 13 => "Utvikler", 4 => "Forummoderator", 6 => "Forummoderator (nostat)", 5 => "Moderator", 11 => "Seniormoderator"); if (access::has("sadmin")) { $levels[7] = "Administrator"; } if (access::has("sadmin")) { $levels[8] = "Superadministrator"; } // kan vi ikke endre brukernivået til denne brukeren? if (!isset($levels[page_min_side::$active_user->data['u_access_level']])) { ess::$b->page->add_message("Du har ikke rettigheter til å endre tilgangsnivået til denne brukeren.", "error"); redirect::handle(page_min_side::addr()); } // endre brukernivå? if (isset($_POST['level'])) { $level = intval($_POST['level']); $log = trim(postval("log")); // samme brukernivå? if ($level == page_min_side::$active_user->data['u_access_level']) { ess::$b->page->add_message("Du må velge et nytt tilgangsnivå.", "error"); } elseif (!isset($levels[$level])) { ess::$b->page->add_message("Ugyldig tilgangsnivå."); } elseif (empty($log)) { ess::$b->page->add_message("Mangler begrunnelse."); } else { // endre tilgangsnivå $old = page_min_side::$active_user->data['u_access_level']; if (page_min_side::$active_user->change_level($level, isset($_POST['no_update_up']))) { // e-post logg sysreport::log("Endring av tilgangsnivå: " . login::$user->player->data['up_name'] . " endret tilgangsnivået til " . page_min_side::$active_user->data['u_email'] . " (" . page_min_side::$active_player->data['up_name'] . ") fra {$levels[$old]} til {$levels[$level]} {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id . "\n\nBegrunnelse: " . strip_tags(game::format_data($log)), "Kofradia: Endring av tilgangsnivå for " . page_min_side::$active_user->data['u_email'] . " (" . page_min_side::$active_player->data['up_name'] . ")"); // finn totalt beløp spilleren har $result = \Kofradia\DB::get()->query("SELECT up_cash + up_bank FROM users_players WHERE up_id = " . page_min_side::$active_player->id); $money = $result->fetchColumn(0); // crewlogg $data = array("level_old" => $old, "level_old_text" => $levels[$old], "level_new" => $level, "level_new_text" => $levels[$level], "money" => $money, "points" => page_min_side::$active_player->data['up_points']); if (page_min_side::$active_player->active && !isset($_POST['no_update_up'])) { $data['up_id'] = page_min_side::$active_player->id; } crewlog::log("user_level", page_min_side::$active_player->id, $log, $data); putlog("CREWCHAN", "%bEndring av tilgangsnivå%b: " . login::$user->player->data['up_name'] . " endret tilgangsnivået til " . page_min_side::$active_user->data['u_email'] . " (" . page_min_side::$active_player->data['up_name'] . ") fra {$levels[$old]} til {$levels[$level]} {$__server['path']}/min_side?u_id=" . page_min_side::$active_user->id); ess::$b->page->add_message('Tilgangsnivået ble endret fra <b>' . htmlspecialchars($levels[$old]) . '</b> til <b>' . htmlspecialchars($levels[$level]) . '</b>.'); } else { ess::$b->page->add_message("Tilgangsnivået kunne ikke endres.", "error"); } redirect::handle(); } } echo ' <div class="bg1_c" style="width: 350px"> <h1 class="bg1">Endre tilgangsnivå for bruker<span class="left2"></span><span class="right2"></span></h1> <div class="bg1">' . (page_min_side::$active_player->active ? ' <p>Dette vil automatisk berøre spilleren ' . page_min_side::$active_player->profile_link() . '.<p>' : ' <p>Dette vil kun ha innvirkning på brukeren, siden det ikke er noen aktiv spiller.</p>') . ' <form action="" method="post"> <dl class="dd_right"> <dt>Nåværende tilgangsnivå</dt> <dd>' . $levels[page_min_side::$active_user->data['u_access_level']] . '</dd> <dt>Nytt tilgangsnivå</dt> <dd> <select name="level">'; $level = intval(postval("level", page_min_side::$active_user->data['u_access_level'])); foreach ($levels as $id => $name) { echo ' <option value="' . $id . '"' . ($level == $id ? ' selected="selected"' : '') . '>' . htmlspecialchars($name) . '</option>'; } echo ' </select> </dd> <dt>Begrunnelse</dt> <dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd> </dl>' . (page_min_side::$active_player->active ? ' <p><input type="checkbox" id="no_update_up" name="no_update_up"' . (isset($_POST['no_update_up']) ? ' checked="checked"' : '') . ' /><label for="no_update_up"> Ikke oppdater det visuelle tilgangsnivået til ' . page_min_side::$active_player->profile_link() . '</label></p>' : '') . ' <p class="c">' . show_sbutton("Endre tilgangsnivå") . '</p> </form> </div> </div>'; } elseif ($subpage2 == "banka" && access::has("mod")) { // lagre nytt passord if (isset($_POST['bank_auth'])) { $bank_auth = postval("bank_auth"); $log = trim(postval("log")); // for kort? if (mb_strlen($bank_auth) < 6) { ess::$b->page->add_message("Passordet må inneholde minst 6 tegn.", "error"); } elseif (password::verify_hash($bank_auth, page_min_side::$active_user->data['u_bank_auth'], 'bank_auth')) { ess::$b->page->add_message("Passordet er det samme som nåværende.", "error"); } elseif ($log == "") { ess::$b->page->add_message("Mangler begrunnelse.", "error"); } else { $newpass = password::hash($bank_auth, null, 'bank_auth'); \Kofradia\DB::get()->exec("UPDATE users SET u_bank_auth = " . \Kofradia\DB::quote($newpass) . " WHERE u_id = " . page_min_side::$active_user->id); // crewlogg crewlog::log("user_bank_auth", page_min_side::$active_player->id, $log, array("pass_old" => page_min_side::$active_user->data['u_bank_auth'], "pass_new" => $newpass)); ess::$b->page->add_message("Bankpassordet ble endret."); redirect::handle(); } } ess::$b->page->add_title("Endre bankpassord"); echo ' <div class="bg1_c" style="width: 350px"> <h1 class="bg1">Endre bankpassord<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <form action="" method="post" autocomplete="off"> <dl class="dd_right"> <dt>Nytt bankpassord</dt> <dd><input type="password" id="bank_auth" class="styled w120" /></dd> <dt>Begrunnelse for endring</dt> <dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd> </dl> <p class="c">' . show_sbutton("Lagre") . '</p> </form> </div> </div>'; } elseif ($subpage2 == "phone" && access::has("mod")) { // lagre nytt nummer? if (isset($_POST['phone'])) { $phone = postval("phone"); $log = trim(postval("log")); if (!preg_match("/^47\\d{8}\$/Du", $phone) && $phone != "") { ess::$b->page->add_message("Ugyldig telefonnummer. Må bestå av 10 tall inkludert 47 først.", "error"); } else { // kontroller at nummeret ikke er lagt inn fra før $result = \Kofradia\DB::get()->query("SELECT u_id, u_email, up_id, up_name, up_access_level FROM users, users_players WHERE u_phone = " . \Kofradia\DB::quote($phone) . " AND u_id != " . page_min_side::$active_user->id . " AND up_id = u_active_up_id LIMIT 1"); if ($result->rowCount() > 0) { $row = $result->fetch(); ess::$b->page->add_message('Nummeret er allerede i bruk av <a href="min_side?u_id=' . $row['u_id'] . '">' . htmlspecialchars($row['u_email']) . '</a> (' . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . ').', "error"); } elseif ($phone == page_min_side::$active_user->data['u_phone']) { ess::$b->page->add_message("Nummeret er det samme som nåværende nummer.", "error"); } elseif ($log == "") { ess::$b->page->add_message("Mangler logg melding."); } else { // lagre nytt nummer \Kofradia\DB::get()->exec("UPDATE users SET u_phone = " . \Kofradia\DB::quote($phone) . " WHERE u_id = " . page_min_side::$active_user->id); crewlog::log("user_phone", page_min_side::$active_player->id, $log, array("phone_old" => page_min_side::$active_user->data['u_phone'], "phone_new" => $phone)); ess::$b->page->add_message('Mobilnummeret ble endret fra <b>' . (empty(page_min_side::$active_user->data['u_phone']) ? 'tomt' : htmlspecialchars(page_min_side::$active_user->data['u_phone'])) . '</b> til <b>' . (empty($phone) ? 'tomt' : $phone) . '</b>.'); } } } ess::$b->page->add_title("Endre mobilnummer"); echo ' <div class="bg1_c" style="width: 350px"> <h1 class="bg1">Endre mobilnummer<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Her endrer du mobilnummeret til brukeren. Dette kan bli brukt til å sende ut forskjellig informasjon.</p> <form action="" method="post"> <dl class="dd_right dl_2x"> <dt>Nåværende nummer</dt> <dd>' . (empty(page_min_side::$active_user->data['u_phone']) ? 'Tomt' : htmlspecialchars(page_min_side::$active_user->data['u_phone'])) . '</dd> <dt>Nytt nummer</dt> <dd><input type="text" maxlength="10" value="' . htmlspecialchars(postval("phone", page_min_side::$active_user->data['u_phone'])) . '" name="phone" class="styled w80" /></dd> <dt>Begrunnelse for endring</dt> <dd><textarea name="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd> </dl> <p class="c">' . show_sbutton("Lagre") . '</p> </form> </div> </div>'; } elseif ($subpage2 == "birth" && access::has("mod")) { // lagre ny fødselsdato? if (isset($_POST['birth_day']) && isset($_POST['birth_month']) && isset($_POST['birth_year'])) { $birth = postval("birth"); // sjekk fødselsdato $birth_day = intval(postval("birth_day")); $birth_month = intval(postval("birth_month")); $birth_year = intval(postval("birth_year")); $date = ess::$b->date->get(); $n_day = $date->format("j"); $n_month = $date->format("n"); $n_year = $date->format("Y"); $age = $n_year - $birth_year - ($n_month < $birth_month || $birth_month == $n_month && $n_day < $birth_day ? 1 : 0); $birth = $birth_year . "-" . str_pad($birth_month, 2, "0", STR_PAD_LEFT) . "-" . str_pad($birth_day, 2, "0", STR_PAD_LEFT); // sjekk om fødselsdatoen er gyldig $birth_date = ess::$b->date->get(); $birth_date->setDate($birth_year, $birth_month, $birth_day); $birth_valid = $birth_date->format("Y-m-d") == $birth; $log = trim(postval("log")); // ugyldig dag? if ($birth_day < 0 || $birth_day > 31) { ess::$b->page->add_message("Du må velge en gyldig dag.", "error"); } elseif ($birth_month < 0 || $birth_month > 12) { ess::$b->page->add_message("Du må velge en gyldig måned.", "error"); } elseif (($birth_year < 1900 || $birth_year > $n_year) && $birth_year !== 0) { ess::$b->page->add_message("Du må velge et gyldig år.", "error"); } elseif (!$birth_valid && $birth !== '0-00-00') { ess::$b->page->add_message("Datoen du fylte inn for fødselsdatoen din eksisterer ikke."); } elseif ($birth == page_min_side::$active_user->data['u_birth']) { ess::$b->page->add_message("Fødselsdatoen ble ikke endret.", "error"); } elseif ($log == "") { ess::$b->page->add_message("Mangler begrunnelse.", "error"); } else { // oppdater \Kofradia\DB::get()->exec("UPDATE users SET u_birth = " . \Kofradia\DB::quote($birth) . " WHERE u_id = " . page_min_side::$active_user->id); // legg til crewlogg crewlog::log("user_birth", page_min_side::$active_player->id, $log, array("birth_old" => page_min_side::$active_user->data['u_birth'], "birth_new" => $birth)); // alder if ($age < 13) { ess::$b->page->add_message("Fødselsdatoen ble satt til <b>{$birth}</b> ({$age} år). Brukeren oppfyller <u>ikke</u> kravet om alder jf. betingelsene."); } else { ess::$b->page->add_message("Fødselsdatoen ble satt til <b>{$birth}</b> ({$age} år)."); } redirect::handle(); } } $birth = explode("-", page_min_side::$active_user->data['u_birth']); $birth_day = isset($birth[2]) ? intval($birth[2]) : 0; $birth_month = isset($birth[1]) ? intval($birth[1]) : 0; $birth_year = isset($birth[0]) ? intval($birth[0]) : 0; ess::$b->page->add_title("Endre fødselsdato"); echo ' <div class="bg1_c" style="width: 350px"> <h1 class="bg1">Endre fødselsdato<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <form action="" method="post"> <dl class="dd_right dl_2x"> <dt>Nåværende fødselsdato</dt> <dd>' . (empty(page_min_side::$active_user->data['u_birth']) ? 'Ikke registrert' : htmlspecialchars(page_min_side::$active_user->data['u_birth'])) . '</dd> <dt>Ny fødselsdato</dt> <dd> <select name="birth_day"> <option value="">Dag</option> <option value="0">0</option>'; $active = postval("birth_day", $birth_day); for ($i = 1; $i <= 31; $i++) { echo ' <option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . $i . '</option>'; } echo ' </select> <select name="birth_month"> <option value="">Måned</option> <option value="0">Tom</option>'; $active = postval("birth_month", $birth_month); for ($i = 1; $i <= 12; $i++) { echo ' <option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . ucfirst($_lang['months'][$i]) . '</option>'; } echo ' </select> <select name="birth_year"> <option value="">År</option> <option value="0">0000</option>'; $active = postval("birth_year", $birth_year); for ($i = ess::$b->date->get()->format("Y"); $i >= 1900; $i--) { echo ' <option value="' . $i . '"' . ($i == $active ? ' selected="selected"' : '') . '>' . $i . '</option>'; } echo ' </select> </dd> <dt>Begrunnelse for endring</dt> <dd><textarea name="log" id="log" cols="30" rows="5">' . htmlspecialchars(postval("log")) . '</textarea></dd> </dl> <p class="c">' . show_sbutton("Lagre") . '</p> </form> </div> </div>'; } }
/** * Fjern en blokkering */ public static function delete($ub_id) { $ub_id = (int) $ub_id; // hent nåværende informasjon $res = self::get_info($ub_id); // forsøk å sett tidspunktet til nå $aff = \Kofradia\DB::get()->exec("UPDATE users_ban SET ub_time_expire = " . time() . " WHERE ub_id = {$ub_id} AND ub_time_expire > " . time()); if ($res && $aff > 0) { global $_game; // finn korrekt spiller $result = \Kofradia\DB::get()->query("SELECT up_id FROM users JOIN users_players ON u_active_up_id = up_id WHERE u_id = {$res['ub_u_id']}"); $up_id = $result->fetchColumn(0); player::add_log_static("blokkering", "3", $res['ub_type'], $up_id); } return $aff; }
/** * Endre posisjon * @param int $priority hvilken posisjon * @param int $parent underordnet hvem * @param bool $anonymous anonym handling (med tanke på loggen til brukeren) */ public function change_priority($priority, $parent = NULL, $anonymous = false) { if (!$anonymous && !login::$logged_in) { throw new HSNotLoggedIn(); } global $_game; $priority = (int) $priority; $parent = (int) $parent; $action_player = $anonymous ? 0 : login::$user->player->id; $sell = $anonymous == "sell"; $old_priority = $this->data['ffm_priority']; $old_parent = $this->data['ffm_parent_up_id']; // ikke medlem? if ($this->status != self::STATUS_MEMBER || $this->crew) { throw new HSException("Brukeren er ikke medlem av FF."); } // ikke gyldig posisjon? if (!isset($this->ff->type['priority'][$priority])) { throw new HSException("Ugyldig posisjon."); } // kan ikke ha parent? if (!empty($parent) && $priority != 4) { throw new HSException("Kun soldiers kan ha parent."); } // ugyldig parent? if ($parent == $this->id) { throw new HSException("Du kan ikke sette brukeren som parent av seg selv."); } // ingenting endret if ($priority == $this->data['ffm_priority'] && $parent == $this->data['ffm_parent_up_id']) { return false; } // sjekk om brukeren er involvert i salg av FF if (!$sell) { $this->sell_remove(); } // flytt medlemmet \Kofradia\DB::get()->exec("UPDATE ff_members SET ffm_priority = {$priority}, ffm_parent_up_id = {$parent} WHERE ffm_ff_id = {$this->ff->id} AND ffm_up_id = {$this->id}"); // kun endret overordnet? if ($priority == $this->data['ffm_priority']) { // brukerlogg $info = $this->ff->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$this->data['ffm_parent_up_id']}:{$parent}"; player::add_log_static("ff_member_parent", $info, $action_player, $this->id); // FF-logg $this->ff->add_log("member_parent", "{$action_player}:{$this->id}:{$this->data['ffm_parent_up_id']}:{$parent}"); } elseif (!$sell) { // brukerlogg $info = $this->ff->id . ":" . urlencode($this->ff->data['ff_name']) . ":" . urlencode($this->ff->type['priority'][$this->data['ffm_priority']]) . ":" . urlencode($this->ff->type['priority'][$priority]) . ":{$this->data['ffm_parent_up_id']}:{$parent}"; player::add_log_static("ff_member_priority", $info, $action_player, $this->id); // FF-logg $this->ff->add_log("member_priority", "{$action_player}:{$this->id}:" . urlencode($this->ff->type['priority'][$this->data['ffm_priority']]) . ":" . urlencode($this->ff->type['priority'][$priority]) . ":{$this->data['ffm_parent_up_id']}:{$parent}"); } // var capo før? if ($this->data['ffm_priority'] == 3 && $priority != 3) { $this->leave_capo_priority(); } // reattach $this->data['ffm_priority'] = $priority; $this->data['ffm_parent_up_id'] = $parent; $this->reattach(); // trigger player::get($this->id)->trigger("ff_priority_change", array("ff" => $this->ff, "member" => $this, "priority_old" => $old_priority, "parent_old" => $old_parent, "up_id" => $action_player)); return true; }
/** * Kaste ut en spiller */ protected function kick_handle() { // valider sid validate_sid(); // kan vi ikke kaste ut noen spillere nå? if (login::$user->player->fengsel_check() || login::$user->player->bomberom_check() || login::$user->player->data['up_b_id'] != $this->ff->data['br_b_id'] || !$this->kick_hour_ok) { redirect::handle(); } // mangler spillervalg? if (!isset($_POST['player'])) { ess::$b->page->add_message("Du må velge en spiller du vil kaste ut.", "error"); redirect::handle(); } // er ikke spilleren i bomberommet? $up_id = (int) $_POST['player']; $result = \Kofradia\DB::get()->query("\n\t\t\tSELECT u_email, up_id, up_name, up_access_level, up_brom_expire\n\t\t\tFROM users_players JOIN users ON up_u_id = u_id\n\t\t\tWHERE up_id = {$up_id} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire > " . time() . " AND up_access_level != 0"); $cost = $this->fam ? self::KICK_PLAYER_COST_FAMILIE : self::KICK_PLAYER_COST; $up = $result->fetch(); if (!$up) { ess::$b->page->add_message("Fant ikke spilleren.", "error"); redirect::handle(); } // sett opp skjema $form = \Kofradia\Form::getByDomain("other", login::$user); // har vi bekreftet ønsket om å kaste ut en spiller? if (isset($_POST['confirm']) && $form->validateHashOrAlert(null, "Kast ut spiller fra bomberom")) { \Kofradia\DB::get()->beginTransaction(); // forsøk å trekk fra pengene if (!$this->ff->bank(ff::BANK_BETALING, $cost, "Kaste ut spilleren [user id={$up['up_id']}] fra bomberommet")) { ess::$b->page->add_message("Det er ikke nok penger i " . ($this->fam ? "broderskapbanken" : "firmabanken") . ".", "error"); \Kofradia\DB::get()->commit(); } else { // finn en tilfeldig bydel å plassere spilleren $result = \Kofradia\DB::get()->query("SELECT id, name FROM bydeler WHERE active != 0 ORDER BY RAND() LIMIT 1"); $b_id = $result->fetchColumn(0); // forsøk å trekk ut spilleren fra bomberommet $a = \Kofradia\DB::get()->exec("\n\t\t\t\t\tUPDATE users_players\n\t\t\t\t\tSET up_brom_expire = 0, up_b_id = {$b_id}\n\t\t\t\t\tWHERE up_id = {$up['up_id']} AND up_brom_ff_id = {$this->ff->id} AND up_brom_expire = {$up['up_brom_expire']} AND up_access_level != 0"); // feilet? if ($a == 0) { // avbryt transaksjon \Kofradia\DB::get()->rollback(); ess::$b->page->add_message("Kunne ikke kaste ut spilleren fra bomberommet.", "error"); } else { // legg til hendelse hos spilleren player::add_log_static("bomberom_kicked", login::$user->player->id . ":" . urlencode($this->ff->data['ff_name']) . ":{$up['up_brom_expire']}", $this->ff->id, $up['up_id']); // send e-post til spilleren $email = new email(); $email->text = 'Hei, Din spiller ble kastet ut fra bomberommet av ' . ($this->fam ? 'broderskapet' : 'firmaet') . ' som styrer bomberommet. -- www.kofradia.no'; $email->send($up['u_email'], "Kastet ut av bomberom"); // firmalogg $this->ff->add_log("bomberom_kick", login::$user->player->id . ":{$up['up_id']}:{$up['up_brom_expire']}"); // logg putlog("DF", "BOMBEROM: {$up['up_name']} ble kastet ut av bomberommet {$this->ff->data['ff_name']} av " . login::$user->player->data['up_name'] . " " . ess::$s['spath'] . "/min_side?up_id={$up['up_id']}"); ess::$b->page->add_message('Du kastet ut <user id="' . $up['up_id'] . '" /> fra bomberommet. ' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' betalte et gebyr på ' . game::format_cash($cost) . '.'); \Kofradia\DB::get()->commit(); redirect::handle(); } } } ess::$b->page->add_title("Kaste ut spiller"); // vis informasjon echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Kaste ut spiller fra bomberommet<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Du er i ferd med å kaste ut ' . game::profile_link($up['up_id'], $up['up_name'], $up['up_access_level']) . ' fra bomberommet.</p> <p>Spilleren skal i utgangspunktet sitte i bomberommet til ' . ess::$b->date->get($up['up_brom_expire'])->format(date::FORMAT_SEC) . ' (' . game::counter($up['up_brom_expire'] - time()) . ' gjenstår).</p> <p>For å kaste ut spilleren må det betales en avgift på <b>' . game::format_cash($cost) . '</b> som betales fra ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '.</p>'; // har vi ikke nok penger i firmakontoen? if ($this->ff->data['ff_bank'] < $cost) { echo ' <p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket kun ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto, noe som ikke er nok. ' . ($this->ff->access(1) ? '<a href="' . ess::$s['relative_path'] . '/ff/banken?ff_id=' . $this->ff->id . '">Sett inn penger på ' . ($this->fam ? 'broderskapkontoen' : 'firmakontoen') . '</a>' : '<a href="' . ess::$s['relative_path'] . '/ff/panel?ff_id=' . $this->ff->id . '">Donér til ' . ($this->fam ? 'broderskapet' : 'firmaet') . '</a>') . ' først for å kunne kaste ut spilleren.</p> <p class="c"><a href="bomberom?ff_id=' . $this->ff->id . '">Tilbake</a></p>'; } else { echo ' <p>' . ($this->fam ? 'Broderskapet' : 'Firmaet') . ' har for øyeblikket ' . game::format_cash($this->ff->data['ff_bank']) . ' på konto.</p> <form action="" method="post"> ' . $form->getHTMLInput() . ' <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="player" value="' . $up['up_id'] . '" /> <input type="hidden" name="kick" /> <p class="c">' . show_sbutton("Bekreft, kast ut spilleren", 'name="confirm"') . ' <a href="bomberom?ff_id=' . $this->ff->id . '">Avbryt</a></p> </form>'; } echo ' </div> </div>'; $this->ff->load_page(); }
} $w =& weapon::$weapons[$row['up_weapon_id']]; // fjern fra evt. auksjoner auksjon::player_release(null, $row['up_id'], auksjon::TYPE_KULER); // skal vi nedgradere våpenet? // man vil aldri miste våpen, det blir alltid nedgradert til dårligste våpen // beholder resten av koden i tilfelle vi ønsker å gjøre forandringer igjen if ($row['up_weapon_id'] > 1) { $new_id = $row['up_weapon_id'] - 1; $new_w =& weapon::$weapons[$new_id]; $training = weapon::DOWNGRADE_TRAINING; // sett til 50 % på forrige våpen $a = \Kofradia\DB::get()->exec("\n\t\t\tUPDATE users_players\n\t\t\tSET up_weapon_id = {$new_id}, up_weapon_bullets = 0, up_weapon_training = {$training}\n\t\t\tWHERE up_id = {$row['up_id']} AND up_weapon_id = {$row['up_weapon_id']}"); if ($a > 0) { // gi hendelse player::add_log_static("weapon_lost", $row['up_weapon_id'] . ":" . urlencode($w['name']) . ":" . urlencode($row['up_weapon_bullets']) . ":" . urlencode($new_w['name']) . ":" . $training, 1, $row['up_id']); // logg putlog("LOG", "NEDGRADERT VÅPEN: {$row['up_name']} mistet våpenet {$w['name']} med {$row['up_weapon_bullets']} kuler grunnet lav våpentrening. Fikk i stedet våpenet {$new_w['name']}."); } } else { // gi hendelse player::add_log_static("weapon_lost", $row['up_weapon_id'] . ":" . urlencode($w['name']) . ":" . urlencode($row['up_weapon_bullets']), 0, $row['up_id']); // logg putlog("LOG", "MISTET VÅPEN: {$row['up_name']} mistet våpenet {$w['name']} med {$row['up_weapon_bullets']} kuler grunnet lav våpentrening."); } } unset($w); if ($result->rowCount() > 0) { // fjern våpnene fra de som skal miste det \Kofradia\DB::get()->exec("\n\t\tUPDATE users_players\n\t\tSET up_weapon_id = NULL, up_weapon_bullets = 0\n\t\tWHERE up_weapon_training < 0.25 AND up_weapon_id > 1 AND up_access_level != 0"); }
<?php /* * Scriptet fjerner garasjer og biler hos de som ikke har betalt leie innen fristen */ // hent garasjene som skal fjernes $result = \Kofradia\DB::get()->query("\n\tSELECT ugg_up_id, ugg_b_id, COUNT(id) count_ug, up_access_level\n\tFROM users_garage\n\t\tLEFT JOIN users_gta ON ug_up_id = ugg_up_id AND b_id = ugg_b_id\n\t\tJOIN users_players ON ugg_up_id = up_id\n\tWHERE ugg_time_next_rent <= " . time() . "\n\tGROUP BY ugg_id"); while ($row = $result->fetch()) { $bydel = game::$bydeler[$row['ugg_b_id']]['name']; // lagre logg hvis spilleren fremdeles er i live if ($row['up_access_level'] != 0) { player::add_log_static("garage_lost", urlencode($bydel), $row['count_ug'], $row['ugg_up_id']); } // slett garasjen \Kofradia\DB::get()->exec("DELETE FROM users_garage WHERE ugg_up_id = {$row['ugg_up_id']} AND ugg_b_id = {$row['ugg_b_id']}"); // slett evt. biler \Kofradia\DB::get()->exec("DELETE FROM users_gta WHERE ug_up_id = {$row['ugg_up_id']} AND b_id = {$row['ugg_b_id']}"); }
/** * 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; }
/** * Sette dusør på en spiller */ protected function show_add_player() { ess::$b->page->add_title("Sett dusør"); echo ' <div class="bg1_c xxsmall"> <h1 class="bg1">Etterlyst - sett dusør<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"><boxes />'; // har vi valgt en spiller? $player = false; if (isset($_GET['up_id']) || isset($_POST['up_id']) || isset($_POST['up_name'])) { $by_id = isset($_GET['up_id']) ? (int) $_GET['up_id'] : (isset($_POST['up_id']) ? (int) $_POST['up_id'] : false); // finn spilleren $search = ""; if ($by_id !== false) { $search = "up_id = {$by_id}"; } else { $search = "up_name = " . \Kofradia\DB::quote($_POST['up_name']) . " ORDER BY up_access_level = 0, up_last_online DESC LIMIT 1"; } $result = \Kofradia\DB::get()->query("SELECT up_id, up_name, up_access_level FROM users_players WHERE {$search}"); $player = $result->fetch(); // fant ikke? if (!$player) { ess::$b->page->add_message("Fant ikke spilleren.", "error"); if ($by_id !== false) { redirect::handle("etterlyst?add"); } } // død spiller? if ($player && $player['up_access_level'] == 0) { ess::$b->page->add_message('Spilleren <user id="' . $player['up_id'] . '" /> er død og kan ikke etterlyses.', "error"); if ($by_id !== false) { redirect::handle("etterlyst?add"); } $player = false; } // seg selv? if ($player && $player['up_id'] == $this->up->id) { ess::$b->page->add_message("Du kan ikke sette dusør på deg selv.", "error"); if ($by_id !== false) { redirect::handle("etterlyst?add"); } $player = false; } // nostat? if ($player['up_access_level'] >= ess::$g['access_noplay'] && !access::is_nostat()) { ess::$b->page->add_message("Du kan ikke sette dusør på en nostat.", "error"); if ($by_id !== false) { redirect::handle("etterlyst?add"); } $player = false; } // er nostat og prøver å sette dusør på en spiller som ikke er nostat? if (access::is_nostat() && $player['up_access_level'] < ess::$g['access_noplay'] && !access::has("sadmin")) { ess::$b->page->add_message("Du er nostat og kan ikke sette dusør på en vanlig spiller.", "error"); if ($by_id !== false) { redirect::handle("etterlyst?add"); } $player = false; } } // bestemme dusør? if ($player) { // hent eventuelle aktive dusører på spilleren $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT SUM(hl_amount_valid) AS sum_hl_amount_valid\n\t\t\t\tFROM hitlist\n\t\t\t\tWHERE hl_up_id = {$player['up_id']}"); $a = $result->fetchColumn(0); // må vi vente? $wait = false; if ($a == 0 && !access::has("admin")) { // sjekk når siste hitlist ble utført $last = $this->up->params->get("hitlist_last_new", false); if ($last && $last + etterlyst::WAIT_TIME > time()) { $wait = $last + etterlyst::WAIT_TIME - time(); } } // legge til dusøren? if (isset($_POST['amount']) && !$wait) { $amount = game::intval($_POST['amount']); // høy nok dusør? if ($amount < etterlyst::MIN_AMOUNT_SET) { ess::$b->page->add_message("Dusøren må være på minimum " . game::format_cash(etterlyst::MIN_AMOUNT_SET) . ".", "error"); } else { \Kofradia\DB::get()->beginTransaction(); // forsøk å trekk fra pengene $a = \Kofradia\DB::get()->exec("UPDATE users_players SET up_cash = up_cash - {$amount} WHERE up_id = " . $this->up->id . " AND up_cash >= {$amount}"); if ($a == 0) { ess::$b->page->add_message("Du har ikke nok penger på hånda.", "error"); } else { // vellykket \Kofradia\DB::get()->exec("INSERT INTO hitlist SET hl_up_id = {$player['up_id']}, hl_by_up_id = " . $this->up->id . ", hl_time = " . time() . ", hl_amount = {$amount}, hl_amount_valid = {$amount}"); \Kofradia\DB::get()->commit(); // legg til i loggen til spilleren player::add_log_static("etterlyst_add", NULL, $amount, $player['up_id']); putlog("LOG", "ETTERLYST: " . $this->up->data['up_name'] . " la til dusør for UP_ID={$player['up_id']} på " . game::format_cash($amount) . '.'); putlog("INFO", "ETTERLYST: En spiller la til en dusør for {$player['up_name']} på " . game::format_cash($amount) . " " . ess::$s['path'] . "/etterlyst"); ess::$b->page->add_message('Du la til ' . game::format_cash($amount) . ' som dusør for spilleren <user id="' . $player['up_id'] . '" />.'); $this->up->params->update("hitlist_last_new", time(), true); redirect::handle("etterlyst"); } \Kofradia\DB::get()->commit(); } } ess::$b->page->add_js_domready('$("select_amount").focus();'); echo ' <p>Valgt spiller: <user id="' . $player['up_id'] . '" /></p> <form action="" method="post"> <input type="hidden" name="up_id" value="' . $player['up_id'] . '" />' . (!$a ? ' <p>Denne spilleren har ingen dusør tilnyttet seg fra før.</p>' : ' <p>Denne spilleren har allerede en dusør på ' . game::format_cash($a) . '.</p>') . ($wait ? ' <p class="error_box">Du må vente ' . game::counter($wait) . ' før du kan plassere en ny spiller på listen.</p> <p class="c"><a href="etterlyst">Avbryt</a></p>' : ' <dl class="dd_right"> <dt>' . (!$a ? 'Dusør' : 'Øk dusøren med') . '</dt> <dd><input type="text" name="amount" id="select_amount" value="' . htmlspecialchars(postval("amount")) . '" class="styled w100" /></dd> </dl> <p class="c">' . show_sbutton($a ? "Øk dusøren" : "Legg til dusør") . '</p> <p class="c"><a href="etterlyst">Avbryt</a> - <a href="etterlyst?add">Velg en annen spiller</a></p> <p>Hvis du velger å fjerne dusøren etter du har lagt den til, får du kun 50 % igjen. Hvis noen kjøper ut dusøren får du igjen 50 % av den.</p>') . ' </form>'; } else { ess::$b->page->add_js_domready('$("select_up_name").focus();'); echo ' <p>Du må først velge hvilken spiller du ønsker å legge til dusør på.</p> <form action="" method="post"> <dl class="dd_right"> <dt>Spiller</dt> <dd><input type="text" name="up_name" id="select_up_name" value="' . htmlspecialchars(postval("up_name")) . '" class="styled w120" /></dd> </dl> <p class="c">' . show_sbutton("Finn spiller") . '</p> <p class="c"><a href="etterlyst">Avbryt</a></p> </form>'; } echo ' </div> </div>'; }
/** Forsøk å legg til ny melding i henvendelsen */ protected function handle_reply() { // sjekk for blokkering $blokkering = blokkeringer::check(blokkeringer::TYPE_SUPPORT); if ($blokkering) { ess::$b->page->add_message("Du er blokkert fra å sende inn henvendelser til support. Blokkeringen varer til " . ess::$b->date->get($blokkering['ub_time_expire'])->format(date::FORMAT_SEC) . ".<br /><b>Begrunnelse:</b> " . game::format_data($blokkering['ub_reason'], "bb-opt", "Ingen begrunnelse gitt."), "error"); return; } $text = trim(postval("text")); // tom tekst? if (empty($text)) { ess::$b->page->add_message("Du må fylle inn en melding.", "error"); return; } // sjekk for ventetid if (!access::has("crewet")) { // hvor lenge er det siden forrige melding ble lagt til? $result = \Kofradia\DB::get()->query("\n\t\t\t\tSELECT sum_time FROM support_messages, users_players\n\t\t\t\tWHERE up_u_id = " . login::$user->id . " AND sum_up_id = up_id\n\t\t\t\tORDER BY sum_id DESC LIMIT 1"); if ($result->rowCount() > 0) { $last = $result->fetchColumn(0); $wait = max(0, $last + support::$ventetid_reply - time()); if ($wait > 0) { ess::$b->page->add_message('Du må vente ' . game::counter($wait) . ' før du kan legge til nytt svar.', "error"); return; } } } // sjekk om det har blitt lagt til noen nye meldinger siden vi viste siden $result = \Kofradia\DB::get()->query("SELECT sum_id FROM support_messages WHERE sum_su_id = {$this->data['su_id']} ORDER BY sum_time DESC LIMIT 1"); $last_sum = $result->rowCount() > 0 ? $result->fetchColumn(0) : 0; if (!isset($_POST['last_sum']) || $_POST['last_sum'] != $last_sum) { ess::$b->page->add_message("Nytt svar har blitt lagt til siden du viste siden sist. Trykk legg til melding på nytt for å fortsette.", "error"); return; } // legg til meldingen \Kofradia\DB::get()->exec("INSERT INTO support_messages SET sum_su_id = {$this->data['su_id']}, sum_up_id = " . login::$user->player->id . ", sum_time = " . time() . ", sum_text = " . \Kofradia\DB::quote($text)); // endre status? if ($this->own) { $su_solved = 0; } elseif (isset($_POST['solve'])) { $su_solved = 1; } else { $su_solved = 0; } \Kofradia\DB::get()->exec("UPDATE support SET su_solved = {$su_solved} WHERE su_id = {$this->data['su_id']}"); // sende logg til spilleren som henvendelsen tilhører? if (!$this->own) { global $_game; player::add_log_static("support", login::$user->player->id . ":" . $this->data['su_title'], $this->data['su_id'], $this->data['new_up_id']); } // fiks antall nye henvendelser support::update_tasks(); // fjern fra status if (!$this->own) { $this->status_remove(); } if ($this->own) { putlog("CREWCHAN", "%c11%bSUPPORT HENVENDELSE OPPDATERT%b%c: %u" . login::$user->player->data['up_name'] . "%u la til nytt svar i %u{$this->data['su_title']}%u " . ess::$s['spath'] . "/support/?a=show&su_id={$this->data['su_id']}"); } ess::$b->page->add_message("Meldingen ble lagt til."); redirect::handle("?a=show&su_id={$this->data['su_id']}"); }
/** * Sjekk om advarsel er fylt ut */ protected static function advarsel_handle($kategori = null, $note = null) { // ingen advarsel if (empty($_POST['a_active'])) { return true; } $types = crewlog::$user_warning_types; $types_name = crewlog::$user_warning_types_name; if ($kategori) { if (!isset($types_name[$kategori])) { throw new HSException("Ugyldig kategori."); } $type = $types_name[$kategori]; } else { $type = postval("a_type"); if (!isset($types[$type])) { ess::$b->page->add_message("Ugyldig kategori for advarsel.", "error"); return false; } } $log = trim(postval("a_log")); $priority = (int) postval("a_priority"); $notify = isset($_POST['a_notify']); if (empty($log)) { ess::$b->page->add_message("Begrunnelse for advarsel må fylles ut.", "error"); return false; } if ($priority < 1 || $priority > 3) { ess::$b->page->add_message("Ugylig alvorlighet for advarsel.", "error"); return false; } $data = array("type" => $types[$type], "note" => $note, "priority" => $priority); // legge til spillerlogg? if ($notify) { $data['notified'] = 1; $data['notified_id'] = player::add_log_static(gamelog::$items['advarsel'], urlencode($types[$type]) . ':' . urlencode($log), NULL, page_min_side::$active_player->id); ess::$b->page->add_message("Advarselen ble lagret. Brukeren ble informert."); } else { ess::$b->page->add_message("Advarselen ble lagret. Du har ikke informert brukeren om denne advarselen."); } // legg til advarselen crewlog::log("user_warning", page_min_side::$active_player->id, $log, $data); return true; }
/** * Flytt forumtråd * @param \Kofradia\Forum\Topic $topic * @param array $old_data array med data som ble erstattet */ public static function add_topic_moved(Topic $topic, $old_data) { $from = $old_data['fse']->get_name(); $to = $topic->forum->get_name(); // legg til som vanlig logg $location = $topic->forum->id >= 5 && $topic->forum->id <= 7 ? 'CREWCHAN' : 'LOG'; self::putlog($topic->forum, $location, "FORUMTRÅD FLYTTET: '" . \login::$user->player->data['up_name'] . "' flyttet forumtråden med ID {$topic->id} ({$topic->info['ft_title']}) fra {$from} til {$to} " . \ess::$s['path'] . "/forum/topic?id={$topic->id}"); // legg til hendelse if ($topic->info['ft_up_id'] != \login::$user->player->id) { \player::add_log_static("forum_topic_move", "{$topic->id}:" . urlencode($topic->info['ft_title']) . ":" . urlencode($from) . ":" . urlencode($to), null, $topic->info['ft_up_id']); } // TODO: er det nødvendig med crewlogg? }