function DoDamage($attacker, $skillInfo, $skill) { global $fighters, $status, $totalgold, $totalloot, $reporttext, $map, $dungeonlevel; $defender = findNearestEnemy($attacker); if ($skillInfo['category'] == 'melee') { if (abs($fighters[$attacker]['x'] - $fighters[$defender]['x']) + abs($fighters[$attacker]['y'] - $fighters[$defender]['y']) > 1) { $reporttext .= $fighters[$attacker]['name'] . " is out of range.<br>"; return; } } $hid = $fighters[$attacker]['id']; $conn = mysqli_connect("ucfsh.ucfilespace.uc.edu", "piattjd", "curtis1", "piattjd"); $skillLevel = mysqli_fetch_assoc(mysqli_query($conn, "SELECT skilllevel FROM HeroSkills WHERE abilityid = '{$skill}' AND heroid = '{$hid}'")); mysqli_close($conn); if ($skillLevel == null && $fighters[$attacker]['party'] != 'Enemy') { $reporttext .= $fighters[$attacker]['name'] . " cannot use " . $skillInfo['skillname'] . ".<br>"; return; } $damType = null; $armType = null; switch ($skillInfo['type']) { case "piercing damage": $damType = "pdam"; $armType = "parm"; break; case "slashing damage": $damType = "sdam"; $armType = "sarm"; break; case "bludgeoning damage": $damType = "bdam"; $armType = "barm"; break; case "arcane damage": $damType = "adam"; $armType = "aarm"; break; case "divine damage": $damType = "ddam"; $armType = "darm"; break; case "pure damage": break; case "{weapon type}": //@JAH GET WEAPON TYPE break; default: //echo "Unhandled damage type " . $skillInfo['type'] . "<br>"; @JAH //return; break; } $damCat = null; switch ($skillInfo['category']) { case "melee": $damCat = "str"; break; case "ranged": $damCat = "dex"; break; case "magic": $damCat = "nce"; break; case "heal": $damCat = "pie"; break; } $dbDamage = str_replace("{skill level}", $skillLevel['skilllevel'], $skillInfo['effect']); $damage = eval("return ({$dbDamage});"); $totalPower = 100; $totalArmor = 1; $abilityScale = $fighters[$attacker][$damCat] + $status[$attacker][$damCat]; if ($damType != null) { $totalPower = $fighters[$attacker][$damType] + $status[$attacker][$damType] + 1; $totalArmor = $fighters[$defender][$armType] + $status[$defender][$armType] + 1; $damage = ScaleDamage($damage, $abilityScale, $totalPower, $totalArmor); } $damage = ScaleDamage($damage, $abilityScale, $totalPower, $totalArmor); echo "<span style='color:blue;'>damage: </span>", $damage, " from ", $fighters[$attacker]['name'], " to ", $fighters[$defender]['name'], "<br>"; $reporttext .= $fighters[$attacker]['name'] . " uses " . $skillInfo['skillname'] . " on " . $fighters[$defender]['name'] . " for " . $damage . " damage.<br>"; $fighters[$defender]['hp'] -= $damage; if ($skillInfo['skillstatus'] != null) { switch ($skillInfo['skillstatus']) { case 'dot': $dbDot = str_replace("{skill level}", $skillLevel['skilllevel'], $skillInfo['duration']); $dot = eval("return ({$dbDot});"); $dot = ScaleDamage($dot, $abilityScale, $totalPower, $totalArmor); if ($status[$defender]['hpreg'] < $dot) { echo "<span style='color:blue;'>damage: </span>", $dot, " over time from ", $fighters[$attacker]['name'], " to ", $status[$defender]['name'], "<br>"; $reporttext .= $skillInfo['skillname'] . " causes " . $dot . " damage to " . $status[$defender]['name'] . "<br>"; $status[$defender]['hpreg'] = -$dot; } break; case 'root': $root = str_replace("{skill level}", $skillLevel['skilllevel'], $skillInfo['duration']); $rootDur = max(1, floor(eval("return ({$root});"))); if ($status[$defender]['root'] < $rootDur) { $reporttext .= $skillInfo['skillname'] . " roots " . $status[$defender]['name'] . "<br>"; $status[$defender]['root'] = $rootDur; } break; case 'silence': $silence = str_replace("{skill level}", $skillLevel['skilllevel'], $skillInfo['duration']); $silenceDur = max(1, floor(eval("return ({$silence});"))); if ($status[$defender]['silence'] < $silenceDur) { $reporttext .= $skillInfo['skillname'] . " silences " . $status[$defender]['name'] . "<br>"; $status[$defender]['silence'] = $silenceDur; } break; case 'stun': $stun = str_replace("{skill level}", $skillLevel['skilllevel'], $skillInfo['duration']); $stunDur = max(1, floor(eval("return ({$stun});"))); if ($status[$defender]['stun'] < $stunDur) { $reporttext .= $skillInfo['skillname'] . " stuns " . $status[$defender]['name'] . "<br>"; $status[$defender]['stun'] = $stunDur; } break; default: $debuffs = explode('|', $skillInfo['skillstatus']); foreach ($debuffs as $debuff) { $debuffStats = str_replace("{skill level}", $skillLevel['skilllevel'], $skillInfo['duration']); $dstats = max(1, floor(eval("return ({$debuffStats});"))); if ($status[$defender][$debuff] < $dstats) { $status[$defender][$debuff] = $dstats; } } break; } } if ($fighters[$defender]['hp'] < 1) { KillFighter($defender); } }
function testSwitch2($i, $j) { global $fighters, $map, $totalxp, $report; $testplan = explode("||", $fighters[$i]['battleplan']); if ($testplan[0] == "") { return; } $testplan = explode("|", $testplan[$j])[1]; switch ($testplan) { case "moveclosertoenemy": $closest = findNearestEnemy($i); $report .= $fighters[$i]['name'] . " moved from (" . $fighters[$i]['x'] . ", " . $fighters[$i]['y'] . ") to ("; for ($k = 0; $k < $fighters[$i]['move']; $k++) { //$move = $fighters[$i]['agi']; //while($move > 0 ) { if ($fighters[$i]['x'] < $fighters[$closest]['x'] && $map[$fighters[$i]['y']][$fighters[$i]['x'] + 1] == -1) { $map[$fighters[$i]['y']][$fighters[$i]['x'] + 1] = $map[$fighters[$i]['y']][$fighters[$i]['x']]; $map[$fighters[$i]['y']][$fighters[$i]['x']] = -1; $fighters[$i]['x']++; //$move--; } else { if ($fighters[$i]['y'] < $fighters[$closest]['y'] && $map[$fighters[$i]['y'] + 1][$fighters[$i]['x']] == -1) { $map[$fighters[$i]['y'] + 1][$fighters[$i]['x']] = $map[$fighters[$i]['y']][$fighters[$i]['x']]; $map[$fighters[$i]['y']][$fighters[$i]['x']] = -1; $fighters[$i]['y']++; //$move--; } else { if ($fighters[$i]['x'] > $fighters[$closest]['x'] && $map[$fighters[$i]['y']][$fighters[$i]['x'] - 1] == -1) { $map[$fighters[$i]['y']][$fighters[$i]['x'] - 1] = $map[$fighters[$i]['y']][$fighters[$i]['x']]; $map[$fighters[$i]['y']][$fighters[$i]['x']] = -1; $fighters[$i]['x']--; //$move--; } else { if ($fighters[$i]['y'] > $fighters[$closest]['y'] && $map[$fighters[$i]['y'] - 1][$fighters[$i]['x']] == -1) { $map[$fighters[$i]['y'] - 1][$fighters[$i]['x']] = $map[$fighters[$i]['y']][$fighters[$i]['x']]; $map[$fighters[$i]['y']][$fighters[$i]['x']] = -1; $fighters[$i]['y']--; //$move--; } } } } } $report .= $fighters[$i]['x'] . ", " . +$fighters[$i]['y'] . ").<br>"; return; break; case "meleeattack": $closest = findNearestEnemy($i); if (abs($fighters[$i]['x'] - $fighters[$closest]['x']) + abs($fighters[$i]['y'] - $fighters[$closest]['y']) < 2) { $report .= $fighters[$i]['name'] . " hits " . $fighters[$closest]['name'] . " for " . $fighters[$i]['str'] . " damage.<br>"; $fighters[$closest]['hp'] -= $fighters[$i]['str']; if ($fighters[$closest]['hp'] < 1) { $fighters[$closest]['hp'] = 0; $map[$fighters[$closest]['y']][$fighters[$closest]['x']] = -1; $report .= $fighters[$closest]['name'] . " dies.<br>"; if ($fighters[$closest]['party'] == "Enemy") { $totalxp += $fighters[$closest]['xp']; } } } else { $report .= $fighters[$i]['name'] . " is out of range.<br>"; } return; break; case "rangedattack": $closest = findNearestEnemy($i); if (abs($fighters[$i]['x'] - $fighters[$closest]['x']) + abs($fighters[$i]['y'] - $fighters[$closest]['y']) < 9) { $report .= $fighters[$i]['name'] . " shoots " . $fighters[$closest]['name'] . " for " . $fighters[$i]['dex'] . " damage.<br>"; $fighters[$closest]['hp'] -= $fighters[$i]['dex']; if ($fighters[$closest]['hp'] < 1) { $fighters[$closest]['hp'] = 0; $map[$fighters[$closest]['y']][$fighters[$closest]['x']] = -1; $report .= $fighters[$closest]['name'] . " dies.<br>"; if ($fighters[$closest]['party'] == "Enemy") { $totalxp += $fighters[$closest]['xp']; } } } else { $report .= $fighters[$i]['name'] . " is out of range.<br>"; } return; break; case "magicattack": $closest = findNearestEnemy($i); if (abs($fighters[$i]['x'] - $fighters[$closest]['x']) + abs($fighters[$i]['y'] - $fighters[$closest]['y']) < 6) { $report .= $fighters[$i]['name'] . " zaps " . $fighters[$closest]['name'] . " for " . $fighters[$i]['nce'] . " damage.<br>"; $fighters[$closest]['hp'] -= $fighters[$i]['nce']; if ($fighters[$closest]['hp'] < 1) { $fighters[$closest]['hp'] = 0; $map[$fighters[$closest]['y']][$fighters[$closest]['x']] = -1; $report .= $fighters[$closest]['name'] . " dies.<br>"; if ($fighters[$closest]['party'] == "Enemy") { $totalxp += $fighters[$closest]['xp']; } } } else { $report .= $fighters[$i]['name'] . " is out of range.<br>"; } return; break; } }