/** * Behandle angrep */ protected function handle_attack() { // har vi ingen kuler? if (login::$user->player->data['up_weapon_bullets'] == 0) { return; } $bullets = max(0, (int) postval("kuler")); // har vi ikke så mange kuler? if ($bullets > login::$user->player->data['up_weapon_bullets']) { ess::$b->page->add_message("Du har ikke så mange kuler.", "error"); return; } // har ikke skrevet inn noe? if ($bullets == 0) { ess::$b->page->add_message("Du må fylle inn antall kuler du ønsker å benytte.", "error"); return; } // er offeret i fengsel? if ($this->up_offer->fengsel_check()) { ess::$b->page->add_message('<user id="' . $this->up_offer->id . '" /> er i fengsel og kan ikke angripes nå.', "error"); return; } // kontroller skjema if (!$this->form->validateHashOrAlert(null, "Angrip spiller: {$this->up_offer->data['up_name']}")) { return; } // oppdater tidspunkt for siste angrep \Kofradia\DB::get()->exec("UPDATE users_players SET up_df_time = " . time() . " WHERE up_id = " . login::$user->player->id); // er i annen bydel, bomberom eller vi klarte ikke å finne spilleren? $not_found_b = $this->up_offer->data['up_b_id'] != login::$user->player->data['up_b_id']; $not_found_brom = $this->up_offer->bomberom_check(); $prob = rand(1, 100); $find_prob = $this->up_offer->calc_find_player_prob() * 100; $not_found_prob = $prob > $find_prob; if ($not_found_b || $not_found_brom || $not_found_prob) { // logg if ($not_found_b) { $reason = 'Ikke i samme bydel (' . login::$user->player->bydel['name'] . ' mot ' . $this->up_offer->bydel['name'] . ').'; if ($not_found_brom) { $reason .= ' Offeret er også i bomberom.'; } } elseif ($not_found_brom) { $reason = 'Offeret er i bomberom.'; } else { $reason = 'Traff ikke på sannsynligheten (' . $prob . ' > ' . ceil($find_prob) . ').'; } putlog("DF", "ANGREP FEILET: " . login::$user->player->data['up_name'] . " skulle angripe%c3 " . $this->up_offer->data['up_name'] . "%c med {$bullets} " . fword("kule", "kuler", $bullets) . ". {$reason}"); // øk telleren over antall ganger vi ikke har funnet spiller \Kofradia\DB::get()->exec("UPDATE users_players SET up_attack_failed_num = up_attack_failed_num + 1 WHERE up_id = " . login::$user->player->id); // øk telleren over antall ganger vi ikke har funnet spiller (for familien spilleren er medlem i) login::$user->player->attack_ff_update("failed"); // øk teller for ff for offeret $this->up_offer->attacked_ff_update("failed"); // sett i fengsel i 2-4 minutter $fengsel = login::$user->player->fengsel_rank(100, true, true, rand(120, 240)); // mist energi login::$user->player->energy_use(self::ENERGY_NOT_FOUND); // øk anti-bot $this->antibot->increase_counter(); // trigger login::$user->player->trigger("attack_notfound", array("not_found_b" => $not_found_b, "not_found_brom" => $not_found_brom, "not_found_prob" => $not_found_prob, "bullets" => $bullets, "up" => $this->up_offer)); // vis resultat og last inn siden $this->attack_result_notfound_show($fengsel, $bullets); redirect::handle(); } // angrip spilleren $result = login::$user->player->weapon->attack($this->up_offer, $bullets); // sett ned antall kuler spilleren har \Kofradia\DB::get()->exec("UPDATE users_players SET up_weapon_bullets = GREATEST(0, up_weapon_bullets - {$bullets}) WHERE up_id = " . login::$user->player->id); login::$user->player->data['up_weapon_bullets'] = max(0, login::$user->player->data['up_weapon_bullets'] - $bullets); // trigger login::$user->player->trigger("attack", array("attack" => $result, "up" => $this->up_offer)); // vis resultat og last inn siden $this->attack_result_show($result, $bullets); }