From e1b99485057b9447ba6bbb0ec836dbc165afd1c1 Mon Sep 17 00:00:00 2001 From: Jamin Blount Date: Sun, 5 Feb 2017 11:51:02 -0600 Subject: [PATCH] Beta 2 Build 12 12.10.2005 - Build 12 (Eggs): - Members can now leave the Guild without requiring an officer to demote them to zero. - Rank 5 members can now edit/update Guild settings. - # of Members is now set to 1 when a Guild is created, and updated correctly when an application is approved. - The Guild founder is now notified via the Post Office when someone applies to join. - Members can now arbitrarily deposit money to the Guild bank. - You can no longer send guild money to yourself. Checks and balances, man! - Fixed image format selection so that it actually works. - Removed Language selection from account registration/settings. --- changelog.txt | 140 +++++ config.php | 11 + cookies.php | 31 ++ explore.php | 151 ++++++ extras/install.sql | 866 +++++++++++++++++++++++++++++++ extras/map.fla | Bin 0 -> 57856 bytes extras/mapmini.fla | Bin 0 -> 50176 bytes fight.php | 357 +++++++++++++ fightmods.php | 64 +++ globals.php | 50 ++ guilds.php | 484 +++++++++++++++++ images/Thumbs.db | Bin 0 -> 29696 bytes images/background.jpg | Bin 0 -> 6228 bytes images/background1.jpg | Bin 0 -> 34256 bytes images/background2.jpg | Bin 0 -> 36149 bytes images/background3.jpg | Bin 0 -> 16975 bytes images/background4.jpg | Bin 0 -> 28773 bytes images/background5.jpg | Bin 0 -> 11709 bytes images/bars_green.gif | Bin 0 -> 97 bytes images/bars_greenend.gif | Bin 0 -> 97 bytes images/bars_grey.gif | Bin 0 -> 89 bytes images/bars_red.gif | Bin 0 -> 97 bytes images/bars_redend.gif | Bin 0 -> 97 bytes images/bars_yellow.gif | Bin 0 -> 97 bytes images/bars_yellowend.gif | Bin 0 -> 97 bytes images/compass_01.png | Bin 0 -> 674 bytes images/compass_02.png | Bin 0 -> 1084 bytes images/compass_03.png | Bin 0 -> 1046 bytes images/compass_04.png | Bin 0 -> 681 bytes images/cup.gif | Bin 0 -> 1362 bytes images/items/1.gif | Bin 0 -> 511 bytes images/items/1.png | Bin 0 -> 602 bytes images/items/2.gif | Bin 0 -> 853 bytes images/items/2.png | Bin 0 -> 893 bytes images/items/3.gif | Bin 0 -> 771 bytes images/items/3.png | Bin 0 -> 783 bytes images/items/4.gif | Bin 0 -> 969 bytes images/items/4.png | Bin 0 -> 930 bytes images/items/Thumbs.db | Bin 0 -> 7680 bytes images/items/noimage.gif | Bin 0 -> 978 bytes images/logo.png | Bin 0 -> 3372 bytes images/spacer.gif | Bin 0 -> 43 bytes images/town_bank.png | Bin 0 -> 1496 bytes images/town_buy.png | Bin 0 -> 1789 bytes images/town_duel.png | Bin 0 -> 1645 bytes images/town_gamble.png | Bin 0 -> 1542 bytes images/town_guilds.png | Bin 0 -> 2422 bytes images/town_hall.png | Bin 0 -> 1821 bytes images/town_inn.png | Bin 0 -> 1019 bytes images/town_maps.png | Bin 0 -> 1411 bytes images/town_post.png | Bin 0 -> 3064 bytes images/users/Thumbs.db | Bin 0 -> 8192 bytes images/users/nopicture.gif | Bin 0 -> 1040 bytes index.php | 81 +++ lib.php | 225 ++++++++ login.php | 49 ++ mailbox.php | 217 ++++++++ mainindex.php | 49 ++ map.php | 49 ++ map.swf | Bin 0 -> 9430 bytes mapmini.php | 46 ++ mapmini.swf | Bin 0 -> 1068 bytes misc.php | 94 ++++ panels.php | 197 +++++++ pvp.php | 411 +++++++++++++++ pvpmini.php | 54 ++ spells.php | 97 ++++ templates/botcheck.php | 12 + templates/explore.php | 7 + templates/explore_verify.php | 12 + templates/fight_level.php | 13 + templates/fight_levelup.php | 15 + templates/fight_levelupspell.php | 15 + templates/fight_lose.php | 14 + templates/fight_new.php | 14 + templates/fight_turn.php | 17 + templates/fight_win.php | 13 + templates/guild_apply.php | 15 + templates/guild_create.php | 23 + templates/guild_disband.php | 10 + templates/guild_edit.php | 22 + templates/guild_homehigh.php | 52 ++ templates/guild_homelow.php | 34 ++ templates/guild_homemid.php | 52 ++ templates/guild_leave.php | 10 + templates/guild_list.php | 11 + templates/guild_members.php | 10 + templates/guild_news.php | 11 + templates/guild_remove.php | 11 + templates/login.php | 14 + templates/mailbox_letter.php | 18 + templates/mailbox_letterout.php | 12 + templates/mailbox_list.php | 13 + templates/mailbox_listout.php | 11 + templates/mailbox_listoutrow.php | 11 + templates/mailbox_listrow.php | 11 + templates/mailbox_new.php | 24 + templates/mailbox_reply.php | 25 + templates/mailbox_sent.php | 8 + templates/misc_babblebox.php | 35 ++ templates/misc_showmap.php | 35 ++ templates/panels_bottom.php | 39 ++ templates/panels_left.php | 25 + templates/panels_middle.php | 14 + templates/panels_right.php | 9 + templates/primary.php | 80 +++ templates/primary_min.php | 29 ++ templates/primary_new.php | 85 +++ templates/pvp_challenge.php | 8 + templates/pvp_challenged.php | 11 + templates/pvp_decline.php | 8 + templates/pvp_declined.php | 8 + templates/pvp_lose.php | 13 + templates/pvp_mini.php | 17 + templates/pvp_new.php | 15 + templates/pvp_turn.php | 17 + templates/pvp_wait.php | 12 + templates/pvp_win.php | 12 + templates/statusbars.php | 8 + templates/town.php | 28 + templates/town_bank1.php | 13 + templates/town_bank2.php | 9 + templates/town_buy1.php | 12 + templates/town_buy2_empty.php | 8 + templates/town_buy2_full.php | 8 + templates/town_buy3.php | 8 + templates/town_buy_itemrow.php | 23 + templates/town_enter.php | 7 + templates/town_gamble1.php | 7 + templates/town_halloffame.php | 9 + templates/town_halloffamerow.php | 17 + templates/town_inn1.php | 10 + templates/town_inn2.php | 8 + templates/town_map1.php | 10 + templates/town_map2.php | 8 + templates/town_map3.php | 8 + templates/town_pvplist.php | 9 + templates/users_chardelete.php | 12 + templates/users_charedit.php | 13 + templates/users_charlist.php | 19 + templates/users_charlistnew.php | 9 + templates/users_charlistrow.php | 16 + templates/users_charnew.php | 17 + templates/users_levelspell1.php | 12 + templates/users_levelspell2.php | 9 + templates/users_levelup1.php | 16 + templates/users_levelup2.php | 9 + templates/users_onlinechar.php | 42 ++ templates/users_profile.php | 46 ++ templates/users_register1.php | 17 + templates/users_settings.php | 20 + town.php | 510 ++++++++++++++++++ users.php | 628 ++++++++++++++++++++++ 153 files changed, 6340 insertions(+) create mode 100644 changelog.txt create mode 100644 config.php create mode 100644 cookies.php create mode 100644 explore.php create mode 100644 extras/install.sql create mode 100644 extras/map.fla create mode 100644 extras/mapmini.fla create mode 100644 fight.php create mode 100644 fightmods.php create mode 100644 globals.php create mode 100644 guilds.php create mode 100644 images/Thumbs.db create mode 100644 images/background.jpg create mode 100644 images/background1.jpg create mode 100644 images/background2.jpg create mode 100644 images/background3.jpg create mode 100644 images/background4.jpg create mode 100644 images/background5.jpg create mode 100644 images/bars_green.gif create mode 100644 images/bars_greenend.gif create mode 100644 images/bars_grey.gif create mode 100644 images/bars_red.gif create mode 100644 images/bars_redend.gif create mode 100644 images/bars_yellow.gif create mode 100644 images/bars_yellowend.gif create mode 100644 images/compass_01.png create mode 100644 images/compass_02.png create mode 100644 images/compass_03.png create mode 100644 images/compass_04.png create mode 100644 images/cup.gif create mode 100644 images/items/1.gif create mode 100644 images/items/1.png create mode 100644 images/items/2.gif create mode 100644 images/items/2.png create mode 100644 images/items/3.gif create mode 100644 images/items/3.png create mode 100644 images/items/4.gif create mode 100644 images/items/4.png create mode 100644 images/items/Thumbs.db create mode 100644 images/items/noimage.gif create mode 100644 images/logo.png create mode 100644 images/spacer.gif create mode 100644 images/town_bank.png create mode 100644 images/town_buy.png create mode 100644 images/town_duel.png create mode 100644 images/town_gamble.png create mode 100644 images/town_guilds.png create mode 100644 images/town_hall.png create mode 100644 images/town_inn.png create mode 100644 images/town_maps.png create mode 100644 images/town_post.png create mode 100644 images/users/Thumbs.db create mode 100644 images/users/nopicture.gif create mode 100644 index.php create mode 100644 lib.php create mode 100644 login.php create mode 100644 mailbox.php create mode 100644 mainindex.php create mode 100644 map.php create mode 100644 map.swf create mode 100644 mapmini.php create mode 100644 mapmini.swf create mode 100644 misc.php create mode 100644 panels.php create mode 100644 pvp.php create mode 100644 pvpmini.php create mode 100644 spells.php create mode 100644 templates/botcheck.php create mode 100644 templates/explore.php create mode 100644 templates/explore_verify.php create mode 100644 templates/fight_level.php create mode 100644 templates/fight_levelup.php create mode 100644 templates/fight_levelupspell.php create mode 100644 templates/fight_lose.php create mode 100644 templates/fight_new.php create mode 100644 templates/fight_turn.php create mode 100644 templates/fight_win.php create mode 100644 templates/guild_apply.php create mode 100644 templates/guild_create.php create mode 100644 templates/guild_disband.php create mode 100644 templates/guild_edit.php create mode 100644 templates/guild_homehigh.php create mode 100644 templates/guild_homelow.php create mode 100644 templates/guild_homemid.php create mode 100644 templates/guild_leave.php create mode 100644 templates/guild_list.php create mode 100644 templates/guild_members.php create mode 100644 templates/guild_news.php create mode 100644 templates/guild_remove.php create mode 100644 templates/login.php create mode 100644 templates/mailbox_letter.php create mode 100644 templates/mailbox_letterout.php create mode 100644 templates/mailbox_list.php create mode 100644 templates/mailbox_listout.php create mode 100644 templates/mailbox_listoutrow.php create mode 100644 templates/mailbox_listrow.php create mode 100644 templates/mailbox_new.php create mode 100644 templates/mailbox_reply.php create mode 100644 templates/mailbox_sent.php create mode 100644 templates/misc_babblebox.php create mode 100644 templates/misc_showmap.php create mode 100644 templates/panels_bottom.php create mode 100644 templates/panels_left.php create mode 100644 templates/panels_middle.php create mode 100644 templates/panels_right.php create mode 100644 templates/primary.php create mode 100644 templates/primary_min.php create mode 100644 templates/primary_new.php create mode 100644 templates/pvp_challenge.php create mode 100644 templates/pvp_challenged.php create mode 100644 templates/pvp_decline.php create mode 100644 templates/pvp_declined.php create mode 100644 templates/pvp_lose.php create mode 100644 templates/pvp_mini.php create mode 100644 templates/pvp_new.php create mode 100644 templates/pvp_turn.php create mode 100644 templates/pvp_wait.php create mode 100644 templates/pvp_win.php create mode 100644 templates/statusbars.php create mode 100644 templates/town.php create mode 100644 templates/town_bank1.php create mode 100644 templates/town_bank2.php create mode 100644 templates/town_buy1.php create mode 100644 templates/town_buy2_empty.php create mode 100644 templates/town_buy2_full.php create mode 100644 templates/town_buy3.php create mode 100644 templates/town_buy_itemrow.php create mode 100644 templates/town_enter.php create mode 100644 templates/town_gamble1.php create mode 100644 templates/town_halloffame.php create mode 100644 templates/town_halloffamerow.php create mode 100644 templates/town_inn1.php create mode 100644 templates/town_inn2.php create mode 100644 templates/town_map1.php create mode 100644 templates/town_map2.php create mode 100644 templates/town_map3.php create mode 100644 templates/town_pvplist.php create mode 100644 templates/users_chardelete.php create mode 100644 templates/users_charedit.php create mode 100644 templates/users_charlist.php create mode 100644 templates/users_charlistnew.php create mode 100644 templates/users_charlistrow.php create mode 100644 templates/users_charnew.php create mode 100644 templates/users_levelspell1.php create mode 100644 templates/users_levelspell2.php create mode 100644 templates/users_levelup1.php create mode 100644 templates/users_levelup2.php create mode 100644 templates/users_onlinechar.php create mode 100644 templates/users_profile.php create mode 100644 templates/users_register1.php create mode 100644 templates/users_settings.php create mode 100644 town.php create mode 100644 users.php diff --git a/changelog.txt b/changelog.txt new file mode 100644 index 0000000..1a8a231 --- /dev/null +++ b/changelog.txt @@ -0,0 +1,140 @@ +DRAGON SCOURGE +Changelog + +***** BETA TWO ***** +12.10.2005 - Build 12 (Eggs): +- Members can now leave the Guild without requiring an officer to demote them to zero. +- Rank 5 members can now edit/update Guild settings. +- # of Members is now set to 1 when a Guild is created, and updated correctly when an application is approved. +- The Guild founder is now notified via the Post Office when someone applies to join. +- Members can now arbitrarily deposit money to the Guild bank. +- You can no longer send guild money to yourself. Checks and balances, man! +- Fixed image format selection so that it actually works. +- Removed Language selection from account registration/settings. + +12.02.2005 - Build 11 (Chopsticks): +- Added guilds/clans. +- Fixed bug with 0 or 1 shouts. +- Removed an unused table row from extended profile. +- Users can now select PNG or GIF formats for item/monster images in their Account Settings. +- Added $controlrow option to enable/disable item/monster images (setting up for the Premium/Standard versions). +- New set of item images in town (to replace the ones I stole from Diablo II). +- Items in town are now created based on min/max levels for the town, instead of the user's exact level. +- Greatly expanded the list of base items. +- Fighting now has chances for excellent hit (double damage) and monster dodging (zero damage). + + +***** BETA ONE ***** + +11.10.2005 - Build 10 (Fingers): +- Map image has now been replaced with a fully dynamic Flash movie to prevent cache issues. +- Babblebox now refreshes itself every 45 seconds. + +11.07.2005 - Build 09 (Billiards): +- Fixed spell return bug that would cause SQL errors in PVP. +- Removed hard-coded avatar image sizes. +- Fixed the "death by 0hp monster" bug. +- Fixed reply bug in the Post Office. +- Post Office should now check for sent gold AND postage when calculating for the error message. +- Entering pvp.php and ending up in the dowait() function properly shows fightrow variables. +- Monsters no longer have magic defense. (This is for balance testing. Some monsters will still end up with some eventually.) + +11.02.2005 - Build 08 (Magic): +- Spending level points now increments current hp/mp as well as max hp/mp. +- Improved error handling in users.php. +- Character creation screen now properly displays max avatar filesize. +- Challenging for duels is now moved to town.php, so that pvp.php can *never* run without a valid currentpvp number in $userrow. +- You no longer get stranded in the duel screen if the other player declines the challenge. +- You can no longer challenge yourself (or any other character on your account) to a duel. +- The "No" button on the Inn screen now works properly. +- Removed "jewel" slot from onlinechar, since jewels are not currently implemented. +- Shields and helmets now display properly in profile and onlinechar. +- $controlrow is now properly retrieved while a user is not logged in. +- Hall of Fame experience points are now run through number_format(). +- Fixed addslashes_deep() to actually add slashes, instead of strip them. + +10.24.2005 - Build 07 (Lucky): +- Increased error checking to prevent pvp.php from running without the proper variables in place. +- Closed up travel/map loophole that lets you jump to places without owning the map. +- Fixed a possible error in an empty Post Office outbox. +- All "Please go back and try again" error messages now link back to index.php. +- Avatar system changes: + * External avatars are no longer allowed. + * Max avatar size (bytes) is now a changeable controlrow variable. + * Uploading a new avatar now deletes your old one to save server space. + * File extensions are no longer case sensitive. +- Botcheck system changes: + * Closed up loophole that let you keep exploring without verifying the image text. + * Images are now generated with random filenames to prevent old images from showing up. + * Images are now deleted after successful verification. + +10.22.2005 - Build 06 (Courtney): +- Added Spells. +- Added PVP. +- Various minor bugfixes/changes that I can't remember cuz I wasn't updating this as I went along. +- Intra-account money transfers are limited to 10% of the user's gold. +- Increased size of pop-up map. + +***** ALPHA TWO ***** + +5.6.2005 - Build 05 (Lifesavers): +- Added live image map with town/player locations. +- Added Babblebox. +- Added Who's Online. +- Fixed improper table with for IE6. +- Moved the scrollable div tag into the primary template and out of the sub templates. +- Removed a possible infinite loop in the anti-macro function. +- Added "Return to [Town|Game]" links to the templates that were missing them. +- Fixed a problem with the Top 10 list if there was only one character in the game. +- Character names are (once again) limited to alphanumerics, to prevent annoying database issues. (Regex has been altered to allow spaces & hyphens, though.) + +4.23.2005 - Build 04 (Golf): +- Added image-based compass navigation. +- Fights happen slightly less often now (1/5 rather than 1/4). +- Added anti-macro image verification for protection against space robots. + +4.1.2005 - Build 03 (Holy Hand Grenade): +- Fixed problem that prevented users from registering. +- Fixed exploit in the Bank and Post Office that allowed users to withdraw/deposit/send negative numbers. +- Added God Mode cheat: index.php?do=iddqd + +3.29.2005 - Build 02 (Loser): +- Characters are now separated from Accounts, to allow multiple chars (4) on one account. +- Added account settings (changing password/email/language). +- Increased security on POST/GET/COOKIE arrays. +- You can no longer send a Letter to yourself. + +3.28.2005 - Build 01 (Binary): +- Fixed shield/helmet item slot number mixup. +- Fixed rounding problem when applying gold/exp bonuses. +- Fixed Level Points template problem. +- Added the Hall of Fame (Top 10 list). +- Added the Post Office (private messaging + money transfers). + +3.25.2005 - Build 00 (MI5): +- Complete ground-up rewrite. Build numbers reset to 00. Everything is new again. + + +***** ALPHA ONE ***** + +8.2.2004 - Build 23 (johnny): +- Fixed bug that prevented people from buying items. +- Fixed URL cheat that allowed people to buy any item in the game. +- Fixed bug that could cause negative damage to monsters (ie. heal them). + +7.30.2004 - Build 22 (catch): +- Removed dev site link from ?do=version. +- Added changelog link to ?do=version. +- Fixed URL cheat that allowed people to get healed for free. +- Fixed number_format for gold/exp on the charprofile screen. + +7.28.2004 - Build 21 (beer): +- Fixed problem with having occasional monster hp values as decimals instead of integers. +- Language name values are now properly lowercased for storage. +- Added "Not Working Yet" messages for arena/onlinechar/help. +- Fixed a problem with the fight screen showing the wrong player lat/lon values. +- Fixed a problem with users getting stuck off edge of the map. +- Added language indexes for x_submit and x_reset. + +7.19.2004 - Build 20 (pr0n): +- Initial public testing release. \ No newline at end of file diff --git a/config.php b/config.php new file mode 100644 index 0000000..1e30d25 --- /dev/null +++ b/config.php @@ -0,0 +1,11 @@ + "localhost", // MySQL server name. (Usually localhost.) + "user" => "", // MySQL username. + "pass" => "", // MySQL password. + "name" => "", // MySQL database name. + "prefix" => "", // Prefix for table names. + "secretword" => ""); // Secret word used when hashing information for cookies. + +?> \ No newline at end of file diff --git a/cookies.php b/cookies.php new file mode 100644 index 0000000..81c22d7 --- /dev/null +++ b/cookies.php @@ -0,0 +1,31 @@ + \ No newline at end of file diff --git a/explore.php b/explore.php new file mode 100644 index 0000000..4976697 --- /dev/null +++ b/explore.php @@ -0,0 +1,151 @@ +go back and try again."); + } + } + + // Breakout for towns. + $query = doquery("SELECT * FROM {{table}} WHERE world='".$userrow["world"]."' AND latitude='".$userrow["latitude"]."' AND longitude='".$userrow["longitude"]."' LIMIT 1", "towns"); + $row = dorow($query); + if ($row != false) { + $townslist = explode(",",$userrow["townslist"]); + if (!in_array($row["id"], $townslist)) { + $userrow["townslist"] .= ",".$row["id"]; + $string .= ", townslist='".$userrow["townslist"]."'"; + } + doquery("UPDATE {{table}} SET currentaction='In Town' $string WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + display("Exploring", parsetemplate(gettemplate("town_enter"), $row)); + } + + // Decide if we want to pick a fight with someone. + if (rand(1,5) == 1 && $userrow["currentaction"] != "In Town") { + doquery("UPDATE {{table}} SET currentaction='Fighting' $string WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + die(header("Location: fight.php")); + } + + // Random check for protection against macro bots. + if ($controlrow["botcheck"] > 0) { + if (rand(1,$controlrow["botcheck"]) == 1) { + botkillah(); + } + } + + // If we've gotten this far, nothing has happened. + $userrow["currentaction"] = "Exploring"; + doquery("UPDATE {{table}} SET currentaction='Exploring' $string WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + display("Exploring", gettemplate("explore")); + +} + +function travel($id) { // Move them with the Travel To list. + + global $userrow, $worldrow; + + if ($userrow["currentpvp"] != 0) { die(header("Location: pvp.php")); } + if ($userrow["currentaction"] == "PVP") { die(header("Location: pvp.php")); } + if ($userrow["currentaction"] == "Fighting") { die(header("Location: fight.php")); } + if ($userrow["exploreverify"] != "") { botkillah(); } + + if (!is_numeric($id)) { err("Invalid action. Please go back and try again."); } + $query = doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "towns"); + $row = dorow($query); + + // Errors. + if ($userrow["currenttp"] < $row["travelpoints"]) { err("You do not have enough Travel Points to travel to this town. Please go back and try again."); } + if ($userrow["world"] != $row["world"]) { err("You can only travel to towns in ".$worldrow["name"].". Please go back and try again."); } + if ($userrow["latitude"] == $row["latitude"] && $userrow["longitude"] == $row["longitude"] && $userrow["world"] == $row["world"]) { err("You are already in ".$row["name"].". You do not need to travel there.

