Dragon-Scourge/explore.php
Jamin Blount 6a170645e9 Beta 5 Build 20
9.2.2007 - Build 20 (Consolation Prize Part Deux):
- Fixed incorrect story values in install.sql.
- Some changes to the version/copyright/moddedby display.
2017-02-05 12:02:56 -06:00

282 lines
13 KiB
PHP

<?php // explore.php :: All exploring/traveling functions.
// Dragon Scourge
//
// Program authors: Jamin Blount
// Copyright (C) 2007 by renderse7en
// Script Version 1.0 Beta 5 Build 20
// You may not distribute this program in any manner, modified or
// otherwise, without the express, written consent from
// renderse7en.
//
// You may make modifications, but only for your own use and
// within the confines of the Dragon Scourge License Agreement
// (see our website for that).
function doexplore() { // Default explore screen.
display("Exploring", gettemplate("explore"));
}
function move() { // Primary exploring function. Move them with the compass buttons.
global $controlrow, $userrow, $worldrow;
if ($userrow["currentpvp"] != 0) { die(header("Location: pvp.php")); }
if ($userrow["currentaction"] == "PVP") { die(header("Location: pvp.php")); }
if ($userrow["currentaction"] == "Fighting") { die(header("Location: fight.php")); }
if ($userrow["exploreverify"] != "") { botkillah(); }
// Move the character.
if (isset($_GET["dir"])) {
$dir = $_GET["dir"];
if($dir=="n") {
$latlon = "latitude";
if (($userrow[$latlon]+1) <= $worldrow["size"]) { $userrow[$latlon]++; $string = ", latitude=latitude+1"; } else { $string = ""; }
} elseif($dir=="s") {
$latlon = "latitude";
if ((($userrow[$latlon]-1)*-1) <= $worldrow["size"]) { $userrow[$latlon]--; $string = ", latitude=latitude-1"; } else { $string = ""; }
} elseif($dir=="e") {
$latlon = "longitude";
if (($userrow[$latlon]+1) <= $worldrow["size"]) { $userrow[$latlon]++; $string = ", longitude=longitude+1"; } else { $string = ""; }
} elseif($dir=="w") {
$latlon = "longitude";
if ((($userrow[$latlon]-1)*-1) <= $worldrow["size"]) { $userrow[$latlon]--; $string = ", longitude=longitude-1"; } else { $string = ""; }
} else {
err("Invalid input format. Please <a href=\"index.php\">go back</a> and try again.");
}
}
// Breakout for story.
if ($userrow["story"] != "0" && $userrow["storylat"] == $userrow["latitude"] && $userrow["storylon"] == $userrow["longitude"]) {
$string = ltrim($string," ,");
doquery("UPDATE <<users>> SET $string WHERE id='".$userrow["id"]."' LIMIT 1");
die(header("Location: story.php"));
}
// Breakout for towns.
$row = dorow(doquery("SELECT * FROM <<towns>> WHERE world='".$userrow["world"]."' AND latitude='".$userrow["latitude"]."' AND longitude='".$userrow["longitude"]."' LIMIT 1"));
if ($row != false) {
$townslist = explode(",",$userrow["townslist"]);
if (!in_array($row["id"], $townslist)) {
$userrow["townslist"] .= ",".$row["id"];
$string .= ", townslist='".$userrow["townslist"]."'";
}
doquery("UPDATE <<users>> SET currentaction='In Town' $string WHERE id='".$userrow["id"]."' LIMIT 1");
display("Exploring", parsetemplate(gettemplate("town_enter"), $row));
}
// Decide if we want to pick a fight with someone.
if (rand(1,5) == 1 && $userrow["currentaction"] != "In Town") {
doquery("UPDATE <<users>> SET currentaction='Fighting' $string WHERE id='".$userrow["id"]."' LIMIT 1");
die(header("Location: fight.php"));
}
// Random check for protection against macro bots.
if ($controlrow["botcheck"] > 0) {
if (rand(1,$controlrow["botcheck"]) == 1) {
botkillah();
}
}
// If we've gotten this far, nothing has happened.
$userrow["currentaction"] = "Exploring";
doquery("UPDATE <<users>> SET currentaction='Exploring', dropidstring='0' $string WHERE id='".$userrow["id"]."' LIMIT 1");
display("Exploring", gettemplate("explore"));
}
function travel($id) { // Move them with the Travel To list.
global $userrow, $worldrow;
if ($userrow["currentpvp"] != 0) { die(header("Location: pvp.php")); }
if ($userrow["currentaction"] == "PVP") { die(header("Location: pvp.php")); }
if ($userrow["currentaction"] == "Fighting") { die(header("Location: fight.php")); }
if ($userrow["exploreverify"] != "") { botkillah(); }
if (!is_numeric($id)) { err("Invalid action. Please <a href=\"index.php\">go back</a> and try again."); }
$query = doquery("SELECT * FROM <<towns>> WHERE id='$id' LIMIT 1");
$row = dorow($query);
// Errors.
if ($userrow["currenttp"] < $row["travelpoints"]) { err("You do not have enough Travel Points to travel to this town. Please <a href=\"index.php\">go back</a> and try again."); }
if ($userrow["world"] != $row["world"]) { err("You can only travel to towns in ".$worldrow["name"].". Please <a href=\"index.php\">go back</a> and try again."); }
if ($userrow["latitude"] == $row["latitude"] && $userrow["longitude"] == $row["longitude"] && $userrow["world"] == $row["world"]) { err("You are already in ".$row["name"].". You do not need to travel there.<br /><br /><a href=\"index.php\">Click here</a> to return to the main town screen."); }
$townslist = explode(",",$userrow["townslist"]);
if (!in_array($id,$townslist)) { err("You have not purchased the map to this town. Please <a href=\"index.php\">go back</a> and try again."); }
// Now move them.
$userrow["longitude"] = $row["longitude"];
$userrow["latitude"] = $row["latitude"];
$userrow["currenttp"] -= $row["travelpoints"];
$query = doquery("UPDATE <<users>> SET dropidstring='0', latitude='".$userrow["latitude"]."', longitude='".$userrow["longitude"]."', currenttp='".$userrow["currenttp"]."', currentaction='In Town' WHERE id='".$userrow["id"]."' LIMIT 1");
display("Exploring", parsetemplate(gettemplate("town_enter"), $row));
}
function quickheal() { // Quick heal.
global $userrow, $spells;
if (isset($_GET["id"])) { $id = $_GET["id"]; } else { err("Invalid ID entered. Please <a href=\"index.php\">go back</a> and try again."); }
// Errors.
if (!is_numeric($id)) { err("Invalid ID entered. Please <a href=\"index.php\">go back</a> and try again."); }
if ($userrow["currentaction"] != "Exploring") { err("The Quick Heal function is only available while exploring. You cannot use it in town or while fighting. Please <a href=\"index.php\">go back</a> and try again."); }
$hasspell = false;
for($i=1; $i<11; $i++) {
if ($userrow["spell".$i."id"] == $id) { $hasspell = true; }
}
if ($hasspell == false) { err("You don't have that spell yet. Please <a href=\"index.php\">go back</a> and try again."); }
if ($spells[$id]["fname"] != "heal") { err("That is not a Heal spell. Please <a href=\"index.php\">go back</a> and try again."); }
if ($userrow["currentmp"] < $spells[$id]["mp"]) { err("You don't have enough MP to cast that spell. Please <a href=\"index.php\">go back</a> and try again."); }
if ($userrow["currenthp"] == $userrow["maxhp"]) { err("Your HP is already full. Please <a href=\"index.php\">go back</a> and try again."); }
// Now heal them.
$userrow["currenthp"] = min($userrow["currenthp"] + $spells[$id]["value"], $userrow["maxhp"]);
$userrow["currentmp"] = $userrow["currentmp"] - $spells[$id]["mp"];
doquery("UPDATE <<users>> SET currenthp='".$userrow["currenthp"]."', currentmp='".$userrow["currentmp"]."' WHERE id='".$userrow["id"]."' LIMIT 1");
display("Exploring", gettemplate("explore_quickheal"));
}
function itemdrop() { // Handling for item drops from monsters.
global $userrow;
if ($userrow["dropidstring"] == "0") { err("No item has been dropped. Please <a href=\"index.php\">go back</a> and try again."); }
$premodrow = dorow(doquery("SELECT * FROM <<itemmodnames>> ORDER BY id"));
foreach($premodrow as $a=>$b) {
$modrow[$b["fieldname"]] = $b;
}
$thenewitem = explode(",",$userrow["dropidstring"]);
$newitem = dorow(doquery("SELECT * FROM <<itembase>> WHERE id='".$thenewitem[1]."' LIMIT 1"));
$newprefix = dorow(doquery("SELECT * FROM <<itemprefixes>> WHERE id='".$thenewitem[0]."' LIMIT 1"));
$newsuffix = dorow(doquery("SELECT * FROM <<itemsuffixes>> WHERE id='".$thenewitem[2]."' LIMIT 1"));
$newfullitem = builditem($newprefix, $newitem, $newsuffix, $modrow);
$row["itemtable"] = parsetemplate(gettemplate("explore_drop_itemrow"), $newfullitem);
if ($userrow["item".$newitem["slotnumber"]."idstring"] != "0") {
$theolditem = explode(",",$userrow["item".$newitem["slotnumber"]."idstring"]);
$olditem = dorow(doquery("SELECT * FROM <<itembase>> WHERE id='".$theolditem[1]."' LIMIT 1"));
$oldprefix = dorow(doquery("SELECT * FROM <<itemprefixes>> WHERE id='".$theolditem[0]."' LIMIT 1"));
$oldsuffix = dorow(doquery("SELECT * FROM <<itemsuffixes>> WHERE id='".$theolditem[2]."' LIMIT 1"));
$oldfullitem = builditem($oldprefix, $olditem, $oldsuffix, $modrow);
$row["olditems"] = parsetemplate(gettemplate("town_buy_olditemrow"), $oldfullitem);
} else {
$oldfullitem = false; $oldprefix = false; $oldsuffix = false;
$row["olditems"] = "You don't have any item in this slot.";
}
if (isset($_POST["accept"])) {
// Requirements check.
if ($newfullitem["requirements"] == false) { err("You do not meet one or more of the requirements for this item. Please <a href=\"index.php\">go back</a> and try again."); }
// Now do stuff to userrow (new item only).
$userrow["item" . $newfullitem["slotnumber"] . "idstring"] = $newfullitem["fullid"];
$userrow["item" . $newfullitem["slotnumber"] . "name"] = $newfullitem["name"];
$userrow[$newfullitem["basename"]] += $newfullitem["baseattr"];
for($j=1; $j<7; $j++) {
if ($newfullitem["mod".$j."name"] != "") {
$userrow[$newfullitem["mod".$j."name"]] += $newfullitem["mod".$j."attr"];
}
}
if ($newprefix != false) {
$userrow[$newprefix["basename"]] += $newprefix["baseattr"];
}
if ($newsuffix != false) {
$userrow[$newsuffix["basename"]] += $newsuffix["baseattr"];
}
// Do more stuff to userrow (old item only).
if ($oldfullitem != false) {
$userrow[$oldfullitem["basename"]] -= $oldfullitem["baseattr"];
for($j=1; $j<7; $j++) {
if ($oldfullitem["mod".$j."name"] != "") {
$userrow[$oldfullitem["mod".$j."name"]] -= $oldfullitem["mod".$j."attr"];
}
}
if ($oldprefix != false) {
$userrow[$oldprefix["basename"]] -= $oldprefix["baseattr"];
}
if ($oldsuffix != false) {
$userrow[$oldsuffix["basename"]] -= $oldsuffix["baseattr"];
}
}
updateuserrow();
display("Item Drop", gettemplate("explore_drop_accept"));
}
if (isset($_POST["ignore"])) {
die(header("Location: index.php"));
}
// And we're done.
display("Item Drop", parsetemplate(gettemplate("explore_drop"),$row));
}
function botkillah() { // Bust a cap in the asses of macro bots. Word.
global $userrow;
if (isset($_POST["submit"])) {
if (strtoupper($_POST["verify"]) == $userrow["exploreverify"]) {
$query = doquery("UPDATE <<users>> SET exploreverify='',exploreverifyimage='' WHERE id='".$userrow["id"]."' LIMIT 1");
unlink("images/botcheck/".$userrow["exploreverifyimage"]);
die(header("Location: index.php"));
} else {
$query = doquery("UPDATE <<users>> SET explorefailed=explorefailed+1 WHERE id='".$userrow["id"]."' LIMIT 1");
die(header("Location: index.php?do=humanity"));
}
} else {
if ($userrow["exploreverify"] == "") {
// Thanks to phpNoise for the tutorial on this - http://www.phpnoise.com/tutorials/1/2
// Image setup.
$im = ImageCreate(200, 40);
$white = ImageColorAllocate($im, 240, 240, 240);
$black = ImageColorAllocate($im, 102, 51, 0);
// Get us some random text.
$new_string = "";
for($i=0; $i<6; $i++) {
$new_string .= chr(rand(65,90));
}
// Finalize, update userrow & output.
ImageFill($im, 0, 0, $white);
ImageString($im, 5, rand(10,120), rand(5,25), $new_string, $black);
$randomext = "";
for($i=0; $i<8; $i++) { $randomext .= rand(0,9); }
ImagePNG($im, "images/botcheck/$randomext".".png");
ImageDestroy($im);
$query = doquery("UPDATE <<users>> SET exploreverify='$new_string',exploreverifyimage='$randomext".".png' WHERE id='".$userrow["id"]."' LIMIT 1");
$pagerow["exploreverifyimage"] = $randomext.".png";
} else { $pagerow["exploreverifyimage"] = $userrow["exploreverifyimage"]; }
display("Anti-Macro Verification", parsetemplate(gettemplate("explore_verify"),$pagerow));
}
}
?>