208 lines
8.0 KiB
PHP
Executable File
208 lines
8.0 KiB
PHP
Executable File
<?php
|
|
// addnews ready
|
|
// translator ready
|
|
// mail ready
|
|
require_once("lib/taunt.php");
|
|
require_once("lib/e_rand.php");
|
|
require_once("lib/pageparts.php");
|
|
require_once("lib/output.php");
|
|
|
|
function forestvictory($enemies,$denyflawless=false){
|
|
global $session, $options;
|
|
$diddamage = false;
|
|
$creaturelevel = 0;
|
|
$gold = 0;
|
|
$exp = 0;
|
|
$expbonus = 0;
|
|
$count = 0;
|
|
$totalbackup = 0;
|
|
foreach ($enemies as $index=>$badguy) {
|
|
if (getsetting("dropmingold",0)){
|
|
$badguy['creaturegold']= e_rand(round($badguy['creaturegold']/4), round(3*$badguy['creaturegold']/4));
|
|
}else{
|
|
$badguy['creaturegold']=e_rand(0,$badguy['creaturegold']);
|
|
}
|
|
$gold += $badguy['creaturegold'];
|
|
tlschema("battle");
|
|
if(isset($badguy['creaturelose'])) $msg = translate_inline($badguy['creaturelose']);
|
|
tlschema();
|
|
if(isset($msg)) output_notl("`b`&%s`0`b`n",$msg);
|
|
output("`b`\$You have slain %s!`0`b`n",$badguy['creaturename']);
|
|
$count++;
|
|
// If any creature did damage, we have no flawless fight. Easy as that.
|
|
if ($badguy['diddamage'] == 1) {
|
|
$diddamage = true;
|
|
}
|
|
$creaturelevel = max($creaturelevel, $badguy['creaturelevel']);
|
|
if (!$denyflawless && isset($badguy['denyflawless']) && $badguy['denyflawless']>"") {
|
|
$denyflawless = $badguy['denyflawless'];
|
|
}
|
|
$expbonus += round(($badguy['creatureexp'] * (1 + .25 * ($badguy['creaturelevel']-$session['user']['level']))) - $badguy['creatureexp'],0);
|
|
}
|
|
$multibonus = $count>1?1:0;
|
|
$expbonus += $session['user']['dragonkills'] * $session['user']['level'] * $multibonus;
|
|
$totalexp = 0;
|
|
foreach ($options['experience'] as $index=>$experience) {
|
|
$totalexp += $experience;
|
|
}
|
|
// We now have the total experience which should have been gained during the fight.
|
|
// Now we will calculate the average exp per enemy.
|
|
$exp = round($totalexp / $count);
|
|
$gold = e_rand(round($gold/$count),round($gold/$count)*round(($count+1)*pow(1.2, $count-1),0));
|
|
$expbonus = round ($expbonus/$count,0);
|
|
|
|
if ($gold) {
|
|
output("`#You receive `^%s`# gold!`n",$gold);
|
|
debuglog("received gold for slaying a monster.",false,false,"forestwin",$badguy['creaturegold']);
|
|
}
|
|
// No gem hunters allowed!
|
|
$args = modulehook("alter-gemchance", array("chance"=>getsetting("forestgemchance", 25)));
|
|
$gemchances = $args['chance'];
|
|
if ($session['user']['level'] < 15 && e_rand(1,$gemchances) == 1) {
|
|
output("`&You find A GEM!`n`#");
|
|
$session['user']['gems']++;
|
|
debuglog("found gem when slaying a monster.",false,false,"forestwingem",1);
|
|
}
|
|
if (getsetting("instantexp",false) == true) {
|
|
$expgained = 0;
|
|
foreach ($options['experiencegained'] as $index=>$experience) {
|
|
$expgained += $experience;
|
|
}
|
|
|
|
$diff = $expgained - $exp;
|
|
$expbonus += $diff;
|
|
if (floor($exp + $expbonus) < 0) {
|
|
$expbonus = -$exp+1;
|
|
}
|
|
if ($expbonus>0){
|
|
$expbonus = round($expbonus * pow(1+(getsetting("addexp", 5)/100), $count-1),0);
|
|
output("`#***Because of the difficult nature of this fight, you are awarded an additional `^%s`# experience! `n",$expbonus);
|
|
} elseif ($expbonus<0){
|
|
output("`#***Because of the simplistic nature of this fight, you are penalized `^%s`# experience! `n",abs($expbonus));
|
|
}
|
|
if (count($enemies) > 1) {
|
|
output("During this fight you received `^%s`# total experience!`n`0",$exp+$expbonus);
|
|
}
|
|
$session['user']['experience']+=$expbonus;
|
|
} else {
|
|
if (floor($exp + $expbonus) < 0) {
|
|
$expbonus = -$exp+1;
|
|
}
|
|
if ($expbonus>0){
|
|
$expbonus = round($expbonus * pow(1+(getsetting("addexp", 5)/100), $count-1),0);
|
|
output("`#***Because of the difficult nature of this fight, you are awarded an additional `^%s`# experience! `n(%s + %s = %s) ",$expbonus,$exp,abs($expbonus),$exp+$expbonus);
|
|
} elseif ($expbonus<0){
|
|
output("`#***Because of the simplistic nature of this fight, you are penalized `^%s`# experience! `n(%s - %s = %s) ",abs($expbonus),$exp,abs($expbonus),$exp+$expbonus);
|
|
}
|
|
output("You receive `^%s`# total experience!`n`0",$exp+$expbonus);
|
|
$session['user']['experience']+=($exp+$expbonus);
|
|
}
|
|
$session['user']['gold']+=$gold;
|
|
// Increase the level for each enemy by one half, so flawless fights can be achieved for
|
|
// fighting multiple low-level critters
|
|
if (!$creaturelevel)
|
|
$creaturelevel = $badguy['creaturelevel'];
|
|
else
|
|
$creaturelevel+=(0.5*($count-1));
|
|
|
|
if (!$diddamage) {
|
|
output("`c`b`&~~ Flawless Fight! ~~`0`b`c");
|
|
if ($denyflawless){
|
|
output("`c`\$%s`0`c", translate_inline($denyflawless));
|
|
}elseif ($session['user']['level']<=$creaturelevel){
|
|
output("`c`b`\$You receive an extra turn!`0`b`c`n");
|
|
$session['user']['turns']++;
|
|
}else{
|
|
output("`c`\$A more difficult fight would have yielded an extra turn.`0`c`n");
|
|
}
|
|
}
|
|
if ($session['user']['hitpoints'] <= 0) {
|
|
output("With your dying breath you spy a small stand of mushrooms off to the side.");
|
|
output("You recognize them as some of the ones that the healer had drying in the hut and taking a chance, cram a handful into your mouth.");
|
|
output("Even raw they have some restorative properties.`n");
|
|
$session['user']['hitpoints'] = 1;
|
|
}
|
|
}
|
|
|
|
function forestdefeat($enemies,$where="in the forest"){
|
|
global $session;
|
|
$percent=getsetting('forestexploss',10);
|
|
addnav("Daily news","news.php");
|
|
$names = array();
|
|
$killer = false;
|
|
foreach ($enemies as $index=>$badguy) {
|
|
$names[] = $badguy['creaturename'];
|
|
if (isset($badguy['killedplayer']) && $badguy['killedplayer'] == true) $killer = $badguy;
|
|
if (isset($badguy['creaturewin']) && $badguy['creaturewin'] > "") {
|
|
$msg = translate_inline($badguy['creaturewin'],"battle");
|
|
output_notl("`b`&%s`0`b`n",$msg);
|
|
}
|
|
}
|
|
if($killer) $badguy = $killer;
|
|
elseif(!isset($badguy['creaturename'])) $badguy = $enemies[0];
|
|
if (count($names) > 1) $lastname = array_pop($names);
|
|
$enemystring = join(", ", $names);
|
|
$and = translate_inline("and");
|
|
if (isset($lastname) && $lastname > "") $enemystring = "$enemystring $and $lastname";
|
|
$taunt = select_taunt_array();
|
|
if (is_array($where)) {
|
|
$where=sprintf_translate($where);
|
|
} else {
|
|
$where=translate_inline($where);
|
|
}
|
|
addnews("`%%s`5 has been slain %s by %s.`n%s",$session['user']['name'],$where,$badguy['creaturename'],$taunt);
|
|
$session['user']['alive']=false;
|
|
debuglog("lost gold when they were slain $where",false,false,"forestlose",-$session['user']['gold']);
|
|
$session['user']['gold']=0;
|
|
$session['user']['hitpoints']=0;
|
|
$session['user']['experience']=round($session['user']['experience']*(1-($percent/100)),0);
|
|
output("`4All gold on hand has been lost!`n");
|
|
output("`4%s %% of experience has been lost!`b`n",$percent);
|
|
output("You may begin fighting again tomorrow.");
|
|
page_footer();
|
|
}
|
|
|
|
function buffbadguy($badguy){
|
|
global $session;
|
|
static $dk = false; // This will save us a lot of trouble when going through
|
|
// this function more than once...
|
|
if ($dk === false) {
|
|
//make badguys get harder as you advance in dragon kills.
|
|
$dk = 0;
|
|
while(list($key, $val)=each($session['user']['dragonpoints'])) {
|
|
if ($val=="at" || $val=="de") $dk++;
|
|
}
|
|
$dk += (int)(($session['user']['maxhitpoints']-($session['user']['level']*10))/5);
|
|
// How many of the dk points should actually be used.
|
|
// We want to add .05 for every 100 dragonkills.
|
|
$add = ($session['user']['dragonkills']/100)*.05;
|
|
$dk = round($dk * (.25 + $add));
|
|
}
|
|
|
|
$expflux = round($badguy['creatureexp']/10,0);
|
|
$expflux = e_rand(-$expflux,$expflux);
|
|
$badguy['creatureexp']+=$expflux;
|
|
|
|
$atkflux = e_rand(0, $dk);
|
|
$defflux = e_rand(0, ($dk-$atkflux));
|
|
|
|
$hpflux = ($dk - ($atkflux+$defflux)) * 5;
|
|
$badguy['creatureattack']+=$atkflux;
|
|
$badguy['creaturedefense']+=$defflux;
|
|
$badguy['creaturehealth']+=$hpflux;
|
|
|
|
if (getsetting("disablebonuses", 1)) {
|
|
$bonus = 1 + .03*($atkflux+$defflux) + .001*$hpflux;
|
|
$badguy['creaturegold'] = round($badguy['creaturegold']*$bonus, 0);
|
|
$badguy['creatureexp'] = round($badguy['creatureexp']*$bonus, 0);
|
|
}
|
|
|
|
$badguy = modulehook("creatureencounter",$badguy);
|
|
debug("DEBUG: $dk modification points total.");
|
|
debug("DEBUG: +$atkflux allocated to attack.");
|
|
debug("DEBUG: +$defflux allocated to defense.");
|
|
debug("DEBUG: +".($hpflux/5)."*5 to hitpoints.");
|
|
return modulehook("buffbadguy",$badguy);
|
|
}
|
|
?>
|