Click here to return to the main town screen."); } + $townslist = explode(",",$userrow["townslist"]); + if (!in_array($id,$townslist)) { err("You have not purchased the map to this town. Please go back and try again."); } + + // Now move them. + $userrow["longitude"] = $row["longitude"]; + $userrow["latitude"] = $row["latitude"]; + $userrow["currenttp"] -= $row["travelpoints"]; + $query = doquery("UPDATE {{table}} SET latitude='".$userrow["latitude"]."', longitude='".$userrow["longitude"]."', currenttp='".$userrow["currenttp"]."', currentaction='In Town' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + display("Exploring", parsetemplate(gettemplate("town_enter"), $row)); + +} + +function botkillah() { // Bust a cap in the asses of macro bots. Word. + + global $userrow; + + if (isset($_POST["submit"])) { + + if (strtoupper($_POST["verify"]) == $userrow["exploreverify"]) { + $query = doquery("UPDATE {{table}} SET exploreverify='',exploreverifyimage='' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + unlink("images/botcheck/".$userrow["exploreverifyimage"]); + die(header("Location: index.php")); + } else { + $query = doquery("UPDATE {{table}} SET explorefailed=explorefailed+1 WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + die(header("Location: index.php?do=humanity")); + } + + } else { + + if ($userrow["exploreverify"] == "") { + + // Thanks to phpNoise for the tutorial on this - http://www.phpnoise.com/tutorials/1/2 + // Image setup. + $im = ImageCreate(200, 40); + $white = ImageColorAllocate($im, 240, 240, 240); + $black = ImageColorAllocate($im, 102, 51, 0); + + // Get us some random text. + $new_string = ""; + for($i=0; $i<6; $i++) { + $new_string .= chr(rand(65,90)); + } + + // Finalize, update userrow & output. + ImageFill($im, 0, 0, $white); + ImageString($im, 5, rand(10,120), rand(5,25), $new_string, $black); + $randomext = ""; + for($i=0; $i<8; $i++) { $randomext .= rand(0,9); } + ImagePNG($im, "images/botcheck/$randomext".".png"); + ImageDestroy($im); + $query = doquery("UPDATE {{table}} SET exploreverify='$new_string',exploreverifyimage='$randomext".".png' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + + $pagerow["exploreverifyimage"] = $randomext.".png"; + + } else { $pagerow["exploreverifyimage"] = $userrow["exploreverifyimage"]; } + + display("Anti-Macro Verification", parsetemplate(gettemplate("explore_verify"),$pagerow)); + + } + +} + +?> \ No newline at end of file diff --git a/extras/install.sql b/extras/install.sql new file mode 100644 index 0000000..10e55ee --- /dev/null +++ b/extras/install.sql @@ -0,0 +1,866 @@ +-- phpMyAdmin SQL Dump +-- version 2.6.0-pl3 +-- http://www.phpmyadmin.net +-- +-- Host: localhost +-- Generation Time: Dec 10, 2005 at 03:15 PM +-- Server version: 4.1.14 +-- PHP Version: 5.0.5 +-- +-- Database: `scourge2` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_accounts` +-- + +CREATE TABLE `sx_accounts` ( + `id` int(10) unsigned NOT NULL auto_increment, + `username` varchar(30) NOT NULL default '', + `password` varchar(32) NOT NULL default '', + `emailaddress` varchar(50) NOT NULL default '', + `verifycode` varchar(8) NOT NULL default '', + `regdate` datetime NOT NULL default '0000-00-00 00:00:00', + `regip` varchar(16) NOT NULL default '', + `authlevel` tinyint(3) unsigned NOT NULL default '1', + `language` varchar(30) NOT NULL default '', + `characters` tinyint(3) unsigned NOT NULL default '0', + `activechar` int(10) unsigned NOT NULL default '0', + `imageformat` varchar(4) NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_babblebox` +-- + +CREATE TABLE `sx_babblebox` ( + `id` int(11) unsigned NOT NULL auto_increment, + `posttime` datetime NOT NULL default '0000-00-00 00:00:00', + `charname` varchar(30) NOT NULL default '', + `charid` int(11) unsigned NOT NULL default '0', + `content` varchar(255) NOT NULL default '', + `guild` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_babblebox` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_classes` +-- + +CREATE TABLE `sx_classes` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name` varchar(50) NOT NULL default '', + `expbonus` tinyint(3) unsigned NOT NULL default '0', + `goldbonus` tinyint(3) unsigned NOT NULL default '0', + `damageperstrength` float unsigned NOT NULL default '0', + `hpperdexterity` float unsigned NOT NULL default '0', + `mpperenergy` float unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_classes` +-- + +INSERT INTO `sx_classes` VALUES (1, 'Barbarian', 0, 0, 2, 1.5, 1); +INSERT INTO `sx_classes` VALUES (2, 'Sorceress', 0, 0, 1, 1.5, 2); +INSERT INTO `sx_classes` VALUES (3, 'Paladin', 0, 0, 1.5, 2, 1); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_control` +-- + +CREATE TABLE `sx_control` ( + `id` tinyint(3) unsigned NOT NULL auto_increment, + `gamename` varchar(50) NOT NULL default '', + `gameopen` tinyint(3) unsigned NOT NULL default '0', + `gamepath` varchar(200) NOT NULL default '', + `forumtype` tinyint(3) unsigned NOT NULL default '0', + `forumurl` varchar(200) NOT NULL default '', + `avatarpath` varchar(200) NOT NULL default '', + `avatarurl` varchar(200) NOT NULL default '', + `avatarmaxsize` int(10) unsigned NOT NULL default '0', + `showshout` tinyint(3) unsigned NOT NULL default '0', + `showonline` tinyint(3) unsigned NOT NULL default '0', + `shownews` tinyint(3) unsigned NOT NULL default '0', + `showimages` tinyint(3) unsigned NOT NULL default '0', + `verifyemail` tinyint(3) unsigned NOT NULL default '0', + `compression` tinyint(3) unsigned NOT NULL default '0', + `debug` tinyint(3) unsigned NOT NULL default '0', + `logerrors` tinyint(3) unsigned NOT NULL default '0', + `botcheck` tinyint(3) unsigned NOT NULL default '0', + `pvprefresh` int(10) NOT NULL default '0', + `pvptimeout` int(10) NOT NULL default '0', + `guildstartup` int(10) unsigned NOT NULL default '100000', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_control` +-- + +INSERT INTO `sx_control` VALUES (1, 'Dragon Scourge', 1, 'd:\\server\\docroot\\scourge\\', 1, 'http://se7enet.com/ubbthreads/ubbthreads.php', 'd:\\server\\docroot\\scourge\\images\\users\\', 'http://localhost/scourge/images/users/', 15000, 1, 1, 1, 1, 0, 1, 1, 1, 100, 15, 600, 100000); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_difficulties` +-- + +CREATE TABLE `sx_difficulties` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name` varchar(50) NOT NULL default '', + `expbonus` tinyint(3) unsigned NOT NULL default '0', + `goldbonus` tinyint(3) unsigned NOT NULL default '0', + `multiplier` float NOT NULL default '0', + `deathpenalty` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_difficulties` +-- + +INSERT INTO `sx_difficulties` VALUES (1, 'Easy', 0, 0, 1, 0); +INSERT INTO `sx_difficulties` VALUES (2, 'Medium', 3, 3, 1.5, 3); +INSERT INTO `sx_difficulties` VALUES (3, 'Hard', 5, 5, 2, 7); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_guildapps` +-- + +CREATE TABLE `sx_guildapps` ( + `id` int(10) unsigned NOT NULL auto_increment, + `guild` int(10) unsigned NOT NULL default '0', + `charid` int(10) unsigned NOT NULL default '0', + `charname` varchar(30) NOT NULL default '', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_guildapps` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_guilds` +-- + +CREATE TABLE `sx_guilds` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name` varchar(50) NOT NULL default '', + `tagline` varchar(4) NOT NULL default '', + `color1` varchar(7) NOT NULL default '', + `color2` varchar(7) NOT NULL default '', + `members` int(10) unsigned NOT NULL default '0', + `founder` int(10) unsigned NOT NULL default '0', + `bank` int(10) unsigned NOT NULL default '0', + `joincost` int(10) unsigned NOT NULL default '0', + `image` varchar(30) NOT NULL default '', + `rank1` varchar(30) NOT NULL default '', + `rank2` varchar(30) NOT NULL default '', + `rank3` varchar(30) NOT NULL default '', + `rank4` varchar(30) NOT NULL default '', + `rank5` varchar(30) NOT NULL default '', + `isactive` tinyint(3) unsigned NOT NULL default '0', + `statement` text NOT NULL, + `news` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_guilds` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_itembase` +-- + +CREATE TABLE `sx_itembase` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name` varchar(50) NOT NULL default '', + `slotnumber` tinyint(3) unsigned NOT NULL default '0', + `unique` tinyint(3) unsigned NOT NULL default '0', + `willdrop` tinyint(3) unsigned NOT NULL default '0', + `buycost` int(10) unsigned NOT NULL default '0', + `sellcost` int(10) unsigned NOT NULL default '0', + `reqlevel` smallint(5) unsigned NOT NULL default '0', + `reqstrength` smallint(5) unsigned NOT NULL default '0', + `reqdexterity` smallint(5) unsigned NOT NULL default '0', + `reqenergy` smallint(5) unsigned NOT NULL default '0', + `basename` varchar(50) NOT NULL default '', + `baseattr` smallint(5) unsigned NOT NULL default '0', + `mod1name` varchar(50) NOT NULL default '', + `mod1attr` smallint(5) unsigned NOT NULL default '0', + `mod2name` varchar(50) NOT NULL default '', + `mod2attr` smallint(5) unsigned NOT NULL default '0', + `mod3name` varchar(50) NOT NULL default '', + `mod3attr` smallint(5) unsigned NOT NULL default '0', + `mod4name` varchar(50) NOT NULL default '', + `mod4attr` smallint(5) unsigned NOT NULL default '0', + `mod5name` varchar(50) NOT NULL default '', + `mod5attr` smallint(5) unsigned NOT NULL default '0', + `mod6name` varchar(50) NOT NULL default '', + `mod6attr` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_itembase` +-- + +INSERT INTO `sx_itembase` VALUES (1, 'Pointy Stick', 1, 0, 1, 10, 5, 1, 0, 0, 0, 'physattack', 3, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (2, 'Big Stick', 1, 0, 1, 15, 8, 1, 0, 0, 0, 'physattack', 4, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (3, 'Dagger', 1, 0, 1, 20, 10, 1, 0, 0, 0, 'physattack', 5, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (4, 'Hand Axe', 1, 0, 1, 30, 15, 1, 0, 0, 0, 'physattack', 7, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (5, 'Leg Bone', 1, 0, 1, 40, 20, 1, 0, 0, 0, 'physattack', 8, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (6, 'Dirk', 1, 0, 1, 60, 30, 3, 10, 0, 0, 'physattack', 10, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (7, 'Small Axe', 1, 0, 1, 80, 40, 3, 10, 0, 0, 'physattack', 11, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (8, 'Club', 1, 0, 1, 110, 55, 3, 15, 0, 0, 'physattack', 12, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (9, 'Kris', 1, 0, 1, 140, 70, 3, 15, 0, 0, 'physattack', 15, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (10, 'Light Axe', 1, 0, 1, 180, 90, 5, 20, 0, 0, 'physattack', 18, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (11, 'Spiked Club', 1, 0, 1, 220, 110, 5, 20, 0, 0, 'physattack', 20, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (12, 'Cudgel', 1, 0, 1, 270, 135, 5, 25, 0, 0, 'physattack', 23, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (13, 'Stiletto', 1, 0, 1, 330, 165, 7, 25, 0, 0, 'physattack', 25, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (14, 'Pick Axe', 1, 0, 1, 400, 200, 9, 30, 0, 0, 'physattack', 30, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (15, 'Nailed Club', 1, 0, 1, 480, 240, 11, 30, 0, 0, 'physattack', 30, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (16, 'Cutlass', 1, 0, 1, 570, 285, 13, 35, 0, 0, 'physattack', 35, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (17, 'Bayonet', 1, 0, 1, 670, 335, 15, 35, 0, 0, 'physattack', 38, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (18, 'Tomahawk', 1, 0, 1, 800, 400, 17, 40, 0, 0, 'physattack', 40, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (19, 'Light Mace', 1, 0, 1, 950, 475, 19, 40, 0, 0, 'physattack', 43, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (20, 'Falchion', 1, 0, 1, 1200, 600, 21, 45, 0, 0, 'physattack', 45, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (21, 'Foil', 1, 0, 1, 1400, 700, 23, 50, 0, 0, 'physattack', 48, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (22, 'Short Sword', 1, 0, 1, 1600, 800, 25, 50, 0, 0, 'physattack', 50, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (23, 'Double Axe', 1, 0, 1, 1900, 950, 27, 60, 0, 0, 'physattack', 55, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (24, 'Mace', 1, 0, 1, 2300, 1150, 29, 60, 0, 0, 'physattack', 60, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (25, 'Scimitar', 1, 0, 1, 2800, 1400, 31, 70, 0, 0, 'physattack', 65, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (26, 'Bardiche', 1, 0, 1, 3400, 1700, 33, 70, 0, 0, 'physattack', 70, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (27, 'Knobbed Mace', 1, 0, 1, 4100, 2050, 35, 80, 0, 0, 'physattack', 75, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (28, 'Rapier', 1, 0, 1, 4900, 2450, 37, 90, 0, 0, 'physattack', 85, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (29, 'Morning Star', 1, 0, 1, 5800, 2900, 39, 100, 0, 0, 'physattack', 95, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (30, 'Battle Axe', 1, 0, 1, 6800, 3400, 41, 110, 0, 0, 'physattack', 105, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (31, 'Saber', 1, 0, 1, 7800, 3900, 43, 120, 0, 0, 'physattack', 115, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (32, 'Francisca', 1, 0, 1, 9000, 4500, 45, 130, 0, 0, 'physattack', 125, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (33, 'Flanged Mace', 1, 0, 1, 10000, 5000, 47, 140, 0, 0, 'physattack', 135, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (34, 'Broadsword', 1, 0, 1, 11000, 5500, 49, 150, 0, 0, 'physattack', 145, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (35, 'War Axe', 1, 0, 1, 12500, 6250, 51, 165, 0, 0, 'physattack', 155, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (36, 'Trench Mace', 1, 0, 1, 14000, 7000, 53, 180, 0, 0, 'physattack', 165, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (37, 'Long Sword', 1, 0, 1, 15500, 7750, 55, 195, 0, 0, 'physattack', 180, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (38, 'Broad Axe', 1, 0, 1, 17000, 8500, 57, 210, 0, 0, 'physattack', 195, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (39, 'Flail', 1, 0, 1, 18500, 9250, 59, 225, 0, 0, 'physattack', 210, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (40, 'Claymore', 1, 0, 1, 20000, 10000, 61, 240, 0, 0, 'physattack', 225, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (41, 'Poleaxe', 1, 0, 1, 21500, 10750, 63, 255, 0, 0, 'physattack', 240, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (42, 'War Hammer', 1, 0, 1, 23000, 11500, 65, 270, 0, 0, 'physattack', 255, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (43, 'Katana', 1, 0, 1, 24500, 12250, 67, 285, 0, 0, 'physattack', 270, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (44, 'Scythe', 1, 0, 1, 26000, 13000, 69, 300, 0, 0, 'physattack', 280, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (45, 'Zweihander', 1, 0, 1, 27500, 13750, 71, 315, 0, 0, 'physattack', 295, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (46, 'Halberd', 1, 0, 1, 29000, 14500, 73, 330, 0, 0, 'physattack', 310, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (47, 'Flamberge', 1, 0, 1, 30000, 15000, 75, 345, 0, 0, 'physattack', 330, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (48, 'Great Axe', 1, 0, 1, 32000, 16000, 77, 360, 0, 0, 'physattack', 345, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (49, 'Great Sword', 1, 0, 1, 34000, 17000, 79, 375, 0, 0, 'physattack', 360, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (50, 'Giant Axe', 1, 0, 1, 36000, 18000, 81, 390, 0, 0, 'physattack', 380, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (51, 'Giant Maul', 1, 0, 1, 38000, 19000, 83, 405, 0, 0, 'physattack', 400, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (52, 'Skivvies', 2, 0, 1, 20, 10, 1, 0, 0, 0, 'physdefense', 2, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (53, 'Cloak', 2, 0, 1, 30, 15, 1, 0, 0, 0, 'physdefense', 3, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (54, 'Cloth Armor', 2, 0, 1, 40, 20, 1, 0, 0, 0, 'physdefense', 3, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (55, 'Quilted Coat', 2, 0, 1, 50, 25, 1, 0, 0, 0, 'physdefense', 5, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (56, 'Quilted Armor', 2, 0, 1, 70, 35, 1, 0, 0, 0, 'physdefense', 5, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (57, 'Leather Coat', 2, 0, 1, 90, 45, 3, 5, 6, 0, 'physdefense', 6, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (58, 'Leather Hauberk', 2, 0, 1, 110, 55, 3, 5, 6, 0, 'physdefense', 7, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (59, 'Leather Coat', 2, 0, 1, 150, 75, 3, 8, 10, 0, 'physdefense', 8, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (60, 'Hard Leather Armor', 2, 0, 1, 190, 95, 3, 8, 10, 0, 'physdefense', 9, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (61, 'Riveted Leather Armor', 2, 0, 1, 230, 115, 5, 10, 12, 0, 'physdefense', 11, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (62, 'Spiked Leather Armor', 2, 0, 1, 270, 135, 5, 10, 12, 0, 'physdefense', 12, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (63, 'Light Chain Mail', 2, 0, 1, 310, 155, 5, 13, 16, 0, 'physdefense', 14, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (64, 'Heavy Chain Mail', 2, 0, 1, 360, 180, 7, 13, 16, 0, 'physdefense', 15, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (65, 'Chain Mail Shirt', 2, 0, 1, 420, 210, 9, 15, 18, 0, 'physdefense', 18, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (66, 'Chain Mail Hauberk', 2, 0, 1, 500, 250, 11, 15, 18, 0, 'physdefense', 18, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (67, 'Full Chain Mail', 2, 0, 1, 580, 290, 13, 18, 22, 0, 'physdefense', 21, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (68, 'Light Plate Mail', 2, 0, 1, 680, 340, 15, 18, 22, 0, 'physdefense', 23, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (69, 'Heavy Plate Mail', 2, 0, 1, 800, 400, 17, 20, 24, 0, 'physdefense', 24, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (70, 'Plate Mail Shirt', 2, 0, 1, 950, 475, 19, 20, 24, 0, 'physdefense', 26, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (71, 'Plate Mail Hauberk', 2, 0, 1, 1200, 600, 21, 23, 28, 0, 'physdefense', 27, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (72, 'Full Plate Mail', 2, 0, 1, 1500, 750, 23, 25, 30, 0, 'physdefense', 29, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (73, 'Light Scale Mail', 2, 0, 1, 1800, 900, 25, 25, 30, 0, 'physdefense', 30, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (74, 'Heavy Scale Mail', 2, 0, 1, 2400, 1200, 27, 30, 36, 0, 'physdefense', 33, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (75, 'Scale Mail Shirt', 2, 0, 1, 2800, 1400, 29, 30, 36, 0, 'physdefense', 36, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (76, 'Scale Mail Hauberk', 2, 0, 1, 3500, 1750, 31, 35, 42, 0, 'physdefense', 39, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (77, 'Full Scale Mail', 2, 0, 1, 4800, 2400, 33, 35, 42, 0, 'physdefense', 42, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (78, 'Copper Breastplate', 2, 0, 1, 6000, 3000, 35, 40, 48, 0, 'physdefense', 45, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (79, 'Bronze Breastplate', 2, 0, 1, 7500, 3750, 37, 45, 54, 0, 'physdefense', 50, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (80, 'Iron Breastplate', 2, 0, 1, 9000, 4500, 39, 50, 60, 0, 'physdefense', 56, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (81, 'Steel Breastplate', 2, 0, 1, 10500, 5250, 41, 55, 66, 0, 'physdefense', 62, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (82, 'Titanium Breastplate', 2, 0, 1, 12000, 6000, 43, 60, 72, 0, 'physdefense', 68, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (83, 'Copper Field Plate', 2, 0, 1, 14000, 7000, 45, 65, 78, 0, 'physdefense', 74, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (84, 'Bronze Field Plate', 2, 0, 1, 16000, 8000, 47, 70, 84, 0, 'physdefense', 80, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (85, 'Iron Field Plate', 2, 0, 1, 18000, 9000, 49, 75, 90, 0, 'physdefense', 86, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (86, 'Steel Field Plate', 2, 0, 1, 20000, 10000, 51, 83, 100, 0, 'physdefense', 92, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (87, 'Titanium Field Plate', 2, 0, 1, 24000, 12000, 53, 90, 108, 0, 'physdefense', 98, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (88, 'Copper Articulated Plate', 2, 0, 1, 28000, 14000, 55, 98, 118, 0, 'physdefense', 106, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (89, 'Bronze Articulated Plate', 2, 0, 1, 32000, 16000, 57, 105, 126, 0, 'physdefense', 115, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (90, 'Iron Articulated Plate', 2, 0, 1, 36000, 18000, 59, 113, 136, 0, 'physdefense', 124, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (91, 'Steel Articulated Plate', 2, 0, 1, 40000, 20000, 61, 120, 144, 0, 'physdefense', 133, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (92, 'Titanium Articulated Plate', 2, 0, 1, 45000, 22500, 63, 128, 154, 0, 'physdefense', 142, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (93, 'Copper Battle Armor', 2, 0, 1, 50000, 25000, 65, 135, 162, 0, 'physdefense', 150, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (94, 'Bronze Battle Armor', 2, 0, 1, 55000, 27500, 67, 143, 172, 0, 'physdefense', 159, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (95, 'Iron Battle Armor', 2, 0, 1, 60000, 30000, 69, 150, 180, 0, 'physdefense', 165, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (96, 'Steel Battle Armor', 2, 0, 1, 65000, 32500, 71, 158, 190, 0, 'physdefense', 174, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (97, 'Titanium Battle Armor', 2, 0, 1, 70000, 35000, 73, 165, 198, 0, 'physdefense', 183, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (98, 'Copper Gothic Plate', 2, 0, 1, 75000, 37500, 75, 173, 208, 0, 'physdefense', 195, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (99, 'Bronze Gothic Plate', 2, 0, 1, 80000, 40000, 77, 180, 216, 0, 'physdefense', 203, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (100, 'Iron Gothic Plate', 2, 0, 1, 85000, 42500, 79, 188, 226, 0, 'physdefense', 212, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (101, 'Steel Gothic Plate', 2, 0, 1, 90000, 45000, 81, 195, 234, 0, 'physdefense', 224, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (102, 'Titanium Gothic Plate', 2, 0, 1, 95000, 47500, 83, 203, 244, 0, 'physdefense', 236, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (103, 'Leather Buckler', 4, 0, 1, 25, 13, 1, 0, 0, 0, 'physdefense', 3, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (104, 'Wood Buckler', 4, 0, 1, 50, 25, 1, 0, 0, 0, 'physdefense', 5, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (105, 'Steel Buckler', 4, 0, 1, 75, 38, 1, 0, 0, 0, 'physdefense', 7, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (106, 'Titanium Buckler', 4, 0, 1, 100, 50, 1, 0, 0, 0, 'physdefense', 8, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (107, 'Leather Targe', 4, 0, 1, 150, 75, 3, 0, 5, 0, 'physdefense', 11, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (108, 'Wood Targe', 4, 0, 1, 200, 100, 3, 0, 10, 0, 'physdefense', 12, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (109, 'Steel Targe', 4, 0, 1, 300, 150, 5, 0, 15, 0, 'physdefense', 15, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (110, 'Titanium Targe', 4, 0, 1, 400, 200, 5, 0, 20, 0, 'physdefense', 18, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (111, 'Small Aspis', 4, 0, 1, 600, 300, 8, 0, 25, 0, 'physdefense', 21, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (112, 'Large Aspis', 4, 0, 1, 800, 400, 11, 0, 35, 0, 'physdefense', 23, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (113, 'Full Aspis', 4, 0, 1, 1200, 600, 14, 0, 45, 0, 'physdefense', 26, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (114, 'Great Aspis', 4, 0, 1, 1500, 750, 17, 0, 55, 0, 'physdefense', 27, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (115, 'Small Kite Shield', 4, 0, 1, 2000, 1000, 20, 0, 65, 0, 'physdefense', 30, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (116, 'Large Kite Shield', 4, 0, 1, 2500, 1250, 23, 0, 80, 0, 'physdefense', 36, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (117, 'Full Kite Shield', 4, 0, 1, 3000, 1500, 26, 0, 95, 0, 'physdefense', 39, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (118, 'Great Kite Shield', 4, 0, 1, 4000, 2000, 29, 0, 110, 0, 'physdefense', 45, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (119, 'Small Heater Shield', 4, 0, 1, 5000, 2500, 31, 0, 130, 0, 'physdefense', 56, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (120, 'Large Heater Shield', 4, 0, 1, 6000, 3000, 34, 0, 150, 0, 'physdefense', 62, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (121, 'Full Heater Shield', 4, 0, 1, 8000, 4000, 37, 0, 170, 0, 'physdefense', 74, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (122, 'Great Heater Shield', 4, 0, 1, 10000, 5000, 40, 0, 190, 0, 'physdefense', 80, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (123, 'Small Scuta', 4, 0, 1, 12000, 6000, 43, 0, 210, 0, 'physdefense', 86, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (124, 'Large Scuta', 4, 0, 1, 15000, 7500, 46, 0, 230, 0, 'physdefense', 98, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (125, 'Full Scuta', 4, 0, 1, 18000, 9000, 49, 0, 250, 0, 'physdefense', 106, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (126, 'Great Scuta', 4, 0, 1, 22000, 11000, 51, 0, 270, 0, 'physdefense', 115, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (127, 'Small Pavise', 4, 0, 1, 26000, 13000, 54, 0, 300, 0, 'physdefense', 133, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (128, 'Large Pavise', 4, 0, 1, 30000, 15000, 57, 0, 320, 0, 'physdefense', 142, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (129, 'Full Pavise', 4, 0, 1, 35000, 17500, 60, 0, 340, 0, 'physdefense', 159, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (130, 'Great Pavise', 4, 0, 1, 40000, 20000, 65, 0, 360, 0, 'physdefense', 165, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (131, 'Small Heraldic Shield', 4, 0, 1, 45000, 22500, 70, 0, 380, 0, 'physdefense', 183, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (132, 'Large Heraldic Shield', 4, 0, 1, 50000, 25000, 75, 0, 400, 0, 'physdefense', 195, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (133, 'Full Heraldic Shield', 4, 0, 1, 55000, 27500, 80, 0, 420, 0, 'physdefense', 212, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (134, 'Great Heraldic Shield', 4, 0, 1, 60000, 30000, 85, 0, 440, 0, 'physdefense', 236, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (135, 'Leather Cap', 3, 0, 1, 20, 10, 1, 0, 0, 0, 'physdefense', 2, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (136, 'Copper Cap', 3, 0, 1, 40, 20, 1, 0, 0, 0, 'physdefense', 3, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (137, 'Bronze Cap', 3, 0, 1, 60, 30, 1, 0, 0, 0, 'physdefense', 5, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (138, 'Steel Cap', 3, 0, 1, 80, 40, 1, 0, 0, 0, 'physdefense', 5, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (139, 'Titanium Cap', 3, 0, 1, 110, 55, 1, 0, 0, 0, 'physdefense', 7, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (140, 'Leather Skull Cap', 3, 0, 1, 140, 70, 3, 5, 6, 0, 'physdefense', 8, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (141, 'Copper Skull Cap', 3, 0, 1, 170, 85, 3, 5, 6, 0, 'physdefense', 9, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (142, 'Bronze Skull Cap', 3, 0, 1, 200, 100, 3, 8, 10, 0, 'physdefense', 11, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (143, 'Steel Skull Cap', 3, 0, 1, 240, 120, 5, 10, 12, 0, 'physdefense', 13, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (144, 'Titanium Skull Cap', 3, 0, 1, 280, 140, 5, 10, 12, 0, 'physdefense', 14, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (145, 'Copper Helm', 3, 0, 1, 330, 165, 5, 13, 16, 0, 'physdefense', 16, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (146, 'Bronze Helm', 3, 0, 1, 380, 190, 8, 13, 16, 0, 'physdefense', 16, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (147, 'Iron Helm', 3, 0, 1, 440, 220, 11, 15, 18, 0, 'physdefense', 18, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (148, 'Steel Helm', 3, 0, 1, 500, 250, 14, 18, 22, 0, 'physdefense', 22, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (149, 'Titanium Helm', 3, 0, 1, 600, 300, 17, 18, 22, 0, 'physdefense', 23, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (150, 'Copper Corinthian Helmet', 3, 0, 1, 700, 350, 20, 20, 24, 0, 'physdefense', 27, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (151, 'Bronze Corinthian Helmet', 3, 0, 1, 850, 425, 23, 23, 28, 0, 'physdefense', 33, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (152, 'Iron Corinthian Helmet', 3, 0, 1, 1000, 500, 26, 25, 30, 0, 'physdefense', 37, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (153, 'Steel Corinthian Helmet', 3, 0, 1, 2000, 1000, 29, 25, 30, 0, 'physdefense', 44, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (154, 'Titanium Corinthian Helmet', 3, 0, 1, 3200, 1600, 31, 30, 36, 0, 'physdefense', 48, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (155, 'Copper Sallet', 3, 0, 1, 4400, 2200, 34, 30, 36, 0, 'physdefense', 51, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (156, 'Bronze Sallet', 3, 0, 1, 6000, 3000, 37, 35, 42, 0, 'physdefense', 58, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (157, 'Iron Sallet', 3, 0, 1, 7000, 3500, 40, 35, 42, 0, 'physdefense', 63, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (158, 'Steel Sallet', 3, 0, 1, 8000, 4000, 43, 40, 48, 0, 'physdefense', 68, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (159, 'Titanium Sallet', 3, 0, 1, 10000, 5000, 46, 45, 54, 0, 'physdefense', 79, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (160, 'Copper Bascinet', 3, 0, 1, 12000, 6000, 49, 50, 60, 0, 'physdefense', 84, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (161, 'Bronze Bascinet', 3, 0, 1, 15000, 7500, 51, 55, 66, 0, 'physdefense', 94, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (162, 'Iron Bascinet', 3, 0, 1, 18000, 9000, 54, 60, 72, 0, 'physdefense', 98, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (163, 'Steel Bascinet', 3, 0, 1, 22000, 11000, 57, 65, 78, 0, 'physdefense', 108, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (164, 'Titanium Bascinet', 3, 0, 1, 26000, 13000, 60, 70, 84, 0, 'physdefense', 115, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (165, 'Copper Horned Helm', 3, 0, 1, 30000, 15000, 65, 75, 90, 0, 'physdefense', 125, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (166, 'Bronze Horned Helm', 3, 0, 1, 35000, 17500, 70, 83, 100, 0, 'physdefense', 139, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (167, 'Iron Horned Helm', 3, 0, 1, 40000, 20000, 75, 90, 108, 0, 'physdefense', 145, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (168, 'Steel Horned Helm', 3, 0, 1, 45000, 22500, 80, 98, 118, 0, 'physdefense', 160, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (169, 'Titanium Horned Helm', 3, 0, 1, 50000, 25000, 85, 105, 126, 0, 'physdefense', 175, '', 0, '', 0, '', 0, '', 0, '', 0, '', 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_itemmodnames` +-- + +CREATE TABLE `sx_itemmodnames` ( + `id` int(10) unsigned NOT NULL auto_increment, + `fieldname` varchar(50) NOT NULL default '', + `prettyname` varchar(50) NOT NULL default '', + `percent` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_itemmodnames` +-- + +INSERT INTO `sx_itemmodnames` VALUES (1, 'expbonus', 'Experience Bonus', 1); +INSERT INTO `sx_itemmodnames` VALUES (2, 'goldbonus', 'Gold Bonus', 1); +INSERT INTO `sx_itemmodnames` VALUES (3, 'maxhp', 'Max HP', 0); +INSERT INTO `sx_itemmodnames` VALUES (4, 'maxmp', 'Max MP', 0); +INSERT INTO `sx_itemmodnames` VALUES (5, 'maxtp', 'Max TP', 0); +INSERT INTO `sx_itemmodnames` VALUES (6, 'strength', 'Strength', 0); +INSERT INTO `sx_itemmodnames` VALUES (7, 'dexterity', 'Dexterity', 0); +INSERT INTO `sx_itemmodnames` VALUES (8, 'energy', 'Energy', 0); +INSERT INTO `sx_itemmodnames` VALUES (9, 'physattack', 'Physical Attack', 0); +INSERT INTO `sx_itemmodnames` VALUES (10, 'physdefense', 'Physical Defense', 0); +INSERT INTO `sx_itemmodnames` VALUES (11, 'magicattack', 'Magic Attack', 0); +INSERT INTO `sx_itemmodnames` VALUES (12, 'magicdefense', 'Magid Defense', 0); +INSERT INTO `sx_itemmodnames` VALUES (13, 'fireattack', 'Fire Attack', 0); +INSERT INTO `sx_itemmodnames` VALUES (14, 'firedefense', 'Fire Defense', 0); +INSERT INTO `sx_itemmodnames` VALUES (15, 'lightattack', 'Lightning Attack', 0); +INSERT INTO `sx_itemmodnames` VALUES (16, 'lightdefense', 'Lightning Defense', 0); +INSERT INTO `sx_itemmodnames` VALUES (17, 'hpleech', 'HP Leech', 1); +INSERT INTO `sx_itemmodnames` VALUES (18, 'mpleech', 'MP Leech', 1); +INSERT INTO `sx_itemmodnames` VALUES (19, 'hpgain', 'HP Per Kill', 0); +INSERT INTO `sx_itemmodnames` VALUES (20, 'mpgain', 'MP Per Kill', 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_itemprefixes` +-- + +CREATE TABLE `sx_itemprefixes` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name` varchar(50) NOT NULL default '', + `slotnumber` tinyint(3) unsigned NOT NULL default '0', + `unique` tinyint(3) unsigned NOT NULL default '0', + `willdrop` tinyint(3) unsigned NOT NULL default '0', + `buycost` int(10) unsigned NOT NULL default '0', + `sellcost` int(10) unsigned NOT NULL default '0', + `reqlevel` smallint(5) unsigned NOT NULL default '0', + `reqstrength` smallint(5) unsigned NOT NULL default '0', + `reqdexterity` smallint(5) unsigned NOT NULL default '0', + `reqenergy` smallint(5) unsigned NOT NULL default '0', + `basename` varchar(50) NOT NULL default '', + `baseattr` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_itemprefixes` +-- + +INSERT INTO `sx_itemprefixes` VALUES (1, 'Sharp', 1, 0, 0, 5, 3, 1, 0, 0, 0, 'physattack', 2); +INSERT INTO `sx_itemprefixes` VALUES (2, 'Magic', 1, 0, 0, 8, 4, 1, 0, 0, 0, 'magicattack', 5); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_itemsuffixes` +-- + +CREATE TABLE `sx_itemsuffixes` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name` varchar(50) NOT NULL default '', + `slotnumber` tinyint(3) unsigned NOT NULL default '0', + `unique` tinyint(3) unsigned NOT NULL default '0', + `willdrop` tinyint(3) unsigned NOT NULL default '0', + `buycost` int(10) unsigned NOT NULL default '0', + `sellcost` int(10) unsigned NOT NULL default '0', + `reqlevel` smallint(5) unsigned NOT NULL default '0', + `reqstrength` smallint(5) unsigned NOT NULL default '0', + `reqdexterity` smallint(5) unsigned NOT NULL default '0', + `reqenergy` smallint(5) unsigned NOT NULL default '0', + `basename` varchar(50) NOT NULL default '', + `baseattr` smallint(5) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_itemsuffixes` +-- + +INSERT INTO `sx_itemsuffixes` VALUES (1, 'of the Vampire', 1, 0, 0, 5, 3, 1, 0, 0, 0, 'hpleech', 5); +INSERT INTO `sx_itemsuffixes` VALUES (2, 'of the Bear', 1, 0, 0, 5, 3, 1, 0, 0, 0, 'strength', 5); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_messages` +-- + +CREATE TABLE `sx_messages` ( + `id` int(10) unsigned NOT NULL auto_increment, + `postdate` datetime NOT NULL default '0000-00-00 00:00:00', + `senderid` int(10) unsigned NOT NULL default '0', + `sendername` varchar(30) NOT NULL default '', + `recipientid` int(10) unsigned NOT NULL default '0', + `recipientname` varchar(30) NOT NULL default '', + `status` tinyint(3) unsigned NOT NULL default '0', + `title` varchar(200) NOT NULL default '', + `message` text NOT NULL, + `gold` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_messages` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_monsters` +-- + +CREATE TABLE `sx_monsters` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name` varchar(30) NOT NULL default '', + `world` tinyint(3) unsigned NOT NULL default '0', + `level` smallint(5) unsigned NOT NULL default '0', + `maxexp` int(10) unsigned NOT NULL default '0', + `maxgold` int(10) unsigned NOT NULL default '0', + `maxhp` smallint(5) unsigned NOT NULL default '0', + `physattack` smallint(5) unsigned NOT NULL default '0', + `physdefense` smallint(5) unsigned NOT NULL default '0', + `magicattack` smallint(5) unsigned NOT NULL default '0', + `magicdefense` smallint(5) unsigned NOT NULL default '0', + `fireattack` smallint(5) unsigned NOT NULL default '0', + `firedefense` smallint(5) unsigned NOT NULL default '0', + `lightattack` smallint(5) unsigned NOT NULL default '0', + `lightdefense` smallint(5) unsigned NOT NULL default '0', + `spell1` smallint(5) unsigned NOT NULL default '0', + `spell2` smallint(5) unsigned NOT NULL default '0', + `spellimmune1` smallint(5) unsigned NOT NULL default '0', + `spellimmune2` smallint(5) unsigned NOT NULL default '0', + `boss` tinyint(3) unsigned NOT NULL default '0', + `hpleech` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_monsters` +-- + +INSERT INTO `sx_monsters` VALUES (1, 'Small Slime', 1, 1, 3, 2, 3, 15, 15, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (2, 'Shade', 1, 1, 4, 2, 3, 18, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (3, 'Slime', 1, 2, 5, 3, 4, 21, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (4, 'Small Drake', 1, 2, 6, 3, 5, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (5, 'Skeleton', 1, 3, 7, 4, 7, 27, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (6, 'Haunt', 1, 3, 8, 4, 8, 30, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (7, 'Big Slime', 1, 4, 9, 5, 10, 33, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (8, 'Drake', 1, 4, 10, 5, 11, 36, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (9, 'Ghost', 1, 5, 11, 6, 12, 39, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (10, 'Bee', 1, 5, 12, 6, 12, 42, 42, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (11, 'Scorpion', 1, 6, 14, 7, 13, 45, 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (12, 'Dawk', 1, 6, 16, 8, 15, 50, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (13, 'Nymph', 1, 7, 18, 9, 16, 54, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (14, 'Ember', 1, 7, 20, 10, 17, 59, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (15, 'Daydream', 1, 8, 22, 11, 18, 63, 63, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (16, 'Wasp', 1, 8, 24, 12, 20, 68, 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (17, 'Shadow', 1, 9, 26, 13, 22, 72, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (18, 'Harpy', 1, 9, 28, 14, 24, 77, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (19, 'Air Elemental', 1, 10, 30, 15, 26, 81, 81, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (20, 'Rogue', 1, 10, 32, 16, 29, 86, 86, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (21, 'Lynx', 1, 11, 35, 18, 32, 90, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (22, 'Trickster', 1, 11, 38, 19, 35, 95, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (23, 'Goblin', 1, 12, 41, 21, 35, 99, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (24, 'Charmer', 1, 12, 44, 22, 38, 53, 53, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (25, 'Raven', 1, 13, 47, 24, 41, 108, 108, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (26, 'Bobcat', 1, 13, 50, 25, 44, 113, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (27, 'Lycan', 1, 14, 53, 27, 48, 119, 119, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (28, 'Fiend', 1, 14, 56, 28, 52, 125, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (29, 'Liche', 1, 15, 59, 30, 56, 131, 131, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (30, 'Dawkin', 1, 15, 62, 31, 60, 137, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (31, 'Anarchist', 1, 16, 66, 33, 64, 143, 143, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (32, 'Hellcat', 1, 16, 70, 35, 68, 149, 149, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (33, 'Fallen Cherub', 1, 17, 74, 37, 72, 155, 155, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (34, 'Grey Wolf', 1, 17, 78, 39, 76, 161, 161, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (35, 'Black Bear', 1, 18, 82, 41, 80, 167, 167, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (36, 'Knight', 1, 18, 86, 43, 84, 173, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (37, 'Giant', 1, 19, 90, 45, 88, 179, 179, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (38, 'Young Wyrm', 1, 19, 94, 47, 92, 185, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (39, 'Lesser Devil', 1, 20, 98, 49, 96, 191, 191, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (40, 'Lesser Demon', 1, 20, 102, 51, 100, 197, 197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (41, 'Razora', 1, 99, 300, 150, 200, 203, 203, 135, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_pvp` +-- + +CREATE TABLE `sx_pvp` ( + `id` bigint(20) unsigned NOT NULL auto_increment, + `player1id` int(10) unsigned NOT NULL default '0', + `player2id` int(10) unsigned NOT NULL default '0', + `player1name` varchar(30) NOT NULL default '', + `player2name` varchar(30) NOT NULL default '', + `playerturn` int(10) unsigned NOT NULL default '0', + `accepted` tinyint(3) unsigned NOT NULL default '0', + `turntime` timestamp NOT NULL, + `fightrow` text NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_pvp` +-- + + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_spells` +-- + +CREATE TABLE `sx_spells` ( + `id` int(10) unsigned NOT NULL auto_increment, + `name` varchar(30) NOT NULL default '', + `fname` varchar(30) NOT NULL default '', + `value` int(10) unsigned NOT NULL default '0', + `mp` int(10) unsigned NOT NULL default '0', + `minlevel` int(10) unsigned NOT NULL default '0', + `classonly` int(10) unsigned NOT NULL default '0', + `classexclude` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_spells` +-- + +INSERT INTO `sx_spells` VALUES (1, 'Heal 1', 'heal', 5, 2, 5, 2, 0); +INSERT INTO `sx_spells` VALUES (2, 'Heal 2', 'heal', 10, 5, 10, 0, 0); +INSERT INTO `sx_spells` VALUES (3, 'Heal 3', 'heal', 20, 10, 15, 0, 0); +INSERT INTO `sx_spells` VALUES (4, 'Heal 4', 'heal', 30, 15, 20, 0, 0); +INSERT INTO `sx_spells` VALUES (5, 'Heal 5', 'heal', 45, 25, 25, 0, 0); +INSERT INTO `sx_spells` VALUES (6, 'Heal 6', 'heal', 60, 35, 30, 0, 0); +INSERT INTO `sx_spells` VALUES (7, 'Heal 7', 'heal', 80, 50, 35, 3, 0); +INSERT INTO `sx_spells` VALUES (8, 'Heal 8', 'heal', 100, 75, 40, 3, 0); +INSERT INTO `sx_spells` VALUES (9, 'Heal 9', 'heal', 150, 100, 45, 3, 0); +INSERT INTO `sx_spells` VALUES (10, 'Heal 10', 'heal', 200, 150, 50, 3, 0); +INSERT INTO `sx_spells` VALUES (11, 'Hurt 1', 'hurt', 5, 2, 5, 0, 0); +INSERT INTO `sx_spells` VALUES (12, 'Hurt 2', 'hurt', 10, 5, 10, 0, 0); +INSERT INTO `sx_spells` VALUES (13, 'Hurt 3', 'hurt', 15, 7, 15, 0, 0); +INSERT INTO `sx_spells` VALUES (14, 'Hurt 4', 'hurt', 25, 12, 20, 0, 0); +INSERT INTO `sx_spells` VALUES (15, 'Hurt 5', 'hurt', 35, 20, 25, 0, 0); +INSERT INTO `sx_spells` VALUES (16, 'Hurt 6', 'hurt', 50, 30, 30, 0, 0); +INSERT INTO `sx_spells` VALUES (17, 'Hurt 7', 'hurt', 65, 40, 35, 3, 0); +INSERT INTO `sx_spells` VALUES (18, 'Hurt 8', 'hurt', 85, 50, 40, 3, 0); +INSERT INTO `sx_spells` VALUES (19, 'Hurt 9', 'hurt', 105, 65, 45, 3, 0); +INSERT INTO `sx_spells` VALUES (20, 'Hurt 10', 'hurt', 130, 80, 50, 3, 0); +INSERT INTO `sx_spells` VALUES (21, 'Sleep 1', 'sleep', 80, 20, 10, 0, 0); +INSERT INTO `sx_spells` VALUES (22, 'Sleep 2', 'sleep', 60, 35, 20, 0, 0); +INSERT INTO `sx_spells` VALUES (23, 'Sleep 3', 'sleep', 40, 50, 30, 2, 0); +INSERT INTO `sx_spells` VALUES (24, 'Sleep 4', 'sleep', 20, 75, 40, 2, 0); +INSERT INTO `sx_spells` VALUES (25, 'Sleep 5', 'sleep', 5, 100, 50, 2, 0); +INSERT INTO `sx_spells` VALUES (26, 'Fire 1', 'fire', 5, 2, 5, 0, 0); +INSERT INTO `sx_spells` VALUES (27, 'Fire 2', 'fire', 10, 5, 10, 0, 0); +INSERT INTO `sx_spells` VALUES (28, 'Fire 3', 'fire', 15, 7, 15, 0, 0); +INSERT INTO `sx_spells` VALUES (29, 'Fire 4', 'fire', 25, 12, 20, 0, 0); +INSERT INTO `sx_spells` VALUES (30, 'Fire 5', 'fire', 35, 20, 25, 0, 0); +INSERT INTO `sx_spells` VALUES (31, 'Fire 6', 'fire', 50, 30, 30, 0, 0); +INSERT INTO `sx_spells` VALUES (32, 'Fire 7', 'fire', 65, 40, 35, 2, 0); +INSERT INTO `sx_spells` VALUES (33, 'Fire 8', 'fire', 85, 50, 40, 2, 0); +INSERT INTO `sx_spells` VALUES (34, 'Fire 9', 'fire', 105, 65, 45, 2, 0); +INSERT INTO `sx_spells` VALUES (35, 'Fire 10', 'fire', 130, 80, 50, 2, 0); +INSERT INTO `sx_spells` VALUES (36, 'Lightning 1', 'light', 5, 2, 5, 0, 0); +INSERT INTO `sx_spells` VALUES (37, 'Lightning 2', 'light', 10, 5, 10, 0, 0); +INSERT INTO `sx_spells` VALUES (38, 'Lightning 3', 'light', 15, 7, 15, 0, 0); +INSERT INTO `sx_spells` VALUES (39, 'Lightning 4', 'light', 25, 12, 20, 0, 0); +INSERT INTO `sx_spells` VALUES (40, 'Lightning 5', 'light', 35, 20, 25, 0, 0); +INSERT INTO `sx_spells` VALUES (41, 'Lightning 6', 'light', 50, 30, 30, 0, 0); +INSERT INTO `sx_spells` VALUES (42, 'Lightning 7', 'light', 65, 40, 35, 2, 0); +INSERT INTO `sx_spells` VALUES (43, 'Lightning 8', 'light', 85, 50, 40, 2, 0); +INSERT INTO `sx_spells` VALUES (44, 'Lightning 9', 'light', 105, 65, 45, 2, 0); +INSERT INTO `sx_spells` VALUES (45, 'Lightning 10', 'light', 130, 80, 50, 2, 0); +INSERT INTO `sx_spells` VALUES (46, 'Prismatic Blast 1', 'prism', 2, 2, 5, 0, 0); +INSERT INTO `sx_spells` VALUES (47, 'Prismatic Blast 2', 'prism', 5, 5, 10, 0, 0); +INSERT INTO `sx_spells` VALUES (48, 'Prismatic Blast 3', 'prism', 10, 7, 15, 0, 0); +INSERT INTO `sx_spells` VALUES (49, 'Prismatic Blast 4', 'prism', 15, 12, 20, 0, 0); +INSERT INTO `sx_spells` VALUES (50, 'Prismatic Blast 5', 'prism', 15, 20, 25, 0, 0); +INSERT INTO `sx_spells` VALUES (51, 'Prismatic Blast 6', 'prism', 20, 30, 30, 0, 0); +INSERT INTO `sx_spells` VALUES (52, 'Prismatic Blast 7', 'prism', 25, 40, 35, 0, 1); +INSERT INTO `sx_spells` VALUES (53, 'Prismatic Blast 8', 'prism', 30, 50, 40, 0, 1); +INSERT INTO `sx_spells` VALUES (54, 'Prismatic Blast 9', 'prism', 35, 65, 45, 0, 1); +INSERT INTO `sx_spells` VALUES (55, 'Prismatic Blast 10', 'prism', 40, 80, 50, 0, 1); +INSERT INTO `sx_spells` VALUES (56, 'Stone Skin 1', 'stone', 5, 10, 10, 1, 0); +INSERT INTO `sx_spells` VALUES (57, 'Stone Skin 2', 'stone', 10, 20, 20, 1, 0); +INSERT INTO `sx_spells` VALUES (58, 'Stone Skin 3', 'stone', 20, 30, 30, 1, 0); +INSERT INTO `sx_spells` VALUES (59, 'Stone Skin 4', 'stone', 35, 40, 40, 1, 0); +INSERT INTO `sx_spells` VALUES (60, 'Stone Skin 5', 'stone', 50, 50, 50, 1, 0); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_towns` +-- + +CREATE TABLE `sx_towns` ( + `id` tinyint(3) unsigned NOT NULL auto_increment, + `name` varchar(30) NOT NULL default '', + `world` tinyint(3) unsigned NOT NULL default '0', + `latitude` smallint(6) NOT NULL default '0', + `longitude` smallint(6) NOT NULL default '0', + `innprice` tinyint(4) NOT NULL default '0', + `mapprice` smallint(6) NOT NULL default '0', + `travelpoints` smallint(5) unsigned NOT NULL default '0', + `itemminlvl` int(10) unsigned NOT NULL default '0', + `itemmaxlvl` int(10) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_towns` +-- + +INSERT INTO `sx_towns` VALUES (1, 'Middleton', 1, 0, 0, 5, 0, 0, 1, 5); +INSERT INTO `sx_towns` VALUES (2, 'Norfolk', 1, 25, 25, 10, 25, 5, 3, 9); +INSERT INTO `sx_towns` VALUES (3, 'Calentia', 1, 50, -50, 25, 50, 15, 6, 14); +INSERT INTO `sx_towns` VALUES (4, 'Resmark', 1, -75, 75, 40, 100, 30, 11, 19); +INSERT INTO `sx_towns` VALUES (5, 'Erdricksburg', 1, 99, 99, 60, 500, 50, 16, 25); + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_users` +-- + +CREATE TABLE `sx_users` ( + `id` int(10) unsigned NOT NULL auto_increment, + `account` int(10) unsigned NOT NULL default '0', + `birthdate` datetime NOT NULL default '0000-00-00 00:00:00', + `lastip` varchar(16) NOT NULL default '', + `onlinetime` datetime NOT NULL default '0000-00-00 00:00:00', + `exploreverify` varchar(6) NOT NULL default '', + `exploreverifyimage` varchar(12) NOT NULL default '', + `explorefailed` int(10) unsigned NOT NULL default '0', + `charname` varchar(30) NOT NULL default '', + `charclass` tinyint(3) unsigned NOT NULL default '0', + `charpicture` varchar(100) NOT NULL default '', + `difficulty` float unsigned NOT NULL default '1', + `deathpenalty` tinyint(3) unsigned NOT NULL default '0', + `latitude` smallint(6) NOT NULL default '0', + `longitude` smallint(6) NOT NULL default '0', + `story` tinyint(3) unsigned NOT NULL default '1', + `world` tinyint(3) unsigned NOT NULL default '1', + `guild` int(10) unsigned NOT NULL default '0', + `guildrank` int(10) unsigned NOT NULL default '0', + `guildtag` varchar(4) NOT NULL default '', + `tagcolor` varchar(7) NOT NULL default '', + `namecolor` varchar(7) NOT NULL default '', + `level` smallint(5) unsigned NOT NULL default '1', + `levelup` int(10) unsigned NOT NULL default '0', + `levelspell` int(10) unsigned NOT NULL default '0', + `experience` int(10) unsigned NOT NULL default '0', + `expbonus` tinyint(4) NOT NULL default '0', + `gold` int(10) unsigned NOT NULL default '150', + `goldbonus` tinyint(4) NOT NULL default '0', + `bank` int(10) unsigned NOT NULL default '0', + `maxhp` smallint(5) unsigned NOT NULL default '15', + `maxmp` smallint(5) unsigned NOT NULL default '5', + `maxtp` smallint(5) unsigned NOT NULL default '5', + `currenthp` smallint(5) unsigned NOT NULL default '15', + `currentmp` smallint(5) unsigned NOT NULL default '5', + `currenttp` smallint(5) unsigned NOT NULL default '5', + `strength` smallint(5) unsigned NOT NULL default '0', + `dexterity` smallint(5) unsigned NOT NULL default '0', + `energy` smallint(5) unsigned NOT NULL default '0', + `physattack` smallint(5) unsigned NOT NULL default '5', + `physdefense` smallint(5) unsigned NOT NULL default '5', + `magicattack` smallint(5) unsigned NOT NULL default '0', + `magicdefense` smallint(5) unsigned NOT NULL default '0', + `fireattack` smallint(5) unsigned NOT NULL default '0', + `firedefense` smallint(5) unsigned NOT NULL default '0', + `lightattack` smallint(5) unsigned NOT NULL default '0', + `lightdefense` smallint(5) unsigned NOT NULL default '0', + `spellslist` varchar(200) NOT NULL default '0', + `townslist` varchar(200) NOT NULL default '0,1', + `currentpvp` bigint(20) unsigned NOT NULL default '0', + `currentaction` varchar(30) NOT NULL default 'In Town', + `currentfight` tinyint(3) unsigned NOT NULL default '0', + `currentmonsterid` smallint(5) unsigned NOT NULL default '0', + `currentmonsterhp` smallint(5) unsigned NOT NULL default '0', + `currentmonstersleep` tinyint(3) unsigned NOT NULL default '0', + `item1idstring` varchar(10) NOT NULL default '0', + `item2idstring` varchar(10) NOT NULL default '0', + `item3idstring` varchar(10) NOT NULL default '0', + `item4idstring` varchar(10) NOT NULL default '0', + `item5idstring` varchar(10) NOT NULL default '0', + `item6idstring` varchar(10) NOT NULL default '0', + `item1name` varchar(200) NOT NULL default '', + `item2name` varchar(200) NOT NULL default '', + `item3name` varchar(200) NOT NULL default '', + `item4name` varchar(200) NOT NULL default '', + `item5name` varchar(200) NOT NULL default '', + `item6name` varchar(200) NOT NULL default '', + `spell1id` int(10) unsigned NOT NULL default '0', + `spell2id` int(10) unsigned NOT NULL default '0', + `spell3id` int(10) unsigned NOT NULL default '0', + `spell4id` int(10) unsigned NOT NULL default '0', + `spell5id` int(10) unsigned NOT NULL default '0', + `spell6id` int(10) unsigned NOT NULL default '0', + `spell7id` int(10) unsigned NOT NULL default '0', + `spell8id` int(10) unsigned NOT NULL default '0', + `spell9id` int(10) unsigned NOT NULL default '0', + `spell10id` int(10) unsigned NOT NULL default '0', + `spell1name` varchar(30) NOT NULL default '', + `spell2name` varchar(30) NOT NULL default '', + `spell3name` varchar(30) NOT NULL default '', + `spell4name` varchar(30) NOT NULL default '', + `spell5name` varchar(30) NOT NULL default '', + `spell6name` varchar(30) NOT NULL default '', + `spell7name` varchar(30) NOT NULL default '', + `spell8name` varchar(30) NOT NULL default '', + `spell9name` varchar(30) NOT NULL default '', + `spell10name` varchar(30) NOT NULL default '', + `hpleech` tinyint(3) unsigned NOT NULL default '0', + `mpleech` tinyint(3) unsigned NOT NULL default '0', + `hpgain` tinyint(3) unsigned NOT NULL default '0', + `mpgain` tinyint(3) unsigned NOT NULL default '0', + PRIMARY KEY (`id`), + FULLTEXT KEY `item1name` (`item1name`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_users` +-- + +-- -------------------------------------------------------- + +-- +-- Table structure for table `sx_worlds` +-- + +CREATE TABLE `sx_worlds` ( + `id` smallint(5) unsigned NOT NULL auto_increment, + `name` varchar(30) NOT NULL default '', + `size` smallint(5) unsigned NOT NULL default '0', + `bossid` mediumint(8) unsigned NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM; + +-- +-- Dumping data for table `sx_worlds` +-- + +INSERT INTO `sx_worlds` VALUES (1, 'Raenslide', 100, 1); +INSERT INTO `sx_worlds` VALUES (2, 'Lorenfall', 100, 0); +INSERT INTO `sx_worlds` VALUES (3, 'Borderlands', 100, 0); +INSERT INTO `sx_worlds` VALUES (4, 'Inferno', 100, 0); +INSERT INTO `sx_worlds` VALUES (5, 'Unreality', 100, 0); \ No newline at end of file diff --git a/extras/map.fla b/extras/map.fla new file mode 100644 index 0000000000000000000000000000000000000000..e4a41dfef56240b541558114079f050582778789 GIT binary patch literal 57856 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 $minlevel AND level <= $maxlevel ORDER BY RAND() LIMIT 1", "monsters"); + $monsterrow = dorow($monsterquery); + + $userrow["currentmonsterhp"] = (ceil(rand($monsterrow["maxhp"] * .75, $monsterrow["maxhp"]) * $userrow["difficulty"])); + $userrow["currentmonsterid"] = $monsterrow["id"]; + $userrow["currentaction"] = "Fighting"; + updateuserrow(); + dofight(); + +} + +function dofight() { + + global $userrow, $monsterrow, $fightrow, $spells; + + if (isset($_POST["fight"])) { + + playerturn(); + if ($userrow["currentmonsterhp"] <= 0) { youwin(); } + monsterturn(); + if ($userrow["currenthp"] <= 0) { youlose(); } + updateuserrow(); + + $pagerow = array( + "message"=>$fightrow["message"], + "monstername"=>$monsterrow["name"], + "monsterhp"=>$userrow["currentmonsterhp"], + "playerphysdamage"=>$fightrow["playerphysdamage"], + "playermagicdamage"=>$fightrow["playermagicdamage"], + "playerfiredamage"=>$fightrow["playerfiredamage"], + "playerlightdamage"=>$fightrow["playerlightdamage"], + "monsterphysdamage"=>$fightrow["monsterphysdamage"], + "monstermagicdamage"=>$fightrow["monstermagicdamage"], + "monsterfiredamage"=>$fightrow["monsterfiredamage"], + "monsterlightdamage"=>$fightrow["monsterlightdamage"]); + $pagerow["spells"] = dospellslist(); + display("Fighting",parsetemplate(gettemplate("fight_turn"),$pagerow)); + + } elseif (isset($_POST["spell"])) { + + if (! is_numeric($_POST["spellid"])) { err("Invalid spell selection."); } + $isavailable = 0; + for ($i = 1; $i < 11; $i++) { + if ($userrow["spell".$i."id"] == $_POST["spellid"]) { $isavailable = 1; } + } + if ($isavailable == 0) { err("You don't have that spell."); } + + include("spells.php"); + $castspell = $spells[$_POST["spellid"]]["fname"]($_POST["spellid"]); + $userrow["currentmonsterhp"] -= ($fightrow["playerphysdamage"] + $fightrow["playermagicdamage"] + $fightrow["playerfiredamage"] + $fightrow["playerlightdamage"]); + if ($userrow["currentmonsterhp"] <= 0) { youwin(); } + monsterturn(); + if ($userrow["currenthp"] <= 0) { youlose(); } + updateuserrow(); + + $pagerow = array( + "message"=>$castspell, + "monstername"=>$monsterrow["name"], + "monsterhp"=>$userrow["currentmonsterhp"], + "playerphysdamage"=>$fightrow["playerphysdamage"], + "playermagicdamage"=>$fightrow["playermagicdamage"], + "playerfiredamage"=>$fightrow["playerfiredamage"], + "playerlightdamage"=>$fightrow["playerlightdamage"], + "monsterphysdamage"=>$fightrow["monsterphysdamage"], + "monstermagicdamage"=>$fightrow["monstermagicdamage"], + "monsterfiredamage"=>$fightrow["monsterfiredamage"], + "monsterlightdamage"=>$fightrow["monsterlightdamage"]); + $pagerow["spells"] = dospellslist(); + display("Fighting",parsetemplate(gettemplate("fight_turn"),$pagerow)); + + } elseif (isset($_POST["run"])) { + + $userrow["currentaction"] = "Exploring"; + $userrow["currentmonsterid"] = 0; + $userrow["currentmonsterhp"] = 0; + updateuserrow(); + die(header("Location: index.php")); + + } else { + + $pagerow = array( + "monstername"=>$monsterrow["name"], + "monsterhp"=>$userrow["currentmonsterhp"]); + $pagerow["spells"] = dospellslist(); + display("Fighting",parsetemplate(gettemplate("fight_new"),$pagerow)); + + } + +} + +function playerturn() { + + global $userrow, $monsterrow, $fightrow; + + // Calculate all damages. + if ($userrow["physattack"] != 0) { + $physhit = ceil(rand($userrow["physattack"]*.75, $userrow["physattack"]) / 3); + $physblock = ceil(rand($monsterrow["physdefense"]*.75, $monsterrow["physdefense"]) / 3); + $fightrow["playerphysdamage"] = max($physhit - $physblock, 1); + } + + if ($userrow["magicattack"] != 0) { + $magichit = ceil(rand($userrow["magicattack"]*.75, $userrow["magicattack"]) / 3); + $magicblock = ceil(rand($monsterrow["magicdefense"]*.75, $monsterrow["magicdefense"]) / 3); + $fightrow["playermagicdamage"] = max($magichit - $magicblock, 0); + } + + if ($userrow["fireattack"] != 0) { + $firehit = ceil(rand($userrow["fireattack"]*.75, $userrow["fireattack"]) / 3); + $fireblock = ceil(rand($monsterrow["firedefense"]*.75, $monsterrow["firedefense"]) / 3); + $fightrow["playerfiredamage"] = max($firehit - $fireblock, 0); + } + + if ($userrow["lightattack"] != 0) { + $lighthit = ceil(rand($userrow["lightattack"]*.75, $userrow["lightattack"]) / 3); + $lightblock = ceil(rand($monsterrow["lightdefense"]*.75, $monsterrow["lightdefense"]) / 3); + $fightrow["playerlightdamage"] = max($lighthit - $lightblock, 0); + } + + // Chance to make an excellent hit. + $toexcellent = rand(0,150); + if ($toexcellent <= sqrt($userrow["strength"])) { + $fightrow["playerphysdamage"] *= 2; + $fightrow["playermagicdamage"] *= 2; + $fightrow["playerfiredamage"] *= 2; + $fightrow["playerlightdamage"] *= 2; + $fightrow["message"] = "Excellent hit!
"; + } + + // Chance for monster to dodge. + $tododge = rand(0,200); + if ($tododge <= sqrt($monsterrow["physdefense"])) { + $fightrow["playerphysdamage"] = 0; + $fightrow["playermagicdamage"] = 0; + $fightrow["playerfiredamage"] = 0; + $fightrow["playerlightdamage"] = 0; + $fightrow["message"] = "The monster dodged your hit!
"; + } + + // Now we add Per Turn mods. + hpleech("player"); + mpleech("player"); + + // Subtract all damage from monster's hp. + $userrow["currentmonsterhp"] -= ($fightrow["playerphysdamage"] + $fightrow["playermagicdamage"] + $fightrow["playerfiredamage"] + $fightrow["playerlightdamage"]); + +} + +function monsterturn() { + + global $userrow, $monsterrow, $fightrow; + + if ($monsterrow["physattack"] != 0) { + $physhit = ceil((rand($monsterrow["physattack"]*.75, $monsterrow["physattack"]) / 3) * $userrow["difficulty"]); + $physblock = ceil(rand($userrow["physdefense"]*.75, $userrow["physdefense"]) / 3); + $fightrow["monsterphysdamage"] = max($physhit - $physblock, 1); // Have to do at least 1 physical damage. + } + + if ($monsterrow["magicattack"] != 0) { + $magichit = ceil((rand($monsterrow["magicattack"]*.75, $monsterrow["magicattack"]) / 3) * $userrow["difficulty"]); + $magicblock = ceil(rand($userrow["magicdefense"]*.75, $userrow["magicdefense"]) / 3); + $fightrow["monstermagicdamage"] = max($magichit - $magicblock, 0); + } + + if ($monsterrow["fireattack"] != 0) { + $firehit = ((rand($monsterrow["fireattack"]*.75, $monsterrow["fireattack"]) / 3) * $userrow["difficulty"]); + $fireblock = ceil(rand($userrow["firedefense"]*.75, $userrow["firedefense"]) / 3); + $fightrow["monsterfiredamage"] = max($firehit - $fireblock, 0); + } + + if ($monsterrow["lightattack"] != 0) { + $lighthit = ceil((rand($monsterrow["lightattack"]*.75, $monsterrow["lightattack"]) / 3) * $userrow["difficulty"]); + $lightblock = ceil(rand($userrow["lightdefense"]*.75, $userrow["lightdefense"]) / 3); + $fightrow["monsterlightdamage"] = max($lighthit - $lightblock, 0); + } + + // Now we add Per Turn mods. + hpleech("monster"); + + // Subtract all damage from player's hp. + $userrow["currenthp"] -= ($fightrow["monsterphysdamage"] + $fightrow["monstermagicdamage"] + $fightrow["monsterfiredamage"] + $fightrow["monsterlightdamage"]); + +} + +function youwin() { + + global $userrow, $monsterrow, $fightrow; + + $template = "fight_win"; + + $newexp = ceil(rand($monsterrow["maxexp"]*.75, $monsterrow["maxexp"]) * (1 + ($userrow["expbonus"] / 100))); + $newgold = ceil(rand($monsterrow["maxgold"]*.75, $monsterrow["maxgold"]) * (1 + ($userrow["goldbonus"] / 100))); + $userrow["experience"] += $newexp; + $userrow["gold"] += $newgold; + $userrow["currentaction"] = "Exploring"; + $userrow["currentfight"] = 0; + $userrow["currentmonsterid"] = 0; + $userrow["currentmonsterhp"] = 0; + if ($monsterrow["boss"] == 1) { + $userrow["story"]++; + } + + // Now we add Per Kill mods. + hpgain(); + mpgain(); + + // Check for new levelup. + if ($userrow["experience"] >= dolevels($userrow["level"]+1)) { + $template = "fight_levelup"; + $userrow["level"]++; + $userrow["levelup"] += 5; + $userrow["maxtp"] += 5; + $userrow["currenthp"] = $userrow["maxhp"]; + $userrow["currentmp"] = $userrow["maxmp"]; + $userrow["currenttp"] = $userrow["maxtp"]; + if (($userrow["level"] % 5 == 0)) { $userrow["levelspell"]++; $template = "fight_levelupspell"; } + } + + // Update for new stats. + updateuserrow(); + + // And we're done. + $pagerow = array( + "message"=>$fightrow["message"], + "monstername"=>$monsterrow["name"], + "monsterhp"=>$userrow["currentmonsterhp"], + "playerphysdamage"=>$fightrow["playerphysdamage"], + "playermagicdamage"=>$fightrow["playermagicdamage"], + "playerfiredamage"=>$fightrow["playerfiredamage"], + "playerlightdamage"=>$fightrow["playerlightdamage"], + "monsterphysdamage"=>$fightrow["monsterphysdamage"], + "monstermagicdamage"=>$fightrow["monstermagicdamage"], + "monsterfiredamage"=>$fightrow["monsterfiredamage"], + "monsterlightdamage"=>$fightrow["monsterlightdamage"], + "newexp"=>$newexp, + "newgold"=>$newgold); + display("Victory!",parsetemplate(gettemplate($template),$pagerow)); + +} + +function youlose() { + + global $userrow, $monsterrow, $fightrow; + + // First take away half the gold. + $userrow["gold"] = ceil($userrow["gold"] / 2); + + // Then take away experience. + $thislevel = dolevels($userrow["level"]); + $nextlevel = dolevels($userrow["level"]+1); + $userrow["experience"] -= ceil((($nextlevel - $thislevel) / 100) * $userrow["deathpenalty"]); + + // And we're done. + $pagerow = array( + "message"=>$fightrow["message"], + "monstername"=>$monsterrow["name"], + "monsterhp"=>$userrow["currentmonsterhp"], + "playerphysdamage"=>$fightrow["playerphysdamage"], + "playermagicdamage"=>$fightrow["playermagicdamage"], + "playerfiredamage"=>$fightrow["playerfiredamage"], + "playerlightdamage"=>$fightrow["playerlightdamage"], + "monsterphysdamage"=>$fightrow["monsterphysdamage"], + "monstermagicdamage"=>$fightrow["monstermagicdamage"], + "monsterfiredamage"=>$fightrow["monsterfiredamage"], + "monsterlightdamage"=>$fightrow["monsterlightdamage"], + "deathpenalty"=>$userrow["deathpenalty"]); + + // Then put them in town & reset fight stuff. + $userrow["latitude"] = 0; + $userrow["longitude"] = 0; + $userrow["currentaction"] = "In Town"; + $userrow["currentfight"] = 0; + $userrow["currentmonsterid"] = 0; + $userrow["currentmonsterhp"] = 0; + $userrow["currenthp"] = ceil($userrow["maxhp"] / 4); + + // Update. + updateuserrow(); + + display("Thou Art Dead.",parsetemplate(gettemplate("fight_lose"),$pagerow)); + +} + +function dolevels($level) { + + $leveltotal = 15; + $leveladd = 15; + $i = 2; + while ($i < $level) { + $levelstart = $leveltotal; + if ($i < 4) { + $leveladd = ceil($leveladd * 2.0); + } elseif ($i < 13) { + $leveladd = floor($leveladd * 1.45); + } elseif ($i < 40) { + $leveladd = floor($leveladd * 1.20); + } elseif ($i < 60) { + $leveladd = 150000; + } elseif ($i < 80) { + $leveladd = 200000; + } elseif ($i < 100) { + $leveladd = 300000; + } elseif ($i >= 100) { + $leveladd = 500000; + } + $leveltotal = $levelstart + $leveladd; + $i++; + } + return $leveltotal; + +} + +function dospellslist() { + + global $userrow, $spells; + $options = ""; + for ($i = 1; $i < 11; $i++) { + if ($userrow["spell".$i."id"] != 0) { + $options .= "\n"; + } + } + if ($options != "") { + $list = " "; + } else { $list = ""; } + return $list; + +} + +?> \ No newline at end of file diff --git a/fightmods.php b/fightmods.php new file mode 100644 index 0000000..fbac85f --- /dev/null +++ b/fightmods.php @@ -0,0 +1,64 @@ + $userrow["maxhp"]) { $userrow["currenthp"] = $userrow["maxhp"]; } + } else { + $userrow["currentmonsterhp"] += floor(($fightrow["monsterphysdamage"]+$fightrow["monstermagicdamage"]+$fightrow["monsterfiredamage"]+$fightrow["monsterlightdamage"]) * ($monsterrow["hpleech"]/100)); + if ($userrow["currentmonsterhp"] > $monsterrow["maxhp"]) { $userrow["currentmonsterhp"] = $monsterrow["maxhp"]; } + } + +} + +function mpleech() { + + /*********** + Description: A percentage of the final damage is given back to the player's MP. + Occurs: Per Turn. + Applies To: Player only. + ***********/ + + global $userrow, $fightrow; + $userrow["currentmp"] += floor(($fightrow["playerphysdamage"]+$fightrow["playermagicdamage"]+$fightrow["playerfiredamage"]+$fightrow["playerlightdamage"]) * ($userrow["mpleech"]/100)); + if ($userrow["currentmp"] > $userrow["maxmp"]) { $userrow["currentmp"] = $userrow["maxmp"]; } + +} + +function hpgain() { + + /*********** + Description: A fixed number is added to player's HP. + Occurs: Per Kill. + Applies To: Player only. + ***********/ + + global $userrow, $fightrow; + $userrow["currenthp"] += $userrow["hpgain"]; + if ($userrow["currenthp"] > $userrow["maxhp"]) { $userrow["currenthp"] = $userrow["maxhp"]; } + +} + +function mpgain() { + + /*********** + Description: A fixed number is added to player's MP. + Occurs: Per Kill. + Applies To: Player only. + ***********/ + + global $userrow, $fightrow; + $userrow["currentmp"] += $userrow["mpgain"]; + if ($userrow["currentmp"] > $userrow["maxmp"]) { $userrow["currentmp"] = $userrow["maxmp"]; } + +} + +?> \ No newline at end of file diff --git a/globals.php b/globals.php new file mode 100644 index 0000000..ec45d8b --- /dev/null +++ b/globals.php @@ -0,0 +1,50 @@ +0, + "playermagicdamage"=>0, + "playerfiredamage"=>0, + "playerlightdamage"=>0, + "monsterphysdamage"=>0, + "monstermagicdamage"=>0, + "monsterfiredamage"=>0, + "monsterlightdamage"=>0, + "message"=>""); + +?> \ No newline at end of file diff --git a/guilds.php b/guilds.php new file mode 100644 index 0000000..a910219 --- /dev/null +++ b/guilds.php @@ -0,0 +1,484 @@ +"; + $bgcolor = "background-color: #ffffff;"; + if (mysql_num_rows($guilds) > 0) { + while ($guildrow = mysql_fetch_array($guilds)) { + $row["guildlist"] .= "[".$guildrow["tagline"]."] ".$guildrow["name"]."Apply to Join | Member List\n"; + if ($bgcolor == "background-color: #ffffff;") { $bgcolor = "background-color: #dddddd;"; } else { $bgcolor = "background-color: #ffffff;"; } + } + } else { + $row["guildlist"] .= "No Guilds have been created yet."; + } + + $row["guildlist"] .= "
"; + display("Guild Hall", parsetemplate(gettemplate("guild_list"), $row)); + +} + +function guildhome() { + + global $userrow; + + if ($userrow["guild"] == 0) { err("You are not yet a member of any Guild. Please go back and try again."); } + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds")); + + switch($userrow["guildrank"]) { + case 1: $template = "guild_homelow"; break; + case 2: $template = "guild_homelow"; break; + case 3: $template = "guild_homelow"; break; + case 4: $template = "guild_homemid"; break; + case 5: $template = "guild_homehigh"; break; + default: $template = "guild_homelow"; break; + } + + // Setup Babblebox. + $pagerow["babblebox"] = "
Guild Babblebox
\n"; + + // Setup Bank. + $pagerow["bank"] = number_format($guild["bank"]); + + // Pull memberslist for select box. + $members = doquery("SELECT * FROM {{table}} WHERE guild='".$userrow["guild"]."' ORDER BY guildrank", "users"); + $pagerow["memberselect"] = ""; + + // Pull applications for selectbox. + $apps = doquery("SELECT * FROM {{table}} WHERE guild='".$userrow["guild"]."' ORDER BY id", "guildapps"); + if (mysql_num_rows($apps) > 0) { + $pagerow["appselect"] = "
"; + } else { + $pagerow["appselect"] = "No new applications."; + } + + // Set up everything else. + if (trim($guild["news"]) != "") { + $pagerow["news"] = nl2br($guild["news"]); + } else { $pagerow["news"] = "No news yet."; } + + $title = "[".$guild["tagline"]."] ".$guild["name"]; + display($title, parsetemplate(gettemplate($template),$pagerow)); + +} + +function guildcreate() { + + global $controlrow, $userrow; + + // Errors. + if ($userrow["gold"] < $controlrow["guildstartup"]) { err("You do not have enough gold to create a Guild. Starting your own Guild requires ".number_format($controlrow["guildstartup"])." gold. Please go back and try again."); } + if ($userrow["guild"] != 0) { err("You are already a member of another Guild. You must renounce your current membership before starting your own Guild. Please go back and try again."); } + $appquery = doquery("SELECT * FROM {{table}} WHERE charid='".$userrow["id"]."' LIMIT 1", "guildapps"); + if (mysql_num_rows($appquery) != 0) { err("You have already applied to join another Guild. Please go back and try again."); } + + if (isset($_POST["submit"])) { + + extract($_POST); + + // Errors. + $errors = 0; $errorlist = ""; + if (preg_match("/[^A-z\ 0-9_\-]/", $name)==1) { $errors++; $errorlist .= "Guild names can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + if (preg_match("/[^A-z\ 0-9_\-]/", $rank1)==1) { $errors++; $errorlist .= "Rank 1 can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + if (preg_match("/[^A-z\ 0-9_\-]/", $rank2)==1) { $errors++; $errorlist .= "Rank 2 can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + if (preg_match("/[^A-z\ 0-9_\-]/", $rank3)==1) { $errors++; $errorlist .= "Rank 3 can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + if (preg_match("/[^A-z\ 0-9_\-]/", $rank4)==1) { $errors++; $errorlist .= "Rank 4 can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + if (preg_match("/[^A-z\ 0-9_\-]/", $rank5)==1) { $errors++; $errorlist .= "Rank 5 can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + if (preg_match("/[^A-z0-9_\-]/", $tagline)==1) { $errors++; $errorlist .= "Guild taglines must be alphanumeric.
"; } // Thanks to "Carlos Pires" from php.net! + if (trim($name) == "") { $errors++; $errorlist .= "Guild name is required.
"; } + if (trim($tagline) == "") { $errors++; $errorlist .= "Tagline is required.
"; } + if (trim($color1) == "#") { $errors++; $errorlist .= "Tagline color is required.
"; } + if (strlen($color1) < 7) { $errors++; $errorlist .= "Tagline color must be 7 characters long.
"; } + if (trim($color2) == "#") { $errors++; $errorlist .= "Name color is required.
"; } + if (strlen($color2) < 7) { $errors++; $errorlist .= "Name color must be 7 characters long.
"; } + if (trim($joincost) == "") { $errors++; $errorlist .= "Cost to join is required.
"; } + if (!is_numeric($joincost)) { $errors++; $errorlist .= "Cost to join must be a number.
"; } + if (trim($rank1) == "") { $errors++; $errorlist .= "Rank 1 is required.
"; } + if (trim($rank2) == "") { $errors++; $errorlist .= "Rank 2 is required.
"; } + if (trim($rank3) == "") { $errors++; $errorlist .= "Rank 3 is required.
"; } + if (trim($rank4) == "") { $errors++; $errorlist .= "Rank 4 is required.
"; } + if (trim($rank5) == "") { $errors++; $errorlist .= "Rank 5 is required.
"; } + + // Should be fine. Go on and create it. + if ($errors == 0) { + $querystring = ""; + unset($_POST["submit"]); + foreach($_POST as $a => $b) { + $querystring .= "$a='$b',"; + } + $querystring .= "id='',isactive='1',founder='".$userrow["id"]."', members='1'"; + $query = doquery("INSERT INTO {{table}} SET $querystring", "guilds"); + + // Now update the Founder's userrow. + $query = doquery("UPDATE {{table}} SET gold=gold-".$controlrow["guildstartup"].", guild='".mysql_insert_id()."',guildrank='5',guildtag='$tagline',tagcolor='$color1',namecolor='$color2' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + + // And we're done. + display("Create a Guild", "Your guild was successfully created.

You may now return to the game."); + + } else { + + // Die gracefully on errors. + err("The following error(s) occurred when your account was being made:
$errorlist
Please go back and try again."); + + } + + } + + $row["guildstartup"] = number_format($controlrow["guildstartup"]); + display("Create a Guild", parsetemplate(gettemplate("guild_create"), $row)); + +} + +function guildedit() { + + global $userrow; + + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds")); + + // Errors. + if ($userrow["guildrank"] < 5) { err("You do not have permission to edit the Guild settings. Please go back and try again."); } + + if (isset($_POST["submit"])) { + + extract($_POST); + + // Errors. + $errors = 0; $errorlist = ""; + if (preg_match("/[^A-z\ 0-9_\-]/", $rank1)==1) { $errors++; $errorlist .= "Rank 1 can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + if (preg_match("/[^A-z\ 0-9_\-]/", $rank2)==1) { $errors++; $errorlist .= "Rank 2 can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + if (preg_match("/[^A-z\ 0-9_\-]/", $rank3)==1) { $errors++; $errorlist .= "Rank 3 can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + if (preg_match("/[^A-z\ 0-9_\-]/", $rank4)==1) { $errors++; $errorlist .= "Rank 4 can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + if (preg_match("/[^A-z\ 0-9_\-]/", $rank5)==1) { $errors++; $errorlist .= "Rank 5 can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + //if (preg_match("/#[a-fA-F0-9]/", $color1)==1) { $errors++; $errorlist .= "Tagline color does not appear to be a valid HTML color code.
"; } + //if (preg_match("/#[a-fA-F0-9]/", $color2)==1) { $errors++; $errorlist .= "Name color does not appear to be a valid HTML color code.
"; } + if (trim($color1) == "#") { $errors++; $errorlist .= "Tagline color is required.
"; } + if (strlen($color1) != 7) { $errors++; $errorlist .= "Tagline color must be 7 characters long.
"; } + if (trim($color2) == "#") { $errors++; $errorlist .= "Name color is required.
"; } + if (strlen($color2) != 7) { $errors++; $errorlist .= "Name color must be 7 characters long.
"; } + if (trim($joincost) == "") { $errors++; $errorlist .= "Cost to join is required.
"; } + if (!is_numeric($joincost)) { $errors++; $errorlist .= "Cost to join must be a number.
"; } + if (trim($rank1) == "") { $errors++; $errorlist .= "Rank 1 is required.
"; } + if (trim($rank2) == "") { $errors++; $errorlist .= "Rank 2 is required.
"; } + if (trim($rank3) == "") { $errors++; $errorlist .= "Rank 3 is required.
"; } + if (trim($rank4) == "") { $errors++; $errorlist .= "Rank 4 is required.
"; } + if (trim($rank5) == "") { $errors++; $errorlist .= "Rank 5 is required.
"; } + + // Should be fine. Go on and create it. + if ($errors == 0) { + $querystring = ""; + unset($_POST["submit"]); + foreach($_POST as $a => $b) { + $querystring .= "$a='$b',"; + } + $querystring .= "id=id"; + $query = doquery("UPDATE {{table}} SET $querystring WHERE id='".$guild["id"]."'", "guilds"); + $updatemem = doquery("UPDATE {{table}} SET namecolor='$color2', tagcolor='$color1' WHERE guild='".$guild["id"]."'", "users"); + + // And we're done. + display("Edit Guild", "Your guild was successfully edited.

You may now return to town or to your Guild Hall."); + + } else { + + // Die gracefully on errors. + err("The following error(s) occurred when your account was being made:
$errorlist
Please go back and try again."); + + } + + } + + display("Edit Guild", parsetemplate(gettemplate("guild_edit"), $guild)); + +} + +function guildapp() { + + global $userrow; + + $id = $_GET["id"]; + if (!is_numeric($id)) { err("Invalid input. Please go back and try again."); } + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "guilds")); + if ($guild == false) { err("Invalid input. Please go back and try again."); } + + // Errors. + if ($userrow["gold"] < $guild["joincost"]) { err("You do not have enough gold to join this Guild. Joining this Guild requires ".number_format($guild["joincost"])." gold. Please go back and try again."); } + if ($userrow["guild"] != 0) { err("You are already a member of another Guild. You must renounce your current membership before joining this Guild. Please go back and try again."); } + $appquery = doquery("SELECT * FROM {{table}} WHERE charid='".$userrow["id"]."' LIMIT 1", "guildapps"); + if (mysql_num_rows($appquery) != 0) { err("You have already applied to join another Guild. Please go back and try again."); } + + if (isset($_POST["yes"])) { + + $query = doquery("INSERT INTO {{table}} SET id='',guild='$id',charid='".$userrow["id"]."',charname='".$userrow["charname"]."'", "guildapps"); + $update = doquery("UPDATE {{table}} SET bank=bank+".$guild["joincost"]." WHERE id='".$guild["id"]."' LIMIT 1", "guilds"); + $updatemem = doquery("UPDATE {{table}} SET gold=gold-".$guild["joincost"]." WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + $send = doquery("INSERT INTO {{table}} SET id='', postdate=NOW(), senderid='0', sendername='".$guild["name"]."', recipientid='".$guild["founder"]."', recipientname='Guild Leader', status='0', title='New Guild Application', message='Someone has applied to join your Guild.

Do not reply to this message!', gold='0'", "messages"); + display("Join a Guild", "Thank you for applying to this Guild. If the Guild Leader approves your application, you will be notified via the Post Office.

You may now return to the game."); + + } elseif (isset($_POST["no"])) { + + die(header("Location: index.php?do=guilds")); + + } else { + + $guild["joincost"] = number_format($guild["joincost"]); + $guild["statement"] = nl2br($guild["statement"]); + display("Join a Guild", parsetemplate(gettemplate("guild_apply"), $guild)); + + } + +} + +function guildmembers() { + + $id = $_GET["id"]; + if (!is_numeric($id)) { err("Invalid input. Please go back and try again."); } + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='$id' LIMIT 1", "guilds")); + if ($guild == false) { err("Invalid input. Please go back and try again."); } + + $query = doquery("SELECT * FROM {{table}} WHERE guild='$id' ORDER BY guildrank DESC", "users"); + $row["guildmembers"] = "\n"; + $bgcolor = "background-color: #ffffff;"; + if (mysql_num_rows($query) > 0) { + while ($guildrow = mysql_fetch_array($query)) { + $row["guildmembers"] .= "\n"; + if ($bgcolor == "background-color: #ffffff;") { $bgcolor = "background-color: #dddddd;"; } else { $bgcolor = "background-color: #ffffff;"; } + } + } else { + $row["guildmembers"] .= ""; + } + $row["guildmembers"] .= "
NameRank
[".$guild["tagline"]."]".$guildrow["charname"]."".$guild["rank".$guildrow["guildrank"]]."
This Guild has no members yet.

