Merged with master

This commit is contained in:
aleos89 2015-06-26 10:36:40 -04:00
commit 35cd68873b
62 changed files with 2918 additions and 1777 deletions

View File

@ -52,6 +52,12 @@ packet_ver_flag: 0x7FFFFFFF
// 0x00000008: 2013-07-10 Ragexe (version 43)
// 0x00000010: 2013-07-17 Ragexe (version 44)
// 0x00000020: 2013-08-07 Ragexe (version 45)
// 0x00000040: 2013-12-23 Ragexe (version 46)
// 0x00000080: ????
// 0x00000100: ????
// 0x00000200: ????
// 0x00000400: 2014-10-16 Ragexe (version 50)
// 0x00000800: 2014-10-22 Ragexe (version 51)
// default value: 0x7FFFFFFF (all clients/versions [41;72])
packet_ver_flag2: 0x7FFFFFFF

View File

@ -57,3 +57,8 @@ feature.autotrade_sit: 1
// Delay in miliseconds to open vending/buyingsotre after player logged in.
feature.autotrade_open_delay: 5000
// Roulette (Note 1)
// Requires: 2014-10-22bRagexe or later
// Off by default while test version is out; enable at your own risk.
feature.roulette: off

View File

@ -145,6 +145,7 @@ mapreg_table: mapreg
vending_db: vendings
vending_items_db: vending_items
market_table: market
db_roulette_table: db_roulette
// Use SQL item_db, mob_db and mob_skill_db for the map server? (yes/no)
use_sql_db: no

View File

@ -8,31 +8,32 @@
//--------------------------------------------------------------
// Enable Logs? (Note 3)
// 0x00000 - Don't log at all
// 0x00001 - (T) Log trades
// 0x00002 - (V) Log vending transactions
// 0x00004 - (P) Log items drop/picked by players
// 0x00008 - (L) Log items drop/looted by monsters
// 0x00010 - (S) Log NPC transactions (buy/sell)
// 0x00020 - (N) Log Script transactions (items deleted/acquired through quests)
// 0x00040 - (D) Log items stolen from mobs (Steal/Gank)
// 0x00080 - (C) Log player-used items (consumables/pet&hom&merc food/items used for skills&attacks)
// 0x00100 - (O) Log produced/ingredient items
// 0x00200 - (U) Log MVP prize items
// 0x00400 - (A) Log player created/deleted items (through @/# commands)
// 0x00800 - (R) Log items placed/retrieved from storage.
// 0x01000 - (G) Log items placed/retrieved from guild storage.
// 0x02000 - (E) Log mail system transactions.
// 0x04000 - (I) Log auction system transactions.
// 0x08000 - (B) Log buying store transactions
// 0x10000 - (X) Log all other transactions (rentals expiring/inserting cards/items removed by item_check/
// 0x000000 - Don't log at all
// 0x000001 - (T) Log trades
// 0x000002 - (V) Log vending transactions
// 0x000004 - (P) Log items drop/picked by players
// 0x000008 - (L) Log items drop/looted by monsters
// 0x000010 - (S) Log NPC transactions (buy/sell)
// 0x000020 - (N) Log Script transactions (items deleted/acquired through quests)
// 0x000040 - (D) Log items stolen from mobs (Steal/Gank)
// 0x000080 - (C) Log player-used items (consumables/pet&hom&merc food/items used for skills&attacks)
// 0x000100 - (O) Log produced/ingredient items
// 0x000200 - (U) Log MVP prize items
// 0x000400 - (A) Log player created/deleted items (through @/# commands)
// 0x000800 - (R) Log items placed/retrieved from storage.
// 0x001000 - (G) Log items placed/retrieved from guild storage.
// 0x002000 - (E) Log mail system transactions.
// 0x004000 - (I) Log auction system transactions.
// 0x008000 - (B) Log buying store transactions
// 0x010000 - (X) Log all other transactions (rentals expiring/inserting cards/items removed by item_check/
// rings deleted by divorce/pet egg (un)hatching/pet armor (un)equipping/Weapon Refine skill/Remove Trap skill)
// 0x20000 - ($) Log cash transactions
// 0x40000 - (K) Log account bank transactions
// 0x80000 - (F) Removed bound items when guild/party is broken
// 0x020000 - ($) Log cash transactions
// 0x040000 - (K) Log account bank transactions
// 0x080000 - (F) Removed bound items when guild/party is broken
// 0x100000 - (Y) Roulette Lottery
// Example: Log trades+vending+script items+created items: 1+2+32+1024 = 1059
// Please note that moving items from inventory to cart and back is not logged by design.
enable_logs: 0xFFFFF
enable_logs: 0xFFFFFF
// Use MySQL Logs? [SQL Version Only] (Note 1)
sql_logs: yes

View File

@ -1593,5 +1593,8 @@
1495: You can't withdraw that much money
1496: Banking is disabled
// Roulette
1497: Roulette is disabled
//Custom translations
//import: conf/msg_conf/import/map_msg_eng_conf.txt

View File

@ -432,6 +432,9 @@ CharMoves 124 1
CharRename 125 1
Font 126 1
BankVault 127 1
RouletteBronze 128 1
RouletteSilver 129 1
RouletteGold 130 1
bMaxHP 6
bMaxSP 8
@ -595,8 +598,8 @@ bMagicSPGainValue 2043
bMagicHPGainValue 2044
bAddMonsterIdDropItem 2045
bMatk 2046
bSPGainRaceAttack 2047
bHPGainRaceAttack 2048
bComaClass 2047
bComaRace 2048
bSkillUseSPrate 2049
bSkillCooldown 2050
@ -628,16 +631,9 @@ bAddMaxWeight 2072
bAddItemGroupHealRate 2073
bHPVanishRaceRate 2074
bSPVanishRaceRate 2075
bHPGainRaceAttackRate 2076
bSPGainRaceAttackRate 2077
bAbsorbDmgMaxHP 2078
bHPGainAttack 2079
bSPGainAttack 2080
bHPGainAttackRate 2081
bSPGainAttackRate 2082
bSubSkill 2083
bSubDefEle 2084
bAbsorbDmgMaxHP 2076
bSubSkill 2077
bSubDefEle 2078
EQI_HEAD_TOP 1
EQI_ARMOR 2
@ -1174,6 +1170,7 @@ IG_Lucky_Silvervine_Fruit_Box_III110 421
IG_Old_Ore_Box 422
SC_ALL -1
SC_NONE -1
SC_STONE 0
SC_FREEZE 1
SC_STUN 2

View File

@ -2318,5 +2318,109 @@ packet_keys: 0x631C511C,0x111C111C,0x111C111C // [Shakto]
0x09D8,2,npcmarketclosed,0
0x09DF,7
//2014-10-16Ragexe
packet_ver: 50
packet_keys: 0x2DFF467C,0x444B37EE,0x2C1B634F // [YomRawr]
0x0369,7,actionrequest,2:6
0x083C,10,useskilltoid,2:4:6
0x0437,5,walktoxy,2
0x035F,6,ticksend,2
0x0967,5,changedir,2:4
0x07E4,6,takeitem,2
0x0362,6,dropitem,2:4
0x07EC,8,movetokafra,2:4
0x022D,8,movefromkafra,2:4
0x0438,10,useskilltopos,2:4:6:8
0x0366,90,useskilltoposinfo,2:4:6:8:10
0x096A,6,getcharnamerequest,2
0x0368,6,solvecharname,2
0x0838,12,searchstoreinfolistitemclick,2:6:10
0x0835,2,searchstoreinfonextpage,0
0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
0x0811,-1,reqtradebuyingstore,2:4:8:12
0x0360,6,reqclickbuyingstore,2
0x0817,2,reqclosebuyingstore,0
0x0815,-1,reqopenbuyingstore,2:4:8:9:89
0x0365,18,bookingregreq,2:4
// 0x0363,8 // CZ_JOIN_BATTLE_FIELD
0x0281,-1,itemlistwindowselected,2:4:8
0x086E,19,wanttoconnection,2:6:10:14:18
0x0802,26,partyinvite,2
// 0x0922,4 // CZ_GANGSI_RANK
0x094B,26,friendslistadd,2
0x0364,5,hommenu,2:4
0x0936,36,storagepassword,0
0x09DF,7
0x0a00,269
// Roulette System [Yommy]
0x0A19,2,rouletteopen,0 // HEADER_CZ_REQ_OPEN_ROULETTE
0x0A1A,23 // HEADER_ZC_ACK_OPEN_ROULETTE
0x0A1B,2,rouletteinfo,0 // HEADER_CZ_REQ_ROULETTE_INFO
0x0A1C,-1 // HEADER_ZC_ACK_ROULETTE_INFO
0x0A1D,2,rouletteclose,0 // HEADER_CZ_REQ_CLOSE_ROULETTE
0x0A1E,3 // HEADER_ZC_ACK_CLOSE_ROULETTE
0x0A1F,2,roulettegenerate,0 // HEADER_CZ_REQ_GENERATE_ROULETTE
0x0A20,21 // HEADER_ZC_ACK_GENERATE_ROULETTE
0x0A21,3,rouletterecvitem,2 // HEADER_CZ_RECV_ROULETTE_ITEM
0x0A22,5 // HEADER_ZC_RECV_ROULETTE_ITEM
//2014-10-22bRagexe
packet_ver: 51
packet_keys: 0x290551EA,0x2B952C75,0x2D67669B // [YomRawr]
0x006d,149
0x023b,10,useskilltopos,2:4:6:8
0x0281,-1,itemlistwindowselected,2:4:8:12
0x035f,6,ticksend,2
0x0360,6,reqclickbuyingstore,2
0x0366,90,useskilltoposinfo,2:4:6:8:10
0x0368,6,solvecharname,2
0x0369,7,actionrequest,2:6
0x0437,5,walktoxy,2
0x0438,36,storagepassword,2:4:20
0x0811,-1,reqtradebuyingstore,2:4:8:12
0x0815,-1,reqopenbuyingstore,2:4:8:9:89
0x0817,2,reqclosebuyingstore,0
0x0819,-1,searchstoreinfo,2:4:5:9:13:14:15
0x0835,12,searchstoreinfolistitemclick,2:6:10
0x083c,10,useskilltoid,2:4:6
0x0878,8,movetokafra,2:4
0x087d,6,dropitem,2:4
0x0896,26,partyinvite2,2
0x0899,5,hommenu,2:4
0x08aa,8,movefromkafra,2:4
//0x08ab,4 // CZ_GANGSI_RANK
0x08ad,5,changedir,2:4
0x08e3,149
0x091a,26,friendslistadd,2
//0x092b,8 // CZ_JOIN_BATTLE_FIELD
0x093b,19,wanttoconnection,2:6:10:14:18
0x0940,2,searchstoreinfonextpage,0
0x094e,6,takeitem,2
0x0955,18,bookingregreq,2:4:6
0x096a,6,getcharnamerequest,2
0x09e7,3
0x09e8,11
0x09ea,11
0x09eb,-1
0x09ed,3
0x09ee,11
0x09f1,11
0x09f2,12
0x09f3,11
0x09f9,143
0x0a03,2
0x0a04,6
0x0a05,49
0x0a06,6
0x0a07,9
0x0a08,26
0x0a09,45
0x0a0a,47
0x0a0b,47
0x0a0c,56
0x0a0d,-1
0x0a13,26
0x0a24,66
//Add new packets here
//packet_ver: 47
//packet_ver: 52

View File

@ -136,12 +136,12 @@
4127:4166,{ bonus2 bAddEffWhenHit,Eff_Curse,600; }
4153:4247:4273,{ bonus3 bAddMonsterDropItem,544,RC_Fish,3000; bonus2 bAddEle,Ele_Water,30; }
4168:4169,{ bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus bCastrate,-10; }
4172:4210:4230:4257:4272,{ bonus bAgi,5; bonus bStr,5; bonus bAspdRate,5; bonus bSpeedRate,25; bonus bSPGainAttack,1; if(BaseClass==Job_Thief) bonus bNoGemStone,0; }
4178:4199:4234:4252:4297,{ bonus bAgi,5; bonus bDex,3; bonus bLongAtkRate,20; bonus bPerfectHitAddRate,20; if(BaseClass==Job_Archer) { bonus2 bExpAddRace,RC_Brute,5; bonus2 bWeaponComaRace,RC_Brute,100; } }
4172:4210:4230:4257:4272,{ bonus bAgi,5; bonus bStr,5; bonus bAspdRate,5; bonus bSpeedRate,25; bonus bSPDrainValue,1; if(BaseClass==Job_Thief) bonus bNoGemStone,0; }
4178:4199:4234:4252:4297,{ bonus bAgi,5; bonus bDex,3; bonus bLongAtkRate,20; bonus bPerfectHitAddRate,20; if(BaseClass==Job_Archer) { bonus2 bExpAddRace,RC_Brute,5; bonus2 bComaRace,RC_Brute,100; } }
4178:4234:4252:4297:4381,{ bonus bDex,5; bonus2 bSkillAtk,"CG_ARROWVULCAN",5; bonus2 bSkillAtk,"DC_THROWARROW",10; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10; if(BaseJob==Job_Bard||BaseJob==Job_Dancer) bonus3 bAutoSpellWhenHit,"CG_TAROTCARD",2,50; }
4185:4217:4280:4293:4312,{ bonus bVit,10; bonus bCastrate,-10; bonus bUseSPRate,-10; if(BaseClass==Job_Acolyte) { bonus2 bExpAddRace,RC_Undead,5; bonus2 bExpAddRace,RC_Demon,5; bonus2 bSubRace,RC_Undead,30; bonus2 bSubRace,RC_Demon,30; } }
4185:4293:4312:4332,{ bonus bStr,3; bonus bMaxSP,80; bonus bBaseAtk,25; bonus3 bAutoSpell,"AL_CRUCIS",5,10; bonus2 bSkillAtk,"MO_EXTREMITYFIST",10; if(BaseJob==Job_Monk) { bonus bUseSPrate,-10; bonus bNoCastCancel,0; } }
4186:4206:4233:4281:4321,{ bonus bLuk,10; bonus bSPGainAttack,2; bonus2 bSkillAtk,42,20; if(BaseClass==Job_Merchant) { bonus2 bAddMonsterDropItem,617,5; bonus bMagicDamageReturn,20; } }
4186:4206:4233:4281:4321,{ bonus bLuk,10; bonus bSPDrainValue,2; bonus2 bSkillAtk,42,20; if(BaseClass==Job_Merchant) { bonus2 bAddMonsterDropItem,617,5; bonus bMagicDamageReturn,20; } }
4191:4208:4258:4309:4325:4327,{ bonus bMaxHP,500; bonus bDef,5; bonus bMdef,5; bonus2 bSkillAtk,14,10; bonus2 bSkillAtk,19,10; bonus2 bSkillAtk,20,10; if(BaseClass==Job_Mage) { bonus bMatkRate,3; bonus bCastrate,-15; } }
4193:4294,{ bonus bMaxHP,300; bonus bMaxSP,60; }
4208:4258:4325:4327:4382,{ bonus bInt,3; bonus2 bSkillAtk,"WZ_HEAVENDRIVE",10; bonus2 bSkillAtk,"MG_THUNDERSTORM",10; if(BaseJob==Job_Sage) { bonus bMagicDamageReturn,20; bonus2 bAddMonsterDropItem,716,100; bonus2 bAddMonsterDropItem,715,100; bonus bCastrate,-20; } }

View File

@ -482,7 +482,7 @@
1129,Flamberge,Flamberge,5,60000,,1500,150,,1,0,0x00004080,7,2,2,3,27,1,2,{},{},{}
1130,Nagan,Nagan,5,20,,500,120,,1,0,0x000654E2,7,2,2,4,40,1,2,{ skill "TF_DOUBLE",5; bonus bDoubleRate,25; bonus2 bAddRace,RC_DemiHuman,5; bonus2 bAddRace,RC_Player,5; },{},{}
1131,Ice_Falchon,Ice Falchion,5,20,,600,100,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Water; bonus2 bAddEff,Eff_Freeze,500; bonus2 bAddEff2,Eff_Freeze,10; skill "MG_COLDBOLT",3; bonus3 bAutoSpell,"MG_COLDBOLT",3,100; },{},{}
1132,Edge,Edge,5,20,,700,115,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus2 bAddEff,Eff_Curse,30; bonus2 bWeaponComaClass,Class_Normal,10; },{},{}
1132,Edge,Edge,5,20,,700,115,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus2 bAddEff,Eff_Curse,30; bonus2 bComaClass,Class_Normal,10; },{},{}
1133,Fire_Brand,Fireblend,5,20,,500,100,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Fire; skill "MG_FIREBOLT",3; bonus3 bAutoSpell,"MG_FIREBOLT",3,100; },{},{}
1134,Scissores_Sword,Caesar's Sword,5,20,,700,140,,1,0,0x000654E2,7,2,2,4,40,1,2,{ bonus2 bAddRace,RC_Plant,25; bonus bIgnoreDefRace,RC_Plant; },{},{}
1135,Cutlas,Cutlus,5,20,,900,150,,1,0,0x000654E2,7,2,2,4,40,1,2,{ skill "SM_BASH",5; bonus bStr,2; bonus bDef,1; },{},{}
@ -660,11 +660,11 @@
1362,Two_Handed_Axe__,Two-Handed Axe,5,55000,,2500,185,,1,0,0x000444A2,7,2,34,3,30,1,7,{},{},{}
1363,Brood_Axe,Bloody Axe,5,20,,4000,170,,1,0,0x000444A2,7,2,34,4,44,1,7,{ bonus bStr,10; bonus bSpeedRate,25; },{},{}
1364,Great_Axe,Great Axe,5,20,,1800,187,,1,0,0x000444A2,7,2,34,4,44,1,7,{ bonus2 bAddSkillBlow,"MC_MAMMONITE",5; bonus2 bAddEff,Eff_Stun,1500; },{},{}
1365,Sabbath,Sabbath,5,20,,2300,120,,1,0,0x000444A2,7,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Dark; bonus2 bWeaponComaRace,RC_Demon,50; bonus2 bCriticalAddRace,RC_Undead,50; },{},{}
1365,Sabbath,Sabbath,5,20,,2300,120,,1,0,0x000444A2,7,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Dark; bonus2 bComaRace,RC_Demon,50; bonus2 bCriticalAddRace,RC_Undead,50; },{},{}
1366,Right_Epsilon,Light Epsilon,5,20,,2300,180,,1,0,0x000444A2,7,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Holy; skill "AL_HEAL",3; bonus2 bAddRace,RC_Demon,3; },{},{}
1367,Slaughter,Slaughter,5,20,,2500,120,,1,0,0x000444A2,7,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Earth; bonus bIgnoreDefRace,RC_Brute; bonus2 bWeaponComaRace,RC_Brute,40; },{},{}
1367,Slaughter,Slaughter,5,20,,2500,120,,1,0,0x000444A2,7,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Earth; bonus bIgnoreDefRace,RC_Brute; bonus2 bComaRace,RC_Brute,40; },{},{}
1368,Tomahawk,Tomahawk,5,20,,2500,165,,1,0,0x000444A2,7,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Wind; skill "ITM_TOMAHAWK",1; },{},{}
1369,Guillotine,Guillotine,5,20,,3000,215,,1,0,0x000444A2,7,2,34,4,44,1,7,{ bonus2 bWeaponComaRace,RC_DemiHuman,30; bonus2 bWeaponComaRace,RC_Player,30; bonus2 bSPGainRaceAttack,RC_DemiHuman,2; bonus2 bSPGainRaceAttack,RC_Player,2; bonus2 bSPGainRace,RC_DemiHuman,20; bonus2 bSPGainRace,RC_Player,20; },{},{}
1369,Guillotine,Guillotine,5,20,,3000,215,,1,0,0x000444A2,7,2,34,4,44,1,7,{ bonus2 bComaRace,RC_DemiHuman,30; bonus2 bComaRace,RC_Player,30; bonus2 bSPDrainValueRace,RC_DemiHuman,2; bonus2 bSPDrainValueRace,RC_Player,2; bonus2 bSPGainRace,RC_DemiHuman,20; bonus2 bSPGainRace,RC_Player,20; },{},{}
1370,Doom_Slayer,Doom Slayer,5,20,,6000,10,,1,0,0x000444A2,7,2,34,4,80,1,7,{ bonus bAspdRate,-40; bonus bUseSPrate,100; if(readparam(bStr)>=95){ bonus bBaseAtk,340; bonus2 bAddEff,Eff_Stun,3000; bonus bBreakArmorRate,500; } },{},{}
1371,Doom_Slayer_,Doom Slayer,5,20,,6000,10,,1,1,0x000444A2,7,2,34,4,80,1,7,{ bonus bAspdRate,-40; bonus bUseSPrate,100; if(readparam(bStr)>=95){ bonus bBaseAtk,340; bonus2 bAddEff,Eff_Stun,3000; bonus bBreakArmorRate,500; } },{},{}
1372,Right_Epsilon_C,Light Epsilon,5,1,,0,229,,1,0,0x000444A2,7,2,34,4,1,0,7,{ bonus bAtkEle,Ele_Holy; skill "AL_HEAL",3; bonus2 bAddRace,RC_Demon,3; bonus bStr,10; bonus bSpeedRate,25; },{},{}
@ -786,7 +786,7 @@
1523,Spike,Spike,5,20,,700,85,,1,0,0x00008110,7,2,2,4,40,1,8,{ bonus bCritical,40; bonus bDefRate,-67; bonus bDef2Rate,-67; },{},{}
1524,Golden_Mace,Golden Mace,5,20,,800,110,,1,1,0x00008110,7,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus bUnbreakableWeapon,0; },{},{}
1525,Long_Mace,Long Mace,5,20,,800,135,,3,0,0x00008110,7,2,2,4,40,1,8,{ bonus bLongAtkDef,10; },{},{}
1526,Slash,Slash,5,20,,1000,145,,1,0,0x00008110,7,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,15; bonus2 bWeaponComaRace,RC_Undead,10; bonus2 bExpAddRace,RC_Undead,5; },{},{}
1526,Slash,Slash,5,20,,1000,145,,1,0,0x00008110,7,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,15; bonus2 bComaRace,RC_Undead,10; bonus2 bExpAddRace,RC_Undead,5; },{},{}
1527,Quadrille,Quadrille,5,20,,900,165,,1,0,0x00008110,7,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; bonus2 bAddEle,Ele_Earth,10; },{},{}
1528,Grand_Cross,Grand Cross,5,20,,1500,140,,1,0,0x00008110,7,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
1529,Iron_Driver,Iron Driver,5,20,,3000,155,,2,0,0x00008100,7,2,2,3,78,1,8,{},{},{}
@ -825,7 +825,7 @@
1562,Bible_Of_Battlefield,Battlefield Textbook,5,20,,700,110,,1,1,0x00410100,7,2,2,4,80,0,15,{ bonus bInt,3; bonus3 bAutoSpell,"AL_BLESSING",3+(getskilllv("AL_BLESSING")>3)*(getskilllv("AL_BLESSING")-3),20; },{},{}
1563,Diary_Of_Great_Sage_C,Sage's Diary,5,1,,0,135,,1,2,0x00410100,7,2,2,3,1,0,15,{ bonus bMatkRate,20; bonus bAspdRate,5; },{},{}
1564,Encyclopedia,Encyclopedia,5,20,,2000,110,,1,2,0x00410100,7,2,2,3,70,1,15,{ bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); },{},{}
1565,Death_Note,Ledger of Death,5,20,,1000,137,,1,2,0x00410100,7,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus2 bWeaponComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
1565,Death_Note,Ledger of Death,5,20,,1000,137,,1,2,0x00410100,7,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bComaRace,RC_DemiHuman,10; bonus2 bComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
1566,Diary_Of_Great_Basil,Diary Of Great Basil,5,20,,0,120,,1,0,0x00410100,7,2,2,1,0,0,15,{ bonus2 bAddClass,Class_All,50; },{},{}
1567,Hardback_C,Refined Hardcover Book,5,1,,0,168,,1,0,0x00410100,7,2,2,4,0,0,15,{ bonus bStr,5; bonus bDex,2; bonus bMatkRate,20; },{},{}
1568,Book_Of_Billows_,Book of Billows,5,35000,,750,90,,1,3,0x00410100,7,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Water; },{},{}
@ -839,7 +839,7 @@
1576,Krieger_Book1,Glorious Tablet,5,20,,0,90,,1,0,0x00410100,7,2,2,4,80,1,15,{ bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bBaseAtk,200; }",30,3000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; },{},{}
1577,Krieger_Book2,Glorious Apocalypse,5,20,,0,90,,1,0,0x00410100,7,2,2,4,80,1,15,{ bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; if(getrefine()>8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; } },{},{}
1578,Book_Of_Prayer,Book Of Prayer,5,20,,0,140,,1,0,0x00410100,7,2,2,3,0,0,15,{ bonus bVit,2; bonus bMdef,2; bonus bMaxSPrate,10; },{},{}
1579,Death_Note_M,Book of the Dead,5,20,,1000,137,,1,2,0x00410100,7,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus2 bWeaponComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
1579,Death_Note_M,Book of the Dead,5,20,,1000,137,,1,2,0x00410100,7,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bComaRace,RC_DemiHuman,10; bonus2 bComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
1580,Encyclopedia_C,Giant Encyclopedia,5,0,,0,145,,1,0,0x00410100,7,2,2,3,0,0,15,{ bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); bonus2 bAddSize,Size_All,40; },{},{}
1581,F_Diary_Of_Great_Sage_C,Diary Of Great Sage,5,1,,0,135,,1,2,0x00410100,7,2,2,3,1,0,15,{},{},{}
1582,E_Diary_Of_Great_Sage_C,Diary Of Great Sage,5,1,,0,135,,1,2,0x00410100,7,2,2,3,1,0,15,{},{},{}
@ -1417,7 +1417,7 @@
2551,Rider_Insignia_M,Crest of the Rider,4,20,,500,,4,,1,0xFFFFFFFE,2,2,4,,55,1,0,{ bonus bAgi,2; },{},{}
2552,Mithril_Magic_Cape_M,Mithril Magic Manteau,4,20,,400,,3,,1,0x00098B1C,2,2,4,,70,1,0,{ bonus bMdef,3; bonus5 bAutoSpellWhenHit,"NPC_ANTIMAGIC",6,200,BF_MAGIC,0; },{},{}
2553,Dragon_Manteau,Dragon Manteau,4,20,,1000,,5,,1,0xFFFFFFFE,2,2,4,,0,1,0,{ bonus bAgi,1; bonus bMdef,5; },{},{}
2554,Piece_Of_Angent_Skin,Nydhorgg's Shadow Garb,4,20,,400,,5,,1,0xFFFFFFFE,2,2,4,,90,1,0,{ bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus2 bSPGainAttackRate,100,1; bonus bMdef,3; },{},{}
2554,Piece_Of_Angent_Skin,Nydhorgg's Shadow Garb,4,20,,400,,5,,1,0xFFFFFFFE,2,2,4,,90,1,0,{ bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus2 bSPDrainRate,10,1; bonus bMdef,3; },{},{}
// Accessories
//===================================================================
2601,Ring,Ring,4,30000,,100,,0,,0,0xFFFFFFFE,7,2,136,,20,0,0,{ bonus bStr,2; },{},{}
@ -1797,7 +1797,7 @@
4169,Dark_Illusion_Card,Dark Illusion Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMaxHPrate,-10; bonus bMaxSPrate,-10; bonus bCastrate,-10; },{},{}
4170,Dark_Frame_Card,Dark Frame Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Stone,600; },{},{}
4171,Dark_Priest_Card,Dark Priest Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPVanishRate,50,10; if(BaseJob==Job_Sage) bonus bSPDrainValue,1; },{},{}
4172,The_Paper_Card,The Paper Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,20; bonus bSPGainAttack,-1; },{},{}
4172,The_Paper_Card,The Paper Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,20; bonus bSPDrainValue,-1; },{},{}
4173,Demon_Pungus_Card,Demon Pungus Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Sleep,600; },{},{}
4174,Deviling_Card,Deviling Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bSubEle,Ele_Neutral,50; bonus2 bSubEle,Ele_Water,-50; bonus2 bSubEle,Ele_Earth,-50; bonus2 bSubEle,Ele_Fire,-50; bonus2 bSubEle,Ele_Wind,-50; bonus2 bSubEle,Ele_Poison,-50; bonus2 bSubEle,Ele_Holy,-50; bonus2 bSubEle,Ele_Dark,-50; bonus2 bSubEle,Ele_Ghost,-50; bonus2 bSubEle,Ele_Undead,-50; },{},{}
4175,Poison_Toad_Card,Poisonous Toad Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAutoSpell,"TF_POISON",1,20; bonus2 bAddSkillBlow,52,5; },{},{}
@ -1901,12 +1901,12 @@
4273,Shellfish_Card,Shell Fish Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,5; bonus2 bAddDamageClass,1073,30; },{},{}
4274,Zombie_Master_Card,Zombie Master Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPGainRace,RC_Undead,5; },{},{ heal 0,-5; }
4275,Zombie_Prisoner_Card,Zombie Prisoner Card,6,20,,10,,,,,,,,64,,,,,{ bonus2 bSubRace,RC_Undead,-20; bonus2 bExpAddRace,RC_Undead,10; },{},{}
4276,Lord_Of_Death_Card,Lord of The Dead Card,6,20,,10,,,,,,,,2,,,,,{ bonus3 bAddEff,Eff_Stun,500,ATF_SHORT; bonus3 bAddEff,Eff_Curse,500,ATF_SHORT; bonus3 bAddEff,Eff_Silence,500,ATF_SHORT; bonus3 bAddEff,Eff_Poison,500,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,500,ATF_SHORT; bonus2 bWeaponComaClass,Class_Normal,1; },{},{}
4276,Lord_Of_Death_Card,Lord of The Dead Card,6,20,,10,,,,,,,,2,,,,,{ bonus3 bAddEff,Eff_Stun,500,ATF_SHORT; bonus3 bAddEff,Eff_Curse,500,ATF_SHORT; bonus3 bAddEff,Eff_Silence,500,ATF_SHORT; bonus3 bAddEff,Eff_Poison,500,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,500,ATF_SHORT; bonus2 bComaClass,Class_Normal,1; },{},{}
4277,Zherlthsh_Card,Zealotus Card,6,20,,10,,,,,,,,32,,,,,{ bonus bLuk,2; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10; bonus2 bSkillAtk,"DC_THROWARROW",10; },{},{}
4278,Gibbet_Card,Gibbet Card,6,20,,10,,,,,,,,769,,,,,{ if(getrefine()<6) bonus bMdef,5; },{},{}
4279,Deleter_Card,Earth Deleter Card,6,20,,10,,,,,,,,16,,,,,{ bonus bSPrecovRate,-100; bonus bSPGainValue,10; },{},{ heal 0,-100; }
4280,Geographer_Card,Geographer Card,6,20,,10,,,,,,,,16,,,,,{ bonus3 bAutoSpellWhenHit,"AL_BLESSING",2+8*(getskilllv("AL_BLESSING")==10),30; },{},{}
4281,Zipper_Bear_Card,Zipper Bear Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,30; bonus bSPGainAttack,-1; if(BaseClass==Job_Merchant) bonus bUnbreakableWeapon,0; },{},{}
4281,Zipper_Bear_Card,Zipper Bear Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,30; bonus bSPDrainValue,-1; if(BaseClass==Job_Merchant) bonus bUnbreakableWeapon,0; },{},{}
4282,Tengu_Card,Tengu Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bAddMonsterDropItemGroup,IG_Recovery,600; },{},{}
4283,Greatest_General_Card,Greatest General Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAutoSpell,"MO_CALLSPIRITS",5,2+18*(BaseClass==Job_Acolyte); },{},{}
4284,Chepet_Card,Chepet Card,6,20,,10,,,,,,,,2,,,,,{ bonus4 bAutoSpell,"AL_HEAL",5,50,1; },{},{}
@ -5472,7 +5472,7 @@
13400,Cutlas_,Cutlus,5,20,,900,150,,1,1,0x000654E2,7,2,2,4,40,1,2,{ skill "SM_BASH",5; bonus bStr,2; bonus bDef,1; },{},{}
13401,Excalibur_C,Excalibur,5,1,,0,199,,1,0,0x000654E2,7,2,2,4,1,0,2,{ bonus bInt,10; bonus bLuk,10; bonus bAtkEle,Ele_Holy; },{},{}
13402,Cutlas_C,Cutlus,5,2,,0,185,,1,0,0x000654E2,7,2,2,4,0,0,2,{ skill "SM_BASH",5; bonus bStr,2; bonus bDef,1; },{},{}
13403,Solar_Sword_C,Solar Sword,5,2,,0,120,,1,0,0x000654E2,7,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Fire; bonus bHPGainAttackRate,1; bonus2 bSPLossRate,15,10000; },{},{}
13403,Solar_Sword_C,Solar Sword,5,2,,0,120,,1,0,0x000654E2,7,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Fire; bonus bHPDrainRate,1; bonus2 bSPLossRate,15,10000; },{},{}
13404,Platinum_Shotel,Platinum Shotel,5,20,,1500,130,,1,1,0x000654E2,7,2,2,4,55,1,2,{ bonus bCritical,50; },{},{}
13405,Curved_Sword,Curved Sword,5,20,,800,125,,1,2,0x000654E2,7,2,2,4,55,1,2,{ bonus bAspdRate,10; bonus2 bAddEff,Eff_Curse,300; },{},{}
13406,Edger,Edger,5,20,,0,120,,1,0,0x000654E2,7,2,2,1,0,0,2,{ bonus2 bAddClass,Class_All,50; },{},{}

View File

@ -41,6 +41,7 @@
// 0x08000 - skill that ignore bg reduction
// 0x10000 - skill that ignore gvg reduction
// 0x20000 - makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options)
// 0x40000 - skill that can hit trap-type skill (inf2 has 0x00080)
// 13 maxcount: max amount of skill instances to place on the ground when
// player_land_skill_limit/monster_land_skill_limit is enabled. For skills
// that attack using a path, this is the path length to be used.
@ -76,7 +77,7 @@
4,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, SM_RECOVERY,Increase HP Recovery
5,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0x0, SM_BASH,Bash
6,9,6,1,0,1,0,10,1,no,0,0,0,none,0,0x0, SM_PROVOKE,Provoke
7,0,6,4,3,0x2,2,10,1,no,0,0,0,weapon,2,0x0, SM_MAGNUM,Magnum Break
7,0,6,4,3,0x2,2,10,1,no,0,0x40000,0,weapon,2,0x0, SM_MAGNUM,Magnum Break
8,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, SM_ENDURE,Endure
//****
@ -128,7 +129,7 @@
44,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, AC_VULTURE,Vulture's Eye
45,0,6,4,0,0x3,3,10,1,no,0,0,0,weapon,0,0x0, AC_CONCENTRATION,Improve Concentration
46,-9,8,1,-1,0,0,10,2,no,0,0,0,weapon,0,0x80, AC_DOUBLE,Double Strafe
47,-9,6,2,-1,0x2,2,10,1,no,0,0x0,0,weapon,2,0x81, AC_SHOWER,Arrow Shower
47,-9,6,2,-1,0x2,2,10,1,no,0,0x40000,0,weapon,2,0x81, AC_SHOWER,Arrow Shower
//****
// Thief
@ -175,7 +176,7 @@
//****
// Wizard
80,9,8,2,3,0x20,1:1:1:1:1:2:2:2:2:2:2,10,-3:-4:-5:-6:-7:-8:-9:-10:-11:-12:-12,yes,0,0x2080,5,magic,0,0x0, WZ_FIREPILLAR,Fire Pillar
81,0,6,4,3,0,7,10,1,yes,0,0x2000,0,magic,5,0x20, WZ_SIGHTRASHER,Sightrasher
81,0,6,4,3,0x2,7,10,1,yes,0,0x42000,0,magic,5,0x20, WZ_SIGHTRASHER,Sightrasher
83,9,8,2,3,0,3:3:3:3:3:3:3:3:3:3:14,10,1:1:2:2:3:3:4:4:5:5:15,yes,0,0x2000,0,magic,0,0x20, WZ_METEOR,Meteor Storm
84,9,8,1,4,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0x2000,0,magic,2:3:3:4:4:5:5:6:6:7,0x20, WZ_JUPITEL,Jupitel Thunder
85,9,8,2,4,0,0,10,-10,yes,0,0x2000,0,magic,0,0x20, WZ_VERMILION,Lord of Vermilion
@ -217,13 +218,13 @@
115,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,6:7:8:9:10,0x3000, HT_SKIDTRAP,Skid Trap
116,3,6,2,2,0x42,0,5,1,no,0,0x80,0,misc,0,0x3800, HT_LANDMINE,Land Mine
117,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,0,0x3000, HT_ANKLESNARE,Ankle Snare
118,3,6,2,0,0x2,1,5,1,no,0,0x80,0,misc,0,0x3000, HT_SHOCKWAVE,Shockwave Trap
118,3,6,2,0,0x3,1,5,1,no,0,0x80,0,misc,0,0x3000, HT_SHOCKWAVE,Shockwave Trap
119,3,6,2,0,0x3,2,5,1,no,0,0x80,0,misc,0,0x3000, HT_SANDMAN,Sandman
120,3,6,2,0,0x3,1,5,1,no,0,0x80,0,misc,0,0x3000, HT_FLASHER,Flasher
121,3,6,2,1,0x42,1,5,1,no,0,0x80,0,weapon,0,0x3800, HT_FREEZINGTRAP,Freezing Trap
122,3,6,2,4,0x42,1,5,1,no,0,0x80,0,misc,0,0x3800, HT_BLASTMINE,Blast Mine
123,3,6,2,3,0x42,2,5,1,no,0,0x80,0,misc,0,0x3800, HT_CLAYMORETRAP,Claymore Trap
124,2,6,32,0,0x1,0,1,1,no,0,0,0,misc,0,0x0, HT_REMOVETRAP,Remove Trap
124,2,6,32,0,0x1,0,1,1,no,0,0x40000,0,misc,0,0x0, HT_REMOVETRAP,Remove Trap
125,3,6,2,0,0x1,0,1,1,no,0,0x80,0,misc,0,0x2000, HT_TALKIEBOX,Talkie Box
126,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, HT_BEASTBANE,Beast Bane
127,0,0,0,0,0,0,1,0,no,0,0,0,misc,0,0x0, HT_FALCON,Falconry Mastery
@ -369,7 +370,7 @@
249,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, CR_AUTOGUARD,Guard
250,3,6,1,0,0,0,5,1,no,0,0,0,weapon,5:6:7:8:9,0x0, CR_SHIELDCHARGE,Smite
251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x20000, CR_SHIELDBOOMERANG,Shield Boomerang
252,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect
252,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect
253,-2,8,1,6,0,0,10,-2,no,0,0,0,weapon,0,0x0, CR_HOLYCROSS,Holy Cross
254,5,6,4,6,0x48,0,10,1,no,33,0x100,0,magic,0,0x0, CR_GRANDCROSS,Grand Cross
255,7:8:9:10:11,6,16,0,0x1,0,5,1,yes,0,0x600,0,none,0,0x0, CR_DEVOTION,Sacrifice
@ -561,7 +562,7 @@
//****
// Stalker
389,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x60, ST_CHASEWALK,Stealth
390,0,0,4,0,0,0,5,1,yes,0,0,0,weapon,0,0x0, ST_REJECTSWORD,Counter Instinct
390,0,0,4,0,0x1,0,5,1,yes,0,0,0,weapon,0,0x0, ST_REJECTSWORD,Counter Instinct
//391,0,0,4,0,1,0,1,1,yes,0,0,0,magic,0,0x0, ST_STEALBACKPACK,Steal Backpack
//****
@ -629,9 +630,9 @@
//****
// Star Gladiator
427,0,6,4,0,0x1,0,3,1,yes,0,0,0,magic,0,0x0, SG_FEEL,Feeling the Sun Moon and Stars
428,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_SUN_WARM,Warmth of the Sun
429,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_MOON_WARM,Warmth of the Moon
430,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_STAR_WARM,Warmth of the Stars
428,1,6,4,-1,0x3,1,3,1,yes,0,0,0,weapon,2,0x1, SG_SUN_WARM,Warmth of the Sun
429,1,6,4,-1,0x3,1,3,1,yes,0,0,0,weapon,2,0x1, SG_MOON_WARM,Warmth of the Moon
430,1,6,4,-1,0x3,1,3,1,yes,0,0,0,weapon,2,0x1, SG_STAR_WARM,Warmth of the Stars
431,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_SUN_COMFORT,Comfort of the Sun
432,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_MOON_COMFORT,Comfort of the Moon
433,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_STAR_COMFORT,Comfort of the Stars
@ -689,7 +690,7 @@
//****
// Other 2nd Skills
473,0,6,4,0,0,0,1,1,no,0,0,0,none,0,0x0, SM_SELFPROVOKE,Provoke Self
473,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, SM_SELFPROVOKE,Provoke Self
474,0,0,4,0,0x1,0,10,1,no,0,0x2,0,none,0,0x0, NPC_EMOTION_ON,Emotion ON
475,0,0,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, ST_PRESERVE,Preserve
476,1,6,1,0,0x1,0,5,1,yes,0,0,0,weapon,0,0x20, ST_FULLSTRIP,Divest All
@ -719,7 +720,7 @@
//****
// Gunslinger
500,0,6,4,0,0x40,0,5,1,no,0,0,0,misc,0,0x0, GS_GLITTERING,Flip the Coin
500,0,6,4,0,0x41,0,5,1,no,0,0,0,misc,0,0x0, GS_GLITTERING,Flip the Coin
501,9,6,1,-1,0x50,0,1,1,no,0,0,0,misc,0,0x0, GS_FLING,Fling
502,-9,8,1,-1,0,0,1,3,no,0,0,0,weapon,0,0x0, GS_TRIPLEACTION,Triple Action
503,-9,6,1,-1,0x8,0,1,1,no,0,0,0,weapon,0,0x0, GS_BULLSEYE,Bulls Eye
@ -870,7 +871,7 @@
1003,0,0,0,0,0,0,1,0,no,0,0x1,0,weapon,0,0x0, AS_SONICACCEL,Sonic Acceleration
1004,9,8,1,0,0x8,0,1,1,no,0,0x1,0,weapon,0,0x0, AS_VENOMKNIFE,Throw Venom Knife
1005,1,6,1,0,0x1,0,1,1,no,0,0x1,0,weapon,0,0x0, RG_CLOSECONFINE,Close Confine
1006,0,6,4,3,0,1,1,1,yes,0,0x1,0,magic,3,0x20, WZ_SIGHTBLASTER,Sight Blaster
1006,0,6,4,3,0,1,1,1,yes,0,0x40001,0,magic,3,0x20, WZ_SIGHTBLASTER,Sight Blaster
1007,0,6,4,0,0x1,0,1,0,no,0,0x1,0,none,0,0x0, SA_CREATECON,Create Elemental Converter
1008,9,6,1,1,0x1,0,1,1,yes,0,0x1,0,magic,0,0x0, SA_ELEMENTWATER,Elemental Change Water
1009,-9,6,1,0,0,0,1,1,no,0,0x1,0,weapon,3,0x0, HT_PHANTASMIC,Phantasmic Arrow
@ -894,7 +895,7 @@
2005,1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3,0x0, RK_WINDCUTTER,Wind Cutter
2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0,0x0, RK_IGNITIONBREAK,Ignition Break
2007,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, RK_DRAGONTRAINING,Dragon Training
2008,9,6,2,3,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,weapon,0,0x0, RK_DRAGONBREATH,Dragon Breath
2008,9,6,2,3,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0x40000,0,weapon,0,0x0, RK_DRAGONBREATH,Dragon Breath
2009,0,6,4,0,0x3,3:4:5:6:7,5,1,no,0,0,0,none,0,0x0, RK_DRAGONHOWLING,Dragon Howling
2010,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, RK_RUNEMASTERY,Rune Mastery
2011,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, RK_MILLENNIUMSHIELD,Millenium Shield
@ -903,7 +904,7 @@
2014,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_GIANTGROWTH,Giant Growth
2015,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_STONEHARDSKIN,Stone Hard Skin
2016,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_VITALITYACTIVATION,Vitality Activation
2017,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,7,0x0, RK_STORMBLAST,Storm Blast
2017,0,6,4,-1,0x2,3,1,1,no,0,0x40000,0,weapon,7,0x0, RK_STORMBLAST,Storm Blast
2018,0,6,4,0,0x3,-1,1,1,yes,0,0,0,none,0,0x0, RK_FIGHTINGSPIRIT,Fighting Spirit //CHECK Is this splash needed?
2019,9,6,4,6,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_ABUNDANCE,Abundance
2020,5:6:7:8:9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RK_PHANTOMTHRUST,Phantom Thrust
@ -995,7 +996,7 @@
2234,0,6,4,0,0,0,5,1,yes,0,0,0,none,0,0x0, RA_FEARBREEZE,Fear Breeze
2235,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, RA_RANGERMAIN,Ranger Main
2236,9,8,1,-1,0,0,10,1,yes,0,0,0,weapon,0,0x80, RA_AIMEDBOLT,Aimed Bolt
2237,9,6,2,0,0x3,3,1,1,no,0,0,0,none,0,0x2000, RA_DETONATOR,Detonator
2237,9,6,2,0,0x3,3,1,1,no,0,0x40000,0,none,0,0x2000, RA_DETONATOR,Detonator
2238,3,6,2,0,0x3,2,5,1,no,0,0x80,3,misc,0,0x2000, RA_ELECTRICSHOCKER,Electric Shocker
2239,3,6,2,0,0x42,3,5,1,no,0,0x80,3,misc,0,0x2800, RA_CLUSTERBOMB,Cluster Bomb
2240,0,6,4,0,0,0,1,1,no,0,0,0,none,0,0x0, RA_WUGMASTERY,Warg Mastery
@ -1004,7 +1005,7 @@
2243,9,6,1,0,0x40,0,5,1,no,0,0,0,weapon,0,0x2000, RA_WUGSTRIKE,Warg Strike
2244,9,6,1,0,0x40,0,5,1,no,0,0,0,weapon,0,0x80, RA_WUGBITE,Warg Bite
2245,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, RA_TOOTHOFWUG,Tooth of Warg
2246,0,6,4,0,0x2,3:4:5:6:7,5,1,no,0,0,0,weapon,0,0x0, RA_SENSITIVEKEEN,Sensitive Keen
2246,0,6,4,0,0x2,3:4:5:6:7,5,1,no,0,0x40000,0,weapon,0,0x0, RA_SENSITIVEKEEN,Sensitive Keen
2247,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x42, RA_CAMOUFLAGE,Camouflage
2248,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, RA_RESEARCHTRAP,Research Trap
2249,3,6,2,3,0x43,2,1,1,no,0,0x80,1,misc,0,0x2000, RA_MAGENTATRAP,Magenta Trap
@ -1021,14 +1022,14 @@
2257,3,6,1,-1,0,0,3,1,no,0,0,0,weapon,0,0x0, NC_PILEBUNKER,Pile Bunker
2258,13,6,1,-1,0x2,1,3,1,no,0,0,0,weapon,0,0x0, NC_VULCANARM,Vulcan Arm
2259,7,6,1,3,0,2,3,1,no,0,0,5,weapon,0,0x0, NC_FLAMELAUNCHER,Flame Launcher
2260,7,6,2,1,0x2,2:3:4,3,1,no,0,0,0,weapon,0,0x0, NC_COLDSLOWER,Cold Slower
2260,7,6,2,1,0x2,2:3:4,3,1,no,0,0x40000,0,weapon,0,0x0, NC_COLDSLOWER,Cold Slower
2261,9:11:13,6,2,-1,0x42,3:2:1,3,1,no,0,0,0,weapon,0,0x0, NC_ARMSCANNON,Arm Cannon
2262,0,6,4,0,0x1,0,3,1,no,0,0,0,none,0,0x0, NC_ACCELERATION,Acceleration
2263,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, NC_HOVERING,Hovering
2264,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_F_SIDESLIDE,Front-Side Slide
2265,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_B_SIDESLIDE,Back-Side Slide
2266,0,0,0,0,0,0,4,0,no,0,0,0,none,0,0x0, NC_MAINFRAME,Mainframe Restructure
2267,0,6,4,0,0xCA,2:3:4,3,1,no,0,0,0,weapon,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2267,0,6,4,0,0xCA,2:3:4,3,1,no,0,0x40000,0,weapon,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2268,0,6,4,0,0x1,0,4,1,yes,0,0,0,none,0,0x0, NC_SHAPESHIFT,Shape Shift
2269,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, NC_EMERGENCYCOOL,Emergency Cool
2270,0,6,4,0,0x3,7,1,1,yes,0,0,0,none,0,0x0, NC_INFRAREDSCAN,Infrared Scan
@ -1102,7 +1103,7 @@
2329,-2,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0, SR_FALLENEMPIRE,Fallen Empire
2330,-2,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon
2331,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, SR_HELLGATE,Hell Gate
2332,0,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0, SR_RAMPAGEBLASTER,Rampage Blaster
2332,0,6,4,-1,0x2,3,5,1,no,0,0x40000,0,weapon,0,0x0, SR_RAMPAGEBLASTER,Rampage Blaster
2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_CRESCENTELBOW,Crescent Elbow
2334,0,6,4,0,0x3,1:1:2:2:3,5,1,no,0,0,0,none,0,0x0, SR_CURSEDCIRCLE,Cursed Circle
2335,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_LIGHTNINGWALK,Lightning Walk
@ -1203,7 +1204,7 @@
2481,11,6,1,-1,0x2,1:2:3:4:5,5,1,yes,0,0,0,weapon,0,0x0, GN_SPORE_EXPLOSION,Spore Explosion //CHECK Data says its element is set to neutral. Need to confirm.
2482,11,6,2,0,0x8,0,5,1,yes,0,0,1,weapon,2,0x0, GN_WALLOFTHORN,Wall of Thorns
2483,11,6,2,0,0x3,4,10,1,yes,0,0x0,0,weapon,0,0x1, GN_CRAZYWEED,Crazy Weed
2484,0,6,2,2,0x2,2,10,1,no,0,0x0,0,weapon,0,0x1, GN_CRAZYWEED_ATK,Crazy Weed Attack
2484,0,6,2,2,0x2,2,10,1,no,0,0x40000,0,weapon,0,0x1, GN_CRAZYWEED_ATK,Crazy Weed Attack
2485,9,6,2,3,0,0,5,1,yes,0,0,0,magic,0,0x0, GN_DEMONIC_FIRE,Demonic Fire
2486,9,6,2,0,0,0,5,1,yes,0,0,0,none,0,0x0, GN_FIRE_EXPANSION,Fire Expansion
2487,9,6,2,0,0,0,1,1,no,0,0,0,none,0,0x0, GN_FIRE_EXPANSION_SMOKE_POWDER,Fire Expansion Smoke Powder
@ -1310,7 +1311,7 @@
5001,1,8,1,-1,0,0,5,3,no,0,0,0,weapon,0,0x0, GC_DARKCROW,Dark Claw
5002,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, RA_UNLIMIT,Unlimited
5003,7,6,1,-1,0x2,4:5:6:7:-1,5,1,no,0,0,0,weapon,0,0x0, GN_ILLUSIONDOPING,Illusion Doping
5004,9,6,2,1,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,weapon,0,0x0, RK_DRAGONBREATH_WATER,Dragon Breath - Water
5004,9,6,2,1,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0x40000,0,weapon,0,0x0, RK_DRAGONBREATH_WATER,Dragon Breath - Water
5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0,0x0, RK_LUXANIMA,Lux Anima
5006,1,6,2,3,0,0,5,1,no,0,0,3,misc,0,0x0, NC_MAGMA_ERUPTION,Magma Eruption
5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0,0x0, WM_FRIGG_SONG,Frigg's Song
@ -1374,18 +1375,18 @@
//****
// Mercenary Skill Place holders
8201,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0x0, MS_BASH,Bash
8202,0,6,4,3,0x2,2,10,1,no,0,0,0,weapon,2,0x0, MS_MAGNUM,Magnum_Break
8202,0,6,4,3,0x2,2,10,1,no,0,0x40000,0,weapon,2,0x0, MS_MAGNUM,Magnum_Break
8203,-2,6,1,-1,0x2,1,10,1,no,0,0,0,weapon,1,0x0, MS_BOWLINGBASH,Bowling_Bash
8204,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, MS_PARRYING,Parry
8205,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, MS_REFLECTSHIELD,Shield_Reflect
8206,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0, MS_BERSERK,Frenzy
8207,-9,8,1,-1,0,0,10,2,no,0,0,0,weapon,0,0x80, MA_DOUBLE,Double_Strafe
8208,-9,6,2,-1,0x2,2,10,1,no,0,0x0,0,weapon,2,0x81, MA_SHOWER,Arrow_Shower
8208,-9,6,2,-1,0x2,2,10,1,no,0,0x40000,0,weapon,2,0x81, MA_SHOWER,Arrow_Shower
8209,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,6:7:8:9:10,0x0, MA_SKIDTRAP,Skid_Trap
8210,3,6,2,2,0x40,0,5,1,no,0,0x80,0,misc,0,0x0, MA_LANDMINE,Land_Mine
8211,3,6,2,0,0x3,2,5,1,no,0,0x80,0,misc,0,0x0, MA_SANDMAN,Sandman
8212,3,6,2,1,0x42,1,5,1,no,0,0x80,0,weapon,0,0x0, MA_FREEZINGTRAP,Freezing_Trap
8213,2,6,32,0,0x1,0,1,1,no,0,0,0,misc,0,0x0, MA_REMOVETRAP,Remove_Trap
8213,2,6,32,0,0x1,0,1,1,no,0,0x40000,0,misc,0,0x0, MA_REMOVETRAP,Remove_Trap
8214,-9,6,1,-1,0x2,0,1,1,no,0,0x1,0,weapon,6,0x80, MA_CHARGEARROW,Arrow_Repel
8215,9,8,1,-1,0,2,5,1,yes,0,0,13,weapon,0,0x0, MA_SHARPSHOOTING,Focused_Arrow_Strike
8216,-2,8,1,-1,0,0,10,3,no,0,0,0,weapon,0,0x0, ML_PIERCE,Pierce

View File

@ -269,12 +269,12 @@
4168:4169,{ bonus bMaxHPrate,20; bonus bMaxSPrate,20; bonus bVariableCastrate,-10; }
4169:4488,{ if(getequiprefinerycnt(EQI_SHOES) >= 15) { bonus bMaxHPrate,15; bonus bMaxSPrate,15; } else { bonus bMaxHPrate,10; bonus bMaxSPrate,10; } }
4169:4488,{ if(getequiprefinerycnt(EQI_SHOES) >= 15) { bonus bMaxHPrate,15; bonus bMaxSPrate,15; } else { bonus bMaxHPrate,10; bonus bMaxSPrate,10; } }
4172:4210:4230:4257:4272,{ bonus bAgi,5; bonus bStr,5; bonus bAspdRate,5; bonus bSpeedRate,25; bonus bSPGainAttack,1; if(BaseClass==Job_Thief) bonus bNoGemStone,0; }
4178:4199:4234:4252:4297,{ bonus bAgi,5; bonus bDex,3; bonus bLongAtkRate,20; bonus bPerfectHitAddRate,20; if(BaseClass==Job_Archer) { bonus2 bExpAddRace,RC_Brute,5; bonus2 bWeaponComaRace,RC_Brute,100; } }
4172:4210:4230:4257:4272,{ bonus bAgi,5; bonus bStr,5; bonus bAspdRate,5; bonus bSpeedRate,25; bonus bSPDrainValue,1; if(BaseClass==Job_Thief) bonus bNoGemStone,0; }
4178:4199:4234:4252:4297,{ bonus bAgi,5; bonus bDex,3; bonus bLongAtkRate,20; bonus bPerfectHitAddRate,20; if(BaseClass==Job_Archer) { bonus2 bExpAddRace,RC_Brute,5; bonus2 bComaRace,RC_Brute,100; } }
4178:4234:4252:4297:4381,{ bonus bDex,5; bonus2 bSkillAtk,"CG_ARROWVULCAN",5; bonus2 bSkillAtk,"DC_THROWARROW",10; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10; if(BaseJob==Job_Bard||BaseJob==Job_Dancer) bonus3 bAutoSpellWhenHit,"CG_TAROTCARD",2,50; }
4185:4217:4280:4293:4312,{ bonus bVit,10; bonus bVariableCastrate,-10; bonus bUseSPRate,-10; if(BaseClass==Job_Acolyte) { bonus2 bExpAddRace,RC_Undead,5; bonus2 bExpAddRace,RC_Demon,5; bonus2 bSubRace,RC_Undead,30; bonus2 bSubRace,RC_Demon,30; } }
4185:4293:4312:4332,{ bonus bStr,3; bonus bMaxSP,80; bonus bBaseAtk,25; bonus3 bAutoSpell,"AL_CRUCIS",5,10; bonus2 bSkillAtk,"MO_EXTREMITYFIST",10; if(BaseJob==Job_Monk) { bonus bUseSPrate,-10; bonus bNoCastCancel,0; } }
4186:4206:4233:4281:4321,{ bonus bLuk,10; bonus bSPGainAttack,2; bonus2 bSkillAtk,42,20; if(BaseClass==Job_Merchant) { bonus2 bAddMonsterDropItem,617,5; bonus bMagicDamageReturn,20; } }
4186:4206:4233:4281:4321,{ bonus bLuk,10; bonus bSPDrainValue,2; bonus2 bSkillAtk,42,20; if(BaseClass==Job_Merchant) { bonus2 bAddMonsterDropItem,617,5; bonus bMagicDamageReturn,20; } }
4191:4208:4258:4309:4325:4327,{ bonus bMaxHP,500; bonus bDef,5; bonus bMdef,5; bonus2 bSkillAtk,14,10; bonus2 bSkillAtk,19,10; bonus2 bSkillAtk,20,10; if(BaseClass==Job_Mage) { bonus bMatkRate,3; bonus bVariableCastrate,-15; } }
4193:4294,{ bonus bMaxHP,300; bonus bMaxSP,60; }
4208:4258:4325:4327:4382,{ bonus bInt,3; bonus2 bSkillAtk,"WZ_HEAVENDRIVE",10; bonus2 bSkillAtk,"MG_THUNDERSTORM",10; if(BaseJob==Job_Sage) { bonus bMagicDamageReturn,20; bonus2 bAddMonsterDropItem,716,100; bonus2 bAddMonsterDropItem,715,100; bonus bVariableCastrate,-20; } }
@ -352,6 +352,7 @@
19021:2160,{ bonus2 bSubSize,Size_Large,5+(getequiprefinerycnt(EQI_HAND_L)*2); }
19021:1387,{ bonus2 bSkillAtk,"WS_CARTTERMINATION",15+(getequiprefinerycnt(EQI_HAND_R))*5; }
19021:1490,{ bonus2 bSkillAtk,"LK_SPIRALPIERCE",getequiprefinerycnt(EQI_HAND_R)*5; .@lv = getskilllv("LK_SPIRALPIERCE"); bonus4 bAutoSpellOnSkill,"LK_JOINTBEAT","LK_SPIRALPIERCE",(.@lv ? .@lv : 1),50+(getskilllv("LK_JOINTBEAT")*10); /* Confirm: Success rate */ }
19024:5170,{ .@r = getequiprefinerycnt(EQI_HEAD_TOP); if (.@r >= 7) bonus bAspdRate,5; if (.@r >= 9) bonus bMaxHPRate,5; }
19026:15138,{ bonus2 bSubRace,RC_Fish,(10+getequiprefinerycnt(EQI_ARMOR)); bonus bUnbreakableArmor,1; }
19026:20756,{ .@r = getequiprefinerycnt(EQI_GARMENT); bonus2 bSPGainRace,RC_Fish,10; bonus3 bAddMonsterDropItem,551,RC_Fish,(5+.@r); bonus2 bAddItemHealRate,551,5; bonus bHPrecovRate,(5+.@r); }
19026:20756:22059:15138,{ bonus bMaxHP,1000; bonus bMaxSP,100; bonus2 bExpAddRace,RC_Fish,20; bonus2 bMagicAddRace,RC_Fish,50; bonus2 bSubEle,Ele_Water,50; }
@ -397,8 +398,8 @@
24072:24075,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
24073:24076,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
24074:24077,{ bonus bMaxHPrate,1; bonus bMaxSPrate,1; }
24078:24079:24080,{ bonus2 bSPGainAttackRate,10,1+(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)/10); }
24081:24082:24083,{ bonus2 bHPGainAttackRate,40,2+(getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)/5); }
24078:24079:24080,{ bonus2 bSPDrainRate,10,1+(getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)/10); }
24081:24082:24083,{ bonus2 bHPDrainRate,40,2+(getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)/5); }
24084:24085:24086:24087:24088:24089,{ bonus bAllStats,1; .@r = getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_WEAPON)+getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_SHOES)+getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L); if (.@r >= 45) { bonus bNoGemStone,1; } bonus bUseSPrate,100-.@r; }
24090:24091:24092,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES) >= 20) bonus2 bResEff,Eff_Stone,100; }
24090:24093:24094,{ bonus bDef,5; if (getequiprefinerycnt(EQI_SHADOW_SHIELD)+getequiprefinerycnt(EQI_SHADOW_ARMOR)+getequiprefinerycnt(EQI_SHADOW_SHOES) >= 20) bonus2 bResEff,Eff_Sleep,100; }
@ -459,5 +460,7 @@
24234:24235,{ bonus bBaseAtk,5; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=15) { bonus2 bAddSize,Size_Large,2; bonus2 bMagicAddSize,Size_Large,2; } }
24236:24237,{ bonus bBaseAtk,5; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=15) { bonus2 bAddSize,Size_Medium,2; bonus2 bMagicAddSize,Size_Medium,2; } }
24238:24239,{ bonus bBaseAtk,5; if (getequiprefinerycnt(EQI_SHADOW_ACC_R)+getequiprefinerycnt(EQI_SHADOW_ACC_L)>=15) { bonus2 bAddSize,Size_Small,2; bonus2 bMagicAddSize,Size_Small,2; } }
28315:28317,{ bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; }
28316:28318,{ bonus2 bAddClass,Class_All,4; bonus bMatkRate,4; }
28326:28327,{ bonus bInt,8; bonus bStr,8; }
28602:2677,{ bonus2 bVariableCastrate,"PR_MAGNUS",-25; bonus bHealPower,10; bonus bAddItemHealRate,10; autobonus2 "{ bonus bIgnoreMDefRace,RC_All; }",getequiprefinerycnt(EQI_HAND_R)*20,2000,BF_SHORT|BF_NORMAL; /* Confirm: Success rate and duration */ }

View File

@ -165,11 +165,11 @@
668,Handsei,Red Envelope,2,0,,20,,,,,0xFFFFFFFF,63,2,,,,,,{ set Zeny,Zeny+rand(1000,10000); },{},{}
669,Rice_Cake_Soup,Tempting Rice-Cake Soup,0,500,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ percentheal -100,-100; },{},{}
670,Gold_Coin_Moneybag,Bag of Gold Coins,3,100000,,400,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
671,Gold_Coin,Gold Coin,3,10000,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ /*goldpoint++; (For Roulette game)*/ },{},{}
671,Gold_Coin,Gold Coin,2,10000,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ RouletteGold++; },{},{}
672,Copper_Coin_Moneybag,Bag of Bronze Coins,3,1000,,400,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
673,Copper_Coin,Bronze Coin,3,100,,40,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
673,Copper_Coin,Bronze Coin,2,100,,40,,,,,0xFFFFFFFF,63,2,,,,,,{ RouletteBronze++; },{},{}
674,Mithril_Coin,Mithril Coin,3,5000,,40,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
675,Silver_Coin,Silver Coin,3,5000,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ /*silverpoint++; (For Roulette game)*/ },{},{}
675,Silver_Coin,Silver Coin,2,5000,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ RouletteSilver++; },{},{}
676,Silver_Coin_Moneybag,Bag of Silver Coins,3,50000,,400,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
677,White_Gold_Coin,Platinum Coin,3,2000,,40,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
678,Poison_Bottle,Poison Bottle,2,5000,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ if(Class == Job_Assassin_Cross || Class == Job_Guillotine_Cross || Class == Job_Guillotine_Cross_T) { sc_start SC_DPOISON,60000,0; sc_start SC_ASPDPOTION3,60000,9; } else percentheal -100,-100; },{},{}
@ -483,7 +483,7 @@
1129,Flamberge,Flamberge,5,60000,,1500,150,,1,0,0x00004080,63,2,2,3,27,1,2,{},{},{}
1130,Nagan,Nagan,5,20,,500,120,,1,0,0x000654E2,63,2,2,4,40,1,2,{ skill "TF_DOUBLE",5; bonus bDoubleRate,25; bonus2 bAddRace,RC_DemiHuman,5; bonus2 bAddRace,RC_Player,5; },{},{}
1131,Ice_Falchon,Ice Falchion,5,20,,600,100,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Water; bonus2 bAddEff,Eff_Freeze,500; bonus2 bAddEff2,Eff_Freeze,10; skill "MG_COLDBOLT",3; bonus3 bAutoSpell,"MG_COLDBOLT",3,100; },{},{}
1132,Edge,Edge,5,20,,700,115,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus2 bAddEff,Eff_Curse,30; bonus2 bWeaponComaClass,Class_Normal,10; },{},{}
1132,Edge,Edge,5,20,,700,115,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus2 bAddEff,Eff_Curse,30; bonus2 bComaClass,Class_Normal,10; },{},{}
1133,Fire_Brand,Fireblend,5,20,,500,100,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus bAtkEle,Ele_Fire; skill "MG_FIREBOLT",3; bonus3 bAutoSpell,"MG_FIREBOLT",3,100; },{},{}
1134,Scissores_Sword,Caesar's Sword,5,20,,700,140,,1,0,0x000654E2,63,2,2,4,40,1,2,{ bonus2 bAddRace,RC_Plant,25; bonus bIgnoreDefRace,RC_Plant; },{},{}
1135,Cutlas,Cutlus,5,20,,900,150,,1,0,0x000654E2,63,2,2,4,40,1,2,{ skill "SM_BASH",5; bonus bStr,2; bonus bDef,1; },{},{}
@ -687,11 +687,11 @@
1362,Two_Handed_Axe__,Two-Handed Axe,5,55000,,2500,185,,1,0,0x000444A2,63,2,34,3,30,1,7,{},{},{}
1363,Brood_Axe,Bloody Axe,5,20,,4000,170,,1,0,0x000444A2,63,2,34,4,44,1,7,{ bonus bStr,10; bonus bSpeedRate,25; },{},{}
1364,Great_Axe,Great Axe,5,20,,1800,187,,1,0,0x000444A2,63,2,34,4,44,1,7,{ bonus2 bAddSkillBlow,"MC_MAMMONITE",5; bonus2 bAddEff,Eff_Stun,1500; },{},{}
1365,Sabbath,Sabbath,5,20,,2300,120,,1,0,0x000444A2,63,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Dark; bonus2 bWeaponComaRace,RC_Demon,50; bonus2 bCriticalAddRace,RC_Undead,50; },{},{}
1365,Sabbath,Sabbath,5,20,,2300,120,,1,0,0x000444A2,63,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Dark; bonus2 bComaRace,RC_Demon,50; bonus2 bCriticalAddRace,RC_Undead,50; },{},{}
1366,Right_Epsilon,Light Epsilon,5,20,,2300,180,,1,0,0x000444A2,63,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Holy; skill "AL_HEAL",3; bonus2 bAddRace,RC_Demon,3; },{},{}
1367,Slaughter,Slaughter,5,20,,2500,120,,1,0,0x000444A2,63,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Earth; bonus bIgnoreDefRace,RC_Brute; bonus2 bWeaponComaRace,RC_Brute,40; },{},{}
1367,Slaughter,Slaughter,5,20,,2500,120,,1,0,0x000444A2,63,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Earth; bonus bIgnoreDefRace,RC_Brute; bonus2 bComaRace,RC_Brute,40; },{},{}
1368,Tomahawk,Tomahawk,5,20,,2500,165,,1,0,0x000444A2,63,2,34,4,44,1,7,{ bonus bAtkEle,Ele_Wind; skill "ITM_TOMAHAWK",1; },{},{}
1369,Guillotine,Guillotine,5,20,,3000,215,,1,0,0x000444A2,63,2,34,4,44,1,7,{ bonus2 bWeaponComaRace,RC_DemiHuman,30; bonus2 bWeaponComaRace,RC_Player,30; bonus2 bSPGainRaceAttack,RC_DemiHuman,2; bonus2 bSPGainRaceAttack,RC_Player,2; bonus2 bSPGainRace,RC_DemiHuman,20; bonus2 bSPGainRace,RC_Player,20; },{},{}
1369,Guillotine,Guillotine,5,20,,3000,215,,1,0,0x000444A2,63,2,34,4,44,1,7,{ bonus2 bComaRace,RC_DemiHuman,30; bonus2 bComaRace,RC_Player,30; bonus2 bSPDrainValueRace,RC_DemiHuman,2; bonus2 bSPDrainValueRace,RC_Player,2; bonus2 bSPGainRace,RC_DemiHuman,20; bonus2 bSPGainRace,RC_Player,20; },{},{}
1370,Doom_Slayer,Doom Slayer,5,20,,6000,10,,1,0,0x000444A2,63,2,34,4,80,1,7,{ bonus bAspdRate,-40; bonus bUseSPrate,100; if(readparam(bStr)>=95){ bonus bBaseAtk,340; bonus2 bAddEff,Eff_Stun,3000; bonus bBreakArmorRate,500; } },{},{}
1371,Doom_Slayer_,Doom Slayer,5,20,,6000,10,,1,1,0x000444A2,63,2,34,4,80,1,7,{ bonus bAspdRate,-40; bonus bUseSPrate,100; if(readparam(bStr)>=95){ bonus bBaseAtk,340; bonus2 bAddEff,Eff_Stun,3000; bonus bBreakArmorRate,500; } },{},{}
1372,Right_Epsilon_C,Light Epsilon,5,1,,0,229,,1,0,0x000444A2,63,2,34,4,1,0,7,{ bonus bAtkEle,Ele_Holy; skill "AL_HEAL",3; bonus2 bAddRace,RC_Demon,3; bonus bStr,10; bonus bSpeedRate,25; /*Gold PC Room: bonus bBaseAtk,10; bonus bMatk,10; */},{},{}
@ -836,7 +836,7 @@
1523,Spike,Spike,5,20,,700,85,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus bCritical,40; bonus bDefRate,-67; bonus bDef2Rate,-67; },{},{}
1524,Golden_Mace,Golden Mace,5,20,,800,110,,1,1,0x00008110,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus bUnbreakableWeapon,0; },{},{}
1525,Long_Mace,Long Mace,5,20,,800,135,,3,0,0x00008110,63,2,2,4,40,1,8,{ bonus bLongAtkDef,10; },{},{}
1526,Slash,Slash,5,20,,1000,145,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,15; bonus2 bWeaponComaRace,RC_Undead,10; bonus2 bExpAddRace,RC_Undead,5; },{},{}
1526,Slash,Slash,5,20,,1000,145,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,15; bonus2 bComaRace,RC_Undead,10; bonus2 bExpAddRace,RC_Undead,5; },{},{}
1527,Quadrille,Quadrille,5,20,,900,165,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; bonus2 bAddEle,Ele_Earth,10; },{},{}
1528,Grand_Cross,Grand Cross,5,20,,1500,140,,1,0,0x00008110,63,2,2,4,40,1,8,{ bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3; },{},{}
1529,Iron_Driver,Iron Driver,5,20,,3000,155,,2,0,0x00008100,63,2,2,3,78,1,8,{},{},{}
@ -876,7 +876,7 @@
1562,Bible_Of_Battlefield,Battlefield Textbook,5,20,,700,110,,1,1,0x00410100,63,2,2,4,80,0,15,{ bonus bInt,3; bonus3 bAutoSpell,"AL_BLESSING",3+(getskilllv("AL_BLESSING")>3)*(getskilllv("AL_BLESSING")-3),20; },{},{}
1563,Diary_Of_Great_Sage_C,Sage's Diary,5,1,,0,135,,1,0,0x00410100,63,2,2,3,1,0,15,{ bonus bMatk,140; bonus bAspdRate,5; /*Gold PC Room: bonus bBaseAtk,10; bonus bMatk,10;*/ },{},{}
1564,Encyclopedia,Encyclopedia,5,20,,2000,110:100,,1,2,0x00410100,63,2,2,3,70,1,15,{ bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); },{},{}
1565,Death_Note,Ledger of Death,5,20,,1000,137:100,,1,2,0x00410100,63,2,2,4,85,1,15,{ bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus2 bWeaponComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
1565,Death_Note,Ledger of Death,5,20,,1000,137:100,,1,2,0x00410100,63,2,2,4,85,1,15,{ bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bComaRace,RC_DemiHuman,10; bonus2 bComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
1566,Diary_Of_Great_Basil,Diary Of Great Basil,5,20,,0,120:125,,1,0,0x00410100,63,2,2,1,0,0,15,{ bonus2 bAddClass,Class_All,50; },{},{}
1567,Hardback_C,Refined Hardcover Book,5,1,,0,168:100,,1,0,0x00410100,63,2,2,4,0,0,15,{ bonus bStr,5; bonus bDex,2; bonus bMatkRate,20; },{},{}
1568,Book_Of_Billows_,Book of Billows,5,35000,,750,90,,1,3,0x00410100,63,2,2,3,27,1,15,{ bonus bAtkEle,Ele_Water; },{},{}
@ -890,7 +890,7 @@
1576,Krieger_Book1,Glorious Tablet,5,20,,0,90:115,,1,0,0x00410100,63,2,2,4,80,1,15,{ bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; .@r = getrefine(); if(.@r>5) { bonus2 bAddRace,RC_DemiHuman,pow(((.@r>14)?14:.@r)-4,2); bonus2 bAddRace,RC_Player,pow(((.@r>14)?14:.@r)-4,2); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(.@r>8) autobonus "{ bonus bBaseAtk,200; }",30,3000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; },{},{}
1577,Krieger_Book2,Glorious Apocalypse,5,20,,0,90:115,,1,0,0x00410100,63,2,2,4,80,1,15,{ bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; .@r = getrefine(); if(.@r>5) bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; if(.@r>8) { bonus bMatkRate,5; bonus bVariableCastrate,-5; bonus bDelayRate,-5; } },{},{}
1578,Book_Of_Prayer,Book Of Prayer,5,20,,0,140,,1,0,0x00410100,63,2,2,3,0,0,15,{ bonus bVit,2; bonus bMdef,2; bonus bMaxSPrate,10; },{},{}
1579,Death_Note_M,Book of the Dead,5,20,,1000,137,,1,2,0x00410100,63,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus2 bWeaponComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
1579,Death_Note_M,Book of the Dead,5,20,,1000,137,,1,2,0x00410100,63,2,2,4,85,1,15,{ bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bComaRace,RC_DemiHuman,10; bonus2 bComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20; },{},{}
1580,Encyclopedia_C,Giant Encyclopedia,5,0,,0,145:100,,1,0,0x00410100,63,2,2,3,0,0,15,{ bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); bonus2 bAddSize,Size_All,40; },{},{}
1581,F_Diary_Of_Great_Sage_C,Diary Of Great Sage,5,1,,0,135,,1,2,0x00410100,63,2,2,3,1,0,15,{},{},{}
1582,E_Diary_Of_Great_Sage_C,Diary Of Great Sage,5,1,,0,135,,1,2,0x00410100,63,2,2,3,1,0,15,{},{},{}
@ -1640,7 +1640,7 @@
2551,Rider_Insignia_M,Crest of the Rider,4,20,,500,,4,,1,0xFFFFFFFE,18,2,4,,55,1,0,{ bonus bAgi,2; },{},{}
2552,Mithril_Magic_Cape_M,Mithril Magic Manteau,4,20,,400,,3,,1,0x00098B1C,18,2,4,,70,1,0,{ bonus bMdef,3; bonus5 bAutoSpellWhenHit,"NPC_ANTIMAGIC",6,200,BF_MAGIC,0; },{},{}
2553,Dragon_Manteau,Dragon Manteau,4,20,,1000,,14,,1,0xFFFFFFFE,18,2,4,,0,1,0,{ bonus bAgi,1; bonus bMdef,5; },{},{}
2554,Piece_Of_Angent_Skin,Nydhorgg's Shadow Garb,4,20,,400,,25,,1,0xFFFFFFFE,18,2,4,,90,1,0,{ bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus2 bSPGainAttackRate,100,1; bonus bMdef,3; },{},{}
2554,Piece_Of_Angent_Skin,Nydhorgg's Shadow Garb,4,20,,400,,25,,1,0xFFFFFFFE,18,2,4,,90,1,0,{ bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus2 bSPDrainRate,10,1; bonus bMdef,3; },{},{}
2555,Freyja_SScarf7,Freyja Soul Scarf,4,20,,400,,4,,0,0xFFFFFFFF,63,2,4,,20,0,0,{ bonus bFlee,15; bonus2 bSubEle,Ele_Neutral,15; },{},{}
2556,Freyja_SScarf30,Freyja Soul Scarf,4,20,,400,,4,,0,0xFFFFFFFF,63,2,4,,20,0,0,{ bonus bFlee,15; bonus2 bSubEle,Ele_Neutral,15; },{},{}
2557,Freyja_SScarf60,Freyja Soul Scarf,4,20,,400,,4,,0,0xFFFFFFFF,63,2,4,,20,0,0,{ bonus bFlee,15; bonus2 bSubEle,Ele_Neutral,15; },{},{}
@ -2225,7 +2225,7 @@
4169,Dark_Illusion_Card,Dark Illusion Card,6,20,,10,,,,,,,,769,,,,,{ bonus bMaxHPrate,-10; bonus bMaxSPrate,-10; bonus bVariableCastrate,-10; },{},{}
4170,Dark_Frame_Card,Dark Frame Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Stone,600; },{},{}
4171,Dark_Priest_Card,Dark Priest Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPVanishRate,50,10; if(BaseJob==Job_Sage) bonus bSPDrainValue,1; },{},{}
4172,The_Paper_Card,The Paper Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,20; bonus bSPGainAttack,-1; },{},{}
4172,The_Paper_Card,The Paper Card,6,20,,10,,,,,,,,2,,,,,{ bonus bCritAtkRate,20; bonus bSPDrainValue,-1; },{},{}
4173,Demon_Pungus_Card,Demon Pungus Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Sleep,600; },{},{}
4174,Deviling_Card,Deviling Card,6,20,,10,,,,,,,,4,,,,,{ bonus2 bSubEle,Ele_Neutral,50; bonus2 bSubEle,Ele_Water,-50; bonus2 bSubEle,Ele_Earth,-50; bonus2 bSubEle,Ele_Fire,-50; bonus2 bSubEle,Ele_Wind,-50; bonus2 bSubEle,Ele_Poison,-50; bonus2 bSubEle,Ele_Holy,-50; bonus2 bSubEle,Ele_Dark,-50; bonus2 bSubEle,Ele_Ghost,-50; bonus2 bSubEle,Ele_Undead,-50; },{},{}
4175,Poison_Toad_Card,Poisonous Toad Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAutoSpell,"TF_POISON",1,20; bonus2 bAddSkillBlow,52,5; },{},{}
@ -2329,12 +2329,12 @@
4273,Shellfish_Card,Shell Fish Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,5; bonus2 bAddDamageClass,1073,30; },{},{}
4274,Zombie_Master_Card,Zombie Master Card,6,20,,10,,,,,,,,2,,,,,{ bonus2 bSPGainRace,RC_Undead,5; },{},{ heal 0,-5; }
4275,Zombie_Prisoner_Card,Zombie Prisoner Card,6,20,,10,,,,,,,,64,,,,,{ bonus2 bSubRace,RC_Undead,-20; bonus2 bExpAddRace,RC_Undead,10; },{},{}
4276,Lord_Of_Death_Card,Lord of The Dead Card,6,20,,10,,,,,,,,2,,,,,{ bonus3 bAddEff,Eff_Stun,500,ATF_SHORT; bonus3 bAddEff,Eff_Curse,500,ATF_SHORT; bonus3 bAddEff,Eff_Silence,500,ATF_SHORT; bonus3 bAddEff,Eff_Poison,500,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,500,ATF_SHORT; bonus2 bWeaponComaClass,Class_Normal,1; },{},{}
4276,Lord_Of_Death_Card,Lord of The Dead Card,6,20,,10,,,,,,,,2,,,,,{ bonus3 bAddEff,Eff_Stun,500,ATF_SHORT; bonus3 bAddEff,Eff_Curse,500,ATF_SHORT; bonus3 bAddEff,Eff_Silence,500,ATF_SHORT; bonus3 bAddEff,Eff_Poison,500,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,500,ATF_SHORT; bonus2 bComaClass,Class_Normal,1; },{},{}
4277,Zherlthsh_Card,Zealotus Card,6,20,,10,,,,,,,,32,,,,,{ bonus bLuk,2; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10; bonus2 bSkillAtk,"DC_THROWARROW",10; },{},{}
4278,Gibbet_Card,Gibbet Card,6,20,,10,,,,,,,,769,,,,,{ if(getrefine()<6) bonus bMdef,5; },{},{}
4279,Deleter_Card,Earth Deleter Card,6,20,,10,,,,,,,,16,,,,,{ bonus bSPrecovRate,-100; bonus bSPGainValue,10; },{},{ heal 0,-100; }
4280,Geographer_Card,Geographer Card,6,20,,10,,,,,,,,16,,,,,{ bonus3 bAutoSpellWhenHit,"AL_BLESSING",2+8*(getskilllv("AL_BLESSING")==10),30; },{},{}
4281,Zipper_Bear_Card,Zipper Bear Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,30; bonus bSPGainAttack,-1; if(BaseClass==Job_Merchant) bonus bUnbreakableWeapon,0; },{},{}
4281,Zipper_Bear_Card,Zipper Bear Card,6,20,,10,,,,,,,,2,,,,,{ bonus bBaseAtk,30; bonus bSPDrainValue,-1; if(BaseClass==Job_Merchant) bonus bUnbreakableWeapon,0; },{},{}
4282,Tengu_Card,Tengu Card,6,20,,10,,,,,,,,136,,,,,{ bonus2 bAddMonsterDropItemGroup,IG_Recovery,600; },{},{}
4283,Greatest_General_Card,Greatest General Card,6,20,,10,,,,,,,,136,,,,,{ bonus3 bAutoSpell,"MO_CALLSPIRITS",5,2+18*(BaseClass==Job_Acolyte); },{},{}
4284,Chepet_Card,Chepet Card,6,20,,10,,,,,,,,2,,,,,{ bonus4 bAutoSpell,"AL_HEAL",5,50,1; },{},{}
@ -2592,7 +2592,7 @@
4537,Sealed_Phreeoni_Card,Sealed Phreeoni Card,6,20,,10,,,,,,,,2,,,,,{ bonus bHit,((getrefine()>14)?75:50); },{},{}
4538,Sealed_Bacsojin_Card,Sealed White Lady Card,6,20,,10,,,,,,,,769,,,,,{ if (getrefine()>14) { bonus bHealPower,25; bonus bUseSPrate,20; } else { bonus bHealPower,15; bonus bUseSPrate,30; } },{},{}
4539,Sealed_F_Bishop_Card,Sealed Fallen Bishop Hibram Card,6,20,,10,,,,,,,,64,,,,,{ .@r = getrefine(); bonus bMatkRate,((.@r>14)?8:5); bonus bMaxSPrate,-50; set .@rate,((.@r>14)?33:25); bonus2 bMagicAddRace,RC_Angel,.@rate; bonus2 bMagicAddRace,RC_DemiHuman,.@rate; bonus2 bMagicAddRace,RC_Player,.@rate; },{},{}
4540,SLD_Lord_Of_Death_Card,Sealed Lord of The Dead Card,6,20,,10,,,,,,,,2,,,,,{ set .@rate, ((getrefine()>14)?350:250); bonus3 bAddEff,Eff_Stun,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Curse,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Silence,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Poison,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,.@rate,ATF_SHORT; bonus2 bWeaponComaClass,Class_Normal,1; },{},{}
4540,SLD_Lord_Of_Death_Card,Sealed Lord of The Dead Card,6,20,,10,,,,,,,,2,,,,,{ set .@rate, ((getrefine()>14)?350:250); bonus3 bAddEff,Eff_Stun,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Curse,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Silence,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Poison,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,.@rate,ATF_SHORT; bonus2 bComaClass,Class_Normal,1; },{},{}
4541,SLD_B_Katrinn_Card,Sealed High Wizard Card,6,20,,10,,,,,,,,769,,,,,{ bonus2 bIgnoreMdefClassRate,Class_Normal,100; .@r = getrefine(); if (.@r>14) { bonus bVariableCastrate,120; bonus bSPrecovRate,-120; } else { bonus bVariableCastrate,150; bonus bSPrecovRate,-150; } },{},{ heal 0,((.@r>14)?-2000:-3000); }
4542,SLD_Detale_Card,Sealed Detale Card,6,20,,10,,,,,,,,16,,,,,{},{},{}
4543,SLD_Garm_Card,Sealed Hatii Card,6,20,,10,,,,,,,,16,,,,,{ bonus2 bAddEffWhenHit,Eff_Freeze,((getrefine()>14)?4000:2500); },{},{}
@ -3411,7 +3411,7 @@
5494,Spinx_Helm_I,Sphinx Hat,4,0,,0,,5,,0,0x00004082,63,2,257,,0,0,137,{ bonus bStr,5; },{},{}
5495,Power_Of_Thor,Power Of Thor,4,20,,100,,6,,1,0xFFFFFFFF,63,2,256,,0,1,493,{ bonus bInt,1; bonus bDex,1; bonus bMdef,3; bonus bFlee,5; },{},{}
5496,Dice_Hat,Dice Hat,4,20,,300,,3,,0,0xFFFFFFFF,63,2,256,,50,0,494,{ bonus bLuk,4; },{},{}
5497,King_Tiger_Doll_Hat,King Tiger Doll Hat,4,20,,400,,6,,1,0xFFFFFFFE,63,2,256,,1,1,495,{ bonus bStr,2; bonus bDex,2; bonus2 bAddRace,RC_Brute,10; bonus2 bMagicAddRace,RC_Brute,10; .@r = getrefine(); autobonus "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",3*.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; }"; autobonus2 "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; }"; },{},{}
5497,King_Tiger_Doll_Hat,King Tiger Doll Hat,4,20,,400,,6,,1,0xFFFFFFFE,63,2,256,,1,1,495,{ bonus bStr,2; bonus bDex,2; bonus2 bAddRace,RC_Brute,10; bonus2 bMagicAddRace,RC_Brute,10; .@r = getrefine(); autobonus "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",3*.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; showscript \"Eddga Power !\"; }"; autobonus2 "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; showscript \"Eddga Power !\"; }"; },{},{}
5498,Wondering_Wolf_Helm,Wandering Wolf Helm,4,20,,600,,5,,1,0xFFFFFFFE,63,2,768,,1,0,490,{ bonus bAgi,5; bonus bFlee,10; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Brute,10; if(getrefine()>=7){ bonus2 bAddEff,Eff_Bleeding,10; } if(getrefine()>=9){ bonus3 bAutoSpellWhenHit,"MC_LOUD",1,1; } },{},{}
5499,Pizza_Hat,Pizza Hat,4,20,,600,,0,,0,0xFFFFFFFF,63,2,256,,0,0,487,{ skill "SM_PROVOKE",1; },{},{}
5500,Icecream_Hat,Icecream Hat,4,0,,300,,6,,0,0xFFFFFFFF,63,2,256,,30,1,488,{ bonus bMdef,3; skill "MG_FROSTDIVER",3; },{},{}
@ -5276,6 +5276,7 @@
//
7674,Mysterious_Ingredient,Mysterious Ingredient,3,20,,0,,,,,,,,,,,,,{},{},{}
7675,Mysterious_Doll,Mysterious Doll,3,0,,0,,,,,,,,,,,,,{},{},{}
7676,Transmission_Coupon,Transmission Coupon,3,0,,0,,,,,,,,,,,,,{},{},{}
7679,Oneclick_Weapon_7UP,One Click Weapon 7UP,3,0,,0,,,,,,,,,,,,,{},{},{}
7680,Oneclick_Weapon_9UP,One Click Weapon 9UP,3,0,,0,,,,,,,,,,,,,{},{},{}
7681,Oneclick_Armor_7UP,One Click Armor 7UP,3,0,,0,,,,,,,,,,,,,{},{},{}
@ -6397,7 +6398,7 @@
12536,NY_Rice_Cake_Soup,NY Rice Cake Soup,2,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12537,Solo_Gift_Basket,Solo Gift Basket,2,1000,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ /*getgroupitem(IG_Solo_Gift_Basket);*/ getitem 597,5; getitem 596,3; getitem 561,3; getitem 573,4; getitem 559,10; getitem 560,10; },{},{}
12538,Couple_Event_Basket,Couple Event Basket,2,2000,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ /*getgroupitem(IG_Couple_Event_Basket);*/ getitem 14546,10; getitem 14547,10; getitem 14548,10; getitem 14549,10; getitem 14550,10; },{},{}
12539,Splendid_Box,Splendid Box,2,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12539,Splendid_Box,Splendid Box,2,20,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Splendid_Box); },{},{}
12540,GM_Warp_Box,GM Warp Box,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_GM_Warp_Box); },{},{}
12541,Fortune_Cookie1,Fortune Cookie1,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getrandgroupitem(IG_Fortune_Cookie1,1); },{},{}
12542,Fortune_Cookie2,Fortune Cookie2,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getgroupitem(IG_Fortune_Cookie2); },{},{}
@ -6514,13 +6515,13 @@
12655,Brain_Powder,Brain Powder,2,2000,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12656,Magical_Powder,Magical Powder,2,3000,,200,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12657,Madness_Powder,Madness Powder,2,4000,,300,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12658,Trans_Scroll_Devi,Transformation Scroll(Deviruchi),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1109,1200000,SC_MTF_ASPD,10,5; },{},{}
12659,Trans_Scroll_Ray_Arch,Transformation Scroll(Raydric),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1276,1200000,SC_MTF_RANGEATK,25; },{},{}
12660,Trans_Scroll_Mavka,Transformation Scroll(Mavka),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1884,1200000,SC_MTF_RANGEATK,25; },{},{}
12661,Trans_Scroll_Marduk,Transformation Scroll(Marduk),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1140,1200000,SC_MTF_MATK,25; },{},{}
12662,Trans_Scroll_Banshee,Transformation Scroll(Banshee),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1867,1200000,SC_MTF_MATK,25; },{},{}
12663,Trans_Scroll_Poring,Transformation Scroll(Poring),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1002,1200000,SC_MTF_CRIDAMAGE,25; },{},{}
12664,Trans_Scroll_Golem,Transformation Scroll(Golem),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1040,1200000,SC_MTF_MLEATKED,5,20,2; },{},{}
12658,Trans_Scroll_Devi,Transformation Scroll(Deviruchi),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1109,1200000,SC_MTF_ASPD,10,5; showscript "Traaaansformation-!! Deviruchi form!!"; },{},{}
12659,Trans_Scroll_Ray_Arch,Transformation Scroll(Raydric),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1276,1200000,SC_MTF_RANGEATK,25; showscript "Traaaansformation-!! Raydric form!!"; },{},{}
12660,Trans_Scroll_Mavka,Transformation Scroll(Mavka),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1884,1200000,SC_MTF_RANGEATK,25; showscript "Traaaansformation-!! Mavka form!!"; },{},{}
12661,Trans_Scroll_Marduk,Transformation Scroll(Marduk),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1140,1200000,SC_MTF_MATK,25; showscript "Traaaansformation-!! Marduk form!!"; },{},{}
12662,Trans_Scroll_Banshee,Transformation Scroll(Banshee),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1867,1200000,SC_MTF_MATK,25; showscript "Traaaansformation-!! Banshee form!!"; },{},{}
12663,Trans_Scroll_Poring,Transformation Scroll(Poring),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1002,1200000,SC_MTF_CRIDAMAGE,25; showscript "Traaaansformation-!! Poring form!!"; },{},{}
12664,Trans_Scroll_Golem,Transformation Scroll(Golem),2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ transform 1040,1200000,SC_MTF_MLEATKED,5,20,2; showscript "Traaaansformation-!! Golem form!!"; },{},{}
12665,Grovel_Buff,Grovel Buff,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12666,Thai_Perfume_MATK,Thai Perfume MATK,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus bMatk,24; }",600,0,0,SI_SKF_MATK; },{},{}
12667,Thai_Perfume_ATK,Thai Perfume ATK,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus bBaseAtk,24; }",600,0,0,SI_SKF_ATK; },{},{}
@ -6653,12 +6654,12 @@
12788,No100_Firecracker,No100 Firecracker,2,2,,20,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12789,Juicy_Fruit,Juicy Fruit,2,2,,100,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12790,Change_Name_Card,Character Name Change Coupon,2,0,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ set CharRename, CharRename + 1; },{},{}
12791,Combat_Pill,Combat Pill,2,20,,150,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_POTION_BERSERK; bonus_script "{ bonus2 bAddDamageClass,Class_All,5; bonus bMatkRate,5; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }",60,0,0,SI_GM_BATTLE; },{},{}
12791,Combat_Pill,Combat Pill,2,20,,150,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_POTION_BERSERK; bonus_script "{ bonus2 bAddDamageClass,Class_All,5; bonus bMatkRate,5; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }",60,0,0,SI_GM_BATTLE; /* showscript */ },{},{}
12792,P_Combat_Pill,P Combat Pill,2,20,,150,,,,,0xFFFFFFFF,63,2,,,,,,{ specialeffect2 EF_POTION_BERSERK; bonus_script "{ bonus2 bAddDamageClass,Class_All,10; bonus bMatkRate,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; }",60,0,0,SI_GM_BATTLE2; },{},{}
12793,Combat_Pill_Box10,Combat Pill Box10,2,20,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12791,10; },{},{}
12794,P_Combat_Pill_Box10,P Combat Pill Box10,2,20,,0,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12792,10; },{},{}
12795,2011_RWC_Scroll_Kr,2011 RWC Scroll Kr,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
12796,Red_Booster,Red Booster,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "AC_CONCENTRATION",(getskilllv(45)<3?3:getskilllv(45)); },{},{}
12796,Red_Booster,Red Booster,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ itemskill "AC_CONCENTRATION",(getskilllv(45)<3?3:getskilllv(45)); specialeffect2 EF_POTION_BERSERK; showscript "Oh My GOODNESS!!! I FEEL AWESOMELY STRONG!!! WOWOW"; },{},{}
12797,Wish_Maiden_Scroll,Wish Maiden Scroll,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ mercenary_create 2344,1800000; },{},{}
12798,Zealotus_Scroll,Zealotus Scroll,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ mercenary_create 2345,1800000; },{},{}
12799,PCBang_Coupon_Box5,PCBang Coupon Box5,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
@ -7098,7 +7099,7 @@
13400,Cutlas_,Cutlus,5,20,,900,150,,1,1,0x000654E2,63,2,2,4,40,1,2,{ skill "SM_BASH",5; bonus bStr,2; bonus bDef,1; },{},{}
13401,Excalibur_C,Excalibur,5,1,,0,199,,1,0,0x000654E2,63,2,2,4,1,0,2,{ bonus bInt,10; bonus bLuk,10; bonus bAtkEle,Ele_Holy; },{},{}
13402,Cutlas_C,Cutlus,5,2,,0,185,,1,0,0x000654E2,63,2,2,4,0,0,2,{ skill "SM_BASH",5; bonus bStr,2; bonus bDef,1; },{},{}
13403,Solar_Sword_C,Solar Sword,5,2,,0,120,,1,0,0x000654E2,63,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Fire; bonus2 bSPLossRate,15,10; bonus bHPGainAttackRate,1; },{},{}
13403,Solar_Sword_C,Solar Sword,5,2,,0,120,,1,0,0x000654E2,63,2,2,4,0,0,2,{ bonus bAtkEle,Ele_Fire; bonus2 bSPLossRate,15,10; bonus2 bHPDrainRate,1000,1; },{},{}
13404,Platinum_Shotel,Platinum Shotel,5,20,,1500,130,,1,1,0x000654E2,63,2,2,4,55,1,2,{ bonus bCritical,50; },{},{}
13405,Curved_Sword,Curved Sword,5,20,,800,125,,1,2,0x000654E2,63,2,2,4,55,1,2,{ bonus bAspdRate,10; bonus2 bAddEff,Eff_Curse,300; },{},{}
13406,Edger,Edger,5,20,,0,120,,1,0,0x000654E2,63,2,2,1,0,0,2,{ bonus2 bAddClass,Class_All,50; },{},{}
@ -8302,7 +8303,7 @@
15123,Whikebain_Suit,Whikebain Suit,4,0,,900,,56,,1,0x00001000,56,2,16,,105,1,,{ .@r = getrefine(); if (.@r > 7) { bonus bCritAtkRate,6; } else if (.@r > 5) { bonus bCritAtkRate,4; } bonus3 bAutoSpell,"DC_WINKCHARM",1,10; /* Confirm: Success rate */ },{},{}
15138,Aegir_Armor,Aegir Armor,4,10,,1600,,25,,0,0xFFFFFFFF,63,2,16,,40,1,,{ bonus bMaxHP,500; bonus bMaxSP,50; },{},{}
15141,Ancient_Armor_Of_The_Goddess,Ancient Armor Of The Goddess,4,10,,2000,,55,,0,0xFFFFFFFF,63,2,16,,100,1,,{},{},{}
15145,Evil_Dragon_Armor,Evil Dragon Armor,4,0,,4000,,60,,1,0xFFFFFFFF,63,2,16,,,1,,{ .@r = getrefine(); if (.@r >= 10 ) { bonus2 bHPGainAttackRate,100,3; bonus2 bSPGainAttackRate,100,5; } else if (.@r >= 9 ) { bonus2 bHPGainAttackRate,100,4; bonus2 bSPGainAttackRate,100,3; } else if (.@r >= 8 ) { bonus2 bHPGainAttackRate,100,6; bonus2 bSPGainAttackRate,100,2; } /* Confirm: Success rate and it says no effect if with Rideword, Vanargandr Helm, or Piece Of Angent Skin */ },{},{}
15145,Evil_Dragon_Armor,Evil Dragon Armor,4,0,,4000,,60,,1,0xFFFFFFFF,63,2,16,,,1,,{ .@r = getrefine(); if (.@r >= 10 ) { bonus2 bHPDrainRate,100,3; bonus2 bSPDrainRate,100,5; } else if (.@r >= 9 ) { bonus2 bHPDrainRate,100,4; bonus2 bSPDrainRate,100,3; } else if (.@r >= 8 ) { bonus2 bHPDrainRate,100,6; bonus2 bSPDrainRate,100,2; } /* Confirm: Success rate and it says no effect if with Rideword, Vanargandr Helm, or Piece Of Angent Skin */ },{},{}
// More Maces
16000,Erde,Erde,5,20,,500,130,,1,2,0x0004C5B2,18,2,2,3,50,1,8,{ bonus2 bSkillAtk,"AM_ACIDTERROR",20; bonus2 bSkillAtk,"AM_DEMONSTRATION",20; bonus bMaxSP,50; bonus bHealPower,10; },{},{}
16001,Red_Square_Bag,Red Square Bag,5,20,,500,130,,1,2,0x0004C5B2,18,2,2,3,50,1,8,{ bonus bMaxHP,200; bonus2 bSkillAtk,"AM_ACIDTERROR",20; bonus2 bSkillAtk,"AM_DEMONSTRATION",20; bonus2 bAddMonsterDropItem,501,50; bonus2 bAddMonsterDropItem,502,20; bonus2 bAddMonsterDropItem,503,20; bonus2 bAddMonsterDropItem,504,20; bonus2 bAddMonsterDropItem,505,10; if(readparam(bStr)>=95) bonus2 bAddEff,Eff_Stun,500; },{},{}
@ -8998,6 +8999,7 @@
17572,Erzulie_Lucky_Egg,Erzulie Lucky Egg,18,0,,10,,,,0,,,,,,,,,{/*TODO*/},{},{}
17584,Venus_Lucky_Egg,Venus Lucky Egg,18,0,,10,,,,0,,,,,,,,,{/*TODO*/},{},{}
17588,Amora_Lucky_Egg,Amora Lucky Egg,18,0,,10,,,,0,,,,,,,,,{/*TODO*/},{},{}
17598,Sograt_Lucky_Scroll,Sograt Lucky Scroll,18,0,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem callfunc("F_Rand",20099,19024,2899,19910),1; /* and others. */ },{},{}
// Mechanic/Genetic Cannonballs
18000,Cannon_Ball,Cannon Ball,10,100,,10,100,,,,0x00040400,56,2,32768,,99,,8,{},{},{}
18001,Holy_Cannon_Ball,Holy Cannon Ball,10,200,,10,120,,,,0x00040400,56,2,32768,,99,,8,{ bonus bAtkEle,Ele_Holy; },{},{}
@ -9126,15 +9128,15 @@
18590,Gemma_Hairband,Gemma Hairband,4,20,,200,,3,,1,0xFFFFFFFF,63,2,256,,10,1,564,{ bonus bMdef,3; },{},{}
18591,Mini_Glasses_,Mini Glasses,4,20,,100,,2,,1,0xFFFFFFFE,63,2,512,,0,0,47,{},{},{}
18592,Nestea_Hat,Nestea Hat,4,20,,200,,5,,1,0xFFFFFFFF,63,2,256,,0,1,756,{ bonus bMdef,5; },{},{}
18593,Fancy_Mini_Crown,Fancy Mini Crown,4,20,,100,,2,,1,0xFFFFFFFF,63,2,256,,30,1,707,{ bonus bInt,1; bonus bMdef,5; },{},{}
18593,Fancy_Mini_Crown,Fancy Mini Crown,4,20,,100,,2,,1,0xFFFFFFFF,63,2,256,,30,1,707,{ bonus bInt,1; bonus bMdef,5; bonus bVariableCast,-3000; bonus bMatkRate,3; bonus bHealPower,4; bonus bSkillUseSP,-3; .@r = getrefine(); if (.@r > 6) bonus bMatkRate,3; else if (.@r > 4) bonus bMatkRate,1; },{},{}
18594,Magni_Cap_,Magni Cap,4,30000,,1000,,9,,1,0xFFFFFFFE,63,2,256,,0,1,250,{ bonus bStr,2; },{},{}
18595,Horn_Of_Ancient,Horn of Ancient,4,40,,200,,8,,1,0xFFFFFFFF,63,2,256,,50,1,757,{ autobonus "{ bonus bBaseAtk,100; }",5,10000,0,"{ specialeffect2 EF_POTION_BERSERK; }"; },{},{}
18595,Horn_Of_Ancient,Horn of Ancient,4,40,,200,,8,,1,0xFFFFFFFF,63,2,256,,50,1,757,{ bonus2 bSubClass,Class_Boss,10; bonus2 bAddClass,Class_Boss,10; .@r = getrefine(); if (.@r > 6) { autobonus "{ bonus bBaseAtk,100; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; } if (.@r > 8) { bonus2 bSubClass,Class_Boss,10; bonus2 bAddClass,Class_Boss,10; } },{},{}
18596,Sprout_Hat,Sprout Hat,4,20,,200,,4,,0,0xFFFFFFFF,63,2,256,,70,1,758,{ skill "WZ_HEAVENDRIVE",3; },{},{}
18597,Mercury_Riser,Mercury Riser,4,40,,200,,10,,1,0xFFFFFFFF,63,2,256,,0,,759,{ bonus bAspdRate,3; bonus bCritical,3; .@r = getrefine(); if(.@r >= 7) { bonus bAspdRate,2; bonus bCritical,2; } if(.@r >= 9) { bonus bAspdRate,2; bonus bCritical,2; }},{},{}
18597,Mercury_Riser,Mercury Riser,4,40,,200,,10,,1,0xFFFFFFFF,63,2,256,,0,,759,{ bonus2 bSubRace,RC_DemiHuman,10; bonus2 bAddRace,RC_DemiHuman,10; bonus bAspdRate,3; bonus bDelayrate,-3; .@r = getrefine(); if(.@r >= 7) { bonus bAspdRate,2; bonus bDelayrate,-2; } if(.@r >= 9) { bonus bAspdRate,2; bonus bDelayrate,-2; }},{},{}
18598,Mini_Tree_J,Mini Tree J,4,20,,50,,0,,1,0xFFFFFFFF,63,2,256,,0,0,727,{ bonus bMdef,20; },{},{}
18599,Black_Devil_Mask,Black Devil Mask,4,20,,100,,0,,0,0xFFFFFFFF,63,2,512,,0,0,760,{ bonus bAllStats,2; },{},{}
18600,Cat_Ear_Beret,Cat Ear Beret,4,20,,100,,5,,1,0xFFFFFFFF,63,2,256,,0,1,761,{ bonus bAtkRate,5; .@r = getrefine(); if(.@r > 5 && .@r <= 12) { bonus2 bAddRace,RC_DemiHuman,(.@r - 5); bonus2 bSubRace,RC_DemiHuman,(.@r - 5); bonus2 bAddRace,RC_Player,(.@r - 5); bonus2 bSubRace,RC_Player,(.@r - 5); } if(.@r > 12) { bonus2 bAddRace,RC_DemiHuman,7; bonus2 bAddRace,RC_Player,7; bonus2 bSubRace,RC_DemiHuman,7; bonus2 bSubRace,RC_Player,7; } },{},{}
18601,Red_Bread_Hat,Red Bread Hat,4,20,,300,,0,,1,0xFFFFFFFF,63,2,256,,0,1,762,{ bonus bMdef,5; },{},{}
18600,Cat_Ear_Beret,Cat Ear Beret,4,20,,100,,5,,1,0xFFFFFFFF,63,2,256,,0,1,761,{ bonus bAtkRate,5; .@r = getrefine(); if(.@r < 5) .@r = 5; bonus2 bSubRace,RC_DemiHuman,(.@r - 5); bonus2 bAddRace,RC_DemiHuman,(.@r - 5); },{},{}
18601,Red_Bread_Hat,Red Bread Hat,4,20,,300,,0,,1,0xFFFFFFFF,63,2,256,,0,1,762,{ bonus bMdef,5; .@r = getrefine(); if (.@r < 5) .@r = 5; bonus2 bSubRace,RC_DemiHuman,(.@r - 5); bonus2 bMagicAddRace,RC_DemiHuman,(.@r - 5); },{},{}
18602,Watermelon_Bite,Watermelon Bite,4,20,,100,,4,,0,0xFFFFFFFF,63,2,1,,30,0,763,{ bonus bMdef,4; bonus2 bAddEle,Ele_Fire,4; },{},{}
18603,Black_Devil_Mask_,Black Devil Mask,4,20,,100,,0,,1,0xFFFFFFFF,63,2,512,,0,0,760,{ bonus bAllStats,1; },{},{}
18604,Falcon_Mask,Falcon Mask,4,10,,30,,0,,1,0xFFFFFFFF,63,2,513,,50,0,782,{},{},{}
@ -9163,14 +9165,14 @@
18627,Dried_Leaf,Dried Leaf,4,20,,50,,0,,0,0xFFFFFFFF,63,2,1,,10,0,711,{ bonus bUnbreakableHelm,0; },{},{}
18628,Tare_Brownie,Tare Brownie,4,20,,500,,5,,1,0xFFFFFFFF,63,2,256,,50,0,781,{},{},{}
18629,B_Desert_Wolf_Hat,B Desert Wolf Hat,4,10,,300,,0,,1,0xFFFFFFFF,63,2,256,,1,1,783,{},{},{}
18630,Dep_Alice_Hat,Drooping Alicel,4,20,,500,,6,,0,0xFFFFFFFE,63,2,256,,70,1,784,{},{},{}
18631,Ribbon_Chef_Hat,Ribbon Chef Hat,4,20,,300,,5,,0,0xFFFFFFFF,63,2,256,,70,1,785,{ bonus bDex,3; bonus bLuk,1; },{},{}
18630,Dep_Alice_Hat,Drooping Alicel,4,20,,500,,6,,0,0xFFFFFFFE,63,2,256,,70,1,784,{ bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; if (getrefine() > 10) { autobonus "{ bonus bAspdRate,100; }",10,7000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; } },{},{}
18631,Ribbon_Chef_Hat,Ribbon Chef Hat,4,20,,300,,5,,0,0xFFFFFFFF,63,2,256,,70,1,785,{ bonus bDex,3; bonus bLuk,1; if (getrefine() > 6) { bonus2 bAddMonsterDropItem,12125,500; bonus2 bAddMonsterDropItem,12126,500; bonus2 bAddMonsterDropItem,12127,400; bonus2 bAddMonsterDropItem,12128,300; bonus2 bAddMonsterDropItem,12129,200; } },{},{}
18632,Yellow_Poring_Hairpin,Yellow Poring Hairpin,4,20,,100,,3,,1,0xFFFFFFFF,63,2,256,,1,1,786,{},{},{}
18633,Pink_Poring_Hairpin,Pink Poring Hairpin,4,20,,100,,3,,1,0xFFFFFFFF,63,2,256,,1,1,787,{},{},{}
18634,Green_Poring_Hairpin,Green Poring Hairpin,4,20,,100,,3,,1,0xFFFFFFFF,63,2,256,,1,1,788,{},{},{}
18635,Blue_Poring_Hairpin,Blue Poring Hairpin,4,20,,100,,3,,1,0xFFFFFFFF,63,2,256,,1,1,789,{},{},{}
18636,Bridal_Ribbon,Bridal Ribbon,4,20,,200,,6,,0,0xFFFFFFFF,63,2,256,,30,1,790,{ bonus bDex,1; },{},{}
18637,Ancient_Admiral_Helm,Ancient Admiral Helm,4,20,,700,,4,,1,0xFFFFFFFF,63,2,768,,0,1,660,{ bonus bStr,2; bonus bVit,1; },{},{}
18636,Bridal_Ribbon,Bridal Ribbon,4,20,,200,,6,,0,0xFFFFFFFF,63,2,256,,30,1,790,{ bonus bDex,1; bonus3 bAutoSpellWhenHit,"DC_WINKCHARM",1,10; },{},{}
18637,Ancient_Admiral_Helm,Ancient Admiral Helm,4,20,,700,,4,,1,0xFFFFFFFF,63,2,768,,0,1,660,{ bonus bStr,2; bonus bVit,1; if (getrefine() > 7) bonus bSpeedRate,25; },{},{}
18638,Citron_Hat,Citron Hat,4,20,,400,,3,,0,0xFFFFFFFE,63,2,256,,1,1,791,{ bonus bLuk,3; bonus2 bSubRace,RC_Plant,10; },{},{}
18639,Naval_Officer_Hat,Naval Officer Hat,4,20,,200,,2,,0,0xFFFFFFFE,63,2,256,,1,1,792,{ bonus bLuk,3; bonus2 bAddEle,Ele_Water,5; },{},{}
18640,Starfish_Headband,Starfish Headband,4,20,,200,,2,,0,0xFFFFFFFE,63,2,256,,1,1,793,{},{},{}
@ -9183,15 +9185,15 @@
18647,Star_Eyepatch,Star Eyepatch,4,20,,100,,0,,0,0xFFFFFFFF,63,2,256,,1,0,800,{ bonus2 bResEff,Eff_Stun,1500; },{},{}
18648,Tongue_Charm,Tongue Charm,4,20,,100,,0,,0,0xFFFFFFFF,63,2,1,,1,0,801,{ bonus2 bSubRace,RC_Demon,3; },{},{}
18649,Lude_Mask,Lude Mask,4,10,,100,,1,,0,0xFFFFFFFF,63,2,513,,0,1,802,{},{},{}
18650,RWC_Shouting_Mouth,RWC Shouting Mouth,4,20,,50,,0,,0,0xFFFFFFFF,63,2,1,,1,0,194,{},{},{}
18650,RWC_Shouting_Mouth,RWC Shouting Mouth,4,20,,50,,0,,0,0xFFFFFFFF,63,2,1,,1,0,194,{ bonus3 bAutoSpellWhenHit,"SM_ENDURE",1,10; bonus3 bAutoSpellWhenHit,"MO_CALLSPIRITS",5,10; bonus3 bAutoSpellWhenHit,"MO_EXPLOSIONSPIRITS",5,10; bonus3 bAutoSpell,"BS_MAXIMIZE",5,10; bonus3 bAutoSpell,"MC_LOUD",1,10; bonus3 bAutoSpell,"AC_CONCENTRATION",5,10; bonus3 bAutoSpell,"PR_GLORIA",3,10; autobonus "{ bonus bStr,3; bonus bAgi,3; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; showscript \"RWC 2011 Fighting!!\"; }"; autobonus "{ bonus bInt,3; bonus bLuk,3; }",5,5000,BF_MAGIC,"{ specialeffect2 EF_ENERGYCOAT; showscript \"RWC 2011 Fighting!!\"; }"; },{},{}
18651,Ignis_Cap,Ignis Cap,4,20,,800,,8,,1,0xFFFFFFFF,63,2,256,,40,1,803,{},{},{}
18652,Vanargandr_Helm,Vanargandr Helm,4,20,,1500,,10,,1,0xFFFFFFFF,63,2,256,,80,1,804,{ bonus bMdef,5; .@r = getrefine(); if (.@r >= 9 ) { bonus2 bHPGainAttackRate,100,8; bonus2 bSPGainAttackRate,100,4; } else if (.@r >= 8 ) { bonus2 bHPGainAttackRate,100,5; bonus2 bSPGainAttackRate,100,2; } else if (.@r >= 7 ) { bonus2 bHPGainAttackRate,100,5; bonus2 bSPGainAttackRate,100,2; } else if (.@r >= 5 ) { bonus2 bHPGainAttackRate,100,3; bonus2 bSPGainAttackRate,100,1; } else { bonus2 bHPGainAttackRate,100,1; bonus2 bSPGainAttackRate,100,1; } /* Confirm: Success rate? */ },{},{}
18652,Vanargandr_Helm,Vanargandr Helm,4,20,,1500,,10,,1,0xFFFFFFFF,63,2,256,,80,1,804,{ bonus bMdef,5; .@r = getrefine(); 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; } },{},{}
18653,Deviruchi_Headphone,Deviruchi Headphone,4,20,,200,,8,,1,0xFFFFFFFF,63,2,256,,30,1,805,{ bonus bAgi,2; },{},{}
18655,Goedo_Monocle,Goedo Monocle,4,20,,100,,0,,0,0xFFFFFFFF,63,2,512,,50,0,23,{},{},{}
18656,Witch's_Pumpkin_Hat,Witch's Pumpkin Hat,4,20,,300,,10,,0,0xFFFFFFFF,63,2,256,,20,1,717,{ bonus bMdef,10; bonus bStr,2; bonus bInt,2; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Demon,15; },{},{}
18656,Wit_Pumpkin_Hat,Witch's Pumpkin Hat,4,20,,300,,10,,0,0xFFFFFFFF,63,2,256,,20,1,717,{ bonus bMdef,10; bonus bStr,2; bonus bInt,2; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Demon,15; bonus2 bMagicAddRace,RC_Demon,15; },{},{}
18657,Pegasus_Wing_Ears,Pegasus Wing Ears,4,20,,500,,1,,0,0xFFFFFFFF,63,2,512,,80,0,568,{ bonus bUnbreakableHelm,0; if (BaseLevel >= 150) bonus bAspdRate,3; else if (BaseLevel >= 100) bonus bAspdRate,2; else if (BaseLevel >= 50) bonus bAspdRate,1; },{},{}
18658,Holy_Santa_Beard,Holy Santa Beard,4,20,,100,,0,,0,0xFFFFFFFF,63,2,1,,1,0,25,{},{},{}
18659,Boitata_Hat,Boitata Hat,4,20,,0,,5,,1,0xFFFFFFFF,63,2,768,,0,1,808,{},{},{}
18659,Boitata_Hat,Boitata Hat,4,20,,0,,5,,1,0xFFFFFFFF,63,2,768,,0,1,808,{ autobonus "{ bonus bAtkEle,Ele_Fire; }",10,180000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; bonus3 bAutospell,"AS_SONICBLOW",5,10; },{},{}
18660,Indi_Feather_Band,Indian Feather Headband,4,20,,400,,3,,1,0xFFFFFFFE,63,2,256,,0,1,809,{ bonus bAgi,2; },{},{}
18661,Trident_Helm,Trident Helm,4,20,,400,,3,,1,0xFFFFFFFE,63,2,256,,20,1,810,{ bonus bStr,2; },{},{}
18662,Antler_Fedora,Antler Fedora,4,20,,400,,3,,0,0xFFFFFFFE,63,2,256,,1,1,811,{ bonus bInt,3; },{},{}
@ -9203,7 +9205,7 @@
18668,Droopy_Turtle_Hat,Droopy Turtle Hat,4,20,,300,,1,,1,0xFFFFFFFE,63,2,256,,1,1,694,{ skill "AL_DECAGI",3; },{},{}
18669,Cowhide_Hat,Cowhide Hat,4,20,,200,,3,,1,0xFFFFFFFE,63,2,256,,1,1,819,{ bonus bDex,2; bonus bMaxHPrate,1; },{},{}
18670,Hankie_In_Mouth,Hankie In Mouth,4,20,,100,,1,,0,0xFFFFFFFF,63,2,1,,12,0,818,{ bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; },{},{}
18671,Rudolf_Hairband,Rudolf Hairband,4,20,,200,,5,,0,0xFFFFFFFF,63,2,256,,30,1,836,{ bonus3 bAutoSpell,"AL_INCAGI",10,50; bonus3 bAutoSpellWhenHit,"AL_INCAGI",10,50; bonus2 bAddItemHealRate,515,2000; },{},{}
18671,Rudolf_Hairband,Rudolf Hairband,4,20,,200,,5,,0,0xFFFFFFFF,63,2,256,,30,1,836,{ bonus3 bAutoSpell,"AL_INCAGI",10,50; bonus3 bAutoSpellWhenHit,"AL_INCAGI",10,50; bonus2 bAddItemHealRate,515,2000; autobonus "{ bonus bLuk,20; }",10,50000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; /* showscript */ }"; autobonus2 "{ bonus bStr,20; }",10,50000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; /* showscript */ }"; },{},{}
18672,Tare_Pope,Tare Pope,4,20,,300,,0,,0,0xFFFFFFFF,63,2,256,,1,0,817,{ bonus bUnbreakableHelm,0; },{},{}
18673,Tare_Pope_,Tare Pope,4,20,,300,,0,,1,0xFFFFFFFF,63,2,256,,1,0,817,{ bonus bUnbreakableHelm,0; bonus bSPrecovRate,2; },{},{}
18674,Planewing_Hat,Planewing Hat,4,20,,200,,3,,1,0xFFFFFFFE,63,2,256,,1,1,820,{ bonus bAgi,3; },{},{}
@ -9306,7 +9308,7 @@
18806,Black_Rabbit_Hat,Black Rabbit Hat,4,20,,300,,2,,1,0xFFFFFFFF,63,2,256,,0,1,923,{ bonus bDex,2; bonus bAgi,3; bonus3 bAutoSpellWhenHit,"AL_INCAGI",5,10; },{},{}
18807,Yellow_Yuzu_Hat,Yellow Yuzu Hat,4,20,,400,,3,,1,0xFFFFFFFE,63,2,256,,0,1,924,{ bonus bVit,2; bonus bLuk,3; bonus2 bSubRace,RC_Plant,10; },{},{}
18808,Wing_Form_Spectacle,Wing Form Spectacle,4,20,,100,,1,,0,0xFFFFFFFF,63,2,256,,0,1,925,{ bonus bAgi,1; },{},{}
18810,Hell_Pumpkin_Hat,Hell Pumpkin Hat,4,20,,500,,12,,0,0xFFFFFFFF,63,2,256,,0,1,717,{ bonus bMdef,12; bonus2 bSubRace,6,5; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; bonus2 bSubRace,RC_Undead,-5; },{},{}
18810,Hell_Pumpkin_Hat,Hell Pumpkin Hat,4,20,,500,,12,,0,0xFFFFFFFF,63,2,256,,0,1,717,{ bonus bMdef,12; bonus2 bSubRace,RC_Demon,5; bonus2 bSubRace,RC_Undead,5; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; },{},{}
18813,New_Wave_Sunglasses,New Wave Sunglasses,4,10,,100,,,,0,0xFFFFFFFF,63,2,512,,30,,856,{ bonus bDelayrate,-10; },{},{}
18814,Angel_School_Cap,Angel School Cap,4,20,,100,,4,,1,0xFFFFFFFE,63,2,256,,0,1,927,{ bonus bInt,2; bonus bVit,1; },{},{}
18815,Devil_School_Cap,Devil School Cap,4,20,,100,,4,,1,0xFFFFFFFE,63,2,256,,0,1,928,{ bonus bStr,2; bonus bVit,1; },{},{}
@ -9332,9 +9334,9 @@
18848,Fresh_Roses,Fresh Roses,4,10,,200,0:20,0,,1,0xFFFFFFFF,63,2,256,,1,1,963,{ bonus bMagicHPGainValue,100; bonus bMagicSPGainValue,100; },{},{}
18849,Celine_Ribbon,Celine Ribbon,4,10,,200,,,,1,0xFFFFFFFF,63,2,256,,1,1,967,{ bonus bDex,3; bonus bMatk,40+getrefine(); bonus bMagicHPGainValue,200; bonus2 bHPLossRate,50,5000; },{},{}
18850,Polar_Bear_Cap,Polar Bear Cap,4,20,,300,,7,,0,0xFFFFFFFF,63,2,256,,1,0,966,{ bonus bUnbreakableHelm,0; bonus bDex,1; bonus bAgi,1; bonus bMdef,3; bonus bHPrecovRate,5; bonus bSPrecovRate,3; bonus2 bAddMonsterDropItem,12354,100; },{},{}
18851,C_Polar_Bear_Cap,Costume Polar Bear Cap,4,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,1,966,{},{},{}
18851,C_Polar_Bear_Cap,Costume Polar Bear Cap,4,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,1,966,{ /*Is this correct item?*/ },{},{}
18855,Aviator_Hat,Aviator Hat,4,10,,100,,10,,0,0xFFFFFFFF,63,2,256,,1,1,972,{ bonus bAgi,3; bonus bInt,3; autobonus "{ bonus bAtkEle,Ele_Wind; }",500,180,BF_NORMAL; },{},{}
18856,W_King_Tiger_Doll_Hat,W King Tiger Doll Hat,4,10,,0,,10,,0,0xFFFFFFFF,63,2,256,,1,1,973,{ bonus bStr,2; bonus bDex,2; bonus2 bAddRace,RC_Brute,10; .@r = getrefine(); autobonus "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",3*.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; }"; autobonus2 "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; }"; },{},{}
18856,W_King_Tiger_Doll_Hat,W King Tiger Doll Hat,4,10,,0,,10,,0,0xFFFFFFFF,63,2,256,,1,1,973,{ bonus bStr,2; bonus bDex,2; bonus2 bAddRace,RC_Brute,10; .@r = getrefine(); autobonus "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",3*.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; showscript \"Traaaansformation-!! Eddga form!!\"; }"; autobonus2 "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; showscript \"Traaaansformation-!! Eddga form!!\"; }"; },{},{}
18857,Curupira_Hat,Curupira Hat,4,10,,100,,20,,0,0xFFFFFFFF,63,2,256,,1,1,974,{ bonus bDex,3; bonus2 bAddEffWhenHit,Eff_Confusion,500; },{},{}
18859,Angeling_Bubble,Angeling Bubble,4,10,,50,,5,,0,0xFFFFFFFF,63,2,1,,1,,975,{ bonus bDex,1; bonus bMatkRate,2; bonus bMaxHP,100; },{},{}
18861,Zaha_Doll_J_Hat,Zaha Doll J Hat,4,10,,100,,,,0,0xFFFFFFFF,63,2,256,,50,1,461,{ bonus bHealPower,15; bonus bUseSPrate,15; },{},{}
@ -9402,6 +9404,7 @@
19019,Elemental_Crown,Elemental Crown,4,0,,500,,10,,1,0xFFFFFFFF,63,2,256,,,1,1219,{ .@r = getrefine(); bonus bDex,(3 + (.@r/2)+ (readparam(bDex) > 130 ? .@r : 0)); bonus bLongAtkRate,4; },{},{}
19020,Survive_Circlet,Survive Circlet,4,0,,500,,10,,1,0xFFFFFFFF,63,2,256,,,1,1220,{ .@r = getrefine(); bonus bInt,(3 + (.@r/2)+ (BaseLevel > 130 ? .@r : 0)); bonus bMatkRate,4; },{},{}
19021,Gigant_Helm,Gigant Helm,4,0,,500,,10,,1,0xFFFFFFFF,63,2,256,,,1,1221,{ bonus bStr,3+((BaseLevel > 130) ? getrefine() : 0); bonus bAtkRate,4; },{},{}
19024,Protect_Feathers,Protect Feathers,4,0,,500,,,,0,0xFFFFFFFF,63,2,512,1,70,1,1232,{ bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; bonus bAspdRate,-5; .@vit = readparam(bVit); if (.@vit >= 108) { bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; bonus bAspdRate,-5; } if (.@vit >= 120) { bonus bMaxHPRate,3; bonus bMdef,3; } },{},{}
19026,Aegir_Helm,Aegir Helm,4,10,,800,,10,,0,0xFFFFFFFF,63,2,256,,40,1,870,{ bonus bVit,3; },{},{}
19030,Pretty_Rabbit_Hood,Pretty Rabbit Hood,4,10,,100,,20,,0,0xFFFFFFFF,63,2,1,,1,1,1085,{ bonus bMaxHP,(15*BaseLevel); },{},{}
19031,Fallen_Angel_Blessing,Fallen Angel Blessing,4,0,,200,,1,,0,0xFFFFFFFF,63,2,512,,,1,1250,{ bonus2 bAddRace,RC_Angel,5; bonus2 bSubRace,RC_Angel,5; },{},{}
@ -9445,12 +9448,12 @@
19530,C_Wild_Rose,Costume Wild Rose,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,541,{ bonus bUnbreakableHelm,0; bonus bBaseAtk,2; bonus bMatk,2; },{},{}
19531,C_Cube_Mask,Costume Cube Mask,4,0,,0,,0,,0,0xFFFFFFFF,63,2,6144,,0,0,472,{ bonus bUnbreakableHelm,0; bonus bFlee,1; },{},{}
19532,C_Red_Bunny_Band,Red Bunny Band,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,640,{ bonus bUnbreakableHelm,0; bonus bDex,1; },{},{}
19533,C_Spore_Hat,Costume Spore Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,114,{ bonus bUnbreakableHelm,0; bonus bVit,1; bonus2 bExpAddClass,Class_All,1; },{},{}
19534,C_Tha_Despero_Mask,Costume Thanatos Despero Mask,4,20,,0,,0,,0,0xFFFFFFFF,63,2,513,,1,0,693,{ bonus bAtkRate,1; bonus bMatkRate,1; bonus bHealPower,1; },{},{}
19535,C_Sinsuncho_Hat,Costume Sinsuncho Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,730,{ bonus bUnbreakableHelm,0; bonus bStr,1; bonus2 bExpAddClass,Class_All,1; },{},{}
19533,C_Spore_Hat,Costume Spore Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,114,{ bonus bUnbreakableHelm,0; bonus bVit,1; bonus2 bExpAddRace,RC_All,1; },{},{}
19534,C_Tha_Despero_Mask,Costume Thanatos Despero Mask,4,20,,0,,0,,0,0xFFFFFFFF,63,2,513,,1,0,693,{ bonus2 bAddClass,Class_All,1; bonus bMatkRate,1; bonus bHealPower,1; },{},{}
19535,C_Sinsuncho_Hat,Costume Sinsuncho Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,730,{ bonus bUnbreakableHelm,0; bonus bStr,1; bonus2 bExpAddRace,RC_All,1; },{},{}
19536,C_Rose_Corsage,Costume Rose Corsage,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,533,{ bonus bUnbreakableHelm,0; bonus bInt,1; },{},{}
19537,C_Gryphon_Hat,Costume Gryphon Hat,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,591,{ bonus bUnbreakableHelm,0; },{},{}
19538,Full_Moon,Full Moon,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,780,{ autobonus "{ bonus bMatk,50; bonus bBaseAtk,50; }",10,5000; },{},{}
19538,Full_Moon,Full Moon,4,0,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,780,{ autobonus "{ bonus bBaseAtk,50; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; /* showscript */ }"; autobonus "{ bonus bMatk,50; }",5,5000,BF_MAGIC,"{ specialeffect2 EF_ENERGYCOAT; /* showscript */ }"; },{},{}
19539,C_Reginleif_Hairband,Costume Hairband Of Reginleif,4,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,468,{ bonus bAllStats,1; },{},{}
19540,C_Rabbit_Earplug,Costume Rabbit Earplugs,4,20,,0,,0,,0,0xFFFFFFFF,63,2,7168,,1,0,515,{ bonus bAgi,1; bonus bFlee,2; },{},{}
19541,C_Romantic_White_Flower,Costume Romantic White Flower,4,20,,0,,0,,0,0xFFFFFFFF,63,2,4096,,1,0,259,{ bonus bUnbreakableHelm,0; },{},{}
@ -9720,7 +9723,8 @@
20095,C_Red_Ribbon,Costume Red Ribbon,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,440,{},{},{}
20096,C_Blue_Ribbon,Costume Blue Ribbon,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,441,{},{},{}
20097,C_White_Ribbon,Costume White Ribbon,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,442,{},{},{}
20110,C_Coiledup_Snake,Costume Coiledup Snake,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,,{/*TODO: View ID*/},{},{}
20099,C_Flying_Ljosalfar,Flying Ljosalfar,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,1,1,1,1239,{},{},{}
20110,C_Coiledup_Snake,Costume Coiledup Snake,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,1258,{},{},{}
20118,C_Cake_Hat,Costume Cake Hat,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,109,{},{},{}
20119,C_Beanie,Costume Beanie,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,160,{},{},{}
20120,C_Aerial,Costume Aerial,4,0,,0,,,,0,0xFFFFFFFF,63,2,1024,,1,1,97,{},{},{}
@ -9778,7 +9782,7 @@
//
20500,T_Archangel_Wing,Archangel Wing,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,1,{ bonus bUnbreakableHelm,0; },{},{}
20600,Fantastic_Aura,Fantastic Aura,4,0,,0,,0,,0,0xFFFFFFFF,63,2,8192,,1,0,0,{ /*View ID*/ bonus bUnbreakableHelm,0; },{},{}
20700,Egir_Manteau,Egir Manteau,4,200000,,300,,10,,1,0xFFFFFFFF,63,2,4,,110,1,0,{ bonus bUnbreakableHelm,0; },{},{}
20700,Egir_Manteau,Egir Manteau,4,200000,,300,,10,,1,0xFFFFFFFF,63,2,4,,110,1,0,{ bonus bUnbreakableGarment,0; .@r = getrefine(); if (.@r > 10) .@r = 10; if (BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte) { bonus bFlee2,5+(.@r*2); } else if (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief) { bonus bShortWeaponDamageReturn,5+(.@r*2); } },{},{}
20706,Amistr_Bag,Amistr Bag,4,10,,500,,18,,0,0xFFFFFFFF,63,2,4,,1,,4,{ bonus bAllStats,1; bonus2 bSubEle,Ele_All,5; },{},{}
20707,Kirin_Wing,Kirin Wing,4,20,,0,,18,,0,0xFFFFFFFF,63,2,4,,0,1,6,{ bonus bAllStats,1; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; },{},{}
20710,Impr_Angel's_Warmth,Advanced Angelic Cardigan,4,10000,,400,,6,,1,0x00000001,63,2,4,,99,1,0,{ bonus bHPrecovRate,50; },{},{}
@ -9786,7 +9790,7 @@
20717,Gigant_Snake_Skin,Gigant Snake Skin,4,10,,400,,38,,0,0xFFFFFFFF,63,2,4,,1,1,0,{ bonus bMdef,10; },{},{}
20718,Gigant_Snake_Skin,Gigant Snake Skin,4,10,,400,,38,,1,0xFFFFFFFF,63,2,4,,1,1,0,{ bonus bMdef,10; },{},{}
20721,Black_As_Night_Cloak,Black As Night Cloak,4,10,,600,,45,,1,0xFFFFFFFF,63,2,4,,120,1,0,{ bonus2 bSubEle,Ele_Holy,5+(getrefine()/2); },{},{}
20724,Love_Dad_Wings_2012,Love Dad Wings 2012,4,0,,100,,15,,1,0xFFFFFFFF,63,2,4,,1,1,5,{},{},{}
20724,Love_Dad_Wings_2012,Love Dad Wings 2012,4,0,,100,,15,,1,0xFFFFFFFF,63,2,4,,1,1,5,{ .@r = getrefine(); bonus bAllStats,1; if ((readparam(bStr)>89)) { bonus bStr,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } if ((readparam(bAgi)>89)) { bonus bAgi,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } if ((readparam(bVit)>89)) { bonus bVit,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } if ((readparam(bInt)>89)) { bonus bInt,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } if ((readparam(bDex)>89)) { bonus bDex,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } if ((readparam(bLuk)>89)) { bonus bLuk,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } },{},{}
20725,Ribbon_Piamat,Ribbon Piamat,4,10,,100,0:10,,,0,0xFFFFFFFF,63,2,4,,30,1,7,{ bonus bInt,1; bonus bDex,1; },{},{}
20727,Brilliant_Golden_Wings,Brilliant Golden Wings,4,10,,0,,,,0,0xFFFFFFFF,63,2,8192,,1,1,5,{},{},{}
20730,Loyalists_Hood,Loyalists Hood,4,10,,200,,30,,0,0xFFFFFFFF,63,2,8192,,80,,,{ bonus bStr,2; bonus bMaxHPrate,10; bonus bNoKnockback,1; bonus2 bSubEle,Ele_All,-20; },{},{}
@ -9905,15 +9909,15 @@
22628,Green_Package,Green Package,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 17162,1; getitem 14534,5; getitem 12323,20; getitem 12324,20; getitem 12325,10; getitem 14533,2; getitem 22629,1; },{},{}
22629,Green_Package40,Green Package 40,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 14289,1; getitem 12215,10; getitem 12216,10; getitem 14534,10; getitem 14533,5; getitem 12766,5; getitem 22630,1; },{},{}
22630,Green_Package80,Green Package 80,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 7621,5; getitem 12209,5; getitem 14527,10; getitem 14533,5; getitem 12766,5; getitem 22631,1; },{},{}
22631,Green_Package99,Green Package 99,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12213,1; /*getitem Transmission_Coupon,1;*/ getitem 5883,1; },{},{}
22631,Green_Package99,Green Package 99,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12213,1; getitem 7676,1; getitem 5883,1; },{},{}
22640,17173_Green_Package,Green Package,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 17162,1; getitem 14534,5; getitem 12323,20; getitem 12324,20; getitem 12325,10; getitem 14533,2; getitem 22641,1; },{},{}
22641,17173_Green_Package40,Green Package 40,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 14289,1; getitem 12215,10; getitem 12216,10; getitem 14534,10; getitem 14533,5; getitem 12766,5; getitem 22642,1; },{},{}
22642,17173_Green_Package80,Green Package 80,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 7621,5; getitem 12209,5; getitem 14527,10; getitem 14533,5; getitem 12766,5; getitem 22643,1; },{},{}
22643,17173_Green_Package99,Green Package 99,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12213,1; /*getitem Transmission_Coupon,1;*/ getitem 5883,1; },{},{}
22643,17173_Green_Package99,Green Package 99,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12213,1; getitem 7676,1; getitem 5883,1; },{},{}
22644,S_Green_Package,Green Package,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 17162,1; getitem 14534,5; getitem 12323,20; getitem 12324,20; getitem 12325,10; getitem 14533,2; getitem 22645,1; },{},{}
22645,S_Green_Package40,Green Package 40,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 14289,1; getitem 12215,10; getitem 12216,10; getitem 14534,10; getitem 14533,5; getitem 12766,5; getitem 22646,1; },{},{}
22646,S_Green_Package80,Green Package 80,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 7621,5; getitem 12209,5; getitem 14527,10; getitem 14533,5; getitem 12766,5; getitem 22647,1; },{},{}
22647,S_Green_Package99,Green Package 99,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12213,1; /*getitem Transmission_Coupon,1;*/ getitem 5883,1; },{},{}
22647,S_Green_Package99,Green Package 99,18,0,,100,,,,,0xFFFFFFFF,63,2,,,,,,{ getitem 12213,1; getitem 7676,1; getitem 5883,1; },{},{}
22648,Angeling_Package,Angel Ring Package,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ /* TODO */ },{},{}
22649,Deviling_Package,Devil Ring Package,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ /* TODO */ },{},{}
22652,Briliant_Hat_Box,Brilliant Hat Box,2,10,,200,,,,,0xFFFFFFFF,63,2,,,,,,{ /* TODO */ },{},{}
@ -10266,10 +10270,10 @@
28203,Half_BF_Rifle1,Half BF Rifle1,5,0,,0,50,,9,0,0x41000000,63,2,34,3,80,1,18,{ bonus bDex,2; bonus bHit,8; bonus bCritical,8; bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bVariableCastrate,"GS_TRACKING",-20; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus bUnbreakableWeapon,0; },{},{}
28204,Half_BF_Shotgun1,Half BF Shotgun1,5,0,,0,100,,9,0,0x41000000,63,2,34,3,80,1,20,{ bonus bDex,2; bonus bSplashRange,1; bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; autobonus "{ bonus bBaseAtk,80; bonus2 bHPLossRate,100,1000; }",30,6000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0; },{},{}
//
//28315,RCC2013_ARMLET
//28316,RCC2013_ARMLET_
//28317,RCC2013_RING
//28318,RCC2013_RING_
28315,RCC2013_ARMLET,RCC2013_ARMLET,4,200,,200,,,,0,0xFFFFFFFF,63,2,136,,1,0,,{ bonus2 bAddClass,Class_All,1; },{},{}
28316,RCC2013_ARMLET_,RCC2013_ARMLET_,4,200,,200,,,,1,0xFFFFFFFF,63,2,136,,1,0,,{ bonus2 bAddClass,Class_All,1; },{},{}
28317,RCC2013_RING,RCC2013_RING,4,200,,200,,,,0,0xFFFFFFFF,63,2,136,,1,0,,{ bonus2 bAddClass,Class_All,1; },{},{}
28318,RCC2013_RING_,RCC2013_RING_,4,200,,200,,,,1,0xFFFFFFFF,63,2,136,,1,0,,{ bonus2 bAddClass,Class_All,1; },{},{}
28310,Sarah's_Left_Earring,Sarah's Left Earring,4,10,,100,,,,0,0xFFFFFFFF,63,2,128,,145,1,,{ skill "AL_HEAL",1; },{},{}
28311,Sarah's_Right_Earring,Sarah's Right Earring,4,10,,100,,,,0,0xFFFFFFFF,63,2,8,,145,1,,{ skill "AL_TELEPORT",1; },{},{}
28326,Broken_Chips_01,Broken Chips 01,4,10,,100,,,,1,0xFFFFFFFF,63,2,136,,100,1,,{ bonus bStr,4; },{},{}

View File

@ -891,7 +891,7 @@ IG_Lucky_Scroll08,Bunny_Band_,3,0,0,0,0,1
IG_Lucky_Scroll08,Drooping_Kitty_,5,0,0,0,0,1
IG_Lucky_Scroll08,Tulip_Hairpin,65,0,0,0,0,1
IG_Lucky_Scroll08,Insurance_Package,60,0,0,0,0,1
IG_Lucky_Scroll08,Leaf_Of_Yggdrasil,110,05,0,0,0,1
IG_Lucky_Scroll08,Leaf_Of_Yggdrasil,110,15,0,0,0,1
IG_Br_SwordPackage,Plate_Armor_,0,1,0,0,0,1
IG_Br_SwordPackage,Shield_,0,1,0,0,0,1

View File

@ -78,8 +78,8 @@
1148,MEDUSA,Medusa,12368,9050,10032,6108,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus bVit,1; bonus2 bResEff,Eff_Stone,500; }
1179,WHISPER,Whisper,12363,9045,10027,6100,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bFlee,7; bonus bDef,-3; }
1299,GOBLIN_LEADER,Goblin Leader,12364,9046,10028,6104,80,60,10,100,250,20,50,150,0,0,300,300,800,{},{ bonus2 bAddRace,RC_DemiHuman,3; }
1370,SUCCUBUS,Succubus,12373,9055,10037,6113,80,60,10,100,250,20,200,150,0,0,300,300,800,{ bonus2 bHPGainAttackRate,10,5; },{ bonus2 bHPGainAttackRate,30,5; bonus bMaxHPrate,1; }
1374,INCUBUS,Incubus,12370,9052,10034,6110,80,60,10,100,250,20,50,150,0,0,300,300,800,{ bonus bMaxSPRate,3; bonus2 bSPGainAttackRate,10,1; },{ bonus bMaxSPRate,5; bonus2 bSPGainAttackRate,30,1; }
1370,SUCCUBUS,Succubus,12373,9055,10037,6113,80,60,10,100,250,20,200,150,0,0,300,300,800,{ bonus2 bHPDrainRate,10,5; },{ bonus2 bHPDrainRate,30,5; bonus bMaxHPrate,1; }
1374,INCUBUS,Incubus,12370,9052,10034,6110,80,60,10,100,250,20,50,150,0,0,300,300,800,{ bonus bMaxSPRate,3; bonus2 bSPDrainRate,10,1; },{ bonus bMaxSPRate,5; bonus2 bSPDrainRate,30,1; }
1379,NIGHTMARE_TERROR,Nightmare Terror,12372,9054,10036,6112,80,60,10,100,250,20,200,150,0,0,300,300,800,{},{ bonus2 bResEff,Eff_Sleep,10000; }
1401,SHINOBI,Shinobi,12362,9044,10026,6099,80,60,20,100,250,20,500,150,0,0,300,300,800,{},{ bonus bAgi,2; }
1404,MIYABI_NINGYO,Miyabi Doll,12366,9048,10030,6106,80,60,15,100,250,20,200,150,0,0,300,300,800,{},{ bonus bInt,1; bonus bCastrate,-3; }

View File

@ -41,6 +41,7 @@
// 0x08000 - skill that ignore bg reduction
// 0x10000 - skill that ignore gvg reduction
// 0x20000 - makes 'self'/'place' skill cannot be casted/placed when near NPC (see 'db/skill_nonearnpc_db.txt' for more options)
// 0x40000 - skill that can hit trap-type skill (inf2 has 0x00080)
// 13 maxcount: max amount of skill instances to place on the ground when
// player_land_skill_limit/monster_land_skill_limit is enabled. For skills
// that attack using a path, this is the path length to be used.
@ -76,7 +77,7 @@
4,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, SM_RECOVERY,Increase HP Recovery
5,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0x0, SM_BASH,Bash
6,9,6,1,0,1,0,10,1,no,0,0,0,none,0,0x0, SM_PROVOKE,Provoke
7,0,6,4,3,0x2,2,10,1,no,0,0,0,weapon,2,0x0, SM_MAGNUM,Magnum Break
7,0,6,4,3,0x2,2,10,1,no,0,0x40000,0,weapon,2,0x0, SM_MAGNUM,Magnum Break
8,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, SM_ENDURE,Endure
//****
@ -128,7 +129,7 @@
44,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, AC_VULTURE,Vulture's Eye
45,0,6,4,0,0x3,3,10,1,no,0,0,0,weapon,0,0x0, AC_CONCENTRATION,Improve Concentration
46,-9,8,1,-1,0,0,10,2,no,0,0,0,weapon,0,0x80, AC_DOUBLE,Double Strafe
47,-9,6,2,-1,0x2,2,10,1,no,0,0x0,0,weapon,2,0x81, AC_SHOWER,Arrow Shower
47,-9,6,2,-1,0x2,2,10,1,no,0,0x40000,0,weapon,2,0x81, AC_SHOWER,Arrow Shower
//****
// Thief
@ -146,11 +147,11 @@
55,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, KN_SPEARMASTERY,Spear Mastery
56,-2,8,1,-1,0,0,10,3,no,0,0,0,weapon,0,0x0, KN_PIERCE,Pierce
57,-2,6,1,-1,0x1,0,10,1,no,0,0,0,weapon,3,0x20000, KN_BRANDISHSPEAR,Brandish Spear
58,-4,6,1,-1,0x2,0,10,1,no,0,0,0,weapon,6,0x0, KN_SPEARSTAB,Spear Stab
58,-4,6,1,-1,0x2,0,10,1,no,0,0x40000,0,weapon,6,0x0, KN_SPEARSTAB,Spear Stab
59,3:5:7:9:11,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, KN_SPEARBOOMERANG,Spear Boomerang
60,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, KN_TWOHANDQUICKEN,Twohand Quicken
61,0,6,4,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, KN_AUTOCOUNTER,Counter Attack
62,-2,6,1,-1,0x2,1,10,1,no,0,0,0,weapon,1,0x0, KN_BOWLINGBASH,Bowling Bash
62,-2,6,1,-1,0x2,1,10,1,no,0,0x40000,0,weapon,1,0x0, KN_BOWLINGBASH,Bowling Bash
63,0,0,0,0,0,0,1,0,no,0,0,0,weapon,0,0x0, KN_RIDING,Peco Peco Riding
64,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0, KN_CAVALIERMASTERY,Cavalier Mastery
@ -175,7 +176,7 @@
//****
// Wizard
80,9,8,2,3,0x20,1:1:1:1:1:2:2:2:2:2:2,10,-3:-4:-5:-6:-7:-8:-9:-10:-11:-12:-12,yes,0,0x2000,5,magic,0,0x0, WZ_FIREPILLAR,Fire Pillar
81,0,6,4,3,0,7,10,1,yes,0,0x2000,0,magic,5,0x20, WZ_SIGHTRASHER,Sightrasher
81,0,6,4,3,0x2,7,10,1,yes,0,0x42000,0,magic,5,0x20, WZ_SIGHTRASHER,Sightrasher
83,9,8,2,3,0,3:3:3:3:3:3:3:3:3:3:14,10,1:1:2:2:3:3:4:4:5:5:15,yes,0,0x2000,0,magic,0,0x20, WZ_METEOR,Meteor Storm
84,9,8,1,4,0,0,10,3:4:5:6:7:8:9:10:11:12,yes,0,0x2000,0,magic,2:3:3:4:4:5:5:6:6:7,0x20, WZ_JUPITEL,Jupitel Thunder
85,9,8,2,4,0,0,10,-10,yes,0,0x2000,0,magic,0,0x20, WZ_VERMILION,Lord of Vermilion
@ -217,13 +218,13 @@
115,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,6:7:8:9:10,0x3000, HT_SKIDTRAP,Skid Trap
116,3,6,2,2,0x42,0,5,1,no,0,0x80,0,misc,0,0x3800, HT_LANDMINE,Land Mine
117,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,0,0x3000, HT_ANKLESNARE,Ankle Snare
118,3,6,2,0,0x2,1,5,1,no,0,0x80,0,misc,0,0x3000, HT_SHOCKWAVE,Shockwave Trap
118,3,6,2,0,0x3,1,5,1,no,0,0x80,0,misc,0,0x3000, HT_SHOCKWAVE,Shockwave Trap
119,3,6,2,0,0x3,2,5,1,no,0,0x80,0,misc,0,0x3000, HT_SANDMAN,Sandman
120,3,6,2,0,0x3,1,5,1,no,0,0x80,0,misc,0,0x3000, HT_FLASHER,Flasher
121,3,6,2,1,0x42,1,5,1,no,0,0x80,0,weapon,0,0x3800, HT_FREEZINGTRAP,Freezing Trap
122,3,6,2,4,0x42,1,5,1,no,0,0x80,0,misc,0,0x3800, HT_BLASTMINE,Blast Mine
123,3,6,2,3,0x42,2,5,1,no,0,0x80,0,misc,0,0x3800, HT_CLAYMORETRAP,Claymore Trap
124,2,6,32,0,0x1,0,1,1,no,0,0,0,misc,0,0x0, HT_REMOVETRAP,Remove Trap
123,3,6,2,3,0x42,2,5,1,no,0,0x40080,0,misc,0,0x3800, HT_CLAYMORETRAP,Claymore Trap
124,2,6,32,0,0x1,0,1,1,no,0,0x40000,0,misc,0,0x0, HT_REMOVETRAP,Remove Trap
125,3,6,2,0,0x1,0,1,1,no,0,0x80,0,misc,0,0x2000, HT_TALKIEBOX,Talkie Box
126,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, HT_BEASTBANE,Beast Bane
127,0,0,0,0,0,0,1,0,no,0,0,0,misc,0,0x0, HT_FALCON,Falconry Mastery
@ -258,7 +259,7 @@
150,0,6,4,0,0x1,0,1,1,no,0,0x1,0,weapon,5,0x40, TF_BACKSLIDING,Back Slide
151,0,6,4,0,0x1,0,1,1,no,0,0x1,0,none,0,0x0, TF_PICKSTONE,Find Stone
152,7,6,1,0,0x40,0,1,1,no,0,0x1,0,misc,0,0x0, TF_THROWSTONE,Stone Fling
153,1,6,1,-1,0x2,1,1,1,no,0,0x1,0,weapon,2,0x0, MC_CARTREVOLUTION,Cart Revolution
153,1,6,1,-1,0x2,1,1,1,no,0,0x40001,0,weapon,2,0x0, MC_CARTREVOLUTION,Cart Revolution
154,0,6,4,0,0x1,0,1,1,no,0,0x1,0,none,0,0x0, MC_CHANGECART,Change Cart
155,0,6,4,0,0x1,0,1,1,no,0,0x1,0,weapon,0,0x0, MC_LOUD,Crazy Uproar
156,9,6,1,6,0,0,1,1,yes,0,0x1,0,magic,0,0x20, AL_HOLYLIGHT,Holy Light
@ -325,7 +326,7 @@
211,1,6,1,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, RG_STEALCOIN,Mug
212,-1,6,1,-1,0x40,0,10,1,no,0,0,0,weapon,0,0x4, RG_BACKSTAP,Back Stab
213,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, RG_TUNNELDRIVE,Stalk
214,0,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x4, RG_RAID,Sightless Mind
214,0,6,4,-1,0x2,3,5,1,no,0,0x40000,0,weapon,0,0x4, RG_RAID,Sightless Mind
215,1,6,1,0,0x1,0,5,1,no,0,0,0,weapon,0,0x20, RG_STRIPWEAPON,Divest Weapon
216,1,6,1,0,0x1,0,5,1,no,0,0,0,weapon,0,0x20, RG_STRIPSHIELD,Divest Shield
217,1,6,1,0,0x1,0,5,1,no,0,0,0,weapon,0,0x20, RG_STRIPARMOR,Divest Armor
@ -369,8 +370,8 @@
249,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, CR_AUTOGUARD,Guard
250,3,6,1,0,0,0,5,1,no,0,0,0,weapon,5:6:7:8:9,0x0, CR_SHIELDCHARGE,Smite
251,3:5:7:9:11,6,1,0,0,0,5,1,no,0,0,0,weapon,0,0x20000, CR_SHIELDBOOMERANG,Shield Boomerang
252,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect
253,-2,8,1,6,0,0,10,-2,no,0,0,0,weapon,0,0x0, CR_HOLYCROSS,Holy Cross
252,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, CR_REFLECTSHIELD,Shield Reflect
253,-2,8,1,6,0,0,10,-2,no,0,0x40000,0,weapon,0,0x0, CR_HOLYCROSS,Holy Cross
254,5,6,4,6,0x48,0,10,1,no,33,0x100,0,magic,0,0x0, CR_GRANDCROSS,Grand Cross
255,7:8:9:10:11,6,16,0,0x1,0,5,1,yes,0,0x600,0,none,0,0x0, CR_DEVOTION,Sacrifice
256,9,6,16,0,0x1,0,5,1,yes,0,0x200,0,none,0,0x0, CR_PROVIDENCE,Resistant Souls
@ -383,15 +384,15 @@
260,0,0,0,0,0,0,5,0,no,0,0,0,weapon,0,0x0, MO_SPIRITSRECOVERY,Spiritual Cadence
261,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, MO_CALLSPIRITS,Summon Spirit Sphere
262,9,6,16,0,0x1,0,1,1,yes,0,0,0,weapon,0,0x0, MO_ABSORBSPIRITS,Absorb Spirit Sphere
263,-1,8,0,-1,0,0,10,-3,no,0,0,0,weapon,0,0x0, MO_TRIPLEATTACK,Raging Trifecta Blow
263,-1,8,0,-1,0,0,10,-3,no,0,0x40000,0,weapon,0,0x0, MO_TRIPLEATTACK,Raging Trifecta Blow
264,18,6,2,0,0x1,0,1,1,no,0,0,0,none,0,0x0, MO_BODYRELOCATION,Snap
265,0,0,0,0,0,0,10,0,no,0,0,0,weapon,0,0x0, MO_DODGE,Dodge
266,2,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0x0, MO_INVESTIGATE,Occult Impaction
267,9,8,1,-1,0,0,5,1:2:3:4:5,no,0,0,0,weapon,0,0x0, MO_FINGEROFFENSIVE,Throw Spirit Sphere
266,2,6,1,-1,0x40,0,5,1,no,0,0x40000,0,weapon,0,0x0, MO_INVESTIGATE,Occult Impaction
267,9,8,1,-1,0,0,5,1:2:3:4:5,no,0,0x40000,0,weapon,0,0x0, MO_FINGEROFFENSIVE,Throw Spirit Sphere
268,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x0, MO_STEELBODY,Mental Strength
269,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x0, MO_BLADESTOP,Root
270,0,6,4,0,0x1,0,5,0,no,0,0,0,weapon,0,0x0, MO_EXPLOSIONSPIRITS,Fury
271,-2,6,1,0,0x60,0,5,1,yes,0,0,0,weapon,0,0x0, MO_EXTREMITYFIST,Asura Strike
271,-2,6,1,0,0x60,0,5,1,yes,0,0x40000,0,weapon,0,0x0, MO_EXTREMITYFIST,Asura Strike
272,-2,8,4,-1,0,0,5,-4,no,0,0x200,0,weapon,0,0x0, MO_CHAINCOMBO,Raging Quadruple Blow
273,-2,6,4,-1,0x2,2,5,1,no,0,0x200,0,weapon,0,0x0, MO_COMBOFINISH,Raging Thrust
@ -561,7 +562,7 @@
//****
// Stalker
389,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x60, ST_CHASEWALK,Stealth
390,0,0,4,0,0,0,5,1,yes,0,0,0,weapon,0,0x0, ST_REJECTSWORD,Counter Instinct
390,0,0,4,0,0x1,0,5,1,yes,0,0,0,weapon,0,0x0, ST_REJECTSWORD,Counter Instinct
//391,0,0,4,0,1,0,1,1,yes,0,0,0,magic,0,0x0, ST_STEALBACKPACK,Steal Backpack
//****
@ -577,7 +578,7 @@
//****
// Lord Knight
397,5,8,1,-1,0,0,5,5,no,0,0,0,weapon,0,0x20000, LK_SPIRALPIERCE,Spiral Pierce
397,5,8,1,-1,0,0,5,5,no,0,0x40000,0,weapon,0,0x20000, LK_SPIRALPIERCE,Spiral Pierce
398,4,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, LK_HEADCRUSH,Traumatic Blow
399,4,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0x0, LK_JOINTBEAT,Vital Strike
@ -598,7 +599,7 @@
//****
// Assassin Cross
406,0,6,4,-1,0xA,2,10,1,no,0,0,0,weapon,0,0x0, ASC_METEORASSAULT,Meteor Assault
406,0,6,4,-1,0xA,2,10,1,no,0,0x40000,0,weapon,0,0x0, ASC_METEORASSAULT,Meteor Assault
407,0,6,4,0,0x1,0,1,0,no,0,0,0,none,0,0x0, ASC_CDP,Create Deadly Poison
//****
@ -629,9 +630,9 @@
//****
// Star Gladiator
427,0,6,4,0,0x1,0,3,1,yes,0,0,0,magic,0,0x0, SG_FEEL,Feeling the Sun Moon and Stars
428,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_SUN_WARM,Warmth of the Sun
429,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_MOON_WARM,Warmth of the Moon
430,1,6,4,-1,0x2,1,3,1,yes,0,0,0,weapon,2,0x1, SG_STAR_WARM,Warmth of the Stars
428,1,6,4,-1,0x3,1,3,1,yes,0,0,0,weapon,2,0x1, SG_SUN_WARM,Warmth of the Sun
429,1,6,4,-1,0x3,1,3,1,yes,0,0,0,weapon,2,0x1, SG_MOON_WARM,Warmth of the Moon
430,1,6,4,-1,0x3,1,3,1,yes,0,0,0,weapon,2,0x1, SG_STAR_WARM,Warmth of the Stars
431,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_SUN_COMFORT,Comfort of the Sun
432,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_MOON_COMFORT,Comfort of the Moon
433,0,0,4,0,0x1,0,4,1,yes,0,0,0,magic,0,0x0, SG_STAR_COMFORT,Comfort of the Stars
@ -689,7 +690,7 @@
//****
// Other 2nd Skills
473,0,6,4,0,0,0,1,1,no,0,0,0,none,0,0x0, SM_SELFPROVOKE,Provoke Self
473,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, SM_SELFPROVOKE,Provoke Self
474,0,0,4,0,0x1,0,10,1,no,0,0x2,0,none,0,0x0, NPC_EMOTION_ON,Emotion ON
475,0,0,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, ST_PRESERVE,Preserve
476,1,6,1,0,0x1,0,5,1,yes,0,0,0,weapon,0,0x20, ST_FULLSTRIP,Divest All
@ -719,14 +720,14 @@
//****
// Gunslinger
500,0,6,4,0,0x40,0,5,1,no,0,0,0,misc,0,0x0, GS_GLITTERING,Flip the Coin
500,0,6,4,0,0x41,0,5,1,no,0,0,0,misc,0,0x0, GS_GLITTERING,Flip the Coin
501,9,6,1,-1,0x50,0,1,1,no,0,0,0,misc,0,0x0, GS_FLING,Fling
502,-9,8,1,-1,0,0,1,3,no,0,0,0,weapon,0,0x0, GS_TRIPLEACTION,Triple Action
503,-9,6,1,-1,0x8,0,1,1,no,0,0,0,weapon,0,0x0, GS_BULLSEYE,Bulls Eye
504,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0, GS_MADNESSCANCEL,Madness Canceller
505,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0, GS_ADJUSTMENT,AdJustment
506,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0, GS_INCREASING,Increasing Accuracy
507,-9,6,1,8,0,0,1,1,no,0,0,0,weapon,0,0x0, GS_MAGICALBULLET,Magical Bullet
507,-9,6,1,8,0x20,0,1,1,no,0,0,0,misc,0,0x0, GS_MAGICALBULLET,Magical Bullet
508,-9,6,1,-1,0x1,0,1,1,no,0,0,0,weapon,0,0x0, GS_CRACKER,Cracker
509,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, GS_SINGLEACTION,Single Action
510,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, GS_SNAKEEYE,Snake Eye
@ -870,7 +871,7 @@
1003,0,0,0,0,0,0,1,0,no,0,0x1,0,weapon,0,0x0, AS_SONICACCEL,Sonic Acceleration
1004,9,8,1,0,0x8,0,1,1,no,0,0x1,0,weapon,0,0x0, AS_VENOMKNIFE,Throw Venom Knife
1005,1,6,1,0,0x1,0,1,1,no,0,0x1,0,weapon,0,0x0, RG_CLOSECONFINE,Close Confine
1006,0,6,4,3,0,1,1,1,yes,0,0x1,0,magic,3,0x20, WZ_SIGHTBLASTER,Sight Blaster
1006,0,6,4,3,0,1,1,1,yes,0,0x40001,0,magic,3,0x20, WZ_SIGHTBLASTER,Sight Blaster
1007,0,6,4,0,0x1,0,1,0,no,0,0x1,0,none,0,0x0, SA_CREATECON,Create Elemental Converter
1008,9,6,1,1,0x1,0,1,1,yes,0,0x1,0,magic,0,0x0, SA_ELEMENTWATER,Elemental Change Water
1009,-9,6,1,0,0,0,1,1,no,0,0x1,0,weapon,3,0x0, HT_PHANTASMIC,Phantasmic Arrow
@ -894,7 +895,7 @@
2005,1,6,2,4,0x2,2,5,1,no,0,0,0,weapon,3,0x0, RK_WINDCUTTER,Wind Cutter
2006,0,6,4,-1,0x2,5,5,1,no,0,0,0,weapon,0,0x0, RK_IGNITIONBREAK,Ignition Break
2007,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, RK_DRAGONTRAINING,Dragon Training
2008,9,6,2,3,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,weapon,0,0x0, RK_DRAGONBREATH,Dragon Breath
2008,9,6,2,3,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0x40000,0,weapon,0,0x0, RK_DRAGONBREATH,Dragon Breath
2009,0,6,4,0,0x3,3:4:5:6:7,5,1,no,0,0,0,none,0,0x0, RK_DRAGONHOWLING,Dragon Howling
2010,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, RK_RUNEMASTERY,Rune Mastery
2011,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, RK_MILLENNIUMSHIELD,Millenium Shield
@ -903,7 +904,7 @@
2014,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_GIANTGROWTH,Giant Growth
2015,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_STONEHARDSKIN,Stone Hard Skin
2016,0,6,4,0,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_VITALITYACTIVATION,Vitality Activation
2017,0,6,4,-1,0x2,3,1,1,no,0,0,0,weapon,7,0x0, RK_STORMBLAST,Storm Blast
2017,0,6,4,-1,0x2,3,1,1,no,0,0x40000,0,weapon,7,0x0, RK_STORMBLAST,Storm Blast
2018,0,6,4,0,0x3,-1,1,1,yes,0,0,0,none,0,0x0, RK_FIGHTINGSPIRIT,Fighting Spirit //CHECK Is this splash needed?
2019,9,6,4,6,0x1,0,1,1,yes,0,0,0,none,0,0x0, RK_ABUNDANCE,Abundance
2020,5:6:7:8:9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0, RK_PHANTOMTHRUST,Phantom Thrust
@ -995,7 +996,7 @@
2234,0,6,4,0,0,0,5,1,yes,0,0,0,none,0,0x0, RA_FEARBREEZE,Fear Breeze
2235,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, RA_RANGERMAIN,Ranger Main
2236,9,8,1,-1,0,0,10,1,yes,0,0,0,weapon,0,0x80, RA_AIMEDBOLT,Aimed Bolt
2237,9,6,2,0,0x3,3,1,1,no,0,0,0,none,0,0x2000, RA_DETONATOR,Detonator
2237,9,6,2,0,0x3,3,1,1,no,0,0x40000,0,none,0,0x2000, RA_DETONATOR,Detonator
2238,3,6,2,0,0x3,2,5,1,no,0,0x80,3,misc,0,0x2000, RA_ELECTRICSHOCKER,Electric Shocker
2239,3,6,2,0,0x42,3,5,1,no,0,0x80,3,misc,0,0x2800, RA_CLUSTERBOMB,Cluster Bomb
2240,0,6,4,0,0,0,1,1,no,0,0,0,none,0,0x0, RA_WUGMASTERY,Warg Mastery
@ -1004,15 +1005,15 @@
2243,9,6,1,0,0x40,0,5,1,no,0,0,0,weapon,0,0x2000, RA_WUGSTRIKE,Warg Strike
2244,9,6,1,0,0x40,0,5,1,no,0,0,0,weapon,0,0x80, RA_WUGBITE,Warg Bite
2245,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, RA_TOOTHOFWUG,Tooth of Warg
2246,0,6,4,0,0x2,3:4:5:6:7,5,1,no,0,0,0,weapon,0,0x0, RA_SENSITIVEKEEN,Sensitive Keen
2246,0,6,4,0,0x2,3:4:5:6:7,5,1,no,0,0x40000,0,weapon,0,0x0, RA_SENSITIVEKEEN,Sensitive Keen
2247,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x42, RA_CAMOUFLAGE,Camouflage
2248,0,0,0,0,0,0,5,0,no,0,0,0,none,0,0x0, RA_RESEARCHTRAP,Research Trap
2249,3,6,2,3,0x43,2,1,1,no,0,0x80,1,misc,0,0x2000, RA_MAGENTATRAP,Magenta Trap
2250,3,6,2,1,0x43,2,1,1,no,0,0x80,1,misc,0,0x2000, RA_COBALTTRAP,Cobalt Trap
2251,3,6,2,2,0x43,2,1,1,no,0,0x80,1,misc,0,0x2000, RA_MAIZETRAP,Maize Trap
2252,3,6,2,4,0x43,2,1,1,no,0,0x80,1,misc,0,0x2000, RA_VERDURETRAP,Verdure Trap
2253,3,6,2,3,0x42,2,5,1,no,0,0x80,2,misc,0,0x2800, RA_FIRINGTRAP,Firing Trap
2254,3,6,2,1,0x42,2,5,1,no,0,0x80,2,misc,0,0x2800, RA_ICEBOUNDTRAP,Icebound Trap
2253,3,6,2,3,0x42,2,5,1,no,0,0x40080,2,misc,0,0x2800, RA_FIRINGTRAP,Firing Trap
2254,3,6,2,1,0x42,2,5,1,no,0,0x40080,2,misc,0,0x2800, RA_ICEBOUNDTRAP,Icebound Trap
//****
// NC Mechanic
@ -1021,14 +1022,14 @@
2257,3,6,1,-1,0,0,3,1,no,0,0,0,weapon,0,0x0, NC_PILEBUNKER,Pile Bunker
2258,13,6,1,-1,0x2,1,3,1,no,0,0,0,weapon,0,0x0, NC_VULCANARM,Vulcan Arm
2259,7,6,1,3,0,2,3,1,no,0,0,5,weapon,0,0x0, NC_FLAMELAUNCHER,Flame Launcher
2260,7,6,2,1,0x2,2:3:4,3,1,no,0,0,0,weapon,0,0x0, NC_COLDSLOWER,Cold Slower
2260,7,6,2,1,0x2,2:3:4,3,1,no,0,0x40000,0,weapon,0,0x0, NC_COLDSLOWER,Cold Slower
2261,9:11:13,6,2,-1,0x42,3:2:1,3,1,no,0,0,0,weapon,0,0x0, NC_ARMSCANNON,Arm Cannon
2262,0,6,4,0,0x1,0,3,1,no,0,0,0,none,0,0x0, NC_ACCELERATION,Acceleration
2263,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, NC_HOVERING,Hovering
2264,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_F_SIDESLIDE,Front-Side Slide
2265,0,6,4,0,0x1,0,1,1,no,0,0,0,none,7,0x0, NC_B_SIDESLIDE,Back-Side Slide
2266,0,0,0,0,0,0,4,0,no,0,0,0,none,0,0x0, NC_MAINFRAME,Mainframe Restructure
2267,0,6,4,0,0xCA,2:3:4,3,1,no,0,0,0,weapon,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2267,0,6,4,0,0xCA,2:3:4,3,1,no,0,0x40000,0,weapon,5,0x0, NC_SELFDESTRUCTION,Self Destruction
2268,0,6,4,0,0x1,0,4,1,yes,0,0,0,none,0,0x0, NC_SHAPESHIFT,Shape Shift
2269,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0, NC_EMERGENCYCOOL,Emergency Cool
2270,0,6,4,0,0x3,7,1,1,yes,0,0,0,none,0,0x0, NC_INFRAREDSCAN,Infrared Scan
@ -1102,7 +1103,7 @@
2329,-2,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0, SR_FALLENEMPIRE,Fallen Empire
2330,-2,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_TIGERCANNON,Tiger Cannon
2331,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0, SR_HELLGATE,Hell Gate
2332,0,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0, SR_RAMPAGEBLASTER,Rampage Blaster
2332,0,6,4,-1,0x2,3,5,1,no,0,0x40000,0,weapon,0,0x0, SR_RAMPAGEBLASTER,Rampage Blaster
2333,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_CRESCENTELBOW,Crescent Elbow
2334,0,6,4,0,0x3,1:1:2:2:3,5,1,no,0,0,0,none,0,0x0, SR_CURSEDCIRCLE,Cursed Circle
2335,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_LIGHTNINGWALK,Lightning Walk
@ -1203,7 +1204,7 @@
2481,11,6,1,-1,0x2,1:2:3:4:5,5,1,yes,0,0,0,weapon,0,0x0, GN_SPORE_EXPLOSION,Spore Explosion //CHECK Data says its element is set to neutral. Need to confirm.
2482,11,6,2,0,0x8,0,5,1,yes,0,0,1,weapon,2,0x0, GN_WALLOFTHORN,Wall of Thorns
2483,11,6,2,0,0x3,4,10,1,yes,0,0x0,0,weapon,0,0x1, GN_CRAZYWEED,Crazy Weed
2484,0,6,2,2,0x2,2,10,1,no,0,0x0,0,weapon,0,0x1, GN_CRAZYWEED_ATK,Crazy Weed Attack
2484,0,6,2,2,0x2,2,10,1,no,0,0x40000,0,weapon,0,0x1, GN_CRAZYWEED_ATK,Crazy Weed Attack
2485,9,6,2,3,0,0,5,1,yes,0,0,0,magic,0,0x0, GN_DEMONIC_FIRE,Demonic Fire
2486,9,6,2,0,0,0,5,1,yes,0,0,0,none,0,0x0, GN_FIRE_EXPANSION,Fire Expansion
2487,9,6,2,0,0,0,1,1,no,0,0,0,none,0,0x0, GN_FIRE_EXPANSION_SMOKE_POWDER,Fire Expansion Smoke Powder
@ -1313,7 +1314,7 @@
5001,1,8,1,-1,0,0,5,3,no,0,0,0,weapon,0,0x0, GC_DARKCROW,Dark Claw
5002,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, RA_UNLIMIT,Unlimited
5003,7,6,1,-1,0x2,4:5:6:7:-1,5,1,no,0,0,0,weapon,0,0x0, GN_ILLUSIONDOPING,Illusion Doping
5004,9,6,2,1,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,weapon,0,0x0, RK_DRAGONBREATH_WATER,Dragon Breath - Water
5004,9,6,2,1,0x42,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0x40000,0,weapon,0,0x0, RK_DRAGONBREATH_WATER,Dragon Breath - Water
5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0,0x0, RK_LUXANIMA,Lux Anima
5006,1,6,2,3,0x2,3,5,1,no,0,0,3,misc,0,0x0, NC_MAGMA_ERUPTION,Magma Eruption
5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0,0x0, WM_FRIGG_SONG,Frigg's Song
@ -1324,10 +1325,10 @@
5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, WL_TELEKINESIS_INTENSE,Intense Telekinesis
5013,0,6,4,0,0x3,0,5,1,no,0,0,0,none,0,0x0, LG_KINGS_GRACE,King's Grace
5014,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, ALL_FULL_THROTTLE,Full Throttle
5015,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP1,Flash Combo Attack Step 1
5016,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP2,Flash Combo Attack Step 2
5017,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP3,Flash Combo Attack Step 3
5018,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0, SR_FLASHCOMBO_ATK_STEP4,Flash Combo Attack Step 4
5015,-2,8,1,-1,0,0,10,-2,no,0,0,0,weapon,0,0x0, SR_FLASHCOMBO_ATK_STEP1,Flash Combo Attack Step 1
5016,-2,8,4,-1,0,0,5,-2,no,0,0x200,0,weapon,0,0x0, SR_FLASHCOMBO_ATK_STEP2,Flash Combo Attack Step 2
5017,-2,6,1,-1,0x42,1:1:1:1:1:2:2:2:2:2,10,1,yes,0,0,0,weapon,0,0x0, SR_FLASHCOMBO_ATK_STEP3,Flash Combo Attack Step 3
5018,0,8,4,-1,0x2,2,5,-3,no,0,0,0,weapon,3,0x0, SR_FLASHCOMBO_ATK_STEP4,Flash Combo Attack Step 4
//****
// Homunculus S
@ -1377,23 +1378,23 @@
//****
// Mercenary Skill Place holders
8201,-1,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0x0, MS_BASH,Bash
8202,0,6,4,3,0x2,2,10,1,no,0,0,0,weapon,2,0x0, MS_MAGNUM,Magnum_Break
8202,0,6,4,3,0x2,2,10,1,no,0,0x40000,0,weapon,2,0x0, MS_MAGNUM,Magnum_Break
8203,-2,6,1,-1,0x2,1,10,1,no,0,0,0,weapon,1,0x0, MS_BOWLINGBASH,Bowling_Bash
8204,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, MS_PARRYING,Parry
8205,0,6,4,0,0,0,10,1,no,0,0,0,weapon,0,0x0, MS_REFLECTSHIELD,Shield_Reflect
8206,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0, MS_BERSERK,Frenzy
8207,-9,8,1,-1,0,0,10,2,no,0,0,0,weapon,0,0x80, MA_DOUBLE,Double_Strafe
8208,-9,6,2,-1,0x2,2,10,1,no,0,0x0,0,weapon,2,0x81, MA_SHOWER,Arrow_Shower
8208,-9,6,2,-1,0x2,2,10,1,no,0,0x40000,0,weapon,2,0x81, MA_SHOWER,Arrow_Shower
8209,3,6,2,0,0x1,0,5,1,no,0,0x80,0,misc,6:7:8:9:10,0x0, MA_SKIDTRAP,Skid_Trap
8210,3,6,2,2,0x40,0,5,1,no,0,0x80,0,misc,0,0x0, MA_LANDMINE,Land_Mine
8211,3,6,2,0,0x3,2,5,1,no,0,0x80,0,misc,0,0x0, MA_SANDMAN,Sandman
8212,3,6,2,1,0x42,1,5,1,no,0,0x80,0,weapon,0,0x0, MA_FREEZINGTRAP,Freezing_Trap
8213,2,6,32,0,0x1,0,1,1,no,0,0,0,misc,0,0x0, MA_REMOVETRAP,Remove_Trap
8213,2,6,32,0,0x1,0,1,1,no,0,0x40000,0,misc,0,0x0, MA_REMOVETRAP,Remove_Trap
8214,-9,6,1,-1,0x2,0,1,1,no,0,0x1,0,weapon,6,0x80, MA_CHARGEARROW,Arrow_Repel
8215,9,8,1,-1,0,2,5,1,yes,0,0,13,weapon,0,0x0, MA_SHARPSHOOTING,Focused_Arrow_Strike
8216,-2,8,1,-1,0,0,10,3,no,0,0,0,weapon,0,0x0, ML_PIERCE,Pierce
8217,-2,6,1,-1,0x1,0,10,1,no,0,0,0,weapon,3,0x0, ML_BRANDISH,Brandish_Spear
8218,5,8,1,-1,0x20,0,5,5,no,0,0,0,weapon,0,0x0, ML_SPIRALPIERCE,Spiral_Pierce
8218,5,8,1,-1,0x20,0,5,5,no,0,0x40000,0,weapon,0,0x0, ML_SPIRALPIERCE,Spiral_Pierce
8219,0,6,4,0,0x1,0,5,1,no,0,0,0,weapon,0,0x0, ML_DEFENDER,Defending_Aura
8220,0,6,4,0,0x1,0,10,1,no,0,0,0,weapon,0,0x0, ML_AUTOGUARD,Guard
8221,7:8:9:10:11,6,16,0,0x1,0,5,1,yes,0,0x600,0,none,0,0x0, ML_DEVOTION,Sacrifice

View File

@ -759,7 +759,7 @@
2327,0,0,8:9:10:11:12,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_SKYNETBLOW
2328,0,0,36:40:44:48:52,0,0,0,99,0,0,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_EARTHSHAKER
2329,0,0,20:30:40:50:60,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FALLENEMPIRE
2330,0,0,1:2:3:4:5:6:7:8:9:10,0,0,0,99,0,0,none,SC_EXPLOSIONSPIRITS,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_TIGERCANNON
2330,0,0,1:2:3:4:5:6:7:8:9:10,-12:-14:-16:-18:-20:-22:-24:-26:-28:-30,-6:-7:-8:-9:-10:-11:-12:-13:-14:-15,0,99,0,0,none,SC_EXPLOSIONSPIRITS,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_TIGERCANNON
2331,0,0,1,0,-11:-12:-13:-14:-15:-16:-17:-18:-19:-20,0,99,0,0,none,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_HELLGATE
2332,0,0,150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_RAMPAGEBLASTER
2333,0,0,80,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_CRESCENTELBOW
@ -971,10 +971,10 @@
5012,0,0,100:150:200:250:300,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_TELEKINESIS_INTENSE
5013,0,0,200:180:160:140:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_KINGS_GRACE
5014,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ALL_FULL_THROTTLE
5015,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FLASHCOMBO_ATK_STEP1 //All 4 steps are using temp req SP values for now.
5016,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FLASHCOMBO_ATK_STEP2
5017,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FLASHCOMBO_ATK_STEP3
5018,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FLASHCOMBO_ATK_STEP4
5015,0,0,0,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FLASHCOMBO_ATK_STEP1 //All 4 steps are using temp req SP values for now.
5016,0,0,0,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FLASHCOMBO_ATK_STEP2
5017,0,0,0,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FLASHCOMBO_ATK_STEP3
5018,0,0,0,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FLASHCOMBO_ATK_STEP4
8001,0,0,13:16:19:22:25,0,0,0,99,0,0,none,0,0,545,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //HLIF_HEAL
8002,0,0,20:25:30:35:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //HLIF_AVOID

View File

@ -288,6 +288,9 @@ bonus4 bAddEffOnSkill,sk,eff,n,y; Adds a n/100% chance to cause status eff when
ATF_SELF = trigger effect on self
ATF_TARGET = trigger effect on target
bonus2 bComaClass,c,n; Adds a n/100% chance to cause Coma when attacking a target of class c (regardless the type of attack)
bonus2 bComaRace,r,n; Adds a n/100% chance to cause Coma when attacking a target of race r (regardless the type of attack)
bonus2 bWeaponComaEle,e,n; Adds a n/100% chance to cause Coma when attacking a target of element e with a normal attack
bonus2 bWeaponComaClass,c,n; Adds a n/100% chance to cause Coma when attacking a target of class c with a normal attack
bonus2 bWeaponComaRace,r,n; Adds a n/100% chance to cause Coma when attacking a target of race r with a normal attack
@ -332,8 +335,8 @@ bonus bSPDrainValue,n; Heals +n SP with a normal attack
bonus2 bSPDrainValueRace,r,n; Heals +n SP when attacking a monster of race r with normal attack
bonus2 bSpDrainValueClass,c,n; Heals +n SP when attacking a monster of class c with normal attack
bonus2 bHPDrainRate,x,n; Adds a x/10% chance to drain n% HP when attacking
bonus2 bSPDrainRate,x,n; Adds a x/10% chance to drain n% SP when attacking
bonus2 bHPDrainRate,x,n; Adds a x/10% chance to drain n% HP from inflicted damage when attacking
bonus2 bSPDrainRate,x,n; Adds a x/10% chance to drain n% SP from inflicted damage when attacking
HP/SP vanish
------------
@ -345,19 +348,6 @@ bonus3 bSPVanishRaceRate,r,x,n; Add a x/100% chance of decreasing enemy's SP am
HP/SP gain
------------
bonus bHPGainAttack,n; Heals +n HP with a normal attack
bonus bSPGainAttack,n; Heals +n SP with a normal attack
bonus bHPGainAttackRate,n; Heals +n% HP of inflicted damage on every hit when attacking an enemy
bonus bSPGainAttackRate,n; Heals +n% SP of inflicted damage on every hit when attacking an enemy
bonus2 bHPGainAttackRate,x,n; Has chance x/10% to heals +n% HP of inflicted damage on every hit when attacking an enemy
bonus2 bSPGainAttackRate,x,n; Has chance x/10% to heals +n% SP of inflicted damage on every hit when attacking an enemy
bonus2 bHPGainRaceAttack,r,n; Heals +n HP on every hit when attacking an enemy of race r
bonus2 bSPGainRaceAttack,r,n; Heals +n SP on every hit when attacking an enemy of race r
bonus2 bHPGainRaceAttackRate,r,n; Heals +n% HP of inflicted damage on every hit when attacking an enemy of race r
bonus2 bSPGainRaceAttackRate,r,n; Heals +n% SP of inflicted damage on every hit when attacking an enemy of race r
bonus bHPGainValue,n; Heals +n HP when killing an enemy with a physical attack
bonus bSPGainValue,n; Heals +n SP when killing an enemy with a physical attack
bonus2 bSPGainRace,r,n; Heals +n SP when killing an enemy of race r with a physical attack

View File

@ -2632,7 +2632,7 @@ Currently the max packet size is 0xFFFF (see 'WFIFOSET()' in 'src/common/socket.
- cmd : packet identification (0x2b0e)
- aid
- name
- operation_type
- operation_type: 1:block account, 2:ban account, 3:unblock account, 4:unban account, 5:changesex, 6:VIP, 7:changecharsex
- timediff
- val1
- val2

View File

@ -3784,6 +3784,13 @@ by default green
---------------------------------------
*showscript "<message>"{,<GID>};
Makes attached player or GID says a message like shouting a skill name, the message
will be seen to everyone around but not in chat window.
---------------------------------------
*warp "<map name>",<x>,<y>;
This command will take the invoking character to the specified map, and if
@ -4131,6 +4138,20 @@ they will also have their skills reset upon 'changesex'.
---------------------------------------
*changecharsex({<char_id>});
This command will change the gender of the attached character. If it
was male, it will become female, if it was female, it will become male. The
change will be written to the character server, the player will receive the
message: "Need disconnection to perform change-sex request..." and the player
will be immediately kicked to the login screen. When they log back in, they will
be the opposite sex.
If the character being changed is a Dancer/Gypsy or Bard/Clown class type,
the character will also have their skills reset upon 'changecharsex'.
---------------------------------------
*getexp <base xp>,<job xp>{,<char_id>};
This command will give the invoking character a specified number of base and job

View File

@ -751,8 +751,9 @@ SC_SPIRIT ()
val1:
SC_COMA ()
desc:
val1:
desc: Vanish HP to 1 and SP to 0
val1: (meaningless)
val2: If 1 means do not remove SP
SC_INTRAVISION ()
desc:

View File

@ -10699,16 +10699,16 @@ function script F_Cat_Hard_Biscuit { //11536
heal -100,0;
break;
case 2:
unittalk getcharid(3),"Huuph...! Yucky..! Wa, Water...!!";
showscript "Huuph...! Yucky..! Wa, Water...!!";
sc_start SC_Stun,3000,0,5000,0;
break;
case 3:
unittalk getcharid(3),"Yeeyuck...!! This is rotten!!";
showscript "Yeeyuck...!! This is rotten!!";
sc_start SC_POISON,50000,0;
break;
case 4:
specialeffect2 EF_HIT4;
unittalk getcharid(3),"Arrrrrgggg...!! Bu, Bu, Bugggggg!!!!!";
showscript "Arrrrrgggg...!! Bu, Bu, Bugggggg!!!!!";
getitem 11537,1; //Rice_Weevil_Bug
break;
}
@ -10719,32 +10719,32 @@ function script F_Rice_Weevil_Bug { //11537
switch (rand(1,6)) {
case 1:
specialeffect2 EF_POISONHIT;
unittalk getcharid(3),"Errrgg!!! This is so... bitter....!!";
showscript "Errrgg!!! This is so... bitter....!!";
heal 0,-50;
break;
case 2:
specialeffect2 EF_HEAL;
unittalk getcharid(3),"....well, at least this is good for my health.";
showscript "....well, at least this is good for my health.";
percentheal 15,0;
break;
case 3:
specialeffect2 EF_POISONHIT;
unittalk getcharid(3),"Phewphew!! Argh.... Is this poisoned or what?!";
showscript "Phewphew!! Argh.... Is this poisoned or what?!";
heal 0,-100;
break;
case 4:
specialeffect2 EF_POISONHIT;
unittalk getcharid(3),"Whasdfhwkljhrtklwert....!!";
showscript "Whasdfhwkljhrtklwert....!!";
heal 0,-200;
break;
case 5:
specialeffect2 EF_HEAL;
unittalk getcharid(3),"It's ok, no one saw me yet...";
showscript "It's ok, no one saw me yet...";
percentheal 10,0;
break;
case 6:
specialeffect2 EF_HEAL;
unittalk getcharid(3),"I really need something to eat... ?? Sorry, little buggy.";
showscript "I really need something to eat... ?? Sorry, little buggy.";
percentheal 5,0;
break;
}

View File

@ -513,7 +513,7 @@ REPLACE INTO `item_db` VALUES (1128,'Hae_Dong_Gum_','Haedonggum',5,50000,NULL,90
REPLACE INTO `item_db` VALUES (1129,'Flamberge','Flamberge',5,60000,NULL,1500,150,NULL,1,0,0x00004080,7,2,2,3,27,1,2,NULL,NULL,NULL);
REPLACE INTO `item_db` VALUES (1130,'Nagan','Nagan',5,20,NULL,500,120,NULL,1,0,0x000654E2,7,2,2,4,40,1,2,'skill "TF_DOUBLE",5; bonus bDoubleRate,25; bonus2 bAddRace,RC_DemiHuman,5; bonus2 bAddRace,RC_Player,5;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1131,'Ice_Falchon','Ice Falchion',5,20,NULL,600,100,NULL,1,0,0x000654E2,7,2,2,4,40,1,2,'bonus bAtkEle,Ele_Water; bonus2 bAddEff,Eff_Freeze,500; bonus2 bAddEff2,Eff_Freeze,10; skill "MG_COLDBOLT",3; bonus3 bAutoSpell,"MG_COLDBOLT",3,100;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1132,'Edge','Edge',5,20,NULL,700,115,NULL,1,0,0x000654E2,7,2,2,4,40,1,2,'bonus2 bAddEff,Eff_Curse,30; bonus2 bWeaponComaClass,Class_Normal,10;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1132,'Edge','Edge',5,20,NULL,700,115,NULL,1,0,0x000654E2,7,2,2,4,40,1,2,'bonus2 bAddEff,Eff_Curse,30; bonus2 bComaClass,Class_Normal,10;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1133,'Fire_Brand','Fireblend',5,20,NULL,500,100,NULL,1,0,0x000654E2,7,2,2,4,40,1,2,'bonus bAtkEle,Ele_Fire; skill "MG_FIREBOLT",3; bonus3 bAutoSpell,"MG_FIREBOLT",3,100;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1134,'Scissores_Sword','Caesar\'s Sword',5,20,NULL,700,140,NULL,1,0,0x000654E2,7,2,2,4,40,1,2,'bonus2 bAddRace,RC_Plant,25; bonus bIgnoreDefRace,RC_Plant;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1135,'Cutlas','Cutlus',5,20,NULL,900,150,NULL,1,0,0x000654E2,7,2,2,4,40,1,2,'skill "SM_BASH",5; bonus bStr,2; bonus bDef,1;',NULL,NULL);
@ -691,11 +691,11 @@ REPLACE INTO `item_db` VALUES (1361,'Two_Handed_Axe_','Two-Handed Axe',5,55000,N
REPLACE INTO `item_db` VALUES (1362,'Two_Handed_Axe__','Two-Handed Axe',5,55000,NULL,2500,185,NULL,1,0,0x000444A2,7,2,34,3,30,1,7,NULL,NULL,NULL);
REPLACE INTO `item_db` VALUES (1363,'Brood_Axe','Bloody Axe',5,20,NULL,4000,170,NULL,1,0,0x000444A2,7,2,34,4,44,1,7,'bonus bStr,10; bonus bSpeedRate,25;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1364,'Great_Axe','Great Axe',5,20,NULL,1800,187,NULL,1,0,0x000444A2,7,2,34,4,44,1,7,'bonus2 bAddSkillBlow,"MC_MAMMONITE",5; bonus2 bAddEff,Eff_Stun,1500;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1365,'Sabbath','Sabbath',5,20,NULL,2300,120,NULL,1,0,0x000444A2,7,2,34,4,44,1,7,'bonus bAtkEle,Ele_Dark; bonus2 bWeaponComaRace,RC_Demon,50; bonus2 bCriticalAddRace,RC_Undead,50;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1365,'Sabbath','Sabbath',5,20,NULL,2300,120,NULL,1,0,0x000444A2,7,2,34,4,44,1,7,'bonus bAtkEle,Ele_Dark; bonus2 bComaRace,RC_Demon,50; bonus2 bCriticalAddRace,RC_Undead,50;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1366,'Right_Epsilon','Light Epsilon',5,20,NULL,2300,180,NULL,1,0,0x000444A2,7,2,34,4,44,1,7,'bonus bAtkEle,Ele_Holy; skill "AL_HEAL",3; bonus2 bAddRace,RC_Demon,3;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1367,'Slaughter','Slaughter',5,20,NULL,2500,120,NULL,1,0,0x000444A2,7,2,34,4,44,1,7,'bonus bAtkEle,Ele_Earth; bonus bIgnoreDefRace,RC_Brute; bonus2 bWeaponComaRace,RC_Brute,40;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1367,'Slaughter','Slaughter',5,20,NULL,2500,120,NULL,1,0,0x000444A2,7,2,34,4,44,1,7,'bonus bAtkEle,Ele_Earth; bonus bIgnoreDefRace,RC_Brute; bonus2 bComaRace,RC_Brute,40;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1368,'Tomahawk','Tomahawk',5,20,NULL,2500,165,NULL,1,0,0x000444A2,7,2,34,4,44,1,7,'bonus bAtkEle,Ele_Wind; skill "ITM_TOMAHAWK",1;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1369,'Guillotine','Guillotine',5,20,NULL,3000,215,NULL,1,0,0x000444A2,7,2,34,4,44,1,7,'bonus2 bWeaponComaRace,RC_DemiHuman,30; bonus2 bWeaponComaRace,RC_Player,30; bonus2 bSPGainRaceAttack,RC_DemiHuman,2; bonus2 bSPGainRaceAttack,RC_Player,2; bonus2 bSPGainRace,RC_DemiHuman,20; bonus2 bSPGainRace,RC_Player,20;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1369,'Guillotine','Guillotine',5,20,NULL,3000,215,NULL,1,0,0x000444A2,7,2,34,4,44,1,7,'bonus2 bComaRace,RC_DemiHuman,30; bonus2 bComaRace,RC_Player,30; bonus2 bSPDrainValueRace,RC_DemiHuman,2; bonus2 bSPDrainValueRace,RC_Player,2; bonus2 bSPGainRace,RC_DemiHuman,20; bonus2 bSPGainRace,RC_Player,20;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1370,'Doom_Slayer','Doom Slayer',5,20,NULL,6000,10,NULL,1,0,0x000444A2,7,2,34,4,80,1,7,'bonus bAspdRate,-40; bonus bUseSPrate,100; if(readparam(bStr)>=95){ bonus bBaseAtk,340; bonus2 bAddEff,Eff_Stun,3000; bonus bBreakArmorRate,500; }',NULL,NULL);
REPLACE INTO `item_db` VALUES (1371,'Doom_Slayer_','Doom Slayer',5,20,NULL,6000,10,NULL,1,1,0x000444A2,7,2,34,4,80,1,7,'bonus bAspdRate,-40; bonus bUseSPrate,100; if(readparam(bStr)>=95){ bonus bBaseAtk,340; bonus2 bAddEff,Eff_Stun,3000; bonus bBreakArmorRate,500; }',NULL,NULL);
REPLACE INTO `item_db` VALUES (1372,'Right_Epsilon_C','Light Epsilon',5,1,NULL,0,229,NULL,1,0,0x000444A2,7,2,34,4,1,0,7,'bonus bAtkEle,Ele_Holy; skill "AL_HEAL",3; bonus2 bAddRace,RC_Demon,3; bonus bStr,10; bonus bSpeedRate,25;',NULL,NULL);
@ -817,7 +817,7 @@ REPLACE INTO `item_db` VALUES (1522,'Stunner','Stunner',5,60000,NULL,2000,140,NU
REPLACE INTO `item_db` VALUES (1523,'Spike','Spike',5,20,NULL,700,85,NULL,1,0,0x00008110,7,2,2,4,40,1,8,'bonus bCritical,40; bonus bDefRate,-67; bonus bDef2Rate,-67;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1524,'Golden_Mace','Golden Mace',5,20,NULL,800,110,NULL,1,1,0x00008110,7,2,2,4,40,1,8,'bonus2 bAddRace,RC_Undead,10; bonus bUnbreakableWeapon,0;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1525,'Long_Mace','Long Mace',5,20,NULL,800,135,NULL,3,0,0x00008110,7,2,2,4,40,1,8,'bonus bLongAtkDef,10;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1526,'Slash','Slash',5,20,NULL,1000,145,NULL,1,0,0x00008110,7,2,2,4,40,1,8,'bonus2 bAddRace,RC_Undead,15; bonus2 bWeaponComaRace,RC_Undead,10; bonus2 bExpAddRace,RC_Undead,5;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1526,'Slash','Slash',5,20,NULL,1000,145,NULL,1,0,0x00008110,7,2,2,4,40,1,8,'bonus2 bAddRace,RC_Undead,15; bonus2 bComaRace,RC_Undead,10; bonus2 bExpAddRace,RC_Undead,5;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1527,'Quadrille','Quadrille',5,20,NULL,900,165,NULL,1,0,0x00008110,7,2,2,4,40,1,8,'bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; bonus2 bAddEle,Ele_Earth,10;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1528,'Grand_Cross','Grand Cross',5,20,NULL,1500,140,NULL,1,0,0x00008110,7,2,2,4,40,1,8,'bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1529,'Iron_Driver','Iron Driver',5,20,NULL,3000,155,NULL,2,0,0x00008100,7,2,2,3,78,1,8,NULL,NULL,NULL);
@ -856,7 +856,7 @@ REPLACE INTO `item_db` VALUES (1561,'Hardback','Hardcover Book',5,20,NULL,1500,1
REPLACE INTO `item_db` VALUES (1562,'Bible_Of_Battlefield','Battlefield Textbook',5,20,NULL,700,110,NULL,1,1,0x00410100,7,2,2,4,80,0,15,'bonus bInt,3; bonus3 bAutoSpell,"AL_BLESSING",3+(getskilllv("AL_BLESSING")>3)*(getskilllv("AL_BLESSING")-3),20;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1563,'Diary_Of_Great_Sage_C','Sage\'s Diary',5,1,NULL,0,135,NULL,1,2,0x00410100,7,2,2,3,1,0,15,'bonus bMatkRate,20; bonus bAspdRate,5;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1564,'Encyclopedia','Encyclopedia',5,20,NULL,2000,110,NULL,1,2,0x00410100,7,2,2,3,70,1,15,'bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10);',NULL,NULL);
REPLACE INTO `item_db` VALUES (1565,'Death_Note','Ledger of Death',5,20,NULL,1000,137,NULL,1,2,0x00410100,7,2,2,4,85,1,15,'bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus2 bWeaponComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1565,'Death_Note','Ledger of Death',5,20,NULL,1000,137,NULL,1,2,0x00410100,7,2,2,4,85,1,15,'bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bComaRace,RC_DemiHuman,10; bonus2 bComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1566,'Diary_Of_Great_Basil','Diary Of Great Basil',5,20,NULL,0,120,NULL,1,0,0x00410100,7,2,2,1,0,0,15,'bonus2 bAddClass,Class_All,50;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1567,'Hardback_C','Refined Hardcover Book',5,1,NULL,0,168,NULL,1,0,0x00410100,7,2,2,4,0,0,15,'bonus bStr,5; bonus bDex,2; bonus bMatkRate,20;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1568,'Book_Of_Billows_','Book of Billows',5,35000,NULL,750,90,NULL,1,3,0x00410100,7,2,2,3,27,1,15,'bonus bAtkEle,Ele_Water;',NULL,NULL);
@ -870,7 +870,7 @@ REPLACE INTO `item_db` VALUES (1575,'BF_Book2','Valorous Battle Strategy Book',5
REPLACE INTO `item_db` VALUES (1576,'Krieger_Book1','Glorious Tablet',5,20,NULL,0,90,NULL,1,0,0x00410100,7,2,2,4,80,1,15,'bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) { bonus2 bAddRace,RC_DemiHuman,(getrefine()-4)*(getrefine()-4); bonus2 bAddRace,RC_Player,(getrefine()-4)*(getrefine()-4); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(getrefine()>8) autobonus "{ bonus bBaseAtk,200; }",30,3000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }";',NULL,NULL);
REPLACE INTO `item_db` VALUES (1577,'Krieger_Book2','Glorious Apocalypse',5,20,NULL,0,90,NULL,1,0,0x00410100,7,2,2,4,80,1,15,'bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; if(getrefine()>5) bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; if(getrefine()>8) { bonus bMatkRate,5; bonus bCastrate,-5; bonus bDelayRate,-5; }',NULL,NULL);
REPLACE INTO `item_db` VALUES (1578,'Book_Of_Prayer','Book Of Prayer',5,20,NULL,0,140,NULL,1,0,0x00410100,7,2,2,3,0,0,15,'bonus bVit,2; bonus bMdef,2; bonus bMaxSPrate,10;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1579,'Death_Note_M','Book of the Dead',5,20,NULL,1000,137,NULL,1,2,0x00410100,7,2,2,4,85,1,15,'bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus2 bWeaponComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1579,'Death_Note_M','Book of the Dead',5,20,NULL,1000,137,NULL,1,2,0x00410100,7,2,2,4,85,1,15,'bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bComaRace,RC_DemiHuman,10; bonus2 bComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1580,'Encyclopedia_C','Giant Encyclopedia',5,0,NULL,0,145,NULL,1,0,0x00410100,7,2,2,3,0,0,15,'bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); bonus2 bAddSize,Size_All,40;',NULL,NULL);
REPLACE INTO `item_db` VALUES (1581,'F_Diary_Of_Great_Sage_C','Diary Of Great Sage',5,1,NULL,0,135,NULL,1,2,0x00410100,7,2,2,3,1,0,15,NULL,NULL,NULL);
REPLACE INTO `item_db` VALUES (1582,'E_Diary_Of_Great_Sage_C','Diary Of Great Sage',5,1,NULL,0,135,NULL,1,2,0x00410100,7,2,2,3,1,0,15,NULL,NULL,NULL);
@ -1448,7 +1448,7 @@ REPLACE INTO `item_db` VALUES (2550,'Fisher\'s_Muffler','Fisher\'s Muffler',4,20
REPLACE INTO `item_db` VALUES (2551,'Rider_Insignia_M','Crest of the Rider',4,20,NULL,500,NULL,4,NULL,1,0xFFFFFFFE,2,2,4,NULL,55,1,0,'bonus bAgi,2;',NULL,NULL);
REPLACE INTO `item_db` VALUES (2552,'Mithril_Magic_Cape_M','Mithril Magic Manteau',4,20,NULL,400,NULL,3,NULL,1,0x00098B1C,2,2,4,NULL,70,1,0,'bonus bMdef,3; bonus5 bAutoSpellWhenHit,"NPC_ANTIMAGIC",6,200,BF_MAGIC,0;',NULL,NULL);
REPLACE INTO `item_db` VALUES (2553,'Dragon_Manteau','Dragon Manteau',4,20,NULL,1000,NULL,5,NULL,1,0xFFFFFFFE,2,2,4,NULL,0,1,0,'bonus bAgi,1; bonus bMdef,5;',NULL,NULL);
REPLACE INTO `item_db` VALUES (2554,'Piece_Of_Angent_Skin','Nydhorgg\'s Shadow Garb',4,20,NULL,400,NULL,5,NULL,1,0xFFFFFFFE,2,2,4,NULL,90,1,0,'bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus2 bSPGainAttackRate,100,1; bonus bMdef,3;',NULL,NULL);
REPLACE INTO `item_db` VALUES (2554,'Piece_Of_Angent_Skin','Nydhorgg\'s Shadow Garb',4,20,NULL,400,NULL,5,NULL,1,0xFFFFFFFE,2,2,4,NULL,90,1,0,'bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus2 bSPDrainRate,10,1; bonus bMdef,3;',NULL,NULL);
# Accessories
#===================================================================
REPLACE INTO `item_db` VALUES (2601,'Ring','Ring',4,30000,NULL,100,NULL,0,NULL,0,0xFFFFFFFE,7,2,136,NULL,20,0,0,'bonus bStr,2;',NULL,NULL);
@ -1828,7 +1828,7 @@ REPLACE INTO `item_db` VALUES (4168,'Dark_Lord_Card','Dark Lord Card',6,20,NULL,
REPLACE INTO `item_db` VALUES (4169,'Dark_Illusion_Card','Dark Illusion Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,-10; bonus bMaxSPrate,-10; bonus bCastrate,-10;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4170,'Dark_Frame_Card','Dark Frame Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus2 bAddEffWhenHit,Eff_Stone,600;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4171,'Dark_Priest_Card','Dark Priest Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bSPVanishRate,50,10; if(BaseJob==Job_Sage) bonus bSPDrainValue,1;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4172,'The_Paper_Card','The Paper Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,20; bonus bSPGainAttack,-1;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4172,'The_Paper_Card','The Paper Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,20; bonus bSPDrainValue,-1;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4173,'Demon_Pungus_Card','Demon Pungus Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus2 bAddEffWhenHit,Eff_Sleep,600;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4174,'Deviling_Card','Deviling Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,50; bonus2 bSubEle,Ele_Water,-50; bonus2 bSubEle,Ele_Earth,-50; bonus2 bSubEle,Ele_Fire,-50; bonus2 bSubEle,Ele_Wind,-50; bonus2 bSubEle,Ele_Poison,-50; bonus2 bSubEle,Ele_Holy,-50; bonus2 bSubEle,Ele_Dark,-50; bonus2 bSubEle,Ele_Ghost,-50; bonus2 bSubEle,Ele_Undead,-50;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4175,'Poison_Toad_Card','Poisonous Toad Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAutoSpell,"TF_POISON",1,20; bonus2 bAddSkillBlow,52,5;',NULL,NULL);
@ -1932,12 +1932,12 @@ REPLACE INTO `item_db` VALUES (4272,'Dancing_Dragon_Card','Zhu Po Long Card',6,2
REPLACE INTO `item_db` VALUES (4273,'Shellfish_Card','Shell Fish Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,5; bonus2 bAddDamageClass,1073,30;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4274,'Zombie_Master_Card','Zombie Master Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bSPGainRace,RC_Undead,5;',NULL,'heal 0,-5;');
REPLACE INTO `item_db` VALUES (4275,'Zombie_Prisoner_Card','Zombie Prisoner Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_Undead,-20; bonus2 bExpAddRace,RC_Undead,10;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4276,'Lord_Of_Death_Card','Lord of The Dead Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus3 bAddEff,Eff_Stun,500,ATF_SHORT; bonus3 bAddEff,Eff_Curse,500,ATF_SHORT; bonus3 bAddEff,Eff_Silence,500,ATF_SHORT; bonus3 bAddEff,Eff_Poison,500,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,500,ATF_SHORT; bonus2 bWeaponComaClass,Class_Normal,1;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4276,'Lord_Of_Death_Card','Lord of The Dead Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus3 bAddEff,Eff_Stun,500,ATF_SHORT; bonus3 bAddEff,Eff_Curse,500,ATF_SHORT; bonus3 bAddEff,Eff_Silence,500,ATF_SHORT; bonus3 bAddEff,Eff_Poison,500,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,500,ATF_SHORT; bonus2 bComaClass,Class_Normal,1;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4277,'Zherlthsh_Card','Zealotus Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus bLuk,2; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10; bonus2 bSkillAtk,"DC_THROWARROW",10;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4278,'Gibbet_Card','Gibbet Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'if(getrefine()<6) bonus bMdef,5;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4279,'Deleter_Card','Earth Deleter Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bSPrecovRate,-100; bonus bSPGainValue,10;',NULL,'heal 0,-100;');
REPLACE INTO `item_db` VALUES (4280,'Geographer_Card','Geographer Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus3 bAutoSpellWhenHit,"AL_BLESSING",2+8*(getskilllv("AL_BLESSING")==10),30;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4281,'Zipper_Bear_Card','Zipper Bear Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,30; bonus bSPGainAttack,-1; if(BaseClass==Job_Merchant) bonus bUnbreakableWeapon,0;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4281,'Zipper_Bear_Card','Zipper Bear Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,30; bonus bSPDrainValue,-1; if(BaseClass==Job_Merchant) bonus bUnbreakableWeapon,0;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4282,'Tengu_Card','Tengu Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus2 bAddMonsterDropItemGroup,IG_Recovery,600;',NULL,NULL);
REPLACE INTO `item_db` VALUES (4283,'Greatest_General_Card','Greatest General Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAutoSpell,"MO_CALLSPIRITS",5,2+18*(BaseClass==Job_Acolyte);',NULL,NULL);
REPLACE INTO `item_db` VALUES (4284,'Chepet_Card','Chepet Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus4 bAutoSpell,"AL_HEAL",5,50,1;',NULL,NULL);
@ -5503,7 +5503,7 @@ REPLACE INTO `item_db` VALUES (13309,'Huuma_Giant_Wheel_C','Huuma Giant Wheel Sh
REPLACE INTO `item_db` VALUES (13400,'Cutlas_','Cutlus',5,20,NULL,900,150,NULL,1,1,0x000654E2,7,2,2,4,40,1,2,'skill "SM_BASH",5; bonus bStr,2; bonus bDef,1;',NULL,NULL);
REPLACE INTO `item_db` VALUES (13401,'Excalibur_C','Excalibur',5,1,NULL,0,199,NULL,1,0,0x000654E2,7,2,2,4,1,0,2,'bonus bInt,10; bonus bLuk,10; bonus bAtkEle,Ele_Holy;',NULL,NULL);
REPLACE INTO `item_db` VALUES (13402,'Cutlas_C','Cutlus',5,2,NULL,0,185,NULL,1,0,0x000654E2,7,2,2,4,0,0,2,'skill "SM_BASH",5; bonus bStr,2; bonus bDef,1;',NULL,NULL);
REPLACE INTO `item_db` VALUES (13403,'Solar_Sword_C','Solar Sword',5,2,NULL,0,120,NULL,1,0,0x000654E2,7,2,2,4,0,0,2,'bonus bAtkEle,Ele_Fire; bonus bHPGainAttackRate,1; bonus2 bSPLossRate,15,10000;',NULL,NULL);
REPLACE INTO `item_db` VALUES (13403,'Solar_Sword_C','Solar Sword',5,2,NULL,0,120,NULL,1,0,0x000654E2,7,2,2,4,0,0,2,'bonus bAtkEle,Ele_Fire; bonus bHPDrainRate,1; bonus2 bSPLossRate,15,10000;',NULL,NULL);
REPLACE INTO `item_db` VALUES (13404,'Platinum_Shotel','Platinum Shotel',5,20,NULL,1500,130,NULL,1,1,0x000654E2,7,2,2,4,55,1,2,'bonus bCritical,50;',NULL,NULL);
REPLACE INTO `item_db` VALUES (13405,'Curved_Sword','Curved Sword',5,20,NULL,800,125,NULL,1,2,0x000654E2,7,2,2,4,55,1,2,'bonus bAspdRate,10; bonus2 bAddEff,Eff_Curse,300;',NULL,NULL);
REPLACE INTO `item_db` VALUES (13406,'Edger','Edger',5,20,NULL,0,120,NULL,1,0,0x000654E2,7,2,2,1,0,0,2,'bonus2 bAddClass,Class_All,50;',NULL,NULL);

View File

@ -196,11 +196,11 @@ REPLACE INTO `item_db_re` VALUES (667,'Gift_Box_4','Gift Box',2,1000,NULL,200,NU
REPLACE INTO `item_db_re` VALUES (668,'Handsei','Red Envelope',2,0,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'set Zeny,Zeny+rand(1000,10000);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (669,'Rice_Cake_Soup','Tempting Rice-Cake Soup',0,500,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'percentheal -100,-100;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (670,'Gold_Coin_Moneybag','Bag of Gold Coins',3,100000,NULL,400,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (671,'Gold_Coin','Gold Coin',3,10000,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/*goldpoint++; (For Roulette game)*/',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (671,'Gold_Coin','Gold Coin',2,10000,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'RouletteGold++;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (672,'Copper_Coin_Moneybag','Bag of Bronze Coins',3,1000,NULL,400,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (673,'Copper_Coin','Bronze Coin',3,100,NULL,40,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (673,'Copper_Coin','Bronze Coin',2,100,NULL,40,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'RouletteBronze++;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (674,'Mithril_Coin','Mithril Coin',3,5000,NULL,40,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (675,'Silver_Coin','Silver Coin',3,5000,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/*silverpoint++; (For Roulette game)*/',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (675,'Silver_Coin','Silver Coin',2,5000,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'RouletteSilver++;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (676,'Silver_Coin_Moneybag','Bag of Silver Coins',3,50000,NULL,400,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (677,'White_Gold_Coin','Platinum Coin',3,2000,NULL,40,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (678,'Poison_Bottle','Poison Bottle',2,5000,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'if(Class == Job_Assassin_Cross || Class == Job_Guillotine_Cross || Class == Job_Guillotine_Cross_T) { sc_start SC_DPOISON,60000,0; sc_start SC_ASPDPOTION3,60000,9; } else percentheal -100,-100;',NULL,NULL);
@ -514,7 +514,7 @@ REPLACE INTO `item_db_re` VALUES (1128,'Hae_Dong_Gum_','Haedonggum',5,50000,NULL
REPLACE INTO `item_db_re` VALUES (1129,'Flamberge','Flamberge',5,60000,NULL,1500,'150',NULL,1,0,0x00004080,63,2,2,3,'27',1,2,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1130,'Nagan','Nagan',5,20,NULL,500,'120',NULL,1,0,0x000654E2,63,2,2,4,'40',1,2,'skill "TF_DOUBLE",5; bonus bDoubleRate,25; bonus2 bAddRace,RC_DemiHuman,5; bonus2 bAddRace,RC_Player,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1131,'Ice_Falchon','Ice Falchion',5,20,NULL,600,'100',NULL,1,0,0x000654E2,63,2,2,4,'40',1,2,'bonus bAtkEle,Ele_Water; bonus2 bAddEff,Eff_Freeze,500; bonus2 bAddEff2,Eff_Freeze,10; skill "MG_COLDBOLT",3; bonus3 bAutoSpell,"MG_COLDBOLT",3,100;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1132,'Edge','Edge',5,20,NULL,700,'115',NULL,1,0,0x000654E2,63,2,2,4,'40',1,2,'bonus2 bAddEff,Eff_Curse,30; bonus2 bWeaponComaClass,Class_Normal,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1132,'Edge','Edge',5,20,NULL,700,'115',NULL,1,0,0x000654E2,63,2,2,4,'40',1,2,'bonus2 bAddEff,Eff_Curse,30; bonus2 bComaClass,Class_Normal,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1133,'Fire_Brand','Fireblend',5,20,NULL,500,'100',NULL,1,0,0x000654E2,63,2,2,4,'40',1,2,'bonus bAtkEle,Ele_Fire; skill "MG_FIREBOLT",3; bonus3 bAutoSpell,"MG_FIREBOLT",3,100;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1134,'Scissores_Sword','Caesar\'s Sword',5,20,NULL,700,'140',NULL,1,0,0x000654E2,63,2,2,4,'40',1,2,'bonus2 bAddRace,RC_Plant,25; bonus bIgnoreDefRace,RC_Plant;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1135,'Cutlas','Cutlus',5,20,NULL,900,'150',NULL,1,0,0x000654E2,63,2,2,4,'40',1,2,'skill "SM_BASH",5; bonus bStr,2; bonus bDef,1;',NULL,NULL);
@ -718,11 +718,11 @@ REPLACE INTO `item_db_re` VALUES (1361,'Two_Handed_Axe_','Two-Handed Axe',5,5500
REPLACE INTO `item_db_re` VALUES (1362,'Two_Handed_Axe__','Two-Handed Axe',5,55000,NULL,2500,'185',NULL,1,0,0x000444A2,63,2,34,3,'30',1,7,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1363,'Brood_Axe','Bloody Axe',5,20,NULL,4000,'170',NULL,1,0,0x000444A2,63,2,34,4,'44',1,7,'bonus bStr,10; bonus bSpeedRate,25;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1364,'Great_Axe','Great Axe',5,20,NULL,1800,'187',NULL,1,0,0x000444A2,63,2,34,4,'44',1,7,'bonus2 bAddSkillBlow,"MC_MAMMONITE",5; bonus2 bAddEff,Eff_Stun,1500;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1365,'Sabbath','Sabbath',5,20,NULL,2300,'120',NULL,1,0,0x000444A2,63,2,34,4,'44',1,7,'bonus bAtkEle,Ele_Dark; bonus2 bWeaponComaRace,RC_Demon,50; bonus2 bCriticalAddRace,RC_Undead,50;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1365,'Sabbath','Sabbath',5,20,NULL,2300,'120',NULL,1,0,0x000444A2,63,2,34,4,'44',1,7,'bonus bAtkEle,Ele_Dark; bonus2 bComaRace,RC_Demon,50; bonus2 bCriticalAddRace,RC_Undead,50;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1366,'Right_Epsilon','Light Epsilon',5,20,NULL,2300,'180',NULL,1,0,0x000444A2,63,2,34,4,'44',1,7,'bonus bAtkEle,Ele_Holy; skill "AL_HEAL",3; bonus2 bAddRace,RC_Demon,3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1367,'Slaughter','Slaughter',5,20,NULL,2500,'120',NULL,1,0,0x000444A2,63,2,34,4,'44',1,7,'bonus bAtkEle,Ele_Earth; bonus bIgnoreDefRace,RC_Brute; bonus2 bWeaponComaRace,RC_Brute,40;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1367,'Slaughter','Slaughter',5,20,NULL,2500,'120',NULL,1,0,0x000444A2,63,2,34,4,'44',1,7,'bonus bAtkEle,Ele_Earth; bonus bIgnoreDefRace,RC_Brute; bonus2 bComaRace,RC_Brute,40;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1368,'Tomahawk','Tomahawk',5,20,NULL,2500,'165',NULL,1,0,0x000444A2,63,2,34,4,'44',1,7,'bonus bAtkEle,Ele_Wind; skill "ITM_TOMAHAWK",1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1369,'Guillotine','Guillotine',5,20,NULL,3000,'215',NULL,1,0,0x000444A2,63,2,34,4,'44',1,7,'bonus2 bWeaponComaRace,RC_DemiHuman,30; bonus2 bWeaponComaRace,RC_Player,30; bonus2 bSPGainRaceAttack,RC_DemiHuman,2; bonus2 bSPGainRaceAttack,RC_Player,2; bonus2 bSPGainRace,RC_DemiHuman,20; bonus2 bSPGainRace,RC_Player,20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1369,'Guillotine','Guillotine',5,20,NULL,3000,'215',NULL,1,0,0x000444A2,63,2,34,4,'44',1,7,'bonus2 bComaRace,RC_DemiHuman,30; bonus2 bComaRace,RC_Player,30; bonus2 bSPDrainValueRace,RC_DemiHuman,2; bonus2 bSPDrainValueRace,RC_Player,2; bonus2 bSPGainRace,RC_DemiHuman,20; bonus2 bSPGainRace,RC_Player,20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1370,'Doom_Slayer','Doom Slayer',5,20,NULL,6000,'10',NULL,1,0,0x000444A2,63,2,34,4,'80',1,7,'bonus bAspdRate,-40; bonus bUseSPrate,100; if(readparam(bStr)>=95){ bonus bBaseAtk,340; bonus2 bAddEff,Eff_Stun,3000; bonus bBreakArmorRate,500; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1371,'Doom_Slayer_','Doom Slayer',5,20,NULL,6000,'10',NULL,1,1,0x000444A2,63,2,34,4,'80',1,7,'bonus bAspdRate,-40; bonus bUseSPrate,100; if(readparam(bStr)>=95){ bonus bBaseAtk,340; bonus2 bAddEff,Eff_Stun,3000; bonus bBreakArmorRate,500; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1372,'Right_Epsilon_C','Light Epsilon',5,1,NULL,0,'229',NULL,1,0,0x000444A2,63,2,34,4,'1',0,7,'bonus bAtkEle,Ele_Holy; skill "AL_HEAL",3; bonus2 bAddRace,RC_Demon,3; bonus bStr,10; bonus bSpeedRate,25; /*Gold PC Room: bonus bBaseAtk,10; bonus bMatk,10; */',NULL,NULL);
@ -867,7 +867,7 @@ REPLACE INTO `item_db_re` VALUES (1522,'Stunner','Stunner',5,60000,NULL,2000,'14
REPLACE INTO `item_db_re` VALUES (1523,'Spike','Spike',5,20,NULL,700,'85',NULL,1,0,0x00008110,63,2,2,4,'40',1,8,'bonus bCritical,40; bonus bDefRate,-67; bonus bDef2Rate,-67;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1524,'Golden_Mace','Golden Mace',5,20,NULL,800,'110',NULL,1,1,0x00008110,63,2,2,4,'40',1,8,'bonus2 bAddRace,RC_Undead,10; bonus bUnbreakableWeapon,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1525,'Long_Mace','Long Mace',5,20,NULL,800,'135',NULL,3,0,0x00008110,63,2,2,4,'40',1,8,'bonus bLongAtkDef,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1526,'Slash','Slash',5,20,NULL,1000,'145',NULL,1,0,0x00008110,63,2,2,4,'40',1,8,'bonus2 bAddRace,RC_Undead,15; bonus2 bWeaponComaRace,RC_Undead,10; bonus2 bExpAddRace,RC_Undead,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1526,'Slash','Slash',5,20,NULL,1000,'145',NULL,1,0,0x00008110,63,2,2,4,'40',1,8,'bonus2 bAddRace,RC_Undead,15; bonus2 bComaRace,RC_Undead,10; bonus2 bExpAddRace,RC_Undead,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1527,'Quadrille','Quadrille',5,20,NULL,900,'165',NULL,1,0,0x00008110,63,2,2,4,'40',1,8,'bonus2 bAddRace,RC_Undead,10; bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; bonus2 bAddEle,Ele_Earth,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1528,'Grand_Cross','Grand Cross',5,20,NULL,1500,'140',NULL,1,0,0x00008110,63,2,2,4,'40',1,8,'bonus bAtkEle,Ele_Holy; skill "PR_TURNUNDEAD",3; bonus3 bAutoSpell,"PR_TURNUNDEAD",3,100; bonus2 bSPDrainValueRace,RC_Undead,1; bonus2 bSPGainRace,RC_Undead,3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1529,'Iron_Driver','Iron Driver',5,20,NULL,3000,'155',NULL,2,0,0x00008100,63,2,2,3,'78',1,8,NULL,NULL,NULL);
@ -907,7 +907,7 @@ REPLACE INTO `item_db_re` VALUES (1561,'Hardback','Hardcover Book',5,20,NULL,150
REPLACE INTO `item_db_re` VALUES (1562,'Bible_Of_Battlefield','Battlefield Textbook',5,20,NULL,700,'110',NULL,1,1,0x00410100,63,2,2,4,'80',0,15,'bonus bInt,3; bonus3 bAutoSpell,"AL_BLESSING",3+(getskilllv("AL_BLESSING")>3)*(getskilllv("AL_BLESSING")-3),20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1563,'Diary_Of_Great_Sage_C','Sage\'s Diary',5,1,NULL,0,'135',NULL,1,0,0x00410100,63,2,2,3,'1',0,15,'bonus bMatk,140; bonus bAspdRate,5; /*Gold PC Room: bonus bBaseAtk,10; bonus bMatk,10;*/',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1564,'Encyclopedia','Encyclopedia',5,20,NULL,2000,'110:100',NULL,1,2,0x00410100,63,2,2,3,'70',1,15,'bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1565,'Death_Note','Ledger of Death',5,20,NULL,1000,'137:100',NULL,1,2,0x00410100,63,2,2,4,'85',1,15,'bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus2 bWeaponComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1565,'Death_Note','Ledger of Death',5,20,NULL,1000,'137:100',NULL,1,2,0x00410100,63,2,2,4,'85',1,15,'bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bComaRace,RC_DemiHuman,10; bonus2 bComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1566,'Diary_Of_Great_Basil','Diary Of Great Basil',5,20,NULL,0,'120:125',NULL,1,0,0x00410100,63,2,2,1,'0',0,15,'bonus2 bAddClass,Class_All,50;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1567,'Hardback_C','Refined Hardcover Book',5,1,NULL,0,'168:100',NULL,1,0,0x00410100,63,2,2,4,'0',0,15,'bonus bStr,5; bonus bDex,2; bonus bMatkRate,20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1568,'Book_Of_Billows_','Book of Billows',5,35000,NULL,750,'90',NULL,1,3,0x00410100,63,2,2,3,'27',1,15,'bonus bAtkEle,Ele_Water;',NULL,NULL);
@ -921,7 +921,7 @@ REPLACE INTO `item_db_re` VALUES (1575,'BF_Book2','Valorous Battle Strategy Book
REPLACE INTO `item_db_re` VALUES (1576,'Krieger_Book1','Glorious Tablet',5,20,NULL,0,'90:115',NULL,1,0,0x00410100,63,2,2,4,'80',1,15,'bonus bMatkRate,15; bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; .@r = getrefine(); if(.@r>5) { bonus2 bAddRace,RC_DemiHuman,pow(((.@r>14)?14:.@r)-4,2); bonus2 bAddRace,RC_Player,pow(((.@r>14)?14:.@r)-4,2); bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; } if(.@r>8) autobonus "{ bonus bBaseAtk,200; }",30,3000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1577,'Krieger_Book2','Glorious Apocalypse',5,20,NULL,0,'90:115',NULL,1,0,0x00410100,63,2,2,4,'80',1,15,'bonus2 bAddRace,RC_DemiHuman,80; bonus2 bAddRace,RC_Player,80; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,25; bonus2 bIgnoreDefRaceRate,RC_Player,25; bonus bUnbreakableWeapon,0; .@r = getrefine(); if(.@r>5) bonus2 bIgnoreDefRaceRate,RC_DemiHuman,5; bonus2 bIgnoreDefRaceRate,RC_Player,5; if(.@r>8) { bonus bMatkRate,5; bonus bVariableCastrate,-5; bonus bDelayRate,-5; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1578,'Book_Of_Prayer','Book Of Prayer',5,20,NULL,0,'140',NULL,1,0,0x00410100,63,2,2,3,'0',0,15,'bonus bVit,2; bonus bMdef,2; bonus bMaxSPrate,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1579,'Death_Note_M','Book of the Dead',5,20,NULL,1000,'137',NULL,1,2,0x00410100,63,2,2,4,'85',1,15,'bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bWeaponComaRace,RC_DemiHuman,10; bonus2 bWeaponComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1579,'Death_Note_M','Book of the Dead',5,20,NULL,1000,'137',NULL,1,2,0x00410100,63,2,2,4,'85',1,15,'bonus bMatkRate,15; bonus bStr,3; bonus bInt,3; bonus bLuk,-20; bonus2 bComaRace,RC_DemiHuman,10; bonus2 bComaRace,RC_Player,10; bonus bAspdRate,getrefine(); if(BaseJob==Job_Sage) bonus3 bAutoSpell,"NPC_HELLJUDGEMENT",5,20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1580,'Encyclopedia_C','Giant Encyclopedia',5,0,NULL,0,'145:100',NULL,1,0,0x00410100,63,2,2,3,'0',0,15,'bonus bMatkRate,15; bonus bInt,3; bonus bDex,2; bonus bCritical,20+((readparam(bLuk)*2)/10); bonus2 bAddSize,Size_All,40;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1581,'F_Diary_Of_Great_Sage_C','Diary Of Great Sage',5,1,NULL,0,'135',NULL,1,2,0x00410100,63,2,2,3,'1',0,15,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (1582,'E_Diary_Of_Great_Sage_C','Diary Of Great Sage',5,1,NULL,0,'135',NULL,1,2,0x00410100,63,2,2,3,'1',0,15,NULL,NULL,NULL);
@ -1671,7 +1671,7 @@ REPLACE INTO `item_db_re` VALUES (2550,'Fisher\'s_Muffler','Fisher\'s Muffler',4
REPLACE INTO `item_db_re` VALUES (2551,'Rider_Insignia_M','Crest of the Rider',4,20,NULL,500,NULL,4,NULL,1,0xFFFFFFFE,18,2,4,NULL,'55',1,0,'bonus bAgi,2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2552,'Mithril_Magic_Cape_M','Mithril Magic Manteau',4,20,NULL,400,NULL,3,NULL,1,0x00098B1C,18,2,4,NULL,'70',1,0,'bonus bMdef,3; bonus5 bAutoSpellWhenHit,"NPC_ANTIMAGIC",6,200,BF_MAGIC,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2553,'Dragon_Manteau','Dragon Manteau',4,20,NULL,1000,NULL,14,NULL,1,0xFFFFFFFE,18,2,4,NULL,'0',1,0,'bonus bAgi,1; bonus bMdef,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2554,'Piece_Of_Angent_Skin','Nydhorgg\'s Shadow Garb',4,20,NULL,400,NULL,25,NULL,1,0xFFFFFFFE,18,2,4,NULL,'90',1,0,'bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus2 bSPGainAttackRate,100,1; bonus bMdef,3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2554,'Piece_Of_Angent_Skin','Nydhorgg\'s Shadow Garb',4,20,NULL,400,NULL,25,NULL,1,0xFFFFFFFE,18,2,4,NULL,'90',1,0,'bonus2 bSubEle,Ele_Neutral,7; bonus2 bSubEle,Ele_Water,7; bonus2 bSubEle,Ele_Earth,7; bonus2 bSubEle,Ele_Fire,7; bonus2 bSubEle,Ele_Wind,7; bonus2 bSubEle,Ele_Poison,7; bonus2 bSubEle,Ele_Holy,7; bonus2 bSubEle,Ele_Dark,7; bonus2 bSubEle,Ele_Ghost,7; bonus2 bSubEle,Ele_Undead,7; bonus bMaxSP,(BaseLevel/3)+(getrefine()*10); bonus2 bSPDrainRate,10,1; bonus bMdef,3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2555,'Freyja_SScarf7','Freyja Soul Scarf',4,20,NULL,400,NULL,4,NULL,0,0xFFFFFFFF,63,2,4,NULL,'20',0,0,'bonus bFlee,15; bonus2 bSubEle,Ele_Neutral,15;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2556,'Freyja_SScarf30','Freyja Soul Scarf',4,20,NULL,400,NULL,4,NULL,0,0xFFFFFFFF,63,2,4,NULL,'20',0,0,'bonus bFlee,15; bonus2 bSubEle,Ele_Neutral,15;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2557,'Freyja_SScarf60','Freyja Soul Scarf',4,20,NULL,400,NULL,4,NULL,0,0xFFFFFFFF,63,2,4,NULL,'20',0,0,'bonus bFlee,15; bonus2 bSubEle,Ele_Neutral,15;',NULL,NULL);
@ -2256,7 +2256,7 @@ REPLACE INTO `item_db_re` VALUES (4168,'Dark_Lord_Card','Dark Lord Card',6,20,NU
REPLACE INTO `item_db_re` VALUES (4169,'Dark_Illusion_Card','Dark Illusion Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus bMaxHPrate,-10; bonus bMaxSPrate,-10; bonus bVariableCastrate,-10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4170,'Dark_Frame_Card','Dark Frame Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus2 bAddEffWhenHit,Eff_Stone,600;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4171,'Dark_Priest_Card','Dark Priest Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bSPVanishRate,50,10; if(BaseJob==Job_Sage) bonus bSPDrainValue,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4172,'The_Paper_Card','The Paper Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,20; bonus bSPGainAttack,-1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4172,'The_Paper_Card','The Paper Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bCritAtkRate,20; bonus bSPDrainValue,-1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4173,'Demon_Pungus_Card','Demon Pungus Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus2 bAddEffWhenHit,Eff_Sleep,600;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4174,'Deviling_Card','Deviling Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,4,NULL,NULL,NULL,NULL,'bonus2 bSubEle,Ele_Neutral,50; bonus2 bSubEle,Ele_Water,-50; bonus2 bSubEle,Ele_Earth,-50; bonus2 bSubEle,Ele_Fire,-50; bonus2 bSubEle,Ele_Wind,-50; bonus2 bSubEle,Ele_Poison,-50; bonus2 bSubEle,Ele_Holy,-50; bonus2 bSubEle,Ele_Dark,-50; bonus2 bSubEle,Ele_Ghost,-50; bonus2 bSubEle,Ele_Undead,-50;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4175,'Poison_Toad_Card','Poisonous Toad Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAutoSpell,"TF_POISON",1,20; bonus2 bAddSkillBlow,52,5;',NULL,NULL);
@ -2360,12 +2360,12 @@ REPLACE INTO `item_db_re` VALUES (4272,'Dancing_Dragon_Card','Zhu Po Long Card',
REPLACE INTO `item_db_re` VALUES (4273,'Shellfish_Card','Shell Fish Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,5; bonus2 bAddDamageClass,1073,30;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4274,'Zombie_Master_Card','Zombie Master Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus2 bSPGainRace,RC_Undead,5;',NULL,'heal 0,-5;');
REPLACE INTO `item_db_re` VALUES (4275,'Zombie_Prisoner_Card','Zombie Prisoner Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'bonus2 bSubRace,RC_Undead,-20; bonus2 bExpAddRace,RC_Undead,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4276,'Lord_Of_Death_Card','Lord of The Dead Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus3 bAddEff,Eff_Stun,500,ATF_SHORT; bonus3 bAddEff,Eff_Curse,500,ATF_SHORT; bonus3 bAddEff,Eff_Silence,500,ATF_SHORT; bonus3 bAddEff,Eff_Poison,500,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,500,ATF_SHORT; bonus2 bWeaponComaClass,Class_Normal,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4276,'Lord_Of_Death_Card','Lord of The Dead Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus3 bAddEff,Eff_Stun,500,ATF_SHORT; bonus3 bAddEff,Eff_Curse,500,ATF_SHORT; bonus3 bAddEff,Eff_Silence,500,ATF_SHORT; bonus3 bAddEff,Eff_Poison,500,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,500,ATF_SHORT; bonus2 bComaClass,Class_Normal,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4277,'Zherlthsh_Card','Zealotus Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,32,NULL,NULL,NULL,NULL,'bonus bLuk,2; bonus2 bSkillAtk,"BA_MUSICALSTRIKE",10; bonus2 bSkillAtk,"DC_THROWARROW",10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4278,'Gibbet_Card','Gibbet Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'if(getrefine()<6) bonus bMdef,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4279,'Deleter_Card','Earth Deleter Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus bSPrecovRate,-100; bonus bSPGainValue,10;',NULL,'heal 0,-100;');
REPLACE INTO `item_db_re` VALUES (4280,'Geographer_Card','Geographer Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus3 bAutoSpellWhenHit,"AL_BLESSING",2+8*(getskilllv("AL_BLESSING")==10),30;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4281,'Zipper_Bear_Card','Zipper Bear Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,30; bonus bSPGainAttack,-1; if(BaseClass==Job_Merchant) bonus bUnbreakableWeapon,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4281,'Zipper_Bear_Card','Zipper Bear Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bBaseAtk,30; bonus bSPDrainValue,-1; if(BaseClass==Job_Merchant) bonus bUnbreakableWeapon,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4282,'Tengu_Card','Tengu Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus2 bAddMonsterDropItemGroup,IG_Recovery,600;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4283,'Greatest_General_Card','Greatest General Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,136,NULL,NULL,NULL,NULL,'bonus3 bAutoSpell,"MO_CALLSPIRITS",5,2+18*(BaseClass==Job_Acolyte);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4284,'Chepet_Card','Chepet Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus4 bAutoSpell,"AL_HEAL",5,50,1;',NULL,NULL);
@ -2623,7 +2623,7 @@ REPLACE INTO `item_db_re` VALUES (4536,'Sealed_Atroce_Card','Sealed Atroce Card'
REPLACE INTO `item_db_re` VALUES (4537,'Sealed_Phreeoni_Card','Sealed Phreeoni Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'bonus bHit,((getrefine()>14)?75:50);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4538,'Sealed_Bacsojin_Card','Sealed White Lady Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'if (getrefine()>14) { bonus bHealPower,25; bonus bUseSPrate,20; } else { bonus bHealPower,15; bonus bUseSPrate,30; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4539,'Sealed_F_Bishop_Card','Sealed Fallen Bishop Hibram Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,64,NULL,NULL,NULL,NULL,'.@r = getrefine(); bonus bMatkRate,((.@r>14)?8:5); bonus bMaxSPrate,-50; set .@rate,((.@r>14)?33:25); bonus2 bMagicAddRace,RC_Angel,.@rate; bonus2 bMagicAddRace,RC_DemiHuman,.@rate; bonus2 bMagicAddRace,RC_Player,.@rate;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4540,'SLD_Lord_Of_Death_Card','Sealed Lord of The Dead Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'set .@rate, ((getrefine()>14)?350:250); bonus3 bAddEff,Eff_Stun,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Curse,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Silence,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Poison,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,.@rate,ATF_SHORT; bonus2 bWeaponComaClass,Class_Normal,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4540,'SLD_Lord_Of_Death_Card','Sealed Lord of The Dead Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,2,NULL,NULL,NULL,NULL,'set .@rate, ((getrefine()>14)?350:250); bonus3 bAddEff,Eff_Stun,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Curse,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Silence,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Poison,.@rate,ATF_SHORT; bonus3 bAddEff,Eff_Bleeding,.@rate,ATF_SHORT; bonus2 bComaClass,Class_Normal,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4541,'SLD_B_Katrinn_Card','Sealed High Wizard Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,769,NULL,NULL,NULL,NULL,'bonus2 bIgnoreMdefClassRate,Class_Normal,100; .@r = getrefine(); if (.@r>14) { bonus bVariableCastrate,120; bonus bSPrecovRate,-120; } else { bonus bVariableCastrate,150; bonus bSPrecovRate,-150; }',NULL,'heal 0,((.@r>14)?-2000:-3000);');
REPLACE INTO `item_db_re` VALUES (4542,'SLD_Detale_Card','Sealed Detale Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (4543,'SLD_Garm_Card','Sealed Hatii Card',6,20,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,16,NULL,NULL,NULL,NULL,'bonus2 bAddEffWhenHit,Eff_Freeze,((getrefine()>14)?4000:2500);',NULL,NULL);
@ -3442,7 +3442,7 @@ REPLACE INTO `item_db_re` VALUES (5493,'Ulle_Cap_I','Ulle\'s Cap',4,0,NULL,0,NUL
REPLACE INTO `item_db_re` VALUES (5494,'Spinx_Helm_I','Sphinx Hat',4,0,NULL,0,NULL,5,NULL,0,0x00004082,63,2,257,NULL,'0',0,137,'bonus bStr,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (5495,'Power_Of_Thor','Power Of Thor',4,20,NULL,100,NULL,6,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,493,'bonus bInt,1; bonus bDex,1; bonus bMdef,3; bonus bFlee,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (5496,'Dice_Hat','Dice Hat',4,20,NULL,300,NULL,3,NULL,0,0xFFFFFFFF,63,2,256,NULL,'50',0,494,'bonus bLuk,4;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (5497,'King_Tiger_Doll_Hat','King Tiger Doll Hat',4,20,NULL,400,NULL,6,NULL,1,0xFFFFFFFE,63,2,256,NULL,'1',1,495,'bonus bStr,2; bonus bDex,2; bonus2 bAddRace,RC_Brute,10; bonus2 bMagicAddRace,RC_Brute,10; .@r = getrefine(); autobonus "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",3*.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; }"; autobonus2 "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; }";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (5497,'King_Tiger_Doll_Hat','King Tiger Doll Hat',4,20,NULL,400,NULL,6,NULL,1,0xFFFFFFFE,63,2,256,NULL,'1',1,495,'bonus bStr,2; bonus bDex,2; bonus2 bAddRace,RC_Brute,10; bonus2 bMagicAddRace,RC_Brute,10; .@r = getrefine(); autobonus "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",3*.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; showscript \\\"Eddga Power !\\\"; }"; autobonus2 "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; showscript \\\"Eddga Power !\\\"; }";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (5498,'Wondering_Wolf_Helm','Wandering Wolf Helm',4,20,NULL,600,NULL,5,NULL,1,0xFFFFFFFE,63,2,768,NULL,'1',0,490,'bonus bAgi,5; bonus bFlee,10; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Brute,10; if(getrefine()>=7){ bonus2 bAddEff,Eff_Bleeding,10; } if(getrefine()>=9){ bonus3 bAutoSpellWhenHit,"MC_LOUD",1,1; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (5499,'Pizza_Hat','Pizza Hat',4,20,NULL,600,NULL,0,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',0,487,'skill "SM_PROVOKE",1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (5500,'Icecream_Hat','Icecream Hat',4,0,NULL,300,NULL,6,NULL,0,0xFFFFFFFF,63,2,256,NULL,'30',1,488,'bonus bMdef,3; skill "MG_FROSTDIVER",3;',NULL,NULL);
@ -5307,6 +5307,7 @@ REPLACE INTO `item_db_re` VALUES (7672,'Relief_Food','Relief Food',3,20,NULL,0,N
#
REPLACE INTO `item_db_re` VALUES (7674,'Mysterious_Ingredient','Mysterious Ingredient',3,20,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (7675,'Mysterious_Doll','Mysterious Doll',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (7676,'Transmission_Coupon','Transmission Coupon',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (7679,'Oneclick_Weapon_7UP','One Click Weapon 7UP',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (7680,'Oneclick_Weapon_9UP','One Click Weapon 9UP',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (7681,'Oneclick_Armor_7UP','One Click Armor 7UP',3,0,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@ -6428,7 +6429,7 @@ REPLACE INTO `item_db_re` VALUES (12535,'Iggdrasilberry_Box','Iggdrasilberry Box
REPLACE INTO `item_db_re` VALUES (12536,'NY_Rice_Cake_Soup','NY Rice Cake Soup',2,20,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12537,'Solo_Gift_Basket','Solo Gift Basket',2,1000,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/*getgroupitem(IG_Solo_Gift_Basket);*/ getitem 597,5; getitem 596,3; getitem 561,3; getitem 573,4; getitem 559,10; getitem 560,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12538,'Couple_Event_Basket','Couple Event Basket',2,2000,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/*getgroupitem(IG_Couple_Event_Basket);*/ getitem 14546,10; getitem 14547,10; getitem 14548,10; getitem 14549,10; getitem 14550,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12539,'Splendid_Box','Splendid Box',2,20,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12539,'Splendid_Box','Splendid Box',2,20,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_Splendid_Box);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12540,'GM_Warp_Box','GM Warp Box',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_GM_Warp_Box);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12541,'Fortune_Cookie1','Fortune Cookie1',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getrandgroupitem(IG_Fortune_Cookie1,1);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12542,'Fortune_Cookie2','Fortune Cookie2',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getgroupitem(IG_Fortune_Cookie2);',NULL,NULL);
@ -6545,13 +6546,13 @@ REPLACE INTO `item_db_re` VALUES (12654,'Lucky_Egg_C9','Lucky Egg C9',2,20,NULL,
REPLACE INTO `item_db_re` VALUES (12655,'Brain_Powder','Brain Powder',2,2000,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12656,'Magical_Powder','Magical Powder',2,3000,NULL,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12657,'Madness_Powder','Madness Powder',2,4000,NULL,300,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12658,'Trans_Scroll_Devi','Transformation Scroll(Deviruchi)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1109,1200000,SC_MTF_ASPD,10,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12659,'Trans_Scroll_Ray_Arch','Transformation Scroll(Raydric)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1276,1200000,SC_MTF_RANGEATK,25;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12660,'Trans_Scroll_Mavka','Transformation Scroll(Mavka)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1884,1200000,SC_MTF_RANGEATK,25;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12661,'Trans_Scroll_Marduk','Transformation Scroll(Marduk)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1140,1200000,SC_MTF_MATK,25;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12662,'Trans_Scroll_Banshee','Transformation Scroll(Banshee)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1867,1200000,SC_MTF_MATK,25;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12663,'Trans_Scroll_Poring','Transformation Scroll(Poring)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1002,1200000,SC_MTF_CRIDAMAGE,25;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12664,'Trans_Scroll_Golem','Transformation Scroll(Golem)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1040,1200000,SC_MTF_MLEATKED,5,20,2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12658,'Trans_Scroll_Devi','Transformation Scroll(Deviruchi)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1109,1200000,SC_MTF_ASPD,10,5; showscript "Traaaansformation-!! Deviruchi form!!";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12659,'Trans_Scroll_Ray_Arch','Transformation Scroll(Raydric)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1276,1200000,SC_MTF_RANGEATK,25; showscript "Traaaansformation-!! Raydric form!!";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12660,'Trans_Scroll_Mavka','Transformation Scroll(Mavka)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1884,1200000,SC_MTF_RANGEATK,25; showscript "Traaaansformation-!! Mavka form!!";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12661,'Trans_Scroll_Marduk','Transformation Scroll(Marduk)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1140,1200000,SC_MTF_MATK,25; showscript "Traaaansformation-!! Marduk form!!";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12662,'Trans_Scroll_Banshee','Transformation Scroll(Banshee)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1867,1200000,SC_MTF_MATK,25; showscript "Traaaansformation-!! Banshee form!!";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12663,'Trans_Scroll_Poring','Transformation Scroll(Poring)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1002,1200000,SC_MTF_CRIDAMAGE,25; showscript "Traaaansformation-!! Poring form!!";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12664,'Trans_Scroll_Golem','Transformation Scroll(Golem)',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'transform 1040,1200000,SC_MTF_MLEATKED,5,20,2; showscript "Traaaansformation-!! Golem form!!";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12665,'Grovel_Buff','Grovel Buff',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12666,'Thai_Perfume_MATK','Thai Perfume MATK',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus bMatk,24; }",600,0,0,SI_SKF_MATK;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12667,'Thai_Perfume_ATK','Thai Perfume ATK',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'specialeffect2 EF_MAGICALATTHIT; bonus_script "{ bonus bBaseAtk,24; }",600,0,0,SI_SKF_ATK;',NULL,NULL);
@ -6684,12 +6685,12 @@ REPLACE INTO `item_db_re` VALUES (12787,'Diabolic_Scroll','Diabolic Scroll',2,20
REPLACE INTO `item_db_re` VALUES (12788,'No100_Firecracker','No100 Firecracker',2,2,NULL,20,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12789,'Juicy_Fruit','Juicy Fruit',2,2,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12790,'Change_Name_Card','Character Name Change Coupon',2,0,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'set CharRename, CharRename + 1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12791,'Combat_Pill','Combat Pill',2,20,NULL,150,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'specialeffect2 EF_POTION_BERSERK; bonus_script "{ bonus2 bAddDamageClass,Class_All,5; bonus bMatkRate,5; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }",60,0,0,SI_GM_BATTLE;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12791,'Combat_Pill','Combat Pill',2,20,NULL,150,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'specialeffect2 EF_POTION_BERSERK; bonus_script "{ bonus2 bAddDamageClass,Class_All,5; bonus bMatkRate,5; bonus bMaxHPrate,3; bonus bMaxSPrate,3; }",60,0,0,SI_GM_BATTLE; /* showscript */',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12792,'P_Combat_Pill','P Combat Pill',2,20,NULL,150,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'specialeffect2 EF_POTION_BERSERK; bonus_script "{ bonus2 bAddDamageClass,Class_All,10; bonus bMatkRate,10; bonus bMaxHPrate,5; bonus bMaxSPrate,5; }",60,0,0,SI_GM_BATTLE2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12793,'Combat_Pill_Box10','Combat Pill Box10',2,20,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 12791,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12794,'P_Combat_Pill_Box10','P Combat Pill Box10',2,20,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 12792,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12795,'2011_RWC_Scroll_Kr','2011 RWC Scroll Kr',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12796,'Red_Booster','Red Booster',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'itemskill "AC_CONCENTRATION",(getskilllv(45)<3?3:getskilllv(45));',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12796,'Red_Booster','Red Booster',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'itemskill "AC_CONCENTRATION",(getskilllv(45)<3?3:getskilllv(45)); specialeffect2 EF_POTION_BERSERK; showscript "Oh My GOODNESS!!! I FEEL AWESOMELY STRONG!!! WOWOW";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12797,'Wish_Maiden_Scroll','Wish Maiden Scroll',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'mercenary_create 2344,1800000;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12798,'Zealotus_Scroll','Zealotus Scroll',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'mercenary_create 2345,1800000;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (12799,'PCBang_Coupon_Box5','PCBang Coupon Box5',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
@ -7129,7 +7130,7 @@ REPLACE INTO `item_db_re` VALUES (13323,'Infinity_Shuriken','Infinity Shuriken',
REPLACE INTO `item_db_re` VALUES (13400,'Cutlas_','Cutlus',5,20,NULL,900,'150',NULL,1,1,0x000654E2,63,2,2,4,'40',1,2,'skill "SM_BASH",5; bonus bStr,2; bonus bDef,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (13401,'Excalibur_C','Excalibur',5,1,NULL,0,'199',NULL,1,0,0x000654E2,63,2,2,4,'1',0,2,'bonus bInt,10; bonus bLuk,10; bonus bAtkEle,Ele_Holy;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (13402,'Cutlas_C','Cutlus',5,2,NULL,0,'185',NULL,1,0,0x000654E2,63,2,2,4,'0',0,2,'skill "SM_BASH",5; bonus bStr,2; bonus bDef,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (13403,'Solar_Sword_C','Solar Sword',5,2,NULL,0,'120',NULL,1,0,0x000654E2,63,2,2,4,'0',0,2,'bonus bAtkEle,Ele_Fire; bonus2 bSPLossRate,15,10; bonus bHPGainAttackRate,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (13403,'Solar_Sword_C','Solar Sword',5,2,NULL,0,'120',NULL,1,0,0x000654E2,63,2,2,4,'0',0,2,'bonus bAtkEle,Ele_Fire; bonus2 bSPLossRate,15,10; bonus2 bHPDrainRate,1000,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (13404,'Platinum_Shotel','Platinum Shotel',5,20,NULL,1500,'130',NULL,1,1,0x000654E2,63,2,2,4,'55',1,2,'bonus bCritical,50;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (13405,'Curved_Sword','Curved Sword',5,20,NULL,800,'125',NULL,1,2,0x000654E2,63,2,2,4,'55',1,2,'bonus bAspdRate,10; bonus2 bAddEff,Eff_Curse,300;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (13406,'Edger','Edger',5,20,NULL,0,'120',NULL,1,0,0x000654E2,63,2,2,1,'0',0,2,'bonus2 bAddClass,Class_All,50;',NULL,NULL);
@ -8333,7 +8334,7 @@ REPLACE INTO `item_db_re` VALUES (15121,'Sarah_Combat_Robe','Sarah Combat Robe',
REPLACE INTO `item_db_re` VALUES (15123,'Whikebain_Suit','Whikebain Suit',4,0,NULL,900,NULL,56,NULL,1,0x00001000,56,2,16,NULL,'105',1,NULL,'.@r = getrefine(); if (.@r > 7) { bonus bCritAtkRate,6; } else if (.@r > 5) { bonus bCritAtkRate,4; } bonus3 bAutoSpell,"DC_WINKCHARM",1,10; /* Confirm: Success rate */',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (15138,'Aegir_Armor','Aegir Armor',4,10,NULL,1600,NULL,25,NULL,0,0xFFFFFFFF,63,2,16,NULL,'40',1,NULL,'bonus bMaxHP,500; bonus bMaxSP,50;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (15141,'Ancient_Armor_Of_The_Goddess','Ancient Armor Of The Goddess',4,10,NULL,2000,NULL,55,NULL,0,0xFFFFFFFF,63,2,16,NULL,'100',1,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (15145,'Evil_Dragon_Armor','Evil Dragon Armor',4,0,NULL,4000,NULL,60,NULL,1,0xFFFFFFFF,63,2,16,NULL,NULL,1,NULL,'.@r = getrefine(); if (.@r >= 10 ) { bonus2 bHPGainAttackRate,100,3; bonus2 bSPGainAttackRate,100,5; } else if (.@r >= 9 ) { bonus2 bHPGainAttackRate,100,4; bonus2 bSPGainAttackRate,100,3; } else if (.@r >= 8 ) { bonus2 bHPGainAttackRate,100,6; bonus2 bSPGainAttackRate,100,2; } /* Confirm: Success rate and it says no effect if with Rideword, Vanargandr Helm, or Piece Of Angent Skin */',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (15145,'Evil_Dragon_Armor','Evil Dragon Armor',4,0,NULL,4000,NULL,60,NULL,1,0xFFFFFFFF,63,2,16,NULL,NULL,1,NULL,'.@r = getrefine(); if (.@r >= 10 ) { bonus2 bHPDrainRate,100,3; bonus2 bSPDrainRate,100,5; } else if (.@r >= 9 ) { bonus2 bHPDrainRate,100,4; bonus2 bSPDrainRate,100,3; } else if (.@r >= 8 ) { bonus2 bHPDrainRate,100,6; bonus2 bSPDrainRate,100,2; } /* Confirm: Success rate and it says no effect if with Rideword, Vanargandr Helm, or Piece Of Angent Skin */',NULL,NULL);
# More Maces
REPLACE INTO `item_db_re` VALUES (16000,'Erde','Erde',5,20,NULL,500,'130',NULL,1,2,0x0004C5B2,18,2,2,3,'50',1,8,'bonus2 bSkillAtk,"AM_ACIDTERROR",20; bonus2 bSkillAtk,"AM_DEMONSTRATION",20; bonus bMaxSP,50; bonus bHealPower,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (16001,'Red_Square_Bag','Red Square Bag',5,20,NULL,500,'130',NULL,1,2,0x0004C5B2,18,2,2,3,'50',1,8,'bonus bMaxHP,200; bonus2 bSkillAtk,"AM_ACIDTERROR",20; bonus2 bSkillAtk,"AM_DEMONSTRATION",20; bonus2 bAddMonsterDropItem,501,50; bonus2 bAddMonsterDropItem,502,20; bonus2 bAddMonsterDropItem,503,20; bonus2 bAddMonsterDropItem,504,20; bonus2 bAddMonsterDropItem,505,10; if(readparam(bStr)>=95) bonus2 bAddEff,Eff_Stun,500;',NULL,NULL);
@ -9029,6 +9030,7 @@ REPLACE INTO `item_db_re` VALUES (17552,'Garnet Lucky Egg','Garnet Lucky Egg',18
REPLACE INTO `item_db_re` VALUES (17572,'Erzulie_Lucky_Egg','Erzulie Lucky Egg',18,0,NULL,10,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'/*TODO*/',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (17584,'Venus_Lucky_Egg','Venus Lucky Egg',18,0,NULL,10,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'/*TODO*/',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (17588,'Amora_Lucky_Egg','Amora Lucky Egg',18,0,NULL,10,NULL,NULL,NULL,0,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'/*TODO*/',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (17598,'Sograt_Lucky_Scroll','Sograt Lucky Scroll',18,0,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem callfunc("F_Rand",20099,19024,2899,19910),1; /* and others. */',NULL,NULL);
# Mechanic/Genetic Cannonballs
REPLACE INTO `item_db_re` VALUES (18000,'Cannon_Ball','Cannon Ball',10,100,NULL,10,'100',NULL,NULL,NULL,0x00040400,56,2,32768,NULL,'99',NULL,8,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18001,'Holy_Cannon_Ball','Holy Cannon Ball',10,200,NULL,10,'120',NULL,NULL,NULL,0x00040400,56,2,32768,NULL,'99',NULL,8,'bonus bAtkEle,Ele_Holy;',NULL,NULL);
@ -9157,15 +9159,15 @@ REPLACE INTO `item_db_re` VALUES (18589,'Strawberry_Hat','Strawberry Hat',4,20,N
REPLACE INTO `item_db_re` VALUES (18590,'Gemma_Hairband','Gemma Hairband',4,20,NULL,200,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'10',1,564,'bonus bMdef,3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18591,'Mini_Glasses_','Mini Glasses',4,20,NULL,100,NULL,2,NULL,1,0xFFFFFFFE,63,2,512,NULL,'0',0,47,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18592,'Nestea_Hat','Nestea Hat',4,20,NULL,200,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,756,'bonus bMdef,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18593,'Fancy_Mini_Crown','Fancy Mini Crown',4,20,NULL,100,NULL,2,NULL,1,0xFFFFFFFF,63,2,256,NULL,'30',1,707,'bonus bInt,1; bonus bMdef,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18593,'Fancy_Mini_Crown','Fancy Mini Crown',4,20,NULL,100,NULL,2,NULL,1,0xFFFFFFFF,63,2,256,NULL,'30',1,707,'bonus bInt,1; bonus bMdef,5; bonus bVariableCast,-3000; bonus bMatkRate,3; bonus bHealPower,4; bonus bSkillUseSP,-3; .@r = getrefine(); if (.@r > 6) bonus bMatkRate,3; else if (.@r > 4) bonus bMatkRate,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18594,'Magni_Cap_','Magni Cap',4,30000,NULL,1000,NULL,9,NULL,1,0xFFFFFFFE,63,2,256,NULL,'0',1,250,'bonus bStr,2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18595,'Horn_Of_Ancient','Horn of Ancient',4,40,NULL,200,NULL,8,NULL,1,0xFFFFFFFF,63,2,256,NULL,'50',1,757,'autobonus "{ bonus bBaseAtk,100; }",5,10000,0,"{ specialeffect2 EF_POTION_BERSERK; }";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18595,'Horn_Of_Ancient','Horn of Ancient',4,40,NULL,200,NULL,8,NULL,1,0xFFFFFFFF,63,2,256,NULL,'50',1,757,'bonus2 bSubClass,Class_Boss,10; bonus2 bAddClass,Class_Boss,10; .@r = getrefine(); if (.@r > 6) { autobonus "{ bonus bBaseAtk,100; }",10,10000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; } if (.@r > 8) { bonus2 bSubClass,Class_Boss,10; bonus2 bAddClass,Class_Boss,10; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18596,'Sprout_Hat','Sprout Hat',4,20,NULL,200,NULL,4,NULL,0,0xFFFFFFFF,63,2,256,NULL,'70',1,758,'skill "WZ_HEAVENDRIVE",3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18597,'Mercury_Riser','Mercury Riser',4,40,NULL,200,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',NULL,759,'bonus bAspdRate,3; bonus bCritical,3; .@r = getrefine(); if(.@r >= 7) { bonus bAspdRate,2; bonus bCritical,2; } if(.@r >= 9) { bonus bAspdRate,2; bonus bCritical,2; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18597,'Mercury_Riser','Mercury Riser',4,40,NULL,200,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',NULL,759,'bonus2 bSubRace,RC_DemiHuman,10; bonus2 bAddRace,RC_DemiHuman,10; bonus bAspdRate,3; bonus bDelayrate,-3; .@r = getrefine(); if(.@r >= 7) { bonus bAspdRate,2; bonus bDelayrate,-2; } if(.@r >= 9) { bonus bAspdRate,2; bonus bDelayrate,-2; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18598,'Mini_Tree_J','Mini Tree J',4,20,NULL,50,NULL,0,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',0,727,'bonus bMdef,20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18599,'Black_Devil_Mask','Black Devil Mask',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,512,NULL,'0',0,760,'bonus bAllStats,2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18600,'Cat_Ear_Beret','Cat Ear Beret',4,20,NULL,100,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,761,'bonus bAtkRate,5; .@r = getrefine(); if(.@r > 5 && .@r <= 12) { bonus2 bAddRace,RC_DemiHuman,(.@r - 5); bonus2 bSubRace,RC_DemiHuman,(.@r - 5); bonus2 bAddRace,RC_Player,(.@r - 5); bonus2 bSubRace,RC_Player,(.@r - 5); } if(.@r > 12) { bonus2 bAddRace,RC_DemiHuman,7; bonus2 bAddRace,RC_Player,7; bonus2 bSubRace,RC_DemiHuman,7; bonus2 bSubRace,RC_Player,7; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18601,'Red_Bread_Hat','Red Bread Hat',4,20,NULL,300,NULL,0,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,762,'bonus bMdef,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18600,'Cat_Ear_Beret','Cat Ear Beret',4,20,NULL,100,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,761,'bonus bAtkRate,5; .@r = getrefine(); if(.@r < 5) .@r = 5; bonus2 bSubRace,RC_DemiHuman,(.@r - 5); bonus2 bAddRace,RC_DemiHuman,(.@r - 5);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18601,'Red_Bread_Hat','Red Bread Hat',4,20,NULL,300,NULL,0,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,762,'bonus bMdef,5; .@r = getrefine(); if (.@r < 5) .@r = 5; bonus2 bSubRace,RC_DemiHuman,(.@r - 5); bonus2 bMagicAddRace,RC_DemiHuman,(.@r - 5);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18602,'Watermelon_Bite','Watermelon Bite',4,20,NULL,100,NULL,4,NULL,0,0xFFFFFFFF,63,2,1,NULL,'30',0,763,'bonus bMdef,4; bonus2 bAddEle,Ele_Fire,4;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18603,'Black_Devil_Mask_','Black Devil Mask',4,20,NULL,100,NULL,0,NULL,1,0xFFFFFFFF,63,2,512,NULL,'0',0,760,'bonus bAllStats,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18604,'Falcon_Mask','Falcon Mask',4,10,NULL,30,NULL,0,NULL,1,0xFFFFFFFF,63,2,513,NULL,'50',0,782,NULL,NULL,NULL);
@ -9194,14 +9196,14 @@ REPLACE INTO `item_db_re` VALUES (18626,'Gelato_Hat','Gelato Hat',4,20,NULL,200,
REPLACE INTO `item_db_re` VALUES (18627,'Dried_Leaf','Dried Leaf',4,20,NULL,50,NULL,0,NULL,0,0xFFFFFFFF,63,2,1,NULL,'10',0,711,'bonus bUnbreakableHelm,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18628,'Tare_Brownie','Tare Brownie',4,20,NULL,500,NULL,5,NULL,1,0xFFFFFFFF,63,2,256,NULL,'50',0,781,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18629,'B_Desert_Wolf_Hat','B Desert Wolf Hat',4,10,NULL,300,NULL,0,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,783,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18630,'Dep_Alice_Hat','Drooping Alicel',4,20,NULL,500,NULL,6,NULL,0,0xFFFFFFFE,63,2,256,NULL,'70',1,784,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18631,'Ribbon_Chef_Hat','Ribbon Chef Hat',4,20,NULL,300,NULL,5,NULL,0,0xFFFFFFFF,63,2,256,NULL,'70',1,785,'bonus bDex,3; bonus bLuk,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18630,'Dep_Alice_Hat','Drooping Alicel',4,20,NULL,500,NULL,6,NULL,0,0xFFFFFFFE,63,2,256,NULL,'70',1,784,'bonus2 bAddRace,RC_DemiHuman,10; bonus2 bAddRace,RC_Player,10; if (getrefine() > 10) { autobonus "{ bonus bAspdRate,100; }",10,7000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; }"; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18631,'Ribbon_Chef_Hat','Ribbon Chef Hat',4,20,NULL,300,NULL,5,NULL,0,0xFFFFFFFF,63,2,256,NULL,'70',1,785,'bonus bDex,3; bonus bLuk,1; if (getrefine() > 6) { bonus2 bAddMonsterDropItem,12125,500; bonus2 bAddMonsterDropItem,12126,500; bonus2 bAddMonsterDropItem,12127,400; bonus2 bAddMonsterDropItem,12128,300; bonus2 bAddMonsterDropItem,12129,200; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18632,'Yellow_Poring_Hairpin','Yellow Poring Hairpin',4,20,NULL,100,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,786,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18633,'Pink_Poring_Hairpin','Pink Poring Hairpin',4,20,NULL,100,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,787,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18634,'Green_Poring_Hairpin','Green Poring Hairpin',4,20,NULL,100,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,788,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18635,'Blue_Poring_Hairpin','Blue Poring Hairpin',4,20,NULL,100,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,789,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18636,'Bridal_Ribbon','Bridal Ribbon',4,20,NULL,200,NULL,6,NULL,0,0xFFFFFFFF,63,2,256,NULL,'30',1,790,'bonus bDex,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18637,'Ancient_Admiral_Helm','Ancient Admiral Helm',4,20,NULL,700,NULL,4,NULL,1,0xFFFFFFFF,63,2,768,NULL,'0',1,660,'bonus bStr,2; bonus bVit,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18636,'Bridal_Ribbon','Bridal Ribbon',4,20,NULL,200,NULL,6,NULL,0,0xFFFFFFFF,63,2,256,NULL,'30',1,790,'bonus bDex,1; bonus3 bAutoSpellWhenHit,"DC_WINKCHARM",1,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18637,'Ancient_Admiral_Helm','Ancient Admiral Helm',4,20,NULL,700,NULL,4,NULL,1,0xFFFFFFFF,63,2,768,NULL,'0',1,660,'bonus bStr,2; bonus bVit,1; if (getrefine() > 7) bonus bSpeedRate,25;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18638,'Citron_Hat','Citron Hat',4,20,NULL,400,NULL,3,NULL,0,0xFFFFFFFE,63,2,256,NULL,'1',1,791,'bonus bLuk,3; bonus2 bSubRace,RC_Plant,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18639,'Naval_Officer_Hat','Naval Officer Hat',4,20,NULL,200,NULL,2,NULL,0,0xFFFFFFFE,63,2,256,NULL,'1',1,792,'bonus bLuk,3; bonus2 bAddEle,Ele_Water,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18640,'Starfish_Headband','Starfish Headband',4,20,NULL,200,NULL,2,NULL,0,0xFFFFFFFE,63,2,256,NULL,'1',1,793,NULL,NULL,NULL);
@ -9214,15 +9216,15 @@ REPLACE INTO `item_db_re` VALUES (18646,'Cow_Hat','Cow Hat',4,20,NULL,300,NULL,4
REPLACE INTO `item_db_re` VALUES (18647,'Star_Eyepatch','Star Eyepatch',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,256,NULL,'1',0,800,'bonus2 bResEff,Eff_Stun,1500;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18648,'Tongue_Charm','Tongue Charm',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,1,NULL,'1',0,801,'bonus2 bSubRace,RC_Demon,3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18649,'Lude_Mask','Lude Mask',4,10,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,63,2,513,NULL,'0',1,802,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18650,'RWC_Shouting_Mouth','RWC Shouting Mouth',4,20,NULL,50,NULL,0,NULL,0,0xFFFFFFFF,63,2,1,NULL,'1',0,194,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18650,'RWC_Shouting_Mouth','RWC Shouting Mouth',4,20,NULL,50,NULL,0,NULL,0,0xFFFFFFFF,63,2,1,NULL,'1',0,194,'bonus3 bAutoSpellWhenHit,"SM_ENDURE",1,10; bonus3 bAutoSpellWhenHit,"MO_CALLSPIRITS",5,10; bonus3 bAutoSpellWhenHit,"MO_EXPLOSIONSPIRITS",5,10; bonus3 bAutoSpell,"BS_MAXIMIZE",5,10; bonus3 bAutoSpell,"MC_LOUD",1,10; bonus3 bAutoSpell,"AC_CONCENTRATION",5,10; bonus3 bAutoSpell,"PR_GLORIA",3,10; autobonus "{ bonus bStr,3; bonus bAgi,3; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; showscript \\\"RWC 2011 Fighting!!\\\"; }"; autobonus "{ bonus bInt,3; bonus bLuk,3; }",5,5000,BF_MAGIC,"{ specialeffect2 EF_ENERGYCOAT; showscript \\\"RWC 2011 Fighting!!\\\"; }";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18651,'Ignis_Cap','Ignis Cap',4,20,NULL,800,NULL,8,NULL,1,0xFFFFFFFF,63,2,256,NULL,'40',1,803,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18652,'Vanargandr_Helm','Vanargandr Helm',4,20,NULL,1500,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,NULL,'80',1,804,'bonus bMdef,5; .@r = getrefine(); if (.@r >= 9 ) { bonus2 bHPGainAttackRate,100,8; bonus2 bSPGainAttackRate,100,4; } else if (.@r >= 8 ) { bonus2 bHPGainAttackRate,100,5; bonus2 bSPGainAttackRate,100,2; } else if (.@r >= 7 ) { bonus2 bHPGainAttackRate,100,5; bonus2 bSPGainAttackRate,100,2; } else if (.@r >= 5 ) { bonus2 bHPGainAttackRate,100,3; bonus2 bSPGainAttackRate,100,1; } else { bonus2 bHPGainAttackRate,100,1; bonus2 bSPGainAttackRate,100,1; } /* Confirm: Success rate? */',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18652,'Vanargandr_Helm','Vanargandr Helm',4,20,NULL,1500,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,NULL,'80',1,804,'bonus bMdef,5; .@r = getrefine(); 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; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18653,'Deviruchi_Headphone','Deviruchi Headphone',4,20,NULL,200,NULL,8,NULL,1,0xFFFFFFFF,63,2,256,NULL,'30',1,805,'bonus bAgi,2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18655,'Goedo_Monocle','Goedo Monocle',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,512,NULL,'50',0,23,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18656,'Witch\'s_Pumpkin_Hat','Witch\'s Pumpkin Hat',4,20,NULL,300,NULL,10,NULL,0,0xFFFFFFFF,63,2,256,NULL,'20',1,717,'bonus bMdef,10; bonus bStr,2; bonus bInt,2; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Demon,15;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18656,'Wit_Pumpkin_Hat','Witch\'s Pumpkin Hat',4,20,NULL,300,NULL,10,NULL,0,0xFFFFFFFF,63,2,256,NULL,'20',1,717,'bonus bMdef,10; bonus bStr,2; bonus bInt,2; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Undead,15; bonus2 bMagicAddRace,RC_Demon,15; bonus2 bMagicAddRace,RC_Demon,15;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18657,'Pegasus_Wing_Ears','Pegasus Wing Ears',4,20,NULL,500,NULL,1,NULL,0,0xFFFFFFFF,63,2,512,NULL,'80',0,568,'bonus bUnbreakableHelm,0; if (BaseLevel >= 150) bonus bAspdRate,3; else if (BaseLevel >= 100) bonus bAspdRate,2; else if (BaseLevel >= 50) bonus bAspdRate,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18658,'Holy_Santa_Beard','Holy Santa Beard',4,20,NULL,100,NULL,0,NULL,0,0xFFFFFFFF,63,2,1,NULL,'1',0,25,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18659,'Boitata_Hat','Boitata Hat',4,20,NULL,0,NULL,5,NULL,1,0xFFFFFFFF,63,2,768,NULL,'0',1,808,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18659,'Boitata_Hat','Boitata Hat',4,20,NULL,0,NULL,5,NULL,1,0xFFFFFFFF,63,2,768,NULL,'0',1,808,'autobonus "{ bonus bAtkEle,Ele_Fire; }",10,180000,BF_WEAPON,"{ specialeffect2 EF_ENHANCE; }"; bonus3 bAutospell,"AS_SONICBLOW",5,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18660,'Indi_Feather_Band','Indian Feather Headband',4,20,NULL,400,NULL,3,NULL,1,0xFFFFFFFE,63,2,256,NULL,'0',1,809,'bonus bAgi,2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18661,'Trident_Helm','Trident Helm',4,20,NULL,400,NULL,3,NULL,1,0xFFFFFFFE,63,2,256,NULL,'20',1,810,'bonus bStr,2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18662,'Antler_Fedora','Antler Fedora',4,20,NULL,400,NULL,3,NULL,0,0xFFFFFFFE,63,2,256,NULL,'1',1,811,'bonus bInt,3;',NULL,NULL);
@ -9234,7 +9236,7 @@ REPLACE INTO `item_db_re` VALUES (18667,'Cat_Lace_Hairband','Cat Lace Hairband',
REPLACE INTO `item_db_re` VALUES (18668,'Droopy_Turtle_Hat','Droopy Turtle Hat',4,20,NULL,300,NULL,1,NULL,1,0xFFFFFFFE,63,2,256,NULL,'1',1,694,'skill "AL_DECAGI",3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18669,'Cowhide_Hat','Cowhide Hat',4,20,NULL,200,NULL,3,NULL,1,0xFFFFFFFE,63,2,256,NULL,'1',1,819,'bonus bDex,2; bonus bMaxHPrate,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18670,'Hankie_In_Mouth','Hankie In Mouth',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,63,2,1,NULL,'12',0,818,'bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18671,'Rudolf_Hairband','Rudolf Hairband',4,20,NULL,200,NULL,5,NULL,0,0xFFFFFFFF,63,2,256,NULL,'30',1,836,'bonus3 bAutoSpell,"AL_INCAGI",10,50; bonus3 bAutoSpellWhenHit,"AL_INCAGI",10,50; bonus2 bAddItemHealRate,515,2000;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18671,'Rudolf_Hairband','Rudolf Hairband',4,20,NULL,200,NULL,5,NULL,0,0xFFFFFFFF,63,2,256,NULL,'30',1,836,'bonus3 bAutoSpell,"AL_INCAGI",10,50; bonus3 bAutoSpellWhenHit,"AL_INCAGI",10,50; bonus2 bAddItemHealRate,515,2000; autobonus "{ bonus bLuk,20; }",10,50000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; /* showscript */ }"; autobonus2 "{ bonus bStr,20; }",10,50000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; /* showscript */ }";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18672,'Tare_Pope','Tare Pope',4,20,NULL,300,NULL,0,NULL,0,0xFFFFFFFF,63,2,256,NULL,'1',0,817,'bonus bUnbreakableHelm,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18673,'Tare_Pope_','Tare Pope',4,20,NULL,300,NULL,0,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',0,817,'bonus bUnbreakableHelm,0; bonus bSPrecovRate,2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18674,'Planewing_Hat','Planewing Hat',4,20,NULL,200,NULL,3,NULL,1,0xFFFFFFFE,63,2,256,NULL,'1',1,820,'bonus bAgi,3;',NULL,NULL);
@ -9337,7 +9339,7 @@ REPLACE INTO `item_db_re` VALUES (18805,'Eclipse_Hat','Eclipse Hat',4,20,NULL,30
REPLACE INTO `item_db_re` VALUES (18806,'Black_Rabbit_Hat','Black Rabbit Hat',4,20,NULL,300,NULL,2,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,923,'bonus bDex,2; bonus bAgi,3; bonus3 bAutoSpellWhenHit,"AL_INCAGI",5,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18807,'Yellow_Yuzu_Hat','Yellow Yuzu Hat',4,20,NULL,400,NULL,3,NULL,1,0xFFFFFFFE,63,2,256,NULL,'0',1,924,'bonus bVit,2; bonus bLuk,3; bonus2 bSubRace,RC_Plant,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18808,'Wing_Form_Spectacle','Wing Form Spectacle',4,20,NULL,100,NULL,1,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,925,'bonus bAgi,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18810,'Hell_Pumpkin_Hat','Hell Pumpkin Hat',4,20,NULL,500,NULL,12,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,717,'bonus bMdef,12; bonus2 bSubRace,6,5; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5; bonus2 bSubRace,RC_Undead,-5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18810,'Hell_Pumpkin_Hat','Hell Pumpkin Hat',4,20,NULL,500,NULL,12,NULL,0,0xFFFFFFFF,63,2,256,NULL,'0',1,717,'bonus bMdef,12; bonus2 bSubRace,RC_Demon,5; bonus2 bSubRace,RC_Undead,5; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18813,'New_Wave_Sunglasses','New Wave Sunglasses',4,10,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,NULL,'30',NULL,856,'bonus bDelayrate,-10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18814,'Angel_School_Cap','Angel School Cap',4,20,NULL,100,NULL,4,NULL,1,0xFFFFFFFE,63,2,256,NULL,'0',1,927,'bonus bInt,2; bonus bVit,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18815,'Devil_School_Cap','Devil School Cap',4,20,NULL,100,NULL,4,NULL,1,0xFFFFFFFE,63,2,256,NULL,'0',1,928,'bonus bStr,2; bonus bVit,1;',NULL,NULL);
@ -9363,9 +9365,9 @@ REPLACE INTO `item_db_re` VALUES (18845,'Banshee_Master_Kiss','Banshee Master Ki
REPLACE INTO `item_db_re` VALUES (18848,'Fresh_Roses','Fresh Roses',4,10,NULL,200,'0:20',0,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,963,'bonus bMagicHPGainValue,100; bonus bMagicSPGainValue,100;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18849,'Celine_Ribbon','Celine Ribbon',4,10,NULL,200,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,256,NULL,'1',1,967,'bonus bDex,3; bonus bMatk,40+getrefine(); bonus bMagicHPGainValue,200; bonus2 bHPLossRate,50,5000;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18850,'Polar_Bear_Cap','Polar Bear Cap',4,20,NULL,300,NULL,7,NULL,0,0xFFFFFFFF,63,2,256,NULL,'1',0,966,'bonus bUnbreakableHelm,0; bonus bDex,1; bonus bAgi,1; bonus bMdef,3; bonus bHPrecovRate,5; bonus bSPrecovRate,3; bonus2 bAddMonsterDropItem,12354,100;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18851,'C_Polar_Bear_Cap','Costume Polar Bear Cap',4,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,966,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18851,'C_Polar_Bear_Cap','Costume Polar Bear Cap',4,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,966,'/*Is this correct item?*/',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18855,'Aviator_Hat','Aviator Hat',4,10,NULL,100,NULL,10,NULL,0,0xFFFFFFFF,63,2,256,NULL,'1',1,972,'bonus bAgi,3; bonus bInt,3; autobonus "{ bonus bAtkEle,Ele_Wind; }",500,180,BF_NORMAL;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18856,'W_King_Tiger_Doll_Hat','W King Tiger Doll Hat',4,10,NULL,0,NULL,10,NULL,0,0xFFFFFFFF,63,2,256,NULL,'1',1,973,'bonus bStr,2; bonus bDex,2; bonus2 bAddRace,RC_Brute,10; .@r = getrefine(); autobonus "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",3*.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; }"; autobonus2 "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; }";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18856,'W_King_Tiger_Doll_Hat','W King Tiger Doll Hat',4,10,NULL,0,NULL,10,NULL,0,0xFFFFFFFF,63,2,256,NULL,'1',1,973,'bonus bStr,2; bonus bDex,2; bonus2 bAddRace,RC_Brute,10; .@r = getrefine(); autobonus "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",3*.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; showscript \\\"Traaaansformation-!! Eddga form!!\\\"; }"; autobonus2 "{ bonus2 bSPLossRate,5,1000; bonus bBaseAtk,25*.@r; }",.@r,3000,BF_NORMAL,"{ transform 1115,3000; specialeffect2 EF_POTION_BERSERK; showscript \\\"Traaaansformation-!! Eddga form!!\\\"; }";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18857,'Curupira_Hat','Curupira Hat',4,10,NULL,100,NULL,20,NULL,0,0xFFFFFFFF,63,2,256,NULL,'1',1,974,'bonus bDex,3; bonus2 bAddEffWhenHit,Eff_Confusion,500;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18859,'Angeling_Bubble','Angeling Bubble',4,10,NULL,50,NULL,5,NULL,0,0xFFFFFFFF,63,2,1,NULL,'1',NULL,975,'bonus bDex,1; bonus bMatkRate,2; bonus bMaxHP,100;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18861,'Zaha_Doll_J_Hat','Zaha Doll J Hat',4,10,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,256,NULL,'50',1,461,'bonus bHealPower,15; bonus bUseSPrate,15;',NULL,NULL);
@ -9433,6 +9435,7 @@ REPLACE INTO `item_db_re` VALUES (18997,'Reckless_Chip','Reckless Chip',4,10,NUL
REPLACE INTO `item_db_re` VALUES (19019,'Elemental_Crown','Elemental Crown',4,0,NULL,500,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,NULL,NULL,1,1219,'.@r = getrefine(); bonus bDex,(3 + (.@r/2)+ (readparam(bDex) > 130 ? .@r : 0)); bonus bLongAtkRate,4;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19020,'Survive_Circlet','Survive Circlet',4,0,NULL,500,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,NULL,NULL,1,1220,'.@r = getrefine(); bonus bInt,(3 + (.@r/2)+ (BaseLevel > 130 ? .@r : 0)); bonus bMatkRate,4;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19021,'Gigant_Helm','Gigant Helm',4,0,NULL,500,NULL,10,NULL,1,0xFFFFFFFF,63,2,256,NULL,NULL,1,1221,'bonus bStr,3+((BaseLevel > 130) ? getrefine() : 0); bonus bAtkRate,4;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19024,'Protect_Feathers','Protect Feathers',4,0,NULL,500,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,512,1,'70',1,1232,'bonus2 bSubRace,RC_DemiHuman,2; bonus2 bSubRace,RC_Player,2; bonus bAspdRate,-5; .@vit = readparam(bVit); if (.@vit >= 108) { bonus2 bSubRace,RC_DemiHuman,3; bonus2 bSubRace,RC_Player,3; bonus bAspdRate,-5; } if (.@vit >= 120) { bonus bMaxHPRate,3; bonus bMdef,3; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19026,'Aegir_Helm','Aegir Helm',4,10,NULL,800,NULL,10,NULL,0,0xFFFFFFFF,63,2,256,NULL,'40',1,870,'bonus bVit,3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19030,'Pretty_Rabbit_Hood','Pretty Rabbit Hood',4,10,NULL,100,NULL,20,NULL,0,0xFFFFFFFF,63,2,1,NULL,'1',1,1085,'bonus bMaxHP,(15*BaseLevel);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19031,'Fallen_Angel_Blessing','Fallen Angel Blessing',4,0,NULL,200,NULL,1,NULL,0,0xFFFFFFFF,63,2,512,NULL,NULL,1,1250,'bonus2 bAddRace,RC_Angel,5; bonus2 bSubRace,RC_Angel,5;',NULL,NULL);
@ -9476,12 +9479,12 @@ REPLACE INTO `item_db_re` VALUES (19529,'C_Angelic_Chain','Costume Angel Wing',4
REPLACE INTO `item_db_re` VALUES (19530,'C_Wild_Rose','Costume Wild Rose',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,541,'bonus bUnbreakableHelm,0; bonus bBaseAtk,2; bonus bMatk,2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19531,'C_Cube_Mask','Costume Cube Mask',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,6144,NULL,'0',0,472,'bonus bUnbreakableHelm,0; bonus bFlee,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19532,'C_Red_Bunny_Band','Red Bunny Band',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,640,'bonus bUnbreakableHelm,0; bonus bDex,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19533,'C_Spore_Hat','Costume Spore Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,114,'bonus bUnbreakableHelm,0; bonus bVit,1; bonus2 bExpAddClass,Class_All,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19534,'C_Tha_Despero_Mask','Costume Thanatos Despero Mask',4,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,513,NULL,'1',0,693,'bonus bAtkRate,1; bonus bMatkRate,1; bonus bHealPower,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19535,'C_Sinsuncho_Hat','Costume Sinsuncho Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,730,'bonus bUnbreakableHelm,0; bonus bStr,1; bonus2 bExpAddClass,Class_All,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19533,'C_Spore_Hat','Costume Spore Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,114,'bonus bUnbreakableHelm,0; bonus bVit,1; bonus2 bExpAddRace,RC_All,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19534,'C_Tha_Despero_Mask','Costume Thanatos Despero Mask',4,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,513,NULL,'1',0,693,'bonus2 bAddClass,Class_All,1; bonus bMatkRate,1; bonus bHealPower,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19535,'C_Sinsuncho_Hat','Costume Sinsuncho Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,730,'bonus bUnbreakableHelm,0; bonus bStr,1; bonus2 bExpAddRace,RC_All,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19536,'C_Rose_Corsage','Costume Rose Corsage',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,533,'bonus bUnbreakableHelm,0; bonus bInt,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19537,'C_Gryphon_Hat','Costume Gryphon Hat',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,591,'bonus bUnbreakableHelm,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19538,'Full_Moon','Full Moon',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,780,'autobonus "{ bonus bMatk,50; bonus bBaseAtk,50; }",10,5000;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19538,'Full_Moon','Full Moon',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,780,'autobonus "{ bonus bBaseAtk,50; }",10,5000,BF_WEAPON,"{ specialeffect2 EF_POTION_BERSERK; /* showscript */ }"; autobonus "{ bonus bMatk,50; }",5,5000,BF_MAGIC,"{ specialeffect2 EF_ENERGYCOAT; /* showscript */ }";',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19539,'C_Reginleif_Hairband','Costume Hairband Of Reginleif',4,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,468,'bonus bAllStats,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19540,'C_Rabbit_Earplug','Costume Rabbit Earplugs',4,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,7168,NULL,'1',0,515,'bonus bAgi,1; bonus bFlee,2;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19541,'C_Romantic_White_Flower','Costume Romantic White Flower',4,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,4096,NULL,'1',0,259,'bonus bUnbreakableHelm,0;',NULL,NULL);
@ -9751,7 +9754,8 @@ REPLACE INTO `item_db_re` VALUES (20094,'C_Green_Ribbon','Costume Green Ribbon',
REPLACE INTO `item_db_re` VALUES (20095,'C_Red_Ribbon','Costume Red Ribbon',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,440,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20096,'C_Blue_Ribbon','Costume Blue Ribbon',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,441,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20097,'C_White_Ribbon','Costume White Ribbon',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,442,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20110,'C_Coiledup_Snake','Costume Coiledup Snake',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,NULL,'/*TODO: View ID*/',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20099,'C_Flying_Ljosalfar','Flying Ljosalfar',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,1,'1',1,1239,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20110,'C_Coiledup_Snake','Costume Coiledup Snake',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,1258,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20118,'C_Cake_Hat','Costume Cake Hat',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,109,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20119,'C_Beanie','Costume Beanie',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,160,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20120,'C_Aerial','Costume Aerial',4,0,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',1,97,NULL,NULL,NULL);
@ -9809,7 +9813,7 @@ REPLACE INTO `item_db_re` VALUES (20233,'C_Golden_Angel','Costume Golden Angel',
#
REPLACE INTO `item_db_re` VALUES (20500,'T_Archangel_Wing','Archangel Wing',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,1,'bonus bUnbreakableHelm,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20600,'Fantastic_Aura','Fantastic Aura',4,0,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',0,0,'/*View ID*/ bonus bUnbreakableHelm,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20700,'Egir_Manteau','Egir Manteau',4,200000,NULL,300,NULL,10,NULL,1,0xFFFFFFFF,63,2,4,NULL,'110',1,0,'bonus bUnbreakableHelm,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20700,'Egir_Manteau','Egir Manteau',4,200000,NULL,300,NULL,10,NULL,1,0xFFFFFFFF,63,2,4,NULL,'110',1,0,'bonus bUnbreakableGarment,0; .@r = getrefine(); if (.@r > 10) .@r = 10; if (BaseClass == Job_Mage || BaseClass == Job_Archer || BaseClass == Job_Acolyte) { bonus bFlee2,5+(.@r*2); } else if (BaseClass == Job_Swordman || BaseClass == Job_Merchant || BaseClass == Job_Thief) { bonus bShortWeaponDamageReturn,5+(.@r*2); }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20706,'Amistr_Bag','Amistr Bag',4,10,NULL,500,NULL,18,NULL,0,0xFFFFFFFF,63,2,4,NULL,'1',NULL,4,'bonus bAllStats,1; bonus2 bSubEle,Ele_All,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20707,'Kirin_Wing','Kirin Wing',4,20,NULL,0,NULL,18,NULL,0,0xFFFFFFFF,63,2,4,NULL,'0',1,6,'bonus bAllStats,1; bonus2 bSubRace,RC_DemiHuman,5; bonus2 bSubRace,RC_Player,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20710,'Impr_Angel\'s_Warmth','Advanced Angelic Cardigan',4,10000,NULL,400,NULL,6,NULL,1,0x00000001,63,2,4,NULL,'99',1,0,'bonus bHPrecovRate,50;',NULL,NULL);
@ -9817,7 +9821,7 @@ REPLACE INTO `item_db_re` VALUES (20711,'Manteau_Of_Diego','Manteau Of Diego',4,
REPLACE INTO `item_db_re` VALUES (20717,'Gigant_Snake_Skin','Gigant Snake Skin',4,10,NULL,400,NULL,38,NULL,0,0xFFFFFFFF,63,2,4,NULL,'1',1,0,'bonus bMdef,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20718,'Gigant_Snake_Skin','Gigant Snake Skin',4,10,NULL,400,NULL,38,NULL,1,0xFFFFFFFF,63,2,4,NULL,'1',1,0,'bonus bMdef,10;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20721,'Black_As_Night_Cloak','Black As Night Cloak',4,10,NULL,600,NULL,45,NULL,1,0xFFFFFFFF,63,2,4,NULL,'120',1,0,'bonus2 bSubEle,Ele_Holy,5+(getrefine()/2);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20724,'Love_Dad_Wings_2012','Love Dad Wings 2012',4,0,NULL,100,NULL,15,NULL,1,0xFFFFFFFF,63,2,4,NULL,'1',1,5,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20724,'Love_Dad_Wings_2012','Love Dad Wings 2012',4,0,NULL,100,NULL,15,NULL,1,0xFFFFFFFF,63,2,4,NULL,'1',1,5,'.@r = getrefine(); bonus bAllStats,1; if ((readparam(bStr)>89)) { bonus bStr,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } if ((readparam(bAgi)>89)) { bonus bAgi,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } if ((readparam(bVit)>89)) { bonus bVit,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } if ((readparam(bInt)>89)) { bonus bInt,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } if ((readparam(bDex)>89)) { bonus bDex,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; } if ((readparam(bLuk)>89)) { bonus bLuk,.@r; bonus bMaxHPRate,1; bonus bMaxSPRate,1; }',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20725,'Ribbon_Piamat','Ribbon Piamat',4,10,NULL,100,'0:10',NULL,NULL,0,0xFFFFFFFF,63,2,4,NULL,'30',1,7,'bonus bInt,1; bonus bDex,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20727,'Brilliant_Golden_Wings','Brilliant Golden Wings',4,10,NULL,0,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'1',1,5,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (20730,'Loyalists_Hood','Loyalists Hood',4,10,NULL,200,NULL,30,NULL,0,0xFFFFFFFF,63,2,8192,NULL,'80',NULL,NULL,'bonus bStr,2; bonus bMaxHPrate,10; bonus bNoKnockback,1; bonus2 bSubEle,Ele_All,-20;',NULL,NULL);
@ -9936,15 +9940,15 @@ REPLACE INTO `item_db_re` VALUES (22625,'Oktoberfest_Bag','Oktoberfest Bag',2,0,
REPLACE INTO `item_db_re` VALUES (22628,'Green_Package','Green Package',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 17162,1; getitem 14534,5; getitem 12323,20; getitem 12324,20; getitem 12325,10; getitem 14533,2; getitem 22629,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22629,'Green_Package40','Green Package 40',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 14289,1; getitem 12215,10; getitem 12216,10; getitem 14534,10; getitem 14533,5; getitem 12766,5; getitem 22630,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22630,'Green_Package80','Green Package 80',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 7621,5; getitem 12209,5; getitem 14527,10; getitem 14533,5; getitem 12766,5; getitem 22631,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22631,'Green_Package99','Green Package 99',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 12213,1; /*getitem Transmission_Coupon,1;*/ getitem 5883,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22631,'Green_Package99','Green Package 99',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 12213,1; getitem 7676,1; getitem 5883,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22640,'17173_Green_Package','Green Package',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 17162,1; getitem 14534,5; getitem 12323,20; getitem 12324,20; getitem 12325,10; getitem 14533,2; getitem 22641,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22641,'17173_Green_Package40','Green Package 40',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 14289,1; getitem 12215,10; getitem 12216,10; getitem 14534,10; getitem 14533,5; getitem 12766,5; getitem 22642,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22642,'17173_Green_Package80','Green Package 80',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 7621,5; getitem 12209,5; getitem 14527,10; getitem 14533,5; getitem 12766,5; getitem 22643,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22643,'17173_Green_Package99','Green Package 99',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 12213,1; /*getitem Transmission_Coupon,1;*/ getitem 5883,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22643,'17173_Green_Package99','Green Package 99',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 12213,1; getitem 7676,1; getitem 5883,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22644,'S_Green_Package','Green Package',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 17162,1; getitem 14534,5; getitem 12323,20; getitem 12324,20; getitem 12325,10; getitem 14533,2; getitem 22645,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22645,'S_Green_Package40','Green Package 40',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 14289,1; getitem 12215,10; getitem 12216,10; getitem 14534,10; getitem 14533,5; getitem 12766,5; getitem 22646,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22646,'S_Green_Package80','Green Package 80',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 7621,5; getitem 12209,5; getitem 14527,10; getitem 14533,5; getitem 12766,5; getitem 22647,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22647,'S_Green_Package99','Green Package 99',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 12213,1; /*getitem Transmission_Coupon,1;*/ getitem 5883,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22647,'S_Green_Package99','Green Package 99',18,0,NULL,100,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'getitem 12213,1; getitem 7676,1; getitem 5883,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22648,'Angeling_Package','Angel Ring Package',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/* TODO */',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22649,'Deviling_Package','Devil Ring Package',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/* TODO */',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22652,'Briliant_Hat_Box','Brilliant Hat Box',2,10,NULL,200,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/* TODO */',NULL,NULL);
@ -10297,10 +10301,10 @@ REPLACE INTO `item_db_re` VALUES (28202,'Southern_Cross_','Southern Cross',5,280
REPLACE INTO `item_db_re` VALUES (28203,'Half_BF_Rifle1','Half BF Rifle1',5,0,NULL,0,'50',NULL,9,0,0x41000000,63,2,34,3,'80',1,18,'bonus bDex,2; bonus bHit,8; bonus bCritical,8; bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bVariableCastrate,"GS_TRACKING",-20; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; bonus bUnbreakableWeapon,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (28204,'Half_BF_Shotgun1','Half BF Shotgun1',5,0,NULL,0,'100',NULL,9,0,0x41000000,63,2,34,3,'80',1,20,'bonus bDex,2; bonus bSplashRange,1; bonus2 bAddRace,RC_DemiHuman,30; bonus2 bAddRace,RC_Player,30; bonus2 bIgnoreDefRaceRate,RC_DemiHuman,10; bonus2 bIgnoreDefRaceRate,RC_Player,10; autobonus "{ bonus bBaseAtk,80; bonus2 bHPLossRate,100,1000; }",30,6000,BF_WEAPON,"{ specialeffect2 EF_BASH3D; }"; bonus bUnbreakableWeapon,0;',NULL,NULL);
#
#28315,RCC2013_ARMLET
#28316,RCC2013_ARMLET_
#28317,RCC2013_RING
#28318,RCC2013_RING_
REPLACE INTO `item_db_re` VALUES (28315,'RCC2013_ARMLET','RCC2013_ARMLET',4,200,NULL,200,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus2 bAddClass,Class_All,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (28316,'RCC2013_ARMLET_','RCC2013_ARMLET_',4,200,NULL,200,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus2 bAddClass,Class_All,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (28317,'RCC2013_RING','RCC2013_RING',4,200,NULL,200,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus2 bAddClass,Class_All,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (28318,'RCC2013_RING_','RCC2013_RING_',4,200,NULL,200,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'1',0,NULL,'bonus2 bAddClass,Class_All,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (28310,'Sarah\'s_Left_Earring','Sarah\'s Left Earring',4,10,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,128,NULL,'145',1,NULL,'skill "AL_HEAL",1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (28311,'Sarah\'s_Right_Earring','Sarah\'s Right Earring',4,10,NULL,100,NULL,NULL,NULL,0,0xFFFFFFFF,63,2,8,NULL,'145',1,NULL,'skill "AL_TELEPORT",1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (28326,'Broken_Chips_01','Broken Chips 01',4,10,NULL,100,NULL,NULL,NULL,1,0xFFFFFFFF,63,2,136,NULL,'100',1,NULL,'bonus bStr,4;',NULL,NULL);

View File

@ -150,6 +150,7 @@ CREATE TABLE IF NOT EXISTS `char` (
`unban_time` int(11) unsigned NOT NULL default '0',
`font` tinyint(3) unsigned NOT NULL default '0',
`uniqueitem_counter` int(11) unsigned NOT NULL default '0',
`sex` ENUM('M','F','U') NOT NULL default 'U',
PRIMARY KEY (`char_id`),
UNIQUE KEY `name_key` (`name`),
KEY `account_id` (`account_id`),
@ -699,6 +700,72 @@ CREATE TABLE IF NOT EXISTS `ragsrvinfo` (
`drop` int(11) unsigned NOT NULL default '0'
) ENGINE=MyISAM;
--
-- Table structure for `db_roulette`
--
CREATE TABLE `db_roulette` (
`index` int(11) NOT NULL default '0',
`level` smallint(5) unsigned NOT NULL,
`item_id` smallint(5) unsigned NOT NULL,
`amount` smallint(5) unsigned NOT NULL DEFAULT '1',
`flag` smallint(5) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`index`)
) ENGINE=MyISAM;
-- ----------------------------
-- Records of db_roulette
-- ----------------------------
-- Info: http://ro.gnjoy.com/news/update/View.asp?seq=157&curpage=1
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 0, 1, 675, 1, 1 ); -- Silver_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 1, 1, 671, 1, 0 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 2, 1, 678, 1, 0 ); -- Poison_Bottle
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 3, 1, 604, 1, 0 ); -- Branch_Of_Dead_Tree
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 4, 1, 522, 1, 0 ); -- Fruit_Of_Mastela
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 5, 1, 671, 1, 0 ); -- Old_Ore_Box
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 6, 1, 12523, 1, 0 ); -- E_Inc_Agi_10_Scroll
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 7, 1, 985, 1, 0 ); -- Elunium
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 8, 1, 984, 1, 0 ); -- Oridecon
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 9, 2, 675, 1, 1 ); -- Silver_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 10, 2, 671, 1, 0 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 11, 2, 603, 1, 0 ); -- Old_Blue_Box
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 12, 2, 608, 1, 0 ); -- Seed_Of_Yggdrasil
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 13, 2, 607, 1, 0 ); -- Yggdrasilberry
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 14, 2, 12522, 1, 0 ); -- E_Blessing_10_Scroll
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 15, 2, 6223, 1, 0 ); -- Carnium
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 16, 2, 6224, 1, 0 ); -- Bradium
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 17, 3, 675, 1, 1 ); -- Silver_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 18, 3, 671, 1, 0 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 19, 3, 12108, 1, 0 ); -- Bundle_Of_Magic_Scroll
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 20, 3, 617, 1, 0 ); -- Old_Violet_Box
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 21, 3, 12514, 1, 0 ); -- E_Abrasive
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 22, 3, 7444, 1, 0 ); -- Treasure_Box
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 23, 3, 969, 1, 0 ); -- Gold
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 24, 4, 675, 1, 1 ); -- Silver_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 25, 4, 671, 1, 0 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 26, 4, 616, 1, 0 ); -- Old_Card_Album
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 27, 4, 12516, 1, 0 ); -- E_Small_Life_Potion
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 28, 4, 22777, 1, 0 ); -- Gift_Buff_Set
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 29, 4, 6231, 1, 0 ); -- Guarantee_Weapon_6Up
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 30, 5, 671, 1, 1 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 31, 5, 12246, 1, 0 ); -- Magic_Card_Album
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 32, 5, 12263, 1, 0 ); -- Comp_Battle_Manual
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 33, 5, 671, 1, 0 ); -- Potion_Box
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 34, 5, 6235, 1, 0 ); -- Guarantee_Armor_6Up
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 35, 6, 671, 1, 1 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 36, 6, 12766, 1, 0 ); -- Reward_Job_BM25
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 37, 6, 6234, 1, 0 ); -- Guarantee_Armor_7Up
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 38, 6, 6233, 1, 0 ); -- Guarantee_Armor_8Up
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 39, 7, 671, 1, 1 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 40, 7, 6233, 1, 0 ); -- Guarantee_Armor_8Up
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 41, 7, 6233, 1, 0 ); -- Guarantee_Armor_8Up // KRO lists this twice
--
-- Table structure for table `skill`
--

View File

@ -0,0 +1,67 @@
ALTER TABLE `char` ADD COLUMN `sex` ENUM('M','F','U') NOT NULL default 'U';
--
-- Table structure for `db_roulette`
--
CREATE TABLE `db_roulette` (
`index` int(11) NOT NULL default '0',
`level` smallint(5) unsigned NOT NULL,
`item_id` smallint(5) unsigned NOT NULL,
`amount` smallint(5) unsigned NOT NULL DEFAULT '1',
`flag` smallint(5) unsigned NOT NULL DEFAULT '1',
PRIMARY KEY (`index`)
) ENGINE=MyISAM;
-- ----------------------------
-- Records of db_roulette
-- ----------------------------
-- Info: http://ro.gnjoy.com/news/update/View.asp?seq=157&curpage=1
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 0, 1, 675, 1, 1 ); -- Silver_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 1, 1, 671, 1, 0 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 2, 1, 678, 1, 0 ); -- Poison_Bottle
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 3, 1, 604, 1, 0 ); -- Branch_Of_Dead_Tree
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 4, 1, 522, 1, 0 ); -- Fruit_Of_Mastela
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 5, 1, 671, 1, 0 ); -- Old_Ore_Box
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 6, 1, 12523, 1, 0 ); -- E_Inc_Agi_10_Scroll
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 7, 1, 985, 1, 0 ); -- Elunium
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 8, 1, 984, 1, 0 ); -- Oridecon
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 9, 2, 675, 1, 1 ); -- Silver_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 10, 2, 671, 1, 0 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 11, 2, 603, 1, 0 ); -- Old_Blue_Box
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 12, 2, 608, 1, 0 ); -- Seed_Of_Yggdrasil
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 13, 2, 607, 1, 0 ); -- Yggdrasilberry
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 14, 2, 12522, 1, 0 ); -- E_Blessing_10_Scroll
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 15, 2, 6223, 1, 0 ); -- Carnium
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 16, 2, 6224, 1, 0 ); -- Bradium
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 17, 3, 675, 1, 1 ); -- Silver_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 18, 3, 671, 1, 0 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 19, 3, 12108, 1, 0 ); -- Bundle_Of_Magic_Scroll
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 20, 3, 617, 1, 0 ); -- Old_Violet_Box
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 21, 3, 12514, 1, 0 ); -- E_Abrasive
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 22, 3, 7444, 1, 0 ); -- Treasure_Box
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 23, 3, 969, 1, 0 ); -- Gold
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 24, 4, 675, 1, 1 ); -- Silver_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 25, 4, 671, 1, 0 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 26, 4, 616, 1, 0 ); -- Old_Card_Album
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 27, 4, 12516, 1, 0 ); -- E_Small_Life_Potion
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 28, 4, 22777, 1, 0 ); -- Gift_Buff_Set
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 29, 4, 6231, 1, 0 ); -- Guarantee_Weapon_6Up
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 30, 5, 671, 1, 1 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 31, 5, 12246, 1, 0 ); -- Magic_Card_Album
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 32, 5, 12263, 1, 0 ); -- Comp_Battle_Manual
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 33, 5, 671, 1, 0 ); -- Potion_Box
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 34, 5, 6235, 1, 0 ); -- Guarantee_Armor_6Up
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 35, 6, 671, 1, 1 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 36, 6, 12766, 1, 0 ); -- Reward_Job_BM25
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 37, 6, 6234, 1, 0 ); -- Guarantee_Armor_7Up
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 38, 6, 6233, 1, 0 ); -- Guarantee_Armor_8Up
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 39, 7, 671, 1, 1 ); -- Gold_Coin
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 40, 7, 6233, 1, 0 ); -- Guarantee_Armor_8Up
INSERT INTO `db_roulette`(`index`, `level`, `item_id`, `amount`, `flag` ) VALUES ( 41, 7, 6233, 1, 0 ); -- Guarantee_Armor_8Up // KRO lists this twice

View File

@ -0,0 +1 @@
ALTER TABLE `picklog` MODIFY `type` enum('M','P','L','T','V','S','N','C','A','R','G','E','B','O','I','X','D','U','$','F','Y') NOT NULL default 'P';

View File

@ -837,6 +837,54 @@ int char_inventory_to_sql(const struct item items[], int max, int id) {
return errors;
}
/**
* Returns the correct gender ID for the given character and enum value.
*
* If the per-character sex is defined but not supported by the current packetver, the database entries are corrected.
*
* @param sd Character data, if available.
* @param p Character status.
* @param sex Character sex (database enum)
*
* @retval SEX_MALE if the per-character sex is male
* @retval SEX_FEMALE if the per-character sex is female
* @retval 99 if the per-character sex is not defined or the current PACKETVER doesn't support it.
*/
int char_mmo_gender(const struct char_session_data *sd, const struct mmo_charstatus *p, char sex)
{
#if PACKETVER >= 20141016
(void)sd; (void)p; // Unused
switch (sex) {
case 'M':
return SEX_MALE;
case 'F':
return SEX_FEMALE;
case 'U':
default:
return 99;
}
#else
if (sex == 'M' || sex == 'F') {
if (!sd) {
// sd is not available, there isn't much we can do. Just return and print a warning.
ShowWarning("Character '%s' (CID: %d, AID: %d) has sex '%c', but PACKETVER does not support per-character sex. Defaulting to 'U'.\n",
p->name, p->char_id, p->account_id, sex);
return 99;
}
if ((sex == 'M' && sd->sex == SEX_FEMALE)
|| (sex == 'F' && sd->sex == SEX_MALE)) {
ShowWarning("Changing sex of character '%s' (CID: %d, AID: %d) to 'U' due to incompatible PACKETVER.\n", p->name, p->char_id, p->account_id);
chlogif_parse_ackchangecharsex(p->char_id, sd->sex);
} else {
ShowInfo("Resetting sex of character '%s' (CID: %d, AID: %d) to 'U' due to incompatible PACKETVER.\n", p->name, p->char_id, p->account_id);
}
if (SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `sex` = 'U' WHERE `char_id` = '%d'", schema_config.char_db, p->char_id)) {
Sql_ShowDebug(sql_handle);
}
}
return 99;
#endif
}
int char_mmo_char_tobuf(uint8* buf, struct mmo_charstatus* p);
@ -847,16 +895,16 @@ int char_mmo_chars_fromsql(struct char_session_data* sd, uint8* buf) {
struct mmo_charstatus p;
int j = 0, i;
char last_map[MAP_NAME_LENGTH_EXT];
char sex[2];
stmt = SqlStmt_Malloc(sql_handle);
if( stmt == NULL )
{
if( stmt == NULL ) {
SqlStmt_ShowDebug(stmt);
return 0;
}
memset(&p, 0, sizeof(p));
for( i = 0; i < MAX_CHARS; i++ ){
for( i = 0; i < MAX_CHARS; i++ ) {
sd->found_char[i] = -1;
sd->unban_time[i] = 0;
}
@ -867,7 +915,7 @@ int char_mmo_chars_fromsql(struct char_session_data* sd, uint8* buf) {
"`str`,`agi`,`vit`,`int`,`dex`,`luk`,`max_hp`,`hp`,`max_sp`,`sp`,"
"`status_point`,`skill_point`,`option`,`karma`,`manner`,`hair`,`hair_color`,"
"`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,`last_map`,`rename`,`delete_date`,"
"`robe`,`moves`,`unban_time`,`font`,`uniqueitem_counter`"
"`robe`,`moves`,`unban_time`,`font`,`uniqueitem_counter`,`sex`"
" FROM `%s` WHERE `account_id`='%d' AND `char_num` < '%d'", schema_config.char_db, sd->account_id, MAX_CHARS)
|| SQL_ERROR == SqlStmt_Execute(stmt)
|| SQL_ERROR == SqlStmt_BindColumn(stmt, 0, SQLDT_INT, &p.char_id, 0, NULL, NULL)
@ -910,6 +958,7 @@ int char_mmo_chars_fromsql(struct char_session_data* sd, uint8* buf) {
|| SQL_ERROR == SqlStmt_BindColumn(stmt, 37, SQLDT_LONG, &p.unban_time, 0, NULL, NULL)
|| SQL_ERROR == SqlStmt_BindColumn(stmt, 38, SQLDT_UCHAR, &p.font, 0, NULL, NULL)
|| SQL_ERROR == SqlStmt_BindColumn(stmt, 39, SQLDT_UINT, &p.uniqueitem_counter, 0, NULL, NULL)
|| SQL_ERROR == SqlStmt_BindColumn(stmt, 40, SQLDT_ENUM, &sex, sizeof(sex), NULL, NULL)
)
{
SqlStmt_ShowDebug(stmt);
@ -922,6 +971,7 @@ int char_mmo_chars_fromsql(struct char_session_data* sd, uint8* buf) {
p.last_point.map = mapindex_name2id(last_map);
sd->found_char[p.slot] = p.char_id;
sd->unban_time[p.slot] = p.unban_time;
p.sex = char_mmo_gender(sd, &p, sex[0]);
j += char_mmo_char_tobuf(WBUFP(buf, j), &p);
// Addon System
@ -954,6 +1004,7 @@ int char_mmo_char_fromsql(uint32 char_id, struct mmo_charstatus* p, bool load_ev
int hotkey_num;
#endif
StringBuf msg_buf;
char sex[2];
memset(p, 0, sizeof(struct mmo_charstatus));
@ -973,7 +1024,7 @@ int char_mmo_char_fromsql(uint32 char_id, struct mmo_charstatus* p, bool load_ev
"`status_point`,`skill_point`,`option`,`karma`,`manner`,`party_id`,`guild_id`,`pet_id`,`homun_id`,`elemental_id`,`hair`,"
"`hair_color`,`clothes_color`,`weapon`,`shield`,`head_top`,`head_mid`,`head_bottom`,`last_map`,`last_x`,`last_y`,"
"`save_map`,`save_x`,`save_y`,`partner_id`,`father`,`mother`,`child`,`fame`,`rename`,`delete_date`,`robe`, `moves`,"
"`unban_time`,`font`,`uniqueitem_counter`"
"`unban_time`,`font`,`uniqueitem_counter`,`sex`"
" FROM `%s` WHERE `char_id`=? LIMIT 1", schema_config.char_db)
|| SQL_ERROR == SqlStmt_BindParam(stmt, 0, SQLDT_INT, &char_id, 0)
|| SQL_ERROR == SqlStmt_Execute(stmt)
@ -1033,6 +1084,7 @@ int char_mmo_char_fromsql(uint32 char_id, struct mmo_charstatus* p, bool load_ev
|| SQL_ERROR == SqlStmt_BindColumn(stmt, 53, SQLDT_LONG, &p->unban_time, 0, NULL, NULL)
|| SQL_ERROR == SqlStmt_BindColumn(stmt, 54, SQLDT_UCHAR, &p->font, 0, NULL, NULL)
|| SQL_ERROR == SqlStmt_BindColumn(stmt, 55, SQLDT_UINT, &p->uniqueitem_counter, 0, NULL, NULL)
|| SQL_ERROR == SqlStmt_BindColumn(stmt, 56, SQLDT_ENUM, &sex, sizeof(sex), NULL, NULL)
)
{
SqlStmt_ShowDebug(stmt);
@ -1045,6 +1097,7 @@ int char_mmo_char_fromsql(uint32 char_id, struct mmo_charstatus* p, bool load_ev
SqlStmt_Free(stmt);
return 0;
}
p->sex = char_mmo_gender(NULL, p, sex[0]);
p->last_point.map = mapindex_name2id(last_map);
p->save_point.map = mapindex_name2id(save_map);
@ -1671,7 +1724,13 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
WBUFW(buf,48) = min(p->max_sp, INT16_MAX);
WBUFW(buf,50) = DEFAULT_WALK_SPEED; // p->speed;
WBUFW(buf,52) = p->class_;
#if PACKETVER >= 20141022
WBUFL(buf,54) = p->hair;
offset+=2;
buf = WBUFP(buffer,offset);
#else
WBUFW(buf,54) = p->hair;
#endif
//When the weapon is sent and your option is riding, the client crashes on login!?
WBUFW(buf,56) = p->option&(0x20|0x80000|0x100000|0x200000|0x400000|0x800000|0x1000000|0x2000000|0x4000000|0x8000000) ? 0 : p->weapon;
@ -1725,6 +1784,10 @@ int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p)
WBUFL(buf,136) = ( p->rename > 0 ) ? 1 : 0; // (0 = disabled, otherwise displays "Add-Ons" sidebar)
offset += 4;
#endif
#if PACKETVER >= 20141016
WBUFB(buf,140) = p->sex;// sex - (0 = female, 1 = male, 99 = logindefined)
offset += 1;
#endif
#endif
return 106+offset;
@ -2154,6 +2217,9 @@ bool char_checkdb(void){
"`shield`,`head_top`,`head_mid`,`head_bottom`,`robe`,`last_map`,`last_x`,`last_y`,`save_map`,"
"`save_x`,`save_y`,`partner_id`,`online`,`father`,`mother`,`child`,`fame`,`rename`,`delete_date`,"
"`moves`,`unban_time`,`font`"
#if PACKETVER >= 20141016
",`sex`"
#endif
" FROM `%s` LIMIT 1;", schema_config.char_db) ){
Sql_ShowDebug(sql_handle);
return false;
@ -2916,7 +2982,7 @@ int do_init(int argc, char **argv)
add_timer_func_list(char_online_data_cleanup, "online_data_cleanup");
add_timer_interval(gettick() + 1000, char_online_data_cleanup, 0, 0, 600 * 1000);
//chek db tables
//check db tables
if(charserv_config.char_check_db && char_checkdb() == 0){
ShowFatalError("char : A tables is missing in sql-server, please fix it, see (sql-files main.sql for structure) \n");
exit(EXIT_FAILURE);

View File

@ -222,7 +222,7 @@ extern struct fame_list chemist_fame_list[MAX_FAME_LIST];
extern struct fame_list taekwon_fame_list[MAX_FAME_LIST];
#define DEFAULT_AUTOSAVE_INTERVAL 300*1000
#define MAX_CHAR_BUF 144 //Max size (for WFIFOHEAD calls)
#define MAX_CHAR_BUF 150 //Max size (for WFIFOHEAD calls)
int char_search_mapserver(unsigned short map, uint32 ip, uint16 port);
int char_lan_subnetcheck(uint32 ip);
@ -236,6 +236,7 @@ void char_set_all_offline(int id);
void char_disconnect_player(uint32 account_id);
int char_chardb_waiting_disconnect(int tid, unsigned int tick, int id, intptr_t data);
int char_mmo_gender(const struct char_session_data *sd, const struct mmo_charstatus *p, char sex);
int char_mmo_char_tobuf(uint8* buffer, struct mmo_charstatus* p);
int char_mmo_char_tosql(uint32 char_id, struct mmo_charstatus* p);
int char_mmo_char_fromsql(uint32 char_id, struct mmo_charstatus* p, bool load_everything);

View File

@ -711,7 +711,8 @@ int chclif_parse_charselect(int fd, struct char_session_data* sd,uint32 ipl){
//Have to switch over to the DB instance otherwise data won't propagate [Kevin]
cd = (struct mmo_charstatus *)idb_get(char_db_, char_id);
cd->sex = sd->sex;
if (cd->sex == 99)
cd->sex = sd->sex;
if (charserv_config.log_char) {
char esc_name[NAME_LENGTH*2+1];

View File

@ -390,76 +390,79 @@ int chlogif_parse_keepalive(int fd, struct char_session_data* sd){
return 1;
}
int chlogif_parse_ackchangesex(int fd, struct char_session_data* sd){
/**
* Performs the necessary operations when changing a character's sex, such as
* correcting the job class and unequipping items, and propagating the
* information to the guild data.
*
* @param sex The new sex (SEX_MALE or SEX_FEMALE).
* @param acc The character's account ID.
* @param char_id The character ID.
* @param class_ The character's current job class.
* @param guild_id The character's guild ID.
*/
void chlogif_parse_change_sex_sub(int sex, int acc, int char_id, int class_, int guild_id)
{
// job modification
if (class_ == JOB_BARD || class_ == JOB_DANCER)
class_ = (sex == SEX_MALE ? JOB_BARD : JOB_DANCER);
else if (class_ == JOB_CLOWN || class_ == JOB_GYPSY)
class_ = (sex == SEX_MALE ? JOB_CLOWN : JOB_GYPSY);
else if (class_ == JOB_BABY_BARD || class_ == JOB_BABY_DANCER)
class_ = (sex == SEX_MALE ? JOB_BABY_BARD : JOB_BABY_DANCER);
else if (class_ == JOB_MINSTREL || class_ == JOB_WANDERER)
class_ = (sex == SEX_MALE ? JOB_MINSTREL : JOB_WANDERER);
else if (class_ == JOB_MINSTREL_T || class_ == JOB_WANDERER_T)
class_ = (sex == SEX_MALE ? JOB_MINSTREL_T : JOB_WANDERER_T);
else if (class_ == JOB_BABY_MINSTREL || class_ == JOB_BABY_WANDERER)
class_ = (sex == SEX_MALE ? JOB_BABY_MINSTREL : JOB_BABY_WANDERER);
else if (class_ == JOB_KAGEROU || class_ == JOB_OBORO)
class_ = (sex == SEX_MALE ? JOB_KAGEROU : JOB_OBORO);
if (SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `equip` = '0' WHERE `char_id` = '%d'", schema_config.inventory_db, char_id))
Sql_ShowDebug(sql_handle);
if (SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `class` = '%d', `weapon` = '0', `shield` = '0', `head_top` = '0', `head_mid` = '0', `head_bottom` = '0' WHERE `char_id` = '%d'", schema_config.char_db, class_, char_id))
Sql_ShowDebug(sql_handle);
if (guild_id) // If there is a guild, update the guild_member data [Skotlex]
inter_guild_sex_changed(guild_id, acc, char_id, sex);
}
int chlogif_parse_ackchangesex(int fd, struct char_session_data* sd)
{
if (RFIFOREST(fd) < 7)
return 0;
{
unsigned char buf[7];
int acc = RFIFOL(fd,2);
int sex = RFIFOB(fd,6);
RFIFOSKIP(fd,7);
if( acc > 0 )
{// TODO: Is this even possible?
uint32 char_id[MAX_CHARS];
int class_[MAX_CHARS];
int guild_id[MAX_CHARS];
unsigned char num, i;
char* data;
DBMap* auth_db = char_get_authdb();
if (acc > 0) { // TODO: Is this even possible?
unsigned char i;
int char_id = 0, class_ = 0, guild_id = 0;
DBMap* auth_db = char_get_authdb();
struct auth_node* node = (struct auth_node*)idb_get(auth_db, acc);
if( node != NULL )
SqlStmt *stmt;
if (node != NULL)
node->sex = sex;
// get characters
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `char_id`,`class`,`guild_id` FROM `%s` WHERE `account_id` = '%d'", schema_config.char_db, acc) )
Sql_ShowDebug(sql_handle);
for( i = 0; i < MAX_CHARS && SQL_SUCCESS == Sql_NextRow(sql_handle); ++i )
{
Sql_GetData(sql_handle, 0, &data, NULL); char_id[i] = atoi(data);
Sql_GetData(sql_handle, 1, &data, NULL); class_[i] = atoi(data);
Sql_GetData(sql_handle, 2, &data, NULL); guild_id[i] = atoi(data);
stmt = SqlStmt_Malloc(sql_handle);
if (SQL_ERROR == SqlStmt_Prepare(stmt, "SELECT `char_id`, `class`, `guild_id` FROM `%s` WHERE `account_id` = '%d'", schema_config.char_db, acc) || SqlStmt_Execute(stmt)) {
SqlStmt_ShowDebug(stmt);
SqlStmt_Free(stmt);
}
num = i;
for( i = 0; i < num; ++i )
{
if( class_[i] == JOB_BARD || class_[i] == JOB_DANCER ||
class_[i] == JOB_CLOWN || class_[i] == JOB_GYPSY ||
class_[i] == JOB_BABY_BARD || class_[i] == JOB_BABY_DANCER ||
class_[i] == JOB_MINSTREL || class_[i] == JOB_WANDERER ||
class_[i] == JOB_MINSTREL_T || class_[i] == JOB_WANDERER_T ||
class_[i] == JOB_BABY_MINSTREL || class_[i] == JOB_BABY_WANDERER ||
class_[i] == JOB_KAGEROU || class_[i] == JOB_OBORO )
{
// job modification
if( class_[i] == JOB_BARD || class_[i] == JOB_DANCER )
class_[i] = (sex ? JOB_BARD : JOB_DANCER);
else if( class_[i] == JOB_CLOWN || class_[i] == JOB_GYPSY )
class_[i] = (sex ? JOB_CLOWN : JOB_GYPSY);
else if( class_[i] == JOB_BABY_BARD || class_[i] == JOB_BABY_DANCER )
class_[i] = (sex ? JOB_BABY_BARD : JOB_BABY_DANCER);
else if( class_[i] == JOB_MINSTREL || class_[i] == JOB_WANDERER )
class_[i] = (sex ? JOB_MINSTREL : JOB_WANDERER);
else if( class_[i] == JOB_MINSTREL_T || class_[i] == JOB_WANDERER_T )
class_[i] = (sex ? JOB_MINSTREL_T : JOB_WANDERER_T);
else if( class_[i] == JOB_BABY_MINSTREL || class_[i] == JOB_BABY_WANDERER )
class_[i] = (sex ? JOB_BABY_MINSTREL : JOB_BABY_WANDERER);
else if( class_[i] == JOB_KAGEROU || class_[i] == JOB_OBORO )
class_[i] = (sex ? JOB_KAGEROU : JOB_OBORO);
}
if( SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `class`='%d', `weapon`='0', `shield`='0', `head_top`='0', `head_mid`='0', `head_bottom`='0' WHERE `char_id`='%d'", schema_config.char_db, class_[i], char_id[i]) )
Sql_ShowDebug(sql_handle);
SqlStmt_BindColumn(stmt, 0, SQLDT_INT, &char_id, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 1, SQLDT_SHORT, &class_, 0, NULL, NULL);
SqlStmt_BindColumn(stmt, 2, SQLDT_INT, &guild_id, 0, NULL, NULL);
if( guild_id[i] )// If there is a guild, update the guild_member data [Skotlex]
inter_guild_sex_changed(guild_id[i], acc, char_id[i], sex);
for (i = 0; i < MAX_CHARS && SQL_SUCCESS == SqlStmt_NextRow(stmt); ++i) {
chlogif_parse_change_sex_sub(sex, acc, char_id, class_, guild_id);
}
Sql_FreeResult(sql_handle);
// disconnect player if online on char-server
char_disconnect_player(acc);
SqlStmt_Free(stmt);
}
// notify all mapservers about this change
@ -471,6 +474,54 @@ int chlogif_parse_ackchangesex(int fd, struct char_session_data* sd){
return 1;
}
/**
* Changes a character's sex.
* The information is updated on database, and the character is kicked if it
* currently is online.
*
* @param char_id The character's ID.
* @param sex The new sex.
* @retval 0 in case of success.
* @retval 1 in case of failure.
*/
int chlogif_parse_ackchangecharsex(int char_id, int sex)
{
int class_ = 0, guild_id = 0, account_id = 0;
unsigned char buf[7];
char *data;
// get character data
if (SQL_ERROR == Sql_Query(sql_handle, "SELECT `account_id`,`class`,`guild_id` FROM `%s` WHERE `char_id` = '%d'", schema_config.char_db, char_id)) {
Sql_ShowDebug(sql_handle);
return 1;
}
if (Sql_NumRows(sql_handle) != 1 || SQL_ERROR == Sql_NextRow(sql_handle)) {
Sql_FreeResult(sql_handle);
return 1;
}
Sql_GetData(sql_handle, 0, &data, NULL); account_id = atoi(data);
Sql_GetData(sql_handle, 1, &data, NULL); class_ = atoi(data);
Sql_GetData(sql_handle, 2, &data, NULL); guild_id = atoi(data);
Sql_FreeResult(sql_handle);
if (SQL_ERROR == Sql_Query(sql_handle, "UPDATE `%s` SET `sex` = '%c' WHERE `char_id` = '%d'", schema_config.char_db, sex == SEX_MALE ? 'M' : 'F', char_id)) {
Sql_ShowDebug(sql_handle);
return 1;
}
chlogif_parse_change_sex_sub(sex, account_id, char_id, class_, guild_id);
// disconnect player if online on char-server
char_disconnect_player(account_id);
// notify all mapservers about this change
WBUFW(buf,0) = 0x2b0d;
WBUFL(buf,2) = account_id;
WBUFB(buf,6) = sex;
chmapif_sendall(buf, 7);
return 0;
}
int chlogif_parse_ackacc2req(int fd, struct char_session_data* sd){
if (RFIFOREST(fd) < 4 || RFIFOREST(fd) < RFIFOW(fd,2))
return 0;

View File

@ -32,7 +32,9 @@ int chlogif_parse_ackconnect(int fd, struct char_session_data* sd);
int chlogif_parse_ackaccreq(int fd, struct char_session_data* sd);
int chlogif_parse_reqaccdata(int fd, struct char_session_data* sd);
int chlogif_parse_keepalive(int fd, struct char_session_data* sd);
void chlogif_parse_change_sex_sub(int sex, int acc, int char_id, int class_, int guild_id);
int chlogif_parse_ackchangesex(int fd, struct char_session_data* sd);
int chlogif_parse_ackchangecharsex(int char_id, int sex);
int chlogif_parse_ackacc2req(int fd, struct char_session_data* sd);
int chlogif_parse_accbannotification(int fd, struct char_session_data* sd);
int chlogif_parse_askkick(int fd, struct char_session_data* sd);

View File

@ -717,7 +717,7 @@ int chmapif_parse_reqnewemail(int fd){
/**
* Forward a change of status for account to login-serv
* @param fd: wich fd to parse from
* @param fd: which fd to parse from
* @return : 0 not enough data received, 1 success
*/
int chmapif_parse_fwlog_changestatus(int fd){
@ -730,14 +730,19 @@ int chmapif_parse_fwlog_changestatus(int fd){
int aid = RFIFOL(fd,2); // account_id of who ask (-1 if server itself made this request)
const char* name = (char*)RFIFOP(fd,6); // name of the target character
int operation = RFIFOW(fd,30); // type of operation: 1-block, 2-ban, 3-unblock, 4-unban, 5-changesex, 6-vip
int32 timediff = RFIFOL(fd,32);
int val1 = RFIFOL(fd,36);
//int val2 = RFIFOL(fd,40); // Since BankVault is moved out, this value is unused for now
int operation = RFIFOW(fd,30); // type of operation: 1-block, 2-ban, 3-unblock, 4-unban, 5-changesex, 6-vip, 7-changecharsex
int32 timediff = 0;
int val1 = 0, sex = SEX_MALE;
if (operation == 2) {
timediff = RFIFOL(fd, 32);
val1 = RFIFOL(fd, 36);
} else if (operation == 7)
sex = RFIFOB(fd, 32);
RFIFOSKIP(fd,44);
Sql_EscapeStringLen(sql_handle, esc_name, name, strnlen(name, NAME_LENGTH));
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `account_id` FROM `%s` WHERE `name` = '%s'", schema_config.char_db, esc_name) )
if( SQL_ERROR == Sql_Query(sql_handle, "SELECT `account_id`, `char_id` FROM `%s` WHERE `name` = '%s'", schema_config.char_db, esc_name) )
Sql_ShowDebug(sql_handle);
else if( Sql_NumRows(sql_handle) == 0 ) {
result = 1; // 1-player not found
@ -746,10 +751,12 @@ int chmapif_parse_fwlog_changestatus(int fd){
Sql_ShowDebug(sql_handle);
result = 1;
} else {
int t_aid; //targit account id
int t_aid; // target account id
int t_cid; // target char id
char* data;
Sql_GetData(sql_handle, 0, &data, NULL); t_aid = atoi(data);
Sql_GetData(sql_handle, 1, &data, NULL); t_cid = atoi(data);
Sql_FreeResult(sql_handle);
if(!chlogif_isconnected())
@ -794,16 +801,20 @@ int chmapif_parse_fwlog_changestatus(int fd){
WFIFOL(login_fd,2) = t_aid;
WFIFOSET(login_fd,6);
break;
case 6:
case 6: // vip
answer = (val1&4); // vip_req val1=type, &1 login send return, &2 update timestamp, &4 map send answer
chlogif_reqvipdata(t_aid, val1, timediff, fd);
break;
case 7: // changecharsex
answer = false;
chlogif_parse_ackchangecharsex(t_cid, sex);
break;
} //end switch operation
} //login is connected
}
// send answer if a player asks, not if the server asks
if( aid != -1 && answer) { // Don't send answer for changesex
if( aid != -1 && answer) { // Don't send answer for changesex/changecharsex
WFIFOHEAD(fd,34);
WFIFOW(fd, 0) = 0x2b0f;
WFIFOL(fd, 2) = aid;
@ -817,7 +828,7 @@ int chmapif_parse_fwlog_changestatus(int fd){
}
/**
* Transmit the acknolegement of divorce of partner_id1 and partner_id2
* Transmit the acknowledgement of divorce of partner_id1 and partner_id2
* Update the list associated and transmit the new ranking
* @param partner_id1: char id1 divorced
* @param partner_id2: char id2 divorced
@ -1022,7 +1033,8 @@ int chmapif_parse_reqauth(int fd, int id){
}
if( runflag == CHARSERVER_ST_RUNNING && autotrade && cd ){
uint16 mmo_charstatus_len = sizeof(struct mmo_charstatus) + 25;
cd->sex = sex;
if (cd->sex == 99)
cd->sex = sex;
WFIFOHEAD(fd,mmo_charstatus_len);
WFIFOW(fd,0) = 0x2afd;
@ -1042,12 +1054,16 @@ int chmapif_parse_reqauth(int fd, int id){
node != NULL &&
node->account_id == account_id &&
node->char_id == char_id &&
node->login_id1 == login_id1 &&
node->sex == sex /*&&
node->ip == ip*/ )
node->login_id1 == login_id1
//&& node->ip == ip
#if PACKETVER < 20141016
&& node->sex == sex
#endif
)
{// auth ok
uint16 mmo_charstatus_len = sizeof(struct mmo_charstatus) + 25;
cd->sex = sex;
if (cd->sex == 99)
cd->sex = sex;
WFIFOHEAD(fd,mmo_charstatus_len);
WFIFOW(fd,0) = 0x2afd;

View File

@ -378,7 +378,11 @@ uint32 date2version(int date) {
else if(date < 20130717) return 43;
else if(date < 20130807) return 44;
else if(date < 20131223) return 45;
else if(date >= 20131223) return 46;
else if(date < 20140212) return 46;
//else if(date < 20140613) return 47;
//else if(date < 20141016) return 48;
else if(date < 20141022) return 50;
else if(date >= 20141022) return 51;
else return 30; //default
}

View File

@ -6770,17 +6770,43 @@ ACMD_FUNC(uptime)
/*==========================================
* @changesex <sex>
* => Changes one's sex. Argument sex can be 0 or 1, m or f, male or female.
* => Changes one's account sex. Argument sex can be 0 or 1, m or f, male or female.
*------------------------------------------*/
ACMD_FUNC(changesex)
{
int i;
nullpo_retr(-1, sd);
pc_resetskill(sd,4);
// to avoid any problem with equipment and invalid sex, equipment is unequiped.
for( i=0; i<EQI_MAX; i++ )
if( sd->equip_index[i] >= 0 ) pc_unequipitem(sd, sd->equip_index[i], 3);
chrif_changesex(sd);
for (i = 0; i < EQI_MAX; i++) {
if (sd->equip_index[i] >= 0)
pc_unequipitem(sd, sd->equip_index[i], 3);
}
chrif_changesex(sd, true);
return 0;
}
/*==========================================
* @changecharsex <sex>
* => Changes one's character sex. Argument sex can be 0 or 1, m or f, male or female.
*------------------------------------------*/
ACMD_FUNC(changecharsex)
{
int i;
nullpo_retr(-1, sd);
pc_resetskill(sd,4);
// to avoid any problem with equipment and invalid sex, equipment is unequiped.
for (i = 0; i < EQI_MAX; i++) {
if (sd->equip_index[i] >= 0)
pc_unequipitem(sd, sd->equip_index[i], 3);
}
chrif_changesex(sd, false);
return 0;
}
@ -8370,7 +8396,7 @@ ACMD_FUNC(auction)
nullpo_ret(sd);
if (!battle_config.feature_auction) {
clif_colormes(sd, color_table[COLOR_RED], msg_txt(sd, 517));
clif_colormes(sd->fd, color_table[COLOR_RED], msg_txt(sd, 517));
return 0;
}
@ -9886,6 +9912,7 @@ void atcommand_basecommands(void) {
ACMD_DEF(clearweather),
ACMD_DEF(uptime),
ACMD_DEF(changesex),
ACMD_DEF(changecharsex),
ACMD_DEF(mute),
ACMD_DEF(refresh),
ACMD_DEF(refreshall),

File diff suppressed because it is too large Load Diff

View File

@ -57,7 +57,7 @@ enum e_battle_check_target {
/// Damage structure
struct Damage {
#ifdef RENEWAL
int statusAtk, statusAtk2, weaponAtk, weaponAtk2, equipAtk, equipAtk2, masteryAtk, masteryAtk2;
int64 statusAtk, statusAtk2, weaponAtk, weaponAtk2, equipAtk, equipAtk2, masteryAtk, masteryAtk2;
#endif
int64 damage, /// Right hand damage
damage2; /// Left hand damage
@ -81,10 +81,11 @@ struct block_list;
// Damage Calculation
struct Damage battle_calc_attack(int attack_type,struct block_list *bl,struct block_list *target,uint16 skill_id,uint16 skill_lv,int flag);
struct Damage battle_calc_attack_plant(struct Damage wd, struct block_list *src,struct block_list *target, uint16 skill_id, uint16 skill_lv);
int64 battle_calc_return_damage(struct block_list *bl, struct block_list *src, int64 *, int flag, uint16 skill_id, bool status_reflect);
void battle_drain(struct map_session_data *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int boss);
void battle_drain(struct map_session_data *sd, struct block_list *tbl, int64 rdamage, int64 ldamage, int race, int class_, bool infdef);
int battle_attr_ratio(int atk_elem,int def_type, int def_lv);
int64 battle_attr_fix(struct block_list *src, struct block_list *target, int64 damage,int atk_elem,int def_type, int def_lv);
@ -589,6 +590,7 @@ extern struct Battle_Config
int homunculus_evo_intimacy_need;
int homunculus_evo_intimacy_reset;
int monster_loot_search_type;
int feature_roulette;
} battle_config;
void do_init_battle(void);

View File

@ -339,7 +339,7 @@ int channel_send(struct Channel *channel, struct map_session_data *sd, const cha
return -1;
if(!pc_has_permission(sd, PC_PERM_CHANNEL_ADMIN) && channel->msg_delay != 0 && DIFF_TICK(sd->channel_tick + ( channel->msg_delay * 1000 ), gettick()) > 0) {
clif_colormes(sd,color_table[COLOR_RED],msg_txt(sd,1455)); //You're talking too fast!
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1455)); //You're talking too fast!
return -2;
}
else {
@ -483,7 +483,7 @@ int channel_display_list(struct map_session_data *sd, char *options){
for( k = 0; k < channel_config.colors_count; k++ ) {
if (channel_config.colors[k]) {
sprintf(msg, msg_txt(sd,1445),channel_config.colors_name[k]);// - '%s'
clif_colormes(sd,channel_config.colors[k],msg);
clif_colormes(sd->fd,channel_config.colors[k],msg);
}
}
}

View File

@ -63,7 +63,7 @@ static const int packet_len_table[0x3d] = { // U - used, F - free
//2b0a: Outgoing, chrif_skillcooldown_request -> requesting the list of skillcooldown for char
//2b0b: Incoming, chrif_skillcooldown_load -> received the list of cooldown for char
//2b0c: Outgoing, chrif_changeemail -> 'change mail address ...'
//2b0d: Incoming, chrif_changedsex -> 'Change sex of acc XY'
//2b0d: Incoming, chrif_changedsex -> 'Change sex of acc XY' (or char)
//2b0e: Outgoing, chrif_req_login_operation -> 'Do some operations (change sex, ban / unban etc)'
//2b0f: Incoming, chrif_ack_login_req -> 'answer of the 2b0e'
//2b10: Outgoing, chrif_updatefamelist -> 'Update the fame ranking lists and send them'
@ -867,17 +867,19 @@ int chrif_req_login_operation(int aid, const char* character_name, unsigned shor
/**
* S 2b0e <accid>.l <name>.24B <operation_type>.w <timediff>L <val1>L <val2>L
* Send an account modification (changesex) request to the login server (via char server).
* Send a sex change (for account or character) request to the login server (via char server).
* @sd : Player requesting operation
*/
int chrif_changesex(struct map_session_data *sd) {
int chrif_changesex(struct map_session_data *sd, bool change_account) {
chrif_check(-1);
WFIFOHEAD(char_fd,44);
WFIFOW(char_fd,0) = 0x2b0e;
WFIFOL(char_fd,2) = sd->status.account_id;
safestrncpy((char*)WFIFOP(char_fd,6), sd->status.name, NAME_LENGTH);
WFIFOW(char_fd,30) = CHRIF_OP_LOGIN_CHANGESEX;
WFIFOW(char_fd,30) = (change_account ? CHRIF_OP_LOGIN_CHANGESEX : CHRIF_OP_LOGIN_CHANGECHARSEX);
if (!change_account)
WFIFOB(char_fd,32) = sd->status.sex == SEX_MALE ? SEX_FEMALE : SEX_MALE;
WFIFOSET(char_fd,44);
clif_displaymessage(sd->fd, msg_txt(sd,408)); //"Need disconnection to perform change-sex request..."
@ -920,6 +922,9 @@ static void chrif_ack_login_req(int aid, const char* player_name, uint16 type, u
case CHRIF_OP_LOGIN_UNBLOCK:
case CHRIF_OP_LOGIN_UNBAN:
case CHRIF_OP_LOGIN_CHANGESEX:
case CHRIF_OP_LOGIN_CHANGECHARSEX:
if (type == CHRIF_OP_LOGIN_CHANGECHARSEX)
type--; // So we don't have to create a new msgstring.
snprintf(action,25,"%s",msg_txt(sd,427+type)); //block|ban|unblock|unban|change the sex of
break;
case CHRIF_OP_LOGIN_VIP:
@ -932,7 +937,7 @@ static void chrif_ack_login_req(int aid, const char* player_name, uint16 type, u
break;
}
switch( answer ) {
switch (answer) {
case 0: sprintf(output, msg_txt(sd,424), action, NAME_LENGTH, player_name); break; //Login-serv has been asked to %s '%.*s'.
case 1: sprintf(output, msg_txt(sd,425), NAME_LENGTH, player_name); break;
case 2: sprintf(output, msg_txt(sd,426), action, NAME_LENGTH, player_name); break;

View File

@ -27,6 +27,7 @@ enum chrif_req_op {
CHRIF_OP_LOGIN_UNBAN,
CHRIF_OP_LOGIN_CHANGESEX,
CHRIF_OP_LOGIN_VIP,
CHRIF_OP_LOGIN_CHANGECHARSEX,
// Char-server operation
CHRIF_OP_BAN,
@ -73,7 +74,7 @@ int chrif_char_offline_nsd(uint32 account_id, uint32 char_id);
int chrif_char_reset_offline(void);
int send_users_tochar(void);
int chrif_char_online(struct map_session_data *sd);
int chrif_changesex(struct map_session_data *sd);
int chrif_changesex(struct map_session_data *sd, bool change_account);
int chrif_chardisconnect(struct map_session_data *sd);
int chrif_divorce(int partner_id1, int partner_id2);

View File

@ -70,6 +70,7 @@ static struct s_packet_keys *packet_keys[MAX_PACKET_VER + 1];
static unsigned int clif_cryptKey[3]; // Used keys
#endif
static unsigned short clif_parse_cmd(int fd, struct map_session_data *sd);
static bool clif_session_isValid(struct map_session_data *sd);
/** Converts item type to display it on client if necessary.
* @param nameid: Item ID
@ -284,6 +285,12 @@ static inline unsigned char clif_bl_type(struct block_list *bl) {
}
#endif
static bool clif_session_isValid(struct map_session_data *sd) {
if (sd != NULL && sd->packet_ver <= MAX_PACKET_VER && session_isActive(sd->fd))
return true;
return false;
}
/*==========================================
* sub process of clif_send
* Called from a map_foreachinarea (grabs all players in specific area and subjects them to this function)
@ -655,6 +662,9 @@ void clif_authok(struct map_session_data *sd)
WFIFOB(fd,10) = 5; // ignored
#if PACKETVER >= 20080102
WFIFOW(fd,11) = sd->status.font;
#endif
#if PACKETVER >= 20141016
WFIFOB(fd,13) = sd->status.sex;
#endif
WFIFOSET(fd,packet_len(cmd));
}
@ -1250,13 +1260,13 @@ static void clif_spiritball_single(int fd, struct map_session_data *sd)
/*==========================================
* Kagerou/Oboro amulet spirit
*------------------------------------------*/
static void clif_talisman_single(int fd, struct map_session_data *sd, short type)
static void clif_spiritcharm_single(int fd, struct map_session_data *sd)
{
WFIFOHEAD(fd, packet_len(0x08cf));
WFIFOW(fd,0)=0x08cf;
WFIFOL(fd,2)=sd->bl.id;
WFIFOW(fd,6)=type;
WFIFOW(fd,8)=sd->talisman[type];
WFIFOW(fd,6)=sd->spiritcharm_type;
WFIFOW(fd,8)=sd->spiritcharm;
WFIFOSET(fd, packet_len(0x08cf));
}
@ -1354,10 +1364,8 @@ int clif_spawn(struct block_list *bl)
clif_specialeffect(bl,421,AREA);
if( sd->bg_id && map[sd->bl.m].flag.battleground )
clif_sendbgemblem_area(sd);
for(i = 1; i < 5; i++){
if( sd->talisman[i] > 0 )
clif_talisman(sd, i);
}
if (sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0)
clif_spiritcharm(sd);
for (i = 0; i < sd->sc_display_count; i++) {
if (sc && (sc->option&(OPTION_HIDE|OPTION_CLOAK|OPTION_INVISIBLE|OPTION_CHASEWALK)))
clif_status_change2(&sd->bl,sd->bl.id,AREA,SI_BLANK,0,0,0);
@ -1403,7 +1411,7 @@ void clif_hominfo(struct map_session_data *sd, struct homun_data *hd, int flag)
int htype;
nullpo_retv(hd);
if (!sd)
if (!clif_session_isValid(sd))
return;
status = &hd->battle_status;
@ -1503,6 +1511,9 @@ int clif_homskillinfoblock(struct map_session_data *sd)
struct homun_data *hd;
int fd = sd->fd;
int i, len=4;
nullpo_ret(sd);
WFIFOHEAD(fd, 4+37*MAX_HOMUNSKILL);
hd = sd->hd;
@ -4310,10 +4321,8 @@ static void clif_getareachar_pc(struct map_session_data* sd,struct map_session_d
if(dstsd->spiritball > 0)
clif_spiritball_single(sd->fd, dstsd);
for(i = 1; i < 5; i++){
if( dstsd->talisman[i] > 0 )
clif_talisman_single(sd->fd, dstsd, i);
}
if (dstsd->spiritcharm_type != CHARM_TYPE_NONE && dstsd->spiritcharm > 0)
clif_spiritcharm_single(sd->fd, dstsd);
for( i = 0; i < dstsd->sc_display_count; i++ ) {
if (dstsd->sc.option&(OPTION_HIDE|OPTION_CLOAK|OPTION_INVISIBLE|OPTION_CHASEWALK))
clif_status_change2(&sd->bl, dstsd->bl.id, SELF, SI_BLANK, 0, 0, 0);
@ -5748,6 +5757,24 @@ void clif_displaymessage(const int fd, const char* mes)
if (fd == 0)
;
else {
#if PACKETVER == 20141022
/** for some reason game client crashes depending on message pattern (only for this packet) **/
/** so we redirect to ZC_NPC_CHAT **/
//clif_colormes(fd, color_table[COLOR_DEFAULT], mes);
unsigned long color = (color_table[COLOR_DEFAULT] & 0x0000FF) << 16 | (color_table[COLOR_DEFAULT] & 0x00FF00) | (color_table[COLOR_DEFAULT] & 0xFF0000) >> 16; // RGB to BGR
int len = strnlen(mes, 255);
if (len > 0) {
WFIFOHEAD(fd, 13 + len);
WFIFOW(fd, 0) = 0x2C1;
WFIFOW(fd, 2) = 13 + len;
WFIFOL(fd, 4) = 0;
WFIFOL(fd, 8) = color;
safestrncpy((char*)WFIFOP(fd, 12), mes, len + 1);
WFIFOSET(fd, WFIFOW(fd, 2));
}
#else
char *message, *line;
message = aStrdup(mes);
@ -5766,6 +5793,7 @@ void clif_displaymessage(const int fd, const char* mes)
line = strtok(NULL, "\n");
}
aFree(message);
#endif
}
}
@ -6459,7 +6487,7 @@ void clif_parse_BankOpen(int fd, struct map_session_data* sd) {
//also mark something in case char ain't available for saving, should we check now ?
nullpo_retv(sd);
if( !battle_config.feature_banking ) {
clif_colormes(sd,color_table[COLOR_RED],msg_txt(sd,1496)); //Banking is disabled
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1496)); //Banking is disabled
return;
}
else {
@ -6499,7 +6527,7 @@ void clif_parse_BankClose(int fd, struct map_session_data* sd) {
nullpo_retv(sd);
if( !battle_config.feature_banking ) {
clif_colormes(sd,color_table[COLOR_RED],msg_txt(sd,1496)); //Banking is disabled
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1496)); //Banking is disabled
//still allow to go trough to not stuck player if we have disable it while they was in
}
if(sd->status.account_id == aid){
@ -6541,7 +6569,7 @@ void clif_parse_BankCheck(int fd, struct map_session_data* sd) {
nullpo_retv(sd);
if( !battle_config.feature_banking ) {
clif_colormes(sd,color_table[COLOR_RED],msg_txt(sd,1496)); //Banking is disabled
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1496)); //Banking is disabled
return;
}
else {
@ -6585,7 +6613,7 @@ void clif_bank_deposit(struct map_session_data *sd, enum e_BANKING_DEPOSIT_ACK r
void clif_parse_BankDeposit(int fd, struct map_session_data* sd) {
nullpo_retv(sd);
if( !battle_config.feature_banking ) {
clif_colormes(sd,color_table[COLOR_RED],msg_txt(sd,1496)); //Banking is disabled
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1496)); //Banking is disabled
return;
}
else {
@ -6633,7 +6661,7 @@ void clif_bank_withdraw(struct map_session_data *sd,enum e_BANKING_WITHDRAW_ACK
void clif_parse_BankWithdraw(int fd, struct map_session_data* sd) {
nullpo_retv(sd);
if( !battle_config.feature_banking ) {
clif_colormes(sd,color_table[COLOR_RED],msg_txt(sd,1496)); //Banking is disabled
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1496)); //Banking is disabled
return;
}
else {
@ -6830,6 +6858,14 @@ void clif_openvending(struct map_session_data* sd, int id, struct s_vending* ven
clif_addcards(WFIFOP(fd,22+i*22), &sd->status.cart[index]);
}
WFIFOSET(fd,WFIFOW(fd,2));
#if PACKETVER >= 20141022
// Should go elsewhere perhaps? It has to be bundled with this however.
WFIFOHEAD(fd, 3);
WFIFOW(fd, 0) = 0xa28;
WFIFOB(fd, 2) = 0; // 1 is failure. Our current responses to failure are working so not yet implemented.
WFIFOSET(fd, 3);
#endif
}
@ -8781,16 +8817,16 @@ void clif_specialeffect_value(struct block_list* bl, int effect_id, int num, sen
}
// Modification of clif_messagecolor to send colored messages to players to chat log only (doesn't display overhead)
/// 02c1 <packet len>.W <id>.L <color>.L <message>.?B
int clif_colormes(struct map_session_data * sd, unsigned long color, const char* msg) {
int clif_colormes(int fd, unsigned long color, const char* msg) {
unsigned short msg_len = strlen(msg) + 1;
WFIFOHEAD(sd->fd,msg_len + 12);
WFIFOW(sd->fd,0) = 0x2C1;
WFIFOW(sd->fd,2) = msg_len + 12;
WFIFOL(sd->fd,4) = 0;
WFIFOL(sd->fd,8) = color; //either color_table or channel_table
safestrncpy((char*)WFIFOP(sd->fd,12), msg, msg_len);
WFIFOSET(sd->fd, msg_len + 12);
WFIFOHEAD(fd,msg_len + 12);
WFIFOW(fd,0) = 0x2C1;
WFIFOW(fd,2) = msg_len + 12;
WFIFOL(fd,4) = 0;
WFIFOL(fd,8) = color; //either color_table or channel_table
safestrncpy((char*)WFIFOP(fd,12), msg, msg_len);
WFIFOSET(fd, msg_len + 12);
return 0;
}
@ -8870,7 +8906,6 @@ void clif_refresh_storagewindow(struct map_session_data *sd) {
// refresh the client's screen, getting rid of any effects
void clif_refresh(struct map_session_data *sd)
{
int i;
nullpo_retv(sd);
clif_changemap(sd,sd->bl.m,sd->bl.x,sd->bl.y);
@ -8889,10 +8924,8 @@ void clif_refresh(struct map_session_data *sd)
clif_updatestatus(sd,SP_LUK);
if (sd->spiritball)
clif_spiritball_single(sd->fd, sd);
for(i = 1; i < 5; i++){
if( sd->talisman[i] > 0 )
clif_talisman_single(sd->fd, sd, i);
}
if (sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0)
clif_spiritcharm_single(sd->fd, sd);
if (sd->vd.cloth_color)
clif_refreshlook(&sd->bl,sd->bl.id,LOOK_CLOTHES_COLOR,sd->vd.cloth_color,SELF);
if(hom_is_active(sd->hd))
@ -10114,18 +10147,22 @@ void clif_hotkeys_send(struct map_session_data *sd) {
#ifdef HOTKEY_SAVING
const int fd = sd->fd;
int i;
int offset = 2;
#if PACKETVER < 20090603
const int cmd = 0x2b9;
#else
#elif PACKETVER < 20141022
const int cmd = 0x7d9;
#else
const int cmd = 0xa00;
offset = 3;
#endif
if (!fd) return;
WFIFOHEAD(fd, 2+MAX_HOTKEYS*7);
WFIFOHEAD(fd, offset + MAX_HOTKEYS * 7);
WFIFOW(fd, 0) = cmd;
for(i = 0; i < MAX_HOTKEYS; i++) {
WFIFOB(fd, 2 + 0 + i * 7) = sd->status.hotkeys[i].type; // type: 0: item, 1: skill
WFIFOL(fd, 2 + 1 + i * 7) = sd->status.hotkeys[i].id; // item or skill ID
WFIFOW(fd, 2 + 5 + i * 7) = sd->status.hotkeys[i].lv; // skill level
WFIFOB(fd, offset + 0 + i * 7) = sd->status.hotkeys[i].type; // type: 0: item, 1: skill
WFIFOL(fd, offset + 1 + i * 7) = sd->status.hotkeys[i].id; // item or skill ID
WFIFOW(fd, offset + 5 + i * 7) = sd->status.hotkeys[i].lv; // item qty or skill level
}
WFIFOSET(fd, packet_len(cmd));
#endif
@ -11504,7 +11541,8 @@ static void clif_parse_UseSkillToPos_mercenary(struct mercenary_data *md, struct
return;
if( DIFF_TICK(tick, md->ud.canact_tick) < 0 )
{
clif_skill_fail(md->master, skill_id, USESKILL_FAIL_SKILLINTERVAL, 0);
if (md->master)
clif_skill_fail(md->master, skill_id, USESKILL_FAIL_SKILLINTERVAL, 0);
return;
}
@ -12871,18 +12909,18 @@ void clif_parse_GuildChangeEmblem(int fd,struct map_session_data *sd){
return;
if(!(battle_config.emblem_woe_change) && (agit_flag || agit2_flag) ){
clif_colormes(sd,color_table[COLOR_RED],msg_txt(sd,385)); //"You not allowed to change emblem during woe"
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,385)); //"You not allowed to change emblem during woe"
return;
}
emb_val = clif_validate_emblem(emblem, emblem_len);
if(emb_val ==-1 ){
ShowWarning("clif_parse_GuildChangeEmblem: Rejected malformed guild emblem (size=%lu, accound_id=%d, char_id=%d, guild_id=%d).\n", emblem_len, sd->status.account_id, sd->status.char_id, sd->status.guild_id);
clif_colormes(sd,color_table[COLOR_RED],msg_txt(sd,386)); //"The chosen emblem was detected invalid\n"
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,386)); //"The chosen emblem was detected invalid\n"
return;
} else if(emb_val == -2){
char output[128];
safesnprintf(output,sizeof(output),msg_txt(sd,387),battle_config.emblem_transparency_limit);
clif_colormes(sd,color_table[COLOR_RED],output); //"The chosen emblem was detected invalid as it contain too much transparency (limit=%d)\n"
clif_colormes(sd->fd,color_table[COLOR_RED],output); //"The chosen emblem was detected invalid as it contain too much transparency (limit=%d)\n"
return;
}
@ -15737,7 +15775,7 @@ void clif_mercenary_updatestatus(struct map_session_data *sd, int type)
struct mercenary_data *md;
struct status_data *status;
int fd;
if( sd == NULL || (md = sd->md) == NULL )
if( !clif_session_isValid(sd) || (md = sd->md) == NULL )
return;
fd = sd->fd;
@ -15807,7 +15845,7 @@ void clif_mercenary_info(struct map_session_data *sd)
struct status_data *status;
int atk;
if( sd == NULL || (md = sd->md) == NULL )
if( !clif_session_isValid(sd) || (md = sd->md) == NULL )
return;
fd = sd->fd;
@ -16335,7 +16373,7 @@ void clif_elemental_updatestatus(struct map_session_data *sd, int type) {
struct status_data *status;
int fd;
if( sd == NULL || (ed = sd->ed) == NULL )
if( !clif_session_isValid(sd) || (ed = sd->ed) == NULL )
return;
fd = sd->fd;
@ -16365,7 +16403,7 @@ void clif_elemental_info(struct map_session_data *sd) {
struct elemental_data *ed;
struct status_data *status;
if( sd == NULL || (ed = sd->ed) == NULL )
if( !clif_session_isValid(sd) || (ed = sd->ed) == NULL )
return;
fd = sd->fd;
@ -17166,7 +17204,7 @@ void clif_parse_SkillSelectMenu(int fd, struct map_session_data *sd) {
/*==========================================
* Kagerou/Oboro amulet spirit
*------------------------------------------*/
void clif_talisman(struct map_session_data *sd,short type)
void clif_spiritcharm(struct map_session_data *sd)
{
unsigned char buf[10];
@ -17174,8 +17212,8 @@ void clif_talisman(struct map_session_data *sd,short type)
WBUFW(buf,0)=0x08cf;
WBUFL(buf,2)=sd->bl.id;
WBUFW(buf,6)=type;
WBUFW(buf,8)=sd->talisman[type];
WBUFW(buf,6)=sd->spiritcharm_type;
WBUFW(buf,8)=sd->spiritcharm;
clif_send(buf,packet_len(0x08cf),&sd->bl,AREA);
}
/// Move Item from or to Personal Tab (CZ_WHATSOEVER) [FE]
@ -17729,6 +17767,264 @@ void DumpUnknown(int fd,TBL_PC *sd,int cmd,int packet_len)
}
#endif
/// Roulette System
/// Author: Yommy
/**
* Opens Roulette window
* @param fd
* @param sd
*/
void clif_parse_RouletteOpen(int fd, struct map_session_data* sd)
{
nullpo_retv(sd);
if (!battle_config.feature_roulette) {
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1497)); //Roulette is disabled
return;
}
WFIFOHEAD(fd,packet_len(0xa1a));
WFIFOW(fd,0) = 0xa1a;
WFIFOB(fd,2) = 0; // result
WFIFOL(fd,3) = 0; // serial
WFIFOB(fd,7) = (sd->roulette.claimPrize) ? sd->roulette.stage - 1 : 0;
WFIFOB(fd,8) = (sd->roulette.claimPrize) ? sd->roulette.prizeIdx : -1;
WFIFOW(fd,9) = -1; //! TODO: Display bonus item
WFIFOL(fd,11) = sd->roulette_point.gold;
WFIFOL(fd,15) = sd->roulette_point.silver;
WFIFOL(fd,19) = sd->roulette_point.bronze;
WFIFOSET(fd,packet_len(0xa1a));
}
/**
* Generates information to be displayed
* @param fd
* @param sd
*/
void clif_parse_RouletteInfo(int fd, struct map_session_data* sd)
{
unsigned short i, j, count = 0;
int len = 8 + (42 * 8);
nullpo_retv(sd);
if (!battle_config.feature_roulette) {
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1497)); //Roulette is disabled
return;
}
WFIFOHEAD(fd,len);
WFIFOW(fd,0) = 0xa1c;
WFIFOW(fd,2) = len;
WFIFOL(fd,4) = 1; // serial
for(i = 0; i < MAX_ROULETTE_LEVEL; i++) {
for(j = 0; j < MAX_ROULETTE_COLUMNS - i; j++) {
WFIFOW(fd,8 * count + 8) = i;
WFIFOW(fd,8 * count + 10) = j;
WFIFOW(fd,8 * count + 12) = rd.nameid[i][j];
WFIFOW(fd,8 * count + 14) = rd.qty[i][j];
count++;
}
}
WFIFOSET(fd,len);
return;
}
/**
* Closes Roulette window
* @param fd
* @param sd
*/
void clif_parse_RouletteClose(int fd, struct map_session_data* sd)
{
nullpo_retv(sd);
if (!battle_config.feature_roulette) {
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1497)); //Roulette is disabled
return;
}
/** What do we need this for? (other than state tracking), game client closes the window without our response. **/
return;
}
/**
*
**/
static void clif_roulette_recvitem_ack(struct map_session_data *sd, enum RECV_ROULETTE_ITEM_REQ type) {
#if PACKETVER >= 20141016
uint16 cmd = 0xa22;
unsigned char buf[5];
nullpo_retv(sd);
if (packet_db[sd->packet_ver][cmd].len == 0)
return;
WBUFW(buf,0) = cmd;
WBUFB(buf,2) = type;
WBUFW(buf,3) = 0; //! TODO: Additional item
clif_send(buf, sizeof(buf), &sd->bl, SELF);
#endif
}
/**
* Claim roulette reward
* @param sd Player
* @return 0:Success
**/
static uint8 clif_roulette_getitem(struct map_session_data *sd) {
struct item it;
uint8 res = 1;
nullpo_retr(1, sd);
if (sd->roulette.prizeIdx < 0)
return RECV_ITEM_FAILED;
memset(&it, 0, sizeof(it));
it.nameid = rd.nameid[sd->roulette.prizeStage][sd->roulette.prizeIdx];
it.identify = 1;
if ((res = pc_additem(sd, &it, rd.qty[sd->roulette.prizeStage][sd->roulette.prizeIdx], LOG_TYPE_ROULETTE)) == 0) {
; // onSuccess
}
sd->roulette.claimPrize = false;
sd->roulette.prizeStage = 0;
sd->roulette.prizeIdx = -1;
sd->roulette.stage = 0;
return res;
}
/**
* Process the stage and attempt to give a prize
* @param fd
* @param sd
*/
void clif_parse_RouletteGenerate(int fd, struct map_session_data* sd)
{
enum GENERATE_ROULETTE_ACK result = GENERATE_ROULETTE_SUCCESS;
short stage = sd->roulette.stage;
nullpo_retv(sd);
if (!battle_config.feature_roulette) {
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1497)); //Roulette is disabled
return;
}
if (sd->roulette.stage >= MAX_ROULETTE_LEVEL)
stage = sd->roulette.stage = 0;
if (!stage) {
if (sd->roulette_point.bronze <= 0 && sd->roulette_point.silver < 10 && sd->roulette_point.gold < 10)
result = GENERATE_ROULETTE_NO_ENOUGH_POINT;
}
if (result == GENERATE_ROULETTE_SUCCESS) {
if (!stage) {
if (sd->roulette_point.bronze > 0) {
sd->roulette_point.bronze -= 1;
pc_setreg2(sd, ROULETTE_BRONZE_VAR, sd->roulette_point.bronze);
} else if (sd->roulette_point.silver > 9) {
sd->roulette_point.silver -= 10;
stage = sd->roulette.stage = 2;
pc_setreg2(sd, ROULETTE_SILVER_VAR, sd->roulette_point.silver);
} else if (sd->roulette_point.gold > 9) {
sd->roulette_point.gold -= 10;
stage = sd->roulette.stage = 4;
pc_setreg2(sd, ROULETTE_GOLD_VAR, sd->roulette_point.gold);
}
}
sd->roulette.prizeStage = stage;
sd->roulette.prizeIdx = rnd()%rd.items[stage];
if (rd.flag[stage][sd->roulette.prizeIdx]&1) {
clif_roulette_generate_ack(sd,GENERATE_ROULETTE_LOSING,stage,sd->roulette.prizeIdx,0);
clif_roulette_getitem(sd);
clif_roulette_recvitem_ack(sd, RECV_ITEM_SUCCESS);
return;
}
else {
sd->roulette.claimPrize = true;
sd->roulette.stage++;
}
}
clif_roulette_generate_ack(sd,result,stage,(sd->roulette.prizeIdx == -1 ? 0 : sd->roulette.prizeIdx),0);
}
/**
* Request to cash in prize
* @param fd
* @param sd
*/
void clif_parse_RouletteRecvItem(int fd, struct map_session_data* sd)
{
enum RECV_ROULETTE_ITEM_REQ type = RECV_ITEM_FAILED;
nullpo_retv(sd);
if (!battle_config.feature_roulette) {
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1497)); //Roulette is disabled
return;
}
if (sd->roulette.claimPrize && sd->roulette.prizeIdx != -1) {
switch (clif_roulette_getitem(sd)) {
case 0:
type = RECV_ITEM_SUCCESS;
break;
case 1:
case 4:
case 5:
type = RECV_ITEM_OVERCOUNT;
break;
case 2:
type = RECV_ITEM_OVERWEIGHT;
break;
case 7:
default:
type = RECV_ITEM_FAILED;
break;
}
}
clif_roulette_recvitem_ack(sd,type);
return;
}
/**
* Update Roulette window with current stats
* @param sd
* @param result
* @param stage
* @param prizeIdx
* @param bonusItemID
*/
void clif_roulette_generate_ack(struct map_session_data *sd, unsigned char result, short stage, short prizeIdx, short bonusItemID)
{
int fd = sd->fd;
nullpo_retv(sd);
WFIFOHEAD(fd,packet_len(0xa20));
WFIFOW(fd,0) = 0xa20;
WFIFOB(fd,2) = result;
WFIFOW(fd,3) = stage;
WFIFOW(fd,5) = prizeIdx;
WFIFOW(fd,7) = bonusItemID;
WFIFOL(fd,9) = sd->roulette_point.gold;
WFIFOL(fd,13) = sd->roulette_point.silver;
WFIFOL(fd,17) = sd->roulette_point.bronze;
WFIFOSET(fd,packet_len(0xa20));
}
/*==========================================
* Main client packet processing function
*------------------------------------------*/
@ -18120,8 +18416,17 @@ void packetdb_readdb(bool reload)
//#0x09C0
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0,102, 0,
0, 0, 0, 0, 2, 0, -1, -1, 2, 0, 0, 0, 0, 0, 0, 7,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 3, 11, 0, 11, -1, 0, 3, 11, 0,
0, 11, 12, 11, 0, 0, 0, 0, 0,143, 0, 0, 0, 0, 0, 0,
//#0x0a00
#if PACKETVER >= 20141022
269, 0, 0, 2, 6, 49, 6, 9, 26, 45, 47, 47, 56, -1, 0, 0,
#else
269, 0, 0, 2, 6, 48, 6, 9, 26, 45, 47, 47, 56, -1, 0, 0,
#endif
0, 0, 0, 26, 0, 0, 0, 0, 0, 2, 23, 2, -1, 2, 3, 2,
21, 3, 5, 0, 66, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
};
struct {
void (*func)(int, struct map_session_data *);
@ -18344,9 +18649,15 @@ void packetdb_readdb(bool reload)
{ clif_parse_client_version, "clientversion"},
{ clif_parse_blocking_playcancel, "booking_playcancel"},
{ clif_parse_ranklist, "ranklist"},
/* Market NPC */
// Market NPC
{ clif_parse_NPCMarketClosed, "npcmarketclosed" },
{ clif_parse_NPCMarketPurchase, "npcmarketpurchase" },
// Roulette
{ clif_parse_RouletteOpen, "rouletteopen" },
{ clif_parse_RouletteInfo, "rouletteinfo" },
{ clif_parse_RouletteClose, "rouletteclose" },
{ clif_parse_RouletteGenerate, "roulettegenerate" },
{ clif_parse_RouletteRecvItem, "rouletterecvitem" },
{NULL,NULL}
};
struct {
@ -18591,6 +18902,7 @@ void packetdb_readdb(bool reload)
*------------------------------------------*/
void do_init_clif(void) {
const char* colors[COLOR_MAX] = {
"0x00FF00",
"0xFF0000",
"0xFFFFFF",
"0xFFFF00",

View File

@ -33,9 +33,9 @@ struct party_booking_ad_info;
#include <stdarg.h>
enum { // packet DB
MIN_PACKET_DB = 0x0064,
MAX_PACKET_DB = 0xf00,
MAX_PACKET_VER = 46,
MIN_PACKET_DB = 0x064,
MAX_PACKET_DB = 0xAFF,
MAX_PACKET_VER = 51,
MAX_PACKET_POS = 20,
};
@ -73,13 +73,42 @@ enum e_BANKING_DEPOSIT_ACK {
BDA_NO_MONEY = 0x2,
BDA_OVERFLOW = 0x3,
};
enum e_BANKING_WITHDRAW_ACK {
BWA_SUCCESS = 0x0,
BWA_NO_MONEY = 0x1,
BWA_UNKNOWN_ERROR = 0x2,
};
enum RECV_ROULETTE_ITEM_REQ {
RECV_ITEM_SUCCESS = 0x0,
RECV_ITEM_FAILED = 0x1,
RECV_ITEM_OVERCOUNT = 0x2,
RECV_ITEM_OVERWEIGHT = 0x3,
};
enum RECV_ROULETTE_ITEM_ACK {
RECV_ITEM_NORMAL = 0x0,
RECV_ITEM_LOSING = 0x1,
};
enum GENERATE_ROULETTE_ACK {
GENERATE_ROULETTE_SUCCESS = 0x0,
GENERATE_ROULETTE_FAILED = 0x1,
GENERATE_ROULETTE_NO_ENOUGH_POINT = 0x2,
GENERATE_ROULETTE_LOSING = 0x3,
};
enum OPEN_ROULETTE_ACK {
OPEN_ROULETTE_SUCCESS = 0x0,
OPEN_ROULETTE_FAILED = 0x1,
};
enum CLOSE_ROULETTE_ACK {
CLOSE_ROULETTE_SUCCESS = 0x0,
CLOSE_ROULETTE_FAILED = 0x1,
};
// packet_db[SERVER] is reserved for server use
#define SERVER 0
#define packet_len(cmd) packet_db[SERVER][cmd].len
@ -861,6 +890,14 @@ void clif_cashshop_open( struct map_session_data* sd );
void clif_display_pinfo(struct map_session_data *sd, int type);
/// Roulette
void clif_roulette_generate_ack(struct map_session_data *sd, unsigned char result, short stage, short prizeIdx, short bonusItemID);
void clif_parse_RouletteOpen(int fd, struct map_session_data *sd);
void clif_parse_RouletteInfo(int fd, struct map_session_data *sd);
void clif_parse_RouletteClose(int fd, struct map_session_data *sd);
void clif_parse_RouletteGenerate(int fd, struct map_session_data *sd);
void clif_parse_RouletteRecvItem(int fd, struct map_session_data *sd);
/**
* 3CeAM
**/
@ -883,7 +920,7 @@ int clif_skill_itemlistwindow( struct map_session_data *sd, uint16 skill_id, uin
void clif_elemental_info(struct map_session_data *sd);
void clif_elemental_updatestatus(struct map_session_data *sd, int type);
void clif_talisman(struct map_session_data *sd, short type);
void clif_spiritcharm(struct map_session_data *sd);
void clif_snap( struct block_list *bl, short x, short y );
void clif_monster_hp_bar( struct mob_data* md, int fd );
@ -892,13 +929,14 @@ void clif_monster_hp_bar( struct mob_data* md, int fd );
* Color Table
**/
enum clif_colors {
COLOR_DEFAULT,
COLOR_RED,
COLOR_WHITE,
COLOR_YELLOW,
COLOR_MAX
};
unsigned long color_table[COLOR_MAX];
int clif_colormes(struct map_session_data * sd, unsigned long color, const char* msg);
int clif_colormes(int fd, unsigned long color, const char* msg);
void clif_channel_msg(struct Channel *channel, struct map_session_data *sd, char *msg, short color);

View File

@ -526,6 +526,8 @@ int elemental_change_mode(struct elemental_data *ed, int mode) {
}
void elemental_heal(struct elemental_data *ed, int hp, int sp) {
if (ed->master == NULL)
return;
if( hp )
clif_elemental_updatestatus(ed->master, SP_HP);
if( sp )

View File

@ -184,7 +184,8 @@ void hom_delspiritball(TBL_HOM *hd, int count, int type) {
* @param hd
*/
void hom_damage(struct homun_data *hd) {
clif_hominfo(hd->master,hd,0);
if (hd->master)
clif_hominfo(hd->master,hd,0);
}
/**
@ -513,7 +514,7 @@ int hom_levelup(struct homun_data *hd)
APPLY_HOMUN_LEVEL_STATWEIGHT();
if ( battle_config.homunculus_show_growth ) {
if ( hd->master && battle_config.homunculus_show_growth ) {
char output[256] ;
sprintf(output,
"Growth: hp:%d sp:%d str(%.2f) agi(%.2f) vit(%.2f) int(%.2f) dex(%.2f) luk(%.2f) ",
@ -683,7 +684,7 @@ void hom_gainexp(struct homun_data *hd,int exp)
hd->homunculus.exp += exp;
if (hd->homunculus.exp < hd->exp_next) {
if (hd->master && hd->homunculus.exp < hd->exp_next) {
clif_hominfo(hd->master,hd,0);
return;
}
@ -745,7 +746,8 @@ int hom_decrease_intimacy(struct homun_data * hd, unsigned int value)
* @param hd
*/
void hom_heal(struct homun_data *hd) {
clif_hominfo(hd->master,hd,0);
if (hd->master)
clif_hominfo(hd->master,hd,0);
}
/**

View File

@ -929,6 +929,7 @@ static int itemdb_combo_split_atoi (char *str, int *val) {
return i;
}
/**
* <combo{:combo{:combo:{..}}}>,<{ script }>
**/
@ -1056,7 +1057,119 @@ static void itemdb_read_combos(const char* basedir, bool silent) {
return;
}
/**
* Process Roulette items
*/
bool itemdb_parse_roulette_db(void)
{
int i, j;
uint32 count = 0;
// retrieve all rows from the item database
if (SQL_ERROR == Sql_Query(mmysql_handle, "SELECT * FROM `%s`", db_roulette_table)) {
Sql_ShowDebug(mmysql_handle);
return false;
}
for (i = 0; i < MAX_ROULETTE_LEVEL; i++)
rd.items[i] = 0;
for (i = 0; i < MAX_ROULETTE_LEVEL; i++) {
int k, limit = MAX_ROULETTE_COLUMNS - i;
for (k = 0; k < limit && SQL_SUCCESS == Sql_NextRow(mmysql_handle); k++) {
char* data;
unsigned short item_id, amount;
int level, flag;
Sql_GetData(mmysql_handle, 1, &data, NULL); level = atoi(data);
Sql_GetData(mmysql_handle, 2, &data, NULL); item_id = atoi(data);
Sql_GetData(mmysql_handle, 3, &data, NULL); amount = atoi(data);
Sql_GetData(mmysql_handle, 4, &data, NULL); flag = atoi(data);
if (!itemdb_exists(item_id)) {
ShowWarning("itemdb_parse_roulette_db: Unknown item ID '%hu' in level '%d'\n", item_id, level);
continue;
}
if (amount < 1) {
ShowWarning("itemdb_parse_roulette_db: Unsupported amount '%hu' for item ID '%hu' in level '%d'\n", amount, item_id, level);
continue;
}
if (flag < 0 || flag > 1) {
ShowWarning("itemdb_parse_roulette_db: Unsupported flag '%d' for item ID '%hu' in level '%d'\n", flag, item_id, level);
continue;
}
j = rd.items[i];
RECREATE(rd.nameid[i], unsigned short, ++rd.items[i]);
RECREATE(rd.qty[i], unsigned short, rd.items[i]);
RECREATE(rd.flag[i], int, rd.items[i]);
rd.nameid[i][j] = item_id;
rd.qty[i][j] = amount;
rd.flag[i][j] = flag;
++count;
}
}
// free the query result
Sql_FreeResult(mmysql_handle);
for (i = 0; i < MAX_ROULETTE_LEVEL; i++) {
int limit = MAX_ROULETTE_COLUMNS - i;
if (rd.items[i] == limit)
continue;
if (rd.items[i] > limit) {
ShowWarning("itemdb_parse_roulette_db: level %d has %d items, only %d supported, capping...\n", i + 1, rd.items[i], limit);
rd.items[i] = limit;
continue;
}
/** this scenario = rd.items[i] < limit **/
ShowWarning("itemdb_parse_roulette_db: Level %d has %d items, %d are required. Filling with Apples...\n", i + 1, rd.items[i], limit);
rd.items[i] = limit;
RECREATE(rd.nameid[i], unsigned short, rd.items[i]);
RECREATE(rd.qty[i], unsigned short, rd.items[i]);
RECREATE(rd.flag[i], int, rd.items[i]);
for (j = 0; j < MAX_ROULETTE_COLUMNS - i; j++) {
if (rd.qty[i][j])
continue;
rd.nameid[i][j] = ITEMID_APPLE;
rd.qty[i][j] = 1;
rd.flag[i][j] = 0;
}
}
ShowStatus("Done reading '"CL_WHITE"%lu"CL_RESET"' entries in '"CL_WHITE"%s"CL_RESET"'.\n", count, db_roulette_table);
return true;
}
/**
* Free Roulette items
*/
static void itemdb_roulette_free(void) {
int i;
for (i = 0; i < MAX_ROULETTE_LEVEL; i++) {
if (rd.nameid[i])
aFree(rd.nameid[i]);
if (rd.qty[i])
aFree(rd.qty[i]);
if (rd.flag[i])
aFree(rd.flag[i]);
rd.nameid[i] = NULL;
rd.qty[i] = NULL;
rd.flag[i] = NULL;
rd.items[i] = 0;
}
}
/*======================================
* Applies gender restrictions according to settings. [Skotlex]
@ -1074,6 +1187,7 @@ static char itemdb_gendercheck(struct item_data *id)
return (battle_config.ignore_items_gender) ? 2 : id->sex;
}
/**
* [RRInd]
* For backwards compatibility, in Renewal mode, MATK from weapons comes from the atk slot
@ -1574,11 +1688,15 @@ void itemdb_reload(void) {
itemdb_group->clear(itemdb_group, itemdb_group_free);
itemdb->clear(itemdb, itemdb_final_sub);
db_clear(itemdb_combo);
itemdb_roulette_free();
// read new data
itemdb_read();
cashshop_reloaddb();
if (!itemdb_parse_roulette_db())
battle_config.feature_roulette = 0;
//Epoque's awesome @reloaditemdb fix - thanks! [Ind]
//- Fixes the need of a @reloadmobdb after a @reloaditemdb to re-link monster drop data
for( i = 0; i < MAX_MOB_DB; i++ ) {
@ -1638,6 +1756,7 @@ void do_final_itemdb(void) {
itemdb_group->destroy(itemdb_group, itemdb_group_free);
itemdb->destroy(itemdb, itemdb_final_sub);
destroy_item_data(dummy_item);
itemdb_roulette_free();
}
/**
@ -1649,4 +1768,7 @@ void do_init_itemdb(void) {
itemdb_group = uidb_alloc(DB_OPT_BASE);
itemdb_create_dummy();
itemdb_read();
if (!itemdb_parse_roulette_db())
battle_config.feature_roulette = 0;
}

View File

@ -25,6 +25,9 @@
#define MAX_ITEMGROUP_RANDGROUP 4 ///Max group for random item (increase this when needed). TODO: Remove this limit and use dynamic size if needed
#define MAX_ROULETTE_LEVEL 7 /** client-defined value **/
#define MAX_ROULETTE_COLUMNS 9 /** client-defined value **/
#define CARD0_FORGE 0x00FF
#define CARD0_CREATE 0x00FE
#define CARD0_PET 0x0100
@ -39,6 +42,7 @@ enum item_itemid
ITEMID_YELLOW_POTION = 503,
ITEMID_WHITE_POTION = 504,
ITEMID_BLUE_POTION = 505,
ITEMID_APPLE = 512,
ITEMID_HOLY_WATER = 523,
ITEMID_PUMPKIN = 535,
ITEMID_RED_SLIM_POTION = 545,
@ -371,6 +375,14 @@ struct s_item_group_db
struct s_item_group_random random[MAX_ITEMGROUP_RANDGROUP]; //! TODO: Move this fixed array to dynamic size if needed.
};
/// Struct of Roulette db
struct s_roulette_db {
unsigned short *nameid[MAX_ROULETTE_LEVEL], /// Item ID
*qty[MAX_ROULETTE_LEVEL]; /// Amount of Item ID
int *flag[MAX_ROULETTE_LEVEL]; /// Whether the item is for loss or win
int items[MAX_ROULETTE_LEVEL]; /// Number of items in the list for each
} rd;
///Main item data struct
struct item_data
{
@ -513,6 +525,8 @@ struct s_item_group_db *itemdb_group_exists(unsigned short group_id);
char itemdb_pc_get_itemgroup(uint16 group_id, struct map_session_data *sd);
uint16 itemdb_get_randgroupitem_count(uint16 group_id, uint8 sub_group, unsigned short nameid);
bool itemdb_parse_roulette_db(void);
void itemdb_reload(void);
void do_final_itemdb(void);

View File

@ -56,7 +56,7 @@ static char log_picktype2char(e_log_pick_type type)
{
case LOG_TYPE_TRADE: return 'T'; // (T)rade
case LOG_TYPE_VENDING: return 'V'; // (V)ending
case LOG_TYPE_PICKDROP_PLAYER: return 'P'; // (P)player
case LOG_TYPE_PICKDROP_PLAYER: return 'P'; // (P)layer
case LOG_TYPE_PICKDROP_MONSTER: return 'M'; // (M)onster
case LOG_TYPE_NPC: return 'S'; // NPC (S)hop
case LOG_TYPE_SCRIPT: return 'N'; // (N)PC Script
@ -75,6 +75,7 @@ static char log_picktype2char(e_log_pick_type type)
case LOG_TYPE_OTHER: return 'X'; // Other
case LOG_TYPE_CASH: return '$'; // Cash
case LOG_TYPE_BOUND_REMOVAL: return 'F'; // Removed bound items when guild/party is broken
case LOG_TYPE_ROULETTE: return 'Y'; // Roulette Lotter(Y)
}
// should not get here, fallback

View File

@ -24,30 +24,31 @@ typedef enum e_log_chat_type
typedef enum e_log_pick_type
{
LOG_TYPE_NONE = 0,
LOG_TYPE_TRADE = 0x00001,
LOG_TYPE_VENDING = 0x00002,
LOG_TYPE_PICKDROP_PLAYER = 0x00004,
LOG_TYPE_PICKDROP_MONSTER = 0x00008,
LOG_TYPE_NPC = 0x00010,
LOG_TYPE_SCRIPT = 0x00020,
LOG_TYPE_STEAL = 0x00040,
LOG_TYPE_CONSUME = 0x00080,
LOG_TYPE_PRODUCE = 0x00100,
LOG_TYPE_MVP = 0x00200,
LOG_TYPE_COMMAND = 0x00400,
LOG_TYPE_STORAGE = 0x00800,
LOG_TYPE_GSTORAGE = 0x01000,
LOG_TYPE_MAIL = 0x02000,
LOG_TYPE_AUCTION = 0x04000,
LOG_TYPE_BUYING_STORE = 0x08000,
LOG_TYPE_OTHER = 0x10000,
LOG_TYPE_CASH = 0x20000,
LOG_TYPE_BANK = 0x40000,
LOG_TYPE_BOUND_REMOVAL = 0x80000,
LOG_TYPE_TRADE = 0x000001,
LOG_TYPE_VENDING = 0x000002,
LOG_TYPE_PICKDROP_PLAYER = 0x000004,
LOG_TYPE_PICKDROP_MONSTER = 0x000008,
LOG_TYPE_NPC = 0x000010,
LOG_TYPE_SCRIPT = 0x000020,
LOG_TYPE_STEAL = 0x000040,
LOG_TYPE_CONSUME = 0x000080,
LOG_TYPE_PRODUCE = 0x000100,
LOG_TYPE_MVP = 0x000200,
LOG_TYPE_COMMAND = 0x000400,
LOG_TYPE_STORAGE = 0x000800,
LOG_TYPE_GSTORAGE = 0x001000,
LOG_TYPE_MAIL = 0x002000,
LOG_TYPE_AUCTION = 0x004000,
LOG_TYPE_BUYING_STORE = 0x008000,
LOG_TYPE_OTHER = 0x010000,
LOG_TYPE_CASH = 0x020000,
LOG_TYPE_BANK = 0x040000,
LOG_TYPE_BOUND_REMOVAL = 0x080000,
LOG_TYPE_ROULETTE = 0x100000,
// combinations
LOG_TYPE_LOOT = LOG_TYPE_PICKDROP_MONSTER|LOG_TYPE_CONSUME,
// all
LOG_TYPE_ALL = 0xFFFFF,
LOG_TYPE_ALL = 0xFFFFFF,
} e_log_pick_type;
typedef enum e_log_cash_type

View File

@ -70,6 +70,7 @@ char mob_skill_db2_db[32] = "mob_skill_db2";
char vendings_db[32] = "vendings";
char vending_items_db[32] = "vending_items";
char market_table[32] = "market";
char db_roulette_table[32] = "db_roulette";
// log database
char log_db_ip[32] = "127.0.0.1";
@ -3759,7 +3760,9 @@ int inter_config_read(char *cfgName)
else if( strcmpi( w1, "vending_db" ) == 0 )
strcpy( vendings_db, w2 );
else if( strcmpi( w1, "vending_items_db" ) == 0 )
strcpy( vending_items_db, w2 );
strcpy(vending_items_db, w2);
else if( strcmpi(w1, "db_roulette_table") == 0)
strcpy(db_roulette_table, w2);
else if (strcmpi(w1, "market_table") == 0)
strcpy(market_table, w2);
else

View File

@ -370,6 +370,18 @@ enum e_element {
#define MAX_ELE_LEVEL 4 /// Maximum Element level
/**
* Types of spirit charms
* NOTE: Code assumes that this matches the first entries in enum elements
*/
enum spirit_charm_types {
CHARM_TYPE_NONE = 0,
CHARM_TYPE_WATER,
CHARM_TYPE_LAND,
CHARM_TYPE_FIRE,
CHARM_TYPE_WIND
};
enum mob_ai {
AI_NONE = 0,
AI_ATTACK,
@ -447,6 +459,9 @@ enum _sp {
SP_CHARRENAME=125,
SP_CHARFONT=126,
SP_BANK_VAULT = 127,
SP_ROULETTE_BRONZE = 128,
SP_ROULETTE_SILVER = 129,
SP_ROULETTE_GOLD = 130,
// Mercenaries
SP_MERCFLEE=165, SP_MERCKILLS=189, SP_MERCFAITH=190,
@ -491,7 +506,7 @@ enum _sp {
SP_UNSTRIPABLE_WEAPON,SP_UNSTRIPABLE_ARMOR,SP_UNSTRIPABLE_HELM,SP_UNSTRIPABLE_SHIELD, // 2034-2037
SP_INTRAVISION, SP_ADD_MONSTER_DROP_ITEMGROUP, SP_SP_LOSS_RATE, // 2038-2040
SP_ADD_SKILL_BLOW, SP_SP_VANISH_RATE, SP_MAGIC_SP_GAIN_VALUE, SP_MAGIC_HP_GAIN_VALUE, SP_ADD_MONSTER_ID_DROP_ITEM, //2041-2045
SP_EMATK, SP_SP_GAIN_RACE_ATTACK, SP_HP_GAIN_RACE_ATTACK, SP_SKILL_USE_SP_RATE, //2046-2049
SP_EMATK, SP_COMA_CLASS, SP_COMA_RACE, SP_SKILL_USE_SP_RATE, //2046-2049
SP_SKILL_COOLDOWN,SP_SKILL_FIXEDCAST, SP_SKILL_VARIABLECAST, SP_FIXCASTRATE, SP_VARCASTRATE, //2050-2054
SP_SKILL_USE_SP,SP_MAGIC_ATK_ELE, SP_ADD_FIXEDCAST, SP_ADD_VARIABLECAST, //2055-2058
SP_SET_DEF_RACE,SP_SET_MDEF_RACE,SP_HP_VANISH_RATE, //2059-2061
@ -499,9 +514,7 @@ enum _sp {
SP_IGNORE_DEF_CLASS, SP_DEF_RATIO_ATK_CLASS, SP_ADDCLASS, SP_SUBCLASS, SP_MAGIC_ADDCLASS, //2062-2066
SP_WEAPON_COMA_CLASS, SP_IGNORE_MDEF_CLASS_RATE, SP_EXP_ADDCLASS, SP_ADD_CLASS_DROP_ITEM, //2067-2070
SP_ADD_CLASS_DROP_ITEMGROUP, SP_ADDMAXWEIGHT, SP_ADD_ITEMGROUP_HEAL_RATE, // 2071-2073
SP_HP_VANISH_RACE_RATE, SP_SP_VANISH_RACE_RATE, SP_HP_GAIN_RACE_ATTACK_RATE, SP_SP_GAIN_RACE_ATTACK_RATE, // 2074-2077
SP_ABSORB_DMG_MAXHP, SP_HP_GAIN_ATTACK, SP_SP_GAIN_ATTACK, SP_HP_GAIN_ATTACK_RATE, SP_SP_GAIN_ATTACK_RATE, SP_SUB_SKILL, // 2078-2083
SP_SUBDEF_ELE, // 2084
SP_HP_VANISH_RACE_RATE, SP_SP_VANISH_RACE_RATE, SP_ABSORB_DMG_MAXHP, SP_SUB_SKILL, SP_SUBDEF_ELE, // 2074-2078
};
enum _look {
@ -996,6 +1009,7 @@ extern char mob_skill_db2_db[32];
extern char vendings_db[32];
extern char vending_items_db[32];
extern char market_table[32];
extern char db_roulette_table[32];
void do_shutdown(void);

View File

@ -408,6 +408,8 @@ bool mercenary_recv_data(struct s_mercenary *merc, bool flag)
* @param sp SP amount
**/
void mercenary_heal(struct mercenary_data *md, int hp, int sp) {
if (md->master == NULL)
return;
if( hp )
clif_mercenary_updatestatus(md->master, SP_HP);
if( sp )

View File

@ -1253,7 +1253,7 @@ int npc_click(struct map_session_data* sd, struct npc_data* nd)
}
if (i == nd->u.shop.count) {
clif_colormes(sd, color_table[COLOR_RED], msg_txt(sd, 534));
clif_colormes(sd->fd, color_table[COLOR_RED], msg_txt(sd, 534));
return false;
}
@ -1670,7 +1670,7 @@ uint8 npc_buylist(struct map_session_data* sd, uint16 n, struct s_npc_buy_list *
struct item_data *id = itemdb_exists(nd->u.shop.itemshop_nameid);
sprintf(output,msg_txt(sd,712),id->jname,id->nameid); // You do not have enough %s %d.
clif_colormes(sd,color_table[COLOR_RED],output);
clif_colormes(sd->fd,color_table[COLOR_RED],output);
return 1;
}
break;
@ -1678,7 +1678,7 @@ uint8 npc_buylist(struct map_session_data* sd, uint16 n, struct s_npc_buy_list *
count = pc_readreg2(sd, nd->u.shop.pointshop_str);
if (z > (double)count) {
sprintf(output,msg_txt(sd,713),nd->u.shop.pointshop_str); // You do not have enough '%s'.
clif_colormes(sd,color_table[COLOR_RED],output);
clif_colormes(sd->fd,color_table[COLOR_RED],output);
return 1;
}
break;

View File

@ -53,6 +53,9 @@ struct npc_data {
struct status_data status;
unsigned int level,stat_point;
struct s_npc_params {
unsigned short str, agi, vit, int_, dex, luk;
} params;
void* chatdb; // pointer to a npc_parse struct (see npc_chat.c)
char* path;/* path dir */

View File

@ -1353,6 +1353,13 @@ void pc_reg_received(struct map_session_data *sd)
if (battle_config.feature_banking)
sd->bank_vault = pc_readreg2(sd, BANK_VAULT_VAR);
if (battle_config.feature_roulette) {
sd->roulette_point.bronze = pc_readreg2(sd, ROULETTE_BRONZE_VAR);
sd->roulette_point.silver = pc_readreg2(sd, ROULETTE_SILVER_VAR);
sd->roulette_point.gold = pc_readreg2(sd, ROULETTE_GOLD_VAR);
}
sd->roulette.prizeIdx = -1;
//SG map and mob read [Komurka]
for(i=0;i<MAX_PC_FEELHATE;i++) { //for now - someone need to make reading from txt/sql
uint16 j;
@ -2989,18 +2996,6 @@ void pc_bonus(struct map_session_data *sd,int type,int val)
case SP_ABSORB_DMG_MAXHP: // bonus bAbsorbDmgMaxHP,n;
sd->bonus.absorb_dmg_maxhp = max(sd->bonus.absorb_dmg_maxhp, val);
break;
case SP_HP_GAIN_ATTACK: // bonus bHPGainAttack,n;
sd->bonus.hp_gain_attack += val;
break;
case SP_SP_GAIN_ATTACK: // bonus bSPGainAttack,n;
sd->bonus.sp_gain_attack += val;
break;
case SP_HP_GAIN_ATTACK_RATE: // bonus bHPGainAttackRate,n;
sd->bonus.hp_gain_attack_rate += val;
break;
case SP_SP_GAIN_ATTACK_RATE: // bonus bSPGainAttackRate,n;
sd->bonus.sp_gain_attack_rate += val;
break;
default:
ShowWarning("pc_bonus: unknown type %d %d !\n",type,val);
break;
@ -3483,16 +3478,6 @@ void pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
if(sd->state.lr_flag != 2)
sd->ignore_def_by_race[type2] += val;
break;
case SP_SP_GAIN_RACE_ATTACK: // bonus2 bSPGainRaceAttack,r,n;
PC_BONUS_CHK_RACE(type2,SP_SP_GAIN_RACE_ATTACK);
if(sd->state.lr_flag != 2)
sd->sp_gain_race_attack[type2] = cap_value(sd->sp_gain_race_attack[type2] + val, 0, INT16_MAX);
break;
case SP_HP_GAIN_RACE_ATTACK: // bonus2 bHPGainRaceAttack,r,n;
PC_BONUS_CHK_RACE(type2,SP_HP_GAIN_RACE_ATTACK);
if(sd->state.lr_flag != 2)
sd->hp_gain_race_attack[type2] = cap_value(sd->hp_gain_race_attack[type2] + val, 0, INT16_MAX);
break;
case SP_SKILL_USE_SP_RATE: // bonus2 bSkillUseSPrate,sk,n;
if(sd->state.lr_flag == 2)
break;
@ -3630,22 +3615,6 @@ void pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
sd->skillusesp[i].val = val;
}
break;
case SP_HP_GAIN_RACE_ATTACK_RATE: // bonus2 bHPGainRaceAttackRate,r,n;
PC_BONUS_CHK_RACE(type2,SP_HP_GAIN_RACE_ATTACK_RATE);
sd->hp_gain_race_attack_rate[type2] += val;
break;
case SP_SP_GAIN_RACE_ATTACK_RATE: // bonus2 bSPGainRaceAttackRate,r,n;
PC_BONUS_CHK_RACE(type2,SP_SP_GAIN_RACE_ATTACK_RATE);
sd->sp_gain_race_attack_rate[type2] += val;
break;
case SP_HP_GAIN_ATTACK_RATE: // bonus2 bHPGainAttackRate,x,n;
sd->hp_gain_attack.rate += type2;
sd->hp_gain_attack.per += val;
break;
case SP_SP_GAIN_ATTACK_RATE: // bonus2 bSPGainAttackRate,x,n;
sd->sp_gain_attack.rate += type2;
sd->sp_gain_attack.per += val;
break;
case SP_SUB_SKILL: // bonus2 bSubSkill,sk,n;
ARR_FIND(0, ARRAYLENGTH(sd->subskill), i, sd->subskill[i].id == type2 || sd->subskill[i].id == 0);
if (i == ARRAYLENGTH(sd->subskill)) {
@ -3663,6 +3632,16 @@ void pc_bonus2(struct map_session_data *sd,int type,int type2,int val)
PC_BONUS_CHK_ELEMENT(type2,SP_SUBDEF_ELE);
sd->subdefele[type2] += val;
break;
case SP_COMA_CLASS: // bonus2 bComaClass,c,n;
PC_BONUS_CHK_CLASS(type2,SP_COMA_CLASS);
sd->coma_class[type2] += val;
sd->special_state.bonus_coma = 1;
break;
case SP_COMA_RACE: // bonus2 bComaRace,r,n;
PC_BONUS_CHK_RACE(type2,SP_COMA_RACE);
sd->coma_race[type2] += val;
sd->special_state.bonus_coma = 1;
break;
default:
ShowWarning("pc_bonus2: unknown type %d %d %d!\n",type,type2,val);
break;
@ -4603,7 +4582,7 @@ bool pc_isUseitem(struct map_session_data *sd,int n)
}
if (sd->state.storage_flag && item->type != IT_CASH) {
clif_colormes(sd, color_table[COLOR_RED], msg_txt(sd,388));
clif_colormes(sd->fd, color_table[COLOR_RED], msg_txt(sd,388));
return false; // You cannot use this item while storage is open.
}
@ -4700,7 +4679,7 @@ bool pc_isUseitem(struct map_session_data *sd,int n)
return false;
}
if( !pc_inventoryblank(sd) ) {
clif_colormes(sd, color_table[COLOR_RED], msg_txt(sd, 732)); //Item cannot be open when inventory is full
clif_colormes(sd->fd, color_table[COLOR_RED], msg_txt(sd, 732)); //Item cannot be open when inventory is full
return false;
}
}
@ -4815,7 +4794,7 @@ int pc_useitem(struct map_session_data *sd,int n)
else
sprintf(e_msg,msg_txt(sd,380), // Item Failed. [%s] is cooling down. Wait %d seconds.
itemdb_jname(sd->item_delay[i].nameid), e_tick+1);
clif_colormes(sd,color_table[COLOR_YELLOW],e_msg);
clif_colormes(sd->fd,color_table[COLOR_YELLOW],e_msg);
return 0; // Delay has not expired yet
}
} else {// not yet used item (all slots are initially empty)
@ -7206,7 +7185,7 @@ void pc_damage(struct map_session_data *sd,struct block_list *src,unsigned int h
clif_progressbar_abort(sd);
if( sd->status.pet_id > 0 && sd->pd && battle_config.pet_damage_support )
pet_target_check(sd,src,1);
pet_target_check(sd->pd,src,1);
if( sd->status.ele_id > 0 )
elemental_set_target(sd,src);
@ -7354,8 +7333,8 @@ int pc_dead(struct map_session_data *sd,struct block_list *src)
if ( sd->spiritball !=0 )
pc_delspiritball(sd,sd->spiritball,0);
for(i = 1; i < 5; i++)
pc_del_talisman(sd, sd->talisman[i], i);
if (sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0)
pc_delspiritcharm(sd,sd->spiritcharm,sd->spiritcharm_type);
if (src)
switch (src->type) {
@ -7639,7 +7618,10 @@ int pc_readparam(struct map_session_data* sd,int type)
case SP_CHARMOVE: val = sd->status.character_moves; break;
case SP_CHARRENAME: val = sd->status.rename; break;
case SP_CHARFONT: val = sd->status.font; break;
case SP_BANK_VAULT: val = sd->bank_vault; break;
case SP_BANK_VAULT: val = sd->bank_vault; break;
case SP_ROULETTE_BRONZE: val = sd->roulette_point.bronze; break;
case SP_ROULETTE_SILVER: val = sd->roulette_point.silver; break;
case SP_ROULETTE_GOLD: val = sd->roulette_point.gold; break;
case SP_CRITICAL: val = sd->battle_status.cri/10; break;
case SP_ASPD: val = (2000-sd->battle_status.amotion)/10; break;
case SP_BASE_ATK: val = sd->battle_status.batk; break;
@ -7898,6 +7880,18 @@ bool pc_setparam(struct map_session_data *sd,int type,int val)
sd->bank_vault = cap_value(val, 0, MAX_BANK_ZENY);
pc_setreg2(sd, BANK_VAULT_VAR, sd->bank_vault);
return true;
case SP_ROULETTE_BRONZE:
sd->roulette_point.bronze = val;
pc_setreg2(sd, ROULETTE_BRONZE_VAR, sd->roulette_point.bronze);
return true;
case SP_ROULETTE_SILVER:
sd->roulette_point.silver = val;
pc_setreg2(sd, ROULETTE_SILVER_VAR, sd->roulette_point.silver);
return true;
case SP_ROULETTE_GOLD:
sd->roulette_point.gold = val;
pc_setreg2(sd, ROULETTE_GOLD_VAR, sd->roulette_point.gold);
return true;
default:
ShowError("pc_setparam: Attempted to set unknown parameter '%d'.\n", type);
return false;
@ -10150,102 +10144,138 @@ bool pc_should_log_commands(struct map_session_data *sd)
return pc_group_should_log_commands(pc_get_group_id(sd));
}
static int pc_talisman_timer(int tid, unsigned int tick, int id, intptr_t data)
/**
* Spirit Charm expiration timer.
* @see TimerFunc
*/
static int pc_spiritcharm_timer(int tid, unsigned int tick, int id, intptr_t data)
{
struct map_session_data *sd;
int i, type;
int i;
if( (sd=(struct map_session_data *)map_id2sd(id)) == NULL || sd->bl.type!=BL_PC )
if ((sd = (struct map_session_data *)map_id2sd(id)) == NULL || sd->bl.type != BL_PC)
return 1;
ARR_FIND(1, 5, type, sd->talisman[type] > 0);
if( sd->talisman[type] <= 0 )
{
ShowError("pc_talisman_timer: %d talisman's available. (aid=%d cid=%d tid=%d)\n", sd->talisman[type], sd->status.account_id, sd->status.char_id, tid);
sd->talisman[type] = 0;
if (sd->spiritcharm <= 0) {
ShowError("pc_spiritcharm_timer: %d spiritcharm's available. (aid=%d cid=%d tid=%d)\n", sd->spiritcharm, sd->status.account_id, sd->status.char_id, tid);
sd->spiritcharm = 0;
sd->spiritcharm_type = CHARM_TYPE_NONE;
return 0;
}
ARR_FIND(0, sd->talisman[type], i, sd->talisman_timer[type][i] == tid);
if( i == sd->talisman[type] )
{
ShowError("pc_talisman_timer: timer not found (aid=%d cid=%d tid=%d)\n", sd->status.account_id, sd->status.char_id, tid);
ARR_FIND(0, sd->spiritcharm, i, sd->spiritcharm_timer[i] == tid);
if (i == sd->spiritcharm) {
ShowError("pc_spiritcharm_timer: timer not found (aid=%d cid=%d tid=%d)\n", sd->status.account_id, sd->status.char_id, tid);
return 0;
}
sd->talisman[type]--;
if( i != sd->talisman[type] )
memmove(sd->talisman_timer[type]+i, sd->talisman_timer[type]+i+1, (sd->talisman[type]-i)*sizeof(int));
sd->talisman_timer[type][sd->talisman[type]] = INVALID_TIMER;
sd->spiritcharm--;
clif_talisman(sd, type);
if (i != sd->spiritcharm)
memmove(sd->spiritcharm_timer + i, sd->spiritcharm_timer + i + 1, (sd->spiritcharm - i) * sizeof(int));
sd->spiritcharm_timer[sd->spiritcharm] = INVALID_TIMER;
if (sd->spiritcharm <= 0)
sd->spiritcharm_type = CHARM_TYPE_NONE;
clif_spiritcharm(sd);
return 0;
}
void pc_add_talisman(struct map_session_data *sd,int interval,int max,int type)
/**
* Adds a spirit charm.
* @param sd: Target character
* @param interval: Duration
* @param max: Maximum amount of charms to add
* @param type: Charm type (@see spirit_charm_types)
*/
void pc_addspiritcharm(struct map_session_data *sd, int interval, int max, int type)
{
int tid, i;
nullpo_retv(sd);
if(max > 10)
max = 10;
if(sd->talisman[type] < 0)
sd->talisman[type] = 0;
if (sd->spiritcharm_type != CHARM_TYPE_NONE && type != sd->spiritcharm_type)
pc_delspiritcharm(sd, sd->spiritcharm, sd->spiritcharm_type);
if( sd->talisman[type] && sd->talisman[type] >= max )
{
if(sd->talisman_timer[type][0] != INVALID_TIMER)
delete_timer(sd->talisman_timer[type][0],pc_talisman_timer);
sd->talisman[type]--;
if( sd->talisman[type] != 0 )
memmove(sd->talisman_timer[type]+0, sd->talisman_timer[type]+1, (sd->talisman[type])*sizeof(int));
sd->talisman_timer[type][sd->talisman[type]] = INVALID_TIMER;
if (max > MAX_SPIRITCHARM)
max = MAX_SPIRITCHARM;
if (sd->spiritcharm < 0)
sd->spiritcharm = 0;
if (sd->spiritcharm && sd->spiritcharm >= max) {
if (sd->spiritcharm_timer[0] != INVALID_TIMER)
delete_timer(sd->spiritcharm_timer[0], pc_spiritcharm_timer);
sd->spiritcharm--;
if (sd->spiritcharm != 0)
memmove(sd->spiritcharm_timer + 0, sd->spiritcharm_timer + 1, (sd->spiritcharm) * sizeof(int));
sd->spiritcharm_timer[sd->spiritcharm] = INVALID_TIMER;
}
tid = add_timer(gettick()+interval, pc_talisman_timer, sd->bl.id, 0);
ARR_FIND(0, sd->talisman[type], i, sd->talisman_timer[type][i] == INVALID_TIMER || DIFF_TICK(get_timer(tid)->tick, get_timer(sd->talisman_timer[type][i])->tick) < 0);
if( i != sd->talisman[type] )
memmove(sd->talisman_timer[type]+i+1, sd->talisman_timer[type]+i, (sd->talisman[type]-i)*sizeof(int));
sd->talisman_timer[type][i] = tid;
sd->talisman[type]++;
tid = add_timer(gettick() + interval, pc_spiritcharm_timer, sd->bl.id, 0);
ARR_FIND(0, sd->spiritcharm, i, sd->spiritcharm_timer[i] == INVALID_TIMER || DIFF_TICK(get_timer(tid)->tick, get_timer(sd->spiritcharm_timer[i])->tick) < 0);
clif_talisman(sd, type);
if (i != sd->spiritcharm)
memmove(sd->spiritcharm_timer + i + 1, sd->spiritcharm_timer + i, (sd->spiritcharm - i) * sizeof(int));
sd->spiritcharm_timer[i] = tid;
sd->spiritcharm++;
sd->spiritcharm_type = type;
clif_spiritcharm(sd);
}
void pc_del_talisman(struct map_session_data *sd,int count,int type)
/**
* Removes one or more spirit charms.
* @param sd: The target character
* @param count: Amount of charms to remove
* @param type: Type of charm to remove
*/
void pc_delspiritcharm(struct map_session_data *sd, int count, int type)
{
int i;
nullpo_retv(sd);
if( sd->talisman[type] <= 0 ) {
sd->talisman[type] = 0;
if (sd->spiritcharm_type != type)
return;
if (sd->spiritcharm <= 0) {
sd->spiritcharm = 0;
return;
}
if( count <= 0 )
if (count <= 0)
return;
if( count > sd->talisman[type] )
count = sd->talisman[type];
sd->talisman[type] -= count;
if( count > 10 )
count = 10;
for(i = 0; i < count; i++) {
if(sd->talisman_timer[type][i] != INVALID_TIMER) {
delete_timer(sd->talisman_timer[type][i],pc_talisman_timer);
sd->talisman_timer[type][i] = INVALID_TIMER;
if (count > sd->spiritcharm)
count = sd->spiritcharm;
sd->spiritcharm -= count;
if (count > MAX_SPIRITCHARM)
count = MAX_SPIRITCHARM;
for (i = 0; i < count; i++) {
if (sd->spiritcharm_timer[i] != INVALID_TIMER) {
delete_timer(sd->spiritcharm_timer[i], pc_spiritcharm_timer);
sd->spiritcharm_timer[i] = INVALID_TIMER;
}
}
for(i = count; i < 10; i++) {
sd->talisman_timer[type][i-count] = sd->talisman_timer[type][i];
sd->talisman_timer[type][i] = INVALID_TIMER;
for (i = count; i < MAX_SPIRITCHARM; i++) {
sd->spiritcharm_timer[i - count] = sd->spiritcharm_timer[i];
sd->spiritcharm_timer[i] = INVALID_TIMER;
}
clif_talisman(sd, type);
if (sd->spiritcharm <= 0)
sd->spiritcharm_type = CHARM_TYPE_NONE;
clif_spiritcharm(sd);
}
#if defined(RENEWAL_DROP) || defined(RENEWAL_EXP)
@ -11119,7 +11149,7 @@ enum e_BANKING_WITHDRAW_ACK pc_bank_withdraw(struct map_session_data *sd, int mo
return BWA_NO_MONEY;
} else if ( limit_check > MAX_ZENY ) {
/* no official response for this scenario exists. */
clif_colormes(sd,color_table[COLOR_RED],msg_txt(sd,1495)); //You can't withdraw that much money
clif_colormes(sd->fd,color_table[COLOR_RED],msg_txt(sd,1495)); //You can't withdraw that much money
return BWA_UNKNOWN_ERROR;
}
@ -11574,7 +11604,7 @@ void do_init_pc(void) {
add_timer_func_list(pc_spiritball_timer, "pc_spiritball_timer");
add_timer_func_list(pc_follow_timer, "pc_follow_timer");
add_timer_func_list(pc_endautobonus, "pc_endautobonus");
add_timer_func_list(pc_talisman_timer, "pc_talisman_timer");
add_timer_func_list(pc_spiritcharm_timer, "pc_spiritcharm_timer");
add_timer_func_list(pc_global_expiration_timer, "pc_global_expiration_timer");
add_timer_func_list(pc_expiration_timer, "pc_expiration_timer");
add_timer_func_list(pc_autotrade_timer, "pc_autotrade_timer");

View File

@ -28,8 +28,12 @@
#define DAMAGELOG_SIZE_PC 100 /// Damage log
#define MAX_SPIRITBALL 15 /// Max spirit balls
#define MAX_DEVOTION 5 /// Max Devotion slots
#define MAX_SPIRITCHARM 10 /// Max spirit charms
#define BANK_VAULT_VAR "#BANKVAULT"
#define ROULETTE_BRONZE_VAR "RouletteBronze"
#define ROULETTE_SILVER_VAR "RouletteSilver"
#define ROULETTE_GOLD_VAR "RouletteGold"
//Update this max as necessary. 55 is the value needed for Super Baby currently
//Raised to 84 since Expanded Super Novice needs it.
@ -327,9 +331,11 @@ struct map_session_data {
int subrace2[RC2_MAX];
int subsize[SZ_MAX];
short reseff[SC_COMMON_MAX-SC_COMMON_MIN+1]; //TODO: Make this for all SC?
int weapon_coma_ele[ELE_MAX];
int weapon_coma_race[RC_MAX];
int weapon_coma_class[CLASS_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_atk_rate[16];
int arrow_addele[ELE_MAX];
@ -348,10 +354,6 @@ struct map_session_data {
int ignore_mdef_by_class[CLASS_MAX];
int ignore_def_by_race[RC_MAX];
short sp_gain_race[RC_MAX];
short sp_gain_race_attack[RC_MAX];
short hp_gain_race_attack[RC_MAX];
short hp_gain_race_attack_rate[RC_MAX];
short sp_gain_race_attack_rate[RC_MAX];
// zeroed arrays end here.
// zeroed structures start here
@ -389,7 +391,7 @@ struct map_session_data {
struct s_bonus_vanish_gain {
short rate, ///< Success rate 0 - 1000 (100%)
per; ///< % HP/SP vanished/gained
} hp_vanish_race[RC_MAX], sp_vanish_race[RC_MAX], hp_gain_attack, sp_gain_attack;
} hp_vanish_race[RC_MAX], sp_vanish_race[RC_MAX];
// zeroed structures end here
// manually zeroed structures start here.
@ -437,8 +439,6 @@ struct map_session_data {
int ematk; // matk bonus from equipment
int eatk; // atk bonus from equipment
uint8 absorb_dmg_maxhp; // [Cydh]
short hp_gain_attack, sp_gain_attack;
short hp_gain_attack_rate, sp_gain_attack_rate;
} bonus;
// zeroed vars end here.
@ -454,8 +454,9 @@ struct map_session_data {
int8 spiritball, spiritball_old;
int spirit_timer[MAX_SPIRITBALL];
short talisman[ELE_POISON+1]; // There are actually 5 talisman Fire, Ice, Wind, Earth & Poison maybe because its color violet.
int talisman_timer[ELE_POISON+1][10];
short spiritcharm; //No. of spirit
int spiritcharm_type; //Spirit type
int spiritcharm_timer[MAX_SPIRITCHARM];
unsigned char potion_success_counter; //Potion successes in row counter
unsigned char mission_count; //Stores the bounty kill count for TK_MISSION
@ -643,6 +644,17 @@ struct map_session_data {
#ifdef PACKET_OBFUSCATION
unsigned int cryptKey; ///< Packet obfuscation key to be used for the next received packet
#endif
struct {
int bronze, silver, gold; ///< Roulette Coin
} roulette_point;
struct {
short stage;
int8 prizeIdx;
short prizeStage;
bool claimPrize;
} roulette;
};
struct eri *pc_sc_display_ers; /// Player's SC display table
@ -1153,8 +1165,8 @@ void pc_itemcd_do(struct map_session_data *sd, bool load);
int pc_load_combo(struct map_session_data *sd);
void pc_add_talisman(struct map_session_data *sd,int interval,int max,int type);
void pc_del_talisman(struct map_session_data *sd,int count,int type);
void pc_addspiritcharm(struct map_session_data *sd, int interval, int max, int type);
void pc_delspiritcharm(struct map_session_data *sd, int count, int type);
void pc_baselevelchanged(struct map_session_data *sd);

View File

@ -64,7 +64,7 @@ void pet_set_intimate(struct pet_data *pd, int value)
pd->pet.intimate = value;
if( (intimate >= battle_config.pet_equip_min_friendly && pd->pet.intimate < battle_config.pet_equip_min_friendly) || (intimate < battle_config.pet_equip_min_friendly && pd->pet.intimate >= battle_config.pet_equip_min_friendly) )
if( sd && (intimate >= battle_config.pet_equip_min_friendly && pd->pet.intimate < battle_config.pet_equip_min_friendly) || (intimate < battle_config.pet_equip_min_friendly && pd->pet.intimate >= battle_config.pet_equip_min_friendly) )
status_calc_pc(sd,SCO_NONE);
}
@ -156,12 +156,11 @@ int pet_attackskill(struct pet_data *pd, int target_id)
* @param type : pet's attack rate type
* @return 0
*/
int pet_target_check(struct map_session_data *sd,struct block_list *bl,int type)
int pet_target_check(struct pet_data *pd,struct block_list *bl,int type)
{
struct pet_data *pd;
int rate;
pd = sd->pd;
nullpo_ret(pd);
Assert((pd->master == 0) || (pd->master->pd == pd));

View File

@ -108,7 +108,7 @@ struct pet_data {
int pet_create_egg(struct map_session_data *sd, unsigned short item_id);
int pet_hungry_val(struct pet_data *pd);
void pet_set_intimate(struct pet_data *pd, int value);
int pet_target_check(struct map_session_data *sd,struct block_list *bl,int type);
int pet_target_check(struct pet_data *pd,struct block_list *bl,int type);
int pet_unlocktarget(struct pet_data *pd);
int pet_sc_check(struct map_session_data *sd, int type); //Skotlex
int search_petDB_index(int key,int type);

View File

@ -11191,9 +11191,9 @@ BUILDIN_FUNC(changebase)
}
/**
* Change sec and unequip all item and request for a changesex to char-serv
* Change account sex and unequip all item and request for a changesex to char-serv
* changesex({<char_id>});
**/
*/
BUILDIN_FUNC(changesex)
{
int i;
@ -11204,12 +11204,42 @@ BUILDIN_FUNC(changesex)
pc_resetskill(sd,4);
// to avoid any problem with equipment and invalid sex, equipment is unequiped.
for( i=0; i<EQI_MAX; i++ )
if( sd->equip_index[i] >= 0 ) pc_unequipitem(sd, sd->equip_index[i], 3);
chrif_changesex(sd);
for(i = 0; i < EQI_MAX; i++) {
if (sd->equip_index[i] >= 0)
pc_unequipitem(sd, sd->equip_index[i], 3);
}
chrif_changesex(sd, true);
return SCRIPT_CMD_SUCCESS;
}
/**
* Change character's sex and unequip all item and request for a changesex to char-serv
* changecharsex({<char_id>});
*/
BUILDIN_FUNC(changecharsex)
{
#if PACKETVER >= 20141016
int i;
TBL_PC *sd = NULL;
if (!script_charid2sd(2,sd))
return SCRIPT_CMD_FAILURE;
pc_resetskill(sd,4);
// to avoid any problem with equipment and invalid sex, equipment is unequiped.
for (i = 0; i < EQI_MAX; i++) {
if (sd->equip_index[i] >= 0)
pc_unequipitem(sd, sd->equip_index[i], 3);
}
chrif_changesex(sd, false);
return SCRIPT_CMD_SUCCESS;
#else
return SCRIPT_CMD_FAILURE;
#endif
}
/*==========================================
* Works like 'announce' but outputs in the common chat window
*------------------------------------------*/
@ -16024,7 +16054,7 @@ BUILDIN_FUNC(callshop)
}
if (i == nd->u.shop.count) {
clif_colormes(sd, color_table[COLOR_RED], msg_txt(sd, 534));
clif_colormes(sd->fd, color_table[COLOR_RED], msg_txt(sd, 534));
return false;
}
@ -16666,10 +16696,10 @@ BUILDIN_FUNC(getunitdata)
TBL_PET* pd = NULL;
TBL_ELEM* ed = NULL;
TBL_NPC* nd = NULL;
int64 num;
char* name;
struct script_data *data = script_getdata(st, 3);
if (!data_isreference(script_getdata(st, 3))) {
if (!data_isreference(data)) {
ShowWarning("buildin_getunitdata: Error in argument! Please give a variable to store values in.\n");
return SCRIPT_CMD_FAILURE;
}
@ -16690,10 +16720,9 @@ BUILDIN_FUNC(getunitdata)
case BL_NPC: nd = map_id2nd(bl->id); break;
}
num = st->stack->stack_data[st->start+3].u.num;
name = (char *)(str_buf+str_data[num&0x00ffffff].str);
name = reference_getname(data);
#define getunitdata_sub(idx__,var__) setd_sub(st,sd,name,(idx__),(void *)__64BPRTSIZE((int)(var__)),script_getref(st,3))
#define getunitdata_sub(idx__,var__) setd_sub(st,sd,name,(idx__),(void *)__64BPRTSIZE((int)(var__)),data->ref)
switch(bl->type) {
case BL_MOB:
@ -16904,7 +16933,16 @@ BUILDIN_FUNC(setunitdata)
case BL_PET: pd = map_id2pd(bl->id); break;
case BL_MER: mc = map_id2mc(bl->id); break;
case BL_ELEM: ed = map_id2ed(bl->id); break;
case BL_NPC: nd = map_id2nd(bl->id); break;
case BL_NPC:
nd = map_id2nd(bl->id);
if (!nd->status.hp)
status_calc_npc(nd, SCO_FIRST);
else
status_calc_npc(nd, SCO_NONE);
break;
default:
ShowError("buildin_setunitdata: Invalid object!");
return SCRIPT_CMD_FAILURE;
}
type = script_getnum(st, 3);
@ -17095,7 +17133,7 @@ BUILDIN_FUNC(setunitdata)
break;
case BL_NPC:
if (!md) {
if (!nd) {
ShowWarning("buildin_setunitdata: Error in finding object BL_NPC!\n");
return SCRIPT_CMD_FAILURE;
}
@ -17108,12 +17146,12 @@ BUILDIN_FUNC(setunitdata)
case 5: if (!unit_walktoxy(bl, (short)value, nd->bl.y, 2)) unit_movepos(bl, (short)value, nd->bl.x, 0, 0); break;
case 6: if (!unit_walktoxy(bl, nd->bl.x, (short)value, 2)) unit_movepos(bl, nd->bl.x, (short)value, 0, 0); break;
case 7: unit_setdir(bl, (uint8)value); break;
case 8: nd->status.str = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 9: nd->status.agi = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 10: nd->status.vit = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 11: nd->status.int_ = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 12: nd->status.dex = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 13: nd->status.luk = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 8: nd->params.str = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 9: nd->params.agi = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 10: nd->params.vit = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 11: nd->params.int_ = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 12: nd->params.dex = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
case 13: nd->params.luk = (unsigned short)value; status_calc_bl(bl, SCB_ALL); break;
default:
ShowError("buildin_setunitdata: Unknown data identifier %d for BL_NPC.\n", type);
return SCRIPT_CMD_FAILURE;
@ -17475,9 +17513,9 @@ BUILDIN_FUNC(unitskilluseid)
if (bl != NULL) {
if (bl->type == BL_NPC) {
if (!((TBL_NPC*)bl)->status.hp)
status_calc_npc(((TBL_NPC*)bl), true);
status_calc_npc(((TBL_NPC*)bl), SCO_FIRST);
else
status_calc_npc(((TBL_NPC*)bl), false);
status_calc_npc(((TBL_NPC*)bl), SCO_NONE);
}
unit_skilluse_id2(bl, target_id, skill_id, skill_lv, (casttime * 1000) + skill_castfix(bl, skill_id, skill_lv), skill_get_castcancel(skill_id));
}
@ -17739,7 +17777,7 @@ BUILDIN_FUNC(openauction)
return SCRIPT_CMD_FAILURE;
if( !battle_config.feature_auction ) {
clif_colormes(sd, color_table[COLOR_RED], msg_txt(sd, 517));
clif_colormes(sd->fd, color_table[COLOR_RED], msg_txt(sd, 517));
return 0;
}
@ -17995,21 +18033,23 @@ BUILDIN_FUNC(questinfo)
int quest_id, icon;
struct questinfo qi;
if( nd == NULL || nd->bl.m == -1 )
return true;
if( nd == NULL || nd->bl.m == -1 ) {
ShowError("buildin_questinfo: No NPC attached.\n");
return SCRIPT_CMD_FAILURE;
}
quest_id = script_getnum(st, 2);
icon = script_getnum(st, 3);
#if PACKETVER >= 20120410
if(icon < 0 || (icon > 8 && icon != 9999) || icon == 7)
icon = 9999; // Default to nothing if icon id is invalid.
#else
if(icon < 0 || icon > 7)
icon = 0;
else
icon = icon + 1;
#endif
#if PACKETVER >= 20120410
if(icon < 0 || (icon > 8 && icon != 9999) || icon == 7)
icon = 9999; // Default to nothing if icon id is invalid.
#else
if(icon < 0 || icon > 7)
icon = 0;
else
icon = icon + 1;
#endif
qi.quest_id = quest_id;
qi.icon = (unsigned char)icon;
@ -18040,7 +18080,7 @@ BUILDIN_FUNC(questinfo)
map_add_questinfo(nd->bl.m,&qi);
return true;
return SCRIPT_CMD_SUCCESS;
}
/**
@ -18176,15 +18216,15 @@ BUILDIN_FUNC(showevent)
}
}
#if PACKETVER >= 20120410
if(icon < 0 || (icon > 8 && icon != 9999) || icon == 7)
icon = 9999; // Default to nothing if icon id is invalid.
#else
if(icon < 0 || icon > 7)
icon = 0;
else
icon = icon + 1;
#endif
#if PACKETVER >= 20120410
if(icon < 0 || (icon > 8 && icon != 9999) || icon == 7)
icon = 9999; // Default to nothing if icon id is invalid.
#else
if(icon < 0 || icon > 7)
icon = 0;
else
icon = icon + 1;
#endif
clif_quest_show_event(sd, &nd->bl, icon, color);
return SCRIPT_CMD_SUCCESS;
@ -20000,9 +20040,6 @@ BUILDIN_FUNC(montransform) {
val4 = script_getnum(st, 8);
if (tick != 0) {
char msg[CHAT_SIZE_MAX];
struct mob_db *monster = mob_db(mob_id);
if (battle_config.mon_trans_disable_in_gvg && map_flag_gvg2(sd->bl.m)) {
clif_displaymessage(sd->fd, msg_txt(sd,731)); // Transforming into monster is not allowed in Guild Wars.
return SCRIPT_CMD_FAILURE;
@ -20013,11 +20050,9 @@ BUILDIN_FUNC(montransform) {
return SCRIPT_CMD_FAILURE;
}
sprintf(msg, msg_txt(sd,728), monster->name); // Traaaansformation-!! %s form!!
clif_showscript(&sd->bl, msg);
status_change_end(&sd->bl, SC_MONSTER_TRANSFORM, INVALID_TIMER); // Clear previous
sc_start2(NULL, &sd->bl, SC_MONSTER_TRANSFORM, 100, mob_id, type, tick);
if (script_hasdata(st, 4))
if (type != SC_NONE)
sc_start4(NULL, &sd->bl, type, 100, val1, val2, val3, val4, tick);
}
@ -20435,6 +20470,35 @@ BUILDIN_FUNC(getvar) {
return SCRIPT_CMD_SUCCESS;
}
/**
* Display script message
* showscript "<message>"{,<GID>};
**/
BUILDIN_FUNC(showscript) {
struct block_list *bl = NULL;
const char *msg = script_getstr(st,2);
int id = 0;
if (script_hasdata(st,3)) {
id = script_getnum(st,3);
bl = map_id2bl(id);
}
else {
bl = st->rid ? map_id2bl(st->rid) : map_id2bl(st->oid);
}
if (!bl) {
ShowError("buildin_showscript: Script not attached. (id=%, rid=%d, oid=%d)\n", id, st->rid, st->oid);
script_pushint(st,0);
return SCRIPT_CMD_FAILURE;
}
clif_showscript(bl, msg);
script_pushint(st,1);
return SCRIPT_CMD_SUCCESS;
}
#include "../custom/script.inc"
// declarations that were supposed to be exported from npc_chat.c
@ -20659,6 +20723,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(skillpointcount,"?"),
BUILDIN_DEF(changebase,"i?"),
BUILDIN_DEF(changesex,"?"),
BUILDIN_DEF(changecharsex,"?"),
BUILDIN_DEF(waitingroom,"si?????"),
BUILDIN_DEF(delwaitingroom,"?"),
BUILDIN_DEF2(waitingroomkickall,"kickwaitingroomall","?"),
@ -20989,6 +21054,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(npcshopupdate,"sii?"),
BUILDIN_DEF(getattachedrid,""),
BUILDIN_DEF(getvar,"vi"),
BUILDIN_DEF(showscript,"s?"),
#include "../custom/script_def.inc"

View File

@ -851,7 +851,6 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
struct mob_data *md, *dstmd;
struct status_data *sstatus, *tstatus;
struct status_change *sc, *tsc;
enum sc_type status;
int skill;
int rate;
@ -1103,7 +1102,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
break;
case HT_SHOCKWAVE:
status_percent_damage(src, bl, 0, 15*skill_lv+5, false);
status_percent_damage(src, bl, 0, -(15*skill_lv+5), false);
break;
case HT_SANDMAN:
@ -1465,10 +1464,12 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
skill_castend_damage_id(src,bl,LG_PINPOINTATTACK,rnd_value(1, pc_checkskill(sd,LG_PINPOINTATTACK)),tick,0);
break;
case SR_DRAGONCOMBO:
sc_start(src,bl, SC_STUN, 1 + skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
case SR_FLASHCOMBO_ATK_STEP1:
sc_start(src,bl, SC_STUN, 1 + skill_lv, skill_lv, skill_get_time(SR_DRAGONCOMBO, skill_lv));
break;
case SR_FALLENEMPIRE:
sc_start(src,bl, SC_STOP, 100, skill_lv, skill_get_time(skill_id, skill_lv));
case SR_FLASHCOMBO_ATK_STEP2:
sc_start(src,bl, SC_STOP, 100, skill_lv, skill_get_time(SR_FALLENEMPIRE, skill_lv));
break;
case SR_WINDMILL:
if( dstsd )
@ -1745,16 +1746,25 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
src = sd?&sd->bl:src;
}
if( attack_type&BF_WEAPON )
{ // Coma, Breaking Equipment
if( sd && sd->special_state.bonus_coma )
{
rate = sd->weapon_coma_ele[tstatus->def_ele] + sd->weapon_coma_ele[ELE_ALL];
// Coma
if (sd && sd->special_state.bonus_coma && (!md || !mob_is_gvg(md) || !mob_is_battleground(md))) {
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_NO_DAMAGE)) {
rate += sd->coma_class[tstatus->class_] + sd->coma_class[CLASS_ALL];
rate += sd->coma_race[tstatus->race] + sd->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];
if (rate)
status_change_start(src,bl, SC_COMA, rate, 0, 0, src->id, 0, 0, SCSTART_NONE);
}
if (rate > 0)
status_change_start(src,bl, SC_COMA, rate, 0, 0, src->id, 0, 0, SCSTART_NONE);
}
if( attack_type&BF_WEAPON )
{ // Breaking Equipment
if( sd && battle_config.equip_self_break_rate )
{ // Self weapon breaking
rate = battle_config.equip_natural_break_rate;
@ -2413,6 +2423,7 @@ int skill_strip_equip(struct block_list *src,struct block_list *bl, unsigned sho
* [2] counts how many targets have been processed. counter is added in skill_area_sub if the foreach function flag is: flag&(SD_SPLASH|SD_PREAMBLE)
*/
static int skill_area_temp[8];
static int64 skill_area_temp_i64[1];
/**
Used to knock back players, monsters, traps, etc
@ -2883,8 +2894,10 @@ void skill_attack_blow(struct block_list *src, struct block_list *dsrc, struct b
* flag&1
* flag&2 - Disable re-triggered by double casting
* flag&4 - Skip to blow target (because already knocked back before skill_attack somewhere)
* flag&8 - Force assume the target is not as is_infinite_defense() on in battle_calc_attack() first.
* Once it's done, store the damage to skill_area_temp_i64[0] then re-calcuate for real against 'plant'.
*
* flag&0xFFF is passed to the underlying battle_calc_attack for processing
* flag&0xFFF is passed to the underlying battle_calc_attack for processing.
* (usually holds number of targets, or just 1 for simple splash attacks)
*
* flag&0xF000 - Values from enum e_skill_display
@ -3051,6 +3064,14 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
skill_id == MER_INCAGI || skill_id == MER_BLESSING) && tsd->sc.data[SC_CHANGEUNDEAD] )
damage = 1;
if (flag&8) {
skill_area_temp_i64[0] = damage;
if (is_infinite_defense(bl, dmg.flag)) {
dmg = battle_calc_attack_plant(dmg, src, bl, skill_id, skill_lv);
damage = dmg.damage + dmg.damage2;
}
}
if( damage && tsc && tsc->data[SC_GENSOU] && dmg.flag&BF_MAGIC ){
struct block_list *nbl;
nbl = battle_getenemyarea(bl,bl->x,bl->y,2,BL_CHAR,bl->id);
@ -3317,9 +3338,9 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
(dmg.flag&BF_MISC && (skill_id == RA_CLUSTERBOMB || skill_id == RA_FIRINGTRAP || skill_id == RA_ICEBOUNDTRAP)) ) )
{
if (battle_config.left_cardfix_to_right)
battle_drain(sd, bl, dmg.damage, dmg.damage, tstatus->race, tstatus->class_);
battle_drain(sd, bl, dmg.damage, dmg.damage, tstatus->race, tstatus->class_, is_infinite_defense(bl,dmg.flag));
else
battle_drain(sd, bl, dmg.damage, dmg.damage2, tstatus->race, tstatus->class_);
battle_drain(sd, bl, dmg.damage, dmg.damage2, tstatus->race, tstatus->class_, is_infinite_defense(bl,dmg.flag));
}
if( damage > 0 ) { // Post-damage effects
@ -3752,10 +3773,10 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
case WL_TETRAVORTEX_WIND:
case WL_TETRAVORTEX_GROUND:
// For SR_FLASHCOMBO
case SR_DRAGONCOMBO:
case SR_FALLENEMPIRE:
case SR_TIGERCANNON:
case SR_SKYNETBLOW:
case SR_FLASHCOMBO_ATK_STEP1:
case SR_FLASHCOMBO_ATK_STEP2:
case SR_FLASHCOMBO_ATK_STEP3:
case SR_FLASHCOMBO_ATK_STEP4:
break; // Exceptions
default:
continue; // Caster is Dead
@ -3905,14 +3926,15 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
break;
}
// For SR_FLASHCOMBO
case SR_DRAGONCOMBO:
case SR_FALLENEMPIRE:
case SR_TIGERCANNON:
case SR_SKYNETBLOW:
case SR_FLASHCOMBO_ATK_STEP1:
case SR_FLASHCOMBO_ATK_STEP2:
case SR_FLASHCOMBO_ATK_STEP3:
case SR_FLASHCOMBO_ATK_STEP4:
if( src->type == BL_PC ) {
const int use_skill_lv[] = { SR_DRAGONCOMBO, SR_FALLENEMPIRE, SR_TIGERCANNON, SR_SKYNETBLOW };
if( distance_xy(src->x, src->y, target->x, target->y) >= 3 )
break;
skill_castend_damage_id(src, target, skl->skill_id, pc_checkskill(((TBL_PC *)src), skl->skill_id), tick, 0);
skill_castend_damage_id(src, target, skl->skill_id, pc_checkskill(((TBL_PC *)src), use_skill_lv[skl->skill_id-SR_FLASHCOMBO_ATK_STEP1]), tick, 0);
}
break;
case SC_ESCAPE:
@ -4033,10 +4055,10 @@ int skill_cleartimerskill (struct block_list *src)
case WL_TETRAVORTEX_WIND:
case WL_TETRAVORTEX_GROUND:
// For SR_FLASHCOMBO
case SR_DRAGONCOMBO:
case SR_FALLENEMPIRE:
case SR_TIGERCANNON:
case SR_SKYNETBLOW:
case SR_FLASHCOMBO_ATK_STEP1:
case SR_FLASHCOMBO_ATK_STEP2:
case SR_FLASHCOMBO_ATK_STEP3:
case SR_FLASHCOMBO_ATK_STEP4:
continue;
}
delete_timer(ud->skilltimerskill[i]->timer, skill_timerskill);
@ -4123,8 +4145,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
map_freeblock_lock();
switch(skill_id)
{
switch(skill_id) {
case MER_CRASH:
case SM_BASH:
case MS_BASH:
@ -4194,7 +4215,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
case TK_COUNTER:
case GS_CHAINACTION:
case GS_TRIPLEACTION:
#ifndef RENEWAL
case GS_MAGICALBULLET:
#endif
case GS_TRACKING:
case GS_PIERCINGSHOT:
case GS_RAPIDSHOWER:
@ -4229,6 +4252,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
case LG_OVERBRAND:
case LG_OVERBRAND_BRANDISH:
case SR_FALLENEMPIRE:
case SR_FLASHCOMBO_ATK_STEP2:
case SR_CRESCENTELBOW_AUTOSPELL:
case SR_GATEOFHELL:
case SR_GENTLETOUCH_QUIET:
@ -4459,6 +4483,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
case LG_EARTHDRIVE:
case SR_RAMPAGEBLASTER:
case SR_SKYNETBLOW:
case SR_FLASHCOMBO_ATK_STEP4:
case SR_WINDMILL:
case SR_RIDEINLIGHTNING:
case WM_SOUND_OF_DESTRUCTION:
@ -4788,6 +4813,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
case TF_THROWSTONE:
#ifdef RENEWAL
case ASC_BREAKER:
case GS_MAGICALBULLET:
#endif
case NPC_SMOKING:
case GS_FLING:
@ -5239,6 +5265,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
break;
case SR_DRAGONCOMBO:
case SR_FLASHCOMBO_ATK_STEP1:
skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
break;
@ -5290,17 +5317,30 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
break;
case SR_TIGERCANNON:
if ( flag&1 ) {
skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag);
status_zap(bl, 0, status_get_max_sp(bl) * 10 / 100);
} else if ( sd ) {
int hpcost = 10 + 2 * skill_lv, spcost = 5 + 1 * skill_lv;
if (!status_charge(src, status_get_max_hp(src) * hpcost / 100, status_get_max_sp(src) * spcost / 100)) {
if (sd)
clif_skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0);
break;
case SR_FLASHCOMBO_ATK_STEP3:
if (flag&1) {
if (skill_area_temp[3] == skill_id && skill_area_temp_i64[0]) { // Safe check
if (skill_area_temp[1] != bl->id) {
int64 dmg = skill_area_temp_i64[0];
bool infdef = is_infinite_defense(bl, skill_get_type(skill_id));
if (infdef)
dmg = 1;
status_damage(src, bl, dmg, 0, 0, 0);
status_zap(bl, 0, status_get_max_sp(bl) * 10 / 100);
clif_skill_damage(src, bl, tick, status_get_amotion(bl), 0, dmg, 1, skill_id, skill_lv, 6);
}
}
map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), splash_target(src), src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_damage_id);
else { // Somehow, we failed
skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag);
status_zap(bl, 0, status_get_max_sp(bl) * 10 / 100);
}
}
else if (sd) {
skill_area_temp[1] = bl->id;
skill_area_temp[3] = skill_id;
skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag|8); // Only do attack calculation once
status_zap(bl, 0, status_get_max_sp(bl) * 10 / 100);
map_foreachinrange(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;
@ -6491,8 +6531,14 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
i = 0;
if (dstsd && dstsd->spiritball && (sd == dstsd || map_flag_vs(src->m) || (sd && sd->duel_group && sd->duel_group == dstsd->duel_group)) &&
((dstsd->class_&MAPID_BASEMASK) != MAPID_GUNSLINGER || (dstsd->class_&MAPID_UPPERMASK) != MAPID_REBELLION)) { // split the if for readability, and included gunslingers in the check so that their coins cannot be removed [Reddozen]
i = dstsd->spiritball * 7;
pc_delspiritball(dstsd,dstsd->spiritball,0);
if (dstsd->spiritball > 0) {
i = dstsd->spiritball * 7;
pc_delspiritball(dstsd,dstsd->spiritball,0);
}
if (dstsd->spiritcharm_type != CHARM_TYPE_NONE && dstsd->spiritcharm > 0) {
i += dstsd->spiritcharm * 7;
pc_delspiritcharm(dstsd,dstsd->spiritcharm,dstsd->spiritcharm_type);
}
} else if (dstmd && !(tstatus->mode&MD_BOSS) && rnd() % 100 < 20) { // check if target is a monster and not a Boss, for the 20% chance to absorb 2 SP per monster's level [Reddozen]
i = 2 * dstmd->level;
mob_target(dstmd,src,0);
@ -6543,6 +6589,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case NC_AXETORNADO:
case GC_COUNTERSLASH:
case SR_SKYNETBLOW:
case SR_FLASHCOMBO_ATK_STEP4:
case SR_RAMPAGEBLASTER:
case SR_HOWLINGOFLION:
case KO_HAPPOKUNAI:
@ -6589,7 +6636,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
map_foreachinrange(skill_area_sub,src,
skill_get_splash(skill_id, skill_lv),BL_CHAR|BL_SKILL,
src,skill_id,skill_lv,tick, flag|BCT_ENEMY|1,
src,skill_id,skill_lv,tick, flag|BCT_ENEMY|SD_ANIMATION|1,
skill_castend_damage_id);
break;
@ -7045,7 +7092,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case AL_HOLYWATER:
if(sd) {
if (skill_produce_mix(sd, skill_id, 523, 0, 0, 0, 1))
if (skill_produce_mix(sd, skill_id, ITEMID_HOLY_WATER, 0, 0, 0, 1))
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
else
clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
@ -9445,14 +9492,20 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
break;
case SR_ASSIMILATEPOWER:
if( flag&1 ) {
if (flag&1) {
i = 0;
if( dstsd && dstsd->spiritball && (sd == dstsd || map_flag_vs(src->m)) && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER )
{
i = dstsd->spiritball; //1%sp per spiritball.
pc_delspiritball(dstsd, dstsd->spiritball, 0);
if (dstsd && dstsd->spiritball && (sd == dstsd || map_flag_vs(src->m)) && (dstsd->class_&MAPID_BASEMASK)!=MAPID_GUNSLINGER) {
if (dstsd->spiritball > 0) {
i = dstsd->spiritball;
pc_delspiritball(dstsd,dstsd->spiritball,0);
}
if (dstsd->spiritcharm_type != CHARM_TYPE_NONE && dstsd->spiritcharm > 0) {
i += dstsd->spiritcharm;
pc_delspiritcharm(dstsd,dstsd->spiritcharm,dstsd->spiritcharm_type);
}
}
if( i ) status_percent_heal(src, 0, i);
if (i)
status_percent_heal(src, 0, i);
clif_skill_nodamage(src, bl, skill_id, skill_lv, i ? 1:0);
} else {
clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
@ -9499,14 +9552,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
break;
case SR_FLASHCOMBO: {
const int combo[] = { SR_DRAGONCOMBO, SR_FALLENEMPIRE, SR_TIGERCANNON, SR_SKYNETBLOW };
const int combo[] = { SR_FLASHCOMBO_ATK_STEP1, SR_FLASHCOMBO_ATK_STEP2, SR_FLASHCOMBO_ATK_STEP3, SR_FLASHCOMBO_ATK_STEP4 };
const int delay[] = { 0, 250, 500, 2000 };
if (sd)
sd->ud.attackabletime = sd->canuseitem_tick = sd->ud.canact_tick;
clif_skill_nodamage(src,bl,skill_id,skill_lv,
sc_start2(src,bl,type,100,skill_lv,bl->id,skill_get_time(skill_id,skill_lv)));
for (i = 0; i < ARRAYLENGTH(combo); i++)
skill_addtimerskill(src,tick + 500 * i,bl->id,0,0,combo[i],skill_lv,BF_WEAPON,flag|SD_LEVEL);
skill_addtimerskill(src,tick + delay[i],bl->id,0,0,combo[i],skill_lv,BF_WEAPON,flag|SD_LEVEL);
}
break;
@ -10037,13 +10091,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
case KO_HYOUHU_HUBUKI:
case KO_KAZEHU_SEIRAN:
case KO_DOHU_KOUKAI:
if(sd) {
int i_tal, ttype = skill_get_ele(skill_id, skill_lv);
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
ARR_FIND(1, 6, i_tal, sd->talisman[i_tal] > 0 && ttype != i_tal);
if( i_tal < 6 )
pc_del_talisman(sd, sd->talisman[i_tal], i_tal); // Replace talisman
pc_add_talisman(sd, skill_get_time(skill_id, skill_lv), 10, ttype);
if (sd) {
int type = skill_get_ele(skill_id,skill_lv);
clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
pc_addspiritcharm(sd,skill_get_time(skill_id,skill_lv),MAX_SPIRITCHARM,type);
}
break;
case KO_ZANZOU:
@ -10219,7 +10271,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
if(hd->master && hd->sc.data[SC_STYLE_CHANGE]) {
char output[128];
safesnprintf(output,sizeof(output),msg_txt(sd,378),(sce->val1==MH_MD_FIGHTING?"fighthing":"grappling"));
clif_colormes(hd->master,color_table[COLOR_RED],output);
clif_colormes(hd->master->fd, color_table[COLOR_RED], output);
}
}
else sc_start(&hd->bl,&hd->bl, SC_STYLE_CHANGE, 100, MH_MD_FIGHTING, -1);
@ -11446,7 +11498,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
case SO_ARRULLO:
i = skill_get_splash(skill_id,skill_lv);
map_foreachinarea(skill_area_sub,src->m,x-i,y-i,x+i,y+i,splash_target(src),
map_foreachinarea(skill_area_sub,src->m,x-i,y-i,x+i,y+i,BL_CHAR,
src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
break;
@ -12322,15 +12374,12 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_
limit = ((sd ? pc_checkskill(sd,GN_DEMONIC_FIRE) : 1) + 1) * limit;
break;
case KO_ZENKAI:
if( sd ){
ARR_FIND(1, 6, i, sd->talisman[i] > 0);
if( i < 5 ){
val1 = sd->talisman[i]; // no. of aura
val2 = i; // aura type
limit += val1 * 1000;
subunt = i - 1;
pc_del_talisman(sd, sd->talisman[i], i);
}
if (sd && sd->spiritcharm_type != CHARM_TYPE_NONE && sd->spiritcharm > 0) {
val1 = sd->spiritcharm;
val2 = sd->spiritcharm_type;
limit = 6000 * val1;
subunt = sd->spiritcharm_type - 1;
pc_delspiritcharm(sd,sd->spiritcharm,sd->spiritcharm_type);
}
break;
case HW_GRAVITATION:
@ -14702,7 +14751,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
MOBID_EMPERIUM, MOBID_GUARDIAN_STONE1, MOBID_GUARDIAN_STONE2)) {
char output[128];
sprintf(output,"%s",msg_txt(sd,382)); // You're too close to a stone or emperium to use this skill.
clif_colormes(sd,color_table[COLOR_RED], output);
clif_colormes(sd->fd,color_table[COLOR_RED], output);
return false;
}
}
@ -14779,20 +14828,15 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
case KO_HYOUHU_HUBUKI:
case KO_KAZEHU_SEIRAN:
case KO_DOHU_KOUKAI:
{
int ttype = skill_get_ele(skill_id, skill_lv);
ARR_FIND(1, 5, i, sd->talisman[i] > 0 && i != ttype);
if( sd->talisman[ttype] >= 10 ) {
clif_skill_fail(sd, skill_id, USESKILL_FAIL_SUMMON, 0);
return false;
}
if (sd->spiritcharm_type == skill_get_ele(skill_id,skill_lv) && sd->spiritcharm >= MAX_SPIRITCHARM) {
clif_skill_fail(sd,skill_id,USESKILL_FAIL_SUMMON,0);
return false;
}
break;
case KO_KAIHOU:
case KO_ZENKAI:
ARR_FIND(1, 6, i, sd->talisman[i] > 0);
if( i > 4 ) {
clif_skill_fail(sd, skill_id, USESKILL_FAIL_SUMMON, 0);
if (sd->spiritcharm_type == CHARM_TYPE_NONE || sd->spiritcharm <= 0) {
clif_skill_fail(sd,skill_id,USESKILL_FAIL_SUMMON_NONE,0);
return false;
}
break;
@ -14914,7 +14958,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
char output[CHAT_SIZE_MAX];
//Official use msgstringtable.txt for each skill failure
sprintf(output,msg_txt(sd,722),itemdb_jname(reqeqit));
clif_colormes(sd,color_table[COLOR_RED],output);
clif_colormes(sd->fd, color_table[COLOR_RED], output);
return false;
}
}
@ -15095,7 +15139,7 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
skill_get_desc(skill_id),
require.ammo_qty,
itemdb_jname(sd->status.inventory[i].nameid));
clif_colormes(sd,color_table[COLOR_RED],e_msg);
clif_colormes(sd->fd,color_table[COLOR_RED],e_msg);
return false;
}
if (!(require.ammo&1<<sd->inventory_data[i]->look)) { //Ammo type check. Send the "wrong weapon type" message
@ -15126,7 +15170,7 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
//Official is using msgstringtable.txt for each requirement failure
//clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
sprintf(output, msg_txt(sd,720), itemdb_jname(require.itemid[i])); // %s is required.
clif_colormes(sd,color_table[COLOR_RED],output);
clif_colormes(sd->fd,color_table[COLOR_RED],output);
}
return false;
}
@ -15810,6 +15854,8 @@ int skill_delayfix (struct block_list *bl, uint16 skill_id, uint16 skill_lv)
case CH_CHAINCRUSH:
case SR_DRAGONCOMBO:
case SR_FALLENEMPIRE:
case SR_FLASHCOMBO_ATK_STEP1:
case SR_FLASHCOMBO_ATK_STEP2:
//If delay not specified, it will be 1000 - 4*agi - 2*dex
if (time == 0)
time = 1000;
@ -18605,17 +18651,22 @@ bool skill_produce_mix(struct map_session_data *sd, uint16 skill_id, unsigned sh
break;
}
}
if (skill_id == GN_CHANGEMATERIAL && tmp_item.amount) { //Success
int j, k = 0;
int j, k = 0, l;
bool isStackable = itemdb_isstackable(tmp_item.nameid);
for (i = 0; i < MAX_SKILL_CHANGEMATERIAL_DB; i++) {
if (skill_changematerial_db[i].nameid == nameid){
for (j = 0; j < MAX_SKILL_CHANGEMATERIAL_SET; j++){
if (rnd()%1000 < skill_changematerial_db[i].qty_rate[j]){
tmp_item.amount = qty * skill_changematerial_db[i].qty[j];
if ((flag = pc_additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) {
clif_additem(sd,0,0,flag);
map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
uint16 total_qty = qty * skill_changematerial_db[i].qty[j];
tmp_item.amount = (isStackable ? total_qty : 1);
for (l = 0; l < total_qty; l += tmp_item.amount) {
if ((flag = pc_additem(sd,&tmp_item,tmp_item.amount,LOG_TYPE_PRODUCE))) {
clif_additem(sd,0,0,flag);
map_addflooritem(&tmp_item,tmp_item.amount,sd->bl.m,sd->bl.x,sd->bl.y,0,0,0,0);
}
}
k++;
}
@ -18804,7 +18855,7 @@ int skill_poisoningweapon(struct map_session_data *sd, unsigned short nameid)
type, chance, 0, skill_get_time(GC_POISONINGWEAPON, sd->menuskill_val));
sprintf(output, msg_txt(sd,721), msg);
clif_colormes(sd,color_table[COLOR_WHITE],output);
clif_colormes(sd->fd,color_table[COLOR_WHITE],output);
/*#if PACKETVER >= 20110208 //! TODO: Check the correct PACKVETVER
clif_msg(sd,msg);

View File

@ -72,6 +72,7 @@ enum e_skill_inf2 {
INF2_NO_BG_DMG = 0x08000, // Skill that ignore bg reduction
INF2_NO_GVG_DMG = 0x10000, // Skill that ignore gvg reduction
INF2_NO_NEARNPC = 0x20000, // disable to cast skill if near with NPC [Cydh]
INF2_HIT_TRAP = 0x40000, // can hit trap-type skill (INF2_TRAP) [Cydh]
};
/// Skill info type 3
@ -172,8 +173,8 @@ struct s_skill_db {
int16 cast_def_rate; ///< Def rate during cast a skill
uint16 skill_type; ///< Skill type
int blewcount[MAX_SKILL_LEVEL]; ///< Blew count
uint32 inf2; ///<
uint32 inf3; ///<
uint32 inf2; ///< Skill flags @see enum e_skill_inf2
uint32 inf3; ///< Skill flags @see enum e_skill_inf3
int maxcount[MAX_SKILL_LEVEL]; ///< Max number skill can be casted in same map
// skill_castnodex_db.txt
@ -1719,10 +1720,10 @@ enum e_skill {
WL_TELEKINESIS_INTENSE,
LG_KINGS_GRACE,
ALL_FULL_THROTTLE,
SR_FLASHCOMBO_ATK_STEP1,
SR_FLASHCOMBO_ATK_STEP2,
SR_FLASHCOMBO_ATK_STEP3,
SR_FLASHCOMBO_ATK_STEP4,
SR_FLASHCOMBO_ATK_STEP1, // SR_DRAGONCOMBO
SR_FLASHCOMBO_ATK_STEP2, // SR_FALLENEMPIRE
SR_FLASHCOMBO_ATK_STEP3, // SR_TIGERCANNON
SR_FLASHCOMBO_ATK_STEP4, // SR_SKYNETBLOW
HLIF_HEAL = 8001,
HLIF_AVOID,

View File

@ -709,7 +709,8 @@ void initChangeTables(void)
set_sc( SR_GENTLETOUCH_ENERGYGAIN , SC_GT_ENERGYGAIN , SI_GENTLETOUCH_ENERGYGAIN , SCB_NONE );
set_sc( SR_GENTLETOUCH_CHANGE , SC_GT_CHANGE , SI_GENTLETOUCH_CHANGE , SCB_WATK|SCB_MDEF|SCB_ASPD );
set_sc( SR_GENTLETOUCH_REVITALIZE , SC_GT_REVITALIZE , SI_GENTLETOUCH_REVITALIZE , SCB_MAXHP|SCB_REGEN );
set_sc( SR_FLASHCOMBO , SC_FLASHCOMBO , SI_FLASHCOMBO , SCB_WATK );
set_sc( SR_FLASHCOMBO , SC_FLASHCOMBO , SI_FLASHCOMBO , SCB_NONE );
add_sc( SR_FLASHCOMBO_ATK_STEP1 , SC_STUN );
/* Wanderer / Minstrel */
set_sc( WA_SWING_DANCE , SC_SWINGDANCE , SI_SWINGDANCE , SCB_SPEED|SCB_ASPD );
@ -1286,13 +1287,16 @@ static inline void status_cpy(struct status_data* a, const struct status_data* b
int status_set_hp(struct block_list *bl, unsigned int hp, int flag)
{
struct status_data *status;
if (hp < 1) return 0;
if (hp < 1)
return 0;
status = status_get_status_data(bl);
if (status == &dummy_status)
return 0;
if (hp > status->max_hp) hp = status->max_hp;
if (hp == status->hp) return 0;
if (hp > status->max_hp)
hp = status->max_hp;
if (hp == status->hp)
return 0;
if (hp > status->hp)
return status_heal(bl, hp - status->hp, 0, 1|flag);
return status_zap(bl, status->hp - hp, 0);
@ -1309,15 +1313,17 @@ int status_set_hp(struct block_list *bl, unsigned int hp, int flag)
int status_set_maxhp(struct block_list *bl, unsigned int maxhp, int flag)
{
struct status_data *status;
if (maxhp < 1) return 0;
if (maxhp < 1)
return 0;
status = status_get_status_data(bl);
if (status == &dummy_status)
return 0;
if (maxhp == status->max_hp) return 0;
if (maxhp > status->max_hp) {
if (maxhp == status->max_hp)
return 0;
if (maxhp > status->max_hp)
status_heal(bl, maxhp - status->max_hp, 0, 1|flag);
} else
else
status_zap(bl, status->max_hp - maxhp, 0);
status->max_hp = maxhp;
@ -1340,8 +1346,10 @@ int status_set_sp(struct block_list *bl, unsigned int sp, int flag)
if (status == &dummy_status)
return 0;
if (sp > status->max_sp) sp = status->max_sp;
if (sp == status->sp) return 0;
if (sp > status->max_sp)
sp = status->max_sp;
if (sp == status->sp)
return 0;
if (sp > status->sp)
return status_heal(bl, 0, sp - status->sp, 1|flag);
return status_zap(bl, 0, status->sp - sp);
@ -1358,15 +1366,17 @@ int status_set_sp(struct block_list *bl, unsigned int sp, int flag)
int status_set_maxsp(struct block_list *bl, unsigned int maxsp, int flag)
{
struct status_data *status;
if (maxsp < 1) return 0;
if (maxsp < 1)
return 0;
status = status_get_status_data(bl);
if (status == &dummy_status)
return 0;
if (maxsp == status->max_sp) return 0;
if (maxsp > status->max_sp) {
if (maxsp == status->max_sp)
return 0;
if (maxsp > status->max_sp)
status_heal(bl, maxsp - status->max_sp, 0, 1|flag);
} else
else
status_zap(bl, status->max_sp - maxsp, 0);
status->max_sp = maxsp;
@ -2986,6 +2996,8 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
+ sizeof(sd->subrace2)
+ sizeof(sd->subsize)
+ sizeof(sd->reseff)
+ sizeof(sd->coma_class)
+ sizeof(sd->coma_race)
+ sizeof(sd->weapon_coma_ele)
+ sizeof(sd->weapon_coma_race)
+ sizeof(sd->weapon_coma_class)
@ -3007,10 +3019,6 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
+ sizeof(sd->ignore_mdef_by_class)
+ sizeof(sd->ignore_def_by_race)
+ sizeof(sd->sp_gain_race)
+ sizeof(sd->sp_gain_race_attack)
+ sizeof(sd->hp_gain_race_attack)
+ sizeof(sd->hp_gain_race_attack_rate)
+ sizeof(sd->sp_gain_race_attack_rate)
);
memset (&sd->right_weapon.overrefine, 0, sizeof(sd->right_weapon) - sizeof(sd->right_weapon.atkmods));
@ -3082,8 +3090,6 @@ int status_calc_pc_(struct map_session_data* sd, enum e_status_calc_opt opt)
+ sizeof(sd->mdef_set_race)
+ sizeof(sd->hp_vanish_race)
+ sizeof(sd->sp_vanish_race)
+ sizeof(sd->hp_gain_attack)
+ sizeof(sd->sp_gain_attack)
);
memset (&sd->bonus, 0, sizeof(sd->bonus));
@ -3958,12 +3964,12 @@ int status_calc_npc_(struct npc_data *nd, enum e_status_calc_opt opt)
status->speed = nd->speed;
}
status->str = nd->stat_point;
status->agi = nd->stat_point;
status->vit = nd->stat_point;
status->int_= nd->stat_point;
status->dex = nd->stat_point;
status->luk = nd->stat_point;
status->str = nd->stat_point + nd->params.str;
status->agi = nd->stat_point + nd->params.agi;
status->vit = nd->stat_point + nd->params.vit;
status->int_= nd->stat_point + nd->params.int_;
status->dex = nd->stat_point + nd->params.dex;
status->luk = nd->stat_point + nd->params.luk;
status_calc_misc(&nd->bl, status, nd->level);
status_cpy(&nd->status, status);
@ -4858,6 +4864,9 @@ void status_calc_bl_(struct block_list* bl, enum scb_flag flag, enum e_status_ca
} else if( bl->type == BL_MER ) {
TBL_MER* md = BL_CAST(BL_MER, bl);
if (!md->master)
return;
if( b_status.rhw.atk != status->rhw.atk || b_status.rhw.atk2 != status->rhw.atk2 )
clif_mercenary_updatestatus(md->master, SP_ATK1);
if( b_status.matk_max != status->matk_max )
@ -4885,6 +4894,9 @@ void status_calc_bl_(struct block_list* bl, enum scb_flag flag, enum e_status_ca
} else if( bl->type == BL_ELEM ) {
TBL_ELEM* ed = BL_CAST(BL_ELEM, bl);
if (!ed->master)
return;
if( b_status.max_hp != status->max_hp )
clif_elemental_updatestatus(ed->master, SP_MAXHP);
if( b_status.max_sp != status->max_sp )
@ -5456,8 +5468,6 @@ static unsigned short status_calc_watk(struct block_list *bl, struct status_chan
watk += sc->data[SC_PYROCLASTIC]->val2;
if(sc->data[SC_ANGRIFFS_MODUS])
watk += watk * sc->data[SC_ANGRIFFS_MODUS]->val2/100;
if( sc->data[SC_FLASHCOMBO] )
watk += sc->data[SC_FLASHCOMBO]->val2;
if(sc->data[SC_ODINS_POWER])
watk += 40 + 30 * sc->data[SC_ODINS_POWER]->val1;
@ -9614,7 +9624,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
break;
case SC__ENERVATION:
val2 = 20 + 10 * val1; // ATK Reduction
if( sd ) pc_delspiritball(sd,sd->spiritball,0);
if (sd) {
pc_delspiritball(sd,sd->spiritball,0);
pc_delspiritcharm(sd,sd->spiritcharm,sd->spiritcharm_type);
}
break;
case SC__GROOMY:
val2 = 20 + 10 * val1; // ASPD

View File

@ -1791,7 +1791,7 @@ enum scb_flag
enum e_status_calc_opt {
SCO_NONE = 0x0,
SCO_FIRST = 0x1, ///< Trigger the calculations that should take place only onspawn/once
SCO_FIRST = 0x1, ///< Trigger the calculations that should take place only onspawn/once, process base status initialization code
SCO_FORCE = 0x2, ///< Only relevant to BL_PC types, ensures call bypasses the queue caused by delayed damage
};

View File

@ -2585,7 +2585,7 @@ static int unit_attack_timer_sub(struct block_list* src, int tid, unsigned int t
ud->attacktarget_lv = battle_weapon_attack(src,target,tick,0);
if(sd && sd->status.pet_id > 0 && sd->pd && battle_config.pet_attack_support)
pet_target_check(sd,target,0);
pet_target_check(sd->pd,target,0);
map_freeblock_unlock();
@ -3046,7 +3046,7 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file,
if( elemental_get_lifetime(ed) <= 0 && !(ed->master && !ed->master->state.active) ) {
clif_clearunit_area(bl,clrtype);
map_delblock(bl);
unit_free(bl,0);
unit_free(bl,CLR_OUTSIGHT);
map_freeblock_unlock();
return 0;
@ -3163,10 +3163,8 @@ int unit_free(struct block_list *bl, clr_type clrtype)
guild_send_memberinfoshort(sd,0);
pc_cleareventtimer(sd);
pc_inventory_rental_clear(sd);
pc_delspiritball(sd,sd->spiritball,1);
for(i = 1; i < 5; i++)
pc_del_talisman(sd, sd->talisman[i], i);
pc_delspiritball(sd, sd->spiritball, 1);
pc_delspiritcharm(sd, sd->spiritcharm, sd->spiritcharm_type);
if( sd->st && sd->st->state != RUN ) {// free attached scripts that are waiting
script_free_state(sd->st);
@ -3263,6 +3261,7 @@ int unit_free(struct block_list *bl, clr_type clrtype)
if( sd )
sd->pd = NULL;
pd->master = NULL;
break;
}
case BL_MOB: {
@ -3341,6 +3340,7 @@ int unit_free(struct block_list *bl, clr_type clrtype)
if( sd )
sd->hd = NULL;
hd->master = NULL;
break;
}
case BL_MER: {
@ -3360,6 +3360,7 @@ int unit_free(struct block_list *bl, clr_type clrtype)
sd->md = NULL;
mercenary_contract_stop(md);
md->master = NULL;
break;
}
case BL_ELEM: {
@ -3379,6 +3380,7 @@ int unit_free(struct block_list *bl, clr_type clrtype)
sd->ed = NULL;
elemental_summon_stop(ed);
ed->master = NULL;
break;
}
}