$buff)
{
if (isset($buff['startmsg']))
{
$msg = $buff['startmsg'];
$msg = str_replace('{badguy}', $badguy['creaturename'], $msg);
$out .= '`%'.$msg.'`0';
unset($session['bufflist'][$key]['startmsg']);
}
//Ist der gewünschte Bufftyp im aktuell bearbeiteten Buff enthalten? (roundstart, offense, defense)
$activate = strpos($buff['activate'], $tag);
if ($activate !== false)
{
$activate = true;
}
// handle strpos == 0;
// If this should activate now and it hasn't already activated,
// do the round message and mark it.
if ($activate && !$buff['used'])
{
// mark it used.
$session['bufflist'][$key]['used'] = 1;
// if it has a 'round message', run it.
if (isset($buff['roundmsg']))
{
$msg = $buff['roundmsg'];
$msg = str_replace('{badguy}', $badguy['creaturename'], $msg);
$out .= '`)'.$msg.'`0`n';
}
}
// Now, calculate any effects and run them if needed.
if (isset($buff['invulnerable']))
{
$result['invulnerable'] = 1;
}
if (isset($buff['atkmod']))
{
$result['atkmod'] *= $buff['atkmod'];
}
if (isset($buff['badguyatkmod']))
{
$result['badguyatkmod'] *= $buff['badguyatkmod'];
}
if (isset($buff['defmod']))
{
$result['defmod'] *= $buff['defmod'];
}
if (isset($buff['badguydefmod']))
{
$result['badguydefmod'] *= $buff['badguydefmod'];
}
if (isset($buff['dmgmod']))
{
$result['dmgmod'] *= $buff['dmgmod'];
}
if (isset($buff['badguydmgmod']))
{
$result['badguydmgmod'] *= $buff['badguydmgmod'];
}
if (!empty($buff['lifetap']))
{
$result['lifetap'][] = $buff;
//array_push($result['lifetap'], $buff);
}
if (isset($buff['damageshield']) && $buff['damageshield'] != 1)
{
$result['dmgshield'][] = $buff;
//array_push($result['dmgshield'], $buff);
}
if (!empty($buff['regen']) && $activate)
{
// Wenn PHP-Code
if(is_string($buff['regen']) && strlen($buff['regen']) > 0) {
$buff['regen'] = stripslashes($buff['regen']);
eval("\$buff['regen'] = $buff[regen];");
}
$hptoregen = (int)$buff['regen'];
$hpdiff = $session['user']['maxhitpoints'] - $session['user']['hitpoints'];
// Don't regen if we are above max hp
$session['user']['hitpoints'] = min($session['user']['maxhitpoints'] , $session['user']['hitpoints'] + $hptoregen);
/* Ichdenke die obige Linie ersetzt die folgenden komplett, oder?
if ($hpdiff < 0)
{
$hpdiff = 0;
}
if ($hpdiff < $hptoregen)
{
$hptoregen = $hpdiff;
}
$session['user']['hitpoints'] += $hptoregen;
*/
// Now, take abs value just incase this was a damaging buff
$hptoregen = abs($hptoregen);
if ($hptoregen == 0)
{
$msg = $buff['effectnodmgmsg'];
}
else
{
$msg = $buff['effectmsg'];
}
$msg = str_replace('{badguy}', $badguy['creaturename'], $msg);
$msg = str_replace('{damage}', $hptoregen, $msg);
$out .= '`)'.$msg.'`0`n';
}
if (!empty($buff['minioncount']) && $activate)
{
$who = -1;
if (isset($buff['maxbadguydamage']) && $buff['maxbadguydamage'] != '')
{
if (isset($buff['maxbadguydamage']) && $buff['maxbadguydamage'] != '')
{
$buff['maxbadguydamage'] = stripslashes($buff['maxbadguydamage']);
eval("\$buff['maxbadguydamage'] = $buff[maxbadguydamage];");
}
$max = $buff['maxbadguydamage'];
if (isset($buff['minbadguydamage']) && $buff['minbadguydamage'] != '')
{
$buff['minbadguydamage'] = stripslashes($buff['minbadguydamage']);
eval("\$buff['minbadguydamage'] = $buff[minbadguydamage];");
}
$min = $buff['minbadguydamage'];
$who = 0;
}
else
{
$max = $buff['maxgoodguydamage'];
$min = $buff['mingoodguydamage'];
$who = 1;
}
for ($i = 0; $who >= 0 && $i < $buff['minioncount']; $i++)
{
$damage = e_rand($min, $max);
if ($who == 0)
{
$badguy['creaturehealth'] -= $damage;
}
else if ($who == 1)
{
$session['user']['hitpoints'] -= $damage;
}
if ($damage < 0)
{
$msg = $buff['effectfailmsg'];
}
else if ($damage == 0)
{
$msg = $buff['effectnodmgmsg'];
}
else if ($damage > 0)
{
$msg = $buff['effectmsg'];
}
if ($msg>'')
{
$msg = str_replace('{badguy}', $badguy['creaturename'], $msg);
$msg = str_replace('{goodguy}', $session['user']['name'], $msg);
$msg = str_replace('{damage}', $damage, $msg);
$out .= '`)'.$msg.'`0`n';
}
}
}
}
}
return $result;
}
function process_lifetaps($ltaps, $damage)
{
global $session, $badguy, $out;
foreach ($ltaps as $key=>$buff)
{
$healhp = $session['user']['maxhitpoints'] - $session['user']['hitpoints'];
if ($healhp < 0)
{
$healhp = 0;
}
if ($healhp == 0)
{
$msg = $buff['effectnodmgmsg'];
}
else
{
if ($healhp > $damage * $buff['lifetap'])
{
$healhp = $damage * $buff['lifetap'];
}
if ($healhp < 0)
{
$healhp = 0;
}
if ($damage > 0)
{
$msg = $buff['effectmsg'];
}
elseif ($damage == 0)
{
$msg = $buff['effectfailmsg'];
}
elseif ($damage < 0)
{
$msg = $buff['effectfailmsg'];
}
}
$session['user']['hitpoints'] += $healhp;
$msg = str_replace('{badguy}',$badguy['creaturename'], $msg);
$msg = str_replace('{damage}',$healhp, $msg);
if (strlen($msg) > 0)
{
$out .= '`)'.$msg.'`n';
}
}
}
/**
* Bearbeitet Buffs die Schaden absorbieren
*
* @param array $dshield Die Buffs die Schaden absorbieren
* @param int $damage zugefügter Schaden
*/
function process_dmgshield($dshield, $damage)
{
global $session, $badguy, $out;
foreach ($dshield as $key=>$buff)
{
$realdamage = $damage * $buff['damageshield'];
if ($realdamage < 0)
{
$realdamage = 0;
}
if ($realdamage > 0)
{
$msg = $buff['effectmsg'];
}
else if ($realdamage == 0)
{
$msg = $buff['effectnodmgmsg'];
}
else if ($realdamage < 0)
{
$msg = $buff['effectfailmsg'];
}
$badguy['creaturehealth'] -= $realdamage;
$msg = str_replace('{badguy}',$badguy['creaturename'], $msg);
$msg = str_replace('{damage}',$realdamage, $msg);
if ($msg != '')
{
$out .= '`)'.$msg.'`n';
}
}
}
/**
* Lösche Buffs aus der Session die keine Runden mehr aufweisen
*/
function expire_buffs()
{
global $session, $badguy, $out;
if(is_array($session['bufflist']))
{
foreach($session['bufflist'] as $key => $buff)
{
if ($buff['used'])
{
$session['bufflist'][$key]['used'] = 0;
$session['bufflist'][$key]['rounds']--;
if ($session['bufflist'][$key]['rounds'] <= 0)
{
if ($buff['wearoff'])
{
$msg = $buff['wearoff'];
$msg = str_replace('{badguy}', $badguy['creaturename'], $msg);
$out .= '`)'.$msg.'`n';
}
unset($session['bufflist'][$key]);
}
}
}
}
}
///
/// Ende Funktionen
///
//Gegner laden
$badguy = unserialize($session['user']['badguy']);
if ($badguy['creaturelevel']==0)
{
$adjustment = 0;
}
else
{
$adjustment = ($session['user']['level']/$badguy['creaturelevel']);
}
if ($badguy['pvp'])
{
$adjustment=1;
}
$out = '';
$hp_name = ($session['user']['alive'])?'Lebenspunkte':'Seelenpunkte';
/////////////
// FIGHT
if ($_GET['op']=='fight')
{
// spells
if ($_GET['skill']=='zauber')
{
$id = (int)$_GET['itemid'];
if($id == 0)
{
$out .= 'Merkwürdig.. Der Zauber scheint sich in Luft aufgelöst zu haben. Immer diese Billigware..';
}
else
{
$item = item_get(' id= '.$id );
if (!empty($item['battle_hook']))
{
item_load_hook($item['battle_hook'],'battle',$item);
}
if(!$item_hook_info['hookstop']) {
if($item['buff1'] > 0) {$list .= ','.$item['buff1'];}
if($item['buff2'] > 0) {$list .= ','.$item['buff2'];}
item_set_buffs( ITEM_BUFF_FIGHT , $list );
$item['gold']=round($item['gold']*($item['value1']/($item['value2']+1)));
$item['gems']=round($item['gems']*($item['value1']/($item['value2']+1)));
$item['value1']--;
if ($item['value1']<=0 && $item['hvalue']<=0){
//Fehler, ID ist manchmal leer
// ID darf nicht leer sein! Wenn die ID leer ist, läuft irgendwas anderes schief
//if(!empty($item['id']))
//{
item_delete(' id='.(int)$item['id']);
//}
}
else{
item_set(' id='.$item['id'], $item);
}
}
}
}
// end spells
if ($_GET['skill']=='godmode')
{
$session['bufflist']['godmode']=array('name'=>'`&GOD MODE',
'rounds'=>1,
'wearoff'=>'Du bist wieder sterblich.',
'atkmod'=>25,
'defmod'=>25,
'invulnerable'=>1,
'startmsg'=>'`n`&Du fühlst dich gottgleich`n`n',
'activate'=>'roundstart'
);
}
elseif (file_exists('./module/specialty_modules/specialty_'.$_GET['skill'].'.php'))
{
require_once('./module/specialty_modules/specialty_'.$_GET['skill'].'.php');
$f_info = 'specialty_'.$_GET['skill'].'_info';
$f_info();
$f_run = 'specialty_'.$_GET['skill'].'_run';
$f_run('buff');
}
}
// end if fight
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
$out .= '`c`b`$~ ~ ~ Kampf ~ ~ ~`0`b`c
`n`@Du hast den Gegner `^'.$badguy['creaturename'].'`@ entdeckt, der sich mit seiner Waffe `%'.$badguy['creatureweapon'].'`@ auf dich stürzt!`0`n`n';
if ($session['user']['alive'])
{
$out .= '`2Level: `6'.$badguy['creaturelevel'].'`0`n';
}
else
{
$out .= '`2Level: `6Untoter`0`n';
}
//kleines Extra by Takehon: Lebenspunkteanzeige mit Grafbar, dynamisch, immer 150px breit
if ($session['user']['prefs']['showhpbar']==true)
{
$hp_value=round($session['user']['hitpoints']);
$hp_maxvalue=($session['user']['alive']) ? max($session['user']['maxhitpoints'],$session['user']['hitpoints']) : ($session['user']['level'] * 5 + 50);
$maxwert=max($badguy['creaturehealth'],$hp_maxvalue);
$faktor=150/$maxwert;
$out .= "`b`2Beginn der Runde:`0`b
`n
| `2".$badguy['creaturename']."`2's ".$hp_name.": `6".round($badguy['creaturehealth'])." `0 |
".grafbar($hp_maxvalue,$badguy['creaturehealth'],round($maxwert*$faktor),10,'badguyhealth_start')." |
| `2DEINE ".$hp_name.": `6".round($hp_value)." `0 |
".grafbar($hp_maxvalue,$hp_value,round($hp_maxvalue*$faktor),10,'yourhealth_start')." |
`n";
}
else
{
$out .= '`2`bBeginn der Runde:`b`n
`2'.$badguy['creaturename'].'`2\'s '.$hp_name.': `6'.round($badguy['creaturehealth']).' `0`n
`2DEINE '.$hp_name.': `6'.round($session['user']['hitpoints']).'`0`n';
}
}
//Alle Buffs werden auf "unbenutzt" gesetzt
if(is_array($session['bufflist']))
{
foreach($session['bufflist'] as $key => $buff)
{
$session['bufflist'][$key]['used'] = 0;
}
}
if ($badguy['pvp'] &&
count($session['bufflist'])>0 &&
is_array($session['bufflist']))
{
if (strlen($session['user']['buffbackup'])==0)
{
$out .= '`&Die Götter verbieten den Einsatz jeder Spezialfähigkeit!`n';
$session['user']['buffbackup']=serialize($session['bufflist']);
$session['bufflist']=array();
if ($_GET['bg']==1)
{
$session['bufflist']['bodyguard'] = array('startmsg'=>'`n`$'.$badguy['creaturename'].'
ist durch einen Leibwächter geschützt!`n`n',
'name'=>'`&Leibwächter',
'rounds'=>5,
'wearoff'=>'Der Leibwächter scheint eingeschlafen zu sein.',
'minioncount'=>1,
'maxgoodguydamage'=> round($session['user']['level']>>1,0) +1,
'effectmsg'=>'`7{badguy}\'s Leibwächter trifft dich mit `${damage}`7 Schadenspunkten.',
'effectnodmgmsg'=>'`7{badguy}\'s Leibwächter versucht dich zu treffen, aber `$TRIFFT NICHT`7!',
'activate'=>'roundstart'
);
}
elseif ($_GET['bg']==2)
{
$session['bufflist']['heimvorteil'] = array('startmsg'=>'`n`$'.$badguy['creaturename'].'
`$hat einen gewaltigen Heimvorteil!`n`n',
'name'=>'`$Nachteil',
'rounds'=>20,
'wearoff'=>'Der Heimvorteil ist deinem Gegner nicht mehr von Vorteil.',
'minioncount'=>1,
'maxgoodguydamage'=> round($session['user']['level']+5),
'effectmsg'=>'`7Durch {badguy}`7\'s Heimvorteil bekommst du zusätzlich `${damage}`7 Schadenspunkte.',
'effectnodmgmsg'=>'',
'activate'=>'roundstart'
);
}
// Festung
elseif ($_GET['bg']==3)
{
$session['bufflist']['festung'] = array('startmsg'=>'`n`$'.$badguy['creaturename'].'
`$hat in seiner Festung dir gegenüber einen gewaltigen Vorteil!`n`n',
'name'=>'`$Verteidigungsanlagen',
'rounds'=>50,
'wearoff'=>'Die Festung kann deinem Gegner nun auch nicht mehr helfen.',
'minioncount'=>2,
'maxgoodguydamage'=> round($session['user']['level']),
'effectmsg'=>'`7Durch die Verteidigungsanlagen bekommst du zusätzlich `${damage}`7 Schadenspunkte.',
'effectnodmgmsg'=>'',
'activate'=>'roundstart'
);
}
elseif ($_GET['bg']==4)
// Turm
{
$session['bufflist']['turm'] = array('startmsg'=>'`n`$'.$badguy['creaturename'].'
`$hat in seinem Turm dir gegenüber einen enormen Vorteil!`n`n',
'name'=>'`$Gute Verteidigungsanlagen',
'rounds'=>75,
'wearoff'=>'Der Turm kann deinen Gegner nun auch nicht mehr schützen.',
'minioncount'=>3,
'maxgoodguydamage'=> round($session['user']['level']/1,2)+1,
'effectmsg'=>'`7Durch die Verteidigungsanlagen bekommst du zusätzlich `${damage}`7 Schadenspunkte.',
'effectnodmgmsg'=>'',
'activate'=>'roundstart'
);
}
elseif ($_GET['bg']==5)
// Burg
{
$session['bufflist']['burg'] = array('startmsg'=>'`n`$'.$badguy['creaturename'].'
`$hat in seiner Burg dir gegenüber einen extremen Vorteil!`n`n',
'name'=>'`$Paranoid gute Verteidigungsanlagen',
'rounds'=>100,
'wearoff'=>'Die Burg kann deinem Gegner nun auch nicht mehr helfen.',
'minioncount'=>4,
'maxgoodguydamage'=> round($session['user']['level']/1,2)+1,
'effectmsg'=>'`7Durch die Verteidigungsanlagen bekommst du zusätzlich `${damage}`7 Schadenspunkte.',
'effectnodmgmsg'=>'',
'activate'=>'roundstart'
);
}
}
}
// Run the beginning of round buffs (this also calculates all modifiers)
// Alle $int_rounds_to_fight Kampfrunden abarbeiten
for ($int_rounds_to_fight; $int_rounds_to_fight > 0; $int_rounds_to_fight--)
{
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
//Wetterbeeinflussung
if ($session['user']['alive'] && $session['user']['buffbackup']=='')
{
if (e_rand(1,6)==2)
{
//Auswirkung des Wetters auf den User im Kampf abholen
$arr_battle_influence_buff = Weather::get_battle_influence_buff();
if(count($arr_battle_influence_buff) > 0)
{
$session['bufflist']['weather'] =& $arr_battle_influence_buff;
}
}
}
//Wetterbeeinflussung
// GILDENmod
if (is_array($guild_buffs))
{
$session['bufflist'] = array_merge($session['bufflist'],$guild_buffs);
}
// END Gildenmod
//Buffing am Rundenstart
$buffset = activate_buffs('roundstart');
$creaturedefmod = $buffset['badguydefmod'];
$creatureatkmod = $buffset['badguyatkmod'];
$atkmod = $buffset['atkmod'];
$defmod = $buffset['defmod'];
}
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
if ($badguy['pvp'])
{
$adjustedcreaturedefense = $badguy['creaturedefense'];
}
else
{
$adjustedcreaturedefense = ($creaturedefmod*$badguy['creaturedefense'] / ($adjustment*$adjustment));
}
$creatureattack = $badguy['creatureattack']*$creatureatkmod;
$adjustedselfdefense = ($session['user']['defence'] * $adjustment * $defmod);
// Wenn kein Schaden entsteht, irgendwann abbrechen: Sonst Endlosschleife
$int_iterations = 0;
while ($creaturedmg==0 && $selfdmg==0)
{
//---------------------------------
$atk = $session['user']['attack']*$atkmod;
if (e_rand(1,20)==1)
{
$atk*=3;
}
$patkroll = e_rand(0,$atk);
$catkroll = e_rand(0,$adjustedcreaturedefense);
$creaturedmg = 0-(int)($catkroll - $patkroll);
if ($creaturedmg<0)
{
//output("`#DEBUG: Initial (<0) creature damage $creaturedmg`n");
$creaturedmg = (int)($creaturedmg>>1);
//output("`#DEBUG: Modified (<0) creature damage $creaturedmg`n");
$creaturedmg = round($buffset['badguydmgmod']*$creaturedmg,0);
//output("`#DEBUG: Modified (<0) creature damage $creaturedmg`n");
}
if ($creaturedmg > 0)
{
//output("`#DEBUG: Initial (>0) creature damage $creaturedmg`n");
$creaturedmg = round($buffset['dmgmod']*$creaturedmg,0);
//output("`#DEBUG: Modified (>0) creature damage $creaturedmg`n");
}
//output("`#DEBUG: Attack score: $atk`n");
//output("`#DEBUG: Creature Defense Score: $adjustedcreaturedefense`n");
//output("`#DEBUG: Player Attack roll: $patkroll`n");
//output("`#DEBUG: Creature Defense roll: $catkroll`n");
//output("`#DEBUG: Final Creature Damage: $creaturedmg`n");
$pdefroll = e_rand(0,$adjustedselfdefense);
$catkroll = e_rand(0,$creatureattack);
$selfdmg = 0-(int)($pdefroll - $catkroll);
if ($selfdmg<0)
{
//output("`#DEBUG: Initial (<0) self damage $selfdmg`n");
$selfdmg=(int)($selfdmg>>1);
//output("`#DEBUG: Modified (<0) self damage $selfdmg`n");
$selfdmg = round($selfdmg*$buffset['dmgmod'], 0);
//output("`#DEBUG: Modified (<0) self damage $selfdmg`n");
}
if ($selfdmg > 0)
{
//output("`#DEBUG: Initial (>0) self damage $selfdmg`n");
$selfdmg = round($selfdmg*$buffset['badguydmgmod'], 0);
//output("`#DEBUG: Modified (>0) self damage $selfdmg`n");
}
//output("`#DEBUG: Defense score: $adjustedselfdefense`n");
//output("`#DEBUG: Creature Attack score: $creatureattack`n");
//output("`#DEBUG: Player Defense roll: $pdefroll`n");
//output("`#DEBUG: Creature Attack roll: $catkroll`n");
//output("`#DEBUG: Final Player damage: $selfdmg`n");
//output("`#DEBUG: count: $int_rounds_to_fight`n");
$int_iterations++;
if($int_iterations > 100)
{
break;
}
}
}
else
{
$creaturedmg=0;
$selfdmg=0;
$int_rounds_to_fight=0;
}
// Handle god mode's invulnerability
if ($buffset['invulnerable'])
{
$creaturedmg = abs($creaturedmg);
$selfdmg = -abs($selfdmg);
}
if (e_rand(1,3)==1 &&
($_GET['op']=='search' ||
($badguy['pvp'] && $_GET['act']=='attack')))
{
// Beginn: LP feststellen
$badguy['starthp'] = $badguy['creaturehealth'];
$badguy['actor_starthp'] = $session['user']['hitpoints'];
if ($badguy['pvp'])
{
$out .= '`b`^'.$badguy['creaturename'].'`$\'s Fähigkeiten erlauben deinem Gegner den ersten Schlag!`0`b`n`n';
}
else
{
$out .= '`b`^'.$badguy['creaturename'].'`$ überrascht dich und hat den ersten Schlag!`0`b`n`n';
}
$_GET['op']='run';
$surprised=true;
}
else
{
if ($_GET['op']=='search')
{
$out .= '`b`$Dein Können erlaubt dir den ersten Angriff!`0`b`n`n';
// Beginn: LP feststellen
$badguy['starthp'] = $badguy['creaturehealth'];
$badguy['actor_starthp'] = $session['user']['hitpoints'];
}
$surprised=false;
}
if ($_GET['op']=='fight' || $_GET['op']=='run')
{
if ($_GET['op']=='fight')
{
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
$buffset = activate_buffs('offense');
if ($atk > $session['user']['attack'])
{
if ($atk > $session['user']['attack']*3)
{
if ($atk>$session['user']['attack']*4)
{
$out .= '`&`bDu holst zu einem MEGA Powerschlag aus!!!`b`n';
}
else
{
$out .= '`&`bDu holst zu einem DOPPELTEN Powerschlag aus!!!`b`n';
}
}
else
{
if ($atk>($session['user']['attack']<<1))
{
$out .= '`&`bDu holst zu einem Powerschlag aus!!!`b`0`n';
}
elseif ($atk>$session['user']['attack']*1.25)
{
$out .= '`7`bDu holst zu einem kleinen Powerschlag aus!`b`0`n';
}
}
}
if ($creaturedmg==0)
{
$out .= '`4Du versuchst `^'.$badguy['creaturename'].'`4 zu treffen, aber `$TRIFFST NICHT!`n';
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_dmgshield($buffset['dmgshield'], 0);
}
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_lifetaps($buffset['lifetap'], 0);
}
}
else if ($creaturedmg<0)
{
$out .= '`4Du versuchst `^'.$badguy['creaturename'].'`4 zu treffen, aber der `$ABWEHRSCHLAG `4trifft dich mit `$'.(0-$creaturedmg).'`4 Schadenspunkten!`n';
$badguy['diddamage']=1;
$session['user']['hitpoints']+=$creaturedmg;
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_dmgshield($buffset['dmgshield'],-$creaturedmg);
}
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_lifetaps($buffset['lifetap'],$creaturedmg);
}
}
else
{
$out .= '`4Du triffst `^'.$badguy['creaturename'].'`4 mit `^'.$creaturedmg.'`4 Schadenspunkten!`n';
$badguy['creaturehealth']-=$creaturedmg;
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_dmgshield($buffset['dmgshield'],-$creaturedmg);
}
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_lifetaps($buffset['lifetap'],$creaturedmg);
}
}
if ($creaturedmg>$session['user']['punch'])
{
$session['user']['punch']=$creaturedmg;
$out .= '`@`b`c--- DAS WAR DEIN BISHER HÄRTESTER SCHLAG! ---`c`b`n';
}
}
}
else if ($_GET['op']=='run' && !$surprised)
{
$out .= '`4Du bist zu beschäftigt damit wegzulaufen wie ein feiger Hund und kannst nicht gegen `^'.$badguy['creaturename'].'`4 kämpfen.`n';
}
// 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)
{
$buffset = activate_buffs('defense');
if ($selfdmg==0)
{
$out .= '`^'.$badguy['creaturename'].'`4 versucht dich zu treffen, aber `$TRIFFT NICHT!`n';
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_dmgshield($buffset['dmgshield'], 0);
}
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_lifetaps($buffset['lifetap'], 0);
}
}
else if ($selfdmg<0)
{
$out .= '`^'.$badguy['creaturename'].'`4 versucht dich zu treffen, aber dein `^ABWEHRSCHLAG`4 trifft mit `^'.(0-$selfdmg).'`4 Schadenspunkten!`n';
$badguy['creaturehealth']+=$selfdmg;
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_lifetaps($buffset['lifetap'], -$selfdmg);
}
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_dmgshield($buffset['dmgshield'], $selfdmg);
}
}
else
{
$out .= '`^'.$badguy['creaturename'].'`4 trifft dich mit `$'.$selfdmg.'`4 Schadenspunkten!`n';
$session['user']['hitpoints']-=$selfdmg;
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_dmgshield($buffset['dmgshield'], $selfdmg);
}
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0)
{
process_lifetaps($buffset['lifetap'], -$selfdmg);
}
$badguy['diddamage']=1;
}
// Specialfähigkeiten des Badguy:
if ($badguy['creaturehealth']>0 && $session['user']['hitpoints']>0 &&
$badguy['starthp'] > 0 && $badguy['actor_starthp'] > 0 && !$badguy['pvp'] && !$badguy['acctid']
&& isset($badguy['special_func']) )
{
$badguy_hp_diff = round($badguy['creaturehealth']/$badguy['starthp'],2);
$actor_hp_diff = round($session['user']['hitpoints']/$badguy['actor_starthp'],2);
$diff = $badguy_hp_diff - $actor_hp_diff;
// Wenn es schlecht für Badguy ausschaut
if ($diff < 0)
{
// Feststellen, ob Spieler stark gebufft
// -2 wegen Multiplikatoren: 1 = Basis, zwei Werte hier
$buffs_actor = $atkmod + $defmod - 2;
$buffs_badguy = 2 - ($creatureatkmod + $creaturedefmod);
$buffs_actor += $buffs_badguy;
if ($buffs_actor > $badguy['special_minbuff'])
{
if ($badguy['special_uses'] > 0)
{
// Special einsetzen!
$badguy['special_func']( $badguy );
}
}
// END stark gebufft
}
// END Diff groß genug
}
// END Special vorhanden
}
}
expire_buffs();
$creaturedmg=0;
$selfdmg=0;
if ($int_rounds_to_fight>1 && $session['user']['hitpoints']>0 && $badguy['creaturehealth']>0)
{
$out .= '`2`bNächste Runde:`b`n';
}
if ($session['user']['hitpoints']<=0 || $badguy['creaturehealth']<=0)
{
$int_rounds_to_fight=-1;
}
if ($badguy['creaturehealth']<=0 && $session['user']['hitpoints']>0)
{
$victory=true;
$defeat=false;
$int_rounds_to_fight=0;
}
else
{
if ($session['user']['hitpoints']<=0)
{
$defeat=true;
$victory=false;
$int_rounds_to_fight=0;
}
else
{
$defeat=false;
$victory=false;
}
}
}
if ($session['user']['hitpoints']>0 &&
$badguy['creaturehealth']>0 &&
($_GET['op']=='fight' || $_GET['op']=='run'))
{
//kleines Extra by Takehon: Lebenspunkteanzeige mit Grafbar, dynamisch, immer 150px breit
if ($session['user']['prefs']['showhpbar']==true)
{
$hp_value=round($session['user']['hitpoints']);
$hp_maxvalue=($session['user']['alive'])?max($session['user']['maxhitpoints'],$session['user']['hitpoints']):($session['user']['level'] * 5 + 50);
$maxwert=max($badguy['creaturehealth'],$hp_maxvalue);
$faktor=150/$maxwert;
$out .= "`2`bEnde der Runde:`b`0
`n
| `2".$badguy['creaturename']."`2's ".$hp_name.": `6".round($badguy['creaturehealth'])." `0 |
".grafbar($hp_maxvalue,$badguy['creaturehealth'],round($maxwert*$faktor),10,'badguyhealth_end')." |
| `0`2DEINE ".$hp_name.": `6".round($hp_value)." `0 |
".grafbar($hp_maxvalue,$hp_value,round($hp_maxvalue*$faktor),10,'yourhealth_end')." |
`n";
}
else
{
$out .= '`2`bEnde der Runde:`b`n
`2'.$badguy['creaturename'].'`2\'s '.$hp_name.': `6'.round($badguy['creaturehealth']).' `0`n
`2DEINE '.$hp_name.': `6'.round($session['user']['hitpoints']).'`0`n';
}
}
if ($victory || $defeat)
{
// Unset the bodyguard buff at the end of the fight.
// Without this, the bodyguard persists *and* the older buffs are held
// off for a while! :/
if (isset($session['bufflist']['bodyguard']))
{
unset($session['bufflist']['bodyguard']);
}
if (isset($session['bufflist']['weather']))
{
unset($session['bufflist']['weather']);
}
if (isset($session['bufflist']['heimvorteil']))
{
unset($session['bufflist']['heimvorteil']);
}
if (isset($session['bufflist']['festung']))
{
unset($session['bufflist']['festung']);
}
if (isset($session['bufflist']['turm']))
{
unset($session['bufflist']['turm']);
}
if (isset($session['bufflist']['burg']))
{
unset($session['bufflist']['burg']);
}
if (!is_array($session['bufflist']) || count($session['bufflist']) <= 0)
{
if (!$badguy['maze'])
{
$session['bufflist'] = unserialize($session['user']['buffbackup']);
}
if (is_array($session['bufflist']))
{
if (count($session['bufflist'])>0 && $badguy['pvp'])
{
$out .= '`&Die Götter gewähren dir wieder alle deine speziellen Fähigkeiten.`n`n';
}
}
else
{
$session['bufflist'] = array();
}
}
if (!$badguy['maze'])
{
$session['user']['buffbackup'] = "";
}
$session['user']['badguy'] = '';
$session['user']['hitpoints']=max(0,$session['user']['hitpoints']);
}
else
{
$session['user']['badguy']=serialize($badguy);
}
output($out);
?>