"; + $row["name"] = $guild["name"]; + display("Guild Hall", parsetemplate(gettemplate("guild_members"), $row)); + +} + +function guildbank() { + + global $userrow; + extract($_POST); + + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds")); + + + if (isset($_POST["out"])) { + + $member = dorow(doquery("SELECT * FROM {{table}} WHERE id='$charid' LIMIT 1", "users")); + + // Errors. + if ($userrow["guildrank"] < 4) { err("You do not have permission to distribute Guild funds. Please go back and try again."); } + if (!is_numeric($charid)) { err("Invalid input. Please go back and try again."); } + if (!is_numeric($gold)) { err("Invalid input. Please go back and try again."); } + if ($gold < 0) { err("You can't send a negative amount of gold. Please go back and try again."); } + if ($gold > $guild["bank"]) { err("Your Guild does not have that much gold in the bank. Please go back and try again."); } + if ($member == false) { err("Invalid input. Please go back and try again."); } + if ($member["guild"] != $userrow["guild"]) { err("That player is not in your Guild. Please go back and try again."); } + if ($member["id"] == $userrow["id"]) { err("You cannot send Guild money to yourself. Please go back and try again."); } + + // Do stuff. + $send = doquery("INSERT INTO {{table}} SET id='', postdate=NOW(), senderid='0', sendername='".$guild["name"]."', recipientid='$charid', recipientname='".$member["charname"]."', status='0', title='Money from your Guild', message='Your Guild has sent you money from the Guild Bank.

Do not reply to this message!', gold='$gold'", "messages"); + $update = doquery("UPDATE {{table}} SET bank=bank-$gold WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds"); + display("Post Office", gettemplate("mailbox_sent")); + + } elseif (isset($_POST["in"])) { + + // Errors. + if (!is_numeric($_POST["golddeposit"])) { err("Invalid action. Please go back and try again."); } + if ($_POST["golddeposit"] < 1) { err("Deposit amount must be greater than 0."); } + if ($_POST["golddeposit"] > $userrow["gold"]) { err("You do not have that much money in your pocket."); } + + // Do stuff. + $update = doquery("UPDATE {{table}} SET bank=bank+".$_POST["golddeposit"]." WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds"); + $updatemem = doquery("UPDATE {{table}} SET gold=gold-".$_POST["golddeposit"]." WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + display("Guild Bank", "Thank you for depositing money to the Guild Bank.

You may now return to Town or to your Guild Hall."); + + } + +} + +function guildpromote() { + + global $userrow; + extract($_POST); + + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds")); + $member = dorow(doquery("SELECT * FROM {{table}} WHERE id='$charid' LIMIT 1", "users")); + + if (isset($_POST["promote"])) { + + // Errors. + if ($userrow["guildrank"] < 4) { err("You do not have permission to promote members. Please go back and try again."); } + if ($userrow["guildrank"] == 4 && $member["guildrank"] >= 3) { err("You do not have permission to promote this member any higher. Please go back and try again."); } + if ($member["guildrank"] == 5) { err("This member cannot be promoted any higher. Please go back and try again."); } + if ($member == false) { err("Invalid input. Please go back and try again."); } + if ($member["guild"] != $userrow["guild"]) { err("That player is not in your Guild. Please go back and try again."); } + + // Do stuff. + $update = doquery("UPDATE {{table}} SET guildrank=guildrank+1 WHERE id='$charid' LIMIT 1", "users"); + + } elseif (isset($_POST["demote"])) { + + // Errors. + if ($userrow["guildrank"] < 4) { err("You do not have permission to demote members. Please go back and try again."); } + if ($userrow["guildrank"] == 4 && $member["guildrank"] > 3) { err("You do not have permission to demote this member. Please go back and try again."); } + if ($userrow["id"] == $member["id"]) { err("You cannot demote yourself. Please go back and try again."); } + if ($member == false) { err("Invalid input. Please go back and try again."); } + if ($member["guild"] != $userrow["guild"]) { err("That player is not in your Guild. Please go back and try again."); } + if ($member["guildrank"] == 1) { guildremove(); } + + // Do stuff. + $update = doquery("UPDATE {{table}} SET guildrank=guildrank-1 WHERE id='$charid' LIMIT 1", "users"); + + } + + display("Guild Ranks", "Thank you for promoting/demoting this user.

You may now return to Town or to your Guild Hall."); + +} + +function guildapprove() { + + global $userrow; + extract($_POST); + + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds")); + $member = dorow(doquery("SELECT * FROM {{table}} WHERE id='$charid' LIMIT 1", "users")); + $app = dorow(doquery("SELECT * FROM {{table}} WHERE guild='".$userrow["guild"]."' AND charid='$charid' LIMIT 1", "guildapps")); + + // Errors. + if ($userrow["guildrank"] < 4) { err("You do not have permission to approve new members. Please go back and try again."); } + if ($app == false) { err("Invalid input. Please go back and try again."); } + + // Do stuff. + if (isset($_POST["approve"])) { + $updatemem = doquery("UPDATE {{table}} SET guild='".$userrow["guild"]."', guildrank='1', guildtag='".$guild["tagline"]."', tagcolor='".$guild["color1"]."', namecolor='".$guild["color2"]."' WHERE id='".$app["charid"]."' LIMIT 1", "users"); + $updateguild = doquery("UPDATE {{table}} SET members=members+1 WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds"); + $deleteapp = doquery("DELETE FROM {{table}} WHERE guild='".$userrow["guild"]."' AND charid='$charid' LIMIT 1", "guildapps"); + $send = doquery("INSERT INTO {{table}} SET id='', postdate=NOW(), senderid='0', sendername='".$guild["name"]."', recipientid='$charid', recipientname='".$member["charname"]."', status='0', title='Guild Approval', message='The Guild has approved you for membership, and you are now a member of ".$guild["name"].". Congratulations!

