瀏覽代碼

Updated Gunslinger/Rebellion Bullet behavior (#3459)

* Fixes #2745.
* Disabled the ability to equip old spheres and old slugs.
* Corrected some of the newer bullets name, weight, price, and effects.
* Updated the ASPD for Gunslinger/Rebellion when equipping guns.
* Spread Attack and Ground Drift now only use bullets.
* Adjusted Slug Shot skill item requirement to the new Slug Bullet.
* Separated pre-renewal and renewal ammo NPC (Kenny and Tony).
-- Renewal no longer has Tony.
-- Kenny can now trade in the Sphere bullets for new bullets.
-- Kenny can now trade in the old Slugs for Slug Bullet.
-- Added new bullets into Kenny.
Thanks to @cydh and @exneval!
Aleos 6 年之前
父節點
當前提交
87032fc95a

+ 27 - 26
db/re/item_db.txt

@@ -7394,38 +7394,38 @@
 //===================================================================
 //===================================================================
 // Bullets
 // Bullets
 //===================================================================
 //===================================================================
-13200,Bullet,Bullet,10,1,,2,10,,,,0x41000000,63,2,32768,,1,,3,{},{},{}
+13200,Bullet,Bullet,10,1,,1,25,,,,0x41000000,63,2,32768,,1,,3,{},{},{}
 13201,Silver_Bullet,Silver Bullet,10,15,,2,15,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Holy; },{},{}
 13201,Silver_Bullet,Silver Bullet,10,15,,2,15,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Holy; },{},{}
 13202,Shell_Of_Blood,Bloody Shell,10,30,,2,30,,,,0x41000000,63,2,32768,,1,,3,{ bonus2 bAddEff,Eff_Bleeding,100; },{},{}
 13202,Shell_Of_Blood,Bloody Shell,10,30,,2,30,,,,0x41000000,63,2,32768,,1,,3,{ bonus2 bAddEff,Eff_Bleeding,100; },{},{}
-13203,Flare_Sphere,Flare Sphere,10,80,,5,50,,,,0x41000000,63,2,32768,,1,,5,{ bonus bAtkEle,Ele_Fire; },{},{}
-13204,Lighting_Sphere,Lightning Sphere,10,80,,5,50,,,,0x41000000,63,2,32768,,1,,5,{ bonus bAtkEle,Ele_Wind; },{},{}
-13205,Poison_Sphere,Poison Sphere,10,80,,5,50,,,,0x41000000,63,2,32768,,1,,5,{ bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,500; },{},{}
-13206,Blind_Sphere,Blind Sphere,10,80,,5,50,,,,0x41000000,63,2,32768,,1,,5,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEff,Eff_Blind,500; },{},{}
-13207,Freezing_Sphere,Freezing Sphere,10,80,,5,50,,,,0x41000000,63,2,32768,,1,,5,{ bonus bAtkEle,Ele_Water; },{},{}
+13203,Flare_Sphere,Flare Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Fire; },{},{}
+13204,Lighting_Sphere,Lightning Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Wind; },{},{}
+13205,Poison_Sphere,Poison Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,500; },{},{}
+13206,Blind_Sphere,Blind Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEff,Eff_Blind,500; },{},{}
+13207,Freezing_Sphere,Freezing Sphere,10,80,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Water; },{},{}
 13208,Gong_Bug,Sow Bug,10,0,,5,50,,,,0x41000000,63,2,32768,,50,,3,{ bonus2 bAddEff,Eff_Stun,1000; },{},{}
 13208,Gong_Bug,Sow Bug,10,0,,5,50,,,,0x41000000,63,2,32768,,50,,3,{ bonus2 bAddEff,Eff_Stun,1000; },{},{}
-13210,Slug_Bullet_1,Slug Ammunition L,10,250,,250,30,,,,0x41000000,63,2,32768,,1,,3,{},{},{}
-13211,Slug_Bullet_2,Slug Ammunition M,10,500,,500,30,,,,0x41000000,63,2,32768,,1,,3,{},{},{}
-13212,Slug_Bullet_3,Slug Ammunition H,10,750,,750,30,,,,0x41000000,63,2,32768,,1,,3,{},{},{}
-13213,Slug_Bullet_4,Slug Ammunition SH,10,1000,,1000,30,,,,0x41000000,63,2,32768,,1,,3,{},{},{}
-13214,Slug_Bullet_5,Slug Ammunition XH,10,1200,,1200,30,,,,0x41000000,63,2,32768,,1,,3,{},{},{}
-13215,AP_Ammo,Armor Burnt,10,10,,2,50,,,0,0xFFFFFFFF,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Neutral; },{},{}
-13216,Blaze_Bullet,Incandescence Shot,10,10,,2,40,,,0,0xFFFFFFFF,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Fire; },{},{}
-13217,Freezing_Bullet,Glaciation Shot,10,10,,2,40,,,0,0xFFFFFFFF,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Water; },{},{}
-13218,Electric_Shock_Bullet,Dengeki Shot,10,10,,2,40,,,0,0xFFFFFFFF,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Wind; },{},{}
-13219,Magical_Stone_Bullet,Hearthstone Shot,10,10,,2,40,,,0,0xFFFFFFFF,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Earth; },{},{}
-13220,Sanctified_Bullet,Purification Shot,10,10,,2,40,,,0,0xFFFFFFFF,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Holy; },{},{}
-13221,Silver_Bullet_,Silver Bullet,10,10,,2,15,,,0,0xFFFFFFFF,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Holy; },{},{}
-13222,Shell_Of_Blood_,Bloody Shell,10,10,,2,30,,,0,0xFFFFFFFF,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Neutral; },{},{}
-13223,Flare_Sphere_,Flare Sphere,10,10,,5,50,,,0,0xFFFFFFFF,63,2,32768,,1,,5,{ bonus bAtkEle,Ele_Fire; },{},{}
-13224,Lighting_Sphere_,Lightning Sphere,10,10,,5,50,,,0,0xFFFFFFFF,63,2,32768,,1,,5,{ bonus bAtkEle,Ele_Wind; },{},{}
-13225,Poison_Sphere_,Poison Sphere,10,10,,5,50,,,0,0xFFFFFFFF,63,2,32768,,1,,5,{ bonus bAtkEle,Ele_Poison; },{},{}
-13226,Blind_Sphere_,Blind Sphere,10,10,,5,50,,,0,0xFFFFFFFF,63,2,32768,,1,,5,{ bonus bAtkEle,Ele_Dark; },{},{}
-13227,Freezing_Sphere_,Freezing Sphere,10,10,,5,50,,,0,0xFFFFFFFF,63,2,32768,,1,,5,{ bonus bAtkEle,Ele_Water; },{},{}
+13210,Slug_Bullet_1,Slug Ammunition L,10,250,,250,30,,,,,,,32768,,,,3,{},{},{}
+13211,Slug_Bullet_2,Slug Ammunition M,10,500,,500,30,,,,,,,32768,,,,3,{},{},{}
+13212,Slug_Bullet_3,Slug Ammunition H,10,750,,750,30,,,,,,,32768,,,,3,{},{},{}
+13213,Slug_Bullet_4,Slug Ammunition SH,10,1000,,1000,30,,,,,,,32768,,,,3,{},{},{}
+13214,Slug_Bullet_5,Slug Ammunition XH,10,1200,,1200,30,,,,,,,32768,,,,3,{},{},{}
+13215,AP_Ammo,Armor-Piercing Bullet,10,15,,2,50,,,0,0x41000000,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Neutral; },{},{}
+13216,Blaze_Bullet,Blazing Bullet,10,10,,2,40,,,,0x41000000,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Fire; },{},{}
+13217,Freezing_Bullet,Freezing Bullet,10,10,,2,40,,,,0x41000000,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Water; },{},{}
+13218,Electric_Shock_Bullet,Lightning Bullet,10,10,,2,40,,,,0x41000000,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Wind; },{},{}
+13219,Magical_Stone_Bullet,Magic Stone Bullet,10,10,,2,40,,,,0x41000000,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Earth; },{},{}
+13220,Sanctified_Bullet,Purifying Bullet,10,10,,2,40,,,,0x41000000,63,2,32768,,100,,3,{ bonus bAtkEle,Ele_Holy; },{},{}
+13221,Silver_Bullet_,Silver Bullet,10,5,,2,15,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Holy; },{},{}
+13222,Shell_Of_Blood_,Bloody Shell,10,10,,2,30,,,,0x41000000,63,2,32768,,1,,3,{ bonus2 bAddEff,Eff_Bleeding,100; },{},{}
+13223,Flare_Sphere_,Flare Sphere,10,15,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Fire; },{},{}
+13224,Lighting_Sphere_,Lightning Sphere,10,15,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Wind; },{},{}
+13225,Poison_Sphere_,Poison Sphere,10,15,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Poison; },{},{}
+13226,Blind_Sphere_,Blind Sphere,10,15,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Dark; },{},{}
+13227,Freezing_Sphere_,Freezing Sphere,10,15,,5,50,,,,,,,32768,,,,5,{ bonus bAtkEle,Ele_Water; },{},{}
 13228,Flare_Bullet,Flare Bullet,10,10,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Fire; },{},{}
 13228,Flare_Bullet,Flare Bullet,10,10,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Fire; },{},{}
 13229,Lightning_Bullet,Lightning Bullet,10,10,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Wind; },{},{}
 13229,Lightning_Bullet,Lightning Bullet,10,10,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Wind; },{},{}
 13230,Ice_Bullet,Ice Bullet,10,10,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Water; },{},{}
 13230,Ice_Bullet,Ice Bullet,10,10,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Water; },{},{}
