Merge branch 'master' into feature/lapine_synthesis_and_upgrade
This commit is contained in:
commit
d79513402d
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -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
2
.gitignore
vendored
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
||||
//===================================
|
||||
|
@ -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!
|
@ -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.
|
||||
|
@ -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
492
db/import-tmpl/item_db.yml
Normal 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;
|
@ -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.
|
||||
|
@ -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
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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
95
db/item_db.yml
Normal 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
|
@ -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
|
@ -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
93
db/pre-re/item_db.yml
Normal 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
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
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
22303
db/pre-re/item_db_usable.yml
Normal file
File diff suppressed because it is too large
Load Diff
@ -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_
|
@ -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
|
@ -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
@ -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
@ -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; }
|
||||
|
14442
db/re/item_db.txt
14442
db/re/item_db.txt
File diff suppressed because it is too large
Load Diff
93
db/re/item_db.yml
Normal file
93
db/re/item_db.yml
Normal 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
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
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
46651
db/re/item_db_usable.yml
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
1797
db/re/item_flag.txt
1797
db/re/item_flag.txt
File diff suppressed because it is too large
Load Diff
@ -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
|
4943
db/re/item_trade.txt
4943
db/re/item_trade.txt
File diff suppressed because it is too large
Load Diff
201
db/re/mob_db.txt
201
db/re/mob_db.txt
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
343
doc/item_db.txt
343
doc/item_db.txt
@ -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.
|
||||
|
||||
---------------------------------------
|
||||
|
@ -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
66
doc/yaml/db/item_db.yml
Normal 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
109
doc/yaml/sql/item_db.sql
Normal 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
109
doc/yaml/sql/item_db2.sql
Normal 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;
|
116
doc/yaml/sql/item_db2_re.sql
Normal file
116
doc/yaml/sql/item_db2_re.sql
Normal 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;
|
3
doc/yaml/sql/item_db_equip.sql
Normal file
3
doc/yaml/sql/item_db_equip.sql
Normal file
@ -0,0 +1,3 @@
|
||||
#
|
||||
# Table data for table `item_db`
|
||||
#
|
3
doc/yaml/sql/item_db_etc.sql
Normal file
3
doc/yaml/sql/item_db_etc.sql
Normal file
@ -0,0 +1,3 @@
|
||||
#
|
||||
# Table data for table `item_db`
|
||||
#
|
116
doc/yaml/sql/item_db_re.sql
Normal file
116
doc/yaml/sql/item_db_re.sql
Normal 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;
|
3
doc/yaml/sql/item_db_re_equip.sql
Normal file
3
doc/yaml/sql/item_db_re_equip.sql
Normal file
@ -0,0 +1,3 @@
|
||||
#
|
||||
# Table data for table `item_db_re`
|
||||
#
|
3
doc/yaml/sql/item_db_re_etc.sql
Normal file
3
doc/yaml/sql/item_db_re_etc.sql
Normal file
@ -0,0 +1,3 @@
|
||||
#
|
||||
# Table data for table `item_db_re`
|
||||
#
|
3
doc/yaml/sql/item_db_re_usable.sql
Normal file
3
doc/yaml/sql/item_db_re_usable.sql
Normal file
@ -0,0 +1,3 @@
|
||||
#
|
||||
# Table data for table `item_db_re`
|
||||
#
|
3
doc/yaml/sql/item_db_usable.sql
Normal file
3
doc/yaml/sql/item_db_usable.sql
Normal file
@ -0,0 +1,3 @@
|
||||
#
|
||||
# Table data for table `item_db`
|
||||
#
|
@ -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:";
|
||||
|
15
rAthena.sln
15
rAthena.sln
@ -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
66
sql-files/README.md
Normal 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.
|
200
sql-files/compatibility/item_db2_compat.sql
Normal file
200
sql-files/compatibility/item_db2_compat.sql
Normal 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`
|
||||
);
|
221
sql-files/compatibility/item_db2_re_compat.sql
Normal file
221
sql-files/compatibility/item_db2_re_compat.sql
Normal 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`
|
||||
);
|
200
sql-files/compatibility/item_db_compat.sql
Normal file
200
sql-files/compatibility/item_db_compat.sql
Normal 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`
|
||||
);
|
221
sql-files/compatibility/item_db_re_compat.sql
Normal file
221
sql-files/compatibility/item_db_re_compat.sql
Normal 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
@ -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;');
|
||||
|
@ -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
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
2251
sql-files/item_db_etc.sql
Normal file
File diff suppressed because it is too large
Load Diff
14050
sql-files/item_db_re.sql
14050
sql-files/item_db_re.sql
File diff suppressed because it is too large
Load Diff
6523
sql-files/item_db_re_equip.sql
Normal file
6523
sql-files/item_db_re_equip.sql
Normal file
File diff suppressed because it is too large
Load Diff
4084
sql-files/item_db_re_etc.sql
Normal file
4084
sql-files/item_db_re_etc.sql
Normal file
File diff suppressed because it is too large
Load Diff
3286
sql-files/item_db_re_usable.sql
Normal file
3286
sql-files/item_db_re_usable.sql
Normal file
File diff suppressed because it is too large
Load Diff
1909
sql-files/item_db_usable.sql
Normal file
1909
sql-files/item_db_usable.sql
Normal file
File diff suppressed because it is too large
Load Diff
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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"
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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 )
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
2269
src/map/itemdb.cpp
2269
src/map/itemdb.cpp
File diff suppressed because it is too large
Load Diff
@ -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);
|
||||
|
@ -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')" />
|
||||
|
@ -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))
|
||||
|
@ -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:
|
||||
|
@ -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());
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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 ) );
|
||||
|
@ -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)
|
||||
|
586
src/map/pc.cpp
586
src/map/pc.cpp
File diff suppressed because it is too large
Load Diff
123
src/map/pc.hpp
123
src/map/pc.hpp
@ -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 {
|
||||
|
@ -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 ){
|
||||
|
@ -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
|
||||
};
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
Loading…
x
Reference in New Issue
Block a user