diff options
-rw-r--r-- | doc/sample/getiteminfo.txt | 23 | ||||
-rw-r--r-- | doc/script_commands.txt | 63 | ||||
-rw-r--r-- | src/map/script.c | 171 | ||||
-rw-r--r-- | src/map/script.h | 25 |
4 files changed, 261 insertions, 21 deletions
diff --git a/doc/sample/getiteminfo.txt b/doc/sample/getiteminfo.txt index 9d5121635..316318cb6 100644 --- a/doc/sample/getiteminfo.txt +++ b/doc/sample/getiteminfo.txt @@ -37,5 +37,28 @@ prontera,156,179,6 script test_getiteminfo 4_F_KAFRA1,{ .@trade$ = callfunc("F_GetTradeRestriction", .@value); mesf("Trade Restriction: %s", .@trade$); + + mesf("Drop delay: %d", getiteminfo(.@value, ITEMINFO_DELAY)); + mesf("Drop effect mode: %d", getiteminfo(.@value, ITEMINFO_DROPEFFECT_MODE)); + mesf("Class base 1: %d", getiteminfo(.@value, ITEMINFO_CLASS_BASE_1)); + mesf("Class base 2: %d", getiteminfo(.@value, ITEMINFO_CLASS_BASE_2)); + mesf("Class base 3: %d", getiteminfo(.@value, ITEMINFO_CLASS_BASE_3)); + mesf("Class Upper: %d", getiteminfo(.@value, ITEMINFO_CLASS_UPPER)); + mesf("No refine flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_NO_REFINE)); + mesf("Delay consume flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_DELAY_CONSUME)); + mesf("Auto equip flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_AUTOEQUIP)); + mesf("Auto favorite flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_AUTO_FAVORITE)); + mesf("Buying store flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_BUYINGSTORE)); + mesf("Bind on equip flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_BINDONEQUIP)); + mesf("Keep after use flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_KEEPAFTERUSE)); + mesf("Force serial flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_FORCE_SERIAL)); + mesf("No random item options flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_NO_OPTIONS)); + mesf("Drop announce flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_DROP_ANNOUNCE)); + mesf("Shopw drop effect flag: %d", getiteminfo(.@value, ITEMINFO_FLAG_SHOWDROPEFFECT)); + mesf("Stack amount: %d", getiteminfo(.@value, ITEMINFO_STACK_AMOUNT)); + mesf("Stack amount flag: %d", getiteminfo(.@value, ITEMINFO_STACK_FLAG)); + mesf("Item usage flag: %d", getiteminfo(.@value, ITEMINFO_ITEM_USAGE_FLAG)); + mesf("Item usage override: %d", getiteminfo(.@value, ITEMINFO_ITEM_USAGE_OVERRIDE)); + mesf("GM Level override: %d", getiteminfo(.@value, ITEMINFO_GM_LV_TRADE_OVERRIDE)); close; } diff --git a/doc/script_commands.txt b/doc/script_commands.txt index 8c26ff832..d14393a8a 100644 --- a/doc/script_commands.txt +++ b/doc/script_commands.txt @@ -3278,26 +3278,49 @@ It will return -1 if there is no such item. Valid types are: - ITEMINFO_BUYPRICE - Buy Price - ITEMINFO_SELLPRICE - Sell Price - ITEMINFO_TYPE - Item Type - ITEMINFO_MAXCHANCE - Max drop chance of this item e.g. 1 = 0.01% , etc.. - if = 0, then monsters don't drop it at all (rare or a quest item) - if = 10000, then this item is sold in NPC shops only - ITEMINFO_SEX - Sex - ITEMINFO_LOC - Equip location - ITEMINFO_WEIGHT - Weight (note: 1/10 of unit) - ITEMINFO_ATK - Attack - ITEMINFO_DEF - Defense - ITEMINFO_RANGE - Range - ITEMINFO_SLOTS - Slots - ITEMINFO_SUBTYPE - Item subtype - ITEMINFO_ELV - Equip min. level - ITEMINFO_WLV - Weapon level - ITEMINFO_VIEWID - View ID ("Sprite" field in the Item DB) - ITEMINFO_MATK - MATK (only relevant if RENEWAL is set) - ITEMINFO_VIEWSPRITE - View Sprite ("ViewSprite" field in the Item DB) - ITEMINFO_TRADE - Trade Restriction (see "doc/constant.md": item trade restriction) + ITEMINFO_BUYPRICE - Buy Price + ITEMINFO_SELLPRICE - Sell Price + ITEMINFO_TYPE - Item Type + ITEMINFO_MAXCHANCE - Max drop chance of this item e.g. 1 = 0.01% , etc.. + if = 0, then monsters don't drop it at all (rare or a quest item) + if = 10000, then this item is sold in NPC shops only + ITEMINFO_SEX - Sex + ITEMINFO_LOC - Equip location + ITEMINFO_WEIGHT - Weight (note: 1/10 of unit) + ITEMINFO_ATK - Attack + ITEMINFO_DEF - Defense + ITEMINFO_RANGE - Range + ITEMINFO_SLOTS - Slots + ITEMINFO_SUBTYPE - Item subtype + ITEMINFO_ELV - Equip min. level + ITEMINFO_ELV_MAX - Equip max. level + ITEMINFO_WLV - Weapon level + ITEMINFO_VIEWID - View ID ("Sprite" field in the Item DB) + ITEMINFO_MATK - MATK (only relevant if RENEWAL is set) + ITEMINFO_VIEWSPRITE - View Sprite ("ViewSprite" field in the Item DB) + ITEMINFO_TRADE - Trade Restriction (see "doc/constant.md": item trade restriction) + ITEMINFO_DELAY - Delay + ITEMINFO_DROPEFFECT_MODE - Drop effect mode + ITEMINFO_CLASS_BASE_1 - Class base 1 + ITEMINFO_CLASS_BASE_2 - Class base 2 + ITEMINFO_CLASS_BASE_3 - Class base 3 + ITEMINFO_CLASS_UPPER - Class Upper + ITEMINFO_FLAG_NO_REFINE - No refine flag + ITEMINFO_FLAG_DELAY_CONSUME - Delay consume flag + ITEMINFO_FLAG_AUTOEQUIP - Auto equip flag + ITEMINFO_FLAG_AUTO_FAVORITE - Auto favorite flag + ITEMINFO_FLAG_BUYINGSTORE - Buying store flag + ITEMINFO_FLAG_BINDONEQUIP - Bind on equip flag + ITEMINFO_FLAG_KEEPAFTERUSE - Keep after use flag + ITEMINFO_FLAG_FORCE_SERIAL - Force serial flag + ITEMINFO_FLAG_NO_OPTIONS - No random item options flag + ITEMINFO_FLAG_DROP_ANNOUNCE - Drop announce flag + ITEMINFO_FLAG_SHOWDROPEFFECT - Shopw drop effect flag + ITEMINFO_STACK_AMOUNT - Stack amount + ITEMINFO_STACK_FLAG - Stack amount flag (1: inventory, 2:cart, 4:storage: 8:guildstorage) + ITEMINFO_ITEM_USAGE_FLAG - Item usage flag + ITEMINFO_ITEM_USAGE_OVERRIDE - Item usage override + ITEMINFO_GM_LV_TRADE_OVERRIDE - Min. GM level override trade restriction Check sample in doc/sample/getiteminfo.txt diff --git a/src/map/script.c b/src/map/script.c index 51cf29816..c3e884bb4 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -14588,6 +14588,82 @@ static BUILDIN(getiteminfo) case ITEMINFO_TRADE: script_pushint(st, it->flag.trade_restriction); break; + case ITEMINFO_ELV_MAX: + script_pushint(st, it->elvmax); + break; + case ITEMINFO_DROPEFFECT_MODE: + script_pushint(st, it->dropeffectmode); + break; + case ITEMINFO_DELAY: + script_pushint(st, it->delay); + break; + case ITEMINFO_CLASS_BASE_1: + script_pushint(st, it->class_base[0]); + break; + case ITEMINFO_CLASS_BASE_2: + script_pushint(st, it->class_base[1]); + break; + case ITEMINFO_CLASS_BASE_3: + script_pushint(st, it->class_base[2]); + break; + case ITEMINFO_CLASS_UPPER: + script_pushint(st, it->class_upper); + break; + case ITEMINFO_FLAG_NO_REFINE: + script_pushint(st, it->flag.no_refine); + break; + case ITEMINFO_FLAG_DELAY_CONSUME: + script_pushint(st, it->flag.delay_consume); + break; + case ITEMINFO_FLAG_AUTOEQUIP: + script_pushint(st, it->flag.autoequip); + break; + case ITEMINFO_FLAG_AUTO_FAVORITE: + script_pushint(st, it->flag.auto_favorite); + break; + case ITEMINFO_FLAG_BUYINGSTORE: + script_pushint(st, it->flag.buyingstore); + break; + case ITEMINFO_FLAG_BINDONEQUIP: + script_pushint(st, it->flag.bindonequip); + break; + case ITEMINFO_FLAG_KEEPAFTERUSE: + script_pushint(st, it->flag.keepafteruse); + break; + case ITEMINFO_FLAG_FORCE_SERIAL: + script_pushint(st, it->flag.force_serial); + break; + case ITEMINFO_FLAG_NO_OPTIONS: + script_pushint(st, it->flag.no_options); + break; + case ITEMINFO_FLAG_DROP_ANNOUNCE: + script_pushint(st, it->flag.drop_announce); + break; + case ITEMINFO_FLAG_SHOWDROPEFFECT: + script_pushint(st, it->flag.showdropeffect); + break; + case ITEMINFO_STACK_AMOUNT: + script_pushint(st, it->stack.amount); + break; + case ITEMINFO_STACK_FLAG: + { + int stack_flag = 0; + if (it->stack.inventory != 0) stack_flag |= 1; + if (it->stack.cart != 0) stack_flag |= 2; + if (it->stack.storage != 0) stack_flag |= 4; + if (it->stack.guildstorage != 0) stack_flag |= 8; + script_pushint(st, stack_flag); + } + break; + case ITEMINFO_ITEM_USAGE_FLAG: + script_pushint(st, it->item_usage.flag); + break; + case ITEMINFO_ITEM_USAGE_OVERRIDE: + script_pushint(st, it->item_usage.override); + break; + case ITEMINFO_GM_LV_TRADE_OVERRIDE: + script_pushint(st, it->gm_lv_trade_override); + break; default: ShowError("buildin_getiteminfo: Invalid item type %d.\n", n); script_pushint(st,-1); @@ -14857,6 +14933,78 @@ static BUILDIN(setiteminfo) case ITEMINFO_TRADE: it->flag.trade_restriction = value; break; + case ITEMINFO_ELV_MAX: + it->elvmax = cap_value(value, 0, MAX_LEVEL); + break; + case ITEMINFO_DROPEFFECT_MODE: + it->dropeffectmode = value; + break; + case ITEMINFO_DELAY: + it->delay = value; + break; + case ITEMINFO_CLASS_BASE_1: + it->class_base[0] = value; + break; + case ITEMINFO_CLASS_BASE_2: + it->class_base[1] = value; + break; + case ITEMINFO_CLASS_BASE_3: + it->class_base[2] = value; + break; + case ITEMINFO_CLASS_UPPER: + it->class_upper = value; + break; + case ITEMINFO_FLAG_NO_REFINE: + it->flag.no_refine = cap_value(value, 0, MAX_REFINE); + break; + case ITEMINFO_FLAG_DELAY_CONSUME: + it->flag.delay_consume = value; + break; + case ITEMINFO_FLAG_AUTOEQUIP: + it->flag.autoequip = cap_value(value, 0, 1); + break; + case ITEMINFO_FLAG_AUTO_FAVORITE: + it->flag.auto_favorite = cap_value(value, 0, 1); + break; + case ITEMINFO_FLAG_BUYINGSTORE: + it->flag.buyingstore = cap_value(value, 0, 1); + break; + case ITEMINFO_FLAG_BINDONEQUIP: + it->flag.bindonequip = cap_value(value, 0, 1); + break; + case ITEMINFO_FLAG_KEEPAFTERUSE: + it->flag.keepafteruse = cap_value(value, 0, 1); + break; + case ITEMINFO_FLAG_FORCE_SERIAL: + it->flag.force_serial = cap_value(value, 0, 1); + break; + case ITEMINFO_FLAG_NO_OPTIONS: + it->flag.no_options = cap_value(value, 0, 1); + break; + case ITEMINFO_FLAG_DROP_ANNOUNCE: + it->flag.drop_announce = cap_value(value, 0, 1); + break; + case ITEMINFO_FLAG_SHOWDROPEFFECT: + it->flag.showdropeffect = cap_value(value, 0, 1); + break; + case ITEMINFO_STACK_AMOUNT: + it->stack.amount = cap_value(value, 0, USHRT_MAX); + break; + case ITEMINFO_STACK_FLAG: + it->stack.inventory = ((value & 1) != 0); + it->stack.cart = ((value & 2) != 0); + it->stack.storage = ((value & 4) != 0); + it->stack.guildstorage = ((value & 8) != 0); + break; + case ITEMINFO_ITEM_USAGE_FLAG: + it->item_usage.flag = cap_value(value, 0, 1); + break; + case ITEMINFO_ITEM_USAGE_OVERRIDE: + it->item_usage.override = value; + break; + case ITEMINFO_GM_LV_TRADE_OVERRIDE: + it->gm_lv_trade_override = value; + break; default: ShowError("buildin_setiteminfo: invalid type %d.\n", n); script_pushint(st,-1); @@ -26694,6 +26842,29 @@ static void script_hardcoded_constants(void) script->set_constant("ITEMINFO_MATK", ITEMINFO_MATK, false, false); script->set_constant("ITEMINFO_VIEWSPRITE", ITEMINFO_VIEWSPRITE, false, false); script->set_constant("ITEMINFO_TRADE", ITEMINFO_TRADE, false, false); + script->set_constant("ITEMINFO_ELV_MAX", ITEMINFO_ELV_MAX, false, false); + script->set_constant("ITEMINFO_DROPEFFECT_MODE", ITEMINFO_DROPEFFECT_MODE, false, false); + script->set_constant("ITEMINFO_DELAY", ITEMINFO_DELAY, false, false); + script->set_constant("ITEMINFO_CLASS_BASE_1", ITEMINFO_CLASS_BASE_1, false, false); + script->set_constant("ITEMINFO_CLASS_BASE_2", ITEMINFO_CLASS_BASE_2, false, false); + script->set_constant("ITEMINFO_CLASS_BASE_3", ITEMINFO_CLASS_BASE_3, false, false); + script->set_constant("ITEMINFO_CLASS_UPPER", ITEMINFO_CLASS_UPPER, false, false); + script->set_constant("ITEMINFO_FLAG_NO_REFINE", ITEMINFO_FLAG_NO_REFINE, false, false); + script->set_constant("ITEMINFO_FLAG_DELAY_CONSUME", ITEMINFO_FLAG_DELAY_CONSUME, false, false); + script->set_constant("ITEMINFO_FLAG_AUTOEQUIP", ITEMINFO_FLAG_AUTOEQUIP, false, false); + script->set_constant("ITEMINFO_FLAG_AUTO_FAVORITE", ITEMINFO_FLAG_AUTO_FAVORITE, false, false); + script->set_constant("ITEMINFO_FLAG_BUYINGSTORE", ITEMINFO_FLAG_BUYINGSTORE, false, false); + script->set_constant("ITEMINFO_FLAG_BINDONEQUIP", ITEMINFO_FLAG_BINDONEQUIP, false, false); + script->set_constant("ITEMINFO_FLAG_KEEPAFTERUSE", ITEMINFO_FLAG_KEEPAFTERUSE, false, false); + script->set_constant("ITEMINFO_FLAG_FORCE_SERIAL", ITEMINFO_FLAG_FORCE_SERIAL, false, false); + script->set_constant("ITEMINFO_FLAG_NO_OPTIONS", ITEMINFO_FLAG_NO_OPTIONS, false, false); + script->set_constant("ITEMINFO_FLAG_DROP_ANNOUNCE", ITEMINFO_FLAG_DROP_ANNOUNCE, false, false); + script->set_constant("ITEMINFO_FLAG_SHOWDROPEFFECT", ITEMINFO_FLAG_SHOWDROPEFFECT, false, false); + script->set_constant("ITEMINFO_STACK_AMOUNT", ITEMINFO_STACK_AMOUNT, false, false); + script->set_constant("ITEMINFO_STACK_FLAG", ITEMINFO_STACK_FLAG, false, false); + script->set_constant("ITEMINFO_ITEM_USAGE_FLAG", ITEMINFO_ITEM_USAGE_FLAG, false, false); + script->set_constant("ITEMINFO_ITEM_USAGE_OVERRIDE", ITEMINFO_ITEM_USAGE_OVERRIDE, false, false); + script->set_constant("ITEMINFO_GM_LV_TRADE_OVERRIDE", ITEMINFO_GM_LV_TRADE_OVERRIDE, false, false); script->constdb_comment("getmercinfo options"); script->set_constant("MERCINFO_ID,", MERCINFO_ID, false, false); diff --git a/src/map/script.h b/src/map/script.h index 84a8e3b6e..5dc480a15 100644 --- a/src/map/script.h +++ b/src/map/script.h @@ -460,7 +460,30 @@ enum script_iteminfo_types { ITEMINFO_MATK, ITEMINFO_VIEWSPRITE, ITEMINFO_TRADE, - + ITEMINFO_ELV_MAX, + ITEMINFO_DROPEFFECT_MODE, + ITEMINFO_DELAY, + ITEMINFO_CLASS_BASE_1, + ITEMINFO_CLASS_BASE_2, + ITEMINFO_CLASS_BASE_3, + ITEMINFO_CLASS_UPPER, + // ITEMINFO_FLAG_AVAILABLE, + ITEMINFO_FLAG_NO_REFINE, + ITEMINFO_FLAG_DELAY_CONSUME, + ITEMINFO_FLAG_AUTOEQUIP, + ITEMINFO_FLAG_AUTO_FAVORITE, + ITEMINFO_FLAG_BUYINGSTORE, + ITEMINFO_FLAG_BINDONEQUIP, + ITEMINFO_FLAG_KEEPAFTERUSE, + ITEMINFO_FLAG_FORCE_SERIAL, + ITEMINFO_FLAG_NO_OPTIONS, + ITEMINFO_FLAG_DROP_ANNOUNCE, + ITEMINFO_FLAG_SHOWDROPEFFECT, + ITEMINFO_STACK_AMOUNT, + ITEMINFO_STACK_FLAG, + ITEMINFO_ITEM_USAGE_FLAG, + ITEMINFO_ITEM_USAGE_OVERRIDE, + ITEMINFO_GM_LV_TRADE_OVERRIDE, ITEMINFO_MAX }; |