-13231,Poison_Bullet,Poison Bullet,10,10,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Poison; },{},{}
-13232,Blind_Bullet,Blind Bullet,10,10,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Dark; },{},{}
+13231,Poison_Bullet,Poison Bullet,10,10,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Poison; bonus2 bAddEff,Eff_Poison,500; },{},{}
+13232,Blind_Bullet,Blind Bullet,10,10,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Dark; bonus2 bAddEff,Eff_Blind,500; },{},{}
 //===================================================================
 //===================================================================
 // Shurikens & Kunais
 // Shurikens & Kunais
 //===================================================================
 //===================================================================
@@ -11609,6 +11609,7 @@
 25183,Decorated_Archer's_Thimble,Decorated Archer's Thimble,3,0,,0,,,,,,,,,,,,,{},{},{}
 25183,Decorated_Archer's_Thimble,Decorated Archer's Thimble,3,0,,0,,,,,,,,,,,,,{},{},{}
 25184,Portable_Sewingbox,Portable Sewingbox,3,0,,0,,,,,,,,,,,,,{},{},{}
 25184,Portable_Sewingbox,Portable Sewingbox,3,0,,0,,,,,,,,,,,,,{},{},{}
 25185,Locket_Pendant,Locket Pendant,3,0,,0,,,,,,,,,,,,,{},{},{}
 25185,Locket_Pendant,Locket Pendant,3,0,,0,,,,,,,,,,,,,{},{},{}
+25187,Slug_Bullet,Slug Bullet,3,1200,,1200,,,,,,,,,,,,,{},{},{}
 25223,Para_Team_Coin,Eden Group Coin,3,0,,0,,,,,,,,,,,,,{},{},{}
 25223,Para_Team_Coin,Eden Group Coin,3,0,,0,,,,,,,,,,,,,{},{},{}
 25238,New_Normal_Lubricant,New Normal Lubricant,3,0,,0,,,,,,,,,,,,,{},{},{}
 25238,New_Normal_Lubricant,New Normal Lubricant,3,0,,0,,,,,,,,,,,,,{},{},{}
 25239,New_Advanced_Lubricant,New Advanced Lubricant,3,0,,0,,,,,,,,,,,,,{},{},{}
 25239,New_Advanced_Lubricant,New Advanced Lubricant,3,0,,0,,,,,,,,,,,,,{},{},{}

+ 4 - 4
db/re/job_db1.txt

@@ -52,7 +52,7 @@
 // Super Novice
 // Super Novice
 23,	20000,0    ,500  ,100  ,40  ,55  ,57  ,200 ,200 ,200 ,50  ,200 ,50  ,55  ,65  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,65  ,10
 23,	20000,0    ,500  ,100  ,40  ,55  ,57  ,200 ,200 ,200 ,50  ,200 ,50  ,55  ,65  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,65  ,10
 // Gunslinger
 // Gunslinger
-24,	28000,90   ,650  ,469  ,50  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,45  ,55  ,50  ,90  ,100 ,200 ,200 ,6
+24,	28000,90   ,650  ,469  ,54  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,49  ,59  ,54  ,94  ,104 ,200 ,200 ,6
 // Ninja
 // Ninja
 25,	26000,75   ,500  ,540  ,40  ,43  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,200 ,6
 25,	26000,75   ,500  ,540  ,40  ,43  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,200 ,6
 // Novice High
 // Novice High
@@ -270,7 +270,7 @@
 // Oboro
 // Oboro
 4212,	26000,75   ,500  ,540  ,40  ,45  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,50  ,200 ,3
 4212,	26000,75   ,500  ,540  ,40  ,45  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,50  ,200 ,3
 // Rebellion
 // Rebellion
-4215,	28000,90   ,650  ,469  ,50  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,45  ,55  ,50  ,90  ,100 ,200 ,200 ,6
+4215,	28000,90   ,650  ,469  ,54  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,49  ,59  ,54  ,94  ,104 ,200 ,200 ,6
 // Summoner
 // Summoner
 4218,	20000,70   ,500  ,500  ,45  ,55  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,200 ,200 ,200 ,200 ,43  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,5
 4218,	20000,70   ,500  ,500  ,45  ,55  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,200 ,200 ,200 ,200 ,43  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,5
 // Baby Summoner
 // Baby Summoner
@@ -288,9 +288,9 @@
 // Baby Soul Linker
 // Baby Soul Linker
 4227,	24000,75   ,500  ,900  ,50  ,50  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,53  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,8
 4227,	24000,75   ,500  ,900  ,50  ,50  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,53  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,55  ,8
 // Baby Gunslinger
 // Baby Gunslinger
-4228,	28000,90   ,650  ,469  ,50  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,45  ,55  ,50  ,90  ,100 ,200 ,200 ,6
+4228,	28000,90   ,650  ,469  ,54  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,49  ,59  ,54  ,94  ,104 ,200 ,200 ,6
 // Baby Rebellion
 // Baby Rebellion
-4229,	28000,90   ,650  ,469  ,50  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,45  ,55  ,50  ,90  ,100 ,200 ,200 ,6
+4229,	28000,90   ,650  ,469  ,54  ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,200 ,49  ,59  ,54  ,94  ,104 ,200 ,200 ,6
 // Baby Star Gladiator (Union)
 // Baby Star Gladiator (Union)
 4238,	28000,90   ,650  ,470  ,40  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,6
 4238,	28000,90   ,650  ,470  ,40  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,50  ,6
 // Star Emperor
 // Star Emperor

+ 3 - 3
db/re/skill_require_db.txt

@@ -502,8 +502,8 @@
 517,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,19,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	//GS_GATLINGFEVER
 517,0,0,30:32:34:36:38:40:42:44:46:48,0,0,0,19,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	//GS_GATLINGFEVER
 518,0,0,3:6:9:12:15:18:21:24:27:30,0,0,0,20,3,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//GS_DUST
 518,0,0,3:6:9:12:15:18:21:24:27:30,0,0,0,20,3,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//GS_DUST
 519,0,0,20:25:30:35:40:45:50:55:60:65,0,0,0,20,3,2,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_FULLBUSTER
 519,0,0,20:25:30:35:40:45:50:55:60:65,0,0,0,20,3,2,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//GS_FULLBUSTER