Do not reply to this message!', gold='0'", "messages"); + display("Approve Members", "Thank you for approving this user.

You may now return to Town or to your Guild Hall."); + } else { + $deleteapp = doquery("DELETE FROM {{table}} WHERE guild='".$userrow["guild"]."' AND charid='$charid' LIMIT 1", "guildapps"); + $send = doquery("INSERT INTO {{table}} SET id='', postdate=NOW(), senderid='0', sendername='".$guild["name"]."', recipientid='$charid', recipientname='".$member["charname"]."', status='0', title='Guild Denial', message='The Guild has denied your application for membership. Sorry.

Do not reply to this message!', gold='0'", "messages"); + display("Approve Members", "Thank you for denying this user.

You may now return to Town or to your Guild Hall."); + } + +} + +function guildremove() { + + global $userrow; + extract($_POST); + + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds")); + $member = dorow(doquery("SELECT * FROM {{table}} WHERE id='$charid' LIMIT 1", "users")); + + if (isset($_POST["yes"])) { + + $update = doquery("UPDATE {{table}} SET members=members-1 WHERE id='".$guild["id"]."' LIMIT 1", "guilds"); + $updatemem = doquery("UPDATE {{table}} SET guild='0', guildrank='0', guildtag='', tagcolor='', namecolor='' WHERE id='$charid' LIMIT 1", "users"); + $send = doquery("INSERT INTO {{table}} SET id='', postdate=NOW(), senderid='0', sendername='".$guild["name"]."', recipientid='$charid', recipientname='".$member["charname"]."', status='0', title='Guild Removal', message='The Guild has removed you from their membership. Sorry.

Do not reply to this message!', gold='0'", "messages"); + display("Remove Members", "Thank you for removing this user.

You may now return to Town or to your Guild Hall."); + + } elseif (isset($_POST["no"])) { + + die(header("Location: index.php?do=guildhome")); + + } + + + $pagerow["charid"] = $charid; + $pagerow["charname"] = $member["charname"]; + display("Remove Member", parsetemplate(gettemplate("guild_remove"), $pagerow)); + +} + +function guildnews() { + + global $userrow; + + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds")); + + // Errors. + if ($userrow["guildrank"] < 5) { err("You do not have permission to edit Guild news. Please go back and try again."); } + + if (isset($_POST["submit"])) { + + $query = doquery("UPDATE {{table}} SET news='".$_POST["news"]."' WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds"); + display("Guild News", "Thank you for updating your Guild News.

You may now return to Town or to your Guild Hall."); + + } + + if (trim($guild["news"]) == "") { $guild["news"] = "No news yet."; } + display("Guild News", parsetemplate(gettemplate("guild_news"), $guild)); + +} + +function guilddisband() { + + global $userrow; + + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds")); + + // Errors. + if ($userrow["id"] != $guild["founder"]) { err("You do not have permission to disband the Guild. Please go back and try again."); } + + if (isset($_POST["yes"])) { + + $query = doquery("SELECT * FROM {{table}} WHERE guild='".$guild["id"]."'", "users"); + while ($row = mysql_fetch_array($query)) { + $send = doquery("INSERT INTO {{table}} SET id='', postdate=NOW(), senderid='0', sendername='".$guild["name"]."', recipientid='".$row["id"]."', recipientname='".$row["charname"]."', status='0', title='Guild Disbanded', message='Your Guild leader has chosen to disband the guild. Your member status has been reset, and you can now apply to join another guild if you wish.

Do not reply to this message!', gold='0'", "messages"); + } + $updatemem = doquery("UPDATE {{table}} SET guild='0', guildrank='0', guildtag='', tagcolor='', namecolor='' WHERE guild='".$guild["id"]."'", "users"); + $delete = doquery("DELETE FROM {{table}} WHERE id='".$guild["id"]."'", "guilds"); + $deletebb = doquery("DELETE FROM {{table}} WHERE guild='".$guild["id"]."'", "babblebox"); + display("Disband Guild", "Thank you for disbanding your Guild.

