Esempio n. 1
0
 public function cast(SR_Player $player, SR_Player $target, $level, $hits, SR_Player $potion_player)
 {
     // 		echo "Casting Firewall with level $level and $hits hits.\n";
     # Firebolt ads 0.20 per level
     $firebolt = $potion_player->getSpell('firebolt');
     $firebolt = $firebolt === false ? 0 : $firebolt->getLevel($potion_player);
     $firebolt = round($firebolt / 5, 1);
     $level += $firebolt;
     # Fireball ads 0.25 per level
     $fireball = $potion_player->getSpell('fireball');
     $fireball = $fireball === false ? 0 : $fireball->getLevel($potion_player);
     $fireball = round($fireball / 4, 1);
     $level += $fireball;
     $line = $target->getY();
     $damage = array();
     $ep = $target->getParty();
     foreach ($ep->getMembers() as $t) {
         $t instanceof SR_Player;
         $d = abs($line - $t->getY());
         // 			echo "Distance to target is $d\n";
         $l = $level - $d;
         if ($l >= 0) {
             $hits = $this->dice($potion_player, $t, $l);
             $damage[$t->getID()] = $this->calcFirewallDamage($player, $t, $level, $hits);
         }
     }
     $this->announceADV($player, $target, $level);
     Shadowfunc::multiDamage($player, $damage);
     return true;
 }
Esempio n. 2
0
 public function onThrow(SR_Player $player, SR_Player $target)
 {
     $party = $player->getParty();
     $ep = $party->getEnemyParty();
     $mc = $party->getMemberCount();
     $firearms = $player->get('firearms');
     $atk = 15;
     $mindmg = 1;
     $maxdmg = 4;
     $damage = array();
     $inaccuracy = rand(2, 4) - ($firearms ? 1 : 0);
     $targets = self::computeDistances($target, $inaccuracy);
     foreach ($targets as $data) {
         list($pid, $d) = $data;
         $target = $ep->getMemberByPID($pid);
         $target instanceof SR_Player;
         $a = $atk - $d * $d + rand(-1, 2);
         $a = Common::clamp($a, 0, $atk);
         $def = $target->get('defense');
         $arm = $target->get('marm');
         $hits = Shadowfunc::diceHits($mindmg, $arm, $a, $def, $player, $target);
         $hits = Common::clamp($hits, 0);
         echo "Dicing... DIST: {$d}, ATK: {$a}, DEF: {$def}. Hits: {$hits}\n";
         //			$hits -= $arm;
         if ($hits <= 0) {
             continue;
         }
         $dmg = round($mindmg + $hits * 0.1, 2);
         $dmg = Common::clamp($dmg, $mindmg, $maxdmg);
         $dmg -= $arm;
         if ($dmg <= 0) {
             continue;
         }
         echo "Blinding the target with {$hits} hits ...\n";
         for ($i = 0; $i < $hits; $i += 3) {
             $target->addEffects(new SR_Effect($i * 10, array('attack' => -0.15), SR_Effect::MODE_ONCE));
         }
         $damage[$pid] = $dmg;
     }
     Shadowfunc::multiDamage($player, $damage, 'The Flashbang totally missed all targets.');
 }
Esempio n. 3
0
 /**
  * Cause damage to multiple targets.
  * @param SR_Player $player
  * @param array $damage
  * @param int $level
  */
 public function spellDamageMultiTargets(SR_Player $player, array $damage, $level)
 {
     Shadowfunc::multiDamage($player, $damage, $this->getName());
 }