From accb18b059a9035b40052b9a3f88deac07d2ccd7 Mon Sep 17 00:00:00 2001 From: Jamin Blount Date: Sun, 5 Feb 2017 10:49:37 -0600 Subject: [PATCH] v1.0.0 The first "final" version of Dragon Knight. --- admin/admin.php | 896 +++++++++++++++++++++++++++++++++++ admin/install.php | 589 +++++++++++++++++++++++ admin/lib.php | 147 ++++++ config.php | 16 + explore.php | 37 ++ fight.php | 531 +++++++++++++++++++++ forum.php | 97 ++++ heal.php | 29 ++ help/help.php | 323 +++++++++++++ help/items.php | 155 ++++++ help/levels.php | 141 ++++++ help/monsters.php | 96 ++++ help/spells.php | 106 +++++ images/background.gif | Bin 0 -> 7994 bytes images/background.jpg | Bin 0 -> 6228 bytes images/bars_green.gif | Bin 0 -> 94 bytes images/bars_red.gif | Bin 0 -> 94 bytes images/bars_yellow.gif | Bin 0 -> 94 bytes images/button_character.gif | Bin 0 -> 527 bytes images/button_fastspells.gif | Bin 0 -> 575 bytes images/button_functions.gif | Bin 0 -> 561 bytes images/button_help.gif | Bin 0 -> 402 bytes images/button_inventory.gif | Bin 0 -> 551 bytes images/button_location.gif | Bin 0 -> 486 bytes images/button_login.gif | Bin 0 -> 474 bytes images/button_logout.gif | Bin 0 -> 500 bytes images/button_register.gif | Bin 0 -> 523 bytes images/button_shoutbox.gif | Bin 0 -> 565 bytes images/button_spells.gif | Bin 0 -> 469 bytes images/button_status.gif | Bin 0 -> 469 bytes images/button_towns.gif | Bin 0 -> 461 bytes images/compass_01.gif | Bin 0 -> 3940 bytes images/compass_02.gif | Bin 0 -> 2482 bytes images/compass_03.gif | Bin 0 -> 2561 bytes images/compass_04.gif | Bin 0 -> 3749 bytes images/dkforumsbutton.gif | Bin 0 -> 3259 bytes images/help_exploring.jpg | Bin 0 -> 15650 bytes images/help_fighting.jpg | Bin 0 -> 13162 bytes images/icon_armor.gif | Bin 0 -> 147 bytes images/icon_shield.gif | Bin 0 -> 121 bytes images/icon_weapon.gif | Bin 0 -> 112 bytes images/logo.gif | Bin 0 -> 17688 bytes images/title_exploring.gif | Bin 0 -> 1034 bytes images/title_fighting.gif | Bin 0 -> 1005 bytes images/town_1.gif | Bin 0 -> 1759 bytes images/town_2.gif | Bin 0 -> 1464 bytes images/town_3.gif | Bin 0 -> 1414 bytes images/town_4.gif | Bin 0 -> 1435 bytes images/town_5.gif | Bin 0 -> 1691 bytes images/town_6.gif | Bin 0 -> 1638 bytes images/town_7.gif | Bin 0 -> 1564 bytes images/town_8.gif | Bin 0 -> 1738 bytes index.php | 271 +++++++++++ install.php | 779 ++++++++++++++++++++++++++++++ lib.php | 213 +++++++++ login.php | 72 +++ templates/admin.php | 78 +++ templates/babblebox.php | 34 ++ templates/fight.php | 14 + templates/leftnav.php | 38 ++ templates/login.php | 13 + templates/minimal.php | 68 +++ templates/onlinechar.php | 41 ++ templates/primary.php | 86 ++++ templates/register.php | 18 + templates/rightnav.php | 39 ++ templates/showchar.php | 47 ++ templates/towns.php | 27 ++ towns.php | 367 ++++++++++++++ users.php | 99 ++++ 70 files changed, 5467 insertions(+) create mode 100644 admin/admin.php create mode 100644 admin/install.php create mode 100644 admin/lib.php create mode 100644 config.php create mode 100644 explore.php create mode 100644 fight.php create mode 100644 forum.php create mode 100644 heal.php create mode 100644 help/help.php create mode 100644 help/items.php create mode 100644 help/levels.php create mode 100644 help/monsters.php create mode 100644 help/spells.php create mode 100644 images/background.gif create mode 100644 images/background.jpg create mode 100644 images/bars_green.gif create mode 100644 images/bars_red.gif create mode 100644 images/bars_yellow.gif create mode 100644 images/button_character.gif create mode 100644 images/button_fastspells.gif create mode 100644 images/button_functions.gif create mode 100644 images/button_help.gif create mode 100644 images/button_inventory.gif create mode 100644 images/button_location.gif create mode 100644 images/button_login.gif create mode 100644 images/button_logout.gif create mode 100644 images/button_register.gif create mode 100644 images/button_shoutbox.gif create mode 100644 images/button_spells.gif create mode 100644 images/button_status.gif create mode 100644 images/button_towns.gif create mode 100644 images/compass_01.gif create mode 100644 images/compass_02.gif create mode 100644 images/compass_03.gif create mode 100644 images/compass_04.gif create mode 100644 images/dkforumsbutton.gif create mode 100644 images/help_exploring.jpg create mode 100644 images/help_fighting.jpg create mode 100644 images/icon_armor.gif create mode 100644 images/icon_shield.gif create mode 100644 images/icon_weapon.gif create mode 100644 images/logo.gif create mode 100644 images/title_exploring.gif create mode 100644 images/title_fighting.gif create mode 100644 images/town_1.gif create mode 100644 images/town_2.gif create mode 100644 images/town_3.gif create mode 100644 images/town_4.gif create mode 100644 images/town_5.gif create mode 100644 images/town_6.gif create mode 100644 images/town_7.gif create mode 100644 images/town_8.gif create mode 100644 index.php create mode 100644 install.php create mode 100644 lib.php create mode 100644 login.php create mode 100644 templates/admin.php create mode 100644 templates/babblebox.php create mode 100644 templates/fight.php create mode 100644 templates/leftnav.php create mode 100644 templates/login.php create mode 100644 templates/minimal.php create mode 100644 templates/onlinechar.php create mode 100644 templates/primary.php create mode 100644 templates/register.php create mode 100644 templates/rightnav.php create mode 100644 templates/showchar.php create mode 100644 templates/towns.php create mode 100644 towns.php create mode 100644 users.php diff --git a/admin/admin.php b/admin/admin.php new file mode 100644 index 0000000..a48585c --- /dev/null +++ b/admin/admin.php @@ -0,0 +1,896 @@ +game before using the control panel."); } +if ($userrow["authlevel"] != 1) { die("You must have administrator privileges to use the control panel."); } +$controlquery = doquery("SELECT * FROM {{table}} WHERE id='1' LIMIT 1", "control"); +$controlrow = mysql_fetch_array($controlquery); + +if (isset($_GET["do"])) { + $do = explode(":",$_GET["do"]); + + if ($do[0] == "main") { main(); } + elseif ($do[0] == "items") { items(); } + elseif ($do[0] == "edititem") { edititem($do[1]); } + elseif ($do[0] == "drops") { drops(); } + elseif ($do[0] == "editdrop") { editdrop($do[1]); } + elseif ($do[0] == "towns") { towns(); } + elseif ($do[0] == "edittown") { edittown($do[1]); } + elseif ($do[0] == "monsters") { monsters(); } + elseif ($do[0] == "editmonster") { editmonster($do[1]); } + elseif ($do[0] == "levels") { levels(); } + elseif ($do[0] == "editlevel") { editlevel(); } + elseif ($do[0] == "spells") { spells(); } + elseif ($do[0] == "editspell") { editspell($do[1]); } + elseif ($do[0] == "users") { users(); } + elseif ($do[0] == "edituser") { edituser($do[1]); } + elseif ($do[0] == "news") { addnews(); } + +} else { donothing(); } + +function donothing() { + + $page = "Welcome to the Dragon Knight Administration section. Use the links on the left bar to control and edit various elements of the game.

Please note that the control panel has been created mostly as a shortcut for certain individual settings. It is meant for use primarily with editing one thing at a time. If you need to completely replace an entire table (say, to replace all stock monsters with your own new ones), it is suggested that you use a more in-depth database tool such as phpMyAdmin. Also, you may want to have a copy of the Dragon Knight development kit, available from the Dragon Knight homepage.

Also, you should be aware that certain portions of the DK code are dependent on the formatting of certain database results (for example, the special attributes on item drops). While I have attempted to point these out throughout the admin script, you should definitely pay attention and be careful when editing some fields, because mistakes in the database content may result in script errors or your game breaking completely."; + display($page, "Admin Home"); + +} + +function main() { + + if (isset($_POST["submit"])) { + extract($_POST); + $errors = 0; + $errorlist = ""; + if ($gamename == "") { $errors++; $errorlist .= "Game name is required.
"; } + if (($gamesize % 5) != 0) { $errors++; $errorlist .= "Map size must be divisible by five.
"; } + if (!is_numeric($gamesize)) { $errors++; $errorlist .= "Map size must be a number.
"; } + if ($forumtype == 2 && $forumaddress == "") { $errors++; $errorlist .= "You must specify a forum address when using the External setting.
"; } + if ($class1name == "") { $errors++; $errorlist .= "Class 1 name is required.
"; } + if ($class2name == "") { $errors++; $errorlist .= "Class 2 name is required.
"; } + if ($class3name == "") { $errors++; $errorlist .= "Class 3 name is required.
"; } + if ($diff1name == "") { $errors++; $errorlist .= "Difficulty 1 name is required.
"; } + if ($diff2name == "") { $errors++; $errorlist .= "Difficulty 2 name is required.
"; } + if ($diff3name == "") { $errors++; $errorlist .= "Difficulty 3 name is required.
"; } + if ($diff2mod == "") { $errors++; $errorlist .= "Difficulty 2 value is required.
"; } + if ($diff3mod == "") { $errors++; $errorlist .= "Difficulty 3 value is required.
"; } + + if ($errors == 0) { + $query = doquery("UPDATE {{table}} SET gamename='$gamename',gamesize='$gamesize',forumtype='$forumtype',forumaddress='$forumaddress',compression='$compression',class1name='$class1name',class2name='$class2name',class3name='$class3name',diff1name='$diff1name',diff2name='$diff2name',diff3name='$diff3name',diff2mod='$diff2mod',diff3mod='$diff3mod',gameopen='$gameopen' WHERE id='1' LIMIT 1", "control"); + display("Settings updated.","Main Settings"); + } else { + display("Errors:
$errorlist

Please go back and try again.", "Main Settings"); + } + } + + global $controlrow; + +$page = <<Main Settings
+These options control several major settings for the overall game engine.