You may now return to Town."); + + } elseif (isset($_POST["no"])) { + + die(header("Location: index.php?do=guildhome")); + + } + + display("Disband Guild", gettemplate("guild_disband")); + +} + +function guildleave() { + + global $userrow; + + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds")); + + if (isset($_POST["yes"])) { + + $updatemem = doquery("UPDATE {{table}} SET guild='0', guildrank='0', guildtag='', tagcolor='', namecolor='' WHERE id='".$userrow["id"]."'", "users"); + $update = doquery("UPDATE {{table}} SET members=members-1 WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds"); + display("Leave Guild", "Thank you for leaving your Guild.

You may now return to Town."); + + } elseif (isset($_POST["no"])) { + + die(header("Location: index.php?do=guildhome")); + + } + + display("Leave Guild", gettemplate("guild_leave")); + +} + +?> \ No newline at end of file diff --git a/images/Thumbs.db b/images/Thumbs.db new file mode 100644 index 0000000000000000000000000000000000000000..fa34c89a6b457d280d63fb7afcf00ceee27abcc3 GIT binary patch literal 29696 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 I)VP@XFR+O%p#T5? literal 0 HcmV?d00001 diff --git a/images/background1.jpg b/images/background1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5e8693fbaf10489ddf829db60e0dc8a9dcb8a038 GIT binary patch literal 34256 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 Wcl*DP?ft($_v4PbU+jwgAOG3b&LEQj literal 0 HcmV?d00001 diff --git a/images/background2.jpg b/images/background2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..800a5cd41a3112016576772a4933599e21ae2617 GIT binary patch literal 36149 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%0A5v3Lcc2(MfDU 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 literal 0 HcmV?d00001 diff --git a/images/background3.jpg b/images/background3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b7da3876c7ba1320eb359dc4fe33557c15abdc80 GIT binary patch literal 16975 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 literal 0 HcmV?d00001 diff --git a/images/background4.jpg b/images/background4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c7646dca6a43c063f9a043121c95be60e867ff04 GIT binary patch literal 28773 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 WF*tfIchvpsM(WL{f}@&$$^Q#Ov8;3e literal 0 HcmV?d00001 diff --git a/images/bars_green.gif b/images/bars_green.gif new file mode 100644 index 0000000000000000000000000000000000000000..dec0c0ad329c395f0cbe9b67f3452e4aad048ae7 GIT binary patch literal 97 zcmZ?wbhEHbWMbfA*v!DN?#{FgcW3mS%h~g2Mb3VQ>SG}bt~D>d-d=k=?C7&C3>ZN1 gCkt3i2SkF*U|``hSX%6*$fBs&!+F5KLy*B50C8FyC;$Ke literal 0 HcmV?d00001 diff --git a/images/bars_greenend.gif b/images/bars_greenend.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9a70beff5cb01d0c08f139e68aeb0cfea301188 GIT binary patch literal 97 zcmZ?wbhEHbWMbfA*v!DtcP?koqZK*(9jcFoEV$OZ;qHvZ*V}84hdq1ti~$=^{K*0q d)&Y?qGZJq literal 0 HcmV?d00001 diff --git a/images/bars_red.gif b/images/bars_red.gif new file mode 100644 index 0000000000000000000000000000000000000000..87fa00e9848138b5863b33e6177c8496f660bc26 GIT binary patch literal 97 zcmZ?wbhEHbWMbfA*v!CiXWF#8GiF?GZ$FolbFH~~zk|cEkdWhHVUJd5M;0h03e_l@Bjb+ literal 0 HcmV?d00001 diff --git a/images/bars_redend.gif b/images/bars_redend.gif new file mode 100644 index 0000000000000000000000000000000000000000..ad4ea06e552edd0245a4118c0ac21b7cbe516b65 GIT binary patch literal 97 zcmZ?wbhEHbWMbfA*v!Ciy}kYJj2Y*0a;`Nu?{{!G77}tiEbP&W70;eMW55O!f3kpu dbwDJ@3xM5GKXu&nxEa-!hiu3 gf3kqZbU-A?3nrY_pK*L+*s%>E=XU4pU*>S_So5=I&ls=)#h)x- dVI2?&GJ}DI&p>g4hf(H|Nq$0}6FdYNtO0QO8)N_g literal 0 HcmV?d00001 diff --git a/images/compass_01.png b/images/compass_01.png new file mode 100644 index 0000000000000000000000000000000000000000..5e055dff78439f11efe333ed5ccfdda020eb57b7 GIT binary patch literal 674 zcmV;T0$u%yP)a_UGDDgs;a6sHa76^@GUJZ<>lqi&(ENs zpr@y&n3$NpzP=b380qQhkdTlK4Glp-K}<|c$H&KphK5;LS?uiWIyySg(9n*Kj%R0Q zL_|b*czBDk=Z~0RR90oOiIh0003INkle-4*&oF07*qo IM6N<$f*FEjz3ikH)4Gj(9;o+5)l}buVNJvO1C@4WeK@1EG!otFzpPzYodG7A+ zCMG5i4-ZsSR3aiG)YR1Z`T6(v_sq=9_4W0qr>B^hm<0s|k&%(*<>ii!j;^k*-rn9g zI5-9d23=iUmzS56l$7e~>hkjPB_$=9nVC>fP?naKD=RCgsHh1E30_`aUteEURaIG8 zSsWZ3&d$!t%F1qTZYL)vIyyQqFfc+wLJJEEXlQ7#u&`xiW%Kj%WMpJ^c6RIQ>rYQl zTwGjhYiq5ot#Wd5?Ck6t8yk#_jPddDzP`Sxsj0}w$fKj9y}i9eL`1f>woOe|NsACE$mL_t(|+N70vThl-g z#y4$qHEoj~6l^Ii1u00OP!5$-5D*jvLFDoPtz}O9LF~M zVmH3_-CIt=_!ncL8kG@4h+%=CgGa3Fc$p;*4u*kIuP+uzZoTb_JnJ4(86qf1AdMn< zG3I3;|6n!~nK}?9Hu*r%D`9)UA-ahu>l)pT_fK4?Weszh)W$F+IxzH zk6WnwfwjK#zx~ZpAGOr4t-TA@-XCl4+&}{U3NQd9zm#vt5IjZz0000 z0RaK;@9z~A75)AF*x1<5&(BIqN<~FQ2?+@Z2nfHwzmJcPq@<*upPv{Q7{$fKAt51& ziHX3#zy<~e1Ox<;k&z`OC1z%3{{H?@P*7P}Sv@^Hr>Cd#^77W!)~u|oU0q!yBqR(B z3FMbxC@45MIN{;pT3T8K1qFbBfOd9vKtMo2K|v1>5AN>n znVFfCl$7=L^@xaw5)u*~9v%=75EmC0`uh6R)YKgv9n8$kUteF}-{0cm;`#acmX?+) zD=XgK-c?mq$H&L__xC0yCh+j^>gwvQuCADvm=O^XR8&;l+}ydjxpH!HLPA12J3B-~ zL`_XiBO@d8^Yf;rrY*eL; zYin!f=H_p2Z*FdGaBy(S%F4dJzE)ONS65fa$jGp;uni3jWMpI;8ymvH!Y3yuIyyQZ zA0I6(Ew#0^3kwUEmzS%nt9f~OczAeaWo4kCpz-nX4h{~fsj2w*`0VWL_V)I@y}hHO zqhMfQ&d$yU2M4XKtso#ETwGlA^z=41HUIzs|NsATEUZ8P00G)bL_t(|+G3b8MQSQZ zfME)Q0m(YpWd$@z(g6fEGD3DF=-`xARGKoy&CG;o9n5TUPP}SUxFlGK)xqx!q?r7@ z89d~P)M3v8qFIDFL<5m*k;J1z9LjRwV31&fi%(*e!>NNE#uOIUQ)PimxMrK<(xD4y zn~G>5yb@fSDThOcI-Kpp!6*dhbQn!h%)qLHQ4HZ*-YGJ^a9+-oDTy`MbTB9&I68vN z0&tF>@{}pe2AJuGLBtcmX`jgG2cpx{^1H>Pl|cze8_7U6eQqAUsSGMX2rJm6r?7`4 zYsXYr@f&k7GJ`GSr%$!pgz)2GYScc1Xf^_g0 za&vP_@i8#Aa`s`WLIn)Wj$Koy8tOy*p(mwQDOeUCP{JjOO9Q81Q>+(IM-N1YN*0jx zaxbsvX;3ucpAt}It%9oFI84U1LH-=;Z1ou$_!X(J)CS z4Gli-TsHLh$b&LX+<8EutCfPBy7=_@nDE58YwDCK1-&GsD;LKp3>HzOq+M1eu4dBm z2XACCX?c)Ewx7g&?$RPj#j=F-@{05_k@Rwx^s=4w`h)a3YKk^#IsgI;0JisUEnPL! QAOHXW07*qoM6N<$g5ELK4*&oF literal 0 HcmV?d00001 diff --git a/images/compass_04.png b/images/compass_04.png new file mode 100644 index 0000000000000000000000000000000000000000..c131c2da6d12fb228eab07d778af5e75d912b831 GIT binary patch literal 681 zcmV;a0#^NrP)qoV`_1aNS0&(F`Vudn<2`zRlpuhK7}um5`8-EiEnS>FLME z$7W_`c6N5PwY44|9vmDTLPA1rZfsDk=&J3Jnbn2?+^jXJ(9l6aL714B78Vxx`1roQzUb)as;a8i*4DDJvP?`&t*x!~_4Uoo&GPc{D=RA_ zBO^LGI;W?nczAdf6%|B8M5w5!Ha0f!@bKB$+3f7>U0q%7?(XsN@fa8w4-XHZpr9Zi zAicf4I5;=}00960|C8(8jQ{`v8%ab#RCwCV)Yno1K@bJdnc3hjIfIHQW-$ULz^s@P z7|`zj{||Q-EuWX-QuM=A&BN5Gn%mui1J<1&qH;RW8xa(#c?LyZvB;T5R`#KYwWg8x z76@tjXZJ}XAGUufSi?r%ZtWB1nYKofv&{3^>6f7+e15$Zn=@85A~x;HUc$)%GC55W z#V34Zr%JRQh6MlV3%}Kw#B^7>^l#LUP%V6s|1%oPxH-9u^bN6O0f%v_AIoZ@;k?;*sVgZcs;VwNe8oBC;M>xWZ_XRwXjWHhC_!(OOTL|LPA1`iHU`Ug|@b~6%`fn@$oY=Go_`b zjg5^vJ3Di8b9#Dub#--VX=$38n(FH6f`NjruCB1Kun7qXU0zr zt@O(6qC&v$VA6=;!F?=&!J_(9h4%(9r4X>BPjt=;!CMv9iz5&%C?4 zudlGs(9f{1u#=RNva+$QuCBDRw8O;1v9YnTv9Y_myu-u8l#`U|>FT?@yTil8(9h7Q zsHof9+~?@$>FVml!^7w3=v-V|U|?XNprGO5;CFX-Z*XvLZ*RfD!Q9*1aBy(0uC0@k zlc%Srl$4WiaBu7D>%6?Y#m2_Q#l?Ssfa>b$=jZ6It*ztZ&FCr;v93d1K6B&atyb>sA55N#` z#Kt7Z%3RIQ0vll!5+^c(9|31)+ugz7AmZc`=FVy9bHYSW0YVT41uE!q^TsCJv1I(t z{o61nLIe>Q1d&Qu&l|X650%l82+*R60D{hB>lkcUzL3jEQe;<4Pz4qic=_^H$HU8U z5SjUlHtm6g3WDY+XhC3tf>EUuJZQ6KT&p#(WYMA!;zfiGVFVe_(87+A8vvk0Q=lOd zrBRpvRKTgQK}rc15ds(xGy+4}A2)pX8NfhH0ssYg7&wr}frABi8eE`JW5?Y-Cq@i9 zfxxVhAPCejh;g_85(10MxLM#uG7T(8?g}_TC;%QiKa9v2Ji2ra)CYj9)*`t_me?*P zpd2J&j@cr+36n@kK62uN3262RdQ-~~f80Yw#kXix$n1ZXeHtLv5=>x-2@;H827?YFcG_aX-6>gxCP1M97KZQ; zfE|I-SsIdy;n1FBR@4xii@9L%LlHh0S*HPb0BGq2J=9~q^iWrUuNSGz6 zx;lwSlz~=h7-DEHW@~Gc4frJ@3ZwvCjp#*N?1V#5u>%MSAOgY)+n!h2qV`V55 zbch@e@F8eosNrF(do&m-fgFfjK*48KcKe@+uGOF^4Tt~`K&XVhaVBtEC`kpc6u%;p z!3mGb`XHf~)=pj+58W3pEhTDSF5CR4iuuwr7G`O)?17S=6f(jjAz(Ngt6C%S96`%o$ UB$Hf%Mg>^-5&7q!{}BiPJG;<;LI3~& literal 0 HcmV?d00001 diff --git a/images/items/1.gif b/images/items/1.gif new file mode 100644 index 0000000000000000000000000000000000000000..a010b26740f82a3c8ad9b7f0318ed38f38fbb1a8 GIT binary patch literal 511 zcmVO@_HaR&tmX?;u$;k!=28xP` zX=!Pblav4d{{R30A^8LW0015UEC2ui080R5000I5peK%GX`X1Ru59bRa4gSsZQppV z?|kq7z@TtQEEiqO-?4|Y-?oRi-@Avs-+&zw_Knyf3gnO-QudA6A!pw* zSd#XQ+97M-upQF&joTq_(BTJr4xpIpT06Q4N B>~a7A literal 0 HcmV?d00001 diff --git a/images/items/1.png b/images/items/1.png new file mode 100644 index 0000000000000000000000000000000000000000..59aa0df828d3ffc3bf78032554778de0755a5288 GIT binary patch literal 602 zcmeAS@N?(olHy`uVBq!ia0vp^-awqf!3-pSX4zT;DVB6cUq=Rp^(V|(yIunMk|nMY zCBgY=CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5XVgr0aT!C~&MMZmiyRNS8rAwC@ z8ymyJ!#{lZ;NjsRAt9lzuAY{b#>vU~{Q2`6H*S3U_HFz2?JHKSsH>~v=jWd}bLO#Q z$IQ&kEG;dkO`CS|NU?3L{U^pvTCcwbJ z7~$#S7*cWT&5g*c!wv$j7nfIVQ?owx;;;T?&K>)jCUb}W^!m=kSEZ20{ZguY%9<3_ z*9SFETdZF7Xw4#y&0Z^eHfgQw+QhYzW0RfwqKQeu7d{pjI4sb7Zl@`}d5}%J2I4o^?mqo)O>3 zH$y*Zt3mvcRf+pLOb^ruYB&E>3gi3ix~BTTIl*gOKn5#Nr9M!F)xjFU?53Ye*LXg+ z?mOu|O+TenC;r5%$bAz^H`FMuPW|Z=cJ@>2nsT5-s!lw=?%#?@U#DN&epSoTIsjI77 zR8(~7(j|L)dwza?9v+?>H*QRuHm$L-@#oKf zLJSNH?%lf=8ymZB-MSASK0JT^JUKa;jg9Ttv16Y9 z+1%RR8Lr+tbJ60-S~Hfc=%1|~BqF|Y!^TY$#YF;HHt*cEm?cnR_kjZv0jvj)?NarZ zKYnJTyq}WF*~?2*lzfG++*%~;v+nkT30u8)Jbbp-YyY!{hdotazdq@4`oqKX?iW{T zew`_`@|ydmrIQZ$3mpu(+g0QIRKek(2P4Z8DfcBZs~E)Og$ibHxeAspky&H#L10p& zs8HZm=}iiu4Wc|=c1atWlvlF43K@tLIjA-KXLbte^9opU@aO_NR*sFDs~RUxTjau3 zs8W1DVBw?!sf(JgmQG-|ljlj4>RchXc;=FIHy(Tr>{#tP(V^8s#VMLW@L1ZVsupdP zt)}m*T%*i5qdc0!Q*=7>R;n!be8wbK`CUbDVa>!JzC54xe3i`3O4XTEx}M+W(7mK( z%@Wo0Ddkhe3TIe)HeJ$Q@oP(#OGAb#Z`^u@+hJ=aGOSrTW5?@l-LcOqcTSk9dFNEp z%-*dNQt~RjeV)zVK4;(TD(-7bVoSC^-P`&j_HooSJ*5JC4h+d^{_DGCJbM@*>5$uou_G>H~gU7i$RN zSfSV$DzQSbDOAHkzB$xFBDzJ&$th7(>|DE|m{^KKI}1n80!Q}OB?}I6aCj7Wu!;2u zKAGSu$Jsr}$10LxN}+_|QYN8{ld02Fre!{xnXzo;vspRYUOt;$a7^?0oRVvq=~9ji G4AubH9%mi^ literal 0 HcmV?d00001 diff --git a/images/items/2.png b/images/items/2.png new file mode 100644 index 0000000000000000000000000000000000000000..c3dddc6daf2bdabc4a73e129530ede49f3d7eade GIT binary patch literal 893 zcmeAS@N?(olHy`uVBq!ia0vp^-awqf!3-pSX4zT;DVB6cUq=Rp^(V|(yIunMk|nMY zCBgY=CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5XS^|7RT!Hl7y?dRUoYd9Tmo8m; z^5n_h-rlIFsI;`Sy1KfVGiU1R>J}9hUAlD1-rk;{pPz?^=f;g2)22;pY;64b^QVoC z&7VJiBqSs(EiKQSIb&>W{O#MfkdP1q1A}|_?#0H&u3NY6!-o&gpFdAdPG)0cJ9g~Y z=g*&4tXQ#V(IPW5v%tW>|NsBxbcaq!kY6y6ODteGevPw-fq}{0)5S5Q;?|oR znZbt)1de@t%i1Ea)5ek2b9eL={QG6`nLX>^zk7`brPctE zeS)pn<*!e)qVK%l{%+~pe{~aMeXm`9G%?+jZOig!UL1RGWGcNrYi{uUrQ^Pz*Aipz zIjk=(uFQLS;q#N{*K*@ue>1YiGLy8r8^H__PwbGD{`hwXQTqlaB6|Y*o#ZOc?^4*8O*O zzpBoCsG#?zBfB@}ReE5Q)cH-u>r6LS%vh(}nts#px>U4{&(&!MH}83PaB`H*857?O zlhbK2+M8b-y7hJG1s&_>QN`VDn(2}z*{ACt+bm3c_NDI1+cm29qqZF``F$^Jd8FCH z=%-6(C$8G+^Lw++Ct(B2zn$+k2kegg^XBx2y9T}X;ZtWHJ-?6VK5y_1qdYPD-&%jt zW_;Xtxx~18eywPotbP0l+XkK<-5c& literal 0 HcmV?d00001 diff --git a/images/items/3.gif b/images/items/3.gif new file mode 100644 index 0000000000000000000000000000000000000000..b4737c33114503a6699c6557a0f32b68a4d2f36d GIT binary patch literal 771 zcmZ?wbhEHb^kzt5xT?nh1Qit(?d|P0HZ}(i95{UV@Si__-oAay%*-4W74`7pLt|rO zCnqOeU0pUdHXa@xAt9mLw{I_9x|EZX)6dT@BqYS!+xy$MZ<8laK6B=bhlj_^nKS3i znX`TS_SLIbPn$NarKLqhMP={ay;rYZH8V5Q($dPw$tf)@U9@PCrKM#;LPAkd(Ty87 z($doY|Njqi4T(VUCkrD3gC2tpNFT^g3~c`$rWbhVNcEpsQgkxMYW{^4C0=Wz*56oD zcKU7A{s$W>eDr3Yf3cX@ z*d@gHJEl#a(ZMe!!Cok-B|LNS5(Z%{$y_eZrE8aRa%IUZTDNtkuyne(=(fF!Ma5It zHTNBzp*b&6T;w9dYv4S^UX&?-XOty^AA^LkpZrIoJCH2&yWazRIb+CDG9Fz_ylys%-TN z4SSumUQ8;T;bNd!F!lY4b?$GH4((QPNYq{;^+#1T!n65!s8?^mA`9VU6~TGO&Mq48i7375-A0d zcoqJAvN!2y(c`PnPZbBdq@ONa93jqH#vt{AE6J}!Jh5P#hgoZd_^*cw58D;mG#+)R gOv`xGsj+Ouqb{9oFCKLp9MgE*V{+|>s{n&F02w_x>Hq)$ literal 0 HcmV?d00001 diff --git a/images/items/3.png b/images/items/3.png new file mode 100644 index 0000000000000000000000000000000000000000..4ee72697179d56a2aa17def1520d02179fb4586b GIT binary patch literal 783 zcmeAS@N?(olHy`uVBq!ia0vp^-awqf!3-pSX4zT;DVB6cUq=Rp^(V|(yIunMk|nMY zCBgY=CFO}lsSJ)O`AMk?p1FzXsX?iUDV2pMQ*D5XdINkyT!C~&MMZmiyN!*_fddB) zA3pr&&!4w%-!d~ZM@2~h3IdkT0-@bkI>ebVxO>1dsQBhIZyLa!^t5?m;%(S$$ za&mG?OG_6mT4ZTynUIiBR8(~1#*MVJwEzGAN9(kz10AGa666;Q*?YcQgQ3ejhjV>40u=rQkA7W8{RN-ZF!UX_y7Fs3lAHZeN-~EiSk#;;A@L{!m#1H zXvFELYn!HRU6ZQ2$dq&1aYf(a1{>e@$3`>uWVFTx9|#up6~DChUsThUQ`!ETCrOxy zsGd^`4f{UQ>pJ zY-^t~udJCHdU1_c@>%6sqGzv8vwn4NZrI=NZx810w|eX5zdP%+u=Qo%PZg}s|7+z3 zZ9E(tZF#@^$Aj?Kclho2YW&x2`>}29k8^X6Kb-ddP{h$$D|NQ%d4$OsY(3gECu#1? zb4lqZBs<=)}+m%$!lj?7%tyl99-x;f1&+v2cveopT&&- ztgIHN+UlM;7(Fw`<`eg6j>x}Ky512t=1i*2)BE||@yX9kmhBr_c9vYWiMM+$5T^3( z!@eD!ErOZPbV|${xNrUGDh>15oHon)vipmP((oG9yI)Cv z8EzJZPV?SwGxh1kwH_atm3v-H)B43-aj>g*;qmBCFFu1w_79Vu&T#VIU=;jf>$Jb} j2cS{0wmiC?iHD*4k|lq=&!p$TG{NBM>gTe~DWM4f$bx>n literal 0 HcmV?d00001 diff --git a/images/items/4.gif b/images/items/4.gif new file mode 100644 index 0000000000000000000000000000000000000000..679fbf9685b15eaacb8fd75c806be47524fd5197 GIT binary patch literal 969 zcmZ?wbhEHb^kzt5c;>_a1Qit(nVFevY;3o0-xd-Q`t#?{+qZ8IA3pr^=g*}}m!3a= zo|BW)+uPg2!$VhB_vFcwW@cvh?%nI^>f+(ydHC?*oH=uHa&nlNnH3ckdwY9l&YW3Y zU0qjKH(|nr#>U1QH*U1Fv`m{e&EDQVEiLWLnKR$MeS7}=c~n$XdwY9+e!h*3O<-VP zczF1+W5+ICx@2r@ym8}30|NsI35kS+gk8IKtzNzQ$&)93etzoe>RYyK*}HeImX=m> za`K85E1aC1K79BvfByXc|Nn!0G6aF*PZmZ71}6p`klR6V!odE&!KtaarM0cSqqD2K zr?;l z&zMDxB}%=EeU+uQE>X&I5w%#W_9U`%Sy-J+Ox;uShm)E%{%(r7)fhIv&s*XDt#!_6 zoE>-a59o>Rh+gZkOtfb9+7nNV3)U}~aZYO8Qib5wqg$V)R&DrkaM_%;ok_bgDjuuF z)yS5-I$^G&E><2{qf}7vhT;6YwncM)y*zMlJ?p0?A;YjE8q7vpP8~4iVrp9^p%2mRSxxQfkQdd)7!g=($RYs{{Extn$5l;BPd1C5gmWve+=PqP^_JXYp; zbWm)|G>e8j6F$k-rM&{29}EKdn0Pf>xR0y0G;(wCHAyg2KBW0xUz^8;SbY%-mL-as yUoTx!o7kSf-caTvSLDRVI!8cN$u6S&>9m-#mrtiBv}rz@kuojwnNlMIgEatf=v_tt literal 0 HcmV?d00001 diff --git a/images/items/4.png b/images/items/4.png new file mode 100644 index 0000000000000000000000000000000000000000..720ef1d7fcdd4de4e79cd2ba8ca6b04e88abd0c8 GIT binary patch literal 930 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 bfg${C=5^qbqrc`&;Zy|7^)L9JW`TbLHVuul literal 0 HcmV?d00001 diff --git a/images/items/noimage.gif b/images/items/noimage.gif new file mode 100644 index 0000000000000000000000000000000000000000..a6bfc99221e99dccf74d4012bbe334956c54d3de GIT binary patch literal 978 zcmW+#Pl%Rv5PlA3)**r|5cDu2L8yl)FhPj{A$QkEBuWLdDJe)VhIo`7Fi7fP;Gqt- zJGLF;Cp}HJIu^8&-47=10yf*dGYOi z*oXhn!Sx^457rwQ70dDU;sX_!fC3kUAO%o}LKUW*^rK`J! zYr2*k5co)TD(+fExSjc@d#9LqU-qJn7BfY>2r$$zH6;>_=4+prgD&J%YRX8*qV+4h5DulzK(a_5V; JHg3S){{dmGp^N|k literal 0 HcmV?d00001 diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..833f5bee26dc9ffda4c5da3005955bb6fbbfe829 GIT binary patch literal 3372 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 literal 0 HcmV?d00001 diff --git a/images/town_bank.png b/images/town_bank.png new file mode 100644 index 0000000000000000000000000000000000000000..09a1ff8d972d6c2cb4279ddd8654b5ca6c4acd6c GIT binary patch literal 1496 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 literal 0 HcmV?d00001 diff --git a/images/town_duel.png b/images/town_duel.png new file mode 100644 index 0000000000000000000000000000000000000000..6009336e1a0e519f0227464777471b25c2f0b82e GIT binary patch literal 1645 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 literal 0 HcmV?d00001 diff --git a/images/town_hall.png b/images/town_hall.png new file mode 100644 index 0000000000000000000000000000000000000000..a96608f80593be63537bdb4a3e85b8a7c62ec155 GIT binary patch literal 1821 zcmV+&2jcjNP)E5uTo&w6wHXSXk85 z)X>n-CnqOPPEK@mbeWl%m6erfXlOq_KT}gviHV7(rlzE%q=SQlaBy%oHa2T(Yf({A zMn*PC*K|w)CNJx2kc|=4+Gcz+W zF)=VOFf1%A{{H^n-rn%=@T#h+`uh6){r&m*`RM5AlarJC`}=%+eCOxq^78Wb_V&HK zz4Y|-mX?;t$jIyK>)+qs=H}*?mzS%ntMl{o?d|Q>*4Fs=_`bfr>gwveyu8H3#O3AX z{QUeNARzJa@%Q)ludlDe!^7^wX?c6N5c!os7YqxJRm#l^*`si}K=d+F)vva+&) zfq~@Ye00960|5qBtSO5S8BS}O-RCwC#ndw&=Nf5vV1&I?t(8)lAj7RVQ zbqxj(c4arok_d<*f`a#b#)xjrx!e5f%OW$=)yzOMz0Xhfd-9%DJ@sR{>*}VX@&Kdb z5%T{+)&~4#OW8lP+@LY-coGYtIWs$CJ%R2=@DwV}4e@&g-<4;Cj7O0)qA$P;3bFz% z956w?^NK0N+cC{=m;%K%86as3ZVFk_vc?S*sD}a42Th>~SrdYa$W#3g!W0Tfil-u> z>C+84b`qwX(s~UL3MA-;n8@!drs|r%NXV#e$ab7C#bxW7MG`Wp8*&&VOns0v8$6-$ z>fiVt!qlpy_-G+CcKr}X6gsLB*;9~__(%!KZ99y6g!%@Uno<;(U?rn&Vx6tm#iR-( zZ3sqq-r3a+W-q_SOx@s`gMOru)hZ+2m>B8z3?xa&sZUB!GvI;GH}Z<@z;Ami?|tG3 zD0(Ax`Me22P9mCl$T-2N2KAM+Q5_i|$13O94Fgq`qK0*sg6(THhm8G5+>7NET|)B7nFgG1x67=D}W#LrbwG8Db|QYZgFW z$xocCtQJCJ_~c2V1UO{Ki)M*vDIm)~DbhTrnj6o{gsJB;gv_bKIAmYRlJC@33;EVm zztR10%a9{NGlfGwDY?+1v_)7O5&4PD7Kr5q@J!fWtV_e1wFKZphj?1q;Iy_R3rg_N zz3`gTEWKlRl$c}}POv9cE91O0BfcTapgmNZzfYv06WQJ6wT)eBm0!jGE{sw!e-G`28&?aV z6{#vHp)jXe|L1m>Bc`(!ahHdxb@ij`O`G+&#V z!AkX?O}dru_`=k(^b85{G_Dr%709AgY62j_&mPg9Xw{ zdBip|q?U+-_8cG34+&9U7EI`exTqm1-KiyhMt|)wsTUG%<8DQFYO%KgxpwMfSk~IP zCGzWothRL(b)qk&bhiaLw5XWi`KTz0PG|K)fxy?&8=@iMw``?Fzo|)3_QMcLb zNTpKQys`TE(tPWlcKz|LYu>it6nWU)(?ZM(0l{mSUN>*0ms(usXEu%9&s}p}fuQjL zem_Y*{u1;+kX+$-%j}+>==J(%{T`3!b@k5^p6&Tz_~(oL$=2pxMmJ=sXf@vMu6*tM z-R4sdin@!7KHGeFtZ(bGV~GR1|7ue zW9e3cMJfp6;lV`(39&)m&_MEx2NdkiNE_m2Jvv-bKuW9-0|n$OE5u6y>12h3DImiS zab_H4g}kMJFy9uuNw$WBSRnxl$gf;K)8GUONRo9tb}NkIUjYUHva|!`1GU(B00000 LNkvXXu0mjfs0@%g literal 0 HcmV?d00001 diff --git a/images/town_inn.png b/images/town_inn.png new file mode 100644 index 0000000000000000000000000000000000000000..8ef3dad58dfc7facebd379d67c69b724fbcd9a99 GIT binary patch literal 1019 zcmV)@Cwh8%85tP^0|U>`&-nQG1Ox=&;NW9pWB2#>LqkJ-eSJ?)Px<-z{r&w(NlE(p z`u_g@WMpJzWo2h)XY1?h?d|PoXlNiHAmiiX$H&Kqhll(7`_t3YySuyM;^Lv9p-4zb zTU%RMSy|!X;ndXBy1KerT3XQ1(9F!tg@uL6%F1zZarXB1Z*OmjiHXk6&gkgq=H})+ zJUqO-yj4|ISXfwYZf?QB!IqYm+S=M}ZEZ_SOPZRRx3{-+baXW}HG6w|-rn9)Qc~8| z*1x~MlarI(-QE2B{PObhgM)*stE)jlLG0}8>gwv9ot=Dqe5R(R($dn=(a~I7Twh;b z#>U3=_4R>)f$r|^@9*z-cXy(qqTk=&kdTnb$jHgb$%KT2W@cuvu&}YQv8=4Do}Qkc zpP!MDkwryCM@L5h00960|157q)&Kwk0ZBwbRCwC#*=JM2Fc=4LDk{{43>BOpL%=QW zg?sP4_uhM(e0330PiUGpcP%ft{NIJk(;qpKC)`yBlMr1>A&uoI!x|!CfYPlYViS-e zhA@O73}FaE7=l9{w`UF3k>FcEJEU>95PiV+^hp(7)HHO225b{)W6hP3G-vp1AKlkV z5!azW{3df%T;s1j2!0z(Kpf-gt1~udy&{&3eH`Mcim&4v;()%jr>{If$l^^T;5b;+ov)=qm1cpfpot zq$wX$a~YX)&H?4g@e`3FT#eoZZ*u`n-igQp_KO7|M`eIkBGQ5@F}J}oIwTYN2uLRu zX`)3eu!?|$aV6P)b&(LRgxjP=IQUFJHgLPh25FIT=p`M-70gf4PL1@CPkgUKRN;fv z$RrtoOQQBYM2%E$$sq35gst@esS%w_gN$@SUEF5uh15u4ttc%~<%UYz|1FaW6F+tYjP2sZ!#002ovPDHLkV1f$&-^u_0 literal 0 HcmV?d00001 diff --git a/images/town_maps.png b/images/town_maps.png new file mode 100644 index 0000000000000000000000000000000000000000..d13536e6155291b28299a333257082ad9d3b9d64 GIT binary patch literal 1411 zcmV-}1$_F6P)ZfHGWp+S=OX<>mhV{*jT9ot>TIySq0xH~RYeCd3wzij-m-6!R%*@Q{>gtn|lTlGoWo2bJ zI5=QnV1R&t;^N}}|Nj600C4hMVE_OFiAh93RCwC#+4o!8Ko|#b6vcrcS`ft`P8tW5 zI#8g>5ClXN_nvju(Y@RFuQvlMUy?_k-sSp}_fy7`e4ga)eecc1ApD1BctVJfV04l} ziv|H{xnt1=!hpD$AZB=73qBTxEf2_RCJ*Amjvr%!)B|$W%EItx0J-q6Kn7O90 zHZd4~GC@p$RF1GPJdJ>?aV!u=4In#A-c}DLNDC9>J0jIgkXuC9WJe<)Zw8sfdkBy@ z2a~}y2go*)q+(wMq=M}TR*)^ih&CQ25(#ra-dT)oC31BiOHTJAa!81{aBc~aQDWrz>b7`&n_PuV z6<%EFQ<7I`!!7wS{`(ZWjol0AM3!NQK#{(r%mZZ4z`zC6;Z|*-hozhnF_XrhHt(M&%G$WP(&9(!>N=2?J8Yvp_fl{-kj+ zd6XqYOiYk5L<~%R3Gg-eGt;p~Cm1w${^?iwKes;u3;^-~P~rRC RcY*)_002ovPDHLkV1g!nqnH2y literal 0 HcmV?d00001 diff --git a/images/town_post.png b/images/town_post.png new file mode 100644 index 0000000000000000000000000000000000000000..337a39ca6a0c59d5860a3c70666f8842c2f15d60 GIT binary patch literal 3064 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 literal 0 HcmV?d00001 diff --git a/index.php b/index.php new file mode 100644 index 0000000..502731e --- /dev/null +++ b/index.php @@ -0,0 +1,81 @@ + \ No newline at end of file diff --git a/lib.php b/lib.php new file mode 100644 index 0000000..bfe67fd --- /dev/null +++ b/lib.php @@ -0,0 +1,225 @@ +
$query"); + $numqueries++; + return $sqlquery; + +} + +function dorow($sqlquery) { // Abstraction layer part deux. + + switch(mysql_num_rows($sqlquery)) { + case 0: + $row = false; + break; + case 1: + $row = mysql_fetch_array($sqlquery, MYSQL_ASSOC); + break; + default: + $row = array(); + while ($array = mysql_fetch_array($sqlquery, MYSQL_ASSOC)) { + $row[] = $array; + } + } + return $row; + +} + +function gettemplate($templatename) { // SQL query for the template. + + $filename = "templates/" . $templatename . ".php"; + include("$filename"); + return $template; + +} + +function parsetemplate($template, $array) { // Replace template with proper content. Also does languages. + + foreach($array as $a => $b) { + $template = str_replace("{{{$a}}}", $b, $template); + } + return $template; + +} + +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\<\b\\r \/\>G:i", mktime(0,0,0,substr($uglydate, 5, 2),substr($uglydate, 8, 2),substr($uglydate, 0, 4))); + +} + +function getmicrotime() { // Used for timing script operations. + + list($usec, $sec) = explode(" ",microtime()); + return ((float)$usec + (float)$sec); + +} + +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 stripslashes_deep($value) { + + $value = is_array($value) ? + array_map('stripslashes_deep', $value) : + stripslashes($value); + return $value; + +} + +function addslashes_deep($value) { + + $value = is_array($value) ? + array_map('addslashes_deep', $value) : + addslashes($value); + return $value; + +} + +function makesafe($d) { + + $d = str_replace("\t","",$d); + $d = str_replace("<","<",$d); + $d = str_replace(">",">",$d); + $d = str_replace("\n","",$d); + $d = str_replace("|","??",$d); + $d = str_replace(" ","  ",$d); + return $d; + +} + +function err($error, $system = false, $panels = true) { // Basic little error handler. + + display("Error", $error, $panels); +/* + // Don't display major system errors (sql errors). + if ($system == true) { + if ($handle = fopen("errorlog/errorlog.txt", 'a')) { + $written = fwrite($handle, $error."\n"); + fclose($handle); + } + if ($written != false) { + display("Error", "A critical game system error has occurred.

Please have the game administrator check the game error logs and fix the problem.

Please
go back and try again."); + } else { + display("Error", "A critical game system error has occurred. Additionally, an error occurred when trying to create a game error log entry. Please have the game administrator check the server logs and fix the problem.

Please go back and try again."); + } + } else { + display("Error", $error); + } +*/ +} + +function updateuserrow() { + + global $userrow; + + $querystring = ""; + foreach($userrow as $a=>$b) { + $querystring .= "$a='$b',"; + } + $querystring = rtrim($querystring, ","); + + $query = doquery("UPDATE {{table}} SET $querystring WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + +} + +function display($title, $content, $panels = true) { // Finalize page and output to browser. + + include('config.php'); + global $controlrow, $userrow, $worldrow, $numqueries, $starttime, $version, $build; + + if (!isset($controlrow)) { + $controlrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='1' LIMIT 1", "control")); + } + + // Make page tags for XHTML validation. + $page = "\n" + . "\n" + . "\n"; + $page .= gettemplate("primary"); + + // Setup for primary page array indexes. + $row = array(); + $row["gamename"] = $controlrow["gamename"]; + $row["pagetitle"] = $title; + $row["background"] = "background"; + $row["version"] = $version; + $row["numqueries"] = $numqueries; + $row["totaltime"] = round(getmicrotime()-$starttime,4); + $row["content"] = $content; + + // Setup for side panels. + include("panels.php"); + if ($panels == true) { + $row["leftnav"] = panelleft(); + $row["rightnav"] = panelright(); + $row["topnav"] = paneltop(true); + $row["bottomnav"] = panelbottom(); + $row["middlenav"] = panelmiddle(); + } else { + $row["leftnav"] = ""; + $row["rightnav"] = ""; + $row["topnav"] = paneltop(false); + $row["bottomnav"] = ""; + } + + //if(md5_file("templates/primary.php") != "0aeec5eb64ff875a697142528afe8fc7") { die("Primary template modified. Cannot continue."); } + + // Finalize control array for output. + $page = parsetemplate($page, $row); + + 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..c913d20 --- /dev/null +++ b/login.php @@ -0,0 +1,49 @@ +go back and try again.", false, false); } + if ($row["password"] != md5($password)) { err("Invalid password. Please go back and try again.", false, false); } + + // Finish. + $newcookie = $row["id"] . " " . $username . " " . md5($row["password"] . "--" . $dbsettings["secretword"]); + if (isset($remember)) { $expiretime = time()+31536000; $newcookie .= " 1"; } else { $expiretime = 0; $newcookie .= " 0"; } + setcookie("scourge", $newcookie, $expiretime, "/", "", 0); + die(header("Location: index.php")); + + } else { + + display("Log In", gettemplate("login"), false); + + } + +} + +function logout() { + + setcookie("scourge", "", (time()-3600), "/", "", 0); + die(header("Location: login.php?do=login")); + +} + +?> \ No newline at end of file diff --git a/mailbox.php b/mailbox.php new file mode 100644 index 0000000..6445b42 --- /dev/null +++ b/mailbox.php @@ -0,0 +1,217 @@ +\n"; + + if (mysql_num_rows($messagequery) == 0) { + $row["messages"] .= "You do not have any messages."; + } elseif (mysql_num_rows($messagequery) == 1) { + if ($messages["status"] == 0) { $messages["new"] = "*"; } else { $messages["new"] = ""; } + if ($messages["gold"] != 0) { $messages["money"] = "\$"; } else { $messages["money"] = ""; } + $row["messages"] .= parsetemplate(gettemplate("mailbox_listrow"), $messages); + } else { + foreach($messages as $a=>$b) { + if ($b["status"] == 0) { $b["new"] = "*"; } else { $b["new"] = ""; } + if ($b["gold"] != 0) { $b["money"] = "\$"; } else { $b["money"] = ""; } + $row["messages"] .= parsetemplate(gettemplate("mailbox_listrow"), $b); + } + } + + $row["messages"] .= "
\n"; + display("Post Office", parsetemplate(gettemplate("mailbox_list"), $row)); + +} + +function outbox() { + + global $userrow; + + $messagequery = doquery("SELECT *, DATE_FORMAT(postdate, '%m.%d.%Y ~ %H:%i') AS fpostdate FROM {{table}} WHERE senderid='".$userrow["id"]."' ORDER BY postdate DESC", "messages"); + $messages = dorow($messagequery); + $row["messages"] = "\n"; + + if (mysql_num_rows($messagequery) == 0) { + $row["messages"] .= ""; + } elseif (mysql_num_rows($messagequery) == 1) { + $row["messages"] .= parsetemplate(gettemplate("mailbox_listoutrow"), $messages); + } else { + foreach($messages as $a=>$b) { + $row["messages"] .= parsetemplate(gettemplate("mailbox_listoutrow"), $b); + } + } + + $row["messages"] .= "
You do not have any sent messages.

\n"; + display("Post Office", parsetemplate(gettemplate("mailbox_listout"), $row)); + +} + +function letter() { + + global $userrow; + + if (!is_numeric($_GET["id"])) { err("Invalid action. Please go back and try again."); } + $message = dorow(doquery("SELECT *, DATE_FORMAT(postdate, '%m.%d.%Y ~ %H:%i') AS fpostdate FROM {{table}} WHERE id='".$_GET["id"]."' LIMIT 1", "messages")); + if ($message == false) { err("Invalid action. Please go back and try again."); } + if ($message["recipientid"] != $userrow["id"]) { err("Invalid action. Please go back and try again."); } + + // Handle money transfers. + $message["moneytransfer"] = ""; + if ($message["gold"] != 0) { + $userrow["gold"] += $message["gold"]; + $message["moneytransfer"] = "You have received ".$message["gold"]." Gold with this message.
"; + updateuserrow(); + } + + // Reset status to old, and gold to zero, so they can't keep reading the message to get more money. + if ($message["status"] == 0) { + $statusquery = doquery("UPDATE {{table}} SET status='1', gold='0' WHERE id='".$_GET["id"]."' LIMIT 1", "messages"); + } + + // Pull the sender's userrow so we can show avatars. + $sender = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$message["senderid"]."' LIMIT 1", "users")); + if ($sender["charpicture"] != "") { + $message["senderavatar"] = "\"".$sender["charname"]."\""; + } else { + $message["senderavatar"] = "\"".$sender["charname"]."\""; + } + + $message["message"] = nl2br($message["message"]); + display("Post Office", parsetemplate(gettemplate("mailbox_letter"), $message)); + +} + +function letterout() { + + global $userrow; + + if (!is_numeric($_GET["id"])) { err("Invalid action. Please go back and try again."); } + $message = dorow(doquery("SELECT *, DATE_FORMAT(postdate, '%m.%d.%Y ~ %H:%i') AS fpostdate FROM {{table}} WHERE id='".$_GET["id"]."' LIMIT 1", "messages")); + if ($message == false) { err("Invalid action. Please go back and try again."); } + if ($message["senderid"] != $userrow["id"]) { err("Invalid action. Please go back and try again."); } + + $message["message"] = nl2br($message["message"]); + display("Post Office", parsetemplate(gettemplate("mailbox_letterout"), $message)); + +} + +function mailnew() { + + global $userrow; + + if (isset($_POST["submit"])) { + + // Check for errors. + extract($_POST); + $errors = 0; $errorlist = ""; + if ($userrow["gold"] < 5) { $errors++; $errorlist .= "You do not have enough gold to cover the postage fee.
"; } + $checkuser = dorow(doquery("SELECT * FROM {{table}} WHERE charname='$recipient' LIMIT 1", "users")); + if ($checkuser == false) { $errors++; $errorlist .= "There is no player with that Character Name.
"; } + if (trim($gold) != "") { + if (!is_numeric($gold)) { $errors++; $errorlist .= "The Send Gold field must be a number.
"; } + if ($gold < 1) { $errors++; $errorlist .= "Money Transfer amount must be greater than 0.
"; } + if ($userrow["gold"] < $gold + 5) { $errors++; $errorlist .= "You don't have that much gold to send.
"; } + if ($userrow["account"] == $checkuser["account"] && $gold >= ($userrow["gold"] / 10)) { $errors++; $errorlist .= "You are only allowed to send up to 10% of your gold to another character on your account.
"; } + } + if ($recipient == $userrow["charname"]) { $errors++; $errorlist .= "You cannot send a message to yourself. That would be a waste of 5 gold, dummy!"; } + if (trim($title) == "") { $errors++; $errorlist .= "You must enter a Subject.
"; } + + if ($errors == 0) { + + // Subtract gold. + $userrow["gold"] -= 5; + if (trim($gold) != "") { $userrow["gold"] -= $gold; } + updateuserrow(); + + // And send the message. + $send = doquery("INSERT INTO {{table}} SET id='', postdate=NOW(), senderid='".$userrow["id"]."', sendername='".$userrow["charname"]."', recipientid='".$checkuser["id"]."', recipientname='$recipient', status='0', title='$title', message='$message', gold='$gold'", "messages"); + display("Post Office", gettemplate("mailbox_sent")); + + } else { + + // Die gracefully on errors. + err("The following error(s) occurred when trying to send your letter:
$errorlist
Please go back and try again."); + + } + + } + + display("Post Office", gettemplate("mailbox_new")); + +} + +function mailreply() { + + global $userrow; + + if (!is_numeric($_GET["id"])) { err("Invalid action. Please go back and try again."); } + $origmessage = dorow(doquery("SELECT *, DATE_FORMAT(postdate, '%m.%d.%Y ~ %H:%i') AS fpostdate FROM {{table}} WHERE id='".$_GET["id"]."' LIMIT 1", "messages")); + if ($origmessage == false) { err("Invalid action. Please go back and try again."); } + if ($origmessage["recipientid"] != $userrow["id"]) { err("Invalid action. Please go back and try again."); } + + if (isset($_POST["submit"])) { + + // Check for errors. + extract($_POST); + $errors = 0; $errorlist = ""; + if ($userrow["gold"] < 5) { $errors++; $errorlist .= "You do not have enough gold to cover the postage fee.
"; } + $checkuser = dorow(doquery("SELECT * FROM {{table}} WHERE charname='".$origmessage["sendername"]."' LIMIT 1", "users")); + if ($checkuser == false) { $errors++; $errorlist .= "There is no player with that Character Name.
"; } + if (trim($gold) != "") { + if (!is_numeric($gold)) { $errors++; $errorlist .= "The Send Gold field must be a number.
"; } + if ($gold < 1) { $errors++; $errorlist .= "Money Transfer amount must be greater than 0.
"; } + if ($userrow["gold"] < $gold + 5) { $errors++; $errorlist .= "You don't have that much gold to send.
"; } + if ($userrow["account"] == $checkuser["account"] && $gold >= ($userrow["gold"] / 10)) { $errors++; $errorlist .= "You are only allowed to send up to 10% of your gold to another character on your account.
"; } + } + if (trim($title) == "") { $errors++; $errorlist .= "You must enter a Subject.
"; } + + if ($errors == 0) { + + // Subtract gold. + $userrow["gold"] -= 5; + if (trim($gold) != "") { $userrow["gold"] -= $gold; } + updateuserrow(); + + // And send the message. + $send = doquery("INSERT INTO {{table}} SET id='', postdate=NOW(), senderid='".$userrow["id"]."', sendername='".$userrow["charname"]."', recipientid='".$origmessage["senderid"]."', recipientname='".$origmessage["sendername"]."', status='0', title='$title', message='$message', gold='$gold'", "messages"); + display("Post Office", gettemplate("mailbox_sent")); + + } else { + + // Die gracefully on errors. + err("The following error(s) occurred when trying to send your letter:
$errorlist
Please go back and try again."); + + } + + } + + + + $origmessage["message"] = nl2br($origmessage["message"]); + display("Post Office", parsetemplate(gettemplate("mailbox_reply"), $origmessage)); + +} + +function maildelete() { + + global $userrow; + + if (!is_numeric($_GET["id"])) { err("Invalid action. Please go back and try again."); } + $message = dorow(doquery("SELECT *, DATE_FORMAT(postdate, '%m.%d.%Y ~ %H:%i') AS fpostdate FROM {{table}} WHERE id='".$_GET["id"]."' LIMIT 1", "messages")); + if ($message == false) { err("Invalid action. Please go back and try again."); } + if ($message["recipientid"] != $userrow["id"]) { err("Invalid action. Please go back and try again."); } + + $delete = doquery("DELETE FROM {{table}} WHERE id='".$_GET["id"]."'", "messages"); + die(header("Location: index.php?do=mailbox")); + +} + +?> \ No newline at end of file diff --git a/mainindex.php b/mainindex.php new file mode 100644 index 0000000..96ab037 --- /dev/null +++ b/mainindex.php @@ -0,0 +1,49 @@ + + + + +Dragon Scourge Beta + + +
+ + + + + + + + +
+ Dragon Scourge Beta +
+ Please read THIS POST on the forums before playing the game! This is very important, and if you don't read it, monkeys will come and eat your genitals.

+ Once you've done that, you are more than happy to...

+ Play Dragon Scourge. +
+ + + + + + + +
+ + Dragon Scourge © 2003-2005 by renderse7en +
+
+ \ No newline at end of file diff --git a/map.php b/map.php new file mode 100644 index 0000000..49ffc64 --- /dev/null +++ b/map.php @@ -0,0 +1,49 @@ +$b) { + $lat = $b["latitude"]; + $lon = $b["longitude"]; + if ($lat >= 0) { $y = ceil(($worldrow["size"] - $lat) * $perpix); } else { $y = 250 + ceil(($lat * -1) * $perpix); } + if ($lon >= 0) { $x = 250 + ceil($lon * $perpix); } else { $x = ceil(($worldrow["size"] + $lon) * $perpix); } + $text .= "town".$count."_x=".$x."&"; + $text .= "town".$count."_y=".$y."&"; + $text .= "town".$count."_name=".$b["name"]."&"; + $count++; +} + +// Then do your character. +$lat = $userrow["latitude"]; +$lon = $userrow["longitude"]; +if ($lat >= 0) { $y = ceil(($worldrow["size"] - $lat) * $perpix); } else { $y = 250 + ceil(($lat * -1) * $perpix); } +if ($lon >= 0) { $x = 250 + ceil($lon * $perpix); } else { $x = ceil(($worldrow["size"] + $lon) * $perpix); } +$text .= "player_x=".$x."&"; +$text .= "player_y=".$y."&"; +$text .= "player_name=".$userrow["charname"]."&"; + +$users = doquery("SELECT * FROM {{table}} WHERE world='".$worldrow["id"]."' AND UNIX_TIMESTAMP(onlinetime) >= '".(time()-600)."' AND id != '".$userrow["id"]."'", "users"); +$text .= "users=".mysql_num_rows($users)."&"; +$count = 0; +while ($b = mysql_fetch_array($users)) { + $lat = $b["latitude"]; + $lon = $b["longitude"]; + if ($lat >= 0) { $y = ceil(($worldrow["size"] - $lat) * $perpix); } else { $y = 250 + ceil(($lat * -1) * $perpix); } + if ($lon >= 0) { $x = 250 + ceil($lon * $perpix); } else { $x = ceil(($worldrow["size"] + $lon) * $perpix); } + $text .= "user".$count."_x=".$x."&"; + $text .= "user".$count."_y=".$y."&"; + $text .= "user".$count."_name=".$b["charname"]."&"; + $count++; +} + +echo($text); + +?> \ No newline at end of file diff --git a/map.swf b/map.swf new file mode 100644 index 0000000000000000000000000000000000000000..cf3271b20b9e6ec94727cced8c3e5e7f4b5fb7ad GIT binary patch literal 9430 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 cLoX~~MC}R+{E_Q^`c}l0duMz3FA;JK$b) { + $lat = $b["latitude"]; + $lon = $b["longitude"]; + if ($lat >= 0) { $y = ceil(($worldrow["size"] - $lat) * $perpix); } else { $y = 50 + ceil(($lat * -1) * $perpix); } + if ($lon >= 0) { $x = 50 + ceil($lon * $perpix); } else { $x = ceil(($worldrow["size"] + $lon) * $perpix); } + $text .= "town".$count."_x=".$x."&"; + $text .= "town".$count."_y=".$y."&"; + $count++; +} + +// Then do your character. +$lat = $userrow["latitude"]; +$lon = $userrow["longitude"]; +if ($lat >= 0) { $y = ceil(($worldrow["size"] - $lat) * $perpix); } else { $y = 50 + ceil(($lat * -1) * $perpix); } +if ($lon >= 0) { $x = 50 + ceil($lon * $perpix); } else { $x = ceil(($worldrow["size"] + $lon) * $perpix); } +$text .= "player_x=".$x."&"; +$text .= "player_y=".$y."&"; + +$users = doquery("SELECT * FROM {{table}} WHERE world='".$worldrow["id"]."' AND UNIX_TIMESTAMP(onlinetime) >= '".(time()-600)."' AND id != '".$userrow["id"]."'", "users"); +$text .= "users=".mysql_num_rows($users)."&"; +$count = 0; +while ($b = mysql_fetch_array($users)) { + $lat = $b["latitude"]; + $lon = $b["longitude"]; + if ($lat >= 0) { $y = ceil(($worldrow["size"] - $lat) * $perpix); } else { $y = 50 + ceil(($lat * -1) * $perpix); } + if ($lon >= 0) { $x = 50 + ceil($lon * $perpix); } else { $x = ceil(($worldrow["size"] + $lon) * $perpix); } + $text .= "user".$count."_x=".$x."&"; + $text .= "user".$count."_y=".$y."&"; + $count++; +} + +echo($text); + +?> \ No newline at end of file diff --git a/mapmini.swf b/mapmini.swf new file mode 100644 index 0000000000000000000000000000000000000000..90b35986467c20e0dfc21e4c88f882b56ac4478a GIT binary patch literal 1068 zcmV+{1k?LNS5pU(1^@tfoTXF^Xd7i1elPcvOPjxTYqMb^Et{mlP*ZgZrZp)=s!-cf zYMmRSxh9v~)oU*1EA>!DwwN!>Ku-O$E)}L9ORyI_sbDOTT zFsY^SyGzn;Y#oAuyx;SF&->l`yzjl=abO++Vmp8ygL+LSlX2^M000A$0tym8j0U`3 z(eG_PJ(d0=exUauVtV$S!Ql^9f>%CYo=Jat#f@J(lF}GrY(km?fSsN4Eztrm-HWcG< z!D@#y@E}UB0S}(W(^wq_mpnkC9WZY?zK~itQFPJ_8J!tz;7H^kMPVoyJjiz&^{Q|j zq7obF==OnI$Dti!y_BGryXf;ymg480^Gw+B{>N=2vjOklm*Lz4`x7Sf%)s=XMLZS6 z7YyaA^xOE=)AOXinfiIuv(GyGUHt{24Non;8#!4K=(|1|7@F=~+OtTe#>+e5;W7K~ zS>tgjDF_QpPhR^QXiuBhZar|qaJGCi>Dtn#8E8CPVBYJfuA3Vw z3HR?zpK^FiE+>9%<=3OH9ewpYUGa>4{F7U*ftFLVZ?^7w|DgF7ZP!O%?&?2SoVqbr z82Q3EH85WK=+Z=W>7TB;zpPV-Z`MTrS#}BT3FznnnPb=cbQenGL615Il4{pR0;PMQwNY8R`4C?f=EBe@GX8c31&SdB zsy^!nLBVes^DcU8T`-3w3sGGZ1EY{6fW{HkpzIP2Luf25 z3M9*t1|V>n(&EZ!VzjmuaT-hR5x1YB8=4SB-iy+y6k$nHKxk;1Ae*yDM-a_QAc^v{ zSQVtmYq1{EKwCyRSa6q+!g~urR)0r&WDWl*>HQmIyuCrD`!vYBVS`K?H^}t=8id>; zy0``jps}?Q=uMuQq!t~~V#upmPqvvZDQi~TqB6v*Y_7=CR!i7~Mh#^AFpZ$M}mj17xi-|FkFT#iAr<&OK zi+sp0#%ts1QYD7jP^ArFHlYl*+b`BioES&5Zgbc|YBU0I-Y;{tJ9ao79LoneS%m@{ zK)~sc#c*~Jg-#|?+ax*!(Z|TV7*a4wED8!C)xN|^4oPO@sH6}PR^s---Trent Reznor"; + display("LMFAO!", $page); + +} + +function version() { + + global $version, $bname, $bdate, $bnumber; + +$page = << +Version Number:$version +Build Number:$bnumber +Build Name:$bname +Build Date:$bdate +View the Changelog + +END; + + display("Version Information",$page); + +} + +function babblebox2() { + + global $userrow, $controlrow; + + if (isset($_GET["g"])) { + if (!is_numeric($_GET["g"])) { err("Invalid input."); } + $g = "WHERE guild='".$_GET["g"]."'"; + $g2 = ", guild='".$_GET["g"]."'"; + $row["guild"] = "&g=".$_GET["g"]; + } else { + $g = "WHERE guild='0'"; + $row["guild"] = ""; + } + + if (isset($_POST["babble"])) { + + // Add new shout. + if (trim($_POST["babble"]) != "") { + $insert = doquery("INSERT INTO {{table}} SET id='', posttime=NOW(), charid='".$userrow["id"]."', charname='".$userrow["charname"]."', content='".$_POST["babble"]."' $g2", "babblebox"); + } + + // Only keep 20 shouts in DB at any one time. + $check = doquery("SELECT * FROM {{table}} $g", "babblebox"); + if (mysql_num_rows($check) > 20) { + $delete1 = dorow(doquery("SELECT id FROM {{table}} $g ORDER BY id LIMIT 1", "babblebox")); + $delete2 = doquery("DELETE FROM {{table}} WHERE id='".$delete1["id"]."' LIMIT 1", "babblebox"); + } + + // And we're done. + die(header("Location: index.php?do=babblebox".$row["guild"])); + + } + + $shouts = doquery("SELECT * FROM {{table}} $g ORDER BY id LIMIT 20", "babblebox"); + $row["shouts"] = ""; + $background = 1; + if (mysql_num_rows($shouts) > 0) { + while ($b = mysql_fetch_array($shouts)) { + $row["shouts"] .= "
[".$b["charname"]."] ".$b["content"]."
\n"; + if ($background == 1) { $background = 2; } else { $background = 1; } + } + } else { + $row["shouts"] = "
No shouts.
"; + } + + $page = parsetemplate(gettemplate("misc_babblebox"),$row); + if ($controlrow["compression"] == 1) { ob_start("ob_gzhandler"); } + echo $page; + die(); + +} + +function showmap() { + + global $controlrow; + + $page = gettemplate("misc_showmap"); + if ($controlrow["compression"] == 1) { ob_start("ob_gzhandler"); } + echo $page; + die(); + +} + + +?> \ No newline at end of file diff --git a/panels.php b/panels.php new file mode 100644 index 0000000..9c1812e --- /dev/null +++ b/panels.php @@ -0,0 +1,197 @@ +$b) { + $townstring .= "id='$b' OR "; + } + $townstring = rtrim($townstring, " OR "); + $townstring .= ") AND world='".$userrow["world"]."'"; + + // Then we do the query. + $traveltoquery = doquery("SELECT id,name FROM {{table}} WHERE $townstring ORDER BY id", "towns"); + $traveltorow = dorow($traveltoquery); + + // Finally we build the link list. + if ($userrow["townslist"] != "0,1") { // Multiple towns means multiple arrays. + foreach($traveltorow as $c=>$d) { + $row["travelto"] .= "".$d["name"]."
\n"; + } + } else { // One town means one array. + $row["travelto"] .= "".$traveltorow["name"]."
\n"; + } + + // And then we're done with this panel. + return parsetemplate(gettemplate("panels_left"), $row); + +} + +function panelright() { + + global $controlrow; + $row["babblebox"] = ""; + $row["whosonline"] = ""; + + // Babblebox. + if ($controlrow["showshout"] == 1) { + $row["babblebox"] = "
Babblebox
"; + $row["babblebox"] .= ""; + } + + // Who's Online. + if ($controlrow["showonline"] == 1) { + $row["whosonline"] = "
Who's Online
"; + $users = doquery("SELECT * FROM {{table}} WHERE UNIX_TIMESTAMP(onlinetime) >= '".(time()-600)."'", "users"); + $number = mysql_num_rows($users); + $row["whosonline"] .= "There are $number user(s) online within the last 10 minutes: "; + while($b = mysql_fetch_array($users)) { + if ($b["guild"] != 0) { + $charname = "[".$b["guildtag"]."]".$b["charname"].""; + } else { + $charname = $b["charname"]; + } + $row["whosonline"] .= "$charname, "; + } + $row["whosonline"] = rtrim($row["whosonline"], ", "); + } + + // And then we're done with this panel. + return parsetemplate(gettemplate("panels_right"), $row); + +} + +function paneltop($loggedin = true) { + + global $acctrow, $userrow; + if ($loggedin == true || isset($acctrow)) { + + if ($userrow == false) { $userrow["charname"] = "No Characters Yet"; } + if ($acctrow["authlevel"] == 2) { $admin = " (Admin)"; } else { $admin = ""; } + if ($userrow["guild"] != 0) { + $charname = "[".$userrow["guildtag"]."]".$userrow["charname"].""; + } else { + $charname = $userrow["charname"]; + } + $top = "
\n
$charname$admin
\n"; + $top .= "[ Log Out | Account | Characters | Help ]\n"; + $top .= "
\n"; + + } else { + + $top = "
\n
Not Logged In
\n"; + $top .= "[ Log In | Register | Help ]\n"; + $top .= "
\n"; + + } + + return $top; + +} + +function panelbottom() { + + global $userrow; + $row = array(); + + if ($userrow["charpicture"] != "") { + $row["charpicture"] = $userrow["charpicture"]; + } else { + $row["charpicture"] = "images/users/nopicture.gif"; + } + + $row["level"] = $userrow["level"]; + if ($userrow["levelup"] > 0) { $row["levelup"] = "(".$userrow["levelup"]." LP)"; } else { $row["levelup"] = ""; } + if ($userrow["levelspell"] > 0) { $row["levelspell"] = "(".$userrow["levelspell"]." SP)"; } else { $row["levelspell"] = ""; } + $row["experience"] = number_format($userrow["experience"]); + $row["gold"] = number_format($userrow["gold"]); + $row["weapon"] = $userrow["item1name"]; + $row["armor"] = $userrow["item2name"]; + $row["helmet"] = $userrow["item3name"]; + $row["shield"] = $userrow["item4name"]; + $row["hpbar"] = statusbars("hp", $userrow["currenthp"], $userrow["maxhp"]); + $row["mpbar"] = statusbars("mp", $userrow["currentmp"], $userrow["maxmp"]); + $row["tpbar"] = statusbars("tp", $userrow["currenttp"], $userrow["maxtp"]); + + + return parsetemplate(gettemplate("panels_bottom"),$row); + +} + +function panelmiddle() { + + global $userrow, $townrow, $worldrow; + + + + return gettemplate("panels_middle"); + +} + +function statusbars($stat, $current, $max) { + + $row = array(); + switch ($stat) { + case "hp": + $row["bigname"] = "Hit Points"; + $row["littlename"] = "HP"; + break; + case "mp": + $row["bigname"] = "Magic Points"; + $row["littlename"] = "MP"; + break; + case "tp": + $row["bigname"] = "Travel Points"; + $row["littlename"] = "TP"; + break; + case "exp": + $row["bigname"] = "Experience"; + $row["littlename"] = "Exp"; + break; + } + + $row["width"] = ceil(($current / $max) * 100); + if ($row["width"] >= 66) { $row["color"] = "green"; } + if ($row["width"] < 66 && $row["width"] >= 33) { $row["color"] = "yellow"; } + if ($row["width"] < 33) { $row["color"] = "red"; } + + $row["current"] = $current; + $row["max"] = $max; + return parsetemplate(gettemplate("statusbars"),$row); + +} + +?> \ No newline at end of file diff --git a/pvp.php b/pvp.php new file mode 100644 index 0000000..8d7decd --- /dev/null +++ b/pvp.php @@ -0,0 +1,411 @@ +"; + } else { + $newuserrow["avatar"] = "\"".$newuserrow["charname"]."\""; + } + + if (isset($_POST["yes"])) { + + $query = doquery("UPDATE {{table}} SET accepted='1' WHERE id='".$userrow["currentpvp"]."' LIMIT 1", "pvp"); + $query = doquery("UPDATE {{table}} SET currentaction='Duelling' WHERE id='".$pvp["player1id"]."' OR id='".$pvp["player2id"]."' LIMIT 2", "users"); + dofight(); + + } elseif (isset($_POST["no"])) { + + $query = doquery("UPDATE {{table}} SET accepted='2',playerturn=player1id WHERE id='".$userrow["currentpvp"]."' LIMIT 1", "pvp"); + $query = doquery("UPDATE {{table}} SET currentaction='In Town', currentpvp='0' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + display("Duel Challenge",parsetemplate(gettemplate("pvp_decline"),$newuserrow)); + + } else { + + display("Duel Challenge",parsetemplate(gettemplate("pvp_challenged"),$newuserrow)); + + } + +} + +function dowait() { + + global $userrow, $monsterrow, $fightrow; + $pvp = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["currentpvp"]."' LIMIT 1", "pvp")); + + // "monsterrow" now becomes the other player's character. + if ($pvp["player1id"] == $userrow["id"]) { + $monsterrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$pvp["player2id"]."' LIMIT 1", "users")); + } else { + $monsterrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$pvp["player1id"]."' LIMIT 1", "users")); + } + + $pagerow = array( + "message"=>$fightrow["message"], + "charname"=>$monsterrow["charname"], + "currenthp"=>$monsterrow["currenthp"], + "playerphysdamage"=>$fightrow["playerphysdamage"], + "playermagicdamage"=>$fightrow["playermagicdamage"], + "playerfiredamage"=>$fightrow["playerfiredamage"], + "playerlightdamage"=>$fightrow["playerlightdamage"]); + if ($monsterrow["charpicture"] != "") { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } else { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } + + display("Duelling",parsetemplate(gettemplate("pvp_wait"),$pagerow)); + +} + +function dofight() { + + global $userrow, $monsterrow, $fightrow, $spells; + $pvp = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["currentpvp"]."' LIMIT 1", "pvp")); + + // "monsterrow" now becomes the other player's character. + if ($pvp["player1id"] == $userrow["id"]) { + $nextplayer = $pvp["player2id"]; + $monsterrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$pvp["player2id"]."' LIMIT 1", "users")); + } else { + $nextplayer = $pvp["player1id"]; + $monsterrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$pvp["player1id"]."' LIMIT 1", "users")); + } + + if (isset($_POST["fight"])) { + + playerturn(); + if ($monsterrow["currenthp"] <= 0) { youwin(); } + updateopponent(); + + $fightrowimploded = $fightrow["playerphysdamage"].",".$fightrow["playermagicdamage"].",".$fightrow["playerfiredamage"].",".$fightrow["playerlightdamage"].",".$fightrow["message"]; + $query = doquery("UPDATE {{table}} SET fightrow='$fightrowimploded', playerturn='$nextplayer' WHERE id='".$pvp["id"]."' LIMIT 1", "pvp"); + + $pagerow = array( + "message"=>$fightrow["message"], + "charname"=>$monsterrow["charname"], + "currenthp"=>$monsterrow["currenthp"], + "playerphysdamage"=>$fightrow["playerphysdamage"], + "playermagicdamage"=>$fightrow["playermagicdamage"], + "playerfiredamage"=>$fightrow["playerfiredamage"], + "playerlightdamage"=>$fightrow["playerlightdamage"]); + $pagerow["spells"] = dospellslist(); + + if ($monsterrow["charpicture"] != "") { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } else { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } + + display("Duelling",parsetemplate(gettemplate("pvp_wait"),$pagerow)); + + } elseif (isset($_POST["spell"])) { + + if (! is_numeric($_POST["spellid"])) { err("Invalid spell selection."); } + $isavailable = 0; + for ($i = 1; $i < 11; $i++) { + if ($userrow["spell".$i."id"] == $_POST["spellid"]) { $isavailable = 1; } + } + if ($isavailable == 0) { err("You don't have that spell."); } + + include("spells.php"); + $fightrow["message"] = $spells[$_POST["spellid"]]["fname"]($_POST["spellid"]); + $monsterrow["currenthp"] -= ($fightrow["playerphysdamage"] + $fightrow["playermagicdamage"] + $fightrow["playerfiredamage"] + $fightrow["playerlightdamage"]); + if ($monsterrow["currenthp"] <= 0) { youwin(); } + updateopponent(); + + $fightrowimploded = $fightrow["playerphysdamage"].",".$fightrow["playermagicdamage"].",".$fightrow["playerfiredamage"].",".$fightrow["playerlightdamage"].",".$fightrow["message"]; + $query = doquery("UPDATE {{table}} SET fightrow='$fightrowimploded', playerturn='$nextplayer' WHERE id='".$pvp["id"]."' LIMIT 1", "pvp"); + + $pagerow = array( + "message"=>$fightrow["message"], + "charname"=>$monsterrow["charname"], + "currenthp"=>$monsterrow["currenthp"], + "playerphysdamage"=>$fightrow["playerphysdamage"], + "playermagicdamage"=>$fightrow["playermagicdamage"], + "playerfiredamage"=>$fightrow["playerfiredamage"], + "playerlightdamage"=>$fightrow["playerlightdamage"]); + $pagerow["spells"] = dospellslist(); + + if ($monsterrow["charpicture"] != "") { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } else { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } + + display("Fighting",parsetemplate(gettemplate("pvp_wait"),$pagerow)); + + } + + if ($pvp["fightrow"] != "") { + + $tempfightrow = explode(",",$pvp["fightrow"]); + $fightrow["playerphysdamage"] = $tempfightrow[0]; + $fightrow["playermagicdamage"] = $tempfightrow[1]; + $fightrow["playerfiredamage"] = $tempfightrow[2]; + $fightrow["playerlightdamage"] = $tempfightrow[3]; + $fightrow["message"] = $tempfightrow[4]; + + $pagerow = array( + "message"=>$fightrow["message"], + "charname"=>$monsterrow["charname"], + "currenthp"=>$monsterrow["currenthp"], + "playerphysdamage"=>$fightrow["playerphysdamage"], + "playermagicdamage"=>$fightrow["playermagicdamage"], + "playerfiredamage"=>$fightrow["playerfiredamage"], + "playerlightdamage"=>$fightrow["playerlightdamage"]); + $pagerow["spells"] = dospellslist(); + + if ($monsterrow["charpicture"] != "") { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } else { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } + + display("Duelling",parsetemplate(gettemplate("pvp_turn"),$pagerow)); + + } else { + + $pagerow = array( + "charname"=>$monsterrow["charname"], + "currenthp"=>$monsterrow["currenthp"]); + $pagerow["spells"] = dospellslist(); + + if ($monsterrow["charpicture"] != "") { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } else { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } + + display("Duelling",parsetemplate(gettemplate("pvp_new"),$pagerow)); + + } + +} + +function playerturn() { + + global $userrow, $monsterrow, $fightrow; + + // Calculate all damages. + if ($userrow["physattack"] != 0) { + $physhit = ceil(rand($userrow["physattack"]*.75, $userrow["physattack"]) / 3); + $physblock = ceil(rand($monsterrow["physdefense"]*.75, $monsterrow["physdefense"]) / 3); + $fightrow["playerphysdamage"] = max($physhit - $physblock, 0); + } else { $fightrow["playerphysdamage"] = 0; } + + if ($userrow["magicattack"] != 0) { + $magichit = ceil(rand($userrow["magicattack"]*.75, $userrow["magicattack"]) / 3); + $magicblock = ceil(rand($monsterrow["magicdefense"]*.75, $monsterrow["magicdefense"]) / 3); + $fightrow["playermagicdamage"] = max($magichit - $magicblock, 0); + } else { $fightrow["playermagicdamage"] = 0; } + + if ($userrow["fireattack"] != 0) { + $firehit = ceil(rand($userrow["fireattack"]*.75, $userrow["fireattack"]) / 3); + $fireblock = ceil(rand($monsterrow["firedefense"]*.75, $monsterrow["firedefense"]) / 3); + $fightrow["playerfiredamage"] = max($firehit - $fireblock, 0); + } else { $fightrow["playerfiredamage"] = 0; } + + if ($userrow["lightattack"] != 0) { + $lighthit = ceil(rand($userrow["lightattack"]*.75, $userrow["lightattack"]) / 3); + $lightblock = ceil(rand($monsterrow["lightdefense"]*.75, $monsterrow["lightdefense"]) / 3); + $fightrow["playerlightdamage"] = max($lighthit - $lightblock, 0); + } else { $fightrow["playerlightdamage"] = 0; } + + // Chance to make an excellent hit. + $toexcellent = rand(0,150); + if ($toexcellent <= sqrt($userrow["strength"])) { + $fightrow["playerphysdamage"] *= 2; + $fightrow["playermagicdamage"] *= 2; + $fightrow["playerfiredamage"] *= 2; + $fightrow["playerlightdamage"] *= 2; + $fightrow["message"] = "Excellent hit!
"; + } + + // Chance for monster to dodge. + $tododge = rand(0,200); + if ($tododge <= sqrt($monsterrow["physdefense"])) { + $fightrow["playerphysdamage"] = 0; + $fightrow["playermagicdamage"] = 0; + $fightrow["playerfiredamage"] = 0; + $fightrow["playerlightdamage"] = 0; + $fightrow["message"] = "".$monsterrow["charname"]." dodged the hit!
"; + } + + // Now we add Per Turn mods. + hpleech("player"); + mpleech("player"); + + // Subtract all damage from monster's hp. + $monsterrow["currenthp"] -= ($fightrow["playerphysdamage"] + $fightrow["playermagicdamage"] + $fightrow["playerfiredamage"] + $fightrow["playerlightdamage"]); + +} + +function youwin() { + + global $userrow, $monsterrow, $fightrow; + $pvp = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["currentpvp"]."' LIMIT 1", "pvp")); + + // "monsterrow" now becomes the other player's character. + if ($pvp["player1id"] == $userrow["id"]) { + $nextplayer = $pvp["player2id"]; + } else { + $nextplayer = $pvp["player1id"]; + } + + $template = "pvp_win"; + + $userrow["currentaction"] = "In Town"; + $userrow["currentfight"] = 0; + $userrow["currentpvp"] = 0; + + // Now we add Per Kill mods. + hpgain(); + mpgain(); + + // Update for new stats. + updateopponent(); + updateuserrow(); + $fightrowimploded = $fightrow["playerphysdamage"].",".$fightrow["playermagicdamage"].",".$fightrow["playerfiredamage"].",".$fightrow["playerlightdamage"].",".$fightrow["message"]; + $query = doquery("UPDATE {{table}} SET fightrow='$fightrowimploded', playerturn='$nextplayer' WHERE id='".$pvp["id"]."' LIMIT 1", "pvp"); + + // And we're done. + $pagerow = array( + "message"=>$fightrow["message"], + "monstername"=>$monsterrow["charname"], + "monsterhp"=>$userrow["currentmonsterhp"], + "playerphysdamage"=>$fightrow["playerphysdamage"], + "playermagicdamage"=>$fightrow["playermagicdamage"], + "playerfiredamage"=>$fightrow["playerfiredamage"], + "playerlightdamage"=>$fightrow["playerlightdamage"]); + + if ($monsterrow["charpicture"] != "") { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } else { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } + + display("Victory!",parsetemplate(gettemplate($template),$pagerow)); + +} + +function youlose() { + + global $userrow, $monsterrow, $fightrow; + $pvp = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["currentpvp"]."' LIMIT 1", "pvp")); + + if ($pvp["player1id"] == $userrow["id"]) { + $monsterrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$pvp["player2id"]."' LIMIT 1", "users")); + } else { + $monsterrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$pvp["player1id"]."' LIMIT 1", "users")); + } + + $tempfightrow = explode(",",$pvp["fightrow"]); + $fightrow["playerphysdamage"] = $tempfightrow[0]; + $fightrow["playermagicdamage"] = $tempfightrow[1]; + $fightrow["playerfiredamage"] = $tempfightrow[2]; + $fightrow["playerlightdamage"] = $tempfightrow[3]; + $fightrow["message"] = $tempfightrow[4]; + + // Then put them in town & reset fight stuff. + $userrow["currentaction"] = "In Town"; + $userrow["currentfight"] = 0; + $userrow["currentpvp"] = 0; + $userrow["currenthp"] = ceil($userrow["maxhp"] / 4); + + // Update. + updateuserrow(); + $query = doquery("DELETE FROM {{table}} WHERE id='".$pvp["id"]."' LIMIT 1", "pvp"); + + // And we're done. + $pagerow = array( + "message"=>$fightrow["message"], + "monstername"=>$monsterrow["charname"], + "monsterhp"=>$userrow["currentmonsterhp"], + "playerphysdamage"=>$fightrow["playerphysdamage"], + "playermagicdamage"=>$fightrow["playermagicdamage"], + "playerfiredamage"=>$fightrow["playerfiredamage"], + "playerlightdamage"=>$fightrow["playerlightdamage"]); + + if ($monsterrow["charpicture"] != "") { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } else { + $pagerow["avatar"] = "\"".$monsterrow["charname"]."\""; + } + + display("Thou Art Dead.",parsetemplate(gettemplate("pvp_lose"),$pagerow)); + +} + +function updateopponent() { + + global $monsterrow; + + $querystring = ""; + foreach($monsterrow as $a=>$b) { + $querystring .= "$a='$b',"; + } + $querystring = rtrim($querystring, ","); + + $query = doquery("UPDATE {{table}} SET $querystring WHERE id='".$monsterrow["id"]."' LIMIT 1", "users"); + +} + +function dospellslist() { + + global $userrow, $spells; + $options = ""; + for ($i = 1; $i < 11; $i++) { + if ($userrow["spell".$i."id"] != 0) { + $options .= "\n"; + } + } + if ($options != "") { + $list = " "; + } else { $list = ""; } + return $list; + +} + +?> \ No newline at end of file diff --git a/pvpmini.php b/pvpmini.php new file mode 100644 index 0000000..dad1c29 --- /dev/null +++ b/pvpmini.php @@ -0,0 +1,54 @@ +
This window will refresh to the main screen in ".$controlrow["pvprefresh"]." seconds."; + $pagerow["target"] = "_top"; + $pagerow["parentreload"] = "onload=\"setTimeout('top.location.href=\'index.php\'',".($controlrow["pvprefresh"] * 1000).")\""; + $pagerow["metareload"] = ""; + + $page = parsetemplate(gettemplate("pvp_mini"),$pagerow); + if ($controlrow["compression"] == 1) { ob_start("ob_gzhandler"); } + echo $page; + die(); + +} + +// No timeout so check for whose turn it is. +if ($row["playerturn"] == $userrow["id"]) { + + $pagerow["content"] = "Please hold while this window refreshes to the game screen..."; + $pagerow["target"] = "_top"; + $pagerow["metareload"] = ""; + $pagerow["parentreload"] = "onload=\"setTimeout('top.location.href=\'pvp.php\'',".($controlrow["pvprefresh"] * 100).")\""; + $pagerow["metareload"] = ""; + + $page = parsetemplate(gettemplate("pvp_mini"),$pagerow); + if ($controlrow["compression"] == 1) { ob_start("ob_gzhandler"); } + echo $page; + die(); + +} else { + + $pagerow["content"] = "Waiting for player to respond..."; + $pagerow["target"] = "_self"; + $pagerow["parentreload"] = ""; + $pagerow["metareload"] = ""; + + $page = parsetemplate(gettemplate("pvp_mini"),$pagerow); + if ($controlrow["compression"] == 1) { ob_start("ob_gzhandler"); } + echo $page; + die(); + +} + +?> \ No newline at end of file diff --git a/spells.php b/spells.php new file mode 100644 index 0000000..eaf111e --- /dev/null +++ b/spells.php @@ -0,0 +1,97 @@ +Spell Failed: You do not have enough MP to cast that spell.
"; $failed = 1; } + + if ($failed == 0) { + $userrow["currenthp"] += $spells[$id]["value"]; + $userrow["currentmp"] -= $spells[$id]["mp"]; + if ($userrow["currenthp"] > $userrow["maxhp"]) { $userrow["currenthp"] = $userrow["maxhp"]; } + $return = $userrow["charname"] . " casts " . $spells[$id]["name"] . " and gains " . $spells[$id]["value"] . " HP.
"; + } + + return($return); + +} + +function hurt($id) { + + global $userrow, $monsterrow, $fightrow, $spells; + + $failed = 0; + if ($userrow["currentmp"] < $spells[$id]["mp"]) { $return = "Spell Failed: You do not have enough MP to cast that spell.
"; $failed = 1; } + + if ($failed == 0) { + $userrow["currentmp"] -= $spells[$id]["mp"]; + $magichit = ceil(rand($spells[$id]["value"]*.75, $spells[$id]["value"])); + $magicblock = ceil(rand($monsterrow["magicdefense"]*.75, $monsterrow["magicdefense"]) / 5); + $fightrow["playermagicdamage"] = max($magichit - $magicblock, 0); + $return = $userrow["charname"] . " casts " . $spells[$id]["name"] . " for " . $fightrow["playermagicdamage"] . " damage.
"; + } + + return($return); + +} + +function fire($id) { + + global $userrow, $monsterrow, $fightrow, $spells; + + $failed = 0; + if ($userrow["currentmp"] < $spells[$id]["mp"]) { $return = "Spell Failed: You do not have enough MP to cast that spell.
"; $failed = 1; } + + if ($failed == 0) { + $userrow["currentmp"] -= $spells[$id]["mp"]; + $magichit = ceil(rand($spells[$id]["value"]*.75, $spells[$id]["value"])); + $magicblock = ceil(rand($monsterrow["firedefense"]*.75, $monsterrow["firedefense"]) / 5); + $fightrow["playerfiredamage"] = max($magichit - $magicblock, 0); + $return = $userrow["charname"] . " casts " . $spells[$id]["name"] . " for " . $fightrow["playerfiredamage"] . " damage.
"; + } + + return($return); + +} + +function light($id) { + + global $userrow, $monsterrow, $fightrow, $spells; + + $failed = 0; + if ($userrow["currentmp"] < $spells[$id]["mp"]) { $return = "Spell Failed: You do not have enough MP to cast that spell.
"; $failed = 1; } + + if ($failed == 0) { + $userrow["currentmp"] -= $spells[$id]["mp"]; + $magichit = ceil(rand($spells[$id]["value"]*.75, $spells[$id]["value"])); + $magicblock = ceil(rand($monsterrow["lightdefense"]*.75, $monsterrow["lightdefense"]) / 5); + $fightrow["playerlightdamage"] = max($magichit - $magicblock, 0); + $return = $userrow["charname"] . " casts " . $spells[$id]["name"] . " for " . $fightrow["playerlightdamage"] . " damage.
"; + } + + return($return); + +} + +function prism($id) { + + global $userrow, $monsterrow, $fightrow, $spells; + + $failed = 0; + if ($userrow["currentmp"] < $spells[$id]["mp"]) { $return = "Spell Failed: You do not have enough MP to cast that spell.
"; $failed = 1; } + + if ($failed == 0) { + $userrow["currentmp"] -= $spells[$id]["mp"]; + $magichit = ceil(rand($spells[$id]["value"]*.75, $spells[$id]["value"])); + $magicblock = ceil(rand($monsterrow["lightdefense"]*.75, $monsterrow["lightdefense"]) / 5); + $fightrow["playerlightdamage"] = max($magichit - $magicblock, 0); + $return = $userrow["charname"] . " casts " . $spells[$id]["name"] . " for " . $fightrow["playerlightdamage"] . " damage.
"; + } + + return($return); + +} + +?> \ No newline at end of file diff --git a/templates/botcheck.php b/templates/botcheck.php new file mode 100644 index 0000000..80e96ed --- /dev/null +++ b/templates/botcheck.php @@ -0,0 +1,12 @@ + +{{images}}
+
+ + +END; + +?> \ No newline at end of file diff --git a/templates/explore.php b/templates/explore.php new file mode 100644 index 0000000..e37ebed --- /dev/null +++ b/templates/explore.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/templates/explore_verify.php b/templates/explore_verify.php new file mode 100644 index 0000000..44c0d6a --- /dev/null +++ b/templates/explore_verify.php @@ -0,0 +1,12 @@ + +In order to prevent macros and robots from abusing the game, you must verify that you are able to read the following image. Please enter the 6 character code you see in the image into the form box below to continue playing. Thank you.

