630 lines
21 KiB
PHP
Executable File
630 lines
21 KiB
PHP
Executable File
<?php
|
|
// translator ready
|
|
// addnews ready
|
|
// mail ready
|
|
require_once("lib/bell_rand.php");
|
|
require_once("common.php");
|
|
require_once("lib/http.php");
|
|
require_once("lib/battle-buffs.php");
|
|
require_once("lib/battle-skills.php");
|
|
require_once("lib/buffs.php");
|
|
require_once("lib/extended-battle.php");
|
|
|
|
//just in case we're called from within a function.Yuck is this ugly.
|
|
global $badguy,$enemies,$newenemies,$session,$creatureattack,$creatureatkmod, $beta;
|
|
global $creaturedefmod,$adjustment,$defmod,$atkmod,$compdefmod,$compatkmod,$buffset,$atk,$def,$options;
|
|
global $companions,$companion,$newcompanions,$count,$defended,$needtostopfighting,$roll;
|
|
|
|
tlschema("battle");
|
|
|
|
$newcompanions = array();
|
|
$attackstack = @unserialize($session['user']['badguy']);
|
|
if (isset($attackstack['enemies'])) $enemies = $attackstack['enemies'];
|
|
if (isset($attackstack['options'])) $options = $attackstack['options'];
|
|
|
|
// Make the new battle script compatible with old, single enemy fights.
|
|
if (isset($attackstack['creaturename']) && $attackstack['creaturename'] > "") {
|
|
$safe = $attackstack;
|
|
$enemies = array();
|
|
$enemies[0]=$safe;
|
|
unset($safe);
|
|
} elseif (isset($attackstack[0]['creaturename']) && $attackstack['creaturename'] > "") {
|
|
$enemies=$attackstack;
|
|
}
|
|
if (!isset($options)) {
|
|
if (isset($enemies[0]['type'])) $options['type'] = $enemies[0]['type'];
|
|
}
|
|
|
|
$options = prepare_fight($options);
|
|
|
|
$roundcounter=0;
|
|
$adjustment = 1;
|
|
|
|
$count = 1;
|
|
$auto = httpget('auto');
|
|
if ($auto == 'full') {
|
|
$count = -1;
|
|
} else if ($auto == 'five') {
|
|
$count = 5;
|
|
} else if ($auto == 'ten') {
|
|
$count = 10;
|
|
}
|
|
|
|
$enemycounter = count($enemies);
|
|
$enemies = autosettarget($enemies);
|
|
|
|
$op=httpget("op");
|
|
$skill=httpget("skill");
|
|
$l=httpget("l");
|
|
$newtarget = httpget('newtarget');
|
|
if ($newtarget != "") $op = "newtarget";
|
|
//if (!$targetted) $op = "newtarget";
|
|
|
|
if ($op=="fight"){
|
|
apply_skill($skill,$l);
|
|
} else if ($op=="newtarget") {
|
|
foreach ($enemies as $index=>$badguy){
|
|
if ($index == (int)$newtarget) {
|
|
if (!isset($badguy['cannotbetarget']) || $badguy['cannotbetarget'] === false) {
|
|
$enemies[$index]['istarget'] = 1;
|
|
}else{
|
|
if (is_array($badguy['cannotbetarget'])) {
|
|
$msg = sprintf_translate($badguy['cannotbetarget']);
|
|
$msg = substitute($msg);
|
|
output_notl($msg); //Here it's already translated
|
|
}else{
|
|
if ($badguy['cannotbetarget'] === true) {
|
|
$msg = "{badguy} cannot be selected as target.";
|
|
} else {
|
|
$msg = $badguy['cannotbetarget'];
|
|
}
|
|
$msg = substitute_array("`5".$msg."`0`n");
|
|
output($msg);
|
|
}
|
|
}
|
|
} else {
|
|
$enemies[$index]['istarget'] = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
$victory = false;
|
|
$defeat = false;
|
|
|
|
if ($enemycounter > 0) {
|
|
output ("`\$`c`b~ ~ ~ Fight ~ ~ ~`b`c`0");
|
|
modulehook("battle", $enemies);
|
|
foreach ($enemies as $index=>$badguy) {
|
|
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0) {
|
|
output("`@You have encountered `^%s`@ which lunges at you with `%%s`@!`0`n",$badguy['creaturename'],$badguy['creatureweapon']);
|
|
}
|
|
}
|
|
output_notl("`n");
|
|
show_enemies($enemies);
|
|
}
|
|
|
|
suspend_buffs((($options['type'] == 'pvp')?"allowinpvp":false));
|
|
suspend_companions((($options['type'] == 'pvp')?"allowinpvp":false));
|
|
|
|
// Now that the bufflist is sane, see if we should add in the bodyguard.
|
|
$inn = (int)httpget('inn');
|
|
if ($options['type']=='pvp' && $inn==1) {
|
|
apply_bodyguard($badguy['bodyguardlevel']);
|
|
}
|
|
|
|
$surprised = false;
|
|
if ($op != "run" && $op != "fight" && $op != "newtarget") {
|
|
if (count($enemies) > 1) {
|
|
$surprised = true;
|
|
output("`b`^YOUR ENEMIES`\$ surprise you and get the first round of attack!`0`b`n`n");
|
|
} else {
|
|
// Let's try this instead.Biggest change is that it adds possibility of
|
|
// being surprised to all fights.
|
|
if (!array_key_exists('didsurprise',$options) || !$options['didsurprise']) {
|
|
// By default, surprise is 50/50
|
|
$surprised = e_rand(0, 1) ? true : false;
|
|
// Now, adjust for slum/thrill
|
|
$type = httpget('type');
|
|
if ($type == 'slum' || $type == 'thrill') {
|
|
$num = e_rand(0, 2);
|
|
$surprised = true;
|
|
if ($type == 'slum' && $num != 2)
|
|
$surprised = false;
|
|
if (($type == 'thrill' || $type=='suicide') && $num == 2)
|
|
$surprised = false;
|
|
}
|
|
if (!$surprised) {
|
|
output("`b`\$Your skill allows you to get the first attack!`0`b`n`n");
|
|
} else {
|
|
if ($options['type'] == 'pvp') {
|
|
output("`b`^%s`\$'s skill allows them to get the first round of attack!`0`b`n`n",$badguy['creaturename']);
|
|
}else{
|
|
output("`b`^%s`\$ surprises you and gets the first round of attack!`0`b`n`n",$badguy['creaturename']);
|
|
}
|
|
$op = "run";
|
|
}
|
|
$options['didsurprise']=1;
|
|
}
|
|
}
|
|
}
|
|
$needtostopfighting = false;
|
|
if ($op != "newtarget") {
|
|
// Run through as many rounds as needed.
|
|
do {
|
|
//we need to restore and calculate here to reflect changes that happen throughout the course of multiple rounds.
|
|
restore_buff_fields();
|
|
calculate_buff_fields();
|
|
prepare_companions();
|
|
$newenemies = array();
|
|
// Run the beginning of round buffs (this also calculates all modifiers)
|
|
foreach ($enemies as $index=>$badguy) {
|
|
if ($badguy['dead'] == false && $badguy['creaturehealth'] > 0) {
|
|
if (isset($badguy['alwaysattacks']) && $badguy['alwaysattacks'] == true) {
|
|
} else {
|
|
$roundcounter++;
|
|
}
|
|
if (($roundcounter > $options['maxattacks']) && $badguy['istarget'] == false) {
|
|
$newcompanions = $companions;
|
|
} else {
|
|
$buffset = activate_buffs("roundstart");
|
|
if ($badguy['creaturehealth']<=0 || $session['user']['hitpoints']<=0){
|
|
$creaturedmg = 0;
|
|
$selfdmg = 0;
|
|
if ($badguy['creaturehealth'] <= 0) {
|
|
$badguy['dead'] = true;
|
|
$badguy['istarget'] = false;
|
|
$count = 1;
|
|
$needtostopfighting = true;
|
|
}
|
|
if ($session['user']['hitpoints'] <= 0) {
|
|
$count = 1;
|
|
$needtostopfighting = true;
|
|
}
|
|
$newenemies[$index] = $badguy;
|
|
$newcompanions = $companions;
|
|
// No break here. It would break the foreach statement.
|
|
} else {
|
|
$creaturedefmod=$buffset['badguydefmod'];
|
|
$creatureatkmod=$buffset['badguyatkmod'];
|
|
$atkmod=$buffset['atkmod'];
|
|
$defmod=$buffset['defmod'];
|
|
$compatkmod=$buffset['compatkmod'];
|
|
$compdefmod=$buffset['compdefmod'];
|
|
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0 && $badguy['istarget']){
|
|
if (is_array($companions)) {
|
|
$newcompanions = array();
|
|
foreach ($companions as $name=>$companion) {
|
|
if ($companion['hitpoints'] > 0) {
|
|
$buffer = report_companion_move($companion, "heal");
|
|
if ($buffer !== false) {
|
|
$newcompanions[$name] = $buffer;
|
|
unset($buffer);
|
|
} else {
|
|
unset($companion);
|
|
unset($newcompanions[$name]);
|
|
}
|
|
} else {
|
|
$newcompanions[$name] = $companion;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$newcompanions = $companions;
|
|
}
|
|
$companions = $newcompanions;
|
|
|
|
if ($op=="fight" || $op=="run" || $surprised){
|
|
// Grab an initial roll.
|
|
$roll = rolldamage();
|
|
if ($op=="fight" && !$surprised){
|
|
$ggchancetodouble = $session['user']['dragonkills'];
|
|
$bgchancetodouble = $session['user']['dragonkills'];
|
|
|
|
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0) {
|
|
$buffset = activate_buffs("offense");
|
|
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0 && $badguy['istarget']){
|
|
if (is_array($companions)) {
|
|
$newcompanions = array();
|
|
foreach ($companions as $name=>$companion) {
|
|
if ($companion['hitpoints'] > 0) {
|
|
$buffer = report_companion_move($companion, "magic");
|
|
if ($buffer !== false) {
|
|
$newcompanions[$name] = $buffer;
|
|
unset($buffer);
|
|
} else {
|
|
unset($companion);
|
|
unset($newcompanions[$name]);
|
|
}
|
|
} else {
|
|
$newcompanions[$name] = $companion;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$newcompanions = $companions;
|
|
}
|
|
$companions = $newcompanions;
|
|
if ($badguy['creaturehealth']<=0 || $session['user']['hitpoints']<=0){
|
|
$creaturedmg = 0;
|
|
$selfdmg = 0;
|
|
if ($badguy['creaturehealth'] <= 0) {
|
|
$badguy['dead'] = true;
|
|
$badguy['istarget'] = false;
|
|
$count = 1;
|
|
$needtostopfighting=true;
|
|
}
|
|
$newenemies[$index] = $badguy;
|
|
$newcompanions = $companions;
|
|
// No break here. It would break the foreach statement.
|
|
} else if ($badguy['istarget'] == true) {
|
|
do {
|
|
if ($badguy['creaturehealth']<=0 || $session['user']['hitpoints']<=0){
|
|
$creaturedmg = 0;
|
|
$selfdmg = 0;
|
|
$newenemies[$index] = $badguy;
|
|
$newcompanions = $companions;
|
|
$needtostopfighting = true;
|
|
}else{
|
|
$needtostopfighting = battle_player_attacks();
|
|
}
|
|
$r = mt_rand(0,100);
|
|
if ($r < $ggchancetodouble && $badguy['creaturehealth']>0 && $session['user']['hitpoints']>0 && !$needtostopfighting){
|
|
$additionalattack = true;
|
|
$ggchancetodouble -= ($r+5);
|
|
$roll = rolldamage();
|
|
}else{
|
|
$additionalattack = false;
|
|
}
|
|
} while($additionalattack && !$needtostopfighting);
|
|
if ($needtostopfighting) {
|
|
$newcompanions = $companions;
|
|
}
|
|
} else {
|
|
}
|
|
}
|
|
}else if($op=="run" && !$surprised){
|
|
output("`4You are too busy trying to run away like a cowardly dog to try to fight `^%s`4.`n",$badguy['creaturename']);
|
|
}
|
|
|
|
//Need to insert this here because of auto-fighting!
|
|
if ($op != "newtarget") $op = "fight";
|
|
|
|
// We need to check both user health and creature health. Otherwise
|
|
// the user can win a battle by a RIPOSTE after he has gone <= 0 HP.
|
|
//-- Gunnar Kreitz
|
|
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0 && $roundcounter <= $options['maxattacks']){
|
|
$buffset = activate_buffs("defense");
|
|
do {
|
|
$defended = false;
|
|
$needtostopfighting = battle_badguy_attacks();
|
|
$r = mt_rand(0,100);
|
|
if (!isset($bgchancetodouble)) $bgchancetodouble = 0;
|
|
if ($r < $bgchancetodouble && $badguy['creaturehealth']>0 && $session['user']['hitpoints']>0 && !$needtostopfighting){
|
|
$additionalattack = true;
|
|
$bgchancetodouble -= ($r+5);
|
|
$roll = rolldamage();
|
|
}else{
|
|
$additionalattack = false;
|
|
}
|
|
} while ($additionalattack && !$defended);
|
|
}
|
|
$companions = $newcompanions;
|
|
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0 && $badguy['istarget']){
|
|
if (is_array($companions)) {
|
|
foreach ($companions as $name=>$companion) {
|
|
if ($companion['hitpoints'] > 0) {
|
|
$buffer = report_companion_move($companion, "fight");
|
|
if ($buffer !== false) {
|
|
$newcompanions[$name] = $buffer;
|
|
unset($buffer);
|
|
} else {
|
|
unset($companion);
|
|
unset($newcompanions[$name]);
|
|
}
|
|
} else {
|
|
$newcompanions[$name] = $companion;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$newcompanions = $companions;
|
|
}
|
|
} else {
|
|
$newcompanions = $companions;
|
|
}
|
|
if($badguy['dead'] == false && isset($badguy['creatureaiscript']) && $badguy['creatureaiscript'] > "") {
|
|
global $unsetme;
|
|
execute_ai_script($badguy['creatureaiscript']);
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$newcompanions = $companions;
|
|
}
|
|
// Copy the companions back so in the next round (multiple rounds) they can be used again.
|
|
// We will also delete the now old set of companions. Just in case.
|
|
$companions = $newcompanions;
|
|
unset($newcompanions);
|
|
|
|
// If any A.I. script wants the current enemy to be deleted completely, we will obey.
|
|
// For multiple rounds/multiple A.I. scripts we will although unset this order.
|
|
|
|
if (isset($unsetme) && $unsetme === true) {
|
|
$unsetme = false;
|
|
unset($unsetme);
|
|
} else {
|
|
$newenemies[$index] = $badguy;
|
|
}
|
|
}
|
|
expire_buffs();
|
|
$creaturedmg=0;
|
|
$selfdmg=0;
|
|
|
|
if (($count != 1 || ($needtostopfighting && $count > 1)) && $session['user']['hitpoints'] > 0 && count($enemies) > 0) {
|
|
output("`2`bNext round:`b`n");
|
|
}
|
|
|
|
if (count($newenemies) > 0) {
|
|
$verynewenemies = array();
|
|
$alive = 0;
|
|
$fleeable = 0;
|
|
$leaderisdead = false;
|
|
foreach ($newenemies as $index => $badguy) {
|
|
if ($badguy['dead'] == true || $badguy['creaturehealth'] <= 0){
|
|
if (isset($badguy['essentialleader']) && $badguy['essentialleader'] == true) {
|
|
$defeat = false;
|
|
$victory = true;
|
|
$needtostopfighting = true;
|
|
$leaderisdead = true;
|
|
}
|
|
$badguy['istarget'] = false;
|
|
// We'll either add the experience right away or store it in a seperate array.
|
|
// If through any script enemies are added during the fight, the amount of
|
|
// experience would stay the same
|
|
// We'll also check if the user is actually alive. If we didn't, we would hand out
|
|
// experience for graveyard fights.
|
|
if (getsetting("instantexp",false) == true && $session['user']['alive'] && $options['type'] != "pvp" && $options['type'] != "train") {
|
|
if (!isset($badguy['expgained']) || $badguy['expgained'] == false) {
|
|
if (!isset($badguy['creatureexp'])) $badguy['creatureexp'] = 0;
|
|
$session['user']['experience'] += round($badguy['creatureexp']/count($newenemies));
|
|
output("`#You receive `^%s`# experience!`n`0",round($badguy['creatureexp']/count($newenemies)));
|
|
$options['experience'][$index] = $badguy['creatureexp'];
|
|
$options['experiencegained'][$index] = round($badguy['creatureexp']/count($newenemies));
|
|
$badguy['expgained']=true;
|
|
}
|
|
} else {
|
|
$options['experience'][$index] = $badguy['creatureexp'];
|
|
}
|
|
}else{
|
|
$alive++;
|
|
if (isset($badguy['fleesifalone']) && $badguy['fleesifalone'] == true) $fleeable++;
|
|
if ($session['user']['hitpoints']<=0){
|
|
$defeat=true;
|
|
$victory=false;
|
|
break;
|
|
}else if(!$leaderisdead) {
|
|
$defeat=false;
|
|
$victory=false;
|
|
}
|
|
}
|
|
$verynewenemies[$index] = $badguy;
|
|
}
|
|
$enemiesflown = false;
|
|
if ($alive == $fleeable && $session['user']['hitpoints'] > 0) {
|
|
$defeat=false;
|
|
$victory=true;
|
|
$enemiesflown=true;
|
|
$needtostopfighting=true;
|
|
}
|
|
if (getsetting("instantexp",false) == true) {
|
|
$newenemies = $verynewenemies;
|
|
}
|
|
}
|
|
if ($alive == 0) {
|
|
$defeat=false;
|
|
$victory=true;
|
|
$needtostopfighting=true;
|
|
}
|
|
if ($count != -1) $count--;
|
|
if ($needtostopfighting) $count = 0;
|
|
if ($enemiesflown) {
|
|
foreach ($newenemies as $index => $badguy) {
|
|
if (isset($badguy['fleesifalone']) && $badguy['fleesifalone'] == true) {
|
|
if (is_array($badguy['fleesifalone'])) {
|
|
$msg = sprintf_translate($badguy['fleesifalone']);
|
|
$msg = substitute($msg);
|
|
output_notl($msg); //Here it's already translated
|
|
}else{
|
|
if ($badguy['fleesifalone'] === true) {
|
|
$msg = "{badguy} flees in panic.";
|
|
} else {
|
|
$msg = $badguy['fleesifalone'];
|
|
}
|
|
$msg = substitute_array("`5".$msg."`0`n");
|
|
output($msg);
|
|
}
|
|
} else {
|
|
$newenemies[$index]=$badguy;
|
|
}
|
|
}
|
|
} else if ($leaderisdead) {
|
|
if (is_array($badguy['essentialleader'])) {
|
|
$msg = sprintf_translate($badguy['essentialleader']);
|
|
$msg = substitute($msg);
|
|
output_notl($msg); //Here it's already translated
|
|
}else{
|
|
if ($badguy['essentialleader'] === true) {
|
|
$msg = "All other other enemies flee in panic as `^{badguy}`5 falls to the ground.";
|
|
} else {
|
|
$msg = $badguy['essentialleader'];
|
|
}
|
|
$msg = substitute_array("`5".$msg."`0`n");
|
|
output($msg);
|
|
}
|
|
}
|
|
if (is_array($newenemies)) {
|
|
$enemies = $newenemies;
|
|
}
|
|
$roundcounter = 0;
|
|
} while ($count > 0 || $count == -1);
|
|
$newenemies = $enemies;
|
|
} else {
|
|
$newenemies = $enemies;
|
|
}
|
|
|
|
$newenemies = autosettarget($newenemies);
|
|
|
|
if ($session['user']['hitpoints']>0 && count($newenemies)>0 && ($op=="fight" || $op=="run")){
|
|
output("`2`bEnd of Round:`b`n");
|
|
show_enemies($newenemies);
|
|
}
|
|
|
|
if ($session['user']['hitpoints'] < 0) $session['user']['hitpoints'] = 0;
|
|
|
|
if ($victory || $defeat){
|
|
// expire any buffs which cannot persist across fights and
|
|
// unsuspend any suspended buffs
|
|
unsuspend_buffs((($options['type']=='pvp')?"allowinpvp":false));
|
|
if ($session['user']['alive']) {
|
|
unsuspend_companions((($options['type']=='pvp')?"allowinpvp":false));
|
|
}
|
|
foreach($companions as $index => $companion) {
|
|
if(isset($companion['expireafterfight']) && $companion['expireafterfight']) {
|
|
unset($companions[$index]);
|
|
}
|
|
}
|
|
if (is_array($newenemies)) {
|
|
foreach ($newenemies as $index => $badguy) {
|
|
global $output;
|
|
$badguy['fightoutput'] = $output;
|
|
// legacy support. Will be removed in one of the following versions!
|
|
// Please update all modules, that use the following hook to use the
|
|
// $options array instead of the $args array for their code.
|
|
$badguy['type'] = $options['type'];
|
|
|
|
if ($victory) $badguy = modulehook("battle-victory",$badguy);
|
|
if ($defeat) $badguy = modulehook("battle-defeat",$badguy);
|
|
unset($badguy['fightoutput']);
|
|
}
|
|
}
|
|
}
|
|
$attackstack = array('enemies'=>$newenemies, 'options'=>$options);
|
|
$session['user']['badguy']=createstring($attackstack);
|
|
$session['user']['companions']=createstring($companions);
|
|
tlschema();
|
|
|
|
function battle_player_attacks() {
|
|
global $badguy,$enemies,$newenemies,$session,$creatureattack,$creatureatkmod, $beta;
|
|
global $creaturedefmod,$adjustment,$defmod,$atkmod,$compatkmod,$compdefmod,$buffset,$atk,$def,$options;
|
|
global $companions,$companion,$newcompanions,$roll,$count,$needtostopfighting;
|
|
|
|
$break = false;
|
|
$creaturedmg = $roll['creaturedmg'];
|
|
if ($options['type'] != "pvp") {
|
|
$creaturedmg = report_power_move($atk, $creaturedmg);
|
|
}
|
|
if ($creaturedmg==0){
|
|
output("`4You try to hit `^%s`4 but `\$MISS!`n",$badguy['creaturename']);
|
|
process_dmgshield($buffset['dmgshield'], 0);
|
|
process_lifetaps($buffset['lifetap'], 0);
|
|
}else if ($creaturedmg<0){
|
|
output("`4You try to hit `^%s`4 but are `\$RIPOSTED `4for `\$%s`4 points of damage!`n",$badguy['creaturename'],(0-$creaturedmg));
|
|
$badguy['diddamage']=1;
|
|
$session['user']['hitpoints']+=$creaturedmg;
|
|
if ($session['user']['hitpoints'] <= 0) {
|
|
$badguy['killedplayer'] = true;
|
|
$count = 1;
|
|
$break = true;
|
|
$needtostopfighting = true;
|
|
}
|
|
process_dmgshield($buffset['dmgshield'],-$creaturedmg);
|
|
process_lifetaps($buffset['lifetap'],$creaturedmg);
|
|
}else{
|
|
output("`4You hit `^%s`4 for `^%s`4 points of damage!`n",$badguy['creaturename'],$creaturedmg);
|
|
$badguy['creaturehealth']-=$creaturedmg;
|
|
process_dmgshield($buffset['dmgshield'],-$creaturedmg);
|
|
process_lifetaps($buffset['lifetap'],$creaturedmg);
|
|
}
|
|
if ($badguy['creaturehealth'] <= 0) {
|
|
$badguy['dead'] = true;
|
|
$badguy['istarget'] = false;
|
|
$count = 1;
|
|
$break = true;
|
|
}
|
|
return $break;
|
|
}
|
|
|
|
function battle_badguy_attacks() {
|
|
global $badguy,$enemies,$newenemies,$session,$creatureattack,$creatureatkmod, $beta;
|
|
global $creaturedefmod,$adjustment,$defmod,$atkmod,$compatkmod,$compdefmod,$buffset,$atk,$def,$options;
|
|
global $companions,$companion,$newcompanions,$roll,$count,$index,$defended,$needtostopfighting;
|
|
|
|
$break = false;
|
|
$selfdmg = $roll['selfdmg'];
|
|
if ($badguy['creaturehealth']<=0 && $session['user']['hitpoints']<=0){
|
|
$creaturedmg = 0;
|
|
$selfdmg = 0;
|
|
if ($badguy['creaturehealth'] <= 0) {
|
|
$badguy['dead'] = true;
|
|
$badguy['istarget'] = false;
|
|
$count = 1;
|
|
$needtostopfighting = true;
|
|
$break = true;
|
|
}
|
|
$newenemies[$index] = $badguy;
|
|
$newcompanions = $companions;
|
|
$break = true;
|
|
}else{
|
|
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0 && $badguy['istarget']){
|
|
if (is_array($companions)) {
|
|
foreach ($companions as $name=>$companion) {
|
|
if ($companion['hitpoints'] > 0) {
|
|
$buffer = report_companion_move($companion, "defend");
|
|
if ($buffer !== false) {
|
|
$newcompanions[$name] = $buffer;
|
|
unset($buffer);
|
|
} else {
|
|
unset($companion);
|
|
unset($newcompanions[$name]);
|
|
}
|
|
} else {
|
|
$newcompanions[$name] = $companion;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$newcompanions = $companions;
|
|
}
|
|
$companions = $newcompanions;
|
|
if ($defended == false) {
|
|
if ($selfdmg==0){
|
|
output("`^%s`4 tries to hit you but `^MISSES!`n",$badguy['creaturename']);
|
|
process_dmgshield($buffset['dmgshield'], 0);
|
|
process_lifetaps($buffset['lifetap'], 0);
|
|
}else if ($selfdmg<0){
|
|
output("`^%s`4 tries to hit you but you `^RIPOSTE`4 for `^%s`4 points of damage!`n",$badguy['creaturename'],(0-$selfdmg));
|
|
$badguy['creaturehealth']+=$selfdmg;
|
|
process_lifetaps($buffset['lifetap'], -$selfdmg);
|
|
process_dmgshield($buffset['dmgshield'], $selfdmg);
|
|
}else{
|
|
output("`^%s`4 hits you for `\$%s`4 points of damage!`n",$badguy['creaturename'],$selfdmg);
|
|
$session['user']['hitpoints']-=$selfdmg;
|
|
if ($session['user']['hitpoints'] <= 0) {
|
|
$badguy['killedplayer'] = true;
|
|
$count = 1;
|
|
}
|
|
process_dmgshield($buffset['dmgshield'], $selfdmg);
|
|
process_lifetaps($buffset['lifetap'], -$selfdmg);
|
|
$badguy['diddamage']=1;
|
|
}
|
|
}
|
|
if ($badguy['creaturehealth'] <= 0) {
|
|
$badguy['dead'] = true;
|
|
$badguy['istarget'] = false;
|
|
$count = 1;
|
|
$break = true;
|
|
}
|
|
}
|
|
return $break;
|
|
}
|
|
?>
|