/** * Kalkuler antall rankpoeng man får ved å skade en spiller * @param player $up offeret * @param bool $killed ble spilleren drept * @param bool $skadeprosent */ public function health_calc_rankpoints($up, $killed, $skadeprosent = null) { // hvilken rank ble angrepet? if ($up->rank['pos_id']) { // spesialrank if ($killed) { $table =& weapon::$rankpoeng_success_special; } else { $table =& weapon::$rankpoeng_try_special; } $rank_num = count(game::$ranks['pos']) - game::$ranks['pos'][$up->rank['pos_id']]['number'] + 1; } else { // normal rank if ($killed) { $table =& weapon::$rankpoeng_success; } else { $table =& weapon::$rankpoeng_try; } $rank_num = $up->rank['number']; } // finn verdien hvis den finnes, hvis ikke bruk den høyeste verdien if (isset($table[$rank_num])) { $value = $table[$rank_num]; } else { $value = end($table[$rank_num]); } // sett i forhold til rankforskjellen $rankdiff = game::calc_rank_diff($this, $up); if ($rankdiff < weapon::RANKPOENG_RATIO_LOW) { $rankdiff = weapon::RANKPOENG_RATIO_LOW; } elseif ($rankdiff > weapon::RANKPOENG_RATIO_HIGH) { $rankdiff = weapon::RANKPOENG_RATIO_HIGH; } $value *= weapon::$rankpoeng_ratio[$rankdiff]; // sett i perspektiv med skadeprosent if (!$killed && $skadeprosent !== null) { $value *= $skadeprosent; } return round($value); }
/** * Kalkuler beskyttelse man får med vektpoengene * @param player $up spiller som angriper */ public function calc_weight(player $up) { $vekt = 0; // sjekk for broderskapmedlemskap $result = \Kofradia\DB::get()->query("SELECT MIN(ffm_priority) FROM ff_members WHERE ffm_up_id = {$this->up->id} AND ffm_status = 1"); $pos = $result->fetchColumn(0); if ($pos) { if (isset(self::$vekt_familie[$pos])) { $vekt += self::$vekt_familie[$pos]; } else { // finn nærmeste verdi if ($pos < 1) { $vekt += reset(self::$vekt_familie); } else { $vekt += end(self::$vekt_familie); } } } // sjekk for rankforskjeller if ($up) { // ren rankforskjell $diff = abs(game::calc_rank_diff($up, $this->up)); // har vi den bestemt? if (isset(self::$vekt_rankdiff[$diff])) { $vekt += self::$vekt_rankdiff[$diff]; } elseif ($diff != 0) { // hent maksimalt (må være over 0, som tilsier at vi kan velge siste alternativ) $vekt += end(self::$vekt_rankdiff); } // spesialrank $diff = game::calc_specrank_diff($up, $this->up); if ($diff > 0) { if (isset(self::$vekt_specrankdiff[$diff])) { $vekt += self::$vekt_specrankdiff[$diff]; } else { // bruk siste mulighet $vekt += end(self::$vekt_specrankdiff); } } } // maksimalt kan den være 0,5 return min($vekt, 0.5); }