+Human Verification

+Verification Code:
+ + +END; + +?> \ No newline at end of file diff --git a/templates/fight_level.php b/templates/fight_level.php new file mode 100644 index 0000000..eea972b --- /dev/null +++ b/templates/fight_level.php @@ -0,0 +1,13 @@ +{{monstername}}.

+{{message}} +You attack the monster for ({{playerphysdamage}}|{{playermagicdamage}}|{{playerfiredamage}}|{{playerlightdamage}}) damage.

+You have defeated the {{monstername}}.
+You gain {{newexp}} Experience.
+You gain {{newgold}} Gold.

+You may now continue exploring. +END; + +?> \ No newline at end of file diff --git a/templates/fight_levelup.php b/templates/fight_levelup.php new file mode 100644 index 0000000..c967a4e --- /dev/null +++ b/templates/fight_levelup.php @@ -0,0 +1,15 @@ +{{monstername}}.

+{{message}} +You attack the monster for ({{playerphysdamage}}|{{playermagicdamage}}|{{playerfiredamage}}|{{playerlightdamage}}) damage.

+You have defeated the {{monstername}}.
+You gain {{newexp}} Experience.
+You gain {{newgold}} Gold.

+You have gained a level! You have 5 Level Points to spend on your character
+Level points can be accessed in your Extended Profile.


+You may now continue exploring. +END; + +?> \ No newline at end of file diff --git a/templates/fight_levelupspell.php b/templates/fight_levelupspell.php new file mode 100644 index 0000000..be57108 --- /dev/null +++ b/templates/fight_levelupspell.php @@ -0,0 +1,15 @@ +{{monstername}}.

+{{message}} +You attack the monster for ({{playerphysdamage}}|{{playermagicdamage}}|{{playerfiredamage}}|{{playerlightdamage}}) damage.

+You have defeated the {{monstername}}.
+You gain {{newexp}} Experience.
+You gain {{newgold}} Gold.

+You have gained a level! You have 5 Level Points and 1 Spell Point to spend on your character
+Level points can be accessed in your Extended Profile.


+You may now continue exploring. +END; + +?> \ No newline at end of file diff --git a/templates/fight_lose.php b/templates/fight_lose.php new file mode 100644 index 0000000..c14e23a --- /dev/null +++ b/templates/fight_lose.php @@ -0,0 +1,14 @@ +{{monstername}}.
+Monster's HP: {{monsterhp}}

+{{message}} +You attack the monster for ({{playerphysdamage}}|{{playermagicdamage}}|{{playerfiredamage}}|{{playerlightdamage}}) damage.

+The monster attacks you for ({{monsterphysdamage}}|{{monstermagicdamage}}|{{monsterfiredamage}}|{{monsterlightdamage}}) damage.

+You have died.

+As a consequence, you've lost half of your gold and {{deathpenalty}} percent of your experience. You have been sent to town given back a portion of your hit points to continue your journey.

+You may now continue playing, and you should probably hope that you fair better next time. +END; + +?> \ No newline at end of file diff --git a/templates/fight_new.php b/templates/fight_new.php new file mode 100644 index 0000000..91d189c --- /dev/null +++ b/templates/fight_new.php @@ -0,0 +1,14 @@ +{{monstername}}.
+Monster's HP: {{monsterhp}}

+Command? +
+
+{{spells}}
+ +
+END; + +?> \ No newline at end of file diff --git a/templates/fight_turn.php b/templates/fight_turn.php new file mode 100644 index 0000000..4a21728 --- /dev/null +++ b/templates/fight_turn.php @@ -0,0 +1,17 @@ +{{monstername}}.
+Monster's HP: {{monsterhp}}

+{{message}} +You attack the monster for ({{playerphysdamage}}|{{playermagicdamage}}|{{playerfiredamage}}|{{playerlightdamage}}) damage.

+The monster attacks you for ({{monsterphysdamage}}|{{monstermagicdamage}}|{{monsterfiredamage}}|{{monsterlightdamage}}) damage.

+Command? +
+
+{{spells}}
+ +
+END; + +?> \ No newline at end of file diff --git a/templates/fight_win.php b/templates/fight_win.php new file mode 100644 index 0000000..eea972b --- /dev/null +++ b/templates/fight_win.php @@ -0,0 +1,13 @@ +{{monstername}}.

+{{message}} +You attack the monster for ({{playerphysdamage}}|{{playermagicdamage}}|{{playerfiredamage}}|{{playerlightdamage}}) damage.

+You have defeated the {{monstername}}.
+You gain {{newexp}} Experience.
+You gain {{newgold}} Gold.

+You may now continue exploring. +END; + +?> \ No newline at end of file diff --git a/templates/guild_apply.php b/templates/guild_apply.php new file mode 100644 index 0000000..53991ac --- /dev/null +++ b/templates/guild_apply.php @@ -0,0 +1,15 @@ + +
+Guild Statement for {{name}}:

+{{statement}} +


+Applying for this Guild costs {{joincost}} gold. This is non-refundable. Are you sure you want to apply to this Guild?

+
+ +
+END; + +?> \ No newline at end of file diff --git a/templates/guild_create.php b/templates/guild_create.php new file mode 100644 index 0000000..e6f7b61 --- /dev/null +++ b/templates/guild_create.php @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + +
Name:
Your Guild's full name.


Tagline:
A short abbreviation or tagline for your Guild. For example, if your Guild name is "Lords of Carnage," your tagline might be "LoC." This will appear in brackets in front of each member's name.


Name Color:
HTML color code used to display the name of your Guild, and the names of each member.
(Click here for a list of color codes.)


Tagline Color:
HTML color code used to display your Guild's tagline.
(Click here for a list of color codes.)


Cost to Join:
How much gold it will cost for a member to join your guild.


Rank 1 Title:
Lowest ranking Guild member's title.


Rank 2 Title:
2nd ranking Guild member's title.


Rank 3 Title:
3rd ranking Guild member's title.


Rank 4 Title:
4th ranking Guild member's title. These are sub-leaders for your Guild.


Rank 5 Title:
Highest ranking Guild member's title. This will be your title, as well as any other member you promote to this rank.


Opening Statement
Your Guild's introduction statement or creed.
NOTES: The cost for creating a guild is {{guildstartup}} gold.

Ranks 1 through 3 are nominal only and are all treated identically in the game. Rank 4 members can distribute Guild funds, promote other members up to Rank 3, and demote/remove members. Rank 5 members are Guild Leaders, and can do all Rank 4 tasks as well as promote members to ranks 4 and 5, and disband the Guild.
+ +END; + +?> \ No newline at end of file diff --git a/templates/guild_disband.php b/templates/guild_disband.php new file mode 100644 index 0000000..4596f69 --- /dev/null +++ b/templates/guild_disband.php @@ -0,0 +1,10 @@ +
+
+ +
+END; + +?> \ No newline at end of file diff --git a/templates/guild_edit.php b/templates/guild_edit.php new file mode 100644 index 0000000..feb5b92 --- /dev/null +++ b/templates/guild_edit.php @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + +
Name:{{name}}


Tagline:{{tagline}}


Name Color:
HTML color code used to display the name of your Guild, and the names of each member.
(Click here for a list of color codes.)


Tagline Color:
HTML color code used to display your Guild's tagline.
(Click here for a list of color codes.)


Cost to Join:
How much gold it will cost for a member to join your guild.


Rank 1 Title:
Lowest ranking Guild member's title.


Rank 2 Title:
2nd ranking Guild member's title.


Rank 3 Title:
3rd ranking Guild member's title.


Rank 4 Title:
4th ranking Guild member's title. These are sub-leaders for your Guild.


Rank 5 Title:
Highest ranking Guild member's title. This will be your title, as well as any other member you promote to this rank.


Opening Statement
Your Guild's introduction statement or creed.
+ +END; + +?> \ No newline at end of file diff --git a/templates/guild_homehigh.php b/templates/guild_homehigh.php new file mode 100644 index 0000000..e457def --- /dev/null +++ b/templates/guild_homehigh.php @@ -0,0 +1,52 @@ + + + + + + + + + + +
+
News
+
+{{news}}

+Edit +
+
+{{babblebox}} +
+
Bank
+Your Guild has {{bank}} gold.
+
+Send Gold to {{memberselect}}
+Deposit Gold +
+
+
Member Ranks
+Select a member to promote/demote.

+
+{{memberselect}}
+
+
+
Applications
+Select a user to approve/deny.

+
+{{appselect}} +
+
+
More Guild Functions
+ +


+You may also return to town or the Guild List. +END; + +?> \ No newline at end of file diff --git a/templates/guild_homelow.php b/templates/guild_homelow.php new file mode 100644 index 0000000..d345e98 --- /dev/null +++ b/templates/guild_homelow.php @@ -0,0 +1,34 @@ + + + + + + + +
+
News
+
+{{news}}

+Edit +
+
+{{babblebox}} +
+
Bank
+Your Guild has {{bank}} gold.
+
+Deposit Gold +
+
+
More Guild Functions
+ +


+You may also return to town or the Guild List. +END; + +?> \ No newline at end of file diff --git a/templates/guild_homemid.php b/templates/guild_homemid.php new file mode 100644 index 0000000..e457def --- /dev/null +++ b/templates/guild_homemid.php @@ -0,0 +1,52 @@ + + + + + + + + + + +
+
News
+
+{{news}}

+Edit +
+
+{{babblebox}} +
+
Bank
+Your Guild has {{bank}} gold.
+
+Send Gold to {{memberselect}}
+Deposit Gold +
+
+
Member Ranks
+Select a member to promote/demote.

+
+{{memberselect}}
+
+
+
Applications
+Select a user to approve/deny.

+
+{{appselect}} +
+
+
More Guild Functions
+ +


+You may also return to town or the Guild List. +END; + +?> \ No newline at end of file diff --git a/templates/guild_leave.php b/templates/guild_leave.php new file mode 100644 index 0000000..76101c7 --- /dev/null +++ b/templates/guild_leave.php @@ -0,0 +1,10 @@ +
+
+ +
+END; + +?> \ No newline at end of file diff --git a/templates/guild_list.php b/templates/guild_list.php new file mode 100644 index 0000000..a2ec388 --- /dev/null +++ b/templates/guild_list.php @@ -0,0 +1,11 @@ +start your own or submit an application to join one of the Guilds listed below.

+If you are a member of a Guild, you can also continue to your Guild's Hall.

+{{guildlist}} +
+If you've changed your mind, you may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/guild_members.php b/templates/guild_members.php new file mode 100644 index 0000000..f2c8c5d --- /dev/null +++ b/templates/guild_members.php @@ -0,0 +1,10 @@ +{{name}} Members List

+{{guildmembers}} +
+You may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/guild_news.php b/templates/guild_news.php new file mode 100644 index 0000000..4e19feb --- /dev/null +++ b/templates/guild_news.php @@ -0,0 +1,11 @@ + +Edit your Guild's news/info below.

+
+ + +END; + +?> \ No newline at end of file diff --git a/templates/guild_remove.php b/templates/guild_remove.php new file mode 100644 index 0000000..4b42763 --- /dev/null +++ b/templates/guild_remove.php @@ -0,0 +1,11 @@ +
+
+ + +
+END; + +?> \ No newline at end of file diff --git a/templates/login.php b/templates/login.php new file mode 100644 index 0000000..135fc96 --- /dev/null +++ b/templates/login.php @@ -0,0 +1,14 @@ + + + + + + +
Username:
Password:
Remember Me? Yes.
+ +END; + +?> \ No newline at end of file diff --git a/templates/mailbox_letter.php b/templates/mailbox_letter.php new file mode 100644 index 0000000..a417858 --- /dev/null +++ b/templates/mailbox_letter.php @@ -0,0 +1,18 @@ + + +{{senderavatar}} + +From: {{sendername}}
+Date: {{fpostdate}}
+Subject: {{title}}
+{{moneytransfer}} +
+{{message}}

