Merge branch 'master' of github.com:rathena/rathena

This commit is contained in:
exneval 2013-12-14 13:42:26 +07:00
commit bc9eff5b0c
13 changed files with 241 additions and 61 deletions

View File

@ -789,6 +789,7 @@ IG_CardAlbum_Shoes 66
IG_CardAlbum_Shield 67 IG_CardAlbum_Shield 67
IG_CardAlbum_Weapon 68 IG_CardAlbum_Weapon 68
IG_CardAlbum_Garment 69 IG_CardAlbum_Garment 69
IG_Flamel_Card 70
SC_ALL -1 SC_ALL -1
SC_STONE 0 SC_STONE 0

View File

@ -599,7 +599,9 @@
4263,0,0,0,0,0,0,0,"Counteroffensive (1)" 4263,0,0,0,0,0,0,0,"Counteroffensive (1)"
4264,0,0,0,0,0,0,0,"Counteroffensive (2)" 4264,0,0,0,0,0,0,0,"Counteroffensive (2)"
4265,0,0,0,0,0,0,0,"Bookshelf use" 4265,0,0,0,0,0,0,0,"Bookshelf use"
//4303,0,0,0,0,0,0,0,""
//4304,0,0,0,0,0,0,0,""
//4305,0,0,0,0,0,0,0,""
5000,0,0,0,0,0,0,0,"The Crow of the Fate - 7" 5000,0,0,0,0,0,0,0,"The Crow of the Fate - 7"
// Researcher's Quest // Researcher's Quest
@ -1595,6 +1597,15 @@
9260,0,0,0,0,0,0,0,"Survey investigation notes" 9260,0,0,0,0,0,0,0,"Survey investigation notes"
9262,0,0,0,0,0,0,0,"Mystery Robbery Incident 16" 9262,0,0,0,0,0,0,0,"Mystery Robbery Incident 16"
//9327,0,0,0,0,0,0,0,""
//9328,0,0,0,0,0,0,0,""
//9329,0,0,0,0,0,0,0,""
//9330,0,0,0,0,0,0,0,""
//9331,0,0,0,0,0,0,0,""
//9332,0,0,0,0,0,0,0,""
//9333,0,0,0,0,0,0,0,""
//9334,0,0,0,0,0,0,0,""
10000,0,0,0,0,0,0,0,"To the Prontera Royal Court" 10000,0,0,0,0,0,0,0,"To the Prontera Royal Court"
10001,0,0,0,0,0,0,0,"Qualification Test" 10001,0,0,0,0,0,0,0,"Qualification Test"
10002,0,0,0,0,0,0,0,"Qualification Review" 10002,0,0,0,0,0,0,0,"Qualification Review"
@ -2356,6 +2367,63 @@
14140,0,0,0,0,0,0,0,"To Wuhari" 14140,0,0,0,0,0,0,0,"To Wuhari"
14141,0,0,0,0,0,0,0,"Ingredients for research" 14141,0,0,0,0,0,0,0,"Ingredients for research"
//14254,0,0,0,0,0,0,0,""
//14255,0,0,0,0,0,0,0,""
//14256,0,0,0,0,0,0,0,""
//14257,0,0,0,0,0,0,0,""
//14258,0,0,0,0,0,0,0,""
//14259,0,0,0,0,0,0,0,""
//14260,0,0,0,0,0,0,0,""
//14261,0,0,0,0,0,0,0,""
//14262,0,0,0,0,0,0,0,""
//14263,0,0,0,0,0,0,0,""
//14264,0,0,0,0,0,0,0,""
//14265,0,0,0,0,0,0,0,""
//14266,0,0,0,0,0,0,0,""
//14267,0,0,0,0,0,0,0,""
//14268,0,0,0,0,0,0,0,""
//14269,0,0,0,0,0,0,0,""
//14270,0,0,0,0,0,0,0,""
//14271,0,0,0,0,0,0,0,""
//14272,0,0,0,0,0,0,0,""
//14273,0,0,0,0,0,0,0,""
//14275,0,0,0,0,0,0,0,""
//14276,0,0,0,0,0,0,0,""
//14277,0,0,0,0,0,0,0,""
//14278,0,0,0,0,0,0,0,""
//14279,0,0,0,0,0,0,0,""
//14280,0,0,0,0,0,0,0,""
//14281,0,0,0,0,0,0,0,""
//14282,0,0,0,0,0,0,0,""
//14283,0,0,0,0,0,0,0,""
//14284,0,0,0,0,0,0,0,""
//14285,0,0,0,0,0,0,0,""
//14286,0,0,0,0,0,0,0,""
//14287,0,0,0,0,0,0,0,""
//14288,0,0,0,0,0,0,0,""
//14289,0,0,0,0,0,0,0,""
//14290,0,0,0,0,0,0,0,""
//14291,0,0,0,0,0,0,0,""
//15025,0,0,0,0,0,0,0,""
//15026,0,0,0,0,0,0,0,""
//15027,0,0,0,0,0,0,0,""
//15028,0,0,0,0,0,0,0,""
//15029,0,0,0,0,0,0,0,""
//15030,0,0,0,0,0,0,0,""
//15031,0,0,0,0,0,0,0,""
//15032,0,0,0,0,0,0,0,""
//15033,0,0,0,0,0,0,0,""
//15034,0,0,0,0,0,0,0,""
//15035,0,0,0,0,0,0,0,""
//15036,0,0,0,0,0,0,0,""
//15037,0,0,0,0,0,0,0,""
//15038,0,0,0,0,0,0,0,""
//15039,0,0,0,0,0,0,0,""
//15040,0,0,0,0,0,0,0,""
//15041,0,0,0,0,0,0,0,""
//15043,0,0,0,0,0,0,0,""
//15045,0,0,0,0,0,0,0,""
16000,0,0,0,0,0,0,0,"Metz Brayde's Notice" 16000,0,0,0,0,0,0,0,"Metz Brayde's Notice"
16001,0,0,0,0,0,0,0,"First examination" 16001,0,0,0,0,0,0,0,"First examination"
16002,0,0,0,0,0,0,0,"Fetching Items for Arian -1" 16002,0,0,0,0,0,0,0,"Fetching Items for Arian -1"

View File

