/** * Vis fengsel */ protected function show() { // er vi i fengsel nå? if ($wait = $this->up->fengsel_wait()) { ess::$b->page->add_js_domready('$("fengsel_dusor").focus();'); echo ' <div class="bg1_c xsmall"> <h1 class="bg1">Du er i fengsel<span class="left"></span><span class="right"></span></h1> <p class="h_right"><a href="node/16">Hjelp</a></p> <div class="bg1"> <p>Du befinner deg for øyeblikket i fengsel og slipper ut om ' . game::counter($wait, true) . '.</p>' . (!$this->up->is_nostat() ? ' <form action="" method="post"> <input type="hidden" name="sid" value="' . login::$info['ses_id'] . '" /> <input type="hidden" name="expire" value="' . $this->up->data['up_fengsel_time'] . '" /> <dl class="dd_right"> <dt>Dusør for å bryte deg ut</dt> <dd><input type="text" class="styled w80" name="amount" id="fengsel_dusor" value="' . game::format_cash($this->up->data['up_fengsel_dusor']) . '" /></dd> </dl> <p class="c">' . show_sbutton($this->up->data['up_fengsel_dusor'] > 0 ? "Endre dusør" : "Sett dusør", 'name="dusor"') . '</p> <p class="c">Spilleren som bryter ut mottar kun ' . self::DUSOR_PROFIT * 100 . ' % av dusøren.</p> </form>' : '') . ' </div> </div>'; } // sortering $sort = new sorts("sort"); $sort->append("asc", "Spiller", "up_name"); $sort->append("desc", "Spiller", "up_name DESC"); $sort->append("asc", "Wanted nivå", "up_wanted_level, up_fengsel_time DESC"); $sort->append("desc", "Wanted nivå", "up_wanted_level DESC, up_fengsel_time DESC"); $sort->append("asc", "Tid igjen", "up_fengsel_time"); $sort->append("desc", "Tid igjen", "up_fengsel_time DESC"); $sort->set_active(requestval("sort"), 5); // hent folk i fengsel $sort_info = $sort->active(); $pagei = new pagei(pagei::ACTIVE_GET, "side", pagei::PER_PAGE, 15); $result = $pagei->query("\n\t\t\tSELECT up_id, up_name, up_access_level, up_fengsel_time, up_fengsel_num, up_fengsel_dusor, ROUND(up_fengsel_dusor * " . self::DUSOR_PROFIT . ") up_fengsel_dusor_get, up_wanted_level\n\t\t\tFROM users_players\n\t\t\tWHERE up_fengsel_time > " . time() . " AND up_access_level != 0\n\t\t\tORDER BY {$sort_info['params']}"); $num = $result->rowCount(); echo ' <div class="bg1_c ' . ($num == 0 ? 'xsmall' : 'xlarge') . '"> <h1 class="bg1">Fengsel<span class="left"></span><span class="right"></span></h1> <p class="h_right"><a href="node/16">Hjelp</a></p> <div class="bg1"> <form action="" method="post"> <p class="c dark">Ditt wanted nivå er på ' . game::format_number($this->up->data['up_wanted_level'] / 10, 1) . ' %.</p>'; if ($num == 0) { echo ' <p class="c dark">Ingen er i fengselet for øyeblikket.</p> <p class="c"><a href="' . htmlspecialchars(game::address("fengsel", $_GET)) . '" class="button">Oppdater</a></p>'; } else { echo ' <table class="table center" width="100%"> <thead> <tr> <th>Spiller ' . $sort->show_link(0, 1) . '</th> <th>Wanted<br />nivå ' . $sort->show_link(2, 3) . '</th> <th>Utbrytning<br />sannsynlighet</th> <th>Ca. poeng</th> <th>Dusør</th> <th>Tid igjen ' . $sort->show_link(4, 5) . '</th> </tr> </thead> <tbody>'; $i = 0; while ($row = $result->fetch()) { $prefix = ""; $attr = new attr("class"); if (++$i % 2 == 0) { $attr->add("color"); } if (!$this->up->fengsel_check()) { $attr->add("box_handle"); $prefix = '<input type="radio" name="up_id" value="' . $row['up_id'] . '_' . $row['up_fengsel_time'] . '_' . $row['up_fengsel_dusor'] . '" /> '; } $time = $row['up_fengsel_time'] - time(); $prob = self::calc_prob($time, $row['up_wanted_level'] / 10); $points = self::calc_points($prob); echo ' <tr' . $attr->build() . '> <td>' . $prefix . game::profile_link($row['up_id'], $row['up_name'], $row['up_access_level']) . '</td> <td class="c">' . game::format_number($row['up_wanted_level'] / 10, 1) . ' %</td> <td class="c">' . game::format_number($prob, 1) . ' %</td> <td class="c">' . game::format_num($points) . '</td> <td class="r nowrap">' . game::format_cash($row['up_fengsel_dusor_get']) . '</td> <td class="r">' . game::counter($time) . '</td> </tr>'; } echo ' </tbody> </table> <p class="c">' . (($wait = $this->up->fengsel_wait()) == 0 ? ' ' . show_sbutton("Bryt ut", 'name="brytut"') : ' Du er i fengsel og slipper ut om ' . game::counter($wait, true) . '. </p> <p class="c">') . ' <a href="' . htmlspecialchars(game::address("fengsel", $_GET)) . '" class="button">Oppdater</a> </p>'; // flere sider? if ($pagei->pages > 1) { echo ' <div class="hr"></div> <p class="c"> ' . $pagei->pagenumbers() . ' </p>'; } } echo ' </form> </div> </div>'; // testing if (!MAIN_SERVER || access::is_nostat() && access::has("mod")) { echo ' <div class="bg1_c xxsmall bg1_padding"> <h1 class="bg1">' . (MAIN_SERVER ? 'No-stat' : 'Testing') . '<span class="left"></span><span class="right"></span></h1> <div class="bg1"> <form action="" method="post">' . ($this->up->fengsel_check() ? ' <p class="c">' . show_sbutton("Gå ut av fengsel", 'name="remove"') . '</p>' : ' <dl class="dd_right dl_2x"> <dt>Tid</dt> <dd><input type="text" name="time" value="' . htmlspecialchars(postval("time", 20)) . '" class="styled w40" /> sekunder</dd> </dl> <p class="c">' . show_sbutton("Gå inn i fensgel") . '</p>') . ' </form> </div> </div>'; } }
/** * Kontroller spiller */ protected function player_check() { // søke etter spiller? if (isset($_POST['up'])) { $this->up_offer = player::get($_POST['up'], NULL, true); } else { $this->up_offer = player::get(postval("up_id")); } // fant ikke spilleren? if (!$this->up_offer) { ess::$b->page->add_message("Fant ikke spilleren.", "error"); return false; } // seg selv? if ($this->up_offer->id == login::$user->player->id) { ess::$b->page->add_message("Du kan ikke angripe deg selv.", "error"); return false; } // død? if (!$this->up_offer->active) { ess::$b->page->add_message('Spilleren <user id="' . $this->up_offer->id . '" /> er ikke levende og kan ikke angripes.', "error"); return false; } // angriper nostat? if ($this->up_offer->is_nostat() && !login::$user->player->is_nostat()) { ess::$b->page->add_message('<user id="' . $this->up_offer->id . '" /> er nostat og kan ikke angripes.', "error"); return false; } // nostat angriper andre? if (login::$user->player->is_nostat() && !$this->up_offer->is_nostat()) { ess::$b->page->add_message('Du er nostat og kan derfor ikke angripe <user id="' . $this->up_offer->id . '" />.', 'error'); return false; } // kan ikke angripe spillere registrert for under 1 uke siden og som ikke har nådd ridder $expire = time() - 604800; if ($this->up_offer->data['up_created_time'] > $expire && $this->up_offer->rank['number'] < 8) { ess::$b->page->add_message('<user id="' . $this->up_offer->id . '" /> har vært registrert i under 7 dager med lav rank og kan ikke angripes', "error"); return false; } // sett opp skjema $this->form = \Kofradia\Form::getByDomain("angrip", login::$user); // utføre et angrep? if (isset($_POST['attack'])) { $this->handle_attack(); } echo ' <form action="" method="post"> <input type="hidden" name="up_id" value="' . $this->up_offer->id . '" /> ' . $this->form->getHTMLInput() . ' <div class="bg1_c xsmall"> <h1 class="bg1">Angrip spiller<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Du er i ferd med å angripe ' . $this->up_offer->profile_link() . ' som har ranken ' . $this->up_offer->rank['name'] . ' og er plassert som nummer ' . $this->up_offer->data['upr_rank_pos'] . ' på ranklista.</p> <p>Du befinner deg på ' . login::$user->player->bydel['name'] . ' og har en <b>' . htmlspecialchars(login::$user->player->weapon->data['name']) . '</b> med <b>' . game::format_num(login::$user->player->data['up_weapon_bullets']) . '</b> ' . fword('kule', 'kuler', login::$user->player->data['up_weapon_bullets']) . ' og en våpentrening på <b>' . game::format_num(login::$user->player->data['up_weapon_training'] * 100, 1) . ' %</b>.</p>'; // har vi ingen kuler? if (login::$user->player->data['up_weapon_bullets'] == 0) { echo ' <p><b>Du må kjøpe kuler før du kan utføre et angrep.</b> Kuler får du kjøpt hos våpen og beskyttelse-firmaet.</p>'; } else { ess::$b->page->add_js_domready('$("angrep_kuler").focus();'); echo ' <dl class="dd_right"> <dt>Antall kuler som skal benyttes</dt> <dd><input type="text" id="angrep_kuler" name="kuler" class="styled w40" value="' . intval(postval("kuler", "")) . '" /></dd> </dl> <p class="c">' . show_sbutton("Utfør angrep", 'name="attack"') . '</p>'; } echo ' <p class="c"><a href="angrip">Avbryt</a></p> </div> </div> </form> <div class="bg1_c xsmall"> <h1 class="bg1">Informasjon<span class="left2"></span><span class="right2"></span></h1> <div class="bg1"> <p>Hvis spilleren du angriper ikke befinner seg i <b>' . login::$user->player->bydel['name'] . '</b>, er i <b>bomberom</b> eller <b>fengsel</b> eller hvis du rett og slett ikke klarer å oppdage spilleren, vil du miste en del energi og bli plassert i fengsel i en kort varighet.</p> <p>Hvis du klarer å oppdage spilleren, vil du skade spilleren. Hvis angrepet er så kraftig at spilleren dør vil du:</p> <ul> <li>Overta pengene spilleren hadde på hånda</li> <li>Motta en del rank, avhengig av ranken til offeret</li> </ul> <p>Hvis spilleren overlever, vil du:</p> <ul> <li>Komme i fengsel en periode</li> <li>Miste en god del energi</li> <li>Motta litt rank som spilleren du angriper mister</li> </ul> <p>Når du utfører et angrep mot en annen spiller, risikerer du å bli oppdaget av vitner. Hvis du oppdager vitnene i det du utfører angrepet, vil du også få vite hvem du oppdaget som vitnet angrepet.</p> </div> </div>'; return true; }
/** * Trigger når en spiller dreper en annen */ public static function handle_up_kill(player $up, $data) { // bare skadet angrep? if (isset($data['attack']) && !$data['attack']['drept']) { return; } $killed = $data['up']; // utenfor topp 15? if ($killed->rank['pos'] > 15) { return; } // antall poeng vi skal gi // 1. plass = 2 poeng, 2.-15. plass = 1 $p = $killed->rank['pos'] == 1 ? 2 : 1; // oppdater eventuelle FF $crew = " AND ff_is_crew " . ($up->is_nostat() ? "!=" : "=") . " 0"; \Kofradia\DB::get()->exec("\n\t\t\tUPDATE users_players, ff, ff_members\n\t\t\tSET ff_points = ff_points + {$p}\n\t\t\tWHERE up_id = {$up->id} AND ffm_up_id = up_id AND ff_id = ffm_ff_id AND (ffm_status = " . ff_member::STATUS_MEMBER . " OR ffm_status = " . ff_member::STATUS_DEACTIVATED . "){$crew}"); }