+Reply | Delete | New Letter | Inbox | Outbox

+You may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/mailbox_letterout.php b/templates/mailbox_letterout.php new file mode 100644 index 0000000..3f1576d --- /dev/null +++ b/templates/mailbox_letterout.php @@ -0,0 +1,12 @@ +{{recipientname}}
+Date: {{fpostdate}}
+Subject: {{title}}

+{{message}}

+New Letter | Inbox | Outbox

+You may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/mailbox_list.php b/templates/mailbox_list.php new file mode 100644 index 0000000..921829c --- /dev/null +++ b/templates/mailbox_list.php @@ -0,0 +1,13 @@ +
+{{messages}} +* = New Letter.
+$ = Letter contains a Money Transfer.

+
+New Letter | Inbox | Outbox

+You may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/mailbox_listout.php b/templates/mailbox_listout.php new file mode 100644 index 0000000..09d8fe8 --- /dev/null +++ b/templates/mailbox_listout.php @@ -0,0 +1,11 @@ +
+{{messages}} +
+New Letter | Inbox | Outbox

+You may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/mailbox_listoutrow.php b/templates/mailbox_listoutrow.php new file mode 100644 index 0000000..77e2184 --- /dev/null +++ b/templates/mailbox_listoutrow.php @@ -0,0 +1,11 @@ + +{{title}} +To: {{recipientname}} +{{fpostdate}} + +END; + +?> \ No newline at end of file diff --git a/templates/mailbox_listrow.php b/templates/mailbox_listrow.php new file mode 100644 index 0000000..3b051ed --- /dev/null +++ b/templates/mailbox_listrow.php @@ -0,0 +1,11 @@ + +{{new}}{{money}}{{title}} +From: {{sendername}} +{{fpostdate}} + +END; + +?> \ No newline at end of file diff --git a/templates/mailbox_new.php b/templates/mailbox_new.php new file mode 100644 index 0000000..33d344a --- /dev/null +++ b/templates/mailbox_new.php @@ -0,0 +1,24 @@ +* are required. +The Send Gold field allows you to attach money to the letter, which will be given to the recipient when they read it.

+Note that there is a 5 Gold postage fee for sending all letters.

+
+ + + + + + +
To:* (Character Name)
Subject:*
Send Gold:
+Message:
+ +
+
+
+New Letter | Inbox | Outbox

+You may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/mailbox_reply.php b/templates/mailbox_reply.php new file mode 100644 index 0000000..6d453f4 --- /dev/null +++ b/templates/mailbox_reply.php @@ -0,0 +1,25 @@ +* are required. +The Send Gold field allows you to attach money to the letter, which will be given to the recipient when they read it.

+Note that there is a 5 Gold postage fee for sending all letters.

+
+ + + + + + +
To:{{sendername}}
Subject:*
Send Gold:
+Message:
+ +
+

+Original Message:

+{{message}}

+New Letter | Inbox | Outbox

+You may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/mailbox_sent.php b/templates/mailbox_sent.php new file mode 100644 index 0000000..bf8ef31 --- /dev/null +++ b/templates/mailbox_sent.php @@ -0,0 +1,8 @@ +
+You may now go back to your Mailbox or return to Town. +END; + +?> \ No newline at end of file diff --git a/templates/misc_babblebox.php b/templates/misc_babblebox.php new file mode 100644 index 0000000..c5d4a58 --- /dev/null +++ b/templates/misc_babblebox.php @@ -0,0 +1,35 @@ + + +Babblebox + + + +{{shouts}} +
+
+ +
+
+ + +END; + +?> \ No newline at end of file diff --git a/templates/misc_showmap.php b/templates/misc_showmap.php new file mode 100644 index 0000000..966d4f8 --- /dev/null +++ b/templates/misc_showmap.php @@ -0,0 +1,35 @@ + +Map + + +
+
+ + + + +
+Town | You | Player +
+ +END; + +?> \ No newline at end of file diff --git a/templates/panels_bottom.php b/templates/panels_bottom.php new file mode 100644 index 0000000..aee6bea --- /dev/null +++ b/templates/panels_bottom.php @@ -0,0 +1,39 @@ + + + + + + + + +
Level: {{level}}
+ Exp: {{experience}}
+ Gold: {{gold}}
+ Extended Profile +
+ + {{levelup}}
+ {{levelspell}} + + + + + + + +
Weapon:
Armor:
Helmet:
Shield:
{{weapon}}
{{armor}}
{{helmet}}
{{shield}}
+ + + + + +
{{hpbar}}
{{mpbar}}
{{tpbar}}
+ + + +END; + +?> \ No newline at end of file diff --git a/templates/panels_left.php b/templates/panels_left.php new file mode 100644 index 0000000..07d717c --- /dev/null +++ b/templates/panels_left.php @@ -0,0 +1,25 @@ +Location +{{action}} {{townname}}
+Realm: {{worldname}}
+Latitude: {{latitude}}
+Longitude: {{longitude}}

+
+North
+WestEast
+South

+
+ + + + +
+
+
Travel To
+{{travelto}} + +END; + +?> \ No newline at end of file diff --git a/templates/panels_middle.php b/templates/panels_middle.php new file mode 100644 index 0000000..b669397 --- /dev/null +++ b/templates/panels_middle.php @@ -0,0 +1,14 @@ + + + + + + + + +END; + +?> \ No newline at end of file diff --git a/templates/panels_right.php b/templates/panels_right.php new file mode 100644 index 0000000..4c1ac01 --- /dev/null +++ b/templates/panels_right.php @@ -0,0 +1,9 @@ +
+{{whosonline}} +END; + +?> \ No newline at end of file diff --git a/templates/primary.php b/templates/primary.php new file mode 100644 index 0000000..f150713 --- /dev/null +++ b/templates/primary.php @@ -0,0 +1,80 @@ + +{{gamename}} :: {{pagetitle}} + + +
+ + + + + + + + + + + + + +
+
+ {{gamename}} + + {{topnav}} +
+
+
+ {{leftnav}} +
+
+
{{pagetitle}}
+ {{content}} +
+
+
+ {{rightnav}} +
{{bottomnav}}
+ + + + + +
+ Version {{version}} / {{numqueries}} Queries / {{totaltime}} Seconds + + Dragon Scourge © 2003-2005 by renderse7en +
+
+ +END; + +?> \ No newline at end of file diff --git a/templates/primary_min.php b/templates/primary_min.php new file mode 100644 index 0000000..5e76c85 --- /dev/null +++ b/templates/primary_min.php @@ -0,0 +1,29 @@ + +{{gamename}} :: {{pagetitle}} + + + +{{content}} + + +END; + +?> \ No newline at end of file diff --git a/templates/primary_new.php b/templates/primary_new.php new file mode 100644 index 0000000..2a0455f --- /dev/null +++ b/templates/primary_new.php @@ -0,0 +1,85 @@ + +{{gamename}} :: {{pagetitle}} + + +
+ + + + + + + + + + + + + + + + +
+ + + +
{{topnav}}
+
+{{leftnav}} +
+
+
{{pagetitle}}
+{{content}} +
+
+{{rightnav}} +
{{middlenav}}
+
+{{bottomnav}} +
+
+ + + + + +
Version {{version}} / {{numqueries}} Queries / {{totaltime}} SecondsDragon Scourge © 2003-2005 by renderse7en
+ +
+ +END; + +?> \ No newline at end of file diff --git a/templates/pvp_challenge.php b/templates/pvp_challenge.php new file mode 100644 index 0000000..96f74fa --- /dev/null +++ b/templates/pvp_challenge.php @@ -0,0 +1,8 @@ +
+ +END; + +?> \ No newline at end of file diff --git a/templates/pvp_challenged.php b/templates/pvp_challenged.php new file mode 100644 index 0000000..df2f83e --- /dev/null +++ b/templates/pvp_challenged.php @@ -0,0 +1,11 @@ + +You have been challenged to a duel by {{charname}} (Level {{level}}). Do you accept?

+
+ +
+END; + +?> \ No newline at end of file diff --git a/templates/pvp_decline.php b/templates/pvp_decline.php new file mode 100644 index 0000000..911aec0 --- /dev/null +++ b/templates/pvp_decline.php @@ -0,0 +1,8 @@ +
+Click here to return to the game. +END; + +?> \ No newline at end of file diff --git a/templates/pvp_declined.php b/templates/pvp_declined.php new file mode 100644 index 0000000..13aa5d8 --- /dev/null +++ b/templates/pvp_declined.php @@ -0,0 +1,8 @@ +
+Click here to return to the game. +END; + +?> \ No newline at end of file diff --git a/templates/pvp_lose.php b/templates/pvp_lose.php new file mode 100644 index 0000000..9f50b64 --- /dev/null +++ b/templates/pvp_lose.php @@ -0,0 +1,13 @@ + +You are fighting {{monstername}}.
+{{message}} +{{monstername}} attacks you for ({{playerphysdamage}}|{{playermagicdamage}}|{{playerfiredamage}}|{{playerlightdamage}}) damage.

+You have died.

+You have been sent to town given back a portion of your hit points to continue your journey.

+You may now continue playing, and you should probably hope that you fair better next time. +END; + +?> \ No newline at end of file diff --git a/templates/pvp_mini.php b/templates/pvp_mini.php new file mode 100644 index 0000000..2ae3783 --- /dev/null +++ b/templates/pvp_mini.php @@ -0,0 +1,17 @@ + +{{metareload}} + + + + +{{content}} + + +END; + +?> \ No newline at end of file diff --git a/templates/pvp_new.php b/templates/pvp_new.php new file mode 100644 index 0000000..546e516 --- /dev/null +++ b/templates/pvp_new.php @@ -0,0 +1,15 @@ + +You are fighting {{charname}}.
+{{charname}}'s HP: {{currenthp}}

+Command? +
+
+{{spells}}
+ +
+END; + +?> \ No newline at end of file diff --git a/templates/pvp_turn.php b/templates/pvp_turn.php new file mode 100644 index 0000000..478049b --- /dev/null +++ b/templates/pvp_turn.php @@ -0,0 +1,17 @@ + +You are fighting {{charname}}.
+{{charname}}'s HP: {{currenthp}}

+{{message}} +{{charname}} attacks you for ({{playerphysdamage}}|{{playermagicdamage}}|{{playerfiredamage}}|{{playerlightdamage}}) damage.

+Command? +
+
+{{spells}}
+ +
+END; + +?> \ No newline at end of file diff --git a/templates/pvp_wait.php b/templates/pvp_wait.php new file mode 100644 index 0000000..0edfe50 --- /dev/null +++ b/templates/pvp_wait.php @@ -0,0 +1,12 @@ + +You are fighting {{charname}}.
+{{charname}}'s HP: {{currenthp}}

+{{message}} +You attack {{charname}} for ({{playerphysdamage}}|{{playermagicdamage}}|{{playerfiredamage}}|{{playerlightdamage}}) damage.

+ +END; + +?> \ No newline at end of file diff --git a/templates/pvp_win.php b/templates/pvp_win.php new file mode 100644 index 0000000..8742530 --- /dev/null +++ b/templates/pvp_win.php @@ -0,0 +1,12 @@ + +You are fighting {{monstername}}.

+{{message}} +You attack {{monstername}} for ({{playerphysdamage}}|{{playermagicdamage}}|{{playerfiredamage}}|{{playerlightdamage}}) damage.

+You have defeated {{monstername}}.
+You may now return to the game. +END; + +?> \ No newline at end of file diff --git a/templates/statusbars.php b/templates/statusbars.php new file mode 100644 index 0000000..c72de0c --- /dev/null +++ b/templates/statusbars.php @@ -0,0 +1,8 @@ +{{littlename}}: +
 {{current}} / {{max}} +END; + +?> \ No newline at end of file diff --git a/templates/town.php b/templates/town.php new file mode 100644 index 0000000..852e53a --- /dev/null +++ b/templates/town.php @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + +
Stay at the Inn




Buy Weapons and Armor




Buy Maps




Duelling Grounds




Deposit/Withdraw Gold at the Bank
Enter the Post Office
{{unread}}
Enter the Gambling Hall
View the Hall of Fame
Enter the Guild Hall
+ +END; + +?> \ No newline at end of file diff --git a/templates/town_bank1.php b/templates/town_bank1.php new file mode 100644 index 0000000..04b2f88 --- /dev/null +++ b/templates/town_bank1.php @@ -0,0 +1,13 @@ +
+You are currently storing {{formatbank}} gold in the bank, and you are carrying {{formatgold}} gold in your pocket.

+
+Enter an amount and then click the Deposit or Withdraw button:
+ +
+If you've changed your mind, you may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/town_bank2.php b/templates/town_bank2.php new file mode 100644 index 0000000..026fd3d --- /dev/null +++ b/templates/town_bank2.php @@ -0,0 +1,9 @@ +
+You are now storing {{formatbank}} gold in the bank, and you are carrying {{formatgold}} gold in your pocket.

+You may return to town, or use the direction buttons to continue exploring. +END; + +?> \ No newline at end of file diff --git a/templates/town_buy1.php b/templates/town_buy1.php new file mode 100644 index 0000000..5dd3fbc --- /dev/null +++ b/templates/town_buy1.php @@ -0,0 +1,12 @@ +
+Click an item's name to purchase it.

+The following items are available in this town:

+{{itemtable}} +
+If you've changed your mind, you may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/town_buy2_empty.php b/templates/town_buy2_empty.php new file mode 100644 index 0000000..8ac4fea --- /dev/null +++ b/templates/town_buy2_empty.php @@ -0,0 +1,8 @@ +
+
+END; + +?> \ No newline at end of file diff --git a/templates/town_buy2_full.php b/templates/town_buy2_full.php new file mode 100644 index 0000000..6185967 --- /dev/null +++ b/templates/town_buy2_full.php @@ -0,0 +1,8 @@ +
+
+END; + +?> \ No newline at end of file diff --git a/templates/town_buy3.php b/templates/town_buy3.php new file mode 100644 index 0000000..38deb79 --- /dev/null +++ b/templates/town_buy3.php @@ -0,0 +1,8 @@ +
+You may return to town, or use the direction buttons to continue exploring. +END; + +?> \ No newline at end of file diff --git a/templates/town_buy_itemrow.php b/templates/town_buy_itemrow.php new file mode 100644 index 0000000..0c6d3cf --- /dev/null +++ b/templates/town_buy_itemrow.php @@ -0,0 +1,23 @@ + +{{image}} + +{{name}}
+{{attrtype}}: {{basevalue}}
+Price: {{buycost}} Gold
+{{level}} +{{strength}} +{{dexterity}} +{{energy}} +{{itemmods}} +
+ + +
+ + +END; + +?> \ No newline at end of file diff --git a/templates/town_enter.php b/templates/town_enter.php new file mode 100644 index 0000000..dd87197 --- /dev/null +++ b/templates/town_enter.php @@ -0,0 +1,7 @@ +enter this town. +END; + +?> \ No newline at end of file diff --git a/templates/town_gamble1.php b/templates/town_gamble1.php new file mode 100644 index 0000000..a2ce1d7 --- /dev/null +++ b/templates/town_gamble1.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/templates/town_halloffame.php b/templates/town_halloffame.php new file mode 100644 index 0000000..1508eb6 --- /dev/null +++ b/templates/town_halloffame.php @@ -0,0 +1,9 @@ +
+{{halltable}} +You may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/town_halloffamerow.php b/templates/town_halloffamerow.php new file mode 100644 index 0000000..4d1d213 --- /dev/null +++ b/templates/town_halloffamerow.php @@ -0,0 +1,17 @@ + + +

{{number}}

+{{avatar}} + +{{newcharname}}
+Level: {{level}}
+Exp: {{experience}}
+Birthday: {{fregdate}} + + +END; + +?> \ No newline at end of file diff --git a/templates/town_inn1.php b/templates/town_inn1.php new file mode 100644 index 0000000..50d16dd --- /dev/null +++ b/templates/town_inn1.php @@ -0,0 +1,10 @@ +
+A night's rest at this Inn will cost {{innprice}} gold. Is that ok?

+
+If you've changed your mind, you may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/town_inn2.php b/templates/town_inn2.php new file mode 100644 index 0000000..fcc7c03 --- /dev/null +++ b/templates/town_inn2.php @@ -0,0 +1,8 @@ +
+You may return to town, or use the direction buttons on the left to continue exploring. +END; + +?> \ No newline at end of file diff --git a/templates/town_map1.php b/templates/town_map1.php new file mode 100644 index 0000000..a7f889a --- /dev/null +++ b/templates/town_map1.php @@ -0,0 +1,10 @@ +
+Click a town name to purchase its map.

+{{maptable}} +If you've changed your mind, you may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/town_map2.php b/templates/town_map2.php new file mode 100644 index 0000000..d265bb1 --- /dev/null +++ b/templates/town_map2.php @@ -0,0 +1,8 @@ +
+
+END; + +?> \ No newline at end of file diff --git a/templates/town_map3.php b/templates/town_map3.php new file mode 100644 index 0000000..b9a6827 --- /dev/null +++ b/templates/town_map3.php @@ -0,0 +1,8 @@ +
+You may return to town, or use the direction buttons to continue exploring. +END; + +?> \ No newline at end of file diff --git a/templates/town_pvplist.php b/templates/town_pvplist.php new file mode 100644 index 0000000..a07f9f4 --- /dev/null +++ b/templates/town_pvplist.php @@ -0,0 +1,9 @@ +
+{{list}}
+If you've changed your mind, you may also return to town. +END; + +?> \ No newline at end of file diff --git a/templates/users_chardelete.php b/templates/users_chardelete.php new file mode 100644 index 0000000..ea1f994 --- /dev/null +++ b/templates/users_chardelete.php @@ -0,0 +1,12 @@ + +Deleting a character is permanent, and any data will be lost forever.

+Are you sure you want to delete this character?

+ + + +END; + +?> \ No newline at end of file diff --git a/templates/users_charedit.php b/templates/users_charedit.php new file mode 100644 index 0000000..34939cf --- /dev/null +++ b/templates/users_charedit.php @@ -0,0 +1,13 @@ + + + + +
Avatar:Upload an avatar:

Avatars must be 50x50 pixels & {{maxsize}}kb or smaller.
JPG, GIF, and PNG file types only.


    or    
+ +You may also continue playing the game or return to the main Characters screen +END; + +?> \ No newline at end of file diff --git a/templates/users_charlist.php b/templates/users_charlist.php new file mode 100644 index 0000000..ce36314 --- /dev/null +++ b/templates/users_charlist.php @@ -0,0 +1,19 @@ +
+Your account currently has {{characters}} characters ({{remaining}} remaining).
+Your current default character is {{activecharname}}.
+{{newcharlink}}
+
+Select a new default character:
+ +
+
+Click on one of your characters from the list below to edit its avatar or delete it from your account.
+{{fullcharlist}} +
+When you're done with your characters, you may continue playing the game. +END; + +?> diff --git a/templates/users_charlistnew.php b/templates/users_charlistnew.php new file mode 100644 index 0000000..05cdd59 --- /dev/null +++ b/templates/users_charlistnew.php @@ -0,0 +1,9 @@ +
+You have not made any characters yet.

+Click here to create your first character. +END; + +?> diff --git a/templates/users_charlistrow.php b/templates/users_charlistrow.php new file mode 100644 index 0000000..4b80b34 --- /dev/null +++ b/templates/users_charlistrow.php @@ -0,0 +1,16 @@ + + +{{avatar}} + +{{charname}} {{isdefault}}
+Level: {{level}}
+Exp: {{experience}}
+Birthday: {{fregdate}}
+ + +END; + +?> \ No newline at end of file diff --git a/templates/users_charnew.php b/templates/users_charnew.php new file mode 100644 index 0000000..d030d26 --- /dev/null +++ b/templates/users_charnew.php @@ -0,0 +1,17 @@ + + + + + + + + +
Character Name:
Character names must be 30 characters or less.


Avatar:Upload an avatar:

Avatars must be 50x50 pixels & {{maxsize}}kb or smaller.
JPG, GIF, and PNG file types only.


Character Class:
Difficulty:
Default Character: Yes.
Place a check in the box if you want your new character to become the current default for your account.

+ +You may also continue playing the game or return to the main Characters screen. +END; + +?> \ No newline at end of file diff --git a/templates/users_levelspell1.php b/templates/users_levelspell1.php new file mode 100644 index 0000000..5c1e30e --- /dev/null +++ b/templates/users_levelspell1.php @@ -0,0 +1,12 @@ +
+You have {{levelspell}} point(s) to spend.

+
+{{spelldropdowns}} + +
+END; + +?> \ No newline at end of file diff --git a/templates/users_levelspell2.php b/templates/users_levelspell2.php new file mode 100644 index 0000000..fd20ae9 --- /dev/null +++ b/templates/users_levelspell2.php @@ -0,0 +1,9 @@ +
+You now have {{levelspell}} points remaining to be used.

+You may now go back to your Extended Profile or continue playing the game. +END; + +?> \ No newline at end of file diff --git a/templates/users_levelup1.php b/templates/users_levelup1.php new file mode 100644 index 0000000..a2b2ecb --- /dev/null +++ b/templates/users_levelup1.php @@ -0,0 +1,16 @@ +
+Class: {{classname}}
+Damage Per Strength: {{damageperstrength}}
+HP Per Dexterity: {{hpperdexterity}}
+MP Per Energy: {{mpperenergy}}

+You have {{levelup}} point(s) to spend.

+
+{{dropdowns}} + +
+END; + +?> \ No newline at end of file diff --git a/templates/users_levelup2.php b/templates/users_levelup2.php new file mode 100644 index 0000000..c865b67 --- /dev/null +++ b/templates/users_levelup2.php @@ -0,0 +1,9 @@ +
+You now have {{levelup}} points remaining to be used.

+You may now go back to your Extended Profile or continue playing the game. +END; + +?> \ No newline at end of file diff --git a/templates/users_onlinechar.php b/templates/users_onlinechar.php new file mode 100644 index 0000000..53a0334 --- /dev/null +++ b/templates/users_onlinechar.php @@ -0,0 +1,42 @@ + + + + + + + +
+
{{profcharpicture}}
{{newcharname}}
+
+Class: {{charclass}}
+Level: {{level}}

+ +Hit Points: {{maxhp}}
+Magic Points: {{maxmp}}

+ +Weapon: {{item1name}}
+Armor: {{item2name}}
+Shield: {{item4name}}
+Helmet: {{item3name}}
+
+Strength: {{strength}}
+Dexterity: {{dexterity}}
+Physical Damage: {{physattack}}
+Physical Defense: {{physdefense}}

+ +Energy: {{energy}}
+Magic Damage: {{magicattack}}
+Magic Defense: {{magicdefense}}

+ +Fire Damage: {{fireattack}}
+Fire Defense: {{firedefense}}

+ +Lightning Damage: {{lightattack}}
+Lightning Defense: {{lightdefense}}

+
Return to the game.
+END; + +?> diff --git a/templates/users_profile.php b/templates/users_profile.php new file mode 100644 index 0000000..da6cf7a --- /dev/null +++ b/templates/users_profile.php @@ -0,0 +1,46 @@ + + + + + + + +
+
{{profcharpicture}}
{{newcharname}}
+
+Class: {{charclass}}
+Gold: {{formatgold}} {{goldbonus}}
+Level: {{level}}
+Experience: {{formatexperience}} {{expbonus}}
+Next Level: {{formatnextlvl}}

+ +Hit Points: {{currenthp}} / {{maxhp}}
+Magic Points: {{currentmp}} / {{maxmp}}
+Travel Points: {{currenttp}} / {{maxtp}}

+ +Weapon: {{item1name}}
+Armor: {{item2name}}
+Shield: {{item4name}}
+Helmet: {{item3name}}
+
+Strength: {{strength}}
+Dexterity: {{dexterity}}
+Physical Damage: {{physattack}}
+Physical Defense: {{physdefense}}

+ +Energy: {{energy}}
+Magic Damage: {{magicattack}}
+Magic Defense: {{magicdefense}}

+ +Fire Damage: {{fireattack}}
+Fire Defense: {{firedefense}}

+ +Lightning Damage: {{lightattack}}
+Lightning Defense: {{lightdefense}}

+
Return to the game.
+END; + +?> diff --git a/templates/users_register1.php b/templates/users_register1.php new file mode 100644 index 0000000..d627899 --- /dev/null +++ b/templates/users_register1.php @@ -0,0 +1,17 @@ + + + + + + + + + +
Username:
Usernames must be 30 alphanumeric characters or less.


Password:
Verify Password:
Passwords must be 30 alphanumeric characters or less.


Email Address:
Verify Email Address:


Image Format:
(Some versions of Internet Explorer may not be compatible with the PNG image format.)
+ +END; + +?> \ No newline at end of file diff --git a/templates/users_settings.php b/templates/users_settings.php new file mode 100644 index 0000000..8d944ae --- /dev/null +++ b/templates/users_settings.php @@ -0,0 +1,20 @@ + + + + + + +
Change Password: +Leave these fields blank if you wish to keep your old password.

+Old Password:

+New Password:

+Verify New Password:

Passwords must be 30 alphanumeric characters or less.


+
Email Address:
Image Format:
(Older versions of Internet Explorer may not be compatible with transparent PNG images. If you notice problems with item and monster images, please select GIF.)
+ +When you're done with your account, you may continue playing the game. +END; + +?> \ No newline at end of file diff --git a/town.php b/town.php new file mode 100644 index 0000000..e07fab9 --- /dev/null +++ b/town.php @@ -0,0 +1,510 @@ + 0) { + $row["unread"] = "(".mysql_num_rows($newpm)." new)"; + } else { + $row["unread"] = ""; + } + display("In Town", parsetemplate(gettemplate("town"), $row)); + +} + +function inn() { // Resting at the inn restores hp/mp/tp. + + global $userrow, $townrow; + + // Errors. + if ($userrow["gold"] < $townrow["innprice"]) { err("You do not have enough gold to stay at the inn. Please go back and try again."); } + if ($userrow["currenthp"] == $userrow["maxhp"] && $userrow["currentmp"] == $userrow["maxmp"] && $userrow["currenttp"] == $userrow["maxtp"]) { err("Your HP, MP and TP are already at their maximum levels. You do not need to stay at the Inn tonight.

