/************************************************************** * FFTacticsMUD : objects.cpp * ************************************************************** * (c) 2002 Damien Dailidenas (Trenton). All rights reserved. * **************************************************************/ #include "main.h" #include <strstream> #include <iomanip> #include "mysql/mysql.h" const struct obj_type obj_table[] = { {}, /**************************************************************** * KNIVES 2-swords * * EQUIPPED BY: Squire, Chemist, Thief, Mediator, Ninja, Dancer * ****************************************************************/ /************************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * **************************************************************************************************************************************************************************************/ { "Air Knife", OBJ_WEAPON, TYPE_KNIFE, 8000, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, {}, {}, 0, ELEM_WIND, 0, 0, 0, 0, 0, 1 }, { "Assassin Dagger", OBJ_WEAPON, TYPE_KNIFE, 5000, 0, 0, 0, 7, 5, 0, 0, 0, 0, status_deathsentence, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Blind Knife", OBJ_WEAPON, TYPE_KNIFE, 800, 0, 0, 0, 4, 5, 0, 0, 0, 0, status_darkness, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Dagger", OBJ_WEAPON, TYPE_KNIFE, 100, 0, 0, 0, 3, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Mage Masher", OBJ_WEAPON, TYPE_KNIFE, 1500, 0, 0, 0, 4, 5, 0, 0, 0, 0, status_silence, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Main Gauche", OBJ_WEAPON, TYPE_KNIFE, 3000, 0, 0, 0, 6, 40, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Mythril Knife", OBJ_WEAPON, TYPE_KNIFE, 500, 0, 0, 0, 4, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Orichalcum", OBJ_WEAPON, TYPE_KNIFE, 4000, 0, 0, 0, 7, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Platina Dagger", OBJ_WEAPON, TYPE_KNIFE, 1800, 0, 0, 0, 5, 10, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Zorlin Shape", OBJ_WEAPON, TYPE_KNIFE, 12000, 0, 0, 0, 12, 10, 0, 0, 0, 0, status_sleep, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, /************************** * NINJA SWORDS 2-swords * * EQUIPPED BY: Ninja * **************************/ /****************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * ******************************************************************************************************************************************************************************/ { "Hidden Knife", OBJ_WEAPON, TYPE_NINJA_SWORD, 3000, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Iga Knife", OBJ_WEAPON, TYPE_NINJA_SWORD, 10, 0, 0, 0, 15, 10, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Koga Knife", OBJ_WEAPON, TYPE_NINJA_SWORD, 10, 0, 0, 0, 15, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Ninja Edge", OBJ_WEAPON, TYPE_NINJA_SWORD, 10000, 0, 0, 0, 12, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Ninja Knife", OBJ_WEAPON, TYPE_NINJA_SWORD, 5000, 0, 0, 0, 9, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Short Edge", OBJ_WEAPON, TYPE_NINJA_SWORD, 7000, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Spell Edge", OBJ_WEAPON, TYPE_NINJA_SWORD, 16000, 0, 0, 0, 13, 5, 0, 0, 0, 0, status_dontact, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, /****************************************** * SWORDS 2-swords 2 hands * * EQUIPPED BY: Squire, Knight, Geomancer * ******************************************/ /***************************************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range, drain * *****************************************************************************************************************************************************************************************************/ { "Ancient Sword", OBJ_WEAPON, TYPE_SWORD, 5000, 0, 0, 0, 9, 5, 0, 0, 0, 0, status_dontmove, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Blood Sword", OBJ_WEAPON, TYPE_SWORD, 2500, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, {}, {}, do_bloodsuck, 0, 0, 0, 0, 0, 0, 1, true }, { "Broad Sword", OBJ_WEAPON, TYPE_SWORD, 200, 0, 0, 0, 4, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Coral Sword", OBJ_WEAPON, TYPE_SWORD, 3300, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, {}, {}, 0, ELEM_LIGHTNING, 0, 0, 0, 0, 0, 1 }, { "Diamond Sword", OBJ_WEAPON, TYPE_SWORD, 8000, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Ice Brand", OBJ_WEAPON, TYPE_SWORD, 14000, 0, 0, 0, 13, 10, 0, 0, 0, 0, 0, {}, {}, do_ice2, ELEM_ICE, 0, 0, 0, 0, 0, 1 }, { "Iron Sword", OBJ_WEAPON, TYPE_SWORD, 900, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Long Sword", OBJ_WEAPON, TYPE_SWORD, 500, 0, 0, 0, 5, 10, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Materia Blade", OBJ_WEAPON, TYPE_SWORD, 10, 0, 0, 0, 10, 10, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Mythril Sword", OBJ_WEAPON, TYPE_SWORD, 1600, 0, 0, 0, 7, 8, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Nagrarock", OBJ_WEAPON, TYPE_SWORD, 10, 0, 0, 0, 1, 5, 0, 0, 0, 0, status_frog, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Platinum Sword", OBJ_WEAPON, TYPE_SWORD, 11000, 0, 0, 0, 12, 10, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Rune Sword", OBJ_WEAPON, TYPE_SWORD, 20000, 0, 0, 2, 14, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Sleep Sword", OBJ_WEAPON, TYPE_SWORD, 5000, 0, 0, 0, 9, 5, 0, 0, 0, 0, status_sleep, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, /************************************ * KNIGHT SWORDS 2-swords 2 hands * * EQUIPPED BY: Knight * ************************************/ /********************************************************************************************************************************************************************************************* * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * *********************************************************************************************************************************************************************************************/ { "Chaos Blade", OBJ_WEAPON, TYPE_KNIGHT_SWORD, 10, 0, 0, 0, 40, 20, 0, 0, 0, 0, status_petrify, { status_regen }, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Defender", OBJ_WEAPON, TYPE_KNIGHT_SWORD, 40000, 0, 0, 0, 16, 60, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Ragnarok", OBJ_WEAPON, TYPE_KNIGHT_SWORD, 10, 0, 0, 0, 24, 20, 0, 0, 0, 0, 0, { status_shell }, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Save the Queen", OBJ_WEAPON, TYPE_KNIGHT_SWORD, 10, 0, 0, 0, 18, 30, 0, 0, 0, 0, 0, { status_protect }, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, /****************************** * KATANAS 2-swords 2 hands * * EQUIPPED BY: Samurai * ******************************/ /**************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * ****************************************************************************************************************************************************************/ { "Asura Knife", OBJ_WEAPON, TYPE_KATANA, 1600, 0, 0, 0, 7, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Bizen Boat", OBJ_WEAPON, TYPE_KATANA, 5000, 0, 0, 0, 9, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Chirijiraden", OBJ_WEAPON, TYPE_KATANA, 10, 0, 0, 0, 25, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Heaven's Cloud", OBJ_WEAPON, TYPE_KATANA, 8000, 0, 0, 0, 11, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Kikuichimoji", OBJ_WEAPON, TYPE_KATANA, 22000, 0, 0, 0, 15, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Kiyomori", OBJ_WEAPON, TYPE_KATANA, 10000, 0, 0, 0, 12, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Koutetsu Knife", OBJ_WEAPON, TYPE_KATANA, 3000, 0, 0, 0, 8, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Masamune", OBJ_WEAPON, TYPE_KATANA, 10, 0, 0, 0, 18, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Muramasa", OBJ_WEAPON, TYPE_KATANA, 15000, 0, 0, 0, 14, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Murasame", OBJ_WEAPON, TYPE_KATANA, 7000, 0, 0, 0, 10, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Sasuke Knife", OBJ_WEAPON, TYPE_KATANA, 0, 0, 0, 0, 14, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Koga Knife", OBJ_WEAPON, TYPE_KATANA, 0, 0, 0, 0, 15, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, /********************************** * AXES 2 hands only * * EQUIPPED BY: Squire, Geomancer * **********************************/ /***************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * *****************************************************************************************************************************************************************/ { "Battle Axe", OBJ_WEAPON, TYPE_AXE, 1500, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Giant Axe", OBJ_WEAPON, TYPE_AXE, 4000, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Slasher", OBJ_WEAPON, TYPE_AXE, 12000, 0, 0, 0, 16, 0, 0, 0, 0, 0, status_slow, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, /***************************************** * RODS 2-swords 2 hands * * EQUIPPED BY: Wizard, Summoner, Oracle * *****************************************/ /*********************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * ***********************************************************************************************************************************************************************************/ { "Dragon's Rod", OBJ_WEAPON, TYPE_ROD, 12000, 0, 0, 0, 5, 20, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Faith Rod", OBJ_WEAPON, TYPE_ROD, 10, 0, 0, 0, 5, 20, 0, 0, 0, 0, status_faith, { status_faith }, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Flame Rod", OBJ_WEAPON, TYPE_ROD, 400, 0, 0, 0, 3, 20, 0, 0, 0, 0, 0, {}, {}, do_fire, 0, 0, 0, 0, 0, 0, 1 }, { "Ice Rod", OBJ_WEAPON, TYPE_ROD, 400, 0, 0, 0, 3, 20, 0, 0, 0, 0, 0, {}, {}, do_ice, 0, 0, 0, 0, 0, 0, 1 }, { "Poison Rod", OBJ_WEAPON, TYPE_ROD, 500, 0, 0, 0, 3, 20, 0, 0, 0, 0, status_poison, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Rod", OBJ_WEAPON, TYPE_ROD, 200, 0, 0, 0, 3, 20, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Thunder Rod", OBJ_WEAPON, TYPE_ROD, 400, 0, 0, 0, 3, 20, 0, 0, 0, 0, 0, {}, {}, do_bolt, 0, 0, 0, 0, 0, 0, 1 }, { "Wizard Rod", OBJ_WEAPON, TYPE_ROD, 8000, 0, 0, 2, 4, 20, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, /**************************************************** * STAFFS 2-swords 2 hands * * EQUIPPED BY: Priest, Time Mage, Summoner, Oracle * ****************************************************/ /******************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * ********************************************************************************************************************************************************************************/ { "Gold Staff", OBJ_WEAPON, TYPE_STAFF, 7000, 0, 0, 0, 6, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Healing Staff", OBJ_WEAPON, TYPE_STAFF, 4000, 0, 0, 0, 4, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Oak Staff", OBJ_WEAPON, TYPE_STAFF, 120, 0, 0, 0, 3, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Rainbow Staff", OBJ_WEAPON, TYPE_STAFF, 2200, 0, 0, 0, 5, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "White Staff", OBJ_WEAPON, TYPE_STAFF, 800, 0, 0, 0, 3, 15, 0, 0, 0, 0, 0, {}, { status_deathsentence }, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Wizard Staff", OBJ_WEAPON, TYPE_STAFF, 4000, 0, 0, 1, 4, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, /****************************** * FLAILS 2-swords 2 hands * * EQUIPPED BY: Squire, Ninja * ******************************/ /************************************************************************************************************************************************************************ * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * ************************************************************************************************************************************************************************/ {" Flail", OBJ_WEAPON, TYPE_FLAIL, 1200, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Flame Whip", OBJ_WEAPON, TYPE_FLAIL, 4000, 0, 0, 0, 11, 0, 0, 0, 0, 0, 0, {}, {}, do_fire2, ELEM_FIRE, 0, 0, 0, 0, 0, 1 }, { "Morning Star", OBJ_WEAPON, TYPE_FLAIL, 9000, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "Scorpion Tail", OBJ_WEAPON, TYPE_FLAIL, 40000, 0, 0, 0, 23, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, /********************************** * GUNS * * EQUIPPED BY: Chemist, Mediator * **********************************/ /********************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * **********************************************************************************************************************************************************/ { "Blast Gun", OBJ_WEAPON, TYPE_GUNM, 10, 0, 0, 0, 22, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 8 }, { "Blaze Gun", OBJ_WEAPON, TYPE_GUNM, 10, 0, 0, 0, 20, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 8 }, { "Glacier Gun", OBJ_WEAPON, TYPE_GUNM, 10, 0, 0, 0, 21, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 8 }, { "Mythril Gun", OBJ_WEAPON, TYPE_GUN, 1500, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 8 }, { "Romanda Gun", OBJ_WEAPON, TYPE_GUN, 5000, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 8 }, { "Stone Gun", OBJ_WEAPON, TYPE_GUN, 10, 0, 0, 0, 8, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 8 }, /*********************** * CROSSBOWS * * EQUIPPED BY: Archer * ***********************/ /**************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * ****************************************************************************************************************************************************************************/ { "Bow Gun", OBJ_WEAPON, TYPE_CROSSBOW, 400, 0, 0, 0, 3, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 4 }, { "Cross Bow", OBJ_WEAPON, TYPE_CROSSBOW, 2000, 0, 0, 0, 4, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 4 }, { "Gastrafitis", OBJ_WEAPON, TYPE_CROSSBOW, 20000, 0, 0, 0, 10, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 4 }, { "Hunting Bow", OBJ_WEAPON, TYPE_CROSSBOW, 8000, 0, 0, 0, 6, 5, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 4 }, { "Night Killer", OBJ_WEAPON, TYPE_CROSSBOW, 1500, 0, 0, 0, 3, 5, 0, 0, 0, 0, status_darkness, {}, {}, 0, 0, 0, 0, 0, 0, 0, 4 }, { "Poison Bow", OBJ_WEAPON, TYPE_CROSSBOW, 4000, 0, 0, 0, 4, 5, 0, 0, 0, 0, status_poison, {}, {}, 0, 0, 0, 0, 0, 0, 0, 4 }, /*********************** * BOWS 2 hands only * * EQUIPPED BY: Archer * ***********************/ /*************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * ***************************************************************************************************************************************************************************/ { "Ice Bow", OBJ_WEAPON, TYPE_BOW, 2000, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, {}, {}, 0, ELEM_ICE, 0, 0, 0, 0, 0, 5 }, { "Lightning Bow", OBJ_WEAPON, TYPE_BOW, 3000, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, {}, {}, do_bolt2, ELEM_LIGHTNING, 0, 0, 0, 0, 0, 5 }, { "Long Bow", OBJ_WEAPON, TYPE_BOW, 800, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 5 }, { "Mythril Bow", OBJ_WEAPON, TYPE_BOW, 5000, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 5 }, { "Perseus Bow", OBJ_WEAPON, TYPE_BOW, 10, 0, 0, 0, 16, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 5 }, { "Silver Bow", OBJ_WEAPON, TYPE_BOW, 1500, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 5 }, { "Ultimus Bow", OBJ_WEAPON, TYPE_BOW, 22000, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 5 }, { "Windslash Bow", OBJ_WEAPON, TYPE_BOW, 8000, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, {}, {}, 0, ELEM_WIND, 0, 0, 0, 0, 0, 5 }, { "Yoichi Bow", OBJ_WEAPON, TYPE_BOW, 10, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 5 }, /********************* * INSTRUMENTS * * EQUIPPED BY: Bard * *********************/ /**************************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range, drain * ****************************************************************************************************************************************************************************************/ { "Bloody Strings", OBJ_WEAPON, TYPE_INSTRUMENT, 10000, 0, 0, 0, 13, 10, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 3, true }, { "Fairy Harp", OBJ_WEAPON, TYPE_INSTRUMENT, 30000, 0, 0, 0, 15, 10, 0, 0, 0, 0, status_charm, {}, {}, 0, 0, 0, 0, 0, 0, 0, 3 }, { "Ramia Harp", OBJ_WEAPON, TYPE_INSTRUMENT, 5000, 0, 0, 0, 10, 10, 0, 0, 0, 0, status_confusion, {}, {}, 0, 0, 0, 0, 0, 0, 0, 3 }, /*********************************** * DICTIONARIES * * EQUIPPED BY: Oracle, Calculator * ***********************************/ /******************************************************************************************************************************************************************* * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * *******************************************************************************************************************************************************************/ { "Battle Dict", OBJ_WEAPON, TYPE_DICTIONARY, 3000, 0, 0, 0, 7, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 3 }, { "Monster Dict", OBJ_WEAPON, TYPE_DICTIONARY, 6000, 0, 0, 0, 8, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 3 }, { "Papyrus Plate", OBJ_WEAPON, TYPE_DICTIONARY, 3000, 0, 0, 0, 9, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 3 }, { "Madelgelm", OBJ_WEAPON, TYPE_DICTIONARY, 3000, 0, 0, 0, 11, 15, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 3 }, /*********************** * CLOTHS * * EQUIPPED BY: Dancer * ***********************/ /************************************************************************************************************************************************************ * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * ************************************************************************************************************************************************************/ { "Persia", OBJ_WEAPON, TYPE_CLOTH, 7000, 0, 0, 0, 8, 50, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 2 }, { "Cashmere", OBJ_WEAPON, TYPE_CLOTH, 15000, 0, 0, 0, 10, 50, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 2 }, { "Ryozan Silk", OBJ_WEAPON, TYPE_CLOTH, 40000, 0, 0, 0, 15, 50, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 2 }, /********************** * BAGS * * EQUIPPED BY: Women * **********************/ /*************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm, range * ***************************************************************************************************************************************************************/ { "P Bag", OBJ_WEAPON, TYPE_BAG, 52000, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, { status_regen }, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "C Bag", OBJ_WEAPON, TYPE_BAG, 53000, 0, 0, 1, 10, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "H Bag", OBJ_WEAPON, TYPE_BAG, 58000, 0, 0, 0, 14, 0, 0, 1, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, { "FS Bag", OBJ_WEAPON, TYPE_BAG, 60000, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0, 1 }, /************************************************** * SHIELDS * * EQUIPPED BY: Knight, Archer, Geomancer, Lancer * **************************************************/ /************************************************************************************************************************************************************************************************ * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * ************************************************************************************************************************************************************************************************/ { "Aegis Shield", OBJ_SHIELD, TYPE_SHIELD, 10000, 0, 0, 1, 0, 10, 50, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Bronze Shield", OBJ_SHIELD, TYPE_SHIELD, 1200, 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Buckler", OBJ_SHIELD, TYPE_SHIELD, 700, 0, 0, 0, 0, 13, 3, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Crystal Shield", OBJ_SHIELD, TYPE_SHIELD, 21000, 0, 0, 0, 0, 40, 15, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Diamond Shield", OBJ_SHIELD, TYPE_SHIELD, 12000, 0, 0, 0, 0, 34, 15, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Escutcheon", OBJ_SHIELD, TYPE_SHIELD, 400, 0, 0, 0, 0, 10, 3, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Flame Shield", OBJ_SHIELD, TYPE_SHIELD, 6500, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, {}, {}, 0, 0, ELEM_FIRE, ELEM_ICE, ELEM_WATER, 0, 0 }, { "Genji Shield", OBJ_SHIELD, TYPE_SHIELD, 10, 0, 0, 0, 0, 43, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Gold Shield", OBJ_SHIELD, TYPE_SHIELD, 3500, 0, 0, 0, 0, 25, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Ice Shield", OBJ_SHIELD, TYPE_SHIELD, 6000, 0, 0, 0, 0, 28, 0, 0, 0, 0, 0, {}, {}, 0, 0, ELEM_ICE, ELEM_FIRE, ELEM_LIGHTNING, 0, 0 }, { "Kaiser Plate", OBJ_SHIELD, TYPE_SHIELD, 10, 0, 0, 0, 0, 46, 20, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, ELEM_FIRE | ELEM_LIGHTNING | ELEM_ICE, 0 }, { "Mythril Shield", OBJ_SHIELD, TYPE_SHIELD, 2500, 0, 0, 0, 0, 22, 5, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Platina Shield", OBJ_SHIELD, TYPE_SHIELD, 16000, 0, 0, 0, 0, 37, 10, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Round Shield", OBJ_SHIELD, TYPE_SHIELD, 1600, 0, 0, 0, 0, 19, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Venetian Shield", OBJ_SHIELD, TYPE_SHIELD, 10, 0, 0, 0, 0, 50, 25, 0, 0, 0, 0, {}, {}, 0, 0, 0, ELEM_FIRE | ELEM_LIGHTNING | ELEM_ICE, 0, 0, 0 }, /**************************************** * HELMETS * * EQUIPPED BY: Knight, Lancer, Samurai * ****************************************/ /************************************************************************************************************************************************************************************ * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * ************************************************************************************************************************************************************************************/ { "Barbuta", OBJ_HEAD, TYPE_HELMET, 1500, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Bronze Helmet", OBJ_HEAD, TYPE_HELMET, 500, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Circlet", OBJ_HEAD, TYPE_HELMET, 10000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Cross Helmet", OBJ_HEAD, TYPE_HELMET, 4000, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Crystal Helmet", OBJ_HEAD, TYPE_HELMET, 14000, 120, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Diamond Helmet", OBJ_HEAD, TYPE_HELMET, 6000, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Genji Helmet", OBJ_HEAD, TYPE_HELMET, 10, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Gold Helmet", OBJ_HEAD, TYPE_HELMET, 2800, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Grand Helmet", OBJ_HEAD, TYPE_HELMET, 10, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_darkness, status_sleep }, 0, 0, 0, 0, 0, 0, 0 }, { "Iron Helmet", OBJ_HEAD, TYPE_HELMET, 1000, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Leather Helmet", OBJ_HEAD, TYPE_HELMET, 200, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Mythril Helmet", OBJ_HEAD, TYPE_HELMET, 2100, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Platina Helmet", OBJ_HEAD, TYPE_HELMET, 8000, 90, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, /************************************************************************************************************************************************** * HATS * * EQUIPPED BY: Squire, Chemist, Archer, Priest, Wizard, Time Mage, Summoner, Thief, Mediator, Oracle, Geomancer, Ninja, Calculator, Bard, Dancer * **************************************************************************************************************************************************/ /*********************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * ***********************************************************************************************************************************************************************************/ { "Black Hood", OBJ_HEAD, TYPE_HAT, 7000, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Feather Hat", OBJ_HEAD, TYPE_HAT, 350, 16, 5, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Flash Hat", OBJ_HEAD, TYPE_HAT, 16000, 88, 15, 1, 0, 0, 0, 1, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Golden Hairpin", OBJ_HEAD, TYPE_HAT, 12000, 80, 50, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_silence }, 0, 0, 0, 0, 0, 0, 0 }, { "Green Beret", OBJ_HEAD, TYPE_HAT, 3000, 48, 0, 0, 0, 0, 0, 1, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Headgear", OBJ_HEAD, TYPE_HAT, 1200, 32, 0, 0, 1, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Holy Mirter", OBJ_HEAD, TYPE_HAT, 6000, 64, 20, 1, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Leather Hat", OBJ_HEAD, TYPE_HAT, 150, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Red Hood", OBJ_HEAD, TYPE_HAT, 800, 24, 8, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Thief Hat", OBJ_HEAD, TYPE_HAT, 35000, 100, 0, 0, 0, 0, 0, 2, 0, 0, 0, {}, { status_dontmove, status_dontact }, 0, 0, 0, 0, 0, 0, 0 }, { "Triangle Hat", OBJ_HEAD, TYPE_HAT, 1800, 40, 12, 1, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Twist Headband", OBJ_HEAD, TYPE_HAT, 5000, 56, 0, 0, 2, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, /****************** * WOMEN'S RIBBON * ******************/ /********************************************************************************************************************************************************************* * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * *********************************************************************************************************************************************************************/ { "Barette", OBJ_HEAD, TYPE_WRIBBON, 20000, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_dead, status_petrify, status_invitation, status_confusion, status_bloodsuck, status_berserk, status_stop, status_charm, status_sleep }, 0, 0, 0, 0, 0, 0, 0 }, { "Cachusha", OBJ_HEAD, TYPE_WRIBBON, 20000, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_undead, status_darkness, status_silence, status_frog, status_poison, status_slow, status_dontmove, status_dontact, status_deathsentence }, 0, 0, 0, 0, 0, 0, 0 }, /**************************************** * ARMOR * * EQUIPPED BY: Knight, Lancer, Samurai * ****************************************/ /******************************************************************************************************************************************************************* * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * *******************************************************************************************************************************************************************/ { "Bronze Armor", OBJ_BODY, TYPE_ARMOR, 800, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Carabini Mail", OBJ_BODY, TYPE_ARMOR, 13000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Chain Mail", OBJ_BODY, TYPE_ARMOR, 1300, 40, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Crystal Mail", OBJ_BODY, TYPE_ARMOR, 19000, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Diamond Armor", OBJ_BODY, TYPE_ARMOR, 6000, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Genji Armor", OBJ_BODY, TYPE_ARMOR, 10, 150, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Gold Armor", OBJ_BODY, TYPE_ARMOR, 3600, 70, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Leather Armor", OBJ_BODY, TYPE_ARMOR, 200, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Linen Cuirass", OBJ_BODY, TYPE_ARMOR, 600, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Maximillion", OBJ_BODY, TYPE_ARMOR, 10, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Mythril Armor", OBJ_BODY, TYPE_ARMOR, 2000, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Platina Armor", OBJ_BODY, TYPE_ARMOR, 9000, 80, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Plate Mail", OBJ_BODY, TYPE_ARMOR, 3000, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Reflect Mail", OBJ_BODY, TYPE_ARMOR, 18000, 130, 0, 0, 0, 0, 0, 0, 0, 0, 0, { status_reflect }, {}, 0, 0, 0, 0, 0, 0, 0 }, /************************************************************************************************************************************************** * CLOTHES * * EQUIPPED BY: Squire, Chemist, Archer, Priest, Wizard, Time Mage, Summoner, Thief, Mediator, Oracle, Geomancer, Ninja, Calculator, Bard, Dancer * **************************************************************************************************************************************************/ /********************************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * **********************************************************************************************************************************************************************************************/ { "Adaman Vest", OBJ_BODY, TYPE_CLOTHES, 1600, 36, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Black Costume", OBJ_BODY, TYPE_CLOTHES, 12000, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_stop }, 0, 0, 0, 0, 0, 0, 0 }, { "Brigadine", OBJ_BODY, TYPE_CLOTHES, 2500, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Chain Vest", OBJ_BODY, TYPE_CLOTHES, 900, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Clothes", OBJ_BODY, TYPE_CLOTHES, 150, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Earth Clothes", OBJ_BODY, TYPE_CLOTHES, 10000, 85, 10, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, ELEM_EARTH, 0, 0, ELEM_EARTH, 0 }, { "Judo Outfit", OBJ_BODY, TYPE_CLOTHES, 4000, 60, 0, 0, 1, 0, 0, 0, 0, 0, 0, {}, { status_dead }, 0, 0, 0, 0, 0, 0, 0 }, { "Leather Outfit", OBJ_BODY, TYPE_CLOTHES, 300, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Leather Vest", OBJ_BODY, TYPE_CLOTHES, 500, 18, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Mythril Vest", OBJ_BODY, TYPE_CLOTHES, 1500, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Power Sleve", OBJ_BODY, TYPE_CLOTHES, 7000, 70, 0, 0, 2, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Rubber Costume", OBJ_BODY, TYPE_CLOTHES, 48000, 150, 30, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, ELEM_LIGHTNING }, { "Secret Clothes", OBJ_BODY, TYPE_CLOTHES, 10, 20, 0, 0, 0, 0, 0, 2, 0, 0, 0, { status_transparent }, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Wizard Outfit", OBJ_BODY, TYPE_CLOTHES, 1900, 42, 15, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, /********************************************************************************************************************** * ROBES * * EQUIPPED BY: Knight, Priest, Wizard, Time Mage, Summoner, Mediator, Oracle, Geomancer, Lancer, Samurai, Calculator * **********************************************************************************************************************/ /***************************************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * *****************************************************************************************************************************************************************************************************/ { "Black Robe", OBJ_BODY, TYPE_ROBE, 13000, 60, 30, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, ELEM_FIRE | ELEM_LIGHTNING | ELEM_ICE, 0 }, { "Chameleon Robe", OBJ_BODY, TYPE_ROBE, 5000, 40, 28, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_dead }, 0, ELEM_HOLY, 0, 0, 0, 0, 0 }, { "Light Robe", OBJ_BODY, TYPE_ROBE, 30000, 75, 50, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Linen Robe", OBJ_BODY, TYPE_ROBE, 1200, 10, 10, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Robe of Lords", OBJ_BODY, TYPE_ROBE, 10, 100, 80, 1, 1, 0, 0, 0, 0, 0, 0, { status_protect, status_shell }, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Silk Robe", OBJ_BODY, TYPE_ROBE, 2400, 20, 16, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "White Robe", OBJ_BODY, TYPE_ROBE, 9000, 50, 34, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, ELEM_FIRE | ELEM_LIGHTNING | ELEM_ICE, 0, 0, 0 }, { "Wizard Robe", OBJ_BODY, TYPE_ROBE, 4000, 30, 22, 2, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, /******************** * ACCESSORIES * * EQUIPPED BY: All * ********************/ /********* * SHOES * *********/ /****************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * ******************************************************************************************************************************************************************************/ { "Battle Boots", OBJ_ACC, TYPE_SHOES, 1000, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Feather Boots", OBJ_ACC, TYPE_SHOES, 2500, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, { status_float }, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Germinas Boots", OBJ_ACC, TYPE_SHOES, 5000, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Red Shoes", OBJ_ACC, TYPE_SHOES, 10000, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Rubber Shoes", OBJ_ACC, TYPE_SHOES, 1500, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, {}, { status_dontmove }, 0, 0, 0, 0, 0, 0, ELEM_LIGHTNING }, { "Spike Boots", OBJ_ACC, TYPE_SHOES, 1200, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Sprint Boots", OBJ_ACC, TYPE_SHOES, 7000, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, /************* * GAUNTLETS * *************/ /********************************************************************************************************************************************************* * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * *********************************************************************************************************************************************************/ { "Bracer", OBJ_ACC, TYPE_GAUNTLET, 50000, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Genji Gauntlet", OBJ_ACC, TYPE_GAUNTLET, 10, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Magic Gauntlet", OBJ_ACC, TYPE_GAUNTLET, 20000, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Power Wrist", OBJ_ACC, TYPE_GAUNTLET, 5000, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, /********* * RINGS * *********/ /*********************************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * ***********************************************************************************************************************************************************************************/ { "Angel Ring", OBJ_ACC, TYPE_RING, 20000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, { status_reraise }, { status_dead, status_darkness }, 0, 0, 0, 0, 0, 0, 0 }, { "Cursed Ring", OBJ_ACC, TYPE_RING, 10, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, { status_undead }, { status_invitation }, 0, 0, 0, 0, 0, 0, 0 }, { "Defense Ring", OBJ_ACC, TYPE_RING, 5000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_sleep, status_deathsentence }, 0, 0, 0, 0, 0, 0, 0 }, { "Magic Ring", OBJ_ACC, TYPE_RING, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_silence, status_berserk }, 0, 0, 0, 0, 0, 0, 0 }, { "Reflect Ring", OBJ_ACC, TYPE_RING, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, { status_reflect }, {}, 0, 0, 0, 0, 0, 0, 0 }, /*********** * ARMLETS * ***********/ /************************************************************************************************************************************************************************************ * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * ************************************************************************************************************************************************************************************/ { "108 Gems", OBJ_ACC, TYPE_ARMLET, 15000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_undead, status_bloodsuck, status_frog, status_poison }, 0, 0, 0, 0, 0, 0, 0 }, { "Defense Armlet", OBJ_ACC, TYPE_ARMLET, 7000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_dontmove, status_dontact }, 0, 0, 0, 0, 0, 0, 0 }, { "Diamond Armlet", OBJ_ACC, TYPE_ARMLET, 5000, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, {}, { status_slow }, 0, 0, 0, 0, 0, 0, 0 }, { "Jade Armlet", OBJ_ACC, TYPE_ARMLET, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_petrify, status_stop }, 0, 0, 0, 0, 0, 0, 0 }, { "N-Kai Armlet", OBJ_ACC, TYPE_ARMLET, 10000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_confusion, status_charm }, 0, 0, 0, ELEM_DARK, 0, 0, 0 }, /*********** * MANTLES * ***********/ /*********************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * ***********************************************************************************************************************************************************************/ { "Dracula Mantle", OBJ_ACC, TYPE_MANTLE, 15000, 0, 0, 0, 0, 28, 28, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Elf Mantle", OBJ_ACC, TYPE_MANTLE, 8000, 0, 0, 0, 0, 25, 25, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Feather Mantle", OBJ_ACC, TYPE_MANTLE, 20000, 0, 0, 0, 0, 40, 30, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Leather Mantle", OBJ_ACC, TYPE_MANTLE, 800, 0, 0, 0, 0, 15, 15, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Small Mantle", OBJ_ACC, TYPE_MANTLE, 300, 0, 0, 0, 0, 10, 10, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Vanish Mantle", OBJ_ACC, TYPE_MANTLE, 10, 0, 0, 0, 0, 35, 0, 0, 0, 0, 0, { status_transparent }, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Wizard Mantle", OBJ_ACC, TYPE_MANTLE, 2000, 0, 0, 1, 0, 18, 18, 0, 0, 0, 0, {}, {}, 0, 0, 0, 0, 0, 0, 0 }, /******************* * WOMEN'S PERFUME * *******************/ /******************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * ********************************************************************************************************************************************************************/ { "Cherche", OBJ_ACC, TYPE_PERFUME, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, { status_float, status_reflect }, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Chantage", OBJ_ACC, TYPE_PERFUME, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, { status_reraise, status_regen }, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Salty Rage", OBJ_ACC, TYPE_PERFUME, 30000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, { status_protect, status_shell }, {}, 0, 0, 0, 0, 0, 0, 0 }, { "Setiemson", OBJ_ACC, TYPE_PERFUME, 30000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, { status_haste, status_transparent }, {}, 0, 0, 0, 0, 0, 0, 0 }, /*********** * RIBBONS * ***********/ /***************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * *****************************************************************************************************************************************************************/ { "Ribbon", OBJ_ACC, TYPE_RIBBON, 60000, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, { status_dead, status_undead, status_petrify, status_invitation, status_darkness, status_confusion, status_silence, status_bloodsuck, status_frog, status_poison, status_slow, status_stop, status_charm, status_sleep, status_dontmove, status_dontact, status_deathsentence }, 0, 0, 0, 0, 0, 0, 0 }, /*********** * POTIONS * ***********/ /**************************************************************************************************************************************************************** * name, obj_type, type, cost, HP, MP, ATm, ATp, pEv, mEv, Sp, Mv, Ju, add, always, cancel, act, elem, absorb, half, weak, str, imm * ****************************************************************************************************************************************************************/ { "Potion", OBJ_ITEM, TYPE_POTION, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_potion, 0, 0, 0, 0, 0, 0 }, { "Hi-Potion", OBJ_ITEM, TYPE_POTION, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_hipotion, 0, 0, 0, 0, 0, 0 }, { "X-Potion", OBJ_ITEM, TYPE_POTION, 700, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_xpotion, 0, 0, 0, 0, 0, 0 }, { "Ether", OBJ_ITEM, TYPE_POTION, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_ether, 0, 0, 0, 0, 0, 0 }, { "Hi-Ether", OBJ_ITEM, TYPE_POTION, 600, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_hiether, 0, 0, 0, 0, 0, 0 }, { "Elixir", OBJ_ITEM, TYPE_POTION, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_elixir, 0, 0, 0, 0, 0, 0 }, { "Antidote", OBJ_ITEM, TYPE_POTION, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_antidote, 0, 0, 0, 0, 0, 0 }, { "Eye Drop", OBJ_ITEM, TYPE_POTION, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_eyedrop, 0, 0, 0, 0, 0, 0 }, { "Echo Grass", OBJ_ITEM, TYPE_POTION, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_echograss, 0, 0, 0, 0, 0, 0 }, { "Maiden's Kiss", OBJ_ITEM, TYPE_POTION, 50, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_maidenskiss, 0, 0, 0, 0, 0, 0 }, { "Soft", OBJ_ITEM, TYPE_POTION, 100, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_soft, 0, 0, 0, 0, 0, 0 }, { "Holy Water", OBJ_ITEM, TYPE_POTION, 2000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_holywater, 0, 0, 0, 0, 0, 0 }, { "Remedy", OBJ_ITEM, TYPE_POTION, 350, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_remedy, 0, 0, 0, 0, 0, 0 }, { "Phoenix Down", OBJ_ITEM, TYPE_POTION, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, {}, {}, do_phoenixdown, 0, 0, 0, 0, 0, 0 }, {} }; const struct obj_types obj_type_table[] = { { TYPE_KNIFE, "Knife" }, { TYPE_SWORD, "Sword" }, { TYPE_KNIGHT_SWORD, "Knight Sword" }, { TYPE_NINJA_SWORD, "Ninja Sword" }, { TYPE_KATANA, "Katana" }, { TYPE_STAFF, "Staff" }, { TYPE_ROD, "Rod" }, { TYPE_CROSSBOW, "Crossbow" }, { TYPE_BOW, "Bow" }, { TYPE_GUN, "Gun" }, { TYPE_GUNM, "Gun (magic)" }, { TYPE_FLAIL, "Flail" }, { TYPE_AXE, "Axe" }, { TYPE_STICK, "Stick" }, { TYPE_SPEAR, "Spear" }, { TYPE_INSTRUMENT, "Instrument" }, { TYPE_DICTIONARY, "Dictionary" }, { TYPE_CLOTH, "Cloth" }, { TYPE_BAG, "Bag" }, { TYPE_POTION, "Potion" }, { TYPE_HELMET, "Helmet" }, { TYPE_HAT, "Hat" }, { TYPE_RIBBON, "Ribbon" }, { TYPE_ARMOR, "Armor" }, { TYPE_ROBE, "Robe" }, { TYPE_CLOTHES, "Clothes" }, { TYPE_SHOES, "Shoes" }, { TYPE_SHIELD, "Shield" }, { TYPE_RING, "Ring" }, { TYPE_ARMLET, "Armlet" }, { TYPE_MANTLE, "Mantle" }, { TYPE_WRIBBON, "Women's Ribbon" }, { TYPE_GAUNTLET, "Gauntlet" }, { TYPE_PERFUME, "Perfume" }, {} }; OBJ::OBJ(const short id) { next = NULL; ch = NULL; room = NULL; equipped = false; this->id = id; return; } OBJ::~OBJ() { from_ch(); from_battle_room(); return; } OBJ *create_obj(const string name) { if(name.empty()) return NULL; for(short x = 1; obj_table[x].name; ++x) { if(find(name, obj_table[x].name)) { OBJ *obj = new OBJ(x); return obj; } } return NULL; } OBJ *create_obj(const short id) { if(!obj_table[id].name) return NULL; OBJ *obj = new OBJ(id); return obj; } void OBJ::to(CH *ch) { from_ch(); from_battle_room(); this->ch = ch; next = ch->objects; ch->objects = this; return; } void OBJ::from_ch() { if(!ch) return; if(equipped) ch->remove(this); if(this == ch->objects) ch->objects = next; else { OBJ *prev; for(prev = ch->objects; prev; prev = prev->next) { if(prev->next == this) { prev->next = next; break; } } } ch = NULL; return; } void OBJ::to(BATTLE_ROOM *room) { from_ch(); from_battle_room(); this->room = room; next = room->objects; room->objects = this; return; } void OBJ::from_battle_room() { if(!room) return; if(this == room->objects) room->objects = next; else { for(OBJ *prev = room->objects; prev; prev = prev->next) { if(prev->next == this) { prev->next = next; break; } } } room = NULL; next = NULL; return; } void do_equip(CH *ch, string argument="") { string arg; split(argument, arg); if(arg.empty() || !find(arg, "rhand lhand head body accessory")) { ch->printf("Usage: equip [rhand | lhand | head | body | accessory]\n\r"); return; } if(find(arg, "rhand")) do_equiprhand(ch, argument); else if(find(arg, "lhand")) do_equiplhand(ch, argument); else if(find(arg, "head")) do_equiphead(ch, argument); else if(find(arg, "body")) do_equipbody(ch, argument); else if(find(arg, "accessory")) do_equipacc(ch, argument); return; } string print_obj_type(const short type) { for(short x = 0; obj_type_table[x].name; ++x) if(obj_type_table[x].type == type) return obj_type_table[x].name; return ""; } void CH::remove(OBJ *obj) { eq[obj->loc] = NULL; obj->equipped = false; HP[1] -= obj_table[obj->id].HP; MP[1] -= obj_table[obj->id].MP; HP[0] -= obj_table[obj->id].HP; MP[0] -= obj_table[obj->id].MP; MA -= obj_table[obj->id].ATm; Sp -= obj_table[obj->id].Sp; Mv -= obj_table[obj->id].Mv; Ju -= obj_table[obj->id].Ju; if(obj_table[obj->id].obj_type != OBJ_WEAPON) PA -= obj_table[obj->id].ATp; for(short x = 0; obj_table[obj->id].always[x]; ++x) cancel(obj_table[obj->id].always[x]); if(obj_table[obj->id].absorb) REM_BIT(absorb, obj_table[obj->id].absorb); if(obj_table[obj->id].weakness) REM_BIT(weakness, obj_table[obj->id].weakness); if(obj_table[obj->id].imm) REM_BIT(imm, obj_table[obj->id].imm); if(obj_table[obj->id].strengthen) REM_BIT(strengthen, obj_table[obj->id].strengthen); if(obj_table[obj->id].half) REM_BIT(half, obj_table[obj->id].half); return; } void CH::equip(OBJ *obj, const short loc) { if(eq[loc]) remove(eq[loc]); eq[(obj->loc = loc)] = obj; obj->equipped = true; HP[1] += obj_table[obj->id].HP; HP[0] += obj_table[obj->id].HP; MP[1] += obj_table[obj->id].MP; MP[0] += obj_table[obj->id].MP; MA += obj_table[obj->id].ATm; Sp += obj_table[obj->id].Sp; Mv += obj_table[obj->id].Mv; Ju += obj_table[obj->id].Ju; if(obj_table[obj->id].absorb) SET_BIT(absorb, obj_table[obj->id].absorb); if(obj_table[obj->id].weakness) SET_BIT(weakness, obj_table[obj->id].weakness); if(obj_table[obj->id].imm) SET_BIT(imm, obj_table[obj->id].imm); if(obj_table[obj->id].strengthen) SET_BIT(strengthen, obj_table[obj->id].strengthen); if(obj_table[obj->id].half) SET_BIT(half, obj_table[obj->id].half); if(obj_table[obj->id].obj_type != OBJ_WEAPON) PA += obj_table[obj->id].ATp; short x; for(x = 0; obj_table[obj->id].always[x]; ++x) add(obj_table[obj->id].always[x], 0, 0, true); for(x = 0; obj_table[obj->id].cancel[x]; ++x) cancel(obj_table[obj->id].cancel[x]); return; } bool CH::can_equip(const OBJ *obj, const short loc) { switch(loc) { case LOC_RHAND: case LOC_LHAND: if(obj_table[obj->id].obj_type == OBJ_WEAPON) { switch(obj_table[obj->id].type) { case TYPE_KNIFE: if(cjob == JOB_SQUIRE || cjob == JOB_CHEMIST || cjob == JOB_THIEF || cjob == JOB_MEDIATOR || cjob == JOB_NINJA || cjob == JOB_DANCER) return true; return false; case TYPE_NINJA_SWORD: if(cjob == JOB_NINJA) return true; return false; case TYPE_SWORD: if(cjob == JOB_SQUIRE || cjob == JOB_KNIGHT || cjob == JOB_GEOMANCER || has_skill("Equip Sword", true)) return true; return false; case TYPE_KNIGHT_SWORD: if(cjob == JOB_KNIGHT) return true; return false; case TYPE_KATANA: if(cjob == JOB_SAMURAI) return true; return false; case TYPE_AXE: if(cjob == JOB_SQUIRE || cjob == JOB_GEOMANCER || has_skill("Equip Axe", true)) return true; return false; case TYPE_ROD: if(cjob == JOB_WIZARD || cjob == JOB_SUMMONER || cjob == JOB_ORACLE) return true; return false; case TYPE_STAFF: if(cjob == JOB_PRIEST || cjob == JOB_TIMEMAGE || cjob == JOB_SUMMONER || cjob == JOB_ORACLE) return true; return false; case TYPE_FLAIL: if(cjob == JOB_SQUIRE || cjob == JOB_NINJA) return true; return false; case TYPE_GUN: if(cjob == JOB_CHEMIST || cjob == JOB_MEDIATOR) return true; return false; case TYPE_CROSSBOW: if(cjob == JOB_ARCHER || has_skill("Equip Crossbow", true)) return true; return false; case TYPE_BOW: if(cjob == JOB_ARCHER) return true; return false; case TYPE_INSTRUMENT: if(cjob == JOB_BARD) return true; return false; case TYPE_DICTIONARY: case TYPE_STICK: if(cjob == JOB_ORACLE || cjob == JOB_CALCULATOR) return true; return false; case TYPE_SPEAR: if(cjob == JOB_LANCER) return true; return false; } } else if(obj_table[obj->id].type == OBJ_SHIELD && (cjob == JOB_KNIGHT || cjob == JOB_ARCHER || cjob == JOB_GEOMANCER || cjob == JOB_LANCER || has_skill("Equip Shield", true))) return true; return false; case LOC_HEAD: if(obj_table[obj->id].obj_type != OBJ_HEAD) return false; switch(obj_table[obj->id].type) { case TYPE_HELMET: if(cjob == JOB_KNIGHT || cjob == JOB_LANCER || cjob == JOB_SAMURAI) return true; return false; case TYPE_HAT: if(cjob == JOB_KNIGHT || cjob == JOB_LANCER || cjob == JOB_SAMURAI) return false; return true; case TYPE_RIBBON: if(sex) return true; return false; } return false; case LOC_BODY: if(obj_table[obj->id].obj_type != OBJ_BODY) return false; switch(obj_table[obj->id].type) { case TYPE_ARMOR: if(cjob == JOB_KNIGHT || cjob == JOB_LANCER || cjob == JOB_SAMURAI || has_skill("Equip Armor", true)) return true; return false; case TYPE_CLOTHES: if(cjob == JOB_KNIGHT || cjob == JOB_LANCER || cjob == JOB_SAMURAI) return false; return true; case TYPE_ROBE: if(cjob == JOB_KNIGHT || cjob == JOB_PRIEST || cjob == JOB_WIZARD || cjob == JOB_TIMEMAGE || cjob == JOB_SUMMONER || cjob == JOB_MEDIATOR || cjob == JOB_ORACLE || cjob == JOB_GEOMANCER || cjob == JOB_LANCER || cjob == JOB_SAMURAI || cjob == JOB_CALCULATOR) return true; return false; } return false; case LOC_ACC: if(obj_table[obj->id].obj_type != OBJ_ACC) return false; return true; } return true; } void do_equiprhand(CH *ch, string argument="") { OBJ *obj; if(argument.empty() || !(obj = ch->obj(argument, false)) || !ch->can_equip(obj, LOC_RHAND)) { ch->printf("Usage: equip rhand [object]\n\r"); ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r"); ch->printf("+-------------------------------------------------+{0\n\r"); for(obj = ch->objects; obj; obj = obj->next) if(ch->can_equip(obj, LOC_RHAND) && !obj->equipped) ch->printf(" {3|{0 %-16s {3|{0 %s\n\r", print_obj_type(obj_table[obj->id].type).c_str(), obj->name().c_str()); return; } if(!ch->has_skill("Two Swords", true) && ch->eq[LOC_LHAND] && obj_table[ch->eq[LOC_LHAND]->id].obj_type == OBJ_WEAPON) { ch->printf("equip: ERROR: You can only equip 2 weapons with \"Two Swords\" ability.\n\r"); return; } ch->room->echo(ch->name + " equips \"" + obj->name() + "\".\n\r", ch); ch->equip(obj, LOC_RHAND); return; } void do_equiplhand(CH *ch, string argument="") { OBJ *obj; if(argument.empty() || !(obj = ch->obj(argument, false)) || !ch->can_equip(obj, LOC_LHAND)) { ch->printf("Usage: equip lhand [object]\n\r"); ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r"); ch->printf("+-------------------------------------------------+{0\n\r"); for(obj = ch->objects; obj; obj = obj->next) if(ch->can_equip(obj, LOC_LHAND) && !obj->equipped) ch->printf(" {3|{0 %-16s {3|{0 %s\n\r", print_obj_type(obj_table[obj->id].type).c_str(), obj->name().c_str()); return; } if(!ch->has_skill("Two Swords", true) && ch->eq[LOC_RHAND] && obj_table[ch->eq[LOC_RHAND]->id].obj_type == OBJ_WEAPON) { ch->printf("equip: ERROR: You can only equip 2 weapons with \"Two Swords\" ability.\n\r"); return; } ch->room->echo(ch->name + " equips \"" + obj->name() + "\".\n\r", ch); ch->equip(obj, LOC_LHAND); return; } void do_equiphead(CH *ch, string argument="") { OBJ *obj; if(argument.empty() || !(obj = ch->obj(argument, false)) || !ch->can_equip(obj, LOC_HEAD)) { ch->printf("Usage: equip head [object]\n\r"); ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r"); ch->printf("+-------------------------------------------------+{0\n\r"); for(obj = ch->objects; obj; obj = obj->next) if(ch->can_equip(obj, LOC_HEAD) && !obj->equipped) ch->printf(" {3|{0 %-16s {3|{0 %s\n\r", print_obj_type(obj_table[obj->id].type).c_str(), obj->name().c_str()); return; } ch->room->echo(ch->name + " equips \"" + obj->name() + "\".\n\r", ch); ch->equip(obj, LOC_HEAD); return; } void do_equipbody(CH *ch, string argument="") { OBJ *obj; if(argument.empty() || !(obj = ch->obj(argument, false)) || !ch->can_equip(obj, LOC_BODY)) { ch->printf("Usage: equip body [object]\n\r"); ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r"); ch->printf("+-------------------------------------------------+{0\n\r"); for(obj = ch->objects; obj; obj = obj->next) if(ch->can_equip(obj, LOC_BODY) && !obj->equipped) ch->printf(" {3|{0 %-16s {3|{0 %s\n\r", print_obj_type(obj_table[obj->id].type).c_str(), obj->name().c_str()); return; } ch->room->echo(ch->name + " equips \"" + obj->name() + "\".\n\r", ch); ch->equip(obj, LOC_BODY); return; } void do_equipacc(CH *ch, string argument="") { OBJ *obj; if(argument.empty() || !(obj = ch->obj(argument, false)) || !ch->can_equip(obj, LOC_ACC)) { ch->printf("Usage: equip accessory [object]\n\r"); ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r"); ch->printf("+-------------------------------------------------+{0\n\r"); for(obj = ch->objects; obj; obj = obj->next) if(ch->can_equip(obj, LOC_ACC) && !obj->equipped) ch->printf(" {3|{0 %-16s {3|{0 %s\n\r", print_obj_type(obj_table[obj->id].type).c_str(), obj->name().c_str()); return; } ch->room->echo(ch->name + " equips \"" + obj->name() + "\".\n\r", ch); ch->equip(obj, LOC_ACC); return; } void do_remove(CH *ch, string argument="") { OBJ *obj; if(argument.empty() || !(obj = ch->obj(argument, true))) { ch->printf("Usage: remove [object]\n\r"); return; } ch->room->echo(ch->name + " removes " + obj->name() + ".\n\r", ch); ch->remove(obj); return; } void do_items(CH *ch, string argument="") { OBJ *obj; bool can_wear; ostrstream ost; ch->printf("{3+--{0Type{3---------------{0Name{3------------------------+\n\r"); ch->printf("+-------------------------------------------------+{0\n\r"); for(obj = ch->objects; obj; obj = obj->next) { if(!obj->equipped) { can_wear = obj->type() == TYPE_POTION || ch->can_equip(obj, (obj->type() == OBJ_WEAPON || obj->type() == OBJ_WEAPON ? LOC_RHAND : obj->type() == OBJ_HEAD ? LOC_HEAD : obj->type() == OBJ_BODY ? LOC_BODY : LOC_ACC)); ost << " {3|{0 " << (can_wear ? "{0" : "{8") << setw(16) << setiosflags(ios::left) << obj->str_type() << " {3|{0 " << (can_wear ? "{0" : "{8") << obj->name() << "{0" << endl; } } ost << ends; ch->printf(ost.str()); return; } void CH::save_objects() { if(npc || confirm_delete) return; MYSQL mysql; mysql_init(&mysql); if(npc || !mysql_real_connect(&mysql, DB_LOC, DB_USER, DB_PASS, DB_NAME, 0, NULL, 0)) return; ostrstream ost; ost << "DELETE FROM objects WHERE owner='" + name + "'" << ends; mysql_query(&mysql, ost.str()); for(OBJ *obj = objects; obj; obj = obj->next) { ost.freeze(false); ost.seekp(0, ios::beg); ost << "INSERT INTO objects(owner, id, equipped, loc) values('" << name << "', " << obj->id << ", " << obj->equipped << ", " << obj->loc << ")" << ends; mysql_query(&mysql, ost.str()); } mysql_close(&mysql); return; } void CH::load_objects() { MYSQL mysql; MYSQL_RES *res; MYSQL_ROW row; mysql_init(&mysql); if(!mysql_real_connect(&mysql, DB_LOC, DB_USER, DB_PASS, DB_NAME, 0, NULL, 0)) return; ostrstream ost; ost << "SELECT * FROM objects WHERE owner='" << name << "'" << ends; mysql_query(&mysql, ost.str()); res = mysql_store_result(&mysql); OBJ *obj; while((row = mysql_fetch_row(res))) { obj = create_obj(atoi(row[1])); obj->to(this); if(atoi(row[2])) equip(obj, atoi(row[3])); } mysql_free_result(res); mysql_close(&mysql); return; } OBJ *CH::obj(const string name, const bool equipped = false) { for(OBJ *obj = objects; obj; obj = obj->next) if(((equipped && obj->equipped) || (!equipped && !obj->equipped)) && find(name, obj->name())) return obj; return NULL; } OBJ *CH::obj(const short id, const bool equipped = false) { short cnt = 0; for(OBJ *obj = objects; obj; obj = obj->next) { if((!equipped && obj->equipped) || (equipped && !obj->equipped)) continue; if(++cnt == id) return obj; } return NULL; } string OBJ::name() { return (string)obj_table[id].name; }; string OBJ::str_type() { return obj_type_table[type()].name; }; short OBJ::type() { return obj_table[id].type; }; short OBJ::cost() { return obj_table[id].cost; } short OBJ::value() { return cost(); } void do_give(CH *ch, string argument="") { OBJ *obj; CH *pers; string arg; split(argument, arg); if(arg.empty() || argument.empty() || !(obj = ch->obj(arg, false)) || !(pers = ch->room->ch(argument))) { ch->printf("Usage: give [object] [player]\n\r"); return; } ch->room->echo(ch->name + " gives " + pers->name + " \"" + obj->name() + "\".\n\r"); obj->to(pers); return; }