Esempio n. 1
0
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);
    }
}
Esempio n. 2
0
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;
    }
}