diff --git a/changelog.txt b/changelog.txt index 1a8a231..cc326d0 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,6 +1,33 @@ DRAGON SCOURGE Changelog +***** BETA THREE ***** +2.04.2006 - Build 13 (Unlucky): +- +- Dying now properly takes you back to the actual lat/lon of the world's first town (rather than 0,0 every time). +- Added 160+ new monsters for the later realms. +- Buy Maps now correctly only shows available maps from the Realm you're in. +- Fixed some weirdness with the Travel To menu in the second Realm. +- Added storyline/quests. +- Added item drops from monsters. +- Monsters now have a chance to swing first, and to block you from running. +- Added Quick Heal to panel_bottom. +- Users who are already a member of a guild no longer see the "Apply to Join" link on the Guild List page. +- Added Honor Points to guilds. + * plus 1 point per member. + * plus floored square root of total combined member experience. + * plus 2 points per member PVP win. + * minus 1 point per member PVP loss. + * Calculated every 24 hours automatically, and upon every approve/remove/leave. + * Displayed on the Guild List page. +- Added stats for your current items on the first Buy screen. +- You cannot create/join a guild until Level 10 to help prevent bank abuse. +- Added PVP logging - wins, losses, and highest lvl character killed. +- Hall of Fame now shows top 25 chars. +- Hall of Fame now uses stock mysql_fetch_array() instead of custom dorow(). +- Items now have a 1 in 5 chance of having prefixes/suffixes (it used to be 50:50). +- Added email verification support. + ***** BETA TWO ***** 12.10.2005 - Build 12 (Eggs): - Members can now leave the Guild without requiring an officer to demote them to zero. diff --git a/explore.php b/explore.php index 4976697..7e0ba02 100644 --- a/explore.php +++ b/explore.php @@ -36,9 +36,15 @@ function move() { // Primary exploring function. Move them with the compass butt } } + // Breakout for story. + if ($userrow["story"] != "0" && $userrow["storylat"] == $userrow["latitude"] && $userrow["storylon"] == $userrow["longitude"]) { + $string = ltrim($string," ,"); + doquery("UPDATE {{table}} SET $string WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + die(header("Location: story.php")); + } + // 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); + $row = dorow(doquery("SELECT * FROM {{table}} WHERE world='".$userrow["world"]."' AND latitude='".$userrow["latitude"]."' AND longitude='".$userrow["longitude"]."' LIMIT 1", "towns")); if ($row != false) { $townslist = explode(",",$userrow["townslist"]); if (!in_array($row["id"], $townslist)) { @@ -64,7 +70,7 @@ function move() { // Primary exploring function. Move them with the compass butt // 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"); + doquery("UPDATE {{table}} SET currentaction='Exploring', dropidstring='0' $string WHERE id='".$userrow["id"]."' LIMIT 1", "users"); display("Exploring", gettemplate("explore")); } @@ -93,11 +99,123 @@ function travel($id) { // Move them with the Travel To list. $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"); + $query = doquery("UPDATE {{table}} SET dropidstring='0', 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 quickheal() { // Quick heal. + + global $userrow, $spells; + + if (isset($_GET["id"])) { $id = $_GET["id"]; } else { err("Invalid ID entered. Please go back and try again."); } + + // Errors. + if (!is_numeric($id)) { err("Invalid ID entered. Please go back and try again."); } + if ($userrow["currentaction"] != "Exploring") { err("The Quick Heal function is only available while exploring. You cannot use it in town or while fighting. Please go back and try again."); } + $hasspell = false; + for($i=1; $i<11; $i++) { + if ($userrow["spell".$i."id"] == $id) { $hasspell = true; } + } + if ($hasspell == false) { err("You don't have that spell yet. Please go back and try again."); } + if ($spells[$id]["fname"] != "heal") { err("That is not a Heal spell. Please go back and try again."); } + if ($userrow["currentmp"] < $spells[$id]["mp"]) { err("You don't have enough MP to cast that spell. Please go back and try again."); } + if ($userrow["currenthp"] == $userrow["maxhp"]) { err("Your HP is already full. Please go back and try again."); } + + // Now heal them. + $userrow["currenthp"] = min($userrow["currenthp"] + $spells[$id]["value"], $userrow["maxhp"]); + $userrow["currentmp"] = $userrow["currentmp"] - $spells[$id]["mp"]; + doquery("UPDATE {{table}} SET currenthp='".$userrow["currenthp"]."', currentmp='".$userrow["currentmp"]."' WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + display("Exploring", gettemplate("explore_quickheal")); + +} + +function itemdrop() { // Handling for item drops from monsters. + + global $userrow; + + if ($userrow["dropidstring"] == "0") { err("No item has been dropped. Please go back and try again."); } + + $premodrow = dorow(doquery("SELECT * FROM {{table}} ORDER BY id","itemmodnames")); + foreach($premodrow as $a=>$b) { + $modrow[$b["fieldname"]] = $b; + } + + $thenewitem = explode(",",$userrow["dropidstring"]); + $newitem = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$thenewitem[1]."' LIMIT 1", "itembase")); + $newprefix = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$thenewitem[0]."' LIMIT 1", "itemprefixes")); + $newsuffix = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$thenewitem[2]."' LIMIT 1", "itemsuffixes")); + $newfullitem = builditem($newprefix, $newitem, $newsuffix, $modrow); + $row["itemtable"] = parsetemplate(gettemplate("explore_drop_itemrow"), $newfullitem); + + if ($userrow["item".$newitem["slotnumber"]."idstring"] != "0") { + $theolditem = explode(",",$userrow["item".$newitem["slotnumber"]."idstring"]); + $olditem = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$theolditem[1]."' LIMIT 1", "itembase")); + $oldprefix = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$theolditem[0]."' LIMIT 1", "itemprefixes")); + $oldsuffix = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$theolditem[2]."' LIMIT 1", "itemsuffixes")); + $oldfullitem = builditem($oldprefix, $olditem, $oldsuffix, $modrow); + $row["olditems"] = parsetemplate(gettemplate("town_buy_olditemrow"), $oldfullitem); + } else { + $oldfullitem = false; $oldprefix = false; $oldsuffix = false; + $row["olditems"] = "You don't have any item in this slot."; + } + + if (isset($_POST["accept"])) { + + // Requirements check. + if ($newfullitem["requirements"] == false) { err("You do not meet one or more of the requirements for this item. Please go back and try again."); } + + // Now do stuff to userrow (new item only). + $userrow["item" . $newfullitem["slotnumber"] . "idstring"] = $newfullitem["fullid"]; + $userrow["item" . $newfullitem["slotnumber"] . "name"] = $newfullitem["name"]; + $userrow[$newfullitem["basename"]] += $newfullitem["baseattr"]; + for($j=1; $j<7; $j++) { + if ($newfullitem["mod".$j."name"] != "") { + $userrow[$newfullitem["mod".$j."name"]] += $newfullitem["mod".$j."attr"]; + } + } + if ($newprefix != false) { + $userrow[$newprefix["basename"]] += $newprefix["baseattr"]; + } + if ($newsuffix != false) { + $userrow[$newsuffix["basename"]] += $newsuffix["baseattr"]; + } + + // Do more stuff to userrow (old item only). + if ($oldfullitem != false) { + + $userrow[$oldfullitem["basename"]] -= $oldfullitem["baseattr"]; + for($j=1; $j<7; $j++) { + if ($oldfullitem["mod".$j."name"] != "") { + $userrow[$oldfullitem["mod".$j."name"]] -= $oldfullitem["mod".$j."attr"]; + } + } + if ($oldprefix != false) { + $userrow[$oldprefix["basename"]] -= $oldprefix["baseattr"]; + } + if ($oldsuffix != false) { + $userrow[$oldsuffix["basename"]] -= $oldsuffix["baseattr"]; + } + + } + + updateuserrow(); + display("Item Drop", gettemplate("explore_drop_accept")); + + } + + if (isset($_POST["ignore"])) { + + die(header("Location: index.php")); + + } + + // And we're done. + display("Item Drop", parsetemplate(gettemplate("explore_drop"),$row)); + + +} + function botkillah() { // Bust a cap in the asses of macro bots. Word. global $userrow; diff --git a/extras/install.sql b/extras/install.sql index 10e55ee..17df319 100644 --- a/extras/install.sql +++ b/extras/install.sql @@ -1,13 +1,13 @@ -- phpMyAdmin SQL Dump --- version 2.6.0-pl3 +-- version 2.6.4-pl3 -- http://www.phpmyadmin.net -- --- Host: localhost --- Generation Time: Dec 10, 2005 at 03:15 PM +-- Host: mysql.dragonscourge.com +-- Generation Time: Feb 08, 2006 at 07:47 AM -- Server version: 4.1.14 --- PHP Version: 5.0.5 +-- PHP Version: 4.4.1 -- --- Database: `scourge2` +-- Database: `scourge` -- -- -------------------------------------------------------- @@ -16,11 +16,12 @@ -- Table structure for table `sx_accounts` -- +DROP TABLE IF EXISTS `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 '', + `emailaddress` varchar(200) 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 '', @@ -28,9 +29,13 @@ CREATE TABLE `sx_accounts` ( `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', + `imageformat` varchar(4) NOT NULL default '', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `sx_accounts` +-- -- -------------------------------------------------------- @@ -38,6 +43,7 @@ CREATE TABLE `sx_accounts` ( -- Table structure for table `sx_babblebox` -- +DROP TABLE IF EXISTS `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', @@ -46,7 +52,7 @@ CREATE TABLE `sx_babblebox` ( `content` varchar(255) NOT NULL default '', `guild` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_babblebox` @@ -58,6 +64,7 @@ CREATE TABLE `sx_babblebox` ( -- Table structure for table `sx_classes` -- +DROP TABLE IF EXISTS `sx_classes`; CREATE TABLE `sx_classes` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(50) NOT NULL default '', @@ -67,15 +74,15 @@ CREATE TABLE `sx_classes` ( `hpperdexterity` float unsigned NOT NULL default '0', `mpperenergy` float unsigned NOT NULL default '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- 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); +INSERT INTO `sx_classes` VALUES (1, 'Barbarian', 0, 0, 3, 2, 1); +INSERT INTO `sx_classes` VALUES (2, 'Sorceress', 0, 0, 1, 2, 3); +INSERT INTO `sx_classes` VALUES (3, 'Paladin', 0, 0, 2, 3, 1); -- -------------------------------------------------------- @@ -83,11 +90,13 @@ INSERT INTO `sx_classes` VALUES (3, 'Paladin', 0, 0, 1.5, 2, 1); -- Table structure for table `sx_control` -- +DROP TABLE IF EXISTS `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 '', + `gameurl` 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 '', @@ -97,6 +106,7 @@ CREATE TABLE `sx_control` ( `showonline` tinyint(3) unsigned NOT NULL default '0', `shownews` tinyint(3) unsigned NOT NULL default '0', `showimages` tinyint(3) unsigned NOT NULL default '0', + `adminemail` varchar(200) NOT NULL default '', `verifyemail` tinyint(3) unsigned NOT NULL default '0', `compression` tinyint(3) unsigned NOT NULL default '0', `debug` tinyint(3) unsigned NOT NULL default '0', @@ -105,14 +115,15 @@ CREATE TABLE `sx_control` ( `pvprefresh` int(10) NOT NULL default '0', `pvptimeout` int(10) NOT NULL default '0', `guildstartup` int(10) unsigned NOT NULL default '100000', + `guildupdate` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- 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); +INSERT INTO `sx_control` VALUES (1, 'Dragon Scourge', 1, '/home/renderse7en/dragonscourge.com/play/', 'http://www.dragonscourge.com/play/', 1, 'http://se7enet.com/forums/ubbthreads.php', '/home/renderse7en/dragonscourge.com/play/images/users/', 'http://www.dragonscourge.com/play/images/users/', 15000, 1, 1, 1, 1, 'jamin@se7enet.com', 1, 1, 0, 1, 255, 30, 120, 100000, 24); -- -------------------------------------------------------- @@ -120,6 +131,7 @@ INSERT INTO `sx_control` VALUES (1, 'Dragon Scourge', 1, 'd:\\server\\docroot\\s -- Table structure for table `sx_difficulties` -- +DROP TABLE IF EXISTS `sx_difficulties`; CREATE TABLE `sx_difficulties` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(50) NOT NULL default '', @@ -128,7 +140,7 @@ CREATE TABLE `sx_difficulties` ( `multiplier` float NOT NULL default '0', `deathpenalty` tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_difficulties` @@ -144,32 +156,35 @@ INSERT INTO `sx_difficulties` VALUES (3, 'Hard', 5, 5, 2, 7); -- Table structure for table `sx_guildapps` -- +DROP TABLE IF EXISTS `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; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_guildapps` -- - -- -------------------------------------------------------- -- -- Table structure for table `sx_guilds` -- +DROP TABLE IF EXISTS `sx_guilds`; CREATE TABLE `sx_guilds` ( `id` int(10) unsigned NOT NULL auto_increment, + `lastupdate` bigint(20) unsigned NOT NULL default '0', `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', + `honor` 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', @@ -183,7 +198,7 @@ CREATE TABLE `sx_guilds` ( `statement` text NOT NULL, `news` text NOT NULL, PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_guilds` @@ -195,6 +210,7 @@ CREATE TABLE `sx_guilds` ( -- Table structure for table `sx_itembase` -- +DROP TABLE IF EXISTS `sx_itembase`; CREATE TABLE `sx_itembase` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(50) NOT NULL default '', @@ -222,7 +238,7 @@ CREATE TABLE `sx_itembase` ( `mod6name` varchar(50) NOT NULL default '', `mod6attr` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_itembase` @@ -278,7 +294,7 @@ INSERT INTO `sx_itembase` VALUES (47, 'Flamberge', 1, 0, 1, 30000, 15000, 75, 34 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 (173, 'Xiran''s Bite', 1, 1, 0, 0, 0, 83, 150, 100, 50, 'physattack', 600, 'fireattack', 600, '', 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); @@ -301,6 +317,9 @@ INSERT INTO `sx_itembase` VALUES (70, 'Plate Mail Shirt', 2, 0, 1, 950, 475, 19, 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 (172, 'Crestfall''s Chain Mail', 2, 1, 0, 0, 0, 50, 75, 80, 0, 'physdefense', 100, 'magicdefense', 75, 'firedefense', 75, 'lightdefense', 75, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (171, 'Numoren''s Ring', 5, 1, 0, 0, 0, 0, 0, 0, 0, '', 0, 'magicattack', 25, 'fireattack', 25, 'lightattack', 25, '', 0, '', 0, '', 0); +INSERT INTO `sx_itembase` VALUES (170, 'Shirreh''s Sword', 1, 1, 0, 0, 0, 25, 0, 0, 0, 'physattack', 75, '', 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); @@ -397,6 +416,7 @@ INSERT INTO `sx_itembase` VALUES (166, 'Bronze Horned Helm', 3, 0, 1, 35000, 175 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); +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); -- -------------------------------------------------------- @@ -404,13 +424,14 @@ INSERT INTO `sx_itembase` VALUES (169, 'Titanium Horned Helm', 3, 0, 1, 50000, 2 -- Table structure for table `sx_itemmodnames` -- +DROP TABLE IF EXISTS `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; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_itemmodnames` @@ -443,6 +464,7 @@ INSERT INTO `sx_itemmodnames` VALUES (20, 'mpgain', 'MP Per Kill', 0); -- Table structure for table `sx_itemprefixes` -- +DROP TABLE IF EXISTS `sx_itemprefixes`; CREATE TABLE `sx_itemprefixes` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(50) NOT NULL default '', @@ -458,7 +480,7 @@ CREATE TABLE `sx_itemprefixes` ( `basename` varchar(50) NOT NULL default '', `baseattr` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_itemprefixes` @@ -473,6 +495,7 @@ INSERT INTO `sx_itemprefixes` VALUES (2, 'Magic', 1, 0, 0, 8, 4, 1, 0, 0, 0, 'ma -- Table structure for table `sx_itemsuffixes` -- +DROP TABLE IF EXISTS `sx_itemsuffixes`; CREATE TABLE `sx_itemsuffixes` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(50) NOT NULL default '', @@ -488,7 +511,7 @@ CREATE TABLE `sx_itemsuffixes` ( `basename` varchar(50) NOT NULL default '', `baseattr` smallint(5) unsigned NOT NULL default '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_itemsuffixes` @@ -503,6 +526,7 @@ INSERT INTO `sx_itemsuffixes` VALUES (2, 'of the Bear', 1, 0, 0, 5, 3, 1, 0, 0, -- Table structure for table `sx_messages` -- +DROP TABLE IF EXISTS `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', @@ -515,7 +539,7 @@ CREATE TABLE `sx_messages` ( `message` text NOT NULL, `gold` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_messages` @@ -527,6 +551,7 @@ CREATE TABLE `sx_messages` ( -- Table structure for table `sx_monsters` -- +DROP TABLE IF EXISTS `sx_monsters`; CREATE TABLE `sx_monsters` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(30) NOT NULL default '', @@ -548,55 +573,223 @@ CREATE TABLE `sx_monsters` ( `spellimmune1` smallint(5) unsigned NOT NULL default '0', `spellimmune2` smallint(5) unsigned NOT NULL default '0', `boss` tinyint(3) unsigned NOT NULL default '0', + `newstory` int(10) unsigned NOT NULL default '0', `hpleech` tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- 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); +INSERT INTO `sx_monsters` VALUES (1, 'Small Slime', 1, 1, 3, 2, 3, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (2, 'Shade', 1, 1, 3, 3, 3, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (3, 'Slime', 1, 2, 4, 3, 4, 7, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (4, 'Small Drake', 1, 2, 5, 4, 5, 8, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (5, 'Skeleton', 1, 3, 7, 5, 7, 12, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (6, 'Haunt', 1, 3, 8, 6, 8, 13, 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (7, 'Big Slime', 1, 4, 10, 7, 10, 16, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (8, 'Drake', 1, 4, 11, 8, 11, 18, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (9, 'Ghost', 1, 5, 11, 8, 12, 19, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (10, 'Bee', 1, 5, 12, 9, 12, 19, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (11, 'Scorpion', 1, 6, 12, 9, 13, 21, 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (12, 'Dawk', 1, 6, 15, 10, 15, 23, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (13, 'Nymph', 1, 7, 16, 11, 16, 25, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (14, 'Ember', 1, 7, 16, 11, 17, 27, 25, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (15, 'Daydream', 1, 8, 18, 12, 18, 29, 29, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (16, 'Wasp', 1, 8, 19, 13, 20, 30, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (17, 'Shadow', 1, 9, 22, 16, 22, 35, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (18, 'Harpy', 1, 9, 22, 16, 24, 38, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (19, 'Air Elemental', 1, 10, 24, 17, 26, 41, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (20, 'Rogue', 1, 10, 28, 19, 29, 44, 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (21, 'Lynx', 1, 11, 31, 23, 32, 49, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (22, 'Trickster', 1, 11, 33, 25, 35, 56, 59, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (23, 'Goblin', 1, 12, 34, 24, 35, 56, 51, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (24, 'Charmer', 1, 12, 38, 26, 38, 61, 58, 35, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (25, 'Raven', 1, 13, 39, 25, 41, 62, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (26, 'Bobcat', 1, 13, 44, 29, 44, 70, 75, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (27, 'Lycan', 1, 14, 48, 34, 48, 73, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (28, 'Fiend', 1, 14, 49, 32, 52, 81, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (29, 'Liche', 1, 15, 51, 38, 56, 84, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (30, 'Dawkin', 1, 15, 54, 36, 60, 94, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (31, 'Anarchist', 1, 16, 58, 45, 64, 102, 113, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (32, 'Hellcat', 1, 16, 64, 47, 68, 102, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (33, 'Fallen Cherub', 1, 17, 70, 46, 72, 111, 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (34, 'Grey Wolf', 1, 17, 74, 54, 76, 118, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (35, 'Black Bear', 1, 18, 77, 50, 80, 127, 133, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (36, 'Knight', 1, 18, 78, 58, 84, 132, 125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (37, 'Giant', 1, 19, 84, 56, 88, 134, 128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (38, 'Young Wyrm', 1, 19, 92, 58, 92, 145, 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (39, 'Lesser Devil', 1, 20, 91, 62, 96, 153, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (40, 'Lesser Demon', 1, 20, 100, 68, 100, 154, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (42, 'Silver Slime', 2, 1, 100, 70, 104, 165, 157, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (43, 'Apparition', 2, 1, 101, 75, 108, 162, 158, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (44, 'Phantasm', 2, 2, 101, 74, 112, 174, 164, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (45, 'Poltergeist', 2, 2, 114, 82, 116, 174, 159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (46, 'Wraith', 2, 3, 113, 80, 120, 185, 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (47, 'Big Drake', 2, 3, 112, 86, 124, 186, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (48, 'Illusion', 2, 4, 118, 81, 128, 198, 208, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (49, 'Dawkare', 2, 4, 130, 89, 132, 201, 206, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (50, 'Illusionist', 2, 5, 130, 85, 136, 204, 221, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (51, 'Skeleton Soldier', 2, 5, 126, 93, 140, 210, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (52, 'Devil', 2, 6, 141, 101, 145, 232, 209, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (53, 'Demon', 2, 6, 150, 99, 150, 228, 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (54, 'Brown Bear', 2, 7, 155, 104, 155, 244, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (55, 'Black Wolf', 2, 7, 151, 111, 160, 248, 248, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (56, 'Water Elemental', 2, 8, 149, 113, 165, 255, 253, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (57, 'Harridan', 2, 8, 169, 102, 170, 269, 288, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (58, 'Sylph', 2, 9, 170, 111, 175, 275, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (59, 'Orc', 2, 9, 164, 121, 180, 287, 302, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (60, 'Dawkra', 2, 10, 167, 128, 185, 296, 276, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (61, 'Shaman', 2, 10, 175, 128, 190, 295, 295, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (62, 'Cinder', 2, 11, 194, 133, 195, 309, 322, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (63, 'Yellowjacket', 2, 11, 190, 130, 200, 318, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (64, 'Rogue Scorpion', 2, 12, 197, 142, 205, 324, 337, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (65, 'Magidrake', 2, 12, 202, 133, 210, 324, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (66, 'Dream', 2, 13, 211, 151, 215, 342, 363, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (67, 'Ocelot', 2, 13, 198, 148, 220, 348, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (68, 'Shadow Raven', 2, 14, 216, 156, 225, 342, 342, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (69, 'Knave', 2, 14, 217, 141, 230, 357, 329, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (70, 'Lycanthor', 2, 15, 217, 165, 235, 365, 362, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (71, 'Mirage', 2, 15, 236, 168, 240, 384, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (72, 'Magician', 2, 16, 236, 152, 245, 378, 401, 160, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (73, 'Mace Knight', 2, 16, 250, 150, 250, 380, 392, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (74, 'Lesser Wyvern', 2, 17, 245, 169, 255, 408, 380, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (75, 'Serafiend', 2, 17, 245, 156, 260, 409, 397, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (76, 'Zhora''s Follower', 2, 18, 255, 183, 265, 422, 389, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (77, 'Zhora''s Cantor', 2, 18, 268, 181, 270, 416, 425, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (78, 'Liche Captain', 2, 19, 267, 176, 275, 421, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (79, 'Leviathan', 2, 19, 278, 188, 280, 448, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (80, 'Renegade', 2, 20, 268, 177, 285, 445, 450, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (81, 'Dark Slime', 3, 1, 270, 195, 290, 456, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (82, 'Phantom', 3, 1, 287, 180, 295, 470, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (83, 'Spirit', 3, 2, 291, 204, 300, 474, 512, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (84, 'Specter', 3, 2, 292, 209, 307, 476, 505, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (85, 'Winged Drake', 3, 3, 299, 189, 314, 484, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (86, 'Shimmer', 3, 3, 312, 196, 321, 498, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (87, 'Dawkor', 3, 4, 319, 197, 328, 515, 546, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (88, 'Enchanter', 3, 4, 312, 201, 335, 530, 546, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (89, 'Mounted Skeleton', 3, 5, 336, 209, 342, 548, 565, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (90, 'Greater Devil', 3, 5, 336, 224, 349, 559, 571, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (91, 'Greater Demon', 3, 6, 346, 235, 356, 542, 526, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (92, 'Polar Bear', 3, 6, 331, 236, 363, 581, 541, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (93, 'Red Wolf', 3, 7, 352, 259, 370, 589, 631, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (94, 'Earth Elemental', 3, 7, 351, 261, 377, 581, 628, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (95, 'Ogress', 3, 8, 377, 231, 384, 603, 664, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (96, 'Nisse', 3, 8, 360, 262, 391, 607, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (97, 'Troll', 3, 9, 359, 251, 398, 613, 613, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (98, 'Wizard', 3, 9, 377, 252, 405, 628, 679, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (99, 'Fire', 3, 10, 396, 252, 412, 631, 581, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (100, 'Hornet', 3, 10, 407, 260, 419, 650, 618, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (101, 'Red Scorpion', 3, 11, 409, 256, 426, 678, 678, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (102, 'Hallucination', 3, 11, 403, 269, 433, 676, 676, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (103, 'Leopard', 3, 12, 432, 295, 440, 687, 687, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (104, 'Frost Raven', 3, 12, 421, 273, 447, 698, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (105, 'Scoundrel', 3, 13, 441, 296, 454, 691, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (106, 'Fallen Muse', 3, 13, 448, 314, 461, 706, 650, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (107, 'Snow Leopard', 3, 14, 431, 286, 468, 745, 760, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (108, 'Lycanthra', 3, 14, 452, 323, 475, 713, 671, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (109, 'Axe Knight', 3, 15, 454, 328, 482, 767, 775, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (110, 'Cheetah', 3, 15, 460, 313, 489, 783, 729, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (111, 'Wyvern', 3, 16, 477, 333, 496, 774, 744, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (112, 'Cherufiend', 3, 16, 478, 322, 503, 755, 725, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (113, 'Zhora''s Advocate', 3, 17, 485, 342, 510, 781, 750, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (114, 'Zhora''s Elder', 3, 17, 497, 362, 517, 786, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (115, 'Liche Prince', 3, 18, 524, 367, 524, 813, 757, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (116, 'Behemoth', 3, 18, 505, 319, 531, 829, 788, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (117, 'Insurgent', 3, 19, 517, 350, 538, 818, 761, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (118, 'Greater Wyvern', 3, 20, 491, 371, 545, 834, 901, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (119, 'Devil Lord', 4, 1, 500, 339, 555, 866, 841, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (120, 'Demon Lord', 4, 1, 565, 390, 565, 888, 906, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (121, 'Grizzly Bear', 4, 2, 547, 368, 575, 880, 863, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (122, 'Arctic Wolf', 4, 2, 580, 369, 585, 884, 805, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (123, 'Fire Elemental', 4, 3, 548, 381, 595, 947, 919, 0, 0, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (124, 'Gorgon', 4, 3, 575, 382, 605, 920, 865, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (125, 'Enchantress', 4, 4, 560, 369, 615, 984, 1014, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (126, 'Ogre', 4, 4, 588, 432, 625, 938, 845, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (127, 'Sorcerer', 4, 5, 610, 445, 635, 991, 932, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (128, 'Blaze', 4, 5, 607, 400, 645, 968, 1056, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (129, 'Demon Hornet', 4, 6, 629, 413, 655, 1009, 1090, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (130, 'Silver Scorpion', 4, 6, 626, 433, 665, 1045, 1045, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (131, 'Torment', 4, 7, 648, 459, 675, 1020, 1020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (132, 'Fire Raven', 4, 7, 651, 439, 685, 1090, 1178, 0, 0, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (133, 'Hellion', 4, 8, 640, 480, 695, 1085, 1064, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (134, 'Fallen Angel', 4, 8, 642, 459, 705, 1058, 1037, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (135, 'Werewolf', 4, 9, 673, 444, 715, 1130, 1130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (136, 'Armored Knight', 4, 9, 667, 464, 725, 1153, 1130, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (137, 'Archfiend', 4, 10, 684, 486, 735, 1140, 1220, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (138, 'Zhora''s Fanatic', 4, 10, 686, 515, 745, 1192, 1145, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (139, 'Zhora''s Priest', 4, 11, 718, 529, 755, 1156, 1099, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (140, 'Liche King', 4, 11, 765, 490, 765, 1224, 1114, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (141, 'Colossus', 4, 12, 706, 473, 775, 1194, 1159, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (142, 'Nihilist', 4, 12, 785, 534, 785, 1202, 1178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (143, 'Armored Skeleton', 4, 13, 795, 501, 795, 1209, 1197, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (144, 'Puma', 4, 13, 749, 556, 805, 1248, 1211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (145, 'Devil King', 4, 14, 758, 563, 815, 1304, 1239, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (146, 'Demon King', 4, 14, 751, 545, 825, 1246, 1271, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (147, 'Kodiak Bear', 4, 15, 810, 568, 835, 1320, 1360, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (148, 'Haunted Wolf', 4, 15, 829, 507, 845, 1352, 1285, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (149, 'Light Elemental', 4, 16, 830, 590, 855, 1368, 1396, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (150, 'Medusa', 4, 16, 831, 597, 865, 1384, 1495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (151, 'Siren', 4, 17, 797, 525, 875, 1400, 1400, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (152, 'Uruk', 4, 17, 868, 611, 885, 1381, 1492, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (153, 'Warlock', 4, 18, 851, 627, 895, 1343, 1249, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (154, 'Jaguar', 4, 18, 869, 589, 905, 1394, 1436, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (155, 'Necromancer', 4, 19, 842, 577, 915, 1373, 1470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (156, 'Demagogue', 4, 19, 833, 555, 925, 1434, 1320, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (157, 'Titan', 4, 20, 917, 571, 935, 1403, 1263, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (158, 'Lion', 4, 20, 870, 577, 945, 1512, 1603, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (159, 'Pyre', 5, 1, 941, 596, 960, 1460, 1606, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (160, 'Figment', 5, 1, 975, 644, 975, 1560, 1701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (161, 'Demon Scorpion', 5, 1, 981, 674, 990, 1505, 1611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (162, 'Nightmare', 5, 2, 945, 674, 1005, 1558, 1403, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (163, 'Silver Raven', 5, 2, 929, 684, 1020, 1632, 1600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (164, 'Bandit', 5, 2, 932, 621, 1035, 1553, 1398, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (165, 'Fallen Archangel', 5, 3, 966, 672, 1050, 1607, 1511, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (166, 'Tiger', 5, 3, 1044, 693, 1065, 1704, 1773, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (167, 'Fallen Seraph', 5, 3, 1070, 670, 1080, 1696, 1595, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (168, 'Werebear', 5, 4, 1095, 657, 1095, 1698, 1648, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (169, 'Demon Knight', 5, 4, 1110, 700, 1110, 1754, 1912, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (170, 'Magic Wyvern', 5, 4, 1125, 720, 1125, 1789, 1754, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (171, 'Fiendlord', 5, 5, 1026, 764, 1140, 1767, 1927, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (172, 'Zhora''s Zealot', 5, 5, 1144, 740, 1155, 1802, 1983, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (173, 'Zhora''s Bishop', 5, 6, 1135, 726, 1170, 1755, 1633, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (174, 'Liche Lord', 5, 6, 1150, 783, 1185, 1825, 1698, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (175, 'Fire Wyvern', 5, 7, 1176, 756, 1200, 1800, 1872, 0, 0, 1500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (176, 'Zhora''s Obsessive', 5, 7, 1094, 851, 1215, 1920, 1882, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (177, 'Zhora''s Archbishop', 5, 8, 1194, 861, 1230, 1907, 1736, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (178, 'Grey Daemon', 5, 8, 1196, 810, 1245, 1968, 2047, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (179, 'Hellhound', 5, 9, 1248, 832, 1260, 1941, 1883, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (180, 'Great Wyrm', 5, 9, 1250, 765, 1275, 2002, 2183, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (181, 'Green Dragon', 5, 10, 1252, 787, 1290, 1987, 1809, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (182, 'Red Daemon', 5, 10, 1214, 823, 1305, 2023, 2125, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (183, 'Hellbeast', 5, 11, 1281, 911, 1320, 2086, 2024, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (184, 'Frost Wyrm', 5, 11, 1269, 801, 1335, 2136, 2286, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (185, 'Blue Dragon', 5, 12, 1229, 851, 1350, 2106, 2296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (186, 'Dark Daemon', 5, 12, 1229, 888, 1365, 2144, 1973, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (187, 'Hellbear', 5, 13, 1353, 966, 1380, 2195, 2020, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (188, 'Red Wyrm', 5, 13, 1270, 921, 1395, 2107, 2150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (189, 'Red Dragon', 5, 14, 1368, 875, 1410, 2242, 2310, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (190, 'Black Daemon', 5, 14, 1326, 984, 1425, 2138, 1946, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (191, 'Hellwolf', 5, 15, 1397, 908, 1440, 2204, 2359, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (192, 'Blue Wyrm', 5, 15, 1383, 1004, 1455, 2212, 2257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (193, 'Dark Dragon', 5, 16, 1323, 941, 1470, 2323, 2207, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (194, 'Fallen Dragon', 5, 16, 1382, 981, 1485, 2317, 2503, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (195, 'Shadow Dragon', 5, 17, 1440, 1005, 1500, 2355, 2214, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (196, 'Black Dragon', 5, 17, 1409, 970, 1515, 2349, 2443, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (197, 'Ancient Dragon', 5, 18, 1500, 980, 1530, 2418, 2660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (198, 'False Dragon', 5, 18, 1545, 1020, 1545, 2333, 2124, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (199, 'Daemonlord', 5, 19, 1420, 1092, 1560, 2372, 2230, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (200, 'Dragonlord', 5, 20, 1497, 1024, 1575, 2410, 2555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0); +INSERT INTO `sx_monsters` VALUES (201, 'Razora', 1, 99, 150, 60, 120, 192, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0); +INSERT INTO `sx_monsters` VALUES (202, 'Numoren', 2, 99, 300, 300, 300, 453, 499, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 6, 0); +INSERT INTO `sx_monsters` VALUES (203, 'Crestfall', 3, 99, 800, 1000, 500, 755, 808, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 9, 0); +INSERT INTO `sx_monsters` VALUES (204, 'Lucifuge''s Throneguard', 4, 99, 200, 300, 700, 1064, 958, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 0); +INSERT INTO `sx_monsters` VALUES (205, 'Lucifuge', 4, 99, 1500, 1500, 850, 1318, 1358, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 13, 0); +INSERT INTO `sx_monsters` VALUES (206, 'Xiran''s Minion', 5, 99, 500, 400, 1200, 1908, 1928, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 16, 0); +INSERT INTO `sx_monsters` VALUES (207, 'Xiran''s Cardinal', 5, 99, 750, 750, 1300, 1976, 1917, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 17, 0); +INSERT INTO `sx_monsters` VALUES (208, 'Xiran', 5, 99, 1000, 1000, 1400, 2128, 2150, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 18, 0); +INSERT INTO `sx_monsters` VALUES (209, 'Xiran', 5, 99, 5000, 5000, 1600, 2528, 2478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 19, 0); -- -------------------------------------------------------- @@ -604,6 +797,7 @@ INSERT INTO `sx_monsters` VALUES (41, 'Razora', 1, 99, 300, 150, 200, 203, 203, -- Table structure for table `sx_pvp` -- +DROP TABLE IF EXISTS `sx_pvp`; CREATE TABLE `sx_pvp` ( `id` bigint(20) unsigned NOT NULL auto_increment, `player1id` int(10) unsigned NOT NULL default '0', @@ -612,22 +806,22 @@ CREATE TABLE `sx_pvp` ( `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, + `turntime` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP, `fightrow` text NOT NULL, PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_pvp` -- - -- -------------------------------------------------------- -- -- Table structure for table `sx_spells` -- +DROP TABLE IF EXISTS `sx_spells`; CREATE TABLE `sx_spells` ( `id` int(10) unsigned NOT NULL auto_increment, `name` varchar(30) NOT NULL default '', @@ -638,7 +832,7 @@ CREATE TABLE `sx_spells` ( `classonly` int(10) unsigned NOT NULL default '0', `classexclude` int(10) unsigned NOT NULL default '0', PRIMARY KEY (`id`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_spells` @@ -707,33 +901,105 @@ INSERT INTO `sx_spells` VALUES (60, 'Stone Skin 5', 'stone', 50, 50, 50, 1, 0); -- -------------------------------------------------------- +-- +-- Table structure for table `sx_story` +-- + +DROP TABLE IF EXISTS `sx_story`; +CREATE TABLE `sx_story` ( + `id` int(10) unsigned NOT NULL auto_increment, + `title` text NOT NULL, + `story` text NOT NULL, + `world` int(10) unsigned NOT NULL default '0', + `latitude` smallint(6) NOT NULL default '0', + `longitude` smallint(6) NOT NULL default '0', + `nextstory` int(10) unsigned NOT NULL default '0', + `targetmonster` int(10) unsigned NOT NULL default '0', + `targetitem` varchar(10) NOT NULL default '', + `targetworld` int(10) unsigned NOT NULL default '0', + `targetlat` smallint(6) NOT NULL default '0', + `targetlon` smallint(6) NOT NULL default '0', + `targetaction` varchar(30) NOT NULL default '', + `rewardname` varchar(30) NOT NULL default '', + `rewardattr` int(11) NOT NULL default '0', + PRIMARY KEY (`id`) +) ENGINE=MyISAM DEFAULT CHARSET=latin1; + +-- +-- Dumping data for table `sx_story` +-- + +INSERT INTO `sx_story` VALUES (1, 'Prologue', 'The light has forsaken this land, and not for the first time. Centuries ago, it was overrun by darkness and then saved by a hero whose lifelong quest was to eradicate evil. The hero succeeded, and in the end, Lucifuge, King of the Dragons, was destroyed... at least for the time being. In the many long years since that time, Lucifuge has been gathering his forces and his power, and has finally regained enough of his former strength to return.\r\n\r\nSo the land is once again in need of a saviour. It will be no easy task, dear adventurer. In the last age, Lucifuge and his minions controlled but a small country. This time, he has sent his forces to sow chaos and darkness throughout the world. Only a brave adventurer will be able to conquer him and restore peace and order to the world.\r\n\r\nContinue on, dear adventurer. You shall be tested dearly, but the rewards will be great.', 1, 0, 0, 2, 0, '', 1, 0, 0, 'In Town', '', 0); +INSERT INTO `sx_story` VALUES (2, 'Queen of Demons', 'You come to a great stone door, with the inscription ''RAZORA'' carved in the Language of the Fallen. Next to the door lie the skeletons of several dead warriors who failed to enter. One of the skeletons is holding a scrap of paper, which reads:\r\n\r\n"We finally made it. The legends are true, Razora does exist. As I write this, we are standing outside the demon queen''s throneroom. Something is following us, though, and has been for several days. We''re making camp tonight, and we''ll head inside in the morning. After the months of travelling, we definitely need our rest if we''re really preparing to face Razora. We''ve survived this far, surely whatever is following us will hold off one more night..."\r\n\r\nYou are now faced with a choice, dear adventurer. Are you ready to face the demon queen Razora, or do you still need more preparation?', 1, 100, -100, 0, 201, '', 0, 0, 0, 'Fighting', '', 0); +INSERT INTO `sx_story` VALUES (3, 'Fallen Queen', 'Razora, the Demon Queen, lies dead at your feet. Even now, her body and all the black blood spilled from it are melting away into the nether. Soon, all that''s left is her heart, which you take with you as proof that you destroyed her.\r\n\r\nOne section of the wall crumbles and falls, and leads to a doorway, guarded by a large statue of an angel. In the angel''s hand is a sword with flames engraved in the blade.\r\n\r\nIt wouldn''t be too much trouble to take the sword, and it does seem like your right to take it, after all the trouble you went through to kill Razora. You can now take the sword and continue through the doorway, or just continue on without it.', 1, 100, -100, 4, 0, '0,170,0', 2, 0, 0, 'Exploring', 'maxhp', 50); +INSERT INTO `sx_story` VALUES (4, 'Shirreh''s Door', 'As you step through the doorway, you have a momentary feeling of the ground being swept out beneath you. Then you are surrounded by light, and you enter a new town. The townsfolk, surprised at your sudden entry through a door that has never been opened, quickly inform you of the legend surrounding the door.\r\n\r\nIt was created by the archangel Shirreh, as a path between this land and the last you were in. Shirreh made the door so that whoever did eventually destroy Razora would be able to travel here and attempt to defeat Numoren, the demon who was given dominion over this land by Lucifuge.\r\n\r\nIt''s time to continue on, dear adventurer. You did well in the last land, but a new evil awaits you here. One small dirt path leads out of town and into the dense jungle.', 2, 0, 0, 5, 0, '', 0, 0, 0, 'In Town', '', 0); +INSERT INTO `sx_story` VALUES (5, 'Numoren''s Portal', 'Deep in the heart of the jungles that cover this land, you come to a clearing. In the center of the clearing are two large upright stones, with one more stone on top. You walk around it, and looking through the doorway from one side only shows the other side of the clearing. But looking through it from the other side shows a dark hallway.\r\n\r\nWould you like to step through the magic doorway into the hall, or would you like some more time to get ready for this battle?', 2, 100, 100, 0, 202, '', 0, 0, 0, 'Fighting', '', 0); +INSERT INTO `sx_story` VALUES (6, 'Numoren''s Ring', 'Numoren has fallen at your hand, and this land is safe. Shirreh''s second door, identical to the first except for the rune carvings at the top of the frame, appears in a wall behind you.\r\n\r\nAs Numoren''s body disappears in a puff of smoke, you hear a small jingling sound and notice a gold ring falling to the ground. Numoren''s ring glows and you can almost hear it calling your name.\r\n\r\nWould you like to pick up the ring, dear adventurer?', 2, 100, 100, 7, 0, '0,171,0', 3, 0, 0, '', 'goldbonus', 5); +INSERT INTO `sx_story` VALUES (7, 'Forsaken Land', 'You step through Shirreh''s second door, and again feel the ground fall away for a few seconds. You come out of the darkness into a land even stranger than the last two. The sky is filled with dark storm clouds, but the clouds are a discomforting red color. The ground and trees are all bare. You are standing in what apparently used to be a town, but it''s completely deserted, and looks as if it has been for a long time.\r\n\r\nTwo signs hang from a tree nearby the doorway you came through. The first, which appears to be the only thing in town with a somewhat fresh coat of paint, points east and reads "Fort Kayne - 2 Miles."\r\n\r\nThe second is less friendly: "BEWARE CRESTFALL"', 3, 0, 0, 8, 0, '', 0, 0, 0, 'Exploring', '', 0); +INSERT INTO `sx_story` VALUES (8, 'Lord of Plague', 'So much for killing Lucifuge any time soon. Now you have to deal with Crestfall. The castle you''ve seen from a distance looked ominous before, but now that you''re up close, it''s even worse. Skeletons of fallen warriors are hanging on crosses in the courtyard - these are the first signs of actual human "life" you''ve seen since you came through Shirreh''s door. All the bare and stunted trees are covered with flocks of ravens.\r\n\r\n"LORD OF PLAGUE" is carved in the stone above the gateway into the courtyard. With so much already accomplished, and Lucifuge still somewhere ahead of you, you have no other choice now, dear adventurer.', 3, -100, -100, 0, 203, '', 0, 0, 0, 'Fighting', '', 0); +INSERT INTO `sx_story` VALUES (9, 'Bellerophon', 'Crestfall, the mortally-wounded Lord of Plague, lies writhing at your feet, and you are rather enjoying watching his throes of agony. As of yet, he has not exactly died, but instead he seems to... age... somehow. His skin is drying up and wrinkling, his hair is falling out, and before long all that''s left is a crusty old skeleton surrounded by a brilliantly gleaming chainmail coat.\r\n\r\nShirreh''s third door appears, but this time you can read the runes carved on it. And you don''t really like what the runes say.\r\n\r\nABANDON HOPE, ALL YE WHO ENTER HERE', 3, -100, -100, 10, 0, '0,172,0', 4, 0, 0, '', 'strength', 50); +INSERT INTO `sx_story` VALUES (10, 'Inferno', 'The last land was weird. This land is... spooky. You find yourself in the middle of a desert. The dark red clouds still cover the sky, but now the dry and cracked ground is also red. The exact same color as blood. Everywhere, you can see little vents of steam drifting up from the ground. Whoever - or whatever - created this place must not have much need for decoration. Other than the steam vents, the landscape is completely flat and featureless for miles around.\r\n\r\nOne nice thing about the land being so featureless is that you''ll at least be able to see your enemies long before they ever actually get close enough to do any damage.\r\n\r\nWith nothing but a vague feeling that you should probably head south, you decide not to stick around and wait for something to try eating you for breakfast.', 4, 0, 0, 11, 0, '', 0, 0, 0, 'Exploring', '', 0); +INSERT INTO `sx_story` VALUES (11, 'Welcome To My Parlor', 'At long last, you''ve made it. Lucifuge''s mountain fortress is all that stands between you and world peace. The huge black gates swing open, awating your entry, before you even arrive. No sunlight penetrates into the courtyard, even though you can''t see anything really blocking it out. The only light inside seems to be coming directly from the great stone gargoyle statue in the center.\r\n\r\nBut as you get closer, the stone gargoyle stands up and turns around.\r\n\r\n"Greetings, human. Lucifuge has been expecting you. He doesn''t really like to be bothered, though, so I''m here to take care of you."', 4, -100, 100, 0, 204, '', 0, 0, 0, 'Fighting', '', 0); +INSERT INTO `sx_story` VALUES (12, 'Throneguard''s Demise', 'The throneguard screams, and falls. From deep in the bowels of the fortress, you hear a roar so loud that even the ground is shaking beneath you.\r\n\r\nYou have nowhere left to go but inside the fortress, and you''ve come too far to give up now.', 4, -100, 100, 0, 205, '', 0, 0, 0, 'Fighting', '', 0); +INSERT INTO `sx_story` VALUES (13, 'The Light Restored', 'Lucifuge, the overlord of all the evil that has destroyed this land, lies vanquished at your feet. You take his heart, still warm and dripping with his black blood, and put it in your pack, next to the one you already took from Razora.\r\n\r\nYou can''t help but be mildly disturbed by the last words uttered by Lucifuge before he died, though...\r\n\r\n"But... Xiran said it wouldn''t be like this."', 4, -100, 100, 14, 0, '', 5, 0, 0, '', 'dexterity', 50); +INSERT INTO `sx_story` VALUES (14, 'The Blacklands', 'Just as you''re catching your breath, the fortress starts to shake and the floor crumbles beneath you. You fall for what seems like an eternity, until finally landing in yet another place. The ground and sky are both black. This land, like the last, is also dotted with little vents in the ground - here, though, the vents spout fire instead of steam. And it''s a good thing, too, because in this place there is no sun. The fire vents are your only source of light. Thankfully the place where you fell is only a short distance from what looks like a town.\r\n\r\nAs you enter the place, which the sign out front identifies as simply "Outpost 5," the guards tell you just what you''ve been waiting for: your quest isn''t over.\r\n\r\n"Lucifuge was Xiran''s highest ranking general. But he was still only second in command. Xiran himself is locked in his ice prison, Dreadguard, to the north. Shirreh banished him there ages ago, and throughout the centuries these outposts have served as guard stations to make sure he doesn''t escape. But now through the work of Lucifuge, Xiran could regain enough of his strength to escape the prison and destroy the world. You must hurry, traveller. Your only chance at killing Xiran rests on getting there while Xiran is still chained down."', 5, 0, 0, 15, 0, '', 0, 0, 0, 'In Town', '', 0); +INSERT INTO `sx_story` VALUES (15, 'Xiran''s Minion', 'The ice prison Dreadguard looms tall and white before you. In an odd little twist that seems to defy all logic, more of the fire vents seem to be coming straight out of the ice.\r\n\r\nAs you come close to the prison, a large beast strides out towards you. The beast has the body of a man, but the head of a snake, and wings like a bat.\r\n\r\nJust before drawing its sword and preparing to fight, the beast calls out a warning: "Take heed, hero, you now come to the palace of Xiran, and it shall not fall quietly. Better souls than yours now inhabit this place, and Xiran takes pleasure in their eternal torment."', 5, 100, 100, 0, 206, '', 0, 0, 0, 'Fighting', '', 0); +INSERT INTO `sx_story` VALUES (16, 'Xiran''s Cardinal', 'As the minion falls, another figure steps out of the darkness. This one looks like a man, a plain ordinary man. The Cardinal, highest among all the mortals who worship Xiran, wears only a plain black cloak, and carries nothing more than a walking stick.\r\n\r\nSurely it can''t be this easy...', 5, 100, 100, 0, 207, '', 0, 0, 0, 'Fighting', '', 0); +INSERT INTO `sx_story` VALUES (17, 'The Demon God', 'With both the minion and the Cardinal slain, you enter the prison. The entire building seems to be one huge room, and in the very center of it is the demon god, Xiran. He looks something like a man, except he is about twenty feet tall and covered with black scales. Two horns are coming out of his head, and his eyes are bright red. His arms are stretched out, held by massive chains to the walls. But despite the obvious pain this is causing him, he seems to be smiling at you.\r\n\r\n"Welcome, mortal. I''m glad you''ve come, for it is you who shall set me free."', 5, 100, 100, 0, 208, '', 0, 0, 0, 'Fighting', '', 0); +INSERT INTO `sx_story` VALUES (18, 'Bonds Broken', 'After a great battle, Xiran finally sags down as far as the chains will stretch. The red light from his eyes dims and goes out. You listen closely, and the beating from his huge heart slows and finally stops altogether.\r\n\r\nSuddenly the temperature drops, and the huge chains holding Xiran''s lifeless body get frosty with ice crystals. Then you see the chains glowing beneath the layer of ice, and with a thunderous crack, the shackles break and fall away from Xiran''s hands.\r\n\r\nImmediately his eyes flash, and almost before you can blink, Xiran has lept into the air and a great sword has appeared in his hands.\r\n\r\n"See, mortal! I told you I would be freed. You should have left well enough alone in matters that did not concern you. You''ve come so far, it will be such a shame to have to kill you now."', 5, 100, 100, 0, 209, '', 0, 0, 0, 'Fighting', 'energy', 50); +INSERT INTO `sx_story` VALUES (19, 'Epilogue', 'With one final triumphant swing, you pierce Xiran''s heart and immediately your weapon disintegrates in front of your eyes. Xiran falls to the ground, and as the walls of the ice prison are falling down around you, Xiran''s body bursts into flames and is utterly consumed in seconds, leaving only a pile of ash on the floor.\r\n\r\nHis sword, though, remains unscathed by the fire, so as you are looking for the quickest way out of the crumbling building, you grab it and sling it over your shoulder. It''s only fair, after all, since the demon god''s heart took your own weapon away from you.\r\n\r\nYou make your way back to the last outpost, and the entire population has come out to see you. After many long ages, the dreadful task of awating Xiran''s escape has been lifted from their shoulders.\r\n\r\nNow that you''ve finally saved the world, you can''t wait to have a drink...\r\n\r\nThe End', 5, 100, 100, 20, 0, '0,173,0', 0, 0, 0, '', '', 0); +INSERT INTO `sx_story` VALUES (20, 'Fin', 'You have now beat the game and have been added to the Scroll of Heroes. You may continue playing if you want, or of course you could also take a well-deserved rest. Thank you for playing, and we hope you''ve enjoyed it.', 5, 100, 100, 9999, 0, '', 0, 0, 0, '', '', 0); + +-- -------------------------------------------------------- + -- -- Table structure for table `sx_towns` -- +DROP TABLE IF EXISTS `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', + `innprice` int(10) unsigned NOT NULL default '0', + `mapprice` int(10) unsigned 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; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- 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); +INSERT INTO `sx_towns` VALUES (2, 'Norfolk', 1, 25, 25, 10, 25, 5, 3, 8); +INSERT INTO `sx_towns` VALUES (3, 'Calentia', 1, 50, -50, 25, 50, 15, 6, 11); +INSERT INTO `sx_towns` VALUES (4, 'Resmark', 1, -75, 75, 40, 100, 30, 9, 14); +INSERT INTO `sx_towns` VALUES (5, 'Erdricksburg', 1, 99, 99, 60, 500, 50, 12, 17); +INSERT INTO `sx_towns` VALUES (6, 'Lorensgaard', 2, 0, 0, 75, 0, 40, 15, 20); +INSERT INTO `sx_towns` VALUES (7, 'Nailes', 2, 17, -23, 100, 150, 55, 18, 23); +INSERT INTO `sx_towns` VALUES (8, 'Nostrum', 2, 46, 33, 150, 300, 70, 21, 27); +INSERT INTO `sx_towns` VALUES (9, 'Vauderellin', 2, -70, 65, 200, 500, 85, 24, 30); +INSERT INTO `sx_towns` VALUES (10, 'Underwood', 2, -95, -95, 250, 750, 90, 27, 33); +INSERT INTO `sx_towns` VALUES (11, 'Fort Kayne', 3, 0, 2, 200, 0, 75, 30, 36); +INSERT INTO `sx_towns` VALUES (12, 'Fort Minor', 3, -20, -25, 250, 800, 100, 33, 40); +INSERT INTO `sx_towns` VALUES (13, 'Fort Oligard', 3, 48, 37, 300, 1000, 125, 37, 44); +INSERT INTO `sx_towns` VALUES (14, 'Fort Wilmor', 3, 78, 68, 350, 1200, 150, 41, 48); +INSERT INTO `sx_towns` VALUES (15, 'Fort Plastid', 3, 98, 98, 400, 1400, 175, 45, 52); +INSERT INTO `sx_towns` VALUES (16, 'Luxor', 4, -5, 0, 200, 0, 200, 49, 56); +INSERT INTO `sx_towns` VALUES (17, 'Trake', 4, -20, 5, 300, 1800, 225, 53, 60); +INSERT INTO `sx_towns` VALUES (18, 'Cormorent', 4, -40, 15, 400, 2000, 250, 57, 64); +INSERT INTO `sx_towns` VALUES (19, 'Illuvian', 4, -60, 35, 500, 2500, 275, 61, 68); +INSERT INTO `sx_towns` VALUES (20, 'Pogue', 4, -80, 60, 600, 3000, 300, 65, 72); +INSERT INTO `sx_towns` VALUES (21, 'Outpost 5', 5, 0, 0, 350, 0, 325, 69, 76); +INSERT INTO `sx_towns` VALUES (22, 'Outpost 7', 5, 20, 20, 500, 3500, 350, 73, 80); +INSERT INTO `sx_towns` VALUES (23, 'Outpost 15', 5, 35, -55, 650, 4000, 375, 77, 82); +INSERT INTO `sx_towns` VALUES (24, 'Outpost 22', 5, -74, -69, 800, 4500, 400, 80, 84); +INSERT INTO `sx_towns` VALUES (25, 'Outpost 42', 5, 89, 94, 950, 5000, 425, 83, 85); -- -------------------------------------------------------- @@ -741,6 +1007,7 @@ INSERT INTO `sx_towns` VALUES (5, 'Erdricksburg', 1, 99, 99, 60, 500, 50, 16, 25 -- Table structure for table `sx_users` -- +DROP TABLE IF EXISTS `sx_users`; CREATE TABLE `sx_users` ( `id` int(10) unsigned NOT NULL auto_increment, `account` int(10) unsigned NOT NULL default '0', @@ -758,6 +1025,8 @@ CREATE TABLE `sx_users` ( `latitude` smallint(6) NOT NULL default '0', `longitude` smallint(6) NOT NULL default '0', `story` tinyint(3) unsigned NOT NULL default '1', + `storylat` smallint(6) NOT NULL default '0', + `storylon` smallint(6) NOT NULL default '0', `world` tinyint(3) unsigned NOT NULL default '1', `guild` int(10) unsigned NOT NULL default '0', `guildrank` int(10) unsigned NOT NULL default '0', @@ -791,12 +1060,16 @@ CREATE TABLE `sx_users` ( `lightdefense` smallint(5) unsigned NOT NULL default '0', `spellslist` varchar(200) NOT NULL default '0', `townslist` varchar(200) NOT NULL default '0,1', + `pvpwins` int(10) unsigned NOT NULL default '0', + `pvplosses` int(10) unsigned NOT NULL default '0', + `pvphighest` int(10) unsigned NOT NULL default '0', `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', + `dropidstring` varchar(10) 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', @@ -835,7 +1108,7 @@ CREATE TABLE `sx_users` ( `mpgain` tinyint(3) unsigned NOT NULL default '0', PRIMARY KEY (`id`), FULLTEXT KEY `item1name` (`item1name`) -) ENGINE=MyISAM; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_users` @@ -847,13 +1120,14 @@ CREATE TABLE `sx_users` ( -- Table structure for table `sx_worlds` -- +DROP TABLE IF EXISTS `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; +) ENGINE=MyISAM DEFAULT CHARSET=latin1; -- -- Dumping data for table `sx_worlds` @@ -863,4 +1137,4 @@ 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 +INSERT INTO `sx_worlds` VALUES (5, 'Unreality', 100, 0); diff --git a/fight.php b/fight.php index c12309d..be81ca3 100644 --- a/fight.php +++ b/fight.php @@ -97,6 +97,26 @@ function dofight() { display("Fighting",parsetemplate(gettemplate("fight_turn"),$pagerow)); } elseif (isset($_POST["run"])) { + + if (rand(4,10) + ceil(sqrt($userrow["physdefense"])) < (rand(1,5) + ceil(sqrt($monsterrow["physattack"])))) { + + monsterturn(); + $fightrow["message"] = "You tried to run away, but the monster blocked you!
"; + if ($userrow["currenthp"] <= 0) { youlose(); } + updateuserrow(); + + $pagerow = array( + "message"=>$fightrow["message"], + "monstername"=>$monsterrow["name"], + "monsterhp"=>$userrow["currentmonsterhp"], + "monsterphysdamage"=>$fightrow["monsterphysdamage"], + "monstermagicdamage"=>$fightrow["monstermagicdamage"], + "monsterfiredamage"=>$fightrow["monsterfiredamage"], + "monsterlightdamage"=>$fightrow["monsterlightdamage"]); + $pagerow["spells"] = dospellslist(); + display("Fighting",parsetemplate(gettemplate("fight_monsteronly"),$pagerow)); + + } $userrow["currentaction"] = "Exploring"; $userrow["currentmonsterid"] = 0; @@ -105,6 +125,26 @@ function dofight() { die(header("Location: index.php")); } else { + + if (rand(1,10) + ceil(sqrt($userrow["physdefense"])) < (rand(1,7) + ceil(sqrt($monsterrow["physattack"])))) { + + monsterturn(); + $fightrow["message"] = "The monster attacked before you were ready!
"; + if ($userrow["currenthp"] <= 0) { youlose(); } + updateuserrow(); + + $pagerow = array( + "message"=>$fightrow["message"], + "monstername"=>$monsterrow["name"], + "monsterhp"=>$userrow["currentmonsterhp"], + "monsterphysdamage"=>$fightrow["monsterphysdamage"], + "monstermagicdamage"=>$fightrow["monstermagicdamage"], + "monsterfiredamage"=>$fightrow["monsterfiredamage"], + "monsterlightdamage"=>$fightrow["monsterlightdamage"]); + $pagerow["spells"] = dospellslist(); + display("Fighting",parsetemplate(gettemplate("fight_monsteronly"),$pagerow)); + + } $pagerow = array( "monstername"=>$monsterrow["name"], @@ -224,8 +264,8 @@ function youwin() { $userrow["currentfight"] = 0; $userrow["currentmonsterid"] = 0; $userrow["currentmonsterhp"] = 0; - if ($monsterrow["boss"] == 1) { - $userrow["story"]++; + if ($monsterrow["newstory"] != "0") { + $userrow["story"] = $monsterrow["newstory"]; } // Now we add Per Kill mods. @@ -244,6 +284,23 @@ function youwin() { if (($userrow["level"] % 5 == 0)) { $userrow["levelspell"]++; $template = "fight_levelupspell"; } } + // Roll for monster drop. + if (rand(0,7) == 1) { + + // Grab lots of stuff from the DB. + $preitemsrow = dorow(doquery("SELECT * FROM {{table}} WHERE reqlevel>='".($userrow["level"] - 5)."' AND reqlevel<='".$userrow["level"]."' AND willdrop='1' ORDER BY RAND() LIMIT 1", "itembase")); + $preprefixrow = dorow(doquery("SELECT * FROM {{table}} WHERE reqlevel<='".$userrow["level"]."' ORDER BY RAND() LIMIT 1", "itemprefixes")); + $presuffixrow = dorow(doquery("SELECT * FROM {{table}} WHERE reqlevel<='".$userrow["level"]."' ORDER BY RAND() LIMIT 1", "itemsuffixes")); + + $idstring = ""; + if (rand(0,4)==1) { $idstring .= $preprefixrow["id"] . ","; } else { $idstring .= "0,"; } + $idstring .= $preitemsrow["id"] . ","; + if (rand(0,4)==1) { $idstring .= $presuffixrow["id"]; } else { $idstring .= "0"; } + $userrow["dropidstring"] = $idstring; + $fightrow["message"] .= "The monster has dropped an item! Click here for more information.
"; + + } + // Update for new stats. updateuserrow(); @@ -294,8 +351,10 @@ function youlose() { "deathpenalty"=>$userrow["deathpenalty"]); // Then put them in town & reset fight stuff. - $userrow["latitude"] = 0; - $userrow["longitude"] = 0; + $townquery = doquery("SELECT * FROM {{table}} WHERE world='".$userrow["world"]."' ORDER BY id ASC LIMIT 1", "towns"); + $townrow = mysql_fetch_array($townquery); + $userrow["latitude"] = $townrow["latitude"]; + $userrow["longitude"] = $townrow["longitude"]; $userrow["currentaction"] = "In Town"; $userrow["currentfight"] = 0; $userrow["currentmonsterid"] = 0; diff --git a/guilds.php b/guilds.php index a910219..96bb339 100644 --- a/guilds.php +++ b/guilds.php @@ -12,12 +12,13 @@ function guildmain() { if (!isset($_GET["list"])) { guildhome(); } } - $guilds = doquery("SELECT * FROM {{table}} WHERE isactive='1' ORDER BY name", "guilds"); - $row["guildlist"] = ""; + $guilds = doquery("SELECT * FROM {{table}} WHERE isactive='1' ORDER BY honor", "guilds"); + $row["guildlist"] = "
"; $bgcolor = "background-color: #ffffff;"; if (mysql_num_rows($guilds) > 0) { while ($guildrow = mysql_fetch_array($guilds)) { - $row["guildlist"] .= "\n"; + if ($userrow["guild"] == 0) { $applylink = "Apply to Join | "; } else { $applylink = ""; } + $row["guildlist"] .= "\n"; if ($bgcolor == "background-color: #ffffff;") { $bgcolor = "background-color: #dddddd;"; } else { $bgcolor = "background-color: #ffffff;"; } } } else { @@ -31,11 +32,13 @@ function guildmain() { function guildhome() { - global $userrow; + global $userrow, $controlrow; 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")); + if ($guild["lastupdate"] <= (mktime() - ($controlrow["guildupdate"] * 3600))) { guildupdate(); } + switch($userrow["guildrank"]) { case 1: $template = "guild_homelow"; break; case 2: $template = "guild_homelow"; break; @@ -76,7 +79,7 @@ function guildhome() { $pagerow["news"] = nl2br($guild["news"]); } else { $pagerow["news"] = "No news yet."; } - $title = "[".$guild["tagline"]."] ".$guild["name"]; + $title = "[".$guild["tagline"]."] ".$guild["name"] . " (Honor: ".$guild["honor"].")"; display($title, parsetemplate(gettemplate($template),$pagerow)); } @@ -90,6 +93,7 @@ function guildcreate() { 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 ($userrow["level"] < 10) { err("You cannot join a guild until you are at least Level 10. Please continue playing until you make Level 10, then try again."); } if (isset($_POST["submit"])) { @@ -223,6 +227,7 @@ function guildapp() { 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 ($userrow["level"] < 10) { err("You cannot join a guild until you are at least Level 10. Please continue playing until you make Level 10, then try again."); } if (isset($_POST["yes"])) { @@ -371,6 +376,7 @@ function guildapprove() { $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"); + guildupdate(); 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"); @@ -393,6 +399,7 @@ function guildremove() { $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"); + guildupdate(); display("Remove Members", "Thank you for removing this user.

You may now return to Town or to your Guild Hall."); } elseif (isset($_POST["no"])) { @@ -469,6 +476,7 @@ function guildleave() { $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"); + guildupdate(); display("Leave Guild", "Thank you for leaving your Guild.

You may now return to Town."); } elseif (isset($_POST["no"])) { @@ -481,4 +489,25 @@ function guildleave() { } +function guildupdate() { + + global $userrow; + + $guild = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds")); + $userquery = doquery("SELECT * FROM {{table}} WHERE guild='".$userrow["guild"]."'", "users"); + + $honor = $guild["members"]; + $totalexp = 0; + while ($users = mysql_fetch_array($userquery)) { + $totalexp += $users["experience"]; + $honor += ($users["pvpwins"] * 2); + $honor -= $users["pvplosses"]; + } + $honor += floor(sqrt($totalexp)); + + $lastupdate = mktime(); + $update = doquery("UPDATE {{table}} SET honor='$honor',lastupdate='$lastupdate' WHERE id='".$userrow["guild"]."' LIMIT 1", "guilds"); + +} + ?> \ No newline at end of file diff --git a/images/background1.jpg b/images/background1.jpg index 5e8693f..b83146a 100644 Binary files a/images/background1.jpg and b/images/background1.jpg differ diff --git a/images/background2.jpg b/images/background2.jpg index 800a5cd..970213d 100644 Binary files a/images/background2.jpg and b/images/background2.jpg differ diff --git a/images/background3.jpg b/images/background3.jpg index b7da387..4bdec91 100644 Binary files a/images/background3.jpg and b/images/background3.jpg differ diff --git a/images/background4.jpg b/images/background4.jpg index c7646dc..945b3d3 100644 Binary files a/images/background4.jpg and b/images/background4.jpg differ diff --git a/images/background5.jpg b/images/background5.jpg index 49a973c..d553d43 100644 Binary files a/images/background5.jpg and b/images/background5.jpg differ diff --git a/images/items/5.png b/images/items/5.png new file mode 100644 index 0000000..9f4ced3 Binary files /dev/null and b/images/items/5.png differ diff --git a/images/sigtag.png b/images/sigtag.png new file mode 100644 index 0000000..04b8132 Binary files /dev/null and b/images/sigtag.png differ diff --git a/images/town_bank.png b/images/town_bank.png index 09a1ff8..6650c67 100644 Binary files a/images/town_bank.png and b/images/town_bank.png differ diff --git a/images/town_buy.png b/images/town_buy.png index 8c21dc5..9a22119 100644 Binary files a/images/town_buy.png and b/images/town_buy.png differ diff --git a/images/town_duel.png b/images/town_duel.png index 6009336..df2b123 100644 Binary files a/images/town_duel.png and b/images/town_duel.png differ diff --git a/images/town_gamble.png b/images/town_gamble.png index d2f5df7..b7b1897 100644 Binary files a/images/town_gamble.png and b/images/town_gamble.png differ diff --git a/images/town_guilds.png b/images/town_guilds.png index 46dc7ef..7eedc7f 100644 Binary files a/images/town_guilds.png and b/images/town_guilds.png differ diff --git a/images/town_hall.png b/images/town_hall.png index a96608f..cac80f0 100644 Binary files a/images/town_hall.png and b/images/town_hall.png differ diff --git a/images/town_inn.png b/images/town_inn.png index 8ef3dad..4095eda 100644 Binary files a/images/town_inn.png and b/images/town_inn.png differ diff --git a/images/town_maps.png b/images/town_maps.png index d13536e..39ebce3 100644 Binary files a/images/town_maps.png and b/images/town_maps.png differ diff --git a/images/town_post.png b/images/town_post.png index 337a39c..4a60761 100644 Binary files a/images/town_post.png and b/images/town_post.png differ diff --git a/index.php b/index.php index 502731e..75c2fa5 100644 --- a/index.php +++ b/index.php @@ -10,6 +10,8 @@ if(isset($_GET["do"])) { // Exploring. case "explore": include("explore.php"); move(); break; case "travel": include("explore.php"); travel($do[1]); break; + case "quickheal": include("explore.php"); quickheal(); break; + case "itemdrop": include("explore.php"); itemdrop(); break; case "humanity": include("explore.php"); botkillah(); break; // Towns. case "inn": include("town.php"); inn(); break; @@ -43,6 +45,7 @@ if(isset($_GET["do"])) { case "guilddisband": include("guilds.php"); guilddisband(); break; case "guildedit": include("guilds.php"); guildedit(); break; case "guildleave": include("guilds.php"); guildleave(); break; + case "guildupdate": include("guilds.php"); guildupdate(); break; // Misc. case "babblebox": include("misc.php"); babblebox2(); break; case "showmap": include("misc.php"); showmap(); break; @@ -58,6 +61,9 @@ if(isset($_GET["do"])) { function donothing() { global $userrow; + if ($userrow["story"] != "0" && $userrow["storylat"] == $userrow["latitude"] && $userrow["storylon"] == $userrow["longitude"]) { + die(header("Location: story.php")); + } if ($userrow["currentpvp"] != 0) { die(header("Location: pvp.php")); } diff --git a/lib.php b/lib.php index bfe67fd..a27e3db 100644 --- a/lib.php +++ b/lib.php @@ -4,10 +4,10 @@ $starttime = getmicrotime(); $numqueries = 0; $link = opendb(); -$version = "Beta 2"; -$bnumber = "12"; -$bname = "Eggs"; -$bdate = "12.10.2005"; +$version = "Beta 3"; +$bnumber = "13"; +$bname = "Unlucky"; +$bdate = "2.04.2006"; // Handling for servers with magic_quotes turned on. // Example from php.net. @@ -136,6 +136,41 @@ function makesafe($d) { } +function mymail($to, $title, $body, $from = '') { // thanks to arto dot PLEASE dot DO dot NOT dot SPAM at artoaaltonen dot fi. + + global $controlrow; + extract($controlrow); + + + $from = trim($from); + + if (!$from) { + $from = '<$adminemail>'; + } + + $rp = $adminemail; + $org = '$gameurl'; + $mailer = 'PHP'; + + $head = ''; + $head .= "Content-Type: text/plain \r\n"; + $head .= "Date: ". date('r'). " \r\n"; + $head .= "Return-Path: $rp \r\n"; + $head .= "From: $from \r\n"; + $head .= "Sender: $from \r\n"; + $head .= "Reply-To: $from \r\n"; + $head .= "Organization: $org \r\n"; + $head .= "X-Sender: $from \r\n"; + $head .= "X-Priority: 3 \r\n"; + $head .= "X-Mailer: $mailer \r\n"; + + $body = str_replace("\r\n", "\n", $body); + $body = str_replace("\n", "\r\n", $body); + + return mail($to, $title, $body, $head); + +} + function err($error, $system = false, $panels = true) { // Basic little error handler. display("Error", $error, $panels); @@ -171,6 +206,101 @@ function updateuserrow() { } +function builditem($prefix, $baseitem, $suffix, $modrow) { // Copy of town.php's builditem(). + + 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 display($title, $content, $panels = true) { // Finalize page and output to browser. include('config.php'); @@ -190,11 +320,12 @@ function display($title, $content, $panels = true) { // Finalize page and output $row = array(); $row["gamename"] = $controlrow["gamename"]; $row["pagetitle"] = $title; - $row["background"] = "background"; + $row["background"] = "background" . $userrow["world"]; $row["version"] = $version; $row["numqueries"] = $numqueries; $row["totaltime"] = round(getmicrotime()-$starttime,4); $row["content"] = $content; + if ($controlrow["forumurl"] != "") { $row["forumslink"] = "Support Forums"; } else { $row["forumslink"] = ""; } // Setup for side panels. include("panels.php"); diff --git a/login.php b/login.php index c913d20..9082d45 100644 --- a/login.php +++ b/login.php @@ -18,12 +18,13 @@ function login() { // Setup. include("config.php"); extract($_POST); - $query = doquery("SELECT id,password FROM {{table}} WHERE username='$username' LIMIT 1", "accounts"); + $query = doquery("SELECT * FROM {{table}} WHERE username='$username' LIMIT 1", "accounts"); $row = dorow($query); // Errors. if ($row == false) { err("Invalid username. Please go back and try again.", false, false); } if ($row["password"] != md5($password)) { err("Invalid password. Please go back and try again.", false, false); } + if ($row["verifycode"] != 1) { err("You have not yet verified your account. Please click the link found in your Accoutn Verification email before continuing. If you never received the email, please check your spam filter settings or contact the game administrator for further assistance.", false, false); } // Finish. $newcookie = $row["id"] . " " . $username . " " . md5($row["password"] . "--" . $dbsettings["secretword"]); diff --git a/map.php b/map.php index 49ffc64..7006500 100644 --- a/map.php +++ b/map.php @@ -30,6 +30,7 @@ $text .= "player_x=".$x."&"; $text .= "player_y=".$y."&"; $text .= "player_name=".$userrow["charname"]."&"; +// Then do everyone else. $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; @@ -44,6 +45,21 @@ while ($b = mysql_fetch_array($users)) { $count++; } +// Then do quests. +if ($userrow["story"] != "0" && $userrow["story"] != "9999") { + + $lat = $userrow["storylat"]; + $lon = $userrow["storylon"]; + 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 .= "story=1&"; + $text .= "story_x=".$x."&"; + $text .= "story_y=".$y."&"; + $text .= "story_name=Quest&"; + +} else { $text .= "story=0&"; } + echo($text); ?> \ No newline at end of file diff --git a/map.swf b/map.swf index cf3271b..26ad828 100644 Binary files a/map.swf and b/map.swf differ diff --git a/mapmini.php b/mapmini.php index 61878fc..8b468ee 100644 --- a/mapmini.php +++ b/mapmini.php @@ -28,6 +28,7 @@ if ($lon >= 0) { $x = 50 + ceil($lon * $perpix); } else { $x = ceil(($worldrow[" $text .= "player_x=".$x."&"; $text .= "player_y=".$y."&"; +// Then do everyone else. $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; @@ -41,6 +42,21 @@ while ($b = mysql_fetch_array($users)) { $count++; } +// Then do quests. +if ($userrow["story"] != "0" && $userrow["story"] != "9999") { + + $lat = $userrow["storylat"]; + $lon = $userrow["storylon"]; + 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 .= "story=1&"; + $text .= "story_x=".$x."&"; + $text .= "story_y=".$y."&"; + $text .= "story_name=Quest&"; + +} else { $text .= "story=0&"; } + echo($text); ?> \ No newline at end of file diff --git a/mapmini.swf b/mapmini.swf index 90b3598..67acb00 100644 Binary files a/mapmini.swf and b/mapmini.swf differ diff --git a/panels.php b/panels.php index 9c1812e..937d0f0 100644 --- a/panels.php +++ b/panels.php @@ -44,15 +44,10 @@ function panelleft() { // 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"; + while ($d = mysql_fetch_array($traveltoquery)) { + $row["travelto"] .= "".$d["name"]."
\n"; } // And then we're done with this panel. @@ -124,7 +119,7 @@ function paneltop($loggedin = true) { function panelbottom() { - global $userrow; + global $userrow, $spells; $row = array(); if ($userrow["charpicture"] != "") { @@ -133,6 +128,28 @@ function panelbottom() { $row["charpicture"] = "images/users/nopicture.gif"; } + // Do quickspell stuff. + $quickhealid = 0; + $quickhealvalue = 0; + if ($userrow["currentaction"] == "Exploring") { + for ($i=1; $i<11; $i++) { + if ($userrow["spell".$i."id"] != 0) { + if ($spells[$userrow["spell".$i."id"]]["fname"] == "heal") { + if ($spells[$userrow["spell".$i."id"]]["value"] > $quickhealvalue) { + $quickhealvalue = $spells[$userrow["spell".$i."id"]]["value"]; + $quickhealid = $spells[$userrow["spell".$i."id"]]["id"]; + } + } + } + } + } + if ($quickhealid != 0) { + $row["quickheal"] = "(Heal)"; + } else { + $row["quickheal"] = ""; + } + + // Do the rest of it. $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"] = ""; } diff --git a/pvp.php b/pvp.php index 8d7decd..0bc607b 100644 --- a/pvp.php +++ b/pvp.php @@ -305,6 +305,9 @@ function youwin() { mpgain(); // Update for new stats. + $userrow["pvpwins"] += 1; + $monsterrow["pvplosses"] += 1; + if ($monsterrow["level"] > $userrow["pvphighest"]) { $userrow["pvphighest"] = $monsterrow["level"]; } updateopponent(); updateuserrow(); $fightrowimploded = $fightrow["playerphysdamage"].",".$fightrow["playermagicdamage"].",".$fightrow["playerfiredamage"].",".$fightrow["playerlightdamage"].",".$fightrow["message"]; diff --git a/story.php b/story.php new file mode 100644 index 0000000..ca54471 --- /dev/null +++ b/story.php @@ -0,0 +1,209 @@ +$b) { + $modrow[$b["fieldname"]] = $b; + } + $story["reward"] .= "
You've gained a permanent reward from this quest:
"; + $story["reward"] .= $modrow[$story["rewardname"]]["prettyname"] . ": +" . $story["rewardattr"]; + if ($modrow[$story["rewardname"]]["percent"] == 1) { $story["reward"] .= "%"; } + $story["reward"] .= "
This reward will be applied when you continue on your adventure."; + } + + $story["story"] = nl2br($story["story"]); + display($story["title"], parsetemplate(gettemplate("story_teleport"), $story)); + +} + +function storymonster() { + + global $userrow, $story; + + if (isset($_POST["submit"])) { + + $monster = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$story["targetmonster"]."' LIMIT 1", "monsters")); + $querystring = "currentmonsterid='".$monster["id"]."', currentmonsterhp='".(ceil(rand($monster["maxhp"] * .75, $monster["maxhp"]) * $userrow["difficulty"]))."', currentaction='Fighting'"; + $update = doquery("UPDATE {{table}} SET $querystring WHERE id='".$userrow["id"]."' LIMIT 1", "users"); + die(header("Location: fight.php")); + + } + + $story["story"] = nl2br($story["story"]); + display($story["title"], parsetemplate(gettemplate("story_monster"), $story)); + +} + +function storyitem() { + + global $userrow, $story; + + $premodrow = dorow(doquery("SELECT * FROM {{table}} ORDER BY id","itemmodnames")); + foreach($premodrow as $a=>$b) { + $modrow[$b["fieldname"]] = $b; + } + + $thenewitem = explode(",",$story["targetitem"]); + $newitem = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$thenewitem[1]."' LIMIT 1", "itembase")); + $newprefix = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$thenewitem[0]."' LIMIT 1", "itemprefixes")); + $newsuffix = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$thenewitem[2]."' LIMIT 1", "itemsuffixes")); + $newfullitem = builditem($newprefix, $newitem, $newsuffix, $modrow); + $story["itemtable"] = parsetemplate(gettemplate("explore_drop_itemrow"), $newfullitem); + + if ($userrow["item".$newitem["slotnumber"]."idstring"] != "0") { + $theolditem = explode(",",$userrow["item".$newitem["slotnumber"]."idstring"]); + $olditem = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$theolditem[1]."' LIMIT 1", "itembase")); + $oldprefix = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$theolditem[0]."' LIMIT 1", "itemprefixes")); + $oldsuffix = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$theolditem[2]."' LIMIT 1", "itemsuffixes")); + $oldfullitem = builditem($oldprefix, $olditem, $oldsuffix, $modrow); + $story["olditems"] = parsetemplate(gettemplate("town_buy_olditemrow"), $oldfullitem); + } else { + $oldfullitem = false; $oldprefix = false; $oldsuffix = false; + $story["olditems"] = "You don't have any item in this slot."; + } + + if (isset($_POST["takeitem"])) { + + // 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."); } + + // Now do stuff to userrow (new item only). + $userrow["item" . $newfullitem["slotnumber"] . "idstring"] = $newfullitem["fullid"]; + $userrow["item" . $newfullitem["slotnumber"] . "name"] = $newfullitem["name"]; + $userrow[$newfullitem["basename"]] += $newfullitem["baseattr"]; + for($j=1; $j<7; $j++) { + if ($newfullitem["mod".$j."name"] != "") { + $userrow[$newfullitem["mod".$j."name"]] += $newfullitem["mod".$j."attr"]; + } + } + if ($newprefix != false) { + $userrow[$newprefix["basename"]] += $newprefix["baseattr"]; + } + if ($newsuffix != false) { + $userrow[$newsuffix["basename"]] += $newsuffix["baseattr"]; + } + + // Do more stuff to userrow (old item only). + if ($oldfullitem != false) { + + $userrow[$oldfullitem["basename"]] -= $oldfullitem["baseattr"]; + for($j=1; $j<7; $j++) { + if ($oldfullitem["mod".$j."name"] != "") { + $userrow[$oldfullitem["mod".$j."name"]] -= $oldfullitem["mod".$j."attr"]; + } + } + if ($oldprefix != false) { + $userrow[$oldprefix["basename"]] -= $oldprefix["baseattr"]; + } + if ($oldsuffix != false) { + $userrow[$oldsuffix["basename"]] -= $oldsuffix["baseattr"]; + } + + } + + if ($story["nextstory"] != "0") { + $nextstory = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$story["nextstory"]."' LIMIT 1", "story")); + $userrow["story"] = $nextstory["id"]; + $userrow["storylat"] = $nextstory["latitude"]; + $userrow["storylon"] = $nextstory["longitude"]; + } + if ($story["targetworld"] != "0") { + $userrow["world"] = $story["targetworld"]; + $userrow["latitude"] = $story["targetlat"]; + $userrow["longitude"] = $story["targetlon"]; + } + if ($story["targetaction"] != "") { + $userrow["currentaction"] = $story["targetaction"]; + } + if ($story["rewardname"] != "") { + $userrow[$story["rewardname"]] += $story["rewardattr"]; + } + + updateuserrow(); + die(header("Location: index.php")); + + } + + if (isset($_POST["noitem"])) { + + if ($story["nextstory"] != "0") { + $nextstory = dorow(doquery("SELECT * FROM {{table}} WHERE id='".$story["nextstory"]."' LIMIT 1", "story")); + $userrow["story"] = $nextstory["id"]; + $userrow["storylat"] = $nextstory["latitude"]; + $userrow["storylon"] = $nextstory["longitude"]; + } + if ($story["targetworld"] != "0") { + $userrow["world"] = $story["targetworld"]; + $userrow["latitude"] = $story["targetlat"]; + $userrow["longitude"] = $story["targetlon"]; + } + if ($story["targetaction"] != "") { + $userrow["currentaction"] = $story["targetaction"]; + } + if ($story["rewardname"] != "") { + $userrow[$story["rewardname"]] += $story["rewardattr"]; + } + + updateuserrow(); + die(header("Location: index.php")); + + } + + $story["reward"] = ""; + if ($story["rewardname"] != "") { + $premodrow = dorow(doquery("SELECT * FROM {{table}} ORDER BY id","itemmodnames")); + foreach($premodrow as $a=>$b) { + $modrow[$b["fieldname"]] = $b; + } + $story["reward"] .= "
You've gained a permanent reward from this quest:
"; + $story["reward"] .= $modrow[$story["rewardname"]]["prettyname"] . ": +" . $story["rewardattr"]; + if ($modrow[$story["rewardname"]]["percent"] == 1) { $story["reward"] .= "%"; } + $story["reward"] .= "
This reward will be applied when you continue on your adventure."; + } + + $story["story"] = nl2br($story["story"]); + display($story["title"], parsetemplate(gettemplate("story_item"), $story)); + +} + +?> \ No newline at end of file diff --git a/templates/admin_primary.php b/templates/admin_primary.php new file mode 100644 index 0000000..c6c3aa2 --- /dev/null +++ b/templates/admin_primary.php @@ -0,0 +1,70 @@ + +{{gamename}} :: {{pagetitle}} + + +
+ +
Guild Name & TagHonorFunctions
[".$guildrow["tagline"]."] ".$guildrow["name"]."Apply to Join | Member List
[".$guildrow["tagline"]."] ".$guildrow["name"]."".$guildrow["honor"]."$applylinkMember List
+ + + + + + + + + +
+
+ {{gamename}} + + {{topnav}} +
+
+
+ {{leftnav}} +
{{bottomnav}}
+ + + + + +
+ Version {{version}} / {{numqueries}} Queries / {{totaltime}} Seconds + + Dragon Scourge © 2003-2005 by renderse7en +
+ + +END; + +?> \ No newline at end of file diff --git a/templates/explore_drop.php b/templates/explore_drop.php new file mode 100644 index 0000000..e3abe18 --- /dev/null +++ b/templates/explore_drop.php @@ -0,0 +1,15 @@ +
+
The stats for your current item are:
+{{olditems}}
+
The stats for the dropped item are:
+{{itemtable}} +
+
+ +
+END; + +?> \ No newline at end of file diff --git a/templates/explore_drop_accept.php b/templates/explore_drop_accept.php new file mode 100644 index 0000000..b74bc85 --- /dev/null +++ b/templates/explore_drop_accept.php @@ -0,0 +1,8 @@ +
+You may now continue exploring. +END; + +?> \ No newline at end of file diff --git a/templates/explore_drop_itemrow.php b/templates/explore_drop_itemrow.php new file mode 100644 index 0000000..15f81f7 --- /dev/null +++ b/templates/explore_drop_itemrow.php @@ -0,0 +1,18 @@ + +{{image}} + +{{name}}
+{{attrtype}}: {{basevalue}}
+{{level}} +{{strength}} +{{dexterity}} +{{energy}} +{{itemmods}} + + +END; + +?> \ No newline at end of file diff --git a/templates/explore_quickheal.php b/templates/explore_quickheal.php new file mode 100644 index 0000000..bd46c4a --- /dev/null +++ b/templates/explore_quickheal.php @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/templates/fight_monsteronly.php b/templates/fight_monsteronly.php new file mode 100644 index 0000000..1faf562 --- /dev/null +++ b/templates/fight_monsteronly.php @@ -0,0 +1,16 @@ +{{monstername}}.
+Monster's HP: {{monsterhp}}

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