@ -1975,6 +1975,8 @@
2940,Ninja_Manual,Ninja Manual,5,0,,100,,0,,0,0x00000001,63,2,136,,0,0,0,{ bonus bMaxSP,100; skill "NJ_UTSUSEMI",1; skill "NJ_KOUENKA",1; skill "NJ_SYURIKEN",1; },{},{} 2940,Ninja_Manual,Ninja Manual,5,0,,100,,0,,0,0x00000001,63,2,136,,0,0,0,{ bonus bMaxSP,100; skill "NJ_UTSUSEMI",1; skill "NJ_KOUENKA",1; skill "NJ_SYURIKEN",1; },{},{}
2941,Gunslinger_Manual,Gunslinger Manual,5,0,,100,,0,,0,0x00000001,63,2,136,,0,0,0,{ bonus bMaxSP,100; skill "GS_GLITTERING",1; skill "GS_ADJUSTMENT",1; skill "GS_MADNESSCANCEL",1; skill "GS_INCREASING",1; },{},{} 2941,Gunslinger_Manual,Gunslinger Manual,5,0,,100,,0,,0,0x00000001,63,2,136,,0,0,0,{ bonus bMaxSP,100; skill "GS_GLITTERING",1; skill "GS_ADJUSTMENT",1; skill "GS_MADNESSCANCEL",1; skill "GS_INCREASING",1; },{},{}
2942,Taekwon_Manual,Taekwon Manual,5,0,,100,,0,,0,0x00000001,63,2,136,,0,0,0,{ bonus bMaxSP,100; skill "TK_SEVENWIND",4; skill "TK_JUMPKICK",5; },{},{} 2942,Taekwon_Manual,Taekwon Manual,5,0,,100,,0,,0,0x00000001,63,2,136,,0,0,0,{ bonus bMaxSP,100; skill "TK_SEVENWIND",4; skill "TK_JUMPKICK",5; },{},{}
2957,Enhanced_Ring_of_Flame_Lord,Enhanced Ring of Flame Lord,5,10,,100,,0,,,0x7CCFDF80,63,2,136,,85,,,{ bonus bStr,3; bonus bVit,2; bonus bBaseAtk,20; bonus2 bSubEle,Ele_Fire,10; bonus3 bAutoSpell,"CH_SOULCOLLECT",1,30; bonus3 bAutoSpell,"MO_EXPLOSIONSPIRITS",1,10; bonus3 bAutoSpell,"PA_PRESSURE",2,30; bonus3 bAutoSpell,"MG_FIREBALL",1,150; bonus3 bAutoSpell,"KN_BOWLINGBASH",5,20; },{},{}
2958,Enhanced_Ring_of_Resonance,Enhanced Ring of Resonance,5,10,,100,,2,,,0x7CCFDF80,63,2,136,,85,,,{ bonus bAgi,3; bonus bVit,1; bonus bMdef,2; bonus bMatk,10; bonus4 bAutoSpellWhenHit,"WZ_QUAGMIRE",1,50,0; bonus3 bAutoSpellWhenHit,"AS_SPLASHER",10,20; bonus3 bAutoSpellWhenHit,"AL_HEAL",10,30; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",3,20; bonus3 bAutoSpellWhenHit,"CG_TAROTCARD",5,20; },{},{}
2959,Fidelity_Necklace,Fidelity Necklace,5,20,,300,,0,,1,0xFFFFFFFF,63,2,136,,50,0,0,{ bonus bAgi,2; bonus2 bSubRace,RC_Brute,3; },{},{} 2959,Fidelity_Necklace,Fidelity Necklace,5,20,,300,,0,,1,0xFFFFFFFF,63,2,136,,50,0,0,{ bonus bAgi,2; bonus2 bSubRace,RC_Brute,3; },{},{}
2960,Badge_Of_Manny,Badge Of Manny,5,20,,200,,0,,1,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus bAllStats,1; },{},{} 2960,Badge_Of_Manny,Badge Of Manny,5,20,,200,,0,,1,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus bAllStats,1; },{},{}
2966,RWC_2012_Ring,RWC 2012 Ring,5,20,,200,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1; },{},{} 2966,RWC_2012_Ring,RWC 2012 Ring,5,20,,200,,0,,0,0xFFFFFFFF,63,2,136,,0,0,0,{ bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1; },{},{}
@ -8540,6 +8542,9 @@
18758,Hat_Of_Scrat,Hat Of Scrat,5,20,,200,,3,,1,0xFFFFFFFF,63,2,256,,0,1,896,{},{},{} 18758,Hat_Of_Scrat,Hat Of Scrat,5,20,,200,,3,,1,0xFFFFFFFF,63,2,256,,0,1,896,{},{},{}
18759,Stretched_Nose_M,Wood Goblin's Nose,5,20,,200,,0,,0,0xFFFFFFFF,63,2,512,,50,0,737,{ bonus bUnbreakableHelm,0; },{},{} 18759,Stretched_Nose_M,Wood Goblin's Nose,5,20,,200,,0,,0,0xFFFFFFFF,63,2,512,,50,0,737,{ bonus bUnbreakableHelm,0; },{},{}
// //
18766,Improved_Helm_of_Angel,Improved Helm of Angel,5,10,,1600,,10,,1,0x7CCFDF80,63,2,256,,99,1,,{ bonus bAgi,1; bonus bLuk,1; bonus bMDef,3; if (getrefine>=7) { bonus bAgi,2; bonus bLuk,2; } if(getrefine()>=9) bonus bAspd,1; },{},{}
18767,Improved_Helm_Of_Sun,Improved Hat of the Sun God,5,10,,2400,,4,,1,0x7CCFDF80,63,2,768,,99,1,,{ bonus bStr,3; bonus bInt,2; bonus bAtk,10; bonus bMatk,10; if(getrefine()>=7){bonus bAtk,15;bonus bMatk,15;} if(getrefine()>=9){bonus bAtk,15;bonus bMatk,15;} },{},{}
//
18779,RWC_Champ_Crown_First_Place,RWC Champ Crown First Place,5,20,,500,,12,,,0xFFFFFFFF,63,2,256,,1,,902,{ bonus2 bResEff,Eff_Stun,10000; bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,7; bonus bMdef,5; },{},{} 18779,RWC_Champ_Crown_First_Place,RWC Champ Crown First Place,5,20,,500,,12,,,0xFFFFFFFF,63,2,256,,1,,902,{ bonus2 bResEff,Eff_Stun,10000; bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,7; bonus bMdef,5; },{},{}
18780,RWC_Champ_Crown_Second_Place,RWC Champ Crown Second Place,5,20,,500,,12,,,0xFFFFFFFF,63,2,256,,1,,903,{ bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,7; bonus bMdef,5; },{},{} 18780,RWC_Champ_Crown_Second_Place,RWC Champ Crown Second Place,5,20,,500,,12,,,0xFFFFFFFF,63,2,256,,1,,903,{ bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,7; bonus bMdef,5; },{},{}
18781,RWC_Champ_Crown_Third_Place,RWC Champ Crown Third Place,5,20,,500,,12,,,0xFFFFFFFF,63,2,256,,1,,904,{ bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,3; bonus bMdef,1; },{},{} 18781,RWC_Champ_Crown_Third_Place,RWC Champ Crown Third Place,5,20,,500,,12,,,0xFFFFFFFF,63,2,256,,1,,904,{ bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,3; bonus bMdef,1; },{},{}
@ -8661,10 +8666,11 @@
19707,C_Polar_Bear_Cap,Costume Polar Bear Cap,5,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,966,{ bonus bUnbreakableHelm,0; },{},{} 19707,C_Polar_Bear_Cap,Costume Polar Bear Cap,5,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,966,{ bonus bUnbreakableHelm,0; },{},{}
19730,C_Snake_Hat,C Snake Hat,5,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,986,{},{},{} 19730,C_Snake_Hat,C Snake Hat,5,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,986,{},{},{}
19746,C_Executioner_Hood,Executioner Hood,5,20,,0,,0,,0,0xFFFFFFFF,63,2,2048,,0,0,0,{},{},{} 19746,C_Executioner_Hood,Executioner Hood,5,20,,0,,0,,0,0xFFFFFFFF,63,2,2048,,0,0,0,{},{},{}
19777,C_Shiny_Small_Star,Shiny Small Star,5,20,,10,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,0,{},{},{}
19829,C_Straw_Hat,C Straw Hat,5,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,146,{},{},{} 19829,C_Straw_Hat,C Straw Hat,5,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,146,{},{},{}
19853,C_Filir Wings,C Filir Wings,5,20,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,595,{ bonus2 bExpAddRace,RC_Boss,5; bonus2 bExpAddRace,RC_NonBoss,5; },{},{} 19853,C_Filir Wings,C Filir Wings,5,20,,0,,0,,0,0xFFFFFFFF,63,2,2048,,1,0,595,{ bonus2 bExpAddRace,RC_Boss,5; bonus2 bExpAddRace,RC_NonBoss,5; },{},{}
19856,Costume_Snow_Cone_Hat,Costume Snow Cone Hat,5,10,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,0,{ bonus2 bAddEle,Ele_Fire,5; bonus2 bMagicAddEle,Ele_Fire,5; bonus2 bAddMonsterDropItem,11589,5; },{},{} 19856,Costume_Snow_Cone_Hat,Costume Snow Cone Hat,5,10,,0,,0,,0,0xFFFFFFFF,63,2,1024,,1,0,0,{ bonus2 bAddEle,Ele_Fire,5; bonus2 bMagicAddEle,Ele_Fire,5; bonus2 bAddMonsterDropItem,11589,5; },{},{}
19857,Costume_Crayfish_Hat,Costume Crayfish Hat,5,10,,10,,0,,,0xFFFFFFFF,63,2,1024,,1,,,{},{},{} 19857,Costume_Crayfish_Hat,Costume Crayfish Hat,5,10,,10,,0,,,0xFFFFFFFF,63,2,1024,,1,0,0,{},{},{}
19859,C_Flying_Angel,Flying Angel,5,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,264,{},{},{} 19859,C_Flying_Angel,Flying Angel,5,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,264,{},{},{}
19860,C_School_Criatura_Hat,School Criatura Hat,5,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,0,{},{},{} 19860,C_School_Criatura_Hat,School Criatura Hat,5,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,0,{},{},{}
19861,C_Heart_Hairpin,Heart Hairpin,5,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,126,{},{},{} 19861,C_Heart_Hairpin,Heart Hairpin,5,20,,0,,0,,0,0xFFFFFFFF,63,2,1024,,0,0,126,{},{},{}
@ -8697,6 +8703,7 @@
21005,Metal_Two_Hand_Sword,Metal Two Hand Sword,4,20,,0,95,,1,1,0x00004082,63,2,34,3,1,1,3,{ bonus bBaseAtk,(getrefine()*6); bonus bMatk,(getrefine()*2); set .@i,((BaseLevel/10)>12)?12:(BaseLevel/10); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{} 21005,Metal_Two_Hand_Sword,Metal Two Hand Sword,4,20,,0,95,,1,1,0x00004082,63,2,34,3,1,1,3,{ bonus bBaseAtk,(getrefine()*6); bonus bMatk,(getrefine()*2); set .@i,((BaseLevel/10)>12)?12:(BaseLevel/10); if(.@i>2) bonus bBaseAtk,((.@i-2)*5); },{},{}
21011,Gigantic_Blade,Gigantic Blade,3,10,,5000,300,,,,0xFFFFFFFF,56,2,2,4,130,1,3,{ bonus bUnbreakableWeapon,1; bonus bAspdRate,-5; if(readparam(bStr)<=110){ bonus bAtk,-250; } },{},{} 21011,Gigantic_Blade,Gigantic Blade,3,10,,5000,300,,,,0xFFFFFFFF,56,2,2,4,130,1,3,{ bonus bUnbreakableWeapon,1; bonus bAspdRate,-5; if(readparam(bStr)<=110){ bonus bAtk,-250; } },{},{}
// New Items // New Items
22014,Enhanced_Variant_Shoes,Enhanced Variant Shoes,3,10,,500,,13,,1,0x7CCFDF80,63,2,64,,85,1,,{ bonus bMaxHPrate,12; bonus bMaxSPrate,12; bonus bDef,getrefine(); bonus bMdef,getrefine(); },{},{}
22043,AGI_Complement,AGI Complement,5,10,,350,,25,,,0x00000400,56,2,64,,100,1,,{ bonus bAspdRate,5+(getrefine()/4); },{},{} 22043,AGI_Complement,AGI Complement,5,10,,350,,25,,,0x00000400,56,2,64,,100,1,,{ bonus bAspdRate,5+(getrefine()/4); },{},{}
22044,Reinforced_Parts_Booster,Reinforced Parts - Booster,5,10,,1000,,23,,,0x00000400,56,2,64,,100,1,,{ bonus2 bSkillUseSP,"NC_HOVERING",15; if(getrefine()>=7){bonus2 bSkillUseSP,"NC_HOVERING",-20;} },{},{} 22044,Reinforced_Parts_Booster,Reinforced Parts - Booster,5,10,,1000,,23,,,0x00000400,56,2,64,,100,1,,{ bonus2 bSkillUseSP,"NC_HOVERING",15; if(getrefine()>=7){bonus2 bSkillUseSP,"NC_HOVERING",-20;} },{},{}
22045,Summer_Sandals,Summer Sandals,5,10,,200,,5,,0,0xFFFFFFFF,63,2,64,,0,1,0,{ bonus bFlee,5; bonus3 bAutoSpellWhenHit,"AL_INCAGI",10,50; },{},{} 22045,Summer_Sandals,Summer Sandals,5,10,,200,,5,,0,0xFFFFFFFF,63,2,64,,0,1,0,{ bonus bFlee,5; bonus3 bAutoSpellWhenHit,"AL_INCAGI",10,50; },{},{}
@ -8719,6 +8726,8 @@
22648,Angel_Ring_Package,Angel Ring Package,3,10,,10,,,,,,,,,,,,,{},{},{} 22648,Angel_Ring_Package,Angel Ring Package,3,10,,10,,,,,,,,,,,,,{},{},{}
22649,Devil_Ring_Package,Devil Ring Package,3,10,,10,,,,,,,,,,,,,{},{},{} 22649,Devil_Ring_Package,Devil Ring Package,3,10,,10,,,,,,,,,,,,,{},{},{}
22652,Briliant_Hat_Box,Brilliant Hat Box,2,10,,200,,,,,0xFFFFFFFF,63,2,,,,,,{ /* TODO */ },{},{} 22652,Briliant_Hat_Box,Brilliant Hat Box,2,10,,200,,,,,0xFFFFFFFF,63,2,,,,,,{ /* TODO */ },{},{}
22653,Wet_Card_Album,Wet Card Album,2,10000,,50,,,,,0xFFFFFFFF,63,2,,,,,,{ /* TODO */ },{},{}
22654,Golden_Seal_Card,Golden Seal Card,3,20,,50,,,,,,,,,,,,,{},{},{}
22675,Mysterious_Scroll,Mysterious Scroll,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INTFOOD,3600000,30; },{},{} 22675,Mysterious_Scroll,Mysterious Scroll,2,20,,10,,,,,0xFFFFFFFF,63,2,,,,,,{ sc_start SC_INTFOOD,3600000,30; },{},{}
22676,Hangul_Day_Event_Box,Hangul Day Event Box,2,20,,0,,,,,0xFFFFFFFF,63,2,,,0,,,{ getitem 22675,10; getitem 607,9; },{},{} 22676,Hangul_Day_Event_Box,Hangul Day Event Box,2,20,,0,,,,,0xFFFFFFFF,63,2,,,0,,,{ getitem 22675,10; getitem 607,9; },{},{}

