Merge branch 'master' into feature/lapine_synthesis_and_upgrade

This commit is contained in:
atemo 2020-10-31 02:55:37 +01:00
commit d79513402d
118 changed files with 300112 additions and 57104 deletions

1
.gitattributes vendored
View File

@ -12,3 +12,4 @@ configure.in text eol=lf
Makefile text eol=lf
Makefile.in text eol=lf
*.sh text eol=lf
*.sql text eol=lf

2
.gitignore vendored
View File

@ -41,6 +41,7 @@ Thumbs.db
/map-server
/mapcache
/nbproject
/yaml2sql
# /3rdparty/libconfig/
/3rdparty/libconfig/Makefile
@ -119,6 +120,7 @@ Thumbs.db
/mapserv.bat
/runserver.bat
/serv.bat
/yaml2sql.bat
# dlls
/libmysql.dll

View File

@ -58,8 +58,7 @@ ignore_items_gender: yes
// On map change it will check for items not tagged as "available" and
// auto-delete them from inventory/cart/storage.
// NOTE: An item is not available if it was not loaded from the item_db or
// specified as unavailable in db/item_avail.txt
// NOTE: An item is not available if it was not loaded from the item_db.
// 0x1: Inventory
// 0x2: Cart
// 0x4: Storage
@ -103,7 +102,7 @@ item_enabled_npc: yes
// Default: yes
item_flooritem_check: yes
// Set default bound type for item_flag &8 (see db/[pre-]re/item_flag.txt
// Set default bound type when item with BindOnEquip flag is equipped (see db/[pre-]re/item_db.yml)
// 0 - None
// 1 - Account
// 2 - Guild

View File

@ -197,7 +197,7 @@ char_del_restriction: 3
// Uncomment to customize the restriction
//allowed_job_flag: 3
// What folder the DB files are in (item_db.txt, etc.)
// Folder that contains the database files.
db_path: db
//===================================

View File

@ -1,12 +0,0 @@
// Item Availability and Alias Database
//
// Structure of Database:
// ItemID,SpriteID
//
// 01. ItemID Item ID to change.
// 02. SpriteID Item ID which will be sent to the client instead of ItemID.
// If 0, the item becomes unavailable for use. If item_check is enabled and a player owns such an item, it will be removed upon next login/teleport.
//
// NOTE: Replaces an item client-side while keeping them separate server-side.
// Think of it as a way to disguise items.
// Don't sell the item in same shop with the source. Example, don't put 2240 & 2241 in same place!

View File

@ -1,10 +0,0 @@
// Buying Store Item List
// List of items that can be sold to buying stores.
//
// Structure of Database:
// ItemID
//
// Note:
// Items are in same order as data\buyingstoreitemlist.txt, which
// must be edited as well for the client to accept added items.

View File

@ -1,68 +0,0 @@
// Items Additional Database
//
// Structure of Database:
// ID,Name,Name,Type,Price,Sell,Weight,ATK[:MATK],DEF,Range,Slot,Job,Class,Gender,Loc,wLV,eLV[:maxLevel],Refineable,View,{ Script },{ OnEquip_Script },{ OnUnequip_Script }
//
// THQ Quest Items
//=============================================================
//7950,THG_Membership,THG Membership,3,,10,10,,,,,,,,,,,,,{},{},{}
//7951,Token_Bag,Token Bag,3,,10,10,,,,,,,,,,,,,{},{},{}
//1998,Jeramiah's_Jur,Jeramiah's Jur,3,,10,10,,,,,,,,,,,,,{},{},{}
//1999,Zed's_Staff,Zed's Staff,3,,10,10,,,,,,,,,,,,,{},{},{}
// Official Event Items that had their Effects removed after the event was completed
//585,Wurst,Brusti,11,2,,40,,,,,0xFFFFFFFF,63,2,,,,,,{ itemheal rand(15,20),0; itemskill "PR_MAGNIFICAT",3; },{},{}
//679,Gold_Pill,Pilule,0,5000,,300,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 50,50; },{},{}
//2681,Republic_Ring,Republic Anniversary Ring,4,20,,100,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus bAllStats,3; },{},{}
//5134,Pumpkin_Hat,Pumpkin-Head,4,20,,200,,2,,0,0xFFFFFFFF,63,2,256,,0,1,206,{ bonus2 bSubRace,RC_Demon,5; },{},{}
//5136,Santa's_Hat_,Louise's Santa Hat,4,20,,100,,3,,0,0xFFFFFFFF,63,2,256,,0,1,20,{ bonus bMdef,1; bonus bLuk,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",3,50; bonus3 bAutoSpellWhenHit,"AL_BLESSING",10,50; },{},{}
//5145,Carnival_Joker_Jester,Carnival Jester,4,10,,100,,0,,0,0xFFFFFFFF,63,2,256,,0,1,89,{ bonus bAllStats,3; },{},{}
//5147,Baseball_Cap,Baseball Cap,4,0,,200,,3,,0,0xFFFFFFFF,63,2,256,,0,1,216,{ bonus2 bExpAddRace,RC_Boss,50; bonus2 bExpAddRace,RC_NonBoss,50; },{},{}
//5201,Party_Hat_B,2nd Anniversary Party Hat,4,20,,300,,3,,0,0xFFFFFFFF,63,2,256,,0,1,144,{ bonus bAllStats,3; },{},{}
//5202,Pumpkin_Hat_,Pumpkin Hat,4,20,,200,,2,,0,0xFFFFFFFF,63,2,256,,0,1,206,{ bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500; },{},{}
//5204,Event_Pierrot_Nose,Rudolf's Red Nose,4,20,,100,,0,,0,0xFFFFFFFF,63,2,1,,0,0,49,{ bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30; },{},{}
//5264,Aussie_Flag_Hat,Australian Flag Hat,4,20,,500,,4,,0,0xFFFFFFFF,63,2,256,,0,1,304,{ bonus bAllStats,2; },{},{}
//5356,Pumpkin_Hat_H,Pumpkin Hat,4,20,,200,,2,,0,0xFFFFFFFF,63,2,256,,0,1,206,{ bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus2 bMagicAddRace,RC_Demon,5; },{},{}
//5384,Santa_Hat_1,Twin Pompom By JB,4,20,,200,,2,,1,0xFFFFFFFF,63,2,256,,20,1,390,{ bonus bLuk,3; bonus2 bResEff,Eff_Curse,2000; bonus bVariableCastrate,-2; bonus bAspdRate,4; bonus2 bAddMonsterDropItem,539,100; bonus2 bAddMonsterDropItem,529,200; bonus2 bAddMonsterDropItem,530,200; autobonus "{ bonus bCritical,10; }",10,5000; },{},{}
//5811,Santa_Beard,Santa Beard,4,20,,100,,5,,0,0xFFFFFFFF,63,2,1,,0,0,25,{ bonus2 bSubRace,RC_Brute,5; bonus2 bSubRace,RC_Player_Doram,5; },{},{}
//11702,Moon_Cookie,Moon Cookie,11,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_end SC_POISON; sc_end SC_SILENCE; sc_end SC_BLIND; sc_end SC_CONFUSION; sc_end SC_CURSE; sc_end SC_HALLUCINATION; itemskill "AL_BLESSING",7; },{},{}
//12131,Lucky_Potion,Lucky Potion,0,2,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_LUKFOOD,180000,15; },{},{}
//12143,Red_Can,Red Can,2,50000,,300,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 25,25; },{},{}
//Event effect: Summon monster? Probably Rice_Cake. x_x
//12199,Rice_Scroll,Rice Scroll,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
//12200,Event_Cake,Event Cake,2,20,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "PR_MAGNIFICAT",3; },{},{}
//12238,New_Year_Rice_Cake_1,New Year Rice Cake,0,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 20,15; sc_start SC_STRFOOD,1200000,3; sc_start SC_INTFOOD,1200000,3; sc_start SC_LUKFOOD,1200000,3; sc_start SC_SPEEDUP1,5000,0; },{},{}
//12239,New_Year_Rice_Cake_2,New Year Rice Cake,0,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal 20,15; sc_start SC_DEXFOOD,1200000,3; sc_start SC_AGIFOOD,1200000,3; sc_start SC_VITFOOD,1200000,3; sc_start SC_SPEEDUP1,5000,0; },{},{}
// iRO St. Patrick's Day Event 2008
//=============================================================
//12715,Black_Treasure_Chest,Black Treasure Chest,2,0,,200,,,,,0xFFFFFFFF,63,2,,,,,,{ callfunc "F_08stpattyseventbox"; },{},{}
// iRO Valentine's Day Event 2009
//=============================================================
//12742,Valentine_Gift_Box_M,Valentine Gift Box,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 7946,1; },{},{}
//12743,Valentine_Gift_Box_F,Valentine Gift Box,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 7947,1; },{},{}
//12744,Chocolate_Box,Chocolate Box,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 558,1; },{},{}
//14466,Valentine's_Emblem_Box,Valentine's Emblem Box,2,10,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 5817,1; },{},{}
//7946,Gold_Ring_Of_Valentine,Gold Ring Of Valentine,3,10,,0,,,,,,,,,,,,,{},{},{}
//7947,Silver_Ring_Of_Valentine,Silver Ring Of Valentine,3,10,,0,,,,,,,,,,,,,{},{},{}
//7948,Box,Box,3,10,,10,,,,,,,,,,,,,{},{},{}
//5817,Valentine's_Emblem,Valentine's Emblem,4,10,,0,,3,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus bAtkRate,3; bonus bMatkRate,3; bonus bAllStats,2; bonus bFlee,10; bonus bAspd,1; bonus bMdef,3; bonus2 bSkillAtk,"AL_HEAL",10; bonus2 bSkillHeal,"AL_HEAL",10; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bAddItemGroupHealRate,IG_Potion,10; },{},{}
// iRO Halloween Event 2009
//=============================================================
//5668,Weird_Pumpkin_Hat,Weird Pumpkin Hat,4,20,,0,,5,,0,0xFFFFFFFF,63,2,256,,0,1,206,{ bonus bMdef,5; bonus2 bAddMonsterDropItem,12192,2500; },{},{}
//6298,Crushed_Pumpkin,Crushed Pumpkin,3,0,,0,,,,,,,,,,,,,{},{},{}
//6299,Worn_Fabric,Worn Fabric,3,0,,0,,,,,,,,,,,,,{},{},{}
// Old Tuxedo and Wedding Dress, will display the outfit when worn.
//==================================================================
//2338,Wedding_Dress,Wedding Dress,4,43000,,500,,0,,0,0xFFFFFFFE,63,0,16,,0,1,0,{},{ sc_start SC_WEDDING,INFINITE_TICK,0; },{ sc_end SC_WEDDING; }
//7170,Tuxedo,Tuxedo,4,43000,,10,,0,,0,0xFFFFFFFE,63,1,16,,0,1,0,{},{ sc_start SC_WEDDING,INFINITE_TICK,0; },{ sc_end SC_WEDDING; }
// Non-kRO Eden Group Mark effect
//=============================================================
//22508,Para_Team_Mark_,Eden Group Mark,11,0,,0,,,,0,0xFFFFFFFF,63,2,,,,,,{ unitskilluseid getcharid(3),"AL_TELEPORT",3; },{},{}

492
db/import-tmpl/item_db.yml Normal file
View File

@ -0,0 +1,492 @@
# This file is a part of rAthena.
# Copyright(C) 2019 rAthena Development Team
# https://rathena.org - https://github.com/rathena
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###########################################################################
# Item Database
###########################################################################
#
# Item Settings
#
###########################################################################
# - Id Item ID.
# AegisName Server name to reference the item in scripts and lookups, should use no spaces.
# Name Name in English for displaying as output.
# Type Item type. (Default: Etc)
# SubType Weapon or Ammo type. (Default: 0)
# Buy Buying price. When not specified, becomes double the sell price. (Default: 0)
# Sell Selling price. When not specified, becomes half the buy price. (Default: 0)
# Weight Item weight. Each 10 is 1 weight. (Default: 0)
# Attack Weapon's attack. (Default: 0)
# MagicAttack Weapon's magic attack. (Default: 0)
# Defense Armor's defense. (Default: 0)
# Range Weapon's attack range. (Default: 0)
# Slots Available slots in item. (Default: 0)
# Jobs Jobs that can equip the item. (Map default is 'All: true')
# Classes Upper class types that can equip the item. (Map default is 'All: true')
# Gender Gender that can equip the item. (Default: Both)
# Locations Equipment's placement. (Default: None)
# WeaponLevel Weapon level. (Default: 0)
# EquipLevelMin Minimum required level to equip. (Default: 0)
# EquipLevelMax Maximum level that can equip. (Default: 0)
# Refineable If the item can be refined. (Default: false)
# View View sprite of an item. (Default: 0)
# AliasName Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
# Flags: Item flags. (Default: null)
# BuyingStore If the item is available for Buyingstores. (Default: false)
# DeadBranch If the item is a Dead Branch. (Default: false)
# Container If the item is part of a container. (Default: false)
# UniqueId If the item is a unique stack. (Default: false)
# BindOnEquip If the item is bound to the character upon equipping. (Default: false)
# DropAnnounce If the item has a special announcement to self on drop. (Default: false)
# NoConsume If the item is consumed on use. (Default: false)
# DropEffect If the item has a special effect when on the ground. (Default: None)
# Delay: Item use delay. (Default: null)
# Duration Duration of delay in seconds.
# Status Status Change used to track delay. (Default: None)
# Stack: Item stack amount. (Default: null)
# Amount Maximum amount that can be stacked.
# Inventory If the stack is applied to player's inventory. (Default: true)
# Cart If the stack is applied to the player's cart. (Default: false)
# Storage If the stack is applied to the player's storage. (Default: false)
# GuildStorage If the stack is applied to the player's guild storage. (Default: false)
# NoUse: Conditions when the item is unusable. (Default: null)
# Override Group level to override these conditions.
# Sitting If the item can not be used while sitting. (Default: false)
# Trade: Trade restrictions. (Default: null)
# Override Group level to override these conditions.
# NoDrop If the item can not be dropped. (Default: false)
# NoTrade If the item can not be traded. (Default: false)
# TradePartner If the item can not be traded to the player's partner. (Default: false)
# NoSell If the item can not be sold. (Default: false)
# NoCart If the item can not be put in a cart. (Default: false)
# NoStorage If the item can not be put in a storage. (Default: false)
# NoGuildStorage If the item can not be put in a guild storage. (Default: false)
# NoMail If the item can not be put in a mail. (Default: false)
# NoAuction If the item can not be put in an auction. (Default: false)
# Script Script to execute when the item is used/equipped. (Default: null)
# EquipScript Script to execute when the item is equipped. (Default: null)
# UnEquipScript Script to execute when the item is unequipped or when a rental item expires. (Default: null)
###########################################################################
Header:
Type: ITEM_DB
Version: 1
#Body:
# THQ Quest Items
#=============================================================
# - Id: 1998
# AegisName: Jeramiah's_Jur
# Name: Jeramiah's Jur
# Type: Etc
# Sell: 10
# Weight: 10
# AliasName: Jur
# - Id: 1999
# AegisName: Zed's_Staff
# Name: Zed's Staff
# Type: Etc
# Sell: 10
# Weight: 10
# AliasName: Staff_Of_Soul
# - Id: 7950
# AegisName: THG_Membership
# Name: THG Membership
# Type: Etc
# Sell: 10
# Weight: 10
# AliasName: Foolishness_Of_Blind
# - Id: 7951
# AegisName: Token_Bag
# Name: Token Bag
# Type: Etc
# Sell: 10
# Weight: 10
# AliasName: Leather_Bag_Of_Infinity
# Official Event Items that had their Effects removed after the event was completed
#=============================================================
# - Id: 585
# AegisName: Wurst
# Name: Brusti
# Type: Delayconsume
# Buy: 2
# Weight: 40
# Script: |
# itemheal rand(15,20),0; itemskill "PR_MAGNIFICAT",3;
# - Id: 679
# AegisName: Gold_Pill
# Name: Pilule
# Type: Healing
# Buy: 5000
# Weight: 300
# Script: |
# percentheal 50,50;
# - Id: 2681
# AegisName: Republic_Ring
# Name: Republic Anniversary Ring
# Type: Armor
# Buy: 20
# Weight: 100
# Locations:
# Right_Accessory: true
# Left_Accessory: true
# Script: |
# bonus bAllStats,3;
# - Id: 5134
# AegisName: Pumpkin_Hat
# Name: Pumpkin-Head
# Type: Armor
# Buy: 20
# Weight: 200
# Defense: 2
# Locations:
# Head_Top: true
# Refineable: true
# View: 206
# Script: |
# bonus2 bSubRace,RC_Demon,5;
# - Id: 5136
# AegisName: Santa's_Hat_
# Name: Louise's Santa Hat
# Type: Armor
# Buy: 20
# Weight: 100
# Defense: 3
# Locations:
# Head_Top: true
# Refineable: true
# View: 20
# Script: |
# bonus bMdef,1; bonus bLuk,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",3,50; bonus3 bAutoSpellWhenHit,"AL_BLESSING",10,50;
# - Id: 5145
# AegisName: Carnival_Joker_Jester
# Name: Carnival Jester
# Type: Armor
# Buy: 10
# Weight: 100
# Locations:
# Head_Top: true
# Refineable: true
# View: 89
# Script: |
# bonus bAllStats,3;
# - Id: 5147
# AegisName: Baseball_Cap
# Name: Baseball Cap
# Type: Armor
# Weight: 200
# Defense: 3
# Locations:
# Head_Top: true
# Refineable: true
# View: 216
# Script: |
# bonus2 bExpAddRace,RC_Boss,50; bonus2 bExpAddRace,RC_NonBoss,50;
# - Id: 5201
# AegisName: Party_Hat_B
# Name: 2nd Anniversary Party Hat
# Type: Armor
# Buy: 20
# Weight: 300
# Defense: 3
# Locations:
# Head_Top: true
# Refineable: true
# View: 144
# Script: |
# bonus bAllStats,3;
# - Id: 5202
# AegisName: Pumpkin_Hat_
# Name: Pumpkin Hat
# Type: Armor
# Buy: 20
# Weight: 200
# Defense: 2
# Locations:
# Head_Top: true
# Refineable: true
# View: 206
# Script: |
# bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500;
# - Id: 5204
# AegisName: Event_Pierrot_Nose
# Name: Rudolf's Red Nose
# Type: Armor
# Buy: 20
# Weight: 100
# Locations:
# Head_Low: true
# View: 49
# Script: |
# bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30;
# - Id: 5264
# AegisName: Aussie_Flag_Hat
# Name: Australian Flag Hat
# Type: Armor
# Buy: 20
# Weight: 500
# Defense: 4
# Locations:
# Head_Top: true
# Refineable: true
# View: 304
# Script: |
# bonus bAllStats,2;
# - Id: 5356
# AegisName: Pumpkin_Hat_H
# Name: Pumpkin Hat
# Type: Armor
# Buy: 20
# Weight: 200
# Defense: 2
# Locations:
# Head_Top: true
# Refineable: true
# View: 206
# Script: |
# bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus2 bMagicAddRace,RC_Demon,5;
# - Id: 5384
# AegisName: Santa_Hat_1
# Name: Twin Pompom By JB
# Type: Armor
# Buy: 20
# Weight: 200
# Defense: 2
# Slots: 1
# Locations:
# Head_Top: true
# EquipLevelMin: 20
# Refineable: true
# View: 390
# Script: |
# bonus bLuk,3; bonus2 bResEff,Eff_Curse,2000; bonus bVariableCastrate,-2; bonus bAspdRate,4; bonus2 bAddMonsterDropItem,539,100; bonus2 bAddMonsterDropItem,529,200; bonus2 bAddMonsterDropItem,530,200; autobonus "{ bonus bCritical,10; }",10,5000;
# - Id: 5811
# AegisName: Santa_Beard
# Name: Santa Beard
# Type: Armor
# Buy: 20
# Weight: 100
# Defense: 5
# Locations:
# Head_Low: true
# View: 25
# Script: |
# bonus2 bSubRace,RC_Brute,5; bonus2 bSubRace,RC_Player_Doram,5;
# - Id: 11702
# AegisName: Moon_Cookie
# Name: Moon Cookie
# Type: Delayconsume
# Weight: 10
# Script: |
# sc_end SC_POISON; sc_end SC_SILENCE; sc_end SC_BLIND; sc_end SC_CONFUSION; sc_end SC_CURSE; sc_end SC_HALLUCINATION; itemskill "AL_BLESSING",7;
# - Id: 12131
# AegisName: Lucky_Potion
# Name: Lucky Potion
# Type: Healing
# Buy: 2
# Weight: 100
# Script: |
# sc_start SC_LUKFOOD,180000,15;
# - Id: 12143
# AegisName: Red_Can
# Name: Red Can
# Type: Usable
# Buy: 50000
# Weight: 300
# Script: |
# percentheal 25,25;
# Event effect: Summon monster? Probably Rice_Cake. x_x
#=============================================================
# - Id: 12199
# AegisName: Rice_Scroll
# Name: Rice Scroll
# Type: Usable
# - Id: 12200
# AegisName: Event_Cake
# Name: Event Cake
# Type: Usable
# Buy: 20
# Weight: 50
# Script: |
# itemskill "PR_MAGNIFICAT",3;
# - Id: 12238
# AegisName: New_Year_Rice_Cake_1
# Name: New Year Rice Cake
# Type: Healing
# Buy: 20
# Weight: 100
# Script: |
# percentheal 20,15; sc_start SC_STRFOOD,1200000,3; sc_start SC_INTFOOD,1200000,3; sc_start SC_LUKFOOD,1200000,3; sc_start SC_SPEEDUP1,5000,0;
# - Id: 12239
# AegisName: New_Year_Rice_Cake_2
# Name: New Year Rice Cake
# Type: Healing
# Buy: 20
# Weight: 100
# Script: |
# percentheal 20,15; sc_start SC_DEXFOOD,1200000,3; sc_start SC_AGIFOOD,1200000,3; sc_start SC_VITFOOD,1200000,3; sc_start SC_SPEEDUP1,5000,0;
# iRO St. Patrick's Day Event 2008
#=============================================================
# - Id: 7915
# AegisName: Copper_Coin_
# Name: Bronze Coin
# Type: Etc
# Weight: 10
# AliasName: Copper_Coin
# - Id: 7916
# AegisName: Silver_Coin_
# Name: Silver Coin
# Type: Etc
# Weight: 10
# AliasName: Silver_Coin
# - Id: 12715
# AegisName: Black_Treasure_Chest
# Name: Black Treasure Chest
# Type: Usable
# Weight: 200
# AliasName: Treasure_Box_
# Script: |
# callfunc "F_08stpattyseventbox";
# iRO Valentine's Day Event 2009
#=============================================================
# - Id: 5817
# AegisName: Valentine's_Emblem
# Name: Valentine's Emblem
# Type: Armor
# Buy: 10
# Defense: 3
# Locations:
# Right_Accessory: true
# Left_Accessory: true
# Script: |
# bonus bAtkRate,3; bonus bMatkRate,3; bonus bAllStats,2; bonus bFlee,10; bonus bAspd,1; bonus bMdef,3; bonus2 bSkillAtk,"AL_HEAL",10; bonus2 bSkillHeal,"AL_HEAL",10; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bAddItemGroupHealRate,IG_Potion,10;
# - Id: 7946
# AegisName: Gold_Ring_Of_Valentine
# Name: Gold Ring Of Valentine
# Type: Etc
# Buy: 10
# - Id: 7947
# AegisName: Silver_Ring_Of_Valentine
# Name: Silver Ring Of Valentine
# Type: Etc
# Buy: 10
# - Id: 7948
# AegisName: Box
# Name: Box
# Type: Etc
# Buy: 10
# Weight: 10
# - Id: 12742
# AegisName: Valentine_Gift_Box_M
# Name: Valentine Gift Box
# Type: Usable
# Buy: 10
# Script: |
# getitem 7946,1;
# - Id: 12743
# AegisName: Valentine_Gift_Box_F
# Name: Valentine Gift Box
# Type: Usable
# Buy: 10
# Script: |
# getitem 7947,1;
# - Id: 12744
# AegisName: Chocolate_Box
# Name: Chocolate Box
# Type: Usable
# Buy: 10
# Script: |
# getitem 558,1;
# - Id: 14466
# AegisName: Valentine's_Emblem_Box
# Name: Valentine's Emblem Box
# Type: Usable
# Buy: 10
# Script: |
# getitem 5817,1;
# iRO Halloween Event 2009
#=============================================================
# - Id: 5668
# AegisName: Weird_Pumpkin_Hat
# Name: Weird Pumpkin Hat
# Type: Armor
# Buy: 20
# Defense: 5
# Locations:
# Head_Top: true
# Refineable: true
# View: 206
# Script: |
# bonus bMdef,5; bonus2 bAddMonsterDropItem,12192,2500;
# - Id: 6298
# AegisName: Crushed_Pumpkin
# Name: Crushed Pumpkin
# Type: Etc
# - Id: 6299
# AegisName: Worn_Fabric
# Name: Worn Fabric
# Type: Etc
# Old Tuxedo and Wedding Dress, will display the outfit when worn.
#==================================================================
# - Id: 2338
# AegisName: Wedding_Dress
# Name: Wedding Dress
# Type: Armor
# Buy: 43000
# Weight: 500
# Jobs:
# All: true
# Novice: false
# Locations:
# Armor: true
# Refineable: true
# EquipScript: |
# sc_start SC_WEDDING,INFINITE_TICK,0;
# UnEquipScript: |
# sc_end SC_WEDDING;
# - Id: 7170
# AegisName: Tuxedo
# Name: Tuxedo
# Type: Armor
# Buy: 43000
# Weight: 10
# Jobs:
# All: true
# Novice: false
# Gender: Male
# Locations:
# Armor: true
# Refineable: true
# EquipScript: |
# sc_start SC_WEDDING,INFINITE_TICK,0;
# UnEquipScript: |
# sc_end SC_WEDDING;
# Non-kRO Eden Group Mark effect
#=============================================================
# - Id: 22508
# AegisName: Para_Team_Mark_
# Name: Eden Group Mark
# Type: Delayconsume
# Script: |
# unitskilluseid getcharid(3),"AL_TELEPORT",3;

View File

@ -1,8 +0,0 @@
// Item Delay Database
//
// Structure of Database:
// Item ID,Delay in Milliseconds
//
// NOTE:
// There is a max concurrent number of entries set in src/map/itemdb.h as MAX_ITEMDELAYS.

View File

@ -1,17 +0,0 @@
// Flagged Items
// <ItemID>,<Flag>
//
// <Flag>:
// 1 - As Dead Branch item (will be logged at `branchlog` table and cannot be used at 'nobranch' mapflag)
// 2 - As item group container, check player's inventory and weight before consumed
// 4 - GUID item, cannot be stacked even same or stackable item
// 8 - Item will be bound item when equipped
// 16 - Special Broadcast: When item dropped by monster and player loot it, will be broadcasted!
// 32 - Item will not be removed on consumption. Also supports 'itemskill'
// 64 - Item will be displayed with a client side defined drop
// 128 - Item will be displayed with a white pillar drop effect
// 256 - Item will be displayed with a blue pillar drop effect
// 512 - Item will be displayed with a yellow pillar drop effect
// 1024 - Item will be displayed with a purple pillar drop effect
// 2048 - Item will be displayed with a orange pillar drop effect
// NOTE: For removing flag by import file, use "-" to remove the flag. Example, 604,-1 will removes flag 1 from Branch_Of_Dead_Tree

View File

@ -1,13 +0,0 @@
// Item Usage Restriction Configuration File
// Defines if an item cannot be used under special circumstances.
//
// Structure of Database:
// ItemID,Flag,Group ID Override
//
// Flag:
// 1 = Cannot use item while sitting
// ... [more to come]
//
// Group ID Override:
// Group ID necessary to override this setting.

View File

@ -1,19 +0,0 @@
// Item Stacking Restriction File
// Prevents an item to be stacked more than x times in given
// inventory types. Generally used by 3rd class related skill items.
//
// Structure of Database:
// ItemID,MaxStackAmount,Type
//
// MaxStackAmount:
// Stack limit for the item. Use 0 to disable a restriction.
//
// Type mask values:
// &1: Character inventory restriction
// &2: Character cart restriction
// &4: Account storage restriction
// &8: Guild storage restriction
//
// Example:
// 512,4,12 // Will not allow more than 4 Apples in storages.

View File

@ -1,22 +0,0 @@
// Item Trade Restrictions Database
// Defines special trade rules for individual items.
//
// Structure of Database:
// Item ID, TradeMask,Group Level Override
//
// Legend for 'TradeMask' field (bitmask):
// 1 - item can't be dropped
// 2 - item can't be traded (nor vended)
// 4 - wedded partner can override restriction 2
// 8 - item can't be sold to npcs
// 16 - item can't be placed in the cart
// 32 - item can't be placed in the storage
// 64 - item can't be placed in the guild storage
// 128 - item can't be attached to mail
// 256 - item can't be auctioned
//
// Example:
// 1161,67,50
// Balmung cannot be dropped, traded, or placed in Guild Storage (1+2+64).
// Only groups of group-level 50 and up can override this setting.

View File

@ -1,27 +0,0 @@
// Item Availability and Alias Database
//
// Structure of Database:
// ItemID,SpriteID
//
// 01. ItemID Item ID to change.
// 02. SpriteID Item ID which will be sent to the client instead of ItemID.
// If 0, the item becomes unavailable for use. If item_check is enabled and a player owns such an item, it will be removed upon next login/teleport.
//
// NOTE: Replaces an item client-side while keeping them separate server-side.
// Think of it as a way to disguise items.
// Don't sell the item in same shop with the source. Example, don't put 2240 & 2241 in same place!
//2240,2241 //Beard - Grampa Beard
//Treasure Hunters Quest Items
//use these aliases if your game client doesn't support them normally
//7950,7021
//7951,7042
//1998,1250
//1999,1472
//St. Patric's Day Quest (2008) Items
//Enable if you plan to use the quest.
//12715,7721
//7915,673
//7916,675

95
db/item_db.yml Normal file
View File

@ -0,0 +1,95 @@
# This file is a part of rAthena.
# Copyright(C) 2019 rAthena Development Team
# https://rathena.org - https://github.com/rathena
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###########################################################################
# Item Database
###########################################################################
#
# Item Settings
#
###########################################################################
# - Id Item ID.
# AegisName Server name to reference the item in scripts and lookups, should use no spaces.
# Name Name in English for displaying as output.
# Type Item type. (Default: Etc)
# SubType Weapon or Ammo type. (Default: 0)
# Buy Buying price. When not specified, becomes double the sell price. (Default: 0)
# Sell Selling price. When not specified, becomes half the buy price. (Default: 0)
# Weight Item weight. Each 10 is 1 weight. (Default: 0)
# Attack Weapon's attack. (Default: 0)
# MagicAttack Weapon's magic attack. (Default: 0)
# Defense Armor's defense. (Default: 0)
# Range Weapon's attack range. (Default: 0)
# Slots Available slots in item. (Default: 0)
# Jobs Jobs that can equip the item. (Map default is 'All: true')
# Classes Upper class types that can equip the item. (Map default is 'All: true')
# Gender Gender that can equip the item. (Default: Both)
# Locations Equipment's placement. (Default: None)
# WeaponLevel Weapon level. (Default: 0)
# EquipLevelMin Minimum required level to equip. (Default: 0)
# EquipLevelMax Maximum level that can equip. (Default: 0)
# Refineable If the item can be refined. (Default: false)
# View View sprite of an item. (Default: 0)
# AliasName Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
# Flags: Item flags. (Default: null)
# BuyingStore If the item is available for Buyingstores. (Default: false)
# DeadBranch If the item is a Dead Branch. (Default: false)
# Container If the item is part of a container. (Default: false)
# UniqueId If the item is a unique stack. (Default: false)
# BindOnEquip If the item is bound to the character upon equipping. (Default: false)
# DropAnnounce If the item has a special announcement to self on drop. (Default: false)
# NoConsume If the item is consumed on use. (Default: false)
# DropEffect If the item has a special effect when on the ground. (Default: None)
# Delay: Item use delay. (Default: null)
# Duration Duration of delay in seconds.
# Status Status Change used to track delay. (Default: None)
# Stack: Item stack amount. (Default: null)
# Amount Maximum amount that can be stacked.
# Inventory If the stack is applied to player's inventory. (Default: true)
# Cart If the stack is applied to the player's cart. (Default: false)
# Storage If the stack is applied to the player's storage. (Default: false)
# GuildStorage If the stack is applied to the player's guild storage. (Default: false)
# NoUse: Conditions when the item is unusable. (Default: null)
# Override Group level to override these conditions.
# Sitting If the item can not be used while sitting. (Default: false)
# Trade: Trade restrictions. (Default: null)
# Override Group level to override these conditions.
# NoDrop If the item can not be dropped. (Default: false)
# NoTrade If the item can not be traded. (Default: false)
# TradePartner If the item can not be traded to the player's partner. (Default: false)
# NoSell If the item can not be sold. (Default: false)
# NoCart If the item can not be put in a cart. (Default: false)
# NoStorage If the item can not be put in a storage. (Default: false)
# NoGuildStorage If the item can not be put in a guild storage. (Default: false)
# NoMail If the item can not be put in a mail. (Default: false)
# NoAuction If the item can not be put in an auction. (Default: false)
# Script Script to execute when the item is used/equipped. (Default: null)
# EquipScript Script to execute when the item is equipped. (Default: null)
# UnEquipScript Script to execute when the item is unequipped or when a rental item expires. (Default: null)
###########################################################################
Header:
Type: ITEM_DB
Version: 1
Footer:
Imports:
- Path: db/pre-re/item_db.yml
Mode: Prerenewal
- Path: db/re/item_db.yml
Mode: Renewal
- Path: db/import/item_db.yml

View File

@ -1,138 +0,0 @@
// Item Usage Restriction Configuration File
// Defines if an item cannot be used under special circumstances.
//
// Structure of Database:
// ItemID,Flag,Group ID Override
//
// Flag:
// 1 = Cannot use item while sitting
// ... [more to come]
//
// Group ID Override:
// Group ID necessary to override this setting.
606,1,100 // Aloebera
619,1,100 // Unripe_Apple
620,1,100 // Orange_Juice
621,1,100 // Bitter_Herb
622,1,100 // Rainbow_Carrot
623,1,100 // Earthworm_The_Dude
624,1,100 // Rotten_Fish
625,1,100 // Lusty_Iron
626,1,100 // Monster_Juice
627,1,100 // Sweet_Milk
628,1,100 // Well_Dried_Bone
629,1,100 // Singing_Flower
630,1,100 // Dew_Laden_Moss
631,1,100 // Deadly_Noxious_Herb
632,1,100 // Fatty_Chubby_Earthworm
633,1,100 // Baked_Yam
634,1,100 // Tropical_Banana
635,1,100 // Horror_Of_Tribe
636,1,100 // No_Recipient
637,1,100 // Old_Broom
638,1,100 // Silver_Knife_Of_Chaste
639,1,100 // Armlet_Of_Obedience
640,1,100 // Shining_Stone
641,1,100 // Contracts_In_Shadow
642,1,100 // Book_Of_Devil
659,1,100 // Heart_Of_Her
660,1,100 // Prohibition_Red_Candle
661,1,100 // Sway_Apron
686,1,100 // Earth_Scroll_1_3
687,1,100 // Earth_Scroll_1_5
688,1,100 // Cold_Scroll_1_3
689,1,100 // Cold_Scroll_1_5
690,1,100 // Fire_Scroll_1_3
691,1,100 // Fire_Scroll_1_5
692,1,100 // Wind_Scroll_1_3
693,1,100 // Wind_Scroll_1_5
694,1,100 // Ghost_Scroll_1_3
695,1,100 // Ghost_Scroll_1_5
696,1,100 // Fire_Scroll_2_1
697,1,100 // Fire_Scroll_2_5
698,1,100 // Fire_Scroll_3_1
699,1,100 // Fire_Scroll_3_5
700,1,100 // Cold_Scroll_2_1
11702,1,100 // Moon_Cookie
12000,1,100 // Cold_Scroll_2_5
12001,1,100 // Holy_Scroll_1_3
12002,1,100 // Holy_Scroll_1_5
12027,1,100 // Giggling_Box
12028,1,100 // Box_Of_Thunder
12029,1,100 // Gloomy_Box
12030,1,100 // Box_Of_Grudge
12031,1,100 // Sleepy_Box
12032,1,100 // Box_Of_Storm
12033,1,100 // Box_Of_Sunlight
12034,1,100 // Painting_Box
12215,1,100 // Blessing_10_Scroll
12216,1,100 // Inc_Agi_10_Scroll
12217,1,100 // Aspersio_5_Scroll
12218,1,100 // Assumptio_5_Scroll
12219,1,100 // Wind_Walk_10_Scroll
12220,1,100 // Adrenaline_Scroll
12225,1,100 // Sweet_Candy_Striper
12235,1,100 // Strawberry_Choco
12236,1,100 // Choco_Tart
12237,1,100 // Choco_Lump
12290,1,100 // Mysterious_Can
12291,1,100 // Mysterious_PET_Bottle
12310,1,100 // Spray_Of_Flowers
12311,1,100 // Large_Spray_Of_Flowers
12313,1,100 // Protection_Of_Angel
12323,1,100 // N_Fly_Wing
12324,1,100 // N_Butterfly_Wing
12325,1,100 // N_Magnifier
12340,1,100 // Mysterious_Rice_Powder
12347,1,100 // Acorn_Jelly
12350,1,100 // Angeling_Potion
12358,1,100 // Fan_Of_Wind
12359,1,100 // Very_Soft_Plant
12360,1,100 // Very_Red_Juice
12361,1,100 // Delicious_Shaved_Ice
12362,1,100 // Kuloren
12363,1,100 // Fit_Pipe
12364,1,100 // Staff_Of_Leader
12365,1,100 // Charming_Lotus
12366,1,100 // Gril_Doll
12367,1,100 // Luxury_Whisky_Bottle
12368,1,100 // Splendid_Mirror
12369,1,100 // Oilpalm_Coconut
12370,1,100 // Gril's_Naivety
12371,1,100 // Magical_Lithography
12372,1,100 // Hell_Contract
12373,1,100 // Boy's_Naivety
12374,1,100 // Flaming_Ice
12376,1,100 // Mysterious_Can2
12377,1,100 // Mysterious_PET_Bottle2
12388,1,100 // Runstone_Crush
12389,1,100 // Runstone_Storm
12390,1,100 // Runstone_Millennium
12396,1,100 // Fools_Day_Box
12397,1,100 // Fools_Day_Box2
12415,1,100 // Siege_Teleport_Scroll2
12473,1,100 // RWC_Parti_Box
12474,1,100 // RWC_Final_Comp_Box
12706,1,100 // Lucky_Cookie01
12707,1,100 // Lucky_Cookie02
12708,1,100 // Lucky_Cookie03
12725,1,100 // Runstone_Nosiege
12726,1,100 // Runstone_Rhydo
12727,1,100 // Runstone_Verkana
12728,1,100 // Runstone_Isia
12729,1,100 // Runstone_Asir
12730,1,100 // Runstone_Urj
12731,1,100 // Runstone_Turisus
12732,1,100 // Runstone_Pertz
12733,1,100 // Runstone_Hagalas
14521,1,100 // Repair_Scroll
14529,1,100 // Greed_Scroll
14532,1,100 // Battle_Manual25
14587,1,100 // Repair_Scroll_
14591,1,100 // Siege_Teleport_Scroll
14592,1,100 // Job_Manual50
14593,1,100 // Magic_Power_Scroll
14594,1,100 // Quagmire_Scroll
14599,1,100 // Greed_Scroll_C
14606,1,100 // Job_Manual25

View File

@ -288,7 +288,7 @@
// Oboro
4212,5,0,4,0,2,3,0,1,6,0,5,1,2,0,4,6,3,0,1,5,2,0,6,3,4,0,5,0,2,0,1,4,0,5,4,0,3,5,1,0,2,4,1,0,5,6,2,1,0,5
// Rebellion
4215,0,5,0,4,0,3,5,4,2,6,0,0,3,4,0,2,5,4,3,6,0,0,3,5,1,4,2,0,0,6,3,0,5,4,1,0,0,5,0,2,6,0,5,3,4,0,0,0,0,1
4215,0,5,0,4,0,3,5,4,2,6,0,0,3,4,0,2,5,4,3,6,0,0,3,5,1,4,2,0,0,6,3,0,5,4,1,0,0,5,0,2,6,0,5,3,4,0,0,0,0,1,2,6,0,4,5,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0
// Summoner
4218,5,0,3,0,5,3,0,2,4,0,2,4,5,0,2,4,5,0,2,4,5,0,6,3,5,0,2,0,6,0,4,5,0,6,0,4,6,0,2,0,5,4,3,0,5,6,3,2,0,5
// Baby Summoner
@ -308,7 +308,7 @@
// Baby Gunslinger
4228,5,6,0,6,0,5,0,0,0,0,5,6,0,0,0,0,5,0,0,0,6,0,0,0,5,0,0,0,0,0,6,1,0,0,5,0,0,0,0,0,1,0,0,0,5,0,0,0,0,1,6,4,0,0,5,0,0,0,2,3,4,5,6,1,0,0,0,0,0,0
// Baby Rebellion
4229,0,5,0,4,0,3,5,4,2,6,0,0,3,4,0,2,5,4,3,6,0,0,3,5,1,4,2,0,0,6,3,0,5,4,1,0,0,5,0,2,6,0,5,3,4,0,0,0,0,1
4229,0,5,0,4,0,3,5,4,2,6,0,0,3,4,0,2,5,4,3,6,0,0,3,5,1,4,2,0,0,6,3,0,5,4,1,0,0,5,0,2,6,0,5,3,4,0,0,0,0,1,2,6,0,4,5,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0
// Baby Star Gladiator (Union)
4238,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2
//================================

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

93
db/pre-re/item_db.yml Normal file
View File

@ -0,0 +1,93 @@
# This file is a part of rAthena.
# Copyright(C) 2019 rAthena Development Team
# https://rathena.org - https://github.com/rathena
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###########################################################################
# Item Database
###########################################################################
#
# Item Settings
#
###########################################################################
# - Id Item ID.
# AegisName Server name to reference the item in scripts and lookups, should use no spaces.
# Name Name in English for displaying as output.
# Type Item type. (Default: Etc)
# SubType Weapon or Ammo type. (Default: 0)
# Buy Buying price. When not specified, becomes double the sell price. (Default: 0)
# Sell Selling price. When not specified, becomes half the buy price. (Default: 0)
# Weight Item weight. Each 10 is 1 weight. (Default: 0)
# Attack Weapon's attack. (Default: 0)
# MagicAttack Weapon's magic attack. (Default: 0)
# Defense Armor's defense. (Default: 0)
# Range Weapon's attack range. (Default: 0)
# Slots Available slots in item. (Default: 0)
# Jobs Jobs that can equip the item. (Map default is 'All: true')
# Classes Upper class types that can equip the item. (Map default is 'All: true')
# Gender Gender that can equip the item. (Default: Both)
# Locations Equipment's placement. (Default: None)
# WeaponLevel Weapon level. (Default: 0)
# EquipLevelMin Minimum required level to equip. (Default: 0)
# EquipLevelMax Maximum level that can equip. (Default: 0)
# Refineable If the item can be refined. (Default: false)
# View View sprite of an item. (Default: 0)
# AliasName Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
# Flags: Item flags. (Default: null)
# BuyingStore If the item is available for Buyingstores. (Default: false)
# DeadBranch If the item is a Dead Branch. (Default: false)
# Container If the item is part of a container. (Default: false)
# UniqueId If the item is a unique stack. (Default: false)
# BindOnEquip If the item is bound to the character upon equipping. (Default: false)
# DropAnnounce If the item has a special announcement to self on drop. (Default: false)
# NoConsume If the item is consumed on use. (Default: false)
# DropEffect If the item has a special effect when on the ground. (Default: None)
# Delay: Item use delay. (Default: null)
# Duration Duration of delay in seconds.
# Status Status Change used to track delay. (Default: None)
# Stack: Item stack amount. (Default: null)
# Amount Maximum amount that can be stacked.
# Inventory If the stack is applied to player's inventory. (Default: true)
# Cart If the stack is applied to the player's cart. (Default: false)
# Storage If the stack is applied to the player's storage. (Default: false)
# GuildStorage If the stack is applied to the player's guild storage. (Default: false)
# NoUse: Conditions when the item is unusable. (Default: null)
# Override Group level to override these conditions.
# Sitting If the item can not be used while sitting. (Default: false)
# Trade: Trade restrictions. (Default: null)
# Override Group level to override these conditions.
# NoDrop If the item can not be dropped. (Default: false)
# NoTrade If the item can not be traded. (Default: false)
# TradePartner If the item can not be traded to the player's partner. (Default: false)
# NoSell If the item can not be sold. (Default: false)
# NoCart If the item can not be put in a cart. (Default: false)
# NoStorage If the item can not be put in a storage. (Default: false)
# NoGuildStorage If the item can not be put in a guild storage. (Default: false)
# NoMail If the item can not be put in a mail. (Default: false)
# NoAuction If the item can not be put in an auction. (Default: false)
# Script Script to execute when the item is used/equipped. (Default: null)
# EquipScript Script to execute when the item is equipped. (Default: null)
# UnEquipScript Script to execute when the item is unequipped or when a rental item expires. (Default: null)
###########################################################################
Header:
Type: ITEM_DB
Version: 1
Footer:
Imports:
- Path: db/pre-re/item_db_usable.yml
- Path: db/pre-re/item_db_equip.yml
- Path: db/pre-re/item_db_etc.yml

38181
db/pre-re/item_db_equip.yml Normal file

File diff suppressed because it is too large Load Diff

21020
db/pre-re/item_db_etc.yml Normal file

File diff suppressed because it is too large Load Diff

22303
db/pre-re/item_db_usable.yml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,58 +0,0 @@
// Item Delay Database
//
// Structure of Database:
// <ItemID>,<Delay>{,<SC_GroupID>}
//
// <ItemID>
// ID of item that will has reuse delay.
// <Delay>
// Re-use delay in milliseconds.
// <SC_GroupID>
// SC (status change) group for the item.
// Example for SC_REUSE_LIMIT_MTF
// 12658,10000,SC_REUSE_LIMIT_MTF // Transformation Scroll(Deviruchi)
// 12659,10000,SC_REUSE_LIMIT_MTF // Transformation Scroll(Raydric)
// -> 12658 has reuse delay for 10 seconds, and also,
// 12659 cannot be used when this delay is active.
// Since this is optional, default is -1 will ignores the
// delay group and the delay will be stored in character's
// data that has limit set in src/map/itemdb.hpp as MAX_ITEMDELAYS.
// SC_REUSE_LIMIT_A
14538,300000,SC_REUSE_LIMIT_A //Glass_Of_Illusion
// SC_REUSE_LIMIT_B
14586,180000,SC_REUSE_LIMIT_B //Spark_Candy
// SC_REUSE_LIMIT_C
12208,60000,SC_REUSE_LIMIT_C //Battle_Manual
// SC_REUSE_LIMIT_D
12210,60000,SC_REUSE_LIMIT_D //Bubble_Gum
// SC_REUSE_LIMIT_E
11522,1000,SC_REUSE_LIMIT_E //Red_Raffle_Sap
11523,2000,SC_REUSE_LIMIT_E //Yellow_Raffle_Sap
11524,3000,SC_REUSE_LIMIT_E //White_Raffle_Sap
// SC_REUSE_LIMIT_F
607,5000,SC_REUSE_LIMIT_F //Yggdrasil_Berry
// SC_REUSE_LIMIT_G
608,3000,SC_REUSE_LIMIT_G //Yggdrasil_Seed
// SC_REUSE_LIMIT_H
11525,5000,SC_REUSE_LIMIT_H //Mora_Hip_Tea
// SC_REUSE_LIMIT_RECALL
12968,300000,SC_REUSE_LIMIT_RECALL //Emergency_Scroll1
12969,300000,SC_REUSE_LIMIT_RECALL //Emergency_Scroll2
12970,300000,SC_REUSE_LIMIT_RECALL //Emergency_Scroll3
// Misc
//12202,60000 //Str_Dish10_
//12203,60000 //Agi_Dish10_
//12204,60000 //Int_Dish10_
//12205,60000 //Dex_Dish10_
//12206,60000 //Luk_Dish10_
//12207,60000 //Vit_Dish10_

View File

@ -1,63 +0,0 @@
// Flagged Items
// <ItemID>,<Flag>
//
// <Flag>:
// 1 - As Dead Branch item (will be logged at `branchlog` table and cannot be used at 'nobranch' mapflag)
// 2 - As item group container, check player's inventory and weight before consumed
// 4 - GUID Item: When this item is obtained, will generates GUID that cannot be stacked even same or stackable item
// 8 - Item will be bound item when equipped
// 16 - Special Broadcast: When item dropped by monster and player loot it, will be broadcasted!
// 32 - Item will not be removed on consumption. Also supports 'itemskill'
// 64 - Item will be displayed with a client side defined drop
// 128 - Item will be displayed with a white pillar drop effect
// 256 - Item will be displayed with a blue pillar drop effect
// 512 - Item will be displayed with a yellow pillar drop effect
// 1024 - Item will be displayed with a purple pillar drop effect
// 2048 - Item will be displayed with a orange pillar drop effect
// NOTE: For removing flag by import file, use "-" to remove the flag. Example, 604,-1 will removes flag 1 from Branch_Of_Dead_Tree
// Logged as Dead Branch item
604,1 //Branch_Of_Dead_Tree
12103,1 //Bloody_Dead_Branch
12109,1 //Poring_Box
12024,1 //Red_Pouch_Of_Surprise
// Item group container
603,2 //Old_Blue_Box
616,2 //Old_Card_Album
617,2 //Old_Violet_Box
618,2 //Worn_Out_Scroll
644,2 //Gift_Box
664,2 //Gift_Box_1
665,2 //Gift_Box_2
666,2 //Gift_Box_3
667,2 //Gift_Box_4
12023,2 //Giftbox_China
12025,2 //Egg_Boy
12026,2 //Egg_Girl
12038,2 //Lotto_Box04
12104,2 //Random_Quiver
12105,2 //Set_Of_Taiming_Item
12106,2 //Accessory_Box
12107,2 //Wrapped_Mask
12108,2 //Bundle_Of_Magic_Scroll
12110,2 //First_Aid_Kit
12111,2 //Food_Package
12130,2 //Cookie_Bag
12186,2 //Red_Box
12187,2 //Green_Box
12189,2 //Red_Box_
12194,2 //Hometown_Gift
12240,2 //Old_Yellow_Box
12244,2 //Old_Gift_Box
12246,2 //Magic_Card_Album
12248,2 //Masquerade_Ball_Box
12281,2 //Tresure_Box_WoE
12286,2 //Masquerade_Ball_Box2
12334,2 //Cherish_Box
12339,2 //Cherish_Box_Ori
12355,2 //Xmas_Gift
12356,2 //Louise_Costume_Box
12702,2 //Old_Bleu_Box
12714,2 //Easter_Scroll
14596,2 //Pierre_Treasurebox

View File

@ -1,29 +0,0 @@
// Item Stacking Restriction File
// Prevents an item to be stacked more than x times in given
// inventory types. Generally used by 3rd class related skill items.
//
// Structure of Database:
// ItemID,MaxStackAmount,Type
//
// MaxStackAmount:
// Stack limit for the item. Use 0 to disable a restriction.
//
// Type mask values:
// &1: Character inventory restriction
// &2: Character cart restriction
// &4: Account storage restriction
// &8: Guild storage restriction
//
// Example:
// 512,4,12 // Will not allow more than 4 Apples in storages.
// Rune Knight
12725,60,1 // Nauthiz Rune
12726,60,1 // Raido Rune
12727,60,1 // Berkana Rune
12728,60,1 // Isa Rune
12730,60,1 // Uruz Rune
12733,60,1 // Hagalaz Rune
// Arch Bishop
12333,3,1 // Ancilla

File diff suppressed because it is too large Load Diff

View File

@ -121,3 +121,12 @@ Body:
- Id: GD_GUILD_STORAGE
MaxLevel: 5
Required:
- Id: GD_EMERGENCYCALL
Level: 1
- Id: GD_EXTENSION
Level: 10
- Id: GD_SOULCOLD
Level: 1
- Id: GD_HAWKEYES
Level: 1

File diff suppressed because it is too large Load Diff

View File

@ -85,9 +85,9 @@
1659:5920,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus2 bSkillUseSP,"AL_HEAL",6*.@r; bonus2 bSkillUseSP,"AB_CHEAL",10*.@r; bonus2 bSkillUseSP,"AB_HIGHNESSHEAL",14*.@r; }
1660:2471:2569:15029,{ bonus bHealPower,45; bonus2 bSkillUseSP,"AL_HEAL",-50; bonus3 bAutoSpellWhenHit,"AB_SILENTIUM",1,100; bonus2 bSkillCooldown,"AB_CLEARANCE",-3000; bonus2 bSkillCooldown,"AB_LAUDAAGNUS",-3000; bonus2 bSkillCooldown,"AB_LAUDARAMUS",-3000; }
1668:15089,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bDelayrate,-10-min(.@r,10); }
1670:2968,{ bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)*5; }
1670:2968:2969,{ bonus bMatkRate,-(getequiprefinerycnt(EQI_HAND_R)*5); }
1670:2969,{ bonus bMatkRate,getequiprefinerycnt(EQI_HAND_R)*5; }
1670:2968,{ bonus bMatk,getequiprefinerycnt(EQI_HAND_R)*5; }
1670:2968:2969,{ bonus bMatk,-(getequiprefinerycnt(EQI_HAND_R)*5); }
1670:2969,{ bonus bMatk,getequiprefinerycnt(EQI_HAND_R)*5; }
1718:1774,{ bonus bLongAtkRate,50; }
1723:2718,{ bonus bDex,1; bonus bMaxSP,50; bonus bSPrecovRate,10; }
1724:5467,{ bonus bAspd,1; bonus bFlee2,3; }
@ -125,6 +125,8 @@
2013:2469:2861:15027,{ bonus2 bMagicAtkEle,Ele_Fire,60; bonus2 bMagicAtkEle,Ele_Water,-60; bonus2 bSubEle,Ele_Water,-50; }
2014:2470:2862:15028,{ bonus2 bMagicAtkEle,Ele_Earth,60; bonus2 bMagicAtkEle,Ele_Fire,-60; bonus2 bSubEle,Ele_Fire,-50; }
2039:20847,{ .@weapon = getequiprefinerycnt(EQI_HAND_R); .@eq = getequiprefinerycnt(EQI_GARMENT); bonus2 bSkillAtk,"WL_CRIMSONROCK",10; if (.@eq >= 7 && .@weapon >= 7) { bonus2 bSkillAtk,"WL_HELLINFERNO",40; } if ((.@eq + .@weapon) >= 18) { bonus2 bMagicAtkEle,Ele_Wind,10; bonus2 bMagicAtkEle,Ele_Dark,10; if ((.@eq + .@weapon) >= 22) { bonus2 bMagicAtkEle,Ele_Fire,10; } } }
2046:19310:15250:20906:22173:28566,{ bonus bMatk,3*(min(BaseLevel,150)/10); bonus bVariableCastrate,-15; bonus2 bMagicAtkEle,Ele_Fire,5; }
2048:22171,{ autobonus "{ bonus bInt,20; bonus bMatkRate,15; }",30,7000,BF_MAGIC; }
2051:20847,{ bonus bMatk,50; .@eq = getequiprefinerycnt(EQI_GARMENT); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { bonus2 bMagicAtkEle,Ele_Water,10; bonus2 bMagicAtkEle,Ele_Wind,10; bonus2 bMagicAtkEle,Ele_Earth,10; bonus2 bMagicAtkEle,Ele_Fire,10; } if ((.@eq + .@weapon) >= 18) { bonus2 bMagicAddEle,Ele_Water,15; bonus2 bMagicAddEle,Ele_Wind,15; bonus2 bMagicAddEle,Ele_Earth,15; bonus2 bMagicAddEle,Ele_Fire,15; if ((.@eq + .@weapon) >= 22) { bonus bDelayrate,-15; } } }
2109:2239:2717,{ bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }
2109:2971:5135,{ bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }
@ -136,20 +138,23 @@
2121:2971:5135,{ bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }
2121:2971:18874,{ bonus bHPrecovRate,15; bonus bSPrecovRate,15; bonus bMatkRate,7; }
2123:2701,{ bonus bVariableCastrate,-10; }
2123:2881,{ bonus bMatkRate,getequiprefinerycnt(EQI_HAND_L)*2; }
2123:2881,{ bonus bMatk,getequiprefinerycnt(EQI_HAND_L)*2; }
2124:2702,{ bonus bAspdRate,10; bonus bShortWeaponDamageReturn,5; }
2124:22064,{ .@r = getequiprefinerycnt(EQI_HAND_L)/3; bonus bAspd,.@r*6; }
2124:22064,{ .@r = getequiprefinerycnt(EQI_HAND_L)/3; bonus bAspdRate,.@r*6; }
2125:5782,{ bonus bDef,2; bonus2 bSubEle,Ele_Neutral,5; bonus2 bSubEle,Ele_Fire,5; bonus2 bSubEle,Ele_Water,5; bonus2 bSubEle,Ele_Wind,5; bonus2 bSubEle,Ele_Earth,5; bonus2 bSubEle,Ele_Dark,5; bonus2 bSubEle,Ele_Holy,5; bonus2 bSubEle,Ele_Ghost,5; }
2135:2426,{ bonus2 bAddEff,Eff_Blind,500; autobonus "{ bonus bFlee,20; }",200,10000,BF_WEAPON,"{ specialeffect2 EF_INCAGILITY; }"; }
2137:2353:5124,{ bonus bDef,2-getequiprefinerycnt(EQI_HAND_L)-getequiprefinerycnt(EQI_HEAD_TOP); bonus bMdef,5+getequiprefinerycnt(EQI_HAND_L)+getequiprefinerycnt(EQI_HEAD_TOP); }
2153:28372,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bSkillAtk,"LG_SHIELDPRESS",.@r > 5 ? (.@r - 5) * 8 : 0; }
2157:2905,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus2 bSubRace,RC_Insect,10; if(.@r>=8){ bonus2 bMagicAddRace,RC_Insect,4; bonus2 bSubRace,RC_Insect,20; } }
2160:19021,{ bonus2 bSubSize,Size_Large,5+(getequiprefinerycnt(EQI_HAND_L)*2); }
2169:2491:2590:15051,{ bonus2 bAddDefMonster,2311,30; bonus2 bAddDefMonster,2312,30; bonus2 bAddDefMonster,2320,30; bonus2 bAddDefMonster,2321,30; bonus2 bAddDefMonster,2322,30; bonus2 bAddDefMonster,2317,30; bonus2 bAddDefMonster,2318,30; bonus2 bAddDefMonster,2327,30; bonus2 bAddDefMonster,2319,30; bonus2 bAddDefMonster,2330,30; bonus2 bAddDefMonster,2329,30; bonus2 bAddDefMonster,2333,30; bonus2 bAddDefMonster,2332,30; bonus2 bAddDefMonster,2309,30; bonus2 bAddDefMonster,2310,30; bonus2 bAddDefMonster,2315,30; bonus2 bAddDefMonster,2316,30; bonus2 bAddDefMonster,2314,30; bonus2 bAddDefMonster,2313,30; bonus bMaxHPrate,20; bonus bMaxSPrate,10; }
2171:15053,{ bonus bAgi,2; }
2171:15056,{ bonus bAgi,2; }
2172:15054,{ bonus2 bAddClass,Class_All,10; bonus bStr,2; }
2173:15055,{ bonus bFlee,10; bonus bFlee2,10; }
2177:18574,{ bonus2 bAddClass,Class_Boss,5; bonus2 bMagicAddClass,Class_Boss,5; if (getequiprefinerycnt(EQI_HEAD_TOP) > 7) { bonus2 bAddClass,Class_Boss,5; bonus2 bMagicAddClass,Class_Boss,5; } }
2175:20716,{ .@r = getequiprefinerycnt(EQI_GARMENT); .@r2 = getequiprefinerycnt(EQI_HAND_L); bonus2 bSubRace,RC_Angel,.@r; bonus2 bAddEle,Ele_Ghost,.@r2; }
2175:22066,{ .@r = getequiprefinerycnt(EQI_HAND_L); bonus2 bSubEle,Ele_Ghost,5+2*.@r; }
2177:18574,{ bonus2 bAddClass,Class_Boss,5; bonus2 bMagicAddClass,Class_Boss,5; if (getequiprefinerycnt(EQI_HEAD_TOP) >= 7) { bonus2 bAddClass,Class_Boss,5; bonus2 bMagicAddClass,Class_Boss,5; } }
2183:15068,{ bonus2 bSubEle,Ele_Neutral,5; }
2183:15068:18776:20710:22015,{ bonus bMaxHP,900; bonus bMaxSP,100; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",1,30; }
2183:22015,{ bonus bAllStats,2; }
@ -322,7 +327,7 @@
//2679:2792,{ bonus4 bAutoSpell,"MO_EXTREMITYFIST",1,3,1; bonus3 bAutoSpell,"PR_LEXAETERNA",1,20; bonus3 bAutoSpell,"AS_SONICBLOW",5,50; bonus3 bAutoSpell,"MO_INVESTIGATE",5,20; bonus3 bAutoSpell,"ASC_METEORASSAULT",2,50; }
2701:2881,{ bonus bMatkRate,20; }
2702:2874,{ bonus bAspd,1; }
2702:22064,{ if (readparam(bAgi) > 120) bonus bAspd,2; /* Confirm: Bonus value */ }
2702:22064,{ if (readparam(bAgi) > 120) bonus bAspd,1; }
27013:27012,{ bonus bNoMadoFuel; }
27015:27016,{ bonus bCritAtkRate,10; }
27018:27019,{ autobonus "{ bonus bAspd,5; }",30,5000; }
@ -337,6 +342,7 @@
2722:2774,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
2723:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
2723:2773,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
2723:2774,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
2724:2772,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
2724:2773,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
2724:2774,{ bonus2 bAddClass,Class_All,5; bonus bMatkRate,3; bonus bHealPower,5; }
@ -360,7 +366,7 @@
27363:4168,{ bonus2 bMagicAtkEle,Ele_Fire,15; bonus2 bSkillAtk,"WZ_METEOR",15; }
2747:13061,{ bonus bHit,5; bonus bMatk,5; bonus2 bSkillUseSP,"SC_ENERVATION",20; bonus2 bSkillUseSP,"SC_GROOMY",20; }
2751:2888,{ bonus bAspdRate,3; bonus bVariableCastrate,-3; }
2777:2778:5479,{ bonus bMaxHP,10*getequiprefinerycnt(EQI_HEAD_TOP); bonus bMaxSP,2*getequiprefinerycnt(EQI_ACC_L); bonus bNoCastCancel; bonus bCastrate,15; }
2777:2778:5479,{ bonus bMaxHP,10*BaseLevel; bonus bMaxSP,2*BaseLevel; bonus bNoCastCancel; bonus bVariableCastrate,15; }
2777:2825:5479,{ bonus bMaxHP,BaseLevel*10; bonus bMaxSP,BaseLevel*2; bonus bHealPower,10; }
2779:2780:5482,{ bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; }
2779:2780:5577,{ bonus bMatkRate,10; bonus bInt,5; bonus2 bSubRace,RC_Angel,10; }
@ -451,10 +457,10 @@
2964:20943,{ bonus bUseSPrate,-5; }
2966:2967:13092,{ bonus bBaseAtk,-(getequiprefinerycnt(EQI_HAND_R)*10); }
2966:2967:16026,{ bonus bBaseAtk,-(getequiprefinerycnt(EQI_HAND_R)*5); }
2966:2967:18821,{ bonus2 bAddClass,Class_All, -(getequiprefinerycnt(EQI_HEAD_TOP)/2); }
2966:2967:18821,{ bonus2 bAddClass,Class_All,-(getequiprefinerycnt(EQI_HEAD_TOP)/2); }
2966:2968,{ bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; }
2966:2969,{ bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; }
2966:13092,{ bonus bBaseAtk,10*getequiprefinerycnt( (getequipid(EQI_HAND_R) == 13092) ? EQI_HAND_R : EQI_HAND_L ); }
2966:13092,{ bonus bBaseAtk,getequiprefinerycnt(EQI_HAND_R)*10; }
2966:16026,{ bonus bBaseAtk,getequiprefinerycnt(EQI_HAND_R)*5; }
2966:18821,{ bonus2 bAddClass,Class_All,getequiprefinerycnt(EQI_HEAD_TOP)/2; }
2967:2968,{ bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; }
@ -462,11 +468,11 @@
2967:13092,{ bonus bBaseAtk,getequiprefinerycnt(EQI_HAND_R)*10; }
2967:16026,{ bonus bBaseAtk,getequiprefinerycnt(EQI_HAND_R)*5; }
2967:18821,{ bonus2 bAddClass,Class_All,getequiprefinerycnt(EQI_HEAD_TOP)/2; }
2968:2969:13092,{ bonus bBaseAtk,-(getequiprefinerycnt(EQI_HAND_R)*10); }
2968:2969:18821,{ bonus bMagicAtkDef, getequiprefinerycnt(EQI_HEAD_TOP)/2; }
2968:13092,{ bonus bMatk,10*getequiprefinerycnt( (getequipid(EQI_HAND_R) == 13092) ? EQI_HAND_R : EQI_HAND_L ); }
2968:2969:13092,{ bonus bMatk,-(getequiprefinerycnt(EQI_HAND_R)*10); }
2968:2969:18821,{ bonus bMatkRate,-(getequiprefinerycnt(EQI_HEAD_TOP)/2); }
2968:13092,{ bonus bMatk,(getequiprefinerycnt(EQI_HAND_R)*10); }
2968:18821,{ bonus bMatkRate,getequiprefinerycnt(EQI_HEAD_TOP)/2; }
2969:13092,{ bonus bBaseAtk,getequiprefinerycnt(EQI_HAND_R)*10; }
2969:13092,{ bonus bMatk,getequiprefinerycnt(EQI_HAND_R)*10; }
2969:18821,{ bonus bMatkRate,getequiprefinerycnt(EQI_HEAD_TOP)/2; }
2977:2978,{ bonus5 bAutoSpell,"SO_PSYCHIC_WAVE",1,10,BF_WEAPON,1; bonus5 bAutoSpell,"HW_MAGICPOWER",1,10,BF_MAGIC,0; bonus5 bAutoSpell,"WZ_FROSTNOVA",10,10,BF_WEAPON|BF_MAGIC,0; bonus5 bAutoSpellWhenHit,"DC_SCREAM",1,10,BF_WEAPON|BF_MAGIC,0; }
2979:18852,{ bonus bMaxHPrate,15; bonus2 bSubEle,Ele_Fire,10; bonus bLongAtkRate,30; }
@ -615,6 +621,18 @@
4683:4695,{ autobonus "{ bonus bAtk,100; }",30,6000,BF_WEAPON,"{ active_transform 3246,6000; }"; }
4697:27012,{ bonus bNoMadoFuel; }
4699:27012,{ bonus bNoMadoFuel; }
4958:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bDelayrate,-1 - ( .@r >= 9 ) ? 1 : 0; } }
4959:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bLongAtkRate,2 + ( .@r >= 9 ) ? 1 : 0; } }
4960:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bUseSPrate,-2 - ( .@r >= 9 ) ? 1 : 0; } }
4961:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bMatk,10 + ( .@r >= 9 ) ? 10 : 0; } }
4962:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bAtk,2 + ( .@r >= 9 ) ? 5 : 0; } }
4963:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bAtk,4 + ( .@r >= 9 ) ? 2 : 0; bonus bHit,3 + ( .@r > 9 ) ? 1 : 0; } }
4964:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus2 bMagicAddRace,RC_All,1 + ( .@r >= 9 ) ? 1 : 0; } }
4965:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bVariableCastrate,-1 - ( .@r >= 9 ) ? 1 : 0; } }
4966:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus2 bAddRace,RC_All,1 + ( .@r >= 9 ) ? 1 : 0; } }
4967:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bAspdRate,1 + ( .@r >= 9 ) ? 1 : 0; } }
4968:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal,.@skills$[.@i],2 + ( .@r >= 9 ) ? 2 : 0; } } }
4969:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal2,.@skills$[.@i],2 + ( .@r >= 9 ) ? 2 : 0; } /* TODO: Depending on some recovery items HP recovery amount + 1% or if refine >= 9 + 2% */ } }
470016:480012:490014:450018,{ .@r = getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_ARMOR); bonus bMaxHPrate,5; bonus bDelayrate,-5; bonus2 bSkillAtk,"RK_DRAGONBREATH",10; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",10; if (.@r>=27) { bonus bMaxHPrate,5; bonus bDelayrate,-5; bonus2 bSkillAtk,"RK_DRAGONBREATH",10; bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",10; } }
470016:480012:490014:450019,{ .@r = getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_ARMOR); bonus bAspd,1; bonus bCritAtkRate,5; bonus2 bSkillAtk,"RK_IGNITIONBREAK",10; if (.@r>=27) { bonus bAspd,1; bonus bCritAtkRate,5; bonus2 bSkillAtk,"RK_IGNITIONBREAK",10; } }
470016:480012:490014:450020,{ .@r = getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_ARMOR); bonus bAspd,1; bonus bLongAtkRate,5; bonus2 bSkillAtk,"LG_CANNONSPEAR",10; if (.@r>=27) { bonus bAspd,1; bonus bLongAtkRate,5; bonus2 bSkillAtk,"LG_CANNONSPEAR",10; } }
@ -723,18 +741,6 @@
470021:480019:490020:450118,{ .@r = getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_ARMOR); bonus bVariableCastrate,-5; bonus bMatkRate,2; bonus2 bSkillAtk,"SP_SWHOO",15; if (.@r>=27) { bonus bVariableCastrate,-5; bonus bMatkRate,3; bonus2 bSkillAtk,"SP_SWHOO",15; } }
470021:480019:490020:450119,{ .@r = getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_ARMOR); bonus bVariableCastrate,-5; bonus bMatkRate,2; bonus2 bSkillAtk,"SP_CURSEEXPLOSION",15; if (.@r>=27) { bonus bVariableCastrate,-5; bonus bMatkRate,3; bonus2 bSkillAtk,"SP_CURSEEXPLOSION",15; } }
470021:480019:490020:450126,{ .@r = getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_ARMOR); bonus bMaxHPrate,5; bonus bMatkRate,2; bonus5 bAutoSpell,"SO_PSYCHIC_WAVE",1,70,BF_SHORT,1; if (.@r>=27) { bonus bMaxHPrate,5; bonus bMatkRate,3; bonus2 bSkillAtk,"SO_PSYCHIC_WAVE",10; } }
4958:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bDelayrate,-1 - ( .@r > 9 ) ? 1 : 0; } }
4959:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bLongAtkRate,2 + ( .@r > 9 ) ? 1 : 0; } }
4960:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bUseSPrate,-2 - ( .@r > 9 ) ? 1 : 0; } }
4961:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bMatk,10 + ( .@r > 9 ) ? 10 : 0; } }
4962:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bAtk,2 + ( .@r > 9 ) ? 5 : 0; } }
4963:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bAtk,4 + ( .@r > 9 ) ? 2 : 0; bonus bHit,3 + ( .@r > 9 ) ? 1 : 0; } }
4964:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus2 bMagicAddRace,RC_All,1 + ( .@r > 9 ) ? 1 : 0; } }
4965:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bVariableCastrate,-1 - ( .@r > 9 ) ? 1 : 0; } }
4966:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus2 bAddRace,RC_All,1 + ( .@r > 9 ) ? 1 : 0; } }
4967:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ bonus bAspdRate,1 + ( .@r > 9 ) ? 1 : 0; } }
4968:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal,.@skills$[.@i],2 + ( .@r > 9 ) ? 2 : 0; } } }
4969:19050,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if( .@r >= 7 ){ setarray .@skills$, "AL_HEAL", "PR_SANCTUARY", "AM_POTIONPITCHER", "AB_HIGHNESSHEAL", "AB_CHEAL"; for( .@i = 0; .@i < getarraysize(.@skills$); .@i++ ){ bonus2 bSkillHeal2,.@skills$[.@i],2 + ( .@r > 9 ) ? 2 : 0; } /* TODO: Depending on some recovery items HP recovery amount + 1% or if refine >= 9 + 2% */ } }
5040:5442,{ bonus bAspdRate,3; bonus bVariableCastrate,3; }
5040:18672,{ bonus bSPrecovRate,3; }
5040:18673,{ bonus bHealPower,10; }
@ -742,7 +748,7 @@
5043:18656,{ bonus bFlee,10; bonus2 bAddEff,Eff_Stun,1000; }
5048:18538,{ bonus2 bSubRace,RC_Demon,9; }
5068:5653,{ bonus bStr,1; bonus2 bAddClass,Class_All,5; }
5070:18576,{ bonus2 bSkillAtk,"MO_TRIPLEATTACK",5; bonus2 bSkillAtk,"MO_COMBOFINISH",5; bonus2 bSkillAtk,"CH_TIGERFIST",3; bonus2 bSkillAtk,"CH_CHAINCRUSH",3; if( getequiprefinerycnt(EQI_HEAD_TOP) < 10 ) bonus bUseSPrate, getequiprefinerycnt(EQI_HEAD_TOP); }
5070:18576,{ bonus2 bSkillAtk,"MO_TRIPLEATTACK",5; bonus2 bSkillAtk,"MO_COMBOFINISH",5; bonus2 bSkillAtk,"CH_TIGERFIST",3; bonus2 bSkillAtk,"CH_CHAINCRUSH",3; .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bSkillUseSPrate,"CH_TIGERFIST",-10+min(10,.@r); bonus2 bSkillUseSPrate,"CH_CHAINCRUSH",-10+min(10,.@r); }
5073:5574,{ bonus bDex,2; bonus bDef,2; }
5074:5653,{ bonus bStr,1; bonus bAspdRate,2; }
5074:18827,{ autobonus "{ bonus2 bHPLossRate,30,1000; bonus bHit,-10; bonus bSplashRange,1; }",10+getequiprefinerycnt(EQI_HEAD_TOP),5000,BF_WEAPON,"{ transform 1765,5000; }"; }
@ -817,6 +823,10 @@
1298:4521,{ bonus bCritAtkRate,5; }
13027:15044,{ .@r = max(getequiprefinerycnt(EQI_ARMOR),1); bonus3 bAddMonsterDropItem,929,RC_DemiHuman,70*.@r; bonus3 bAddMonsterDropItem,970,RC_DemiHuman,50*.@r; bonus3 bAddMonsterDropItem,929,RC_Brute,70*.@r; bonus3 bAddMonsterDropItem,970,RC_Brute,50*.@r; }
13034:13035,{ bonus bMaxSP,20; bonus bMaxHPRate,5; bonus bHit,10; bonus2 bAddSize,Size_Large,30; autobonus "{ bonus bAspdRate,100; }",1,7000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; }
13081:4153,{ bonus2 bAddEle,Ele_Water,8; }
13081:4153:4247:4273,{ bonus2 bAddEle,Ele_Water,16; }
13081:4247,{ bonus2 bAddEle,Ele_Water,8; }
13081:4273,{ bonus2 bAddEle,Ele_Water,8; }
13215:28224,{ bonus bLongAtkRate,30; }
13332:15178:20821,{ bonus2 bSkillCooldown,"KO_HUUMARANKA",-1000; bonus bLongAtkRate,15; }
13337:19210,{ bonus bVariableCastrate,-15; .@eq = getequiprefinerycnt(EQI_HEAD_TOP); .@weapon = getequiprefinerycnt(EQI_HAND_R); if (.@eq >= 7 && .@weapon >= 7) { .@val = 25; } if ((.@eq + .@weapon) >= 18) { .@val += 25; if ((.@eq + .@weapon) >= 22) { bonus2 bSkillCooldown,"KO_HUUMARANKA",-1000; } } if (.@val) { bonus2 bSkillAtk,"KO_HUUMARANKA",.@val; } }
@ -849,7 +859,7 @@
15138:19026:20756:22059,{ bonus bMaxHP,1000; bonus bMaxSP,100; bonus2 bExpAddRace,RC_Fish,20; bonus2 bMagicAddRace,RC_Fish,50; bonus2 bSubEle,Ele_Water,50; }
15145:18652,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if (.@r >= 9 ) { bonus2 bHPDrainRate,-60,-8; bonus2 bSPDrainRate,-20,-4; } else if (.@r >= 8 ) { bonus2 bHPDrainRate,-50,-5; bonus2 bSPDrainRate,-10,-2; } else if (.@r >= 7 ) { bonus2 bHPDrainRate,-30,-5; bonus2 bSPDrainRate,-10,-2; } else if (.@r >= 5 ) { bonus2 bHPDrainRate,-10,-3; bonus2 bSPDrainRate,-10,-1; } else { bonus2 bHPDrainRate,-10,-1; bonus2 bSPDrainRate,-10,-1; } }
15145:2554,{ bonus2 bSPDrainRate,-10,1; }
15145:5208,{ .@i = (getequiprefinerycnt(EQI_HEAD_TOP)>8)?2:1; bonus2 bHPDrainRate,-50,8*.@i; bonus2 bSPDrainRate,-10,4*.@i; }
15145:5208,{ bonus2 bHPDrainRate,-50,8; bonus2 bSPDrainRate,-10,4; }
15156:20790:22085,{ bonus bMaxHP,4000; bonus bNoCastCancel; bonus bFixedCastrate,-25-(getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES)); }
15156:20790:22085:28382:28418,{ bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus2 bSkillAtk,"SU_CN_METEOR",200; }
15156:20790:22085:28380:28421,{ bonus bMaxHPrate,30; bonus bMaxSPrate,9; bonus2 bSkillAtk,"SU_LUNATICCARROTBEAT",200; }
@ -1034,6 +1044,7 @@
19272:4365,{ bonus bVariableCastrate,-100; bonus2 bSkillCooldown,"WL_TELEKINESIS_INTENSE",-120000; }
19299:4463,{ .@type = getiteminfo(getequipid(EQI_COMPOUND_ON),11); if (.@type == W_BOOK || .@type == W_STAFF || .@type == W_2HSTAFF) { bonus2 bMagicAddRace,RC_Player_Human, getequiprefinerycnt(EQI_HAND_R)*2; } }
19299:5966,{ .@a = readparam(bDex); bonus bMatk,10; bonus bVariableCastrate,-2; bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player_Human,2; if (.@a>=108) { bonus bMatk,20; bonus bVariableCastrate,-3; bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player_Human,2; } if (.@a>=120) { bonus bMatk,30; bonus bVariableCastrate,-5; bonus2 bSubRace,RC_DemiHuman,4; bonus2 bSubRace,RC_Player_Human,4; } }
19310:15250:20906:22173:28566,{ if(BaseLevel>=125){ bonus bBaseAtk,10; bonus bMatk,10; } if(BaseLevel>=130){ bonus bMaxHPrate,1; bonus bMaxSPrate,1; } autobonus "{}",20,100,BF_WEAPON,"{ heal 500,50; }"; autobonus "{}",20,100,BF_MAGIC,"{ heal 250,100; }"; }
19326:4187,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_DEMON,5; if (.@r>=6) bonus2 bExpAddRace,RC_DEMON,5; if (.@r>=8) bonus2 bExpAddRace,RC_DEMON,5; }
19326:4190,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_Undead,5; if (.@r>=6) bonus2 bExpAddRace,RC_Undead,5; if (.@r>=8) bonus2 bExpAddRace,RC_Undead,5; }
19326:4224,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); bonus2 bExpAddRace,RC_Brute,5; if (.@r>=6) bonus2 bExpAddRace,RC_Brute,5; if (.@r>=8) bonus2 bExpAddRace,RC_Brute,5; }
@ -1054,6 +1065,9 @@
19397:29584,{ bonus2 bSkillAtk,"SP_SWHOO",40; bonus2 bSkillAtk,"SL_SMA",40; bonus2 bSkillAtk,"SP_SPA",40; bonus2 bSkillCooldown,"SP_SOULREAPER",-10000; }
19428:20948:32238:32239,{ bonus bInt,5; bonus bMaxSPrate,10; bonus bDef,100; bonus2 bMagicAtkEle,Ele_Water,10; bonus2 bMagicAtkEle,Ele_Earth,10; bonus2 bMagicAtkEle,Ele_Neutral,10; .@head = getequiprefinerycnt(EQI_HEAD_TOP); .@garment = getequiprefinerycnt(EQI_GARMENT); if (.@head >= 7 && .@garment >= 7) { .@matk = 40; } if ((.@head + .@garment) >= 18) { .@matk += 40; bonus2 bMagicAtkEle,Ele_Ghost,15; bonus2 bMagicAtkEle,Ele_Wind,15; bonus2 bMagicAtkEle,Ele_Holy,15; if ((.@head + .@garment) >= 22) { bonus bMatkRate,10; bonus2 bIgnoreMdefRaceRate,RC_Formless,50; bonus2 bIgnoreMdefRaceRate,RC_Demon,50; bonus2 bIgnoreMdefRaceRate,RC_Brute,50; bonus2 bIgnoreMdefRaceRate,RC_Player_Doram,50; } } bonus bMatk,.@matk; }
20135:20136,{ bonus bAllStats,12; }
2053:19451,{ bonus2 bSubRace,RC_Player_Human,3; bonus2 bAddClass,Class_All,15; bonus2 bMagicAddClass,Class_All,15; }
2053:27301,{ bonus2 bAddClass,Class_All,10; bonus bAspdRate,10; }
2060:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); bonus bMatk,30; autobonus "{ bonus2 bMagicAtkEle,Ele_Earth,10; bonus2 bMagicAtkEle,Ele_Wind,10; }",10,10000,BF_MAGIC; if (.@sum>=30) { bonus2 bMagicAddEle,Ele_Undead,20; bonus2 bMagicAddEle,Ele_Holy,20; } }
20701:2165,{ .@a = getequiprefinerycnt(EQI_GARMENT); .@b = getequiprefinerycnt(EQI_HAND_L); bonus2 bAddEle,Ele_Earth,.@b; bonus2 bSubRace,RC_Fish,.@a; }
20714:28320,{ .@val = min(12,getequiprefinerycnt(EQI_GARMENT)); bonus2 bAddRace,RC_DemiHuman,.@val; bonus2 bAddRace,RC_Player_Human,.@val; }
20717:22000,{ bonus bMaxHPRate,15; bonus bMaxSPRate,5; }
@ -1577,6 +1591,8 @@
29671:29668,{ bonus2 bSkillAtk,"SU_LUNATICCARROTBEAT",20; bonus2 bSkillAtk,"SU_SV_STEMSPEAR",20; }
29671:29669,{ bonus2 bSkillCooldown,"SU_SVG_SPIRIT",-1000; }
29671:29670,{ bonus2 bSkillCooldown,"SU_CN_METEOR",-1000; }
31024:31026,{ bonus bAspd,1; }
31025:31026,{ bonus bVariableCastrate,-10; }
32228:15388:15389,{ bonus bBaseAtk,25; bonus bHit,10; }
32229:15388:15389,{ bonus bMatk,25; bonus bVariableCastrate,-8; }
32230:15388:15389,{ bonus bCritAtkRate,7; bonus2 bAddClass,Class_All,5; }
@ -1591,6 +1607,19 @@
32222:15096,{ .@r = getequiprefinerycnt(EQI_ARMOR); bonus bAllStats,2*.@r; bonus3 bAddEff,Eff_Stun,.@r*50,ATF_SHORT; bonus3 bAddEff,Eff_Curse,.@r*50,ATF_SHORT; bonus3 bAddEff,Eff_Poison,.@r*50,ATF_SHORT; bonus3 bAddEff,Eff_Silence,.@r*50,ATF_SHORT; /* Unknow rates */ }
32238:32239,{ bonus bVariableCastrate,-10; bonus bMatkRate,10; }
1336:15388:15389,{ .@r = getequiprefinerycnt(EQI_HAND_R) + getequiprefinerycnt(EQI_ARMOR) + getequiprefinerycnt(EQI_GARMENT); bonus bBaseAtk,30; autobonus "{ bonus bLongAtkRate,10; }",10,10000,BF_WEAPON; if(.@r >= 30){ bonus2 bAddRace,RC_Undead,20; bonus2 bAddRace,RC_Angel,20; } }
1590:4037,{ bonus bAspdRate,5; }
1590:4117,{ bonus bAspdRate,5; }
1590:4037:4117,{ bonus bAspd,1; }
1598:4037,{ bonus bAspdRate,5; }
1598:4117,{ bonus bAspdRate,5; }
1598:4037:4117,{ bonus bAspd,1; }
//[TODO]Warrior's Sword:32234,{ bonus2 bAddRace,RC_Insect,20; bonus2 bAddRace,RC_Plant,20; bonus2 bMagicAddRace,RC_Insect,20; bonus2 bMagicAddRace,RC_Plant,20; bonus2 bAddEle,Ele_Wind,20; bonus2 bAddEle,Ele_Earth,20; bonus2 bMagicAddEle,Ele_Wind,15; bonus2 bMagicAddEle,Ele_Earth,20; }
//[TODO]Warrior's Gun:32234,{ bonus2 bAddRace,RC_Insect,20; bonus2 bAddRace,RC_Plant,20; bonus2 bMagicAddRace,RC_Insect,20; bonus2 bMagicAddRace,RC_Plant,20; bonus2 bAddEle,Ele_Wind,20; bonus2 bAddEle,Ele_Earth,20; bonus2 bMagicAddEle,Ele_Wind,15; bonus2 bMagicAddEle,Ele_Earth,20; }
//[TODO]Warrior's Mace:32234,{ bonus2 bAddRace,RC_Insect,20; bonus2 bAddRace,RC_Plant,20; bonus2 bMagicAddRace,RC_Insect,20; bonus2 bMagicAddRace,RC_Plant,20; bonus2 bAddEle,Ele_Wind,20; bonus2 bAddEle,Ele_Earth,20; bonus2 bMagicAddEle,Ele_Wind,15; bonus2 bMagicAddEle,Ele_Earth,20; }
//[TODO]Warrior's Staff:32234,{ bonus2 bAddRace,RC_Insect,20; bonus2 bAddRace,RC_Plant,20; bonus2 bMagicAddRace,RC_Insect,20; bonus2 bMagicAddRace,RC_Plant,20; bonus2 bAddEle,Ele_Wind,20; bonus2 bAddEle,Ele_Earth,20; bonus2 bMagicAddEle,Ele_Wind,15; bonus2 bMagicAddEle,Ele_Earth,20; }
//[TODO]Warrior's Bow:32234,{ bonus2 bAddRace,RC_Insect,20; bonus2 bAddRace,RC_Plant,20; bonus2 bMagicAddRace,RC_Insect,20; bonus2 bMagicAddRace,RC_Plant,20; bonus2 bAddEle,Ele_Wind,20; bonus2 bAddEle,Ele_Earth,20; bonus2 bMagicAddEle,Ele_Wind,15; bonus2 bMagicAddEle,Ele_Earth,20; }
1448:32234,{ bonus2 bAddRace,RC_Brute,20; bonus2 bAddRace,RC_Plant,20; bonus2 bMagicAddRace,RC_Brute,20; bonus2 bMagicAddRace,RC_Plant,20; bonus2 bAddEle,Ele_Wind,20; bonus2 bAddEle,Ele_Earth,20; bonus2 bMagicAddEle,Ele_Wind,15; bonus2 bMagicAddEle,Ele_Earth,20; }
29176:32234,{ bonus2 bAddRace,RC_Brute,15; bonus2 bAddRace,RC_Plant,15; bonus2 bMagicAddRace,RC_Brute,15; bonus2 bMagicAddRace,RC_Plant,15; bonus2 bAddEle,Ele_Wind,15; bonus2 bAddEle,Ele_Earth,15; bonus2 bMagicAddEle,Ele_Wind,15; bonus2 bMagicAddEle,Ele_Earth,15; }
//22171:18164,{ autobonus "{ bonus bDex,20; bonus bLongAtkRate,20; }",30,7000,BF_WEAPON; } /*Not had item in item_db yet*/
//22171:18170,{ autobonus "{ bonus bDex,20; bonus bLongAtkRate,15; }",30,7000,BF_WEAPON; } /*Not had item in item_db yet*/
//22171:2048,{ autobonus "{ bonus bInt,20; bonus bMatkRate,15; }",30,7000,BF_MAGIC; } /*Not had item in item_db yet*/
@ -1637,6 +1666,121 @@
22238:830002,{ bonus bDex,10; bonus bLongAtkRate,5; }
22238:820001,{ bonus bDex,10; bonus bLongAtkRate,5; }
28763:510022,{ .@r = getequiprefinerycnt(EQI_HAND_R) + getequiprefinerycnt(EQI_HAND_L); bonus bBaseAtk,15*(.@r/3); bonus2 bAddClass,Class_All,3*(.@r/5); if (.@r>=14){ bonus2 bSkillAtk,"KO_JYUMONJIKIRI",30; bonus2 bSkillCooldown,"KO_JYUMONJIKIRI",-2000; } if (.@r>=16){ skill "OB_ZANGETSU",getskilllv("KG_KAGEHUMI"); skill "KG_KAGEHUMI",getskilllv("OB_ZANGETSU"); } if (.@r>=18){ bonus2 bAddEle,Ele_All,15; } if (.@r>=20){ bonus2 bSkillAtk,"KO_JYUMONJIKIRI",25; } }
1870:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddRace,RC_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
15391:20946:22208,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT); bonus2 bAddClass,Class_All,5; bonus bMdef,8; bonus bDef,50; bonus bBaseAtk,15*(readparam(bStr)/15); autobonus2 "{ bonus2 bAddClass,Class_All,10; if (readparam(bStr)>=120) { bonus2 bAddClass,Class_All,15; } }",1+(readparam(bStr)>=120),10000,BF_MAGIC|BF_WEAPON; if (.@sum>=33) { bonus bAspdRate,20; bonus bDelayrate,-25; } }
2060:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bMagicAtkEle,Ele_Earth,10; bonus2 bMagicAtkEle,Ele_Wind,10; }",1,10000,BF_MAGIC; bonus bMatk,30; if (.@sum>=30) { bonus2 bMagicAddEle,Ele_Undead,20; bonus2 bMagicAddEle,Ele_Holy,20; } }
13347:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddRace,RC_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
18191:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
18198:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddRace,RC_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
21055:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bCritAtkRate,20; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
26165:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bMagicAtkEle,Ele_Holy,10; }",1,10000,BF_MAGIC; bonus bMatk,30; if (.@sum>=30) { bonus2 bMagicAddEle,Ele_Undead,20; bonus2 bMagicAddEle,Ele_Holy,20; } }
26166:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bMagicAtkEle,Ele_Fire,10; bonus2 bMagicAtkEle,Ele_Dark,10; }",1,10000,BF_MAGIC; bonus bMatk,30; if (.@sum>=30) { bonus2 bMagicAddEle,Ele_Undead,20; bonus2 bMagicAddEle,Ele_Holy,20; } }
26172:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bMatkRate,10; }",1,10000,BF_MAGIC; autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bMatk,30; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bMagicAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Undead,20; bonus2 bMagicAddEle,Ele_Holy,20; bonus2 bAddEle,Ele_Holy,20; } }
26216:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bMagicAtkEle,Ele_Neutral,10; }",1,10000,BF_MAGIC; bonus bMatk,30; if (.@sum>=30) { bonus2 bMagicAddEle,Ele_Undead,20; bonus2 bMagicAddEle,Ele_Holy,20; } }
27382:4604,{ bonus2 bMagicAtkEle,Ele_Neutral,30; bonus2 bMagicAtkEle,Ele_Fire,30; }
27383:4601,{ bonus2 bAddSize,Size_All,5; bonus bMatkRate,5; }
27383:4602,{ bonus2 bAddSize,Size_All,10; bonus bMatkRate,10; }
27384:27385,{ bonus2 bSubSize,Size_Medium,5; bonus2 bMagicSubSize,Size_Medium,5; bonus2 bSubSize,Size_Large,5; bonus2 bMagicSubSize,Size_Large,5; bonus2 bMagicAddSize,Size_Medium,5; bonus2 bMagicAddSize,Size_Large,5; }
27387:27386,{ bonus2 bAddRace,RC_Undead,5; bonus2 bAddRace,RC_Demon,5; }
27388:4038,{ bonus bMaxHPrate,15; }
28046:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
28141:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
28636:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bMagicAtkEle,Ele_Wind,10; bonus2 bMagicAtkEle,Ele_Water,10; }",1,10000,BF_MAGIC; bonus bMatk,30; if (.@sum>=30) { bonus2 bMagicAddEle,Ele_Undead,20; bonus2 bMagicAddEle,Ele_Holy,20; } }
28774:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bAddClass,Class_All,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=40) { bonus2 bAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
28774:28775,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_HAND_R); bonus bBaseAtk,7*(.@sum/2); if (.@sum>=18) { bonus2 bSkillAtk,"GC_COUNTERSLASH",20; bonus2 bSkillAtk,"GC_CROSSIMPACT",20; } if (.@sum>=22) { bonus2 bAddRace,RC_Undead,30; bonus2 bAddRace,RC_Angel,30; } }
28776:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bMagicAtkEle,Ele_Neutral,10; bonus2 bMagicAtkEle,Ele_Fire,10; }",1,10000,BF_MAGIC; bonus bMatk,30; if (.@sum>=30) { bonus2 bMagicAddEle,Ele_Undead,20; bonus2 bMagicAddEle,Ele_Holy,20; } }
32027:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
32111:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus2 bMagicAtkEle,Ele_Neutral,10; }",1,10000,BF_MAGIC; bonus bMatk,30; if (.@sum>=30) { bonus2 bMagicAddEle,Ele_Undead,20; bonus2 bMagicAddEle,Ele_Holy,20; } }
32304:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddRace,RC_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
32353:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bMatkRate,7; bonus2 bAddClass,Class_All,7; }",1,10000,BF_MAGIC; if (.@sum>=30) { bonus2 bMagicAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Undead,20; bonus2 bMagicAddEle,Ele_Holy,20; bonus2 bAddEle,Ele_Holy,20; } }
32401:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
32402:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Holy,20; bonus2 bAddEle,Ele_Earth,20; } }
32403:15388:15389,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT); autobonus "{ bonus bLongAtkRate,10; }",1,10000,BF_WEAPON; bonus bBaseAtk,30; if (.@sum>=30) { bonus2 bAddEle,Ele_Undead,20; bonus2 bAddEle,Ele_Holy,20; } }
300128:300130,{ bonus2 bAddSize,Size_Medium,5; bonus2 bMagicAddSize,Size_Medium,5; bonus bMatkRate,5; bonus2 bAddClass,Class_All,5; }
//300141:300120,{ bonus2 bMagicAddEle,Ele_Water,15; }
300144:300150,{ bonus bCritAtkRate,15; }
300146:4521,{ bonus bCritAtkRate,15; }
300147:4089,{ bonus bMatkRate,3; }
300148:300140,{ bonus bMatk,30; }
300148:300142,{ bonus bBaseAtk,30; }
300149:300141,{ bonus2 bSubEle,Ele_Neutral,5; }
300150:4524,{ bonus bMaxHPrate,15; bonus bStr,4; }
400049:18179,{ .@r_weapon = getequiprefinerycnt(EQI_HAND_R); bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",10; bonus bLongAtkRate,3*(.@r_weapon/2); }
400049:18180,{ .@r_weapon = getequiprefinerycnt(EQI_HAND_R); bonus bDelayrate,-10; bonus bLongAtkRate,3*(.@r_weapon/2); }
400049:32019,{ .@r_weapon = getequiprefinerycnt(EQI_HAND_R); bonus bBaseAtk,30; bonus2 bSkillAtk,"LG_CANNONSPEAR",4*(.@r_weapon/2); }
400053:480054:490069:490070,{ bonus2 bAddSize,Size_Small,20; bonus bCritical,5; bonus2 bAddClass,Class_All,10; bonus bMaxHPrate,10; bonus bMaxSPrate,10; bonus bStr,5; if (.@r>=18) { bonus bFlee2,10; bonus bBaseAtk,50; } if (.@r>=22) { bonus2 bAddSize,Size_Medium,20; bonus bCritAtkRate,20; } }
400054:13493,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bMatk,30; bonus2 bSkillAtk,"WL_HELLINFERNO",4*(.@r/2); }
400054:26151,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus bMatk,30; bonus2 bSkillAtk,"WL_COMET",5*(.@r/2); }
400054:28755,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus2 bMagicAtkEle,Ele_Fire,5; bonus2 bMagicAtkEle,Ele_Water,5; bonus2 bMagicAtkEle,Ele_Wind,5; bonus2 bSkillAtk,"NJ_KOUENKA",3*(.@r/2); bonus2 bSkillAtk,"NJ_HYOUSENSOU",3*(.@r/2); bonus2 bSkillAtk,"NJ_HUUJIN",3*(.@r/2); }
450144:1846,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR); bonus bBaseAtk,30; if (.@sum>=7) { bonus2 bAddClass,Class_All,5; } if (.@sum>=18) { bonus2 bSkillAtk,"SR_SKYNETBLOW",20; } if (.@sum>=22) { bonus bDelayrate,-10; } }
450146:610012,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR); bonus2 bAddClass,Class_All,5; if (.@sum>=7) { bonus bCritical,5; } if (.@sum>=18) { bonus bCritAtkRate,15; } if (.@sum>=22) { bonus2 bAddEle,Ele_Fire,10; bonus2 bAddRace,RC_Insect,10; } }
490069:490070,{ bonus bAspdRate,10; bonus2 bAddClass,Class_All,10; }
570008:20838,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_GARMENT); bonus bBaseAtk,30; if (.@sum>=7) { bonus bLongAtkRate,5; } if (.@sum>=18) { bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",20; } if (.@sum>=22) { bonus2 bSkillCooldown,"WM_SEVERE_RAINSTORM",-1000; } }
570008:22133,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES); bonus bMatk,40; if (.@sum>=7) { bonus2 bMagicAtkEle,Ele_Neutral,5; } if (.@sum>=18) { bonus2 bSkillAtk,"WM_REVERBERATION",20; } if (.@sum>=22) { bonus2 bSkillFixedCast,"WM_REVERBERATION",-500; } }
580008:20838,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_GARMENT); bonus bBaseAtk,30; if (.@sum>=7) { bonus bLongAtkRate,5; } if (.@sum>=18) { bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",20; } if (.@sum>=22) { bonus2 bSkillCooldown,"WM_SEVERE_RAINSTORM",-1000; } }
580008:22133,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_SHOES); bonus bMatk,40; if (.@sum>=7) { bonus2 bMagicAtkEle,Ele_Neutral,5; } if (.@sum>=18) { bonus2 bSkillAtk,"WM_REVERBERATION",20; } if (.@sum>=22) { bonus2 bSkillFixedCast,"WM_REVERBERATION",-500; } }
600011:450146,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR); bonus bBaseAtk,30; if (.@sum>=7) { bonus bCritical,5; } if (.@sum>=18) { bonus2 bSkillAtk,"RK_STORMBLAST",20; } if (.@sum>=22) { bonus2 bAddEle,Ele_Water,10; bonus2 bAddRace,RC_Fish,15; } }
610012:28509,{ bonus2 bAddClass,Class_All,5; if (getequiprefinerycnt(EQI_HAND_R)>=9) { bonus bCritAtkRate,20; } if (getequiprefinerycnt(EQI_HAND_R)>=11) { autobonus3 "{ bonus bCritical,15; }",1000,30000,"GC_VENOMIMPRESS"; } }
630006:450145,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR); bonus2 bAddClass,Class_All,5; if (.@sum>=7) { bonus bDelayrate,-5; } if (.@sum>=18) { bonus2 bSkillAtk,"LG_OVERBRAND",20; } if (.@sum>=22) { autobonus3 "{ bonus2 bAddRace,RC_Fish,50; bonus2 bAddRace,RC_Demon,50; bonus bBaseAtk,50; }",1000,10000,"LG_OVERBRAND"; } }
630007:450146,{ .@sum = getequiprefinerycnt(EQI_HAND_R)+getequiprefinerycnt(EQI_ARMOR); bonus bBaseAtk,30; if (.@sum>=7) { bonus bLongAtkRate,5; } if (.@sum>=18) { bonus2 bSkillAtk,"LK_SPIRALPIERCE",20; } if (.@sum>=22) { bonus2 bAddEle,Ele_Water,10; bonus2 bAddRace,RC_Fish,15; } }
15392:20946:22208,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT); bonus bLongAtkRate,7; bonus bMdef,8; bonus bDef,50; bonus bAspdRate,4*(readparam(bAgi)/15); autobonus2 "{ bonus bLongAtkRate,10; if (readparam(bAgi)>=120) { bonus bLongAtkRate,10; } }",1+(readparam(bAgi)>=120),10000,BF_MAGIC|BF_WEAPON; if (.@sum>=33) { bonus bAspdRate,20; bonus bDelayrate,-25; } }
15393:20946:22208,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT); bonus bMaxHPrate,10; bonus bMdef,15; bonus bDef,80; bonus2 bSubSize,Size_Medium,(readparam(bVit)/30); bonus2 bMagicSubSize,Size_Medium,(readparam(bVit)/30); bonus2 bSubSize,Size_Large,(readparam(bVit)/30); bonus2 bMagicSubSize,Size_Large,(readparam(bVit)/30); autobonus2 "{ bonus2 bSubSize,Size_All,7; bonus2 bMagicSubSize,Size_All,7; if (readparam(bVit)>=120) { bonus2 bSubSize,Size_All,5; bonus2 bMagicSubSize,Size_All,5; } }",1+(readparam(bVit)>=120),10000,BF_MAGIC|BF_WEAPON; if (.@sum>=33) { bonus bAspdRate,20; bonus bDelayrate,-25; } }
15394:20946:22208,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT); bonus bMatkRate,5; bonus2 bAddClass,Class_All,5; bonus bMdef,8; bonus bDef,50; bonus bAspdRate,3*(readparam(bDex)/15); bonus bVariableCastrate,-3*(readparam(bDex)/15); autobonus2 "{ bonus bFlee2,10; bonus bFlee,50; if (readparam(bDex)>=120) { bonus bFlee2,5; bonus bFlee,30; } }",1+(readparam(bDex)>=120),10000,BF_MAGIC|BF_WEAPON; if (.@sum>=33) { bonus bAspdRate,15; bonus bVariableCastrate,-15; bonus bDelayrate,-25; } }
15395:20946:22208,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT); bonus bMatkRate,7; bonus bMdef,8; bonus bDef,50; bonus bHealPower,15; bonus bVariableCastrate,-4*(readparam(bInt)/15); autobonus2 "{ bonus2 bMagicAtkEle,Ele_All,20; bonus bHealPower,40; if (readparam(bInt)>=120) { bonus2 bMagicAtkEle,Ele_All,10; } }",1+(readparam(bInt)>=120),10000,BF_MAGIC|BF_WEAPON; if (.@sum>=33) { bonus bVariableCastrate,-20; bonus bDelayrate,-25; } }
15396:20946:22208,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_SHOES)+getequiprefinerycnt(EQI_GARMENT); bonus2 bAddClass,Class_All,5; bonus bMdef,8; bonus bDef,50; bonus bCritAtkRate,3*(readparam(bLuk)/15); bonus bCritical,2*(readparam(bLuk)/15); autobonus2 "{ bonus bCritAtkRate,10; bonus2 bAddClass,Class_All,7; if (readparam(bLuk)>=120) { bonus bCritAtkRate,10; bonus2 bAddClass,Class_All,7; } }",1+(readparam(bLuk)>=120),10000,BF_MAGIC|BF_WEAPON; if (.@sum>=33) { bonus bAspdRate,20; bonus bDelayrate,-25; } }
15397:20947:22209,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES); bonus bMdef,15; bonus bDef,30; bonus bStr,8; bonus2 bSubRace,RC_Angel,15; bonus2 bSubRace,RC_Demon,15; if (.@sum>=27) { bonus2 bAddClass,Class_All,10; bonus bDelayrate,-20; bonus bFixedCastrate,-20; } }
15398:20947:22209,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES); bonus bMdef,15; bonus bDef,30; bonus bAgi,8; bonus2 bSubRace,RC_Angel,15; bonus2 bSubRace,RC_Demon,15; if (.@sum>=27) { bonus bLongAtkRate,10; bonus bDelayrate,-20; bonus bFixedCastrate,-20; } }
15399:20947:22209,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES); bonus bMdef,20; bonus bDef,50; bonus bVit,8; bonus2 bSubRace,RC_Angel,20; bonus2 bSubRace,RC_Demon,20; if (.@sum>=27) { bonus bMatkRate,4; bonus2 bAddClass,Class_All,4; bonus bDelayrate,-20; bonus bFixedCastrate,-20; } }
15400:20947:22209,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES); bonus bMdef,15; bonus bDef,30; bonus bDex,8; bonus2 bSubRace,RC_Angel,15; bonus2 bSubRace,RC_Demon,15; if (.@sum>=27) { bonus bMatkRate,7; bonus2 bAddClass,Class_All,7; bonus bDelayrate,-20; bonus bFixedCastrate,-20; } }
15401:20947:22209,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES); bonus bMdef,15; bonus bDef,30; bonus bInt,8; bonus2 bSubRace,RC_Angel,15; bonus2 bSubRace,RC_Demon,15; if (.@sum>=27) { bonus bMatkRate,10; bonus bDelayrate,-20; bonus bFixedCastrate,-20; } }
15402:20947:22209,{ .@sum = getequiprefinerycnt(EQI_ARMOR)+getequiprefinerycnt(EQI_GARMENT)+getequiprefinerycnt(EQI_SHOES); bonus bMdef,15; bonus bDef,30; bonus bLuk,8; if (.@sum>=27) { bonus2 bAddClass,Class_All,10; bonus bDelayrate,-20; bonus bFixedCastrate,-20; } }
32248:32250,{ bonus bAspdRate,15; bonus bMaxHPrate,10; }
// 32248:?,{ bonus bFixedCast,-300; bonus bDelayrate,-7; bonus2 bSubSize,Size_All,3; }
32248:32251,{ bonus bVariableCastrate,-15; bonus bMaxHPrate,10; }
32249:32250,{ bonus bAspdRate,15; bonus bMaxHPrate,10; }
// 32249:?,{ bonus bFixedCast,-300; bonus bDelayrate,-7; bonus2 bMagicSubSize,Size_All,3; }
32249:32251,{ bonus bVariableCastrate,-15; bonus bMaxHPrate,10; }
300001:4062,{ bonus2 bAddEle,Ele_Poison,15; }
300002:4334,{ bonus bLongAtkDef,10; bonus bMaxHPrate,5; }
300003:4337,{ bonus bBaseAtk,10; bonus bBaseAtk,getequiprefinerycnt(EQI_SHOES); }
300004:4339,{ bonus bDef,20; bonus bDef,3*getequiprefinerycnt(EQI_GARMENT); }
300005:4335,{ bonus2 bSkillAtk,"SO_EARTHGRAVE",getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"SO_EARTHGRAVE",10; }
300006:4336,{ bonus2 bMagicAtkEle,Ele_Neutral,30; }
300008:4406,{ .@r = getequiprefinerycnt(EQI_HAND_R); bonus2 bMagicAddRace,RC_Demon,3*(.@r/2); }
300013:4407,{ bonus2 bAddClass,Class_All,10; bonus bMaxHPrate,5; }
300014:4407,{ bonus2 bAddClass,Class_All,5; bonus bMaxHPrate,10; }
300015:4378,{ .@r = getequiprefinerycnt(EQI_SHOES); bonus bMaxHPrate,4*(.@r/4); bonus bMaxSPrate,4*(.@r/4); }
300016:4387,{ bonus bCritAtkRate,2; }
300017:4005,{ bonus2 bAddEle,Ele_Dark,15; }
300018:4085,{ bonus2 bAddEle,Ele_Holy,15; }
300019:300020,{ bonus2 bAddRace,RC_Dragon,5; bonus2 bAddRace,RC_Brute,5; }
310076:15397,{ bonus2 bAddRace,RC_All,12; bonus2 bAddClass,Class_All,5; }
310077:15398,{ bonus bPerfectHitRate,5; bonus bAspd,1; }
310078:15399,{ bonus bDelayrate,-5; bonus bMaxHPrate,5; }
310079:15400,{ bonus bFixedCast,-300; }
310080:15401,{ bonus2 bMagicAtkEle,Ele_All,12; bonus bVariableCastrate,-10; }
310081:15402,{ bonus2 bAddSize,Size_All,12; bonus bCritical,10; }
300076:300082:300089,{ bonus2 bSkillAtk,"LG_BANISHINGPOINT",20; bonus2 bSkillAtk,"LG_CANNONSPEAR",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"LG_BANISHINGPOINT",5*(.@r_shoes/2); bonus2 bSkillAtk,"LG_CANNONSPEAR",5*(.@r_weapon/2); }
300077:27013:300092,{ bonus2 bSkillAtk,"NC_AXEBOOMERANG",20; bonus2 bSkillAtk,"NC_VULCANARM",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"NC_VULCANARM",5*(.@r_shoes/2); bonus2 bSkillAtk,"NC_AXEBOOMERANG",5*(.@r_weapon/2); }
300101:300089:300094,{ bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",20; bonus2 bSkillAtk,"RK_DRAGONBREATH",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"RK_DRAGONBREATH",5*(.@r_shoes/2); bonus2 bSkillAtk,"RK_DRAGONBREATH_WATER",5*(.@r_weapon/2); }
300102:4633:300092,{ bonus2 bSkillAtk,"GN_SPORE_EXPLOSION",20; bonus2 bSkillAtk,"GN_CARTCANNON",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"GN_CARTCANNON",5*(.@r_shoes/2); bonus2 bSkillAtk,"GN_SPORE_EXPLOSION",5*(.@r_weapon/2); }
300104:300081:300124,{ bonus2 bSkillAtk,"SO_DIAMONDDUST",20; bonus2 bSkillAtk,"SO_PSYCHIC_WAVE",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"SO_PSYCHIC_WAVE",5*(.@r_shoes/2); bonus2 bSkillAtk,"SO_DIAMONDDUST",5*(.@r_weapon/2); }
300105:300081:300106,{ bonus2 bSkillAtk,"WL_CRIMSONROCK",20; bonus2 bSkillAtk,"WL_COMET",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"WL_COMET",5*(.@r_shoes/2); bonus2 bSkillAtk,"WL_CRIMSONROCK",5*(.@r_weapon/2); }
300108:27172:300097,{ bonus2 bSkillAtk,"SC_FATALMENACE",20; bonus2 bSkillAtk,"SC_TRIANGLESHOT",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"SC_FATALMENACE",5*(.@r_shoes/2); bonus2 bSkillAtk,"SC_TRIANGLESHOT",5*(.@r_weapon/2); }
300109:300097,{ bonus2 bSkillAtk,"GC_COUNTERSLASH",20; bonus2 bSkillAtk,"GC_ROLLINGCUTTER",20; .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"GC_COUNTERSLASH",5*(.@r_shoes/3); bonus2 bSkillAtk,"GC_ROLLINGCUTTER",5*(.@r_shoes/3); }
300110:4575:300083,{ bonus2 bSkillAtk,"KO_BAKURETSU",20; bonus2 bSkillAtk,"KO_JYUMONJIKIRI",20; .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"KO_BAKURETSU",5*(.@r_shoes/3); bonus2 bSkillAtk,"KO_JYUMONJIKIRI",5*(.@r_shoes/3); }
300111:27320:300083,{ bonus2 bSkillAtk,"NJ_KOUENKA",20; bonus2 bSkillAtk,"NJ_HYOUSENSOU",20; bonus2 bSkillAtk,"NJ_HUUJIN",20; .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"NJ_KOUENKA",5*(.@r_shoes/3); bonus2 bSkillAtk,"NJ_HYOUSENSOU",5*(.@r_shoes/3); bonus2 bSkillAtk,"NJ_HUUJIN",5*(.@r_shoes/3); }
300112:300085:300114,{ bonus2 bSkillAtk,"SP_CURSEEXPLOSION",20; bonus2 bSkillAtk,"SP_SWHOO",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"SP_CURSEEXPLOSION",5*(.@r_shoes/2); bonus2 bSkillAtk,"SP_SWHOO",5*(.@r_weapon/2); }
300113:300095:300096,{ bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",20; bonus2 bSkillAtk,"WM_REVERBERATION",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"WM_REVERBERATION",5*(.@r_shoes/2); bonus2 bSkillAtk,"WM_SEVERE_RAINSTORM",5*(.@r_weapon/2); }
300115:27308:300093,{ bonus2 bSkillAtk,"AB_ADORAMUS",20; bonus2 bSkillAtk,"AB_JUDEX",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"AB_ADORAMUS",5*(.@r_shoes/2); bonus2 bSkillAtk,"AB_JUDEX",5*(.@r_weapon/2); }
300116:27311:300093,{ bonus2 bSkillAtk,"SR_RAMPAGEBLASTER",20; bonus2 bSkillAtk,"SR_TIGERCANNON",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"SR_TIGERCANNON",5*(.@r_shoes/2); bonus2 bSkillAtk,"SR_RAMPAGEBLASTER",5*(.@r_weapon/2); }
300117:4633:300095,{ bonus2 bSkillAtk,"RA_ARROWSTORM",20; bonus2 bSkillAtk,"RA_CLUSTERBOMB",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"RA_CLUSTERBOMB",5*(.@r_shoes/2); bonus2 bSkillAtk,"RA_ARROWSTORM",5*(.@r_weapon/2); }
300118:300085:300088,{ bonus2 bSkillAtk,"SJ_FALLINGSTAR_ATK",20; bonus2 bSkillAtk,"SJ_FULLMOONKICK",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"SJ_FALLINGSTAR_ATK",5*(.@r_shoes/2); bonus2 bSkillAtk,"SJ_FULLMOONKICK",5*(.@r_weapon/2); }
300119:27307:300091,{ bonus2 bSkillAtk,"RL_HAMMER_OF_GOD",20; bonus2 bSkillAtk,"RL_R_TRIP",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"RL_HAMMER_OF_GOD",5*(.@r_shoes/2); bonus2 bSkillAtk,"RL_R_TRIP",5*(.@r_weapon/2); }
300120:27121,{ bonus2 bMagicAddEle,Ele_Water,15; bonus bMatk,10; }
300122:300121,{ bonus2 bSubEle,Ele_Neutral,5; }
300123:300121,{ bonus2 bSubEle,Ele_Neutral,5; }
300125:300087:300114,{ bonus2 bSkillAtk,"SU_CN_METEOR",20; bonus2 bSkillAtk,"SU_PICKYPECK",20; .@r_weapon = getequiprefinerycnt(EQI_HAND_R); .@r_shoes = getequiprefinerycnt(EQI_SHOES); bonus2 bSkillAtk,"SU_CN_METEOR",5*(.@r_shoes/2); bonus2 bSkillAtk,"SU_PICKYPECK",5*(.@r_weapon/2); }
310003:310000,{ bonus2 bSkillAtk,"RA_AIMEDBOLT",15; }
310003:310001,{ bonus2 bSkillVariableCast,"RA_AIMEDBOLT",-1000; }

File diff suppressed because it is too large Load Diff

93
db/re/item_db.yml Normal file
View File

@ -0,0 +1,93 @@
# This file is a part of rAthena.
# Copyright(C) 2019 rAthena Development Team
# https://rathena.org - https://github.com/rathena
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###########################################################################
# Item Database
###########################################################################
#
# Item Settings
#
###########################################################################
# - Id Item ID.
# AegisName Server name to reference the item in scripts and lookups, should use no spaces.
# Name Name in English for displaying as output.
# Type Item type. (Default: Etc)
# SubType Weapon or Ammo type. (Default: 0)
# Buy Buying price. When not specified, becomes double the sell price. (Default: 0)
# Sell Selling price. When not specified, becomes half the buy price. (Default: 0)
# Weight Item weight. Each 10 is 1 weight. (Default: 0)
# Attack Weapon's attack. (Default: 0)
# MagicAttack Weapon's magic attack. (Default: 0)
# Defense Armor's defense. (Default: 0)
# Range Weapon's attack range. (Default: 0)
# Slots Available slots in item. (Default: 0)
# Jobs Jobs that can equip the item. (Map default is 'All: true')
# Classes Upper class types that can equip the item. (Map default is 'All: true')
# Gender Gender that can equip the item. (Default: Both)
# Locations Equipment's placement. (Default: None)
# WeaponLevel Weapon level. (Default: 0)
# EquipLevelMin Minimum required level to equip. (Default: 0)
# EquipLevelMax Maximum level that can equip. (Default: 0)
# Refineable If the item can be refined. (Default: false)
# View View sprite of an item. (Default: 0)
# AliasName Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
# Flags: Item flags. (Default: null)
# BuyingStore If the item is available for Buyingstores. (Default: false)
# DeadBranch If the item is a Dead Branch. (Default: false)
# Container If the item is part of a container. (Default: false)
# UniqueId If the item is a unique stack. (Default: false)
# BindOnEquip If the item is bound to the character upon equipping. (Default: false)
# DropAnnounce If the item has a special announcement to self on drop. (Default: false)
# NoConsume If the item is consumed on use. (Default: false)
# DropEffect If the item has a special effect when on the ground. (Default: None)
# Delay: Item use delay. (Default: null)
# Duration Duration of delay in seconds.
# Status Status Change used to track delay. (Default: None)
# Stack: Item stack amount. (Default: null)
# Amount Maximum amount that can be stacked.
# Inventory If the stack is applied to player's inventory. (Default: true)
# Cart If the stack is applied to the player's cart. (Default: false)
# Storage If the stack is applied to the player's storage. (Default: false)
# GuildStorage If the stack is applied to the player's guild storage. (Default: false)
# NoUse: Conditions when the item is unusable. (Default: null)
# Override Group level to override these conditions.
# Sitting If the item can not be used while sitting. (Default: false)
# Trade: Trade restrictions. (Default: null)
# Override Group level to override these conditions.
# NoDrop If the item can not be dropped. (Default: false)
# NoTrade If the item can not be traded. (Default: false)
# TradePartner If the item can not be traded to the player's partner. (Default: false)
# NoSell If the item can not be sold. (Default: false)
# NoCart If the item can not be put in a cart. (Default: false)
# NoStorage If the item can not be put in a storage. (Default: false)
# NoGuildStorage If the item can not be put in a guild storage. (Default: false)
# NoMail If the item can not be put in a mail. (Default: false)
# NoAuction If the item can not be put in an auction. (Default: false)
# Script Script to execute when the item is used/equipped. (Default: null)
# EquipScript Script to execute when the item is equipped. (Default: null)
# UnEquipScript Script to execute when the item is unequipped or when a rental item expires. (Default: null)
###########################################################################
Header:
Type: ITEM_DB
Version: 1
Footer:
Imports:
- Path: db/re/item_db_usable.yml
- Path: db/re/item_db_equip.yml
- Path: db/re/item_db_etc.yml

104982
db/re/item_db_equip.yml Normal file

File diff suppressed because it is too large Load Diff

39208
db/re/item_db_etc.yml Normal file

File diff suppressed because it is too large Load Diff

46651
db/re/item_db_usable.yml Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,108 +0,0 @@
// Item Delay Database
//
// Structure of Database:
// <ItemID>,<Delay>{,<SC_GroupID>}
//
// <ItemID>
// ID of item that will has reuse delay.
// <Delay>
// Re-use delay in milliseconds.
// <SC_GroupID>
// SC (status change) group for the item.
// Example for SC_REUSE_LIMIT_MTF
// 12658,10000,SC_REUSE_LIMIT_MTF // Transformation Scroll(Deviruchi)
// 12659,10000,SC_REUSE_LIMIT_MTF // Transformation Scroll(Raydric)
// -> 12658 has reuse delay for 10 seconds, and also,
// 12659 cannot be used when this delay is active.
// Since this is optional, default is -1 will ignores the
// delay group and the delay will be stored in character's
// data that has limit set in src/map/itemdb.hpp as MAX_ITEMDELAYS.
// SC_REUSE_REFRESH
12725,120000,SC_REUSE_REFRESH //Runstone_Nosiege
// SC_REUSE_LIMIT_A
14538,300000,SC_REUSE_LIMIT_A //Glass_Of_Illusion
// SC_REUSE_LIMIT_B
12596,180000,SC_REUSE_LIMIT_B //Magic_Candy
14586,180000,SC_REUSE_LIMIT_B //Spark_Candy
// SC_REUSE_LIMIT_C
12208,60000,SC_REUSE_LIMIT_C //Battle_Manual
// SC_REUSE_LIMIT_D
12210,60000,SC_REUSE_LIMIT_D //Bubble_Gum
// SC_REUSE_LIMIT_E
11522,1000,SC_REUSE_LIMIT_E //Red_Raffle_Sap
11523,2000,SC_REUSE_LIMIT_E //Yellow_Raffle_Sap
11524,3000,SC_REUSE_LIMIT_E //White_Raffle_Sap
// SC_REUSE_LIMIT_F
607,5000,SC_REUSE_LIMIT_F //Yggdrasil_Berry
// SC_REUSE_LIMIT_G
608,3000,SC_REUSE_LIMIT_G //Yggdrasil_Seed
22559,3000,SC_REUSE_LIMIT_G //Mock_Strawberry
23042,3000,SC_REUSE_LIMIT_G //S_Seed_Of_Yggdrasil
// SC_REUSE_LIMIT_H
11525,5000,SC_REUSE_LIMIT_H //Mora_Hip_Tea
// SC_REUSE_LIMIT_MTF
12658,10000,SC_REUSE_LIMIT_MTF //Transformation Scroll(Deviruchi)
12659,10000,SC_REUSE_LIMIT_MTF //Transformation Scroll(Raydric)
12660,10000,SC_REUSE_LIMIT_MTF //Transformation Scroll(Mavka)
12661,10000,SC_REUSE_LIMIT_MTF //Transformation Scroll(Marduk)
12662,10000,SC_REUSE_LIMIT_MTF //Transformation Scroll(Banshee)
12663,10000,SC_REUSE_LIMIT_MTF //Transformation Scroll(Poring)
12664,10000,SC_REUSE_LIMIT_MTF //Transformation Scroll(Golem)
// SC_REUSE_LIMIT_ASPD_POTION
12684,900000,SC_REUSE_LIMIT_ASPD_POTION //ASPD_Potion
// SC_REUSE_MILLENNIUMSHIELD
12727,60000,SC_REUSE_MILLENNIUMSHIELD //Runstone_Verkana
// SC_REUSE_CRUSHSTRIKE
12726,30000,SC_REUSE_CRUSHSTRIKE //Runstone_Rhydo
// SC_REUSE_STORMBLAST
12732,1000,SC_REUSE_STORMBLAST //Runstone_Pertz
// SC_ALL_RIDING_REUSE_LIMIT
12622,3000,SC_ALL_RIDING_REUSE_LIMIT //Boarding_Halter
// SC_REUSE_LIMIT_ECL
12812,5000,SC_REUSE_LIMIT_ECL //Snow_Flip
12813,5000,SC_REUSE_LIMIT_ECL //Peony_Mommy
12814,5000,SC_REUSE_LIMIT_ECL //Slapping_Herb
12815,5000,SC_REUSE_LIMIT_ECL //Yggdrasil_Dust
// SC_REUSE_LIMIT_RECALL
12968,300000,SC_REUSE_LIMIT_RECALL //Emergency_Scroll1
12969,300000,SC_REUSE_LIMIT_RECALL //Emergency_Scroll2
12970,300000,SC_REUSE_LIMIT_RECALL //Emergency_Scroll3
// Misc
11621,10000 //Red_Syrup
11622,10000 //Yellow_Syrup
11623,10000 //White_Syrup
11624,10000 //Blue_Syrup
12135,10000 //Green_Ale
//12202,60000 //Str_Dish10_
//12203,60000 //Agi_Dish10_
//12204,60000 //Int_Dish10_
//12205,60000 //Dex_Dish10_
//12206,60000 //Luk_Dish10_
//12207,60000 //Vit_Dish10_
22508,1200000 //Para_Team_Mark_
22540,5000,SC_REUSE_LIMIT_LUXANIMA //Runstone_Lux
// Bed of Honor
22687,5000,SC_REUSE_LIMIT_F // Pieces_Of_Sentiment
23277,180000 //Mado_Box

File diff suppressed because it is too large Load Diff

View File

@ -1,21 +0,0 @@
// Item Stacking Restriction File
// Prevents an item to be stacked more than x times in given
// inventory types. Generally used by 3rd class related skill items.
//
// Structure of Database:
// ItemID,MaxStackAmount,Type
//
// MaxStackAmount:
// Stack limit for the item. Use 0 to disable a restriction.
//
// Type mask values:
// &1: Character inventory restriction
// &2: Character cart restriction
// &4: Account storage restriction
// &8: Guild storage restriction
//
// Example:
// 512,4,12 // Will not allow more than 4 Apples in storages.
// Arch Bishop
12333,3,1 // Ancilla

File diff suppressed because it is too large Load Diff

View File

@ -4217,6 +4217,207 @@
//21087,S_DUMMY_100_HUMANP
//21088,S_DUMMY_100_DORAMP
//21089,WANDERING_DUCK
//21090,JP_E_MONSTER_201
//21091,JP_E_MONSTER_202
//21092,JP_E_MONSTER_203
//21093,JP_E_MONSTER_204
//21094,JP_E_MONSTER_205
//21095,JP_E_MONSTER_206
//21096,JP_E_MONSTER_207
//21097,JP_E_MONSTER_208
//21098,JP_E_MONSTER_209
//21099,JP_E_MONSTER_210
//21100,JP_E_MONSTER_211
//21101,JP_E_MONSTER_212
//21102,JP_E_MONSTER_213
//21103,JP_E_MONSTER_214
//21104,JP_E_MONSTER_215
//21105,JP_E_MONSTER_216
//21106,JP_E_MONSTER_217
//21107,JP_E_MONSTER_218
//21108,JP_E_MONSTER_219
//21109,JP_E_MONSTER_220
//21110,JP_E_MONSTER_221
//21111,JP_E_MONSTER_222
//21112,JP_E_MONSTER_223
//21113,JP_E_MONSTER_224
//21114,JP_E_MONSTER_225
//21115,JP_E_MONSTER_226
//21116,JP_E_MONSTER_227
//21117,JP_E_MONSTER_228
//21118,JP_E_MONSTER_229
//21119,JP_E_MONSTER_230
//21120,JP_E_MONSTER_231
//21121,JP_E_MONSTER_232
//21122,JP_E_MONSTER_233
//21123,JP_E_MONSTER_234
//21124,JP_E_MONSTER_235
//21125,JP_E_MONSTER_236
//21126,JP_E_MONSTER_237
//21127,JP_E_MONSTER_238
//21128,JP_E_MONSTER_239
//21129,JP_E_MONSTER_240
//21130,JP_E_MONSTER_241
//21131,JP_E_MONSTER_242
//21132,JP_E_MONSTER_243
//21133,JP_E_MONSTER_244
//21134,JP_E_MONSTER_245
//21135,JP_E_MONSTER_246
//21136,JP_E_MONSTER_247
//21137,JP_E_MONSTER_248
//21138,JP_E_MONSTER_249
//21139,JP_E_MONSTER_250
//21140,JP_E_MONSTER_251
//21141,JP_E_MONSTER_252
//21142,JP_E_MONSTER_253
//21143,JP_E_MONSTER_254
//21144,JP_E_MONSTER_255
//21145,JP_E_MONSTER_256
//21146,JP_E_MONSTER_257
//21147,JP_E_MONSTER_258
//21148,JP_E_MONSTER_259
//21149,JP_E_MONSTER_260
//21150,JP_E_MONSTER_261
//21151,JP_E_MONSTER_262
//21152,JP_E_MONSTER_263
//21153,JP_E_MONSTER_264
//21154,JP_E_MONSTER_265
//21155,JP_E_MONSTER_266
//21156,JP_E_MONSTER_267
//21157,JP_E_MONSTER_268
//21158,JP_E_MONSTER_269
//21159,JP_E_MONSTER_270
//21160,JP_E_MONSTER_271
//21161,JP_E_MONSTER_272
//21162,JP_E_MONSTER_273
//21163,JP_E_MONSTER_274
//21164,JP_E_MONSTER_275
//21165,JP_E_MONSTER_276
//21166,JP_E_MONSTER_277
//21167,JP_E_MONSTER_278
//21168,JP_E_MONSTER_279
//21169,JP_E_MONSTER_280
//21170,JP_E_MONSTER_281
//21171,JP_E_MONSTER_282
//21172,JP_E_MONSTER_283
//21173,JP_E_MONSTER_284
//21174,JP_E_MONSTER_285
//21175,JP_E_MONSTER_286
//21176,JP_E_MONSTER_287
//21177,JP_E_MONSTER_288
//21178,JP_E_MONSTER_289
//21179,JP_E_MONSTER_290
//21180,JP_E_MONSTER_291
//21181,JP_E_MONSTER_292
//21182,JP_E_MONSTER_293
//21183,JP_E_MONSTER_294
//21184,JP_E_MONSTER_295
//21185,JP_E_MONSTER_296
//21186,JP_E_MONSTER_297
//21187,JP_E_MONSTER_298
//21188,JP_E_MONSTER_299
//21189,JP_E_MONSTER_300
//21190,JP_E_MONSTER_301
//21191,JP_E_MONSTER_302
//21192,JP_E_MONSTER_303
//21193,JP_E_MONSTER_304
//21194,JP_E_MONSTER_305
//21195,JP_E_MONSTER_306
//21196,JP_E_MONSTER_307
//21197,JP_E_MONSTER_308
//21198,JP_E_MONSTER_309
//21199,JP_E_MONSTER_310
//21200,JP_E_MONSTER_311
//21201,JP_E_MONSTER_312
//21202,JP_E_MONSTER_313
//21203,JP_E_MONSTER_314
//21204,JP_E_MONSTER_315
//21205,JP_E_MONSTER_316
//21206,JP_E_MONSTER_317
//21207,JP_E_MONSTER_318
//21208,JP_E_MONSTER_319
//21209,JP_E_MONSTER_320
//21210,JP_E_MONSTER_321
//21211,JP_E_MONSTER_322
//21212,JP_E_MONSTER_323
//21213,JP_E_MONSTER_324
//21214,JP_E_MONSTER_325
//21215,JP_E_MONSTER_326
//21216,JP_E_MONSTER_327
//21217,JP_E_MONSTER_328
//21218,JP_E_MONSTER_329
//21219,JP_E_MONSTER_330
//21220,JP_E_MONSTER_331
//21221,JP_E_MONSTER_332
//21222,JP_E_MONSTER_333
//21223,JP_E_MONSTER_334
//21224,JP_E_MONSTER_335
//21225,JP_E_MONSTER_336
//21226,JP_E_MONSTER_337
//21227,JP_E_MONSTER_338
//21228,JP_E_MONSTER_339
//21229,JP_E_MONSTER_340
//21230,JP_E_MONSTER_341
//21231,JP_E_MONSTER_342
//21232,JP_E_MONSTER_343
//21233,JP_E_MONSTER_344
//21234,JP_E_MONSTER_345
//21235,JP_E_MONSTER_346
//21236,JP_E_MONSTER_347
//21237,JP_E_MONSTER_348
//21238,JP_E_MONSTER_349
//21239,JP_E_MONSTER_350
//21240,JP_E_MONSTER_351
//21241,JP_E_MONSTER_352
//21242,JP_E_MONSTER_353
//21243,JP_E_MONSTER_354
//21244,JP_E_MONSTER_355
//21245,JP_E_MONSTER_356
//21246,JP_E_MONSTER_357
//21247,JP_E_MONSTER_358
//21248,JP_E_MONSTER_359
//21249,JP_E_MONSTER_360
//21250,JP_E_MONSTER_361
//21251,JP_E_MONSTER_362
//21252,JP_E_MONSTER_363
//21253,JP_E_MONSTER_364
//21254,JP_E_MONSTER_365
//21255,JP_E_MONSTER_366
//21256,JP_E_MONSTER_367
//21257,JP_E_MONSTER_368
//21258,JP_E_MONSTER_369
//21259,JP_E_MONSTER_370
//21260,JP_E_MONSTER_371
//21261,JP_E_MONSTER_372
//21262,JP_E_MONSTER_373
//21263,JP_E_MONSTER_374
//21264,JP_E_MONSTER_375
//21265,JP_E_MONSTER_376
//21266,JP_E_MONSTER_377
//21267,JP_E_MONSTER_378
//21268,JP_E_MONSTER_379
//21269,JP_E_MONSTER_380
//21270,JP_E_MONSTER_381
//21271,JP_E_MONSTER_382
//21272,JP_E_MONSTER_383
//21273,JP_E_MONSTER_384
//21274,JP_E_MONSTER_385
//21275,JP_E_MONSTER_386
//21276,JP_E_MONSTER_387
//21277,JP_E_MONSTER_388
//21278,JP_E_MONSTER_389
//21279,JP_E_MONSTER_390
//21280,JP_E_MONSTER_391
//21281,JP_E_MONSTER_392
//21282,JP_E_MONSTER_393
//21283,JP_E_MONSTER_394
//21284,JP_E_MONSTER_395
//21285,JP_E_MONSTER_396
//21286,JP_E_MONSTER_397
//21287,JP_E_MONSTER_398
//21288,JP_E_MONSTER_399
//21289,JP_E_MONSTER_400
//21290,KIEL_D_01_2
//31999,HUNTING_GID_DEFAULT
//32000,MONSTER_2ND_END

View File

@ -31611,6 +31611,31 @@ Body:
IgnoreItemBonus: true
Requires:
SpCost: 1
- Id: 3042
Name: ALL_PRONTERA_RECALL
Description: Prontera Recall
MaxLevel: 2
TargetType: Self
DamageFlags:
NoDamage: true
Hit: Single
HitCount: 1
Cooldown:
- Level: 1
Time: 1800000
- Level: 2
Time: 900000
FixedCastTime: 1000
CastTimeFlags:
IgnoreDex: true
IgnoreStatus: true
IgnoreItemBonus: true
CastDelayFlags:
IgnoreDex: true
IgnoreStatus: true
IgnoreItemBonus: true
Requires:
SpCost: 1
- Id: 5001
Name: GC_DARKCROW
Description: Dark Claw

View File

@ -1382,7 +1382,7 @@ Affected files:
-- atcommand: atcommand_athena.conf, groups.conf
-- battleconf: battle_athena.conf, battle_conf.txt
-- instancedb: instance_db.txt
-- itemdb: item_db.txt, item_group_db.txt, item_trade.txt, item_noequip.txt, item_nouse.txt, item_combo_db.txt, item_avail.txt, item_stack.txt, item_delay.txt, item_buyingstore.txt, item_flag.txt, item_randomopt_db.txt, item_randomopt_group.txt
-- itemdb: item_db.yml, item_group_db.txt, item_noequip.txt, item_combo_db.txt, item_randomopt_db.txt, item_randomopt_group.txt
-- mobdb: mob_db.txt, mob_item_ratio.txt, mob_chat_db.txt, mob_avail.txt, mob_race2_db.txt, mob_branch.txt, mob_poring.txt, mob_boss.txt, mob_pouch.txt, mob_classchange.txt, pet_db.yml, homunculus_db.txt, homun_skill_tree.txt, exp_homun.txt, mercenary_db.txt, mercenary_skill_db.txt, elemental_db.txt, elemental_skill_db.txt
-- motd: motd.txt
-- msgconf: atcommand_athena.conf

View File

@ -67,9 +67,9 @@ This list contains all available constants referenced in the 'bonus' commands.
* Other values:
Skill (sk): see 'db/(pre-)re/skill_db.yml' (NOTE: Both skill IDs and names, in quotes, are supported.)
Monster id (mid): see 'db/(pre-)re/mob_db.txt'
Item id (iid): see 'db/(pre-)re/item_db.txt'
Item id (iid): see 'db/item_db.yml'
Item group (ig): see 'db/(pre-)re/item_group_db.txt' and the constants in 'db/const.txt', prefixed with IG_*
Weapon type (w): see 'doc/item_db.txt' -> View -> Weapons
Weapon type (w): see 'doc/item_db.txt' -> SubType
Bonuses

View File

@ -1,44 +1,82 @@
//===== rAthena Documentation ================================
//= Item Database
//= Item Database Structure
//===== By: ==================================================
//= rAthena Dev Team
//===== Last Updated: ========================================
//= 20160319
//= 20200602
//===== Description: =========================================
//= Explanation of the item_db.txt file and structure.
//= Explanation of the item_db.yml file and structure.
//============================================================
---------------------------------------
ID: Item id
Id: Item ID.
---------------------------------------
AegisName: Server name to reference the item in scripts and lookups,
should use no spaces.
AegisName: Server name to reference the item in scripts and lookups, should use no spaces.
---------------------------------------
Name: Name in English for displaying as output for @ and script commands.
Name: Name in English for displaying as output for atcommands and script commands.
---------------------------------------
Type:
0 Healing item.
2 Usable item.
3 Etc item
4 Armor/Garment/Boots/Headgear/Accessory
5 Weapon
6 Card
7 Pet egg
8 Pet equipment
10 Ammo (Arrows/Bullets/etc)
11 Usable with delayed consumption (intended for 'itemskill')
Items using the 'itemskill' script command are consumed after
selecting a target. Any other command will NOT consume the item.
12 Shadow Equipment
18 Another delayed consume that requires user confirmation before
using item.
Type: Item's type.
Healing - Healing item.
Usable - Usable item.
Etc - Etc item.
Armor - Armor/Garment/Boots/Headgear/Accessory item.
Weapon - Weapon item.
Card - Card item.
PetEgg - Pet egg item.
PetArmor - Pet equipment item.
Ammo - Ammo (Arrows/Bullets/etc) item.
DelayConsume - Usable with delayed consumption (intended for 'itemskill').
Items using the 'itemskill' script command are consumed after selecting a target. Any other command will NOT consume the item.
ShadowGear - Shadow Equipment item.
Cash - Another delayed consume that requires user confirmation before using the item.
---------------------------------------
SubType: Indicates the weapon-class of the item.
For weapons, the types are:
Fist
Dagger
1hSword
2hSword
1hSpear
2hSpear
1hAxe
2hAxe
Mace
Staff
Bow
Knuckle
Musical
Whip
Book
Katar
Revolver
Rifle
Gatling
Shotgun
Grenade
Huuma
2hStaff
For ammo, the types are:
Arrow
Dagger
Bullet
Shell
Grenade
Shuriken
Kunai
CannonBall
ThrowWeapon
---------------------------------------
@ -54,17 +92,19 @@ Weight: Item's weight. Each 10 is 1 weight.
---------------------------------------
ATK: Weapon's attack
MATK: Weapon's magic attack (Renewal only)
Attack: Weapon's attack.
---------------------------------------
DEF: Armor's defense
MagicAttack: Weapon's magic attack. (Renewal only)
---------------------------------------
Range: Weapon's attack range
Defense: Armor's defense.
---------------------------------------
Range: Weapon's attack range.
---------------------------------------
@ -72,146 +112,156 @@ Slots: Amount of slots the item possesses.
---------------------------------------
Job: Equippable jobs. Uses the following bitmask table:
(S.) Novice (2^00): 0x00000001
Swordman (2^01): 0x00000002
Magician (2^02): 0x00000004
Archer (2^03): 0x00000008
Acolyte (2^04): 0x00000010
Merchant (2^05): 0x00000020
Thief (2^06): 0x00000040
Knight (2^07): 0x00000080
Priest (2^08): 0x00000100
Wizard (2^09): 0x00000200
Blacksmith (2^10): 0x00000400
Hunter (2^11): 0x00000800
Assassin (2^12): 0x00001000
Unused (2^13): 0x00002000
Crusader (2^14): 0x00004000
Monk (2^15): 0x00008000
Sage (2^16): 0x00010000
Rogue (2^17): 0x00020000
Alchemist (2^18): 0x00040000
Bard/Dancer (2^19): 0x00080000
Unused (2^20): 0x00100000
Taekwon (2^21): 0x00200000
Star Gladiator (2^22): 0x00400000
Soul Linker (2^23): 0x00800000
Gunslinger (2^24): 0x01000000
Ninja (2^25): 0x02000000
Gangsi (2^26): 0x04000000
Death Knight (2^27): 0x08000000
Dark Collector (2^28): 0x10000000
Kagerou/Oboro (2^29): 0x20000000
Rebellion (2^30): 0x40000000
Summoner (2^31): 0x80000000
Jobs: Equippable jobs.
Novice + Swordman + Magician + Archer = 0x0000000F, why?
Because: 10 = A, 11 = B, 12 = C, 13 = D, 14 = E, and 15 = F
It's using hexadecimal.
All - Applies to all jobs listed below.
Acolyte
Alchemist
Archer
Assassin
BardDancer - Applies to Bard and Dancer.
Blacksmith
Crusader
Gunslinger
Hunter
KagerouOboro - Applies to Kagerou and Oboro.
Knight
Mage
Merchant
Monk
Ninja
Novice
Priest
Rebellion
Rogue
Sage
SoulLinker
StarGladiator
Summoner
SuperNovice
Swordman
Taekwon
Thief
Wizard
---------------------------------------
Class: Equippable upper-types. Uses the following bitmasks:
1: Normal classes (no Baby/Transcendent/Third classes)
2: Transcedent classes (no Transcedent-Third classes)
4: Baby classes (no Third-Baby classes)
8: Third classes (no Transcedent-Third or Third-Baby classes)
16: Transcedent-Third classes
32: Third-Baby classes
Classes: Equippable upper-types.
All - Applies to all classes.
Normal - Normal classes (no Baby/Transcendent/Third classes).
Upper - Transcedent classes (no Transcedent-Third classes).
Baby - Baby classes (no Third-Baby classes).
Third - Third classes (no Transcedent-Third or Third-Baby classes).
Third_Upper - Transcedent-Third classes.
Third_Baby - Third-Baby classes.
---------------------------------------
Gender: Gender restriction. 0 is female, 1 is male, 2 for both.
Gender: Gender restriction.
Female
Male
Both
---------------------------------------
Loc: Equipment's placement. Values are:
2^8 256 = Upper Headgear
2^9 512 = Middle Headgear
2^0 001 = Lower Headgear
2^4 016 = Armor
2^1 002 = Weapon
2^5 032 = Shield
2^2 004 = Garment
2^6 064 = Footgear
2^3 008 = Accessory Right
2^7 128 = Accessory Left
2^10 1024 = Costume Top Headgear
2^11 2048 = Costume Mid Headgear
2^12 4096 = Costume Low Headgear
2^13 8192 = Costume Garment/Robe
2^15 32768 = Ammo
2^16 65536 = Shadow Armor
2^17 131072 = Shadow Weapon
2^18 262144 = Shadow Shield
2^19 524288 = Shadow Shoes
2^20 1048576 = Shadow Accessory Right (Earring)
2^21 2097152 = Shadow Accessory Left (Pendant)
Locations: Equipment's placement.
Head_Top - Upper Headgear
Head_Mid - Middle Headgear
Head_Low - Lower Headgear
Armor - Armor
Right_Hand - Weapon
Left_Hand - Shield
Garment - Garment/Robe
Shoes - Shoes
Right_Accessory - Accessory Right
Left_Accessory - Accessory Left
Costume_Head_Top - Costume Top Headgear
Costume_Head_Mid - Costume Mid Headgear
Costume_Head_Low - Costume Low Headgear
Costume_Garment - Costume Garment/Robe
Ammo - Ammo
Shadow_Armor - Shadow Armor
Shadow_Weapon - Shadow Weapon
Shadow_Shield - Shadow Shield
Shadow_Shoes - Shadow Shoes
Shadow_Right_Accessory - Shadow Accessory Right (Earring)
Shadow_Left_Accessory - Shadow Accessory Left (Pendant)
---------------------------------------
wLV: Weapon level.
WeaponLevel: Weapon level. Used for refinement.
---------------------------------------
eLV: Base level required to be able to equip.
maxLevel: Only able to equip if base level is lower than this.
EquipLevelMin: Base level required to be able to equip.
---------------------------------------
Refineable: 1 if the item can be refined, 0 otherwise.
EquipLevelMax: Only able to equip if base level is lower than this.
---------------------------------------
View: For normal items, defines a replacement view-sprite for the item (eg:
Making apples look like apple juice). The special case are weapons
and ammo where this value indicates the weapon-class of the item.
Refineable: Defines if the item can be refined.
For weapons, the types are:
0: bare fist
1: Daggers
2: One-handed swords
3: Two-handed swords
4: One-handed spears
5: Two-handed spears
6: One-handed axes
7: Two-handed axes
8: Maces
9: Unused
10: Staves
11: Bows
12: Knuckles
13: Musical Instruments
14: Whips
15: Books
16: Katars
17: Revolvers
18: Rifles
19: Gatling guns
20: Shotguns
21: Grenade launchers
22: Fuuma Shurikens
23: Two-handed staves
24: Max Type
25: Dual-wield Daggers
26: Dual-wield Swords
27: Dual-wield Axes
28: Dagger + Sword
29: Dagger + Axe
30: Sword + Axe
---------------------------------------
For ammo, the types are:
1: Arrows
2: Throwable daggers
3: Bullets
4: Shells
5: Grenades
6: Shuriken
7: Kunai
8: Cannonballs
9: Throwable Items (Sling Item)
View: For normal items, defines a replacement view-sprite for the item.
---------------------------------------
AliasName: Use the AegisName of another item which will be sent to the client instead of this item.
This makes items visually appear as another without having to change the client data.
---------------------------------------
Flags: Different types of flags for an item.
BuyingStore - If the item is available to Buying Stores.
DeadBranch - If the item is a Dead Branch type.
Container - If the item is part of a Container.
UniqueId - If the item is a unique stack.
BindOnEquip - If the item is bound to the character upon equipping.
DropAnnounce - If the item has a special announcement to self on drop.
NoConsume - If the item is consumed on use.
DropEffect - If the item has a special effect when on the ground.
---------------------------------------
Delay: Item use delay.
Duration - Duration of delay in seconds.
Status - Status Change used to keep track of the delay.
---------------------------------------
Stack: Item stack amount.
Amount - Maximum amount that can be stacked.
Inventory - If the stack is applied to player's inventory.
Cart - If the stack is applied to the player's cart.
Storage - If the stack is applied to the player's storage.
GuildStorage - If the stack is applied to the player's guild storage.
---------------------------------------
NoUse: Conditions when the item is unusable.
Override - Group level to override these conditions.
Sitting - If the item can not be used while sitting.
---------------------------------------
Trade: Trade restrictions.
Override - Group level to override these conditions.
NoDrop - If the item can not be dropped.
NoTrade - If the item can not be traded.
TradePartner - If the item can not be traded to the player's partner.
NoSell - If the item can not be sold.
NoCart - If the item can not be put in a cart.
NoStorage - If the item can not be put in a storage.
NoGuildStorage - If the item can not be put in a guild storage.
NoMail - If the item can not be put in a mail.
NoAuction - If the item can not be put in an auction.
---------------------------------------
@ -224,8 +274,5 @@ OnEquip_Script: Script to execute when the item is equipped.
---------------------------------------
OnUnequip_Script: Script to execute when the item is unequipped
or when a rental item expires.
OnUnequip_Script: Script to execute when the item is unequipped or when a rental item expires.
Warning, not all item bonuses will work here as expected.
---------------------------------------

View File

@ -296,7 +296,7 @@ clicking) will cause a shop window to come up. No code whatsoever runs in shop
NPCs and you can't change the prices otherwise than by editing the script
itself.
The Item ID is the number of item in the 'item_db.txt' database. If Price is set
The Item ID is the number of item in the 'db/item_db.yml' database. If Price is set
to -1, the 'buy price' given in the item database will be used. Otherwise, the
price you gave will be used for this item, which is how you create differing
prices for items in different shops.
@ -1901,7 +1901,7 @@ Example 3:
Example 4:
mes "[Quest Person]";
if (countitem(512) < 1) { // 512 is the item ID for Apple, found in item_db
if (countitem(512) < 1) { // 512 is the item ID for Apple, found in db/item_db.yml
mes "Can you please bring me an apple?";
close;
}
@ -4596,7 +4596,7 @@ online, items will be created in their inventory instead. If they are not
online, nothing will happen.
In the first and most commonly used version of this command, items are
referred to by their database ID number found inside 'db/(pre-)re/item_db.txt'.
referred to by their database ID number found inside 'db/item_db.yml'.
getitem 502,10 // The person will receive 10 apples
getitem 617,1 // The person will receive 1 Old Violet Box
@ -4902,7 +4902,7 @@ the results array is limited to 10 items.
*delitem "<item name>",<amount>{,<account ID>};
This command will remove a specified amount of items from the invoking/target character.
Like all the item commands, it uses the item ID found inside 'db/(pre-)re/item_db.txt'.
Like all the item commands, it uses the item ID found inside 'db/item_db.yml'.
delitem 502,10; // The person will lose 10 apples
delitem 617,1; // The person will lose 1 Old Violet Box
@ -5239,7 +5239,7 @@ a rune and has the appropriate raw materials in their inventory.
*successremovecards <equipment slot>;
This command will remove all cards of the cards slots defined by item_db.txt
This command will remove all cards of the cards slots defined in db/item_db.yml
from the item found in the specified equipment slot of the invoking character,
create new card items and give them to the character.
If any cards were removed in this manner, it will also show a success effect.

66
doc/yaml/db/item_db.yml Normal file
View File

@ -0,0 +1,66 @@
###########################################################################
# Item Database
###########################################################################
#
# Item Settings
#
###########################################################################
# - Id Item ID.
# AegisName Server name to reference the item in scripts and lookups, should use no spaces.
# Name Name in English for displaying as output.
# Type Item type. (Default: Etc)
# SubType Weapon or Ammo type. (Default: 0)
# Buy Buying price. When not specified, becomes double the sell price. (Default: 0)
# Sell Selling price. When not specified, becomes half the buy price. (Default: 0)
# Weight Item weight. Each 10 is 1 weight. (Default: 0)
# Attack Weapon's attack. (Default: 0)
# MagicAttack Weapon's magic attack. (Default: 0)
# Defense Armor's defense. (Default: 0)
# Range Weapon's attack range. (Default: 0)
# Slots Available slots in item. (Default: 0)
# Jobs Jobs that can equip the item. (Map default is 'All: true')
# Classes Upper class types that can equip the item. (Map default is 'All: true')
# Gender Gender that can equip the item. (Default: Both)
# Locations Equipment's placement. (Default: None)
# WeaponLevel Weapon level. (Default: 0)
# EquipLevelMin Minimum required level to equip. (Default: 0)
# EquipLevelMax Maximum level that can equip. (Default: 0)
# Refineable If the item can be refined. (Default: false)
# View View sprite of an item. (Default: 0)
# AliasName Another item's AegisName that will be sent to the client instead of this item's AegisName. (Default: null)
# Flags: Item flags. (Default: null)
# BuyingStore If the item is available for Buyingstores. (Default: false)
# DeadBranch If the item is a Dead Branch. (Default: false)
# Container If the item is part of a container. (Default: false)
# UniqueId If the item is a unique stack. (Default: false)
# BindOnEquip If the item is bound to the character upon equipping. (Default: false)
# DropAnnounce If the item has a special announcement to self on drop. (Default: false)
# NoConsume If the item is consumed on use. (Default: false)
# DropEffect If the item has a special effect when on the ground. (Default: None)
# Delay: Item use delay. (Default: null)
# Duration Duration of delay in seconds.
# Status Status Change used to track delay. (Default: None)
# Stack: Item stack amount. (Default: null)
# Amount Maximum amount that can be stacked.
# Inventory If the stack is applied to player's inventory. (Default: true)
# Cart If the stack is applied to the player's cart. (Default: false)
# Storage If the stack is applied to the player's storage. (Default: false)
# GuildStorage If the stack is applied to the player's guild storage. (Default: false)
# NoUse: Conditions when the item is unusable. (Default: null)
# Override Group level to override these conditions.
# Sitting If the item can not be used while sitting. (Default: false)
# Trade: Trade restrictions. (Default: null)
# Override Group level to override these conditions.
# NoDrop If the item can not be dropped. (Default: false)
# NoTrade If the item can not be traded. (Default: false)
# TradePartner If the item can not be traded to the player's partner. (Default: false)
# NoSell If the item can not be sold. (Default: false)
# NoCart If the item can not be put in a cart. (Default: false)
# NoStorage If the item can not be put in a storage. (Default: false)
# NoGuildStorage If the item can not be put in a guild storage. (Default: false)
# NoMail If the item can not be put in a mail. (Default: false)
# NoAuction If the item can not be put in an auction. (Default: false)
# Script Script to execute when the item is used/equipped. (Default: null)
# EquipScript Script to execute when the item is equipped. (Default: null)
# UnEquipScript Script to execute when the item is unequipped or when a rental item expires. (Default: null)
###########################################################################

109
doc/yaml/sql/item_db.sql Normal file
View File

@ -0,0 +1,109 @@
#
# Table structure for table `item_db`
#
DROP TABLE IF EXISTS `item_db`;
CREATE TABLE `item_db` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`name_aegis` varchar(50) NOT NULL DEFAULT '',
`name_english` varchar(50) NOT NULL DEFAULT '',
`type` varchar(20) DEFAULT NULL,
`subtype` varchar(20) DEFAULT NULL,
`price_buy` mediumint(8) unsigned DEFAULT NULL,
`price_sell` mediumint(8) unsigned DEFAULT NULL,
`weight` smallint(5) unsigned DEFAULT NULL,
`attack` smallint(5) unsigned DEFAULT NULL,
`defense` smallint(5) unsigned DEFAULT NULL,
`range` tinyint(2) unsigned DEFAULT NULL,
`slots` tinyint(2) unsigned DEFAULT NULL,
`job_all` tinyint(1) unsigned DEFAULT NULL,
`job_acolyte` tinyint(1) unsigned DEFAULT NULL,
`job_alchemist` tinyint(1) unsigned DEFAULT NULL,
`job_archer` tinyint(1) unsigned DEFAULT NULL,
`job_assassin` tinyint(1) unsigned DEFAULT NULL,
`job_barddancer` tinyint(1) unsigned DEFAULT NULL,
`job_blacksmith` tinyint(1) unsigned DEFAULT NULL,
`job_crusader` tinyint(1) unsigned DEFAULT NULL,
`job_gunslinger` tinyint(1) unsigned DEFAULT NULL,
`job_hunter` tinyint(1) unsigned DEFAULT NULL,
`job_knight` tinyint(1) unsigned DEFAULT NULL,
`job_mage` tinyint(1) unsigned DEFAULT NULL,
`job_merchant` tinyint(1) unsigned DEFAULT NULL,
`job_monk` tinyint(1) unsigned DEFAULT NULL,
`job_ninja` tinyint(1) unsigned DEFAULT NULL,
`job_novice` tinyint(1) unsigned DEFAULT NULL,
`job_priest` tinyint(1) unsigned DEFAULT NULL,
`job_rogue` tinyint(1) unsigned DEFAULT NULL,
`job_sage` tinyint(1) unsigned DEFAULT NULL,
`job_soullinker` tinyint(1) unsigned DEFAULT NULL,
`job_stargladiator` tinyint(1) unsigned DEFAULT NULL,
`job_supernovice` tinyint(1) unsigned DEFAULT NULL,
`job_swordman` tinyint(1) unsigned DEFAULT NULL,
`job_taekwon` tinyint(1) unsigned DEFAULT NULL,
`job_thief` tinyint(1) unsigned DEFAULT NULL,
`job_wizard` tinyint(1) unsigned DEFAULT NULL,
`class_all` tinyint(1) unsigned DEFAULT NULL,
`class_normal` tinyint(1) unsigned DEFAULT NULL,
`class_upper` tinyint(1) unsigned DEFAULT NULL,
`class_baby` tinyint(1) unsigned DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`location_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_armor` tinyint(1) unsigned DEFAULT NULL,
`location_right_hand` tinyint(1) unsigned DEFAULT NULL,
`location_left_hand` tinyint(1) unsigned DEFAULT NULL,
`location_garment` tinyint(1) unsigned DEFAULT NULL,
`location_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_costume_garment` tinyint(1) unsigned DEFAULT NULL,
`location_ammo` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_armor` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_weapon` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shield` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`weapon_level` tinyint(1) unsigned DEFAULT NULL,
`equip_level_min` tinyint(3) unsigned DEFAULT NULL,
`equip_level_max` tinyint(3) unsigned DEFAULT NULL,
`refineable` tinyint(1) unsigned DEFAULT NULL,
`view` smallint(5) unsigned DEFAULT NULL,
`alias_name` varchar(50) DEFAULT NULL,
`flag_buyingstore` tinyint(1) unsigned DEFAULT NULL,
`flag_deadbranch` tinyint(1) unsigned DEFAULT NULL,
`flag_container` tinyint(1) unsigned DEFAULT NULL,
`flag_uniqueid` tinyint(1) unsigned DEFAULT NULL,
`flag_bindonequip` tinyint(1) unsigned DEFAULT NULL,
`flag_dropannounce` tinyint(1) unsigned DEFAULT NULL,
`flag_noconsume` tinyint(1) unsigned DEFAULT NULL,
`flag_dropeffect` varchar(20) DEFAULT NULL,
`delay_duration` bigint(20) unsigned DEFAULT NULL,
`delay_status` varchar(30) DEFAULT NULL,
`stack_amount` smallint(5) unsigned DEFAULT NULL,
`stack_inventory` tinyint(1) unsigned DEFAULT NULL,
`stack_cart` tinyint(1) unsigned DEFAULT NULL,
`stack_storage` tinyint(1) unsigned DEFAULT NULL,
`stack_guildstorage` tinyint(1) unsigned DEFAULT NULL,
`nouse_override` smallint(5) unsigned DEFAULT NULL,
`nouse_sitting` tinyint(1) unsigned DEFAULT NULL,
`trade_override` smallint(5) unsigned DEFAULT NULL,
`trade_nodrop` tinyint(1) unsigned DEFAULT NULL,
`trade_notrade` tinyint(1) unsigned DEFAULT NULL,
`trade_tradepartner` tinyint(1) unsigned DEFAULT NULL,
`trade_nosell` tinyint(1) unsigned DEFAULT NULL,
`trade_nocart` tinyint(1) unsigned DEFAULT NULL,
`trade_nostorage` tinyint(1) unsigned DEFAULT NULL,
`trade_noguildstorage` tinyint(1) unsigned DEFAULT NULL,
`trade_nomail` tinyint(1) unsigned DEFAULT NULL,
`trade_noauction` tinyint(1) unsigned DEFAULT NULL,
`script` text,
`equip_script` text,
`unequip_script` text,
PRIMARY KEY (`id`),
UNIQUE INDEX `UniqueAegisName` (`name_aegis`)
) ENGINE=MyISAM;

109
doc/yaml/sql/item_db2.sql Normal file
View File

@ -0,0 +1,109 @@
#
# Table structure for table `item_db2`
#
DROP TABLE IF EXISTS `item_db2`;
CREATE TABLE `item_db2` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`name_aegis` varchar(50) NOT NULL DEFAULT '',
`name_english` varchar(50) NOT NULL DEFAULT '',
`type` varchar(20) DEFAULT NULL,
`subtype` varchar(20) DEFAULT NULL,
`price_buy` mediumint(8) unsigned DEFAULT NULL,
`price_sell` mediumint(8) unsigned DEFAULT NULL,
`weight` smallint(5) unsigned DEFAULT NULL,
`attack` smallint(5) unsigned DEFAULT NULL,
`defense` smallint(5) unsigned DEFAULT NULL,
`range` tinyint(2) unsigned DEFAULT NULL,
`slots` tinyint(2) unsigned DEFAULT NULL,
`job_all` tinyint(1) unsigned DEFAULT NULL,
`job_acolyte` tinyint(1) unsigned DEFAULT NULL,
`job_alchemist` tinyint(1) unsigned DEFAULT NULL,
`job_archer` tinyint(1) unsigned DEFAULT NULL,
`job_assassin` tinyint(1) unsigned DEFAULT NULL,
`job_barddancer` tinyint(1) unsigned DEFAULT NULL,
`job_blacksmith` tinyint(1) unsigned DEFAULT NULL,
`job_crusader` tinyint(1) unsigned DEFAULT NULL,
`job_gunslinger` tinyint(1) unsigned DEFAULT NULL,
`job_hunter` tinyint(1) unsigned DEFAULT NULL,
`job_knight` tinyint(1) unsigned DEFAULT NULL,
`job_mage` tinyint(1) unsigned DEFAULT NULL,
`job_merchant` tinyint(1) unsigned DEFAULT NULL,
`job_monk` tinyint(1) unsigned DEFAULT NULL,
`job_ninja` tinyint(1) unsigned DEFAULT NULL,
`job_novice` tinyint(1) unsigned DEFAULT NULL,
`job_priest` tinyint(1) unsigned DEFAULT NULL,
`job_rogue` tinyint(1) unsigned DEFAULT NULL,
`job_sage` tinyint(1) unsigned DEFAULT NULL,
`job_soullinker` tinyint(1) unsigned DEFAULT NULL,
`job_stargladiator` tinyint(1) unsigned DEFAULT NULL,
`job_supernovice` tinyint(1) unsigned DEFAULT NULL,
`job_swordman` tinyint(1) unsigned DEFAULT NULL,
`job_taekwon` tinyint(1) unsigned DEFAULT NULL,
`job_thief` tinyint(1) unsigned DEFAULT NULL,
`job_wizard` tinyint(1) unsigned DEFAULT NULL,
`class_all` tinyint(1) unsigned DEFAULT NULL,
`class_normal` tinyint(1) unsigned DEFAULT NULL,
`class_upper` tinyint(1) unsigned DEFAULT NULL,
`class_baby` tinyint(1) unsigned DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`location_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_armor` tinyint(1) unsigned DEFAULT NULL,
`location_right_hand` tinyint(1) unsigned DEFAULT NULL,
`location_left_hand` tinyint(1) unsigned DEFAULT NULL,
`location_garment` tinyint(1) unsigned DEFAULT NULL,
`location_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_costume_garment` tinyint(1) unsigned DEFAULT NULL,
`location_ammo` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_armor` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_weapon` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shield` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`weapon_level` tinyint(1) unsigned DEFAULT NULL,
`equip_level_min` tinyint(3) unsigned DEFAULT NULL,
`equip_level_max` tinyint(3) unsigned DEFAULT NULL,
`refineable` tinyint(1) unsigned DEFAULT NULL,
`view` smallint(5) unsigned DEFAULT NULL,
`alias_name` varchar(50) DEFAULT NULL,
`flag_buyingstore` tinyint(1) unsigned DEFAULT NULL,
`flag_deadbranch` tinyint(1) unsigned DEFAULT NULL,
`flag_container` tinyint(1) unsigned DEFAULT NULL,
`flag_uniqueid` tinyint(1) unsigned DEFAULT NULL,
`flag_bindonequip` tinyint(1) unsigned DEFAULT NULL,
`flag_dropannounce` tinyint(1) unsigned DEFAULT NULL,
`flag_noconsume` tinyint(1) unsigned DEFAULT NULL,
`flag_dropeffect` varchar(20) DEFAULT NULL,
`delay_duration` bigint(20) unsigned DEFAULT NULL,
`delay_status` varchar(30) DEFAULT NULL,
`stack_amount` smallint(5) unsigned DEFAULT NULL,
`stack_inventory` tinyint(1) unsigned DEFAULT NULL,
`stack_cart` tinyint(1) unsigned DEFAULT NULL,
`stack_storage` tinyint(1) unsigned DEFAULT NULL,
`stack_guildstorage` tinyint(1) unsigned DEFAULT NULL,
`nouse_override` smallint(5) unsigned DEFAULT NULL,
`nouse_sitting` tinyint(1) unsigned DEFAULT NULL,
`trade_override` smallint(5) unsigned DEFAULT NULL,
`trade_nodrop` tinyint(1) unsigned DEFAULT NULL,
`trade_notrade` tinyint(1) unsigned DEFAULT NULL,
`trade_tradepartner` tinyint(1) unsigned DEFAULT NULL,
`trade_nosell` tinyint(1) unsigned DEFAULT NULL,
`trade_nocart` tinyint(1) unsigned DEFAULT NULL,
`trade_nostorage` tinyint(1) unsigned DEFAULT NULL,
`trade_noguildstorage` tinyint(1) unsigned DEFAULT NULL,
`trade_nomail` tinyint(1) unsigned DEFAULT NULL,
`trade_noauction` tinyint(1) unsigned DEFAULT NULL,
`script` text,
`equip_script` text,
`unequip_script` text,
PRIMARY KEY (`id`),
UNIQUE INDEX `UniqueAegisName` (`name_aegis`)
) ENGINE=MyISAM;

View File

@ -0,0 +1,116 @@
#
# Table structure for table `item_db2_re`
#
DROP TABLE IF EXISTS `item_db2_re`;
CREATE TABLE `item_db2_re` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`name_aegis` varchar(50) NOT NULL DEFAULT '',
`name_english` varchar(50) NOT NULL DEFAULT '',
`type` varchar(20) DEFAULT NULL,
`subtype` varchar(20) DEFAULT NULL,
`price_buy` mediumint(8) unsigned DEFAULT NULL,
`price_sell` mediumint(8) unsigned DEFAULT NULL,
`weight` smallint(5) unsigned DEFAULT NULL,
`attack` smallint(5) unsigned DEFAULT NULL,
`magic_attack` smallint(5) unsigned DEFAULT NULL,
`defense` smallint(5) unsigned DEFAULT NULL,
`range` tinyint(2) unsigned DEFAULT NULL,
`slots` tinyint(2) unsigned DEFAULT NULL,
`job_all` tinyint(1) unsigned DEFAULT NULL,
`job_acolyte` tinyint(1) unsigned DEFAULT NULL,
`job_alchemist` tinyint(1) unsigned DEFAULT NULL,
`job_archer` tinyint(1) unsigned DEFAULT NULL,
`job_assassin` tinyint(1) unsigned DEFAULT NULL,
`job_barddancer` tinyint(1) unsigned DEFAULT NULL,
`job_blacksmith` tinyint(1) unsigned DEFAULT NULL,
`job_crusader` tinyint(1) unsigned DEFAULT NULL,
`job_gunslinger` tinyint(1) unsigned DEFAULT NULL,
`job_hunter` tinyint(1) unsigned DEFAULT NULL,
`job_kagerouoboro` tinyint(1) unsigned DEFAULT NULL,
`job_knight` tinyint(1) unsigned DEFAULT NULL,
`job_mage` tinyint(1) unsigned DEFAULT NULL,
`job_merchant` tinyint(1) unsigned DEFAULT NULL,
`job_monk` tinyint(1) unsigned DEFAULT NULL,
`job_ninja` tinyint(1) unsigned DEFAULT NULL,
`job_novice` tinyint(1) unsigned DEFAULT NULL,
`job_priest` tinyint(1) unsigned DEFAULT NULL,
`job_rebellion` tinyint(1) unsigned DEFAULT NULL,
`job_rogue` tinyint(1) unsigned DEFAULT NULL,
`job_sage` tinyint(1) unsigned DEFAULT NULL,
`job_soullinker` tinyint(1) unsigned DEFAULT NULL,
`job_stargladiator` tinyint(1) unsigned DEFAULT NULL,
`job_summoner` tinyint(1) unsigned DEFAULT NULL,
`job_supernovice` tinyint(1) unsigned DEFAULT NULL,
`job_swordman` tinyint(1) unsigned DEFAULT NULL,
`job_taekwon` tinyint(1) unsigned DEFAULT NULL,
`job_thief` tinyint(1) unsigned DEFAULT NULL,
`job_wizard` tinyint(1) unsigned DEFAULT NULL,
`class_all` tinyint(1) unsigned DEFAULT NULL,
`class_normal` tinyint(1) unsigned DEFAULT NULL,
`class_upper` tinyint(1) unsigned DEFAULT NULL,
`class_baby` tinyint(1) unsigned DEFAULT NULL,
`class_third` tinyint(1) unsigned DEFAULT NULL,
`class_third_upper` tinyint(1) unsigned DEFAULT NULL,
`class_third_baby` tinyint(1) unsigned DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`location_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_armor` tinyint(1) unsigned DEFAULT NULL,
`location_right_hand` tinyint(1) unsigned DEFAULT NULL,
`location_left_hand` tinyint(1) unsigned DEFAULT NULL,
`location_garment` tinyint(1) unsigned DEFAULT NULL,
`location_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_costume_garment` tinyint(1) unsigned DEFAULT NULL,
`location_ammo` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_armor` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_weapon` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shield` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`weapon_level` tinyint(1) unsigned DEFAULT NULL,
`equip_level_min` tinyint(3) unsigned DEFAULT NULL,
`equip_level_max` tinyint(3) unsigned DEFAULT NULL,
`refineable` tinyint(1) unsigned DEFAULT NULL,
`view` smallint(5) unsigned DEFAULT NULL,
`alias_name` varchar(50) DEFAULT NULL,
`flag_buyingstore` tinyint(1) unsigned DEFAULT NULL,
`flag_deadbranch` tinyint(1) unsigned DEFAULT NULL,
`flag_container` tinyint(1) unsigned DEFAULT NULL,
`flag_uniqueid` tinyint(1) unsigned DEFAULT NULL,
`flag_bindonequip` tinyint(1) unsigned DEFAULT NULL,
`flag_dropannounce` tinyint(1) unsigned DEFAULT NULL,
`flag_noconsume` tinyint(1) unsigned DEFAULT NULL,
`flag_dropeffect` varchar(20) DEFAULT NULL,
`delay_duration` bigint(20) unsigned DEFAULT NULL,
`delay_status` varchar(30) DEFAULT NULL,
`stack_amount` smallint(5) unsigned DEFAULT NULL,
`stack_inventory` tinyint(1) unsigned DEFAULT NULL,
`stack_cart` tinyint(1) unsigned DEFAULT NULL,
`stack_storage` tinyint(1) unsigned DEFAULT NULL,
`stack_guildstorage` tinyint(1) unsigned DEFAULT NULL,
`nouse_override` smallint(5) unsigned DEFAULT NULL,
`nouse_sitting` tinyint(1) unsigned DEFAULT NULL,
`trade_override` smallint(5) unsigned DEFAULT NULL,
`trade_nodrop` tinyint(1) unsigned DEFAULT NULL,
`trade_notrade` tinyint(1) unsigned DEFAULT NULL,
`trade_tradepartner` tinyint(1) unsigned DEFAULT NULL,
`trade_nosell` tinyint(1) unsigned DEFAULT NULL,
`trade_nocart` tinyint(1) unsigned DEFAULT NULL,
`trade_nostorage` tinyint(1) unsigned DEFAULT NULL,
`trade_noguildstorage` tinyint(1) unsigned DEFAULT NULL,
`trade_nomail` tinyint(1) unsigned DEFAULT NULL,
`trade_noauction` tinyint(1) unsigned DEFAULT NULL,
`script` text,
`equip_script` text,
`unequip_script` text,
PRIMARY KEY (`id`),
UNIQUE INDEX `UniqueAegisName` (`name_aegis`)
) ENGINE=MyISAM;

View File

@ -0,0 +1,3 @@
#
# Table data for table `item_db`
#

View File

@ -0,0 +1,3 @@
#
# Table data for table `item_db`
#

116
doc/yaml/sql/item_db_re.sql Normal file
View File

@ -0,0 +1,116 @@
#
# Table structure for table `item_db_re`
#
DROP TABLE IF EXISTS `item_db_re`;
CREATE TABLE `item_db_re` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`name_aegis` varchar(50) NOT NULL DEFAULT '',
`name_english` varchar(50) NOT NULL DEFAULT '',
`type` varchar(20) DEFAULT NULL,
`subtype` varchar(20) DEFAULT NULL,
`price_buy` mediumint(8) unsigned DEFAULT NULL,
`price_sell` mediumint(8) unsigned DEFAULT NULL,
`weight` smallint(5) unsigned DEFAULT NULL,
`attack` smallint(5) unsigned DEFAULT NULL,
`magic_attack` smallint(5) unsigned DEFAULT NULL,
`defense` smallint(5) unsigned DEFAULT NULL,
`range` tinyint(2) unsigned DEFAULT NULL,
`slots` tinyint(2) unsigned DEFAULT NULL,
`job_all` tinyint(1) unsigned DEFAULT NULL,
`job_acolyte` tinyint(1) unsigned DEFAULT NULL,
`job_alchemist` tinyint(1) unsigned DEFAULT NULL,
`job_archer` tinyint(1) unsigned DEFAULT NULL,
`job_assassin` tinyint(1) unsigned DEFAULT NULL,
`job_barddancer` tinyint(1) unsigned DEFAULT NULL,
`job_blacksmith` tinyint(1) unsigned DEFAULT NULL,
`job_crusader` tinyint(1) unsigned DEFAULT NULL,
`job_gunslinger` tinyint(1) unsigned DEFAULT NULL,
`job_hunter` tinyint(1) unsigned DEFAULT NULL,
`job_kagerouoboro` tinyint(1) unsigned DEFAULT NULL,
`job_knight` tinyint(1) unsigned DEFAULT NULL,
`job_mage` tinyint(1) unsigned DEFAULT NULL,
`job_merchant` tinyint(1) unsigned DEFAULT NULL,
`job_monk` tinyint(1) unsigned DEFAULT NULL,
`job_ninja` tinyint(1) unsigned DEFAULT NULL,
`job_novice` tinyint(1) unsigned DEFAULT NULL,
`job_priest` tinyint(1) unsigned DEFAULT NULL,
`job_rebellion` tinyint(1) unsigned DEFAULT NULL,
`job_rogue` tinyint(1) unsigned DEFAULT NULL,
`job_sage` tinyint(1) unsigned DEFAULT NULL,
`job_soullinker` tinyint(1) unsigned DEFAULT NULL,
`job_stargladiator` tinyint(1) unsigned DEFAULT NULL,
`job_summoner` tinyint(1) unsigned DEFAULT NULL,
`job_supernovice` tinyint(1) unsigned DEFAULT NULL,
`job_swordman` tinyint(1) unsigned DEFAULT NULL,
`job_taekwon` tinyint(1) unsigned DEFAULT NULL,
`job_thief` tinyint(1) unsigned DEFAULT NULL,
`job_wizard` tinyint(1) unsigned DEFAULT NULL,
`class_all` tinyint(1) unsigned DEFAULT NULL,
`class_normal` tinyint(1) unsigned DEFAULT NULL,
`class_upper` tinyint(1) unsigned DEFAULT NULL,
`class_baby` tinyint(1) unsigned DEFAULT NULL,
`class_third` tinyint(1) unsigned DEFAULT NULL,
`class_third_upper` tinyint(1) unsigned DEFAULT NULL,
`class_third_baby` tinyint(1) unsigned DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`location_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_armor` tinyint(1) unsigned DEFAULT NULL,
`location_right_hand` tinyint(1) unsigned DEFAULT NULL,
`location_left_hand` tinyint(1) unsigned DEFAULT NULL,
`location_garment` tinyint(1) unsigned DEFAULT NULL,
`location_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_costume_garment` tinyint(1) unsigned DEFAULT NULL,
`location_ammo` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_armor` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_weapon` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shield` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`weapon_level` tinyint(1) unsigned DEFAULT NULL,
`equip_level_min` tinyint(3) unsigned DEFAULT NULL,
`equip_level_max` tinyint(3) unsigned DEFAULT NULL,
`refineable` tinyint(1) unsigned DEFAULT NULL,
`view` smallint(5) unsigned DEFAULT NULL,
`alias_name` varchar(50) DEFAULT NULL,
`flag_buyingstore` tinyint(1) unsigned DEFAULT NULL,
`flag_deadbranch` tinyint(1) unsigned DEFAULT NULL,
`flag_container` tinyint(1) unsigned DEFAULT NULL,
`flag_uniqueid` tinyint(1) unsigned DEFAULT NULL,
`flag_bindonequip` tinyint(1) unsigned DEFAULT NULL,
`flag_dropannounce` tinyint(1) unsigned DEFAULT NULL,
`flag_noconsume` tinyint(1) unsigned DEFAULT NULL,
`flag_dropeffect` varchar(20) DEFAULT NULL,
`delay_duration` bigint(20) unsigned DEFAULT NULL,
`delay_status` varchar(30) DEFAULT NULL,
`stack_amount` smallint(5) unsigned DEFAULT NULL,
`stack_inventory` tinyint(1) unsigned DEFAULT NULL,
`stack_cart` tinyint(1) unsigned DEFAULT NULL,
`stack_storage` tinyint(1) unsigned DEFAULT NULL,
`stack_guildstorage` tinyint(1) unsigned DEFAULT NULL,
`nouse_override` smallint(5) unsigned DEFAULT NULL,
`nouse_sitting` tinyint(1) unsigned DEFAULT NULL,
`trade_override` smallint(5) unsigned DEFAULT NULL,
`trade_nodrop` tinyint(1) unsigned DEFAULT NULL,
`trade_notrade` tinyint(1) unsigned DEFAULT NULL,
`trade_tradepartner` tinyint(1) unsigned DEFAULT NULL,
`trade_nosell` tinyint(1) unsigned DEFAULT NULL,
`trade_nocart` tinyint(1) unsigned DEFAULT NULL,
`trade_nostorage` tinyint(1) unsigned DEFAULT NULL,
`trade_noguildstorage` tinyint(1) unsigned DEFAULT NULL,
`trade_nomail` tinyint(1) unsigned DEFAULT NULL,
`trade_noauction` tinyint(1) unsigned DEFAULT NULL,
`script` text,
`equip_script` text,
`unequip_script` text,
PRIMARY KEY (`id`),
UNIQUE INDEX `UniqueAegisName` (`name_aegis`)
) ENGINE=MyISAM;

View File

@ -0,0 +1,3 @@
#
# Table data for table `item_db_re`
#

View File

@ -0,0 +1,3 @@
#
# Table data for table `item_db_re`
#

View File

@ -0,0 +1,3 @@
#
# Table data for table `item_db_re`
#

View File

@ -0,0 +1,3 @@
#
# Table data for table `item_db`
#

View File

@ -41,9 +41,9 @@ OnInit:
.@item_db$ = "item_db";
}
freeloop 1;
.@total = query_sql( "SELECT DISTINCT LEFT( `name_japanese`, 1 ) AS alphabets FROM `"+ .@item_db$ +"` WHERE `type` = " + IT_CARD + " AND `id` IN ( SELECT DISTINCT `dropcardid` FROM `"+ .@mob_db$ +"` WHERE ~(`MODE`) & " + MD_MVP + " ) ORDER BY alphabets;", .@alphabet$ );
.@total = query_sql( "SELECT DISTINCT LEFT( `name_english`, 1 ) AS alphabets FROM `"+ .@item_db$ +"` WHERE `type` = " + IT_CARD + " AND `id` IN ( SELECT DISTINCT `dropcardid` FROM `"+ .@mob_db$ +"` WHERE ~(`MODE`) & " + MD_MVP + " ) ORDER BY alphabets;", .@alphabet$ );
for ( .@i = 0; .@i < .@total; .@i++ ) {
.@nb = query_sql( "SELECT `"+ .@item_db$ +"`.`id` FROM `"+ .@item_db$ +"` WHERE `type` = " + IT_CARD + " AND LEFT( `name_japanese`, 1 ) = '"+ .@alphabet$[.@i] +"' AND `id` IN ( SELECT DISTINCT `dropcardid` FROM `"+ .@mob_db$ +"` WHERE ~(`MODE`) & " + MD_MVP + " ) ORDER BY `name_japanese` LIMIT 128;", .@id );
.@nb = query_sql( "SELECT `"+ .@item_db$ +"`.`id` FROM `"+ .@item_db$ +"` WHERE `type` = " + IT_CARD + " AND LEFT( `name_english`, 1 ) = '"+ .@alphabet$[.@i] +"' AND `id` IN ( SELECT DISTINCT `dropcardid` FROM `"+ .@mob_db$ +"` WHERE ~(`MODE`) & " + MD_MVP + " ) ORDER BY `name_english` LIMIT 128;", .@id );
if (.@nb > 0) {
.alphabet$[.@size_alphabet++] = .@alphabet$[.@i];
.alphabet_menu$ = .alphabet_menu$ + .@alphabet$[.@i] +" Cards:";

View File

@ -77,6 +77,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "csv2yaml", "src\tool\csv2ya
{352B45B3-FE88-4431-9D89-48CF811446DB} = {352B45B3-FE88-4431-9D89-48CF811446DB}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yaml2sql", "src\tool\yaml2sql.vcxproj", "{CDBBB260-B245-44EC-80FB-3F9421885E40}"
ProjectSection(ProjectDependencies) = postProject
{61D6A599-6BED-4154-A9FC-40553BD972E0} = {61D6A599-6BED-4154-A9FC-40553BD972E0}
{352B45B3-FE88-4431-9D89-48CF811446DB} = {352B45B3-FE88-4431-9D89-48CF811446DB}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Win32 = Debug|Win32
@ -157,6 +163,14 @@ Global
{5A9059F2-4933-49A2-BEE6-CC67F66FA070}.Release|Win32.Build.0 = Release|Win32
{5A9059F2-4933-49A2-BEE6-CC67F66FA070}.Release|x64.ActiveCfg = Release|x64
{5A9059F2-4933-49A2-BEE6-CC67F66FA070}.Release|x64.Build.0 = Release|x64
{CDBBB260-B245-44EC-80FB-3F9421885E40}.Debug|Win32.ActiveCfg = Debug|Win32
{CDBBB260-B245-44EC-80FB-3F9421885E40}.Debug|Win32.Build.0 = Debug|Win32
{CDBBB260-B245-44EC-80FB-3F9421885E40}.Debug|x64.ActiveCfg = Debug|x64
{CDBBB260-B245-44EC-80FB-3F9421885E40}.Debug|x64.Build.0 = Debug|x64
{CDBBB260-B245-44EC-80FB-3F9421885E40}.Release|Win32.ActiveCfg = Release|Win32
{CDBBB260-B245-44EC-80FB-3F9421885E40}.Release|Win32.Build.0 = Release|Win32
{CDBBB260-B245-44EC-80FB-3F9421885E40}.Release|x64.ActiveCfg = Release|x64
{CDBBB260-B245-44EC-80FB-3F9421885E40}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -172,6 +186,7 @@ Global
{FC4C071B-2C26-4B03-948A-335C94A88B5E} = {9F328FE9-129D-4C0C-820B-BE4AA5996652}
{61D6A599-6BED-4154-A9FC-40553BD972E0} = {6ABA1767-6242-4CA0-BA22-A30972DC8918}
{5A9059F2-4933-49A2-BEE6-CC67F66FA070} = {9F328FE9-129D-4C0C-820B-BE4AA5996652}
{CDBBB260-B245-44EC-80FB-3F9421885E40} = {9F328FE9-129D-4C0C-820B-BE4AA5996652}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {026DA20F-820C-40AA-983E-0E231EA90AD5}

66
sql-files/README.md Normal file
View File

@ -0,0 +1,66 @@
# SQL Imports
## Explanation of SQL import files
The files in this directory are basic SQL table building scripts. The contained scripts are needed for initial installs as well as subsequent updates.
### New Install
---
For a new install, the following needs to be imported into the 'ragnarok' schema:
Note: The schema name is defined in `conf/inter_athena.conf::map_server_db`.
* main.sql - Contains tables for normal server usage.
* roulette_default_data.sql - Contains data for the client's roulette game.
For a new install, the following needs to be imported into the 'log' schema:
Note: The schema name is defined in `conf/inter_athena.conf::log_db_db`.
* logs.sql - Contains tables for logging of server events.
If your server is setup to read SQL database data, import the following:
Note: If `conf/inter_athena.conf::use_sql_db` is set to yes continue with these imports else these can be skipped. Not all files have to be imported, only the ones that apply to the same mode as the server being ran.
* item_cash_db.sql - Used for client's cash shop.
* item_cash_db2.sql - Used for client's cash shop (import).
* item_db.sql - Contains __pre-renewal__ item data table structure.
* item_db_equip.sql - Contains __pre-renewal__ equipment item data.
* item_db_etc.sql - Contains __pre-renewal__ etcetera item data.
* item_db2.sql - Contains __pre-renewal__ item data (import).
* item_db_re.sql - Contains __renewal__ item data table structure.
* item_db_re_equip.sql - Contains __renewal__ equipment item data.
* item_db_re_etc.sql - Contains __renewal__ etcetera item data.
* item_db_re_usable.sql - Contains __renewal__ usable item data.
* item_db_usable.sql - Contains __pre-renewal__ usable item data.
* item_db2_re.sql - Contains __renewal__ item data (import).
* mob_db.sql - Contains __pre-renewal__ mob data.
* mob_db2.sql - Contains __pre-renewal__ mob data (import).
* mob_db_re.sql - Contains __renewal__ mob data.
* mob_db2_re.sql - Contains __renewal__ mob data (import).
* mob_skill_db.sql - Contains __pre-renewal__ mob skill data.
* mob_skill_db2.sql - Contains __pre-renewal__ mob skill data (import).
* mob_skill_db_re.sql - Contains __renewal__ mob skill data.
* mob_skill_db2_re.sql - Contains __renewal__ mob skill data (import).
### Updates
---
Over the course of time new features and optimizations will take place. This may require SQL changes to happen. In the `upgrades` folder will be upgrade files with an attached date.
These imports only have to executed if an update has occurred after the initial installation. Many times a SQL error will be displayed on the server console stating the format differs from what is required.
### Compatibility
---
The `compatibility` folder contains SQL views which are used with helping control panels or websites grab prevalent data for a table that may have changed structure.
These are optional imports but website data such as item databases will not work properly when using the new YAML format without these views:
* item_db_compat.sql - Creates a view for the item_db.
* item_db2_compat.sql - Creates a view for the item_db2 (import).
* item_db_re_compat.sql - Creates a view for the item_db_re.
* item_db2_re_compat.sql - Creates a view for the item_db2_re (import).
### Tools
---
The `tools` folder contains some simple adjustments if needed for an administrator's personal preferences.
* convert_engine_innodb.sql - Converts the SQL table engine setting to InnoDB.
* convert_engine_myiasm.sql - Converts the SQL table engine setting to MyISAM.
* convert_passwords.sql - Converts the login table's password value to MD5.

View File

@ -0,0 +1,200 @@
#
# View structure for view `item_db2_compat`
#
DROP VIEW IF EXISTS `item_db2_compat`;
CREATE VIEW `item_db2_compat` AS (
SELECT
`id`,
`name_aegis` AS `name_english`,
`name_english` AS `name_japanese`,
case
when `type` = 'Healing' then
0
when `type` = 'Usable' then
2
when `type` = 'Etc' then
3
when `type` = 'Armor' then
4
when `type` = 'Weapon' then
5
when `type` = 'Card' then
6
when `type` = 'Petegg' then
7
when `type` = 'Petarmor' then
8
when `type` = 'Ammo' then
10
when `type` = 'Delayconsume' then
11
when `type` = 'Shadowgear' then
12
when `type` = 'Cash' then
18
else
3 -- etc
end as `type`,
`price_buy`,
`price_sell`,
`weight`,
`attack`,
`defense` as `defence`,
`range`,
`slots`,
case
when `job_all` > 0 then
4294967295
else
IF(
IF( `job_acolyte` > 0, 16, 0 ) +
IF( `job_alchemist` > 0, 262144, 0 ) +
IF( `job_archer` > 0, 8, 0 ) +
IF( `job_assassin` > 0, 4096, 0 ) +
IF( `job_barddancer` > 0, 524288, 0 ) +
IF( `job_blacksmith` > 0, 1024, 0 ) +
IF( `job_crusader` > 0, 16384, 0 ) +
IF( `job_gunslinger` > 0, 16777216, 0 ) +
IF( `job_hunter` > 0, 2048, 0 ) +
IF( `job_knight` > 0, 128, 0 ) +
IF( `job_mage` > 0, 4, 0 ) +
IF( `job_merchant` > 0, 32, 0 ) +
IF( `job_monk` > 0, 32768, 0 ) +
IF( `job_ninja` > 0, 33554432, 0 ) +
IF( `job_novice` > 0 OR `job_supernovice` > 0, 1, 0 ) +
IF( `job_priest` > 0, 256, 0 ) +
IF( `job_rogue` > 0, 131072, 0 ) +
IF( `job_sage` > 0, 65536, 0 ) +
IF( `job_soullinker` > 0, 8388608, 0 ) +
IF( `job_stargladiator` > 0, 4194304, 0 ) +
IF( `job_swordman` > 0, 2, 0 ) +
IF( `job_taekwon` > 0, 2097152, 0 ) +
IF( `job_thief` > 0, 64, 0 ) +
IF( `job_wizard` > 0, 512, 0 ) > 0
,
IF( `job_acolyte` > 0, 16, 0 ) +
IF( `job_alchemist` > 0, 262144, 0 ) +
IF( `job_archer` > 0, 8, 0 ) +
IF( `job_assassin` > 0, 4096, 0 ) +
IF( `job_barddancer` > 0, 524288, 0 ) +
IF( `job_blacksmith` > 0, 1024, 0 ) +
IF( `job_crusader` > 0, 16384, 0 ) +
IF( `job_gunslinger` > 0, 16777216, 0 ) +
IF( `job_hunter` > 0, 2048, 0 ) +
IF( `job_knight` > 0, 128, 0 ) +
IF( `job_mage` > 0, 4, 0 ) +
IF( `job_merchant` > 0, 32, 0 ) +
IF( `job_monk` > 0, 32768, 0 ) +
IF( `job_ninja` > 0, 33554432, 0 ) +
IF( `job_novice` > 0 OR `job_supernovice` > 0, 1, 0 ) +
IF( `job_priest` > 0, 256, 0 ) +
IF( `job_rogue` > 0, 131072, 0 ) +
IF( `job_sage` > 0, 65536, 0 ) +
IF( `job_soullinker` > 0, 8388608, 0 ) +
IF( `job_stargladiator` > 0, 4194304, 0 ) +
IF( `job_swordman` > 0, 2, 0 ) +
IF( `job_taekwon` > 0, 2097152, 0 ) +
IF( `job_thief` > 0, 64, 0 ) +
IF( `job_wizard` > 0, 512, 0 )
,
null
)
end as `equip_jobs`,
case
when `class_all` > 0 then
7
else
IF(
IF( `class_normal` > 0, 1, 0 ) +
IF( `class_upper` > 0, 2, 0 ) +
IF( `class_baby` > 0, 4, 0 ) > 0
,
IF( `class_normal` > 0, 1, 0 ) +
IF( `class_upper` > 0, 2, 0 ) +
IF( `class_baby` > 0, 4, 0 )
,
null
)
end as `equip_upper`,
case
when `gender` = 'Female' then
0
when `gender` = 'Male' then
1
when `gender` = 'Both' then
2
else
null
end as `equip_genders`,
IF(
IF( `location_head_top` > 0, 256, 0 ) +
IF( `location_head_mid` > 0, 512, 0 ) +
IF( `location_head_low` > 0, 1, 0 ) +
IF( `location_armor` > 0, 16, 0 ) +
IF( `location_right_hand` > 0, 2, 0 ) +
IF( `location_left_hand` > 0, 32, 0 ) +
IF( `location_garment` > 0, 4, 0 ) +
IF( `location_shoes` > 0, 64, 0 ) +
IF( `location_right_accessory` > 0, 8, 0 ) +
IF( `location_left_accessory` > 0, 128, 0 ) +
IF( `location_costume_head_top` > 0, 1024, 0 ) +
IF( `location_costume_head_mid` > 0, 2048, 0 ) +
IF( `location_costume_head_low` > 0, 4096, 0 ) +
IF( `location_costume_garment` > 0, 8192, 0 ) +
IF( `location_ammo` > 0, 32768, 0 ) +
IF( `location_shadow_armor` > 0, 65536, 0 ) +
IF( `location_shadow_weapon` > 0, 131072, 0 ) +
IF( `location_shadow_shield` > 0, 262144, 0 ) +
IF( `location_shadow_shoes` > 0, 524288, 0 ) +
IF( `location_shadow_right_accessory` > 0, 1048576, 0 ) +
IF( `location_shadow_left_accessory` > 0, 2097152, 0 ) > 0
,
IF( `location_head_top` > 0, 256, 0 ) +
IF( `location_head_mid` > 0, 512, 0 ) +
IF( `location_head_low` > 0, 1, 0 ) +
IF( `location_armor` > 0, 16, 0 ) +
IF( `location_right_hand` > 0, 2, 0 ) +
IF( `location_left_hand` > 0, 32, 0 ) +
IF( `location_garment` > 0, 4, 0 ) +
IF( `location_shoes` > 0, 64, 0 ) +
IF( `location_right_accessory` > 0, 8, 0 ) +
IF( `location_left_accessory` > 0, 128, 0 ) +
IF( `location_costume_head_top` > 0, 1024, 0 ) +
IF( `location_costume_head_mid` > 0, 2048, 0 ) +
IF( `location_costume_head_low` > 0, 4096, 0 ) +
IF( `location_costume_garment` > 0, 8192, 0 ) +
IF( `location_ammo` > 0, 32768, 0 ) +
IF( `location_shadow_armor` > 0, 65536, 0 ) +
IF( `location_shadow_weapon` > 0, 131072, 0 ) +
IF( `location_shadow_shield` > 0, 262144, 0 ) +
IF( `location_shadow_shoes` > 0, 524288, 0 ) +
IF( `location_shadow_right_accessory` > 0, 1048576, 0 ) +
IF( `location_shadow_left_accessory` > 0, 2097152, 0 )
,
null
)
as `equip_locations`,
`weapon_level`,
case
when `equip_level_min` > 0 and `equip_level_max` > 0 then
CONCAT( `equip_level_min`, ':', `equip_level_max` )
when `equip_level_min` > 0 then
`equip_level_min`
when `equip_level_min` > 0 then
`equip_level_min`
else
null
end as `equip_level`,
`refineable`,
case
when `view` > 0 then
`view`
else
null
end as `view`,
`script`,
`equip_script`,
`unequip_script`
FROM `item_db2`
);

View File

@ -0,0 +1,221 @@
#
# View structure for view `item_db2_re_compat`
#
DROP VIEW IF EXISTS `item_db2_re_compat`;
CREATE VIEW `item_db2_re_compat` AS (
SELECT
`id`,
`name_aegis` AS `name_english`,
`name_english` AS `name_japanese`,
case
when `type` = 'Healing' then
0
when `type` = 'Usable' then
2
when `type` = 'Etc' then
3
when `type` = 'Armor' then
4
when `type` = 'Weapon' then
5
when `type` = 'Card' then
6
when `type` = 'Petegg' then
7
when `type` = 'Petarmor' then
8
when `type` = 'Ammo' then
10
when `type` = 'Delayconsume' then
11
when `type` = 'Shadowgear' then
12
when `type` = 'Cash' then
18
else
3 -- etc
end as `type`,
`price_buy`,
`price_sell`,
`weight`,
case
when `attack` > 0 and `magic_attack` > 0 then
CONCAT( `attack`, ':', `magic_attack` )
when `attack` > 0 then
`attack`
when `magic_attack` > 0 then
CONCAT( '0:', `magic_attack` )
else
null
end as `atk:matk`,
`defense` as `defence`,
`range`,
`slots`,
case
when `job_all` > 0 then
4294967295
else
IF(
IF( `job_acolyte` > 0, 16, 0 ) +
IF( `job_alchemist` > 0, 262144, 0 ) +
IF( `job_archer` > 0, 8, 0 ) +
IF( `job_assassin` > 0, 4096, 0 ) +
IF( `job_barddancer` > 0, 524288, 0 ) +
IF( `job_blacksmith` > 0, 1024, 0 ) +
IF( `job_crusader` > 0, 16384, 0 ) +
IF( `job_gunslinger` > 0, 16777216, 0 ) +
IF( `job_hunter` > 0, 2048, 0 ) +
IF( `job_kagerouoboro` > 0, 536870912, 0 ) +
IF( `job_knight` > 0, 128, 0 ) +
IF( `job_mage` > 0, 4, 0 ) +
IF( `job_merchant` > 0, 32, 0 ) +
IF( `job_monk` > 0, 32768, 0 ) +
IF( `job_ninja` > 0, 33554432, 0 ) +
IF( `job_novice` > 0 OR `job_supernovice` > 0, 1, 0 ) +
IF( `job_priest` > 0, 256, 0 ) +
IF( `job_rebellion` > 0, 1073741824, 0 ) +
IF( `job_rogue` > 0, 131072, 0 ) +
IF( `job_sage` > 0, 65536, 0 ) +
IF( `job_soullinker` > 0, 8388608, 0 ) +
IF( `job_stargladiator` > 0, 4194304, 0 ) +
IF( `job_summoner` > 0, 2147483648, 0 ) +
IF( `job_swordman` > 0, 2, 0 ) +
IF( `job_taekwon` > 0, 2097152, 0 ) +
IF( `job_thief` > 0, 64, 0 ) +
IF( `job_wizard` > 0, 512, 0 ) > 0
,
IF( `job_acolyte` > 0, 16, 0 ) +
IF( `job_alchemist` > 0, 262144, 0 ) +
IF( `job_archer` > 0, 8, 0 ) +
IF( `job_assassin` > 0, 4096, 0 ) +
IF( `job_barddancer` > 0, 524288, 0 ) +
IF( `job_blacksmith` > 0, 1024, 0 ) +
IF( `job_crusader` > 0, 16384, 0 ) +
IF( `job_gunslinger` > 0, 16777216, 0 ) +
IF( `job_hunter` > 0, 2048, 0 ) +
IF( `job_kagerouoboro` > 0, 536870912, 0 ) +
IF( `job_knight` > 0, 128, 0 ) +
IF( `job_mage` > 0, 4, 0 ) +
IF( `job_merchant` > 0, 32, 0 ) +
IF( `job_monk` > 0, 32768, 0 ) +
IF( `job_ninja` > 0, 33554432, 0 ) +
IF( `job_novice` > 0 OR `job_supernovice` > 0, 1, 0 ) +
IF( `job_priest` > 0, 256, 0 ) +
IF( `job_rebellion` > 0, 1073741824, 0 ) +
IF( `job_rogue` > 0, 131072, 0 ) +
IF( `job_sage` > 0, 65536, 0 ) +
IF( `job_soullinker` > 0, 8388608, 0 ) +
IF( `job_stargladiator` > 0, 4194304, 0 ) +
IF( `job_summoner` > 0, 2147483648, 0 ) +
IF( `job_swordman` > 0, 2, 0 ) +
IF( `job_taekwon` > 0, 2097152, 0 ) +
IF( `job_thief` > 0, 64, 0 ) +
IF( `job_wizard` > 0, 512, 0 )
,
null
)
end as `equip_jobs`,
case
when `class_all` > 0 then
63
else
IF(
IF( `class_normal` > 0, 1, 0 ) +
IF( `class_upper` > 0, 2, 0 ) +
IF( `class_baby` > 0, 4, 0 ) +
IF( `class_third` > 0, 8, 0 ) +
IF( `class_third_upper` > 0, 16, 0 ) +
IF( `class_third_baby` > 0, 32, 0 ) > 0
,
IF( `class_normal` > 0, 1, 0 ) +
IF( `class_upper` > 0, 2, 0 ) +
IF( `class_baby` > 0, 4, 0 ) +
IF( `class_third` > 0, 8, 0 ) +
IF( `class_third_upper` > 0, 16, 0 ) +
IF( `class_third_baby` > 0, 32, 0 )
,
null
)
end as `equip_upper`,
case
when `gender` = 'Female' then
0
when `gender` = 'Male' then
1
when `gender` = 'Both' then
2
else
null
end as `equip_genders`,
IF(
IF( `location_head_top` > 0, 256, 0 ) +
IF( `location_head_mid` > 0, 512, 0 ) +
IF( `location_head_low` > 0, 1, 0 ) +
IF( `location_armor` > 0, 16, 0 ) +
IF( `location_right_hand` > 0, 2, 0 ) +
IF( `location_left_hand` > 0, 32, 0 ) +
IF( `location_garment` > 0, 4, 0 ) +
IF( `location_shoes` > 0, 64, 0 ) +
IF( `location_right_accessory` > 0, 8, 0 ) +
IF( `location_left_accessory` > 0, 128, 0 ) +
IF( `location_costume_head_top` > 0, 1024, 0 ) +
IF( `location_costume_head_mid` > 0, 2048, 0 ) +
IF( `location_costume_head_low` > 0, 4096, 0 ) +
IF( `location_costume_garment` > 0, 8192, 0 ) +
IF( `location_ammo` > 0, 32768, 0 ) +
IF( `location_shadow_armor` > 0, 65536, 0 ) +
IF( `location_shadow_weapon` > 0, 131072, 0 ) +
IF( `location_shadow_shield` > 0, 262144, 0 ) +
IF( `location_shadow_shoes` > 0, 524288, 0 ) +
IF( `location_shadow_right_accessory` > 0, 1048576, 0 ) +
IF( `location_shadow_left_accessory` > 0, 2097152, 0 ) > 0
,
IF( `location_head_top` > 0, 256, 0 ) +
IF( `location_head_mid` > 0, 512, 0 ) +
IF( `location_head_low` > 0, 1, 0 ) +
IF( `location_armor` > 0, 16, 0 ) +
IF( `location_right_hand` > 0, 2, 0 ) +
IF( `location_left_hand` > 0, 32, 0 ) +
IF( `location_garment` > 0, 4, 0 ) +
IF( `location_shoes` > 0, 64, 0 ) +
IF( `location_right_accessory` > 0, 8, 0 ) +
IF( `location_left_accessory` > 0, 128, 0 ) +
IF( `location_costume_head_top` > 0, 1024, 0 ) +
IF( `location_costume_head_mid` > 0, 2048, 0 ) +
IF( `location_costume_head_low` > 0, 4096, 0 ) +
IF( `location_costume_garment` > 0, 8192, 0 ) +
IF( `location_ammo` > 0, 32768, 0 ) +
IF( `location_shadow_armor` > 0, 65536, 0 ) +
IF( `location_shadow_weapon` > 0, 131072, 0 ) +
IF( `location_shadow_shield` > 0, 262144, 0 ) +
IF( `location_shadow_shoes` > 0, 524288, 0 ) +
IF( `location_shadow_right_accessory` > 0, 1048576, 0 ) +
IF( `location_shadow_left_accessory` > 0, 2097152, 0 )
,
null
)
as `equip_locations`,
`weapon_level`,
case
when `equip_level_min` > 0 and `equip_level_max` > 0 then
CONCAT( `equip_level_min`, ':', `equip_level_max` )
when `equip_level_min` > 0 then
`equip_level_min`
when `equip_level_min` > 0 then
`equip_level_min`
else
null
end as `equip_level`,
`refineable`,
case
when `view` > 0 then
`view`
else
null
end as `view`,
`script`,
`equip_script`,
`unequip_script`
FROM `item_db2_re`
);

View File

@ -0,0 +1,200 @@
#
# View structure for view `item_db_compat`
#
DROP VIEW IF EXISTS `item_db_compat`;
CREATE VIEW `item_db_compat` AS (
SELECT
`id`,
`name_aegis` AS `name_english`,
`name_english` AS `name_japanese`,
case
when `type` = 'Healing' then
0
when `type` = 'Usable' then
2
when `type` = 'Etc' then
3
when `type` = 'Armor' then
4
when `type` = 'Weapon' then
5
when `type` = 'Card' then
6
when `type` = 'Petegg' then
7
when `type` = 'Petarmor' then
8
when `type` = 'Ammo' then
10
when `type` = 'Delayconsume' then
11
when `type` = 'Shadowgear' then
12
when `type` = 'Cash' then
18
else
3 -- etc
end as `type`,
`price_buy`,
`price_sell`,
`weight`,
`attack`,
`defense` as `defence`,
`range`,
`slots`,
case
when `job_all` > 0 then
4294967295
else
IF(
IF( `job_acolyte` > 0, 16, 0 ) +
IF( `job_alchemist` > 0, 262144, 0 ) +
IF( `job_archer` > 0, 8, 0 ) +
IF( `job_assassin` > 0, 4096, 0 ) +
IF( `job_barddancer` > 0, 524288, 0 ) +
IF( `job_blacksmith` > 0, 1024, 0 ) +
IF( `job_crusader` > 0, 16384, 0 ) +
IF( `job_gunslinger` > 0, 16777216, 0 ) +
IF( `job_hunter` > 0, 2048, 0 ) +
IF( `job_knight` > 0, 128, 0 ) +
IF( `job_mage` > 0, 4, 0 ) +
IF( `job_merchant` > 0, 32, 0 ) +
IF( `job_monk` > 0, 32768, 0 ) +
IF( `job_ninja` > 0, 33554432, 0 ) +
IF( `job_novice` > 0 OR `job_supernovice` > 0, 1, 0 ) +
IF( `job_priest` > 0, 256, 0 ) +
IF( `job_rogue` > 0, 131072, 0 ) +
IF( `job_sage` > 0, 65536, 0 ) +
IF( `job_soullinker` > 0, 8388608, 0 ) +
IF( `job_stargladiator` > 0, 4194304, 0 ) +
IF( `job_swordman` > 0, 2, 0 ) +
IF( `job_taekwon` > 0, 2097152, 0 ) +
IF( `job_thief` > 0, 64, 0 ) +
IF( `job_wizard` > 0, 512, 0 ) > 0
,
IF( `job_acolyte` > 0, 16, 0 ) +
IF( `job_alchemist` > 0, 262144, 0 ) +
IF( `job_archer` > 0, 8, 0 ) +
IF( `job_assassin` > 0, 4096, 0 ) +
IF( `job_barddancer` > 0, 524288, 0 ) +
IF( `job_blacksmith` > 0, 1024, 0 ) +
IF( `job_crusader` > 0, 16384, 0 ) +
IF( `job_gunslinger` > 0, 16777216, 0 ) +
IF( `job_hunter` > 0, 2048, 0 ) +
IF( `job_knight` > 0, 128, 0 ) +
IF( `job_mage` > 0, 4, 0 ) +
IF( `job_merchant` > 0, 32, 0 ) +
IF( `job_monk` > 0, 32768, 0 ) +
IF( `job_ninja` > 0, 33554432, 0 ) +
IF( `job_novice` > 0 OR `job_supernovice` > 0, 1, 0 ) +
IF( `job_priest` > 0, 256, 0 ) +
IF( `job_rogue` > 0, 131072, 0 ) +
IF( `job_sage` > 0, 65536, 0 ) +
IF( `job_soullinker` > 0, 8388608, 0 ) +
IF( `job_stargladiator` > 0, 4194304, 0 ) +
IF( `job_swordman` > 0, 2, 0 ) +
IF( `job_taekwon` > 0, 2097152, 0 ) +
IF( `job_thief` > 0, 64, 0 ) +
IF( `job_wizard` > 0, 512, 0 )
,
null
)
end as `equip_jobs`,
case
when `class_all` > 0 then
7
else
IF(
IF( `class_normal` > 0, 1, 0 ) +
IF( `class_upper` > 0, 2, 0 ) +
IF( `class_baby` > 0, 4, 0 ) > 0
,
IF( `class_normal` > 0, 1, 0 ) +
IF( `class_upper` > 0, 2, 0 ) +
IF( `class_baby` > 0, 4, 0 )
,
null
)
end as `equip_upper`,
case
when `gender` = 'Female' then
0
when `gender` = 'Male' then
1
when `gender` = 'Both' then
2
else
null
end as `equip_genders`,
IF(
IF( `location_head_top` > 0, 256, 0 ) +
IF( `location_head_mid` > 0, 512, 0 ) +
IF( `location_head_low` > 0, 1, 0 ) +
IF( `location_armor` > 0, 16, 0 ) +
IF( `location_right_hand` > 0, 2, 0 ) +
IF( `location_left_hand` > 0, 32, 0 ) +
IF( `location_garment` > 0, 4, 0 ) +
IF( `location_shoes` > 0, 64, 0 ) +
IF( `location_right_accessory` > 0, 8, 0 ) +
IF( `location_left_accessory` > 0, 128, 0 ) +
IF( `location_costume_head_top` > 0, 1024, 0 ) +
IF( `location_costume_head_mid` > 0, 2048, 0 ) +
IF( `location_costume_head_low` > 0, 4096, 0 ) +
IF( `location_costume_garment` > 0, 8192, 0 ) +
IF( `location_ammo` > 0, 32768, 0 ) +
IF( `location_shadow_armor` > 0, 65536, 0 ) +
IF( `location_shadow_weapon` > 0, 131072, 0 ) +
IF( `location_shadow_shield` > 0, 262144, 0 ) +
IF( `location_shadow_shoes` > 0, 524288, 0 ) +
IF( `location_shadow_right_accessory` > 0, 1048576, 0 ) +
IF( `location_shadow_left_accessory` > 0, 2097152, 0 ) > 0
,
IF( `location_head_top` > 0, 256, 0 ) +
IF( `location_head_mid` > 0, 512, 0 ) +
IF( `location_head_low` > 0, 1, 0 ) +
IF( `location_armor` > 0, 16, 0 ) +
IF( `location_right_hand` > 0, 2, 0 ) +
IF( `location_left_hand` > 0, 32, 0 ) +
IF( `location_garment` > 0, 4, 0 ) +
IF( `location_shoes` > 0, 64, 0 ) +
IF( `location_right_accessory` > 0, 8, 0 ) +
IF( `location_left_accessory` > 0, 128, 0 ) +
IF( `location_costume_head_top` > 0, 1024, 0 ) +
IF( `location_costume_head_mid` > 0, 2048, 0 ) +
IF( `location_costume_head_low` > 0, 4096, 0 ) +
IF( `location_costume_garment` > 0, 8192, 0 ) +
IF( `location_ammo` > 0, 32768, 0 ) +
IF( `location_shadow_armor` > 0, 65536, 0 ) +
IF( `location_shadow_weapon` > 0, 131072, 0 ) +
IF( `location_shadow_shield` > 0, 262144, 0 ) +
IF( `location_shadow_shoes` > 0, 524288, 0 ) +
IF( `location_shadow_right_accessory` > 0, 1048576, 0 ) +
IF( `location_shadow_left_accessory` > 0, 2097152, 0 )
,
null
)
as `equip_locations`,
`weapon_level`,
case
when `equip_level_min` > 0 and `equip_level_max` > 0 then
CONCAT( `equip_level_min`, ':', `equip_level_max` )
when `equip_level_min` > 0 then
`equip_level_min`
when `equip_level_min` > 0 then
`equip_level_min`
else
null
end as `equip_level`,
`refineable`,
case
when `view` > 0 then
`view`
else
null
end as `view`,
`script`,
`equip_script`,
`unequip_script`
FROM `item_db`
);

View File

@ -0,0 +1,221 @@
#
# View structure for view `item_db_re_compat`
#
DROP VIEW IF EXISTS `item_db_re_compat`;
CREATE VIEW `item_db_re_compat` AS (
SELECT
`id`,
`name_aegis` AS `name_english`,
`name_english` AS `name_japanese`,
case
when `type` = 'Healing' then
0
when `type` = 'Usable' then
2
when `type` = 'Etc' then
3
when `type` = 'Armor' then
4
when `type` = 'Weapon' then
5
when `type` = 'Card' then
6
when `type` = 'Petegg' then
7
when `type` = 'Petarmor' then
8
when `type` = 'Ammo' then
10
when `type` = 'Delayconsume' then
11
when `type` = 'Shadowgear' then
12
when `type` = 'Cash' then
18
else
3 -- etc
end as `type`,
`price_buy`,
`price_sell`,
`weight`,
case
when `attack` > 0 and `magic_attack` > 0 then
CONCAT( `attack`, ':', `magic_attack` )
when `attack` > 0 then
`attack`
when `magic_attack` > 0 then
CONCAT( '0:', `magic_attack` )
else
null
end as `atk:matk`,
`defense` as `defence`,
`range`,
`slots`,
case
when `job_all` > 0 then
4294967295
else
IF(
IF( `job_acolyte` > 0, 16, 0 ) +
IF( `job_alchemist` > 0, 262144, 0 ) +
IF( `job_archer` > 0, 8, 0 ) +
IF( `job_assassin` > 0, 4096, 0 ) +
IF( `job_barddancer` > 0, 524288, 0 ) +
IF( `job_blacksmith` > 0, 1024, 0 ) +
IF( `job_crusader` > 0, 16384, 0 ) +
IF( `job_gunslinger` > 0, 16777216, 0 ) +
IF( `job_hunter` > 0, 2048, 0 ) +
IF( `job_kagerouoboro` > 0, 536870912, 0 ) +
IF( `job_knight` > 0, 128, 0 ) +
IF( `job_mage` > 0, 4, 0 ) +
IF( `job_merchant` > 0, 32, 0 ) +
IF( `job_monk` > 0, 32768, 0 ) +
IF( `job_ninja` > 0, 33554432, 0 ) +
IF( `job_novice` > 0 OR `job_supernovice` > 0, 1, 0 ) +
IF( `job_priest` > 0, 256, 0 ) +
IF( `job_rebellion` > 0, 1073741824, 0 ) +
IF( `job_rogue` > 0, 131072, 0 ) +
IF( `job_sage` > 0, 65536, 0 ) +
IF( `job_soullinker` > 0, 8388608, 0 ) +
IF( `job_stargladiator` > 0, 4194304, 0 ) +
IF( `job_summoner` > 0, 2147483648, 0 ) +
IF( `job_swordman` > 0, 2, 0 ) +
IF( `job_taekwon` > 0, 2097152, 0 ) +
IF( `job_thief` > 0, 64, 0 ) +
IF( `job_wizard` > 0, 512, 0 ) > 0
,
IF( `job_acolyte` > 0, 16, 0 ) +
IF( `job_alchemist` > 0, 262144, 0 ) +
IF( `job_archer` > 0, 8, 0 ) +
IF( `job_assassin` > 0, 4096, 0 ) +
IF( `job_barddancer` > 0, 524288, 0 ) +
IF( `job_blacksmith` > 0, 1024, 0 ) +
IF( `job_crusader` > 0, 16384, 0 ) +
IF( `job_gunslinger` > 0, 16777216, 0 ) +
IF( `job_hunter` > 0, 2048, 0 ) +
IF( `job_kagerouoboro` > 0, 536870912, 0 ) +
IF( `job_knight` > 0, 128, 0 ) +
IF( `job_mage` > 0, 4, 0 ) +
IF( `job_merchant` > 0, 32, 0 ) +
IF( `job_monk` > 0, 32768, 0 ) +
IF( `job_ninja` > 0, 33554432, 0 ) +
IF( `job_novice` > 0 OR `job_supernovice` > 0, 1, 0 ) +
IF( `job_priest` > 0, 256, 0 ) +
IF( `job_rebellion` > 0, 1073741824, 0 ) +
IF( `job_rogue` > 0, 131072, 0 ) +
IF( `job_sage` > 0, 65536, 0 ) +
IF( `job_soullinker` > 0, 8388608, 0 ) +
IF( `job_stargladiator` > 0, 4194304, 0 ) +
IF( `job_summoner` > 0, 2147483648, 0 ) +
IF( `job_swordman` > 0, 2, 0 ) +
IF( `job_taekwon` > 0, 2097152, 0 ) +
IF( `job_thief` > 0, 64, 0 ) +
IF( `job_wizard` > 0, 512, 0 )
,
null
)
end as `equip_jobs`,
case
when `class_all` > 0 then
63
else
IF(
IF( `class_normal` > 0, 1, 0 ) +
IF( `class_upper` > 0, 2, 0 ) +
IF( `class_baby` > 0, 4, 0 ) +
IF( `class_third` > 0, 8, 0 ) +
IF( `class_third_upper` > 0, 16, 0 ) +
IF( `class_third_baby` > 0, 32, 0 ) > 0
,
IF( `class_normal` > 0, 1, 0 ) +
IF( `class_upper` > 0, 2, 0 ) +
IF( `class_baby` > 0, 4, 0 ) +
IF( `class_third` > 0, 8, 0 ) +
IF( `class_third_upper` > 0, 16, 0 ) +
IF( `class_third_baby` > 0, 32, 0 )
,
null
)
end as `equip_upper`,
case
when `gender` = 'Female' then
0
when `gender` = 'Male' then
1
when `gender` = 'Both' then
2
else
null
end as `equip_genders`,
IF(
IF( `location_head_top` > 0, 256, 0 ) +
IF( `location_head_mid` > 0, 512, 0 ) +
IF( `location_head_low` > 0, 1, 0 ) +
IF( `location_armor` > 0, 16, 0 ) +
IF( `location_right_hand` > 0, 2, 0 ) +
IF( `location_left_hand` > 0, 32, 0 ) +
IF( `location_garment` > 0, 4, 0 ) +
IF( `location_shoes` > 0, 64, 0 ) +
IF( `location_right_accessory` > 0, 8, 0 ) +
IF( `location_left_accessory` > 0, 128, 0 ) +
IF( `location_costume_head_top` > 0, 1024, 0 ) +
IF( `location_costume_head_mid` > 0, 2048, 0 ) +
IF( `location_costume_head_low` > 0, 4096, 0 ) +
IF( `location_costume_garment` > 0, 8192, 0 ) +
IF( `location_ammo` > 0, 32768, 0 ) +
IF( `location_shadow_armor` > 0, 65536, 0 ) +
IF( `location_shadow_weapon` > 0, 131072, 0 ) +
IF( `location_shadow_shield` > 0, 262144, 0 ) +
IF( `location_shadow_shoes` > 0, 524288, 0 ) +
IF( `location_shadow_right_accessory` > 0, 1048576, 0 ) +
IF( `location_shadow_left_accessory` > 0, 2097152, 0 ) > 0
,
IF( `location_head_top` > 0, 256, 0 ) +
IF( `location_head_mid` > 0, 512, 0 ) +
IF( `location_head_low` > 0, 1, 0 ) +
IF( `location_armor` > 0, 16, 0 ) +
IF( `location_right_hand` > 0, 2, 0 ) +
IF( `location_left_hand` > 0, 32, 0 ) +
IF( `location_garment` > 0, 4, 0 ) +
IF( `location_shoes` > 0, 64, 0 ) +
IF( `location_right_accessory` > 0, 8, 0 ) +
IF( `location_left_accessory` > 0, 128, 0 ) +
IF( `location_costume_head_top` > 0, 1024, 0 ) +
IF( `location_costume_head_mid` > 0, 2048, 0 ) +
IF( `location_costume_head_low` > 0, 4096, 0 ) +
IF( `location_costume_garment` > 0, 8192, 0 ) +
IF( `location_ammo` > 0, 32768, 0 ) +
IF( `location_shadow_armor` > 0, 65536, 0 ) +
IF( `location_shadow_weapon` > 0, 131072, 0 ) +
IF( `location_shadow_shield` > 0, 262144, 0 ) +
IF( `location_shadow_shoes` > 0, 524288, 0 ) +
IF( `location_shadow_right_accessory` > 0, 1048576, 0 ) +
IF( `location_shadow_left_accessory` > 0, 2097152, 0 )
,
null
)
as `equip_locations`,
`weapon_level`,
case
when `equip_level_min` > 0 and `equip_level_max` > 0 then
CONCAT( `equip_level_min`, ':', `equip_level_max` )
when `equip_level_min` > 0 then
`equip_level_min`
when `equip_level_min` > 0 then
`equip_level_min`
else
null
end as `equip_level`,
`refineable`,
case
when `view` > 0 then
`view`
else
null
end as `view`,
`script`,
`equip_script`,
`unequip_script`
FROM `item_db_re`
);

File diff suppressed because it is too large Load Diff

View File

@ -5,92 +5,171 @@
DROP TABLE IF EXISTS `item_db2`;
CREATE TABLE `item_db2` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`name_aegis` varchar(50) NOT NULL DEFAULT '',
`name_english` varchar(50) NOT NULL DEFAULT '',
`name_japanese` varchar(50) NOT NULL DEFAULT '',
`type` tinyint(2) unsigned NOT NULL DEFAULT '0',
`type` varchar(20) DEFAULT NULL,
`subtype` varchar(20) DEFAULT NULL,
`price_buy` mediumint(8) unsigned DEFAULT NULL,
`price_sell` mediumint(8) unsigned DEFAULT NULL,
`weight` smallint(5) unsigned NOT NULL DEFAULT '0',
`weight` smallint(5) unsigned DEFAULT NULL,
`attack` smallint(5) unsigned DEFAULT NULL,
`defence` smallint(5) unsigned DEFAULT NULL,
`defense` smallint(5) unsigned DEFAULT NULL,
`range` tinyint(2) unsigned DEFAULT NULL,
`slots` tinyint(2) unsigned DEFAULT NULL,
`equip_jobs` bigint(20) unsigned DEFAULT NULL,
`equip_upper` tinyint(2) unsigned DEFAULT NULL,
`equip_genders` tinyint(1) unsigned DEFAULT NULL,
`equip_locations` mediumint(7) unsigned DEFAULT NULL,
`job_all` tinyint(1) unsigned DEFAULT NULL,
`job_acolyte` tinyint(1) unsigned DEFAULT NULL,
`job_alchemist` tinyint(1) unsigned DEFAULT NULL,
`job_archer` tinyint(1) unsigned DEFAULT NULL,
`job_assassin` tinyint(1) unsigned DEFAULT NULL,
`job_barddancer` tinyint(1) unsigned DEFAULT NULL,
`job_blacksmith` tinyint(1) unsigned DEFAULT NULL,
`job_crusader` tinyint(1) unsigned DEFAULT NULL,
`job_gunslinger` tinyint(1) unsigned DEFAULT NULL,
`job_hunter` tinyint(1) unsigned DEFAULT NULL,
`job_knight` tinyint(1) unsigned DEFAULT NULL,
`job_mage` tinyint(1) unsigned DEFAULT NULL,
`job_merchant` tinyint(1) unsigned DEFAULT NULL,
`job_monk` tinyint(1) unsigned DEFAULT NULL,
`job_ninja` tinyint(1) unsigned DEFAULT NULL,
`job_novice` tinyint(1) unsigned DEFAULT NULL,
`job_priest` tinyint(1) unsigned DEFAULT NULL,
`job_rogue` tinyint(1) unsigned DEFAULT NULL,
`job_sage` tinyint(1) unsigned DEFAULT NULL,
`job_soullinker` tinyint(1) unsigned DEFAULT NULL,
`job_stargladiator` tinyint(1) unsigned DEFAULT NULL,
`job_supernovice` tinyint(1) unsigned DEFAULT NULL,
`job_swordman` tinyint(1) unsigned DEFAULT NULL,
`job_taekwon` tinyint(1) unsigned DEFAULT NULL,
`job_thief` tinyint(1) unsigned DEFAULT NULL,
`job_wizard` tinyint(1) unsigned DEFAULT NULL,
`class_all` tinyint(1) unsigned DEFAULT NULL,
`class_normal` tinyint(1) unsigned DEFAULT NULL,
`class_upper` tinyint(1) unsigned DEFAULT NULL,
`class_baby` tinyint(1) unsigned DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`location_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_armor` tinyint(1) unsigned DEFAULT NULL,
`location_right_hand` tinyint(1) unsigned DEFAULT NULL,
`location_left_hand` tinyint(1) unsigned DEFAULT NULL,
`location_garment` tinyint(1) unsigned DEFAULT NULL,
`location_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_costume_garment` tinyint(1) unsigned DEFAULT NULL,
`location_ammo` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_armor` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_weapon` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shield` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`weapon_level` tinyint(1) unsigned DEFAULT NULL,
`equip_level` tinyint(3) unsigned DEFAULT NULL,
`equip_level_min` tinyint(3) unsigned DEFAULT NULL,
`equip_level_max` tinyint(3) unsigned DEFAULT NULL,
`refineable` tinyint(1) unsigned DEFAULT NULL,
`view` smallint(5) unsigned DEFAULT NULL,
`alias_name` varchar(50) DEFAULT NULL,
`flag_buyingstore` tinyint(1) unsigned DEFAULT NULL,
`flag_deadbranch` tinyint(1) unsigned DEFAULT NULL,
`flag_container` tinyint(1) unsigned DEFAULT NULL,
`flag_uniqueid` tinyint(1) unsigned DEFAULT NULL,
`flag_bindonequip` tinyint(1) unsigned DEFAULT NULL,
`flag_dropannounce` tinyint(1) unsigned DEFAULT NULL,
`flag_noconsume` tinyint(1) unsigned DEFAULT NULL,
`flag_dropeffect` varchar(20) DEFAULT NULL,
`delay_duration` bigint(20) unsigned DEFAULT NULL,
`delay_status` varchar(30) DEFAULT NULL,
`stack_amount` smallint(5) unsigned DEFAULT NULL,
`stack_inventory` tinyint(1) unsigned DEFAULT NULL,
`stack_cart` tinyint(1) unsigned DEFAULT NULL,
`stack_storage` tinyint(1) unsigned DEFAULT NULL,
`stack_guildstorage` tinyint(1) unsigned DEFAULT NULL,
`nouse_override` smallint(5) unsigned DEFAULT NULL,
`nouse_sitting` tinyint(1) unsigned DEFAULT NULL,
`trade_override` smallint(5) unsigned DEFAULT NULL,
`trade_nodrop` tinyint(1) unsigned DEFAULT NULL,
`trade_notrade` tinyint(1) unsigned DEFAULT NULL,
`trade_tradepartner` tinyint(1) unsigned DEFAULT NULL,
`trade_nosell` tinyint(1) unsigned DEFAULT NULL,
`trade_nocart` tinyint(1) unsigned DEFAULT NULL,
`trade_nostorage` tinyint(1) unsigned DEFAULT NULL,
`trade_noguildstorage` tinyint(1) unsigned DEFAULT NULL,
`trade_nomail` tinyint(1) unsigned DEFAULT NULL,
`trade_noauction` tinyint(1) unsigned DEFAULT NULL,
`script` text,
`equip_script` text,
`unequip_script` text,
PRIMARY KEY (`id`),
UNIQUE INDEX `UniqueAegisName` (`name_english`)
UNIQUE INDEX `UniqueAegisName` (`name_aegis`)
) ENGINE=MyISAM;
# Items Additional Database
#
# Structure of Database:
#REPLACE INTO `item_db2` VALUES ( ID,'AegisName','Name',Type,Buy,Sell,Weight,ATK,DEF,Range,Slots,Job,Class,Gender,Loc,wLV,eLV,Refineable,View,'Script','OnEquip_Script','OnUnequip_Script');
#
# THQ Quest Items
#=============================================================
#REPLACE INTO `item_db2` VALUES (7950,'THG_Membership','THG Membership',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2` VALUES (7951,'Token_Bag','Token Bag',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2` VALUES (1998,'Jeramiah\'s_Jur','Jeramiah\'s Jur',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2` VALUES (1999,'Zed\'s_Staff','Zed\'s Staff',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_sell`,`weight`,`alias_name`) VALUES (1998,'Jeramiah\'s_Jur','Jeramiah\'s Jur','Etc',10,10,'Jur');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_sell`,`weight`,`alias_name`) VALUES (1999,'Zed\'s_Staff','Zed\'s Staff','Etc',10,10,'Staff_Of_Soul');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_sell`,`weight`,`alias_name`) VALUES (7950,'THG_Membership','THG Membership','Etc',10,10,'Foolishness_Of_Blind');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_sell`,`weight`,`alias_name`) VALUES (7951,'Token_Bag','Token Bag','Etc',10,10,'Leather_Bag_Of_Infinity');
# Official Event Items that had their Effects removed after the event was completed
#REPLACE INTO `item_db2` VALUES (585,'Wurst','Brusti',11,2,NULL,40,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemheal rand(15,20),0; itemskill "PR_MAGNIFICAT",3;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (679,'Gold_Pill','Pilule',0,5000,NULL,300,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 50,50;',NULL,NULL);
#=============================================================
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (585,'Wurst','Brusti','Delayconsume',2,40,'itemheal rand(15,20),0; itemskill "PR_MAGNIFICAT",3;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (679,'Gold_Pill','Pilule','Healing',5000,300,'percentheal 50,50;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`location_right_accessory`,`location_left_accessory`,`script`) VALUES (2681,'Republic_Ring','Republic Anniversary Ring','Armor',20,100,true,true,'bonus bAllStats,3;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5134,'Pumpkin_Hat','Pumpkin-Head','Armor',20,200,2,true,true,206,'bonus2 bSubRace,RC_Demon,5;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5136,'Santa\'s_Hat_','Louise\'s Santa Hat','Armor',20,100,3,true,true,20,'bonus bMdef,1; bonus bLuk,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",3,50; bonus3 bAutoSpellWhenHit,"AL_BLESSING",10,50;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5145,'Carnival_Joker_Jester','Carnival Jester','Armor',10,100,true,true,89,'bonus bAllStats,3;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5147,'Baseball_Cap','Baseball Cap','Armor',200,3,true,true,216,'bonus2 bExpAddRace,RC_Boss,50; bonus2 bExpAddRace,RC_NonBoss,50;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5201,'Party_Hat_B','2nd Anniversary Party Hat','Armor',20,300,3,true,true,144,'bonus bAllStats,3;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5202,'Pumpkin_Hat_','Pumpkin Hat','Armor',20,200,2,true,true,206,'bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`location_head_low`,`view`,`script`) VALUES (5204,'Event_Pierrot_Nose','Rudolf\'s Red Nose','Armor',20,100,true,49,'bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5264,'Aussie_Flag_Hat','Australian Flag Hat','Armor',20,500,4,true,true,304,'bonus bAllStats,2;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5356,'Pumpkin_Hat_H','Pumpkin Hat','Armor',20,200,2,true,true,206,'bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus2 bMagicAddRace,RC_Demon,5;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`slots`,`location_head_top`,`equip_level_min`,`refineable`,`view`,`script`) VALUES (5384,'Santa_Hat_1','Twin Pompom By JB','Armor',20,200,2,1,true,20,true,390,'bonus bLuk,3; bonus2 bResEff,Eff_Curse,2000; bonus bVariableCastrate,-2; bonus bAspdRate,4; bonus2 bAddMonsterDropItem,539,100; bonus2 bAddMonsterDropItem,529,200; bonus2 bAddMonsterDropItem,530,200; autobonus "{ bonus bCritical,10; }",10,5000;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_low`,`view`,`script`) VALUES (5811,'Santa_Beard','Santa Beard','Armor',20,100,5,true,25,'bonus2 bSubRace,RC_Brute,5; bonus2 bSubRace,RC_Player_Doram,5;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`script`) VALUES (11702,'Moon_Cookie','Moon Cookie','Delayconsume',10,'sc_end SC_POISON; sc_end SC_SILENCE; sc_end SC_BLIND; sc_end SC_CONFUSION; sc_end SC_CURSE; sc_end SC_HALLUCINATION; itemskill "AL_BLESSING",7;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (12131,'Lucky_Potion','Lucky Potion','Healing',2,100,'sc_start SC_LUKFOOD,180000,15;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (12143,'Red_Can','Red Can','Usable',50000,300,'percentheal 25,25;');
#REPLACE INTO `item_db2` VALUES (2681,'Republic_Ring','Republic Anniversary Ring',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus bAllStats,3;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5134,'Pumpkin_Hat','Pumpkin-Head',4,20,NULL,200,NULL,2,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,206,'bonus2 bSubRace,RC_Demon,5;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5136,'Santa\'s_Hat_','Louise\'s Santa Hat',4,20,NULL,100,NULL,3,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,20,'bonus bMdef,1; bonus bLuk,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",3,50; bonus3 bAutoSpellWhenHit,"AL_BLESSING",10,50;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5145,'Carnival_Joker_Jester','Carnival Jester',4,10,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,89,'bonus bAllStats,3;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5147,'Baseball_Cap','Baseball Cap',4,0,NULL,200,NULL,3,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,216,'bonus2 bExpAddRace,RC_Boss,50; bonus2 bExpAddRace,RC_NonBoss,50;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5201,'Party_Hat_B','2nd Anniversary Party Hat',4,20,NULL,300,NULL,3,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,144,'bonus bAllStats,3;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5202,'Pumpkin_Hat_','Pumpkin Hat',4,20,NULL,200,NULL,2,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,206,'bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5204,'Event_Pierrot_Nose','Rudolf\'s Red Nose',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,1,NULL,0,0,49,'bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5264,'Aussie_Flag_Hat','Australian Flag Hat',4,20,NULL,500,NULL,4,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,304,'bonus bAllStats,2;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5356,'Pumpkin_Hat_H','Pumpkin Hat',4,20,NULL,200,NULL,2,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,206,'bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus2 bMagicAddRace,RC_Demon,5;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5811,'Santa_Beard','Santa Beard',4,20,NULL,100,NULL,5,NULL,0,0xFFFFFFFF,7,2,1,NULL,0,0,25,'bonus2 bSubRace,RC_Brute,5;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (11702,'Moon_Cookie','Moon Cookie',11,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_end SC_Poison; sc_end SC_Silence; sc_end SC_Blind; sc_end SC_Confusion; sc_end SC_Curse; sc_end SC_Hallucination; itemskill "AL_BLESSING",7;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (12131,'Lucky_Potion','Lucky Potion',0,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_LUKFood,180000,15;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (12143,'Red_Can','Red Can',2,50000,NULL,300,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 25,25;',NULL,NULL);
#Event effect: Summon monster? Probably Rice_Cake. x_x
#REPLACE INTO `item_db2` VALUES (12199,'Rice_Scroll','Rice Scroll',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2` VALUES (12200,'Event_Cake','Event Cake',2,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemskill "PR_MAGNIFICAT",3;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (12238,'New_Year_Rice_Cake_1','New Year Rice Cake',0,20,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 20,15; sc_start SC_STRFood,1200000,3; sc_start SC_INTFood,1200000,3; sc_start SC_LUKFood,1200000,3; sc_start SC_SpeedUp1,5000,0;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (12239,'New_Year_Rice_Cake_2','New Year Rice Cake',0,20,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 20,15; sc_start SC_DEXFood,1200000,3; sc_start SC_AGIFood,1200000,3; sc_start SC_VITFood,1200000,3; sc_start SC_SpeedUp1,5000,0;',NULL,NULL);
# Event effect: Summon monster? Probably Rice_Cake. x_x
#=============================================================
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`) VALUES (12199,'Rice_Scroll','Rice Scroll','Usable');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (12200,'Event_Cake','Event Cake','Usable',20,50,'itemskill "PR_MAGNIFICAT",3;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (12238,'New_Year_Rice_Cake_1','New Year Rice Cake','Healing',20,100,'percentheal 20,15; sc_start SC_STRFOOD,1200000,3; sc_start SC_INTFOOD,1200000,3; sc_start SC_LUKFOOD,1200000,3; sc_start SC_SPEEDUP1,5000,0;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (12239,'New_Year_Rice_Cake_2','New Year Rice Cake','Healing',20,100,'percentheal 20,15; sc_start SC_DEXFOOD,1200000,3; sc_start SC_AGIFOOD,1200000,3; sc_start SC_VITFOOD,1200000,3; sc_start SC_SPEEDUP1,5000,0;');
# iRO St. Patrick's Day Event 2008
#=============================================================
#REPLACE INTO `item_db2` VALUES (12715,'Black_Treasure_Chest','Black Treasure Chest',2,0,NULL,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'callfunc "F_08stpattyseventbox";',NULL,NULL);
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`alias_name`) VALUES (7915,'Copper_Coin_','Bronze Coin','Etc',10,'Copper_Coin');
# iRO Valentine's Day Event 2009
#=============================================================
#REPLACE INTO `item_db2` VALUES (12742,'Valentine_Gift_Box_M','Valentine Gift Box',2,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 7946,1;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (12743,'Valentine_Gift_Box_F','Valentine Gift Box',2,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 7947,1;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (12744,'Chocolate_Box','Chocolate Box',2,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 558,1;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (14466,'Valentine\'s_Emblem_Box','Valentine\'s Emblem Box',2,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 5817,1;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (7946,'Gold_Ring_Of_Valentine','Gold Ring Of Valentine',3,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2` VALUES (7947,'Silver_Ring_Of_Valentine','Silver Ring Of Valentine',3,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2` VALUES (7948,'Box','Box',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2` VALUES (5817,'Valentine\'s_Emblem','Valentine\'s Emblem',4,10,NULL,0,NULL,3,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus bAtkRate,3; bonus bMatkRate,3; bonus bAllStats,2; bonus bFlee,10; bonus bAspd,1; bonus bMdef,3; bonus2 bSkillAtk,"AL_HEAL",10; bonus2 bSkillHeal,"AL_HEAL",10; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bAddItemHealRate,IG_Potion,10;',NULL,NULL);
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`alias_name`) VALUES (7916,'Silver_Coin_','Silver Coin','Etc',10,'Silver_Coin');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`alias_name`,`script`) VALUES (12715,'Black_Treasure_Chest','Black Treasure Chest','Usable',200,'Treasure_Box_','callfunc "F_08stpattyseventbox";');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`defense`,`location_right_accessory`,`location_left_accessory`,`script`) VALUES (5817,'Valentine\'s_Emblem','Valentine\'s Emblem','Armor',10,3,true,true,'bonus bAtkRate,3; bonus bMatkRate,3; bonus bAllStats,2; bonus bFlee,10; bonus bAspd,1; bonus bMdef,3; bonus2 bSkillAtk,"AL_HEAL",10; bonus2 bSkillHeal,"AL_HEAL",10; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bAddItemGroupHealRate,IG_Potion,10;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`) VALUES (7946,'Gold_Ring_Of_Valentine','Gold Ring Of Valentine','Etc',10);
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`) VALUES (7947,'Silver_Ring_Of_Valentine','Silver Ring Of Valentine','Etc',10);
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`) VALUES (7948,'Box','Box','Etc',10,10);
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`script`) VALUES (12742,'Valentine_Gift_Box_M','Valentine Gift Box','Usable',10,'getitem 7946,1;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`script`) VALUES (12743,'Valentine_Gift_Box_F','Valentine Gift Box','Usable',10,'getitem 7947,1;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`script`) VALUES (12744,'Chocolate_Box','Chocolate Box','Usable',10,'getitem 558,1;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`script`) VALUES (14466,'Valentine\'s_Emblem_Box','Valentine\'s Emblem Box','Usable',10,'getitem 5817,1;');
# iRO Halloween Event 2009
#=============================================================
#REPLACE INTO `item_db2` VALUES (5668,'Weird_Pumpkin_Hat','Weird Pumpkin Hat',4,20,NULL,0,NULL,5,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,206,'bonus bMdef,5; bonus2 bAddMonsterDropItem,12192,2500;',NULL,NULL);
#REPLACE INTO `item_db2` VALUES (6298,'Crushed_Pumpkin','Crushed Pumpkin',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2` VALUES (6299,'Worn_Fabric','Worn Fabric',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5668,'Weird_Pumpkin_Hat','Weird Pumpkin Hat','Armor',20,5,true,true,206,'bonus bMdef,5; bonus2 bAddMonsterDropItem,12192,2500;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`) VALUES (6298,'Crushed_Pumpkin','Crushed Pumpkin','Etc');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`) VALUES (6299,'Worn_Fabric','Worn Fabric','Etc');
# Old Tuxedo and Wedding Dress, will display the outfit when worn.
#==================================================================
#REPLACE INTO `item_db2` VALUES (2338,'Wedding_Dress','Wedding Dress',4,43000,NULL,500,NULL,0,NULL,0,0xFFFFFFFE,7,0,16,NULL,0,1,0,NULL,'setoption Option_Wedding,1;','setoption Option_Wedding,0;');
#REPLACE INTO `item_db2` VALUES (7170,'Tuxedo','Tuxedo',4,43000,NULL,10,NULL,0,NULL,0,0xFFFFFFFE,7,1,16,NULL,0,1,0,NULL,'setoption Option_Wedding,1;','setoption Option_Wedding,0;');
#=============================================================
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`job_all`,`job_novice`,`location_armor`,`refineable`,`equip_script`,`unequip_script`) VALUES (2338,'Wedding_Dress','Wedding Dress','Armor',43000,500,true,false,true,true,'sc_start SC_WEDDING,INFINITE_TICK,0;','sc_end SC_WEDDING;');
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`job_all`,`job_novice`,`gender`,`location_armor`,`refineable`,`equip_script`,`unequip_script`) VALUES (7170,'Tuxedo','Tuxedo','Armor',43000,10,true,false,'Male',true,true,'sc_start SC_WEDDING,INFINITE_TICK,0;','sc_end SC_WEDDING;');
# Non-kRO Eden Group Mark effect
#=============================================================
REPLACE INTO `item_db2` (`id`,`name_aegis`,`name_english`,`type`,`script`) VALUES (22508,'Para_Team_Mark_','Eden Group Mark','Delayconsume','unitskilluseid getcharid(3),"AL_TELEPORT",3;');

View File

@ -5,92 +5,178 @@
DROP TABLE IF EXISTS `item_db2_re`;
CREATE TABLE `item_db2_re` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`name_aegis` varchar(50) NOT NULL DEFAULT '',
`name_english` varchar(50) NOT NULL DEFAULT '',
`name_japanese` varchar(50) NOT NULL DEFAULT '',
`type` tinyint(2) unsigned NOT NULL DEFAULT '0',
`type` varchar(20) DEFAULT NULL,
`subtype` varchar(20) DEFAULT NULL,
`price_buy` mediumint(8) unsigned DEFAULT NULL,
`price_sell` mediumint(8) unsigned DEFAULT NULL,
`weight` smallint(5) unsigned NOT NULL DEFAULT '0',
`atk:matk` varchar(11) DEFAULT NULL,
`defence` smallint(5) unsigned DEFAULT NULL,
`weight` smallint(5) unsigned DEFAULT NULL,
`attack` smallint(5) unsigned DEFAULT NULL,
`magic_attack` smallint(5) unsigned DEFAULT NULL,
`defense` smallint(5) unsigned DEFAULT NULL,
`range` tinyint(2) unsigned DEFAULT NULL,
`slots` tinyint(2) unsigned DEFAULT NULL,
`equip_jobs` bigint(20) unsigned DEFAULT NULL,
`equip_upper` tinyint(2) unsigned DEFAULT NULL,
`equip_genders` tinyint(1) unsigned DEFAULT NULL,
`equip_locations` mediumint(7) unsigned DEFAULT NULL,
`job_all` tinyint(1) unsigned DEFAULT NULL,
`job_acolyte` tinyint(1) unsigned DEFAULT NULL,
`job_alchemist` tinyint(1) unsigned DEFAULT NULL,
`job_archer` tinyint(1) unsigned DEFAULT NULL,
`job_assassin` tinyint(1) unsigned DEFAULT NULL,
`job_barddancer` tinyint(1) unsigned DEFAULT NULL,
`job_blacksmith` tinyint(1) unsigned DEFAULT NULL,
`job_crusader` tinyint(1) unsigned DEFAULT NULL,
`job_gunslinger` tinyint(1) unsigned DEFAULT NULL,
`job_hunter` tinyint(1) unsigned DEFAULT NULL,
`job_kagerouoboro` tinyint(1) unsigned DEFAULT NULL,
`job_knight` tinyint(1) unsigned DEFAULT NULL,
`job_mage` tinyint(1) unsigned DEFAULT NULL,
`job_merchant` tinyint(1) unsigned DEFAULT NULL,
`job_monk` tinyint(1) unsigned DEFAULT NULL,
`job_ninja` tinyint(1) unsigned DEFAULT NULL,
`job_novice` tinyint(1) unsigned DEFAULT NULL,
`job_priest` tinyint(1) unsigned DEFAULT NULL,
`job_rebellion` tinyint(1) unsigned DEFAULT NULL,
`job_rogue` tinyint(1) unsigned DEFAULT NULL,
`job_sage` tinyint(1) unsigned DEFAULT NULL,
`job_soullinker` tinyint(1) unsigned DEFAULT NULL,
`job_stargladiator` tinyint(1) unsigned DEFAULT NULL,
`job_summoner` tinyint(1) unsigned DEFAULT NULL,
`job_supernovice` tinyint(1) unsigned DEFAULT NULL,
`job_swordman` tinyint(1) unsigned DEFAULT NULL,
`job_taekwon` tinyint(1) unsigned DEFAULT NULL,
`job_thief` tinyint(1) unsigned DEFAULT NULL,
`job_wizard` tinyint(1) unsigned DEFAULT NULL,
`class_all` tinyint(1) unsigned DEFAULT NULL,
`class_normal` tinyint(1) unsigned DEFAULT NULL,
`class_upper` tinyint(1) unsigned DEFAULT NULL,
`class_baby` tinyint(1) unsigned DEFAULT NULL,
`class_third` tinyint(1) unsigned DEFAULT NULL,
`class_third_upper` tinyint(1) unsigned DEFAULT NULL,
`class_third_baby` tinyint(1) unsigned DEFAULT NULL,
`gender` varchar(10) DEFAULT NULL,
`location_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_armor` tinyint(1) unsigned DEFAULT NULL,
`location_right_hand` tinyint(1) unsigned DEFAULT NULL,
`location_left_hand` tinyint(1) unsigned DEFAULT NULL,
`location_garment` tinyint(1) unsigned DEFAULT NULL,
`location_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_top` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_mid` tinyint(1) unsigned DEFAULT NULL,
`location_costume_head_low` tinyint(1) unsigned DEFAULT NULL,
`location_costume_garment` tinyint(1) unsigned DEFAULT NULL,
`location_ammo` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_armor` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_weapon` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shield` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_shoes` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_right_accessory` tinyint(1) unsigned DEFAULT NULL,
`location_shadow_left_accessory` tinyint(1) unsigned DEFAULT NULL,
`weapon_level` tinyint(1) unsigned DEFAULT NULL,
`equip_level` varchar(10) DEFAULT NULL,
`equip_level_min` tinyint(3) unsigned DEFAULT NULL,
`equip_level_max` tinyint(3) unsigned DEFAULT NULL,
`refineable` tinyint(1) unsigned DEFAULT NULL,
`view` smallint(5) unsigned DEFAULT NULL,
`alias_name` varchar(50) DEFAULT NULL,
`flag_buyingstore` tinyint(1) unsigned DEFAULT NULL,
`flag_deadbranch` tinyint(1) unsigned DEFAULT NULL,
`flag_container` tinyint(1) unsigned DEFAULT NULL,
`flag_uniqueid` tinyint(1) unsigned DEFAULT NULL,
`flag_bindonequip` tinyint(1) unsigned DEFAULT NULL,
`flag_dropannounce` tinyint(1) unsigned DEFAULT NULL,
`flag_noconsume` tinyint(1) unsigned DEFAULT NULL,
`flag_dropeffect` varchar(20) DEFAULT NULL,
`delay_duration` bigint(20) unsigned DEFAULT NULL,
`delay_status` varchar(30) DEFAULT NULL,
`stack_amount` smallint(5) unsigned DEFAULT NULL,
`stack_inventory` tinyint(1) unsigned DEFAULT NULL,
`stack_cart` tinyint(1) unsigned DEFAULT NULL,
`stack_storage` tinyint(1) unsigned DEFAULT NULL,
`stack_guildstorage` tinyint(1) unsigned DEFAULT NULL,
`nouse_override` smallint(5) unsigned DEFAULT NULL,
`nouse_sitting` tinyint(1) unsigned DEFAULT NULL,
`trade_override` smallint(5) unsigned DEFAULT NULL,
`trade_nodrop` tinyint(1) unsigned DEFAULT NULL,
`trade_notrade` tinyint(1) unsigned DEFAULT NULL,
`trade_tradepartner` tinyint(1) unsigned DEFAULT NULL,
`trade_nosell` tinyint(1) unsigned DEFAULT NULL,
`trade_nocart` tinyint(1) unsigned DEFAULT NULL,
`trade_nostorage` tinyint(1) unsigned DEFAULT NULL,
`trade_noguildstorage` tinyint(1) unsigned DEFAULT NULL,
`trade_nomail` tinyint(1) unsigned DEFAULT NULL,
`trade_noauction` tinyint(1) unsigned DEFAULT NULL,
`script` text,
`equip_script` text,
`unequip_script` text,
PRIMARY KEY (`id`),
UNIQUE INDEX `UniqueAegisName` (`name_english`)
UNIQUE INDEX `UniqueAegisName` (`name_aegis`)
) ENGINE=MyISAM;
# Items Additional Database
#
# Structure of Database:
#REPLACE INTO `item_db2_re` VALUES ( ID,'AegisName','Name',Type,Buy,Sell,Weight,'ATK[:MATK]',DEF,Range,Slots,Job,Class,Gender,Loc,wLV,'eLV[:maxLevel]',Refineable,View,'Script','OnEquip_Script','OnUnequip_Script');
#
# THQ Quest Items
#=============================================================
#REPLACE INTO `item_db2_re` VALUES (7950,'THG_Membership','THG Membership',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (7951,'Token_Bag','Token Bag',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (1998,'Jeramiah\'s_Jur','Jeramiah\'s Jur',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (1999,'Zed\'s_Staff','Zed\'s Staff',3,NULL,10,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_sell`,`weight`,`alias_name`) VALUES (1998,'Jeramiah\'s_Jur','Jeramiah\'s Jur','Etc',10,10,'Jur');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_sell`,`weight`,`alias_name`) VALUES (1999,'Zed\'s_Staff','Zed\'s Staff','Etc',10,10,'Staff_Of_Soul');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_sell`,`weight`,`alias_name`) VALUES (7950,'THG_Membership','THG Membership','Etc',10,10,'Foolishness_Of_Blind');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_sell`,`weight`,`alias_name`) VALUES (7951,'Token_Bag','Token Bag','Etc',10,10,'Leather_Bag_Of_Infinity');
# Official Event Items that had their Effects removed after the event was completed
#REPLACE INTO `item_db2_re` VALUES (585,'Wurst','Brusti',11,2,NULL,40,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemheal rand(15,20),0; itemskill "PR_MAGNIFICAT",3;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (679,'Gold_Pill','Pilule',0,5000,NULL,300,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 50,50;',NULL,NULL);
#=============================================================
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (585,'Wurst','Brusti','Delayconsume',2,40,'itemheal rand(15,20),0; itemskill "PR_MAGNIFICAT",3;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (679,'Gold_Pill','Pilule','Healing',5000,300,'percentheal 50,50;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`location_right_accessory`,`location_left_accessory`,`script`) VALUES (2681,'Republic_Ring','Republic Anniversary Ring','Armor',20,100,true,true,'bonus bAllStats,3;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5134,'Pumpkin_Hat','Pumpkin-Head','Armor',20,200,2,true,true,206,'bonus2 bSubRace,RC_Demon,5;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5136,'Santa\'s_Hat_','Louise\'s Santa Hat','Armor',20,100,3,true,true,20,'bonus bMdef,1; bonus bLuk,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",3,50; bonus3 bAutoSpellWhenHit,"AL_BLESSING",10,50;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5145,'Carnival_Joker_Jester','Carnival Jester','Armor',10,100,true,true,89,'bonus bAllStats,3;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5147,'Baseball_Cap','Baseball Cap','Armor',200,3,true,true,216,'bonus2 bExpAddRace,RC_Boss,50; bonus2 bExpAddRace,RC_NonBoss,50;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5201,'Party_Hat_B','2nd Anniversary Party Hat','Armor',20,300,3,true,true,144,'bonus bAllStats,3;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5202,'Pumpkin_Hat_','Pumpkin Hat','Armor',20,200,2,true,true,206,'bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`location_head_low`,`view`,`script`) VALUES (5204,'Event_Pierrot_Nose','Rudolf\'s Red Nose','Armor',20,100,true,49,'bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5264,'Aussie_Flag_Hat','Australian Flag Hat','Armor',20,500,4,true,true,304,'bonus bAllStats,2;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5356,'Pumpkin_Hat_H','Pumpkin Hat','Armor',20,200,2,true,true,206,'bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus2 bMagicAddRace,RC_Demon,5;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`slots`,`location_head_top`,`equip_level_min`,`refineable`,`view`,`script`) VALUES (5384,'Santa_Hat_1','Twin Pompom By JB','Armor',20,200,2,1,true,20,true,390,'bonus bLuk,3; bonus2 bResEff,Eff_Curse,2000; bonus bVariableCastrate,-2; bonus bAspdRate,4; bonus2 bAddMonsterDropItem,539,100; bonus2 bAddMonsterDropItem,529,200; bonus2 bAddMonsterDropItem,530,200; autobonus "{ bonus bCritical,10; }",10,5000;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`defense`,`location_head_low`,`view`,`script`) VALUES (5811,'Santa_Beard','Santa Beard','Armor',20,100,5,true,25,'bonus2 bSubRace,RC_Brute,5; bonus2 bSubRace,RC_Player_Doram,5;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`script`) VALUES (11702,'Moon_Cookie','Moon Cookie','Delayconsume',10,'sc_end SC_POISON; sc_end SC_SILENCE; sc_end SC_BLIND; sc_end SC_CONFUSION; sc_end SC_CURSE; sc_end SC_HALLUCINATION; itemskill "AL_BLESSING",7;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (12131,'Lucky_Potion','Lucky Potion','Healing',2,100,'sc_start SC_LUKFOOD,180000,15;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (12143,'Red_Can','Red Can','Usable',50000,300,'percentheal 25,25;');
#REPLACE INTO `item_db2_re` VALUES (2681,'Republic_Ring','Republic Anniversary Ring',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus bAllStats,3;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5134,'Pumpkin_Hat','Pumpkin-Head',4,20,NULL,200,NULL,2,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,206,'bonus2 bSubRace,RC_Demon,5;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5136,'Santa\'s_Hat_','Louise\'s Santa Hat',4,20,NULL,100,NULL,3,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,20,'bonus bMdef,1; bonus bLuk,1; bonus3 bAutoSpellWhenHit,"AL_HEAL",3,50; bonus3 bAutoSpellWhenHit,"AL_BLESSING",10,50;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5145,'Carnival_Joker_Jester','Carnival Jester',4,10,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,89,'bonus bAllStats,3;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5147,'Baseball_Cap','Baseball Cap',4,0,NULL,200,NULL,3,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,216,'bonus2 bExpAddRace,RC_Boss,50; bonus2 bExpAddRace,RC_NonBoss,50;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5201,'Party_Hat_B','2nd Anniversary Party Hat',4,20,NULL,300,NULL,3,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,144,'bonus bAllStats,3;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5202,'Pumpkin_Hat_','Pumpkin Hat',4,20,NULL,200,NULL,2,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,206,'bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus3 bAddMonsterDropItem,529,RC_DemiHuman,1500;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5204,'Event_Pierrot_Nose','Rudolf\'s Red Nose',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,7,2,1,NULL,0,0,49,'bonus2 bResEff,Eff_Blind,3000; bonus2 bAddMonsterDropItem,12130,30;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5264,'Aussie_Flag_Hat','Australian Flag Hat',4,20,NULL,500,NULL,4,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,304,'bonus bAllStats,2;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5356,'Pumpkin_Hat_H','Pumpkin Hat',4,20,NULL,200,NULL,2,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,206,'bonus bAllStats,2; bonus2 bSubRace,RC_Demon,5; bonus2 bMagicAddRace,RC_Demon,5;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5811,'Santa_Beard','Santa Beard',4,20,NULL,100,NULL,5,NULL,0,0xFFFFFFFF,7,2,1,NULL,0,0,25,'bonus2 bSubRace,RC_Brute,5;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (11702,'Moon_Cookie','Moon Cookie',11,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_end SC_Poison; sc_end SC_Silence; sc_end SC_Blind; sc_end SC_Confusion; sc_end SC_Curse; sc_end SC_Hallucination; itemskill "AL_BLESSING",7;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (12131,'Lucky_Potion','Lucky Potion',0,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_LUKFood,180000,15;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (12143,'Red_Can','Red Can',2,50000,NULL,300,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 25,25;',NULL,NULL);
#Event effect: Summon monster? Probably Rice_Cake. x_x
#REPLACE INTO `item_db2_re` VALUES (12199,'Rice_Scroll','Rice Scroll',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (12200,'Event_Cake','Event Cake',2,20,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'itemskill "PR_MAGNIFICAT",3;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (12238,'New_Year_Rice_Cake_1','New Year Rice Cake',0,20,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 20,15; sc_start SC_STRFood,1200000,3; sc_start SC_INTFood,1200000,3; sc_start SC_LUKFood,1200000,3; sc_start SC_SpeedUp1,5000,0;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (12239,'New_Year_Rice_Cake_2','New Year Rice Cake',0,20,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'percentheal 20,15; sc_start SC_DEXFood,1200000,3; sc_start SC_AGIFood,1200000,3; sc_start SC_VITFood,1200000,3; sc_start SC_SpeedUp1,5000,0;',NULL,NULL);
# Event effect: Summon monster? Probably Rice_Cake. x_x
#=============================================================
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`) VALUES (12199,'Rice_Scroll','Rice Scroll','Usable');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (12200,'Event_Cake','Event Cake','Usable',20,50,'itemskill "PR_MAGNIFICAT",3;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (12238,'New_Year_Rice_Cake_1','New Year Rice Cake','Healing',20,100,'percentheal 20,15; sc_start SC_STRFOOD,1200000,3; sc_start SC_INTFOOD,1200000,3; sc_start SC_LUKFOOD,1200000,3; sc_start SC_SPEEDUP1,5000,0;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`script`) VALUES (12239,'New_Year_Rice_Cake_2','New Year Rice Cake','Healing',20,100,'percentheal 20,15; sc_start SC_DEXFOOD,1200000,3; sc_start SC_AGIFOOD,1200000,3; sc_start SC_VITFOOD,1200000,3; sc_start SC_SPEEDUP1,5000,0;');
# iRO St. Patrick's Day Event 2008
#=============================================================
#REPLACE INTO `item_db2_re` VALUES (12715,'Black_Treasure_Chest','Black Treasure Chest',2,0,NULL,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'callfunc "F_08stpattyseventbox";',NULL,NULL);
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`alias_name`) VALUES (7915,'Copper_Coin_','Bronze Coin','Etc',10,'Copper_Coin');
# iRO Valentine's Day Event 2009
#=============================================================
#REPLACE INTO `item_db2_re` VALUES (12742,'Valentine_Gift_Box_M','Valentine Gift Box',2,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 7946,1;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (12743,'Valentine_Gift_Box_F','Valentine Gift Box',2,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 7947,1;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (12744,'Chocolate_Box','Chocolate Box',2,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 558,1;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (14466,'Valentine\'s_Emblem_Box','Valentine\'s Emblem Box',2,10,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,7,2,NULL,NULL,NULL,NULL,NULL,'getitem 5817,1;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (7946,'Gold_Ring_Of_Valentine','Gold Ring Of Valentine',3,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (7947,'Silver_Ring_Of_Valentine','Silver Ring Of Valentine',3,10,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (7948,'Box','Box',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (5817,'Valentine\'s_Emblem','Valentine\'s Emblem',4,10,NULL,0,NULL,3,NULL,0,0xFFFFFFFF,7,2,136,NULL,0,0,0,'bonus bAtkRate,3; bonus bMatkRate,3; bonus bAllStats,2; bonus bFlee,10; bonus bAspd,1; bonus bMdef,3; bonus2 bSkillAtk,"AL_HEAL",10; bonus2 bSkillHeal,"AL_HEAL",10; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bAddItemHealRate,IG_Potion,10;',NULL,NULL);
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`alias_name`) VALUES (7916,'Silver_Coin_','Silver Coin','Etc',10,'Silver_Coin');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`weight`,`alias_name`,`script`) VALUES (12715,'Black_Treasure_Chest','Black Treasure Chest','Usable',200,'Treasure_Box_','callfunc "F_08stpattyseventbox";');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`defense`,`location_right_accessory`,`location_left_accessory`,`script`) VALUES (5817,'Valentine\'s_Emblem','Valentine\'s Emblem','Armor',10,3,true,true,'bonus bAtkRate,3; bonus bMatkRate,3; bonus bAllStats,2; bonus bFlee,10; bonus bAspd,1; bonus bMdef,3; bonus2 bSkillAtk,"AL_HEAL",10; bonus2 bSkillHeal,"AL_HEAL",10; bonus2 bSkillHeal,"AM_POTIONPITCHER",10; bonus2 bAddItemGroupHealRate,IG_Potion,10;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`) VALUES (7946,'Gold_Ring_Of_Valentine','Gold Ring Of Valentine','Etc',10);
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`) VALUES (7947,'Silver_Ring_Of_Valentine','Silver Ring Of Valentine','Etc',10);
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`) VALUES (7948,'Box','Box','Etc',10,10);
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`script`) VALUES (12742,'Valentine_Gift_Box_M','Valentine Gift Box','Usable',10,'getitem 7946,1;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`script`) VALUES (12743,'Valentine_Gift_Box_F','Valentine Gift Box','Usable',10,'getitem 7947,1;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`script`) VALUES (12744,'Chocolate_Box','Chocolate Box','Usable',10,'getitem 558,1;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`script`) VALUES (14466,'Valentine\'s_Emblem_Box','Valentine\'s Emblem Box','Usable',10,'getitem 5817,1;');
# iRO Halloween Event 2009
#=============================================================
#REPLACE INTO `item_db2_re` VALUES (5668,'Weird_Pumpkin_Hat','Weird Pumpkin Hat',4,20,NULL,0,NULL,5,NULL,0,0xFFFFFFFF,7,2,256,NULL,0,1,206,'bonus bMdef,5; bonus2 bAddMonsterDropItem,12192,2500;',NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (6298,'Crushed_Pumpkin','Crushed Pumpkin',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
#REPLACE INTO `item_db2_re` VALUES (6299,'Worn_Fabric','Worn Fabric',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`defense`,`location_head_top`,`refineable`,`view`,`script`) VALUES (5668,'Weird_Pumpkin_Hat','Weird Pumpkin Hat','Armor',20,5,true,true,206,'bonus bMdef,5; bonus2 bAddMonsterDropItem,12192,2500;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`) VALUES (6298,'Crushed_Pumpkin','Crushed Pumpkin','Etc');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`) VALUES (6299,'Worn_Fabric','Worn Fabric','Etc');
# Old Tuxedo and Wedding Dress, will display the outfit when worn.
#==================================================================
#REPLACE INTO `item_db2_re` VALUES (2338,'Wedding_Dress','Wedding Dress',4,43000,NULL,500,NULL,0,NULL,0,0xFFFFFFFE,7,0,16,NULL,0,1,0,NULL,'setoption Option_Wedding,1;','setoption Option_Wedding,0;');
#REPLACE INTO `item_db2_re` VALUES (7170,'Tuxedo','Tuxedo',4,43000,NULL,10,NULL,0,NULL,0,0xFFFFFFFE,7,1,16,NULL,0,1,0,NULL,'setoption Option_Wedding,1;','setoption Option_Wedding,0;');
#=============================================================
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`job_all`,`job_novice`,`location_armor`,`refineable`,`equip_script`,`unequip_script`) VALUES (2338,'Wedding_Dress','Wedding Dress','Armor',43000,500,true,false,true,true,'sc_start SC_WEDDING,INFINITE_TICK,0;','sc_end SC_WEDDING;');
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`price_buy`,`weight`,`job_all`,`job_novice`,`gender`,`location_armor`,`refineable`,`equip_script`,`unequip_script`) VALUES (7170,'Tuxedo','Tuxedo','Armor',43000,10,true,false,'Male',true,true,'sc_start SC_WEDDING,INFINITE_TICK,0;','sc_end SC_WEDDING;');
# Non-kRO Eden Group Mark effect
#=============================================================
REPLACE INTO `item_db2_re` (`id`,`name_aegis`,`name_english`,`type`,`script`) VALUES (22508,'Para_Team_Mark_','Eden Group Mark','Delayconsume','unitskilluseid getcharid(3),"AL_TELEPORT",3;');

2022
sql-files/item_db_equip.sql Normal file

File diff suppressed because it is too large Load Diff

2251
sql-files/item_db_etc.sql Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

4084
sql-files/item_db_re_etc.sql Normal file

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

1909
sql-files/item_db_usable.sql Normal file

File diff suppressed because it is too large Load Diff

View File

@ -4284,6 +4284,207 @@ REPLACE INTO `mob_db_re` VALUES (3790,'SWEETS_DROPS','Sweets Drops','Sweets Drop
#21087,S_DUMMY_100_HUMANP
#21088,S_DUMMY_100_DORAMP
#21089,WANDERING_DUCK
#21090,JP_E_MONSTER_201
#21091,JP_E_MONSTER_202
#21092,JP_E_MONSTER_203
#21093,JP_E_MONSTER_204
#21094,JP_E_MONSTER_205
#21095,JP_E_MONSTER_206
#21096,JP_E_MONSTER_207
#21097,JP_E_MONSTER_208
#21098,JP_E_MONSTER_209
#21099,JP_E_MONSTER_210
#21100,JP_E_MONSTER_211
#21101,JP_E_MONSTER_212
#21102,JP_E_MONSTER_213
#21103,JP_E_MONSTER_214
#21104,JP_E_MONSTER_215
#21105,JP_E_MONSTER_216
#21106,JP_E_MONSTER_217
#21107,JP_E_MONSTER_218
#21108,JP_E_MONSTER_219
#21109,JP_E_MONSTER_220
#21110,JP_E_MONSTER_221
#21111,JP_E_MONSTER_222
#21112,JP_E_MONSTER_223
#21113,JP_E_MONSTER_224
#21114,JP_E_MONSTER_225
#21115,JP_E_MONSTER_226
#21116,JP_E_MONSTER_227
#21117,JP_E_MONSTER_228
#21118,JP_E_MONSTER_229
#21119,JP_E_MONSTER_230
#21120,JP_E_MONSTER_231
#21121,JP_E_MONSTER_232
#21122,JP_E_MONSTER_233
#21123,JP_E_MONSTER_234
#21124,JP_E_MONSTER_235
#21125,JP_E_MONSTER_236
#21126,JP_E_MONSTER_237
#21127,JP_E_MONSTER_238
#21128,JP_E_MONSTER_239
#21129,JP_E_MONSTER_240
#21130,JP_E_MONSTER_241
#21131,JP_E_MONSTER_242
#21132,JP_E_MONSTER_243
#21133,JP_E_MONSTER_244
#21134,JP_E_MONSTER_245
#21135,JP_E_MONSTER_246
#21136,JP_E_MONSTER_247
#21137,JP_E_MONSTER_248
#21138,JP_E_MONSTER_249
#21139,JP_E_MONSTER_250
#21140,JP_E_MONSTER_251
#21141,JP_E_MONSTER_252
#21142,JP_E_MONSTER_253
#21143,JP_E_MONSTER_254
#21144,JP_E_MONSTER_255
#21145,JP_E_MONSTER_256
#21146,JP_E_MONSTER_257
#21147,JP_E_MONSTER_258
#21148,JP_E_MONSTER_259
#21149,JP_E_MONSTER_260
#21150,JP_E_MONSTER_261
#21151,JP_E_MONSTER_262
#21152,JP_E_MONSTER_263
#21153,JP_E_MONSTER_264
#21154,JP_E_MONSTER_265
#21155,JP_E_MONSTER_266
#21156,JP_E_MONSTER_267
#21157,JP_E_MONSTER_268
#21158,JP_E_MONSTER_269
#21159,JP_E_MONSTER_270
#21160,JP_E_MONSTER_271
#21161,JP_E_MONSTER_272
#21162,JP_E_MONSTER_273
#21163,JP_E_MONSTER_274
#21164,JP_E_MONSTER_275
#21165,JP_E_MONSTER_276
#21166,JP_E_MONSTER_277
#21167,JP_E_MONSTER_278
#21168,JP_E_MONSTER_279
#21169,JP_E_MONSTER_280
#21170,JP_E_MONSTER_281
#21171,JP_E_MONSTER_282
#21172,JP_E_MONSTER_283
#21173,JP_E_MONSTER_284
#21174,JP_E_MONSTER_285
#21175,JP_E_MONSTER_286
#21176,JP_E_MONSTER_287
#21177,JP_E_MONSTER_288
#21178,JP_E_MONSTER_289
#21179,JP_E_MONSTER_290
#21180,JP_E_MONSTER_291
#21181,JP_E_MONSTER_292
#21182,JP_E_MONSTER_293
#21183,JP_E_MONSTER_294
#21184,JP_E_MONSTER_295
#21185,JP_E_MONSTER_296
#21186,JP_E_MONSTER_297
#21187,JP_E_MONSTER_298
#21188,JP_E_MONSTER_299
#21189,JP_E_MONSTER_300
#21190,JP_E_MONSTER_301
#21191,JP_E_MONSTER_302
#21192,JP_E_MONSTER_303
#21193,JP_E_MONSTER_304
#21194,JP_E_MONSTER_305
#21195,JP_E_MONSTER_306
#21196,JP_E_MONSTER_307
#21197,JP_E_MONSTER_308
#21198,JP_E_MONSTER_309
#21199,JP_E_MONSTER_310
#21200,JP_E_MONSTER_311
#21201,JP_E_MONSTER_312
#21202,JP_E_MONSTER_313
#21203,JP_E_MONSTER_314
#21204,JP_E_MONSTER_315
#21205,JP_E_MONSTER_316
#21206,JP_E_MONSTER_317
#21207,JP_E_MONSTER_318
#21208,JP_E_MONSTER_319
#21209,JP_E_MONSTER_320
#21210,JP_E_MONSTER_321
#21211,JP_E_MONSTER_322
#21212,JP_E_MONSTER_323
#21213,JP_E_MONSTER_324
#21214,JP_E_MONSTER_325
#21215,JP_E_MONSTER_326
#21216,JP_E_MONSTER_327
#21217,JP_E_MONSTER_328
#21218,JP_E_MONSTER_329
#21219,JP_E_MONSTER_330
#21220,JP_E_MONSTER_331
#21221,JP_E_MONSTER_332
#21222,JP_E_MONSTER_333
#21223,JP_E_MONSTER_334
#21224,JP_E_MONSTER_335
#21225,JP_E_MONSTER_336
#21226,JP_E_MONSTER_337
#21227,JP_E_MONSTER_338
#21228,JP_E_MONSTER_339
#21229,JP_E_MONSTER_340
#21230,JP_E_MONSTER_341
#21231,JP_E_MONSTER_342
#21232,JP_E_MONSTER_343
#21233,JP_E_MONSTER_344
#21234,JP_E_MONSTER_345
#21235,JP_E_MONSTER_346
#21236,JP_E_MONSTER_347
#21237,JP_E_MONSTER_348
#21238,JP_E_MONSTER_349
#21239,JP_E_MONSTER_350
#21240,JP_E_MONSTER_351
#21241,JP_E_MONSTER_352
#21242,JP_E_MONSTER_353
#21243,JP_E_MONSTER_354
#21244,JP_E_MONSTER_355
#21245,JP_E_MONSTER_356
#21246,JP_E_MONSTER_357
#21247,JP_E_MONSTER_358
#21248,JP_E_MONSTER_359
#21249,JP_E_MONSTER_360
#21250,JP_E_MONSTER_361
#21251,JP_E_MONSTER_362
#21252,JP_E_MONSTER_363
#21253,JP_E_MONSTER_364
#21254,JP_E_MONSTER_365
#21255,JP_E_MONSTER_366
#21256,JP_E_MONSTER_367
#21257,JP_E_MONSTER_368
#21258,JP_E_MONSTER_369
#21259,JP_E_MONSTER_370
#21260,JP_E_MONSTER_371
#21261,JP_E_MONSTER_372
#21262,JP_E_MONSTER_373
#21263,JP_E_MONSTER_374
#21264,JP_E_MONSTER_375
#21265,JP_E_MONSTER_376
#21266,JP_E_MONSTER_377
#21267,JP_E_MONSTER_378
#21268,JP_E_MONSTER_379
#21269,JP_E_MONSTER_380
#21270,JP_E_MONSTER_381
#21271,JP_E_MONSTER_382
#21272,JP_E_MONSTER_383
#21273,JP_E_MONSTER_384
#21274,JP_E_MONSTER_385
#21275,JP_E_MONSTER_386
#21276,JP_E_MONSTER_387
#21277,JP_E_MONSTER_388
#21278,JP_E_MONSTER_389
#21279,JP_E_MONSTER_390
#21280,JP_E_MONSTER_391
#21281,JP_E_MONSTER_392
#21282,JP_E_MONSTER_393
#21283,JP_E_MONSTER_394
#21284,JP_E_MONSTER_395
#21285,JP_E_MONSTER_396
#21286,JP_E_MONSTER_397
#21287,JP_E_MONSTER_398
#21288,JP_E_MONSTER_399
#21289,JP_E_MONSTER_400
#21290,KIEL_D_01_2
#31999,HUNTING_GID_DEFAULT
#32000,MONSTER_2ND_END

View File

@ -95,6 +95,7 @@ bool YamlDatabase::load(const std::string& path) {
YAML::Node rootNode;
try {
ShowStatus( "Loading '" CL_WHITE "%s" CL_RESET "'..." CL_CLL "\r", path.c_str() );
rootNode = YAML::LoadFile(path);
}
catch(YAML::Exception &e) {
@ -291,6 +292,9 @@ void YamlDatabase::invalidWarning( const YAML::Node &node, const char* fmt, ...
va_start(ap, fmt);
// Remove any remaining garbage of a previous loading line
ShowMessage( CL_CLL );
// Print the actual error
_vShowMessage( MSG_ERROR, fmt, ap );
va_end(ap);

View File

@ -8,7 +8,7 @@
#define MAX_MAPINDEX 2000
//Some definitions for the mayor city maps.
//Some definitions for the major city maps.
#define MAP_PRONTERA "prontera"
#define MAP_GEFFEN "geffen"
#define MAP_MORROC "morocc"

View File

@ -266,7 +266,7 @@ struct item {
};
//Equip position constants
enum equip_pos {
enum equip_pos : uint32 {
EQP_HEAD_LOW = 0x000001,
EQP_HEAD_MID = 0x000200, // 512
EQP_HEAD_TOP = 0x000100, // 256
@ -972,9 +972,10 @@ enum e_job {
JOB_MAX,
};
enum e_sex {
enum e_sex : uint8 {
SEX_FEMALE = 0,
SEX_MALE,
SEX_BOTH,
SEX_SERVER
};

View File

@ -2424,7 +2424,7 @@ ACMD_FUNC(produce)
if ((flag = pc_additem(sd, &tmp_item, 1, LOG_TYPE_COMMAND)))
clif_additem(sd, 0, 0, flag);
} else {
sprintf(atcmd_output, msg_txt(sd,169), item_id, item_data->name); // The item (%u: '%s') is not equipable.
sprintf(atcmd_output, msg_txt(sd,169), item_id, item_data->name.c_str()); // The item (%u: '%s') is not equipable.
clif_displaymessage(fd, atcmd_output);
return -1;
}
@ -3736,7 +3736,7 @@ ACMD_FUNC(idsearch)
clif_displaymessage(fd, atcmd_output);
}
for(i = 0; i < match; i++) {
sprintf(atcmd_output, msg_txt(sd,78), item_array[i]->jname, item_array[i]->nameid); // %s: %u
sprintf(atcmd_output, msg_txt(sd,78), item_array[i]->ename.c_str(), item_array[i]->nameid); // %s: %u
clif_displaymessage(fd, atcmd_output);
}
sprintf(atcmd_output, msg_txt(sd,79), match); // It is %d affair above.
@ -6343,7 +6343,7 @@ ACMD_FUNC(autolootitem)
return -1;
}
sd->state.autolootid[i] = item_data->nameid; // Autoloot Activated
sprintf(atcmd_output, msg_txt(sd,1192), item_data->name, item_data->jname, item_data->nameid); // Autolooting item: '%s'/'%s' {%u}
sprintf(atcmd_output, msg_txt(sd,1192), item_data->name.c_str(), item_data->ename.c_str(), item_data->nameid); // Autolooting item: '%s'/'%s' {%u}
clif_displaymessage(fd, atcmd_output);
sd->state.autolooting = 1;
break;
@ -6354,7 +6354,7 @@ ACMD_FUNC(autolootitem)
return -1;
}
sd->state.autolootid[i] = 0;
sprintf(atcmd_output, msg_txt(sd,1194), item_data->name, item_data->jname, item_data->nameid); // Removed item: '%s'/'%s' {%u} from your autolootitem list.
sprintf(atcmd_output, msg_txt(sd,1194), item_data->name.c_str(), item_data->ename.c_str(), item_data->nameid); // Removed item: '%s'/'%s' {%u} from your autolootitem list.
clif_displaymessage(fd, atcmd_output);
ARR_FIND(0, AUTOLOOTITEM_SIZE, i, sd->state.autolootid[i] != 0);
if (i == AUTOLOOTITEM_SIZE) {
@ -6379,7 +6379,7 @@ ACMD_FUNC(autolootitem)
ShowDebug("Non-existant item %d on autolootitem list (account_id: %d, char_id: %d)", sd->state.autolootid[i], sd->status.account_id, sd->status.char_id);
continue;
}
sprintf(atcmd_output, "'%s'/'%s' {%u}", item_data->name, item_data->jname, item_data->nameid);
sprintf(atcmd_output, "'%s'/'%s' {%u}", item_data->name.c_str(), item_data->ename.c_str(), item_data->nameid);
clif_displaymessage(fd, atcmd_output);
}
}
@ -7436,10 +7436,10 @@ ACMD_FUNC(mobinfo)
#endif
if (pc_isvip(sd)) // Display drop rate increase for VIP
droprate += (droprate * battle_config.vip_drop_increase) / 100;
if (item_data->slot)
sprintf(atcmd_output2, " - %s[%d] %02.02f%%", item_data->jname, item_data->slot, (float)droprate / 100);
if (item_data->slots)
sprintf(atcmd_output2, " - %s[%d] %02.02f%%", item_data->ename.c_str(), item_data->slots, (float)droprate / 100);
else
sprintf(atcmd_output2, " - %s %02.02f%%", item_data->jname, (float)droprate / 100);
sprintf(atcmd_output2, " - %s %02.02f%%", item_data->ename.c_str(), (float)droprate / 100);
strcat(atcmd_output, atcmd_output2);
if (++j % 3 == 0) {
clif_displaymessage(fd, atcmd_output);
@ -7469,15 +7469,15 @@ ACMD_FUNC(mobinfo)
if (mvppercent > 0) {
j++;
if (j == 1) {
if (item_data->slot)
sprintf(atcmd_output2, " %s[%d] %02.02f%%", item_data->jname, item_data->slot, mvppercent);
if (item_data->slots)
sprintf(atcmd_output2, " %s[%d] %02.02f%%", item_data->ename.c_str(), item_data->slots, mvppercent);
else
sprintf(atcmd_output2, " %s %02.02f%%", item_data->jname, mvppercent);
sprintf(atcmd_output2, " %s %02.02f%%", item_data->ename.c_str(), mvppercent);
} else {
if (item_data->slot)
sprintf(atcmd_output2, " - %s[%d] %02.02f%%", item_data->jname, item_data->slot, mvppercent);
if (item_data->slots)
sprintf(atcmd_output2, " - %s[%d] %02.02f%%", item_data->ename.c_str(), item_data->slots, mvppercent);
else
sprintf(atcmd_output2, " - %s %02.02f%%", item_data->jname, mvppercent);
sprintf(atcmd_output2, " - %s %02.02f%%", item_data->ename.c_str(), mvppercent);
}
strcat(atcmd_output, atcmd_output2);
}
@ -7902,8 +7902,8 @@ ACMD_FUNC(iteminfo)
for (i = 0; i < count; i++) {
struct item_data * item_data = item_array[i];
sprintf(atcmd_output, msg_txt(sd,1277), // Item: '%s'/'%s'[%d] (%u) Type: %s | Extra Effect: %s
item_data->name,item_data->jname,item_data->slot,item_data->nameid,
(item_data->type != IT_AMMO) ? itemdb_typename((enum item_types)item_data->type) : itemdb_typename_ammo((enum e_item_ammo)item_data->look),
item_data->name.c_str(),item_data->ename.c_str(),item_data->slots,item_data->nameid,
(item_data->type != IT_AMMO) ? itemdb_typename((enum item_types)item_data->type) : itemdb_typename_ammo((e_ammo_type)item_data->subtype),
(item_data->script==NULL)? msg_txt(sd,1278) : msg_txt(sd,1279) // None / With script
);
clif_displaymessage(fd, atcmd_output);
@ -7952,7 +7952,7 @@ ACMD_FUNC(whodrops)
}
for (i = 0; i < count; i++) {
item_data = item_array[i];
sprintf(atcmd_output, msg_txt(sd,1285), item_data->jname, item_data->slot, item_data->nameid); // Item: '%s'[%d] (ID: %u)
sprintf(atcmd_output, msg_txt(sd,1285), item_data->ename.c_str(), item_data->slots, item_data->nameid); // Item: '%s'[%d] (ID:%u)
clif_displaymessage(fd, atcmd_output);
if (item_data->mob[0].chance == 0) {
@ -8939,9 +8939,9 @@ ACMD_FUNC(itemlist)
}
if( it->refine )
StringBuf_Printf(&buf, "%d %s %+d (%s, id: %u)", it->amount, itd->jname, it->refine, itd->name, it->nameid);
StringBuf_Printf(&buf, "%d %s %+d (%s, id: %u)", it->amount, itd->ename.c_str(), it->refine, itd->name.c_str(), it->nameid);
else
StringBuf_Printf(&buf, "%d %s (%s, id: %u)", it->amount, itd->jname, itd->name, it->nameid);
StringBuf_Printf(&buf, "%d %s (%s, id: %u)", it->amount, itd->ename.c_str(), itd->name.c_str(), it->nameid);
if( it->equip ) {
char equipstr[CHAT_SIZE_MAX];
@ -9027,7 +9027,7 @@ ACMD_FUNC(itemlist)
} else { // normal item
int counter2 = 0;
for( j = 0; j < itd->slot; ++j ) {
for( j = 0; j < itd->slots; ++j ) {
struct item_data* card;
if( it->card[j] == 0 || (card = itemdb_exists(it->card[j])) == NULL )
@ -9041,7 +9041,7 @@ ACMD_FUNC(itemlist)
if( counter2 != 1 )
StringBuf_AppendStr(&buf, ", ");
StringBuf_Printf(&buf, "#%d %s (id: %u)", counter2, card->jname, card->nameid);
StringBuf_Printf(&buf, "#%d %s (id: %u)", counter2, card->ename.c_str(), card->nameid);
}
if( counter2 > 0 )

View File

@ -9,12 +9,6 @@
struct map_session_data;
//This is the distance at which @autoloot works,
//if the item drops farther from the player than this,
//it will not be autolooted. [Skotlex]
//Note: The range is unlimited unless this define is set.
//#define AUTOLOOT_DISTANCE AREA_SIZE
//global var
extern char atcommand_symbol;
extern char charcommand_symbol;

View File

@ -675,14 +675,14 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
case BF_MAGIC:
// Affected by attacker ATK bonuses
if( sd && !nk[NK_IGNOREATKCARD] ) {
cardfix = cardfix * (100 + sd->magic_addrace[tstatus->race] + sd->magic_addrace[RC_ALL] + sd->magic_addrace2[t_race2]) / 100;
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addrace[tstatus->race] + sd->indexed_bonus.magic_addrace[RC_ALL] + sd->indexed_bonus.magic_addrace2[t_race2]) / 100;
if( !nk[NK_IGNOREELEMENT] ) { // Affected by Element modifier bonuses
cardfix = cardfix * (100 + sd->magic_addele[tstatus->def_ele] + sd->magic_addele[ELE_ALL] +
sd->magic_addele_script[tstatus->def_ele] + sd->magic_addele_script[ELE_ALL]) / 100;
cardfix = cardfix * (100 + sd->magic_atk_ele[rh_ele] + sd->magic_atk_ele[ELE_ALL]) / 100;
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addele[tstatus->def_ele] + sd->indexed_bonus.magic_addele[ELE_ALL] +
sd->indexed_bonus.magic_addele_script[tstatus->def_ele] + sd->indexed_bonus.magic_addele_script[ELE_ALL]) / 100;
cardfix = cardfix * (100 + sd->indexed_bonus.magic_atk_ele[rh_ele] + sd->indexed_bonus.magic_atk_ele[ELE_ALL]) / 100;
}
cardfix = cardfix * (100 + sd->magic_addsize[tstatus->size] + sd->magic_addsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 + sd->magic_addclass[tstatus->class_] + sd->magic_addclass[CLASS_ALL]) / 100;
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addsize[tstatus->size] + sd->indexed_bonus.magic_addsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 + sd->indexed_bonus.magic_addclass[tstatus->class_] + sd->indexed_bonus.magic_addclass[CLASS_ALL]) / 100;
for (const auto &it : sd->add_mdmg) {
if (it.id == t_class) {
cardfix = cardfix * (100 + it.val) / 100;
@ -697,7 +697,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
cardfix = 1000; // reset var for target
if( !nk[NK_IGNOREELEMENT] ) { // Affected by Element modifier bonuses
int ele_fix = tsd->subele[rh_ele] + tsd->subele[ELE_ALL] + tsd->subele_script[rh_ele] + tsd->subele_script[ELE_ALL];
int ele_fix = tsd->indexed_bonus.subele[rh_ele] + tsd->indexed_bonus.subele[ELE_ALL] + tsd->indexed_bonus.subele_script[rh_ele] + tsd->indexed_bonus.subele_script[ELE_ALL];
for (const auto &it : tsd->subele2) {
if (it.ele != rh_ele)
@ -709,13 +709,13 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
ele_fix += it.rate;
}
if (s_defele != ELE_NONE)
ele_fix += tsd->magic_subdefele[s_defele] + tsd->magic_subdefele[ELE_ALL];
ele_fix += tsd->indexed_bonus.magic_subdefele[s_defele] + tsd->indexed_bonus.magic_subdefele[ELE_ALL];
cardfix = cardfix * (100 - ele_fix) / 100;
}
cardfix = cardfix * (100 - tsd->subsize[sstatus->size] - tsd->subsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 - tsd->magic_subsize[sstatus->size] - tsd->magic_subsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 - tsd->subrace2[s_race2]) / 100;
int race_fix = tsd->subrace[sstatus->race] + tsd->subrace[RC_ALL];
cardfix = cardfix * (100 - tsd->indexed_bonus.subsize[sstatus->size] - tsd->indexed_bonus.subsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 - tsd->indexed_bonus.magic_subsize[sstatus->size] - tsd->indexed_bonus.magic_subsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 - tsd->indexed_bonus.subrace2[s_race2]) / 100;
int race_fix = tsd->indexed_bonus.subrace[sstatus->race] + tsd->indexed_bonus.subrace[RC_ALL];
for (const auto &it : tsd->subrace3) {
if (it.race != sstatus->race)
continue;
@ -726,7 +726,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
race_fix += it.rate;
}
cardfix = cardfix * (100 - race_fix) / 100;
cardfix = cardfix * (100 - tsd->subclass[sstatus->class_] - tsd->subclass[CLASS_ALL]) / 100;
cardfix = cardfix * (100 - tsd->indexed_bonus.subclass[sstatus->class_] - tsd->indexed_bonus.subclass[CLASS_ALL]) / 100;
for (const auto &it : tsd->add_mdef) {
if (it.id == s_class) {
@ -755,11 +755,11 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
short cardfix_ = 1000;
if( sd->state.arrow_atk ) { // Ranged attack
cardfix = cardfix * (100 + sd->right_weapon.addrace[tstatus->race] + sd->arrow_addrace[tstatus->race] +
sd->right_weapon.addrace[RC_ALL] + sd->arrow_addrace[RC_ALL]) / 100;
cardfix = cardfix * (100 + sd->right_weapon.addrace[tstatus->race] + sd->indexed_bonus.arrow_addrace[tstatus->race] +
sd->right_weapon.addrace[RC_ALL] + sd->indexed_bonus.arrow_addrace[RC_ALL]) / 100;
if( !nk[NK_IGNOREELEMENT] ) { // Affected by Element modifier bonuses
int ele_fix = sd->right_weapon.addele[tstatus->def_ele] + sd->arrow_addele[tstatus->def_ele] +
sd->right_weapon.addele[ELE_ALL] + sd->arrow_addele[ELE_ALL];
int ele_fix = sd->right_weapon.addele[tstatus->def_ele] + sd->indexed_bonus.arrow_addele[tstatus->def_ele] +
sd->right_weapon.addele[ELE_ALL] + sd->indexed_bonus.arrow_addele[ELE_ALL];
for (const auto &it : sd->right_weapon.addele2) {
if (it.ele != tstatus->def_ele)
@ -772,11 +772,11 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
}
cardfix = cardfix * (100 + ele_fix) / 100;
}
cardfix = cardfix * (100 + sd->right_weapon.addsize[tstatus->size] + sd->arrow_addsize[tstatus->size] +
sd->right_weapon.addsize[SZ_ALL] + sd->arrow_addsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 + sd->right_weapon.addsize[tstatus->size] + sd->indexed_bonus.arrow_addsize[tstatus->size] +
sd->right_weapon.addsize[SZ_ALL] + sd->indexed_bonus.arrow_addsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 + sd->right_weapon.addrace2[t_race2]) / 100;
cardfix = cardfix * (100 + sd->right_weapon.addclass[tstatus->class_] + sd->arrow_addclass[tstatus->class_] +
sd->right_weapon.addclass[CLASS_ALL] + sd->arrow_addclass[CLASS_ALL]) / 100;
cardfix = cardfix * (100 + sd->right_weapon.addclass[tstatus->class_] + sd->indexed_bonus.arrow_addclass[tstatus->class_] +
sd->right_weapon.addclass[CLASS_ALL] + sd->indexed_bonus.arrow_addclass[CLASS_ALL]) / 100;
} else { // Melee attack
int skill = 0;
@ -892,7 +892,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
// Affected by target DEF bonuses
else if( tsd && !nk[NK_IGNOREDEFCARD] && !(left&2) ) {
if( !nk[NK_IGNOREELEMENT] ) { // Affected by Element modifier bonuses
int ele_fix = tsd->subele[rh_ele] + tsd->subele[ELE_ALL] + tsd->subele_script[rh_ele] + tsd->subele_script[ELE_ALL];
int ele_fix = tsd->indexed_bonus.subele[rh_ele] + tsd->indexed_bonus.subele[ELE_ALL] + tsd->indexed_bonus.subele_script[rh_ele] + tsd->indexed_bonus.subele_script[ELE_ALL];
for (const auto &it : tsd->subele2) {
if (it.ele != rh_ele)
@ -906,7 +906,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
cardfix = cardfix * (100 - ele_fix) / 100;
if( left&1 && lh_ele != rh_ele ) {
int ele_fix_lh = tsd->subele[lh_ele] + tsd->subele[ELE_ALL] + tsd->subele_script[lh_ele] + tsd->subele_script[ELE_ALL];
int ele_fix_lh = tsd->indexed_bonus.subele[lh_ele] + tsd->indexed_bonus.subele[ELE_ALL] + tsd->indexed_bonus.subele_script[lh_ele] + tsd->indexed_bonus.subele_script[ELE_ALL];
for (const auto &it : tsd->subele2) {
if (it.ele != lh_ele)
@ -920,11 +920,11 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
cardfix = cardfix * (100 - ele_fix_lh) / 100;
}
cardfix = cardfix * (100 - tsd->subdefele[s_defele] - tsd->subdefele[ELE_ALL]) / 100;
cardfix = cardfix * (100 - tsd->indexed_bonus.subdefele[s_defele] - tsd->indexed_bonus.subdefele[ELE_ALL]) / 100;
}
cardfix = cardfix * (100 - tsd->subsize[sstatus->size] - tsd->subsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 - tsd->subrace2[s_race2]) / 100;
int race_fix = tsd->subrace[sstatus->race] + tsd->subrace[RC_ALL];
cardfix = cardfix * (100 - tsd->indexed_bonus.subsize[sstatus->size] - tsd->indexed_bonus.subsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 - tsd->indexed_bonus.subrace2[s_race2]) / 100;
int race_fix = tsd->indexed_bonus.subrace[sstatus->race] + tsd->indexed_bonus.subrace[RC_ALL];
for (const auto &it : tsd->subrace3) {
if (it.race != sstatus->race)
continue;
@ -935,7 +935,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
race_fix += it.rate;
}
cardfix = cardfix * (100 - race_fix) / 100;
cardfix = cardfix * (100 - tsd->subclass[sstatus->class_] - tsd->subclass[CLASS_ALL]) / 100;
cardfix = cardfix * (100 - tsd->indexed_bonus.subclass[sstatus->class_] - tsd->indexed_bonus.subclass[CLASS_ALL]) / 100;
for (const auto &it : tsd->add_def) {
if (it.id == s_class) {
cardfix = cardfix * (100 - it.val) / 100;
@ -956,7 +956,7 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
// Affected by target DEF bonuses
if( tsd && !nk[NK_IGNOREDEFCARD] ) {
if( !nk[NK_IGNOREELEMENT] ) { // Affected by Element modifier bonuses
int ele_fix = tsd->subele[rh_ele] + tsd->subele[ELE_ALL] + tsd->subele_script[rh_ele] + tsd->subele_script[ELE_ALL];
int ele_fix = tsd->indexed_bonus.subele[rh_ele] + tsd->indexed_bonus.subele[ELE_ALL] + tsd->indexed_bonus.subele_script[rh_ele] + tsd->indexed_bonus.subele_script[ELE_ALL];
for (const auto &it : tsd->subele2) {
if (it.ele != rh_ele)
@ -968,10 +968,10 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
ele_fix += it.rate;
}
if (s_defele != ELE_NONE)
ele_fix += tsd->subdefele[s_defele] + tsd->subdefele[ELE_ALL];
ele_fix += tsd->indexed_bonus.subdefele[s_defele] + tsd->indexed_bonus.subdefele[ELE_ALL];
cardfix = cardfix * (100 - ele_fix) / 100;
}
int race_fix = tsd->subrace[sstatus->race] + tsd->subrace[RC_ALL];
int race_fix = tsd->indexed_bonus.subrace[sstatus->race] + tsd->indexed_bonus.subrace[RC_ALL];
for (const auto &it : tsd->subrace3) {
if (it.race != sstatus->race)
continue;
@ -983,9 +983,9 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
}
cardfix = cardfix * (100 - race_fix) / 100;
cardfix = cardfix * (100 - tsd->subsize[sstatus->size] - tsd->subsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 - tsd->subrace2[s_race2]) / 100;
cardfix = cardfix * (100 - tsd->subclass[sstatus->class_] - tsd->subclass[CLASS_ALL]) / 100;
cardfix = cardfix * (100 - tsd->indexed_bonus.subsize[sstatus->size] - tsd->indexed_bonus.subsize[SZ_ALL]) / 100;
cardfix = cardfix * (100 - tsd->indexed_bonus.subrace2[s_race2]) / 100;
cardfix = cardfix * (100 - tsd->indexed_bonus.subclass[sstatus->class_] - tsd->indexed_bonus.subclass[CLASS_ALL]) / 100;
cardfix = cardfix * (100 - tsd->bonus.misc_def_rate) / 100;
if( flag&BF_SHORT )
cardfix = cardfix * (100 - tsd->bonus.near_attack_def_rate) / 100;
@ -1053,12 +1053,12 @@ static void battle_absorb_damage(struct block_list *bl, struct Damage *d) {
* @param target: Target of attack
* @param sc: Status Change data
* @param d: Damage data
* @param damage: Damage received
* @param damage: Damage received as a reference
* @param skill_id: Skill ID
* @param skill_lv: Skill level
* @return True: Damage inflicted, False: Missed
**/
bool battle_status_block_damage(struct block_list *src, struct block_list *target, struct status_change *sc, struct Damage *d, int64 damage, uint16 skill_id, uint16 skill_lv) {
bool battle_status_block_damage(struct block_list *src, struct block_list *target, struct status_change *sc, struct Damage *d, int64 &damage, uint16 skill_id, uint16 skill_lv) {
if (!src || !target || !sc || !d)
return true;
@ -1351,7 +1351,7 @@ bool battle_status_block_damage(struct block_list *src, struct block_list *targe
*/
int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Damage *d,int64 damage,uint16 skill_id,uint16 skill_lv)
{
struct map_session_data *sd = NULL;
struct map_session_data *sd = NULL, *tsd = BL_CAST(BL_PC, src);
struct status_change *sc;
struct status_change_entry *sce;
int div_ = d->div_, flag = d->flag;
@ -1435,7 +1435,6 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
#endif
if( damage ) {
struct map_session_data *tsd = BL_CAST(BL_PC, src);
if( sc->data[SC_DEEPSLEEP] ) {
damage += damage / 2; // 1.5 times more damage while in Deep Sleep.
status_change_end(bl,SC_DEEPSLEEP,INVALID_TIMER);
@ -1689,8 +1688,6 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
if (sc->data[SC_UNLIMITEDHUMMINGVOICE] && flag&BF_MAGIC)
damage += damage * sc->data[SC_UNLIMITEDHUMMINGVOICE]->val3 / 100;
map_session_data *tsd = (map_session_data *)src;
if (tsd && (sce = sc->data[SC_SOULREAPER])) {
if (rnd()%100 < sce->val2 && tsd->soulball < MAX_SOUL_BALL) {
clif_specialeffect(src, 1208, AREA);
@ -1725,7 +1722,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
damage = div_;
}
if (sd && pc_ismadogear(sd)) {
if (tsd && pc_ismadogear(tsd)) {
short element = skill_get_ele(skill_id, skill_lv);
if( !skill_id || element == ELE_WEAPON ) { //Take weapon's element
@ -1739,7 +1736,7 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
element = status_get_attack_sc_element(src,status_get_sc(src));
else if( element == ELE_RANDOM ) //Use random element
element = rnd()%ELE_ALL;
pc_overheat(sd, (element == ELE_FIRE ? 3 : 1));
pc_overheat(tsd, (element == ELE_FIRE ? 3 : 1));
}
return damage;
@ -2050,14 +2047,14 @@ static void battle_add_weapon_damage(struct map_session_data *sd, int64 *damage,
if (lr_type == EQI_HAND_L) {
if (sd->left_weapon.overrefine)
(*damage) = (*damage) + rnd() % sd->left_weapon.overrefine + 1;
if (sd->weapon_damage_rate[sd->weapontype2])
(*damage) += (*damage) * sd->weapon_damage_rate[sd->weapontype2] / 100;
if (sd->indexed_bonus.weapon_damage_rate[sd->weapontype2])
(*damage) += (*damage) * sd->indexed_bonus.weapon_damage_rate[sd->weapontype2] / 100;
}
else if (lr_type == EQI_HAND_R) {
if (sd->right_weapon.overrefine)
(*damage) = (*damage) + rnd() % sd->right_weapon.overrefine + 1;
if (sd->weapon_damage_rate[sd->weapontype1])
(*damage) += (*damage) * sd->weapon_damage_rate[sd->weapontype1] / 100;
if (sd->indexed_bonus.weapon_damage_rate[sd->weapontype1])
(*damage) += (*damage) * sd->indexed_bonus.weapon_damage_rate[sd->weapontype1] / 100;
}
}
@ -2509,7 +2506,7 @@ static bool is_attack_right_handed(struct block_list *src, int skill_id)
struct map_session_data *sd = BL_CAST(BL_PC, src);
//Skills ALWAYS use ONLY your right-hand weapon (tested on Aegis 10.2)
if(!skill_id && sd && sd->weapontype1 == 0 && sd->weapontype2 > 0)
if(!skill_id && sd && sd->weapontype1 == W_FIST && sd->weapontype2 != W_FIST)
return false;
}
return true;
@ -2531,7 +2528,7 @@ static bool is_attack_left_handed(struct block_list *src, int skill_id)
struct map_session_data *sd = BL_CAST(BL_PC, src);
if (sd) {
if (sd->weapontype1 == 0 && sd->weapontype2 > 0)
if (sd->weapontype1 == W_FIST && sd->weapontype2 != W_FIST)
return true;
if (sd->status.weapon == W_KATAR)
return true;
@ -2587,7 +2584,7 @@ static bool is_attack_critical(struct Damage* wd, struct block_list *src, struct
short cri = sstatus->cri;
if (sd) {
cri += sd->critaddrace[tstatus->race] + sd->critaddrace[RC_ALL];
cri += sd->indexed_bonus.critaddrace[tstatus->race] + sd->indexed_bonus.critaddrace[RC_ALL];
if(!skill_id && is_skill_using_arrow(src, skill_id)) {
cri += sd->bonus.arrow_cri;
cri += sd->bonus.critical_rangeatk;
@ -3790,10 +3787,12 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
skillratio += 30 * skill_lv;
break;
case AS_SONICBLOW:
skillratio += 300 + 40 * skill_lv;
#ifdef RENEWAL
skillratio += 100 + 100 * skill_lv;
if (tstatus->hp < tstatus->max_hp >> 1)
skillratio += skillratio / 2;
#else
skillratio += 300 + 40 * skill_lv;
#endif
break;
case TF_SPRINKLESAND:
@ -5053,8 +5052,8 @@ static void battle_calc_defense_reduction(struct Damage* wd, struct block_list *
short def2 = tstatus->def2;
if (sd) {
int i = sd->ignore_def_by_race[tstatus->race] + sd->ignore_def_by_race[RC_ALL];
i += sd->ignore_def_by_class[tstatus->class_] + sd->ignore_def_by_class[CLASS_ALL];
int i = sd->indexed_bonus.ignore_def_by_race[tstatus->race] + sd->indexed_bonus.ignore_def_by_race[RC_ALL];
i += sd->indexed_bonus.ignore_def_by_class[tstatus->class_] + sd->indexed_bonus.ignore_def_by_class[CLASS_ALL];
if (i) {
i = min(i,100); //cap it to 100 for 0 def min
def1 -= def1 * i / 100;
@ -5279,8 +5278,9 @@ static void battle_calc_attack_plant(struct Damage* wd, struct block_list *src,s
if (attack_hits && target->type == BL_MOB) {
struct status_change *sc = status_get_sc(target);
int64 damage_dummy = 1;
if (sc && !battle_status_block_damage(src, target, sc, wd, 1, skill_id, skill_lv)) { // Statuses that reduce damage to 0.
if (sc && !battle_status_block_damage(src, target, sc, wd, damage_dummy, skill_id, skill_lv)) { // Statuses that reduce damage to 0.
wd->damage = wd->damage2 = 0;
return;
}
@ -6732,9 +6732,9 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
}
if(sd) {
i = sd->ignore_mdef_by_race[tstatus->race] + sd->ignore_mdef_by_race[RC_ALL];
i += sd->ignore_mdef_by_class[tstatus->class_] + sd->ignore_mdef_by_class[CLASS_ALL];
i += sd->ignore_mdef_by_race2[status_get_race2(target)];
i = sd->indexed_bonus.ignore_mdef_by_race[tstatus->race] + sd->indexed_bonus.ignore_mdef_by_race[RC_ALL];
i += sd->indexed_bonus.ignore_mdef_by_class[tstatus->class_] + sd->indexed_bonus.ignore_mdef_by_class[CLASS_ALL];
i += sd->indexed_bonus.ignore_mdef_by_race2[status_get_race2(target)];
if (i)
{
if (i > 100) i = 100;
@ -7587,7 +7587,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
if (sd->inventory_data[index]) {
switch (sd->status.weapon) {
case W_BOW:
if (sd->inventory_data[index]->look != A_ARROW) {
if (sd->inventory_data[index]->subtype != AMMO_ARROW) {
clif_arrow_fail(sd,0);
return ATK_NONE;
}
@ -7596,17 +7596,17 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t
case W_RIFLE:
case W_GATLING:
case W_SHOTGUN:
if (sd->inventory_data[index]->look != A_BULLET) {
if (sd->inventory_data[index]->subtype != AMMO_BULLET) {
clif_skill_fail(sd,0,USESKILL_FAIL_NEED_MORE_BULLET,0);
return ATK_NONE;
}
break;
case W_GRENADE:
if (sd->inventory_data[index]->look !=
if (sd->inventory_data[index]->subtype !=
#ifdef RENEWAL
A_BULLET) {
AMMO_BULLET) {
#else
A_GRENADE) {
AMMO_GRENADE) {
#endif
clif_skill_fail(sd,0,USESKILL_FAIL_NEED_MORE_BULLET,0);
return ATK_NONE;

View File

@ -671,7 +671,7 @@ void do_init_buyingstore_autotrade( void ) {
Sql_GetData(mmysql_handle, 0, &data, NULL); at->id = atoi(data);
Sql_GetData(mmysql_handle, 1, &data, NULL); at->account_id = atoi(data);
Sql_GetData(mmysql_handle, 2, &data, NULL); at->char_id = atoi(data);
Sql_GetData(mmysql_handle, 3, &data, NULL); at->sex = (data[0] == 'F') ? 0 : 1;
Sql_GetData(mmysql_handle, 3, &data, NULL); at->sex = (data[0] == 'F') ? SEX_FEMALE : SEX_MALE;
Sql_GetData(mmysql_handle, 4, &data, &len); safestrncpy(at->title, data, zmin(len + 1, MESSAGE_SIZE));
Sql_GetData(mmysql_handle, 5, &data, NULL); at->limit = atoi(data);
Sql_GetData(mmysql_handle, 6, &data, NULL); at->dir = atoi(data);

View File

@ -82,6 +82,9 @@ static struct eri *delay_clearunit_ers;
struct s_packet_db packet_db[MAX_PACKET_DB + 1];
int packet_db_ack[MAX_ACK_FUNC + 1];
// Reuseable global packet buffer to prevent too many allocations
// Take socket.cpp::socket_max_client_packet into consideration
static int8 packet_buffer[UINT16_MAX];
unsigned long color_table[COLOR_MAX];
#include "clif_obfuscation.hpp"
@ -2645,7 +2648,7 @@ static void clif_addcards( struct EQUIPSLOTINFO* buf, struct item* item ){
int i = 0, j;
// Client only receives four cards.. so randomly send them a set of cards. [Skotlex]
if( MAX_SLOTS > 4 && ( j = itemdb_slot( item->nameid ) ) > 4 ){
if( MAX_SLOTS > 4 && ( j = itemdb_slots( item->nameid ) ) > 4 ){
i = rnd() % ( j - 3 ); //eg: 6 slots, possible i values: 0->3, 1->4, 2->5 => i = rnd()%3;
}
@ -6769,8 +6772,8 @@ void clif_use_card(struct map_session_data *sd,int idx)
if(sd->inventory_data[i]->type == IT_ARMOR && (ep & EQP_ACC) && ((ep & EQP_ACC) != EQP_ACC) && ((sd->inventory_data[i]->equip & EQP_ACC) != (ep & EQP_ACC)) ) // specific accessory-card can only be inserted to specific accessory.
continue;
ARR_FIND( 0, sd->inventory_data[i]->slot, j, sd->inventory.u.items_inventory[i].card[j] == 0 );
if( j == sd->inventory_data[i]->slot ) // No room
ARR_FIND( 0, sd->inventory_data[i]->slots, j, sd->inventory.u.items_inventory[i].card[j] == 0 );
if( j == sd->inventory_data[i]->slots ) // No room
continue;
if( sd->inventory.u.items_inventory[i].equip > 0 ) // Do not check items that are already equipped
@ -6967,7 +6970,7 @@ void clif_item_refine_list( struct map_session_data *sd ){
int count = 0;
for( int i = 0; i < MAX_INVENTORY; i++ ){
unsigned char wlv;
uint16 wlv;
if( sd->inventory.u.items_inventory[i].nameid > 0 && sd->inventory.u.items_inventory[i].refine < skill_lv &&
sd->inventory.u.items_inventory[i].identify && ( wlv = itemdb_wlv(sd->inventory.u.items_inventory[i].nameid ) ) >= 1 &&
@ -8808,7 +8811,7 @@ void clif_guild_emblem_area(struct block_list* bl)
// (emblem in the flag npcs and emblem over the head in agit maps) [FlavioJS]
PACKET_ZC_CHANGE_GUILD p{};
p.packetType = changeGuildEmblem;
p.packetType = HEADER_ZC_CHANGE_GUILD;
p.guild_id = status_get_guild_id(bl);
p.emblem_id = status_get_emblem_id(bl);
@ -16540,7 +16543,7 @@ void clif_parse_Auction_register(int fd, struct map_session_data *sd)
return;
}
safestrncpy(auction.item_name, item->jname, sizeof(auction.item_name));
safestrncpy(auction.item_name, item->ename.c_str(), sizeof(auction.item_name));
auction.type = item->type;
memcpy(&auction.item, &sd->inventory.u.items_inventory[sd->auction.index], sizeof(struct item));
auction.item.amount = 1;
@ -16649,6 +16652,7 @@ void clif_parse_Auction_buysell(int fd, struct map_session_data* sd)
///
void clif_cashshop_open( struct map_session_data* sd, int tab ){
#if PACKETVER_MAIN_NUM >= 20101123 || PACKETVER_RE_NUM >= 20120328 || defined(PACKETVER_ZERO)
nullpo_retv( sd );
struct PACKET_ZC_SE_CASHSHOP_OPEN p;
@ -16661,9 +16665,11 @@ void clif_cashshop_open( struct map_session_data* sd, int tab ){
#endif
clif_send( &p, sizeof( p ), &sd->bl, SELF );
#endif
}
void clif_parse_cashshop_open_request( int fd, struct map_session_data* sd ){
#if PACKETVER_MAIN_NUM >= 20101123 || PACKETVER_RE_NUM >= 20120328 || defined(PACKETVER_ZERO)
nullpo_retv( sd );
int tab = 0;
@ -16678,12 +16684,15 @@ void clif_parse_cashshop_open_request( int fd, struct map_session_data* sd ){
sd->npc_shopid = -1; // Set npc_shopid when using cash shop from "cash shop" button [Aelys|Susu] bugreport:96
clif_cashshop_open( sd, tab );
#endif
}
void clif_parse_cashshop_close( int fd, struct map_session_data* sd ){
#if PACKETVER_MAIN_NUM >= 20101123 || PACKETVER_RE_NUM >= 20120328 || defined(PACKETVER_ZERO)
sd->state.cashshop_open = false;
sd->npc_shopid = 0; // Reset npc_shopid when using cash shop from "cash shop" button [Aelys|Susu] bugreport:96
// No need to do anything here
#endif
}
//0846 <tabid>.W (CZ_REQ_SE_CASH_TAB_CODE))
@ -20549,9 +20558,7 @@ void clif_navigateTo(struct map_session_data *sd, const char* mapname, uint16 x,
/// Send hat effects to the client (ZC_HAT_EFFECT).
/// 0A3B <Length>.W <AID>.L <Status>.B { <HatEffectId>.W }
void clif_hat_effects( struct map_session_data* sd, struct block_list* bl, enum send_target target ){
#if PACKETVER >= 20150513
unsigned char* buf;
int len,i;
#if PACKETVER_MAIN_NUM >= 20150507 || PACKETVER_RE_NUM >= 20150429 || defined(PACKETVER_ZERO)
struct map_session_data *tsd;
struct block_list* tbl;
@ -20563,39 +20570,40 @@ void clif_hat_effects( struct map_session_data* sd, struct block_list* bl, enum
tbl = bl;
}
if( !tsd->hatEffectCount )
nullpo_retv( tsd );
if( tsd->hatEffects.empty() ){
return;
len = 9 + tsd->hatEffectCount * 2;
buf = (unsigned char*)aMalloc( len );
WBUFW(buf,0) = 0xa3b;
WBUFW(buf,2) = len;
WBUFL(buf,4) = tsd->bl.id;
WBUFB(buf,8) = 1;
for( i = 0; i < tsd->hatEffectCount; i++ ){
WBUFW(buf,9+i*2) = tsd->hatEffectIDs[i];
}
clif_send(buf, len,tbl,target);
struct PACKET_ZC_HAT_EFFECT* p = (struct PACKET_ZC_HAT_EFFECT*)packet_buffer;
aFree(buf);
p->packetType = HEADER_ZC_HAT_EFFECT;
p->packetLength = (int16)( sizeof( struct PACKET_ZC_HAT_EFFECT ) + sizeof( int16 ) * tsd->hatEffects.size() );
p->aid = tsd->bl.id;
p->status = 1;
for( size_t i = 0; i < tsd->hatEffects.size(); i++ ){
p->effects[i] = tsd->hatEffects[i];
}
clif_send( p, p->packetLength, tbl, target );
#endif
}
void clif_hat_effect_single( struct map_session_data* sd, uint16 effectId, bool enable ){
#if PACKETVER >= 20150513
unsigned char buf[13];
#if PACKETVER_MAIN_NUM >= 20150507 || PACKETVER_RE_NUM >= 20150429 || defined(PACKETVER_ZERO)
nullpo_retv( sd );
WBUFW(buf,0) = 0xa3b;
WBUFW(buf,2) = 13;
WBUFL(buf,4) = sd->bl.id;
WBUFB(buf,8) = enable;
WBUFL(buf,9) = effectId;
struct PACKET_ZC_HAT_EFFECT* p = (struct PACKET_ZC_HAT_EFFECT*)packet_buffer;
clif_send(buf,13,&sd->bl,AREA);
p->packetType = HEADER_ZC_HAT_EFFECT;
p->packetLength = (int16)( sizeof( struct PACKET_ZC_HAT_EFFECT ) + sizeof( int16 ) );
p->aid = sd->bl.id;
p->status = enable;
p->effects[0] = effectId;
clif_send( p, p->packetLength, &sd->bl, AREA );
#endif
}

View File

@ -2248,10 +2248,12 @@
packet(0x0A2D,-1); // ZC_EQUIPWIN_MICROSCOPE_V6
#endif
#if PACKETVER_MAIN_NUM >= 20150507 || PACKETVER_RE_NUM >= 20150429 || defined(PACKETVER_ZERO)
packet( HEADER_ZC_HAT_EFFECT, -1 );
#endif
// 2015-05-13aRagexe
#if PACKETVER >= 20150513
// New Packets
packet(0xA3B,-1); // ZC_HAT_EFFECT
// RODEX Mail system
packet(0x09E7,3); // ZC_NOTIFY_UNREADMAIL
parseable_packet(0x09E8,11,clif_parse_Mail_refreshinbox,2,3); // CZ_OPEN_MAILBOX

File diff suppressed because it is too large Load Diff

View File

@ -4,10 +4,17 @@
#ifndef ITEMDB_HPP
#define ITEMDB_HPP
#include <vector>
#include "../common/database.hpp"
#include "../common/db.hpp"
#include "../common/malloc.hpp"
#include "../common/mmo.hpp" // ITEM_NAME_LENGTH
#include "script.hpp"
#include "status.hpp"
enum e_ammo_type : uint8;
///Use apple for unknown items.
const t_itemid UNKNOWN_ITEM_ID = 512;
@ -207,36 +214,23 @@ enum poison_item_list : t_itemid
ITEMID_VENOMBLEED,
};
///Item No Use List
enum item_nouse_list
{
NOUSE_SITTING = 0x01,
};
///Item job
enum e_item_job
enum e_item_job : uint16
{
ITEMJ_NONE = 0x00,
ITEMJ_NORMAL = 0x01,
ITEMJ_UPPER = 0x02,
ITEMJ_BABY = 0x04,
ITEMJ_THIRD = 0x08,
ITEMJ_THIRD_TRANS = 0x10,
ITEMJ_THIRD_UPPER = 0x10,
ITEMJ_THIRD_BABY = 0x20,
};
ITEMJ_MAX = 0xFF,
enum e_item_ammo
{
AMMO_ARROW = 1,
AMMO_THROWABLE_DAGGER,
AMMO_BULLET,
AMMO_SHELL,
AMMO_GRENADE,
AMMO_SHURIKEN,
AMMO_KUNAI,
AMMO_CANNONBALL,
AMMO_THROWABLE_ITEM, ///Sling items
MAX_AMMO_TYPE,
#ifdef RENEWAL
ITEMJ_ALL = ITEMJ_NORMAL | ITEMJ_UPPER | ITEMJ_BABY | ITEMJ_THIRD | ITEMJ_THIRD_UPPER | ITEMJ_THIRD_BABY,
#else
ITEMJ_ALL = ITEMJ_NORMAL | ITEMJ_UPPER | ITEMJ_BABY,
#endif
};
#define AMMO_TYPE_ALL ((1<<MAX_AMMO_TYPE)-1)
@ -809,16 +803,40 @@ enum e_itemshop_restrictions {
ISR_BOUND_GUILDLEADER_ONLY = 0x8,
};
///Item combo struct
struct item_combo
{
struct script_code *script;
t_itemid *nameid;/* nameid array */
unsigned char count;
unsigned short id;/* id of this combo */
bool isRef;/* whether this struct is a reference or the master */
/// Enum for item drop effects
enum e_item_drop_effect : uint16 {
DROPEFFECT_NONE = 0,
DROPEFFECT_CLIENT,
DROPEFFECT_WHITE_PILLAR,
DROPEFFECT_BLUE_PILLAR,
DROPEFFECT_YELLOW_PILLAR,
DROPEFFECT_PURPLE_PILLAR,
DROPEFFECT_ORANGE_PILLAR,
DROPEFFECT_MAX
};
/// Enum for items with delayed consumption
enum e_delay_consume : uint8 {
DELAYCONSUME_NONE = 0x0,
DELAYCONSUME_TEMP = 0x1, // Items that are not consumed immediately upon double-click
DELAYCONSUME_NOCONSUME = 0x2, // Items that are not removed upon double-click
};
/// Item combo struct
struct s_item_combo {
std::vector<t_itemid> nameid;
script_code *script;
uint32 id;
~s_item_combo() {
if (this->script) {
script_free_code(this->script);
this->script = nullptr;
}
this->nameid.clear();
}
};
/// Struct of item group entry
struct s_item_group_entry
@ -861,34 +879,34 @@ extern struct s_roulette_db rd;
struct item_data
{
t_itemid nameid;
char name[ITEM_NAME_LENGTH],jname[ITEM_NAME_LENGTH];
std::string name, ename;
//Do not add stuff between value_buy and view_id (see how getiteminfo works)
int value_buy;
int value_sell;
int type;
uint32 value_buy;
uint32 value_sell;
item_types type;
uint8 subtype;
int maxchance; //For logs, for external game info, for scripts: Max drop chance of this item (e.g. 0.01% , etc.. if it = 0, then monsters don't drop it, -1 denotes items sold in shops only) [Lupus]
int sex;
int equip;
int weight;
int atk;
int def;
int range;
int slot;
int look;
int elv;
int wlv;
uint8 sex;
uint32 equip;
uint32 weight;
uint32 atk;
uint32 def;
uint16 range;
uint16 slots;
uint32 look;
uint16 elv;
uint16 wlv;
t_itemid view_id;
int elvmax; ///< Maximum level for this item
uint16 elvmax; ///< Maximum level for this item
#ifdef RENEWAL
int matk;
uint32 matk;
#endif
int delay;
//Lupus: I rearranged order of these fields due to compatibility with ITEMINFO script command
// some script commands should be revised as well...
uint64 class_base[3]; //Specifies if the base can wear this item (split in 3 indexes per type: 1-1, 2-1, 2-2)
unsigned class_upper : 6; //Specifies if the class-type can equip it (0x01: normal, 0x02: trans, 0x04: baby, 0x08:third, 0x10:trans-third, 0x20-third-baby)
uint16 class_upper; //Specifies if the class-type can equip it (See e_item_job)
struct {
int chance;
int id;
@ -900,33 +918,52 @@ struct item_data
unsigned available : 1;
uint32 no_equip;
unsigned no_refine : 1; // [celest]
unsigned delay_consume : 2; // 1 - Signifies items that are not consumed immediately upon double-click; 2 - Signifies items that are not removed on consumption [Skotlex]
unsigned trade_restriction : 9; //Item restrictions mask [Skotlex]
unsigned delay_consume; // [Skotlex]
struct {
bool drop, trade, trade_partner, sell, cart, storage, guild_storage, mail, auction;
} trade_restriction; //Item restrictions mask [Skotlex]
unsigned autoequip: 1;
unsigned buyingstore : 1;
unsigned dead_branch : 1; // As dead branch item. Logged at `branchlog` table and cannot be used at 'nobranch' mapflag [Cydh]
unsigned group : 1; // As item group container [Cydh]
bool buyingstore;
bool dead_branch; // As dead branch item. Logged at `branchlog` table and cannot be used at 'nobranch' mapflag [Cydh]
bool group; // As item group container [Cydh]
unsigned guid : 1; // This item always be attached with GUID and make it as bound item! [Cydh]
unsigned broadcast : 1; ///< Will be broadcasted if someone obtain the item [Cydh]
bool broadcast; ///< Will be broadcasted if someone obtain the item [Cydh]
bool bindOnEquip; ///< Set item as bound when equipped
uint8 dropEffect; ///< Drop Effect Mode
e_item_drop_effect dropEffect; ///< Drop Effect Mode
} flag;
struct {// item stacking limitation
unsigned short amount;
unsigned int inventory:1;
unsigned int cart:1;
unsigned int storage:1;
unsigned int guildstorage:1;
uint16 amount;
bool inventory, cart, storage, guild_storage;
} stack;
struct {// used by item_nouse.txt
unsigned int flag;
unsigned short override;
struct {
uint16 override;
bool sitting;
} item_usage;
short gm_lv_trade_override; //GM-level to override trade_restriction
/* bugreport:309 */
struct item_combo **combos;
unsigned char combos_count;
short delay_sc; ///< Use delay group if any instead using player's item_delay data [Cydh]
std::vector<std::shared_ptr<s_item_combo>> combos;
struct {
uint32 duration;
sc_type sc; ///< Use delay group if any instead using player's item_delay data [Cydh]
} delay;
~item_data() {
if (this->script){
script_free_code(this->script);
this->script = nullptr;
}
if (this->equip_script){
script_free_code(this->equip_script);
this->equip_script = nullptr;
}
if (this->unequip_script){
script_free_code(this->unequip_script);
this->unequip_script = nullptr;
}
this->combos.clear();
}
bool isStackable();
int inventorySlotNeeded(int quantity);
@ -957,14 +994,27 @@ struct s_random_opt_group {
uint16 total;
};
class ItemDatabase : public TypesafeCachedYamlDatabase<t_itemid, item_data> {
public:
ItemDatabase() : TypesafeCachedYamlDatabase("ITEM_DB", 1) {
}
const std::string getDefaultLocation();
uint64 parseBodyNode(const YAML::Node& node);
};
extern ItemDatabase item_db;
struct item_data* itemdb_searchname(const char *name);
struct item_data* itemdb_search_aegisname( const char *str );
int itemdb_searchname_array(struct item_data** data, int size, const char *str);
struct item_data* itemdb_search(t_itemid nameid);
struct item_data* itemdb_exists(t_itemid nameid);
#define itemdb_name(n) itemdb_search(n)->name
#define itemdb_jname(n) itemdb_search(n)->jname
#define itemdb_name(n) itemdb_search(n)->name.c_str()
#define itemdb_ename(n) itemdb_search(n)->ename.c_str()
#define itemdb_type(n) itemdb_search(n)->type
#define itemdb_subtype(n) itemdb_search(n)->subtype
#define itemdb_atk(n) itemdb_search(n)->atk
#define itemdb_def(n) itemdb_search(n)->def
#define itemdb_look(n) itemdb_search(n)->look
@ -974,14 +1024,14 @@ struct item_data* itemdb_exists(t_itemid nameid);
#define itemdb_equipscript(n) itemdb_search(n)->script
#define itemdb_wlv(n) itemdb_search(n)->wlv
#define itemdb_range(n) itemdb_search(n)->range
#define itemdb_slot(n) itemdb_search(n)->slot
#define itemdb_slots(n) itemdb_search(n)->slots
#define itemdb_available(n) (itemdb_search(n)->flag.available)
#define itemdb_traderight(n) (itemdb_search(n)->flag.trade_restriction)
#define itemdb_viewid(n) (itemdb_search(n)->view_id)
#define itemdb_autoequip(n) (itemdb_search(n)->flag.autoequip)
#define itemdb_dropeffect(n) (itemdb_search(n)->flag.dropEffect)
const char* itemdb_typename(enum item_types type);
const char *itemdb_typename_ammo (enum e_item_ammo ammo);
const char *itemdb_typename_ammo (e_ammo_type ammo);
struct s_item_group_entry *itemdb_get_randgroupitem(uint16 group_id, uint8 sub_group);
t_itemid itemdb_searchrandomid(uint16 group_id, uint8 sub_group);
@ -1018,7 +1068,7 @@ bool itemdb_isstackable2(struct item_data *id);
#define itemdb_isstackable(nameid) itemdb_isstackable2(itemdb_search(nameid))
bool itemdb_isNoEquip(struct item_data *id, uint16 m);
struct item_combo *itemdb_combo_exists(unsigned short combo_id);
s_item_combo *itemdb_combo_exists(uint32 combo_id);
struct s_item_group_db *itemdb_group_exists(unsigned short group_id);
bool itemdb_group_item_exists(unsigned short group_id, t_itemid nameid);

View File

@ -315,20 +315,15 @@
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\homun_skill_tree.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\homun_skill_tree.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\homunculus_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\homunculus_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\instance_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\instance_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_avail.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_avail.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_bluebox.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_bluebox.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_buyingstore.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_buyingstore.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_cardalbum.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_cardalbum.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_cash_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_cash_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_combo_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_combo_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_delay.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_delay.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_flag.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_flag.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_db.yml" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_db.yml')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_giftbox.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_giftbox.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_group_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_group_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_misc.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_misc.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_noequip.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_noequip.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_nouse.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_nouse.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_package.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_package.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_randomopt_db.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_randomopt_db.txt')" />
<Copy SourceFiles="$(SolutionDir)db\import-tmpl\item_randomopt_group.txt" DestinationFolder="$(SolutionDir)db\import\" ContinueOnError="true" Condition="!Exists('$(SolutionDir)db\import\item_randomopt_group.txt')" />

View File

@ -1843,7 +1843,7 @@ int map_addflooritem(struct item *item, int amount, int16 m, int16 x, int16 y, i
nullpo_ret(item);
if (!(flags&4) && battle_config.item_onfloor && (itemdb_traderight(item->nameid)&1))
if (!(flags&4) && battle_config.item_onfloor && (itemdb_traderight(item->nameid).trade))
return 0; //can't be dropped
if (!map_searchrandfreecell(m,&x,&y,flags&2?1:0))

View File

@ -73,6 +73,7 @@ void map_msg_reload(void);
#define MAPID_BASEMASK 0x00ff
#define MAPID_UPPERMASK 0x0fff
#define MAPID_THIRDMASK (JOBL_THIRD|MAPID_UPPERMASK)
#define MAPID_ALL 0xffff
//First Jobs
//Note the oddity of the novice:

View File

@ -2756,8 +2756,8 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
drop_rate = (int)(drop_rate*1.25);
// Add class and race specific bonuses
drop_rate_bonus += sd->dropaddclass[md->status.class_] + sd->dropaddclass[CLASS_ALL];
drop_rate_bonus += sd->dropaddrace[md->status.race] + sd->dropaddrace[RC_ALL];
drop_rate_bonus += sd->indexed_bonus.dropaddclass[md->status.class_] + sd->indexed_bonus.dropaddclass[CLASS_ALL];
drop_rate_bonus += sd->indexed_bonus.dropaddrace[md->status.race] + sd->indexed_bonus.dropaddrace[RC_ALL];
// Increase drop rate if user has SC_ITEMBOOST
if (sd->sc.data[SC_ITEMBOOST])
@ -2794,7 +2794,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
//A Rare Drop Global Announce by Lupus
if( mvp_sd && drop_rate <= battle_config.rare_drop_announce ) {
char message[128];
sprintf (message, msg_txt(NULL,541), mvp_sd->status.name, md->name, it->jname, (float)drop_rate/100);
sprintf (message, msg_txt(NULL,541), mvp_sd->status.name, md->name, it->ename.c_str(), (float)drop_rate/100);
//MSG: "'%s' won %s's %s (chance: %0.02f%%)"
intif_broadcast(message,strlen(message)+1,BC_DEFAULT);
}
@ -2948,7 +2948,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
//A Rare MVP Drop Global Announce by Lupus
if(temp<=battle_config.rare_drop_announce) {
char message[128];
sprintf (message, msg_txt(NULL,541), mvp_sd->status.name, md->name, i_data->jname, temp/100.);
sprintf (message, msg_txt(NULL,541), mvp_sd->status.name, md->name, i_data->ename.c_str(), temp/100.);
//MSG: "'%s' won %s's %s (chance: %0.02f%%)"
intif_broadcast(message,strlen(message)+1,BC_DEFAULT);
}
@ -4530,7 +4530,7 @@ uint64 MobAvailDatabase::parseBodyNode(const YAML::Node &node) {
if (!this->asString(node, "Weapon", weapon))
return 0;
struct item_data *item = itemdb_searchname(weapon.c_str());
struct item_data *item = itemdb_search_aegisname(weapon.c_str());
if (item == nullptr) {
this->invalidWarning(node["Weapon"], "Weapon %s is not a valid item.\n", weapon.c_str());
@ -4551,7 +4551,7 @@ uint64 MobAvailDatabase::parseBodyNode(const YAML::Node &node) {
if (!this->asString(node, "Shield", shield))
return 0;
struct item_data *item = itemdb_searchname(shield.c_str());
struct item_data *item = itemdb_search_aegisname(shield.c_str());
if (item == nullptr) {
this->invalidWarning(node["Shield"], "Shield %s is not a valid item.\n", shield.c_str());
@ -4574,7 +4574,7 @@ uint64 MobAvailDatabase::parseBodyNode(const YAML::Node &node) {
struct item_data *item;
if ((item = itemdb_searchname(head.c_str())) == nullptr) {
if ((item = itemdb_search_aegisname(head.c_str())) == nullptr) {
this->invalidWarning(node["HeadTop"], "HeadTop %s is not a valid item.\n", head.c_str());
return 0;
}
@ -4593,7 +4593,7 @@ uint64 MobAvailDatabase::parseBodyNode(const YAML::Node &node) {
if (!this->asString(node, "HeadMid", head))
return 0;
struct item_data *item = itemdb_searchname(head.c_str());
struct item_data *item = itemdb_search_aegisname(head.c_str());
if (item == nullptr) {
this->invalidWarning(node["HeadMid"], "HeadMid %s is not a valid item.\n", head.c_str());
@ -4614,7 +4614,7 @@ uint64 MobAvailDatabase::parseBodyNode(const YAML::Node &node) {
if (!this->asString(node, "HeadLow", head))
return 0;
struct item_data *item = itemdb_searchname(head.c_str());
struct item_data *item = itemdb_search_aegisname(head.c_str());
if (item == nullptr) {
this->invalidWarning(node["HeadLow"], "HeadLow %s is not a valid item.\n", head.c_str());
@ -4637,7 +4637,7 @@ uint64 MobAvailDatabase::parseBodyNode(const YAML::Node &node) {
if (!this->asString(node, "PetEquip", equipment))
return 0;
struct item_data *item = itemdb_searchname(equipment.c_str());
struct item_data *item = itemdb_search_aegisname(equipment.c_str());
if (item == nullptr) {
this->invalidWarning(node["PetEquip"], "PetEquip %s is not a valid item.\n", equipment.c_str());

View File

@ -15,6 +15,12 @@
struct guardian_data;
//This is the distance at which @autoloot works,
//if the item drops farther from the player than this,
//it will not be autolooted. [Skotlex]
//Note: The range is unlimited unless this define is set.
//#define AUTOLOOT_DISTANCE AREA_SIZE
//The number of drops all mobs have and the max drop-slot that the steal skill will attempt to steal from.
#define MAX_MOB_DROP 10
#define MAX_MVP_DROP 3

View File

@ -1614,7 +1614,7 @@ static enum e_CASHSHOP_ACK npc_cashshop_process_payment(struct npc_data *nd, int
memset(output, '\0', sizeof(output));
sprintf(output, msg_txt(sd, 712), id->jname, id->nameid); // You do not have enough %s (%u).
sprintf(output, msg_txt(sd, 712), id->ename.c_str(), id->nameid); // You do not have enough %s (%u).
clif_messagecolor(&sd->bl, color_table[COLOR_RED], output, false, SELF);
return ERROR_TYPE_PURCHASE_FAIL;
}
@ -1797,7 +1797,7 @@ void npc_shop_currency_type(struct map_session_data *sd, struct npc_data *nd, in
memset(output, '\0', sizeof(output));
sprintf(output, msg_txt(sd, 714), id->jname, id->nameid); // Item Shop List: %s (%u)
sprintf(output, msg_txt(sd, 714), id->ename.c_str(), id->nameid); // Item Shop List: %s (%u)
clif_broadcast(&sd->bl, output, strlen(output) + 1, BC_BLUE,SELF);
}
@ -1886,7 +1886,7 @@ int npc_cashshop_buy(struct map_session_data *sd, t_itemid nameid, int amount, i
if( (double)nd->u.shop.shop_item[i].value * amount > INT_MAX )
{
ShowWarning("npc_cashshop_buy: Item '%s' (%u) price overflow attempt!\n", item->name, nameid);
ShowWarning("npc_cashshop_buy: Item '%s' (%u) price overflow attempt!\n", item->name.c_str(), nameid);
ShowDebug("(NPC:'%s' (%s,%d,%d), player:'%s' (%d/%d), value:%d, amount:%d)\n",
nd->exname, map_mapid2mapname(nd->bl.m), nd->bl.x, nd->bl.y, sd->status.name, sd->status.account_id, sd->status.char_id, nd->u.shop.shop_item[i].value, amount);
return ERROR_TYPE_ITEM_ID;
@ -3004,15 +3004,15 @@ static const char* npc_parse_shop(char* w1, char* w2, char* w3, char* w4, const
}
if (value == 0 && (type == NPCTYPE_SHOP || type == NPCTYPE_MARKETSHOP)) { // NPC selling items for free!
ShowWarning("npc_parse_shop: Item %s [%u] is being sold for FREE in file '%s', line '%d'.\n",
id->name, nameid2, filepath, strline(buffer,start-buffer));
id->name.c_str(), nameid2, filepath, strline(buffer,start-buffer));
}
if( type == NPCTYPE_SHOP && value*0.75 < id->value_sell*1.24 ) { // Exploit possible: you can buy and sell back with profit
ShowWarning("npc_parse_shop: Item %s [%u] discounted buying price (%d->%d) is less than overcharged selling price (%d->%d) at file '%s', line '%d'.\n",
id->name, nameid2, value, (int)(value*0.75), id->value_sell, (int)(id->value_sell*1.24), filepath, strline(buffer,start-buffer));
id->name.c_str(), nameid2, value, (int)(value*0.75), id->value_sell, (int)(id->value_sell*1.24), filepath, strline(buffer,start-buffer));
}
if (type == NPCTYPE_MARKETSHOP && (!qty || qty > UINT16_MAX)) {
ShowWarning("npc_parse_shop: Item %s [%u] is stocked with invalid value %d, changed to 1. File '%s', line '%d'.\n",
id->name, nameid2, qty, filepath, strline(buffer,start-buffer));
id->name.c_str(), nameid2, qty, filepath, strline(buffer,start-buffer));
qty = 1;
}
//for logs filters, atcommands and iteminfo script command

View File

@ -1188,6 +1188,9 @@ enum e_job_types
JT_4_4JOB_PHANTOMBOOK1,
JT_4_4JOB_PHANTOMBOOK2,
JT_4_4JOB_PHANTOMBOOK3,
JT_4_VENDING_MACHINE2,
JT_4_4JOB_MAURA = 10416,
JT_NEW_NPC_3RD_END = 19999,
NPC_RANGE3_END, // Official: JT_NEW_NPC_3RD_END=19999

View File

@ -63,7 +63,7 @@ struct PACKET_CZ_REQ_CASH_BARGAIN_SALE_ITEM_INFO{
#else
uint16 itemId;
#endif
};
} __attribute__((packed));
struct PACKET_ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO{
int16 packetType;
@ -74,7 +74,7 @@ struct PACKET_ZC_ACK_CASH_BARGAIN_SALE_ITEM_INFO{
uint16 itemId;
#endif
uint32 price;
};
} __attribute__((packed));
struct PACKET_CZ_REQ_APPLY_BARGAIN_SALE_ITEM{
int16 packetType;
@ -91,7 +91,7 @@ struct PACKET_CZ_REQ_APPLY_BARGAIN_SALE_ITEM{
#else
uint8 hours;
#endif
};
} __attribute__((packed));
struct PACKET_CZ_REQ_REMOVE_BARGAIN_SALE_ITEM{
int16 packetType;
@ -101,7 +101,7 @@ struct PACKET_CZ_REQ_REMOVE_BARGAIN_SALE_ITEM{
#else
uint16 itemId;
#endif
};
} __attribute__((packed));
struct PACKET_ZC_NOTIFY_BARGAIN_SALE_SELLING{
int16 packetType;
@ -111,7 +111,7 @@ struct PACKET_ZC_NOTIFY_BARGAIN_SALE_SELLING{
uint16 itemId;
#endif
uint32 remainingTime;
};
} __attribute__((packed));
struct PACKET_ZC_NOTIFY_BARGAIN_SALE_CLOSE{
int16 packetType;
@ -120,7 +120,7 @@ struct PACKET_ZC_NOTIFY_BARGAIN_SALE_CLOSE{
#else
uint16 itemId;
#endif
};
} __attribute__((packed));
struct PACKET_ZC_ACK_COUNT_BARGAIN_SALE_ITEM{
int16 packetType;
@ -130,7 +130,7 @@ struct PACKET_ZC_ACK_COUNT_BARGAIN_SALE_ITEM{
uint16 itemId;
#endif
uint32 amount;
};
} __attribute__((packed));
struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub{
uint32 id;
@ -149,7 +149,7 @@ struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub{
char name[NAME_LENGTH];
char time[NAME_LENGTH];
uint8 attribute;
};
} __attribute__((packed));
struct PACKET_ZC_ACK_GUILDSTORAGE_LOG{
int16 packetType;
@ -157,7 +157,26 @@ struct PACKET_ZC_ACK_GUILDSTORAGE_LOG{
uint16 result;
uint16 amount;
struct PACKET_ZC_ACK_GUILDSTORAGE_LOG_sub items[];
};
} __attribute__((packed));
struct PACKET_CZ_GUILD_EMBLEM_CHANGE2 {
int16 packetType;
uint32 guild_id;
uint32 version;
} __attribute__((packed));
struct PACKET_ZC_CHANGE_GUILD {
int16 packetType;
#if PACKETVER < 20190724
uint32 aid;
uint32 guild_id;
uint16 emblem_id;
#else
uint32 guild_id;
uint32 emblem_id;
uint32 unknown;
#endif
} __attribute__((packed));
#if PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO)
struct PACKET_ZC_LAPINEUPGRADE_OPEN {
@ -207,6 +226,11 @@ DEFINE_PACKET_HEADER(CZ_REQMAKINGITEM, 0x18e)
DEFINE_PACKET_HEADER(ZC_ACK_REQMAKINGITEM, 0x18f)
DEFINE_PACKET_HEADER(CZ_REQ_MAKINGARROW, 0x1ae)
DEFINE_PACKET_HEADER(CZ_REQ_ITEMREPAIR, 0x1fd)
#if PACKETVER >= 20190724
DEFINE_PACKET_HEADER(ZC_CHANGE_GUILD, 0x0b47)
#else
DEFINE_PACKET_HEADER(ZC_CHANGE_GUILD, 0x1b4)
#endif
DEFINE_PACKET_HEADER(ZC_ACK_WEAPONREFINE, 0x223)
DEFINE_PACKET_HEADER(CZ_REQ_MAKINGITEM, 0x25b)
DEFINE_PACKET_HEADER(ZC_CASH_TIME_COUNTER, 0x298)
@ -224,6 +248,7 @@ DEFINE_PACKET_HEADER(ZC_ACK_COUNT_BARGAIN_SALE_ITEM, 0x9c4)
DEFINE_PACKET_HEADER(ZC_ACK_GUILDSTORAGE_LOG, 0x9da)
DEFINE_PACKET_HEADER(CZ_NPC_MARKET_PURCHASE, 0x9d6)
DEFINE_PACKET_HEADER(CZ_REQ_APPLY_BARGAIN_SALE_ITEM2, 0xa3d)
DEFINE_PACKET_HEADER(CZ_GUILD_EMBLEM_CHANGE2, 0x0b46)
const int16 MAX_INVENTORY_ITEM_PACKET_NORMAL = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_normal ) - ( sizeof( struct NORMALITEM_INFO ) * MAX_ITEMLIST) ) ) / sizeof( struct NORMALITEM_INFO ) );
const int16 MAX_INVENTORY_ITEM_PACKET_EQUIP = ( ( INT16_MAX - ( sizeof( struct packet_itemlist_equip ) - ( sizeof( struct EQUIPITEM_INFO ) * MAX_ITEMLIST ) ) ) / sizeof( struct EQUIPITEM_INFO ) );

View File

@ -113,7 +113,7 @@ enum packet_headers {
authokType = 0x73,
#elif PACKETVER < 20141022
authokType = 0x2eb,
// Some clients smaller than 20160330 cant be tested [4144]
// Some clients smaller than 20160330 cant be tested [4144]
#elif PACKETVER < 20160330
authokType = 0xa18,
#else
@ -267,9 +267,9 @@ enum packet_headers {
viewequipackType = 0xa2d,
#elif PACKETVER >= 20120925
viewequipackType = 0x997,
// [4144] not supported due other packets/structs not updated
//#elif (PACKETVER_MAIN_NUM >= 20111207) || (PACKETVER_RE_NUM >= 20111122)
// viewequipackType = 0x906,
// [4144] not supported due other packets/structs not updated
//#elif (PACKETVER_MAIN_NUM >= 20111207) || (PACKETVER_RE_NUM >= 20111122)
// viewequipackType = 0x906,
#elif PACKETVER >= 20101124
viewequipackType = 0x859,
#else
@ -405,11 +405,6 @@ enum packet_headers {
#else
guildLeave = 0x15a,
#endif
#if PACKETVER >= 20190724
changeGuildEmblem = 0xb47,
#else
changeGuildEmblem = 0x1b4,
#endif
};
#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
@ -520,7 +515,7 @@ struct packet_authok {
#if PACKETVER >= 20080102
int16 font;
#endif
// Some clients smaller than 20160330 cant be tested [4144]
// Some clients smaller than 20160330 cant be tested [4144]
#if PACKETVER >= 20141022 && PACKETVER < 20160330
uint8 sex;
#endif
@ -730,7 +725,7 @@ struct packet_spawn_unit {
#if PACKETVER >= 20150513
int16 body;
#endif
/* Might be earlier, this is when the named item bug began */
/* Might be earlier, this is when the named item bug began */
#if PACKETVER >= 20131223
char name[NAME_LENGTH];
#endif
@ -804,7 +799,7 @@ struct packet_unit_walking {
#if PACKETVER >= 20150513
uint16 body;
#endif
/* Might be earlier, this is when the named item bug began */
/* Might be earlier, this is when the named item bug began */
#if PACKETVER >= 20131223
char name[NAME_LENGTH];
#endif
@ -876,7 +871,7 @@ struct packet_idle_unit {
#if PACKETVER >= 20150513
uint16 body;
#endif
/* Might be earlier, this is when the named item bug began */
/* Might be earlier, this is when the named item bug began */
#if PACKETVER >= 20131223
char name[NAME_LENGTH];
#endif
@ -920,18 +915,18 @@ struct packet_maptypeproperty2 {
int16 PacketType;
int16 type;
struct {
uint32 party : 1; // Show attack cursor on non-party members (PvP)
uint32 guild : 1; // Show attack cursor on non-guild members (GvG)
uint32 siege : 1; // Show emblem over characters' heads when in GvG (WoE castle)
uint32 mineffect : 1; // Automatically enable /mineffect
uint32 nolockon : 1; // TODO: What does this do? (shows attack cursor on non-party members)
uint32 countpk : 1; /// Show the PvP counter
uint32 nopartyformation : 1; /// Prevent party creation/modification
uint32 bg : 1; // TODO: What does this do? Probably related to Battlegrounds, but I'm not sure on the effect
uint32 nocostume : 1; /// Does not show costume sprite.
uint32 usecart : 1; /// Allow opening cart inventory
uint32 party : 1; // Show attack cursor on non-party members (PvP)
uint32 guild : 1; // Show attack cursor on non-guild members (GvG)
uint32 siege : 1; // Show emblem over characters' heads when in GvG (WoE castle)
uint32 mineffect : 1; // Automatically enable /mineffect
uint32 nolockon : 1; // TODO: What does this do? (shows attack cursor on non-party members)
uint32 countpk : 1; /// Show the PvP counter
uint32 nopartyformation : 1; /// Prevent party creation/modification
uint32 bg : 1; // TODO: What does this do? Probably related to Battlegrounds, but I'm not sure on the effect
uint32 nocostume : 1; /// Does not show costume sprite.
uint32 usecart : 1; /// Allow opening cart inventory
uint32 summonstarmiracle : 1; // TODO: What does this do? Related to Taekwon Masters, but I have no idea.
uint32 SpareBits : 21; /// Currently ignored, reserved for future updates
uint32 SpareBits : 21; /// Currently ignored, reserved for future updates
} flag;
} __attribute__((packed));
@ -2569,7 +2564,7 @@ struct PACKET_ZC_PC_PURCHASE_ITEMLIST_FROMMC_sub {
#if PACKETVER >= 20150226
struct ItemOptions option_data[MAX_ITEM_OPTIONS];
#endif
// [4144] date 20160921 not confirmed. Can be bigger or smaller
// [4144] date 20160921 not confirmed. Can be bigger or smaller
#if PACKETVER >= 20160921
uint32 location;
uint16 viewSprite;
@ -3764,7 +3759,7 @@ struct PACKET_ZC_SE_CASHSHOP_OPEN {
} __attribute__((packed));
DEFINE_PACKET_HEADER(ZC_SE_CASHSHOP_OPEN, 0x0b6e);
// for ragexeRE in some version this packet unused [4144]
#elif PACKETVER_MAIN_NUM >= 20101123 || PACKETVER_RE_NUM >= 20120328 || PACKETVER_ZERO_NUM >= defined(PACKETVER_ZERO)
#elif PACKETVER_MAIN_NUM >= 20101123 || PACKETVER_RE_NUM >= 20120328 || defined(PACKETVER_ZERO)
struct PACKET_ZC_SE_CASHSHOP_OPEN {
int16 packetType;
uint32 cashPoints;
@ -3875,26 +3870,59 @@ struct PACKET_ZC_AUTORUN_SKILL {
} __attribute__((packed));
DEFINE_PACKET_HEADER(ZC_AUTORUN_SKILL, 0x0147);
struct PACKET_CZ_GUILD_EMBLEM_CHANGE2 {
#if PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO)
struct PACKET_ZC_LAPINEUPGRADE_OPEN {
int16 packetType;
uint32 guild_id;
uint32 version;
} __attribute__((packed));
DEFINE_PACKET_HEADER(CZ_GUILD_EMBLEM_CHANGE2, 0x0b46);
struct PACKET_ZC_CHANGE_GUILD {
int16 packetType;
#if PACKETVER < 20190724
uint32 aid;
uint32 guild_id;
uint16 emblem_id;
#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
uint32 itemId;
#else
uint32 guild_id;
uint32 emblem_id;
uint32 unknown;
uint16 itemId;
#endif
} __attribute__((packed));
DEFINE_PACKET_HEADER(ZC_CHANGE_GUILD, 0x0b47);
DEFINE_PACKET_HEADER(ZC_LAPINEUPGRADE_OPEN, 0x0ab4);
struct PACKET_ZC_LAPINEUPGRADE_RESULT {
int16 packetType;
uint16 result;
} __attribute__((packed));
DEFINE_PACKET_HEADER(ZC_LAPINEUPGRADE_RESULT, 0x0ab7);
#endif // PACKETVER_MAIN_NUM >= 20170726 || PACKETVER_RE_NUM >= 20170621 || defined(PACKETVER_ZERO)
#if PACKETVER_MAIN_NUM >= 20170111 || PACKETVER_RE_NUM >= 20170111 || defined(PACKETVER_ZERO)
struct PACKET_CZ_LAPINEUPGRADE_CLOSE {
int16 packetType;
} __attribute__((packed));
DEFINE_PACKET_HEADER(CZ_LAPINEUPGRADE_CLOSE, 0x0ab5);
struct PACKET_CZ_LAPINEUPGRADE_MAKE_ITEM {
int16 packetType;
#if PACKETVER_MAIN_NUM >= 20181121 || PACKETVER_RE_NUM >= 20180704 || PACKETVER_ZERO_NUM >= 20181114
uint32 itemId;
#else
uint16 itemId;
#endif
uint16 index;
} __attribute__((packed));
DEFINE_PACKET_HEADER(CZ_LAPINEUPGRADE_MAKE_ITEM, 0x0ab6);
#endif // PACKETVER_MAIN_NUM >= 20170111 || PACKETVER_RE_NUM >= 20170111 || defined(PACKETVER_ZERO)
#if PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502 || defined(PACKETVER_ZERO)
struct PACKET_ZC_PERSONAL_INFOMATION_SUB {
int8 type;
int32 exp;
int32 death;
int32 drop;
} __attribute__((packed));
struct PACKET_ZC_PERSONAL_INFOMATION {
int16 packetType;
int16 length;
int32 total_exp;
int32 total_death;
int32 total_drop;
struct PACKET_ZC_PERSONAL_INFOMATION_SUB details[];
} __attribute__((packed));
DEFINE_PACKET_HEADER(ZC_PERSONAL_INFOMATION, 0x097b);
#endif // PACKETVER_MAIN_NUM >= 20120503 || PACKETVER_RE_NUM >= 20120502 || defined(PACKETVER_ZERO)
#if !defined(sun) && (!defined(__NETBSD__) || __NetBSD_Version__ >= 600000000) // NetBSD 5 and Solaris don't like pragma pack but accept the packed attribute
#pragma pack(pop)

File diff suppressed because it is too large Load Diff

View File

@ -258,6 +258,13 @@ struct s_regen {
int tick;
};
/// Item combo struct
struct s_combos {
script_code *bonus;
uint32 id;
uint32 pos;
};
struct map_session_data {
struct block_list bl;
struct unit_data ud;
@ -423,45 +430,47 @@ struct map_session_data {
struct weapon_data right_weapon, left_weapon;
// here start arrays to be globally zeroed at the beginning of status_calc_pc()
int param_bonus[6],param_equip[6]; //Stores card/equipment bonuses.
int subele[ELE_MAX];
int subele_script[ELE_MAX];
int subdefele[ELE_MAX];
int subrace[RC_MAX];
int subclass[CLASS_MAX];
int subrace2[RC2_MAX];
int subsize[SZ_MAX];
short coma_class[CLASS_MAX];
short coma_race[RC_MAX];
short weapon_coma_ele[ELE_MAX];
short weapon_coma_race[RC_MAX];
short weapon_coma_class[CLASS_MAX];
int weapon_atk[16];
int weapon_damage_rate[16];
int arrow_addele[ELE_MAX];
int arrow_addrace[RC_MAX];
int arrow_addclass[CLASS_MAX];
int arrow_addsize[SZ_MAX];
int magic_addele[ELE_MAX];
int magic_addele_script[ELE_MAX];
int magic_addrace[RC_MAX];
int magic_addclass[CLASS_MAX];
int magic_addsize[SZ_MAX];
int magic_atk_ele[ELE_MAX];
int magic_subsize[SZ_MAX];
int critaddrace[RC_MAX];
int expaddrace[RC_MAX];
int expaddclass[CLASS_MAX];
int ignore_mdef_by_race[RC_MAX];
int ignore_mdef_by_class[CLASS_MAX];
int ignore_def_by_race[RC_MAX];
int ignore_def_by_class[CLASS_MAX];
short sp_gain_race[RC_MAX];
int magic_addrace2[RC2_MAX];
int ignore_mdef_by_race2[RC2_MAX];
int dropaddrace[RC_MAX];
int dropaddclass[CLASS_MAX];
int magic_subdefele[ELE_MAX];
struct s_indexed_bonus {
int param_bonus[6], param_equip[6]; //Stores card/equipment bonuses.
int subele[ELE_MAX];
int subele_script[ELE_MAX];
int subdefele[ELE_MAX];
int subrace[RC_MAX];
int subclass[CLASS_MAX];
int subrace2[RC2_MAX];
int subsize[SZ_MAX];
short coma_class[CLASS_MAX];
short coma_race[RC_MAX];
short weapon_coma_ele[ELE_MAX];
short weapon_coma_race[RC_MAX];
short weapon_coma_class[CLASS_MAX];
int weapon_atk[16];
int weapon_damage_rate[16];
int arrow_addele[ELE_MAX];
int arrow_addrace[RC_MAX];
int arrow_addclass[CLASS_MAX];
int arrow_addsize[SZ_MAX];
int magic_addele[ELE_MAX];
int magic_addele_script[ELE_MAX];
int magic_addrace[RC_MAX];
int magic_addclass[CLASS_MAX];
int magic_addsize[SZ_MAX];
int magic_atk_ele[ELE_MAX];
int magic_subsize[SZ_MAX];
int critaddrace[RC_MAX];
int expaddrace[RC_MAX];
int expaddclass[CLASS_MAX];
int ignore_mdef_by_race[RC_MAX];
int ignore_mdef_by_class[CLASS_MAX];
int ignore_def_by_race[RC_MAX];
int ignore_def_by_class[CLASS_MAX];
short sp_gain_race[RC_MAX];
int magic_addrace2[RC2_MAX];
int ignore_mdef_by_race2[RC2_MAX];
int dropaddrace[RC_MAX];
int dropaddclass[CLASS_MAX];
int magic_subdefele[ELE_MAX];
} indexed_bonus;
// zeroed arrays end here.
std::vector<s_autospell> autospell, autospell2, autospell3;
@ -698,12 +707,7 @@ struct map_session_data {
enum npc_timeout_type npc_idle_type;
#endif
struct s_combos {
struct script_code **bonus;/* the script */
unsigned short *id;/* array of combo ids */
unsigned int *pos;/* array of positions*/
unsigned char count;
} combos;
std::vector<std::shared_ptr<s_combos>> combos;
/**
* Guarantees your friend request is legit (for bugreport:4629)
@ -780,9 +784,8 @@ struct map_session_data {
short setlook_head_top, setlook_head_mid, setlook_head_bottom, setlook_robe; ///< Stores 'setlook' script command values.
t_itemid last_lapine_box;
#if PACKETVER >= 20150513
uint32* hatEffectIDs;
uint8 hatEffectCount;
#if PACKETVER_MAIN_NUM >= 20150507 || PACKETVER_RE_NUM >= 20150429 || defined(PACKETVER_ZERO)
std::vector<int16> hatEffects;
#endif
struct{
@ -804,7 +807,7 @@ extern struct eri *str_reg_ers;
/* Global Expiration Timer ID */
extern int pc_expiration_tid;
enum weapon_type {
enum weapon_type : uint8 {
W_FIST, //Bare hands
W_DAGGER, //1
W_1HSWORD, //2
@ -842,16 +845,18 @@ enum weapon_type {
#define WEAPON_TYPE_ALL ((1<<MAX_WEAPON_TYPE)-1)
enum ammo_type {
A_ARROW = 1,
A_DAGGER, //2
A_BULLET, //3
A_SHELL, //4
A_GRENADE, //5
A_SHURIKEN, //6
A_KUNAI, //7
A_CANNONBALL, //8
A_THROWWEAPON //9
enum e_ammo_type : uint8 {
AMMO_NONE = 0,
AMMO_ARROW,
AMMO_DAGGER,
AMMO_BULLET,
AMMO_SHELL,
AMMO_GRENADE,
AMMO_SHURIKEN,
AMMO_KUNAI,
AMMO_CANNONBALL,
AMMO_THROWWEAPON,
MAX_AMMO_TYPE
};
enum idletime_option {

View File

@ -2485,7 +2485,6 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o
const char *p,*tmpp;
int i;
struct script_code* code = NULL;
static bool first=true;
char end;
bool unresolved_names = false;
@ -2497,12 +2496,6 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o
return NULL;// empty script
memset(&syntax,0,sizeof(syntax));
if(first){
add_buildin_func();
read_constdb();
script_hardcoded_constants();
first=false;
}
script_buf=(unsigned char *)aMalloc(SCRIPT_BLOCK_SIZE*sizeof(unsigned char));
script_pos=0;
@ -4843,6 +4836,9 @@ void do_init_script(void) {
next_id = 0;
mapreg_init();
add_buildin_func();
read_constdb();
script_hardcoded_constants();
}
void script_reload(void) {
@ -8961,7 +8957,7 @@ BUILDIN_FUNC(getequipname)
item = sd->inventory_data[i];
if( item != 0 )
script_pushstrcopy(st,item->jname);
script_pushstrcopy(st,item->ename.c_str());
else
script_pushconststr(st,"");
@ -13322,7 +13318,7 @@ BUILDIN_FUNC(getequipcardcnt)
}
count = 0;
for( j = 0; j < sd->inventory_data[i]->slot; j++ )
for( j = 0; j < sd->inventory_data[i]->slots; j++ )
if( sd->inventory.u.items_inventory[i].card[j] && itemdb_type(sd->inventory.u.items_inventory[i].card[j]) == IT_CARD )
count++;
@ -13354,7 +13350,7 @@ BUILDIN_FUNC(successremovecards) {
if(itemdb_isspecial(sd->inventory.u.items_inventory[i].card[0]))
return SCRIPT_CMD_SUCCESS;
for( c = sd->inventory_data[i]->slot - 1; c >= 0; --c ) {
for( c = sd->inventory_data[i]->slots - 1; c >= 0; --c ) {
if( sd->inventory.u.items_inventory[i].card[c] && itemdb_type(sd->inventory.u.items_inventory[i].card[c]) == IT_CARD ) {// extract this card from the item
unsigned char flag = 0;
struct item item_tmp;
@ -13371,7 +13367,7 @@ BUILDIN_FUNC(successremovecards) {
}
if(cardflag == 1) {//if card was remove remplace item with no card
unsigned char flag = 0, j;
unsigned char flag = 0;
struct item item_tmp;
memset(&item_tmp,0,sizeof(item_tmp));
@ -13382,10 +13378,10 @@ BUILDIN_FUNC(successremovecards) {
item_tmp.expire_time = sd->inventory.u.items_inventory[i].expire_time;
item_tmp.bound = sd->inventory.u.items_inventory[i].bound;
for (j = sd->inventory_data[i]->slot; j < MAX_SLOTS; j++)
for (int j = sd->inventory_data[i]->slots; j < MAX_SLOTS; j++)
item_tmp.card[j]=sd->inventory.u.items_inventory[i].card[j];
for (j = 0; j < MAX_ITEM_RDM_OPT; j++){
for (int j = 0; j < MAX_ITEM_RDM_OPT; j++){
item_tmp.option[j].id=sd->inventory.u.items_inventory[i].option[j].id;
item_tmp.option[j].value=sd->inventory.u.items_inventory[i].option[j].value;
item_tmp.option[j].param=sd->inventory.u.items_inventory[i].option[j].param;
@ -13430,7 +13426,7 @@ BUILDIN_FUNC(failedremovecards) {
if(itemdb_isspecial(sd->inventory.u.items_inventory[i].card[0]))
return SCRIPT_CMD_SUCCESS;
for( c = sd->inventory_data[i]->slot - 1; c >= 0; --c ) {
for( c = sd->inventory_data[i]->slots - 1; c >= 0; --c ) {
if( sd->inventory.u.items_inventory[i].card[c] && itemdb_type(sd->inventory.u.items_inventory[i].card[c]) == IT_CARD ) {
cardflag = 1;
@ -13455,7 +13451,7 @@ BUILDIN_FUNC(failedremovecards) {
if(typefail == 0 || typefail == 2){ // destroy the item
pc_delitem(sd,i,1,0,2,LOG_TYPE_SCRIPT);
}else if(typefail == 1){ // destroy the card
unsigned char flag = 0, j;
unsigned char flag = 0;
struct item item_tmp;
memset(&item_tmp,0,sizeof(item_tmp));
@ -13467,10 +13463,10 @@ BUILDIN_FUNC(failedremovecards) {
item_tmp.expire_time = sd->inventory.u.items_inventory[i].expire_time;
item_tmp.bound = sd->inventory.u.items_inventory[i].bound;
for (j = sd->inventory_data[i]->slot; j < MAX_SLOTS; j++)
for (int j = sd->inventory_data[i]->slots; j < MAX_SLOTS; j++)
item_tmp.card[j]=sd->inventory.u.items_inventory[i].card[j];
for (j = 0; j < MAX_ITEM_RDM_OPT; j++){
for (int j = 0; j < MAX_ITEM_RDM_OPT; j++){
item_tmp.option[j].id=sd->inventory.u.items_inventory[i].option[j].id;
item_tmp.option[j].value=sd->inventory.u.items_inventory[i].option[j].value;
item_tmp.option[j].param=sd->inventory.u.items_inventory[i].option[j].param;
@ -13914,7 +13910,7 @@ BUILDIN_FUNC(getitemname)
}
item_name=(char *)aMalloc(ITEM_NAME_LENGTH*sizeof(char));
memcpy(item_name, i_data->jname, ITEM_NAME_LENGTH);
memcpy(item_name, i_data->ename.c_str(), ITEM_NAME_LENGTH);
script_pushstr(st,item_name);
return SCRIPT_CMD_SUCCESS;
}
@ -13931,7 +13927,7 @@ BUILDIN_FUNC(getitemslots)
i_data = itemdb_exists(item_id);
if (i_data)
script_pushint(st,i_data->slot);
script_pushint(st,i_data->slots);
else
script_pushint(st,-1);
return SCRIPT_CMD_SUCCESS;
@ -13965,23 +13961,48 @@ BUILDIN_FUNC(getitemslots)
*------------------------------------------*/
BUILDIN_FUNC(getiteminfo)
{
unsigned short n;
struct item_data *i_data;
t_itemid item_id = script_getnum(st,2);
n = script_getnum(st,3);
i_data = itemdb_exists(item_id);
item_data *i_data = itemdb_exists(item_id);
if (i_data && n <= 16) {
int *item_arr = (int*)&i_data->value_buy;
#ifndef RENEWAL
if (n == 16)
script_pushint(st,0);
else
if (i_data == nullptr) {
script_pushint(st, -1);
return SCRIPT_CMD_SUCCESS;
}
switch( script_getnum(st, 3) ) {
case 0: script_pushint(st, i_data->value_buy); break;
case 1: script_pushint(st, i_data->value_sell); break;
case 2: script_pushint(st, i_data->type); break;
case 3: script_pushint(st, i_data->maxchance); break;
case 4: script_pushint(st, i_data->sex); break;
case 5: script_pushint(st, i_data->equip); break;
case 6: script_pushint(st, i_data->weight); break;
case 7: script_pushint(st, i_data->atk); break;
case 8: script_pushint(st, i_data->def); break;
case 9: script_pushint(st, i_data->range); break;
case 10: script_pushint(st, i_data->slots); break;
case 11:
if (i_data->type == IT_WEAPON || i_data->type == IT_AMMO) { // keep old compatibility
script_pushint(st, i_data->subtype);
} else {
script_pushint(st, i_data->look);
}
break;
case 12: script_pushint(st, i_data->elv); break;
case 13: script_pushint(st, i_data->wlv); break;
case 14: script_pushint(st, i_data->view_id); break;
case 15: script_pushint(st, i_data->elvmax); break;
case 16: {
#ifdef RENEWAL
script_pushint(st, i_data->matk);
#else
script_pushint(st, 0);
#endif
script_pushint(st,item_arr[n]);
} else
script_pushint(st,-1);
break;
}
default:
script_pushint(st, -1);
break;
}
return SCRIPT_CMD_SUCCESS;
}
@ -14012,27 +14033,51 @@ BUILDIN_FUNC(getiteminfo)
*------------------------------------------*/
BUILDIN_FUNC(setiteminfo)
{
int n,value;
struct item_data *i_data;
t_itemid item_id = script_getnum(st,2);
n = script_getnum(st,3);
value = script_getnum(st,4);
i_data = itemdb_exists(item_id);
item_data *i_data = itemdb_exists(item_id);
#ifndef RENEWAL
if( n == 16 ){
script_pushint( st, -1 );
if (i_data == nullptr) {
script_pushint(st, -1);
return SCRIPT_CMD_SUCCESS;
}
#endif
int value = script_getnum(st,4);
if (i_data && n>=0 && n<=16) {
int *item_arr = (int*)&i_data->value_buy;
item_arr[n] = value;
script_pushint(st,value);
} else
script_pushint(st,-1);
switch( script_getnum(st, 3) ) {
case 0: i_data->value_buy = static_cast<uint32>(value); break;
case 1: i_data->value_sell = static_cast<uint32>(value); break;
case 2: i_data->type = static_cast<item_types>(value); break;
case 3: i_data->maxchance = static_cast<int>(value); break;
case 4: i_data->sex = static_cast<uint8>(value); break;
case 5: i_data->equip = static_cast<uint32>(value); break;
case 6: i_data->weight = static_cast<uint32>(value); break;
case 7: i_data->atk = static_cast<uint32>(value); break;
case 8: i_data->def = static_cast<uint32>(value); break;
case 9: i_data->range = static_cast<uint16>(value); break;
case 10: i_data->slots = static_cast<uint16>(value); break;
case 11:
if (i_data->type == IT_WEAPON || i_data->type == IT_AMMO) { // keep old compatibility
i_data->subtype = static_cast<uint8>(value);
} else {
i_data->look = static_cast<uint32>(value);
}
break;
case 12: i_data->elv = static_cast<uint16>(value); break;
case 13: i_data->wlv = static_cast<uint16>(value); break;
case 14: i_data->view_id = static_cast<t_itemid>(value); break;
case 15: i_data->elvmax = static_cast<uint16>(value); break;
case 16: {
#ifdef RENEWAL
i_data->matk = static_cast<uint32>(value);
#else
value = 0;
#endif
break;
}
default:
script_pushint(st, -1);
break;
}
script_pushint(st, value);
return SCRIPT_CMD_SUCCESS;
}
@ -15116,7 +15161,7 @@ BUILDIN_FUNC(checkequipedcard)
if(sd->inventory.u.items_inventory[i].nameid > 0 && sd->inventory.u.items_inventory[i].amount && sd->inventory_data[i]){
if (itemdb_isspecial(sd->inventory.u.items_inventory[i].card[0]))
continue;
for(n=0;n<sd->inventory_data[i]->slot;n++){
for(n=0;n<sd->inventory_data[i]->slots;n++){
if(sd->inventory.u.items_inventory[i].card[n] == c) {
script_pushint(st,1);
return SCRIPT_CMD_SUCCESS;
@ -15668,7 +15713,7 @@ BUILDIN_FUNC(isequippedcnt)
} else { //Count cards.
if (itemdb_isspecial(sd->inventory.u.items_inventory[index].card[0]))
continue; //No cards
for (short k = 0; k < sd->inventory_data[index]->slot; k++) {
for (short k = 0; k < sd->inventory_data[index]->slots; k++) {
if (sd->inventory.u.items_inventory[index].card[k] == id)
ret++; //[Lupus]
}
@ -15724,11 +15769,11 @@ BUILDIN_FUNC(isequipped)
break;
} else { //Cards
short k;
if (sd->inventory_data[index]->slot == 0 ||
if (sd->inventory_data[index]->slots == 0 ||
itemdb_isspecial(sd->inventory.u.items_inventory[index].card[0]))
continue;
for (k = 0; k < sd->inventory_data[index]->slot; k++)
for (k = 0; k < sd->inventory_data[index]->slots; k++)
{ //New hash system which should support up to 4 slots on any equipment. [Skotlex]
unsigned int hash = 0;
if (sd->inventory.u.items_inventory[index].card[k] != id)
@ -15798,7 +15843,7 @@ BUILDIN_FUNC(cardscnt)
} else {
if (itemdb_isspecial(sd->inventory.u.items_inventory[index].card[0]))
continue;
for(k=0; k<sd->inventory_data[index]->slot; k++) {
for(k=0; k<sd->inventory_data[index]->slots; k++) {
if (sd->inventory.u.items_inventory[index].card[k] == id)
ret++;
}
@ -23197,47 +23242,34 @@ BUILDIN_FUNC(recalculatestat) {
}
BUILDIN_FUNC(hateffect){
#if PACKETVER >= 20150513
#if PACKETVER_MAIN_NUM >= 20150507 || PACKETVER_RE_NUM >= 20150429 || defined(PACKETVER_ZERO)
struct map_session_data* sd;
bool enable;
int i, effectID;
if( !script_rid2sd(sd) )
return SCRIPT_CMD_FAILURE;
effectID = script_getnum(st,2);
enable = script_getnum(st,3) ? true : false;
int16 effectID = script_getnum(st,2);
bool enable = script_getnum(st,3) ? true : false;
if( effectID <= HAT_EF_MIN || effectID >= HAT_EF_MAX ){
ShowError( "buildin_hateffect: unsupported hat effect id %d\n", effectID );
return SCRIPT_CMD_FAILURE;
}
ARR_FIND( 0, sd->hatEffectCount, i, sd->hatEffectIDs[i] == effectID );
auto it = util::vector_get( sd->hatEffects, effectID );
if( enable ){
if( i < sd->hatEffectCount ){
if( it != sd->hatEffects.end() ){
return SCRIPT_CMD_SUCCESS;
}
RECREATE(sd->hatEffectIDs,uint32,sd->hatEffectCount+1);
sd->hatEffectIDs[sd->hatEffectCount] = effectID;
sd->hatEffectCount++;
sd->hatEffects.push_back( effectID );
}else{
if( i == sd->hatEffectCount ){
if( it == sd->hatEffects.end() ){
return SCRIPT_CMD_SUCCESS;
}
for( ; i < sd->hatEffectCount - 1; i++ ){
sd->hatEffectIDs[i] = sd->hatEffectIDs[i+1];
}
sd->hatEffectCount--;
if( !sd->hatEffectCount ){
aFree(sd->hatEffectIDs);
sd->hatEffectIDs = NULL;
}
util::vector_erase_if_exists( sd->hatEffects, effectID );
}
if( !sd->state.connect_new ){

View File

@ -1842,7 +1842,7 @@ enum e_special_effects {
EF_MAX
};
enum e_hat_effects {
enum e_hat_effects : int16{
HAT_EF_MIN = 0,
HAT_EF_BLOSSOM_FLUTTERING,
HAT_EF_MERMAID_LONGING,
@ -1979,6 +1979,18 @@ enum e_hat_effects {
HAT_EF_C_SUDDEN_WEALTH_TW,
HAT_EF_C_ROMANCE_ROSE_TW,
HAT_EF_C_DISAPEAR_TIME_TW,
HAT_EF_2020RTC_01,
HAT_EF_2020RTC_02,
HAT_EF_2020RTC_03,
HAT_EF_C_2020RTC_IMP_TW,
HAT_EF_SUBJECT_AURA_BLACK,
HAT_EF_2020RTC_EFFECT_01,
HAT_EF_2020RTC_EFFECT_02,
HAT_EF_2020RTC_EFFECT_03,
HAT_EF_99LV_STAR_E_MBLUE,
HAT_EF_160LV_STAR_E_MBLUE,
HAT_EF_99LV_SOUL_R_GRAY,
HAT_EF_160LV_SOUL_R_GRAY,
HAT_EF_MAX
};

View File

@ -260,9 +260,11 @@
export_constant2("EAJ_BLACKSMITH",MAPID_BLACKSMITH);
export_constant2("EAJ_ASSASSIN",MAPID_ASSASSIN);
export_constant2("EAJ_STAR_GLADIATOR",MAPID_STAR_GLADIATOR);
export_constant2("EAJ_STARGLADIATOR",MAPID_STAR_GLADIATOR);
export_constant2("EAJ_REBELLION",MAPID_REBELLION);
export_constant2("EAJ_KAGEROUOBORO",MAPID_KAGEROUOBORO);
export_constant2("EAJ_DEATH_KNIGHT",MAPID_DEATH_KNIGHT);
export_constant2("EAJ_DEATHKNIGHT",MAPID_DEATH_KNIGHT);
export_constant2("EAJ_CRUSADER",MAPID_CRUSADER);
export_constant2("EAJ_SAGE",MAPID_SAGE);
@ -271,7 +273,9 @@
export_constant2("EAJ_ALCHEMIST",MAPID_ALCHEMIST);
export_constant2("EAJ_ROGUE",MAPID_ROGUE);
export_constant2("EAJ_SOUL_LINKER",MAPID_SOUL_LINKER);
export_constant2("EAJ_SOULLINKER",MAPID_SOUL_LINKER);
export_constant2("EAJ_DARK_COLLECTOR",MAPID_DARK_COLLECTOR);
export_constant2("EAJ_DARKCOLLECTOR",MAPID_DARK_COLLECTOR);
export_constant2("EAJ_NOVICE_HIGH",MAPID_NOVICE_HIGH);
export_constant2("EAJ_SWORDMAN_HIGH",MAPID_SWORDMAN_HIGH);
@ -378,6 +382,7 @@
export_constant2("EAJ_BABY_SOUL_REAPER",MAPID_BABY_SOUL_REAPER);
export_constant2("EAJ_SUPER_NOVICE",MAPID_SUPER_NOVICE);
export_constant2("EAJ_SUPERNOVICE",MAPID_SUPER_NOVICE);
export_constant2("EAJ_SUPER_BABY",MAPID_SUPER_BABY);
export_constant2("EAJ_SUPER_NOVICE_E",MAPID_SUPER_NOVICE_E);
export_constant2("EAJ_SUPER_BABY_E",MAPID_SUPER_BABY_E);
@ -387,6 +392,7 @@
/* sex */
export_constant(SEX_FEMALE);
export_constant(SEX_MALE);
export_constant(SEX_BOTH);
/* broadcasts */
export_constant(BC_ALL);
@ -807,6 +813,13 @@
export_constant(EQP_ACC_RL);
export_constant(EQP_SHADOW_ACC_RL);
export_constant2("EQP_Right_Hand", EQP_HAND_R);
export_constant2("EQP_Left_Hand", EQP_HAND_L);
export_constant2("EQP_Right_Accessory", EQP_ACC_R);
export_constant2("EQP_Left_Accessory", EQP_ACC_L);
export_constant2("EQP_Shadow_Right_Accessory", EQP_SHADOW_ACC_R);
export_constant2("EQP_Shadow_Left_Accessory", EQP_SHADOW_ACC_L);
/* looks */
export_constant(LOOK_BASE);
export_constant(LOOK_HAIR);
@ -3470,6 +3483,13 @@
export_constant(EFST_ABYSS_006);
export_constant(EFST_ABYSS_007);
export_constant(EFST_ABYSS_008);
export_constant(EFST_KAUTE);
export_constant(EFST_REUSE_LIMIT_THM);
export_constant(EFST_REUSE_LIMIT_TLI);
export_constant(EFST_REUSE_LIMIT_TKC);
export_constant(EFST_REUSE_LIMIT_TRP);
export_constant(EFST_REUSE_LIMIT_TBG);
export_constant(EFST_REUSE_LIMIT_TBM);
export_constant(EFST_YGGDRASIL_BLESS);
export_constant(EFST_HUNTING_EVENT);
export_constant(EFST_PERIOD_RECEIVEITEM_2ND);
@ -3508,7 +3528,6 @@
export_constant(EFST_FLOWER_LEAF4);
export_constant(EFST_MISTY_FROST);
export_constant(EFST_MAGIC_POISON);
export_constant(EFST_KAUTE);
export_constant(EFST_JPNONLY_TACTICS);
export_constant(EFST_MADOGEAR);
export_constant(EFST_DEADLY_DEFEASANCE);
@ -3580,6 +3599,7 @@
export_constant(EFST_ULTIMATE_S);
export_constant(EFST_SPEAR_SCAR);
export_constant(EFST_SHIELD_POWER);
export_constant(EFST_SHADOW_WEAPON);
export_constant(EFST_RELIGIO);
export_constant(EFST_BENEDICTUM);
export_constant(EFST_MVPCARD_KIEL);
@ -3665,6 +3685,8 @@
export_constant(EFST_SHIELDSPELL);
export_constant(EFST_CLOUD_POISON);
export_constant(EFST_SPORE_EXPLOSION_DEBUFF);
export_constant(EFST_DEFSCROLL);
export_constant(EFST_MASSIVE_F_BLASTER);
/// @APIHOOK_END
/// Do not modify code above this, since it will be automatically generated by the API again
export_constant(EFST_MAX);
@ -4040,15 +4062,27 @@
export_constant(MAX_WEAPON_TYPE_ALL);
/* ammunition types */
export_constant(A_ARROW);
export_constant(A_DAGGER);
export_constant(A_BULLET);
export_constant(A_SHELL);
export_constant(A_GRENADE);
export_constant(A_SHURIKEN);
export_constant(A_KUNAI);
export_constant(A_CANNONBALL);
export_constant(A_THROWWEAPON);
/* Send deprecation notice and temporarily replace with new constant value. */
export_deprecated_constant3("A_ARROW", AMMO_ARROW, "AMMO_ARROW");
export_deprecated_constant3("A_DAGGER", AMMO_DAGGER, "AMMO_DAGGER");
export_deprecated_constant3("A_BULLET", AMMO_BULLET, "AMMO_BULLET");
export_deprecated_constant3("A_SHELL", AMMO_SHELL, "AMMO_SHELL");
export_deprecated_constant3("A_GRENADE", AMMO_GRENADE, "AMMO_GRENADE");
export_deprecated_constant3("A_SHURIKEN", AMMO_SHURIKEN, "AMMO_SHURIKEN");
export_deprecated_constant3("A_KUNAI", AMMO_KUNAI, "AMMO_KUNAI");
export_deprecated_constant3("A_CANNONBALL", AMMO_CANNONBALL, "AMMO_CANNONBALL");
export_deprecated_constant3("A_THROWWEAPON", AMMO_THROWWEAPON, "AMMO_THROWWEAPON");
export_constant(AMMO_ARROW);
export_constant(AMMO_DAGGER);
export_constant(AMMO_BULLET);
export_constant(AMMO_SHELL);
export_constant(AMMO_GRENADE);
export_constant(AMMO_SHURIKEN);
export_constant(AMMO_KUNAI);
export_constant(AMMO_CANNONBALL);
export_constant(AMMO_THROWWEAPON);
export_constant(MAX_AMMO_TYPE);
/* monsterinfo types */
export_constant(MOB_NAME);
@ -6305,6 +6339,8 @@
export_constant_npc(JT_4_4JOB_PHANTOMBOOK1);
export_constant_npc(JT_4_4JOB_PHANTOMBOOK2);
export_constant_npc(JT_4_4JOB_PHANTOMBOOK3);
export_constant_npc(JT_4_VENDING_MACHINE2);
export_constant_npc(JT_4_4JOB_MAURA);
export_constant_npc(JT_NEW_NPC_3RD_END);
#undef export_constant_npc
@ -7545,6 +7581,18 @@
export_constant(HAT_EF_C_SUDDEN_WEALTH_TW);
export_constant(HAT_EF_C_ROMANCE_ROSE_TW);
export_constant(HAT_EF_C_DISAPEAR_TIME_TW);
export_constant(HAT_EF_2020RTC_01);
export_constant(HAT_EF_2020RTC_02);
export_constant(HAT_EF_2020RTC_03);
export_constant(HAT_EF_C_2020RTC_IMP_TW);
export_constant(HAT_EF_SUBJECT_AURA_BLACK);
export_constant(HAT_EF_2020RTC_EFFECT_01);
export_constant(HAT_EF_2020RTC_EFFECT_02);
export_constant(HAT_EF_2020RTC_EFFECT_03);
export_constant(HAT_EF_99LV_STAR_E_MBLUE);
export_constant(HAT_EF_160LV_STAR_E_MBLUE);
export_constant(HAT_EF_99LV_SOUL_R_GRAY);
export_constant(HAT_EF_160LV_SOUL_R_GRAY);
/* pet catch */
export_constant(PET_CATCH_UNIVERSAL);
@ -7967,6 +8015,24 @@
export_constant(BG_INFO_MAPS);
export_constant(BG_INFO_DESERTER_TIME);
/* item job classes */
export_constant(ITEMJ_NORMAL);
export_constant(ITEMJ_UPPER);
export_constant(ITEMJ_BABY);
export_constant(ITEMJ_THIRD);
export_constant(ITEMJ_THIRD_UPPER);
export_constant(ITEMJ_THIRD_BABY);
/* item drop effects */
export_constant(DROPEFFECT_NONE);
export_constant(DROPEFFECT_CLIENT);
export_constant(DROPEFFECT_WHITE_PILLAR);
export_constant(DROPEFFECT_BLUE_PILLAR);
export_constant(DROPEFFECT_YELLOW_PILLAR);
export_constant(DROPEFFECT_PURPLE_PILLAR);
export_constant(DROPEFFECT_ORANGE_PILLAR);
export_constant(DROPEFFECT_MAX);
#undef export_constant
#undef export_constant2
#undef export_parameter

View File

@ -859,6 +859,7 @@ bool skill_isNotOk(uint16 skill_id, struct map_session_data *sd)
case RETURN_TO_ELDICASTES:
case ALL_GUARDIAN_RECALL:
case ECLAGE_RECALL:
case ALL_PRONTERA_RECALL:
if(mapdata->flag[MF_NOWARP]) {
clif_skill_teleportmessage(sd,0);
return true;
@ -1296,7 +1297,11 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
//"While the damage can be blocked by Pneuma, the chance to break armor remains", irowiki. [Cydh]
if (dmg_lv == ATK_BLOCK && skill_id == AM_ACIDTERROR) {
sc_start2(src,bl,SC_BLEEDING,(skill_lv*3),skill_lv,src->id,skill_get_time2(skill_id,skill_lv));
#ifdef RENEWAL
if (skill_break_equip(src,bl, EQP_ARMOR, (1000 * skill_lv + 500) - 1000, BCT_ENEMY))
#else
if (skill_break_equip(src,bl, EQP_ARMOR, 100*skill_get_time(skill_id,skill_lv), BCT_ENEMY))
#endif
clif_emotion(bl,ET_HUK);
}
}
@ -2097,13 +2102,13 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
rate = 0;
//! TODO: Filter the skills that shouldn't inflict coma bonus, to avoid some non-damage skills inflict coma. [Cydh]
if (!skill_id || !skill_get_nk(skill_id, NK_NODAMAGE)) {
rate += sd->coma_class[tstatus->class_] + sd->coma_class[CLASS_ALL];
rate += sd->coma_race[tstatus->race] + sd->coma_race[RC_ALL];
rate += sd->indexed_bonus.coma_class[tstatus->class_] + sd->indexed_bonus.coma_class[CLASS_ALL];
rate += sd->indexed_bonus.coma_race[tstatus->race] + sd->indexed_bonus.coma_race[RC_ALL];
}
if (attack_type&BF_WEAPON) {
rate += sd->weapon_coma_ele[tstatus->def_ele] + sd->weapon_coma_ele[ELE_ALL];
rate += sd->weapon_coma_race[tstatus->race] + sd->weapon_coma_race[RC_ALL];
rate += sd->weapon_coma_class[tstatus->class_] + sd->weapon_coma_class[CLASS_ALL];
rate += sd->indexed_bonus.weapon_coma_ele[tstatus->def_ele] + sd->indexed_bonus.weapon_coma_ele[ELE_ALL];
rate += sd->indexed_bonus.weapon_coma_race[tstatus->race] + sd->indexed_bonus.weapon_coma_race[RC_ALL];
rate += sd->indexed_bonus.weapon_coma_class[tstatus->class_] + sd->indexed_bonus.weapon_coma_class[CLASS_ALL];
}
if (rate > 0)
status_change_start(src,bl, SC_COMA, rate, 0, 0, src->id, 0, 0, SCSTART_NONE);
@ -2467,7 +2472,7 @@ int skill_counter_additional_effect (struct block_list* src, struct block_list *
int sp = 0, hp = 0;
if( (attack_type&(BF_WEAPON|BF_SHORT)) == (BF_WEAPON|BF_SHORT) ) {
sp += sd->bonus.sp_gain_value;
sp += sd->sp_gain_race[status_get_race(bl)] + sd->sp_gain_race[RC_ALL];
sp += sd->indexed_bonus.sp_gain_race[status_get_race(bl)] + sd->indexed_bonus.sp_gain_race[RC_ALL];
hp += sd->bonus.hp_gain_value;
}
if( (attack_type&(BF_WEAPON|BF_LONG)) == (BF_WEAPON|BF_LONG) ) {
@ -5913,10 +5918,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
map_foreachinallrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|1, skill_castend_damage_id);
}
break;
case NC_MAGNETICFIELD:
sc_start2(src,bl,SC_MAGNETICFIELD,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv));
break;
case SC_FATALMENACE:
if( flag&1 )
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
@ -6270,9 +6271,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
return 1;
}
// Attack the target and return the damage result for the upcoming check.
int64 fk_damage = skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag);
if (sd) { // Tagging the target.
int i;
@ -6289,7 +6287,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
// Tag the target only if damage was done. If it deals no damage, it counts as a miss and won't tag.
// Note: Not sure if it works like this in official but you can't mark on something you can't
// hit, right? For now well just use this logic until we can get a confirm on if it does this or not. [Rytech]
if (tmd->status.hp > 0) { // Add the ID of the tagged target to the player's tag list and start the status on the target.
if (skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag) > 0) { // Add the ID of the tagged target to the player's tag list and start the status on the target.
sd->stellar_mark[i] = bl->id;
// Val4 flags if the status was applied by a player or a monster.
@ -6300,7 +6298,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
sc_start4(src, bl, SC_FLASHKICK, 100, src->id, i, skill_lv, 1, skill_get_time(skill_id, skill_lv));
}
} else if (md) { // Monsters can't track with this skill. Just give the status.
if (fk_damage > 0)
if (skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag) > 0)
sc_start4(src, bl, SC_FLASHKICK, 100, 0, 0, skill_lv, 2, skill_get_time(skill_id, skill_lv));
}
}
@ -10227,10 +10225,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
break;
case NC_MAGNETICFIELD:
clif_skill_damage(src,bl,tick,status_get_amotion(src),0,-30000,1,skill_id,skill_lv,DMG_SINGLE);
if (map_flag_vs(src->m)) // Doesn't affect the caster in non-PVP maps [exneval]
sc_start2(src,bl,type,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv));
map_foreachinallrange(skill_area_sub,bl,skill_get_splash(skill_id,skill_lv),splash_target(src),src,skill_id,skill_lv,tick,flag|BCT_ENEMY|SD_SPLASH|1,skill_castend_damage_id);
if (flag & 1) {
sc_start2(src, bl, SC_MAGNETICFIELD, 100, skill_lv, src->id, skill_get_time(skill_id, skill_lv));
} else {
if (map_flag_vs(src->m)) // Doesn't affect the caster in non-PVP maps [exneval]
sc_start2(src, bl, type, 100, skill_lv, src->id, skill_get_time(skill_id, skill_lv));
map_foreachinallrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill_castend_nodamage_id);
clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, DMG_SINGLE);
}
break;
case NC_REPAIR:
@ -10744,6 +10746,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case RETURN_TO_ELDICASTES:
case ALL_GUARDIAN_RECALL:
case ECLAGE_RECALL:
case ALL_PRONTERA_RECALL:
if( sd )
{
short x=0, y=0; // Destiny position.
@ -10766,6 +10769,17 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
y = 31;
mapindex = mapindex_name2id(MAP_ECLAGE_IN);
break;
case ALL_PRONTERA_RECALL:
if(skill_lv == 1) {
x = 115;
y = 72;
}
else if(skill_lv == 2) {
x = 159;
y = 192;
}
mapindex = mapindex_name2id(MAP_PRONTERA);
break;
}
if(!mapindex)
@ -15513,7 +15527,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
if( (i = sd->itemindex) == -1 ||
sd->inventory.u.items_inventory[i].nameid != sd->itemid ||
sd->inventory_data[i] == NULL ||
!sd->inventory_data[i]->flag.delay_consume ||
sd->inventory_data[i]->flag.delay_consume == DELAYCONSUME_NONE ||
sd->inventory.u.items_inventory[i].amount < 1
)
{ //Something went wrong, item exploit?
@ -15524,7 +15538,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
//Consume
sd->itemid = 0;
sd->itemindex = -1;
if( (skill_id == WZ_EARTHSPIKE && sc && sc->data[SC_EARTHSCROLL] && rnd()%100 > sc->data[SC_EARTHSCROLL]->val2) || sd->inventory_data[i]->flag.delay_consume == 2 ) // [marquis007]
if( (skill_id == WZ_EARTHSPIKE && sc && sc->data[SC_EARTHSCROLL] && rnd()%100 > sc->data[SC_EARTHSCROLL]->val2) || sd->inventory_data[i]->flag.delay_consume & DELAYCONSUME_NOCONSUME ) // [marquis007]
; //Do not consume item.
else if( sd->inventory.u.items_inventory[i].expire_time == 0 )
pc_delitem(sd,i,1,0,0,LOG_TYPE_CONSUME); // Rental usable items are not consumed until expiration
@ -16160,7 +16174,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
}
break;
case KO_JYUMONJIKIRI:
if (sd->weapontype1 && (sd->weapontype2 || sd->status.shield))
if (sd->weapontype1 != W_FIST && (sd->weapontype2 != W_FIST || sd->status.shield != W_FIST))
return true;
else {
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
@ -16630,11 +16644,11 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
sprintf(e_msg,msg_txt(sd,381), //Skill Failed. [%s] requires %dx %s.
skill_get_desc(skill_id),
require.ammo_qty,
itemdb_jname(sd->inventory.u.items_inventory[i].nameid));
itemdb_ename(sd->inventory.u.items_inventory[i].nameid));
clif_messagecolor(&sd->bl,color_table[COLOR_RED],e_msg,false,SELF);
return false;
}
if (!(require.ammo&1<<sd->inventory_data[i]->look)) { //Ammo type check. Send the "wrong weapon type" message
if (!(require.ammo&1<<sd->inventory_data[i]->subtype)) { //Ammo type check. Send the "wrong weapon type" message
//which is the closest we have to wrong ammo type. [Skotlex]
clif_arrow_fail(sd,0); //Haplo suggested we just send the equip-arrows message instead. [Skotlex]
//clif_skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0);
@ -22322,7 +22336,7 @@ uint64 SkillDatabase::parseBodyNode(const YAML::Node &node) {
skill->require.ammo = 0;
} else {
for (const auto &it : ammoNode) {
std::string ammo = it.first.as<std::string>(), ammo_constant = "A_" + ammo;
std::string ammo = it.first.as<std::string>(), ammo_constant = "AMMO_" + ammo;
int64 constant;
if (!script_get_constant(ammo_constant.c_str(), &constant)) {

Some files were not shown because too many files have changed in this diff Show More