+Command? +
+
+{{spells}}
+ +
+END; + +?> \ No newline at end of file diff --git a/templates/panels_bottom.php b/templates/panels_bottom.php index aee6bea..a42ca2d 100644 --- a/templates/panels_bottom.php +++ b/templates/panels_bottom.php @@ -15,8 +15,9 @@ $template = << - {{levelup}}
- {{levelspell}} + {{levelup}}
+ {{levelspell}}
+ {{quickheal}} diff --git a/templates/primary.php b/templates/primary.php index f150713..1043262 100644 --- a/templates/primary.php +++ b/templates/primary.php @@ -65,10 +65,13 @@ a:hover { color: #663300; }
- - + diff --git a/templates/pvp_challenged.php b/templates/pvp_challenged.php index df2f83e..295c5e2 100644 --- a/templates/pvp_challenged.php +++ b/templates/pvp_challenged.php @@ -2,7 +2,11 @@ $template = << -You have been challenged to a duel by {{charname}} (Level {{level}}). Do you accept?

+You have been challenged to a duel by {{charname}} (Level {{level}}).
+Duels Won: {{pvpwins}}
+Duels Lost: {{pvplosses}}
+Highest Character Defeated: {{pvphighest}}

+Do you accept?

diff --git a/templates/story_item.php b/templates/story_item.php new file mode 100644 index 0000000..bd34f8a --- /dev/null +++ b/templates/story_item.php @@ -0,0 +1,16 @@ +
+
The stats for your current item are:
+{{olditems}}
+
The stats for the dropped item are:
+{{itemtable}}
+
+ +

+END; + +?> \ No newline at end of file diff --git a/templates/story_monster.php b/templates/story_monster.php new file mode 100644 index 0000000..9023be8 --- /dev/null +++ b/templates/story_monster.php @@ -0,0 +1,12 @@ + +
+ +

+If you don't want to fight the monster yet, please continue exploring using the direction buttons or the Travel To menus. +END; + +?> \ No newline at end of file diff --git a/templates/story_teleport.php b/templates/story_teleport.php new file mode 100644 index 0000000..c1e8c0e --- /dev/null +++ b/templates/story_teleport.php @@ -0,0 +1,12 @@ + +
+ + +END; + +?> \ No newline at end of file diff --git a/templates/town.php b/templates/town.php index 852e53a..84e0609 100644 --- a/templates/town.php +++ b/templates/town.php @@ -4,22 +4,19 @@ $template = <<
+ Version {{version}} / {{numqueries}} Queries / {{totaltime}} Seconds + + {{forumslink}} + Dragon Scourge © 2003-2005 by renderse7en
- - - - + + + - - - - + + + - - - - + + +
Stay at the Inn




Buy Weapons and Armor




Buy Maps




Duelling Grounds




The Inn


Buy Items


Buy Maps


Deposit/Withdraw Gold at the Bank
Enter the Post Office
{{unread}}
Enter the Gambling Hall
View the Hall of Fame
The Bank


The Post Office {{unread}}


The Gambling Hall


Enter the Guild Hall
Duelling Grounds
The Guild Hall
Hall of Fame
diff --git a/templates/town_buy1.php b/templates/town_buy1.php index 5dd3fbc..3fd76b4 100644 --- a/templates/town_buy1.php +++ b/templates/town_buy1.php @@ -2,8 +2,9 @@ $template = <<
-Click an item's name to purchase it.

-The following items are available in this town:

+
The stats for your current items are:
+{{olditems}}
+
The following items are available in this town:
{{itemtable}}
If you've changed your mind, you may also return to town. diff --git a/templates/town_buy_olditemrow.php b/templates/town_buy_olditemrow.php new file mode 100644 index 0000000..a22068f --- /dev/null +++ b/templates/town_buy_olditemrow.php @@ -0,0 +1,14 @@ + +{{image}} + +{{name}}
+{{attrtype}}: {{basevalue}}
+{{itemmods}} + + +END; + +?> \ No newline at end of file diff --git a/templates/town_halloffamerow.php b/templates/town_halloffamerow.php index 4d1d213..72077cd 100644 --- a/templates/town_halloffamerow.php +++ b/templates/town_halloffamerow.php @@ -9,7 +9,8 @@ $template = <<{{newcharname}}
Level: {{level}}
Exp: {{experience}}
-Birthday: {{fregdate}} +Birthday: {{fregdate}}
+Duel Record: {{pvpwins}} Won / {{pvplosses}} Lost / Highest Won: {{pvphighest}} END; diff --git a/templates/users_onlinechar.php b/templates/users_onlinechar.php index 53a0334..e9b4376 100644 --- a/templates/users_onlinechar.php +++ b/templates/users_onlinechar.php @@ -33,6 +33,10 @@ Fire Defense: {{firedefense}}

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

+ +Duels Won: {{pvpwins}}
+Duels Lost: {{pvplosses}}
+Highest Character Defeated: {{pvphighest}}

Return to the game.
diff --git a/templates/users_profile.php b/templates/users_profile.php index da6cf7a..ee268bb 100644 --- a/templates/users_profile.php +++ b/templates/users_profile.php @@ -37,6 +37,10 @@ Fire Defense: {{firedefense}}

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

+ +Duels Won: {{pvpwins}}
+Duels Lost: {{pvplosses}}
+Highest Character Defeated: {{pvphighest}}

Return to the game.
diff --git a/templates/users_register1.php b/templates/users_register1.php index d627899..63b31e2 100644 --- a/templates/users_register1.php +++ b/templates/users_register1.php @@ -6,8 +6,8 @@ $template = <<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:


+Email Address: +Verify Email Address:


Image Format:
(Some versions of Internet Explorer may not be compatible with the PNG image format.) diff --git a/templates/users_settings.php b/templates/users_settings.php index 8d944ae..9a03604 100644 --- a/templates/users_settings.php +++ b/templates/users_settings.php @@ -9,7 +9,7 @@ Old Password:

Verify New Password:

Passwords must be 30 alphanumeric characters or less.


-Email Address: +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.) diff --git a/templates/users_verified.php b/templates/users_verified.php new file mode 100644 index 0000000..cc3f45a --- /dev/null +++ b/templates/users_verified.php @@ -0,0 +1,8 @@ +
+Click here to continue to the Login screen. +END; + +?> \ No newline at end of file diff --git a/town.php b/town.php index e07fab9..0645a2a 100644 --- a/town.php +++ b/town.php @@ -76,7 +76,7 @@ function map() { // Buy maps to towns for the Travel To menu. } else { - $townquery = doquery("SELECT * FROM {{table}} ORDER BY id", "towns"); + $townquery = doquery("SELECT * FROM {{table}} WHERE world='".$userrow["world"]."' ORDER BY id", "towns"); $townrow = dorow($townquery); $townslist = explode(",",$userrow["townslist"]); @@ -232,23 +232,50 @@ function buy() { // Buy items from merchants. } 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")); + $preitemsrow = dorow(doquery("SELECT * FROM {{table}} WHERE reqlevel>='".$townrow["itemminlvl"]."' AND reqlevel<='".$townrow["itemmaxlvl"]."' ORDER BY RAND() LIMIT 10 ", "itembase")); + $preprefixrow = dorow(doquery("SELECT * FROM {{table}} WHERE reqlevel<='".$userrow["level"]."'", "itemprefixes")); + $presuffixrow = dorow(doquery("SELECT * FROM {{table}} WHERE reqlevel<='".$userrow["level"]."'", "itemsuffixes")); + $allitemsrow = dorow(doquery("SELECT * FROM {{table}}", "itembase")); + $allprefixrow = dorow(doquery("SELECT * FROM {{table}}", "itemprefixes")); + $allsuffixrow = dorow(doquery("SELECT * FROM {{table}}", "itemsuffixes")); $premodrow = dorow(doquery("SELECT * FROM {{table}} ORDER BY id","itemmodnames")); - // Format the mod name row. + // Format the rows. + foreach($allitemsrow as $a=>$b) { + $itemsrow[$b["id"]] = $b; + } + foreach($allprefixrow as $a=>$b) { + $prefixrow[$b["id"]] = $b; + } + foreach($allsuffixrow as $a=>$b) { + $suffixrow[$b["id"]] = $b; + } foreach($premodrow as $a=>$b) { $modrow[$b["fieldname"]] = $b; } - // Now build the item table. + // Build old item table. + $row["olditems"] = ""; + for($i=1; $i<7; $i++) { + + if ($userrow["item".$i."idstring"] != "0") { + $ids = explode(",",$userrow["item".$i."idstring"]); + $baseitem = $itemsrow[$ids[1]]; + if ($ids[0] != 0) { $prefix = $prefixrow[$ids[0]]; } else { $prefix = false; } + if ($ids[2] != 0) { $suffix = $suffixrow[$ids[2]]; } else { $suffix = false; } + $fullitem = builditem($prefix, $baseitem, $suffix, $modrow); + $row["olditems"] .= parsetemplate(gettemplate("town_buy_olditemrow"), $fullitem); + } + + } + + // Now build the new 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; } + $baseitem = $preitemsrow[rand(0,(sizeof($preitemsrow)-1))]; + if (rand(0,4)==1) { $prefix = $preprefixrow[rand(0,(sizeof($preprefixrow)-1))]; } else { $prefix = false; } + if (rand(0,4)==1) { $suffix = $presuffixrow[rand(0,(sizeof($presuffixrow)-1))]; } else { $suffix = false; } $fullitem = builditem($prefix, $baseitem, $suffix, $modrow); $row["itemtable"] .= parsetemplate(gettemplate("town_buy_itemrow"), $fullitem); @@ -261,101 +288,6 @@ function buy() { // Buy items from merchants. } -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")); @@ -405,44 +337,25 @@ function bank() { 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); + $topquery = doquery("SELECT *, DATE_FORMAT(birthdate, '%m.%d.%Y') AS fregdate FROM {{table}} ORDER BY experience DESC LIMIT 25", "users"); $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"]."\""; + while ($b = mysql_fetch_array($topquery)) { + if ($b["charpicture"] != "") { + $b["avatar"] = "\"".$b["charname"]."\""; } else { - $top["avatar"] = "\"".$top["charname"]."\""; + $b["avatar"] = "\"".$b["charname"]."\""; } - $top["experience"] = number_format($top["experience"]); - $top["number"] = $i; - if ($top["guild"] != 0) { - $charname = "[".$top["guildtag"]."]".$top["charname"].""; + $b["experience"] = number_format($b["experience"]); + $b["number"] = $i; + if ($b["guild"] != 0) { + $charname = "[".$b["guildtag"]."]".$b["charname"].""; } else { - $charname = $top["charname"]; + $charname = $b["charname"]; } - $top["newcharname"] = $charname; - $row["halltable"] .= parsetemplate(gettemplate("town_halloffamerow"), $top); + $b["newcharname"] = $charname; + $row["halltable"] .= parsetemplate(gettemplate("town_halloffamerow"), $b); $i++; } $row["halltable"] .= "
\n"; diff --git a/users.php b/users.php index 999c297..0bbb153 100644 --- a/users.php +++ b/users.php @@ -65,6 +65,7 @@ function register() { for ($i=0; $i<8; $i++) { $verifycode .= chr(rand(65,90)); } + $verifycode = md5($verifycode); } else { $verifycode='1'; } @@ -99,6 +100,29 @@ function register() { } +function sendregmail($emailaddress, $vercode) { + + global $controlrow; + extract($controlrow); + $verurl = $gameurl . "verify.php?code=$vercode"; + +$email = << \ No newline at end of file