+
+ + + + + + + + + + + + + + + +
Game Open:
Close the game if you are upgrading or working on settings and don't want to cause odd errors for end-users. Closing the game will completely halt all activity.
Game Name:
Default is "Dragon Knight". Change this if you want to change to call your game something different.
Map Size:
Default is 250. This is the size of each map quadrant. Note that monster levels increase every 5 spaces, so you should ensure that you have at least (map size / 5) monster levels total, otherwise there will be parts of the map without any monsters, or some monsters won't ever get used. Ex: with a map size of 250, you should have 50 monster levels total.
Forum Type:
'Disabled' removes the forum link. 'Internal' uses the built-in (and very stripped-down) forum program included with Dragon Knight, if you don't have your own forums software already installed. 'External' uses the address provided below and links to your own forums software.
External Forum:
If the above value is set to 'External,' please specify the complete URL to your forums here.
Page Compression:
Enable page compression if it is supported by your server, and this will greatly reduce the amount of bandwidth required by the game.
Class 1 Name:
Class 2 Name:
Class 3 Name:
Difficulty 1 Name:
Difficulty 2 Name:
Difficulty 2 Value:
Default is 1.2. Specify factoral value for medium difficulty here.
Difficulty 3 Name:
Difficulty 3 Value:
Default is 1.5. Specify factoral value for hard difficulty here.
+ +
+END; + + if ($controlrow["forumtype"] == 0) { $controlrow["selecttype0"] = "selected=\"selected\" "; } else { $controlrow["selecttype0"] = ""; } + if ($controlrow["forumtype"] == 1) { $controlrow["selecttype1"] = "selected=\"selected\" "; } else { $controlrow["selecttype1"] = ""; } + if ($controlrow["forumtype"] == 2) { $controlrow["selecttype2"] = "selected=\"selected\" "; } else { $controlrow["selecttype2"] = ""; } + if ($controlrow["compression"] == 0) { $controlrow["selectcomp0"] = "selected=\"selected\" "; } else { $controlrow["selectcomp0"] = ""; } + if ($controlrow["compression"] == 1) { $controlrow["selectcomp1"] = "selected=\"selected\" "; } else { $controlrow["selectcomp1"] = ""; } + if ($controlrow["gameopen"] == 1) { $controlrow["open1select"] = "selected=\"selected\" "; } else { $controlrow["open1select"] = ""; } + if ($controlrow["gameopen"] == 0) { $controlrow["open0select"] = "selected=\"selected\" "; } else { $controlrow["open0select"] = ""; } + + $page = parsetemplate($page, $controlrow); + display($page, "Main Settings"); + +} + +function items() { + + $query = doquery("SELECT id,name FROM {{table}} ORDER BY id", "items"); + $page = "Edit Items
Click an item's name to edit it.

\n"; + $count = 1; + while ($row = mysql_fetch_array($query)) { + if ($count == 1) { $page .= "\n"; $count = 2; } + else { $page .= "\n"; $count = 1; } + } + if (mysql_num_rows($query) == 0) { $page .= "\n"; } + $page .= "
".$row["id"]."".$row["name"]."
".$row["id"]."".$row["name"]."
No items found.
"; + display($page, "Edit Items"); + +} + +function edititem($id) { + + if (isset($_POST["submit"])) { + + extract($_POST); + $errors = 0; + $errorlist = ""; + if ($name == "") { $errors++; $errorlist .= "Name is required.
"; } + if ($buycost == "") { $errors++; $errorlist .= "Cost is required.
"; } + if (!is_numeric($buycost)) { $errors++; $errorlist .= "Cost must be a number.
"; } + if ($attribute == "") { $errors++; $errorlist .= "Attribute is required.
"; } + if (!is_numeric($attribute)) { $errors++; $errorlist .= "Attribute must be a number.
"; } + if ($special == "" || $special == " ") { $special = "X"; } + + if ($errors == 0) { + $query = doquery("UPDATE {{table}} SET name='$name',type='$type',buycost='$buycost',attribute='$attribute',special='$special' WHERE id='$id' LIMIT 1", "items"); + display("Item updated.","Edit Items"); + } else { + display("Errors:
$errorlist

Please go back and try again.", "Edit Items"); + } + + } + + + $query = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "items"); + $row = mysql_fetch_array($query); + +$page = <<Edit Items

+
+ + + + + + + +
ID:{{id}}
Name:
Type:
Cost: gold
Attribute:
How much the item adds to total attackpower (weapons) or defensepower (armor/shields).
Special:
Should be either a special code or X to disable. Edit this field very carefully because mistakes to formatting or field names can create problems in the game.
+ +
+Special Codes:
+Special codes can be added in the item's Special field to give it extra user attributes. Special codes are in the format attribute,value. Attribute can be any database field from the Users table - however, it is suggested that you only use the ones from the list below, otherwise things can get freaky. Value may be any positive or negative whole number. For example, if you want a weapon to give an additional 50 max hit points, the special code would be maxhp,50.

+Suggested user fields for special codes:
+maxhp - max hit points
+maxmp - max magic points
+maxtp - max travel points
+goldbonus - gold bonus, in percent
+expbonus - experience bonus, in percent
+strength - strength (which also adds to attackpower)
+dexterity - dexterity (which also adds to defensepower)
+attackpower - total attack power
+defensepower - total defense power +END; + + if ($row["type"] == 1) { $row["type1select"] = "selected=\"selected\" "; } else { $row["type1select"] = ""; } + if ($row["type"] == 2) { $row["type2select"] = "selected=\"selected\" "; } else { $row["type2select"] = ""; } + if ($row["type"] == 3) { $row["type3select"] = "selected=\"selected\" "; } else { $row["type3select"] = ""; } + + $page = parsetemplate($page, $row); + display($page, "Edit Items"); + +} + +function drops() { + + $query = doquery("SELECT id,name FROM {{table}} ORDER BY id", "drops"); + $page = "Edit Drops
Click an item's name to edit it.

\n"; + $count = 1; + while ($row = mysql_fetch_array($query)) { + if ($count == 1) { $page .= "\n"; $count = 2; } + else { $page .= "\n"; $count = 1; } + } + if (mysql_num_rows($query) == 0) { $page .= "\n"; } + $page .= "
".$row["id"]."".$row["name"]."
".$row["id"]."".$row["name"]."
No items found.
"; + display($page, "Edit Drops"); + +} + +function editdrop($id) { + + if (isset($_POST["submit"])) { + + extract($_POST); + $errors = 0; + $errorlist = ""; + if ($name == "") { $errors++; $errorlist .= "Name is required.
"; } + if ($mlevel == "") { $errors++; $errorlist .= "Monster level is required.
"; } + if (!is_numeric($mlevel)) { $errors++; $errorlist .= "Monster level must be a number.
"; } + if ($attribute1 == "" || $attribute1 == " " || $attribute1 == "X") { $errors++; $errorlist .= "First attribute is required.
"; } + if ($attribute2 == "" || $attribute2 == " ") { $attribute2 = "X"; } + + if ($errors == 0) { + $query = doquery("UPDATE {{table}} SET name='$name',mlevel='$mlevel',attribute1='$attribute1',attribute2='$attribute2' WHERE id='$id' LIMIT 1", "drops"); + display("Item updated.","Edit Drops"); + } else { + display("Errors:
$errorlist

Please go back and try again.", "Edit Drops"); + } + + } + + + $query = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "drops"); + $row = mysql_fetch_array($query); + +$page = <<Edit Drops

+
+ + + + + + +
ID:{{id}}
Name:
Monster Level:
Minimum monster level that will drop this item.
Attribute 1:
Must be a special code. First attribute cannot be disabled. Edit this field very carefully because mistakes to formatting or field names can create problems in the game.
Attribute 2:
Should be either a special code or X to disable. Edit this field very carefully because mistakes to formatting or field names can create problems in the game.
+ +
+Special Codes:
+Special codes are used in the two attribute fields to give the item properties. The first attribute field must contain a special code, but the second one may be left empty ("X") if you wish. Special codes are in the format attribute,value. Attribute can be any database field from the Users table - however, it is suggested that you only use the ones from the list below, otherwise things can get freaky. Value may be any positive or negative whole number. For example, if you want a weapon to give an additional 50 max hit points, the special code would be maxhp,50.

+Suggested user fields for special codes:
+maxhp - max hit points
+maxmp - max magic points
+maxtp - max travel points
+goldbonus - gold bonus, in percent
+expbonus - experience bonus, in percent
+strength - strength (which also adds to attackpower)
+dexterity - dexterity (which also adds to defensepower)
+attackpower - total attack power
+defensepower - total defense power +END; + + $page = parsetemplate($page, $row); + display($page, "Edit Drops"); + +} + +function towns() { + + $query = doquery("SELECT id,name FROM {{table}} ORDER BY id", "towns"); + $page = "Edit Towns
Click an town's name to edit it.

\n"; + $count = 1; + while ($row = mysql_fetch_array($query)) { + if ($count == 1) { $page .= "\n"; $count = 2; } + else { $page .= "\n"; $count = 1; } + } + if (mysql_num_rows($query) == 0) { $page .= "\n"; } + $page .= "
".$row["id"]."".$row["name"]."
".$row["id"]."".$row["name"]."
No towns found.
"; + display($page, "Edit Towns"); + +} + +function edittown($id) { + + if (isset($_POST["submit"])) { + + extract($_POST); + $errors = 0; + $errorlist = ""; + if ($name == "") { $errors++; $errorlist .= "Name is required.
"; } + if ($latitude == "") { $errors++; $errorlist .= "Latitude is required.
"; } + if (!is_numeric($latitude)) { $errors++; $errorlist .= "Latitude must be a number.
"; } + if ($longitude == "") { $errors++; $errorlist .= "Longitude is required.
"; } + if (!is_numeric($longitude)) { $errors++; $errorlist .= "Longitude must be a number.
"; } + if ($innprice == "") { $errors++; $errorlist .= "Inn Price is required.
"; } + if (!is_numeric($innprice)) { $errors++; $errorlist .= "Inn Price must be a number.
"; } + if ($mapprice == "") { $errors++; $errorlist .= "Map Price is required.
"; } + if (!is_numeric($mapprice)) { $errors++; $errorlist .= "Map Price must be a number.
"; } + + if ($travelpoints == "") { $errors++; $errorlist .= "Travel Points is required.
"; } + if (!is_numeric($travelpoints)) { $errors++; $errorlist .= "Travel Points must be a number.
"; } + if ($itemslist == "") { $errors++; $errorlist .= "Items List is required.
"; } + + if ($errors == 0) { + $query = doquery("UPDATE {{table}} SET name='$name',latitude='$latitude',longitude='$longitude',innprice='$innprice',mapprice='$mapprice',travelpoints='$travelpoints',itemslist='$itemslist' WHERE id='$id' LIMIT 1", "towns"); + display("Town updated.","Edit Towns"); + } else { + display("Errors:
$errorlist

Please go back and try again.", "Edit Towns"); + } + + } + + + $query = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "towns"); + $row = mysql_fetch_array($query); + +$page = <<Edit Towns

+
+ + + + + + + + + +
ID:{{id}}
Name:
Latitude:
Positive or negative integer.
Longitude:
Positive or negative integer.
Inn Price: gold
Map Price: gold
How much it costs to buy the map to this town.
Travel Points:
How many TP are consumed when travelling to this town.
Items List:
Comma-separated list of item ID numbers available for purchase at this town. (Example: 1,2,3,6,9,10,13,20)
+ +
+END; + + $page = parsetemplate($page, $row); + display($page, "Edit Towns"); + +} + +function monsters() { + + global $controlrow; + + $statquery = doquery("SELECT * FROM {{table}} ORDER BY level DESC LIMIT 1", "monsters"); + $statrow = mysql_fetch_array($statquery); + + $query = doquery("SELECT id,name FROM {{table}} ORDER BY id", "monsters"); + $page = "Edit Monsters
"; + + if (($controlrow["gamesize"]/5) != $statrow["level"]) { + $page .= "Note: Your highest monster level does not match with your entered map size. Highest monster level should be ".($controlrow["gamesize"]/5).", yours is ".$statrow["level"].". Please fix this before opening the game to the public.

"; + } else { $page .= "Monster level and map size match. No further actions are required for map compatibility.

"; } + + $page .= "Click an monster's name to edit it.

\n"; + $count = 1; + while ($row = mysql_fetch_array($query)) { + if ($count == 1) { $page .= "\n"; $count = 2; } + else { $page .= "\n"; $count = 1; } + } + if (mysql_num_rows($query) == 0) { $page .= "\n"; } + $page .= "
".$row["id"]."".$row["name"]."
".$row["id"]."".$row["name"]."
No towns found.
"; + display($page, "Edit Monster"); + +} + +function editmonster($id) { + + if (isset($_POST["submit"])) { + + extract($_POST); + $errors = 0; + $errorlist = ""; + if ($name == "") { $errors++; $errorlist .= "Name is required.
"; } + if ($maxhp == "") { $errors++; $errorlist .= "Max HP is required.
"; } + if (!is_numeric($maxhp)) { $errors++; $errorlist .= "Max HP must be a number.
"; } + if ($maxdam == "") { $errors++; $errorlist .= "Max Damage is required.
"; } + if (!is_numeric($maxdam)) { $errors++; $errorlist .= "Max Damage must be a number.
"; } + if ($armor == "") { $errors++; $errorlist .= "Armor is required.
"; } + if (!is_numeric($armor)) { $errors++; $errorlist .= "Armor must be a number.
"; } + if ($level == "") { $errors++; $errorlist .= "Monster Level is required.
"; } + if (!is_numeric($level)) { $errors++; $errorlist .= "Monster Level must be a number.
"; } + if ($maxexp == "") { $errors++; $errorlist .= "Max Exp is required.
"; } + if (!is_numeric($maxexp)) { $errors++; $errorlist .= "Max Exp must be a number.
"; } + if ($maxgold == "") { $errors++; $errorlist .= "Max Gold is required.
"; } + if (!is_numeric($maxgold)) { $errors++; $errorlist .= "Max Gold must be a number.
"; } + + if ($errors == 0) { + $query = doquery("UPDATE {{table}} SET name='$name',maxhp='$maxhp',maxdam='$maxdam',armor='$armor',level='$level',maxexp='$maxexp',maxgold='$maxgold',immune='$immune' WHERE id='$id' LIMIT 1", "monsters"); + display("Monster updated.","Edit monsters"); + } else { + display("Errors:
$errorlist

Please go back and try again.", "Edit monsters"); + } + + } + + + $query = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "monsters"); + $row = mysql_fetch_array($query); + +$page = <<Edit Monsters

+
+ + + + + + + + + + +
ID:{{id}}
Name:
Max Hit Points:
Max Damage:
Compares to player's attackpower.
Armor:
Compares to player's defensepower.
Monster Level:
Determines spawn location and item drops.
Max Experience:
Max experience gained from defeating monster.
Max Gold:
Max gold gained from defeating monster.
Immunity:
Some monsters may not be hurt by certain spells.
+ +
+END; + + if ($row["immune"] == 1) { $row["immune1select"] = "selected=\"selected\" "; } else { $row["immune1select"] = ""; } + if ($row["immune"] == 2) { $row["immune2select"] = "selected=\"selected\" "; } else { $row["immune2select"] = ""; } + if ($row["immune"] == 3) { $row["immune3select"] = "selected=\"selected\" "; } else { $row["immune3select"] = ""; } + + $page = parsetemplate($page, $row); + display($page, "Edit Monsters"); + +} + +function spells() { + + $query = doquery("SELECT id,name FROM {{table}} ORDER BY id", "spells"); + $page = "Edit Spells
Click an spell's name to edit it.

\n"; + $count = 1; + while ($row = mysql_fetch_array($query)) { + if ($count == 1) { $page .= "\n"; $count = 2; } + else { $page .= "\n"; $count = 1; } + } + if (mysql_num_rows($query) == 0) { $page .= "\n"; } + $page .= "
".$row["id"]."".$row["name"]."
".$row["id"]."".$row["name"]."
No spells found.
"; + display($page, "Edit Spells"); + +} + +function editspell($id) { + + if (isset($_POST["submit"])) { + + extract($_POST); + $errors = 0; + $errorlist = ""; + if ($name == "") { $errors++; $errorlist .= "Name is required.
"; } + if ($mp == "") { $errors++; $errorlist .= "MP is required.
"; } + if (!is_numeric($mp)) { $errors++; $errorlist .= "MP must be a number.
"; } + if ($attribute == "") { $errors++; $errorlist .= "Attribute is required.
"; } + if (!is_numeric($attribute)) { $errors++; $errorlist .= "Attribute must be a number.
"; } + + if ($errors == 0) { + $query = doquery("UPDATE {{table}} SET name='$name',mp='$mp',attribute='$attribute',type='$type' WHERE id='$id' LIMIT 1", "spells"); + display("Spell updated.","Edit Spells"); + } else { + display("Errors:
$errorlist

Please go back and try again.", "Edit Spells"); + } + + } + + + $query = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "spells"); + $row = mysql_fetch_array($query); + +$page = <<Edit Spells

+
+ + + + + + +
ID:{{id}}
Name:
Magic Points:
MP required to cast spell.
Attribute:
Numeric value of the spell's effect. Ties with type, below.
Type:
- Heal gives player back [attribute] hit points.
- Hurt deals [attribute] damage to monster.
- Sleep keeps monster from attacking ([attribute] is monster's chance out of 15 to stay asleep each turn).
- Uber Attack increases total attack damage by [attribute] percent.
- Uber Defense increases total defense from attack by [attribute] percent.
+ +
+END; + + if ($row["type"] == 1) { $row["type1select"] = "selected=\"selected\" "; } else { $row["type1select"] = ""; } + if ($row["type"] == 2) { $row["type2select"] = "selected=\"selected\" "; } else { $row["type2select"] = ""; } + if ($row["type"] == 3) { $row["type3select"] = "selected=\"selected\" "; } else { $row["type3select"] = ""; } + if ($row["type"] == 4) { $row["type4select"] = "selected=\"selected\" "; } else { $row["type4select"] = ""; } + if ($row["type"] == 5) { $row["type5select"] = "selected=\"selected\" "; } else { $row["type5select"] = ""; } + + $page = parsetemplate($page, $row); + display($page, "Edit Spells"); + +} + +function levels() { + + $query = doquery("SELECT id FROM {{table}} ORDER BY id DESC LIMIT 1", "levels"); + $row = mysql_fetch_array($query); + + $options = ""; + for($i=2; $i<$row["id"]; $i++) { + $options .= "\n"; + } + +$page = <<Edit Levels
Select a level number from the dropdown box to edit it.

+
+ + +
+END; + + display($page, "Edit Levels"); + +} + +function editlevel() { + + if (!isset($_POST["level"])) { display("No level to edit.", "Edit Levels"); die(); } + $id = $_POST["level"]; + + if (isset($_POST["submit"])) { + + extract($_POST); + $errors = 0; + $errorlist = ""; + if ($_POST["1_exp"] == "") { $errors++; $errorlist .= "Class 1 Experience is required.
"; } + if ($_POST["1_hp"] == "") { $errors++; $errorlist .= "Class 1 HP is required.
"; } + if ($_POST["1_mp"] == "") { $errors++; $errorlist .= "Class 1 MP is required.
"; } + if ($_POST["1_tp"] == "") { $errors++; $errorlist .= "Class 1 TP is required.
"; } + if ($_POST["1_strength"] == "") { $errors++; $errorlist .= "Class 1 Strength is required.
"; } + if ($_POST["1_dexterity"] == "") { $errors++; $errorlist .= "Class 1 Dexterity is required.
"; } + if ($_POST["1_spells"] == "") { $errors++; $errorlist .= "Class 1 Spells is required.
"; } + if (!is_numeric($_POST["1_exp"])) { $errors++; $errorlist .= "Class 1 Experience must be a number.
"; } + if (!is_numeric($_POST["1_hp"])) { $errors++; $errorlist .= "Class 1 HP must be a number.
"; } + if (!is_numeric($_POST["1_mp"])) { $errors++; $errorlist .= "Class 1 MP must be a number.
"; } + if (!is_numeric($_POST["1_tp"])) { $errors++; $errorlist .= "Class 1 TP must be a number.
"; } + if (!is_numeric($_POST["1_strength"])) { $errors++; $errorlist .= "Class 1 Strength must be a number.
"; } + if (!is_numeric($_POST["1_dexterity"])) { $errors++; $errorlist .= "Class 1 Dexterity must be a number.
"; } + if (!is_numeric($_POST["1_spells"])) { $errors++; $errorlist .= "Class 1 Spells must be a number.
"; } + + if ($_POST["2_exp"] == "") { $errors++; $errorlist .= "Class 2 Experience is required.
"; } + if ($_POST["2_hp"] == "") { $errors++; $errorlist .= "Class 2 HP is required.
"; } + if ($_POST["2_mp"] == "") { $errors++; $errorlist .= "Class 2 MP is required.
"; } + if ($_POST["2_tp"] == "") { $errors++; $errorlist .= "Class 2 TP is required.
"; } + if ($_POST["2_strength"] == "") { $errors++; $errorlist .= "Class 2 Strength is required.
"; } + if ($_POST["2_dexterity"] == "") { $errors++; $errorlist .= "Class 2 Dexterity is required.
"; } + if ($_POST["2_spells"] == "") { $errors++; $errorlist .= "Class 2 Spells is required.
"; } + if (!is_numeric($_POST["2_exp"])) { $errors++; $errorlist .= "Class 2 Experience must be a number.
"; } + if (!is_numeric($_POST["2_hp"])) { $errors++; $errorlist .= "Class 2 HP must be a number.
"; } + if (!is_numeric($_POST["2_mp"])) { $errors++; $errorlist .= "Class 2 MP must be a number.
"; } + if (!is_numeric($_POST["2_tp"])) { $errors++; $errorlist .= "Class 2 TP must be a number.
"; } + if (!is_numeric($_POST["2_strength"])) { $errors++; $errorlist .= "Class 2 Strength must be a number.
"; } + if (!is_numeric($_POST["2_dexterity"])) { $errors++; $errorlist .= "Class 2 Dexterity must be a number.
"; } + if (!is_numeric($_POST["2_spells"])) { $errors++; $errorlist .= "Class 2 Spells must be a number.
"; } + + if ($_POST["3_exp"] == "") { $errors++; $errorlist .= "Class 3 Experience is required.
"; } + if ($_POST["3_hp"] == "") { $errors++; $errorlist .= "Class 3 HP is required.
"; } + if ($_POST["3_mp"] == "") { $errors++; $errorlist .= "Class 3 MP is required.
"; } + if ($_POST["3_tp"] == "") { $errors++; $errorlist .= "Class 3 TP is required.
"; } + if ($_POST["3_strength"] == "") { $errors++; $errorlist .= "Class 3 Strength is required.
"; } + if ($_POST["3_dexterity"] == "") { $errors++; $errorlist .= "Class 3 Dexterity is required.
"; } + if ($_POST["3_spells"] == "") { $errors++; $errorlist .= "Class 3 Spells is required.
"; } + if (!is_numeric($_POST["3_exp"])) { $errors++; $errorlist .= "Class 3 Experience must be a number.
"; } + if (!is_numeric($_POST["3_hp"])) { $errors++; $errorlist .= "Class 3 HP must be a number.
"; } + if (!is_numeric($_POST["3_mp"])) { $errors++; $errorlist .= "Class 3 MP must be a number.
"; } + if (!is_numeric($_POST["3_tp"])) { $errors++; $errorlist .= "Class 3 TP must be a number.
"; } + if (!is_numeric($_POST["3_strength"])) { $errors++; $errorlist .= "Class 3 Strength must be a number.
"; } + if (!is_numeric($_POST["3_dexterity"])) { $errors++; $errorlist .= "Class 3 Dexterity must be a number.
"; } + if (!is_numeric($_POST["3_spells"])) { $errors++; $errorlist .= "Class 3 Spells must be a number.
"; } + + if ($errors == 0) { +$updatequery = <<Errors:
$errorlist

Please go back and try again.", "Edit Spells"); + } + + } + + + $query = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "levels"); + $row = mysql_fetch_array($query); + global $controlrow; + $class1name = $controlrow["class1name"]; + $class2name = $controlrow["class2name"]; + $class3name = $controlrow["class3name"]; + +$page = <<Edit Levels

+Experience values for each level should be the cumulative total amount of experience up to this point. All other values should be only the new amount to add this level.

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID:{{id}}
 
$class1name Experience:
$class1name HP:
$class1name MP:
$class1name TP:
$class1name Strength:
$class1name Dexterity:
$class1name Spells:
 
$class2name Experience:
$class2name HP:
$class2name MP:
$class2name TP:
$class2name Strength:
$class2name Dexterity:
$class2name Spells:
 
$class3name Experience:
$class3name HP:
$class3name MP:
$class3name TP:
$class3name Strength:
$class3name Dexterity:
$class3name Spells:
+ +
+END; + + $page = parsetemplate($page, $row); + display($page, "Edit Levels"); + +} + +function users() { + + $query = doquery("SELECT id,username FROM {{table}} ORDER BY id", "users"); + $page = "Edit Users
Click a username to edit the account.

\n"; + $count = 1; + while ($row = mysql_fetch_array($query)) { + if ($count == 1) { $page .= "\n"; $count = 2; } + else { $page .= "\n"; $count = 1; } + } + if (mysql_num_rows($query) == 0) { $page .= "\n"; } + $page .= "
".$row["id"]."".$row["username"]."
".$row["id"]."".$row["username"]."
No spells found.
"; + display($page, "Edit Users"); + +} + +function edituser($id) { + + if (isset($_POST["submit"])) { + + extract($_POST); + $errors = 0; + $errorlist = ""; + if ($email == "") { $errors++; $errorlist .= "Email is required.
"; } + if ($verify == "") { $errors++; $errorlist .= "Verify is required.
"; } + if ($charname == "") { $errors++; $errorlist .= "Character Name is required.
"; } + if ($authlevel == "") { $errors++; $errorlist .= "Auth Level is required.
"; } + if ($latitude == "") { $errors++; $errorlist .= "Latitude is required.
"; } + if ($longitude == "") { $errors++; $errorlist .= "Longitude is required.
"; } + if ($difficulty == "") { $errors++; $errorlist .= "Difficulty is required.
"; } + if ($charclass == "") { $errors++; $errorlist .= "Character Class is required.
"; } + if ($currentaction == "") { $errors++; $errorlist .= "Current Action is required.
"; } + if ($currentfight == "") { $errors++; $errorlist .= "Current Fight is required.
"; } + + if ($currentmonster == "") { $errors++; $errorlist .= "Current Monster is required.
"; } + if ($currentmonsterhp == "") { $errors++; $errorlist .= "Current Monster HP is required.
"; } + if ($currentmonstersleep == "") { $errors++; $errorlist .= "Current Monster Sleep is required.
"; } + if ($currentmonsterimmune == "") { $errors++; $errorlist .= "Current Monster Immune is required.
"; } + if ($currentuberdamage == "") { $errors++; $errorlist .= "Current Uber Damage is required.
"; } + if ($currentuberdefense == "") { $errors++; $errorlist .= "Current Uber Defense is required.
"; } + if ($currenthp == "") { $errors++; $errorlist .= "Current HP is required.
"; } + if ($currentmp == "") { $errors++; $errorlist .= "Current MP is required.
"; } + if ($currenttp == "") { $errors++; $errorlist .= "Current TP is required.
"; } + if ($maxhp == "") { $errors++; $errorlist .= "Max HP is required.
"; } + + if ($maxmp == "") { $errors++; $errorlist .= "Max MP is required.
"; } + if ($maxtp == "") { $errors++; $errorlist .= "Max TP is required.
"; } + if ($level == "") { $errors++; $errorlist .= "Level is required.
"; } + if ($gold == "") { $errors++; $errorlist .= "Gold is required.
"; } + if ($experience == "") { $errors++; $errorlist .= "Experience is required.
"; } + if ($goldbonus == "") { $errors++; $errorlist .= "Gold Bonus is required.
"; } + if ($expbonus == "") { $errors++; $errorlist .= "Experience Bonus is required.
"; } + if ($strength == "") { $errors++; $errorlist .= "Strength is required.
"; } + if ($dexterity == "") { $errors++; $errorlist .= "Dexterity is required.
"; } + if ($attackpower == "") { $errors++; $errorlist .= "Attack Power is required.
"; } + + if ($defensepower == "") { $errors++; $errorlist .= "Defense Power is required.
"; } + if ($weaponid == "") { $errors++; $errorlist .= "Weapon ID is required.
"; } + if ($armorid == "") { $errors++; $errorlist .= "Armor ID is required.
"; } + if ($shieldid == "") { $errors++; $errorlist .= "Shield ID is required.
"; } + if ($slot1id == "") { $errors++; $errorlist .= "Slot 1 ID is required.
"; } + if ($slot2id == "") { $errors++; $errorlist .= "Slot 2 ID is required.
"; } + if ($slot3id == "") { $errors++; $errorlist .= "Slot 3 ID is required.
"; } + if ($weaponname == "") { $errors++; $errorlist .= "Weapon Name is required.
"; } + if ($armorname == "") { $errors++; $errorlist .= "Armor Name is required.
"; } + if ($shieldname == "") { $errors++; $errorlist .= "Shield Name is required.
"; } + + if ($slot1name == "") { $errors++; $errorlist .= "Slot 1 Name is required.
"; } + if ($slot2name == "") { $errors++; $errorlist .= "Slot 2 Name is required.
"; } + if ($slot3name == "") { $errors++; $errorlist .= "Slot 3 Name is required.
"; } + if ($dropcode == "") { $errors++; $errorlist .= "Drop Code is required.
"; } + if ($spells == "") { $errors++; $errorlist .= "Spells is required.
"; } + if ($towns == "") { $errors++; $errorlist .= "Towns is required.
"; } + + if (!is_numeric($authlevel)) { $errors++; $errorlist .= "Auth Level must be a number.
"; } + if (!is_numeric($latitude)) { $errors++; $errorlist .= "Latitude must be a number.
"; } + if (!is_numeric($longitude)) { $errors++; $errorlist .= "Longitude must be a number.
"; } + if (!is_numeric($difficulty)) { $errors++; $errorlist .= "Difficulty must be a number.
"; } + if (!is_numeric($charclass)) { $errors++; $errorlist .= "Character Class must be a number.
"; } + if (!is_numeric($currentfight)) { $errors++; $errorlist .= "Current Fight must be a number.
"; } + if (!is_numeric($currentmonster)) { $errors++; $errorlist .= "Current Monster must be a number.
"; } + if (!is_numeric($currentmonsterhp)) { $errors++; $errorlist .= "Current Monster HP must be a number.
"; } + if (!is_numeric($currentmonstersleep)) { $errors++; $errorlist .= "Current Monster Sleep must be a number.
"; } + + if (!is_numeric($currentmonsterimmune)) { $errors++; $errorlist .= "Current Monster Immune must be a number.
"; } + if (!is_numeric($currentuberdamage)) { $errors++; $errorlist .= "Current Uber Damage must be a number.
"; } + if (!is_numeric($currentuberdefense)) { $errors++; $errorlist .= "Current Uber Defense must be a number.
"; } + if (!is_numeric($currenthp)) { $errors++; $errorlist .= "Current HP must be a number.
"; } + if (!is_numeric($currentmp)) { $errors++; $errorlist .= "Current MP must be a number.
"; } + if (!is_numeric($currenttp)) { $errors++; $errorlist .= "Current TP must be a number.
"; } + if (!is_numeric($maxhp)) { $errors++; $errorlist .= "Max HP must be a number.
"; } + if (!is_numeric($maxmp)) { $errors++; $errorlist .= "Max MP must be a number.
"; } + if (!is_numeric($maxtp)) { $errors++; $errorlist .= "Max TP must be a number.
"; } + if (!is_numeric($level)) { $errors++; $errorlist .= "Level must be a number.
"; } + + if (!is_numeric($gold)) { $errors++; $errorlist .= "Gold must be a number.
"; } + if (!is_numeric($experience)) { $errors++; $errorlist .= "Experience must be a number.
"; } + if (!is_numeric($goldbonus)) { $errors++; $errorlist .= "Gold Bonus must be a number.
"; } + if (!is_numeric($expbonus)) { $errors++; $errorlist .= "Experience Bonus must be a number.
"; } + if (!is_numeric($strength)) { $errors++; $errorlist .= "Strength must be a number.
"; } + if (!is_numeric($dexterity)) { $errors++; $errorlist .= "Dexterity must be a number.
"; } + if (!is_numeric($attackpower)) { $errors++; $errorlist .= "Attack Power must be a number.
"; } + if (!is_numeric($defensepower)) { $errors++; $errorlist .= "Defense Power must be a number.
"; } + if (!is_numeric($weaponid)) { $errors++; $errorlist .= "Weapon ID must be a number.
"; } + if (!is_numeric($armorid)) { $errors++; $errorlist .= "Armor ID must be a number.
"; } + + if (!is_numeric($shieldid)) { $errors++; $errorlist .= "Shield ID must be a number.
"; } + if (!is_numeric($slot1id)) { $errors++; $errorlist .= "Slot 1 ID must be a number.
"; } + if (!is_numeric($slot2id)) { $errors++; $errorlist .= "Slot 2 ID must be a number.
"; } + if (!is_numeric($slot3id)) { $errors++; $errorlist .= "Slot 3 ID must be a number.
"; } + if (!is_numeric($dropcode)) { $errors++; $errorlist .= "Drop Code must be a number.
"; } + + if ($errors == 0) { +$updatequery = <<Errors:
$errorlist

Please go back and try again.", "Edit Users"); + } + + } + + $query = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "users"); + $row = mysql_fetch_array($query); + global $controlrow; + $diff1name = $controlrow["diff1name"]; + $diff2name = $controlrow["diff2name"]; + $diff3name = $controlrow["diff3name"]; + $class1name = $controlrow["class1name"]; + $class2name = $controlrow["class2name"]; + $class3name = $controlrow["class3name"]; + +$page = <<Edit Users

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
ID:{{id}}
Username:{{username}}
Email:
Verify:
Character Name:
Register Date:{{regdate}}
Last Online:{{onlinetime}}
Auth Level:
 
Latitude:
Longitude:
Difficulty:
Character Class:
 
Current Action:
Current Fight:
Current Monster:
Current Monster HP:
Current Monster Sleep:
Current Monster Immune:
Current Uber Damage:
Current Uber Defense:
 
Current HP:
Current MP:
Current TP:
Max HP:
Max MP:
Max TP:
 
Level:
Gold:
Experience:
Gold Bonus:
Experience Bonus:
Strength:
Dexterity:
Attack Power:
Defense Power:
 
Weapon ID:
Armor ID:
Shield ID:
Slot 1 ID:
Slot 2 ID:
Slot 3 ID:
Weapon Name:
Armor Name:
Shield Name:
Slot 1 Name:
Slot 2 Name:
Slot 3 Name:
 
Drop Code:
Spells:
Towns:
+ +
+END; + + if ($row["authlevel"] == 0) { $row["auth0select"] = "selected=\"selected\" "; } else { $row["auth0select"] = ""; } + if ($row["authlevel"] == 1) { $row["auth1select"] = "selected=\"selected\" "; } else { $row["auth1select"] = ""; } + if ($row["charclass"] == 1) { $row["class1select"] = "selected=\"selected\" "; } else { $row["class1select"] = ""; } + if ($row["charclass"] == 2) { $row["class2select"] = "selected=\"selected\" "; } else { $row["class2select"] = ""; } + if ($row["charclass"] == 3) { $row["class3select"] = "selected=\"selected\" "; } else { $row["class3select"] = ""; } + if ($row["difficulty"] == 1) { $row["diff1select"] = "selected=\"selected\" "; } else { $row["diff1select"] = ""; } + if ($row["difficulty"] == 2) { $row["diff2select"] = "selected=\"selected\" "; } else { $row["diff2select"] = ""; } + if ($row["difficulty"] == 3) { $row["diff3select"] = "selected=\"selected\" "; } else { $row["diff3select"] = ""; } + + $page = parsetemplate($page, $row); + display($page, "Edit Users"); + +} + +function addnews() { + + if (isset($_POST["submit"])) { + + extract($_POST); + $errors = 0; + $errorlist = ""; + if ($content == "") { $errors++; $errorlist .= "Content is required.
"; } + + if ($errors == 0) { + $query = doquery("INSERT INTO {{table}} SET id='',postdate=NOW(),content='$content'", "news"); + display("News post added.","Add News"); + } else { + display("Errors:
$errorlist

Please go back and try again.", "Add News"); + } + + } + +$page = <<Add A News Post

+
+Type your post below and then click Submit to add it.
+
+ +
+END; + + display($page, "Add News"); + +} + +?> \ No newline at end of file diff --git a/admin/install.php b/admin/install.php new file mode 100644 index 0000000..d4ae6dd --- /dev/null +++ b/admin/install.php @@ -0,0 +1,589 @@ +"; + +mysql_query("INSERT INTO '$prefix_babble' VALUES (1, '12:00:00', 'Test', 'First babble.')") or die(mysql_error()); +echo "Populated Babblebox table.
"; + +$query2 = <<"; + +mysql_query("INSERT INTO '$prefix_control' VALUES (1, 'Dragon Knight', 250, 1, 0, 'http://forums.address.here/', 'Mage', 'Warrior', 'Paladin', 'Easy', 1.0, 'Medium', 1.2, 'Hard', 1.5, 0)") or die(mysql_error()); +echo "Populated Settings table.
"; + +$query3 = <<"; + +mysql_query("INSERT INTO '$prefix_drops' VALUES (1, 'Life Pebble', 1, 1, 'maxhp,10', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (2, 'Life Stone', 10, 1, 'maxhp,25', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (3, 'Life Rock', 25, 1, 'maxhp,50', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (4, 'Magic Pebble', 1, 1, 'maxmp,10', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (5, 'Magic Stone', 10, 1, 'maxmp,25', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (6, 'Magic Rock', 25, 1, 'maxmp,50', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (7, 'Dragon\'s Scale', 10, 1, 'defensepower,25', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (8, 'Dragon\'s Plate', 30, 1, 'defensepower,50', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (9, 'Dragon\'s Claw', 10, 1, 'attackpower,25', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (10, 'Dragon\'s Tooth', 30, 1, 'attackpower,50', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (11, 'Dragon\'s Tear', 35, 1, 'strength,50', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (12, 'Dragon\'s Wing', 35, 1, 'dexterity,50', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (13, 'Demon\'s Sin', 35, 1, 'maxhp,-50', 'strength,50')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (14, 'Demon\'s Fall', 35, 1, 'maxmp,-50', 'strength,50')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (15, 'Demon\'s Lie', 45, 1, 'maxhp,-100', 'strength,100')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (16, 'Demon\'s Hate', 45, 1, 'maxmp,-100', 'strength,100')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (17, 'Angel\'s Joy', 25, 1, 'maxhp,25', 'strength,25')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (18, 'Angel\'s Rise', 30, 1, 'maxhp,50', 'strength,50')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (19, 'Angel\'s Truth', 35, 1, 'maxhp,75', 'strength,75')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (20, 'Angel\'s Love', 40, 1, 'maxhp,100', 'strength,100')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (21, 'Seraph\'s Joy', 25, 1, 'maxmp,25', 'dexterity,25')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (22, 'Seraph\'s Rise', 30, 1, 'maxmp,50', 'dexterity,50')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (23, 'Seraph\'s Truth', 35, 1, 'maxmp,75', 'dexterity,75')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (24, 'Seraph\'s Love', 40, 1, 'maxmp,100', 'dexterity,100')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (25, 'Ruby', 50, 1, 'maxhp,150', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (26, 'Pearl', 50, 1, 'maxmp,150', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (27, 'Emerald', 50, 1, 'strength,150', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (28, 'Topaz', 50, 1, 'dexterity,150', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (29, 'Obsidian', 50, 1, 'attackpower,150', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (30, 'Diamond', 50, 1, 'defensepower,150', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (31, 'Memory Drop', 5, 1, 'expbonus,10', 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_drops' VALUES (32, 'Fortune Drop', 5, 1, 'goldbonus,10', 'X')") or die(mysql_error()); +echo "Populated Drops table.
"; + +$query4 = <<"; + +mysql_query("INSERT INTO '$prefix_items' VALUES (1, 1, 'Stick', 10, 2, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (2, 1, 'Branch', 30, 4, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (3, 1, 'Club', 40, 5, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (4, 1, 'Dagger', 90, 8, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (5, 1, 'Hatchet', 150, 12, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (6, 1, 'Axe', 200, 16, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (7, 1, 'Brand', 300, 25, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (8, 1, 'Poleaxe', 500, 35, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (9, 1, 'Broadsword', 800, 45, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (10, 1, 'Battle Axe', 1200, 50, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (11, 1, 'Claymore', 2000, 60, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (12, 1, 'Dark Axe', 3000, 100, 'expbonus,-5')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (13, 1, 'Dark Sword', 4500, 125, 'expbonus,-10')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (14, 1, 'Bright Sword', 6000, 100, 'expbonus,10')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (15, 1, 'Magic Sword', 10000, 150, 'maxmp,50')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (16, 1, 'Destiny Blade', 50000, 250, 'strength,50')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (17, 2, 'Skivvies', 25, 2, 'goldbonus,10')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (18, 2, 'Clothes', 50, 5, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (19, 2, 'Leather Armor', 75, 10, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (20, 2, 'Hard Leather Armor', 150, 25, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (21, 2, 'Chain Mail', 300, 30, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (22, 2, 'Bronze Plate', 900, 50, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (23, 2, 'Iron Plate', 2000, 100, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (24, 2, 'Magic Armor', 4000, 125, 'maxmp,50')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (25, 2, 'Dark Armor', 5000, 150, 'expbonus,-10')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (26, 2, 'Bright Armor', 10000, 175, 'expbonus,10')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (27, 2, 'Destiny Raiment', 50000, 200, 'dexterity,50')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (28, 3, 'Reed Shield', 50, 2, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (29, 3, 'Buckler', 100, 4, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (30, 3, 'Small Shield', 500, 10, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (31, 3, 'Large Shield', 2500, 30, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (32, 3, 'Silver Shield', 10000, 60, 'X')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_items' VALUES (33, 3, 'Destiny Aegis', 25000, 100, 'maxhp,50')") or die(mysql_error()); +echo "Populated Items table.
"; + +$query5 = <<"; + +mysql_query("INSERT INTO '$prefix_levels' VALUES (1, 0, 15, 0, 5, 5, 5, 0, 0, 15, 0, 5, 5, 5, 0, 0, 15, 0, 5, 5, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (2, 15, 2, 5, 1, 0, 1, 1, 18, 2, 4, 1, 2, 1, 1, 20, 2, 5, 1, 0, 2, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (3, 45, 3, 4, 2, 1, 2, 0, 54, 2, 3, 2, 3, 2, 0, 60, 2, 3, 2, 1, 3, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (4, 105, 3, 3, 2, 1, 2, 6, 126, 2, 3, 2, 3, 2, 0, 140, 2, 4, 2, 1, 3, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (5, 195, 2, 5, 2, 0, 1, 0, 234, 2, 4, 2, 2, 1, 6, 260, 2, 4, 2, 0, 2, 6)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (6, 330, 4, 5, 2, 2, 3, 0, 396, 3, 4, 2, 4, 3, 0, 440, 3, 5, 2, 2, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (7, 532, 3, 4, 2, 1, 2, 11, 639, 2, 3, 2, 3, 2, 0, 710, 2, 3, 2, 1, 3, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (8, 835, 2, 4, 2, 0, 1, 0, 1003, 2, 3, 2, 2, 1, 11, 1115, 2, 4, 2, 0, 2, 11)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (9, 1290, 5, 3, 2, 3, 4, 2, 1549, 4, 2, 2, 5, 4, 0, 1722, 4, 2, 2, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (10, 1973, 10, 3, 2, 4, 3, 0, 2369, 10, 2, 2, 6, 3, 0, 2633, 10, 3, 2, 4, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (11, 2997, 5, 2, 2, 3, 4, 0, 3598, 4, 1, 2, 5, 4, 2, 3999, 4, 1, 2, 3, 5, 2)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (12, 4533, 4, 2, 2, 2, 3, 7, 5441, 4, 1, 2, 4, 3, 0, 6047, 4, 2, 2, 2, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (13, 6453, 4, 3, 2, 2, 3, 0, 7745, 4, 2, 2, 4, 3, 0, 8607, 4, 2, 2, 2, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (14, 8853, 5, 4, 2, 3, 4, 17, 10625, 4, 3, 2, 5, 4, 7, 11807, 4, 4, 2, 3, 5, 7)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (15, 11853, 5, 5, 2, 3, 4, 0, 14225, 4, 4, 2, 5, 4, 0, 15808, 4, 4, 2, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (16, 15603, 5, 3, 2, 3, 4, 0, 18725, 5, 2, 2, 5, 4, 0, 20807, 5, 3, 2, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (17, 20290, 4, 2, 2, 2, 3, 12, 24350, 4, 1, 2, 4, 3, 0, 27057, 4, 1, 2, 2, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (18, 25563, 4, 2, 2, 2, 3, 0, 30678, 3, 1, 2, 4, 3, 14, 34869, 3, 2, 2, 2, 4, 17)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (19, 31495, 4, 5, 2, 2, 3, 0, 37797, 3, 4, 2, 4, 3, 0, 43657, 3, 4, 2, 2, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (20, 38169, 10, 6, 2, 3, 3, 0, 45805, 10, 5, 2, 5, 3, 0, 53543, 10, 6, 2, 3, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (21, 45676, 4, 4, 2, 2, 3, 0, 54814, 4, 3, 2, 4, 3, 0, 64664, 4, 3, 2, 2, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (22, 54121, 5, 5, 2, 3, 4, 0, 64949, 4, 4, 2, 5, 4, 12, 77175, 4, 5, 2, 3, 5, 12)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (23, 63622, 5, 3, 2, 3, 4, 0, 76350, 4, 2, 2, 5, 4, 0, 91250, 4, 2, 2, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (24, 74310, 5, 5, 2, 3, 4, 0, 89176, 4, 4, 2, 5, 4, 0, 107083, 4, 5, 2, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (25, 86334, 4, 4, 2, 2, 3, 3, 103605, 3, 3, 2, 4, 3, 17, 124895, 3, 3, 2, 2, 4, 14)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (26, 99861, 6, 3, 2, 4, 5, 0, 119837, 5, 2, 2, 6, 5, 0, 144933, 5, 3, 2, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (27, 115078, 6, 2, 2, 4, 5, 0, 138098, 5, 1, 2, 6, 5, 0, 167475, 5, 1, 2, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (28, 132197, 4, 2, 2, 2, 3, 0, 158641, 4, 1, 2, 4, 3, 0, 192835, 4, 2, 2, 2, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (29, 151456, 6, 3, 2, 4, 5, 0, 181751, 5, 2, 2, 6, 5, 3, 221365, 5, 2, 2, 4, 6, 3)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (30, 173121, 10, 4, 3, 4, 4, 0, 207749, 10, 3, 3, 6, 4, 0, 253461, 10, 4, 3, 4, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (31, 197494, 5, 5, 3, 3, 4, 8, 236996, 4, 3, 3, 5, 4, 0, 289568, 4, 3, 3, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (32, 224913, 6, 4, 3, 4, 5, 0, 269898, 5, 3, 3, 6, 5, 0, 330188, 5, 4, 3, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (33, 255758, 5, 4, 3, 3, 4, 0, 306912, 5, 3, 3, 5, 4, 0, 375885, 5, 3, 3, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (34, 290458, 6, 4, 3, 4, 5, 0, 348552, 5, 3, 3, 6, 5, 8, 427294, 5, 4, 3, 4, 6, 8)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (35, 329495, 5, 3, 3, 3, 4, 0, 395397, 4, 2, 3, 5, 4, 0, 485126, 4, 2, 3, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (36, 373412, 4, 3, 3, 2, 3, 18, 448097, 5, 2, 3, 4, 3, 0, 550188, 5, 3, 3, 2, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (37, 422818, 5, 4, 3, 3, 4, 0, 507384, 5, 3, 3, 5, 4, 0, 623383, 5, 3, 3, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (38, 478399, 6, 5, 3, 4, 5, 0, 574081, 5, 4, 3, 6, 5, 15, 705726, 5, 5, 3, 4, 6, 18)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (39, 540927, 6, 4, 3, 4, 5, 0, 649115, 5, 3, 3, 6, 5, 0, 798362, 5, 3, 3, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (40, 611271, 15, 3, 3, 5, 5, 13, 733528, 15, 2, 3, 7, 5, 0, 902577, 15, 3, 3, 5, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (41, 690408, 7, 3, 3, 5, 2, 0, 828492, 6, 2, 3, 7, 2, 0, 1019818, 6, 2, 3, 5, 3, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (42, 779437, 7, 4, 3, 5, 6, 0, 935326, 6, 3, 3, 7, 6, 0, 1151714, 6, 4, 3, 5, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (43, 879592, 8, 5, 3, 6, 7, 0, 1055514, 7, 4, 3, 8, 7, 0, 1300096, 7, 4, 3, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (44, 992268, 6, 3, 3, 4, 5, 0, 1190725, 5, 2, 3, 6, 5, 0, 1448478, 5, 3, 3, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (45, 1119028, 5, 8, 3, 3, 4, 4, 1325936, 5, 8, 3, 5, 4, 18, 1596860, 5, 8, 3, 3, 5, 4)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (46, 1245788, 6, 5, 3, 4, 5, 0, 1461147, 5, 4, 3, 6, 5, 0, 1745242, 5, 5, 3, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (47, 1372548, 7, 4, 3, 5, 6, 0, 1596358, 6, 3, 3, 7, 6, 0, 1893624, 6, 3, 3, 5, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (48, 1499308, 6, 4, 3, 4, 5, 0, 1731569, 5, 3, 3, 6, 5, 0, 2042006, 5, 4, 3, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (49, 1626068, 5, 3, 3, 3, 4, 0, 1866780, 4, 2, 3, 5, 4, 0, 2190388, 4, 2, 3, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (50, 1752828, 15, 3, 3, 5, 5, 0, 2001991, 15, 2, 3, 7, 5, 0, 2338770, 15, 3, 3, 5, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (51, 1879588, 6, 2, 3, 4, 5, 9, 2137202, 5, 1, 3, 6, 5, 13, 2487152, 5, 1, 3, 4, 6, 13)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (52, 2006348, 7, 2, 3, 5, 6, 0, 2272413, 6, 1, 3, 7, 6, 0, 2635534, 6, 2, 3, 5, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (53, 2133108, 8, 2, 3, 6, 7, 0, 2407624, 7, 1, 3, 8, 7, 0, 2783916, 7, 1, 3, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (54, 2259868, 8, 4, 3, 6, 7, 0, 2542835, 7, 3, 3, 8, 7, 0, 2932298, 7, 4, 3, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (55, 2386628, 7, 4, 3, 5, 6, 0, 2678046, 6, 3, 3, 7, 6, 0, 3080680, 6, 3, 3, 5, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (56, 2513388, 7, 4, 3, 5, 6, 0, 2813257, 6, 3, 3, 7, 6, 0, 3229062, 6, 4, 3, 5, 7, 9)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (57, 2640148, 6, 5, 3, 4, 5, 0, 2948468, 6, 4, 3, 6, 5, 0, 3377444, 6, 4, 3, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (58, 2766908, 5, 5, 3, 3, 4, 0, 3083679, 5, 4, 3, 5, 4, 19, 3525826, 5, 5, 3, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (59, 2893668, 8, 3, 3, 6, 7, 0, 3218890, 7, 2, 3, 8, 7, 0, 3674208, 7, 2, 3, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (60, 3020428, 15, 4, 4, 6, 6, 19, 3354101, 15, 3, 4, 8, 6, 0, 3822590, 15, 4, 4, 6, 7, 15)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (61, 3147188, 8, 5, 4, 6, 7, 0, 3489312, 7, 4, 4, 8, 7, 0, 3970972, 7, 4, 4, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (62, 3273948, 8, 4, 4, 6, 7, 0, 3624523, 7, 3, 4, 8, 7, 0, 4119354, 7, 4, 4, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (63, 3400708, 9, 5, 4, 7, 8, 0, 3759734, 8, 4, 4, 9, 8, 0, 4267736, 8, 4, 4, 7, 9, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (64, 3527468, 5, 5, 4, 3, 4, 0, 3894945, 5, 4, 4, 5, 4, 0, 4416118, 5, 5, 4, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (65, 3654228, 6, 4, 4, 4, 5, 0, 4030156, 6, 3, 4, 6, 5, 0, 4564500, 6, 3, 4, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (66, 3780988, 8, 4, 4, 6, 7, 0, 4165367, 8, 3, 4, 8, 7, 0, 4712882, 8, 4, 4, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (67, 3907748, 7, 3, 4, 5, 6, 0, 4300578, 7, 2, 4, 7, 6, 0, 4861264, 7, 2, 4, 5, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (68, 4034508, 9, 3, 4, 7, 8, 0, 4435789, 8, 2, 4, 9, 8, 0, 5009646, 8, 3, 4, 7, 9, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (69, 4161268, 5, 4, 4, 3, 4, 0, 4571000, 5, 3, 4, 5, 4, 0, 5158028, 5, 3, 4, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (70, 4288028, 20, 4, 4, 6, 6, 5, 4706211, 20, 3, 4, 8, 6, 16, 5306410, 20, 4, 4, 6, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (71, 4414788, 5, 5, 4, 3, 4, 0, 4841422, 5, 4, 4, 5, 4, 0, 5454792, 5, 4, 4, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (72, 4541548, 6, 2, 4, 4, 5, 0, 4976633, 5, 1, 4, 6, 5, 0, 5603174, 5, 2, 4, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (73, 4668308, 8, 4, 4, 6, 7, 0, 5111844, 8, 3, 4, 8, 7, 0, 5751556, 8, 3, 4, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (74, 4795068, 7, 5, 4, 5, 6, 0, 5247055, 6, 4, 4, 7, 6, 0, 5899938, 6, 5, 4, 5, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (75, 4921828, 5, 3, 4, 3, 4, 0, 5382266, 5, 2, 4, 5, 4, 0, 6048320, 5, 2, 4, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (76, 5048588, 6, 3, 4, 4, 5, 0, 5517477, 6, 2, 4, 6, 5, 0, 6196702, 6, 3, 4, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (77, 5175348, 6, 4, 4, 4, 5, 0, 5652688, 7, 3, 4, 6, 5, 0, 6345084, 7, 3, 4, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (78, 5302108, 7, 4, 4, 5, 6, 0, 5787899, 7, 3, 4, 7, 6, 0, 6493466, 7, 4, 4, 5, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (79, 5428868, 8, 4, 4, 6, 7, 10, 5923110, 7, 3, 4, 8, 7, 0, 6641848, 7, 3, 4, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (80, 5555628, 20, 5, 4, 6, 7, 0, 6058321, 20, 4, 4, 8, 7, 0, 6790230, 20, 5, 4, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (81, 5682388, 7, 3, 4, 5, 6, 0, 6193532, 7, 2, 4, 7, 6, 0, 6938612, 7, 2, 4, 5, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (82, 5809148, 6, 4, 4, 4, 5, 0, 6328743, 5, 3, 4, 6, 5, 0, 7086994, 5, 4, 4, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (83, 5935908, 6, 2, 4, 4, 5, 0, 6463954, 6, 1, 4, 6, 5, 0, 7235376, 6, 1, 4, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (84, 6062668, 5, 4, 4, 3, 4, 0, 6599165, 5, 3, 4, 5, 4, 0, 7383758, 5, 4, 4, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (85, 6189428, 7, 4, 4, 5, 6, 0, 6734376, 6, 3, 4, 7, 6, 0, 7532140, 6, 3, 4, 5, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (86, 6316188, 8, 5, 4, 6, 7, 0, 6869587, 8, 4, 4, 8, 7, 0, 7680522, 8, 5, 4, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (87, 6442948, 8, 4, 4, 6, 7, 0, 7004798, 7, 3, 4, 8, 7, 0, 7828904, 7, 3, 4, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (88, 6569708, 9, 5, 4, 7, 8, 0, 7140009, 8, 4, 4, 9, 8, 0, 7977286, 8, 5, 4, 7, 9, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (89, 6696468, 5, 2, 4, 3, 4, 0, 7275220, 5, 1, 4, 5, 4, 0, 8125668, 5, 1, 4, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (90, 6823228, 20, 2, 5, 7, 8, 0, 7410431, 20, 1, 5, 9, 8, 0, 8274050, 20, 2, 5, 7, 9, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (91, 6949988, 5, 3, 5, 3, 4, 0, 7545642, 5, 2, 5, 5, 4, 0, 8422432, 5, 2, 5, 3, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (92, 7076748, 6, 3, 5, 4, 5, 0, 7680853, 4, 2, 5, 6, 5, 0, 8570814, 4, 3, 5, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (93, 7203508, 8, 4, 5, 6, 7, 0, 7816064, 6, 2, 5, 8, 7, 0, 8719196, 6, 2, 5, 6, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (94, 7330268, 4, 4, 5, 3, 3, 0, 7951275, 4, 3, 5, 5, 3, 0, 8867578, 4, 4, 5, 3, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (95, 7457028, 3, 3, 5, 5, 2, 0, 8086486, 4, 2, 5, 7, 2, 0, 9015960, 4, 2, 5, 5, 3, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (96, 7583788, 5, 3, 5, 4, 3, 0, 8221697, 5, 2, 5, 7, 3, 0, 9164342, 5, 3, 5, 4, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (97, 7710548, 5, 4, 5, 4, 5, 0, 8356908, 5, 3, 5, 7, 5, 0, 9312724, 5, 3, 5, 4, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (98, 7837308, 4, 5, 5, 4, 3, 0, 8492119, 4, 3, 5, 7, 3, 0, 9461106, 4, 4, 5, 4, 4, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (99, 7964068, 50, 5, 5, 6, 5, 0, 8627330, 50, 3, 5, 9, 5, 0, 9609488, 50, 4, 5, 6, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_levels' VALUES (100, 16777215, 0, 0, 0, 0, 0, 0, 16777215, 0, 0, 0, 0, 0, 0, 16777215, 0, 0, 0, 0, 0, 0)") or die(mysql_error()); +echo "Populated Levels table.
"; + +$query6 = <<"; + +mysql_query("INSERT INTO '$prefix_monsters' VALUES (1, 'Blue Slime', 4, 3, 1, 1, 1, 1, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (2, 'Red Slime', 6, 5, 1, 1, 2, 1, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (3, 'Critter', 6, 5, 2, 1, 4, 2, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (4, 'Creature', 10, 8, 2, 2, 4, 2, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (5, 'Shadow', 10, 9, 3, 2, 6, 2, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (6, 'Drake', 11, 10, 3, 2, 8, 3, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (7, 'Shade', 12, 10, 3, 3, 10, 3, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (8, 'Drakelor', 14, 12, 4, 3, 10, 3, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (9, 'Silver Slime', 15, 100, 200, 30, 15, 1000, 2)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (10, 'Scamp', 16, 13, 5, 4, 15, 5, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (11, 'Raven', 16, 13, 5, 4, 18, 6, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (12, 'Scorpion', 18, 14, 6, 5, 20, 7, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (13, 'Illusion', 20, 15, 6, 5, 20, 7, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (14, 'Nightshade', 22, 16, 6, 6, 24, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (15, 'Drakemal', 22, 18, 7, 6, 24, 8, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (16, 'Shadow Raven', 24, 18, 7, 6, 26, 9, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (17, 'Ghost', 24, 20, 8, 6, 28, 9, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (18, 'Frost Raven', 26, 20, 8, 7, 30, 10, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (19, 'Rogue Scorpion', 28, 22, 9, 7, 32, 11, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (20, 'Ghoul', 29, 24, 9, 7, 34, 11, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (21, 'Magician', 30, 24, 10, 8, 36, 12, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (22, 'Rogue', 30, 25, 12, 8, 40, 13, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (23, 'Drakefin', 32, 26, 12, 8, 40, 13, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (24, 'Shimmer', 32, 26, 14, 8, 45, 15, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (25, 'Fire Raven', 34, 28, 14, 9, 45, 15, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (26, 'Dybbuk', 34, 28, 14, 9, 50, 17, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (27, 'Knave', 36, 30, 15, 9, 52, 17, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (28, 'Goblin', 36, 30, 15, 10, 54, 18, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (29, 'Skeleton', 38, 30, 18, 10, 58, 19, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (30, 'Dark Slime', 38, 32, 18, 10, 62, 21, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (31, 'Silver Scorpion', 30, 160, 350, 40, 63, 2000, 2)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (32, 'Mirage', 40, 32, 20, 11, 64, 21, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (33, 'Sorceror', 41, 33, 22, 11, 68, 23, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (34, 'Imp', 42, 34, 22, 12, 70, 23, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (35, 'Nymph', 43, 35, 22, 12, 70, 23, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (36, 'Scoundrel', 43, 35, 22, 12, 75, 25, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (37, 'Megaskeleton', 44, 36, 24, 13, 78, 26, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (38, 'Grey Wolf', 44, 36, 24, 13, 82, 27, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (39, 'Phantom', 46, 38, 24, 14, 85, 28, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (40, 'Specter', 46, 38, 24, 14, 90, 30, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (41, 'Dark Scorpion', 48, 40, 26, 15, 95, 32, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (42, 'Warlock', 48, 40, 26, 15, 100, 33, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (43, 'Orc', 49, 42, 28, 15, 104, 35, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (44, 'Sylph', 49, 42, 28, 15, 106, 35, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (45, 'Wraith', 50, 45, 30, 16, 108, 36, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (46, 'Hellion', 50, 45, 30, 16, 110, 37, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (47, 'Bandit', 52, 45, 30, 16, 114, 38, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (48, 'Ultraskeleton', 52, 46, 32, 16, 116, 39, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (49, 'Dark Wolf', 54, 47, 36, 17, 120, 40, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (50, 'Troll', 56, 48, 36, 17, 120, 40, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (51, 'Werewolf', 56, 48, 38, 17, 124, 41, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (52, 'Hellcat', 58, 50, 38, 18, 128, 43, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (53, 'Spirit', 58, 50, 38, 18, 132, 44, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (54, 'Nisse', 60, 52, 40, 19, 132, 44, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (55, 'Dawk', 60, 54, 40, 19, 136, 45, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (56, 'Figment', 64, 55, 42, 19, 140, 47, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (57, 'Hellhound', 66, 56, 44, 20, 140, 47, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (58, 'Wizard', 66, 56, 44, 20, 144, 48, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (59, 'Uruk', 68, 58, 44, 20, 146, 49, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (60, 'Siren', 68, 400, 800, 50, 10000, 50, 2)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (61, 'Megawraith', 70, 60, 46, 21, 155, 52, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (62, 'Dawkin', 70, 60, 46, 21, 155, 52, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (63, 'Grey Bear', 70, 62, 48, 21, 160, 53, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (64, 'Haunt', 72, 62, 48, 22, 160, 53, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (65, 'Hellbeast', 74, 64, 50, 22, 165, 55, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (66, 'Fear', 76, 66, 52, 23, 165, 55, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (67, 'Beast', 76, 66, 52, 23, 170, 57, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (68, 'Ogre', 78, 68, 54, 23, 170, 57, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (69, 'Dark Bear', 80, 70, 56, 24, 175, 58, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (70, 'Fire', 80, 72, 56, 24, 175, 58, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (71, 'Polgergeist', 84, 74, 58, 25, 180, 60, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (72, 'Fright', 86, 76, 58, 25, 180, 60, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (73, 'Lycan', 88, 78, 60, 25, 185, 62, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (74, 'Terra Elemental', 88, 80, 62, 25, 185, 62, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (75, 'Necromancer', 90, 80, 62, 26, 190, 63, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (76, 'Ultrawraith', 90, 82, 64, 26, 190, 63, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (77, 'Dawkor', 92, 82, 64, 26, 195, 65, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (78, 'Werebear', 92, 84, 65, 26, 195, 65, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (79, 'Brute', 94, 84, 65, 27, 200, 67, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (80, 'Large Beast', 96, 88, 66, 27, 200, 67, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (81, 'Horror', 96, 88, 68, 27, 210, 70, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (82, 'Flame', 100, 90, 70, 28, 210, 70, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (83, 'Lycanthor', 100, 90, 70, 28, 210, 70, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (84, 'Wyrm', 100, 92, 72, 28, 220, 73, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (85, 'Aero Elemental', 104, 94, 74, 29, 220, 73, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (86, 'Dawkare', 106, 96, 76, 29, 220, 73, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (87, 'Large Brute', 108, 98, 78, 29, 230, 77, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (88, 'Frost Wyrm', 110, 100, 80, 30, 230, 77, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (89, 'Knight', 110, 102, 80, 30, 240, 80, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (90, 'Lycanthra', 112, 104, 82, 30, 240, 80, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (91, 'Terror', 115, 108, 84, 31, 250, 83, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (92, 'Blaze', 118, 108, 84, 31, 250, 83, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (93, 'Aqua Elemental', 120, 110, 90, 31, 260, 87, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (94, 'Fire Wyrm', 120, 110, 90, 32, 260, 87, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (95, 'Lesser Wyvern', 122, 110, 92, 32, 270, 90, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (96, 'Doomer', 124, 112, 92, 32, 270, 90, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (97, 'Armor Knight', 130, 115, 95, 33, 280, 93, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (98, 'Wyvern', 134, 120, 95, 33, 290, 97, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (99, 'Nightmare', 138, 125, 100, 33, 300, 100, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (100, 'Fira Elemental', 140, 125, 100, 34, 310, 103, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (101, 'Megadoomer', 140, 128, 105, 34, 320, 107, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (102, 'Greater Wyvern', 145, 130, 105, 34, 335, 112, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (103, 'Advocate', 148, 132, 108, 35, 350, 117, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (104, 'Strong Knight', 150, 135, 110, 35, 365, 122, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (105, 'Liche', 150, 135, 110, 35, 380, 127, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (106, 'Ultradoomer', 155, 140, 115, 36, 395, 132, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (107, 'Fanatic', 160, 140, 115, 36, 410, 137, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (108, 'Green Dragon', 160, 140, 115, 36, 425, 142, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (109, 'Fiend', 160, 145, 120, 37, 445, 148, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (110, 'Greatest Wyvern', 162, 150, 120, 37, 465, 155, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (111, 'Lesser Devil', 164, 150, 120, 37, 485, 162, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (112, 'Liche Master', 168, 155, 125, 38, 505, 168, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (113, 'Zealot', 168, 155, 125, 38, 530, 177, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (114, 'Serafiend', 170, 155, 125, 38, 555, 185, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (115, 'Pale Knight', 175, 160, 130, 39, 580, 193, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (116, 'Blue Dragon', 180, 160, 130, 39, 605, 202, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (117, 'Obsessive', 180, 160, 135, 40, 630, 210, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (118, 'Devil', 184, 164, 135, 40, 666, 222, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (119, 'Liche Prince', 190, 168, 138, 40, 660, 220, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (120, 'Cherufiend', 195, 170, 140, 41, 690, 230, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (121, 'Red Dragon', 200, 180, 145, 41, 720, 240, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (122, 'Greater Devil', 200, 180, 145, 41, 750, 250, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (123, 'Renegade', 205, 185, 150, 42, 780, 260, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (124, 'Archfiend', 210, 190, 150, 42, 810, 270, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (125, 'Liche Lord', 210, 190, 155, 42, 850, 283, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (126, 'Greatest Devil', 215, 195, 160, 43, 890, 297, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (127, 'Dark Knight', 220, 200, 160, 43, 930, 310, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (128, 'Giant', 220, 200, 165, 43, 970, 323, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (129, 'Shadow Dragon', 225, 200, 170, 44, 1010, 337, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (130, 'Liche King', 225, 205, 170, 44, 1050, 350, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (131, 'Incubus', 230, 205, 175, 44, 1100, 367, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (132, 'Traitor', 230, 205, 175, 45, 1150, 383, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (133, 'Demon', 240, 210, 180, 45, 1200, 400, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (134, 'Dark Dragon', 245, 215, 180, 45, 1250, 417, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (135, 'Insurgent', 250, 220, 190, 46, 1300, 433, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (136, 'Leviathan', 255, 225, 190, 46, 1350, 450, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (137, 'Grey Daemon', 260, 230, 190, 46, 1400, 467, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (138, 'Succubus', 265, 240, 200, 47, 1460, 487, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (139, 'Demon Prince', 270, 240, 200, 47, 1520, 507, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (140, 'Black Dragon', 275, 250, 205, 47, 1580, 527, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (141, 'Nihilist', 280, 250, 205, 47, 1640, 547, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (142, 'Behemoth', 285, 260, 210, 48, 1700, 567, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (143, 'Demagogue', 290, 260, 210, 48, 1760, 587, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (144, 'Demon Lord', 300, 270, 220, 48, 1820, 607, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (145, 'Red Daemon', 310, 280, 230, 48, 1880, 627, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (146, 'Colossus', 320, 300, 240, 49, 1940, 647, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (147, 'Demon King', 330, 300, 250, 49, 2000, 667, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (148, 'Dark Daemon', 340, 320, 260, 49, 2200, 733, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (149, 'Titan', 360, 340, 270, 50, 2400, 800, 0)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (150, 'Black Daemon', 400, 400, 280, 50, 3000, 1000, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_monsters' VALUES (151, 'Lucifuge', 600, 600, 400, 50, 10000, 10000, 2)") or die(mysql_error()); +echo "Populated Monsters table.
"; + +$query7 = <<"; + +mysql_query("INSERT INTO '$prefix_news' VALUES (1, '2003-12-18 12:00:00', 'Test news post.')") or die(mysql_query()); +echo "Populated News table.
"; + +$query8 = <<"; + +mysql_query("INSERT INTO '$prefix_spells' VALUES (1, 'Heal', 5, 10, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (2, 'Revive', 10, 25, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (3, 'Life', 25, 50, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (4, 'Breath', 50, 100, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (5, 'Gaia', 75, 150, 1)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (6, 'Hurt', 5, 15, 2)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (7, 'Pain', 12, 35, 2)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (8, 'Maim', 25, 70, 2)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (9, 'Rend', 40, 100, 2)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (10, 'Chaos', 50, 130, 2)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (11, 'Sleep', 10, 5, 3)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (12, 'Dream', 30, 9, 3)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (13, 'Nightmare', 60, 13, 3)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (14, 'Craze', 10, 10, 4)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (15, 'Rage', 20, 25, 4)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (16, 'Fury', 30, 50, 4)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (17, 'Ward', 10, 10, 5)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (18, 'Fend', 20, 25, 5)") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_spells' VALUES (19, 'Barrier', 30, 50, 5)") or die(mysql_error()); +echo "Populated Spells table.
"; + +$query9 = <<"; + +mysql_query("INSERT INTO '$prefix_towns' VALUES (1, 'Midworld', 0, 0, 5, 0, 0, '1,2,3,17,18,19,28,29')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_towns' VALUES (2, 'Roma', 30, 30, 10, 25, 5, '2,3,4,18,19,29')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_towns' VALUES (3, 'Bris', 70, -70, 25, 50, 15, '2,3,4,5,18,19,20,29.30')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_towns' VALUES (4, 'Kalle', -100, 100, 40, 100, 30, '5,6,8,10,12,21,22,23,29,30')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_towns' VALUES (5, 'Narcissa', -130, -130, 60, 500, 50, '4,7,9,11,13,21,22,23,29,30,31')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_towns' VALUES (6, 'Hambry', 170, 170, 90, 1000, 80, '10,11,12,13,14,23,24,30,31')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_towns' VALUES (7, 'Gilead', 200, -200, 100, 3000, 110, '12,13,14,15,24,25,26,32')") or die(mysql_error()); +mysql_query("INSERT INTO '$prefix_towns' VALUES (8, 'Endworld', -250, -250, 125, 9000, 160, '16,27,33')") or die(mysql_error()); +echo "Populated Towns table.
"; + +$query10 = <<"; + +echo "INSTALL COMPLETE."; + +} + +?> \ No newline at end of file diff --git a/admin/lib.php b/admin/lib.php new file mode 100644 index 0000000..cc67674 --- /dev/null +++ b/admin/lib.php @@ -0,0 +1,147 @@ + $b) { + $template = str_replace("{{{$a}}}", $b, $template); + } + return $template; + +} + +function getmicrotime() { // Used for timing script operations. + + list($usec, $sec) = explode(" ",microtime()); + return ((float)$usec + (float)$sec); + +} + +function prettydate($uglydate) { // Change the MySQL date format (YYYY-MM-DD) into something friendlier. + + return date("F j, Y", mktime(0,0,0,substr($uglydate, 5, 2),substr($uglydate, 8, 2),substr($uglydate, 0, 4))); + +} + +function is_email($email) { // Thanks to "mail(at)philipp-louis.de" from php.net! + + return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email)); + +} + +function my_htmlspecialchars($text) { // Thanks to "etymxris at yahoo dot com" from php.net! + + $ALLOWABLE_TAGS = array("b", "i", "u", "p", "blockquote", "ol", "ul", "li"); + static $PATTERNS = array(); + static $REPLACEMENTS = array(); + if (count($PATTERNS) == 0) { + foreach ($ALLOWABLE_TAGS as $tag) { + $PATTERNS[] = "/<$tag>/i"; + $PATTERNS[] = "/<\/$tag>/i"; + $REPLACEMENTS[] = "<$tag>"; + $REPLACEMENTS[] = ""; + } + } + + $result = str_replace(array(">", "<", "\"", "'"), + array(">", "<", """, "'"), + $text); + + $result = preg_replace($PATTERNS, $REPLACEMENTS, $result); + + return $result; + +} + +function checkcookies() { + + include('../config.php'); + + $row = false; + + if (isset($_COOKIE["dkgame"])) { + + // COOKIE FORMAT: + // {ID} {USERNAME} {PASSWORDHASH} {REMEMBERME} + $theuser = explode(" ",$_COOKIE["dkgame"]); + $query = doquery("SELECT * FROM {{table}} WHERE username='$theuser[1]'", "users"); + if (mysql_num_rows($query) != 1) { die("Invalid cookie data (Error 1). Please clear cookies and log in again."); } + $row = mysql_fetch_array($query); + if ($row["id"] != $theuser[0]) { die("Invalid cookie data (Error 2). Please clear cookies and log in again."); } + if (md5($row["password"] . "--" . $dbsettings["secretword"]) != $theuser[2]) { die("Invalid cookie data (Error 3). Please clear cookies and log in again."); } + + // If we've gotten this far, cookie should be valid, so write a new one. + $newcookie = implode(" ",$theuser); + if ($theuser[3] == 1) { $expiretime = time()+31536000; } else { $expiretime = 0; } + setcookie ("dkgame", $newcookie, $expiretime, "/", "", 0); + $onlinequery = doquery("UPDATE {{table}} SET onlinetime=NOW() WHERE id='$theuser[0]' LIMIT 1", "users"); + + } + + return $row; + +} + +function display($content, $title) { // Finalize page and output to browser. + + include('../config.php'); + global $numqueries, $userrow, $controlrow, $starttime; + if (!isset($controlrow)) { + $controlquery = doquery("SELECT * FROM {{table}} WHERE id='1' LIMIT 1", "control"); + $controlrow = mysql_fetch_array($controlquery); + } + + $template = gettemplate("admin"); + + // Make page tags for XHTML validation. + $xml = "\n" + . "\n" + . "\n"; + + $finalarray = array( + "title"=>$title, + "content"=>$content, + "totaltime"=>round(getmicrotime() - $starttime, 4), + "numqueries"=>$numqueries, + "version"=>$version, + "build"=>$build); + $page = parsetemplate($template, $finalarray); + $page = $xml . $page; + + if ($controlrow["compression"] == 1) { ob_start("ob_gzhandler"); } + echo $page; + die(); + +} + +?> \ No newline at end of file diff --git a/config.php b/config.php new file mode 100644 index 0000000..70a431e --- /dev/null +++ b/config.php @@ -0,0 +1,16 @@ + "localhost", // MySQL server name. (Default: localhost) + "user" => "", // MySQL username. + "pass" => "", // MySQL password. + "name" => "", // MySQL database name. + "prefix" => "dk", // Prefix for table names. (Default: dk) + "secretword" => ""); // Secret word used when hashing information for cookies. + +// These are used for display purposes only. Technically you could change them, but it's not going to +// do anything special. And I'd prefer if you didn't, just to keep things all nice and standardized. +$version = "1.0.0"; +$build = ""; + +?> \ No newline at end of file diff --git a/explore.php b/explore.php new file mode 100644 index 0000000..252ee96 --- /dev/null +++ b/explore.php @@ -0,0 +1,37 @@ + $controlrow["gamesize"]) { $latitude = $controlrow["gamesize"]; } } + if (isset($_POST["south"])) { $latitude--; if ($latitude < ($controlrow["gamesize"]*-1)) { $latitude = ($controlrow["gamesize"]*-1); } } + if (isset($_POST["east"])) { $longitude++; if ($longitude > $controlrow["gamesize"]) { $longitude = $controlrow["gamesize"]; } } + if (isset($_POST["west"])) { $longitude--; if ($longitude < ($controlrow["gamesize"]*-1)) { $longitude = ($controlrow["gamesize"]*-1); } } + + $townquery = doquery("SELECT id FROM {{table}} WHERE latitude='$latitude' AND longitude='$longitude' LIMIT 1", "towns"); + if (mysql_num_rows($townquery) > 0) { + $townrow = mysql_fetch_array($townquery); + include('towns.php'); + travelto($townrow["id"], false); + die(); + } + + $chancetofight = rand(1,5); + if ($chancetofight == 1) { + $action = "currentaction='Fighting', currentfight='1',"; + } else { + $action = "currentaction='Exploring',"; + } + + + $updatequery = doquery("UPDATE {{table}} SET $action latitude='$latitude', longitude='$longitude', dropcode='0' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + header("Location: index.php"); + +} + +?> \ No newline at end of file diff --git a/fight.php b/fight.php new file mode 100644 index 0000000..1fe141a --- /dev/null +++ b/fight.php @@ -0,0 +1,531 @@ +".$spellrow["name"]."\n"; + } + } + if ($pagearray["magiclist"] == "") { $pagearray["magiclist"] = "\n"; } + $magiclist = $pagearray["magiclist"]; + + $chancetoswingfirst = 1; + + // First, check to see if we need to pick a monster. + if ($userrow["currentfight"] == 1) { + + if ($userrow["latitude"] < 0) { $userrow["latitude"] *= -1; } // Equalize negatives. + if ($userrow["longitude"] < 0) { $userrow["longitude"] *= -1; } // Ditto. + $maxlevel = floor(max($userrow["latitude"]+5, $userrow["longitude"]+5) / 5); // One mlevel per five spaces. + if ($maxlevel < 1) { $maxlevel = 1; } + $minlevel = $maxlevel - 2; + if ($minlevel < 1) { $minlevel = 1; } + + + // Pick a monster. + $monsterquery = doquery("SELECT * FROM {{table}} WHERE level>='$minlevel' AND level<='$maxlevel' ORDER BY RAND() LIMIT 1", "monsters"); + $monsterrow = mysql_fetch_array($monsterquery); + $userrow["currentmonster"] = $monsterrow["id"]; + $userrow["currentmonsterhp"] = rand((($monsterrow["maxhp"]/5)*4),$monsterrow["maxhp"]); + if ($userrow["difficulty"] == 2) { $userrow["currentmonsterhp"] = ceil($userrow["currentmonsterhp"] * $controlrow["diff2mod"]); } + if ($userrow["difficulty"] == 3) { $userrow["currentmonsterhp"] = ceil($userrow["currentmonsterhp"] * $controlrow["diff3mod"]); } + $userrow["currentmonstersleep"] = 0; + $userrow["currentmonsterimmune"] = $monsterrow["immune"]; + + $chancetoswingfirst = rand(1,10) + ceil(sqrt($userrow["dexterity"])); + if ($chancetoswingfirst > (rand(1,7) + ceil(sqrt($monsterrow["maxdam"])))) { $chancetoswingfirst = 1; } else { $chancetoswingfirst = 0; } + + unset($monsterquery); + unset($monsterrow); + + } + + // Next, get the monster statistics. + $monsterquery = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["currentmonster"]."' LIMIT 1", "monsters"); + $monsterrow = mysql_fetch_array($monsterquery); + $pagearray["monstername"] = $monsterrow["name"]; + + // Do run stuff. + if (isset($_POST["run"])) { + + $chancetorun = rand(4,10) + ceil(sqrt($userrow["dexterity"])); + if ($chancetorun > (rand(1,5) + ceil(sqrt($monsterrow["maxdam"])))) { $chancetorun = 1; } else { $chancetorun = 0; } + + if ($chancetorun == 0) { + $pagearray["yourturn"] = "You tried to run away, but were blocked in front!

"; + $pagearray["monsterhp"] = "Monster's HP: " . $userrow["currentmonsterhp"] . "

"; + $pagearray["monsterturn"] = ""; + if ($userrow["currentmonstersleep"] != 0) { // Check to wake up. + $chancetowake = rand(1,15); + if ($chancetowake > $userrow["currentmonstersleep"]) { + $userrow["currentmonstersleep"] = 0; + $pagearray["monsterturn"] .= "The monster has woken up.
"; + } else { + $pagearray["monsterturn"] .= "The monster is still asleep.
"; + } + } + if ($userrow["currentmonstersleep"] == 0) { // Only do this if the monster is awake. + $tohit = ceil(rand($monsterrow["maxdam"],(($monsterrow["maxdam"]/6)*3))); + if ($userrow["difficulty"] == 2) { $tohit = ceil($tohit * $controlrow["diff2mod"]); } + if ($userrow["difficulty"] == 3) { $tohit = ceil($tohit * $controlrow["diff3mod"]); } + $toblock = ceil(rand($userrow["defensepower"],$userrow["defensepower"]*.75)/4); + $tododge = rand(1,150); + if ($tododge <= sqrt($userrow["dexterity"])) { + $tohit = 0; $pagearray["monsterturn"] .= "You dodge the monster's attack. No damage has been scored.
"; + $persondamage = 0; + } else { + $persondamage = $tohit - $toblock; + if ($persondamage < 1) { $persondamage = 1; } + if ($userrow["currentuberdefense"] != 0) { + $persondamage -= ceil($persondamage * ($userrow["currentuberdefense"]/100)); + } + if ($persondamage < 1) { $persondamage = 1; } + } + $pagearray["monsterturn"] .= "The monster attacks you for $persondamage damage.

"; + $userrow["currenthp"] -= $persondamage; + if ($userrow["currenthp"] <= 0) { + $newgold = ceil($userrow["gold"]/2); + $newhp = ceil($userrow["maxhp"]/4); + $updatequery = doquery("UPDATE {{table}} SET currenthp='$newhp',currentaction='In Town',currentmonster='0',currentmonsterhp='0',currentmonstersleep='0',currentmonsterimmune='0',currentfight='0',latitude='0',longitude='0',gold='$newgold' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + $playerisdead = 1; + } + } + } + + $updatequery = doquery("UPDATE {{table}} SET currentaction='Exploring' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + header("Location: index.php"); + die(); + + // Do fight stuff. + } elseif (isset($_POST["fight"])) { + + // Your turn. + $pagearray["yourturn"] = ""; + $tohit = ceil(rand($userrow["attackpower"]*.75,$userrow["attackpower"])/3); + $toexcellent = rand(1,150); + if ($toexcellent <= sqrt($userrow["strength"])) { $tohit *= 2; $pagearray["yourturn"] .= "Excellent hit!
"; } + $toblock = ceil(rand($monsterrow["armor"]*.75,$monsterrow["armor"])/3); + $tododge = rand(1,200); + if ($tododge <= sqrt($monsterrow["armor"])) { + $tohit = 0; $pagearray["yourturn"] .= "The monster is dodging. No damage has been scored.
"; + $monsterdamage = 0; + } else { + $monsterdamage = $tohit - $toblock; + if ($monsterdamage < 1) { $monsterdamage = 1; } + if ($userrow["currentuberdamage"] != 0) { + $monsterdamage += ceil($monsterdamage * ($userrow["currentuberdamage"]/100)); + } + } + $pagearray["yourturn"] .= "You attack the monster for $monsterdamage damage.

"; + $userrow["currentmonsterhp"] -= $monsterdamage; + $pagearray["monsterhp"] = "Monster's HP: " . $userrow["currentmonsterhp"] . "

"; + if ($userrow["currentmonsterhp"] <= 0) { + $updatequery = doquery("UPDATE {{table}} SET currentmonsterhp='0' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + header("Location: index.php?do=victory"); + die(); + } + + // Monster's turn. + $pagearray["monsterturn"] = ""; + if ($userrow["currentmonstersleep"] != 0) { // Check to wake up. + $chancetowake = rand(1,15); + if ($chancetowake > $userrow["currentmonstersleep"]) { + $userrow["currentmonstersleep"] = 0; + $pagearray["monsterturn"] .= "The monster has woken up.
"; + } else { + $pagearray["monsterturn"] .= "The monster is still asleep.
"; + } + } + if ($userrow["currentmonstersleep"] == 0) { // Only do this if the monster is awake. + $tohit = ceil(rand(($monsterrow["maxdam"]*.5),$monsterrow["maxdam"])); + if ($userrow["difficulty"] == 2) { $tohit = ceil($tohit * $controlrow["diff2mod"]); } + if ($userrow["difficulty"] == 3) { $tohit = ceil($tohit * $controlrow["diff3mod"]); } + $toblock = ceil(rand($userrow["defensepower"]*.75,$userrow["defensepower"])/4); + $tododge = rand(1,150); + if ($tododge <= sqrt($userrow["dexterity"])) { + $tohit = 0; $pagearray["monsterturn"] .= "You dodge the monster's attack. No damage has been scored.
"; + $persondamage = 0; + } else { + $persondamage = $tohit - $toblock; + if ($persondamage < 1) { $persondamage = 1; } + if ($userrow["currentuberdefense"] != 0) { + $persondamage -= ceil($persondamage * ($userrow["currentuberdefense"]/100)); + } + if ($persondamage < 1) { $persondamage = 1; } + } + $pagearray["monsterturn"] .= "The monster attacks you for $persondamage damage.

