Exemplo n.º 1
0
 /**
  * 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);
 }
Exemplo n.º 2
0
 /**
  * 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);
 }