311 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			311 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
<?php
 | 
						|
// addnews ready
 | 
						|
// translator ready
 | 
						|
// mail ready
 | 
						|
require_once("common.php");
 | 
						|
require_once("lib/forest.php");
 | 
						|
require_once("lib/fightnav.php");
 | 
						|
require_once("lib/http.php");
 | 
						|
require_once("lib/taunt.php");
 | 
						|
require_once("lib/events.php");
 | 
						|
require_once("lib/battle-skills.php");
 | 
						|
 | 
						|
tlschema("forest");
 | 
						|
 | 
						|
$fight = false;
 | 
						|
page_header("The Forest");
 | 
						|
$dontdisplayforestmessage=handle_event("forest");
 | 
						|
 | 
						|
$op = httpget("op");
 | 
						|
 | 
						|
$battle = false;
 | 
						|
 | 
						|
if ($op=="run"){
 | 
						|
	if (e_rand()%3 == 0){
 | 
						|
		output ("`c`b`&You have successfully fled your opponent!`0`b`c`n");
 | 
						|
		$op="";
 | 
						|
		httpset('op', "");
 | 
						|
		unsuspend_buffs();
 | 
						|
		foreach($companions as $index => $companion) {
 | 
						|
			if(isset($companion['expireafterfight']) && $companion['expireafterfight']) {
 | 
						|
				unset($companions[$index]);
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}else{
 | 
						|
		output("`c`b`\$You failed to flee your opponent!`0`b`c");
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
if ($op=="dragon"){
 | 
						|
	require_once("lib/partner.php");
 | 
						|
	addnav("Enter the cave","dragon.php");
 | 
						|
	addnav("Run away like a baby","inn.php?op=fleedragon");
 | 
						|
	output("`\$You approach the blackened entrance of a cave deep in the forest, though the trees are scorched to stumps for a hundred yards all around.");
 | 
						|
	output("A thin tendril of smoke escapes the roof of the cave's entrance, and is whisked away by a suddenly cold and brisk wind.");
 | 
						|
	output("The mouth of the cave lies up a dozen feet from the forest floor, set in the side of a cliff, with debris making a conical ramp to the opening.");
 | 
						|
	output("Stalactites and stalagmites near the entrance trigger your imagination to inspire thoughts that the opening is really the mouth of a great leech.`n`n");
 | 
						|
	output("You cautiously approach the entrance of the cave, and as you do, you hear, or perhaps feel a deep rumble that lasts thirty seconds or so, before silencing to a breeze of sulfur-air which wafts out of the cave.");
 | 
						|
	output("The sound starts again, and stops again in a regular rhythm.`n`n");
 | 
						|
	output("You clamber up the debris pile leading to the mouth of the cave, your feet crunching on the apparent remains of previous heroes, or perhaps hors d'oeuvres.`n`n");
 | 
						|
	output("Every instinct in your body wants to run, and run quickly, back to the warm inn, and the even warmer %s`\$.", get_partner());
 | 
						|
	output("What do you do?`0");
 | 
						|
	$session['user']['seendragon']=1;
 | 
						|
}
 | 
						|
 | 
						|
if ($op=="search"){
 | 
						|
	checkday();
 | 
						|
	if ($session['user']['turns']<=0){
 | 
						|
		output("`\$`bYou are too tired to search the forest any longer today.  Perhaps tomorrow you will have more energy.`b`0");
 | 
						|
		$op="";
 | 
						|
		httpset('op', "");
 | 
						|
	}else{
 | 
						|
		modulehook("forestsearch", array());
 | 
						|
		$args = array(
 | 
						|
			'soberval'=>0.9,
 | 
						|
			'sobermsg'=>"`&Faced with the prospect of death, you sober up a little.`n",
 | 
						|
			'schema'=>'forest');
 | 
						|
		modulehook("soberup", $args);
 | 
						|
		if (module_events("forest", getsetting("forestchance", 15)) != 0) {
 | 
						|
			if (!checknavs()) {
 | 
						|
				// If we're showing the forest, make sure to reset the special
 | 
						|
				// and the specialmisc
 | 
						|
				$session['user']['specialinc'] = "";
 | 
						|
				$session['user']['specialmisc'] = "";
 | 
						|
				$dontdisplayforestmessage=true;
 | 
						|
				$op = "";
 | 
						|
				httpset("op", "");
 | 
						|
			} else {
 | 
						|
				page_footer();
 | 
						|
			}
 | 
						|
		}else{
 | 
						|
			$session['user']['turns']--;
 | 
						|
			$battle=true;
 | 
						|
			if (e_rand(0,2)==1){
 | 
						|
				$plev = (e_rand(1,5)==1?1:0);
 | 
						|
				$nlev = (e_rand(1,3)==1?1:0);
 | 
						|
			}else{
 | 
						|
				$plev=0;
 | 
						|
				$nlev=0;
 | 
						|
			}
 | 
						|
			$type = httpget('type');
 | 
						|
			if ($type=="slum"){
 | 
						|
				$nlev++;
 | 
						|
				output("`\$You head for the section of forest you know to contain foes that you're a bit more comfortable with.`0`n");
 | 
						|
			}
 | 
						|
			if ($type=="thrill"){
 | 
						|
				$plev++;
 | 
						|
				output("`\$You head for the section of forest which contains creatures of your nightmares, hoping to find one of them injured.`0`n");
 | 
						|
			}
 | 
						|
			$extrabuff = 0;
 | 
						|
			if ($type=="suicide"){
 | 
						|
				if ($session['user']['level'] <= 7) {
 | 
						|
					$plev += 1;
 | 
						|
					$extrabuf = .25;
 | 
						|
				} elseif ($session['user']['level'] < 14) {
 | 
						|
					$plev+=2;
 | 
						|
					$extrabuf = 0;
 | 
						|
				} else {
 | 
						|
					$plev++;
 | 
						|
					$extrabuff = .4;
 | 
						|
				}
 | 
						|
				output("`\$You head for the section of forest which contains creatures of your nightmares, looking for the biggest and baddest ones there.`0`n");
 | 
						|
			}
 | 
						|
			$multi = 1;
 | 
						|
			$targetlevel = ($session['user']['level'] + $plev - $nlev );
 | 
						|
			$mintargetlevel = $targetlevel;
 | 
						|
			if (getsetting("multifightdk", 10) <= $session['user']['dragonkills']) {
 | 
						|
				if (e_rand(1,100) <= getsetting("multichance", 25)) {
 | 
						|
					$multi = e_rand(getsetting("multibasemin", 2),getsetting("multibasemax", 3));
 | 
						|
					if ($type=="slum") {
 | 
						|
						$multi -= e_rand(getsetting("multislummin", 0),getsetting("multislummax", 1));
 | 
						|
						if (e_rand(0,1)) {
 | 
						|
							$mintargetlevel = $targetlevel - 1;
 | 
						|
						} else {
 | 
						|
							$mintargetlevel = $targetlevel - 2;
 | 
						|
						}
 | 
						|
					} else if ($type == "thrill") {
 | 
						|
						$multi += e_rand(getsetting("multithrillmin", 1),getsetting("multithrillmax", 2));
 | 
						|
						if (e_rand(0,1)) {
 | 
						|
							$targetlevel++;
 | 
						|
							$mintargetlevel = $targetlevel - 1;
 | 
						|
						} else {
 | 
						|
							$mintargetlevel = $targetlevel-1;
 | 
						|
						}
 | 
						|
					} else if ($type == "suicide") {
 | 
						|
						$multi += e_rand(getsetting("multisuimin", 2),getsetting("multisuimax", 4));
 | 
						|
						if (e_rand(0,1)) {
 | 
						|
							$mintargetlevel = $targetlevel - 1;
 | 
						|
						} else {
 | 
						|
							$targetlevel++;
 | 
						|
							$mintargetlevel = $targetlevel - 1;
 | 
						|
						}
 | 
						|
					}
 | 
						|
					$multi = min($multi, $session['user']['level']);
 | 
						|
				}
 | 
						|
			} else {
 | 
						|
				$multi = 1;
 | 
						|
			}
 | 
						|
			$multi = max(1, $multi);
 | 
						|
			if ($targetlevel<1) $targetlevel=1;
 | 
						|
			if ($mintargetlevel<1) $mintargetlevel=1;
 | 
						|
			if ($mintargetlevel > $targetlevel) $mintargetlevel = $targetlevel;
 | 
						|
			if ($targetlevel>17) {
 | 
						|
				$multi += $targetlevel - 17;
 | 
						|
				$targetlevel=17;
 | 
						|
			}
 | 
						|
			debug("Creatures: $multi Targetlevel: $targetlevel Mintargetlevel: $mintargetlevel");
 | 
						|
			if ($multi > 1) {
 | 
						|
				$packofmonsters = (bool)(e_rand(0,5) == 0 && getsetting("allowpackofmonsters", true)); // true or false
 | 
						|
				switch($packofmonsters) {
 | 
						|
					case false:
 | 
						|
						$sql = "SELECT * FROM " . db_prefix("creatures") . " WHERE creaturelevel <= $targetlevel AND creaturelevel >= $mintargetlevel AND forest=1 ORDER BY rand(".e_rand().") LIMIT $multi";
 | 
						|
						break;
 | 
						|
					case true:
 | 
						|
						$sql = "SELECT * FROM " . db_prefix("creatures") . " WHERE creaturelevel <= $targetlevel AND creaturelevel >= $mintargetlevel AND forest=1 ORDER BY rand(".e_rand().") LIMIT 1";
 | 
						|
						break;
 | 
						|
				}
 | 
						|
			} else {
 | 
						|
				$sql = "SELECT * FROM " . db_prefix("creatures") . " WHERE creaturelevel <= $targetlevel AND creaturelevel >= $mintargetlevel AND forest=1 ORDER BY rand(".e_rand().") LIMIT 1";
 | 
						|
				$packofmonsters = 0;
 | 
						|
			}
 | 
						|
			$result = db_query($sql);
 | 
						|
			restore_buff_fields();
 | 
						|
			if (db_num_rows($result) == 0) {
 | 
						|
				// There is nothing in the database to challenge you, let's
 | 
						|
				// give you a doppleganger.
 | 
						|
				$badguy = array();
 | 
						|
				$badguy['creaturename']=
 | 
						|
					"An evil doppleganger of ".$session['user']['name'];
 | 
						|
				$badguy['creatureweapon']=$session['user']['weapon'];
 | 
						|
				$badguy['creaturelevel']=$session['user']['level'];
 | 
						|
				$badguy['creaturegold']=0;
 | 
						|
				$badguy['creatureexp'] =
 | 
						|
				round($session['user']['experience']/10, 0);
 | 
						|
				$badguy['creaturehealth']=$session['user']['maxhitpoints'];
 | 
						|
				$badguy['creatureattack']=$session['user']['attack'];
 | 
						|
				$badguy['creaturedefense']=$session['user']['defense'];
 | 
						|
				$stack[] = $badguy;
 | 
						|
			} else {
 | 
						|
				require_once("lib/forestoutcomes.php");
 | 
						|
				if ($packofmonsters == true) {
 | 
						|
					$initialbadguy = db_fetch_assoc($result);
 | 
						|
					$prefixs = array("Elite","Dangerous","Lethal","Savage","Deadly","Malevolent","Malignant");
 | 
						|
					for($i=0;$i<$multi;$i++) {
 | 
						|
						$initialbadguy['creaturelevel'] = e_rand($mintargetlevel, $targetlevel);
 | 
						|
						$initialbadguy['playerstarthp']=$session['user']['hitpoints'];
 | 
						|
						$initialbadguy['diddamage']=0;
 | 
						|
						$badguy = buffbadguy($initialbadguy);
 | 
						|
						if ($type == "thrill") {
 | 
						|
							// 10% more experience
 | 
						|
							$badguy['creatureexp'] = round($badguy['creatureexp']*1.1, 0);
 | 
						|
							// 10% more gold
 | 
						|
							$badguy['creaturegold'] = round($badguy['creaturegold']*1.1, 0);
 | 
						|
						}
 | 
						|
						if ($type == "suicide") {
 | 
						|
							// Okay, suicide fights give even more rewards, but
 | 
						|
							// are much harder
 | 
						|
							// 25% more experience
 | 
						|
							$badguy['creatureexp'] = round($badguy['creatureexp']*1.25, 0);
 | 
						|
							// 25% more gold
 | 
						|
							$badguy['creaturegold'] = round($badguy['creaturegold']*1.25, 0);
 | 
						|
							// Now, make it tougher.
 | 
						|
							$mul = 1.25 + $extrabuff;
 | 
						|
							$badguy['creatureattack'] = round($badguy['creatureattack']*$mul, 0);
 | 
						|
							$badguy['creaturedefense'] = round($badguy['creaturedefense']*$mul, 0);
 | 
						|
							$badguy['creaturehealth'] = round($badguy['creaturehealth']*$mul, 0);
 | 
						|
							// And mark it as an 'elite' troop.
 | 
						|
							$prefixs = translate_inline($prefixs);
 | 
						|
							$key = array_rand($prefixs);
 | 
						|
							$prefix = $prefixs[$key];
 | 
						|
							$badguy['creaturename'] = $prefix . " " . $badguy['creaturename'];
 | 
						|
						}
 | 
						|
						$stack[$i] = $badguy;
 | 
						|
					}
 | 
						|
					if ($multi > 1) {
 | 
						|
						output("`2You encounter a group of `^%i`2 %s`2.`n`n", $multi, $badguy['creaturename']);
 | 
						|
					}
 | 
						|
				} else {
 | 
						|
					while ($badguy = db_fetch_assoc($result)) {
 | 
						|
						$badguy['playerstarthp']=$session['user']['hitpoints'];
 | 
						|
						$badguy['diddamage']=0;
 | 
						|
						$badguy = buffbadguy($badguy);
 | 
						|
						// Okay, they are thrillseeking, let's give them a bit extra
 | 
						|
						// exp and gold.
 | 
						|
						if ($type == "thrill") {
 | 
						|
							// 10% more experience
 | 
						|
							$badguy['creatureexp'] = round($badguy['creatureexp']*1.1, 0);
 | 
						|
							// 10% more gold
 | 
						|
							$badguy['creaturegold'] = round($badguy['creaturegold']*1.1, 0);
 | 
						|
						}
 | 
						|
						if ($type == "suicide") {
 | 
						|
							// Okay, suicide fights give even more rewards, but
 | 
						|
							// are much harder
 | 
						|
							// 25% more experience
 | 
						|
							$badguy['creatureexp'] = round($badguy['creatureexp']*1.25, 0);
 | 
						|
							// 25% more gold
 | 
						|
							$badguy['creaturegold'] = round($badguy['creaturegold']*1.25, 0);
 | 
						|
							// Now, make it tougher.
 | 
						|
							$mul = 1.25 + $extrabuff;
 | 
						|
							$badguy['creatureattack'] = round($badguy['creatureattack']*$mul, 0);
 | 
						|
							$badguy['creaturedefense'] = round($badguy['creaturedefense']*$mul, 0);
 | 
						|
							$badguy['creaturehealth'] = round($badguy['creaturehealth']*$mul, 0);
 | 
						|
							// And mark it as an 'elite' troop.
 | 
						|
							$prefixs = array("Elite","Dangerous","Lethal","Savage","Deadly","Malevolent","Malignant");
 | 
						|
							$prefixs = translate_inline($prefixs);
 | 
						|
							$key = array_rand($prefixs);
 | 
						|
							$prefix = $prefixs[$key];
 | 
						|
							$badguy['creaturename'] = $prefix . " " . $badguy['creaturename'];
 | 
						|
						}
 | 
						|
						$stack[] = $badguy;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			}
 | 
						|
			calculate_buff_fields();
 | 
						|
			$attackstack = array(
 | 
						|
				"enemies"=>$stack,
 | 
						|
				"options"=>array(
 | 
						|
					"type"=>"forest"
 | 
						|
				)
 | 
						|
			);
 | 
						|
			$session['user']['badguy']=createstring($attackstack);
 | 
						|
			// If someone for any reason wanted to add a nav where the user cannot choose the number of rounds anymore
 | 
						|
			// because they are already set in the nav itself, we need this here.
 | 
						|
			// It will not break anything else. I hope.
 | 
						|
			if(httpget('auto') != "") {
 | 
						|
				httpset('op', 'fight');
 | 
						|
				$op = 'fight';
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
if ($op=="fight" || $op=="run" || $op == "newtarget"){
 | 
						|
	$battle=true;
 | 
						|
}
 | 
						|
 | 
						|
if ($battle){
 | 
						|
 | 
						|
	require_once("battle.php");
 | 
						|
 | 
						|
	if ($victory){
 | 
						|
		require_once("lib/forestoutcomes.php");
 | 
						|
		$op="";
 | 
						|
		httpset('op', "");
 | 
						|
		forestvictory($newenemies,isset($options['denyflawless'])?$options['denyflawless']:false);
 | 
						|
		$dontdisplayforestmessage=true;
 | 
						|
	}elseif($defeat){
 | 
						|
		require_once("lib/forestoutcomes.php");
 | 
						|
		forestdefeat($newenemies);
 | 
						|
	}else{
 | 
						|
		fightnav();
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
if ($op==""){
 | 
						|
	// Need to pass the variable here so that we show the forest message
 | 
						|
	// sometimes, but not others.
 | 
						|
	forest($dontdisplayforestmessage);
 | 
						|
}
 | 
						|
page_footer();
 | 
						|
?>
 |