"; + $userrow["currenthp"] -= $persondamage; + if ($userrow["currenthp"] <= 0) { + $newgold = ceil($userrow["gold"]/2); + $newhp = ceil($userrow["maxhp"]/4); + $updatequery = doquery("UPDATE {{table}} SET currenthp='$newhp',currentaction='In Town',currentmonster='0',currentmonsterhp='0',currentmonstersleep='0',currentmonsterimmune='0',currentfight='0',latitude='0',longitude='0',gold='$newgold' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + $playerisdead = 1; + } + } + + // Do spell stuff. + } elseif (isset($_POST["spell"])) { + + // Your turn. + $pickedspell = $_POST["userspell"]; + if ($pickedspell == 0) { display("You must select a spell first. Please go back and try again.", "Error"); die(); } + + $newspellquery = doquery("SELECT * FROM {{table}} WHERE id='$pickedspell' LIMIT 1", "spells"); + $newspellrow = mysql_fetch_array($newspellquery); + if ($userspells[$pickedspell] != 1) { display("You have not yet learned this spell. Please go back and try again.", "Error"); die(); } + if ($userrow["currentmp"] < $newspellrow["mp"]) { display("You do not have enough Magic Points to cast this spell. Please go back and try again.", "Error"); die(); } + + if ($newspellrow["type"] == 1) { // Heal spell. + $newhp = $userrow["currenthp"] + $newspellrow["attribute"]; + if ($userrow["maxhp"] < $newhp) { $newspellrow["attribute"] = $userrow["maxhp"] - $userrow["currenthp"]; $newhp = $userrow["currenthp"] + $newspellrow["attribute"]; } + $userrow["currenthp"] = $newhp; + $userrow["currentmp"] -= $newspellrow["mp"]; + $pagearray["yourturn"] = "You have cast the ".$newspellrow["name"]." spell, and gained ".$newspellrow["attribute"]." Hit Points.