-520,0,0,13:16:19:22:25:28:31:34:37:40,0,0,0,20:21,3:5,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0//GS_SPREADATTACK
-521,0,0,3:6:9:12:15:18:21:24:27:30,0,0,0,21,5,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//GS_GROUNDDRIFT
+520,0,0,13:16:19:22:25:28:31:34:37:40,0,0,0,20:21,3,5,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0//GS_SPREADATTACK
+521,0,0,3:6:9:12:15:18:21:24:27:30,0,0,0,21,3,1,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0		//GS_GROUNDDRIFT
 
 
 //****
 //****
 // NJ Ninja
 // NJ Ninja
@@ -909,7 +909,7 @@
 2567,0,0,70,0,0,0,19,3,10,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//RL_FIRE_RAIN
 2567,0,0,70,0,0,0,19,3,10,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0							//RL_FIRE_RAIN
 2568,0,0,30,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							//RL_HEAT_BARREL
 2568,0,0,30,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							//RL_HEAT_BARREL
 2569,0,0,80:84:88:92:96,0,0,0,18,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					//RL_AM_BLAST
 2569,0,0,80:84:88:92:96,0,0,0,18,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					//RL_AM_BLAST
-2570,0,0,80:84:88:92:96,0,0,0,20,0,0,none,0,0,13214,1,13213,1,13212,1,13211,1,13210,1,0,0,0,0,0,0,0,0,0,0,0	//RL_SLUGSHOT
+2570,0,0,80:84:88:92:96,0,0,0,20,0,0,none,0,0,25187,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RL_SLUGSHOT
 2571,0,0,35:40:45:50:55,0,0,0,18,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				//RL_HAMMER_OF_GOD
 2571,0,0,35:40:45:50:55,0,0,0,18,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				//RL_HAMMER_OF_GOD
 2572,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								//RL_R_TRIP_PLUSATK
 2572,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								//RL_R_TRIP_PLUSATK
 //2573,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							//RL_B_FLICKER_ATK
 //2573,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							//RL_B_FLICKER_ATK

+ 0 - 132
npc/merchants/ammo_boxes.txt

@@ -1,132 +0,0 @@
-//===== rAthena Script =======================================
-//= Magazine Dealers
-//===== By: ==================================================
-//= rAthena Dev Team
-//===== Current Version: =====================================
-//= 2.1
-//===== Compatible With: =====================================
-//= rAthena Project
-//===== Description: =========================================
-//= Turns bullets into magazines/packs.
-//===== Additional Comments: =================================
-//= 1.0 First version. [SinSloth]
-//= 1.1 Optimized version - Reduced to only one function [SinSloth]
-//= 1.2 Optimized^2, corrected npc's name [ultramage]
-//= 1.2a Optimized. Please, ommit extra NPC names [Lupus]
-//= 1.3 Updated to match AEGIS script. [Kisuka]
-//= 1.4 Updated to match AEGIS script again. [Masao]
-//= 1.5 Moved Izlude duplicate to pre-re/re paths. [Euphy]
-//= 2.0 Clean-up. [Capuche]
-//= 2.1 Fixes Issue #1482, where Rebellion jobs cannot use this npc. [Limestone]
-//============================================================
-
-alberta,118,157,3	script	Magazine Dealer Kenny::mdk	4_M_01,{
-	mes "[Kenny]";
-	if (BaseClass == Job_Gunslinger) {
-		mes "Welcome to my Magazine Shop.";
-		mes "As you may know, large numbers";
-		mes "of bullets can be carried more";
-		mes "easily when they're in Magazines. Now, can I interest you in";
-		mes "anything in particular?";
-		next;
-		switch(select("Wind Sphere Pack:Shadow Sphere Pack:Poison Sphere Pack:Water Sphere Pack:Fire Sphere Pack:Cartridge:Blood Cartridge:Silver Cartridge:Cancel")) {
-		case 1: callsub S_Casing,13204,12144;// <bullet id>, <pack id>
-		case 2: callsub S_Casing,13206,12145;
-		case 3: callsub S_Casing,13205,12146;
-		case 4: callsub S_Casing,13207,12147;
-		case 5: callsub S_Casing,13203,12148;
-		case 6: callsub S_Casing,13200,12149;
-		case 7: callsub S_Casing,13202,12150;
-		case 8: callsub S_Casing,13201,12151;
-		case 9:
-			mes "[Kenny]";
-			mes "Well, if you ever find";
-			mes "that you have too many";
-			mes "bullets, come and see me.";
-			mes "It's a smart idea to store";
-			mes "bullets with my Magazines.";
-			close;
-		}
-	}
-	mes "Welcome to my shop.";
-	mes "Here, I provide Magazines";
-	mes "and Cartridges for Gunslingers.";
-	mes "Sorry, but it doesn't look like";
-	mes "my services would be of any";
-	mes "use to you, adventurer.";
-	next;
-	mes "[Kenny]";
-	mes "Eh, but if you happen to";
-	mes "know any Gunslingers, send";
-	mes "them my way. You can never";
-	mes "have too many bullets.";
-	close;
-
-S_Casing:
-	.@bullet_id = getarg(0);
-	.@pack_id = getarg(1);
-
-	mes "[Kenny]";
-	mes "Now, you can trade";
-	mes callfunc("F_InsertPlural",500,getitemname(.@bullet_id));
-	mes "and 500 zeny for 1 "+getitemname(.@pack_id)+", so make sure";
-	mes "you have sufficient bullets";
-	mes "and zeny for this exchange.";
-	next;
-	mes "[Kenny]";
-	mes "You can exchange "+callfunc("F_InsertPlural",500,getitemname(.@bullet_id))+" and 500 zeny";
-	mes "with 1 "+getitemname(.@pack_id)+".";
-	next;
-	mes "[Kenny]";
-	mes "Remember that I can't give";
-	mes "you more than 50 Magazines";
-	mes "at a time. Now please enter";
-	mes "the number of Magazines you";
-	mes "want to receive. If you want to cancel, then just enter ''0.''";
-	next;
-	input .@amount;
-	mes "[Kenny]";
-	if (.@amount > 50 || .@amount == 0) {
-		mes "Hey, I can't give you";
-		mes "that many Magazines.";
-		mes "Please try again, and";
-		mes "enter a number no";
-		mes "greater than 50.";
-	}
-	else if (countitem(.@bullet_id) >= (500*.@amount)) {
-		if (Zeny >= (500*.@amount)) {
-			if (checkweight(.@pack_id,.@amount) == 0) {
-				mes "Hey, you've got a lot";
-				mes "of junk crammed in your";
-				mes "Inventory. Free up some";
-				mes "space, and then come back";
-				mes "and trade your bullets for";
-				mes "some Magazines later, okay?";
-			} else {
-				mes "Alright, here are";
-				mes "your Magazines. Thanks";
-				mes "for visiting my shop, and";
-				mes "I hope that you use all";
-				mes "of your ammo wisely.";
-				Zeny = Zeny -500*.@amount;
-				delitem .@bullet_id,(500*.@amount);
-				getitem .@pack_id,.@amount;
-			}
-		} else {
-			mes "Sorry, but you don't";
-			mes "have enough zeny for";
-			mes "this Magazine exchange.";
-			mes "Come back to my shop";
-			mes "after you've saved up";
-			mes "some more money.";
-		}
-	} else {
-		mes "Sorry, but you don't";
-		mes "have enough bullets for";
-		mes "this Magazine exchange.";
-		mes "Maybe you should double";
-		mes "check your Inventory, and";
-		mes "then come back to me later.";
-	}
-	close;
-}

+ 0 - 123
npc/merchants/ammo_dealer.txt