View File

@ -2276,6 +2276,7 @@
//3154,RECON_ROBOT //3154,RECON_ROBOT
//3155,REPAIR_ROBOT //3155,REPAIR_ROBOT
//3156,EXPLORATION_ROVER //3156,EXPLORATION_ROVER
//3166,M_E_DEVILING
// //
//3201,JT_LUCKYCASE //3201,JT_LUCKYCASE
//3202,JT_ORGANIC_JAKK //3202,JT_ORGANIC_JAKK

View File

@ -2006,6 +2006,8 @@ REPLACE INTO `item_db_re` VALUES (2936,'Recovery_Ring','Recovery Ring',5,20,NULL
REPLACE INTO `item_db_re` VALUES (2940,'Ninja_Manual','Ninja Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,63,2,136,NULL,'0',0,0,'bonus bMaxSP,100; skill "NJ_UTSUSEMI",1; skill "NJ_KOUENKA",1; skill "NJ_SYURIKEN",1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2940,'Ninja_Manual','Ninja Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,63,2,136,NULL,'0',0,0,'bonus bMaxSP,100; skill "NJ_UTSUSEMI",1; skill "NJ_KOUENKA",1; skill "NJ_SYURIKEN",1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2941,'Gunslinger_Manual','Gunslinger Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,63,2,136,NULL,'0',0,0,'bonus bMaxSP,100; skill "GS_GLITTERING",1; skill "GS_ADJUSTMENT",1; skill "GS_MADNESSCANCEL",1; skill "GS_INCREASING",1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2941,'Gunslinger_Manual','Gunslinger Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,63,2,136,NULL,'0',0,0,'bonus bMaxSP,100; skill "GS_GLITTERING",1; skill "GS_ADJUSTMENT",1; skill "GS_MADNESSCANCEL",1; skill "GS_INCREASING",1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2942,'Taekwon_Manual','Taekwon Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,63,2,136,NULL,'0',0,0,'bonus bMaxSP,100; skill "TK_SEVENWIND",4; skill "TK_JUMPKICK",5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2942,'Taekwon_Manual','Taekwon Manual',5,0,NULL,100,NULL,0,NULL,0,0x00000001,63,2,136,NULL,'0',0,0,'bonus bMaxSP,100; skill "TK_SEVENWIND",4; skill "TK_JUMPKICK",5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2957,'Enhanced_Ring_of_Flame_Lord','Enhanced Ring of Flame Lord',5,10,NULL,100,NULL,0,NULL,NULL,0x7CCFDF80,63,2,136,NULL,'85',NULL,NULL,'bonus bStr,3; bonus bVit,2; bonus bBaseAtk,20; bonus2 bSubEle,Ele_Fire,10; bonus3 bAutoSpell,"CH_SOULCOLLECT",1,30; bonus3 bAutoSpell,"MO_EXPLOSIONSPIRITS",1,10; bonus3 bAutoSpell,"PA_PRESSURE",2,30; bonus3 bAutoSpell,"MG_FIREBALL",1,150; bonus3 bAutoSpell,"KN_BOWLINGBASH",5,20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2958,'Enhanced_Ring_of_Resonance','Enhanced Ring of Resonance',5,10,NULL,100,NULL,2,NULL,NULL,0x7CCFDF80,63,2,136,NULL,'85',NULL,NULL,'bonus bAgi,3; bonus bVit,1; bonus bMdef,2; bonus bMatk,10; bonus4 bAutoSpellWhenHit,"WZ_QUAGMIRE",1,50,0; bonus3 bAutoSpellWhenHit,"AS_SPLASHER",10,20; bonus3 bAutoSpellWhenHit,"AL_HEAL",10,30; bonus3 bAutoSpellWhenHit,"HP_ASSUMPTIO",3,20; bonus3 bAutoSpellWhenHit,"CG_TAROTCARD",5,20;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2959,'Fidelity_Necklace','Fidelity Necklace',5,20,NULL,300,NULL,0,NULL,1,0xFFFFFFFF,63,2,136,NULL,'50',0,0,'bonus bAgi,2; bonus2 bSubRace,RC_Brute,3;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2959,'Fidelity_Necklace','Fidelity Necklace',5,20,NULL,300,NULL,0,NULL,1,0xFFFFFFFF,63,2,136,NULL,'50',0,0,'bonus bAgi,2; bonus2 bSubRace,RC_Brute,3;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2960,'Badge_Of_Manny','Badge Of Manny',5,20,NULL,200,NULL,0,NULL,1,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus bAllStats,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2960,'Badge_Of_Manny','Badge Of Manny',5,20,NULL,200,NULL,0,NULL,1,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus bAllStats,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (2966,'RWC_2012_Ring','RWC 2012 Ring',5,20,NULL,200,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (2966,'RWC_2012_Ring','RWC 2012 Ring',5,20,NULL,200,NULL,0,NULL,0,0xFFFFFFFF,63,2,136,NULL,'0',0,0,'bonus2 bAddRace,RC_NonBoss,1; bonus2 bAddRace,RC_Boss,1;',NULL,NULL);
@ -8571,6 +8573,9 @@ REPLACE INTO `item_db_re` VALUES (18756,'Black_Shiba_Inu_Hat','Black Shiba Inu H
REPLACE INTO `item_db_re` VALUES (18758,'Hat_Of_Scrat','Hat Of Scrat',5,20,NULL,200,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,896,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (18758,'Hat_Of_Scrat','Hat Of Scrat',5,20,NULL,200,NULL,3,NULL,1,0xFFFFFFFF,63,2,256,NULL,'0',1,896,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18759,'Stretched_Nose_M','Wood Goblin\'s Nose',5,20,NULL,200,NULL,0,NULL,0,0xFFFFFFFF,63,2,512,NULL,'50',0,737,'bonus bUnbreakableHelm,0;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (18759,'Stretched_Nose_M','Wood Goblin\'s Nose',5,20,NULL,200,NULL,0,NULL,0,0xFFFFFFFF,63,2,512,NULL,'50',0,737,'bonus bUnbreakableHelm,0;',NULL,NULL);
# #
REPLACE INTO `item_db_re` VALUES (18766,'Improved_Helm_of_Angel','Improved Helm of Angel',5,10,NULL,1600,NULL,10,NULL,1,0x7CCFDF80,63,2,256,NULL,'99',1,NULL,'bonus bAgi,1; bonus bLuk,1; bonus bMDef,3; if (getrefine>=7) { bonus bAgi,2; bonus bLuk,2; } if(getrefine()>=9) bonus bAspd,1;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18767,'Improved_Helm_Of_Sun','Improved Hat of the Sun God',5,10,NULL,2400,NULL,4,NULL,1,0x7CCFDF80,63,2,768,NULL,'99',1,NULL,'bonus bStr,3; bonus bInt,2; bonus bAtk,10; bonus bMatk,10; if(getrefine()>=7){bonus bAtk,15;bonus bMatk,15;} if(getrefine()>=9){bonus bAtk,15;bonus bMatk,15;}',NULL,NULL);
#
REPLACE INTO `item_db_re` VALUES (18779,'RWC_Champ_Crown_First_Place','RWC Champ Crown First Place',5,20,NULL,500,NULL,12,NULL,NULL,0xFFFFFFFF,63,2,256,NULL,'1',NULL,902,'bonus2 bResEff,Eff_Stun,10000; bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,7; bonus bMdef,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (18779,'RWC_Champ_Crown_First_Place','RWC Champ Crown First Place',5,20,NULL,500,NULL,12,NULL,NULL,0xFFFFFFFF,63,2,256,NULL,'1',NULL,902,'bonus2 bResEff,Eff_Stun,10000; bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,7; bonus bMdef,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18780,'RWC_Champ_Crown_Second_Place','RWC Champ Crown Second Place',5,20,NULL,500,NULL,12,NULL,NULL,0xFFFFFFFF,63,2,256,NULL,'1',NULL,903,'bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,7; bonus bMdef,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (18780,'RWC_Champ_Crown_Second_Place','RWC Champ Crown Second Place',5,20,NULL,500,NULL,12,NULL,NULL,0xFFFFFFFF,63,2,256,NULL,'1',NULL,903,'bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,7; bonus bMdef,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (18781,'RWC_Champ_Crown_Third_Place','RWC Champ Crown Third Place',5,20,NULL,500,NULL,12,NULL,NULL,0xFFFFFFFF,63,2,256,NULL,'1',NULL,904,'bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,3; bonus bMdef,1;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (18781,'RWC_Champ_Crown_Third_Place','RWC Champ Crown Third Place',5,20,NULL,500,NULL,12,NULL,NULL,0xFFFFFFFF,63,2,256,NULL,'1',NULL,904,'bonus2 bResEff,Eff_Curse,10000; bonus bUnbreakableHelm,0; bonus bAllStats,3; bonus bMdef,1;',NULL,NULL);
@ -8692,6 +8697,7 @@ REPLACE INTO `item_db_re` VALUES (19656,'C_Wandering_Minstrel_Hat','Wandering Mi
REPLACE INTO `item_db_re` VALUES (19707,'C_Polar_Bear_Cap','Costume Polar Bear Cap',5,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'0',0,966,'bonus bUnbreakableHelm,0;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (19707,'C_Polar_Bear_Cap','Costume Polar Bear Cap',5,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'0',0,966,'bonus bUnbreakableHelm,0;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19730,'C_Snake_Hat','C Snake Hat',5,20,NULL,10,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'0',0,986,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (19730,'C_Snake_Hat','C Snake Hat',5,20,NULL,10,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'0',0,986,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19746,'C_Executioner_Hood','Executioner Hood',5,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'0',0,0,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (19746,'C_Executioner_Hood','Executioner Hood',5,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'0',0,0,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19777,'Shiny_Small_Star','Shiny Small Star',5,20,NULL,10,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,0,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19829,'C_Straw_Hat','C Straw Hat',5,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'0',0,146,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (19829,'C_Straw_Hat','C Straw Hat',5,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'0',0,146,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19853,'C_Filir Wings','C Filir Wings',5,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,595,'bonus2 bExpAddRace,RC_Boss,5; bonus2 bExpAddRace,RC_NonBoss,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (19853,'C_Filir Wings','C Filir Wings',5,20,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,2048,NULL,'1',0,595,'bonus2 bExpAddRace,RC_Boss,5; bonus2 bExpAddRace,RC_NonBoss,5;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (19856,'Costume_Snow_Cone_Hat','Costume Snow Cone Hat',5,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,0,'bonus2 bAddEle,Ele_Fire,5; bonus2 bMagicAddEle,Ele_Fire,5; bonus2 bAddMonsterDropItem,11589,5;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (19856,'Costume_Snow_Cone_Hat','Costume Snow Cone Hat',5,10,NULL,0,NULL,0,NULL,0,0xFFFFFFFF,63,2,1024,NULL,'1',0,0,'bonus2 bAddEle,Ele_Fire,5; bonus2 bMagicAddEle,Ele_Fire,5; bonus2 bAddMonsterDropItem,11589,5;',NULL,NULL);
@ -8728,6 +8734,7 @@ REPLACE INTO `item_db_re` VALUES (21004,'Alca_Bringer_','Alca Bringer',4,20,NULL
REPLACE INTO `item_db_re` VALUES (21005,'Metal_Two_Hand_Sword','Metal Two Hand Sword',4,20,NULL,0,'95',NULL,1,1,0x00004082,63,2,34,3,'1',1,3,'bonus bBaseAtk,(getrefine()*6); bonus bMatk,(getrefine()*2); set .@i,((BaseLevel/10)>12)?12:(BaseLevel/10); if(.@i>2) bonus bBaseAtk,((.@i-2)*5);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (21005,'Metal_Two_Hand_Sword','Metal Two Hand Sword',4,20,NULL,0,'95',NULL,1,1,0x00004082,63,2,34,3,'1',1,3,'bonus bBaseAtk,(getrefine()*6); bonus bMatk,(getrefine()*2); set .@i,((BaseLevel/10)>12)?12:(BaseLevel/10); if(.@i>2) bonus bBaseAtk,((.@i-2)*5);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (21011,'Gigantic_Blade','Gigantic Blade',3,10,NULL,5000,'300',NULL,NULL,NULL,0xFFFFFFFF,56,2,2,4,'130',1,3,'bonus bUnbreakableWeapon,1; bonus bAspdRate,-5; if(readparam(bStr)<=110){ bonus bAtk,-250; }',NULL,NULL); REPLACE INTO `item_db_re` VALUES (21011,'Gigantic_Blade','Gigantic Blade',3,10,NULL,5000,'300',NULL,NULL,NULL,0xFFFFFFFF,56,2,2,4,'130',1,3,'bonus bUnbreakableWeapon,1; bonus bAspdRate,-5; if(readparam(bStr)<=110){ bonus bAtk,-250; }',NULL,NULL);
# New Items # New Items
REPLACE INTO `item_db_re` VALUES (22014,'Enhanced_Variant_Shoes','Enhanced Variant Shoes',3,10,NULL,500,NULL,13,NULL,1,0x7CCFDF80,63,2,64,NULL,'85',1,NULL,'bonus bMaxHPrate,12; bonus bMaxSPrate,12; bonus bDef,getrefine(); bonus bMdef,getrefine();',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22043,'AGI_Complement','AGI Complement',5,10,NULL,350,NULL,25,NULL,NULL,0x00000400,56,2,64,NULL,'100',1,NULL,'bonus bAspdRate,5+(getrefine()/4);',NULL,NULL); REPLACE INTO `item_db_re` VALUES (22043,'AGI_Complement','AGI Complement',5,10,NULL,350,NULL,25,NULL,NULL,0x00000400,56,2,64,NULL,'100',1,NULL,'bonus bAspdRate,5+(getrefine()/4);',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22044,'Reinforced_Parts_Booster','Reinforced Parts - Booster',5,10,NULL,1000,NULL,23,NULL,NULL,0x00000400,56,2,64,NULL,'100',1,NULL,'bonus2 bSkillUseSP,"NC_HOVERING",15; if(getrefine()>=7){bonus2 bSkillUseSP,"NC_HOVERING",-20;}',NULL,NULL); REPLACE INTO `item_db_re` VALUES (22044,'Reinforced_Parts_Booster','Reinforced Parts - Booster',5,10,NULL,1000,NULL,23,NULL,NULL,0x00000400,56,2,64,NULL,'100',1,NULL,'bonus2 bSkillUseSP,"NC_HOVERING",15; if(getrefine()>=7){bonus2 bSkillUseSP,"NC_HOVERING",-20;}',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22045,'Summer_Sandals','Summer Sandals',5,10,NULL,200,NULL,5,NULL,0,0xFFFFFFFF,63,2,64,NULL,'0',1,0,'bonus bFlee,5; bonus3 bAutoSpellWhenHit,"AL_INCAGI",10,50;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (22045,'Summer_Sandals','Summer Sandals',5,10,NULL,200,NULL,5,NULL,0,0xFFFFFFFF,63,2,64,NULL,'0',1,0,'bonus bFlee,5; bonus3 bAutoSpellWhenHit,"AL_INCAGI",10,50;',NULL,NULL);
@ -8750,6 +8757,8 @@ REPLACE INTO `item_db_re` VALUES (22621,'Barbecued_Squid','Barbecued Squid',3,10
REPLACE INTO `item_db_re` VALUES (22648,'Angel_Ring_Package','Angel Ring Package',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (22648,'Angel_Ring_Package','Angel Ring Package',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22649,'Devil_Ring_Package','Devil Ring Package',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL); REPLACE INTO `item_db_re` VALUES (22649,'Devil_Ring_Package','Devil Ring Package',3,10,NULL,10,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,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); 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);
REPLACE INTO `item_db_re` VALUES (22653,'Wet_Card_Album','Wet Card Album',2,10000,NULL,50,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'/* TODO */',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22654,'Golden_Seal_Card','Golden Seal Card',3,20,NULL,50,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22675,'Mysterious_Scroll','Mysterious Scroll',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_INTFOOD,3600000,30;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (22675,'Mysterious_Scroll','Mysterious Scroll',2,20,NULL,10,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,NULL,NULL,NULL,'sc_start SC_INTFOOD,3600000,30;',NULL,NULL);
REPLACE INTO `item_db_re` VALUES (22676,'Hangul_Day_Event_Box','Hangul Day Event Box',2,20,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,'0',NULL,NULL,'getitem 22675,10; getitem 607,9;',NULL,NULL); REPLACE INTO `item_db_re` VALUES (22676,'Hangul_Day_Event_Box','Hangul Day Event Box',2,20,NULL,0,NULL,NULL,NULL,NULL,0xFFFFFFFF,63,2,NULL,NULL,'0',NULL,NULL,'getitem 22675,10; getitem 607,9;',NULL,NULL);

View File

@ -37,7 +37,7 @@ Sql* sql_handle = NULL;
int char_server_port = 3306; int char_server_port = 3306;
char char_server_ip[32] = "127.0.0.1"; char char_server_ip[32] = "127.0.0.1";
char char_server_id[32] = "ragnarok"; char char_server_id[32] = "ragnarok";
char char_server_pw[32] = "ragnarok"; char char_server_pw[32] = ""; // Allow user to send empty password (bugreport:7787)
char char_server_db[32] = "ragnarok"; char char_server_db[32] = "ragnarok";
char default_codepage[32] = ""; //Feature by irmin. char default_codepage[32] = ""; //Feature by irmin.

View File

@ -407,6 +407,8 @@ struct mmo_charstatus {
// Char server addon system // Char server addon system
unsigned int character_moves; unsigned int character_moves;
bool cashshop_sent; // Whether the player has received the CashShop list
}; };
typedef enum mail_status { typedef enum mail_status {

View File

@ -23,7 +23,7 @@ typedef struct AccountDB_SQL
Sql* accounts; // SQL accounts storage Sql* accounts; // SQL accounts storage
// global sql settings // global sql settings
char global_db_hostname[32]; char global_db_hostname[64]; // Doubled for long hostnames (bugreport:8003)
uint16 global_db_port; uint16 global_db_port;
char global_db_username[32]; char global_db_username[32];
char global_db_password[32]; char global_db_password[32];

View File

@ -2486,10 +2486,12 @@ void clif_equiplist(struct map_session_data *sd)
void clif_storagelist(struct map_session_data* sd, struct item* items, int items_length) void clif_storagelist(struct map_session_data* sd, struct item* items, int items_length)
{ {
static const int client_buf = 0x5000; // Max buffer to send
struct item_data *id; struct item_data *id;
int i,n,ne; int i,n,ne,nn;
unsigned char *buf; unsigned char *buf;
unsigned char *bufe; unsigned char *bufe;
unsigned char *bufn;
#if PACKETVER < 5 #if PACKETVER < 5
const int s = 10; //Entry size.normal item const int s = 10; //Entry size.normal item
const int sidx=4; //start itemlist idx const int sidx=4; //start itemlist idx
@ -2534,33 +2536,39 @@ void clif_storagelist(struct map_session_data* sd, struct item* items, int items
n++; n++;
} }
} }
if( n ) for (i = 0; i < n;) // Loop through non-equipable items
{ {
nn = n - i < (client_buf - 4)/s ? n - i : (client_buf - 4)/s; // Split up non-equipable items
bufn = buf + i*s; // Update buffer to new index range
i += nn;
#if PACKETVER < 5 #if PACKETVER < 5
WBUFW(buf,0)=0xa5; WBUFW(bufn,0)=0xa5;
#elif PACKETVER < 20080102 #elif PACKETVER < 20080102
WBUFW(buf,0)=0x1f0; WBUFW(bufn,0)=0x1f0;
#elif PACKETVER < 20120925 #elif PACKETVER < 20120925
WBUFW(buf,0)=0x2ea; WBUFW(bufn,0)=0x2ea;
#else #else
WBUFW(buf,0)=0x995; WBUFW(bufn,0)=0x995;
memset((char*)WBUFP(buf,4),0,24); //storename memset((char*)WBUFP(buf,4),0,24); //storename
#endif #endif
WBUFW(buf,2)=n*s+sidx; WBUFW(bufn,2)=4+nn*s;
clif_send(buf, WBUFW(buf,2), &sd->bl, SELF); clif_send(bufn, WBUFW(bufn,2), &sd->bl, SELF);
} }
if( ne ) for (i = 0; i < ne;) // Loop through equipable items
{ {
nn = ne - i < (client_buf - 4)/se ? ne - i : (client_buf - 4)/se; // Split up equipable items
bufn = bufe + i*se; // Update buffer to new index range
i += nn;
#if PACKETVER < 20071002 #if PACKETVER < 20071002
WBUFW(bufe,0)=0xa6; WBUFW(bufn,0)=0xa6;
#elif PACKETVER < 20120925 #elif PACKETVER < 20120925
WBUFW(bufe,0)=0x2d1; WBUFW(bufn,0)=0x2d1;
#else #else
WBUFW(bufe,0)=0x996; WBUFW(bufn,0)=0x996;
memset((char*)WBUFP(bufe,4),0,24); //storename memset((char*)WBUFP(bufn,4),0,24); //storename
#endif #endif
WBUFW(bufe,2)=ne*se+sidxe; WBUFW(bufn,2)=4+nn*se;
clif_send(bufe, WBUFW(bufe,2), &sd->bl, SELF); clif_send(bufn, WBUFW(bufn,2), &sd->bl, SELF);
} }
if( buf ) aFree(buf); if( buf ) aFree(buf);
@ -14802,7 +14810,7 @@ void clif_cashshop_list( int fd ){
int tab; int tab;
for( tab = CASHSHOP_TAB_NEW; tab < CASHSHOP_TAB_SEARCH; tab++ ){ for( tab = CASHSHOP_TAB_NEW; tab < CASHSHOP_TAB_SEARCH; tab++ ){
int length = 8 + cash_shop_items->count * 6; int length = 8 + cash_shop_items[tab].count * 6;
int i, offset; int i, offset;
WFIFOHEAD( fd, length ); WFIFOHEAD( fd, length );
@ -14821,7 +14829,10 @@ void clif_cashshop_list( int fd ){
} }
void clif_parse_cashshop_list_request( int fd, struct map_session_data* sd ){ void clif_parse_cashshop_list_request( int fd, struct map_session_data* sd ){
clif_cashshop_list( fd ); if( !sd->status.cashshop_sent ) {
clif_cashshop_list( fd );
sd->status.cashshop_sent = true;
}
} }
/// List of items offered in a cash shop (ZC_PC_CASH_POINT_ITEMLIST). /// List of items offered in a cash shop (ZC_PC_CASH_POINT_ITEMLIST).
/// 0287 <packet len>.W <cash point>.L { <sell price>.L <discount price>.L <item type>.B <name id>.W }* /// 0287 <packet len>.W <cash point>.L { <sell price>.L <discount price>.L <item type>.B <name id>.W }*

View File

@ -2598,7 +2598,7 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type)
else if( sd->avail_quests ) else if( sd->avail_quests )
quest_update_objective(sd, md->class_); quest_update_objective(sd, md->class_);
if( sd->md && src && src->type != BL_HOM && mob_db(md->class_)->lv > sd->status.base_level/2 ) if( sd->md && src && src->type == BL_MER && mob_db(md->class_)->lv > sd->status.base_level/2 )
mercenary_kills(sd->md); mercenary_kills(sd->md);
} }

View File

@ -1141,6 +1141,9 @@ bool pc_authok(struct map_session_data *sd, int login_id2, time_t expiration_tim
} }
#endif #endif
// Player has not yet received the CashShop list
sd->status.cashshop_sent = false;
// Request all registries (auth is considered completed whence they arrive) // Request all registries (auth is considered completed whence they arrive)
intif_request_registry(sd,7); intif_request_registry(sd,7);
return true; return true;
@ -7932,9 +7935,6 @@ int pc_setcart(struct map_session_data *sd,int type) {
if( pc_checkskill(sd,MC_PUSHCART) <= 0 && type != 0 ) if( pc_checkskill(sd,MC_PUSHCART) <= 0 && type != 0 )
return 1;// Push cart is required return 1;// Push cart is required
if( type == 0 && pc_iscarton(sd) )
status_change_end(&sd->bl,SC_GN_CARTBOOST,INVALID_TIMER);
#ifdef NEW_CARTS #ifdef NEW_CARTS
switch( type ) { switch( type ) {

View File

@ -6103,7 +6103,7 @@ BUILDIN_FUNC(countitem)
} }
data = script_getdata(st,2); data = script_getdata(st,2);
get_val(st, data); // convert into value in case of a variable get_val(st, data); // Convert into value in case of a variable
if( data_isstring(data) ) // item name if( data_isstring(data) ) // item name
id = itemdb_searchname(conv_str(st, data)); id = itemdb_searchname(conv_str(st, data));
@ -6220,7 +6220,7 @@ BUILDIN_FUNC(checkweight)
for(i=2; i<nbargs; i=i+2) { for(i=2; i<nbargs; i=i+2) {
data = script_getdata(st,i); data = script_getdata(st,i);
get_val(st, data); // convert into value in case of a variable get_val(st, data); // Convert into value in case of a variable
if( data_isstring(data) ) // item name if( data_isstring(data) ) // item name
id = itemdb_searchname(conv_str(st, data)); id = itemdb_searchname(conv_str(st, data));
else // item id else // item id
@ -7878,6 +7878,7 @@ BUILDIN_FUNC(bonus)
int val4 = 0; int val4 = 0;
int val5 = 0; int val5 = 0;
TBL_PC* sd; TBL_PC* sd;
struct script_data *data;
sd = script_rid2sd(st); sd = script_rid2sd(st);
if( sd == NULL ) if( sd == NULL )
@ -7902,7 +7903,9 @@ BUILDIN_FUNC(bonus)
case SP_FIXCASTRATE: case SP_FIXCASTRATE:
case SP_SKILL_USE_SP: case SP_SKILL_USE_SP:
// these bonuses support skill names // these bonuses support skill names
val1 = ( script_isstring(st,3) ? skill_name2id(script_getstr(st,3)) : script_getnum(st,3) ); data = script_getdata(st, 3);
get_val(st, data); // Convert into value in case of a variable
val1 = ( data_isstring(data) ? skill_name2id(script_getstr(st,3)) : script_getnum(st,3) );
break; break;
default: default:
val1 = script_getnum(st,3); val1 = script_getnum(st,3);
@ -7923,7 +7926,9 @@ BUILDIN_FUNC(bonus)
pc_bonus3(sd, type, val1, val2, val3); pc_bonus3(sd, type, val1, val2, val3);
break; break;
case 4: case 4:
if( type == SP_AUTOSPELL_ONSKILL && script_isstring(st,4) ) data = script_getdata(st, 4);
get_val(st, data); // Convert into value in case of a variable
if( type == SP_AUTOSPELL_ONSKILL && data_isstring(data) )
val2 = skill_name2id(script_getstr(st,4)); // 2nd value can be skill name val2 = skill_name2id(script_getstr(st,4)); // 2nd value can be skill name
else else
val2 = script_getnum(st,4); val2 = script_getnum(st,4);
@ -7933,7 +7938,9 @@ BUILDIN_FUNC(bonus)
pc_bonus4(sd, type, val1, val2, val3, val4); pc_bonus4(sd, type, val1, val2, val3, val4);
break; break;
case 5: case 5:
if( type == SP_AUTOSPELL_ONSKILL && script_isstring(st,4) ) data = script_getdata(st, 4);
get_val(st, data); // Convert into value in case of a variable
if( type == SP_AUTOSPELL_ONSKILL && data_isstring(data) )
val2 = skill_name2id(script_getstr(st,4)); // 2nd value can be skill name val2 = skill_name2id(script_getstr(st,4)); // 2nd value can be skill name
else else
val2 = script_getnum(st,4); val2 = script_getnum(st,4);
@ -8031,6 +8038,7 @@ BUILDIN_FUNC(autobonus3)
short rate,atk_type; short rate,atk_type;
TBL_PC* sd; TBL_PC* sd;
const char *bonus_script, *other_script = NULL; const char *bonus_script, *other_script = NULL;
struct script_data *data;
sd = script_rid2sd(st); sd = script_rid2sd(st);
if( sd == NULL ) if( sd == NULL )
@ -8041,7 +8049,9 @@ BUILDIN_FUNC(autobonus3)
rate = script_getnum(st,3); rate = script_getnum(st,3);
dur = script_getnum(st,4); dur = script_getnum(st,4);
atk_type = ( script_isstring(st,5) ? skill_name2id(script_getstr(st,5)) : script_getnum(st,5) ); data = script_getdata(st, 5);
get_val(st, data); // Convert into value in case of a variable
atk_type = ( data_isstring(data) ? skill_name2id(script_getstr(st,5)) : script_getnum(st,5) );
bonus_script = script_getstr(st,2); bonus_script = script_getstr(st,2);
if( !rate || !dur || !atk_type || !bonus_script ) if( !rate || !dur || !atk_type || !bonus_script )
return 0; return 0;
@ -8076,12 +8086,15 @@ BUILDIN_FUNC(skill)
int level; int level;
int flag = 1; int flag = 1;
TBL_PC* sd; TBL_PC* sd;
struct script_data *data;
sd = script_rid2sd(st); sd = script_rid2sd(st);
if( sd == NULL ) if( sd == NULL )
return 0;// no player attached, report source return 0;// no player attached, report source
id = ( script_isstring(st,2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) ); data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
id = ( data_isstring(data) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
level = script_getnum(st,3); level = script_getnum(st,3);
if( script_hasdata(st,4) ) if( script_hasdata(st,4) )
flag = script_getnum(st,4); flag = script_getnum(st,4);
@ -8105,12 +8118,15 @@ BUILDIN_FUNC(addtoskill)
int level; int level;
int flag = 2; int flag = 2;
TBL_PC* sd; TBL_PC* sd;
struct script_data *data;
sd = script_rid2sd(st); sd = script_rid2sd(st);
if( sd == NULL ) if( sd == NULL )
return 0;// no player attached, report source return 0;// no player attached, report source
id = ( script_isstring(st,2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) ); data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
id = ( data_isstring(data) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
level = script_getnum(st,3); level = script_getnum(st,3);
if( script_hasdata(st,4) ) if( script_hasdata(st,4) )
flag = script_getnum(st,4); flag = script_getnum(st,4);
@ -8129,12 +8145,15 @@ BUILDIN_FUNC(guildskill)
int level; int level;
TBL_PC* sd; TBL_PC* sd;
int i; int i;
struct script_data *data;
sd = script_rid2sd(st); sd = script_rid2sd(st);
if( sd == NULL ) if( sd == NULL )
return 0;// no player attached, report source return 0;// no player attached, report source
id = ( script_isstring(st,2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) ); data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
id = ( data_isstring(data) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
level = script_getnum(st,3); level = script_getnum(st,3);
for( i=0; i < level; i++ ) for( i=0; i < level; i++ )
guild_skillup(sd, id); guild_skillup(sd, id);
@ -8150,12 +8169,15 @@ BUILDIN_FUNC(getskilllv)
{ {
int id; int id;
TBL_PC* sd; TBL_PC* sd;
struct script_data *data;
sd = script_rid2sd(st); sd = script_rid2sd(st);
if( sd == NULL ) if( sd == NULL )
return 0;// no player attached, report source return 0;// no player attached, report source
id = ( script_isstring(st,2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) ); data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
id = ( data_isstring(data) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
script_pushint(st, pc_checkskill(sd,id)); script_pushint(st, pc_checkskill(sd,id));
return SCRIPT_CMD_SUCCESS; return SCRIPT_CMD_SUCCESS;
@ -8170,9 +8192,12 @@ BUILDIN_FUNC(getgdskilllv)
int guild_id; int guild_id;
uint16 skill_id; uint16 skill_id;
struct guild* g; struct guild* g;
struct script_data *data;
guild_id = script_getnum(st,2); guild_id = script_getnum(st,2);
skill_id = ( script_isstring(st,3) ? skill_name2id(script_getstr(st,3)) : script_getnum(st,3) ); data = script_getdata(st, 3);
get_val(st, data); // Convert into value in case of a variable
skill_id = ( data_isstring(data) ? skill_name2id(script_getstr(st,3)) : script_getnum(st,3) );
g = guild_search(guild_id); g = guild_search(guild_id);
if( g == NULL ) if( g == NULL )
script_pushint(st, -1); script_pushint(st, -1);
@ -8702,12 +8727,15 @@ BUILDIN_FUNC(itemskill)
int id; int id;
int lv; int lv;
TBL_PC* sd; TBL_PC* sd;
struct script_data *data;
sd = script_rid2sd(st); sd = script_rid2sd(st);
if( sd == NULL || sd->ud.skilltimer != INVALID_TIMER ) if( sd == NULL || sd->ud.skilltimer != INVALID_TIMER )
return 0; return 0;
id = ( script_isstring(st,2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) ); data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
id = ( data_isstring(data) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
lv = script_getnum(st,3); lv = script_getnum(st,3);
sd->skillitem=id; sd->skillitem=id;
@ -12599,6 +12627,7 @@ BUILDIN_FUNC(petheal)
BUILDIN_FUNC(petskillattack) BUILDIN_FUNC(petskillattack)
{ {
struct pet_data *pd; struct pet_data *pd;
struct script_data *data;
TBL_PC *sd=script_rid2sd(st); TBL_PC *sd=script_rid2sd(st);
if(sd==NULL || sd->pd==NULL) if(sd==NULL || sd->pd==NULL)
@ -12608,7 +12637,9 @@ BUILDIN_FUNC(petskillattack)
if (pd->a_skill == NULL) if (pd->a_skill == NULL)
pd->a_skill = (struct pet_skill_attack *)aMalloc(sizeof(struct pet_skill_attack)); pd->a_skill = (struct pet_skill_attack *)aMalloc(sizeof(struct pet_skill_attack));
pd->a_skill->id=( script_isstring(st,2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) ); data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
pd->a_skill->id=( data_isstring(data) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
pd->a_skill->lv=script_getnum(st,3); pd->a_skill->lv=script_getnum(st,3);
pd->a_skill->div_ = 0; pd->a_skill->div_ = 0;
pd->a_skill->rate=script_getnum(st,4); pd->a_skill->rate=script_getnum(st,4);
@ -12624,6 +12655,7 @@ BUILDIN_FUNC(petskillattack)
BUILDIN_FUNC(petskillattack2) BUILDIN_FUNC(petskillattack2)
{ {
struct pet_data *pd; struct pet_data *pd;
struct script_data *data;
TBL_PC *sd=script_rid2sd(st); TBL_PC *sd=script_rid2sd(st);
if(sd==NULL || sd->pd==NULL) if(sd==NULL || sd->pd==NULL)
@ -12633,7 +12665,9 @@ BUILDIN_FUNC(petskillattack2)
if (pd->a_skill == NULL) if (pd->a_skill == NULL)
pd->a_skill = (struct pet_skill_attack *)aMalloc(sizeof(struct pet_skill_attack)); pd->a_skill = (struct pet_skill_attack *)aMalloc(sizeof(struct pet_skill_attack));
pd->a_skill->id=( script_isstring(st,2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) ); data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
pd->a_skill->id=( data_isstring(data) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
pd->a_skill->lv=script_getnum(st,3); pd->a_skill->lv=script_getnum(st,3);
pd->a_skill->div_ = script_getnum(st,4); pd->a_skill->div_ = script_getnum(st,4);
pd->a_skill->rate=script_getnum(st,5); pd->a_skill->rate=script_getnum(st,5);
@ -12649,6 +12683,7 @@ BUILDIN_FUNC(petskillattack2)
BUILDIN_FUNC(petskillsupport) BUILDIN_FUNC(petskillsupport)
{ {
struct pet_data *pd; struct pet_data *pd;
struct script_data *data;
TBL_PC *sd=script_rid2sd(st); TBL_PC *sd=script_rid2sd(st);
if(sd==NULL || sd->pd==NULL) if(sd==NULL || sd->pd==NULL)
@ -12667,7 +12702,9 @@ BUILDIN_FUNC(petskillsupport)
} else //init memory } else //init memory
pd->s_skill = (struct pet_skill_support *) aMalloc(sizeof(struct pet_skill_support)); pd->s_skill = (struct pet_skill_support *) aMalloc(sizeof(struct pet_skill_support));
pd->s_skill->id=( script_isstring(st,2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) ); data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
pd->s_skill->id=( data_isstring(data) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
pd->s_skill->lv=script_getnum(st,3); pd->s_skill->lv=script_getnum(st,3);
pd->s_skill->delay=script_getnum(st,4); pd->s_skill->delay=script_getnum(st,4);
pd->s_skill->hp=script_getnum(st,5); pd->s_skill->hp=script_getnum(st,5);
@ -12689,9 +12726,12 @@ BUILDIN_FUNC(petskillsupport)
BUILDIN_FUNC(skilleffect) BUILDIN_FUNC(skilleffect)
{ {
TBL_PC *sd; TBL_PC *sd;
uint16 skill_id, skill_lv;
struct script_data *data = script_getdata(st, 2);
uint16 skill_id=( script_isstring(st,2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) ); get_val(st, data); // Convert into value in case of a variable
uint16 skill_lv=script_getnum(st,3); skill_id=( data_isstring(data) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
skill_lv=script_getnum(st,3);
sd=script_rid2sd(st); sd=script_rid2sd(st);
clif_skill_nodamage(&sd->bl,&sd->bl,skill_id,skill_lv,1); clif_skill_nodamage(&sd->bl,&sd->bl,skill_id,skill_lv,1);
@ -12706,11 +12746,15 @@ BUILDIN_FUNC(skilleffect)
BUILDIN_FUNC(npcskilleffect) BUILDIN_FUNC(npcskilleffect)
{ {
struct block_list *bl= map_id2bl(st->oid); struct block_list *bl= map_id2bl(st->oid);
uint16 skill_id, skill_lv;
int x, y;
struct script_data *data = script_getdata(st, 2);
uint16 skill_id=( script_isstring(st,2) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) ); get_val(st, data); // Convert into value in case of a variable
uint16 skill_lv=script_getnum(st,3); skill_id=( data_isstring(data) ? skill_name2id(script_getstr(st,2)) : script_getnum(st,2) );
int x=script_getnum(st,4); skill_lv=script_getnum(st,3);
int y=script_getnum(st,5); x=script_getnum(st,4);
y=script_getnum(st,5);
if (bl) if (bl)
clif_skill_poseffect(bl,skill_id,skill_lv,x,y,gettick()); clif_skill_poseffect(bl,skill_id,skill_lv,x,y,gettick());
@ -12955,7 +12999,10 @@ BUILDIN_FUNC(recovery)
case 4: case 4:
{ {
struct s_mapiterator *iter; struct s_mapiterator *iter;
if(script_hasdata(st,3) && !script_isstring(st,3)) struct script_data *data = script_getdata(st, 3);
get_val(st, data); // Convert into value in case of a variable
if(script_hasdata(st,3) && !data_isstring(data))
revive = script_getnum(st,3); // recovery 4,<revive_flag>; revive = script_getnum(st,3); // recovery 4,<revive_flag>;
iter = mapit_getallusers(); iter = mapit_getallusers();
for (sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); sd = (TBL_PC*)mapit_next(iter)) { for (sd = (TBL_PC*)mapit_first(iter); mapit_exists(iter); sd = (TBL_PC*)mapit_next(iter)) {
@ -14517,7 +14564,10 @@ BUILDIN_FUNC(replacestr)
} }
if(script_hasdata(st, 5)) { if(script_hasdata(st, 5)) {
if( !script_isstring(st,5) ) struct script_data *data = script_getdata(st, 5);
get_val(st, data); // Convert into value in case of a variable
if( !data_isstring(data) )
usecase = script_getnum(st, 5) != 0; usecase = script_getnum(st, 5) != 0;
else { else {
ShowError("script:replacestr: Invalid usecase value. Expected int got string\n"); ShowError("script:replacestr: Invalid usecase value. Expected int got string\n");
@ -14598,7 +14648,11 @@ BUILDIN_FUNC(countstr)
} }
if(script_hasdata(st, 4)) { if(script_hasdata(st, 4)) {
if( !script_isstring(st,4) ) struct script_data *data;
data = script_getdata(st, 4);
get_val(st, data); // Convert into value in case of a variable
if( !data_isstring(data) )
usecase = script_getnum(st, 4) != 0; usecase = script_getnum(st, 4) != 0;
else { else {
ShowError("script:countstr: Invalid usecase value. Expected int got string\n"); ShowError("script:countstr: Invalid usecase value. Expected int got string\n");
@ -15167,9 +15221,12 @@ BUILDIN_FUNC(setitemscript)
BUILDIN_FUNC(addmonsterdrop) BUILDIN_FUNC(addmonsterdrop)
{ {
struct mob_db *mob; struct mob_db *mob;
struct script_data *data;
int item_id,rate,i,c = 0; int item_id,rate,i,c = 0;
if(script_isstring(st,2)) data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
if(data_isstring(data))
mob = mob_db(mobdb_searchname(script_getstr(st,2))); mob = mob_db(mobdb_searchname(script_getstr(st,2)));
else else
mob = mob_db(script_getnum(st,2)); mob = mob_db(script_getnum(st,2));
@ -15219,9 +15276,12 @@ BUILDIN_FUNC(addmonsterdrop)
BUILDIN_FUNC(delmonsterdrop) BUILDIN_FUNC(delmonsterdrop)
{ {
struct mob_db *mob; struct mob_db *mob;
struct script_data *data;
int item_id,i; int item_id,i;
if(script_isstring(st,2)) data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
if(data_isstring(data))
mob = mob_db(mobdb_searchname(script_getstr(st,2))); mob = mob_db(mobdb_searchname(script_getstr(st,2)));
else else
mob = mob_db(script_getnum(st,2)); mob = mob_db(script_getnum(st,2));
@ -15764,9 +15824,12 @@ BUILDIN_FUNC(unitskilluseid)
uint16 skill_lv; uint16 skill_lv;
int target_id; int target_id;
struct block_list* bl; struct block_list* bl;
struct script_data *data;
unit_id = script_getnum(st,2); unit_id = script_getnum(st,2);
skill_id = ( script_isstring(st,3) ? skill_name2id(script_getstr(st,3)) : script_getnum(st,3) ); data = script_getdata(st, 3);
get_val(st, data); // Convert into value in case of a variable
skill_id = ( data_isstring(data) ? skill_name2id(script_getstr(st,3)) : script_getnum(st,3) );
skill_lv = script_getnum(st,4); skill_lv = script_getnum(st,4);
target_id = ( script_hasdata(st,5) ? script_getnum(st,5) : unit_id ); target_id = ( script_hasdata(st,5) ? script_getnum(st,5) : unit_id );
@ -15789,9 +15852,12 @@ BUILDIN_FUNC(unitskillusepos)
int skill_x; int skill_x;
int skill_y; int skill_y;
struct block_list* bl; struct block_list* bl;
struct script_data *data;
unit_id = script_getnum(st,2); unit_id = script_getnum(st,2);
skill_id = ( script_isstring(st,3) ? skill_name2id(script_getstr(st,3)) : script_getnum(st,3) ); data = script_getdata(st, 3);
get_val(st, data); // Convert into value in case of a variable
skill_id = ( data_isstring(data) ? skill_name2id(script_getstr(st,3)) : script_getnum(st,3) );
skill_lv = script_getnum(st,4); skill_lv = script_getnum(st,4);
skill_x = script_getnum(st,5); skill_x = script_getnum(st,5);
skill_y = script_getnum(st,6); skill_y = script_getnum(st,6);
@ -16921,6 +16987,7 @@ static int buildin_mobuseskill_sub(struct block_list *bl,va_list ap)
BUILDIN_FUNC(areamobuseskill) BUILDIN_FUNC(areamobuseskill)
{ {
struct block_list center; struct block_list center;
struct script_data *data;
int16 m; int16 m;
int range,mobid,skill_id,skill_lv,casttime,emotion,target,cancel; int range,mobid,skill_id,skill_lv,casttime,emotion,target,cancel;
@ -16934,7 +17001,9 @@ BUILDIN_FUNC(areamobuseskill)
center.y = script_getnum(st,4); center.y = script_getnum(st,4);
range = script_getnum(st,5); range = script_getnum(st,5);
mobid = script_getnum(st,6); mobid = script_getnum(st,6);
skill_id = ( script_isstring(st,7) ? skill_name2id(script_getstr(st,7)) : script_getnum(st,7) ); data = script_getdata(st, 7);
get_val(st, data); // Convert into value in case of a variable
skill_id = ( data_isstring(data) ? skill_name2id(script_getstr(st,7)) : script_getnum(st,7) );
if( (skill_lv = script_getnum(st,8)) > battle_config.mob_max_skilllvl ) if( (skill_lv = script_getnum(st,8)) > battle_config.mob_max_skilllvl )
skill_lv = battle_config.mob_max_skilllvl; skill_lv = battle_config.mob_max_skilllvl;
@ -17218,9 +17287,13 @@ BUILDIN_FUNC(getcharip)
/* check if a character name is specified */ /* check if a character name is specified */
if( script_hasdata(st, 2) ) if( script_hasdata(st, 2) )
{ {
if (script_isstring(st, 2)) struct script_data *data;
data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
if (data_isstring(data))
sd = map_nick2sd(script_getstr(st, 2)); sd = map_nick2sd(script_getstr(st, 2));
else if (script_isint(st, 2) || script_getnum(st, 2)) else if (data_isint(data) || script_getnum(st, 2))
{ {
int id = 0; int id = 0;
id = script_getnum(st, 2); id = script_getnum(st, 2);
@ -17527,8 +17600,11 @@ BUILDIN_FUNC(npcskill)
unsigned int npc_level; unsigned int npc_level;
struct npc_data *nd; struct npc_data *nd;
struct map_session_data *sd; struct map_session_data *sd;
struct script_data *data;
skill_id = script_isstring(st, 2) ? skill_name2id(script_getstr(st, 2)) : script_getnum(st, 2);
data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
skill_id = data_isstring(data) ? skill_name2id(script_getstr(st, 2)) : script_getnum(st, 2);
skill_level = script_getnum(st, 3); skill_level = script_getnum(st, 3);
stat_point = script_getnum(st, 4); stat_point = script_getnum(st, 4);
npc_level = script_getnum(st, 5); npc_level = script_getnum(st, 5);
@ -18041,11 +18117,14 @@ BUILDIN_FUNC(montransform) {
enum sc_type type; enum sc_type type;
char msg[CHAT_SIZE_MAX]; char msg[CHAT_SIZE_MAX];
int tick, mob_id, val1, val2, val3, val4; int tick, mob_id, val1, val2, val3, val4;
struct script_data *data;
if( (sd = script_rid2sd(st)) == NULL ) if( (sd = script_rid2sd(st)) == NULL )
return 1; return 1;
if( script_isstring(st, 2) ) data = script_getdata(st, 2);
get_val(st, data); // Convert into value in case of a variable
if( data_isstring(data) )
mob_id = mobdb_searchname(script_getstr(st, 2)); mob_id = mobdb_searchname(script_getstr(st, 2));
else else
mob_id = mobdb_checkid(script_getnum(st, 2)); mob_id = mobdb_checkid(script_getnum(st, 2));
@ -18055,7 +18134,7 @@ BUILDIN_FUNC(montransform) {
val1 = val2 = val3 = val4 = 0; val1 = val2 = val3 = val4 = 0;
if (mob_id == 0) { if (mob_id == 0) {
if( script_isstring(st,2) ) if( data_isstring(data) )
ShowWarning("buildin_montransform: Attempted to use non-existing monster '%s'.\n", script_getstr(st, 2)); ShowWarning("buildin_montransform: Attempted to use non-existing monster '%s'.\n", script_getstr(st, 2));
else else
ShowWarning("buildin_montransform: Attempted to use non-existing monster of ID '%d'.\n", script_getnum(st, 2)); ShowWarning("buildin_montransform: Attempted to use non-existing monster of ID '%d'.\n", script_getnum(st, 2));

View File

@ -9279,7 +9279,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
break; break;
case SC_OFFERTORIUM: case SC_OFFERTORIUM:
val2 = 30 * val1; // heal power bonus val2 = 30 * val1; // heal power bonus
val3 = 20 * val1; // sp cost inc val3 = 100 + (20 * val1); // sp cost inc
break; break;
case SC_FRIGG_SONG: case SC_FRIGG_SONG:
val2 = 5 * val1; // maxhp bonus val2 = 5 * val1; // maxhp bonus