"; + } elseif ($newspellrow["type"] == 2) { // Hurt spell. + if ($userrow["currentmonsterimmune"] == 0) { + $monsterdamage = rand((($newspellrow["attribute"]/6)*5), $newspellrow["attribute"]); + $userrow["currentmonsterhp"] -= $monsterdamage; + $pagearray["yourturn"] = "You have cast the ".$newspellrow["name"]." spell for $monsterdamage damage.

"; + } else { + $pagearray["yourturn"] = "You have cast the ".$newspellrow["name"]." spell, but the monster is immune to it.

"; + } + $userrow["currentmp"] -= $newspellrow["mp"]; + } elseif ($newspellrow["type"] == 3) { // Sleep spell. + if ($userrow["currentmonsterimmune"] != 2) { + $userrow["currentmonstersleep"] = $newspellrow["attribute"]; + $pagearray["yourturn"] = "You have cast the ".$newspellrow["name"]." spell. The monster is asleep.

"; + } else { + $pagearray["yourturn"] = "You have cast the ".$newspellrow["name"]." spell, but the monster is immune to it.

"; + } + $userrow["currentmp"] -= $newspellrow["mp"]; + } elseif ($newspellrow["type"] == 4) { // +Damage spell. + $userrow["currentuberdamage"] = $newspellrow["attribute"]; + $userrow["currentmp"] -= $newspellrow["mp"]; + $pagearray["yourturn"] = "You have cast the ".$newspellrow["name"]." spell, and will gain ".$newspellrow["attribute"]."% damage until the end of this fight.

"; + } elseif ($newspellrow["type"] == 5) { // +Defense spell. + $userrow["currentuberdefense"] = $newspellrow["attribute"]; + $userrow["currentmp"] -= $newspellrow["mp"]; + $pagearray["yourturn"] = "You have cast the ".$newspellrow["name"]." spell, and will gain ".$newspellrow["attribute"]."% defense until the end of this fight.

"; + } + + $pagearray["monsterhp"] = "Monster's HP: " . $userrow["currentmonsterhp"] . "

"; + if ($userrow["currentmonsterhp"] <= 0) { + $updatequery = doquery("UPDATE {{table}} SET currentmonsterhp='0',currenthp='".$userrow["currenthp"]."',currentmp='".$userrow["currentmp"]."' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + header("Location: index.php?do=victory"); + die(); + } + + // Monster's turn. + $pagearray["monsterturn"] = ""; + if ($userrow["currentmonstersleep"] != 0) { // Check to wake up. + $chancetowake = rand(1,15); + if ($chancetowake > $userrow["currentmonstersleep"]) { + $userrow["currentmonstersleep"] = 0; + $pagearray["monsterturn"] .= "The monster has woken up.
"; + } else { + $pagearray["monsterturn"] .= "The monster is still asleep.
"; + } + } + if ($userrow["currentmonstersleep"] == 0) { // Only do this if the monster is awake. + $tohit = ceil(rand($monsterrow["maxdam"],(($monsterrow["maxdam"]/6)*3))); + if ($userrow["difficulty"] == 2) { $tohit = ceil($tohit * $controlrow["diff2mod"]); } + if ($userrow["difficulty"] == 3) { $tohit = ceil($tohit * $controlrow["diff3mod"]); } + $toblock = ceil(rand($userrow["defensepower"],$userrow["defensepower"]*.75)/4); + $tododge = rand(1,150); + if ($tododge <= sqrt($userrow["dexterity"])) { + $tohit = 0; $pagearray["monsterturn"] .= "You dodge the monster's attack. No damage has been scored.
"; + $persondamage = 0; + } else { + if ($tohit <= $toblock) { $tohit = $toblock + 1; } + $persondamage = $tohit - $toblock; + if ($userrow["currentuberdefense"] != 0) { + $persondamage -= ceil($persondamage * ($userrow["currentuberdefense"]/100)); + } + if ($persondamage < 1) { $persondamage = 1; } + } + $pagearray["monsterturn"] .= "The monster attacks you for $persondamage damage.

"; + $userrow["currenthp"] -= $persondamage; + if ($userrow["currenthp"] <= 0) { + $newgold = ceil($userrow["gold"]/2); + $newhp = ceil($userrow["maxhp"]/4); + $updatequery = doquery("UPDATE {{table}} SET currenthp='$newhp',currentaction='In Town',currentmonster='0',currentmonsterhp='0',currentmonstersleep='0',currentmonsterimmune='0',currentfight='0',latitude='0',longitude='0',gold='$newgold' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + $playerisdead = 1; + } + } + + // Do a monster's turn if person lost the chance to swing first. Serves him right! + } elseif ( $chancetoswingfirst == 0 ) { + $pagearray["yourturn"] = "The monster attacks before you are ready!

"; + $pagearray["monsterhp"] = "Monster's HP: " . $userrow["currentmonsterhp"] . "

"; + $pagearray["monsterturn"] = ""; + if ($userrow["currentmonstersleep"] != 0) { // Check to wake up. + $chancetowake = rand(1,15); + if ($chancetowake > $userrow["currentmonstersleep"]) { + $userrow["currentmonstersleep"] = 0; + $pagearray["monsterturn"] .= "The monster has woken up.
"; + } else { + $pagearray["monsterturn"] .= "The monster is still asleep.
"; + } + } + if ($userrow["currentmonstersleep"] == 0) { // Only do this if the monster is awake. + $tohit = ceil(rand(($monsterrow["maxdam"]*.5),$monsterrow["maxdam"])); + if ($userrow["difficulty"] == 2) { $tohit = ceil($tohit * $controlrow["diff2mod"]); } + if ($userrow["difficulty"] == 3) { $tohit = ceil($tohit * $controlrow["diff3mod"]); } + $toblock = ceil(rand($userrow["defensepower"]*.75,$userrow["defensepower"])/4); + $tododge = rand(1,150); + if ($tododge <= sqrt($userrow["dexterity"])) { + $tohit = 0; $pagearray["monsterturn"] .= "You dodge the monster's attack. No damage has been scored.
"; + $persondamage = 0; + } else { + $persondamage = $tohit - $toblock; + if ($persondamage < 1) { $persondamage = 1; } + if ($userrow["currentuberdefense"] != 0) { + $persondamage -= ceil($persondamage * ($userrow["currentuberdefense"]/100)); + } + if ($persondamage < 1) { $persondamage = 1; } + } + $pagearray["monsterturn"] .= "The monster attacks you for $persondamage damage.