@@ -1,123 +0,0 @@
-//===== rAthena Script =======================================
-//= Bullet Dealers
-//===== By ===================================================
-//= Playtester, Paradox924X
-//===== Version ==============================================
-//= 2.1
-//===== Compatible With ======================================
-//= rAthena Project
-//===== Description ==========================================
-//= Bullet trader.
-//===== Comments =============================================
-//= 1.0 First version [Playtester]
-//= 1.1 Converted from Aegis [Paradox924X]
-//= 1.2 More optimized conversion [Legionaire]
-//= 1.2a Removed .GATs [Lupus]
-//= 1.3 Fixed [Playtester] Optimized. Got rid of @vars [Lupus]
-//= 1.4 Updated to match AEGIS script. [Kisuka]
-//= 1.5 Updated to match AEGIS script again. [Masao]
-//= 1.6 Moved Izlude duplicate to pre-re/re paths. [Euphy]
-//= 2.0 Clean-up. [Capuche]
-//= 2.1 Fixes Issue #1482, where Rebellion jobs cannot use this npc. [Limestone]
-//============================================================
-
-alberta,118,160,3	script	Bullet Dealer Tony#alb::bdt	4_M_04,{
-	mes "[Tony]";
-	if (BaseClass == Job_Gunslinger) {
-		mes "I'm Tony, the Bullet Dealer.";
-		mes "Come to me whenever you're";
-		mes "short on ammo. Just bring me";
-		mes "the materials, and I'll make";
-		mes "you the bullets you need.";
-		next;
-		switch(select("Poison Sphere:Flare Sphere:Lighting Sphere:Blind Sphere:Freezing Sphere:Cancel")) {
-		case 1: callsub S_BulletTrade,937,10,13205;// <item required>, <amount req>, <bullet id>
-		case 2: callsub S_BulletTrade,7097,2,13203;
-		case 3: callsub S_BulletTrade,7053,3,13204;
-		case 4: callsub S_BulletTrade,1024,5,13206;
-		case 5: callsub S_BulletTrade,7054,2,13207;
-		case 6:
-			mes "[Tony]";
-			mes "Changed your mind?";
-			mes "Well, if you ever need";
-			mes "any bullets, I'll be right";
-			mes "here. Come back whenever";
-			mes "you think you'll need more";
-			mes "ammunition, Gunslinger.";
-			close;
-		}
-	}
-	mes "Hey, I'm Tony. I'm in";
-	mes "charge of distributing";
-	mes "and making bullets for";
-	mes "Gunslingers. It's just";
-	mes "how our guild likes";
-	mes "to do things.";
-	next;
-	mes "[Tony]";
-	mes "I'm sorry if you came";
-	mes "here to buy some bullets.";
-	mes "I can only do business with";
-	mes "fully fledged Gunslingers.";
-	close;
-
-S_BulletTrade:
-	.@required_id = getarg(0);
-	.@required_amount = getarg(1);
-	.@bullet_id = getarg(2);
-
-	mes "[Tony]";
-	mes "For every set of";
-	mes callfunc("F_InsertPlural",30,getitemname(.@bullet_id))+",";
-	mes "you must give me";
-	mes "1 Emveretarcon,";
-	mes "1 Phracon, and";
-	mes callfunc("F_InsertPlural",.@required_amount,getitemname(.@required_id))+".";
-	next;
-	mes "[Tony]";
-	mes "Remember that I can give";
-	mes "a maximum of 500 sets of";
-	mes "30 bullets at a time. Please";
-	mes "enter the number of bullet sets";
-	mes "that you'd like. If you want to";
-	mes "cancel, then just enter ''0.''";
-	next;
-	input .@amount;
-	mes "[Tony]";
-	if (.@amount < 1 || .@amount > 500) {
-		mes "Hey, I can't give you";
-		mes "that many bullets. Don't";
-		mes "forget to enter a number";
-		mes "that's no higher than 500";
-		mes "if you want to trade your";
-		mes "items for some bullets.";
-	}
-	else if (countitem(1010) >= .@amount && countitem(1011) >= .@amount && countitem(.@required_id) >= (.@amount*.@required_amount)) {
-		if (checkweight(.@bullet_id,.@amount * 30) == 0) {
-			mes "Eh? Your Inventory doesn't";
-			mes "have enough space for this";
-			mes "many bullets. Come back later";
-			mes "after you make more space";
-			mes "available. Try putting some of";
-			mes "your things into Kafra Storage.";
-		} else {
-			mes "Great, everything seems";
-			mes "to be in order. Let me take";
-			mes "these materials, and here are";
-			mes "your bullets. It's a pleasure";
-			mes "to do business with you~";
-			delitem 1010,.@amount; //Phracon
-			delitem 1011,.@amount; //Emveretarcon
-			delitem .@required_id,.@amount * .@required_amount;
-			getitem .@bullet_id,.@amount * 30;
-		}
-	} else {
-		mes "Huh. It looks like you";
-		mes "don't have enough materials";
-		mes "for that many bullets. Well,";
-		mes "it's no problem. Just come";
-		mes "back after gathering everything";
-		mes "that you need, okay?";
-	}
-	close;
-}

+ 121 - 8
npc/pre-re/merchants/ammo_boxes.txt

@@ -1,15 +1,128 @@
 //===== rAthena Script =======================================
 //===== rAthena Script =======================================
 //= Magazine Dealers
 //= Magazine Dealers
-//===== By: ==================================================
-//= Euphy
-//===== Current Version: =====================================
-//= 1.0
-//===== Compatible With: =====================================
-//= rAthena Project
 //===== Description: =========================================
 //===== Description: =========================================
 //= Turns bullets into magazines/packs.
 //= Turns bullets into magazines/packs.
-//===== Additional Comments: =================================
-//= 1.0 First version, Pre-Renewal duplicates.
+//===== Changelogs: ==========================================
+//= 1.0 First version. [SinSloth]
+//= 1.1 Optimized version - Reduced to only one function [SinSloth]
+//= 1.2 Optimized^2, corrected npc's name [ultramage]
+//= 1.2a Optimized. Please, ommit extra NPC names [Lupus]
+//= 1.3 Updated to match AEGIS script. [Kisuka]
+//= 1.4 Updated to match AEGIS script again. [Masao]
+//= 1.5 Moved Izlude duplicate to pre-re/re paths. [Euphy]
+//= 2.0 Clean-up. [Capuche]
+//= 2.1 Fixes Issue #1482, where Rebellion jobs cannot use this npc. [Limestone]
 //============================================================
 //============================================================
 
 
