From 7659cbed525054ef83a4b1c0882fdb4cdd9577a7 Mon Sep 17 00:00:00 2001 From: Sky Johnson Date: Mon, 1 Jul 2024 20:53:23 -0500 Subject: [PATCH] Reorganize, update install to step two --- config.php | 11 - public/css/dragon.css | 21 + {images => public/img}/background.gif | Bin {images => public/img}/background.jpg | Bin {images => public/img}/bars_green.gif | Bin {images => public/img}/bars_red.gif | Bin {images => public/img}/bars_yellow.gif | Bin public/img/bg/bg.webp | Bin 0 -> 87024 bytes {images => public/img}/button_character.gif | Bin {images => public/img}/button_fastspells.gif | Bin {images => public/img}/button_functions.gif | Bin {images => public/img}/button_help.gif | Bin {images => public/img}/button_inventory.gif | Bin {images => public/img}/button_location.gif | Bin {images => public/img}/button_login.gif | Bin {images => public/img}/button_logout.gif | Bin {images => public/img}/button_register.gif | Bin {images => public/img}/button_shoutbox.gif | Bin {images => public/img}/button_spells.gif | Bin {images => public/img}/button_status.gif | Bin {images => public/img}/button_towns.gif | Bin {images => public/img}/compass_01.gif | Bin {images => public/img}/compass_02.gif | Bin {images => public/img}/compass_03.gif | Bin {images => public/img}/compass_04.gif | Bin {images => public/img}/dkforumsbutton.gif | Bin {images => public/img}/help_exploring.jpg | Bin {images => public/img}/help_fighting.jpg | Bin {images => public/img}/icon_armor.gif | Bin {images => public/img}/icon_shield.gif | Bin {images => public/img}/icon_weapon.gif | Bin {images => public/img}/logo.gif | Bin {images => public/img}/map.gif | Bin {images => public/img}/title_exploring.gif | Bin {images => public/img}/title_fighting.gif | Bin {images => public/img}/town_1.gif | Bin {images => public/img}/town_2.gif | Bin {images => public/img}/town_3.gif | Bin {images => public/img}/town_4.gif | Bin {images => public/img}/town_5.gif | Bin {images => public/img}/town_6.gif | Bin {images => public/img}/town_7.gif | Bin {images => public/img}/town_8.gif | Bin public/index.php | 5 + public/install/index.php | 489 ++++++++++++++++++ server/bootstrap.php | 15 + server/database.php | 374 ++++++++++++++ server/database/README.md | 4 + server/database/dragon.db | Bin 0 -> 90112 bytes lib.php => server/lib.php | 81 +-- {templates => server/templates}/admin.php | 0 {templates => server/templates}/babblebox.php | 0 .../templates}/changepassword.php | 0 {templates => server/templates}/fight.php | 0 server/templates/install/first.php | 33 ++ server/templates/install/layout.php | 16 + server/templates/install/second.php | 52 ++ {templates => server/templates}/leftnav.php | 0 {templates => server/templates}/login.php | 0 .../templates}/lostpassword.php | 0 {templates => server/templates}/minimal.php | 0 .../templates}/onlinechar.php | 0 {templates => server/templates}/primary.php | 0 {templates => server/templates}/register.php | 0 {templates => server/templates}/rightnav.php | 0 {templates => server/templates}/showchar.php | 0 {templates => server/templates}/towns.php | 0 {templates => server/templates}/verify.php | 0 68 files changed, 1031 insertions(+), 70 deletions(-) delete mode 100644 config.php create mode 100644 public/css/dragon.css rename {images => public/img}/background.gif (100%) rename {images => public/img}/background.jpg (100%) rename {images => public/img}/bars_green.gif (100%) rename {images => public/img}/bars_red.gif (100%) rename {images => public/img}/bars_yellow.gif (100%) create mode 100644 public/img/bg/bg.webp rename {images => public/img}/button_character.gif (100%) rename {images => public/img}/button_fastspells.gif (100%) rename {images => public/img}/button_functions.gif (100%) rename {images => public/img}/button_help.gif (100%) rename {images => public/img}/button_inventory.gif (100%) rename {images => public/img}/button_location.gif (100%) rename {images => public/img}/button_login.gif (100%) rename {images => public/img}/button_logout.gif (100%) rename {images => public/img}/button_register.gif (100%) rename {images => public/img}/button_shoutbox.gif (100%) rename {images => public/img}/button_spells.gif (100%) rename {images => public/img}/button_status.gif (100%) rename {images => public/img}/button_towns.gif (100%) rename {images => public/img}/compass_01.gif (100%) rename {images => public/img}/compass_02.gif (100%) rename {images => public/img}/compass_03.gif (100%) rename {images => public/img}/compass_04.gif (100%) rename {images => public/img}/dkforumsbutton.gif (100%) rename {images => public/img}/help_exploring.jpg (100%) rename {images => public/img}/help_fighting.jpg (100%) rename {images => public/img}/icon_armor.gif (100%) rename {images => public/img}/icon_shield.gif (100%) rename {images => public/img}/icon_weapon.gif (100%) rename {images => public/img}/logo.gif (100%) rename {images => public/img}/map.gif (100%) rename {images => public/img}/title_exploring.gif (100%) rename {images => public/img}/title_fighting.gif (100%) rename {images => public/img}/town_1.gif (100%) rename {images => public/img}/town_2.gif (100%) rename {images => public/img}/town_3.gif (100%) rename {images => public/img}/town_4.gif (100%) rename {images => public/img}/town_5.gif (100%) rename {images => public/img}/town_6.gif (100%) rename {images => public/img}/town_7.gif (100%) rename {images => public/img}/town_8.gif (100%) create mode 100644 public/index.php create mode 100644 public/install/index.php create mode 100644 server/bootstrap.php create mode 100644 server/database.php create mode 100644 server/database/README.md create mode 100644 server/database/dragon.db rename lib.php => server/lib.php (87%) rename {templates => server/templates}/admin.php (100%) rename {templates => server/templates}/babblebox.php (100%) rename {templates => server/templates}/changepassword.php (100%) rename {templates => server/templates}/fight.php (100%) create mode 100644 server/templates/install/first.php create mode 100644 server/templates/install/layout.php create mode 100644 server/templates/install/second.php rename {templates => server/templates}/leftnav.php (100%) rename {templates => server/templates}/login.php (100%) rename {templates => server/templates}/lostpassword.php (100%) rename {templates => server/templates}/minimal.php (100%) rename {templates => server/templates}/onlinechar.php (100%) rename {templates => server/templates}/primary.php (100%) rename {templates => server/templates}/register.php (100%) rename {templates => server/templates}/rightnav.php (100%) rename {templates => server/templates}/showchar.php (100%) rename {templates => server/templates}/towns.php (100%) rename {templates => server/templates}/verify.php (100%) diff --git a/config.php b/config.php deleted file mode 100644 index b1d2606..0000000 --- a/config.php +++ /dev/null @@ -1,11 +0,0 @@ - "localhost", // MySQL server name. (Default: localhost) - "user" => "", // MySQL username. - "pass" => "", // MySQL password. - "name" => "", // MySQL database name. - "prefix" => "dk", // Prefix for table names. (Default: dk) - "secretword" => ""); // Secret word used when hashing information for cookies. - -?> \ No newline at end of file diff --git a/public/css/dragon.css b/public/css/dragon.css new file mode 100644 index 0000000..d8a36e8 --- /dev/null +++ b/public/css/dragon.css @@ -0,0 +1,21 @@ +* { + box-sizing: border-box; +} + +body { + background-image: url(/img/bg/bg.webp); + background-repeat: repeat; +} + +#container { + max-width: 996px; + margin: 0 auto; +} + +.mb-1 { + margin-bottom: 1rem; +} + +.mb-2 { + margin-bottom: 2rem; +} \ No newline at end of file diff --git a/images/background.gif b/public/img/background.gif similarity index 100% rename from images/background.gif rename to public/img/background.gif diff --git a/images/background.jpg b/public/img/background.jpg similarity index 100% rename from images/background.jpg rename to public/img/background.jpg diff --git a/images/bars_green.gif b/public/img/bars_green.gif similarity index 100% rename from images/bars_green.gif rename to public/img/bars_green.gif diff --git a/images/bars_red.gif b/public/img/bars_red.gif similarity index 100% rename from images/bars_red.gif rename to public/img/bars_red.gif diff --git a/images/bars_yellow.gif b/public/img/bars_yellow.gif similarity index 100% rename from images/bars_yellow.gif rename to public/img/bars_yellow.gif diff --git a/public/img/bg/bg.webp b/public/img/bg/bg.webp new file mode 100644 index 0000000000000000000000000000000000000000..bdc53756c8ffc08d1b727dd5a1372ca2cc0efaea GIT binary patch literal 87024 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�YaiFr)&d=_izsMa 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%0D@Y|<3 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 L5ON_gi;3_6+ma*6 literal 0 HcmV?d00001 diff --git a/images/button_character.gif b/public/img/button_character.gif similarity index 100% rename from images/button_character.gif rename to public/img/button_character.gif diff --git a/images/button_fastspells.gif b/public/img/button_fastspells.gif similarity index 100% rename from images/button_fastspells.gif rename to public/img/button_fastspells.gif diff --git a/images/button_functions.gif b/public/img/button_functions.gif similarity index 100% rename from images/button_functions.gif rename to public/img/button_functions.gif diff --git a/images/button_help.gif b/public/img/button_help.gif similarity index 100% rename from images/button_help.gif rename to public/img/button_help.gif diff --git a/images/button_inventory.gif b/public/img/button_inventory.gif similarity index 100% rename from images/button_inventory.gif rename to public/img/button_inventory.gif diff --git a/images/button_location.gif b/public/img/button_location.gif similarity index 100% rename from images/button_location.gif rename to public/img/button_location.gif diff --git a/images/button_login.gif b/public/img/button_login.gif similarity index 100% rename from images/button_login.gif rename to public/img/button_login.gif diff --git a/images/button_logout.gif b/public/img/button_logout.gif similarity index 100% rename from images/button_logout.gif rename to public/img/button_logout.gif diff --git a/images/button_register.gif b/public/img/button_register.gif similarity index 100% rename from images/button_register.gif rename to public/img/button_register.gif diff --git a/images/button_shoutbox.gif b/public/img/button_shoutbox.gif similarity index 100% rename from images/button_shoutbox.gif rename to public/img/button_shoutbox.gif diff --git a/images/button_spells.gif b/public/img/button_spells.gif similarity index 100% rename from images/button_spells.gif rename to public/img/button_spells.gif diff --git a/images/button_status.gif b/public/img/button_status.gif similarity index 100% rename from images/button_status.gif rename to public/img/button_status.gif diff --git a/images/button_towns.gif b/public/img/button_towns.gif similarity index 100% rename from images/button_towns.gif rename to public/img/button_towns.gif diff --git a/images/compass_01.gif b/public/img/compass_01.gif similarity index 100% rename from images/compass_01.gif rename to public/img/compass_01.gif diff --git a/images/compass_02.gif b/public/img/compass_02.gif similarity index 100% rename from images/compass_02.gif rename to public/img/compass_02.gif diff --git a/images/compass_03.gif b/public/img/compass_03.gif similarity index 100% rename from images/compass_03.gif rename to public/img/compass_03.gif diff --git a/images/compass_04.gif b/public/img/compass_04.gif similarity index 100% rename from images/compass_04.gif rename to public/img/compass_04.gif diff --git a/images/dkforumsbutton.gif b/public/img/dkforumsbutton.gif similarity index 100% rename from images/dkforumsbutton.gif rename to public/img/dkforumsbutton.gif diff --git a/images/help_exploring.jpg b/public/img/help_exploring.jpg similarity index 100% rename from images/help_exploring.jpg rename to public/img/help_exploring.jpg diff --git a/images/help_fighting.jpg b/public/img/help_fighting.jpg similarity index 100% rename from images/help_fighting.jpg rename to public/img/help_fighting.jpg diff --git a/images/icon_armor.gif b/public/img/icon_armor.gif similarity index 100% rename from images/icon_armor.gif rename to public/img/icon_armor.gif diff --git a/images/icon_shield.gif b/public/img/icon_shield.gif similarity index 100% rename from images/icon_shield.gif rename to public/img/icon_shield.gif diff --git a/images/icon_weapon.gif b/public/img/icon_weapon.gif similarity index 100% rename from images/icon_weapon.gif rename to public/img/icon_weapon.gif diff --git a/images/logo.gif b/public/img/logo.gif similarity index 100% rename from images/logo.gif rename to public/img/logo.gif diff --git a/images/map.gif b/public/img/map.gif similarity index 100% rename from images/map.gif rename to public/img/map.gif diff --git a/images/title_exploring.gif b/public/img/title_exploring.gif similarity index 100% rename from images/title_exploring.gif rename to public/img/title_exploring.gif diff --git a/images/title_fighting.gif b/public/img/title_fighting.gif similarity index 100% rename from images/title_fighting.gif rename to public/img/title_fighting.gif diff --git a/images/town_1.gif b/public/img/town_1.gif similarity index 100% rename from images/town_1.gif rename to public/img/town_1.gif diff --git a/images/town_2.gif b/public/img/town_2.gif similarity index 100% rename from images/town_2.gif rename to public/img/town_2.gif diff --git a/images/town_3.gif b/public/img/town_3.gif similarity index 100% rename from images/town_3.gif rename to public/img/town_3.gif diff --git a/images/town_4.gif b/public/img/town_4.gif similarity index 100% rename from images/town_4.gif rename to public/img/town_4.gif diff --git a/images/town_5.gif b/public/img/town_5.gif similarity index 100% rename from images/town_5.gif rename to public/img/town_5.gif diff --git a/images/town_6.gif b/public/img/town_6.gif similarity index 100% rename from images/town_6.gif rename to public/img/town_6.gif diff --git a/images/town_7.gif b/public/img/town_7.gif similarity index 100% rename from images/town_7.gif rename to public/img/town_7.gif diff --git a/images/town_8.gif b/public/img/town_8.gif similarity index 100% rename from images/town_8.gif rename to public/img/town_8.gif diff --git a/public/index.php b/public/index.php new file mode 100644 index 0000000..86ce24b --- /dev/null +++ b/public/index.php @@ -0,0 +1,5 @@ + 'Intro', 'step' => 'first']); + exit; +} + +// Database setup; create tables and default data (if requested) +if ($step == 'second') { + $istart = microtime(true); // time the database setup + if (!isset($_POST['mode'])) redirect('/install/'); // dont run install if a button wasnt clicked + $complete = $_POST['mode'] == 'complete'; // complete or partial setup + + // Create Control table + $db->table('control')->create([ + 'id INTEGER PRIMARY KEY', + "game_name TEXT DEFAULT 'Dragon Knight'", + 'game_size INTEGER DEFAULT 250', + 'game_open INTEGER DEFAULT 1', + "admin_email TEXT DEFAULT ''", + 'forum_type INTEGER DEFAULT 1', + "forum_addr TEXT DEFAULT ''", + "class_1_name TEXT DEFAULT 'Mage'", + "class_2_name TEXT DEFAULT 'Warrior'", + "class_3_name TEXT DEFAULT 'Paladin'", + 'verify_email INTEGER DEFAULT 1', + 'show_news INTEGER DEFAULT 1', + 'show_online INTEGER DEFAULT 1', + 'show_babble INTEGER DEFAULT 1' + ]); + + // Insert default control row + $db->insertDefaultValues(); + + // Create Babble table + $db->table('babble')->create([ + 'id INTEGER PRIMARY KEY', + 'posted DATETIME DEFAULT CURRENT_TIMESTAMP', + 'author INTEGER DEFAULT 1', + 'babble TEXT NOT NULL' + ]); + + // Create Drops table + $db->table('drops')->create([ + 'id INTEGER PRIMARY KEY', + 'name TEXT NOT NULL', + 'level INTEGER DEFAULT 1', + 'type INTEGER DEFAULT 1', + "attr1 TEXT DEFAULT ''", + "attr2 TEXT DEFAULT ''" + ]); + + // Add default drops if complete install + if ($complete) { + $db->insert([ + ['name' => 'Life Pebble', 'level' => 1, 'type' => 1, 'attr1' => 'hp,10', 'attr2' => '' ], + ['name' => 'Life Stone', 'level' => 10, 'type' => 1, 'attr1' => 'hp,25', 'attr2' => '' ], + ['name' => 'Life Rock', 'level' => 25, 'type' => 1, 'attr1' => 'hp,50', 'attr2' => '' ], + ['name' => 'Life Ore', 'level' => 50, 'type' => 1, 'attr1' => 'hp,100', 'attr2' => '' ], + ['name' => 'Life Gem', 'level' => 75, 'type' => 1, 'attr1' => 'hp,150', 'attr2' => '' ], + ['name' => 'Magic Pebble', 'level' => 1, 'type' => 1, 'attr1' => 'mp,10', 'attr2' => '' ], + ['name' => 'Magic Stone', 'level' => 10, 'type' => 1, 'attr1' => 'mp,25', 'attr2' => '' ], + ['name' => 'Magic Rock', 'level' => 25, 'type' => 1, 'attr1' => 'mp,50', 'attr2' => '' ], + ['name' => 'Magic Ore', 'level' => 50, 'type' => 1, 'attr1' => 'mp,100', 'attr2' => '' ], + ['name' => 'Magic Gem', 'level' => 75, 'type' => 1, 'attr1' => 'mp,150', 'attr2' => '' ], + ['name' => "Dragon's Scale", 'level' => 10, 'type' => 1, 'attr1' => 'def,25', 'attr2' => '' ], + ['name' => "Dragon's Plate", 'level' => 30, 'type' => 1, 'attr1' => 'def,50', 'attr2' => '' ], + ['name' => "Dragon's Claw", 'level' => 10, 'type' => 1, 'attr1' => 'atk,25', 'attr2' => '' ], + ['name' => "Dragon's Fang", 'level' => 30, 'type' => 1, 'attr1' => 'atk,50', 'attr2' => '' ], + ['name' => "Dragon's Tear", 'level' => 35, 'type' => 1, 'attr1' => 'str,75', 'attr2' => '' ], + ['name' => "Dragon's Wing", 'level' => 35, 'type' => 1, 'attr1' => 'dex,75', 'attr2' => '' ], + ['name' => "Demon's Sin", 'level' => 35, 'type' => 1, 'attr1' => 'hp,-50', 'attr2' => 'str,50' ], + ['name' => "Demon's Fall", 'level' => 35, 'type' => 1, 'attr1' => 'mp,-50', 'attr2' => 'str,50' ], + ['name' => "Demon's Lie", 'level' => 45, 'type' => 1, 'attr1' => 'hp,-100', 'attr2' => 'str,100' ], + ['name' => "Demon's Hate", 'level' => 45, 'type' => 1, 'attr1' => 'mp,-100', 'attr2' => 'str,100' ], + ['name' => "Angel's Joy", 'level' => 25, 'type' => 1, 'attr1' => 'hp,25', 'attr2' => 'str,25' ], + ['name' => "Angel's Rise", 'level' => 30, 'type' => 1, 'attr1' => 'hp,50', 'attr2' => 'str,50' ], + ['name' => "Angel's Truth", 'level' => 35, 'type' => 1, 'attr1' => 'hp,75', 'attr2' => 'str,75' ], + ['name' => "Angel's Grace", 'level' => 40, 'type' => 1, 'attr1' => 'hp,100', 'attr2' => 'str,100' ], + ['name' => "Seraph's Strength", 'level' => 25, 'type' => 1, 'attr1' => 'mp,25', 'attr2' => 'dex,25' ], + ['name' => "Seraph's Power", 'level' => 30, 'type' => 1, 'attr1' => 'mp,50', 'attr2' => 'dex,50' ], + ['name' => "Seraph's Justice", 'level' => 35, 'type' => 1, 'attr1' => 'mp,75', 'attr2' => 'dex,75' ], + ['name' => "Seraph's Judgement", 'level' => 40, 'type' => 1, 'attr1' => 'mp,100', 'attr2' => 'dex,100' ], + ['name' => 'Ruby', 'level' => 50, 'type' => 1, 'attr1' => 'hp,150', 'attr2' => '' ], + ['name' => 'Sapphire', 'level' => 50, 'type' => 1, 'attr1' => 'mp,150', 'attr2' => '' ], + ['name' => 'Emerald', 'level' => 50, 'type' => 1, 'attr1' => 'str,150', 'attr2' => '' ], + ['name' => 'Amethyst', 'level' => 50, 'type' => 1, 'attr1' => 'dex,150', 'attr2' => '' ], + ['name' => 'Topaz', 'level' => 50, 'type' => 1, 'attr1' => 'atk,150', 'attr2' => '' ], + ['name' => 'Diamond', 'level' => 50, 'type' => 1, 'attr1' => 'def,150', 'attr2' => '' ], + ['name' => "Ocean Blessing", 'level' => 77, 'type' => 1, 'attr1' => 'str,7007', 'attr2' => 'dex,7007'], + ['name' => 'Memory Tonic', 'level' => 5, 'type' => 1, 'attr1' => 'exp,10', 'attr2' => '' ], + ['name' => 'Memory Potion', 'level' => 30, 'type' => 1, 'attr1' => 'exp,20', 'attr2' => '' ], + ['name' => 'Memory Elixir', 'level' => 50, 'type' => 1, 'attr1' => 'exp,30', 'attr2' => '' ], + ['name' => 'Gold Tonic', 'level' => 5, 'type' => 1, 'attr1' => 'gold,10', 'attr2' => '' ], + ['name' => 'Gold Potion', 'level' => 30, 'type' => 1, 'attr1' => 'gold,20', 'attr2' => '' ], + ['name' => 'Gold Elixir', 'level' => 50, 'type' => 1, 'attr1' => 'gold,30', 'attr2' => '' ], + ]); + } + + // Create Forum table + $db->table('forum')->create([ + 'id INTEGER PRIMARY KEY', + 'posted DATETIME DEFAULT CURRENT_TIMESTAMP', + 'new_post DATETIME DEFAULT CURRENT_TIMESTAMP', + 'author INTEGER DEFAULT 1', + "subject TEXT DEFAULT ''", + "message TEXT DEFAULT ''", + 'locked INTEGER DEFAULT 0', + 'sticky INTEGER DEFAULT 0', + 'parent INTEGER DEFAULT 0' + ]); + + // Create Items table + $db->table('items')->create([ + 'id INTEGER PRIMARY KEY', + 'type INTEGER DEFAULT 1', + 'name TEXT NOT NULL', + 'cost INTEGER DEFAULT 0', + "attr1 TEXT DEFAULT ''", + "attr2 TEXT DEFAULT ''", + "icon TEXT DEFAULT ''" + ]); + + // Create default items, if complete install + if ($complete) { + $db->insert([ + // Type 1 - weapons + ['type' => 1, 'name' => 'Stick', 'cost' => 10, 'attr1' => 'atk,2', 'attr2' => '', 'icon' => 'stick.png' ], + ['type' => 1, 'name' => 'Branch', 'cost' => 30, 'attr1' => 'atk,4', 'attr2' => '', 'icon' => 'branch.png' ], + ['type' => 1, 'name' => 'Club', 'cost' => 40, 'attr1' => 'atk,6', 'attr2' => '', 'icon' => 'club.png' ], + ['type' => 1, 'name' => 'Dagger', 'cost' => 80, 'attr1' => 'atk,8', 'attr2' => '', 'icon' => 'dagger.png' ], + ['type' => 1, 'name' => 'Hatchet', 'cost' => 120, 'attr1' => 'atk,12', 'attr2' => '', 'icon' => 'hatchet.png' ], + ['type' => 1, 'name' => 'Axe', 'cost' => 200, 'attr1' => 'atk,18', 'attr2' => '', 'icon' => 'axe.png' ], + ['type' => 1, 'name' => 'Spear', 'cost' => 300, 'attr1' => 'atk,25', 'attr2' => '', 'icon' => 'spear.png' ], + ['type' => 1, 'name' => 'Poleaxe', 'cost' => 500, 'attr1' => 'atk,35', 'attr2' => '', 'icon' => 'poleaxe.png' ], + ['type' => 1, 'name' => 'Warhammer', 'cost' => 800, 'attr1' => 'atk,50', 'attr2' => '', 'icon' => 'warhammer.png' ], + ['type' => 1, 'name' => 'Longsword', 'cost' => 1200, 'attr1' => 'atk,65', 'attr2' => '', 'icon' => 'longsword.png' ], + ['type' => 1, 'name' => 'Claymore', 'cost' => 1800, 'attr1' => 'atk,85', 'attr2' => '', 'icon' => 'claymore.png' ], + ['type' => 1, 'name' => 'Demon Axe', 'cost' => 2800, 'attr1' => 'atk,125', 'attr2' => 'exp,-5', 'icon' => 'demonaxe.png' ], + ['type' => 1, 'name' => 'Dark Sword', 'cost' => 4500, 'attr1' => 'atk,225', 'attr2' => 'exp,-10', 'icon' => 'darksword.png' ], + ['type' => 1, 'name' => 'Magic Axe', 'cost' => 2800, 'attr1' => 'atk,95', 'attr2' => 'exp,5', 'icon' => 'magicaxe.png' ], + ['type' => 1, 'name' => 'Bright Sword', 'cost' => 4500, 'attr1' => 'atk,185', 'attr2' => 'exp,10', 'icon' => 'brightsword.png'], + ['type' => 1, 'name' => 'Dragonbane', 'cost' => 10000, 'attr1' => 'atk,300', 'attr2' => 'str,50', 'icon' => 'dragonbane.png' ], + + // Type 2 - armors + ['type' => 2, 'name' => 'Underwear', 'cost' => 25, 'attr1' => 'def,2', 'attr2' => 'gold,10', 'icon' => 'underwear.png' ], + ['type' => 2, 'name' => 'Clothes', 'cost' => 50, 'attr1' => 'def,5', 'attr2' => '', 'icon' => 'clothes.png' ], + ['type' => 2, 'name' => 'Leather', 'cost' => 75, 'attr1' => 'def,10', 'attr2' => '', 'icon' => 'leather.png' ], + ['type' => 2, 'name' => 'Hard Leather', 'cost' => 150, 'attr1' => 'def,25', 'attr2' => '', 'icon' => 'hardleather.png' ], + ['type' => 2, 'name' => 'Chainmail', 'cost' => 300, 'attr1' => 'def,35', 'attr2' => '', 'icon' => 'chainmail.png' ], + ['type' => 2, 'name' => 'Scale Armor', 'cost' => 900, 'attr1' => 'def,50', 'attr2' => '', 'icon' => 'scalearmor.png' ], + ['type' => 2, 'name' => 'Platemail', 'cost' => 1800, 'attr1' => 'def,100', 'attr2' => '', 'icon' => 'platemail.png' ], + ['type' => 2, 'name' => 'Magic Plate', 'cost' => 3000, 'attr1' => 'def,125', 'attr2' => 'mp,50', 'icon' => 'magicplate.png' ], + ['type' => 2, 'name' => 'Darkmail', 'cost' => 5000, 'attr1' => 'def,200', 'attr2' => 'exp,-10', 'icon' => 'darkmail.png' ], + ['type' => 2, 'name' => 'Dragon Plate', 'cost' => 10000, 'attr1' => 'def,165', 'attr2' => 'exp,10', 'icon' => 'dragonplate.png' ], + ['type' => 2, 'name' => 'Destiny Raiment', 'cost' => 50000, 'attr1' => 'def,200', 'attr2' => 'dex,50', 'icon' => 'destinyraiment.png'], + + // Type 3 - shields + ['type' => 3, 'name' => 'Reed Shield', 'cost' => 50, 'attr1' => 'def,5', 'attr2' => '', 'icon' => 'reedshield.png' ], + ['type' => 3, 'name' => 'Buckler', 'cost' => 100, 'attr1' => 'def,10', 'attr2' => '', 'icon' => 'nuckler.png' ], + ['type' => 3, 'name' => 'Round Shield', 'cost' => 500, 'attr1' => 'def,25', 'attr2' => '', 'icon' => 'roundshield.png' ], + ['type' => 3, 'name' => 'Tower Shield', 'cost' => 2500, 'attr1' => 'def,50', 'attr2' => '', 'icon' => 'towershield.png' ], + ['type' => 3, 'name' => 'Silver Shield', 'cost' => 10000, 'attr1' => 'def,100', 'attr2' => '', 'icon' => 'silvershield.png'], + ['type' => 3, 'name' => 'Dragon Shield', 'cost' => 25000, 'attr1' => 'def,125', 'attr2' => 'mp,100', 'icon' => 'dragonshield.png'], + ['type' => 3, 'name' => 'Aegis', 'cost' => 50000, 'attr1' => 'def,225', 'attr2' => 'exp,10', 'icon' => 'aegis.png' ] + ]); + } + + // Create Monsters table + $db->table('monsters')->create([ + 'id INTEGER PRIMARY KEY', + 'name TEXT NOT NULL', + 'level INTEGER DEFAULT 1', + 'hp INTEGER DEFAULT 1', + 'atk INTEGER DEFAULT 1', + 'def INTEGER DEFAULT 1', + 'exp INTEGER DEFAULT 1', + 'gold INTEGER DEFAULT 1', + 'immune INTEGER DEFAULT 0', + "image TEXT DEFAULT ''" + ]); + + // Fill monsters table if complete install + if ($complete) { + $db->insert([ + ['name' => 'Blue Slime', 'level' => 1, 'hp' => 4, 'atk' => 3, 'def' => 1, 'exp' => 1, 'gold' => 1, 'immune' => 0], + ['name' => 'Red Slime', 'level' => 1, 'hp' => 6, 'atk' => 5, 'def' => 1, 'exp' => 2, 'gold' => 1, 'immune' => 0], + ['name' => 'Critter', 'level' => 1, 'hp' => 6, 'atk' => 5, 'def' => 2, 'exp' => 4, 'gold' => 2, 'immune' => 0], + ['name' => 'Creature', 'level' => 2, 'hp' => 10, 'atk' => 8, 'def' => 2, 'exp' => 4, 'gold' => 2, 'immune' => 0], + ['name' => 'Shadow', 'level' => 2, 'hp' => 10, 'atk' => 9, 'def' => 3, 'exp' => 6, 'gold' => 2, 'immune' => 1], + ['name' => 'Drake', 'level' => 2, 'hp' => 11, 'atk' => 10, 'def' => 3, 'exp' => 8, 'gold' => 3, 'immune' => 0], + ['name' => 'Shade', 'level' => 3, 'hp' => 12, 'atk' => 10, 'def' => 3, 'exp' => 10, 'gold' => 3, 'immune' => 1], + ['name' => 'Drakelor', 'level' => 3, 'hp' => 14, 'atk' => 12, 'def' => 4, 'exp' => 10, 'gold' => 3, 'immune' => 0], + ['name' => 'Silver Slime', 'level' => 30, 'hp' => 15, 'atk' => 100, 'def' => 200, 'exp' => 15, 'gold' => 1000, 'immune' => 2], + ['name' => 'Scamp', 'level' => 4, 'hp' => 16, 'atk' => 13, 'def' => 5, 'exp' => 15, 'gold' => 5, 'immune' => 0], + ['name' => 'Raven', 'level' => 4, 'hp' => 16, 'atk' => 13, 'def' => 5, 'exp' => 18, 'gold' => 6, 'immune' => 0], + ['name' => 'Scorpion', 'level' => 5, 'hp' => 18, 'atk' => 14, 'def' => 6, 'exp' => 20, 'gold' => 7, 'immune' => 0], + ['name' => 'Illusion', 'level' => 5, 'hp' => 20, 'atk' => 15, 'def' => 6, 'exp' => 20, 'gold' => 7, 'immune' => 1], + ['name' => 'Nightshade', 'level' => 6, 'hp' => 22, 'atk' => 16, 'def' => 6, 'exp' => 24, 'gold' => 8, 'immune' => 0], + ['name' => 'Drakemal', 'level' => 6, 'hp' => 22, 'atk' => 18, 'def' => 7, 'exp' => 24, 'gold' => 8, 'immune' => 0], + ['name' => 'Shadow Raven', 'level' => 6, 'hp' => 24, 'atk' => 18, 'def' => 7, 'exp' => 26, 'gold' => 9, 'immune' => 1], + ['name' => 'Ghost', 'level' => 6, 'hp' => 24, 'atk' => 20, 'def' => 8, 'exp' => 28, 'gold' => 9, 'immune' => 0], + ['name' => 'Frost Raven', 'level' => 7, 'hp' => 26, 'atk' => 20, 'def' => 8, 'exp' => 30, 'gold' => 10, 'immune' => 0], + ['name' => 'Rogue Scorpion', 'level' => 7, 'hp' => 28, 'atk' => 22, 'def' => 9, 'exp' => 32, 'gold' => 11, 'immune' => 0], + ['name' => 'Ghoul', 'level' => 7, 'hp' => 29, 'atk' => 24, 'def' => 9, 'exp' => 34, 'gold' => 11, 'immune' => 0], + ['name' => 'Magician', 'level' => 8, 'hp' => 30, 'atk' => 24, 'def' => 10, 'exp' => 36, 'gold' => 12, 'immune' => 0], + ['name' => 'Rogue', 'level' => 8, 'hp' => 30, 'atk' => 25, 'def' => 12, 'exp' => 40, 'gold' => 13, 'immune' => 0], + ['name' => 'Drakefin', 'level' => 8, 'hp' => 32, 'atk' => 26, 'def' => 12, 'exp' => 40, 'gold' => 13, 'immune' => 0], + ['name' => 'Shimmer', 'level' => 8, 'hp' => 32, 'atk' => 26, 'def' => 14, 'exp' => 45, 'gold' => 15, 'immune' => 1], + ['name' => 'Fire Raven', 'level' => 9, 'hp' => 34, 'atk' => 28, 'def' => 14, 'exp' => 45, 'gold' => 15, 'immune' => 0], + ['name' => 'Dybbuk', 'level' => 9, 'hp' => 34, 'atk' => 28, 'def' => 14, 'exp' => 50, 'gold' => 17, 'immune' => 0], + ['name' => 'Knave', 'level' => 9, 'hp' => 36, 'atk' => 30, 'def' => 15, 'exp' => 52, 'gold' => 17, 'immune' => 0], + ['name' => 'Goblin', 'level' => 10, 'hp' => 36, 'atk' => 30, 'def' => 15, 'exp' => 54, 'gold' => 18, 'immune' => 0], + ['name' => 'Skeleton', 'level' => 10, 'hp' => 38, 'atk' => 30, 'def' => 18, 'exp' => 58, 'gold' => 19, 'immune' => 0], + ['name' => 'Dark Slime', 'level' => 10, 'hp' => 38, 'atk' => 32, 'def' => 18, 'exp' => 62, 'gold' => 21, 'immune' => 0], + ['name' => 'Silver Scorpion', 'level' => 40, 'hp' => 30, 'atk' => 160, 'def' => 350, 'exp' => 63, 'gold' => 2000, 'immune' => 2], + ['name' => 'Mirage', 'level' => 11, 'hp' => 40, 'atk' => 32, 'def' => 20, 'exp' => 64, 'gold' => 21, 'immune' => 1], + ['name' => 'Sorceror', 'level' => 11, 'hp' => 41, 'atk' => 33, 'def' => 22, 'exp' => 68, 'gold' => 23, 'immune' => 0], + ['name' => 'Imp', 'level' => 12, 'hp' => 42, 'atk' => 34, 'def' => 22, 'exp' => 70, 'gold' => 23, 'immune' => 0], + ['name' => 'Nymph', 'level' => 12, 'hp' => 43, 'atk' => 35, 'def' => 22, 'exp' => 70, 'gold' => 23, 'immune' => 0], + ['name' => 'Scoundrel', 'level' => 12, 'hp' => 43, 'atk' => 35, 'def' => 22, 'exp' => 75, 'gold' => 25, 'immune' => 0], + ['name' => 'Megaskeleton', 'level' => 13, 'hp' => 44, 'atk' => 36, 'def' => 24, 'exp' => 78, 'gold' => 26, 'immune' => 0], + ['name' => 'Grey Wolf', 'level' => 13, 'hp' => 44, 'atk' => 36, 'def' => 24, 'exp' => 82, 'gold' => 27, 'immune' => 0], + ['name' => 'Phantom', 'level' => 14, 'hp' => 46, 'atk' => 38, 'def' => 24, 'exp' => 85, 'gold' => 28, 'immune' => 1], + ['name' => 'Specter', 'level' => 14, 'hp' => 46, 'atk' => 38, 'def' => 24, 'exp' => 90, 'gold' => 30, 'immune' => 0], + ['name' => 'Dark Scorpion', 'level' => 15, 'hp' => 48, 'atk' => 40, 'def' => 26, 'exp' => 95, 'gold' => 32, 'immune' => 1], + ['name' => 'Warlock', 'level' => 15, 'hp' => 48, 'atk' => 40, 'def' => 26, 'exp' => 100, 'gold' => 33, 'immune' => 1], + ['name' => 'Orc', 'level' => 15, 'hp' => 49, 'atk' => 42, 'def' => 28, 'exp' => 104, 'gold' => 35, 'immune' => 0], + ['name' => 'Sylph', 'level' => 15, 'hp' => 49, 'atk' => 42, 'def' => 28, 'exp' => 106, 'gold' => 35, 'immune' => 0], + ['name' => 'Wraith', 'level' => 16, 'hp' => 50, 'atk' => 45, 'def' => 30, 'exp' => 108, 'gold' => 36, 'immune' => 0], + ['name' => 'Hellion', 'level' => 16, 'hp' => 50, 'atk' => 45, 'def' => 30, 'exp' => 110, 'gold' => 37, 'immune' => 0], + ['name' => 'Bandit', 'level' => 16, 'hp' => 52, 'atk' => 45, 'def' => 30, 'exp' => 114, 'gold' => 38, 'immune' => 0], + ['name' => 'Ultraskeleton', 'level' => 16, 'hp' => 52, 'atk' => 46, 'def' => 32, 'exp' => 116, 'gold' => 39, 'immune' => 0], + ['name' => 'Dark Wolf', 'level' => 17, 'hp' => 54, 'atk' => 47, 'def' => 36, 'exp' => 120, 'gold' => 40, 'immune' => 1], + ['name' => 'Troll', 'level' => 17, 'hp' => 56, 'atk' => 48, 'def' => 36, 'exp' => 120, 'gold' => 40, 'immune' => 0], + ['name' => 'Werewolf', 'level' => 17, 'hp' => 56, 'atk' => 48, 'def' => 38, 'exp' => 124, 'gold' => 41, 'immune' => 0], + ['name' => 'Hellcat', 'level' => 18, 'hp' => 58, 'atk' => 50, 'def' => 38, 'exp' => 128, 'gold' => 43, 'immune' => 0], + ['name' => 'Spirit', 'level' => 18, 'hp' => 58, 'atk' => 50, 'def' => 38, 'exp' => 132, 'gold' => 44, 'immune' => 0], + ['name' => 'Nisse', 'level' => 19, 'hp' => 60, 'atk' => 52, 'def' => 40, 'exp' => 132, 'gold' => 44, 'immune' => 0], + ['name' => 'Dawk', 'level' => 19, 'hp' => 60, 'atk' => 54, 'def' => 40, 'exp' => 136, 'gold' => 45, 'immune' => 0], + ['name' => 'Figment', 'level' => 19, 'hp' => 64, 'atk' => 55, 'def' => 42, 'exp' => 140, 'gold' => 47, 'immune' => 1], + ['name' => 'Hellhound', 'level' => 20, 'hp' => 66, 'atk' => 56, 'def' => 44, 'exp' => 140, 'gold' => 47, 'immune' => 0], + ['name' => 'Wizard', 'level' => 20, 'hp' => 66, 'atk' => 56, 'def' => 44, 'exp' => 144, 'gold' => 48, 'immune' => 0], + ['name' => 'Uruk', 'level' => 20, 'hp' => 68, 'atk' => 58, 'def' => 44, 'exp' => 146, 'gold' => 49, 'immune' => 0], + ['name' => 'Siren', 'level' => 50, 'hp' => 68, 'atk' => 400, 'def' => 800, 'exp' => 10000, 'gold' => 50, 'immune' => 2], + ['name' => 'Megawraith', 'level' => 21, 'hp' => 70, 'atk' => 60, 'def' => 46, 'exp' => 155, 'gold' => 52, 'immune' => 0], + ['name' => 'Dawkin', 'level' => 21, 'hp' => 70, 'atk' => 60, 'def' => 46, 'exp' => 155, 'gold' => 52, 'immune' => 0], + ['name' => 'Grey Bear', 'level' => 21, 'hp' => 70, 'atk' => 62, 'def' => 48, 'exp' => 160, 'gold' => 53, 'immune' => 0], + ['name' => 'Haunt', 'level' => 22, 'hp' => 72, 'atk' => 62, 'def' => 48, 'exp' => 160, 'gold' => 53, 'immune' => 0], + ['name' => 'Hellbeast', 'level' => 22, 'hp' => 74, 'atk' => 64, 'def' => 50, 'exp' => 165, 'gold' => 55, 'immune' => 0], + ['name' => 'Fear', 'level' => 23, 'hp' => 76, 'atk' => 66, 'def' => 52, 'exp' => 165, 'gold' => 55, 'immune' => 0], + ['name' => 'Beast', 'level' => 23, 'hp' => 76, 'atk' => 66, 'def' => 52, 'exp' => 170, 'gold' => 57, 'immune' => 0], + ['name' => 'Ogre', 'level' => 23, 'hp' => 78, 'atk' => 68, 'def' => 54, 'exp' => 170, 'gold' => 57, 'immune' => 0], + ['name' => 'Dark Bear', 'level' => 24, 'hp' => 80, 'atk' => 70, 'def' => 56, 'exp' => 175, 'gold' => 58, 'immune' => 1], + ['name' => 'Fire', 'level' => 24, 'hp' => 80, 'atk' => 72, 'def' => 56, 'exp' => 175, 'gold' => 58, 'immune' => 0], + ['name' => 'Polgergeist', 'level' => 25, 'hp' => 84, 'atk' => 74, 'def' => 58, 'exp' => 180, 'gold' => 60, 'immune' => 0], + ['name' => 'Fright', 'level' => 25, 'hp' => 86, 'atk' => 76, 'def' => 58, 'exp' => 180, 'gold' => 60, 'immune' => 0], + ['name' => 'Lycan', 'level' => 25, 'hp' => 88, 'atk' => 78, 'def' => 60, 'exp' => 185, 'gold' => 62, 'immune' => 0], + ['name' => 'Terra Elemental', 'level' => 25, 'hp' => 88, 'atk' => 80, 'def' => 62, 'exp' => 185, 'gold' => 62, 'immune' => 1], + ['name' => 'Necromancer', 'level' => 26, 'hp' => 90, 'atk' => 80, 'def' => 62, 'exp' => 190, 'gold' => 63, 'immune' => 0], + ['name' => 'Ultrawraith', 'level' => 26, 'hp' => 90, 'atk' => 82, 'def' => 64, 'exp' => 190, 'gold' => 63, 'immune' => 0], + ['name' => 'Dawkor', 'level' => 26, 'hp' => 92, 'atk' => 82, 'def' => 64, 'exp' => 195, 'gold' => 65, 'immune' => 0], + ['name' => 'Werebear', 'level' => 26, 'hp' => 92, 'atk' => 84, 'def' => 65, 'exp' => 195, 'gold' => 65, 'immune' => 0], + ['name' => 'Brute', 'level' => 27, 'hp' => 94, 'atk' => 84, 'def' => 65, 'exp' => 200, 'gold' => 67, 'immune' => 0], + ['name' => 'Large Beast', 'level' => 27, 'hp' => 96, 'atk' => 88, 'def' => 66, 'exp' => 200, 'gold' => 67, 'immune' => 0], + ['name' => 'Horror', 'level' => 27, 'hp' => 96, 'atk' => 88, 'def' => 68, 'exp' => 210, 'gold' => 70, 'immune' => 0], + ['name' => 'Flame', 'level' => 28, 'hp' => 100, 'atk' => 90, 'def' => 70, 'exp' => 210, 'gold' => 70, 'immune' => 0], + ['name' => 'Lycanthor', 'level' => 28, 'hp' => 100, 'atk' => 90, 'def' => 70, 'exp' => 210, 'gold' => 70, 'immune' => 0], + ['name' => 'Wyrm', 'level' => 28, 'hp' => 100, 'atk' => 92, 'def' => 72, 'exp' => 220, 'gold' => 73, 'immune' => 0], + ['name' => 'Aero Elemental', 'level' => 29, 'hp' => 104, 'atk' => 94, 'def' => 74, 'exp' => 220, 'gold' => 73, 'immune' => 1], + ['name' => 'Dawkare', 'level' => 29, 'hp' => 106, 'atk' => 96, 'def' => 76, 'exp' => 220, 'gold' => 73, 'immune' => 0], + ['name' => 'Large Brute', 'level' => 29, 'hp' => 108, 'atk' => 98, 'def' => 78, 'exp' => 230, 'gold' => 77, 'immune' => 0], + ['name' => 'Frost Wyrm', 'level' => 30, 'hp' => 110, 'atk' => 100, 'def' => 80, 'exp' => 230, 'gold' => 77, 'immune' => 0], + ['name' => 'Knight', 'level' => 30, 'hp' => 110, 'atk' => 102, 'def' => 80, 'exp' => 240, 'gold' => 80, 'immune' => 0], + ['name' => 'Lycanthra', 'level' => 30, 'hp' => 112, 'atk' => 104, 'def' => 82, 'exp' => 240, 'gold' => 80, 'immune' => 0], + ['name' => 'Terror', 'level' => 31, 'hp' => 115, 'atk' => 108, 'def' => 84, 'exp' => 250, 'gold' => 83, 'immune' => 0], + ['name' => 'Blaze', 'level' => 31, 'hp' => 118, 'atk' => 108, 'def' => 84, 'exp' => 250, 'gold' => 83, 'immune' => 0], + ['name' => 'Aqua Elemental', 'level' => 31, 'hp' => 120, 'atk' => 110, 'def' => 90, 'exp' => 260, 'gold' => 87, 'immune' => 1], + ['name' => 'Fire Wyrm', 'level' => 32, 'hp' => 120, 'atk' => 110, 'def' => 90, 'exp' => 260, 'gold' => 87, 'immune' => 0], + ['name' => 'Lesser Wyvern', 'level' => 32, 'hp' => 122, 'atk' => 110, 'def' => 92, 'exp' => 270, 'gold' => 90, 'immune' => 0], + ['name' => 'Doomer', 'level' => 32, 'hp' => 124, 'atk' => 112, 'def' => 92, 'exp' => 270, 'gold' => 90, 'immune' => 0], + ['name' => 'Armor Knight', 'level' => 33, 'hp' => 130, 'atk' => 115, 'def' => 95, 'exp' => 280, 'gold' => 93, 'immune' => 0], + ['name' => 'Wyvern', 'level' => 33, 'hp' => 134, 'atk' => 120, 'def' => 95, 'exp' => 290, 'gold' => 97, 'immune' => 0], + ['name' => 'Nightmare', 'level' => 33, 'hp' => 138, 'atk' => 125, 'def' => 100, 'exp' => 300, 'gold' => 100, 'immune' => 0], + ['name' => 'Fira Elemental', 'level' => 34, 'hp' => 140, 'atk' => 125, 'def' => 100, 'exp' => 310, 'gold' => 103, 'immune' => 1], + ['name' => 'Megadoomer', 'level' => 34, 'hp' => 140, 'atk' => 128, 'def' => 105, 'exp' => 320, 'gold' => 107, 'immune' => 0], + ['name' => 'Greater Wyvern', 'level' => 34, 'hp' => 145, 'atk' => 130, 'def' => 105, 'exp' => 335, 'gold' => 112, 'immune' => 0], + ['name' => 'Advocate', 'level' => 35, 'hp' => 148, 'atk' => 132, 'def' => 108, 'exp' => 350, 'gold' => 117, 'immune' => 0], + ['name' => 'Strong Knight', 'level' => 35, 'hp' => 150, 'atk' => 135, 'def' => 110, 'exp' => 365, 'gold' => 122, 'immune' => 0], + ['name' => 'Liche', 'level' => 35, 'hp' => 150, 'atk' => 135, 'def' => 110, 'exp' => 380, 'gold' => 127, 'immune' => 0], + ['name' => 'Ultradoomer', 'level' => 36, 'hp' => 155, 'atk' => 140, 'def' => 115, 'exp' => 395, 'gold' => 132, 'immune' => 0], + ['name' => 'Fanatic', 'level' => 36, 'hp' => 160, 'atk' => 140, 'def' => 115, 'exp' => 410, 'gold' => 137, 'immune' => 0], + ['name' => 'Green Dragon', 'level' => 36, 'hp' => 160, 'atk' => 140, 'def' => 115, 'exp' => 425, 'gold' => 142, 'immune' => 0], + ['name' => 'Fiend', 'level' => 37, 'hp' => 160, 'atk' => 145, 'def' => 120, 'exp' => 445, 'gold' => 148, 'immune' => 0], + ['name' => 'Greatest Wyvern', 'level' => 37, 'hp' => 162, 'atk' => 150, 'def' => 120, 'exp' => 465, 'gold' => 155, 'immune' => 0], + ['name' => 'Lesser Devil', 'level' => 37, 'hp' => 164, 'atk' => 150, 'def' => 120, 'exp' => 485, 'gold' => 162, 'immune' => 0], + ['name' => 'Liche Master', 'level' => 38, 'hp' => 168, 'atk' => 155, 'def' => 125, 'exp' => 505, 'gold' => 168, 'immune' => 0], + ['name' => 'Zealot', 'level' => 38, 'hp' => 168, 'atk' => 155, 'def' => 125, 'exp' => 530, 'gold' => 177, 'immune' => 0], + ['name' => 'Serafiend', 'level' => 38, 'hp' => 170, 'atk' => 155, 'def' => 125, 'exp' => 555, 'gold' => 185, 'immune' => 0], + ['name' => 'Pale Knight', 'level' => 39, 'hp' => 175, 'atk' => 160, 'def' => 130, 'exp' => 580, 'gold' => 193, 'immune' => 0], + ['name' => 'Blue Dragon', 'level' => 39, 'hp' => 180, 'atk' => 160, 'def' => 130, 'exp' => 605, 'gold' => 202, 'immune' => 0], + ['name' => 'Obsessive', 'level' => 40, 'hp' => 180, 'atk' => 160, 'def' => 135, 'exp' => 630, 'gold' => 210, 'immune' => 0], + ['name' => 'Devil', 'level' => 40, 'hp' => 184, 'atk' => 164, 'def' => 135, 'exp' => 666, 'gold' => 222, 'immune' => 0], + ['name' => 'Liche Prince', 'level' => 40, 'hp' => 190, 'atk' => 168, 'def' => 138, 'exp' => 660, 'gold' => 220, 'immune' => 0], + ['name' => 'Cherufiend', 'level' => 41, 'hp' => 195, 'atk' => 170, 'def' => 140, 'exp' => 690, 'gold' => 230, 'immune' => 0], + ['name' => 'Red Dragon', 'level' => 41, 'hp' => 200, 'atk' => 180, 'def' => 145, 'exp' => 720, 'gold' => 240, 'immune' => 0], + ['name' => 'Greater Devil', 'level' => 41, 'hp' => 200, 'atk' => 180, 'def' => 145, 'exp' => 750, 'gold' => 250, 'immune' => 0], + ['name' => 'Renegade', 'level' => 42, 'hp' => 205, 'atk' => 185, 'def' => 150, 'exp' => 780, 'gold' => 260, 'immune' => 0], + ['name' => 'Archfiend', 'level' => 42, 'hp' => 210, 'atk' => 190, 'def' => 150, 'exp' => 810, 'gold' => 270, 'immune' => 0], + ['name' => 'Liche Lord', 'level' => 42, 'hp' => 210, 'atk' => 190, 'def' => 155, 'exp' => 850, 'gold' => 283, 'immune' => 0], + ['name' => 'Greatest Devil', 'level' => 43, 'hp' => 215, 'atk' => 195, 'def' => 160, 'exp' => 890, 'gold' => 297, 'immune' => 0], + ['name' => 'Dark Knight', 'level' => 43, 'hp' => 220, 'atk' => 200, 'def' => 160, 'exp' => 930, 'gold' => 310, 'immune' => 0], + ['name' => 'Giant', 'level' => 43, 'hp' => 220, 'atk' => 200, 'def' => 165, 'exp' => 970, 'gold' => 323, 'immune' => 0], + ['name' => 'Shadow Dragon', 'level' => 44, 'hp' => 225, 'atk' => 200, 'def' => 170, 'exp' => 1010, 'gold' => 337, 'immune' => 0], + ['name' => 'Liche King', 'level' => 44, 'hp' => 225, 'atk' => 205, 'def' => 170, 'exp' => 1050, 'gold' => 350, 'immune' => 0], + ['name' => 'Incubus', 'level' => 44, 'hp' => 230, 'atk' => 205, 'def' => 175, 'exp' => 1100, 'gold' => 367, 'immune' => 1], + ['name' => 'Traitor', 'level' => 45, 'hp' => 230, 'atk' => 205, 'def' => 175, 'exp' => 1150, 'gold' => 383, 'immune' => 0], + ['name' => 'Demon', 'level' => 45, 'hp' => 240, 'atk' => 210, 'def' => 180, 'exp' => 1200, 'gold' => 400, 'immune' => 0], + ['name' => 'Dark Dragon', 'level' => 45, 'hp' => 245, 'atk' => 215, 'def' => 180, 'exp' => 1250, 'gold' => 417, 'immune' => 1], + ['name' => 'Insurgent', 'level' => 46, 'hp' => 250, 'atk' => 220, 'def' => 190, 'exp' => 1300, 'gold' => 433, 'immune' => 0], + ['name' => 'Leviathan', 'level' => 46, 'hp' => 255, 'atk' => 225, 'def' => 190, 'exp' => 1350, 'gold' => 450, 'immune' => 0], + ['name' => 'Grey Daemon', 'level' => 46, 'hp' => 260, 'atk' => 230, 'def' => 190, 'exp' => 1400, 'gold' => 467, 'immune' => 0], + ['name' => 'Succubus', 'level' => 47, 'hp' => 265, 'atk' => 240, 'def' => 200, 'exp' => 1460, 'gold' => 487, 'immune' => 1], + ['name' => 'Demon Prince', 'level' => 47, 'hp' => 270, 'atk' => 240, 'def' => 200, 'exp' => 1520, 'gold' => 507, 'immune' => 0], + ['name' => 'Black Dragon', 'level' => 47, 'hp' => 275, 'atk' => 250, 'def' => 205, 'exp' => 1580, 'gold' => 527, 'immune' => 1], + ['name' => 'Nihilist', 'level' => 47, 'hp' => 280, 'atk' => 250, 'def' => 205, 'exp' => 1640, 'gold' => 547, 'immune' => 0], + ['name' => 'Behemoth', 'level' => 48, 'hp' => 285, 'atk' => 260, 'def' => 210, 'exp' => 1700, 'gold' => 567, 'immune' => 0], + ['name' => 'Demagogue', 'level' => 48, 'hp' => 290, 'atk' => 260, 'def' => 210, 'exp' => 1760, 'gold' => 587, 'immune' => 0], + ['name' => 'Demon Lord', 'level' => 48, 'hp' => 300, 'atk' => 270, 'def' => 220, 'exp' => 1820, 'gold' => 607, 'immune' => 0], + ['name' => 'Red Daemon', 'level' => 48, 'hp' => 310, 'atk' => 280, 'def' => 230, 'exp' => 1880, 'gold' => 627, 'immune' => 0], + ['name' => 'Colossus', 'level' => 49, 'hp' => 320, 'atk' => 300, 'def' => 240, 'exp' => 1940, 'gold' => 647, 'immune' => 0], + ['name' => 'Demon King', 'level' => 49, 'hp' => 330, 'atk' => 300, 'def' => 250, 'exp' => 2000, 'gold' => 667, 'immune' => 0], + ['name' => 'Dark Daemon', 'level' => 49, 'hp' => 340, 'atk' => 320, 'def' => 260, 'exp' => 2200, 'gold' => 733, 'immune' => 1], + ['name' => 'Titan', 'level' => 50, 'hp' => 360, 'atk' => 340, 'def' => 270, 'exp' => 2400, 'gold' => 800, 'immune' => 0], + ['name' => 'Black Daemon', 'level' => 50, 'hp' => 400, 'atk' => 400, 'def' => 280, 'exp' => 3000, 'gold' => 1000, 'immune' => 1], + ['name' => 'Lucifuge', 'level' => 50, 'hp' => 600, 'atk' => 600, 'def' => 400, 'exp' => 10000, 'gold' => 10000, 'immune' => 2], + ]); + } + + // Create News table + $db->table('news')->create([ + 'id INTEGER PRIMARY KEY', + 'posted DATETIME DEFAULT CURRENT_TIMESTAMP', + 'author INTEGER DEFAULT 1', + "title TEXT DEFAULT ''", + "content TEXT DEFAULT ''" + ]); + + // Create Spells table + $db->table('spells')->create([ + 'id INTEGER PRIMARY KEY', + 'name TEXT NOT NULL', + 'type INTEGER DEFAULT 1', + 'mp INTEGER DEFAULT 0', + "effect TEXT DEFAULT ''", + "icon TEXT DEFAULT ''" + ]); + + // Fill spells if complete install + if ($complete) { + $db->table('spells')->insert([ + // Type 1 = healing + ['name' => 'Heal', 'type' => 1, 'mp' => 5, 'effect' => 'heal:self,10', 'icon' => 'heal.png' ], + ['name' => 'Cure', 'type' => 1, 'mp' => 10, 'effect' => 'heal:self,25', 'icon' => 'cure.png' ], + ['name' => 'Breath', 'type' => 1, 'mp' => 25, 'effect' => 'heal:self,50', 'icon' => 'breath.png'], + ['name' => 'Revive', 'type' => 1, 'mp' => 50, 'effect' => 'heal:self,100', 'icon' => 'revive.png'], + ['name' => 'Gaia', 'type' => 1, 'mp' => 75, 'effect' => 'heal:self,150', 'icon' => 'gaia.png' ], + + // Type 2 = damage + ['name' => 'Slash', 'type' => 2, 'mp' => 5, 'effect' => 'damage:opp,10', 'icon' => 'slash.png' ], + ['name' => 'Magic Missile', 'type' => 2, 'mp' => 12, 'effect' => 'damage:opp,35', 'icon' => 'missile.png' ], + ['name' => 'Fireball', 'type' => 2, 'mp' => 25, 'effect' => 'damage:opp,70', 'icon' => 'fireball.png' ], + ['name' => 'Pain', 'type' => 2, 'mp' => 40, 'effect' => 'damage:opp,100', 'icon' => 'pain.png' ], + ['name' => 'Lightning', 'type' => 2, 'mp' => 50, 'effect' => 'damage:opp,130', 'icon' => 'lightning.png'], + ['name' => 'Chaos', 'type' => 2, 'mp' => 75, 'effect' => 'damage:opp,200', 'icon' => 'chaos.png' ], + + // Type 3 = sleep + ['name' => 'Sleep', 'type' => 3, 'mp' => 10, 'effect' => 'sleep:opp,3', 'icon' => 'sleep.png' ], + ['name' => 'Dream', 'type' => 3, 'mp' => 30, 'effect' => 'sleep:opp,6', 'icon' => 'dream.png' ], + ['name' => 'Nightmare', 'type' => 3, 'mp' => 60, 'effect' => 'sleep:opp,13', 'icon' => 'nightmare.png'], + + // Type 4 = rage + ['name' => 'Craze', 'type' => 4, 'mp' => 10, 'effect' => 'rage:self,3', 'icon' => 'craze.png'], + ['name' => 'Rage', 'type' => 4, 'mp' => 30, 'effect' => 'rage:self,6', 'icon' => 'rage.png' ], + ['name' => 'Fury', 'type' => 4, 'mp' => 60, 'effect' => 'rage:self,13', 'icon' => 'fury.png' ], + + // Type 5 = protect + ['name' => 'Ward', 'type' => 5, 'mp' => 10, 'effect' => 'protect:self,3', 'icon' => 'ward.png' ], + ['name' => 'Guard', 'type' => 5, 'mp' => 30, 'effect' => 'protect:self,6', 'icon' => 'guard.png' ], + ['name' => 'Barrier', 'type' => 5, 'mp' => 60, 'effect' => 'protect:self,13', 'icon' => 'barrier.png'], + ]); + } + + // Create Towns table + $db->table('towns')->create([ + 'id INTEGER PRIMARY KEY', + 'name TEXT NOT NULL', + 'x INTEGER DEFAULT 0', + 'y INTEGER DEFAULT 0', + 'inn_cost INTEGER DEFAULT 0', + 'map_cost INTEGER DEFAULT 5', + 'tp_cost INTEGER DEFAULT 0', + "shop_list TEXT DEFAULT ''", + "image TEXT DEFAULT ''", + ]); + + // Fill towns table if complete install + if ($complete) { + $db->insert([ + ['name' => 'Midworld', 'x' => 0, 'y' => 0, 'inn_cost' => 5, 'map_cost' => 5, 'tp_cost' => 0, 'shop_list' => '1,2,3,17,18,19,28,29', 'image' => 'midworld.png'], + ['name' => 'Roma', 'x' => 30, 'y' => 30, 'inn_cost' => 10, 'map_cost' => 25, 'tp_cost' => 5, 'shop_list' => '2,3,4,18,19,29', 'image' => 'roma.png' ], + ['name' => 'Bris', 'x' => 70, 'y' => -70, 'inn_cost' => 25, 'map_cost' => 50, 'tp_cost' => 15, 'shop_list' => '2,3,4,5,18,19,20,29,30', 'image' => 'bris.png' ], + ['name' => 'Kalle', 'x' => -100, 'y' => 100, 'inn_cost' => 40, 'map_cost' => 100, 'tp_cost' => 30, 'shop_list' => '5,6,8,10,12,21,22,23,29,30', 'image' => 'kalle.png' ], + ['name' => 'Narcissa', 'x' => -130, 'y' => -130, 'inn_cost' => 60, 'map_cost' => 500, 'tp_cost' => 50, 'shop_list' => '4,7,9,11,13,21,22,23,29,30,31', 'image' => 'narcissa.png'], + ['name' => 'Hambry', 'x' => 170, 'y' => 170, 'inn_cost' => 90, 'map_cost' => 1000, 'tp_cost' => 80, 'shop_list' => '10,11,12,13,14,23,24,30,31', 'image' => 'hambry.png' ], + ['name' => 'Gilead', 'x' => 200, 'y' => -200, 'inn_cost' => 100, 'map_cost' => 3000, 'tp_cost' => 110,'shop_list' => '12,13,14,15,24,25,26,32', 'image' => 'gilead.png' ], + ['name' => 'Endworld', 'x' => -250, 'y' => -250, 'inn_cost' => 150, 'map_cost' => 9000, 'tp_cost' => 160,'shop_list' => '16,27,33', 'image' => 'endworld.png'], + ]); + } + + // Create Users table + $db->table('users')->create([ + 'id INTEGER PRIMARY KEY', + 'username TEXT NOT NULL', + 'password TEXT NOT NULL', + "email TEXT DEFAULT ''", + 'verified INTEGER DEFAULT 1', + 'registered DATETIME DEFAULT CURRENT_TIMESTAMP', + 'last_online DATETIME DEFAULT CURRENT_TIMESTAMP', + 'currently INTEGER DEFAULT 0', + 'role INTEGER DEFAULT 1', + 'class INTEGER DEFAULT 1', + 'level INTEGER DEFAULT 1', + 'exp INTEGER DEFAULT 0', + 'gold INTEGER DEFAULT 0', + 'hp INTEGER DEFAULT 0', + 'max_hp INTEGER DEFAULT 0', + 'mp INTEGER DEFAULT 0', + 'max_mp INTEGER DEFAULT 0', + 'tp INTEGER DEFAULT 0', + 'max_tp INTEGER DEFAULT 0', + 'str INTEGER DEFAULT 0', + 'atk INTEGER DEFAULT 0', + 'dex INTEGER DEFAULT 0', + 'def INTEGER DEFAULT 0', + 'weapon_id INTEGER DEFAULT 0', + 'armor_id INTEGER DEFAULT 0', + 'shield_id INTEGER DEFAULT 0', + 'slot_1_id INTEGER DEFAULT 0', + 'slot_2_id INTEGER DEFAULT 0', + 'slot_3_id INTEGER DEFAULT 0', + "spells TEXT DEFAULT ''", + "maps TEXT DEFAULT ''", + ]); + + // Create Fights table + $db->table('fights')->create([ + 'id INTEGER PRIMARY KEY', + 'user_id INTEGER DEFAULT 1', + 'monster_id INTEGER DEFAULT 1', + 'turn INTEGER DEFAULT 1', + 'user_hp INTEGER DEFAULT 0', + 'user_mp INTEGER DEFAULT 0', + 'monster_hp INTEGER DEFAULT 0', + 'monster_mp INTEGER DEFAULT 0', + 'user_uber_dmg INTEGER DEFAULT 0', + 'monster_uber_dmg INTEGER DEFAULT 0', + 'user_uber_def INTEGER DEFAULT 0', + 'monster_uber_def INTEGER DEFAULT 0', + 'monster_immune INTEGER DEFAULT 0', + 'monster_sleep INTEGER DEFAULT 0', + ]); + + echo render('install/layout', ['title' => 'Database', 'step' => 'second', 'complete' => $complete]); + exit; +} diff --git a/server/bootstrap.php b/server/bootstrap.php new file mode 100644 index 0000000..8b54b52 --- /dev/null +++ b/server/bootstrap.php @@ -0,0 +1,15 @@ + [], + 'order' => [], + 'limit' => 0, + 'values' => [], + ]; + + /** + * Open a connection to the database. + */ + public function __construct(string $path, array $opts = []) + { + $opts = !empty($opts) ? $opts : [ + PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, + PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, + ]; + + try { + $this->c = new PDO("sqlite:$path", null, null, $opts); + $this->c->exec('PRAGMA foreign_keys = ON;'); // Enable foreign keys + $this->c->exec('PRAGMA journal_mode = WAL;'); // Enable WAL + } catch (PDOException $e) { + $this->error = "Failed to open database: " . $e->getMessage(); + throw $e; + } + } + + /** + * Change the current working table. + */ + public function table(string $name): Database + { + $this->table = $name; + return $this; + } + + /** + * Create a table with the name of the current working table. Will drop + * the table if it already exists. + */ + public function create(array $columns): PDOStatement|false + { + $query = "CREATE TABLE IF NOT EXISTS $this->table (" . implode(', ', $columns) . ');'; + $this->addToLog($query); + return $this->c->query($query); + } + + /** + * Drop the current working table if it exists. + */ + public function drop(): PDOStatement|false + { + $query = "DROP TABLE IF EXISTS $this->table;"; + $this->addToLog($query); + return $this->c->query($query); + } + + /** + * Return the current working table's schema. + */ + public function schema(): array + { + $query = "PRAGMA table_info($this->table);"; + $this->addToLog($query); + return $this->c->query($query)->fetchAll(PDO::FETCH_ASSOC); + } + + /** + * Insert data into the current working table. Pass an array of key/value + * pairs to insert one record, or an array of arrays to insert multiple. Returns + * the number of rows inserted, or false on failure. + */ + public function insert(array $data): int|false + { + // If the first element is not an array we can assume we're doing a single insert. + if (!isset($data[0])) { + $query = "INSERT INTO $this->table (" . implode(', ', array_keys($data)) . ')' + . ' VALUES (' . implode(', ', array_fill(0, count($data), '?')) . ');'; + $this->addToLog($query); + return $this->c->prepare($query)->execute(array_values($data)); + } + + // Otherwise we will build a multi-insert query. + $query = "INSERT INTO $this->table (" . implode(', ', array_keys($data[0])) . ') VALUES '; + $placeholders = []; + $values = []; + + foreach ($data as $row) { + $placeholders[] = '(' . implode(', ', array_fill(0, count($row), '?')) . ')'; + foreach ($row as $value) $values[] = $value; + } + + $query .= implode(', ', $placeholders) . ';'; + + $this->addToLog($query); + return $this->c->prepare($query)->execute($values); + } + + /** + * Insert a default record into the current working table. + */ + public function insertDefaultValues(): int|false + { + $query = "INSERT INTO $this->table DEFAULT VALUES;"; + $this->addToLog($query); + return $this->c->prepare($query)->execute(); + } + + /** + * Add a where clause to the builder. All values are paramaterized. + */ + public function where(string $column, string $operator, mixed $value): Database + { + $this->builder['where'][] = "$column $operator ?"; + $this->builder['values'][] = $value; + return $this; + } + + /** + * Add an order clause to the builder. + */ + public function order(string $column, string $direction = 'ASC'): Database + { + $this->builder['order'] = "$column $direction"; + return $this; + } + + /** + * Set a limit in the builder. + */ + public function limit(int $limit): Database + { + $this->builder['limit'] = $limit; + return $this; + } + + /** + * Build a select query and return the result. By default selects the entire + * row. Optionally use fetchAll, but there is also the selectAll() alias method + * for this. + */ + public function select(string $what = '*', bool $fetchAll = false): array|false + { + $query = "SELECT $what FROM $this->table"; + if (!empty($this->builder['where'])) $query .= " WHERE " . implode(' AND ', $this->builder['where']); + if (!empty($this->builder['order'])) $query .= " ORDER BY " . $this->builder['order']; + if (!empty($this->builder['limit'])) $query .= " LIMIT " . $this->builder['limit']; + + $this->addToLog($query); + + try { + $stmt = $this->c->prepare($query); + $stmt->execute($this->builder['values']); + } catch (PDOException $e) { + $this->error = "Failed to execute query: " . $e->getMessage(); + return false; + } + + $this->resetBuilder(); + return $fetchAll ? $stmt->fetchAll() : $stmt->fetch(); + } + + /** + * Delete records from the current working table. Returns the number of rows + * deleted, or false on failure. Uses where clauses if set. + */ + public function delete(): int|false + { + $query = "DELETE FROM $this->table"; + if (!empty($this->builder['where'])) $query .= " WHERE " . implode(' AND ', $this->builder['where']); + $this->addToLog($query); + + $this->resetBuilder(); + return $this->c->exec($query); + } + + /** + * Update records in the current working table. Returns the number of rows + * updated, or false on failure. Uses where clauses if set. + */ + public function update(array $data): int|false + { + $query = "UPDATE $this->table SET " . implode(', ', array_keys($data)) . ' = ?'; + if (!empty($this->builder['where'])) $query .= " WHERE " . implode(' AND ', $this->builder['where']); + $this->addToLog($query); + + $values = array_merge(array_values($data), $this->builder['values']); + + $this->resetBuilder(); + return $this->c->prepare($query)->execute($values); + } + + /** + * Get the number of rows in the current working table. Can use where clauses. + */ + public function count(): int|false + { + return $this->select('COUNT(*)', true)[0]['COUNT(*)']; + } + + /** + * Alias for $db->select(true) + */ + public function selectAll(string $what = '*'): array|false + { + return $this->select($what, true); + } + + /** + * Return whether the given table exists. + */ + public function tableExists(string $name): bool + { + $query = "SELECT COUNT(*) FROM sqlite_master WHERE type='table' AND name='$name';"; + $this->addToLog($query); + return $this->c->query($query)->fetchColumn() > 0; + } + + /** + * Return the PDO instance; for when more complex operations are needed. + */ + public function c(): PDO + { + return $this->c; + } + + /** + * Alias for PDO::prepare + */ + public function prepare(string $query): PDOStatement + { + return $this->c->prepare($query); + } + + /** + * Alias for PDO::lastInsertId + */ + public function lastInsertId(): int + { + return $this->c->lastInsertId(); + } + + /** + * Alias for PDO::exec + */ + public function exec(string $query): int + { + $this->addToLog($query); + return $this->c->exec($query); + } + + /** + * Alias for PDO::beginTransaction + */ + public function begin(): bool + { + return $this->c->beginTransaction(); + } + + /** + * Alias for PDO::commit + */ + public function commit(): bool + { + return $this->c->commit(); + } + + /** + * Alias for PDO::rollBack + */ + public function rollBack(): bool + { + return $this->c->rollBack(); + } + + /** + * Alias for PDO::query + */ + public function query(string $query): PDOStatement|false + { + $this->addToLog($query); + return $this->c->query($query); + } + + /** + * Add the query to the log and increment the number of queries executed. + */ + private function addToLog(string $query): void + { + $this->log[] = $query; + $this->queries++; + } + + /** + * Reset the builder to it's default structure. + */ + public function resetBuilder(): void + { + $this->builder = [ + 'where' => [], + 'order' => [], + 'limit' => 0, + 'values' => [], + ]; + } + + /** + * Return the log of executed queries. + */ + public function log(): array + { + return $this->log; + } + + /** + * Return the number of queries executed. + */ + public function queries(): int + { + return $this->queries; + } + + /** + * Return the last error message. + */ + public function error(): string + { + return $this->error; + } +} \ No newline at end of file diff --git a/server/database/README.md b/server/database/README.md new file mode 100644 index 0000000..62eb5f8 --- /dev/null +++ b/server/database/README.md @@ -0,0 +1,4 @@ +## /server/database +This README is here to allow git to keep this folder present in the repo. +The SQLite database for the game is generated into this folder, and PDO +will not create the path TO the SQLite database. \ No newline at end of file diff --git a/server/database/dragon.db b/server/database/dragon.db new file mode 100644 index 0000000000000000000000000000000000000000..68ac8c5e98e544f694aacddd95ec9e8fe047d5ac GIT binary patch literal 90112 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 literal 0 HcmV?d00001 diff --git a/lib.php b/server/lib.php similarity index 87% rename from lib.php rename to server/lib.php index 32af9f5..e223f25 100644 --- a/lib.php +++ b/server/lib.php @@ -1,72 +1,35 @@ + Installation for Dragon Knight is a simple two-step process: + set up the database tables, then create the admin user. After + that, you're done. +

