/**************************************************************
* 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;
}