+alberta,118,157,3	script	Magazine Dealer Kenny::mdk	4_M_01,{
+	mes "[Kenny]";
+	if (BaseClass == Job_Gunslinger) {
+		mes "Welcome to my Magazine Shop.";
+		mes "As you may know, large numbers";
+		mes "of bullets can be carried more";
+		mes "easily when they're in Magazines. Now, can I interest you in";
+		mes "anything in particular?";
+		next;
+		switch(select("Wind Sphere Pack:Shadow Sphere Pack:Poison Sphere Pack:Water Sphere Pack:Fire Sphere Pack:Cartridge:Blood Cartridge:Silver Cartridge:Cancel")) {
+		case 1: callsub S_Casing,13204,12144;// <bullet id>, <pack id>
+		case 2: callsub S_Casing,13206,12145;
+		case 3: callsub S_Casing,13205,12146;
+		case 4: callsub S_Casing,13207,12147;
+		case 5: callsub S_Casing,13203,12148;
+		case 6: callsub S_Casing,13200,12149;
+		case 7: callsub S_Casing,13202,12150;
+		case 8: callsub S_Casing,13201,12151;
+		case 9:
+			mes "[Kenny]";
+			mes "Well, if you ever find";
+			mes "that you have too many";
+			mes "bullets, come and see me.";
+			mes "It's a smart idea to store";
+			mes "bullets with my Magazines.";
+			close;
+		}
+	}
+	mes "Welcome to my shop.";
+	mes "Here, I provide Magazines";
+	mes "and Cartridges for Gunslingers.";
+	mes "Sorry, but it doesn't look like";
+	mes "my services would be of any";
+	mes "use to you, adventurer.";
+	next;
+	mes "[Kenny]";
+	mes "Eh, but if you happen to";
+	mes "know any Gunslingers, send";
+	mes "them my way. You can never";
+	mes "have too many bullets.";
+	close;
+
+S_Casing:
+	.@bullet_id = getarg(0);
+	.@pack_id = getarg(1);
+
+	mes "[Kenny]";
+	mes "Now, you can trade";
+	mes callfunc("F_InsertPlural",500,getitemname(.@bullet_id));
+	mes "and 500 zeny for 1 "+getitemname(.@pack_id)+", so make sure";
+	mes "you have sufficient bullets";
+	mes "and zeny for this exchange.";
+	next;
+	mes "[Kenny]";
+	mes "You can exchange "+callfunc("F_InsertPlural",500,getitemname(.@bullet_id))+" and 500 zeny";
+	mes "with 1 "+getitemname(.@pack_id)+".";
+	next;
+	mes "[Kenny]";
+	mes "Remember that I can't give";
+	mes "you more than 50 Magazines";
+	mes "at a time. Now please enter";
+	mes "the number of Magazines you";
+	mes "want to receive. If you want to cancel, then just enter ''0.''";
+	next;
+	input .@amount;
+	mes "[Kenny]";
+	if (.@amount > 50 || .@amount == 0) {
+		mes "Hey, I can't give you";
+		mes "that many Magazines.";
+		mes "Please try again, and";
+		mes "enter a number no";
+		mes "greater than 50.";
+	}
+	else if (countitem(.@bullet_id) >= (500*.@amount)) {
+		if (Zeny >= (500*.@amount)) {
+			if (checkweight(.@pack_id,.@amount) == 0) {
+				mes "Hey, you've got a lot";
+				mes "of junk crammed in your";
+				mes "Inventory. Free up some";
+				mes "space, and then come back";
+				mes "and trade your bullets for";
+				mes "some Magazines later, okay?";
+			} else {
+				mes "Alright, here are";
+				mes "your Magazines. Thanks";
+				mes "for visiting my shop, and";
+				mes "I hope that you use all";
+				mes "of your ammo wisely.";
+				Zeny = Zeny -500*.@amount;
+				delitem .@bullet_id,(500*.@amount);
+				getitem .@pack_id,.@amount;
+			}
+		} else {
+			mes "Sorry, but you don't";
+			mes "have enough zeny for";
+			mes "this Magazine exchange.";
+			mes "Come back to my shop";
+			mes "after you've saved up";
+			mes "some more money.";
+		}
+	} else {
+		mes "Sorry, but you don't";
+		mes "have enough bullets for";
+		mes "this Magazine exchange.";
+		mes "Maybe you should double";
+		mes "check your Inventory, and";
+		mes "then come back to me later.";
+	}
+	close;
+}
+
 izlude,171,127,3	duplicate(mdk)	Magazine Dealer Kenny#iz	83
 izlude,171,127,3	duplicate(mdk)	Magazine Dealer Kenny#iz	83

+ 114 - 9
npc/pre-re/merchants/ammo_dealer.txt

@@ -1,15 +1,120 @@
 //===== rAthena Script =======================================
 //===== rAthena Script =======================================
 //= Bullet Dealers
 //= Bullet Dealers
-//===== By ===================================================
-//= Euphy
-//===== Version ==============================================
-//= 1.0
-//===== Compatible With ======================================
-//= rAthena Project
-//===== Description ==========================================
+//===== Description: =========================================
 //= Bullet trader.
 //= Bullet trader.
-//===== Comments =============================================
-//= 1.0 First version, Pre-Renewal duplicates.
+//===== Changelogs: ==========================================
+//= 1.0 First version [Playtester]
+//= 1.1 Converted from Aegis [Paradox924X]
+//= 1.2 More optimized conversion [Legionaire]
+//= 1.2a Removed .GATs [Lupus]
+//= 1.3 Fixed [Playtester] Optimized. Got rid of @vars [Lupus]
+//= 1.4 Updated to match AEGIS script. [Kisuka]
+//= 1.5 Updated to match AEGIS script again. [Masao]
+//= 1.6 Moved Izlude duplicate to pre-re/re paths. [Euphy]
+//= 2.0 Clean-up. [Capuche]
+//= 2.1 Fixes Issue #1482, where Rebellion jobs cannot use this npc. [Limestone]
 //============================================================
 //============================================================
 
 
+alberta,118,160,3	script	Bullet Dealer Tony#alb::bdt	4_M_04,{
+	mes "[Tony]";
+	if (BaseClass == Job_Gunslinger) {
+		mes "I'm Tony, the Bullet Dealer.";
+		mes "Come to me whenever you're";
+		mes "short on ammo. Just bring me";
+		mes "the materials, and I'll make";
+		mes "you the bullets you need.";
+		next;
+		switch(select("Poison Sphere:Flare Sphere:Lighting Sphere:Blind Sphere:Freezing Sphere:Cancel")) {
+		case 1: callsub S_BulletTrade,937,10,13205;// <item required>, <amount req>, <bullet id>
+		case 2: callsub S_BulletTrade,7097,2,13203;
+		case 3: callsub S_BulletTrade,7053,3,13204;
+		case 4: callsub S_BulletTrade,1024,5,13206;
+		case 5: callsub S_BulletTrade,7054,2,13207;
+		case 6:
+			mes "[Tony]";
+			mes "Changed your mind?";
+			mes "Well, if you ever need";
+			mes "any bullets, I'll be right";
+			mes "here. Come back whenever";
+			mes "you think you'll need more";
+			mes "ammunition, Gunslinger.";
+			close;
+		}
+	}
+	mes "Hey, I'm Tony. I'm in";
+	mes "charge of distributing";
+	mes "and making bullets for";
+	mes "Gunslingers. It's just";
+	mes "how our guild likes";
+	mes "to do things.";
+	next;
+	mes "[Tony]";
+	mes "I'm sorry if you came";
+	mes "here to buy some bullets.";
+	mes "I can only do business with";
+	mes "fully fledged Gunslingers.";
+	close;
+
+S_BulletTrade:
+	.@required_id = getarg(0);
+	.@required_amount = getarg(1);
+	.@bullet_id = getarg(2);
+
+	mes "[Tony]";
+	mes "For every set of";
+	mes callfunc("F_InsertPlural",30,getitemname(.@bullet_id))+",";
+	mes "you must give me";
+	mes "1 Emveretarcon,";
+	mes "1 Phracon, and";
+	mes callfunc("F_InsertPlural",.@required_amount,getitemname(.@required_id))+".";
+	next;
+	mes "[Tony]";
+	mes "Remember that I can give";
+	mes "a maximum of 500 sets of";
+	mes "30 bullets at a time. Please";
+	mes "enter the number of bullet sets";
+	mes "that you'd like. If you want to";
+	mes "cancel, then just enter ''0.''";
+	next;
+	input .@amount;
+	mes "[Tony]";
+	if (.@amount < 1 || .@amount > 500) {
+		mes "Hey, I can't give you";
+		mes "that many bullets. Don't";
+		mes "forget to enter a number";
+		mes "that's no higher than 500";
+		mes "if you want to trade your";
+		mes "items for some bullets.";
+	}
+	else if (countitem(1010) >= .@amount && countitem(1011) >= .@amount && countitem(.@required_id) >= (.@amount*.@required_amount)) {
+		if (checkweight(.@bullet_id,.@amount * 30) == 0) {
+			mes "Eh? Your Inventory doesn't";
+			mes "have enough space for this";
+			mes "many bullets. Come back later";
+			mes "after you make more space";
+			mes "available. Try putting some of";
+			mes "your things into Kafra Storage.";
+		} else {
+			mes "Great, everything seems";
+			mes "to be in order. Let me take";
+			mes "these materials, and here are";
+			mes "your bullets. It's a pleasure";
+			mes "to do business with you~";
+			delitem 1010,.@amount; //Phracon
+			delitem 1011,.@amount; //Emveretarcon
+			delitem .@required_id,.@amount * .@required_amount;
+			getitem .@bullet_id,.@amount * 30;
+		}
+	} else {
+		mes "Huh. It looks like you";
+		mes "don't have enough materials";
+		mes "for that many bullets. Well,";
+		mes "it's no problem. Just come";
+		mes "back after gathering everything";
+		mes "that you need, okay?";
+	}
+	close;
+}
+
+que_ng,187,156,3	duplicate(bdt)	Bullet Dealer Tony#ng	86
 izlude,171,133,3	duplicate(bdt)	Bullet Dealer Tony#iz	86
 izlude,171,133,3	duplicate(bdt)	Bullet Dealer Tony#iz	86