"; + $userrow["currenthp"] -= $persondamage; + if ($userrow["currenthp"] <= 0) { + $newgold = ceil($userrow["gold"]/2); + $newhp = ceil($userrow["maxhp"]/4); + $updatequery = doquery("UPDATE {{table}} SET currenthp='$newhp',currentaction='In Town',currentmonster='0',currentmonsterhp='0',currentmonstersleep='0',currentmonsterimmune='0',currentfight='0',latitude='0',longitude='0',gold='$newgold' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + $playerisdead = 1; + } + } + + } else { + $pagearray["yourturn"] = ""; + $pagearray["monsterhp"] = "Monster's HP: " . $userrow["currentmonsterhp"] . "

"; + $pagearray["monsterturn"] = ""; + } + + $newmonster = $userrow["currentmonster"]; + + $newmonsterhp = $userrow["currentmonsterhp"]; + $newmonstersleep = $userrow["currentmonstersleep"]; + $newmonsterimmune = $userrow["currentmonsterimmune"]; + $newuberdamage = $userrow["currentuberdamage"]; + $newuberdefense = $userrow["currentuberdefense"]; + $newfight = $userrow["currentfight"] + 1; + $newhp = $userrow["currenthp"]; + $newmp = $userrow["currentmp"]; + +if ($playerisdead != 1) { +$pagearray["command"] = <<
+
+

+

+

+
+END; + $updatequery = doquery("UPDATE {{table}} SET currentaction='Fighting',currenthp='$newhp',currentmp='$newmp',currentfight='$newfight',currentmonster='$newmonster',currentmonsterhp='$newmonsterhp',currentmonstersleep='$newmonstersleep',currentmonsterimmune='$newmonsterimmune',currentuberdamage='$newuberdamage',currentuberdefense='$newuberdefense' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); +} else { + $pagearray["command"] = "You have died.

As a consequence, you've lost half of your gold. However, you have been given back a portion of your hit points to continue your journey.

You may now continue back to town, and we hope you fair better next time."; +} + + // Finalize page and display it. + $template = gettemplate("fight"); + $page = parsetemplate($template,$pagearray); + + display($page, "Fighting"); + +} + +function victory() { + + global $userrow, $controlrow; + + if ($userrow["currentmonsterhp"] != 0) { header("Location: index.php?do=fight"); die(); } + if ($userrow["currentfight"] == 0) { header("Location: index.php"); die(); } + + $monsterquery = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["currentmonster"]."' LIMIT 1", "monsters"); + $monsterrow = mysql_fetch_array($monsterquery); + + $exp = rand((($monsterrow["maxexp"]/6)*5),$monsterrow["maxexp"]); + if ($exp < 1) { $exp = 1; } + if ($userrow["difficulty"] == 2) { $exp = ceil($exp * $controlrow["diff2mod"]); } + if ($userrow["difficulty"] == 3) { $exp = ceil($exp * $controlrow["diff3mod"]); } + if ($userrow["expbonus"] != 0) { $exp += ceil(($userrow["expbonus"]/100)*$exp); } + $gold = rand((($monsterrow["maxgold"]/6)*5),$monsterrow["maxgold"]); + if ($gold < 1) { $gold = 1; } + if ($userrow["difficulty"] == 2) { $gold = ceil($gold * $controlrow["diff2mod"]); } + if ($userrow["difficulty"] == 3) { $gold = ceil($gold * $controlrow["diff3mod"]); } + if ($userrow["goldbonus"] != 0) { $gold += ceil(($userrow["goldbonus"]/100)*$exp); } + $newexp = $userrow["experience"] + $exp; + $newgold = $userrow["gold"] + $gold; + + $levelquery = doquery("SELECT * FROM {{table}} WHERE id='".($userrow["level"]+1)."' LIMIT 1", "levels"); + if (mysql_num_rows($levelquery) == 1) { $levelrow = mysql_fetch_array($levelquery); } + + if ($userrow["level"] < 100) { + if ($newexp >= $levelrow[$userrow["charclass"]."_exp"]) { + $newhp = $userrow["maxhp"] + $levelrow[$userrow["charclass"]."_hp"]; + $newmp = $userrow["maxmp"] + $levelrow[$userrow["charclass"]."_mp"]; + $newtp = $userrow["maxtp"] + $levelrow[$userrow["charclass"]."_tp"]; + $newstrength = $userrow["strength"] + $levelrow[$userrow["charclass"]."_strength"]; + $newdexterity = $userrow["dexterity"] + $levelrow[$userrow["charclass"]."_dexterity"]; + $newattack = $userrow["attackpower"] + $levelrow[$userrow["charclass"]."_strength"]; + $newdefense = $userrow["defensepower"] + $levelrow[$userrow["charclass"]."_dexterity"]; + $newlevel = $levelrow["id"]; + + if ($levelrow[$userrow["charclass"]."_spells"] != 0) { + $userspells = explode(",",$userrow["spells"]); + $userspells[$levelrow[$userrow["charclass"]."_spells"]] = 1; + $userspells = implode(",",$userspells); + $newspell = "spells='$userspells',"; + $spelltext = "You have learned a new spell.
"; + } else { $spelltext = ""; $newspell=""; } + + $page = "Congratulations. You have defeated the ".$monsterrow["name"].".
You gain $exp experience.
You gain $gold gold.

You have gained a level!

You gain ".$levelrow[$userrow["charclass"]."_hp"]." hit points.
You gain ".$levelrow[$userrow["charclass"]."_mp"]." magic points.
You gain ".$levelrow[$userrow["charclass"]."_tp"]." travel points.
You gain ".$levelrow[$userrow["charclass"]."_strength"]." strength.
You gain ".$levelrow[$userrow["charclass"]."_dexterity"]." dexterity.
$spelltext
You can now continue exploring."; + $title = "Courage and Wit have served thee well!"; + } else { + $newhp = $userrow["maxhp"]; + $newmp = $userrow["maxmp"]; + $newtp = $userrow["maxtp"]; + $newstrength = $userrow["strength"]; + $newdexterity = $userrow["dexterity"]; + $newattack = $userrow["attackpower"]; + $newdefense = $userrow["defensepower"]; + $newlevel = $userrow["level"]; + $newspell = ""; + $page = "Congratulations. You have defeated the ".$monsterrow["name"].".
You gain $exp experience.
You gain $gold gold.

"; + + if (rand(1,30) == 1) { + $dropquery = doquery("SELECT * FROM {{table}} WHERE mlevel <= '".$monsterrow["level"]."' ORDER BY RAND() LIMIT 1", "drops"); + $droprow = mysql_fetch_array($dropquery); + $dropcode = "dropcode='".$droprow["id"]."',"; + $page .= "This monster has dropped an item. Click here to reveal and equip the item, or you may also move on and continue exploring."; + } else { + $dropcode = ""; + $page .= "You can now continue exploring."; + } + + $title = "Victory!"; + } + } + + $updatequery = doquery("UPDATE {{table}} SET currentaction='Exploring',level='$newlevel',maxhp='$newhp',maxmp='$newmp',maxtp='$newtp',strength='$newstrength',dexterity='$newdexterity',attackpower='$newattack',defensepower='$newdefense', $newspell currentfight='0',currentmonster='0',currentmonsterhp='0',currentmonstersleep='0',currentmonsterimmune='0',currentuberdamage='0',currentuberdefense='0',$dropcode experience='$newexp',gold='$newgold' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + + + display($page, $title); + +} + +function drop() { + + global $userrow; + + if ($userrow["dropcode"] == 0) { header("Location: index.php"); die(); } + + $dropquery = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["dropcode"]."' LIMIT 1", "drops"); + $droprow = mysql_fetch_array($dropquery); + + if (isset($_POST["submit"])) { + + $slot = $_POST["slot"]; + + if ($slot == 0) { display("Please go back and select an inventory slot to continue.","Error"); } + + if ($userrow["slot".$slot."id"] != 0) { + + $slotquery = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["slot".$slot."id"]."' LIMIT 1", "drops"); + $slotrow = mysql_fetch_array($slotquery); + + $old1 = explode(",",$slotrow["attribute1"]); + if ($slotrow["attribute2"] != "X") { $old2 = explode(",",$slotrow["attribute2"]); } else { $old2 = array(0=>"maxhp",1=>0); } + $new1 = explode(",",$droprow["attribute1"]); + if ($droprow["attribute2"] != "X") { $new2 = explode(",",$droprow["attribute2"]); } else { $new2 = array(0=>"maxhp",1=>0); } + + $userrow[$old1[0]] -= $old1[1]; + $userrow[$old2[0]] -= $old2[1]; + if ($old1[0] == "strength") { $userrow["attackpower"] -= $old1[1]; } + if ($old1[0] == "dexterity") { $userrow["defensepower"] -= $old1[1]; } + if ($old2[0] == "strength") { $userrow["attackpower"] -= $old2[1]; } + if ($old2[0] == "dexterity") { $userrow["defensepower"] -= $old2[1]; } + + $userrow[$new1[0]] += $new1[1]; + $userrow[$new2[0]] += $new2[1]; + if ($new1[0] == "strength") { $userrow["attackpower"] += $new1[1]; } + if ($new1[0] == "dexterity") { $userrow["defensepower"] += $new1[1]; } + if ($new2[0] == "strength") { $userrow["attackpower"] += $new2[1]; } + if ($new2[0] == "dexterity") { $userrow["defensepower"] += $new2[1]; } + + if ($userrow["currenthp"] > $userrow["maxhp"]) { $userrow["currenthp"] = $userrow["maxhp"]; } + if ($userrow["currentmp"] > $userrow["maxmp"]) { $userrow["currentmp"] = $userrow["maxmp"]; } + if ($userrow["currenttp"] > $userrow["maxtp"]) { $userrow["currenttp"] = $userrow["maxtp"]; } + + $newname = addslashes($droprow["name"]); + $query = doquery("UPDATE {{table}} SET slot".$_POST["slot"]."name='$newname',slot".$_POST["slot"]."id='".$droprow["id"]."',$old1[0]='".$userrow[$old1[0]]."',$old2[0]='".$userrow[$old2[0]]."',$new1[0]='".$userrow[$new1[0]]."',$new2[0]='".$userrow[$new2[0]]."',attackpower='".$userrow["attackpower"]."',defensepower='".$userrow["defensepower"]."',currenthp='".$userrow["currenthp"]."',currentmp='".$userrow["currentmp"]."',currenttp='".$userrow["currenttp"]."',dropcode='0' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + + } else { + + $new1 = explode(",",$droprow["attribute1"]); + if ($droprow["attribute2"] != "X") { $new2 = explode(",",$droprow["attribute2"]); } else { $new2 = array(0=>"maxhp",1=>0); } + + $userrow[$new1[0]] += $new1[1]; + $userrow[$new2[0]] += $new2[1]; + if ($new1[0] == "strength") { $userrow["attackpower"] += $new1[1]; } + if ($new1[0] == "dexterity") { $userrow["defensepower"] += $new1[1]; } + if ($new2[0] == "strength") { $userrow["attackpower"] += $new2[1]; } + if ($new2[0] == "dexterity") { $userrow["defensepower"] += $new2[1]; } + + $newname = addslashes($droprow["name"]); + $query = doquery("UPDATE {{table}} SET slot".$_POST["slot"]."name='$newname',slot".$_POST["slot"]."id='".$droprow["id"]."',$new1[0]='".$userrow[$new1[0]]."',$new2[0]='".$userrow[$new2[0]]."',attackpower='".$userrow["attackpower"]."',defensepower='".$userrow["defensepower"]."',dropcode='0' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + + } + $page = "The item has been equipped. You can now continue exploring."; + display($page, "Item Drop"); + + } + + $attributearray = array("maxhp"=>"Max HP", + "maxmp"=>"Max MP", + "maxtp"=>"Max TP", + "defensepower"=>"Defense Power", + "attackpower"=>"Attack Power", + "strength"=>"Strength", + "dexterity"=>"Dexterity", + "expbonus"=>"Experience Bonus", + "goldbonus"=>"Gold Bonus"); + + $page = "The monster dropped the following item: ".$droprow["name"]."

"; + $page .= "This item has the following attribute(s):
"; + + $attribute1 = explode(",",$droprow["attribute1"]); + $page .= $attributearray[$attribute1[0]]; + if ($attribute1[1] > 0) { $page .= " +" . $attribute1[1] . "
"; } else { $page .= $attribute1[1] . "
"; } + + if ($droprow["attribute2"] != "X") { + $attribute2 = explode(",",$droprow["attribute2"]); + $page .= $attributearray[$attribute2[0]]; + if ($attribute2[1] > 0) { $page .= " +" . $attribute2[1] . "
"; } else { $page .= $attribute2[1] . "
"; } + } + + $page .= "
Select an inventory slot from the list below to equip this item. If the inventory slot is already full, the old item will be discarded."; + $page .= "
"; + $page .= "You may also choose to just continue exploring and give up this item."; + + display($page, "Item Drop"); + +} + + +function dead() { + + $page = "You have died.

As a consequence, you've lost half of your gold. However, you have been given back a portion of your hit points to continue your journey.

You may now continue back to town, and we hope you fair better next time."; + +} + + + +?> \ No newline at end of file diff --git a/forum.php b/forum.php new file mode 100644 index 0000000..9f748de --- /dev/null +++ b/forum.php @@ -0,0 +1,97 @@ +\n"; + $count = 1; + if (mysql_num_rows($query) == 0) { + $page .= "\n"; + } else { + while ($row = mysql_fetch_array($query)) { + if ($count == 1) { + $page .= "\n"; + $count = 2; + } else { + $page .= "\n"; + $count = 1; + } + } + } + $page .= "
New Thread
ThreadRepliesLast Post
No threads in forum.
".$row["title"]."".$row["replies"]."".$row["newpostdate"]."
".$row["title"]."".$row["replies"]."".$row["newpostdate"]."
"; + + display($page, "Forum"); + +} + +function showthread($id, $start) { + + $query = doquery("SELECT * FROM {{table}} WHERE id='$id' OR parent='$id' ORDER BY id LIMIT $start,15", "forum"); + $query2 = doquery("SELECT title FROM {{table}} WHERE id='$id' LIMIT 1", "forum"); + $row2 = mysql_fetch_array($query2); + $page = "
\n"; + $count = 1; + while ($row = mysql_fetch_array($query)) { + if ($count == 1) { + $page .= "\n"; + $count = 2; + } else { + $page .= "\n"; + $count = 1; + } + } + $page .= "
Forum :: ".$row2["title"]."
".$row["author"]."

".prettyforumdate($row["postdate"])."
".nl2br($row["content"])."
".$row["author"]."

".prettyforumdate($row["postdate"])."
".nl2br($row["content"])."

"; + $page .= "
Reply To This Thread:

"; + + display($page, "Forum"); + +} + +function reply() { + + global $userrow; + extract($_POST); + $query = doquery("INSERT INTO {{table}} SET id='',postdate=NOW(),newpostdate=NOW(),author='".$userrow["charname"]."',parent='$parent',replies='0',title='$title',content='$content'", "forum"); + $query2 = doquery("UPDATE {{table}} SET newpostdate=NOW(),replies=replies+1 WHERE id='$parent' LIMIT 1", "forum"); + header("Location: forum.php?do=thread:$parent:0"); + die(); + +} + +function newthread() { + + global $userrow; + + if (isset($_POST["submit"])) { + extract($_POST); + $query = doquery("INSERT INTO {{table}} SET id='',postdate=NOW(),newpostdate=NOW(),author='".$userrow["charname"]."',parent='0',replies='0',title='$title',content='$content'", "forum"); + header("Location: forum.php"); + die(); + } + + $page = "
Make A New Post:

Title:


Message:


"; + display($page, "Forum"); + +} + +?> \ No newline at end of file diff --git a/heal.php b/heal.php new file mode 100644 index 0000000..d569f6c --- /dev/null +++ b/heal.php @@ -0,0 +1,29 @@ +exploring.", "Healing Spell"); + die(); + +} + +?> \ No newline at end of file diff --git a/help/help.php b/help/help.php new file mode 100644 index 0000000..9d2f13f --- /dev/null +++ b/help/help.php @@ -0,0 +1,323 @@ + + + + + +<? echo $controlrow["gamename"]; ?> Help + + + + +

Help

+[ Return to the game ] + +


+ +

Table of Contents

+ + +
+ +

Introduction

+Firstly, I'd like to say thank you for playing my game. The Dragon Knight game engine is the result of several months of +planning, coding and testing. The original idea was to create a web-based tribute to the NES game, Dragon +Warrior. In its current iteration, only the underlying fighting system really resembles that game, as almost +everything else in DK has been made bigger and better. But you should still recognize bits and pieces as stemming +from Dragon Warrior and other RPGs of old.

+This is the first game I've ever written, and it has definitely been a positive experience. It got difficult at +times, admittedly, but it was still a lot of fun to write, and even more fun to play. And I hope to use this +experience so that if I ever want to create another game it will be even better than this one.

+If you are a site administrator, and would like to install a copy of DK on your own server, you may visit the +development site for Dragon Knight. This page +includes the downloadable game souce code, as well as some other resources that developers and administrators may +find valuable.

+Once again, thanks for playing!

+Jamin Seven
+Dragon Knight creator
+My Homepage
+Dragon Knight Homepage

+[ Top ] + +


+ +

Character Classes

+There are three character classes in the game. The main differences between the classes are what spells you get +access to, the speed with which you level up, and the amount of HP/MP/strength/dexterity you gain per level. Below +is a basic outline of each of the character classes. For more detailed information about the characters, please +view the Levels table at the bottom of this page. Also, note that the outline below refers to the stock class setup +for the game. If your administrator has used his/her own class setup, this information may not be accurate.

+ +
    +
  • Fast level-ups +
  • High hit points +
  • High magic points +
  • Low strength +
  • Low dexterity +
  • 5 heal spells +
  • 5 hurt spells +
  • 3 sleep spells +
  • 3 +defense spells +
  • 0 +attack spells +
+ +
    +
  • Medium level-ups +
  • Medium hit points +
  • Low magic points +
  • High strength +
  • Low dexterity +
  • 3 heal spells +
  • 3 hurt spells +
  • 2 sleep spells +
  • 3 +defense spells +
  • 3 +attack spells +
+ +
    +
  • Slow level-ups +
  • Medium hit points +
  • Medium magic points +
  • Low strength +
  • High dexterity +
  • 4 heal spells +
  • 4 hurt spells +
  • 3 sleep spells +
  • 2 +defense spells +
  • 2 +attack spells +
+[ Top ] + +


+ +

Difficulty Levels

+ includes the ability to play using one of three difficulty levels. +All monster statistics in the game are set at a base number. However, using a difficulty multiplier, certain statistics +are increased. The amount of hit points a monster has goes up, which means it will take longer to kill. But the amount +of experience and gold you gain from killing it also goes up. So the game is a little bit harder, but it is also more +rewarding. The following are the three difficulty levels and their statistic multiplier, which applies to the monster's +HP, experience drop, and gold drop. +
    +
  • " . $controlrow["diff1mod"] . ""; ?> +
  • " . $controlrow["diff2mod"] . ""; ?> +
  • " . $controlrow["diff3mod"] . ""; ?> +
+[ Top ] + +


+ +

Playing The Game: In Town

+When you begin a new game, the first thing you see is the Town screen. Towns serve four primary functions: healing, buying items, +buying maps, and displaying game information.

+To heal yourself, click the "Rest at the Inn" link at the top of the town screen. Each town's Inn has a different price - some towns +are cheap, others are expensive. No matter what town you're in, the Inns always serve the same function: they restore your current +hit points, magic points, and travel points to their maximum amounts. Out in the field, you are free to use healing spells to restore +your hit points, but when you run low on magic points, the only way to restore them is at an Inn.

+Buying weapons and armor is accomplished through the appropriately-named "Buy Weapons/Armor" link. Not every item is available in +every town, so in order to get the most powerful items, you'll need to explore some of the outer towns. Once you've clicked the link, +you are presented with a list of items available in this town's store. To the left of each item is an icon that represents its type: +weapon, armor or shield. The amount of attack/defense power, as well as the item's price, are displayed to the right of the item name. +You'll notice that some items have a red asterisk (*) next to their names. These are items that come +with special attributes that modify other parts of your character profile. See the Items & Drops table at the bottom of this page for +more information about special items.

+Maps are the third function in towns. Buying a map to a town places the town in your Travel To box in the left status panel. Once +you've purchased a town's map, you can click its name from your Travel To box and you will jump to that town. Travelling this way +costs travel points, though, and you'll only be able to visit towns if you have enough travel points.

+The final function in towns is displaying game information and statistics. This includes the latest news post made by the game +administrator, a list of players who have been online recently, and the Babble Box.

+[ Top ] + +


+ +

Playing The Game: Exploring & Fighting

+Once you're done in town, you are free to start exploring the world. Use the compass buttons on the left status panel to move around. +The game world is basically a big square, divided into four quadrants. Each quadrant is spaces +square. The first town is usually located at (0N,0E). Click the North button from the first town, and now you'll be at (1N,0E). +Likewise, if you now click the West button, you'll be at (1N,1W). Monster levels increase with every 5 spaces you move outward +from (0N,0E).

+While you're exploring, you will occasionally run into monsters. As in pretty much any other RPG game, you and the monster take turns +hitting each other in an attempt to reduce each other's hit points to zero. Once you run into a monster, the Exploring screen changes +to the Fighting screen.

+When a fight begins, you'll see the monster's name and hit points, and the game will ask you for your first command. You then get to +pick whether you want to fight, use a spell, or run away. Note, though, that sometimes the monster has the chance to hit you +first.

+The Fight button is pretty straightforward: you attack the monster, and the amount of damage dealt is based on your attack power and +the monster's armor. On top of that, there are two other things that can happen: an Excellent Hit, which doubles your total attack +damage; and a monster dodge, which results in you doing no damage to the monster.

+The Spell button allows you to pick an available spell and cast it. See the Spells list at the bottom of this page for more information +about spells.

+Finally, there is the Run button, which lets you run away from a fight if the monster is too powerful. Be warned, though: it is +possible for the monster to block you from running and attack you. So if your hit points are low, you may fare better by staying +around monsters that you know can't do much damage to you.

+Once you've had your turn, the monster also gets his turn. It is also possible for you to dodge the monster's attack and take no +damage.

+The end result of a fight is either you or the monster being knocked down to zero hit points. If you win, the monster dies and will +give you a certain amount of experience and gold. There is also a chance that the monster will drop an item, which you can put into +one of the three inventory slots to give you extra points in your character profile. If you lose and die, half of your gold is taken +away - however, you are given back a few hit points to help you make it back to town (for example, if you don't have enough gold to +pay for an Inn, and need to kill a couple low-level monsters to get the money).

+When the fight is over, you can continue exploring until you find another monster to beat into submission.

+[ Top ] + +


+ +

Playing The Game: Status Panels

+There are two status panels on the game screen: left and right.

+The left panel inclues your current location and play status (In Town, Exploring, Fighting), compass buttons for movement, and the +Travel To list for jumping between towns. At the bottom of the left panel is also a list of game functions.

+The right panel displays some character statistics, your inventory, and quick spells.

+The Character section shows the most important character statistics. It also displays the status bars for your current hit points, +magic points and travel points. These status bars are colored either green, yellow or red depending on your current amount of each +stat. There is also a link to pop up your list of extended statistics, which shows more detailed character information.

+The Fast Spells section lists any Heal spells you've learned. You may use these links any time you are in town or exploring to cast +the heal spell. These may not be used during fights, however - you have to use the Spells box on the fight screen for that. +[ Top ] + +


+ +

Spoilers: Items & Drops

+Click here for the Items & Drops spoiler page.

+[ Top ] + +


+ +

Spoilers: Monsters

+Click here for the Monsters spoiler page.

+[ Top ] + +


+ +

Spoilers: Spells

+Click here for the Spells spoiler page.

+[ Top ] + +


+ +

Spoilers: Levels

+Click here for the Levels spoiler page.

+[ Top ] + +


+ +

Credits

+
    +
  • All program code and stock graphics for the game were created by Jamin Seven.

    +
  • Major props go to a few people on the PHP manual site, for help with various chunks of code. The specific people are listed in the source code.

    +
  • Super monkey love goes to Enix and the developers of Dragon Warrior. If it weren't for you guys, my game never would have been made.

    +
  • Mega props go to Dalez from GameFAQs for his DW3 experience chart, which was where I got my experience levels from.

    +
  • Mad crazy ninja love goes to the following people for help and support throughout the development process:

    +Ideas: (whether they got used or not) +
      +
    • kushet +
    • lghtning +
    • Ebolamonkey3000 +
    • Crimson Scythe +
    • SilDeath +

    +Beta Testing: (forums name if applicable, character name otherwise) +
      +
    • Ebolamonkey3000 +
    • lisi +
    • Junglist +
    • Crimson Scythe +
    • Sk8erpunk69 +
    • lghtning +
    • kushet +
    • SilDeath +
    • lowrider4life +
    • dubiin +
    • Sam Wise The Great +

    +
  • Apologies and lots of happy naked love to anyone I forgot.

    +
  • And of course, thanks to you for playing my game!

    +
  • NINJA! +
+[ Top ] + +



+ +Please visit the following sites for more information:
+Se7enet (Jamin's homepage)
+Dragon Knight (official DK homepage)
+Forums (official DK forums)

+All original coding and graphics for the Dragon Knight game engine are © 2003-2004 by Jamin Seven.

+[ Top ] +

+ + + + + \ No newline at end of file diff --git a/help/items.php b/help/items.php new file mode 100644 index 0000000..f8f9d62 --- /dev/null +++ b/help/items.php @@ -0,0 +1,155 @@ + + + + + +<? echo $controlrow["gamename"]; ?> Help + + + + +

Help: Items & Drops

+[ Return to Help | Return to the game ] + +


+ + + + + 0) { $stat = "+" . $special[1]; } else { $stat = $special[1]; } + $bigspecial = "$attr $stat"; + } else { $bigspecial = "None"; } + echo "\n"; +} +?> +
Items
TypeNameCostAttributeSpecial
\"$image\"".$itemsrow["name"]."".$itemsrow["buycost"]." Gold".$itemsrow["attribute"]." $power Power$bigspecial
+
+
+ + + + 0) { $stat1 = "+" . $special1[1]; } else { $stat1 = $special1[1]; } + $bigspecial1 = "$attr1 $stat1"; + } else { $bigspecial1 = "None"; } + if ($itemsrow["attribute2"] != "X") { + $special2 = explode(",",$itemsrow["attribute2"]); + if ($special2[0] == "maxhp") { $attr2 = "Max HP"; } + elseif ($special2[0] == "maxmp") { $attr2 = "Max MP"; } + elseif ($special2[0] == "maxtp") { $attr2 = "Max TP"; } + elseif ($special2[0] == "goldbonus") { $attr2 = "Gold Bonus (%)"; } + elseif ($special2[0] == "expbonus") { $attr2 = "Experience Bonus (%)"; } + elseif ($special2[0] == "strength") { $attr2 = "Strength"; } + elseif ($special2[0] == "dexterity") { $attr2 = "Dexterity"; } + elseif ($special2[0] == "attackpower") { $attr2 = "Attack Power"; } + elseif ($special2[0] == "defensepower") { $attr2 = "Defense Power"; } + else { $attr2 = $special2[0]; } + if ($special2[1] > 0) { $stat2 = "+" . $special2[1]; } else { $stat2 = $special2[1]; } + $bigspecial2 = "$attr2 $stat2"; + } else { $bigspecial2 = "None"; } + echo "\n"; +} +?> +
Drops
NameMonster LevelAttribute 1Attribute 2
".$itemsrow["name"]."".$itemsrow["mlevel"]."$bigspecial1$bigspecial2
+
+ + + + + \ No newline at end of file diff --git a/help/levels.php b/help/levels.php new file mode 100644 index 0000000..15c1d39 --- /dev/null +++ b/help/levels.php @@ -0,0 +1,141 @@ + + + + + +<? echo $controlrow["gamename"]; ?> Help + + + + +

Help: Levels

+[ Return to Help | Return to the game ] + +


+ + + + +None"; } + if ($itemsrow["id"] != 100) { echo "\n"; } +} +?> +
Levels
LevelExp.HPMPTPStrengthDexteritySpell
".$itemsrow["id"]."".number_format($itemsrow["1_exp"])."".$itemsrow["1_hp"]."".$itemsrow["1_mp"]."".$itemsrow["1_tp"]."".$itemsrow["1_strength"]."".$itemsrow["1_dexterity"]."$spell
+

+ + + +None"; } + if ($itemsrow["id"] != 100) { echo "\n"; } +} +?> +
Levels
LevelExp.HPMPTPStrengthDexteritySpell
".$itemsrow["id"]."".number_format($itemsrow["2_exp"])."".$itemsrow["2_hp"]."".$itemsrow["2_mp"]."".$itemsrow["2_tp"]."".$itemsrow["2_strength"]."".$itemsrow["2_dexterity"]."$spell
+