+ +

+ You have two options for database setup: complete or partial. + +

    +
  • + Complete Setup includes table structure and all + default data (items, drops, monsters, levels, spells, + towns) - after complete setup, the game is totally + ready to run. +
  • +
  • + Partial Setup only creates the table structure, + it does not populate the tables - use this if you are + going to be creating and importing your own customized + game data later. +
  • +
+

+ +

+ Click the appropriate button below for your preferred installation method. +

+ + - OR -
+ +
+

diff --git a/server/templates/install/layout.php b/server/templates/install/layout.php new file mode 100644 index 0000000..075c3be --- /dev/null +++ b/server/templates/install/layout.php @@ -0,0 +1,16 @@ + + + + + + <?= $title ?> | Installer + + + +
+

Dragon Knight Installation

+

+ +
+ + \ No newline at end of file diff --git a/server/templates/install/second.php b/server/templates/install/second.php new file mode 100644 index 0000000..c48eaa9 --- /dev/null +++ b/server/templates/install/second.php @@ -0,0 +1,52 @@ +

+ If you're seeing this page with no errors, then database setup is complete! +

+ + +

+ You chose a complete install, so the database has been filled with all sorts of + cool starting data! Items, drops, monsters, towns, weapons, armor, et cetera. +

+ +

+ You chose a partial install, so the database has been left empty. The onus is now + on you to fill it up with all your awesome ideas! +