+ 283 - 15
npc/re/merchants/ammo_boxes.txt

@@ -1,22 +1,290 @@
 //===== rAthena Script =======================================
 //===== rAthena Script =======================================
 //= Magazine Dealers
 //= Magazine Dealers
-//===== By: ==================================================
-//= Euphy
-//===== Current Version: =====================================
-//= 1.1
-//===== Compatible With: =====================================
-//= rAthena Project
 //===== Description: =========================================
 //===== Description: =========================================
 //= Turns bullets into magazines/packs.
 //= Turns bullets into magazines/packs.
-//===== Additional Comments: =================================
-//= 1.0 First version, Renewal duplicates.
-//= 1.1 Added Izlude duplicates. [Euphy]
-//= 1.2 Updated Izlude coordinates. [Euphy]
+//===== Changelogs: ==========================================
+//= 1.0 First version. [SinSloth]
+//= 1.1 Optimized version - Reduced to only one function [SinSloth]
+//= 1.2 Optimized^2, corrected npc's name [ultramage]
+//= 1.2a Optimized. Please, ommit extra NPC names [Lupus]
+//= 1.3 Updated to match AEGIS script. [Kisuka]
+//= 1.4 Updated to match AEGIS script again. [Masao]
+//= 1.5 Moved Izlude duplicate to pre-re/re paths. [Euphy]
+//= 2.0 Clean-up. [Capuche]
+//= 2.1 Fixes Issue #1482, where Rebellion jobs cannot use this npc. [Limestone]
+//= 2.2 Updated to new bullets. [Aleos]
 //============================================================
 //============================================================
 
 