+ + + +None"; } + if ($itemsrow["id"] != 100) { echo "\n"; } +} +?> +
Levels
LevelExp.HPMPTPStrengthDexteritySpell
".$itemsrow["id"]."".number_format($itemsrow["3_exp"])."".$itemsrow["3_hp"]."".$itemsrow["3_mp"]."".$itemsrow["3_tp"]."".$itemsrow["3_strength"]."".$itemsrow["3_dexterity"]."$spell
+
+Experience points listed are total values up until that point. All other values are just the new amount that you gain for each level. +

+ + + + + \ No newline at end of file diff --git a/help/monsters.php b/help/monsters.php new file mode 100644 index 0000000..896f3fe --- /dev/null +++ b/help/monsters.php @@ -0,0 +1,96 @@ + + + + + +<? echo $controlrow["gamename"]; ?> Help + + + + +

Help: Monsters

+[ Return to Help | Return to the game ] + +


+ + + + +None"; } elseif ($itemsrow["immune"] == 1) { $immune = "Hurt"; } else { $immune = "Hurt & Sleep"; } + echo "\n"; +} +?> +
Monsters
NameMax HPMax DamageArmorLevelMax Exp.Max GoldImmunity
".$itemsrow["name"]."".$itemsrow["maxhp"]."".$itemsrow["maxdam"]."".$itemsrow["armor"]."".$itemsrow["level"]."".$itemsrow["maxexp"]."".$itemsrow["maxgold"]."$immune
+
+ + + + + \ No newline at end of file diff --git a/help/spells.php b/help/spells.php new file mode 100644 index 0000000..4b2e891 --- /dev/null +++ b/help/spells.php @@ -0,0 +1,106 @@ + + + + + +<? echo $controlrow["gamename"]; ?> Help + + + + +

Help: Spells

+[ Return to Help | Return to the game ] + +


+ + + + +\n"; +} +?> +
Spells
NameCostTypeAttribute
".$itemsrow["name"]."".$itemsrow["mp"]."$type".$itemsrow["attribute"]."
+
    +
  • Heal spells always give you the maximum amount possible, until your current HP is full. +
  • Hurt spells deal X damage (not always the maximum) to the monster, regardless of the monster's armor. +
  • Sleep spells put the monster to sleep. The monster has an X in 15 chance of remaining asleep each turn. +
  • +Damage spells increase your total attack damage by X percent until the end of the fight. +
  • +Defense spells reduce the total damage you take from the monster by X percent until the end of each fight. +
+ + + + + \ No newline at end of file diff --git a/images/background.gif b/images/background.gif new file mode 100644 index 0000000000000000000000000000000000000000..6024b970e58e33488fe451013d272a8930a904e3 GIT binary patch literal 7994 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 I)VP@XFR+O%p#T5? literal 0 HcmV?d00001 diff --git a/images/bars_green.gif b/images/bars_green.gif new file mode 100644 index 0000000000000000000000000000000000000000..32349dae785e474b018cb0e0d7a485788088c77f GIT binary patch literal 94 zcmZ?wbhEHbb8qxp& literal 0 HcmV?d00001 diff --git a/images/bars_yellow.gif b/images/bars_yellow.gif new file mode 100644 index 0000000000000000000000000000000000000000..628ecae217172a2d0395f4a27a39f5cef359dc38 GIT binary patch literal 94 zcmZ?wbhEHbWAUYHUo$Y2csk$WG2 literal 0 HcmV?d00001 diff --git a/images/button_character.gif b/images/button_character.gif new file mode 100644 index 0000000000000000000000000000000000000000..4f2ad5d20c224e6e6b3a2a0e6945afe8f3c5ea51 GIT binary patch literal 527 zcmZ?wbhEHbOkogYI3mEXfB$|52L}NG0Rsbr{{H@igoJ{Eg8TRH&!0d4{Q2_%0RajM z3hURefB*h{Lqh`t1H=FS|A8d&K=CIFBLjl~gAPaw$W8{<{|YK*9YGc@%6-RQ?JLkZ zUy^&-^Mj4EfJAE>*9MO}eJ7So+E!t~uudf5LxbK#-q)qt$uUT%E|I=zLm<+ z!mWL%*=2=l2)iingeDUfHa&KRDqc5%_H1M3Ok)Oqu8?*fCT=!e0X`d6{=5!mCe|oc zUoHVQekLZj6*f*x{A|8aT?X8}MhtoE{H2`CQ}_$!Phc(JJrKgJ#KOc|%i*WnuW{)7 zNs+XHxW(nB6*(#8H*sWivr?VhKkWJqp=}@EK zLC+Hm2Js44Vj5RT&&fzuI1zZ9JN39IZ^X8m##0SVvI{Q#X`CYBwLF3C-AjcB3tSl( zgRK-TCN!`!7_89Z^t{S;PC4QGv|T5jJ%8Nk%w1VPpUi0J9GOA|fL0?(W^)-Kwgp5fKr0cXw4)RlB>pL_|c0h=`e) znPz5Y%*@O)Gcy1H0RR90A^8LW000jFEC2ui0Av6W000F4Ff4@3c{uCMdk+a!T+a}A zsBmH`>T-o6%SE6tZ~is23>1Ww?!f>EFva80Wqb${GlCMuNDLC1fvd4N3KWy>@&Qy} z%9-kQoIz-y2;8f1T$mpRw{=}89W+v4|Z%12nj0*SVI?%7zhn02qz;#Z+#$u z0S8J@8KN4Ik7EK87X?~>qYe#>uMScrKBpRe3R({m4gkDR1qc8^4+;ddI0u3l%x^Na zi5dV6$PPGsP!4wki?J*Ymzo(`jt2?=zd#oPG7QXE;taod&GzNrxMQ7%4h9SeFc2W{ z0U;-X0`MR~!Giz;$9nW3@~8p^a1I7A>+{T6Gk3l07EXHr000qK89E|pMy~*mdW!UP zKyc(r0zf4uVF>_0o&z!XJR))6(#JG<5EW$?V|&3*@)9XKo7G5+Z31?P%S|N zEoNcy;?NZU1q$j4U{DuL4vz&3OsZ>eVe|#Yu^vz3rorMQ0s|r^5bziQfjbWp0GQh$ zV2`td46rIkpy!En4USg}K-=5xk;2zLA35a7ls5aQj|`~bzyL1V!!MW|o_Z=;*~_C+ N&%V9;_b(y<06S-c+(Q5W literal 0 HcmV?d00001 diff --git a/images/button_functions.gif b/images/button_functions.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc892660240355e7841628934189289b44376bca GIT binary patch literal 561 zcmZ?wbhEHbOkogYI3mFC{{8#&=g$iW2&`Yf{{H>@0RaID3JM7c3G?UAH!v_LC@ARf z@87?Fe?voqgM$MD1H=FS|A8d&K=CIFBLjl~gAPaw$W8{<{|W^beg_>gR;|mqE!3cW zzT~c!|2%C5p&JfU7Ypi0rLr-#T)4nF<@hy+t23k+ue#}Qm8=lsKi^l1^9z!YO8GZnt630`|Mj>8a#6>+|%cD zC*GH1@jA%odbpuvMq*V$f8gHE-yJ;;hD#7lqI3xed%l1Urf#^<=!T=kAlfiPz zi_?2J112mGpXe9;l+!}d;Xp&kGLcK%&I=|t7Q`j^UY+)3HZwC97sH!XN%`k1%vl8_ zA0&9~Vm1`&XuPnpVJaJ26Vrr0%m>$G2$=bYB_wz?F+OJ#_EWTIHC(nj`LS2~g2<)? Vn~HZ=E?K$Y-Ted2-299T)&LtXz(oK6 literal 0 HcmV?d00001 diff --git a/images/button_help.gif b/images/button_help.gif new file mode 100644 index 0000000000000000000000000000000000000000..b108da7d12b14fb06075a6cb018e8e33bb4621ef GIT binary patch literal 402 zcmZ?wbhEHbOkogYI3mFC{{8#?`}Zp-C^R%Q^!N807#Ii$2%JBE{{H>@4h|0U=g&__ zNLasqeLz4!K|uin1H=FS|A8d&K=CIFBLjl~gAPaw$W8{<{|YR;%q&xqRxM-Lw68$t ze2K5{`Ctw&UJ;(z1s*!f1eh9<1XgIWa4#=ktKKjw)h>Yv-a*k$H6fxLi5N9 zrD-RbRF|K-E5Np^Pm_J&wzE9l7M{!#@10}fwC84IWZ<hurqz?Lm9-@mt+jg7HnA@k*qCiY}ioieXh4ac84OCCk9oHS>rpcEsY z#|1T4WnIn&S)oAA*2X%%EgcdYJnzYb3cE@$gso)Tz+|{zmE(dhtE0@cfRdQ)rw*8L zOg+^bnCddGv3w!V4DE>w2R+wuOMO{+CE?)hUS$QBTi+-4F|wzK2zam@(3Ub}=la5U zwLip{t*wybn}|ANstgO)4&IjXjL@P^EBBu|Q34y;O1<3`s}lS(Emtj8i2R_pEmw1c JcRK@vH2_{PwL<^^ literal 0 HcmV?d00001 diff --git a/images/button_location.gif b/images/button_location.gif new file mode 100644 index 0000000000000000000000000000000000000000..0dbe494ecf2ad9ef62e64ef9d7fc64938be6017f GIT binary patch literal 486 zcmZ?wbhEHbOkogYI3mCxARy4t&@g}gd$jDiT_v17I>_YWaygmC@@DfX_4y!&$ViDeN&nveR((CE%U8N3wBMUAcHQ{i2f1?W{ZZl^(wO{KA#{P}rWu+n&xb zU4+SB_P7WH0aNcLT0_|maIPQ#Bi z;Dh&trlM7OtxX1;j20|>#~3XH6dve>L`&?5)Lh)a9H=MEB(x#rfUFGHBL$WX3X8W0 vaxpMiH7N8o`*SQ~no;!RfaNk14wf0aMb_QjUGe$V-P7CG$4e_RFjxZsx9XsM literal 0 HcmV?d00001 diff --git a/images/button_login.gif b/images/button_login.gif new file mode 100644 index 0000000000000000000000000000000000000000..89c612a261b3c45d86d81b7c33e05acb95a6ad88 GIT binary patch literal 474 zcmZ?wbhEHbOkogYI3mE%(9p1d|Ni^;@4tWlUO_=&{`~m?0RiXFpBE4iaBy%aC@5IJ zetkkhf`NfSe}6v%1H=FS|A8d&K=CIFBLjl~gAPaw$W8{<{|YR!K1m`;tJdl4HsN2m zr6l*hMYIj)1e=~aycZ;RL>wkMoXB~`!r^@CL%}AN{-qrsHDnmBZIF0W!4lN?N@7wN zZvyYzsyglSE)1nv1$kxx)qGJ!OhqLn%pCmeN*o+Y%zO+io=V&-Ms0a)oP1u)0^TgV z+?5;)+S{#Ja`?+LIR!#A7&*A@*O)T(bb9wxvN7AwTA3We&dd_DHX$?Nl+rrO%y~-I z`+1M9j7Vo<>p6FZoj*Y!&8aWSx?N56?Y(cGcp5Qm%mAyJC->TEL^csk_-zp4MiDyoE(CbCA}C_re>uYu9FRo h<>X)}5J*`aDVE3_FeQum+0E^G3?dG!*K;@+tN~N}n8^SD literal 0 HcmV?d00001 diff --git a/images/button_logout.gif b/images/button_logout.gif new file mode 100644 index 0000000000000000000000000000000000000000..c2343c519008e5ec22b2c60bf6318b7e03add188 GIT binary patch literal 500 zcmZ?wbhEHbOkogYI3mCxARyr2;IM!H{`c?S-@kufK|x{u{P_h11?$(Z4+sc2fBw9I zfk8q-LVtgMLqh`t1H=FS|A8d&K=CIFBLjl~gAPaw$W8{<{|YRcJ`*I8R;|VMB#Z&e0Vm?hGnHoyWHvb#Pz{IHa^enq%9Gu*ZdB zoLgRAIegGcsAR(qxlMLUWC}FXf*JU^^fUxm63gQm>Z&uDTiXS^l$d$>Se-RFSXtS7 zbsAW8Q>KOIGbpk1drh4fY_}|bLVil51``8^(=v140Ig1=_ytOKe2X^)M{>D`3*?tv z5n#Qn1{aPsF&?T_>gjy(e0|4i)(86(D-sywWb=PW+5LEU^lXzG`-#E>hgWnYxyt&w z8SPliz`9mqg#+h_O}?#7?yYhyS(7p@EoNM$<&VG+23 zwb6@1LL@36sD+uKq^2^EL*Zhu9CL!sX~hLgR&THPd(gSmeEoe7MlKGE=x^&2P4syz LZ0DG>FjxZsYg4dr literal 0 HcmV?d00001 diff --git a/images/button_register.gif b/images/button_register.gif new file mode 100644 index 0000000000000000000000000000000000000000..e635590e3e3af29af46cc9bfba0cc752f7e13f71 GIT binary patch literal 523 zcmZ?wbhEHbOkogYI3mE%(9rPy{d)rggZ1mzD<~-R_xC3xBoq`BoIij5{{8y`0s`~r z&kqO)aBy(gzkfdi1H=FS|A8d&K=CIFBLjl~gAPaw$W8{<{|X@{ZcLW!2`mAx_Zf)H zD9pWIvF`d|21%}F=B5gsa$N`JlQ~xTJYfw9IiWL|8@L%IMB?@>ui#PK%EvG6Xl*xx zr+Zqm=Q`ty@yA6IZ^+GbX3gPc(&yyUDbnRAD`jNjZ|CRo%3d1UeP=RgPMMH-Kho(ec5soFE3BsC;)#4{YD!;vGn(&WHdznSA f@1vs=-l`}ZIKarv*rJ?WCY0bf{p=DC+Iv(Wz*E;@Zzsyvahqq0@D;pn_rE zl^MLV?I-;1X)(+cVp=)HT1saE`(g%TK|3jvA4}JtTUz&s$?1cm`YlsOHGUh1iwmZ5 zFR*0GDSE_m#@aIDm*|YP2F9)Zs%Q8TLbWFIGqQ6mFnG}A$SIiab&$zBS#yHC%X-5A ztK-~EjGjR(3>%slnxxs81WW}QIJkwL=M4)&aW zB*NdQ@v*?VgU6uiypMn^mx(Eh2?L)lgP}m75<{s0GY4bM6srVQ4<#lRmLeqg(qoOF eH0F1E8oqDMG44ydd@O0@wzapn*ElgSSOWkArJ45t literal 0 HcmV?d00001 diff --git a/images/button_status.gif b/images/button_status.gif new file mode 100644 index 0000000000000000000000000000000000000000..eb77375f452a2fe91988e20fcaa3cce59be37012 GIT binary patch literal 469 zcmZ?wbhEHbOkogYI3mE{;NW0jU~vBY`S2?+@S0RaUC z1quoZ^XJdszkfdi1H=FS|A8d&K=CIFBLjl~gAPaw$W8{<{|YK*ToX(dDRkt#-dCV= zz9d)Of1Y&r!y5+{6mZ0_gfSmtTJU2dhv~tEW*P!q%!|TaaHOR3Iq*K1qgdB_q%1c2 zk3fqikH7*;xeFqz=SXoJ$!RpmV&~RjWn*JiVzK1mP-5k0dfL19Kz?=Nx_w0SmrhCjR_gnhdO}%TEZDZnBCKU~Us&Xkcg4 zo?d-W=N9uV0Umpc?vqWd8ceKVx|Np~@hi>0nR@RYo0?V8lWab=pStV~x0Y6^`%d0n zY2RQuaY=%Le60(cLBTivX&h_~?|f#SSk$;Z&tBv~VxZ>{=6Zq7APx_c+*?bn1f+bG z3ep|dv1#Zfwj7vnZi#5Ugie5f?$cR}(@T7Q9h%%YtBEB=PiVmbDHcXXhBW~b6ucRj dEV`t4O&*-Nu{q=Ns@T)p*52N3;KaaS4FG_kltTaj literal 0 HcmV?d00001 diff --git a/images/button_towns.gif b/images/button_towns.gif new file mode 100644 index 0000000000000000000000000000000000000000..8080ee2f35412044d400e612c5abcba6cc58b813 GIT binary patch literal 461 zcmZ?wbhEHbOkogYI3mFC{{4Fg2Z#Op_bVtUoIihl{`~p(@81sy2w1;?Xk z#5HVq$mnr$E!$MZ_2vw0nT@*kxy+^747_|cT&etg3_SeYe7^C_JRDOw+Zi~0qnZ|J zv-ayS@iPjr^QYMG74vuTvkOdRXYi?HVCUwZv-qGUgWvLHE1bAj2^QLxHfPF96!LA)h)NfXJG;Z7Yk>LM!=So#B%DEw&CMCXEes6S0FVliDF6Tf literal 0 HcmV?d00001 diff --git a/images/compass_01.gif b/images/compass_01.gif new file mode 100644 index 0000000000000000000000000000000000000000..b10ff4d466d3e5b0a75a46e4af2abfaddd434166 GIT binary patch literal 3940 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 RajE0r#||y+R5$=3{|B1nv(5kj literal 0 HcmV?d00001 diff --git a/images/dkforumsbutton.gif b/images/dkforumsbutton.gif new file mode 100644 index 0000000000000000000000000000000000000000..c0afd403ff1043cad79acde63163652ee07936b2 GIT binary patch literal 3259 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 Uu}6-B@|$v7n(|wq767p0KgtIzR{#J2 literal 0 HcmV?d00001 diff --git a/images/help_exploring.jpg b/images/help_exploring.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c96fd72b0e691588a735d2f2b230dcc8ab36a1a5 GIT binary patch literal 15650 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 OCj_0KSEhVh{{H~3#Te57 literal 0 HcmV?d00001 diff --git a/images/help_fighting.jpg b/images/help_fighting.jpg new file mode 100644 index 0000000000000000000000000000000000000000..829dd5c5248b0975d9c26ad296bfb02e5e5e438b GIT binary patch literal 13162 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 literal 0 HcmV?d00001 diff --git a/images/icon_armor.gif b/images/icon_armor.gif new file mode 100644 index 0000000000000000000000000000000000000000..c00f854ed400fd9a15eed2abc26c9e04588c9efe GIT binary patch literal 147 zcmZ?wbhEHbABkV`L$x6>o*c4SSCguSD55d=+|ygQ1US7qaZ_d!5ss}T#hME f!j|6WR(9Uj<#TmKO7ycfnHTJ-th$akr!CkrD313QBbh!0ZB zz-(HvYfYN2TrgJ-|D~$wiVxCUj~NJD)tI_`*QSSD90kwM9xT2kTxTmW|A?ZDRF|7$ M-U~(}QBDSH02>S_$p8QV literal 0 HcmV?d00001 diff --git a/images/logo.gif b/images/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..7468262941f1c98f2f5ee0dc8ae9a3a5a858b07c GIT binary patch literal 17688 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 F06S?Nn4kav literal 0 HcmV?d00001 diff --git a/images/title_exploring.gif b/images/title_exploring.gif new file mode 100644 index 0000000000000000000000000000000000000000..362f864d886dfe9f289f9069667aa6fe9957c256 GIT binary patch literal 1034 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 literal 0 HcmV?d00001 diff --git a/images/town_2.gif b/images/town_2.gif new file mode 100644 index 0000000000000000000000000000000000000000..46d38249fdf55c5c0e29402c83c86db0e7210dc1 GIT binary patch literal 1464 zcma)#{X5eM0KmWBZP*L;rCi?I*m>J%F7AowzII}1c}Wjbs=X+5Drqtvb+f!~&f5_3 zGI`0lF!XjxHfK?(DTSoGJPJ{`yq~!1Ke*2ipWi;u$8(>@E+;kxGzB^!pslS@17LqEe|Um5M+h3=a=CG&Gczl|@EI`uh52W@Z8au(`SUpZ`C^RTKyS5J35s ze0u_Fn*>ruNO);jZGFV_gGh>scY2s#2&}v50<@`-CkB~a{dVjzHAzp+!UcVo`po1W zwh6@@*P&M~)w>=>Do@x8c%T#7=d94ZE9<$iddw6EsNvPoNUS#V1QnGOm+7FXiNZug z0~j$j@N8CT*$<$Y#nd+EAsLWnpjJAsLfT}3Q8$lgf_I9WTOW|nEhJ_M#0$NOSCUa+ zKz*A-wFmCDIj-uj$IpkPfuT@GWxE*=SW6k0cx!*v6T~-ikTGV6H#4jJFQLmT0h0ts zc2KUAlh=-=#xAqu1_1~!nJ{0*$#K^buT1lj+%V2~L@jF(P=eX3-J5w1Io)!TJkY4_ zCcU>yn#>p(-C{Xb4P@gC(FN|bsx&0QL|{}73rut|SpI!AyN_3Ng~fIUMt20HRr?%C zjfHfCUZUOFS!5kpez;kyUPOl=_;Q`&#e~F%=hnXV7qWL?BIzYN8;25j(_(a) z#M}}2Q+3AOV0OG@g5DlI){m})S#@+=l0D+=AQ?l=|!G_r0 zuJvopz2h3k*B|MDIg5EsW{`MbeD0XyPl*vq|H$nxc_6`!Yv9(TV8)TDC#?yLs6Rfb zjv7N1&8(XURE~^rTmM1n=Z+Sp3U=5jy2PUFhxq{Z4r>NqNEd z=d;Wv253u@zH`7`V*^PW#R-1y>qK9b^T*1AqYR_5o!no|t(=5Wg4Z68k&8oLl;S`j zwEY0rTP>l`E{vUDWF~70V3{+j573tu98(=DVe7Ema2JJf(Dqfdf;%2ODnKAn6=liG zR_O9d$&%hj#>SAs4ATcvPk>e>(%ypct(KR)8imfM>^G#?a9(13YzdmPP(iE+Hx4kY zoveFZc^prW4P9x8Yq6|p$`MX(y7sXBM-uO}&Ykj$f9Fgt)A(wAs@`0a6MFaZ4ds-q z!y;RN1b3aEu|?kBo6}&?O17;tKXlKMH;}=4b~{TsSEm@ot|J&_MP!SX@Bpv6x>=#Y z4qeejF2bcv1jEfe*H|wLtxAE&B91nV`Uo9jb$~~5u6Ey<{KNT66)zZs~nv4 zdj8NeU9+gPpT)ioH_orkJY_ZMM5)HJNHe#lHE&G6vSlL3v8D}#3*Cc>6spbO4cz&f z&m#Sr0=f~~8(d-A14y3Y$A{ZcvV68jZ}czSdW&)i<*wiM3~D*M`u@aN7){#u8;Ow* zfa013vWZ&M;?gF;mli1rc0O9g8+yX=L%FCOUb7yEej}~zy2L#v<)6y|t^zgGY(qrB zr+yJsyj&RrrtzJweD>{KnIf9igu;R3t>I{g5-qulH@g#Ao}a$oltoRk_;7RHq%i{4 z8Gaj6jKp;X{iB6N(Z62mBszVFs2%ZX7cQBA<6=+CwTzTL4aAAhO62y8<@g^9_D!KKA{w-Dd4vfsV)IC0~L7S*$B@2g=+p0)W*fo3H^V_z4|@b9ct;}A3e G?EV*6+-~Xs literal 0 HcmV?d00001 diff --git a/images/town_3.gif b/images/town_3.gif new file mode 100644 index 0000000000000000000000000000000000000000..ea68f94880cdef07fb893015b8a614144d9b4145 GIT binary patch literal 1414 zcma)#{X5eM0KmWBZT8Ma2vK93&@fbXwQ8I9x1*KpamtYQmlpEUd6+So_jKhYX6VJ+ z7`m2TSZgvlZ*@9}BS(cUr0ewbT<-c0?(@Uvx6ku&^Khko7eWDd0xCSv*Vo5jFz|T% z>gp<=&mSEfrBbQ0v$I?-x2~>^Kp=E6GYkX(JV5!D ze0u^KTLe1c6OOMBc(FOM>s96y_u4rDO3_{`?HA;VJjb{TEnq{Vh z(IYvd`u#g4b~oStVaoU4M9;_0y@Sx7ZQd`(zBk$l1CTg48iLW{gj1oy^Q8{{a6~cg z0vwLX!hv=`O<8>d9#+WZXc4m@shR=UqO2Q@x6DB_3lBXJ;H!}+mi+vPjfRmqKnuHG+d*>(gnC@5nLpJ$Mnn+TFjBkHjLRtY$l#dAX2S z_nt~r<{4H&XX!_QNT+l{w`ya*@^S^KJ@B^i=_L=j$ZT4~H3A|baL{P;OKQJ!wvU## z4U*4Y0b%>xu(YI4UMS{iA8{G2RW;dVU31cdyqYZl_?_3tdR%SKV+bT|(y9S~O8s>$ z;(MB>x|_nB>Czv$&-B2rnSUCG;D(^`yJ>Vy%h2h|9vYSQY05?PGU$E%^$7BH9F%WiENWt`>CofcKh?xjRO`=UrR!z^DCnjOH~BJW zzBCI@l19gUXlVs#@2_`e?g^*UxGRgfaTkkI( z?4%MK~2HpOZQS&cU z)n%-SXaR14O+>*#1{rd=c1^cxEowk%Gp_m6BAb88&bTNng;-S)Y(6z^Yg=BhEB792 z4BoIPN>{qqmPGp&P|G8I8+YjN_H3bBpAI%xi(7cW{u!P-TTU%;kCEHf_y6!yuhxb& z_zc#11(;w;F6ED>3oYA+5>}S|7CMXhD!UD(?dzGYSwvOKY>4&qiHBVmK>NP16R^0{Z8#%=n7M(2YUa;$43LJW`^-kn_^j7MQrw z@ahw6N6+MZEB!X;7Nn^F_;NQUHIF>~a2D0KGM)+T9$2O-A*YX-UT-k5xyGtG`zeoo=dP0kfcm(Ci@ z)RSZJ)7yau#Xj;>Ww^2@HaJ>1j9PYDD_SG?0bfKI_)?NdSi<94odt6}g~0cv+OYtn z@hSR-s?`Kx+3ff$3IxfB!piv?`x)3ID#(I6Svqd!dA_@A2wm)29RptlQMSevMx;NeXtpe8zIKMRL%hmlh=hq9l*hYf^ M_s7r_Apjiw7iP{!=l}o! literal 0 HcmV?d00001 diff --git a/images/town_4.gif b/images/town_4.gif new file mode 100644 index 0000000000000000000000000000000000000000..f58edb684a00236bceb54686585a1a8815b859e9 GIT binary patch literal 1435 zcma)#`8(8k0DwQ=Ihe!oHA~GfYK$?ChUAzoG9zaVjlpAitRprnS zZEZ~?63xuajEsz!o0|s(1(lbVQz(?i#zroeD-;Uz^6~%x3Wef7|9|v8q96cZ!1$JY zdjhnALc0_ieuG~x5xjmNWQ?4NoQd@XU2HWGdtmknDNjb)Js>zxk}eJT6okxoZ@iI1ynVt8-;~vCZEKMBmL&hD5PsO$e{%6>N^Y5S?j_M0hG=Ph zADg|HjC^D4HD@3#c2duACGBJ35ZkqC898(4Oij!JMKj;x7PW0VX{TazysgO~i>*%1 z67dCt10Emz#Jsp(R&VZltafJDogaV*cYKx6G*SJOka)ZlNAy4))bK#lZ1lxFrWm#x zQMMt4$QpPQWy=rrxCKN#k23CYe&eeNClV4RH8yphoWrahYH?;hw`d4- z;C}EHtrk}5cd4dxg@gV9Hg%tZEyq0|qz9?EcfQ1bqQNAFm#L&JT1EzXvJz%%G+tG$ zb&-YZo*VfOy8`S27^aik>IpXmNn0PM3I(31e3oP=xH6l1#7A#-F)0Q!7~=I?j!6H|v z8|EcT@z*zO*C=((6+BUoxRlk`OR?4L{| zq9eRmSd+yty3M?7WRxi(eg~=52v-!C<`eZRIFI4xYAj@38d=by6i;gD{K^v{Q8o*^ z_CrG*Bf&bGR)1p`>_s;*>$DZd{cSrwOYoELPTssPlN>->&s>Ggq;I?AwWkq2WpByX zrq_R)z-;Ox?7iH|oW?0Y6$5osS zhGXvtnl%Ak3qj8?2ql?`%ut~(2=EVNZU?C^%ebFSY86pgyY*z}5z%rw^j=$dPp|vutJVoz&)1K0;t)~x z`#XiDP5!fVKu3;+*XGgvH0oFi!e`Fac)E#**uk4lrLFMb z$k-$(@(3GIic%(x!)NKNG;@xyj=)LQd5}He<|XUZ;5Mb%sZ=Pp${v};%d>-2Dv6I> f`iT~$@*F;=QhQR?&+L%r3UeySOZ+?-fP?=6XEH_A literal 0 HcmV?d00001 diff --git a/images/town_5.gif b/images/town_5.gif new file mode 100644 index 0000000000000000000000000000000000000000..623bbdcd4b40797d85805d7012c4dd13b9e9dcec GIT binary patch literal 1691 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 DosNID literal 0 HcmV?d00001 diff --git a/images/town_8.gif b/images/town_8.gif new file mode 100644 index 0000000000000000000000000000000000000000..f00aee9d924ed22d62f94721bdfdfcfc1dcf2855 GIT binary patch literal 1738 zcma)#|3A|S1HeC@*|g1UAK5e>YV1o$+9Tv^&!!FeI)zO~HgTlxZbPBg-Dh*Y=Ig4F z#C(a7aK0s{jOG%FX|9wmob#%7&xzx?=k9gAJkR|H_x|Di+xztnIO^}=DRKgL16l|e z9v)_~SP%rQt*yZ@{N~LYCX+cmJx!rd>gwu*LSbiTCy&Pyi^XMSWdHzdZ*TwKe;?c5 zksts-fYV>eUrzwFO`(-0o~})4>o{w8AanjWkZi(#vEK+8-8bw0z!OD4(7`!(zHWskBA~;OgeU9! z`I*m!IW!>Fp>dw3V&H7W7-Z1#~Vzv5f*uQ>u+4^0tb7rk>^ zTx0v`QcfOqkuo4D`{BEtK;*h^Q+O&!O5_&_H_Z^?U+^hK&?c-ZiXrf<#g0U|M(s~l z2v^PkMyN_RW)Uc{Ln;2M$8s)_f{`tl-U8STTMJ1 znKBw-7rUj%f46xg+J8qOuQC7k103m?)NO;%EH1WHHXLNZ>Y6#qOec!xJ6cCl0t>y@IuEU=-dw(##Gb3 zsOh$IWa4C7|89GS!_AXkQzauu`?{VAzH0w@g4Y<_!1!fEy!A39N9vdH*erdQ zn$a%JP}7tjS7p`vD&41I4VL2Vuf2w+o{9B0gGYTGFZdI>KbgE!=xNhivs@QYZ z#i^tB-$yHj`=i^!M z#8rwLiVRabx<_^Oi+eBh6p@%4s*@A7Zb*KWt}1Y5WE;>l;M2T2&Het?qEPMn#5^0YXubmk_uH|9RS#DASfIeoK z^$J<}LYD(!mUDrVxiwLRooqay@f91__JADoq97Y1ViWdP4j~eposvc zbkm8v1a=wGrQBbciz>O^%?lroP`<3#V?`QMJW07~KJpwHqfA4|v*`|hJmiuA`1%0} zz`mgG^qLJ;#=rro0Exl)Nb%oOT`K$1lICmyU+>zSCs@N|1=$bp?O1Nj`i6YWFF)5r zH4a))@&IBp3-Tl*idco**-z!|K5Rsm8}iEs+B_$ZWUqu=xv>w;%Gq%#BTEJcfB`^2 zrXb~580&79$e)ZhLU}+;-cF6bU2bGcNOI6|(%G(NkEzzM%!y~Ue{8m}Oxt+*LHY)( WEp=dM+p)?CeY4kAE5{TBy#EJ>_R[".prettydate($newsrow["postdate"])."]
".nl2br($newsrow["content"]); + + // Who's Online. Currently just members. Guests maybe later. + $onlinequery = doquery("SELECT * FROM {{table}} WHERE UNIX_TIMESTAMP(onlinetime) >= '".(time()-600)."' ORDER BY charname", "users"); + $townrow["whosonline"] = "There are " . mysql_num_rows($onlinequery) . " user(s) online within the last 10 minutes: "; + while ($onlinerow = mysql_fetch_array($onlinequery)) { $townrow["whosonline"] .= "
".$onlinerow["charname"]."" . ", "; } + $townrow["whosonline"] = rtrim($townrow["whosonline"], ", "); + + $page = gettemplate("towns"); + $page = parsetemplate($page, $townrow); + + return $page; + +} + +function doexplore() { // Just spit out a blank exploring page. + + // Exploring without a GET string is normally when they first log in, or when they've just finished fighting. + +$page = << +Exploring + +You are exploring the map, and nothing has happened. Continue exploring using the direction buttons or the Travel To menus. + + +END; + + return $page; + +} + +function dofight() { // Redirect to fighting. + + header("Location: index.php?do=fight"); + +} + +function showchar() { + + global $userrow, $controlrow; + + // Format various userrow stuffs. + $userrow["experience"] = number_format($userrow["experience"]); + $userrow["gold"] = number_format($userrow["gold"]); + if ($userrow["expbonus"] > 0) { + $userrow["plusexp"] = "(+".$userrow["expbonus"]."%)"; + } elseif ($userrow["expbonus"] < 0) { + $userrow["plusexp"] = "(".$userrow["expbonus"]."%)"; + } else { $userrow["plusexp"] = ""; } + if ($userrow["goldbonus"] > 0) { + $userrow["plusgold"] = "(+".$userrow["goldbonus"]."%)"; + } elseif ($userrow["goldbonus"] < 0) { + $userrow["plusgold"] = "(".$userrow["goldbonus"]."%)"; + } else { $userrow["plusgold"] = ""; } + + $levelquery = doquery("SELECT ". $userrow["charclass"]."_exp FROM {{table}} WHERE id='".($userrow["level"]+1)."' LIMIT 1", "levels"); + $levelrow = mysql_fetch_array($levelquery); + $userrow["nextlevel"] = number_format($levelrow[$userrow["charclass"]."_exp"]); + + if ($userrow["charclass"] == 1) { $userrow["charclass"] = $controlrow["class1name"]; } + elseif ($userrow["charclass"] == 2) { $userrow["charclass"] = $controlrow["class2name"]; } + elseif ($userrow["charclass"] == 3) { $userrow["charclass"] = $controlrow["class3name"]; } + + if ($userrow["difficulty"] == 1) { $userrow["difficulty"] = $controlrow["diff1name"]; } + elseif ($userrow["difficulty"] == 2) { $userrow["difficulty"] = $controlrow["diff2name"]; } + elseif ($userrow["difficulty"] == 3) { $userrow["difficulty"] = $controlrow["diff3name"]; } + + $spellquery = doquery("SELECT id,name FROM {{table}}","spells"); + $userspells = explode(",",$userrow["spells"]); + $userrow["magiclist"] = ""; + while ($spellrow = mysql_fetch_array($spellquery)) { + if ($userspells[$spellrow["id"]] == 1) { + $userrow["magiclist"] .= $spellrow["name"] . "
"; + } + } + if ($userrow["magiclist"] == "") { $userrow["magiclist"] = "None"; } + + // Make page tags for XHTML validation. + $xml = "\n" + . "\n" + . "\n"; + + $charsheet = gettemplate("showchar"); + $page = $xml . gettemplate("minimal"); + $array = array("content"=>parsetemplate($charsheet, $userrow), "title"=>"Character Information"); + echo parsetemplate($page, $array); + die(); + +} + +function onlinechar($id) { + + global $controlrow; + $userquery = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "users"); + if (mysql_num_rows($userquery) == 1) { $userrow = mysql_fetch_array($userquery); } else { display("No such user.", "Error"); } + + // Format various userrow stuffs. + $userrow["experience"] = number_format($userrow["experience"]); + $userrow["gold"] = number_format($userrow["gold"]); + if ($userrow["expbonus"] > 0) { + $userrow["plusexp"] = "(+".$userrow["expbonus"]."%)"; + } elseif ($userrow["expbonus"] < 0) { + $userrow["plusexp"] = "(".$userrow["expbonus"]."%)"; + } else { $userrow["plusexp"] = ""; } + if ($userrow["goldbonus"] > 0) { + $userrow["plusgold"] = "(+".$userrow["goldbonus"]."%)"; + } elseif ($userrow["goldbonus"] < 0) { + $userrow["plusgold"] = "(".$userrow["goldbonus"]."%)"; + } else { $userrow["plusgold"] = ""; } + + $levelquery = doquery("SELECT ". $userrow["charclass"]."_exp FROM {{table}} WHERE id='".($userrow["level"]+1)."' LIMIT 1", "levels"); + $levelrow = mysql_fetch_array($levelquery); + $userrow["nextlevel"] = number_format($levelrow[$userrow["charclass"]."_exp"]); + + if ($userrow["charclass"] == 1) { $userrow["charclass"] = $controlrow["class1name"]; } + elseif ($userrow["charclass"] == 2) { $userrow["charclass"] = $controlrow["class2name"]; } + elseif ($userrow["charclass"] == 3) { $userrow["charclass"] = $controlrow["class3name"]; } + + if ($userrow["difficulty"] == 1) { $userrow["difficulty"] = $controlrow["diff1name"]; } + elseif ($userrow["difficulty"] == 2) { $userrow["difficulty"] = $controlrow["diff2name"]; } + elseif ($userrow["difficulty"] == 3) { $userrow["difficulty"] = $controlrow["diff3name"]; } + + $spellquery = doquery("SELECT id,name FROM {{table}}","spells"); + $userspells = explode(",",$userrow["spells"]); + $userrow["magiclist"] = ""; + while ($spellrow = mysql_fetch_array($spellquery)) { + if ($userspells[$spellrow["id"]] == 1) { + $userrow["magiclist"] .= $spellrow["name"] . "
"; + } + } + if ($userrow["magiclist"] == "") { $userrow["magiclist"] = "None"; } + + // Make page tags for XHTML validation. + $xml = "\n" + . "\n" + . "\n"; + + $charsheet = gettemplate("onlinechar"); + $page = parsetemplate($charsheet, $userrow); + display($page, "Character Information"); + +} + +function showmap() { + + global $userrow; + + // Make page tags for XHTML validation. + $xml = "\n" + . "\n" + . "\n"; + + $page = $xml . gettemplate("minimal"); + $array = array("content"=>"Map coming soon.", "title"=>"Map"); + echo parsetemplate($page, $array); + die(); + +} + +function babblebox() { + + global $userrow; + + if (isset($_POST["submit"])) { + $safecontent = my_htmlspecialchars($_POST["babble"]); + if ($safecontent == "" || $safecontent == " ") { //blank post. do nothing. + } else { $insert = doquery("INSERT INTO {{table}} SET id='',posttime=NOW(),author='".$userrow["charname"]."',babble='$safecontent'", "babble"); } + header("Location: index.php?do=babblebox"); + die(); + } + + $babblebox = array("content"=>""); + $bg = 1; + $babblequery = doquery("SELECT * FROM {{table}} ORDER BY id LIMIT 20", "babble"); + while ($babblerow = mysql_fetch_array($babblequery)) { + if ($bg == 1) { $babblebox["content"] .= "
[".$babblerow["author"]."] ".$babblerow["babble"]."
\n"; $bg = 2; } + else { $babblebox["content"] .= "
[".$babblerow["author"]."] ".stripslashes($babblerow["babble"])."
\n"; $bg = 1; } + } + $babblebox["content"] .= "