Click here to return to the main town screen."); } + + if (isset($_POST["submit"])) { + + // Fill 'er up, my man! + $userrow["currenthp"] = $userrow["maxhp"]; + $userrow["currentmp"] = $userrow["maxmp"]; + $userrow["currenttp"] = $userrow["maxtp"]; + $userrow["gold"] -= $townrow["innprice"]; + $query = doquery("UPDATE {{table}} SET currenthp='".$userrow["maxhp"]."', currentmp='".$userrow["maxmp"]."', currenttp='".$userrow["maxtp"]."', gold='".$userrow["gold"]."' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + display("Rest at the Inn", gettemplate("town_inn2")); + + } elseif (isset($_POST["abortmission"])) { die(header("Location: index.php")); } + + display("Rest at the Inn", parsetemplate(gettemplate("town_inn1"), $townrow)); + +} + +function map() { // Buy maps to towns for the Travel To menu. + + global $userrow; + + if (isset($_POST["three"])) { + + $townquery = doquery("SELECT * FROM {{table}} WHERE id='".$_POST["id"]."' LIMIT 1", "towns"); + $townrow = dorow($townquery); + + if ($userrow["gold"] < $townrow["mapprice"]) { err("You do not have enough gold to buy this map. Please go back and try again."); } + + if ($townrow != false) { + $userrow["townslist"] .= "," . $townrow["id"]; + $userrow["gold"] -= $townrow["mapprice"]; + $query = doquery("UPDATE {{table}} SET townslist='".$userrow["townslist"]."', gold='".$userrow["gold"]."' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + display("Buy Maps", gettemplate("town_map3")); + } else { + err("Invalid action. Please go back and try again."); + } + + } elseif (isset($_POST["two"])) { + + $townquery = doquery("SELECT * FROM {{table}} WHERE name='".$_POST["two"]."' LIMIT 1", "towns"); + $townrow = dorow($townquery); + + if ($userrow["gold"] < $townrow["mapprice"]) { err("You do not have enough gold to buy this map. Please go back and try again."); } + + if ($townrow != false) { + display("Buy Maps", parsetemplate(gettemplate("town_map2"), $townrow)); + } else { + err("Invalid action. Please go back and try again."); + } + + } else { + + $townquery = doquery("SELECT * FROM {{table}} ORDER BY id", "towns"); + $townrow = dorow($townquery); + $townslist = explode(",",$userrow["townslist"]); + + $row["maptable"] = "
\n"; + foreach($townrow as $a=>$b) { + if (in_array($b["id"], $townslist)) { + if ($b["latitude"] < 0) { $latitude = ($b["latitude"] * -1) . "S"; } else { $latitude = $b["latitude"] . "N"; } + if ($b["longitude"] < 0) { $longitude = ($b["longitude"] * -1) . "W"; } else { $longitude = $b["longitude"] . "E"; } + $row["maptable"] .= "\n"; + } else { + $row["maptable"] .= "\n"; + } + } + $row["maptable"] .= "
Already PurchasedLocation: $latitude, $longitudeTP: ".$b["travelpoints"]."
Price: ".$b["mapprice"]." GoldBuy map to reveal details.
\n"; + display("Buy Maps", parsetemplate(gettemplate("town_map1"), $row)); + + } + +} + +function buy() { // Buy items from merchants. + + /* + 1: Weapon + 2: Armor + 3: Shield + 4: Helmet + 5: Jewel + 6: Stone + */ + + global $userrow, $townrow; + + if (isset($_POST["three"])) { + + $idstring = explode(",",$_POST["idstring"]); + foreach($idstring as $a=>$b) { if(!is_numeric($b)) { err("Invalid action. Please go back and try again."); } } + + // Get database info on new item. + $newbaseitem = dorow(doquery("SELECT * FROM {{table}} WHERE id='$idstring[1]' LIMIT 1", "itembase")); + $newprefix = dorow(doquery("SELECT * FROM {{table}} WHERE id='$idstring[0]' LIMIT 1", "itemprefixes")); + $newsuffix = dorow(doquery("SELECT * FROM {{table}} WHERE id='$idstring[2]' LIMIT 1", "itemsuffixes")); + $premodrow = dorow(doquery("SELECT * FROM {{table}} ORDER BY id","itemmodnames")); + + // Format the mod name row. + foreach($premodrow as $a=>$b) { + $modrow[$b["fieldname"]] = $b; + } + + $newfullitem = builditem($newprefix, $newbaseitem, $newsuffix, $modrow); + + // Get database info on old item, if applicable. + if ($userrow["item" . $newbaseitem["slotnumber"] . "idstring"] != "0") { + + $oldidstring = explode(",",$userrow["item" . $newbaseitem["slotnumber"] . "idstring"]); + $oldbaseitem = dorow(doquery("SELECT * FROM {{table}} WHERE id='$oldidstring[1]' LIMIT 1", "itembase")); + $oldprefix = dorow(doquery("SELECT * FROM {{table}} WHERE id='$oldidstring[0]' LIMIT 1", "itemprefixes")); + $oldsuffix = dorow(doquery("SELECT * FROM {{table}} WHERE id='$oldidstring[2]' LIMIT 1", "itemsuffixes")); + $oldfullitem = builditem($oldprefix, $oldbaseitem, $oldsuffix, $modrow); + + } else { $oldfullitem = false; $oldprefix = false; $oldsuffix = false; } + + // Requirements check. + if ($newfullitem["requirements"] == false) { err("You do not meet one or more of the requirements for this item. Please go back and try again."); } + if ($userrow["gold"] < $newfullitem["buycost"]) { err("You do not have enough gold in your pocket to buy this item."); } + + // Now do stuff to userrow (new item only). + $userrow["item" . $newfullitem["slotnumber"] . "idstring"] = $newfullitem["fullid"]; + $userrow["item" . $newfullitem["slotnumber"] . "name"] = $newfullitem["name"]; + $userrow["gold"] -= $newfullitem["buycost"]; + $userrow[$newfullitem["basename"]] += $newfullitem["baseattr"]; + for($j=1; $j<7; $j++) { + if ($newfullitem["mod".$j."name"] != "") { + $userrow[$newfullitem["mod".$j."name"]] += $newfullitem["mod".$j."attr"]; + } + } + if ($newprefix != false) { + $userrow[$newprefix["basename"]] += $newprefix["baseattr"]; + } + if ($newsuffix != false) { + $userrow[$newsuffix["basename"]] += $newsuffix["baseattr"]; + } + + // Do more stuff to userrow (old item only). + if ($oldfullitem != false) { + + $userrow["gold"] += $oldfullitem["sellcost"]; + $userrow[$oldfullitem["basename"]] -= $oldfullitem["baseattr"]; + for($j=1; $j<7; $j++) { + if ($oldfullitem["mod".$j."name"] != "") { + $userrow[$oldfullitem["mod".$j."name"]] -= $oldfullitem["mod".$j."attr"]; + } + } + if ($oldprefix != false) { + $userrow[$oldprefix["basename"]] -= $oldprefix["baseattr"]; + } + if ($oldsuffix != false) { + $userrow[$oldsuffix["basename"]] -= $oldsuffix["baseattr"]; + } + + } + + // And we're done. + updateuserrow(); + display("Buy Weapons & Armor", gettemplate("town_buy3")); + + } elseif (isset($_POST["two"])) { + + $idstring = explode(",",$_POST["idstring"]); + foreach($idstring as $a=>$b) { if(!is_numeric($b)) { err("Invalid action. Please go back and try again."); } } + + // Get database info on new item. + $newbaseitem = dorow(doquery("SELECT * FROM {{table}} WHERE id='$idstring[1]' LIMIT 1", "itembase")); + $newprefix = dorow(doquery("SELECT * FROM {{table}} WHERE id='$idstring[0]' LIMIT 1", "itemprefixes")); + $newsuffix = dorow(doquery("SELECT * FROM {{table}} WHERE id='$idstring[2]' LIMIT 1", "itemsuffixes")); + $premodrow = dorow(doquery("SELECT * FROM {{table}} ORDER BY id","itemmodnames")); + + // Format the mod name row. + foreach($premodrow as $a=>$b) { + $modrow[$b["fieldname"]] = $b; + } + + $newfullitem = builditem($newprefix, $newbaseitem, $newsuffix, $modrow); + + // Get database info on old item, if applicable. + if ($userrow["item" . $newbaseitem["slotnumber"] . "idstring"] != "0") { + + $oldidstring = explode(",",$userrow["item" . $newbaseitem["slotnumber"] . "idstring"]); + $oldbaseitem = dorow(doquery("SELECT * FROM {{table}} WHERE id='$oldidstring[1]' LIMIT 1", "itembase")); + $oldprefix = dorow(doquery("SELECT * FROM {{table}} WHERE id='$oldidstring[0]' LIMIT 1", "itemprefixes")); + $oldsuffix = dorow(doquery("SELECT * FROM {{table}} WHERE id='$oldidstring[2]' LIMIT 1", "itemsuffixes")); + $oldfullitem = builditem($oldprefix, $oldbaseitem, $oldsuffix, $modrow); + + } else { $oldfullitem = false; } + + // Requirements check. + if ($newfullitem["requirements"] == false) { err("You do not meet one or more of the requirements for this item. Please go back and try again."); } + if ($userrow["gold"] < $newfullitem["buycost"]) { err("You do not have enough gold in your pocket to buy this item."); } + + // Now make a new array to send to the template. + $full = "_empty"; + $row["newname"] = $newfullitem["name"]; + if ($oldfullitem != false) { + $row["oldname"] = $oldfullitem["name"]; + $row["oldsell"] = $oldfullitem["sellcost"]; + $full = "_full"; + } + $row["newidstring"] = $newfullitem["fullid"]; + + // And we're done. + display("Buy Weapons & Armor", parsetemplate(gettemplate("town_buy2" . $full),$row)); + + } else { + + // Grab lots of stuff from the DB. + $itemsrow = dorow(doquery("SELECT * FROM {{table}} WHERE reqlevel>='".$townrow["itemminlvl"]."' AND reqlevel<='".$townrow["itemmaxlvl"]."' ORDER BY RAND() LIMIT 10 ", "itembase")); + $prefixrow = dorow(doquery("SELECT * FROM {{table}} WHERE reqlevel<='".$userrow["level"]."'", "itemprefixes")); + $suffixrow = dorow(doquery("SELECT * FROM {{table}} WHERE reqlevel<='".$userrow["level"]."'", "itemsuffixes")); + $premodrow = dorow(doquery("SELECT * FROM {{table}} ORDER BY id","itemmodnames")); + + // Format the mod name row. + foreach($premodrow as $a=>$b) { + $modrow[$b["fieldname"]] = $b; + } + + // Now build the item table. + $row["itemtable"] = ""; + for($i=0; $i<10; $i++) { + + $baseitem = $itemsrow[rand(0,(sizeof($itemsrow)-1))]; + if (rand(0,1)==1) { $prefix = $prefixrow[rand(0,(sizeof($prefixrow)-1))]; } else { $prefix = false; } + if (rand(0,1)==1) { $suffix = $suffixrow[rand(0,(sizeof($suffixrow)-1))]; } else { $suffix = false; } + $fullitem = builditem($prefix, $baseitem, $suffix, $modrow); + $row["itemtable"] .= parsetemplate(gettemplate("town_buy_itemrow"), $fullitem); + + } + + // And we're done. + display("Buy Weapons & Armor", parsetemplate(gettemplate("town_buy1"),$row)); + + } + +} + +function builditem($prefix, $baseitem, $suffix, $modrow) { + + global $controlrow, $acctrow, $userrow; + + // First setup the basic item attributes. + $baseitem["baseid"] = $baseitem["id"]; + $baseitem["fullid"] = $baseitem["id"]; + $baseitem["attrtype"] = $modrow[$baseitem["basename"]]["prettyname"]; + $baseitem["basevalue"] = $baseitem["baseattr"]; + $baseitem["image"] = ""; + + // Next give pretty names to any item modifiers. + $baseitem["itemmods"] = ""; + for($j=1; $j<7; $j++) { + if ($baseitem["mod".$j."name"] != "") { + $baseitem["itemmods"] .= $modrow[$baseitem["mod".$j."name"]]["prettyname"] . ": +" . $baseitem["mod".$j."attr"]; + if ($modrow[$baseitem["mod".$j."name"]]["percent"] == 1) { $baseitem["itemmods"] .= "%"; } + $baseitem["itemmods"] .= "
\n"; + } + } + + // Add prefix mods if applicable. + if ($prefix != false) { + $baseitem["fullid"] = $prefix["id"] . "," . $baseitem["fullid"]; + $baseitem["name"] = $prefix["name"] . " " . $baseitem["name"]; + $baseitem["buycost"] += $prefix["buycost"]; + $baseitem["sellcost"] += $prefix["sellcost"]; + $baseitem["reqlevel"] = max($baseitem["reqlevel"], $prefix["reqlevel"]); + $baseitem["reqstrength"] += $prefix["reqstrength"]; + $baseitem["reqenergy"] += $prefix["reqenergy"]; + $baseitem["reqdexterity"] += $prefix["reqdexterity"]; + $baseitem["itemmods"] .= $modrow[$prefix["basename"]]["prettyname"] . ": +" . $prefix["baseattr"]; + if ($modrow[$prefix["basename"]]["percent"] == 1) { $baseitem["itemmods"] .= "%"; } + $baseitem["itemmods"] .= "
\n"; + } else { $baseitem["fullid"] = "0," . $baseitem["fullid"]; } + + // Add suffix mods if applicable. + if ($suffix != false) { + $baseitem["fullid"] .= "," . $suffix["id"]; + $baseitem["name"] .= " " . $suffix["name"]; + $baseitem["buycost"] += $suffix["buycost"]; + $baseitem["sellcost"] += $suffix["sellcost"]; + $baseitem["reqlevel"] = max($baseitem["reqlevel"], $suffix["reqlevel"]); + $baseitem["reqstrength"] += $suffix["reqstrength"]; + $baseitem["reqenergy"] += $suffix["reqenergy"]; + $baseitem["reqdexterity"] += $suffix["reqdexterity"]; + $baseitem["itemmods"] .= $modrow[$suffix["basename"]]["prettyname"] . ": +" . $suffix["baseattr"]; + if ($modrow[$suffix["basename"]]["percent"] == 1) { $baseitem["itemmods"] .= "%"; } + $baseitem["itemmods"] .= "
\n"; + } else { $baseitem["fullid"] .= ",0"; } + + // Check requirements. + $baseitem["requirements"] = true; + if ($baseitem["reqlevel"] == 1) { $baseitem["level"] = ""; } else { + $baseitem["level"] = "Required Level: " . $baseitem["reqlevel"]; + if ($baseitem["reqlevel"] > $userrow["level"]) { + $baseitem["level"] = "".$baseitem["level"].""; + $baseitem["requirements"] = false; + } + $baseitem["level"] .= "
\n"; + } + if ($baseitem["reqstrength"] == 0) { $baseitem["strength"] = ""; } else { + $baseitem["strength"] = "Required Strength: " . $baseitem["reqstrength"]; + if ($baseitem["reqstrength"] > $userrow["strength"]) { + $baseitem["strength"] = "".$baseitem["strength"].""; + $baseitem["requirements"] = false; + } + $baseitem["strength"] .= "
\n"; + } + if ($baseitem["reqdexterity"] == 0) { $baseitem["dexterity"] = ""; } else { + $baseitem["dexterity"] = "Required Dexterity: " . $baseitem["reqdexterity"]; + if ($baseitem["reqdexterity"] > $userrow["dexterity"]) { + $baseitem["dexterity"] = "".$baseitem["dexterity"].""; + $baseitem["requirements"] = false; + } + $baseitem["dexterity"] .= "
\n"; + } + if ($baseitem["reqenergy"] == 0) { $baseitem["energy"] = ""; } else { + $baseitem["energy"] = "Required Energy: " . $baseitem["reqenergy"]; + if ($baseitem["reqenergy"] > $userrow["energy"]) { + $baseitem["energy"] = "".$baseitem["energy"].""; + $baseitem["requirements"] = false; + } + $baseitem["energy"] .= "
\n"; + } + + if ($controlrow["showimages"] == 1) { + $baseitem["image"] = "\"".$baseitem["name"]."\""; + } + + // And send it back. + return $baseitem; + +} + +function gamble() { + + display("Gamble", gettemplate("town_gamble1")); + +} + +function bank() { + + global $userrow; + + if (isset($_POST["withdraw"])) { + + if (!is_numeric($_POST["amount"])) { err("Invalid action. Please go back and try again."); } + if ($_POST["amount"] < 1) { err("Withdrawal amount must be greater than 0."); } + if ($_POST["amount"] > $userrow["bank"]) { err("You do not have that much money in the bank."); } + + $userrow["gold"] += $_POST["amount"]; + $userrow["bank"] -= $_POST["amount"]; + updateuserrow(); + $row["formatbank"] = number_format($userrow["bank"]); + $row["formatgold"] = number_format($userrow["gold"]); + display("Deposit/Withdraw Gold at the Bank", parsetemplate(gettemplate("town_bank2"),$row)); + + } elseif (isset($_POST["deposit"])) { + + if (!is_numeric($_POST["amount"])) { err("Invalid action. Please go back and try again."); } + if ($_POST["amount"] < 1) { err("Deposit amount must be greater than 0."); } + if ($_POST["amount"] > $userrow["gold"]) { err("You do not have that much money in your pocket."); } + + $userrow["gold"] -= $_POST["amount"]; + $userrow["bank"] += $_POST["amount"]; + updateuserrow(); + $row["formatbank"] = number_format($userrow["bank"]); + $row["formatgold"] = number_format($userrow["gold"]); + display("Deposit/Withdraw Gold at the Bank", parsetemplate(gettemplate("town_bank2"),$row)); + + } else { + + $row["formatbank"] = number_format($userrow["bank"]); + $row["formatgold"] = number_format($userrow["gold"]); + + display("Deposit/Withdraw Gold at the Bank", parsetemplate(gettemplate("town_bank1"),$row)); + + } + +} + +function halloffame() { + + $topquery = doquery("SELECT *, DATE_FORMAT(birthdate, '%m.%d.%Y') AS fregdate FROM {{table}} ORDER BY experience DESC LIMIT 10", "users"); + $top = dorow($topquery); + $row["halltable"] = ""; + $i = 1; + + if (mysql_num_rows($topquery) > 1) { + foreach($top as $a=>$b) { + if ($b["charpicture"] != "") { + $b["avatar"] = "\"".$b["charname"]."\""; + } else { + $b["avatar"] = "\"".$b["charname"]."\""; + } + $b["experience"] = number_format($b["experience"]); + $b["number"] = $i; + if ($b["guild"] != 0) { + $charname = "[".$b["guildtag"]."]".$b["charname"].""; + } else { + $charname = $b["charname"]; + } + $b["newcharname"] = $charname; + $row["halltable"] .= parsetemplate(gettemplate("town_halloffamerow"), $b); + $i++; + } + } else { + if ($top["charpicture"] != "") { + $top["avatar"] = "\"".$top["charname"]."\""; + } else { + $top["avatar"] = "\"".$top["charname"]."\""; + } + $top["experience"] = number_format($top["experience"]); + $top["number"] = $i; + if ($top["guild"] != 0) { + $charname = "[".$top["guildtag"]."]".$top["charname"].""; + } else { + $charname = $top["charname"]; + } + $top["newcharname"] = $charname; + $row["halltable"] .= parsetemplate(gettemplate("town_halloffamerow"), $top); + $i++; + } + $row["halltable"] .= "
\n"; + display("Hall of Fame", parsetemplate(gettemplate("town_halloffame"), $row)); + +} + +function duel() { + + global $userrow; + + $query = doquery("SELECT * FROM {{table}} WHERE UNIX_TIMESTAMP(onlinetime) >= '".(time()-600)."' AND world='".$userrow["world"]."' AND latitude='".$userrow["latitude"]."' AND longitude='".$userrow["longitude"]."' AND id !='".$userrow["id"]."' ORDER BY id", "users"); + $row = dorow($query); + + $list = ""; + if (mysql_num_rows($query) == 0) { + $list .= "There is nobody available to challenge at this time.
"; + } elseif (mysql_num_rows($query) == 1) { + if ($row["guild"] != 0) { + $charname = "[".$row["guildtag"]."]".$row["charname"].""; + } else { + $charname = $row["charname"]; + } + $list .= "$charname (Level ".$row["level"].")
"; + } else { + foreach($row as $a=>$b) { + if ($row["guild"] != 0) { + $charname = "[".$row["guildtag"]."]".$row["charname"].""; + } else { + $charname = $row["charname"]; + } + $list .= "".$b["charname"]." (Level ".$b["level"].")
"; + } + } + + $pagerow["list"] = $list; + display("Duel Challenge", parsetemplate(gettemplate("town_pvplist"),$pagerow)); + +} + +function duelchallenge() { + + global $userrow, $acctrow; + + if(isset($_GET["uid"])) { + if (!is_numeric($_GET["uid"])) { err("Invalid UID."); } + if ($_GET["uid"] == $userrow["id"]) { err("You cannot duel yourself."); } + $newuserrow = dorow(doquery("SELECT *,UNIX_TIMESTAMP(onlinetime) as fonlinetime FROM {{table}} WHERE id='".$_GET["uid"]."' LIMIT 1", "users")); + if ($newuserrow == false) { err("That user doesn't exist."); } + if ($newuserrow["account"] == $userrow["account"]) { err("You cannot duel another character on your own account."); } + if ($newuserrow["fonlinetime"] <= (time() - 600)) { err("That user is not online."); } + if ($newuserrow["currentaction"] != "In Town") { err("That user is busy."); } + if ($newuserrow["latitude"] != $userrow["latitude"] || $newuserrow["longitude"] != $userrow["longitude"]) { err("That user is not in this town."); } + } else { err("Invalid UID."); } + + // No errors, so create the PVP record and update everyone's userrow. + $query = doquery("INSERT INTO {{table}} SET id='',player1id='".$userrow["id"]."',player2id='".$newuserrow["id"]."',player1name='".$userrow["charname"]."',player2name='".$newuserrow["charname"]."',playerturn='".$newuserrow["id"]."',turntime=NOW(),fightrow=''","pvp"); + $query2 = doquery("UPDATE {{table}} SET currentpvp='".mysql_insert_id()."' WHERE id='".$newuserrow["id"]."' OR id='".$userrow["id"]."' LIMIT 2", "users"); + display("Duel Challenge",parsetemplate(gettemplate("pvp_challenge"),$newuserrow)); + +} + + + +?> \ No newline at end of file diff --git a/users.php b/users.php new file mode 100644 index 0000000..999c297 --- /dev/null +++ b/users.php @@ -0,0 +1,628 @@ +"; } + if (preg_match("/[^A-z0-9_\-]/", $username)==1) { $errors++; $errorlist .= "Username must be alphanumeric.
"; } // Thanks to "Carlos Pires" from php.net! + $usernamequery = doquery("SELECT username FROM {{table}} WHERE username='$username' LIMIT 1","accounts"); + if (mysql_num_rows($usernamequery) > 0) { $errors++; $errorlist .= "Username already taken - unique username required.
"; } + + // Process password. + if (trim($password1) == "") { $errors++; $errorlist .= "Password fields is required.
"; } + if (preg_match("/[^A-z0-9_\-]/", $password1)==1) { $errors++; $errorlist .= "Password must be alphanumeric.
"; } // Thanks to "Carlos Pires" from php.net! + if ($password1 != $password2) { $errors++; $errorlist .= "Passwords don't match.
"; } + $password = md5($password1); + + // Process email address. + if (trim($email1) == "") { $errors++; $errorlist .= "Email field is required.
"; } + if ($email1 != $email2) { $errors++; $errorlist .= "Emails don't match.
"; } + if (! is_email($email1)) { $errors++; $errorlist .= "Email isn't valid.
"; } + $emailquery = doquery("SELECT emailaddress FROM {{table}} WHERE emailaddress='$email1' LIMIT 1","accounts"); + if (mysql_num_rows($emailquery) > 0) { $errors++; $errorlist .= "Email already taken - unique email address required.
"; } + + // Process other stuff. + if ($imageformat != ".png" && $imageformat != ".gif") { $errors++; $errorlist .= "Invalid input for image format selection.
"; } + + if ($errors == 0) { + + if ($controlrow["verifyemail"] == 1) { + $verifycode = ""; + for ($i=0; $i<8; $i++) { + $verifycode .= chr(rand(65,90)); + } + } else { + $verifycode='1'; + } + + // Now update. + $query = doquery("INSERT INTO {{table}} SET id='',regdate=NOW(),regip='".$_SERVER["REMOTE_ADDR"]."',verifycode='$verifycode',username='$username',password='$password',emailaddress='$email1',language='English',imageformat='$imageformat'", "accounts") or die(mysql_error()); + + // Send confirmation email if necessary. + if ($controlrow["verifyemail"] == 1) { + if (sendregmail($email1, $verifycode) == true) { + $page = "Your account was created successfully.

You should receive an Account Verification email shortly. You will need the verification code contained in that email before you are allowed to log in. Once you have received the email, please visit the Verification Page to enter your code and start playing."; + } 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."; + } + } else { + $page = "Your account was created succesfully.

You may now continue to the Login Page and continue playing ".$controlrow["gamename"]."!"; + } + + } else { + + // Die gracefully on errors. + $page = "The following error(s) occurred when your account was being made:
$errorlist
Please go back and try again."; + + } + + display("Register", $page, false); + + } + + $row["imageformat"] = ""; + display("Register", parsetemplate(gettemplate("users_register1"), $row), false); + +} + +function profile() { + + global $userrow; + $newuserrow = $userrow; + $template = "users_profile"; + + // Setup for viewing other people's profiles. + if(isset($_GET["uid"])) { + if (!is_numeric($_GET["uid"])) { err("Invalid UID."); } + $newuserrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$_GET["uid"]."' LIMIT 1", "users")); + if ($newuserrow == false) { err("No such UID."); } + $template = "users_onlinechar"; + } + + if ($newuserrow["guild"] != 0) { + $newuserrow["newcharname"] = "[".$newuserrow["guildtag"]."]".$newuserrow["charname"].""; + } else { + $newuserrow["newcharname"] = $newuserrow["charname"]; + } + + if ($newuserrow["charpicture"] != "") { + $newuserrow["profcharpicture"] = "\"".$newuserrow["charname"]."\""; + } else { + $newuserrow["profcharpicture"] = "\"".$newuserrow["charname"]."\""; + } + + $newuserrow["formatexperience"] = number_format($newuserrow["experience"]); + $newuserrow["formatgold"] = number_format($newuserrow["gold"]); + + if ($newuserrow["expbonus"] == 0) { $newuserrow["expbonus"] = ""; } else { if ($newuserrow["expbonus"]>0) { $expsign="+"; } else { $expsign=""; } $newuserrow["expbonus"] = "($expsign".$newuserrow["expbonus"]."%)"; } + if ($newuserrow["goldbonus"] == 0) { $newuserrow["goldbonus"] = ""; } else { if ($newuserrow["goldbonus"]>0) { $goldsign="+"; } else { $goldsign=""; }$newuserrow["goldbonus"] = "($goldsign".$newuserrow["goldbonus"]."%)"; } + + // Next level. + $leveltotal = 15; + $leveladd = 15; + $i = 2; + while ($i < ($newuserrow["level"] + 1)) { + $levelstart = $leveltotal; + if ($i < 4) { + $leveladd = ceil($leveladd * 2.0); + } elseif ($i < 13) { + $leveladd = floor($leveladd * 1.45); + } elseif ($i < 40) { + $leveladd = floor($leveladd * 1.20); + } elseif ($i < 60) { + $leveladd = 150000; + } elseif ($i < 80) { + $leveladd = 200000; + } elseif ($i < 100) { + $leveladd = 300000; + } elseif ($i >= 100) { + $leveladd = 500000; + } + $leveltotal = $levelstart + $leveladd; + $i++; + } + $newuserrow["formatnextlvl"] = number_format($leveltotal); + + // Level points. + if ($newuserrow["levelup"] != 0 || $newuserrow["levelspell"] != 0) { $newuserrow["levelpointscharnotice"] = "You have Level/Spell Points available."; } else { $newuserrow["levelpointscharnotice"] = ""; } + + display("Extended Profile",parsetemplate(gettemplate($template),$newuserrow)); + +} + +function settings() { + + global $acctrow; + + if (isset($_POST["submit"])) { + + extract($_POST); + $errors = 0; + $errorlist = ""; + + // Process password. + if (trim($password1) != "") { + if (md5($oldpassword) != $acctrow["password"]) { $errors++; $errorlist .= "Incorrect old password.
"; } + if (preg_match("/[^A-z0-9_\-]/", $password1)==1) { $errors++; $errorlist .= "Password must be alphanumeric.
"; } // Thanks to "Carlos Pires" from php.net! + if ($password1 != $password2) { $errors++; $errorlist .= "New passwords don't match.
"; } + $password = "password='".md5($password1)."',"; + $newpass = true; + } + + // Process email address. + if (trim($email) == "") { $errors++; $errorlist .= "Email field is required.
"; } + if (! is_email($email)) { $errors++; $errorlist .= "Email isn't valid.
"; } + $emailquery = doquery("SELECT emailaddress FROM {{table}} WHERE emailaddress='$email' AND id != '".$acctrow["id"]."' LIMIT 1","accounts"); + if (mysql_num_rows($emailquery) > 0) { $errors++; $errorlist .= "Email already taken - unique email address required.
"; } + + // Process other stuff. + if ($imageformat != ".png" && $imageformat != ".gif") { $errors++; $errorlist .= "Invalid input for image format selection.
"; } + + if ($errors == 0) { + + $query = doquery("UPDATE {{table}} SET $password emailaddress='$email', imageformat='$imageformat' WHERE id='".$acctrow["id"]."' LIMIT 1", "accounts"); + + if (isset($newpass)) { + setcookie("scourge", "", (time()-3600), "/", "", 0); + $page = "Your information was updated successfully. Because you changed your password, you have been logged out to avoid cookie errors.

Please use the Log In link above to log back into the game and continue playing."; + unset($GLOBALS["acctrow"]); + display("Account Settings", $page, false); + } else { + $page = "Your information was updated successfully. You may now continue playing."; + display("Account Settings", $page); + } + + } else { + + err("The following error(s) occurred when your account was being made:
$errorlist
Please go back and try again."); + + } + + } + + $row["emailaddress"] = $acctrow["emailaddress"]; + $row["language"] = ""; + if ($acctrow["imageformat"] == ".png") { + $row["imageformat"] = ""; + } else { + $row["imageformat"] = ""; + } + display("Account Settings", parsetemplate(gettemplate("users_settings"), $row)); + +} + +function characters() { + + global $acctrow, $userrow; + + if (isset($_POST["submit"])) { + + // Change the active character for the account. + if (!is_numeric($_POST["makeactive"])) { err("Invalid UID."); } + $newuserrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$_POST["makeactive"]."' LIMIT 1", "users")); + if ($newuserrow == false) { err("No such UID."); } + if ($newuserrow["account"] != $acctrow["id"]) { err("You don't own that UID."); } + $setnewchar = doquery("UPDATE {{table}} SET activechar='".$_POST["makeactive"]."' WHERE id='".$acctrow["id"]."' LIMIT 1", "accounts"); + die(header("Location: users.php?do=characters")); + + } + + if ($userrow != false) { + + // Pagerow setup. + $row["characters"] = $acctrow["characters"]; + $row["remaining"] = 4 - $acctrow["characters"]; + $row["activecharname"] = $userrow["charname"]; + $row["selectcharlist"] = ""; + $row["fullcharlist"] = ""; + if($row["characters"] < 4) { + $row["newcharlink"] = "Click here to create a new character.
"; + } else { $row["newcharlink"] = ""; } + + // Grab characters. + $charquery = doquery("SELECT *, DATE_FORMAT(birthdate, '%m.%d.%Y') AS fregdate FROM {{table}} WHERE account='".$acctrow["id"]."' ORDER BY birthdate", "users"); + $charrow = dorow($charquery); + + // Different loop style if there's multiple available characters. + if (mysql_num_rows($charquery) > 1) { + foreach($charrow as $a=>$b) { + + // Default character. + if ($b["id"] == $acctrow["activechar"]) { + + $row["selectcharlist"] .= ""; + + if ($b["charpicture"] != "") { + $b["avatar"] = "\"".$b["charname"]."\""; + } else { + $b["avatar"] = "\"".$b["charname"]."\""; + } + $b["isdefault"] = "(Default)"; + $row["fullcharlist"] .= parsetemplate(gettemplate("users_charlistrow"), $b); + + // Non-default characters. + } else { + + $row["selectcharlist"] .= ""; + + if ($b["charpicture"] != "") { + $b["avatar"] = "\"".$b["charname"]."\""; + } else { + $b["avatar"] = "\"".$b["charname"]."\""; + } + $b["isdefault"] = ""; + $row["fullcharlist"] .= parsetemplate(gettemplate("users_charlistrow"), $b); + + } + } + + } else { + + $row["selectcharlist"] .= ""; + + if ($charrow["charpicture"] != "") { + $charrow["avatar"] = "\"".$charrow["charname"]."\""; + } else { + $charrow["avatar"] = "\"".$charrow["charname"]."\""; + } + $charrow["isdefault"] = ""; + $row["fullcharlist"] .= parsetemplate(gettemplate("users_charlistrow"), $charrow); + + } + + display("Characters", parsetemplate(gettemplate("users_charlist"), $row)); + + } else { + + display("Characters", gettemplate("users_charlistnew")); + + } + +} + +function charnew() { + + global $controlrow, $acctrow; + + if ($acctrow["characters"] >= 4) { err("You are not allowed to make any more new characters."); } + + if (isset($_POST["submit"])) { + + extract($_POST); + $errors = 0; + $errorlist = ""; + + // Process charname. + if (trim($charname) == "") { $errors++; $errorlist .= "Character Name field is required.
"; } + if (preg_match("/[^A-z\ 0-9_\-]/", $charname)==1) { $errors++; $errorlist .= "Character names can only contain letters, numbers, spaces and hyphens.
"; } // Thanks to "Carlos Pires" from php.net! + $characternamequery = doquery("SELECT charname FROM {{table}} WHERE charname='$charname' LIMIT 1","users"); + if (mysql_num_rows($characternamequery) > 0) { $errors++; $errorlist .= "Character Name already taken - unique Character Name required.
"; } + + // Upload new charpicture, if required. + if ($_FILES["intavatar"]["error"] != 4) { + + $allowed = array(".gif",".jpg",".png"); + $type = substr($_FILES["intavatar"]["name"],-4); + + // Errors. + if (!in_array(strtolower($type),$allowed)) { die("Unallowed filetype for avatar."); } + if ($_FILES["intavatar"]["size"] > $controlrow["avatarmaxsize"]) { die("Avatar filesize too big."); } + $imagesize = getimagesize($_FILES["intavatar"]["tmp_name"]); + if (($imagesize[0]>50) || ($imagesize[1]>50)) { die("Avatar dimensions too big."); } + + // Move file and finish. + $randomext = ""; + for($i=0; $i<8; $i++) { $randomext .= rand(0,9); } + $uploadfile = $controlrow["avatarpath"] . $acctrow["username"] . $randomext . $type; + if (!move_uploaded_file($_FILES["intavatar"]["tmp_name"], $uploadfile)) { die("Unable to upload avatar."); } + $newcharpicture = $controlrow["avatarurl"] . $acctrow["username"] . $randomext . $type; + + } + + // Process everything else important. + if (!is_numeric($charclass)) { $errors++; $errorlist .= "Invalid character class.
"; } + if (!is_numeric($difficulty)) { $errors++; $errorlist .= "Invalid character class.
"; } + + // Get bonuses and multipliers from classes/difficulties tables. + $expbonus = 0; + $goldbonus = 0; + $classes = dorow(doquery("SELECT * FROM {{table}} WHERE id='$charclass' LIMIT 1", "classes")); + if ($classes != false) { + $expbonus += $classes["expbonus"]; + $goldbonus += $classes["goldbonus"]; + } else { $errors++; $errorlist .= "Invalid character class"; } + + $difficulties = dorow(doquery("SELECT * FROM {{table}} WHERE id='$difficulty' LIMIT 1", "difficulties")); + if ($difficulties != false) { + $expbonus += $difficulties["expbonus"]; + $goldbonus += $difficulties["goldbonus"]; + $difficulty = $difficulties["multiplier"]; + $deathpenalty = $difficulties["deathpenalty"]; + } else { $errors++; $errorlist .= "Invalid character class"; } + + if ($errors == 0) { + + // Now everything's cool. Create new character row. + $query = doquery("INSERT INTO {{table}} SET id='', account='".$acctrow["id"]."', birthdate=NOW(), lastip='".$_SERVER["REMOTE_ADDR"]."', onlinetime=NOW(), charname='$charname', charpicture='$newcharpicture', charclass='$charclass', difficulty='$difficulty', deathpenalty='$deathpenalty', expbonus='$expbonus', goldbonus='$goldbonus'", "users"); + + // Update account row. + $default = ""; + if (isset($setdefault)) { $default = "activechar='".mysql_insert_id()."', "; } + if ($acctrow["characters"] == 0) { $default = "activechar='".mysql_insert_id()."', "; } + $query2 = doquery("UPDATE {{table}} SET $default characters=characters+1 WHERE id='".$acctrow["id"]."' LIMIT 1", "accounts"); + + // And we're finished. + die(header("Location: users.php?do=characters")); + + } else { + + // Die gracefully on errors. + if ($acctrow["characters"] != 0) { + err("The following error(s) occurred when your character was being made:
$errorlist
Please go back and try again."); + } else { + die("The following error(s) occurred when your character was being made:
$errorlist
Please go back and try again."); + } + + } + + } + + + $classes = dorow(doquery("SELECT * FROM {{table}} ORDER BY id", "classes")); + $row["charclass"] = ""; + foreach($classes as $a=>$b) { + $row["charclass"] .= ""; + } + $difficulty = dorow(doquery("SELECT * FROM {{table}} ORDER BY id", "difficulties")); + $row["difficulty"] = ""; + foreach($difficulty as $a=>$b) { + $row["difficulty"] .= ""; + } + + if ($acctrow["characters"] == 0) { $row["defaultenabled"] = "disabled=\"disabled\""; } else { $row["defaultenabled"] = ""; } + $row["maxsize"] = round($controlrow["avatarmaxsize"] / 1000, 1); + + display("Characters", parsetemplate(gettemplate("users_charnew"), $row), false); + +} + +function charedit() { + + global $controlrow, $acctrow; + + // Change the active character for the account. + if (!is_numeric($_GET["uid"])) { err("Invalid UID."); } + $newuserrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$_GET["uid"]."' LIMIT 1", "users")); + if ($newuserrow == false) { err("No such UID."); } + if ($newuserrow["account"] != $acctrow["id"]) { err("You don't own that UID."); } + + if (isset($_POST["submit"])) { + + extract($_POST); + + // Upload new charpicture, if required. + if ($_FILES["intavatar"]["error"] != 4) { + + $allowed = array(".gif",".jpg",".png"); + $type = substr($_FILES["intavatar"]["name"],-4); + + // Errors. + if (!in_array(strtolower($type),$allowed)) { err("Unallowed filetype for avatar."); } + if ($_FILES["intavatar"]["size"] > $controlrow["avatarmaxsize"]) { err("Avatar filesize too big."); } + $imagesize = getimagesize($_FILES["intavatar"]["tmp_name"]); + if (($imagesize[0]>50) || ($imagesize[1]>50)) { err("Avatar dimensions too big."); } + + // Move file and finish. + $randomext = ""; + for($i=0; $i<8; $i++) { $randomext .= rand(0,9); } + $uploadfile = $controlrow["avatarpath"] . $acctrow["username"] . $randomext . $type; + if (!move_uploaded_file($_FILES["intavatar"]["tmp_name"], $uploadfile)) { err("Unable to upload avatar."); } + $newcharpicture = $controlrow["avatarurl"] . $acctrow["username"] . $randomext . $type; + + if ($newuserrow["charpicture"] != "") { + $oldav = ltrim($newuserrow["charpicture"], $controlrow["avatarurl"]); + unlink($controlrow["avatarpath"] . $oldav); + } + + } + + // Now everything's cool. + $query = doquery("UPDATE {{table}} SET charpicture='$newcharpicture' WHERE id='".$newuserrow["id"]."' LIMIT 1", "users"); + die(header("Location: users.php?do=characters")); + + } elseif (isset($_POST["delete"])) { + + if ($acctrow["characters"] == 1) { err("You only have one character on your account. If you wish to delete this character, please make a new one first before trying to delete this one."); } + display("Characters", parsetemplate(gettemplate("users_chardelete"), $newuserrow)); + + } elseif (isset($_POST["ultrakill"])) { + + // First we delete the char. + $query = doquery("DELETE FROM {{table}} WHERE id='".$newuserrow["id"]."'", "users"); + + // Then we gotta update acctrow accordingly. + $query2 = dorow(doquery("SELECT * FROM {{table}} WHERE account='".$acctrow["id"]."' ORDER BY id LIMIT 1", "users")); + $query3 = doquery("UPDATE {{table}} SET characters=characters-1, activechar='".$query2["id"]."' WHERE id='".$acctrow["id"]."' LIMIT 1", "accounts"); + die(header("Location: users.php?do=characters")); + + } elseif (isset($_POST["wimpout"])) { + + die(header("Location: users.php?do=characters")); + + } + + $newuserrow["maxsize"] = round($controlrow["avatarmaxsize"] / 1000, 1); + display("Characters", parsetemplate(gettemplate("users_charedit"), $newuserrow)); + +} + +function levelup() { + + global $userrow; + + if ($userrow["levelup"] == 0) { err("You do not currently have any Level Points to spend."); } + + $classrow = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["charclass"]."' LIMIT 1", "classes")); + + if (isset($_POST["submit"])) { + + unset($_POST["submit"]); + + // Check to make sure they didn't mess with the input names. + foreach($_POST as $a=>$b) { + if (!is_numeric($a)) { err("Invalid input format."); } + } + + // Loop through and add points where appropriate. + // Note that we loop through the number of points in $userrow, rather than the number of fields. + // This is to ensure that people don't edit the source to just add more fields. + $total = $userrow["levelup"]; + for($i=0; $i<$total; $i++) { + switch($_POST[$i]) { + case "str": + $userrow["strength"]++; + $userrow["physattack"] += (1 * $classrow["damageperstrength"]); + $userrow["levelup"]--; + break; + case "dex": + $userrow["dexterity"]++; + $userrow["maxhp"] += (1 * $classrow["hpperdexterity"]); + $userrow["currenthp"] += (1 * $classrow["hpperdexterity"]); + $userrow["levelup"]--; + break; + case "enr": + $userrow["energy"]++; + $userrow["maxmp"] += (1 * $classrow["mpperenergy"]); + $userrow["currentmp"] += (1 * $classrow["mpperenergy"]); + $userrow["levelup"]--; + break; + default: + break; + } + } + + // Round down any fractions. + $userrow["physattack"] = floor($userrow["physattack"]); + $userrow["maxhp"] = floor($userrow["maxhp"]); + $userrow["maxmp"] = floor($userrow["maxmp"]); + + // Finish. + updateuserrow(); + display("Level Points", parsetemplate(gettemplate("users_levelup2"), $userrow)); + + } else { + + $row["dropdowns"] = ""; + for($i=0; $i<$userrow["levelup"]; $i++) { + $row["dropdowns"] .= "
\n"; + } + $row["classname"] = $classrow["name"]; + $row["damageperstrength"] = $classrow["damageperstrength"]; + $row["hpperdexterity"] = $classrow["hpperdexterity"]; + $row["mpperenergy"] = $classrow["mpperenergy"]; + $row["levelup"] = $userrow["levelup"]; + + display("Level Points", parsetemplate(gettemplate("users_levelup1"), $row)); + + } + +} + +function levelspell() { + + global $userrow, $spells; + + if ($userrow["levelspell"] == 0) { err("You do not currently have any Spell Points to spend."); } + + if (isset($_POST["submit"])) { + + unset($_POST["submit"]); + + // Check to make sure they didn't mess with the input names. + foreach($_POST as $a=>$b) { + $a = ltrim($a,"spelot"); + if (!is_numeric($a)) { err("Invalid input format."); } + } + + // Loop through and add points where appropriate. + // Note that we loop through the number of points in $userrow, rather than the number of fields. + // This is to ensure that people don't edit the source to just add more fields. + $total = $userrow["levelspell"]; + for($i=0; $i<$total; $i++) { + if (!isset($spells[$_POST["spell".$i]])) { err("That spell doesn't exist."); } + $userrow["spell".$_POST["slot".$i]."id"] = $_POST["spell".$i]; + $userrow["spell".$_POST["slot".$i]."name"] = $spells[$_POST["spell".$i]]["name"]; + $userrow["levelspell"]--; + } + + // Finish. + updateuserrow(); + display("Spell Points", parsetemplate(gettemplate("users_levelspell2"), $userrow)); + + } else { + + if ($userrow["levelspell"] != 0) { + $row["spelldropdowns"] = ""; + for ($j=0; $j<$userrow["levelspell"]; $j++) { + $row["spelldropdowns"] .= " goes in
"; + } + $row["spelldropdowns"] .= "
"; + } + + $row["levelspell"] = $userrow["levelspell"]; + + display("Spell Points", parsetemplate(gettemplate("users_levelspell1"), $row)); + + } + +} + +?> \ No newline at end of file