+alberta,118,157,3	script	Magazine Dealer Kenny::mdk	4_M_01,{
+	mes "[Kenny]";
+	mes "Bullet bags will help you carry bullets much more easily.";
+	mes "Come take a look~";
+	next;
+	switch(select("Various Bullet Cases:Sphere Exchange:Old Sphere Exchange:Slug Exchange:Cancel")) {
+	case 1:
+		switch(select("Bullet Case:Bloody Bullet Case:Silver Bullet Case:Ammo AP Bullet Case:Ammo Blazing Bullet Case:Ammo Freezing Bullet Case:Ammo Lightning Bullet Case:Ammo Magic Stone Bullet Case:Ammo Purifying Bullet Case:Flare Bullet Case:Lightning Bullet Case:Ice Bullet Case:Poison Bullet Case:Blind Bullet Case:Cancel")) {
+			case 1: callsub S_Casing,13200,12149;
+			case 2: callsub S_Casing,13222,22737;
+			case 3: callsub S_Casing,13221,22738;
+			case 4: callsub S_Casing,13215,22744;
+			case 5: callsub S_Casing,13216,22745;
+			case 6: callsub S_Casing,13217,22746;
+			case 7: callsub S_Casing,13218,22747;
+			case 8: callsub S_Casing,13219,22748;
+			case 9: callsub S_Casing,13220,22749;
+			case 10: callsub S_Casing,13228,23123;
+			case 11: callsub S_Casing,13229,23124;
+			case 12: callsub S_Casing,13230,23125;
+			case 13: callsub S_Casing,13231,23126;
+			case 14: callsub S_Casing,13232,23127;
+			case 15: callsub S_Close;
+		}
+	case 2:
+		switch(select("Fire Bullet:Wind Bullet:Freezing Bullet:Poison Bullet:Blind Bullet:Cancel")) {
+		case 1: callsub S_Sphere_Exchange,13223,13228;
+		case 2: callsub S_Sphere_Exchange,13224,13229;
+		case 3: callsub S_Sphere_Exchange,13227,13230;
+		case 4: callsub S_Sphere_Exchange,13225,13231;
+		case 5: callsub S_Sphere_Exchange,13226,13232;
+		case 6: callsub S_Close;
+		}
+	case 3:
+		switch(select("Fire Sphere:Wind Sphere:Freezing Sphere:Poison Sphere:Blind Sphere:Cancel")) {
+		case 1: callsub S_Old_Sphere_Exchange,13203,13228;
+		case 2: callsub S_Old_Sphere_Exchange,13204,13229;
+		case 3: callsub S_Old_Sphere_Exchange,13207,13230;
+		case 4: callsub S_Old_Sphere_Exchange,13205,13231;
+		case 5: callsub S_Old_Sphere_Exchange,13206,13232;
+		case 6: callsub S_Close;
+		}
+	case 4:
+		switch(select("Slug Ammunition L:Slug Ammunition M:Slug Ammunition H:Slug Ammunition SH:Slug Ammunition XH:Cancel")) {
+		case 1: callsub S_Slug_Exchange,13210,24;
+		case 2: callsub S_Slug_Exchange,13211,12;
+		case 3: callsub S_Slug_Exchange,13212,8;
+		case 4: callsub S_Slug_Exchange,13213,6;
+		case 5: callsub S_Slug_Exchange,13214,5;
+		case 6: callsub S_Close;
+		}
+	case 5:
+		callsub S_Close;
+	}
+
+S_Casing:
+	.@bullet_id = getarg(0);
+	.@pack_id = getarg(1);
+	.@bullet_str$ = getitemname(.@bullet_id);
+	.@pack_str$ = getitemname(.@pack_id);
+	.@bullet_count = countitem(.@bullet_id);
+	.@pack_count = .@bullet_count / 500;
+
+	if (.@bullet_count < 500 || getequipid(EQI_AMMO) != -1 || BaseClass != Job_Gunslinger) {
+		mes "[Kenny]";
+		mes "Hey~ You need the exact amount of items to exchange. Go get some more.";
+		mes "You must have 500 or more of ^FF0000" + .@bullet_str$ + "^000000, ok? Also, make sure not to ^FF0000wear^000000 them if you want to exchange.";
+		close;
+	}
+
+	mes "[Kenny]";
+	mes "You've chosen ^FF0000" + .@pack_str$ + "^000000.";
+	mes "You need 500 ^3131FF" + .@bullet_str$ + "^000000 to make 1 ^3131FF" + .@bullet_str$ + "^000000 item, and it will cost ^3131FF500^000000 zeny.";
+	mes "How many do you want to exchange?";
+	next;
+	switch(select("Exchange all:Make only 1:Cancel")) {
+		case 1:
+			mes "[Kenny]";
+			mes "Bullet count: ^3131FF" + .@bullet_count;
+			mes "Combination of bullet bags: ^3131FF" + .@pack_count;
+			mes "Zeny required: ^3131FF" + .@pack_count * 500;
+			next;
+			mes "Do you want to exchange?";
+			next;
+			switch(select("Exchange:Cancel")) {
+				case 1:
+					if (Zeny < .@pack_count * 500) {
+						mes "[Kenny]";
+						mes "Hey~ You need the exact amount of Zeny to exchange. Go get some more.";
+						mes "You must have ^FF0000" + .@pack_count * 500 + "^000000, ok?";
+						close;
+					}
+					mes "[Kenny]";
+					mes "All done.";
+					mes "The bag is useless when the weight of inventory gets over 70%. Please be careful.";
+					Zeny -= .@pack_count * 500;
+					delitem .@bullet_id, .@pack_count * 500;
+					getitem .@pack_id, .@pack_count;
+					close;
+				case 2:
+					close;
+			}
+		case 2:
+			if (Zeny < 500) {
+				mes "[Kenny]";
+				mes "Hey~ You need the exact amount of Zeny to exchange. Go get some more.";
+				mes "You must have ^FF0000500^000000, ok?";
+				close;
+			}
+			mes "[Kenny]";
+			mes "All done.";
+			mes "The bag is useless when the weight of inventory gets over 70%. Please be careful.";
+			Zeny -= 500;
+			delitem .@bullet_id, 500;
+			getitem .@pack_id, 1;
+			close;
+		case 3:
+			callsub S_Close;
+	}
+
+S_Sphere_Exchange:
+	.@old_id = getarg(0);
+	.@new_id = getarg(1);
+	.@old_str$ = getitemname(.@old_id);
+	.@new_str$ = getitemname(.@new_id);
+	.@old_count = countitem(.@old_id);
+	.@new_count = .@old_count / 10;
+
+	if (.@old_count < 10 || getequipid(EQI_AMMO) != -1 || BaseClass != Job_Gunslinger) {
+		mes "[Kenny]";
+		mes "Hey~ You need the exact amount of items to exchange. Go get some more.";
+		mes "You must have 10 or more of ^FF0000" + .@old_str$ + "^000000, ok? Also, make sure not to ^FF0000wear^000000 them if you want to exchange.";
+		close;
+	}
+
+	mes "[Kenny]";
+	mes "You've chosen ^FF0000" + .@old_str$ + "^000000.";
+	mes "You need 10 ^3131FF" + .@old_str$ + "^000000 to make 1 ^3131FF" + .@new_str$ + "^000000 item.";
+	mes "How many do you want to exchange?";
+	next;
+	switch(select("Exchange all:Make only 1:Cancel")) {
+		case 1:
+			mes "[Kenny]";
+			mes .@old_str$ + " count: ^3131FF" + .@old_count;
+			mes .@new_str$ + " count: ^3131FF" + .@new_count;
+			next;
+			mes "Do you want to exchange?";
+			next;
+			switch(select("Exchange:Cancel")) {
+				case 1:
+					mes "[Kenny]";
+					mes "All done.";
+					delitem .@slug_id, .@new_count * 10;
+					getitem .@new_slug_id, .@old_count;
+					close;
+				case 2:
+					close;
+			}
+		case 2:
+			mes "[Kenny]";
+			mes "All done.";
+			delitem .@old_id, 10;
+			getitem .@new_id, 1;
+			close;
+		case 3:
+			callsub S_Close;
+	}
+
+S_Old_Sphere_Exchange:
+	.@old_id = getarg(0);
+	.@new_id = getarg(1);
+	.@old_str$ = getitemname(.@old_id);
+	.@new_str$ = getitemname(.@new_id);
+	.@old_count = countitem(.@old_id);
+
+	if (.@old_count < 1 || getequipid(EQI_AMMO) != -1 || BaseClass != Job_Gunslinger) {
+		mes "[Kenny]";
+		mes "Hey~ You need the exact amount of items to exchange. Go get some more.";
+		mes "You must have 1 or more of ^FF0000" + .@old_str$ + "^000000, ok? Also, make sure not to ^FF0000wear^000000 them if you want to exchange.";
+		close;
+	}
+
+	mes "[Kenny]";
+	mes "You've chosen ^FF0000" + .@old_str$ + "^000000.";
+	mes "You need 1 ^3131FF" + .@old_str$ + "^000000 to make 1 ^3131FF" + .@new_str$ + "^000000 item.";
+	mes "How many do you want to exchange?";
+	next;
+	switch(select("Exchange all:Make only 1:Cancel")) {
+		case 1:
+			mes "[Kenny]";
+			mes .@old_str$ + " count: ^3131FF" + .@old_count;
+			mes .@new_str$ + " count: ^3131FF" + .@old_count;
+			next;
+			mes "Do you want to exchange?";
+			next;
+			switch(select("Exchange:Cancel")) {
+				case 1:
+					mes "[Kenny]";
+					mes "All done.";
+					delitem .@slug_id, .@old_count;
+					getitem .@new_slug_id, .@old_count;
+					close;
+				case 2:
+					close;
+			}
+		case 2:
+			mes "[Kenny]";
+			mes "All done.";
+			delitem .@old_id, 1;
+			getitem .@new_id, 1;
+			close;
+		case 3:
+			callsub S_Close;
+	}
+
+S_Slug_Exchange:
+	.@slug_id = getarg(0);
+	.@req_count = getarg(1);
+	.@slug_str$ = getitemname(.@slug_id);
+	.@new_slug_str$ = getitemname(25187);
+	.@count = countitem(.@slug_id);
+	.@new_count = .@count / .@req_count;
+
+	if (.@count < .@req_count || getequipid(EQI_AMMO) != -1 || BaseClass != Job_Gunslinger) {
+		mes "[Kenny]";
+		mes "Hey~ You need the exact amount of items to exchange. Go get some more.";
+		mes "You must have " + .@req_count + " or more of ^FF0000" + .@slug_str$ + "^000000, ok? Also, make sure not to ^FF0000wear^000000 them if you want to exchange.";
+		close;
+	}
+
+	mes "[Kenny]";
+	mes "You've chosen ^FF0000" + .@slug_str$ + "^000000.";
+	mes "You need " + .@req_count + " ^3131FF" + .@slug_str$ + "^000000 to make 1 ^3131FF" + .@new_slug_str$ + "^000000 item.";
+	mes "How many do you want to exchange?";
+	next;
+	switch(select("Exchange all:Make only 1:Cancel")) {
+		case 1:
+			mes "[Kenny]";
+			mes .@slug_str$ + " count: ^3131FF" + .@count;
+			mes .@new_slug_str$ + " count: ^3131FF" + .@new_count;
+			next;
+			mes "Do you want to exchange?";
+			next;
+			switch(select("Exchange:Cancel")) {
+				case 1:
+					mes "[Kenny]";
+					mes "All done.";
+					delitem .@slug_id, .@new_count * 500;
+					getitem 25187, .@new_count;
+					close;
+				case 2:
+					close;
+			}
+		case 2:
+			mes "[Kenny]";
+			mes "All done.";
+			delitem .@slug_id, .@req_count;
+			getitem 25187, 1;
+			close;
+		case 3:
+			callsub S_Close;
+	}
+
+S_Close:
+	mes "[Kenny]";
+	mes "Okay.";
+	mes "If you need anything";
+	mes "please come back.";
+	close;
+}
+
 que_ng,187,149,3	duplicate(mdk)	Magazine Dealer Kenny#ng	83
 que_ng,187,149,3	duplicate(mdk)	Magazine Dealer Kenny#ng	83
-izlude,155,135,3	duplicate(mdk)	Magazine Dealer Kenny#iz	83
-izlude_a,155,135,3	duplicate(mdk)	Magazine Dealer Kenny#a	83
-izlude_b,155,135,3	duplicate(mdk)	Magazine Dealer Kenny#b	83
-izlude_c,155,135,3	duplicate(mdk)	Magazine Dealer Kenny#c	83
-izlude_d,155,135,3	duplicate(mdk)	Magazine Dealer Kenny#d	83
+izlude_in,74,104,5	duplicate(mdk)	Magazine Dealer Kenny#iz	83

+ 0 - 22
npc/re/merchants/ammo_dealer.txt