"; + + // Make page tags for XHTML validation. + $xml = "\n" + . "\n" + . "\n"; + $page = $xml . gettemplate("babblebox"); + echo parsetemplate($page, $babblebox); + die(); + +} + +function ninja() { + header("Location: http://www.se7enet.com/img/shirtninja.jpg"); +} + +?> \ No newline at end of file diff --git a/install.php b/install.php new file mode 100644 index 0000000..8ec40ca --- /dev/null +++ b/install.php @@ -0,0 +1,779 @@ + + +Dragon Knight Installation + + +Dragon Knight Installation: Page One

+NOTE: Please ensure you have filled in the correct values in config.php before continuing. Installation will fail if these values are not correct. Also, the MySQL database needs to already exist. This installer script will take care of setting up its structure and content, but the database itself must already exist on your MySQL server before the installer will work.

+Installation for Dragon Knight is a simple two-step process: set up the database tables, then create the admin user. After that, you're done.

+You have two options for database setup: complete or partial. +
    +
  • Complete Setup includes table structure and all default data (items, drops, monsters, levels, spells, towns) - after complete setup, the game is totally ready to run. +
  • Partial Setup only creates the table structure, it does not populate the tables - use this if you are going to be creating and importing your own customized game data later. +
+Click the appropriate button below for your preferred installation method.

+
+
- OR -
+
+ + +END; +echo $page; +die(); + +} + +function second() { // Second page - set up the database tables. + + global $dbsettings; + echo "Dragon Knight InstallationDragon Knight Installation: Page Two

"; + $prefix = $dbsettings["prefix"]; + $babble = $prefix . "_babble"; + $control = $prefix . "_control"; + $drops = $prefix . "_drops"; + $forum = $prefix . "_forum"; + $items = $prefix . "_items"; + $levels = $prefix . "_levels"; + $monsters = $prefix . "_monsters"; + $news = $prefix . "_news"; + $spells = $prefix . "_spells"; + $towns = $prefix . "_towns"; + $users = $prefix . "_users"; + + if (isset($_POST["complete"])) { $full = true; } else { $full = false; } + +$query = <<"; } else { echo "Error creating Babble Box table."; } +unset($query); + +$query = <<"; } else { echo "Error creating Control table."; } +unset($query); + +$query = <<"; } else { echo "Error populating Control table."; } +unset($query); + +$query = <<"; } else { echo "Error creating Drops table."; } +unset($query); + +if ($full == true) { +$query = <<"; } else { echo "Error populating Drops table."; } +unset($query); +} + +$query = <<"; } else { echo "Error creating Forum table."; } +unset($query); + +$query = <<"; } else { echo "Error creating Items table."; } +unset($query); + +if ($full == true) { +$query = <<"; } else { echo "Error populating Items table."; } +unset($query); +} + +$query = <<"; } else { echo "Error creating Levels table."; } +unset($query); + +if ($full == true) { +$query = <<"; } else { echo "Error populating Levels table."; } +unset($query); +} + +$query = <<"; } else { echo "Error creating Monsters table."; } +unset($query); + +if ($full == true) { +$query = <<"; } else { echo "Error populating Monsters table."; } +unset($query); +} + +$query = <<"; } else { echo "Error creating News table."; } +unset($query); + +$query = <<"; } else { echo "Error populating News table."; } +unset($query); + +$query = <<"; } else { echo "Error creating Spells table."; } +unset($query); + +if ($full == true) { +$query = <<"; } else { echo "Error populating Spells table."; } +unset($query); +} + +$query = <<"; } else { echo "Error creating Towns table."; } +unset($query); + +if ($full == true) { +$query = <<"; } else { echo "Error populating Towns table."; } +unset($query); +} + +$query = <<"; } else { echo "Error creating Users table."; } +unset($query); + + global $start; + $time = round((getmicrotime() - $start), 4); + echo "
Database setup complete in $time seconds.

Click here to continue with installation."; + die(); + +} + +function third() { // Third page: gather user info for admin account. + +$page = << + +Dragon Knight Installation + + +Dragon Knight Installation: Page Three

+Now you must create an administrator account so you can use the control panel. Fill out the form below to create your account. You will be able to customize the class names through the control panel once your admin account is created.

+
+ + + + + + + + + + +
Username:


Password:
Verify Password:


Email Address:
Verify Email:


Character Name:
Character Class:
Difficulty:
+
+ + +END; +echo $page; +die(); + +} + +function fourth() { // Final page: insert new user row, congratulate the person on a job well done. + + extract($_POST); + if (!isset($username)) { die("Username is required."); } + if (!isset($password1)) { die("Password is required."); } + if (!isset($password2)) { die("Verify Password is required."); } + if ($password1 != $password2) { die("Passwords don't match."); } + if (!isset($email1)) { die("Email is required."); } + if (!isset($email2)) { die("Verify Email is required."); } + if ($email1 != $email2) { die("Emails don't match."); } + if (!isset($charname)) { die("Character Name is required."); } + $password = md5($password1); + + global $dbsettings; + $users = $dbsettings["prefix"] . "_users"; + $query = mysql_query("INSERT INTO $users SET id='1',username='$username',password='$password',email='$email1',verify='1',charname='$charname',regdate=NOW(),onlinetime=NOW(),authlevel='1'") or die(mysql_error()); + +$page = << + +Dragon Knight Installation + + +Dragon Knight Installation: Page Four

+Your admin account was created successfully. Installation is complete.

+Be sure to delete install.php from your Dragon Knight directory for security purposes.

+You are now ready to play the game. Note that you must log in through the public section before being allowed into the control panel. Once logged in, an "Admin" link will appear in the Functions box of the left sidebar panel.

+Thank you for using Dragon Knight! + + +END; + + echo $page; + die(); + +} + +?> \ No newline at end of file diff --git a/lib.php b/lib.php new file mode 100644 index 0000000..5508d56 --- /dev/null +++ b/lib.php @@ -0,0 +1,213 @@ + $b) { + $template = str_replace("{{{$a}}}", $b, $template); + } + return $template; + +} + +function getmicrotime() { // Used for timing script operations. + + list($usec, $sec) = explode(" ",microtime()); + return ((float)$usec + (float)$sec); + +} + +function prettydate($uglydate) { // Change the MySQL date format (YYYY-MM-DD) into something friendlier. + + return date("F j, Y", mktime(0,0,0,substr($uglydate, 5, 2),substr($uglydate, 8, 2),substr($uglydate, 0, 4))); + +} + +function prettyforumdate($uglydate) { // Change the MySQL date format (YYYY-MM-DD) into something friendlier. + + return date("F j, Y", mktime(0,0,0,substr($uglydate, 5, 2),substr($uglydate, 8, 2),substr($uglydate, 0, 4))); + +} + +function is_email($email) { // Thanks to "mail(at)philipp-louis.de" from php.net! + + return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email)); + +} + +function my_htmlspecialchars($text) { // Thanks to "etymxris at yahoo dot com" from php.net! + + $ALLOWABLE_TAGS = array("b", "i", "u", "p", "blockquote", "ol", "ul", "li"); + static $PATTERNS = array(); + static $REPLACEMENTS = array(); + if (count($PATTERNS) == 0) { + foreach ($ALLOWABLE_TAGS as $tag) { + $PATTERNS[] = "/<$tag>/i"; + $PATTERNS[] = "/<\/$tag>/i"; + $REPLACEMENTS[] = "<$tag>"; + $REPLACEMENTS[] = ""; + } + } + + $result = str_replace(array(">", "<", "\"", "'"), + array(">", "<", """, "'"), + $text); + + $result = preg_replace($PATTERNS, $REPLACEMENTS, $result); + + return $result; + +} + +function display($content, $title, $topnav=true, $leftnav=true, $rightnav=true, $badstart=false) { // Finalize page and output to browser. + + include('config.php'); + global $numqueries, $userrow, $controlrow; + if (!isset($controlrow)) { + $controlquery = doquery("SELECT * FROM {{table}} WHERE id='1' LIMIT 1", "control"); + $controlrow = mysql_fetch_array($controlquery); + } + if ($badstart == false) { global $starttime; } else { $starttime = $badstart; } + + // Make page tags for XHTML validation. + $xml = "\n" + . "\n" + . "\n"; + + $template = gettemplate("primary"); + + if ($rightnav == true) { $rightnav = gettemplate("rightnav"); } else { $rightnav = ""; } + if ($leftnav == true) { $leftnav = gettemplate("leftnav"); } else { $leftnav = ""; } + if ($topnav == true) { + $topnav = "\"Log \"Help\""; + } else { + $topnav = "\"Log \"Register\" \"Help\""; + } + + if (isset($userrow)) { + + // Get userrow again, in case something has been updated. + $userquery = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + unset($userrow); + $userrow = mysql_fetch_array($userquery); + + // Current town name. + if ($userrow["currentaction"] == "In Town") { + $townquery = doquery("SELECT * FROM {{table}} WHERE latitude='".$userrow["latitude"]."' AND longitude='".$userrow["longitude"]."' LIMIT 1", "towns"); + $townrow = mysql_fetch_array($townquery); + $userrow["currenttown"] = "Welcome to ".$townrow["name"].".

"; + } else { + $userrow["currenttown"] = ""; + } + + if ($controlrow["forumtype"] == 0) { $userrow["forumslink"] = ""; } + elseif ($controlrow["forumtype"] == 1) { $userrow["forumslink"] = "Forum
"; } + elseif ($controlrow["forumtype"] == 2) { $userrow["forumslink"] = "Forum
"; } + + // Format various userrow stuffs... + if ($userrow["latitude"] < 0) { $userrow["latitude"] = $userrow["latitude"] * -1 . "S"; } else { $userrow["latitude"] .= "N"; } + if ($userrow["longitude"] < 0) { $userrow["longitude"] = $userrow["longitude"] * -1 . "W"; } else { $userrow["longitude"] .= "E"; } + $userrow["experience"] = number_format($userrow["experience"]); + $userrow["gold"] = number_format($userrow["gold"]); + if ($userrow["authlevel"] == 1) { $userrow["adminlink"] = "Admin
"; } else { $userrow["adminlink"] = ""; } + + // HP/MP/TP bars. + $stathp = ceil($userrow["currenthp"] / $userrow["maxhp"] * 100); + if ($userrow["maxmp"] != 0) { $statmp = ceil($userrow["currentmp"] / $userrow["maxmp"] * 100); } else { $statmp = 0; } + $stattp = ceil($userrow["currenttp"] / $userrow["maxtp"] * 100); + $stattable = "\n"; + $stattable .= "
\n"; + $stattable .= "
\n"; + if ($stathp >= 66) { $stattable .= "
\"\"
"; } + if ($stathp < 66 && $stathp >= 33) { $stattable .= "
\"\"
"; } + if ($stathp < 33) { $stattable .= "
\"\"
"; } + $stattable .= "
\n"; + $stattable .= "
\n"; + if ($statmp >= 66) { $stattable .= "
\"\"
"; } + if ($statmp < 66 && $statmp >= 33) { $stattable .= "
\"\"
"; } + if ($statmp < 33) { $stattable .= "
\"\"
"; } + $stattable .= "
\n"; + $stattable .= "
\n"; + if ($stattp >= 66) { $stattable .= "
\"\"
"; } + if ($stattp < 66 && $stattp >= 33) { $stattable .= "
\"\"
"; } + if ($stattp < 33) { $stattable .= "
\"\"
"; } + $stattable .= "
HPMPTP
\n"; + $userrow["statbars"] = $stattable; + + // Now make numbers stand out if they're low. + if ($userrow["currenthp"] <= ($userrow["maxhp"]/5)) { $userrow["currenthp"] = "*".$userrow["currenthp"]."*"; } + if ($userrow["currentmp"] <= ($userrow["maxmp"]/5)) { $userrow["currentmp"] = "*".$userrow["currentmp"]."*"; } + + $spellquery = doquery("SELECT id,name,type FROM {{table}}","spells"); + $userspells = explode(",",$userrow["spells"]); + $userrow["magiclist"] = ""; + while ($spellrow = mysql_fetch_array($spellquery)) { + if ($userspells[$spellrow["id"]] == 1 && $spellrow["type"] == 1) { + $userrow["magiclist"] .= "".$spellrow["name"]."
"; + } + } + if ($userrow["magiclist"] == "") { $userrow["magiclist"] = "None"; } + + // Travel To list. + $townslist = explode(",",$userrow["towns"]); + $townquery2 = doquery("SELECT * FROM {{table}} ORDER BY id", "towns"); + $userrow["townslist"] = ""; + while ($townrow2 = mysql_fetch_array($townquery2)) { + if ($townslist[$townrow2["id"]] == 1) { $userrow["townslist"] .= "".$townrow2["name"]."
\n"; } + } + + } else { + $userrow = array(); + } + + $finalarray = array( + "dkgamename"=>$controlrow["gamename"], + "title"=>$title, + "content"=>$content, + "rightnav"=>parsetemplate($rightnav,$userrow), + "leftnav"=>parsetemplate($leftnav,$userrow), + "topnav"=>$topnav, + "totaltime"=>round(getmicrotime() - $starttime, 4), + "numqueries"=>$numqueries, + "version"=>$version, + "build"=>$build); + $page = parsetemplate($template, $finalarray); + $page = $xml . $page; + + if ($controlrow["compression"] == 1) { ob_start("ob_gzhandler"); } + echo $page; + die(); + +} + +?> \ No newline at end of file diff --git a/login.php b/login.php new file mode 100644 index 0000000..a7905f8 --- /dev/null +++ b/login.php @@ -0,0 +1,72 @@ + \ No newline at end of file diff --git a/templates/admin.php b/templates/admin.php new file mode 100644 index 0000000..bec5ff9 --- /dev/null +++ b/templates/admin.php @@ -0,0 +1,78 @@ + +{{title}} + + +
+ +
+DK Administration

+Links:
+Admin Home
+Game Home

+Primary Data:
+Main Settings
+Add News Post
+Edit Users

+Game Data:
+Edit Items
+Edit Drops
+Edit Towns
+Edit Monsters
+Edit Levels
+Edit Spells
+
+{{content}} +
+
+ + + + +THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/babblebox.php b/templates/babblebox.php new file mode 100644 index 0000000..b0d5df1 --- /dev/null +++ b/templates/babblebox.php @@ -0,0 +1,34 @@ + +shoutbox + + + +{{content}} + + +THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/fight.php b/templates/fight.php new file mode 100644 index 0000000..ac049be --- /dev/null +++ b/templates/fight.php @@ -0,0 +1,14 @@ + + + + +THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/leftnav.php b/templates/leftnav.php new file mode 100644 index 0000000..4f13737 --- /dev/null +++ b/templates/leftnav.php @@ -0,0 +1,38 @@ + +Location + +Currently: {{currentaction}}
+Latitude: {{latitude}}
+Longitude: {{longitude}}

+
+
+
+
+ +
+
+ +
+ + + + +
Towns
+{{currenttown}} +Travel To:
+{{townslist}} +

+ + + + +
Functions
+{{forumslink}} +{{adminlink}} +Log Out
+Help +

+THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/login.php b/templates/login.php new file mode 100644 index 0000000..0663509 --- /dev/null +++ b/templates/login.php @@ -0,0 +1,13 @@ + + + + + + + +
Username:
Password:
Remember me? Yes
Checking the "Remember Me" option will store your login information in a cookie so you don't have to enter it next time you get online.

Want to play? You gotta register your own character.
+ +THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/minimal.php b/templates/minimal.php new file mode 100644 index 0000000..520e44f --- /dev/null +++ b/templates/minimal.php @@ -0,0 +1,68 @@ + +{{title}} + + +
+{{content}} +
+ +THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/onlinechar.php b/templates/onlinechar.php new file mode 100644 index 0000000..e9763ca --- /dev/null +++ b/templates/onlinechar.php @@ -0,0 +1,41 @@ +{{charname}}
.

+When you're finished, you may return to town.

+ + + +
Character
+{{charname}}

+ +Difficulty: {{difficulty}}
+Class: {{charclass}}

+ +Level: {{level}}
+Experience: {{experience}}
+Gold: {{gold}}
+Hit Points: {{currenthp}} / {{maxhp}}
+Magic Points: {{currentmp}} / {{maxmp}}
+Travel Points: {{currenttp}} / {{maxtp}}

+ +Strength: {{strength}}
+Dexterity: {{dexterity}}
+Attack Power: {{attackpower}}
+Defense Power: {{defensepower}}
+

+ + + + +
Inventory
+ + + + +
WeaponWeapon: {{weaponname}}
ArmorArmor: {{armorname}}
ShieldShield: {{shieldname}}
+Slot 1: {{slot1name}}
+Slot 2: {{slot2name}}
+Slot 3: {{slot3name}} +

+THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/primary.php b/templates/primary.php new file mode 100644 index 0000000..3d50017 --- /dev/null +++ b/templates/primary.php @@ -0,0 +1,86 @@ + +{{title}} + + + +
+ + + + + + + +
+
{{dkgamename}}{{topnav}}
+
{{leftnav}}{{content}}{{rightnav}}

+ + + +
+ +THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/register.php b/templates/register.php new file mode 100644 index 0000000..b4534f1 --- /dev/null +++ b/templates/register.php @@ -0,0 +1,18 @@ + + + + + + + + + + + + +
Username:


Password:
Verify Password:


Email Address:
Verify Email:


Character Name:
Character Class:
Difficulty:
See Help for more information about character classes and difficulty levels.

+ +THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/rightnav.php b/templates/rightnav.php new file mode 100644 index 0000000..f6f422b --- /dev/null +++ b/templates/rightnav.php @@ -0,0 +1,39 @@ + +Character + +{{charname}}
+Level: {{level}}
+Exp: {{experience}}
+Gold: {{gold}}
+HP: {{currenthp}}
+MP: {{currentmp}}
+TP: {{currenttp}}
+{{statbars}}
+Extended Stats + +
+ + + + +
Inventory
+ + + + +
WeaponWeapon: {{weaponname}}
ArmorArmor: {{armorname}}
ShieldShield: {{shieldname}}
+Slot 1: {{slot1name}}
+Slot 2: {{slot2name}}
+Slot 3: {{slot3name}} +

+ + + + +
Fast Spells
+{{magiclist}} +

+THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/showchar.php b/templates/showchar.php new file mode 100644 index 0000000..8eb4418 --- /dev/null +++ b/templates/showchar.php @@ -0,0 +1,47 @@ + +Character + +{{charname}}

+ +Difficulty: {{difficulty}}
+Class: {{charclass}}

+ +Level: {{level}}
+Experience: {{experience}} {{plusexp}}
+Next Level: {{nextlevel}}
+Gold: {{gold}} {{plusgold}}
+Hit Points: {{currenthp}} / {{maxhp}}
+Magic Points: {{currentmp}} / {{maxmp}}
+Travel Points: {{currenttp}} / {{maxtp}}

+ +Strength: {{strength}}
+Dexterity: {{dexterity}}
+Attack Power: {{attackpower}}
+Defense Power: {{defensepower}}
+ +
+ + + + +
Inventory
+ + + + +
WeaponWeapon: {{weaponname}}
ArmorArmor: {{armorname}}
ShieldShield: {{shieldname}}
+Slot 1: {{slot1name}}
+Slot 2: {{slot2name}}
+Slot 3: {{slot3name}} +

+ + + + +
Spells
+{{magiclist}} +

+THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/templates/towns.php b/templates/towns.php new file mode 100644 index 0000000..6b39f0c --- /dev/null +++ b/templates/towns.php @@ -0,0 +1,27 @@ + +Welcome to {{name}} + +Town Options:
+ + +
+ + + +
Latest News
{{news}}
+
+ + + + +
Who's OnlineBabble Box
{{whosonline}}

+ + +THEVERYENDOFYOU; +?> \ No newline at end of file diff --git a/towns.php b/towns.php new file mode 100644 index 0000000..9980c55 --- /dev/null +++ b/towns.php @@ -0,0 +1,367 @@ +
You may return to town, or use the direction buttons on the left to start exploring.", "Inn"); die(); } + + if (isset($_POST["submit"])) { + + $newgold = $userrow["gold"] - $townrow["innprice"]; + $query = doquery("UPDATE {{table}} SET gold='$newgold',currenthp='".$userrow["maxhp"]."',currentmp='".$userrow["maxmp"]."',currenttp='".$userrow["maxtp"]."' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + $title = "Inn"; + $page = "You wake up feeling refreshed and ready for action.

You may return to town, or use the direction buttons on the left to start exploring."; + + } elseif (isset($_POST["cancel"])) { + + header("Location: index.php"); die(); + + } else { + + $title = "Inn"; + $page = "Resting at the inn will refill your current HP, MP, and TP to their maximum levels.

\n"; + $page .= "A night's sleep at this Inn will cost you " . $townrow["innprice"] . " gold. Is that ok?

\n"; + $page .= "
\n"; + $page .= " \n"; + $page .= "
\n"; + + } + + display($page, $title); + +} + +function buy() { // Displays a list of available items for purchase. + + global $userrow, $numqueries; + + $townquery = doquery("SELECT name,itemslist FROM {{table}} WHERE latitude='".$userrow["latitude"]."' AND longitude='".$userrow["longitude"]."' LIMIT 1", "towns"); + $townrow = mysql_fetch_array($townquery); + + $itemslist = explode(",",$townrow["itemslist"]); + $querystring = ""; + foreach($itemslist as $a=>$b) { + $querystring .= "id='$b' OR "; + } + $querystring = rtrim($querystring, " OR "); + + $itemsquery = doquery("SELECT * FROM {{table}} WHERE $querystring ORDER BY id", "items"); + $page = "Buying weapons will increase your Attack Power. Buying armor and shields will increase your Defense Power.

Click an item name to purchase it.

The following items are available at this town:

\n"; + $page .= "\n"; + while ($itemsrow = mysql_fetch_array($itemsquery)) { + if ($itemsrow["type"] == 1) { $attrib = "Attack Power:"; } else { $attrib = "Defense Power:"; } + $page .= ""; } + if ($itemsrow["type"] == 2) { $page .= "\"armor\""; } + if ($itemsrow["type"] == 3) { $page .= "\"shield\""; } + if ($userrow["weaponid"] == $itemsrow["id"] || $userrow["armorid"] == $itemsrow["id"] || $userrow["shieldid"] == $itemsrow["id"]) { + $page .= "\n"; + } else { + if ($itemsrow["special"] != "X") { $specialdot = "*"; } else { $specialdot = ""; } + $page .= "\n"; + } + } + $page .= "
"; + if ($itemsrow["type"] == 1) { $page .= "\"weapon\"".$itemsrow["name"]."$attrib ".$itemsrow["attribute"]."Already purchased
".$itemsrow["name"]."$specialdot$attrib ".$itemsrow["attribute"]."Price: ".$itemsrow["buycost"]." gold