+ + +

+ The next step is to create the admin account you'll run the game from. Do so + below. Since your install was partial, you can't choose + a class here. Once you make some classes, you can assign yourself one in the admin + panel. +

+ +
+
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ + +
+ + + +
diff --git a/templates/leftnav.php b/server/templates/leftnav.php similarity index 100% rename from templates/leftnav.php rename to server/templates/leftnav.php diff --git a/templates/login.php b/server/templates/login.php similarity index 100% rename from templates/login.php rename to server/templates/login.php diff --git a/templates/lostpassword.php b/server/templates/lostpassword.php similarity index 100% rename from templates/lostpassword.php rename to server/templates/lostpassword.php diff --git a/templates/minimal.php b/server/templates/minimal.php similarity index 100% rename from templates/minimal.php rename to server/templates/minimal.php diff --git a/templates/onlinechar.php b/server/templates/onlinechar.php similarity index 100% rename from templates/onlinechar.php rename to server/templates/onlinechar.php diff --git a/templates/primary.php b/server/templates/primary.php similarity index 100% rename from templates/primary.php rename to server/templates/primary.php diff --git a/templates/register.php b/server/templates/register.php similarity index 100% rename from templates/register.php rename to server/templates/register.php diff --git a/templates/rightnav.php b/server/templates/rightnav.php similarity index 100% rename from templates/rightnav.php rename to server/templates/rightnav.php diff --git a/templates/showchar.php b/server/templates/showchar.php similarity index 100% rename from templates/showchar.php rename to server/templates/showchar.php diff --git a/templates/towns.php b/server/templates/towns.php similarity index 100% rename from templates/towns.php rename to server/templates/towns.php diff --git a/templates/verify.php b/server/templates/verify.php similarity index 100% rename from templates/verify.php rename to server/templates/verify.php