@@ -1,22 +0,0 @@
-//===== rAthena Script =======================================
-//= Bullet Dealers
-//===== By ===================================================
-//= Euphy
-//===== Version ==============================================
-//= 1.2
-//===== Compatible With ======================================
-//= rAthena Project
-//===== Description ==========================================
-//= Bullet trader.
-//===== Comments =============================================
-//= 1.0 First version, Renewal duplicates.
-//= 1.1 Added Izlude duplicates. [Euphy]
-//= 1.2 Updated Izlude coordinates. [Euphy]
-//============================================================
-
-que_ng,187,156,3	duplicate(bdt)	Bullet Dealer Tony#ng	86
-izlude,152,135,3	duplicate(bdt)	Bullet Dealer Tony#iz	86
-izlude_a,152,135,3	duplicate(bdt)	Bullet Dealer Tony#a	86
-izlude_b,152,135,3	duplicate(bdt)	Bullet Dealer Tony#b	86
-izlude_c,152,135,3	duplicate(bdt)	Bullet Dealer Tony#c	86
-izlude_d,152,135,3	duplicate(bdt)	Bullet Dealer Tony#d	86

+ 0 - 1
npc/re/scripts_athena.conf

@@ -88,7 +88,6 @@ npc: npc/re/merchants/3rd_trader.txt
 npc: npc/re/merchants/advanced_refiner.txt
 npc: npc/re/merchants/advanced_refiner.txt
 npc: npc/re/merchants/alchemist.txt
 npc: npc/re/merchants/alchemist.txt
 npc: npc/re/merchants/ammo_boxes.txt
 npc: npc/re/merchants/ammo_boxes.txt
-npc: npc/re/merchants/ammo_dealer.txt
 npc: npc/re/merchants/bio4_reward.txt
 npc: npc/re/merchants/bio4_reward.txt
 //npc: npc/re/merchants/blessed_refiner.txt
 //npc: npc/re/merchants/blessed_refiner.txt
 //npc: npc/re/merchants/card_exchange.txt
 //npc: npc/re/merchants/card_exchange.txt

+ 0 - 2
npc/scripts_athena.conf

@@ -130,8 +130,6 @@ npc: npc/kafras/kafras.txt
 // -------------------------- Merchant --------------------------
 // -------------------------- Merchant --------------------------
 npc: npc/merchants/advanced_refiner.txt
 npc: npc/merchants/advanced_refiner.txt
 npc: npc/merchants/alchemist.txt
 npc: npc/merchants/alchemist.txt
-npc: npc/merchants/ammo_boxes.txt
-npc: npc/merchants/ammo_dealer.txt
 npc: npc/merchants/buying_shops.txt
 npc: npc/merchants/buying_shops.txt
 //npc: npc/merchants/clothes_dyer.txt
 //npc: npc/merchants/clothes_dyer.txt
 npc: npc/merchants/coin_exchange.txt
 npc: npc/merchants/coin_exchange.txt

+ 6 - 24
src/map/battle.cpp

@@ -4309,30 +4309,12 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 		case RL_S_STORM:
 		case RL_S_STORM:
 			skillratio += -100 + 1700 + 200 * skill_lv;
 			skillratio += -100 + 1700 + 200 * skill_lv;
 			break;
 			break;
-		case RL_SLUGSHOT: {
-				uint16 w = 0;
-
-				if (sd) {
-					unsigned short slug[] = { ITEMID_SLUG_AMMUNITION_XH, ITEMID_SLUG_AMMUNITION_SH, ITEMID_SLUG_AMMUNITION_H, ITEMID_SLUG_AMMUNITION_M, ITEMID_SLUG_AMMUNITION_L }; // In order of priority
-					int16 index = -1;
-
-					for (i = 0; i < ARRAYLENGTH(slug); i++) {
-						if ((index = pc_search_inventory(sd, slug[i])) >= 0) {
-							w = (sd->inventory_data[index]->weight / 10) * 32;
-							break;
-						}
-					}
-				}
-				if (target->type != BL_PC) // Monster
-					skillratio += -100 + 1200 * skill_lv;
-				else // Player
-					skillratio += -100 + 2000 * skill_lv;
-				switch(tstatus->size) {
-					case SZ_SMALL: skillratio += w * 2; break;
-					case SZ_MEDIUM: skillratio += w * 3; break;
-					case SZ_BIG: skillratio += w * 4; break;
-				}
-			}
+		case RL_SLUGSHOT:
+			if (target->type == BL_PC)
+				skillratio += -100 + 1200 * skill_lv;
+			else
+				skillratio += -100 + 2000 * skill_lv;
+			skillratio *= 2 + tstatus->size;
 			break;
 			break;
 		case RL_D_TAIL:
 		case RL_D_TAIL:
 			skillratio += -100 + 4000 + 1000 * skill_lv;
 			skillratio += -100 + 4000 + 1000 * skill_lv;

+ 0 - 5
src/map/itemdb.hpp

@@ -106,11 +106,6 @@ enum item_itemid
 	ITEMID_REINS_OF_MOUNT				= 12622,
 	ITEMID_REINS_OF_MOUNT				= 12622,
 	ITEMID_NOBLE_NAMEPLATE				= 12705,
 	ITEMID_NOBLE_NAMEPLATE				= 12705,
 	ITEMID_SILVER_BULLET				= 13201,
 	ITEMID_SILVER_BULLET				= 13201,
-	ITEMID_SLUG_AMMUNITION_L			= 13210,
-	ITEMID_SLUG_AMMUNITION_M			= 13211,
-	ITEMID_SLUG_AMMUNITION_H			= 13212,
-	ITEMID_SLUG_AMMUNITION_SH			= 13213,
-	ITEMID_SLUG_AMMUNITION_XH			= 13214,
 	ITEMID_PURIFICATION_BULLET			= 13220,
 	ITEMID_PURIFICATION_BULLET			= 13220,
 	ITEMID_SILVER_BULLET_				= 13221,
 	ITEMID_SILVER_BULLET_				= 13221,
 	ITEMID_DUN_TELE_SCROLL1				= 14527,
 	ITEMID_DUN_TELE_SCROLL1				= 14527,

+ 2 - 12
src/map/skill.cpp

@@ -16064,17 +16064,10 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
 				clif_skill_fail(sd,skill_id,USESKILL_FAIL_PAINTBRUSH,0); //Paint brush is required.
 				clif_skill_fail(sd,skill_id,USESKILL_FAIL_PAINTBRUSH,0); //Paint brush is required.
 			else if( require.itemid[i] == ITEMID_ANCILLA )
 			else if( require.itemid[i] == ITEMID_ANCILLA )
 				clif_skill_fail(sd,skill_id,USESKILL_FAIL_ANCILLA,0); //Ancilla is required.
 				clif_skill_fail(sd,skill_id,USESKILL_FAIL_ANCILLA,0); //Ancilla is required.
-			else if(skill_id == RL_SLUGSHOT) {
-				if (i < MAX_SKILL_ITEM_REQUIRE - 1) // Check all Slug types
-					continue;
-				else
-					clif_skill_fail(sd, RL_SLUGSHOT, USESKILL_FAIL_NEED_MORE_BULLET, 0); // Bullet is required.
-			} else {
+			else
 				clif_skill_fail( sd, skill_id, USESKILL_FAIL_NEED_ITEM, ( require.itemid[i] << 16 ) | require.amount[i] ); // [%s] required '%d' amount.
 				clif_skill_fail( sd, skill_id, USESKILL_FAIL_NEED_ITEM, ( require.itemid[i] << 16 ) | require.amount[i] ); // [%s] required '%d' amount.
-			}
 			return false;
 			return false;
-		} else if (skill_id == RL_SLUGSHOT) // Slug found - simulate priority and cancel the loop
-			break;
+		}
 	}
 	}
 
 
 	/* check the status required */
 	/* check the status required */
@@ -16182,9 +16175,6 @@ void skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uin
 
 
 			if( (n = pc_search_inventory(sd,require.itemid[i])) >= 0 )
 			if( (n = pc_search_inventory(sd,require.itemid[i])) >= 0 )
 				pc_delitem(sd,n,require.amount[i],0,1,LOG_TYPE_CONSUME);
 				pc_delitem(sd,n,require.amount[i],0,1,LOG_TYPE_CONSUME);
-
-			if (skill_id == RL_SLUGSHOT && n > -1) // Slug found - simulate priority and cancel the loop
-				break;
 		}
 		}
 	}
 	}
 }
 }