\n"; + $page .= "If you've changed your mind, you may also return back to town.\n"; + $title = "Buy Items"; + + display($page, $title); + +} + +function buy2($id) { // Confirm user's intent to purchase item. + + global $userrow, $numqueries; + + $itemsquery = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "items"); + $itemsrow = mysql_fetch_array($itemsquery); + + if ($userrow["gold"] < $itemsrow["buycost"]) { display("You do not have enough gold to buy this item.

You may return to town, store, or use the direction buttons on the left to start exploring.", "Buy Items"); die(); } + + if ($itemsrow["type"] == 1) { + if ($userrow["weaponid"] != 0) { + $itemsquery2 = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["weaponid"]."' LIMIT 1", "items"); + $itemsrow2 = mysql_fetch_array($itemsquery2); + $page = "If you are buying the ".$itemsrow["name"].", then I will buy your ".$itemsrow2["name"]." for ".ceil($itemsrow2["buycost"]/2)." gold. Is that ok?

"; + } else { + $page = "You are buying the ".$itemsrow["name"].", is that ok?

"; + } + } elseif ($itemsrow["type"] == 2) { + if ($userrow["armorid"] != 0) { + $itemsquery2 = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["armorid"]."' LIMIT 1", "items"); + $itemsrow2 = mysql_fetch_array($itemsquery2); + $page = "If you are buying the ".$itemsrow["name"].", then I will buy your ".$itemsrow2["name"]." for ".ceil($itemsrow2["buycost"]/2)." gold. Is that ok?

"; + } else { + $page = "You are buying the ".$itemsrow["name"].", is that ok?

"; + } + } elseif ($itemsrow["type"] == 3) { + if ($userrow["shieldid"] != 0) { + $itemsquery2 = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["shieldid"]."' LIMIT 1", "items"); + $itemsrow2 = mysql_fetch_array($itemsquery2); + $page = "If you are buying the ".$itemsrow["name"].", then I will buy your ".$itemsrow2["name"]." for ".ceil($itemsrow2["buycost"]/2)." gold. Is that ok?

"; + } else { + $page = "You are buying the ".$itemsrow["name"].", is that ok?

"; + } + } + + $title = "Buy Items"; + display($page, $title); + +} + +function buy3($id) { // Update user profile with new item & stats. + + if (isset($_POST["cancel"])) { header("Location: index.php"); die(); } + + global $userrow; + + $itemsquery = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "items"); + $itemsrow = mysql_fetch_array($itemsquery); + + if ($userrow["gold"] < $itemsrow["buycost"]) { display("You do not have enough gold to buy this item.

You may return to town, store, or use the direction buttons on the left to start exploring.", "Buy Items"); die(); } + + if ($itemsrow["type"] == 1) { // weapon + + // Check if they already have an item in the slot. + if ($userrow["weaponid"] != 0) { + $itemsquery2 = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["weaponid"]."' LIMIT 1", "items"); + $itemsrow2 = mysql_fetch_array($itemsquery2); + } else { + $itemsrow2 = array("attribute"=>0,"buycost"=>0,"special"=>"X"); + } + + // Special item fields. + $specialchange1 = ""; + $specialchange2 = ""; + if ($itemsrow["special"] != "X") { + $special = explode(",",$itemsrow["special"]); + $tochange = $special[0]; + $userrow[$tochange] = $userrow[$tochange] + $special[1]; + $specialchange1 = "$tochange='".$userrow[$tochange]."',"; + if ($tochange == "strength") { $userrow["attackpower"] += $special[1]; } + if ($tochange == "dexterity") { $userrow["defensepower"] += $special[1]; } + } + if ($itemsrow2["special"] != "X") { + $special2 = explode(",",$itemsrow2["special"]); + $tochange2 = $special2[0]; + $userrow[$tochange2] = $userrow[$tochange2] - $special2[1]; + $specialchange2 = "$tochange2='".$userrow[$tochange2]."',"; + if ($tochange2 == "strength") { $userrow["attackpower"] -= $special2[1]; } + if ($tochange2 == "dexterity") { $userrow["defensepower"] -= $special2[1]; } + } + + // New stats. + $newgold = $userrow["gold"] + ceil($itemsrow2["buycost"]/2) - $itemsrow["buycost"]; + $newattack = $userrow["attackpower"] + $itemsrow["attribute"] - $itemsrow2["attribute"]; + $newid = $itemsrow["id"]; + $newname = $itemsrow["name"]; + $userid = $userrow["id"]; + if ($userrow["currenthp"] > $userrow["maxhp"]) { $newhp = $userrow["maxhp"]; } else { $newhp = $userrow["currenthp"]; } + if ($userrow["currentmp"] > $userrow["maxmp"]) { $newmp = $userrow["maxmp"]; } else { $newmp = $userrow["currentmp"]; } + if ($userrow["currenttp"] > $userrow["maxtp"]) { $newtp = $userrow["maxtp"]; } else { $newtp = $userrow["currenttp"]; } + + // Final update. + $updatequery = doquery("UPDATE {{table}} SET $specialchange1 $specialchange2 gold='$newgold', attackpower='$newattack', weaponid='$newid', weaponname='$newname', currenthp='$newhp', currentmp='$newmp', currenttp='$newtp' WHERE id='$userid' LIMIT 1", "users"); + + } elseif ($itemsrow["type"] == 2) { // Armor + + // Check if they already have an item in the slot. + if ($userrow["armorid"] != 0) { + $itemsquery2 = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["armorid"]."' LIMIT 1", "items"); + $itemsrow2 = mysql_fetch_array($itemsquery2); + } else { + $itemsrow2 = array("attribute"=>0,"buycost"=>0,"special"=>"X"); + } + + // Special item fields. + $specialchange1 = ""; + $specialchange2 = ""; + if ($itemsrow["special"] != "X") { + $special = explode(",",$itemsrow["special"]); + $tochange = $special[0]; + $userrow[$tochange] = $userrow[$tochange] + $special[1]; + $specialchange1 = "$tochange='".$userrow[$tochange]."',"; + if ($tochange == "strength") { $userrow["attackpower"] += $special[1]; } + if ($tochange == "dexterity") { $userrow["defensepower"] += $special[1]; } + } + if ($itemsrow2["special"] != "X") { + $special2 = explode(",",$itemsrow2["special"]); + $tochange2 = $special2[0]; + $userrow[$tochange2] = $userrow[$tochange2] - $special2[1]; + $specialchange2 = "$tochange2='".$userrow[$tochange2]."',"; + if ($tochange2 == "strength") { $userrow["attackpower"] -= $special2[1]; } + if ($tochange2 == "dexterity") { $userrow["defensepower"] -= $special2[1]; } + } + + // New stats. + $newgold = $userrow["gold"] + ceil($itemsrow2["buycost"]/2) - $itemsrow["buycost"]; + $newdefense = $userrow["defensepower"] + $itemsrow["attribute"] - $itemsrow2["attribute"]; + $newid = $itemsrow["id"]; + $newname = $itemsrow["name"]; + $userid = $userrow["id"]; + if ($userrow["currenthp"] > $userrow["maxhp"]) { $newhp = $userrow["maxhp"]; } else { $newhp = $userrow["currenthp"]; } + if ($userrow["currentmp"] > $userrow["maxmp"]) { $newmp = $userrow["maxmp"]; } else { $newmp = $userrow["currentmp"]; } + if ($userrow["currenttp"] > $userrow["maxtp"]) { $newtp = $userrow["maxtp"]; } else { $newtp = $userrow["currenttp"]; } + + // Final update. + $updatequery = doquery("UPDATE {{table}} SET $specialchange1 $specialchange2 gold='$newgold', defensepower='$newdefense', armorid='$newid', armorname='$newname', currenthp='$newhp', currentmp='$newmp', currenttp='$newtp' WHERE id='$userid' LIMIT 1", "users"); + + } elseif ($itemsrow["type"] == 3) { // Shield + + // Check if they already have an item in the slot. + if ($userrow["shieldid"] != 0) { + $itemsquery2 = doquery("SELECT * FROM {{table}} WHERE id='".$userrow["shieldid"]."' LIMIT 1", "items"); + $itemsrow2 = mysql_fetch_array($itemsquery2); + } else { + $itemsrow2 = array("attribute"=>0,"buycost"=>0,"special"=>"X"); + } + + // Special item fields. + $specialchange1 = ""; + $specialchange2 = ""; + if ($itemsrow["special"] != "X") { + $special = explode(",",$itemsrow["special"]); + $tochange = $special[0]; + $userrow[$tochange] = $userrow[$tochange] + $special[1]; + $specialchange1 = "$tochange='".$userrow[$tochange]."',"; + if ($tochange == "strength") { $userrow["attackpower"] += $special[1]; } + if ($tochange == "dexterity") { $userrow["defensepower"] += $special[1]; } + } + if ($itemsrow2["special"] != "X") { + $special2 = explode(",",$itemsrow2["special"]); + $tochange2 = $special2[0]; + $userrow[$tochange2] = $userrow[$tochange2] - $special2[1]; + $specialchange2 = "$tochange2='".$userrow[$tochange2]."',"; + if ($tochange2 == "strength") { $userrow["attackpower"] -= $special2[1]; } + if ($tochange2 == "dexterity") { $userrow["defensepower"] -= $special2[1]; } + } + + // New stats. + $newgold = $userrow["gold"] + ceil($itemsrow2["buycost"]/2) - $itemsrow["buycost"]; + $newdefense = $userrow["defensepower"] + $itemsrow["attribute"] - $itemsrow2["attribute"]; + $newid = $itemsrow["id"]; + $newname = $itemsrow["name"]; + $userid = $userrow["id"]; + if ($userrow["currenthp"] > $userrow["maxhp"]) { $newhp = $userrow["maxhp"]; } else { $newhp = $userrow["currenthp"]; } + if ($userrow["currentmp"] > $userrow["maxmp"]) { $newmp = $userrow["maxmp"]; } else { $newmp = $userrow["currentmp"]; } + if ($userrow["currenttp"] > $userrow["maxtp"]) { $newtp = $userrow["maxtp"]; } else { $newtp = $userrow["currenttp"]; } + + // Final update. + $updatequery = doquery("UPDATE {{table}} SET $specialchange1 $specialchange2 gold='$newgold', defensepower='$newdefense', shieldid='$newid', shieldname='$newname', currenthp='$newhp', currentmp='$newmp', currenttp='$newtp' WHERE id='$userid' LIMIT 1", "users"); + + } + + display("Thank you for purchasing this item.

You may return to town, store, or use the direction buttons on the left to start exploring.", "Buy Items"); + +} + +function maps() { // List maps the user can buy. + + global $userrow, $numqueries; + + $mappedtowns = explode(",",$userrow["towns"]); + + $page = "Buying maps will put the town in your Travel To box, and it won't cost you as many TP to get there.

\n"; + $page .= "Click a town name to purchase its map.

\n"; + $page .= "\n"; + + $townquery = doquery("SELECT * FROM {{table}} ORDER BY id", "towns"); + while ($townrow = mysql_fetch_array($townquery)) { + + if ($townrow["latitude"] >= 0) { $latitude = $townrow["latitude"] . "N,"; } else { $latitude = ($townrow["latitude"]*-1) . "S,"; } + if ($townrow["longitude"] >= 0) { $longitude = $townrow["longitude"] . "E"; } else { $longitude = ($townrow["longitude"]*-1) . "W"; } + if ($mappedtowns[$townrow["id"]] == 0) { + $page .= "\n"; + } else { + $page .= "\n"; + } + + } + + $page .= "
".$townrow["name"]."Price: ".$townrow["mapprice"]." goldBuy map to reveal details.
".$townrow["name"]."Already mapped.Location: $latitude $longitudeTP: ".$townrow["travelpoints"]."

\n"; + $page .= "If you've changed your mind, you may also return back to town.\n"; + + display($page, "Buy Maps"); + +} + +function maps2($id) { // Confirm user's intent to purchase map. + + global $userrow, $numqueries; + + $townquery = doquery("SELECT name,mapprice FROM {{table}} WHERE id='$id' LIMIT 1", "towns"); + $townrow = mysql_fetch_array($townquery); + + if ($userrow["gold"] < $townrow["mapprice"]) { display("You do not have enough gold to buy this map.

You may return to town, store, or use the direction buttons on the left to start exploring.", "Buy Maps"); die(); } + + $page = "You are buying the ".$townrow["name"]." map. Is that ok?

"; + + display($page, "Buy Maps"); + +} + +function maps3($id) { // Add new map to user's profile. + + if (isset($_POST["cancel"])) { header("Location: index.php"); die(); } + + global $userrow, $numqueries; + + $townquery = doquery("SELECT name,mapprice FROM {{table}} WHERE id='$id' LIMIT 1", "towns"); + $townrow = mysql_fetch_array($townquery); + + if ($userrow["gold"] < $townrow["mapprice"]) { display("You do not have enough gold to buy this map.

You may return to town, store, or use the direction buttons on the left to start exploring.", "Buy Maps"); die(); } + + $mappedtowns = explode(",",$userrow["towns"]); + $mappedtowns[$id] = 1; + $mappedtowns = implode(",",$mappedtowns); + $newgold = $userrow["gold"] - $townrow["mapprice"]; + + $updatequery = doquery("UPDATE {{table}} SET towns='$mappedtowns',gold='$newgold' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + + display("Thank you for purchasing this map.

You may return to town, store, or use the direction buttons on the left to start exploring.", "Buy Maps"); + +} + +function travelto($id, $usepoints=true) { // Send a user to a town from the Travel To menu. + + global $userrow, $numqueries; + + $townquery = doquery("SELECT name,travelpoints,latitude,longitude FROM {{table}} WHERE id='$id' LIMIT 1", "towns"); + $townrow = mysql_fetch_array($townquery); + + if ($usepoints==true) { + if ($userrow["currenttp"] < $townrow["travelpoints"]) { + display("You do not have enough TP to travel here. Please go back and try again when you get more TP.", "Travel To"); die(); + } + } + + if (($userrow["latitude"] == $townrow["latitude"]) && ($userrow["longitude"] == $townrow["longitude"])) { display("You are already in this town. Click here to return to the main town screen.", "Travel To"); die(); } + + if ($usepoints == true) { $newtp = $userrow["currenttp"] - $townrow["travelpoints"]; } else { $newtp = $userrow["currenttp"]; } + + $newlat = $townrow["latitude"]; + $newlon = $townrow["longitude"]; + $newid = $userrow["id"]; + + // If they got here by exploring, add this town to their map. + $mapped = explode(",",$userrow["towns"]); + if ($mapped[$id] == 0) { + $mapped[$id] = 1; + $mapped = "towns='".implode(",",$mapped)."',"; + } else { + $mapped = ""; + } + + $updatequery = doquery("UPDATE {{table}} SET currentaction='In Town',$mapped currenttp='$newtp',latitude='$newlat',longitude='$newlon' WHERE id='$newid' LIMIT 1", "users"); + + $page = "You have travelled to ".$townrow["name"].". You may now enter this town."; + display($page, "Travel To"); + +} + + +?> \ No newline at end of file diff --git a/users.php b/users.php new file mode 100644 index 0000000..af33a7c --- /dev/null +++ b/users.php @@ -0,0 +1,99 @@ +"; } + if (preg_match("/[^A-z0-9_\-]/", $username)==1) { $errors++; $errorlist .= "Username must be alphanumeric.
"; } // Thanks to "Carlos Pires" from php.net! + $usernamequery = mysql_query("SELECT username FROM dk_users WHERE username='$username' LIMIT 1"); + if (mysql_num_rows($usernamequery) > 0) { $errors++; $errorlist .= "Username already taken - unique username required.
"; } + + // Process email address. + if ($email1 == "" || $email2 == "") { $errors++; $errorlist .= "Email fields are required.
"; } + if ($email1 != $email2) { $errors++; $errorlist .= "Emails don't match.
"; } + if (! is_email($email1)) { $errors++; $errorlist .= "Email isn't valid.
"; } + $emailquery = mysql_query("SELECT email FROM dk_users WHERE email='$email1' LIMIT 1"); + if (mysql_num_rows($emailquery) > 0) { $errors++; $errorlist .= "Email already taken - unique email address required.
"; } + + // Process password. + if ($password1 != $password2) { $errors++; $errorlist .= "Passwords don't match.
"; } + $password = md5($password1); + + if ($errors == 0) { + + $verifycode = ""; + for ($i=0; $i<8; $i++) { + $verifycode .= chr(rand(65,90)); + } + + $query = doquery("INSERT INTO {{table}} SET id='',regdate=NOW(),verify='$verifycode',username='$username',password='$password',email='$email1',charname='$charname',charclass='$charclass',difficulty='$difficulty'", "users") or die(mysql_error()); + //if (sendregmail($email1, $verifycode)) { + $page = "Your account was created successfully.

You may now continue to the Log In page and start playing ".$controlrow["gamename"]."!"; + //} else { + // $page = "Your account was created successfully.

However, there was a problem sending your verification email. Please check with the game administrator to help resolve this problem.

You may now continue to the Log In page and start playing ".$controlrow["gamename"]."!"; + //} + + } else { + + $page = "The following error(s) occurred when your account was being made:
$errorlist
Please go back and try again."; + + } + + } else { + + $page = gettemplate("register"); + $page = parsetemplate($page, $controlrow); + + } + + $topnav = "\"Log\"Register\"\"Help\""; + display($page, "Register", false, false, false); + +} + +function sendregmail($emailaddress, $vercode) { + + include('config.php'); + extract($appsettings); + + $headers = ""; + $headers .= "From: $adminname<$adminemail>\n"; + $headers .= "X-Sender: <$adminemail>\n"; + $headers .= "Return-Path: $adminname<$adminemail>\n"; + $headers .= "X-Mailer: PHP\n"; + +$email = << \ No newline at end of file