浏览代码

Updated Rebellion class (#1692)

* Updated Rebellion class
* Information based on Rebellion Awakening patch from kRO.
- http://ro.gnjoy.com/news/update/View.asp?seq=183&curpage=1
* Fixes #859 and fixes #1449.
Thanks to @RagnarokNova and Fyrus for their information!
Aleos 7 年之前
父节点
当前提交
6a2c1229d0

+ 1 - 1
db/pre-re/job_db1.txt

@@ -280,7 +280,7 @@
 // Oboro
 4212,	26000,80   ,  0  ,540  ,400  ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 750 ,2000
 // Rebellion
-4215,	28000,89   ,  0  ,469  ,500  ,2000, 2000, 2000, 2000, 2000, 2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 700 , 750 , 700 ,1500 ,1500 ,2000 ,2000
+4215,	28000,90   ,650  ,469  ,540  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480  ,610  ,540  ,940  ,1040 ,2000 ,2000
 // Summoner - Placeholder
 4218,	20000,0    ,500  ,100  ,500  ,650  ,700  ,2000 ,2000 ,2000 ,800  ,2000 ,700  ,700  ,650  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 650
 // Baby Summoner - Placeholder

+ 16 - 16
db/pre-re/skill_cast_db.txt

@@ -1638,43 +1638,43 @@
 //-- RL_RICHS_COIN
 2552,0,1000,0,600000,0,3000
 //-- RL_MASS_SPIRAL
-2553,1000,1000,0,0,30000,10000
+2553,2000,1000,0,0,30000,2000
 //-- RL_BANISHING_BUSTER
-2554,3000:2500:2000:1500:1000,0,0,0,0,10000
+2554,3000:2500:2000:1500:1000,2000,0,0,0,10000
 //-- RL_B_TRAP
-2555,0,0,0,10000:11000:12000:13000:14000,6000:7000:8000:9000:10000,0
+2555,0,2500:2000:1500:1000:500,0,10000,9000:14000:19000:24000:29000,10000
 //-- RL_FLICKER
 2556,0,0,0,0,0,10000
 //-- RL_S_STORM
-2557,3000:2500:2000:1500:1000,0,0,0,0,2000
+2557,3000:2500:2000:1500:1000,2000,0,0,0,2000
 //-- RL_E_CHAIN
-2558,0,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,5000
+2558,1000,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,0
 //-- RL_QD_SHOT
-2559,0,1000,0,1500,0,5000
+2559,0,0,0,1500,0,0
 //-- RL_C_MARKER
 2560,0,0,0,30000,0,1000
 //-- RL_FIREDANCE
-2561,0,2000,0,0,0,5000
+2561,0,500,0,0,0,5000
 //-- RL_H_MINE
-2562,1500,0,0,30000,15000,5000:4500:4000:3500:3000
+2562,1000,1000,0,50000,15000,5000:4500:4000:3500:3000
 //-- RL_P_ALTER
-2563,0,1000,0,30000:45000:60000:75000:90000,0,5000
+2563,0,0,0,30000:45000:60000:75000:90000,0,0
 //-- RL_FALLEN_ANGEL
-2564,500,1500,0,0,0,10000:8000:6000:4000:2000
+2564,0,0,0,2000,0,0
 //-- RL_R_TRIP
-2565,0,1000,0,0,0,1000
+2565,0,1000,0,0,0,3000:2500:2000:1500:1000
 //-- RL_D_TAIL
-2566,500,2000,0,0,0,5000
+2566,1200:1400:1600:1800:2000,2000,0,0,0,5000
 //-- RL_FIRE_RAIN
-2567,1800:1600:1400:1200:1000,2000,0,100,0,5000
+2567,0,1000,0,100,0,5000
 //-- RL_HEAT_BARREL
-2568,0,1000,0,60000,10000,10000
+2568,2000,1000,0,60000,0,100000:95000:90000:85000:80000
 //-- RL_AM_BLAST
 2569,2000,1000,0,0,6000:7000:8000:9000:10000,5000
 //-- RL_SLUGSHOT
-2570,5000:6000:7000:8000:9000,1000,0,0,2000,10000
+2570,5000:6000:7000:8000:9000,1000,0,0,2000,5000
 //-- RL_HAMMER_OF_GOD
-2571,8000,2000,0,0,3000:3000:4000:4000:5000,30000
+2571,0,2000,0,0,3000:3000:4000:4000:5000,30000
 //-- RL_R_TRIP_PLUSATK
 //2572,0,0,0,0,0,0
 //-- RL_B_FLICKER_ATK

+ 15 - 15
db/pre-re/skill_db.txt

@@ -1269,25 +1269,25 @@
 // Rebellion
 //2551,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0,	RL_GLITTERING_GREED,Flip The Coin Greed
 2552,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0,	RL_RICHS_COIN,Rich's Coin
-2553,15,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_MASS_SPIRAL,Mass Spiral
-2554,9,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x10020,	RL_BANISHING_BUSTER,Banishing Buster
-2555,3,6,2,0,0x1,1,5,1,no,0,0,3,misc,0,0x0,	RL_B_TRAP,Bind Trap
+2553,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_MASS_SPIRAL,Mass Spiral
+2554,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x10020,	RL_BANISHING_BUSTER,Banishing Buster
+2555,3:4:4:5:5,6,2,0,0x1,1,5,1,no,0,0,1,misc,0,0x0,	RL_B_TRAP,Bind Trap
 2556,0,6,4,0,0x3,-1,1,1,no,0,0,0,none,0,0x0,	RL_FLICKER,Flicker
-2557,9,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_S_STORM,Shatter Storm
+2557,-9,6,1,-1,0x2,2:2:2:2:3,5,1,no,0,0,0,weapon,0,0x0,	RL_S_STORM,Shatter Storm
 2558,0,6,4,0,0x1,0,10,1,no,0,0,0,none,0,0x0,	RL_E_CHAIN,Eternal Chain
-2559,-9,6,4,-1,0x3,21,1,1,no,0,0x0,0,weapon,0,0x0,	RL_QD_SHOT,Quick Draw Shot
-2560,11,6,1,0,0x1,0,1,1,no,0,0,3,none,0,0x0,	RL_C_MARKER,Crimson Marker
-2561,0,6,4,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_FIREDANCE,Fire Dance
-2562,7:8:9:10:11,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_H_MINE,Howling Mine
+2559,-9,6,4,-1,0x0,10,1,1,no,0,0x0,0,weapon,0,0x0,	RL_QD_SHOT,Quick Draw Shot
+2560,-9,6,1,0,0x1,0,1,1,no,0,0,3,none,0,0x0,	RL_C_MARKER,Crimson Marker
+2561,5,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0,	RL_FIREDANCE,Fire Dance
+2562,-9,6,1,-1,0x0,2,5,1,no,0,0,0,weapon,0,0x0,	RL_H_MINE,Howling Mine
 2563,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_P_ALTER,Platinum Alter
-2564,9,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_FALLEN_ANGEL,Fallen Angel
-2565,0,6,4,-1,0x2,3:3:4:5:6,5,1,no,0,0,0,weapon,3,0x0,	RL_R_TRIP,Round Trip
-2566,0,6,4,-1,0x3,-1,5,1,no,0,0,0,weapon,0,0x0,	RL_D_TAIL,Dragon Tail
-2567,9,6,2,-1,0x2,1,5,1,no,0,0,0,weapon,0,0,	RL_FIRE_RAIN,Fire Rain
+2564,-9,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_FALLEN_ANGEL,Fallen Angel
+2565,5,6,4,-1,0x2,3:3:4:5:6,5,1,no,0,0,0,weapon,3,0x0,	RL_R_TRIP,Round Trip
+2566,5,6,4,-1,0x3,-1,5,1,no,0,0,0,weapon,0,0x0,	RL_D_TAIL,Dragon Tail
+2567,2,6,2,-1,0x2,1,5,1,no,0,0,0,weapon,0,0,	RL_FIRE_RAIN,Fire Rain
 2568,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_HEAT_BARREL,Heat Barrel
-2569,9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_AM_BLAST,Anti-Material Blast
-2570,9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_SLUGSHOT,Slug Shot
-2571,7:8:9:10:11,6,2,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_HAMMER_OF_GOD,Hammer of God
+2569,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_AM_BLAST,Anti-Material Blast
+2570,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,6,0x0,	RL_SLUGSHOT,Slug Shot
+2571,-9,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_HAMMER_OF_GOD,Hammer of God
 2572,0,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0,	RL_R_TRIP_PLUSATK,Round Trip Plus Attack
 //2573,0,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0,	RL_B_FLICKER_ATK,Bind Flicker Attack
 //2574,0,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0,	RL_GLITTERING_GREED_ATK,Flip The Coin Greed Attack

+ 20 - 20
db/pre-re/skill_require_db.txt

@@ -888,26 +888,26 @@
 //****
 // Rebellion
 //2551,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_GLITTERING_GREED
-2552,0,0,10,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_RICHS_COIN
-2553,0,0,80:84:88:92:96,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_MASS_SPIRAL
-2554,0,0,55:60:65:70:75,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_BANISHING_BUSTER
-2555,0,0,30:32:34:36:38,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_TRAP
-2556,0,0,2,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_FLICKER
-2557,0,0,55:60:65:70:75,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_S_STORM
-2558,0,0,45,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_E_CHAIN
-2559,0,0,5,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_QD_SHOT
-2560,0,0,10,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_C_MARKER
-2561,0,0,10:15:20:25:30,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_FIREDANCE
-2562,0,0,45:50:55:60:65,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_H_MINE
-2563,0,0,20:24:28:32:36,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_P_ALTER
-2564,0,0,90,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_FALLEN_ANGEL
-2565,0,0,40:45:50:55:60,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
-2566,0,0,60:70:80:90:100,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_D_TAIL
-2567,0,0,70,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_FIRE_RAIN
-2568,0,0,30:40:50:60:70,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_HEAT_BARREL
-2569,0,0,80:84:88:92:96,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_AM_BLAST
-2570,0,0,55:60:65:70:75,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_SLUGSHOT
-2571,0,0,70:80:90:100:110,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_HAMMER_OF_GOD
+2552,0,0,10,0,0,100,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_RICHS_COIN
+2553,0,0,40:44:48:52:56,0,0,0,18,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					//RL_MASS_SPIRAL
+2554,0,0,55:60:65:70:75,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					//RL_BANISHING_BUSTER
+2555,0,0,30:32:34:36:38,0,0,0,17:18:19:20:21,0,0,none,0,1,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RL_B_TRAP
+2556,0,0,2,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_FLICKER
+2557,0,0,50:55:60:65:70,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					//RL_S_STORM
+2558,0,0,45,0,0,0,17:18:19:20:21,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_E_CHAIN
+2559,0,0,5,0,0,0,17:18:19:20:21,3:4:5,1,none,SC_QD_SHOT_READY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RL_QD_SHOT
+2560,0,0,10,0,0,0,17:18:19:20:21,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_C_MARKER
+2561,0,0,12:14:16:18:20,0,0,0,17,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					//RL_FIREDANCE
+2562,0,0,45:50:55:60:65,0,0,0,21,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_H_MINE
+2563,0,0,20:24:28:32:36,0,0,0,99,3,1,none,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13201				//RL_P_ALTER
+2564,0,0,10,0,0,0,17,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_FALLEN_ANGEL
+2565,0,0,40:45:50:55:60,0,0,0,19,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					//RL_R_TRIP
+2566,0,0,60:70:80:90:100,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				//RL_D_TAIL
+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
+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,0,0,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
 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
 //2574,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_GLITTERING_GREED_ATK

+ 17 - 17
db/pre-re/skill_tree.txt

@@ -5627,11 +5627,11 @@
 4215,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
 4215,500,5,0,0,0,0,0,0,0,0,0,0 //GS_GLITTERING#Flip the Coin#
 4215,501,1,500,1,0,0,0,0,0,0,0,0 //GS_FLING#Fling#
-4215,502,1,500,1,511,10,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
-4215,503,1,500,5,512,10,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
-4215,504,1,500,4,517,10,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
-4215,505,1,500,4,513,5,0,0,0,0,0,0 //GS_ADJUSTMENT#AdJustment#
-4215,506,1,500,2,510,10,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
+4215,502,1,500,1,0,0,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
+4215,503,1,500,5,0,0,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
+4215,504,1,500,4,0,0,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
+4215,505,1,500,4,0,0,0,0,0,0,0,0 //GS_ADJUSTMENT#Adjustment#
+4215,506,1,500,2,0,0,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
 4215,507,1,500,1,0,0,0,0,0,0,0,0 //GS_MAGICALBULLET#Magical Bullet#
 4215,508,1,500,1,0,0,0,0,0,0,0,0 //GS_CRACKER#Cracker#
 4215,509,10,0,0,0,0,0,0,0,0,0,0 //GS_SINGLEACTION#Single Action#
@@ -5645,26 +5645,26 @@
 4215,517,10,515,7,516,5,0,0,0,0,0,0 //GS_GATLINGFEVER#Gatling Fever#
 4215,518,10,509,5,0,0,0,0,0,0,0,0 //GS_DUST#Dust#
 4215,519,10,518,3,0,0,0,0,0,0,0,0 //GS_FULLBUSTER#Full Buster#
-4215,520,10,519,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
+4215,520,10,509,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
 4215,521,10,520,7,0,0,0,0,0,0,0,0 //GS_GROUNDDRIFT#Ground Drift#
 4215,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 4215,2552,1,500,5,0,0,0,0,0,0,0,0 //RL_RICHS_COIN#Rich's Coin#
 4215,2553,5,514,1,0,0,0,0,0,0,0,0 //RL_MASS_SPIRAL#Mass Spiral#
 4215,2554,5,2557,1,0,0,0,0,0,0,0,0 //RL_BANISHING_BUSTER#Banishing Buster#
-4215,2555,5,0,0,0,0,0,0,0,0,0,0 //RL_B_TRAP#Bind Trap#
-4215,2556,1,501,1,0,0,0,0,0,0,0,0 //RL_FLICKER#Flicker#
+4215,2555,5,2556,1,0,0,0,0,0,0,0,0 //RL_B_TRAP#Bind Trap#
+4215,2556,1,500,1,0,0,0,0,0,0,0,0 //RL_FLICKER#Flicker#
 4215,2557,5,513,1,518,1,0,0,0,0,0,0 //RL_S_STORM#Shatter Storm#
-4215,2558,10,511,10,0,0,0,0,0,0,0,0 //RL_E_CHAIN#Eternal Chain#
-4215,2559,1,2558,1,0,0,0,0,0,0,0,0 //RL_QD_SHOT#Quick Draw Shot#
-4215,2560,1,506,1,0,0,0,0,0,0,0,0 //RL_C_MARKER#Crimson Marker#
-4215,2561,5,2564,1,0,0,0,0,0,0,0,0 //RL_FIREDANCE#Fire Dance#
-4215,2562,5,520,1,0,0,0,0,0,0,0,0 //RL_H_MINE#Howling Mine#
-4215,2563,5,0,0,0,0,0,0,0,0,0,0 //RL_P_ALTER#Platinum Alter#
-4215,2564,5,516,10,0,0,0,0,0,0,0,0 //RL_FALLEN_ANGEL#Fallen Angel#
+4215,2558,10,500,1,511,10,0,0,0,0,0,0 //RL_E_CHAIN#Eternal Chain#
+4215,2559,1,511,1,0,0,0,0,0,0,0,0 //RL_QD_SHOT#Quick Draw Shot#
+4215,2560,1,500,1,0,0,0,0,0,0,0,0 //RL_C_MARKER#Crimson Marker#
+4215,2561,5,516,1,0,0,0,0,0,0,0,0 //RL_FIREDANCE#Fire Dance#
+4215,2562,5,521,1,0,0,0,0,0,0,0,0 //RL_H_MINE#Howling Mine#
+4215,2563,5,2552,1,0,0,0,0,0,0,0,0 //RL_P_ALTER#Platinum Alter#
+4215,2564,1,516,10,0,0,0,0,0,0,0,0 //RL_FALLEN_ANGEL#Fallen Angel#
 4215,2565,5,2567,1,0,0,0,0,0,0,0,0 //RL_R_TRIP#Round Trip#
 4215,2566,5,2560,1,2562,3,0,0,0,0,0,0 //RL_D_TAIL#Dragon Tail#
 4215,2567,5,517,1,0,0,0,0,0,0,0,0 //RL_FIRE_RAIN#Fire Rain#
-4215,2568,5,2561,2,0,0,0,0,0,0,0,0 //RL_HEAT_BARREL#Heat Barrel#
+4215,2568,5,2552,1,0,0,0,0,0,0,0,0 //RL_HEAT_BARREL#Heat Barrel#
 4215,2569,5,2553,1,0,0,0,0,0,0,0,0 //RL_AM_BLAST#Anti-Material Blast#
 4215,2570,5,2554,3,0,0,0,0,0,0,0,0 //RL_SLUGSHOT#Slug Shot#
-4215,2571,5,2569,3,0,0,0,0,0,0,0,0 //RL_HAMMER_OF_GOD#Hammer of God#
+4215,2571,5,2552,1,2569,3,0,0,0,0,0,0 //RL_HAMMER_OF_GOD#Hammer of God#

+ 15 - 10
db/re/item_db.txt

@@ -4707,8 +4707,8 @@
 6743,HPStone_Middle,HP Stone(Middle),6,10,,100,,,,,,,,,,,,,{ bonus bMaxHPrate,1; },{},{}
 6744,SPStone_Middle,SP Stone(Middle),6,10,,100,,,,,,,,,,,,,{ bonus bMaxSPrate,1; },{},{}
 6745,HealStone_Bottom,Recovery Stone(Low),6,20,,10,,,,,,,,,,,,,{ bonus bSPGainValue,1; bonus bMagicHPGainValue,1; },{},{}
-6746,Iron_Artifacts,Iron Artifacts,3,10,,0,,,,,,,,,,,,,{},{},{}
-6747,Steel_Workpiece,Steel Workpiece,3,10,,0,,,,,,,,,,,,,{},{},{}
+6746,Iron_Artifacts,Steel Artifact,3,10,,0,,,,,,,,,,,,,{},{},{}
+6747,Iron_Artifacts_,Steel Artifact,3,10,,0,,,,,,,,,,,,,{},{},{}
 6748,Daily_Report_He_And_His_Team,Daily Report He And His Team,3,10,,0,,,,,,,,,,,,,{},{},{}
 6749,Operation_Control_Device,Operation Control Device,3,10,,0,,,,,,,,,,,,,{},{},{}
 6750,Failed_Engine,Failed Engine,3,10,,10,,,,,,,,,,,,,{},{},{}
@@ -5535,7 +5535,7 @@
 7649,Big_Luk_Bookmark,Big Luk Bookmark,3,20,,10,,,,,,,,,,,,,{},{},{}
 7651,Mystery_Egg,Mystery Egg,3,10,,10,,,,,,,,,,,,,{},{},{}
 7663,Full_Metal_Jacket,Full Metal Jacket,10,200,,2,10,,,,0x41000000,63,2,32768,,1,,3,{},{},{}
-7664,Projection_Landmines,Projection Landmines,10,450,,3,10,,,,0x41000000,63,2,32768,,1,,5,{},{},{}
+7664,Mine_Projectile,Grenade Launcher,10,450,,3,10,,,,0x41000000,63,2,32768,,1,,5,{},{},{}
 7665,Dragon_Tail_Missile,Dragon Tail Missile,10,1500,,100,10,,,,0x41000000,63,2,32768,,1,,5,{},{},{}
 7666,TimeTravel_Scroll,Time Travel Scroll,3,20,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
 7667,Abandoned_Machine,Abandoned Machine,3,20,,0,,,,,0xFFFFFFFF,63,2,,,,,,{},{},{}
@@ -7247,11 +7247,11 @@
 13115,Upg_Revolver,Upg Revolver,5,20,,500,35,,7,1,0x41000000,63,2,34,3,1,1,17,{ .@r = getrefine(); bonus bBaseAtk,(.@r*5); bonus bLongAtkRate,(.@r*2); if(BaseLevel>70) bonus bBaseAtk,(((BaseLevel-70)/10)*5); },{},{}
 13116,Novice_Revolver,Novice Revolver,5,0,,500,20,,7,0,0x41000000,63,2,34,1,1,0,17,{ bonus bHit,-5; },{},{}
 13117,TE_Woe_Pistol,TE Woe Pistol,5,0,,0,60,,7,0,0x41000000,63,2,34,3,40,1,17,{ bonus2 bAddRace,RC_Player,40; bonus2 bAddEff,Eff_Curse,3000; },{},{}
-13118,Tiny_Flame,Spark Light,5,1,,100,0,,9,0,0x41000000,63,2,34,1,1,1,17,{},{},{}
-13119,Freedom_Flame,Spark Of Freedom,5,1,,100,100,,9,2,0x41000000,63,2,34,3,99,1,17,{},{},{}
-13120,H_FEATHER_H_FIRE,Heaven's Feather & Hell's Fire,5,1250000,,800,150,,9,1,0x41000000,63,2,34,3,99,1,17,{ bonus2 bSkillAtk,"GS_DESPERADO",20; bonus2 bSkillAtk,"RL_FALLEN_ANGEL",20; },{},{}
-13122,ALTAIR_ARES,Altea & Ares,5,1450000,,1000,200,,9,0,0x40000000,63,2,34,3,140,1,17,{ bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30; },{},{}
-13124,ALTAIR_ARES_,Altea & Ares,5,1450000,,1000,200,,9,1,0x40000000,63,2,34,3,140,1,17,{ bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30; },{},{}
+13118,Tiny_Flame,Fading Flame,5,1,,100,0,,7,0,0x01000000,63,2,34,1,1,1,17,{},{},{}
+13119,Freedom_Flame,Freedom Flame,5,1,,100,100,,7,2,0x01000000,63,2,34,3,99,1,17,{},{},{}
+13120,Heaven's_Feather_and_Hell's_Fire,Heaven's Feather & Hell's Fire,5,1250000,,800,150,,9,1,0x41000000,63,2,34,3,99,1,17,{ bonus2 bSkillAtk,"GS_DESPERADO",20; bonus2 bSkillAtk,"RL_FALLEN_ANGEL",20; },{},{}
+13122,Altea_and_Ares,Altea & Ares,5,1450000,,1000,200,,9,0,0x40000000,63,2,34,3,140,1,17,{ bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30; },{},{}
+13124,Altea_and_Ares_,Altea & Ares,5,1450000,,1000,200,,9,1,0x40000000,63,2,34,3,140,1,17,{ bonus bHit,5; bonus bDelayrate,10; bonus bLongAtkRate,30; },{},{}
 13125,Metal_Revolver,Metal Revolver,5,0,,0,30,,7,1,0x41000000,63,2,34,3,1,0,17,{ bonus bBaseAtk,getrefine(); bonus bLongAtkRate,1; if (BaseLevel >= 20 && BaseLevel <= 120) { bonus bBaseAtk,3*(BaseLevel/10); } },{},{}
 13126,Infinity_Pistol,Infinity Pistol,5,10,,500,175,,7,1,0x40000000,63,2,34,4,100,0,17,{},{},{}
 13127,Crimson_Revolver,Crimson Revolver,5,20,,1000,100,,7,2,0x41000000,63,2,34,3,70,1,17,{ .@r = getrefine(); bonus bBaseAtk,((BaseLevel/10)*5)+(.@r<=15?pow(.@r,2):225); },{},{}
@@ -7320,8 +7320,8 @@
 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,1,,1000,30,,,,0x41000000,63,2,32768,,1,,3,{},{},{}
-13214,Slug_Bullet_5,Slug Ammunition XH,10,1,,1200,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; },{},{}
@@ -7335,6 +7335,11 @@
 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; },{},{}
+13228,Flare_Bullet,Flare Bullet,10,1,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Fire; },{},{}
+13229,Lightning_Bullet,Lightning Bullet,10,1,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Wind; },{},{}
+13230,Ice_Bullet,Ice Bullet,10,1,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Water; },{},{}
+13231,Poison_Bullet,Poison Bullet,10,1,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Poison; },{},{}
+13232,Blind_Bullet,Blind Bullet,10,1,,2,20,,,,0x41000000,63,2,32768,,1,,3,{ bonus bAtkEle,Ele_Dark; },{},{}
 //===================================================================
 // Shurikens & Kunais
 //===================================================================

文件差异内容过多而无法显示
+ 0 - 0
db/re/job_basehpsp_db.txt


+ 1 - 1
db/re/job_db1.txt

@@ -270,7 +270,7 @@
 // Oboro
 4212,	26000,75   ,500  ,540  ,400  ,500  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 , 750 ,2000 ,500
 // Rebellion
-4215,   28000,90   ,650  ,469  ,540  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,520  ,620  ,570  ,970  ,1070 ,2000 ,2000 ,600
+4215,	28000,90   ,650  ,469  ,540  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,480  ,610  ,540  ,940  ,1040 ,2000 ,2000 ,600
 // Summoner
 4218,	20000,70   ,500  ,500  ,490  ,570  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590  ,2000 ,2000 ,2000 ,2000 ,470  ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,2000 ,590  ,590
 // Baby Summoner

+ 8 - 8
db/re/job_exp.txt

@@ -13,12 +13,12 @@
 //Base - Adv Jobs
 99,4001:4002:4003:4004:4005:4006:4007:4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,0,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,93800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,99999999
 
-//Base - 3rd Jobs, Baby 3rds, Summoner
+//Base - 3rd Jobs, Baby 3rds, Oboro/Kagerou, Rebellion, & Summoner
 //Note: (First 98 values [Level 1 - 98] are only used by Summoner Class, because 3rd classes start at level 99.)
-175,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112:4218:4220,0,55,90,150,220,320,380,420,455,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1800,2100,2400,2700,3000,3300,3600,3900,4200,4500,5400,6300,7200,8100,9000,9900,10800,11700,12600,13500,16200,18900,21600,24300,27000,29700,32400,35100,37800,40500,43200,45900,48600,51300,54000,56700,59400,62100,64800,67500,75600,83700,91800,99900,108000,116100,124200,132300,140400,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12200000,12930000,13150000,14030000,14420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000,98000000,103000000,107000000,112000000,116000000,121000000,125000000,130000000,134000000,139000000,145000000,152200000,160840000,171200000,191930000,202290000,214720000,229640000,247550000,283370000,301280000,322770000,348560000,379500000,441390000,99999999
+175,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112:4211:4212:4215:4218:4220:4223:4224:4229,0,55,90,150,220,320,380,420,455,500,600,700,800,900,1000,1100,1200,1300,1400,1500,1800,2100,2400,2700,3000,3300,3600,3900,4200,4500,5400,6300,7200,8100,9000,9900,10800,11700,12600,13500,16200,18900,21600,24300,27000,29700,32400,35100,37800,40500,43200,45900,48600,51300,54000,56700,59400,62100,64800,67500,75600,83700,91800,99900,108000,116100,124200,132300,140400,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12200000,12930000,13150000,14030000,14420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000,98000000,103000000,107000000,112000000,116000000,121000000,125000000,130000000,134000000,139000000,145000000,152200000,160840000,171200000,191930000,202290000,214720000,229640000,247550000,283370000,301280000,322770000,348560000,379500000,441390000,99999999
 
-//Base - Expanded Super Novice, Expanded Super Baby, Oboro/Kagerou, & Rebellion
-160,4190:4191:4211:4212:4215:4223:4224:4229,0,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,93800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12200000,12930000,13150000,14030000,14420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000,98000000,103000000,107000000,112000000,116000000,121000000,125000000,130000000,134000000,139000000,145000000,152200000,160840000,171200000,191930000,202290000,214720000,229640000,247550000,283370000,301280000,322770000,348560000,379500000,441390000,99999999
+//Base - Expanded Super Novice & Expanded Super Baby
+160,4190:4191,0,660,1080,1800,2640,3840,4560,5040,5460,6000,6600,7200,7320,7620,8040,8820,9600,10080,10560,11040,12610,13390,14300,15340,16900,18460,19500,20800,22100,23400,24700,26000,27300,28600,30160,31200,33800,35750,37700,39000,44100,46200,47600,50400,52500,53200,56000,58800,62300,65800,68600,71400,74200,77000,79800,82600,86100,88200,91000,93800,103500,105000,109500,115500,120000,126000,132000,136500,142500,165000,192000,210000,232500,244500,255000,270000,282000,292500,300000,345000,416000,480000,560000,640000,768000,880000,960000,1088000,1200000,1440000,1700000,2040000,2550000,3060000,3570000,4080000,4760000,5610000,6800000,7070000,7400000,7770000,8150000,8550000,9100000,9610000,10150000,10570000,11180000,12000000,12200000,12930000,13150000,14030000,14420000,15420000,15670000,16870000,17140000,18720000,19020000,20590000,20930000,22690000,23310000,25290000,26020000,27860000,28535000,30990000,31680000,33560000,34942000,36372000,38350000,39890000,41545000,43330000,45400000,48100000,50410000,53370000,56250000,59230000,62590000,66120000,70200000,75330000,81100000,95000000,98000000,103000000,107000000,112000000,116000000,121000000,125000000,130000000,134000000,139000000,145000000,152200000,160840000,171200000,191930000,202290000,214720000,229640000,247550000,283370000,301280000,322770000,348560000,379500000,441390000,99999999
 
 //Job - Novice & Baby Novice
 10,0:4023,1,10,18,28,40,91,151,205,268,340,999999999
@@ -38,11 +38,11 @@
 //Job - Adv Second Classes
 70,4008:4009:4010:4011:4012:4013:4014:4015:4016:4017:4018:4019:4020:4021:4022,1,3800,6200,10400,15200,22900,27100,30000,32500,35700,41300,45000,45800,47600,50300,58700,63900,67100,70300,73500,90600,96200,102700,110200,121400,144700,152900,163100,173300,183500,213500,224700,236000,247200,260700,299800,324800,343600,362300,374800,474400,497000,512100,542200,564800,644300,678200,712100,754500,796900,873100,911900,950600,989400,1028100,1143300,1199900,1233800,1279100,1324300,1486900,1515900,1603000,1719200,1806300,2040300,2244300,2415900,2746000,3326000,999999999
 
-//Job - 3rd Jobs & Baby 3rds
-60,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112,1,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,131668000,145518000,160753000,177511000,195944000,216220000,238523000,263056000,290042000,319726000,999999999
+//Job - 3rd Jobs & Baby 3rds, Oboro/Kagerou, & Rebellion
+60,4054:4055:4056:4057:4058:4059:4060:4061:4062:4063:4064:4065:4066:4067:4068:4069:4070:4071:4072:4073:4074:4075:4076:4077:4078:4079:4080:4081:4082:4083:4084:4085:4086:4087:4096:4097:4098:4099:4100:4101:4102:4103:4104:4105:4106:4107:4108:4109:4110:4111:4112:4211:4212:4215:4223:4224:4229,1,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,131668000,145518000,160753000,177511000,195944000,216220000,238523000,263056000,290042000,319726000,999999999
 
-//Job - Expanded Super Novice, Expanded Super Baby, Oboro/Kagerou, & Rebellion
-50,4190:4191:4211:4212:4215:4223:4224:4229,1,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,999999999
+//Job - Expanded Super Novice & Expanded Super Baby
+50,4190:4191,1,112000,355000,615000,917000,1253000,1595000,2007000,2430000,2868000,3420000,3863000,4504000,4998000,5769000,6321000,7254000,7870000,9015000,9530000,11072000,11848000,13467000,14337000,16243000,17216000,19446000,20781000,23070000,24453000,27568000,29118000,31820000,34125000,37048000,40204000,42972000,45937000,49110000,52696000,57158000,61305000,67167000,72285000,77647000,83624000,91113000,98548000,107630000,119077000,999999999
 
 //Job - Ninja/Gunslinger
 70,24:25:4222:4228,1,200,300,400,600,700,1000,1200,1400,1700,1900,2400,2700,3200,3600,4200,4900,5500,6100,6900,7700,8400,9300,10100,11100,12100,13000,14600,16100,17500,18600,21500,23300,24700,27000,29000,30000,32400,35000,38100,41100,44000,46700,49600,52500,55600,58900,62700,65500,69200,72300,81200,84100,89300,95500,100900,107800,114900,120700,128600,150500,176900,196100,219600,234200,247900,266400,281300,296600,308000,999999999

+ 3 - 3
db/re/mob_db.txt

@@ -2279,7 +2279,7 @@
 //3122,CHARLESTON1
 //3123,CHARLESTON2
 //3124,CHARLESTON3
-3125,STEP,Step,Step,130,55403,0,3088,2392,1,871,1566,101,58,117,127,55,61,116,60,10,12,0,6,22,234894485,250,0,780,0,0,0,0,0,0,0,0,6751,1000,998,150,13213,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3125,STEP,Step,Step,130,55403,0,3088,2392,1,871,1566,101,58,117,127,55,61,116,60,10,12,0,6,22,0x2000000,250,0,780,0,0,0,0,0,0,0,0,6751,1000,998,150,13213,400,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3126,ROCK_STEP
 //3127,KICK_STEP
 //3128,KICK_AND_KICK
@@ -2323,8 +2323,8 @@
 //3166,M_E_DEVILING
 //3167,E_POPORING_CRO
 //3168,POURING_SEA_FES
-3169,J_REB_SHECIL1,Shooting Target,Shooting Target,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x1,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-3170,J_REB_SHECIL2,Shooting Target,Shooting Target,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x1,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3169,J_REB_SHECIL1,Shooting Target,Shooting Target,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x0000001,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+3170,J_REB_SHECIL2,Shooting Target,Shooting Target,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20,0x0000001,200,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
 //3171,EVENT_MONEMUS01
 //3172,EVENT_MONEMUS02
 //3173,EVENT_FIREFOX

+ 7 - 0
db/re/quest_db.txt

@@ -2694,6 +2694,13 @@
 12344,0,3170,3,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
 12345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
 
+12340,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+12341,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+12342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+12343,0,3169,10,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+12344,0,3170,3,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+12345,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"Rebellion Job Change Quest"
+
 12363,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"?????? ?? ??"
 
 13000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"RWC2011Card Gathering"

+ 20 - 20
db/re/skill_cast_db.txt

@@ -853,11 +853,11 @@
 //-- GS_INCREASING
 506,0,1000,0,60000,0,0,0
 //-- GS_MAGICALBULLET
-507,0,500,0,0,0,0,0
+507,0,500,0,30000,0,0,0
 //-- GS_CRACKER
 508,0,1000,0,0,5000,0,0
 //-- GS_TRACKING
-512,600:700:800:900:1000:1100:1200:1300:1400:1500,1500,0,0,0,0,600:700:800:900:1000:1100:1200:1300:1400:1500
+512,0,1500,0,0,0,0,600:700:800:900:1000:1100:1200:1300:1400:1500
 //-- GS_DISARM
 513,1600,1000,0,30000,0,0,400
 //-- GS_PIERCINGSHOT
@@ -869,11 +869,11 @@
 //-- GS_GATLINGFEVER
 517,800,1000,0,30000:45000:60000:75000:90000:105000:120000:135000:150000:165000,0,0,200
 //-- GS_DUST
-518,1200,1000,0,0,0,0,300
+518,0,1000,0,0,0,0,-1
 //-- GS_FULLBUSTER
 519,800,1200:1400:1600:1800:2000:2200:2400:2600:2800:3000,0,0,10000,0,200
 //-- GS_SPREADATTACK
-520,800,1000,0,0,0,0,200
+520,0,1000,0,0,0,0,-1
 //-- GS_GROUNDDRIFT (Upkeep2 times are duration of: Stun(lv1), Blind(lv2), Poison(lv3) and Freeze(lv4))
 521,800,1000,0,3000:6000:9000:12000:15000:18000:21000:24000:27000:30000,5000:20000:20000:30000,0,200
 //==========================================
@@ -1654,43 +1654,43 @@
 //-- RL_RICHS_COIN
 2552,0,1000,0,600000,0,3000,-1
 //-- RL_MASS_SPIRAL
-2553,1000,1000,0,0,30000,10000,2000
+2553,2000,1000,0,0,30000,2000,1000
 //-- RL_BANISHING_BUSTER
-2554,3000:2500:2000:1500:1000,0,0,0,0,10000,-1
+2554,3000:2500:2000:1500:1000,2000,0,0,0,10000,-1
 //-- RL_B_TRAP
-2555,0,0,0,10000:11000:12000:13000:14000,6000:7000:8000:9000:10000,0,-1
+2555,0,2500:2000:1500:1000:500,0,10000,9000:14000:19000:24000:29000,10000,-1
 //-- RL_FLICKER
 2556,0,0,0,0,0,10000,-1
 //-- RL_S_STORM
-2557,3000:2500:2000:1500:1000,0,0,0,0,2000,-1
+2557,3000:2500:2000:1500:1000,2000,0,0,0,2000,1000
 //-- RL_E_CHAIN
-2558,0,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,5000,-1
+2558,1000,1000,0,45000:60000:75000:90000:105000:120000:135000:150000:165000:180000,0,0,-1
 //-- RL_QD_SHOT
-2559,0,1000,0,1500,0,5000,-1
+2559,0,0,0,1500,0,0,-1
 //-- RL_C_MARKER
 2560,0,0,0,30000,0,1000,-1
 //-- RL_FIREDANCE
-2561,0,2000,0,0,0,5000,-1
+2561,0,500,0,0,0,5000,-1
 //-- RL_H_MINE
-2562,1500,0,0,30000,15000,5000:4500:4000:3500:3000,500
+2562,1000,1000,0,50000,15000,5000:4500:4000:3500:3000,-1
 //-- RL_P_ALTER
-2563,0,1000,0,30000:45000:60000:75000:90000,0,5000,-1
+2563,0,0,0,30000:45000:60000:75000:90000,0,0,-1
 //-- RL_FALLEN_ANGEL
-2564,500,1500,0,0,0,10000:8000:6000:4000:2000,500
+2564,0,0,0,2000,0,0,-1
 //-- RL_R_TRIP
-2565,0,1000,0,0,0,1000,-1
+2565,0,1000,0,0,0,3000:2500:2000:1500:1000,-1
 //-- RL_D_TAIL
-2566,500,2000,0,0,0,5000,500
+2566,1200:1400:1600:1800:2000,2000,0,0,0,5000,-1
 //-- RL_FIRE_RAIN
-2567,1800:1600:1400:1200:1000,2000,0,100,0,5000,200
+2567,0,1000,0,100,0,5000,-1
 //-- RL_HEAT_BARREL
-2568,0,1000,0,60000,10000,10000,-1
+2568,2000,1000,0,60000,0,100000:95000:90000:85000:80000,-1
 //-- RL_AM_BLAST
 2569,2000,1000,0,0,6000:7000:8000:9000:10000,5000,1000
 //-- RL_SLUGSHOT
-2570,5000:6000:7000:8000:9000,1000,0,0,2000,10000,1000
+2570,5000:6000:7000:8000:9000,1000,0,0,2000,5000,1000
 //-- RL_HAMMER_OF_GOD
-2571,8000,2000,0,0,3000:3000:4000:4000:5000,30000,2000
+2571,0,2000,0,0,3000:3000:4000:4000:5000,30000,-1
 //-- RL_R_TRIP_PLUSATK
 //2572,0,0,0,0,0,0,-1
 //-- RL_B_FLICKER_ATK

+ 10 - 10
db/re/skill_db.txt

@@ -735,7 +735,7 @@
 504,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0,		GS_MADNESSCANCEL,Madness Canceller
 505,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0,		GS_ADJUSTMENT,AdJustment
 506,0,6,4,0,0x1,0,1,1,no,0,0,0,weapon,0,0x0,		GS_INCREASING,Increasing Accuracy
-507,-9,6,1,8,0x20,0,1,1,no,0,0,0,misc,0,0x0,		GS_MAGICALBULLET,Magical Bullet
+507,0,6,4,0,0x1,0,1,1,no,0,0,0,magic,0,0x0,		GS_MAGICALBULLET,Magical Bullet
 508,-9,6,1,-1,0x1,0,1,1,no,0,0,0,weapon,0,0x0,	GS_CRACKER,Cracker
 509,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		GS_SINGLEACTION,Single Action
 510,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0x0,		GS_SNAKEEYE,Snake Eye
@@ -744,7 +744,7 @@
 513,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,		GS_DISARM,Disarm
 514,-9,6,1,-1,0x20,0,5,1,no,0,0,0,weapon,0,0x100,	GS_PIERCINGSHOT,Piercing Shot
 515,-9,8,1,-1,0,0,10,-5,no,0,0,0,weapon,0,0x100,	GS_RAPIDSHOWER,Rapid Shower
-516,0,8,4,-1,0x2,3,10,1,no,0,0,0,weapon,0,0x0,	GS_DESPERADO,Desperado
+516,5,8,4,-1,0x2,3,10,1,no,0,0,0,weapon,0,0x0,	GS_DESPERADO,Desperado
 517,0,6,4,-1,0x1,0,10,1,no,0,0,0,weapon,0,0x0,	GS_GATLINGFEVER,Gatling Fever
 518,2,6,1,-1,0,0,10,1,no,0,0,0,weapon,5,0x0,		GS_DUST,Dust
 519,-9,6,1,-1,0,0,10,1,yes,0,0,0,weapon,0,0x100,	GS_FULLBUSTER,Full Buster
@@ -1273,24 +1273,24 @@
 //2551,0,0,0,0,0,0,10,0,no,0,0,0,none,0,0,	RL_GLITTERING_GREED,Flip The Coin Greed
 2552,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,0x0,	RL_RICHS_COIN,Rich's Coin
 2553,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_MASS_SPIRAL,Mass Spiral
-2554,-9,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x10020,	RL_BANISHING_BUSTER,Banishing Buster
+2554,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x10020,	RL_BANISHING_BUSTER,Banishing Buster
 2555,3:4:4:5:5,6,2,0,0x1,1,5,1,no,0,0,1,misc,0,0x0,	RL_B_TRAP,Bind Trap
 2556,0,6,4,0,0x3,-1,1,1,no,0,0,0,none,0,0x0,	RL_FLICKER,Flicker
-2557,-9,6,1,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_S_STORM,Shatter Storm
+2557,-9,6,1,-1,0x2,2:2:2:2:3,5,1,no,0,0,0,weapon,0,0x0,	RL_S_STORM,Shatter Storm
 2558,0,6,4,0,0x1,0,10,1,no,0,0,0,none,0,0x0,	RL_E_CHAIN,Eternal Chain
 2559,-9,6,4,-1,0x0,10,1,1,no,0,0x0,0,weapon,0,0x0,	RL_QD_SHOT,Quick Draw Shot
 2560,-9,6,1,0,0x1,0,1,1,no,0,0,3,none,0,0x0,	RL_C_MARKER,Crimson Marker
-2561,0,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0,	RL_FIREDANCE,Fire Dance
+2561,5,6,4,-1,0x2,3,5,1,no,0,0,0,weapon,0,0x0,	RL_FIREDANCE,Fire Dance
 2562,-9,6,1,-1,0x0,2,5,1,no,0,0,0,weapon,0,0x0,	RL_H_MINE,Howling Mine
 2563,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_P_ALTER,Platinum Alter
 2564,-9,6,2,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_FALLEN_ANGEL,Fallen Angel
-2565,0,6,4,-1,0x2,3:3:4:5:6,5,1,no,0,0,0,weapon,3,0x0,	RL_R_TRIP,Round Trip
-2566,0,6,4,-1,0x3,-1,5,1,no,0,0,0,weapon,0,0x0,	RL_D_TAIL,Dragon Tail
-2567,-9,6,2,-1,0x2,1,5,1,no,0,0,0,weapon,0,0,	RL_FIRE_RAIN,Fire Rain
+2565,5,6,4,-1,0x2,3:3:4:5:6,5,1,no,0,0,0,weapon,3,0x0,	RL_R_TRIP,Round Trip
+2566,5,6,4,0,0x30,-1,5,1,no,0,0,0,weapon,0,0x0,	RL_D_TAIL,Dragon Tail
+2567,2,6,2,-1,0x2,1,5,1,no,0,0,0,weapon,0,0,	RL_FIRE_RAIN,Fire Rain
 2568,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,0x0,	RL_HEAT_BARREL,Heat Barrel
 2569,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0x0,	RL_AM_BLAST,Anti-Material Blast
-2570,-9,6,1,-1,0,0,5,1,no,0,0,0,weapon,6,0x0,	RL_SLUGSHOT,Slug Shot
-2571,-9,6,2,-1,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_HAMMER_OF_GOD,Hammer of God
+2570,-9,6,1,0,0,0,5,1,no,0,0,0,weapon,6,0x0,	RL_SLUGSHOT,Slug Shot
+2571,-9,6,1,0,0x2,2,5,1,no,0,0,0,weapon,0,0x0,	RL_HAMMER_OF_GOD,Hammer of God
 2572,0,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0,	RL_R_TRIP_PLUSATK,Round Trip Plus Attack
 //2573,0,6,1,-1,0,0,5,1,no,0,0,0,weapon,0,0,	RL_B_FLICKER_ATK,Bind Flicker Attack
 //2574,0,6,1,-1,0,0,10,1,no,0,0,0,weapon,0,0,	RL_GLITTERING_GREED_ATK,Flip The Coin Greed Attack

+ 18 - 18
db/re/skill_require_db.txt

@@ -489,7 +489,7 @@
 501,0,0,10,0,0,0,99,0,0,none,0,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//GS_FLING
 502,0,0,20,0,0,0,99,99,1,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//GS_TRIPLEACTION
 503,0,0,30,0,0,0,99,99,1,none,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//GS_BULLSEYE
-504,0,0,30,0,0,0,99,0,0,none,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//GS_MADNESSCANCEL
+504,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								//GS_MADNESSCANCEL
 505,0,0,15,0,0,0,99,0,0,none,0,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//GS_ADJUSTMENT
 506,0,0,30,0,0,0,99,0,0,none,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0								//GS_INCREASING
 507,0,0,7,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								//GS_MAGICALBULLET
@@ -497,13 +497,13 @@
 512,0,0,15:20:25:30:35:40:45:50:55:60,0,0,0,17:18,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_TRACKING
 513,0,0,15:20:25:30:35,0,0,0,17:18,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_DISARM
 514,0,0,11:12:13:14:15,0,0,0,17:18,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_PIERCINGSHOT
-515,0,0,22:24:26:28:30:32:34:36:38:40,0,0,0,17,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_RAPIDSHOWER
+515,0,0,22:24:26:28:30:32:34:36:38:40,0,0,0,17,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_RAPIDSHOWER
 516,0,0,32:34:36:38:40:42:44:46:48:50,0,0,0,17,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	//GS_DESPERADO
 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
-519,0,0,20:25:30:35:40:45:50:55:60:65,0,0,0,20,3,2:2:4:4:6:6:8:8:10: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	//GS_FULLBUSTER
-520,0,0,15:20:25:30:35:40:45:50:55:60,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,4:8:12:16:20:24:28:32:36:40,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
+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
 
 //****
 // NJ Ninja
@@ -892,25 +892,25 @@
 // Rebellion
 //2551,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_GLITTERING_GREED
 2552,0,0,10,0,0,100,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_RICHS_COIN
-2553,0,0,80:84:88:92:96,0,0,0,18,3,1,none,0,1,7663,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//RL_MASS_SPIRAL
-2554,0,0,55:60:65:70:75,0,0,0,20,3,1,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_BANISHING_BUSTER
+2553,0,0,40:44:48:52:56,0,0,0,18,3,1,none,0,0,7663,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//RL_MASS_SPIRAL
+2554,0,0,55:60:65:70:75,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					//RL_BANISHING_BUSTER
 2555,0,0,30:32:34:36:38,0,0,0,17:18:19:20:21,0,0,none,0,1,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RL_B_TRAP
-2556,0,0,2,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_FLICKER
-2557,0,0,55:60:65:70:75,0,0,0,20,3,1,none,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0					//RL_S_STORM
-2558,0,0,45,0,0,0,17:18:19:20:21,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_E_CHAIN
+2556,0,0,2,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_FLICKER
+2557,0,0,50:55:60:65:70,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					//RL_S_STORM
+2558,0,0,45,0,0,0,17:18:19:20:21,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_E_CHAIN
 2559,0,0,5,0,0,0,17:18:19:20:21,3:4:5,1,none,SC_QD_SHOT_READY,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0	//RL_QD_SHOT
-2560,0,0,10,0,0,0,17:18:19:20:21,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_C_MARKER
-2561,0,0,10:15:20:25:30,0,0,0,17,3,5,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_FIREDANCE
-2562,0,0,45:50:55:60:65,0,0,0,21,0,0,none,0,1,7664,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//RL_H_MINE
-2563,0,0,20:24:28:32:36,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_P_ALTER
+2560,0,0,10,0,0,0,17:18:19:20:21,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_C_MARKER
+2561,0,0,12:14:16:18:20,0,0,0,17,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					//RL_FIREDANCE
+2562,0,0,45:50:55:60:65,0,0,0,21,0,0,none,0,0,7664,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//RL_H_MINE
+2563,0,0,20:24:28:32:36,0,0,0,99,3,1,none,0,-1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13201:13220:13221				//RL_P_ALTER
 2564,0,0,10,0,0,0,17,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_FALLEN_ANGEL
-2565,0,0,40:45:50:55:60,0,0,0,19,3,5,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_R_TRIP
+2565,0,0,40:45:50:55:60,0,0,0,19,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					//RL_R_TRIP
 2566,0,0,60:70:80:90:100,0,0,0,21,5,1,none,0,0,7665,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0				//RL_D_TAIL
 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
-2569,0,0,80:84:88:92:96,0,0,0,17:18:19:20:21,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_AM_BLAST
-2570,0,0,55:60:65:70:75,0,0,0,20,3,1,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_SLUGSHOT
-2571,0,0,70:80:90:100:110,0,0,0,18,3,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
+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
+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
 //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
 //2574,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_GLITTERING_GREED_ATK

+ 23 - 23
db/re/skill_tree.txt

@@ -657,11 +657,11 @@
 24,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
 24,500,5,0,0,0,0,0,0,0,0,0,0 //GS_GLITTERING#Flip the Coin#
 24,501,1,500,1,0,0,0,0,0,0,0,0 //GS_FLING#Fling#
-24,502,1,500,1,511,10,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
-24,503,1,500,5,512,10,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
-24,504,1,500,4,517,10,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
-24,505,1,500,4,513,5,0,0,0,0,0,0 //GS_ADJUSTMENT#AdJustment#
-24,506,1,500,2,510,10,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
+24,502,1,500,1,0,0,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
+24,503,1,500,5,0,0,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
+24,504,1,500,4,0,0,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
+24,505,1,500,4,0,0,0,0,0,0,0,0 //GS_ADJUSTMENT#Adjustment#
+24,506,1,500,2,0,0,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
 24,507,1,500,1,0,0,0,0,0,0,0,0 //GS_MAGICALBULLET#Magical Bullet#
 24,508,1,500,1,0,0,0,0,0,0,0,0 //GS_CRACKER#Cracker#
 24,509,10,0,0,0,0,0,0,0,0,0,0 //GS_SINGLEACTION#Single Action#
@@ -675,7 +675,7 @@
 24,517,10,515,7,516,5,0,0,0,0,0,0 //GS_GATLINGFEVER#Gatling Fever#
 24,518,10,509,5,0,0,0,0,0,0,0,0 //GS_DUST#Dust#
 24,519,10,518,3,0,0,0,0,0,0,0,0 //GS_FULLBUSTER#Full Buster#
-24,520,10,519,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
+24,520,10,509,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
 24,521,10,520,7,0,0,0,0,0,0,0,0 //GS_GROUNDDRIFT#Ground Drift#
 24,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 //Ninja
@@ -5627,11 +5627,11 @@
 4215,142,1,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#First Aid#
 4215,500,5,0,0,0,0,0,0,0,0,0,0 //GS_GLITTERING#Flip the Coin#
 4215,501,1,500,1,0,0,0,0,0,0,0,0 //GS_FLING#Fling#
-4215,502,1,500,1,511,10,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
-4215,503,1,500,5,512,10,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
-4215,504,1,500,4,517,10,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
-4215,505,1,500,4,513,5,0,0,0,0,0,0 //GS_ADJUSTMENT#AdJustment#
-4215,506,1,500,2,510,10,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
+4215,502,1,500,1,0,0,0,0,0,0,0,0 //GS_TRIPLEACTION#Triple Action#
+4215,503,1,500,5,0,0,0,0,0,0,0,0 //GS_BULLSEYE#Bulls Eye#
+4215,504,1,500,4,0,0,0,0,0,0,0,0 //GS_MADNESSCANCEL#Madness Canceler#
+4215,505,1,500,4,0,0,0,0,0,0,0,0 //GS_ADJUSTMENT#Adjustment#
+4215,506,1,500,2,0,0,0,0,0,0,0,0 //GS_INCREASING#Increasing Accuracy#
 4215,507,1,500,1,0,0,0,0,0,0,0,0 //GS_MAGICALBULLET#Magical Bullet#
 4215,508,1,500,1,0,0,0,0,0,0,0,0 //GS_CRACKER#Cracker#
 4215,509,10,0,0,0,0,0,0,0,0,0,0 //GS_SINGLEACTION#Single Action#
@@ -5645,29 +5645,29 @@
 4215,517,10,515,7,516,5,0,0,0,0,0,0 //GS_GATLINGFEVER#Gatling Fever#
 4215,518,10,509,5,0,0,0,0,0,0,0,0 //GS_DUST#Dust#
 4215,519,10,518,3,0,0,0,0,0,0,0,0 //GS_FULLBUSTER#Full Buster#
-4215,520,10,519,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
+4215,520,10,509,5,0,0,0,0,0,0,0,0 //GS_SPREADATTACK#Spread Attack#
 4215,521,10,520,7,0,0,0,0,0,0,0,0 //GS_GROUNDDRIFT#Ground Drift#
 4215,410,1,0,0,0,0,0,0,0,0,0,0 //WE_CALLBABY#Call Baby#
 4215,2552,1,500,5,0,0,0,0,0,0,0,0 //RL_RICHS_COIN#Rich's Coin#
 4215,2553,5,514,1,0,0,0,0,0,0,0,0 //RL_MASS_SPIRAL#Mass Spiral#
 4215,2554,5,2557,1,0,0,0,0,0,0,0,0 //RL_BANISHING_BUSTER#Banishing Buster#
-4215,2555,5,0,0,0,0,0,0,0,0,0,0 //RL_B_TRAP#Bind Trap#
-4215,2556,1,501,1,0,0,0,0,0,0,0,0 //RL_FLICKER#Flicker#
+4215,2555,5,2556,1,0,0,0,0,0,0,0,0 //RL_B_TRAP#Bind Trap#
+4215,2556,1,500,1,0,0,0,0,0,0,0,0 //RL_FLICKER#Flicker#
 4215,2557,5,513,1,518,1,0,0,0,0,0,0 //RL_S_STORM#Shatter Storm#
-4215,2558,10,511,10,0,0,0,0,0,0,0,0 //RL_E_CHAIN#Eternal Chain#
-4215,2559,1,2558,1,0,0,0,0,0,0,0,0 //RL_QD_SHOT#Quick Draw Shot#
-4215,2560,1,506,1,0,0,0,0,0,0,0,0 //RL_C_MARKER#Crimson Marker#
-4215,2561,5,2564,1,0,0,0,0,0,0,0,0 //RL_FIREDANCE#Fire Dance#
-4215,2562,5,520,1,0,0,0,0,0,0,0,0 //RL_H_MINE#Howling Mine#
-4215,2563,5,0,0,0,0,0,0,0,0,0,0 //RL_P_ALTER#Platinum Alter#
-4215,2564,5,516,10,0,0,0,0,0,0,0,0 //RL_FALLEN_ANGEL#Fallen Angel#
+4215,2558,10,500,1,511,10,0,0,0,0,0,0 //RL_E_CHAIN#Eternal Chain#
+4215,2559,1,511,1,0,0,0,0,0,0,0,0 //RL_QD_SHOT#Quick Draw Shot#
+4215,2560,1,500,1,0,0,0,0,0,0,0,0 //RL_C_MARKER#Crimson Marker#
+4215,2561,5,516,1,0,0,0,0,0,0,0,0 //RL_FIREDANCE#Fire Dance#
+4215,2562,5,521,1,0,0,0,0,0,0,0,0 //RL_H_MINE#Howling Mine#
+4215,2563,5,2552,1,0,0,0,0,0,0,0,0 //RL_P_ALTER#Platinum Alter#
+4215,2564,1,516,10,0,0,0,0,0,0,0,0 //RL_FALLEN_ANGEL#Fallen Angel#
 4215,2565,5,2567,1,0,0,0,0,0,0,0,0 //RL_R_TRIP#Round Trip#
 4215,2566,5,2560,1,2562,3,0,0,0,0,0,0 //RL_D_TAIL#Dragon Tail#
 4215,2567,5,517,1,0,0,0,0,0,0,0,0 //RL_FIRE_RAIN#Fire Rain#
-4215,2568,5,2561,2,0,0,0,0,0,0,0,0 //RL_HEAT_BARREL#Heat Barrel#
+4215,2568,5,2552,1,0,0,0,0,0,0,0,0 //RL_HEAT_BARREL#Heat Barrel#
 4215,2569,5,2553,1,0,0,0,0,0,0,0,0 //RL_AM_BLAST#Anti-Material Blast#
 4215,2570,5,2554,3,0,0,0,0,0,0,0,0 //RL_SLUGSHOT#Slug Shot#
-4215,2571,5,2569,3,0,0,0,0,0,0,0,0 //RL_HAMMER_OF_GOD#Hammer of God#
+4215,2571,5,2552,1,2569,3,0,0,0,0,0,0 //RL_HAMMER_OF_GOD#Hammer of God#
 //Summoner
 4218,5018,1,0,0,0,0,0,0,0,0,0,0 //SU_BASIC_SKILL##
 4218,5019,1,5018,1,0,0,0,0,0,0,0,0 //SU_BITE##

+ 35 - 32
doc/status_change.txt

@@ -939,22 +939,29 @@ SC_MIRACLE	()
 	desc:
 	val1:
 
-SC_MADNESSCANCEL	()
-	desc:
+SC_MADNESSCANCEL	(SI_MADNESSCANCEL)
+	desc: Increases some statuses (Base ATK, ASPD)
 	val1:
 
-SC_ADJUSTMENT	()
-	desc:
+SC_ADJUSTMENT	(SI_ADJUSTMENT)
+	desc: Increases some statuses (Hit, Flee)
 	val1:
 
 SC_INCREASING	(SI_ACCURACY)
-	desc: Increase some statuses (hit, dex, agi), GS_INCREASING effect
-	val1: (hardocded)
+	desc: Increase some statuses (Hit, Dex, Agi), GS_INCREASING effect
+	val1:
 
-SC_GATLINGFEVER	()
-	desc:
+SC_MAGICALBULLET	(SI_GS_MAGICAL_BULLET)
+	desc: Increases damage based on source's MATK and is reduced by target's MDEF
 	val1:
 
+SC_GATLINGFEVER	(SI_GATLINGFEVER)
+	desc: Increases some statuses (Base ATK, Flee, Movement Speed, ASPD)
+	val1: SkillLv
+	val2: ASPD increase (20 * val1)
+	val3: Base ATK (20 + 10 * val1) [pre-renewal]
+	val4: Flee decrease (5 * val1)
+
 SC_TATAMIGAESHI	()
 	desc:
 	val1:
@@ -2398,47 +2405,43 @@ SC_SUPER_STAR	(SI_SUPER_STAR)
 	desc: Visual effect
 	val1:
 
-SC_HEAT_BARREL	()
-	desc: (Rebellion) Reduce fixed cast time, add ASPD rate, & reduce flee
-	val1:
-	val2: -Fixed Casttime
-	val3: +% ASPD
-	val4: -Flee
-
-SC_HEAT_BARREL_AFTER	(SI_HEAT_BARREL_AFTER)
-	desc: (Rebellion) Heat Barrel after-effect, can't do anything in this effect (like Extremity Fist after-effect)
-	val1:
+SC_HEAT_BARREL	(SI_HEAT_BARREL)
+	desc: (Rebellion) Reduce fixed cast time, add ASPD rate, and reduce FLEE
+	val1: SkillLv
+	val2: -Fixed Casttime (5 * val1)
+	val3: +% ASPD (6 + val1 * 2)
+	val4: -FLEE (25 + val1 * 5)
 
 SC_P_ALTER	(SI_P_ALTER)
-	desc: Increase attack ratio & def againts Undead monster
-	val1:
-	val2: +ATK ratio
-	val3: +Def
+	desc: Increase attack ratio and creates a barrier like Kyrie
+	val1: SkillLv
+	val2: +ATK ratio (10 * Coin Count)
+	val3: Barrier HP (Max HP * (val1 * 5) / 100)
 
 SC_E_CHAIN	(SI_E_CHAIN)
 	desc: (Rebellion) Has chance to trigger Chain Action for any weapon
-	val1:
-	val2: Coins used for succes rate. (5*val)
+	val1: SkillLv
+	val2: Coins used for success rate. (5 * val)
 
 SC_C_MARKER	(SI_C_MARKER)
 	desc: (Rebellion) Crimson Marker effect, also sends the target location to the caster
-	val1:
+	val1: SkillLv
 	val2:
-	val3: -Flee
+	val3: -FLEE (10)
 
 SC_ANTI_M_BLAST	(SI_ANTI_M_BLAST)
 	desc: (Rebellion) Anti-Material effect, reduce resistance of Neutral attack
-	val1: Level for duration look up
-	val2: Reduction ratio
+	val1: SkillLv
+	val2: Reduction ratio (10 * val1)
 
 SC_B_TRAP	(SI_B_TRAP)
-	desc: (Rebellion) Bind Trap effect, waiting for Flicker being used
-	val1:
+	desc: (Rebellion) Bind Trap effect, waiting for Flicker to be used
+	val1: SkillLv
 	val2:
-	val3: -Walk Speed (Unstackable penalty)
+	val3: -Walk Speed (Unstackable penalty) (25 * val1)
 
 SC_H_MINE	(SI_H_MINE)
-	desc: (Rebellion) Howling Mine effect, waiting for Flicker being used
+	desc: (Rebellion) Howling Mine effect, waiting for Flicker to be used
 	val1:
 
 SC_QD_SHOT_READY	(SI_E_QD_SHOT_READY)

+ 1 - 0
npc/other/gm_npcs.txt

@@ -104,6 +104,7 @@ List of GM Management NPCs (incomplete)
 - Button Girl#sura
 - Battle Test Control#ko
 - Guide#ko_helper
+- Admin1
 --------------------------
 - Soul Linker Var
 - 1st Job Quest Reset

+ 855 - 0
npc/re/jobs/2e/rebellion.txt

@@ -0,0 +1,855 @@
+//===== rAthena Script =======================================
+//= Rebellion Job Quest
+//===== Description: =========================================
+//= [Official Conversion]
+//= Job change Quest from Gunslinger -> Rebellion.
+//===== Changelogs: ==========================================
+//= 1.0 First version. [exneval]
+//= 1.1 Syntax change. [Capuche]
+//============================================================
+
+moc_fild12,261,318,3	script	Suspicious Man	4_M_MOCASS2,2,2,{
+	end;
+OnTouch:
+	if (Class == Job_Gunslinger && BaseLevel >= 99 && JobLevel >= 70) {
+		if (isbegin_quest(12340) == 0) {
+			mes "[Suspicious Man]";
+			mes "Finally I've found you, Vagabond Spike! Your neck is mine!";
+			next;
+			select("Say what?");
+			mes "[Suspicious Man]";
+			mes "*Snort* Don't pretend like you don't know. Look at this poster! You're in it!";
+			next;
+			select("I see the resemblance, but that's not me.");
+			mes "["+strcharinfo(0)+"]";
+			mes "Forget the resemblance. Where did you get that poster? I've never committed a crime.";
+			next;
+			mes "[Suspicious Man]";
+			mes "I knew you'd try to lie your way out.";
+			next;
+			mes "[Suspicious Man]";
+			mes "The ^0000ffEinbroch Private Pub^000000 has released that wanted poster. You have many bounty hunters like me on your heels.";
+			next;
+			mes "[Suspicious Man]";
+			mes "I don't care if you're the right one so long as you look it and I can take you dead or alive.";
+		}
+		else {
+			mes "[Suspicious Man]";
+			mes "It's you again! You've got guts to come back here!";
+		}
+		next;
+		if (select("Make a run for it.:Fight him.") == 1)
+			mes "^0000ffI should run for now and think about this later.^000000";
+		else
+			mes "^0000ffHe's not the only bounty hunter after me, if he's telling the truth. I need time to strategize.^000000";
+		close2;
+		if (isbegin_quest(12340) == 0)
+			setquest 12340;// Rebellion Job Change Quest
+		warp "moc_fild12",186,83;
+	}
+	end;
+}
+
+einbroch,54,97,3	script	Bouncer	4_M_REBELLION,{
+	if (BaseClass != Job_Gunslinger) {
+		mes "[Bouncer]";
+		mes "No loitering around the venue.";
+		close;
+	}
+	switch( isbegin_quest(12340) ) {
+	case 0:
+		mes "[Bouncer]";
+		mes "Under construction, can't get in.";
+		close;
+	case 1:
+		mes "[Bouncer]";
+		mes "*Gasp* You! I thought you were already captured. Ooh, doesn't matter now. You're my Get Out of Jail Free card!";
+		next;
+		select("I'm not the criminal you think I am!");
+		mes "[Bouncer]";
+		mes "You aren't?";
+		next;
+		mes "^0000ffThe bouncer examines your face.^000000";
+		next;
+		mes "[Bouncer]";
+		mes "Hm, you bear a striking resemblance, though you don't look not as menacing as that criminal Spike";
+		next;
+		select("I want to talk to the poster publisher.");
+		mes "[Bouncer]";
+		mes "Your problem is a bit out of my league. Get in. If I find out you're the real deal all along, I'll see that you'll never see the outside again.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	case 2:
+		mes "[Bouncer]";
+		mes "You're back. Why?";
+		next;
+		if (select("I want in.:I was passing by.") == 2) {
+			mes "[Bouncer]";
+			mes "You're silly.";
+			close;
+		}
+		mes "[Bouncer]";
+		mes "Go ahead. Stay out of trouble.";
+		close2;
+		warp "job_gun",70,28;
+		end;
+	}
+}
+
+job_gun,68,33,3	script	Ruthless Rebellion	4_F_REBELLION,{
+	mes "[Ruthless Rebellion]";
+	mes "Do you know how to use a gun?";
+	close;
+}
+
+job_gun,78,33,3	script	Suspicious Gunslinger	4_M_JOB_BLACKSMITH,{
+	mes "[Suspicious Gunslinger]";
+	mes "...";
+	next;
+	mes "[Quiet Gunslinger]";
+	mes "Don't say I look like a blacksmith you know.";
+	close;
+}
+
+job_gun,74,24,6	script	Drunken Man	4_M_LIEMAN,{
+	mes "[Drunken Man]";
+	mes "*Hiccups* Oh, I'm the owner here.";
+	mes "Oh wait, am I in the pub or someplace else? Zzz...";
+	close;
+}
+
+job_gun,64,33,6	script	Anxious Man	4_M_ALCHE_A,{
+	mes "[Anxious Man]";
+	mes "Maybe I'm in the wrong place. This place doesn't look like a pub.";
+	close;
+}
+
+job_gun,86,29,3	script	Kulbertinov	4_M_REBELLION,{
+	if (Class == Job_Rebellion) {
+		mes "[Kulbertinov]";
+		mes "Do you want to see the boss?";
+		next;
+		if (select("Yes.:No.") == 1) {
+			close2;
+			warp "job_gun",220,130;
+			end;
+		}
+		end;
+	}
+	if (Class != Job_Gunslinger) {
+		mes "[Kulbertinov]";
+		mes "Are you looking for me?";
+		close;
+	}
+	switch( isbegin_quest(12340) ) {
+	case 0:
+		mes "[Kulbertinov]";
+		mes "Can I help you?";
+		close;
+	case 1:
+		mes "[Kulbertinov]";
+		mes "What do you want?";
+		next;
+		select("I'm mistaken for a criminal!.");
+		mes "[Kulbertinov]";
+		mes "Wait a minute... Mwah hah hah!";
+		next;
+		mes "^0000ffHe scans your face, then guffaws.^000000";
+		next;
+		mes "[Kulbertinov]";
+		mes "I'm sorry. For a moment, I thought Spike came back to life. He was found dead three days ago.";
+		next;
+		select("He was captured already?");
+		mes "[Kulbertinov]";
+		mes "Yes, and the bounty hunter was already paid. The news hasn't spread, and you're the spitting image of him. Go figure.";
+		next;
+		select("You have to do something!");
+		mes "[Kulbertinov]";
+		mes "I'm sorry, but I can't talk to every single bounty hunter for you. Of course, I'm willing to compensate for your inconvenience.";
+		next;
+		mes "[Kulbertinov]";
+		mes "Hey, how about you join our ranks? At the very last, you won't get shot.";
+		next;
+		select("You want me become a bounty hunter?");
+		mes "[Kulbertinov]";
+		mes "No, bounty hunting is just a pastime. We're the experts of all the firearms in the world.";
+		next;
+		mes "[Kulbertinov]";
+		mes "Carefree spirits!";
+		mes "Magical spitfires!";
+		mes "We call ourselves the ^0000ffRebellion^000000.";
+		next;
+		mes "[Kulbertinov]";
+		mes "You look like you know how to use a gun. How'd you like to join our ranks? You won't have to worry about other bounty hunters anymore too.";
+		next;
+		if (select("Let me think it over.:I don't think I have a choice.") == 1) {
+			mes "[Kulbertinov]";
+			mes "You can think it over and over, but the answer won't change. Just take the offer.";
+		}
+		else {
+			mes "[Kulbertinov]";
+			mes "Good thinking. Might as well do it now and get it over with.";
+		}
+		next;
+		mes "[Kulbertinov]";
+		mes "Talk to Enwin Conick. She guides drifting spirits like you to the way of the Rebellion. I'll send word to her. Ah, and don't point your gun at her.";
+		completequest 12340;
+		setquest 12341;// Rebellion Job Change Quest
+		close2;
+		warp "job_gun",19,15;
+		end;
+	case 2:
+		mes "[Kulbertinov]";
+		mes "Do you have business with Elwin Conick?";
+		next;
+		if (select("No.:Send me to Elwin Conick.") == 1) {
+			mes "[Kulbertinov]";
+			mes "All right. Care for a shot of vodka?";
+			close;
+		}
+		mes "[Kulbertinov]";
+		mes "Okay, I'll let her know.";
+		close2;
+		warp "job_gun",19,15;
+		end;
+	}
+}
+
+job_gun,19,24,3	script	Elwin Conick#1	4_F_REBELLION,{
+	if (Class != Job_Gunslinger) {
+		mes "[Elwin Conick]";
+		mes "If you don't want to join Rebellions, just get out.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (isbegin_quest(12341) == 1) {
+		mes "[Elwin Conick]";
+		mes "Do you to join us Rebellions?";
+		next;
+		mes "^0000ffThe short woman with keen eyes stares into your eyes.^000000";
+		next;
+		mes "[Elwin Conick]";
+		mes "Sign here.";
+		next;
+		mes "^0000ffThe undersigned party '_____' will not speak of the test even if he or she suffers injury, mutilation, or death in an unforeseen accident that may occur during the test.^000000";
+		next;
+		select("WHAT?!");
+		mes "[Elwin Conick]";
+		mes "Do you want join us or not?";
+		next;
+		if (select("I give up.:...I'll sign.") == 1) {
+			mes "[Elwin Conick]";
+			mes "Your choice.";
+			close2;
+			warp "job_gun",81,29;
+			end;
+		}
+		mes "[Elwin Conick]";
+		mes "Good. Now, follow me.";
+		close2;
+		warp "job_gun",117,41;
+		end;
+	}
+	if (isbegin_quest(12342) == 1) {
+		mes "[Elwin Conick]";
+		mes "Do you want to try again?";
+		next;
+		if (select("I give up.:Do it.") == 1) {
+			mes "[Elwin Conick]";
+			mes "Your choice.";
+			close2;
+			warp "job_gun",81,29;
+			end;
+		}
+		mes "[Elwin Conick]";
+		mes "Follow me.";
+		close2;
+		warp "job_gun",117,41;
+		end;
+	}
+	if (isbegin_quest(12343) > 0) {
+		mes "[Elwin Conick]";
+		if (isbegin_quest(12343) == 1)
+			mes "You still have Ivan's shooting test, do you want to try again?";
+		else
+			mes "Ivan's shooting test have not finished yet, do you want to try again?";
+		next;
+		if (select("I give up.:Do it.") == 1) {
+			mes "[Elwin Conick]";
+			mes "It's not worth to give up, now go out and relax.";
+			close2;
+			warp "job_gun",81,29;
+			end;
+		}
+		mes "[Elwin Conick]";
+		mes "Remember to give your best.";
+		close2;
+		warp "job_gun",120,130;
+		end;
+	}
+	if (isbegin_quest(12345) == 1) {
+		mes "[Elwin Conick]";
+		mes "Ivan is waiting for you, go find him.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	mes "[Elwin Conick]";
+	mes "You have no more test to take. Why don't you go out and have a drink?";
+	close2;
+	warp "job_gun",81,29;
+	end;
+}
+
+job_gun,117,46,3	script	Elwin Conick#2	4_F_REBELLION,{
+	if (Class != Job_Gunslinger) {
+		mes "[Elwin Conick]";
+		mes "If you don't want to join Rebellions, just get out.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	.@emt_chk = getstatus(SC_MONSTER_TRANSFORM,1);
+	.@quest_12341 = isbegin_quest(12341);
+	.@quest_12342 = isbegin_quest(12342);
+	if (.@emt_chk == 3169) {
+		mes "^0000ffYou are already in the test form. If you have finished all your tests, report to Elwin Conick in the Assembly Room^000000.";
+		close;
+	}
+	if (.@emt_chk) {
+		mes "[Elwin Conick]";
+		mes "Look at yourself, do you really want to test?";
+		next;
+		mes "^0000ffElwin see you turn into another form and she is very angry. Wait for your current form ends, and then find her again.^000000";
+		next;
+		if (select("Wait.:Go away.") == 2) {
+			mes "[Elwin Conick]";
+			mes "Come back when you aren't in any form.";
+			close2;
+			warp "job_gun",81,29;
+			end;
+		}
+		mes "[Elwin Conick]";
+		mes "It's not worth to give up, now go out and relax.";
+		close;
+	}
+	if (.@quest_12341 == 1 || .@quest_12342 == 1) {
+		if (countitem(6746)) {
+			mes "[Elwin Conick]";
+			mes "Any leftover Steel Artifacts must be returned after the test.";
+			delitem 6746,countitem(6746);// Steel_Article
+			close;
+		}
+		if (countitem(6747)) {
+			mes "[Elwin Conick]";
+			mes "Any leftover Steel Artifacts must be returned after the test.";
+			delitem 6747,countitem(6747);// Steel_Article_
+			close;
+		}
+		if ((countitem(13118) - isequipped(13118)) > 0) {
+			mes "[Elwin Conick]";
+			mes "Time over. You failed the test. Let me take all your leftover test materials.";
+			delitem 13118,1;// Tiny_Flame
+			close;
+		}
+		if (.@quest_12342 == 1)
+			.@menu$ = "Got it.";
+		else {
+			.@menu$ = "Okay.";
+			setquest 12342;// Rebellion Job Change Quest
+			completequest 12341;
+		}
+		mes "[Elwin Conick]";
+		mes "Listen up. I'm not going to great lengths trying to explain the test to you.";
+		next;
+		select( .@menu$ );
+		mes "[Elwin Conick]";
+		if (.@quest_12341 == 1) {
+			mes "This is where the firearm molds are cast. Everywhere you can see Steel Artifacts are being produced.";
+			next;
+			mes "[Elwin Conick]";
+			mes "We Rebellions are weapon experts at heart. Here you will learn to create and assemble firearms.";
+			next;
+			mes "[Elwin Conick]";
+			mes "You'll be asked to control the furnace controller near the entrance and select 5 standard Steel Artifacts.";
+			next;
+			mes "[Elwin Conick]";
+			mes "You'll then take them to the next Assembly Room and assemble them info a firearm. You'll be given 3 minutes to do all that. You'd better be fast and focused, or you will fail the test.";
+			next;
+			mes "[Elwin Conick]";
+			mes "I'll be in the next room, waiting for you to bring me a complete firearm. To check the elapsed time, you'll be transformed into a different job. ^0000ffIf you pass 3 minutes and turn back to normal, go back to me and start the test again.^000000.";
+		}
+		else {
+			mes "You'll be asked to control switches on the machine and select 5 standard Steel Artifacts.";
+			next;
+			mes "[Elwin Conick]";
+			mes "You'll then take them to the next Assembly Room and assemble them into a complete firearm. You'll be given 3 minutes to finish all that. ^0000ffTo check the elapsed time, you'll be transformed into a different job^000000.";
+			next;
+			mes "[Elwin Conick]";
+			mes "I'll be in the next room, waiting for you to bring me a complete firearm. Remember, ^0000ffyou fail the test when your transformation expires after 3 minutes^000000.";
+		}
+		transform 3169,180000;
+		close;
+	}
+	mes "[Elwin Conick]";
+	mes "Ah? Are you lost? You need to register first and then get back here.";
+	close2;
+	warp "job_gun",81,29;
+	end;
+}
+
+job_gun,198,39,3	script	Elwin Conick#3	4_F_REBELLION,{
+	if (Class != Job_Gunslinger) {
+		mes "[Elwin Conick]";
+		mes "If you don't want to join Rebellions, just get out.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (isbegin_quest(12342) == 1) {
+		.@emt_chk = getstatus(SC_MONSTER_TRANSFORM,1);
+		if (.@emt_chk == 3169) {
+			if ((countitem(13118) - isequipped(13118)) < 1) {// don't count if equipped
+				mes "[Elwin Conick]";
+				mes "Are you done? I don't see any completed firearm in your inventory.";
+				close;
+			}
+			mes "[Elwin Conick]";
+			mes "It's shoddy but not bad, given the time. You passed.";
+			delitem 13118,1;// Tiny_Flame
+			next;
+			mes "[Elwin Conick]";
+			mes "Let me take all your leftover test materials.";
+			delitem 6746,countitem(6746);// Iron_Artifact
+			delitem 6747,countitem(6747);// Steel_Artifact
+			next;
+			mes "[Elwin Conick]";
+			mes "Now you can move on to the next course. Ivan Sidorenko will oversee your test.";
+			completequest 12342;
+			close2;
+			warp "job_gun",120,133;
+			end;
+		}
+		if (.@emt_chk) {
+			mes "[Elwin Conick]";
+			mes "Look at yourself, do you really want to test?";
+			next;
+			mes "^0000ffElwin see you turn into another form and she is very angry. Wait for your current form ends, and then find her again.^000000";
+			next;
+			if (select("Wait.:Go away.") == 2) {
+				mes "[Elwin Conick]";
+				mes "Come back when you aren't in any form.";
+				close2;
+				warp "job_gun",81,29;
+				end;
+			}
+			mes "[Elwin Conick]";
+			mes "It's not worth to give up, now go out and relax.";
+			close;
+		}
+		mes "[Elwin Conick]";
+		mes "Time over. You failed the test. Let me take all your leftover test materials.";
+		delitem 6746,countitem(6746);// Iron_Artifact
+		delitem 6747,countitem(6747);// Steel_Artifact
+		delitem 13118,(countitem(13118) - isequipped(13118));// Tiny_Flame
+		next;
+		mes "[Elwin Conick]";
+		mes "Let's start again.";
+		close2;
+		warp "job_gun",117,41;
+		end;
+	}
+	mes "[Elwin Conick]";
+	mes "Ah? Are you lost? You need to register first and then get back here.";
+	close2;
+	warp "job_gun",81,29;
+	end;
+}
+
+job_gun,165,18,0	script	Furnace Controller#1	CLEAR_NPC,{
+	if (Class != Job_Gunslinger) {
+		mes "Only authorized user can do the operation.";
+		close;
+	}
+	if (getstatus(SC_MONSTER_TRANSFORM,1) == 3169) {// J_REB_SHECIL1
+		if (isbegin_quest(12342) == 1) {
+			mes "Do you want to dredge the mold up from the furnace?";
+			next;
+			if (select("Quit.:Begin.") == 1) {
+				mes "Switch to the Standby mode.";
+				close;
+			}
+			mes "Initializing Furnace Controller ZX-3100...";
+			disablenpc "Furnace Controller#1";
+			donpcevent "Furnace Controller#2::OnStart";
+			close;
+		}
+	}
+	mes "Not an authorized user. Abort the operation.";
+	close;
+}
+
+job_gun,214,36,0	script	Auto Anvil#1	CLEAR_NPC,{
+	if (Class != Job_Gunslinger) {
+		mes "Only authorized user can do the operation.";
+		close;
+	}
+	if ((countitem(13118) - isequipped(13118)) > 0) {// Tiny_Flame
+		mes "Unauthorized firearm creation has been detected. Report to Manager Elwin.";
+		close;
+	}
+	if (getstatus(SC_MONSTER_TRANSFORM,1) == 3169) {
+		if (countitem(6747) < 5) {// Steel_Article_
+			mes "You do not have standard Steel Artifacts.";
+			close;
+		}
+		if (isbegin_quest(12342) == 1) {
+			mes "Do you want to use the auto anvil and shape the standard Steel Artifacts into a firearm?";
+			next;
+			if (select("Quit.:Begin.") == 1) {
+				mes "For your safety, please step away from the auto anvil.";
+				close;
+			}
+			if (rand(1,10) > 6) {
+				mes "You have successfully created a firearm using the auto anvil. ^ff0000Please report before your transformation expires^000000.";
+				specialeffect EF_REPAIRWEAPON;
+				getitem 13118,1;// Tiny_Flame
+			}
+			else {
+				mes "Failed to create a firearm.";
+				specialeffect EF_SUI_EXPLOSION;
+			}
+			delitem 6747,5;// Steel_Article_
+			close;
+		}
+	}
+	mes "Not an authorized user. Abort the operation.";
+	close;
+}
+
+job_gun,165,18,0	script	Furnace Controller#2	CLEAR_NPC,{
+	mes "The system is busy dredging a completed mold from the furnace.";
+	close;
+
+OnStart:
+	enablenpc "Furnace Controller#2";
+	sleep 3000;
+	mapannounce "job_gun","Furnace Controller: Dredging a mold up from the furnace... Workers, stand by at the production line.",bc_map,"0x00ff44";
+	sleep 500;
+	for ( .@i = 0; .@i < 30; ++.@i ) {
+		.@eff_rnd = rand(1,100);
+		if (.@eff_rnd < 33)
+			donpcevent "Heating Furnace#3::OnStart";
+		else if (.@eff_rnd > 66)
+			donpcevent "Heating Furnace#4::OnStart";
+		else
+			donpcevent "Heating Furnace#5::OnStart";
+		sleep 200;
+		.@d_itemx = rand(127,143);
+		.@d_itemy = rand(26,29);
+		makeitem 6746,1,"job_gun",.@d_itemx,.@d_itemy;// Steel_Article
+		if (rand(1,10) > 7)
+			makeitem 6747,1,"job_gun",.@d_itemx,.@d_itemy;// Steel_Article_
+		sleep 500;
+	}
+	sleep 2000;
+	mapannounce "job_gun","Furnace Controller: Finishing the operation... Entering Standby mode in 15 seconds.",bc_map,"0x00ff44";
+	sleep 15000;
+	disablenpc "Furnace Controller#2";
+	enablenpc "Furnace Controller#1";
+	end;
+OnInit:
+	disablenpc "Furnace Controller#2";
+	end;
+}
+
+job_gun,130,31,0	script	Heating Furnace#3	CLEAR_NPC,{
+	end;
+OnStart:
+	specialeffect EF_FIREPILLAR;
+	sleep 500;
+	specialeffect EF_FIREPILLARBOMB;
+	end;
+}
+job_gun,136,31,0	duplicate(Heating Furnace#3)	Heating Furnace#4	CLEAR_NPC
+job_gun,141,31,0	duplicate(Heating Furnace#3)	Heating Furnace#5	CLEAR_NPC
+
+job_gun,120,138,3	script	Ivan Sidorenko#1	4_M_REBELLION,{
+	if (Class != Job_Gunslinger) {
+		mes "[Ivan Sidorenko]";
+		mes "This is shooting test area, you can't come here as you like.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (isbegin_quest(12342) < 2) {
+		mes "[Ivan Sidorenko]";
+		mes "There seems to be a mistake, you can't stay here.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (isbegin_quest(12343) == 0) {
+		mes "[Ivan Sidorenko]";
+		mes "Hey, stay focused--we're using live ammo here, and you can get shot anytime.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "Let me make this quick. Basically you'll be running in this shooting range consisting of 5 sections.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "The objective is to find enemies in the midst of a crowd quickly and without fail.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "Among all the targets, you must shoot only the ^0000ffStandard-issue Targets^000000. If you make a mistake, you'll lose points.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "Let's try. There aren't many ^0000ffStandard-issue Targets^000000, so keep your eyes peeled.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "^0000ffYou have 3 minutes to finish this test. If you can't finish before your transformation expires^000000, you'll fail. If that happens, just follow the path back to me.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "^0000ffYou'll fail if you miss a Standard-issue Target, or shoot 3 incorrect targets^000000. Let's get started.";
+		setquest 12343;// Rebellion Job Change Quest
+		setquest 12344;// Rebellion Job Change Quest
+		transform 3169,180000;
+		close2;
+		warp "job_gun",102,146;
+		end;
+	}
+	if (isbegin_quest(12343) == 1) {
+		if (checkquest(12343,HUNTING) == 2)
+			.@j_r_s = 10;
+		if (checkquest(12344,HUNTING) == 2)
+			.@j_r_f = 2;
+		if (getstatus(SC_MONSTER_TRANSFORM,1) != 3169)
+			.@j_r_t = 5;
+		.@j_r_c = .@j_r_s - .@j_r_f - .@j_r_t;
+		if (.@j_r_c > 9) {
+			mes "[Ivan Sidorenko]";
+			mes "Good job. I didn't think you could pass so quickly.";
+			completequest 12343;
+			completequest 12344;
+			setquest 12345;// Rebellion Job Change Quest
+			next;
+			mes "[Ivan Sidorenko]";
+			mes "You may leave and wait outside. I'll bring other instructors' evaluation reports to see you.";
+			close2;
+			warp "job_gun",210,132;
+			end;
+		}
+		if (.@j_r_c == 8) {
+			mes "[Ivan Sidorenko]";
+			mes "You're quick enough, but you shot too many incorrect targets. You failed.";
+		}
+		else if (.@j_r_c == 5) {
+			mes "[Ivan Sidorenko]";
+			mes "You accurate enough, but you took too much time. Slow Rebellions don't survive long enough.";
+		}
+		else if (.@j_r_c < 5) {
+			mes "[Ivan Sidorenko]";
+			mes "You failed at both speed and accuracy. How did you survive this long?";
+		}
+		else {
+			mes "[Ivan Sidorenko]";
+			mes "There's a problem, the statistic seems to be wrong. Well... This can happen sometimes.";
+		}
+		erasequest 12343;
+		erasequest 12344;
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "Let's try again. Be more careful this time.";
+		setquest 12343;
+		setquest 12344;
+		transform 3169,180000;
+		close2;
+		warp "job_gun",102,146;
+		end;
+	}
+	mes "[Ivan Sidorenko]";
+	mes "How did you not leave?";
+	next;
+	mes "[Ivan Sidorenko]";
+	mes "You may leave and wait outside. I'll bring other instructors' evaluation reports to see you.";
+	close2;
+	warp "job_gun",210,132;
+	end;
+}
+
+job_gun,1,4,0	script	#target	CLEAR_NPC,{
+	end;
+OnStart:
+	killmonster "job_gun","#target::OnMyMobDead";
+OnInit:
+OnMyMobDead:
+	hideonnpc "#target";
+	while( mobcount("job_gun","#target::OnMyMobDead") < 16 ) {
+		.@m_rg = rand(1,5);
+		if (.@m_rg == 1)
+			monster "job_gun",rand(88,99),rand(143,147),"Standard-issue Target",3169,1,"#target::OnMyMobDead";
+		else if (.@m_rg == 2)
+			monster "job_gun",rand(92,96),rand(95,122),"Standard-issue Target",3169,1,"#target::OnMyMobDead";
+		else if (.@m_rg == 3)
+			monster "job_gun",rand(143,159),rand(99,100),"Standard-issue Target",3169,1,"#target::OnMyMobDead";
+		else if (.@m_rg == 4)
+			monster "job_gun",rand(157,158),rand(137,160),"Standard-issue Target",3169,1,"#target::OnMyMobDead";
+		else
+			monster "job_gun",rand(119,134),rand(156,160),"Standard-issue Target",3169,1,"#target::OnMyMobDead";
+	}
+	end;
+}
+
+job_gun,1,5,0	script	#nontarget	CLEAR_NPC,{
+	end;
+OnStart:
+	killmonster "job_gun","#nontarget::OnMyMobDead";
+OnInit:
+OnMyMobDead:
+	hideonnpc "#nontarget";
+	while( mobcount("job_gun","#nontarget::OnMyMobDead") < 56 ) {
+		.@m_rg = rand(1,5);
+		if (.@m_rg == 1)
+			monster "job_gun",rand(88,99),rand(143,147),"Defective Target",3170,1,"#nontarget::OnMyMobDead";
+		else if (.@m_rg == 2)
+			monster "job_gun",rand(92,96),rand(95,122),"Defective Target",3170,1,"#nontarget::OnMyMobDead";
+		else if (.@m_rg == 3)
+			monster "job_gun",rand(143,159),rand(99,100),"Defective Target",3170,1,"#nontarget::OnMyMobDead";
+		else if (.@m_rg == 4)
+			monster "job_gun",rand(157,158),rand(137,160),"Defective Target",3170,1,"#nontarget::OnMyMobDead";
+		else
+			monster "job_gun",rand(119,134),rand(156,160),"Defective Target",3170,1,"#nontarget::OnMyMobDead";
+	}
+	end;
+}
+
+job_gun,220,132,3	script	Ivan Sidorenko#2	10062,{
+	if (!checkweight(1201,1)) {
+		mes "You have too many items, please reduce them to continue.";
+		close;
+	}
+	if ((MaxWeight - Weight) < 1000) {
+		mes "The items in your inventory are weighing you down. Lighten your weight first.";
+		close;
+	}
+	if (isbegin_quest(12345) == 0) {
+		mes "[Ivan Sidorenko]";
+		mes "There must have been a mistake. You aren't supposed to remain here.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (Class == Job_Gunslinger) {
+		if (BaseLevel < 99 || JobLevel < 70) {
+			mes "[Ivan Sidorenko]";
+			mes "Huh? You look so weak? I have nothing more to say.";
+			close;
+		}
+		if (SkillPoint) {
+			mes "[Ivan Sidorenko]";
+			mes "Oh no~ You still have Skill Points.";
+			close;
+		}
+		mes "[Ivan Sidorenko]";
+		mes "Kulbertinov, Elwin, and I've evaluated your Rebellion test results.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "And...";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "You've met all our requirements including the attitude and the test performance.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "That's right, you're now a member of the Rebellion. Get ready to be wowed.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "And Elwin wants you to have this. Take good care of it. He made it for you.";
+		jobchange Job_Rebellion;
+		completequest 12345;
+		getitem 13119,1;// Freedom_Flame
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "See you later.";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	if (Class == Job_Rebellion) {
+		mes "[Ivan Sidorenko]";
+		mes "This life should be fun, not boring.";
+		next;
+		mes "[Ivan Sidorenko]";
+		mes "And by becoming a Rebellion your life should be upgraded. So, go and create a great journey, make us proud!";
+		close2;
+		warp "job_gun",81,29;
+		end;
+	}
+	mes "[Ivan Sidorenko]";
+	mes "Do you have something to say to me, don't you?";
+	close;
+}
+
+job_gun,220,138,4	shop	Prop Vending Machine	2_VENDING_MACHINE1,13210:-1,13211:-1,13212:-1,13213:-1,13214:-1,7663:-1,7664:-1,7665:-1
+
+job_gun,216,138,4	script	Butler Karlex	1_M_01,{
+	mes "[Butler Karlex]";
+	mes "Use this temporary storage to keep your items safe while on the Advancement test.";
+	next;
+	.@s = select("Quit.:Open the storage.");
+	mes "[Butler Karlex]";
+	mes "Thank you for using the service.";
+	close2;
+	if (.@s == 2)
+		openstorage;
+	end;
+}
+
+job_gun,56,26,0	warp	rebelroom#1	2,2,einbroch,49,97
+job_gun,18,10,0	warp	rebelroom#2	2,2,job_gun,81,29
+job_gun,165,22,0	warp	rebelroom#3	2,2,job_gun,196,35
+job_gun,197,49,0	warp	rebelroom#4	2,2,job_gun,157,21
+job_gun,88,144,0	warp	shootingrange#1	3,3,job_gun,93,123
+job_gun,105,97,0	warp	shootingrange#2	3,3,job_gun,125,98
+job_gun,156,115,0	warp	shootingrange#3	3,3,job_gun,157,137
+job_gun,152,154,0	warp	shootingrange#4	3,3,job_gun,135,154
+job_gun,130,146,0	warp	shootingrange#5	3,3,job_gun,120,130
+
+
+job_gun,1,1,0	script	Admin1	CLEAR_NPC,{
+	callfunc "F_GM_NPC";
+	if (callfunc("F_GM_NPC",1854,0) != 1)
+		end;
+	mes "[Time Manager]";
+	mes "What time would you like to return?";
+	next;
+	switch( select("Cancel:Test monster spawn:Start from beginning:Furnace Zone:Shooting Zone:Complete the test") ) {
+	case 1:
+		end;
+	case 2:
+		donpcevent "#target::OnStart";
+		donpcevent "#nontarget::OnStart";
+		end;
+	case 3:
+		callsub S_Quest,0,0;
+	case 4:
+		callsub S_Quest,12341,12341;
+	case 5:
+		callsub S_Quest,12342,12342;
+	case 6:
+		callsub S_Quest,12345,12344;
+	}
+	end;
+
+S_Quest:
+	setarray .@arguments[0], getarg(0), getarg(1);
+	for ( .@quest = 12340; .@quest <= 12345; ++.@quest ) {
+		if (isbegin_quest(.@quest) > 0)
+			erasequest .@quest;
+		if (.@quest <= .@arguments[0])
+			setquest .@quest;
+		if (.@quest <= .@arguments[1])
+			completequest .@quest;
+	}
+	end;
+}

+ 1 - 0
npc/re/mapflag/nobranch.txt

@@ -23,6 +23,7 @@ job3_guil01	mapflag	nobranch
 job3_guil02	mapflag	nobranch
 job3_guil03	mapflag	nobranch
 job_ko	mapflag	nobranch
+job_gun	mapflag	nobranch
 job3_rang01	mapflag	nobranch
 job3_rang02	mapflag	nobranch
 job3_rune01	mapflag	nobranch

+ 1 - 0
npc/re/mapflag/nomemo.txt

@@ -68,6 +68,7 @@ gld2_gef	mapflag	nomemo
 gld2_pay	mapflag	nomemo
 gld2_prt	mapflag	nomemo
 job_ko	mapflag	nomemo
+job_gun	mapflag	nomemo
 ma_scene01	mapflag	nomemo
 ma_in01	mapflag	nomemo
 ma_dun01	mapflag	nomemo

+ 1 - 0
npc/re/mapflag/nopenalty.txt

@@ -70,3 +70,4 @@ job3_gen01	mapflag	nopenalty
 // Ext --------------------
 job3_sha01	mapflag	nopenalty
 job_ko	mapflag	nopenalty
+job_gun	mapflag	nopenalty

+ 1 - 0
npc/re/mapflag/nosave.txt

@@ -28,6 +28,7 @@ job3_gen01	mapflag	nosave	SavePoint
 // Ext
 job3_sha01	mapflag	nosave	SavePoint
 job_ko	mapflag	nosave	SavePoint
+job_gun	mapflag	nosave	SavePoint
 
 //Guild Dungeons ==============================
 gld_dun01_2	mapflag	nosave	SavePoint

+ 1 - 0
npc/re/mapflag/noteleport.txt

@@ -58,6 +58,7 @@ ma_zif07	mapflag	noteleport
 ma_zif08	mapflag	noteleport
 ma_zif09	mapflag	noteleport
 job_ko	mapflag	noteleport
+job_gun	mapflag	noteleport
 ecl_in01	mapflag	noteleport
 ecl_in02	mapflag	noteleport
 ecl_in03	mapflag	noteleport

+ 2 - 0
npc/re/mapflag/nowarp.txt

@@ -22,3 +22,5 @@ te_aldecas2	mapflag	nowarp
 te_aldecas3	mapflag	nowarp
 te_aldecas4	mapflag	nowarp
 te_aldecas5	mapflag	nowarp
+
+job_gun	mapflag	nowarp

+ 2 - 0
npc/re/mapflag/nowarpto.txt

@@ -65,3 +65,5 @@ te_aldecas2	mapflag	nowarpto
 te_aldecas3	mapflag	nowarpto
 te_aldecas4	mapflag	nowarpto
 te_aldecas5	mapflag	nowarpto
+
+job_gun	mapflag	nowarpto

+ 1 - 0
npc/re/merchants/shops.txt

@@ -125,6 +125,7 @@ prt_in,109,68,4	shop	Trap Specialist#prt	66,7940:-1,12341:-1
 prt_in,175,137,4	shop	Black Marketeer#prt	49,2139:-1,2800:-1,2801:-1,2802:-1,2803:-1,2804:-1,2805:-1,2806:-1,2807:-1,18000:-1,18001:-1,18002:-1,18003:-1,18004:-1,12392:-1,12393:-1,12394:-1,6145:-1,6146:-1,6147:-1,6186:-1,2808:-1
 s_atelier,17,110,1	shop	Part-Timer#sc_prt	67,6123:-1,6120:-1
 prontera,96,209,4	shop	Rebellion Accessories	564,13210:-1,13211:-1,13212:-1,7663:-1,7664:-1,7665:-1,7940:300,13200:-1,13201:-1,13202:-1,13203:-1,13204:-1,13205:-1,13206:-1,13207:-1
+//prontera,96,209,4	shop	Rebellion Prop Vending	564,13210:-1,13211:-1,13212:-1,7663:-1,7664:-1,7665:-1,7940:300,13200:-1,13221:-1,13222:-1,13215:-1,13216:-1,13217:-1,13218:-1,13219:-1,13220:-1,13223:-1,13224:-1,13225:-1,13226:-1,13227:-1
 prontera,92,209,4	shop	Rebellion Weapons	564,13120:-1,13122:-1,13189:-1,13190:-1,13192:-1,13193:-1,13194:-1,13197:-1,13198:-1,28200:-1,28201:-1
 
 //=======================================================

+ 1 - 0
npc/re/scripts_jobs.conf

@@ -12,6 +12,7 @@ npc: npc/re/jobs/1-1/swordman.txt
 npc: npc/re/jobs/1-1/thief.txt
 // - 2e
 npc: npc/re/jobs/2e/kagerou_oboro.txt
+npc: npc/re/jobs/2e/rebellion.txt
 // - 3-1
 npc: npc/re/jobs/3-1/archbishop.txt
 npc: npc/re/jobs/3-1/mechanic.txt

+ 83 - 72
src/map/battle.c

@@ -1407,6 +1407,17 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 				status_change_end(bl, SC_KYRIE, INVALID_TIMER);
 		}
 
+		if ((sce = sc->data[SC_P_ALTER]) && damage > 0) {
+			clif_specialeffect(bl, 336, AREA);
+			sce->val3 -= (int)cap_value(damage, INT_MIN, INT_MAX);
+			if (sce->val3 >= 0)
+				damage = 0;
+			else
+				damage = -sce->val3;
+			if (sce->val3 <= 0)
+				status_change_end(bl, SC_P_ALTER, INVALID_TIMER);
+		}
+
 		if ((sce = sc->data[SC_TUNAPARTY]) && damage > 0) {
 			sce->val2 -= (int)cap_value(damage, INT_MIN, INT_MAX);
 			if (sce->val2 >= 0)
@@ -2953,6 +2964,12 @@ static struct Damage battle_calc_attack_masteries(struct Damage wd, struct block
 				ATK_ADD(wd.damage, wd.damage2, 10 * sc->data[SC_GN_CARTBOOST]->val1);
 #ifdef RENEWAL
 				ATK_ADD(wd.masteryAtk, wd.masteryAtk2, 10 * sc->data[SC_GN_CARTBOOST]->val1);
+#endif
+			}
+			if (sc->data[SC_P_ALTER]) {
+				ATK_ADD(wd.damage, wd.damage2, sc->data[SC_P_ALTER]->val2);
+#ifdef RENEWAL
+				ATK_ADD(wd.masteryAtk, wd.masteryAtk2, sc->data[SC_P_ALTER]->val2);
 #endif
 			}
 		}
@@ -3293,7 +3310,7 @@ static struct Damage battle_calc_multi_attack(struct Damage wd, struct block_lis
 			}
 		}
 		else if( ((sd->weapontype1 == W_REVOLVER && (skill_lv = pc_checkskill(sd,GS_CHAINACTION)) > 0) //Normal Chain Action effect
-			|| (sc && sc->count && sc->data[SC_E_CHAIN] && (skill_lv = sc->data[SC_E_CHAIN]->val2) > 0)) //Chain Action of ETERNAL_CHAIN
+			|| (sc && sc->count && sc->data[SC_E_CHAIN] && (skill_lv = sc->data[SC_E_CHAIN]->val1) > 0)) //Chain Action of ETERNAL_CHAIN
 			&& rnd()%100 < 5*skill_lv ) //Success rate
 		{
 			wd.div_ = skill_get_num(GS_CHAINACTION,skill_lv);
@@ -3323,6 +3340,9 @@ static struct Damage battle_calc_multi_attack(struct Damage wd, struct block_lis
 			if( tsc && (tsc->data[SC_BITE] || tsc->data[SC_ANKLE] || tsc->data[SC_ELECTRICSHOCKER]) )
 				wd.div_ = tstatus->size + 2 + ( (rnd()%100 < 50-tstatus->size*10) ? 1 : 0 );
 			break;
+		case RL_QD_SHOT:
+			wd.div_ = 1 + (sd ? sd->status.job_level : 1) / 20 + (tsc && tsc->data[SC_C_MARKER] ? 2 : 0);
+			break;
 		case SC_JYUMONJIKIRI:
 			if( tsc && tsc->data[SC_JYUMONJIKIRI] )
 				wd.div_ = wd.div_ * -1;// needs more info
@@ -3378,11 +3398,6 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 			status_change_end(src,SC_CRUSHSTRIKE,INVALID_TIMER);
 			skill_break_equip(src,src,EQP_WEAPON,2000,BCT_SELF);
 		}
-		//!TODO: Verify this placement & skills that affected by these effects [Cydh]
-		if (sc->data[SC_HEAT_BARREL])
-			skillratio += 200;
-		if (sc->data[SC_P_ALTER])
-			skillratio += sc->data[SC_P_ALTER]->val2;
 	}
 
 	switch(skill_id) {
@@ -3658,16 +3673,20 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 		case GS_PIERCINGSHOT:
 #ifdef RENEWAL
 			if (sd && sd->weapontype1 == W_RIFLE)
-				skillratio += 50 + 30 * skill_lv;
+				skillratio += 150 + 30 * skill_lv;
 			else
+				skillratio += 100 + 20 * skill_lv;
+#else
+			skillratio += 20 * skill_lv;
 #endif
-				skillratio += 20 * skill_lv;
 			break;
 		case GS_RAPIDSHOWER:
 			skillratio += 400 + 50 * skill_lv;
 			break;
 		case GS_DESPERADO:
 			skillratio += 50 * (skill_lv - 1);
+			if (sc && sc->data[SC_FALLEN_ANGEL])
+				skillratio *= 2;
 			break;
 		case GS_DUST:
 			skillratio += 50 * skill_lv;
@@ -3677,7 +3696,7 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 			break;
 		case GS_SPREADATTACK:
 #ifdef RENEWAL
-			skillratio += 20 * skill_lv;
+			skillratio += 30 * skill_lv;
 #else
 			skillratio += 20 * (skill_lv - 1);
 #endif
@@ -4219,53 +4238,67 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
 			skillratio += -100 + 200 * skill_lv;
 			break;
 		case RL_FIREDANCE:
-			skillratio += -100 + 100 * skill_lv;
-			skillratio += (skillratio * status_get_lv(src)) / 300; //(custom)
+			skillratio += -100 + 200 * skill_lv;
+			skillratio += (sd ? pc_checkskill(sd, GS_DESPERADO) * 50 : 0);
 			break;
 		case RL_BANISHING_BUSTER:
-			skillratio += -100 + (400 * skill_lv); //(custom)
+			skillratio += -100 + 2000 + 300 * skill_lv;
 			break;
 		case RL_S_STORM:
-			skillratio += -100 + (200 * skill_lv); //(custom)
+			skillratio += -100 + 1700 + 200 * skill_lv;
 			break;
 		case RL_SLUGSHOT: {
-				uint16 w = 50;
-				int16 idx = -1;
+				uint16 w = 0;
 
-				if (sd && (idx = sd->equip_index[EQI_AMMO]) >= 0 && sd->inventory_data[idx])
-					w = sd->inventory_data[idx]->weight / 10;
-				skillratio += -100 + (max(w,1) * skill_lv * 30); //(custom)
+				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;
+				}
 			}
 			break;
 		case RL_D_TAIL:
-			skillratio += -100 + (2500 + 500 * skill_lv);
+			skillratio += -100 + 4000 + 1000 * skill_lv;
 			break;
 		case RL_R_TRIP:
-			skillratio += -100 + 150 * skill_lv; //(custom)
+			skillratio += -100 + 1000 + 300 * skill_lv;
 			break;
 		case RL_R_TRIP_PLUSATK:
-			skillratio += -100 + 100 * skill_lv + rnd()%10 + 100; //(custom)
+			skillratio += -100 + 300 + 300 * skill_lv;
 			break;
 		case RL_H_MINE:
-			skillratio += 100 + 200 * skill_lv;
-			//If damaged by Flicker, explosion damage (800%:1100%:1400%:1700%:2000%)
-			if (sd && sd->flicker)
-				skillratio += 800 + (skill_lv - 1) * 300;
+			if (sd && sd->flicker) // Flicker explosion damage: 500 + 300 * SkillLv
+				skillratio += -100 + 500 + 300 * skill_lv;
+			else // 200 + 200 * SkillLv
+				skillratio += -100 + 200 + 200 * skill_lv;
 			break;
 		case RL_HAMMER_OF_GOD:
-			//! TODO: Please check the right formula. [Cydh]
-			//kRO Update 2013-07-24. Ratio: 1600+lv*800
-			//kRO Update 2014-02-12. Coins increase the damage
-			skillratio += -100 + (2400 + (skill_lv - 1) * 800) + 10 *((sd) ? sd->spiritball_old : 1); //(custom)
-			break;
-		case RL_QD_SHOT:
-			skillratio += -100 + (max(pc_checkskill(sd,GS_CHAINACTION),1) * status_get_dex(src) / 5); //(custom)
+			skillratio += -100 + 2800 + 1400 * skill_lv;
+			if (sd) {
+				if (tsc && tsc->data[SC_C_MARKER])
+					skillratio += 100 * sd->spiritball_old;
+				else if (sd->spiritball_old)
+					skillratio += 10 * sd->spiritball_old;
+			}
 			break;
 		case RL_FIRE_RAIN:
-			skillratio += -100 + 2000 + (200 * (skill_lv - 1)) + status_get_dex(src); //(custom) //kRO Update 2013-07-24. 2,000% + caster's DEX (?) [Cydh]
-			break;
 		case RL_AM_BLAST:
-			skillratio += -100 + 300 * skill_lv + status_get_dex(src) / 5; //(custom)
+			skillratio += -100 + 3500 + 300 * skill_lv;
 			break;
 		case SU_BITE:
 			skillratio += 100;
@@ -4376,6 +4409,7 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
 	struct map_session_data *sd = BL_CAST(BL_PC, src);
 	struct status_change *sc = status_get_sc(src);
 	struct status_data *sstatus = status_get_status_data(src);
+	struct status_data *tstatus = status_get_status_data(target);
 	int inf3 = skill_get_inf3(skill_id);
 
 	// Kagerou/Oboro Earth Charm effect +15% wATK
@@ -4399,9 +4433,14 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
 			ATK_ADD(wd.equipAtk, wd.equipAtk2, sc->data[SC_DRUMBATTLE]->val2);
 		if (sc->data[SC_MADNESSCANCEL])
 			ATK_ADD(wd.equipAtk, wd.equipAtk2, 100);
+		if (sc->data[SC_MAGICALBULLET]) {
+			if (sstatus->matk_max > sstatus->matk_min) {
+				ATK_ADD(wd.weaponAtk, wd.weaponAtk2, i64max((sstatus->matk_min + rnd() % (sstatus->matk_max - sstatus->matk_min)) - (tstatus->mdef + tstatus->mdef2), 0));
+			} else {
+				ATK_ADD(wd.weaponAtk, wd.weaponAtk2, i64max(sstatus->matk_min - (tstatus->mdef + tstatus->mdef2), 0));
+			}
+		}
 		if (sc->data[SC_GATLINGFEVER]) {
-			struct status_data *tstatus = status_get_status_data(target);
-			
 			if (tstatus->size == SZ_SMALL) {
 				ATK_ADD(wd.equipAtk, wd.equipAtk2, 10 * sc->data[SC_GATLINGFEVER]->val1);
 			} else if (tstatus->size == SZ_MEDIUM) {
@@ -4510,7 +4549,10 @@ struct Damage battle_attack_sc_bonus(struct Damage wd, struct block_list *src, s
 					break;
 			}
 		}
-
+		if (sc->data[SC_HEAT_BARREL]) {
+			ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_HEAT_BARREL]->val3);
+			RE_ALLATK_ADDRATE(wd, sc->data[SC_HEAT_BARREL]->val3);
+		}
 		if((wd.flag&(BF_LONG|BF_MAGIC)) == BF_LONG) {
 			if (sc->data[SC_MTF_RANGEATK]) { // Monster Transformation bonus
 				ATK_ADDRATE(wd.damage, wd.damage2, sc->data[SC_MTF_RANGEATK]->val1);
@@ -4663,10 +4705,6 @@ struct Damage battle_calc_defense_reduction(struct Damage wd, struct block_list
 		if( src->type == BL_MOB && (skill = pc_checkskill(tsd, NC_RESEARCHFE)) > 0 &&
 			(sstatus->def_ele == ELE_FIRE || sstatus->def_ele == ELE_EARTH) )
 			vit_def += skill * 10;
-		if( src->type == BL_MOB && //Only affected from mob
-			tsc && tsc->count && tsc->data[SC_P_ALTER] && //If the Platinum Alter is activated
-			(battle_check_undead(sstatus->race,sstatus->def_ele) || sstatus->race==RC_UNDEAD) )	//Undead attacker
-			vit_def += tsc->data[SC_P_ALTER]->val3;
 	} else { //Mob-Pet vit-eq
 #ifndef RENEWAL
 		//VIT + rnd(0,[VIT/20]^2-1)
@@ -5461,7 +5499,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
 		switch(skill_id) {
 #ifdef RENEWAL
 			case NJ_ISSEN:
-			case GS_MAGICALBULLET:
 			case ASC_BREAKER:
 			case CR_ACIDDEMONSTRATION:
 			case GN_FIRE_EXPANSION_ACID:
@@ -5541,7 +5578,6 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl
 	switch (skill_id) {
 #ifdef RENEWAL
 		case NJ_ISSEN:
-		case GS_MAGICALBULLET:
 		case ASC_BREAKER:
 		case CR_ACIDDEMONSTRATION:
 		case GN_FIRE_EXPANSION_ACID:
@@ -6405,25 +6441,6 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 				}
 			}
 			break;
-#ifdef RENEWAL
-		case GS_MAGICALBULLET:
-			{
-				//Official renewal formula [exneval]
-				//Damage = (Final ATK + Final MATK) * Skill modifiers - (eDEF + sDEF + eMDEF + sMDEF)
-				short totaldef, totalmdef;
-				struct Damage atk, matk;
-
-				atk = battle_calc_weapon_attack(src,target,skill_id,skill_lv,md.miscflag);
-				matk = battle_calc_magic_attack(src,target,skill_id,skill_lv,md.miscflag);
-				md.damage = atk.damage + matk.damage;
-				totaldef = (short)status_get_def(target) + tstatus->def2;
-				totalmdef = tstatus->mdef + tstatus->mdef2;
-				md.damage -= totaldef + totalmdef;
-				md.flag |= BF_WEAPON;
-				nk |= NK_IGNORE_FLEE; // Flee already checked in battle_calc_weapon_attack, so don't do it again here [exneval]
-			}
-			break;
-#endif
 		case BA_DISSONANCE:
 			md.damage = 30 + skill_lv * 10;
 			if (sd)
@@ -6587,7 +6604,9 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 			break;
 		case RL_B_TRAP:
 			// kRO 2014-02-12: Damage: Caster's DEX, Target's current HP, Skill Level
-			md.damage = ((200 + status_get_dex(src)) * skill_lv * 10) + sstatus->hp; // (custom)
+			md.damage = status_get_dex(src) * 10 + (skill_lv * 3 * status_get_hp(target)) / 100;
+			if (status_bl_has_mode(target, MD_STATUS_IMMUNE))
+				md.damage /= 10;
 			break;
 		case MH_EQC:
 			md.damage = max(tstatus->hp - sstatus->hp, 0);
@@ -6655,10 +6674,6 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 	}
 
 	switch(skill_id) {
-#ifdef RENEWAL
-		case GS_MAGICALBULLET:
-			break; // Card fix already done
-#endif
 		default:
 			md.damage += battle_calc_cardfix(BF_MISC, src, target, nk, s_ele, 0, md.damage, 0, md.flag);
 			break;
@@ -6705,10 +6720,6 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list *
 	}
 
 	switch(skill_id) {
-#ifdef RENEWAL
-		case GS_MAGICALBULLET:
-			break; // GVG fix already done
-#endif
 		default:
 			md.damage = battle_calc_damage(src,target,&md,md.damage,skill_id,skill_lv);
 			if(map_flag_gvg2(target->m))

+ 7 - 0
src/map/clif.h

@@ -462,6 +462,7 @@ enum useskill_fail_cause
 	USESKILL_FAIL_STYLE_CHANGE_GRAPPLER = 82,
 	USESKILL_FAIL_THERE_ARE_NPC_AROUND = 83,
 	USESKILL_FAIL_NEED_MORE_BULLET = 84,
+	USESKILL_FAIL_COINS = 85,
 
 	USESKILL_FAIL_MAX
 };
@@ -500,6 +501,12 @@ enum clif_messages {
 	MERGE_ITEM_NOT_AVAILABLE = 0x887,
 	GUILD_MASTER_WOE = 0xb93, /// <"Currently in WoE hours, unable to delegate Guild leader"
 	GUILD_MASTER_DELAY = 0xb94, /// <"You have to wait for one day before delegating a new Guild leader"
+	SKILL_NEED_GATLING = 0x9fa,
+	SKILL_NEED_SHOTGUN = 0x9fb,
+	SKILL_NEED_RIFLE = 0x9fc,
+	SKILL_NEED_REVOLVER = 0x9fd,
+	SKILL_NEED_HOLY_BULLET = 0x9fe,
+	SKILL_NEED_GRENADE = 0xa01,
 };
 
 enum e_personalinfo {

+ 9 - 0
src/map/itemdb.h

@@ -108,6 +108,15 @@ enum item_itemid
 	ITEMID_ANCILLA						= 12333,
 	ITEMID_DUN_TELE_SCROLL3				= 12352,
 	ITEMID_REINS_OF_MOUNT				= 12622,
+	ITEMID_NOBLE_NAMEPLATE				= 12705,
+	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_SILVER_BULLET_				= 13221,
 	ITEMID_DUN_TELE_SCROLL1				= 14527,
 	ITEMID_DUN_TELE_SCROLL2				= 14581,
 	ITEMID_WOB_RUNE						= 14582,

+ 0 - 1
src/map/map.cpp

@@ -2032,7 +2032,6 @@ int map_quit(struct map_session_data *sd) {
 			// Both these statuses are removed on logout. [L0ne_W0lf]
 			status_change_end(&sd->bl, SC_SLOWCAST, INVALID_TIMER);
 			status_change_end(&sd->bl, SC_CRITICALWOUND, INVALID_TIMER);
-			status_change_end(&sd->bl, SC_HEAT_BARREL_AFTER, INVALID_TIMER);
 			status_change_end(&sd->bl, SC_H_MINE, INVALID_TIMER);
 			status_change_end(&sd->bl, SC_ANTI_M_BLAST, INVALID_TIMER);
 			status_change_end(&sd->bl, SC_B_TRAP, INVALID_TIMER);

+ 1 - 3
src/map/pc.c

@@ -4948,7 +4948,6 @@ bool pc_isUseitem(struct map_session_data *sd,int n)
 		sd->sc.data[SC_CRYSTALIZE] ||
 		sd->sc.data[SC_KAGEHUMI] ||
 		(sd->sc.data[SC_NOCHAT] && sd->sc.data[SC_NOCHAT]->val1&MANNER_NOITEM) ||
-		sd->sc.data[SC_HEAT_BARREL_AFTER] ||
 		sd->sc.data[SC_KINGS_GRACE] ||
 		sd->sc.data[SC_SUHIDE]))
 		return false;
@@ -9949,7 +9948,6 @@ bool pc_unequipitem(struct map_session_data *sd, int n, int flag) {
 			skill_enchant_elemental_end(&sd->bl, SC_NONE);
 		status_change_end(&sd->bl, SC_FEARBREEZE, INVALID_TIMER);
 		status_change_end(&sd->bl, SC_EXEEDBREAK, INVALID_TIMER);
-		status_change_end(&sd->bl, SC_P_ALTER, INVALID_TIMER);
 	}
 
 	// On armor change
@@ -9961,7 +9959,7 @@ bool pc_unequipitem(struct map_session_data *sd, int n, int flag) {
 	}
 
 	// On ammo change
-	if (sd->inventory_data[n]->type == IT_AMMO)
+	if (sd->inventory_data[n]->type == IT_AMMO && (sd->inventory_data[n]->nameid != ITEMID_SILVER_BULLET || sd->inventory_data[n]->nameid != ITEMID_PURIFICATION_BULLET || sd->inventory_data[n]->nameid != ITEMID_SILVER_BULLET_))
 		status_change_end(&sd->bl, SC_P_ALTER, INVALID_TIMER);
 
 	if (sd->state.autobonus&sd->inventory.u.items_inventory[n].equip)

+ 2 - 1
src/map/script_constants.h

@@ -1368,7 +1368,7 @@
 	export_constant(SC_MOONSTAR);
 	export_constant(SC_SUPER_STAR);
 	export_constant(SC_HEAT_BARREL);
-	export_constant(SC_HEAT_BARREL_AFTER);
+	export_constant(SC_MAGICALBULLET);
 	export_constant(SC_P_ALTER);
 	export_constant(SC_E_CHAIN);
 	export_constant(SC_C_MARKER);
@@ -1478,6 +1478,7 @@
 	export_constant(SC_DORAM_MATK);
 	export_constant(SC_DORAM_FLEE2);
 	export_constant(SC_DORAM_SVSP);
+	export_constant(SC_FALLEN_ANGEL);
 #ifdef RENEWAL
 	export_constant(SC_EXTREMITYFIST2);
 #endif

+ 118 - 131
src/map/skill.c

@@ -1792,11 +1792,10 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 		break;
 
 	case RL_MASS_SPIRAL:
-		sc_start2(src,bl,SC_BLEEDING,10 * skill_lv + rnd()%50,skill_lv,src->id,skill_get_time2(skill_id,skill_lv)); //(custom)
+		sc_start2(src,bl,SC_BLEEDING,30 + 10 * skill_lv,skill_lv,src->id,skill_get_time2(skill_id,skill_lv));
 		break;
 	case RL_SLUGSHOT:
-		if (bl->type != BL_PC)
-			sc_start(src,bl,SC_STUN,10 * skill_lv + rnd()%50,skill_lv,skill_get_time2(skill_id,skill_lv)); //(custom)
+		sc_start(src,bl,SC_STUN,100,skill_lv,skill_get_time2(skill_id,skill_lv));
 		break;
 	case RL_BANISHING_BUSTER: {
 			uint16 i, n = skill_lv;
@@ -1807,7 +1806,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 			if (status_isimmune(bl))
 				break;
 
-			if (dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER) {
+			if ((dstsd && (dstsd->class_&MAPID_UPPERMASK) == MAPID_SOUL_LINKER) || rnd()%100 >= 50 + 10 * skill_lv) {
 				if (sd)
 					clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
 				break;
@@ -1859,7 +1858,7 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 					case SC_MOONSTAR:		case SC_SUPER_STAR:		case SC_ALL_RIDING:
 					case SC_MTF_ASPD:		case SC_MTF_RANGEATK:		case SC_MTF_MATK:
 					case SC_MTF_MLEATKED:		case SC_MTF_CRIDAMAGE:		case SC_HEAT_BARREL:
-					case SC_HEAT_BARREL_AFTER:	case SC_P_ALTER:		case SC_E_CHAIN:
+					case SC_P_ALTER:		case SC_E_CHAIN:
 					case SC_C_MARKER:		case SC_B_TRAP:			case SC_H_MINE:
 					case SC_STRANGELIGHTS:		case SC_DECORATION_OF_MUSIC:	case SC_GN_CARTBOOST:
 					case SC_RECOGNIZEDSPELL:	case SC_CHASEWALK2:	case SC_BITE:
@@ -1905,16 +1904,11 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 		}
 		break;
 	case RL_S_STORM:
-		//kRO update 2014-02-12. Break 1 Equipment by minimum chance 5%/10%/15%/20%/25%
-		{
-			uint16 pos[] = { EQP_HEAD_LOW, EQP_HEAD_MID, EQP_HEAD_TOP, EQP_HAND_R, EQP_HAND_L, EQP_ARMOR, EQP_SHOES, EQP_GARMENT, EQP_ACC_L, EQP_ACC_R };
-			skill_break_equip(src,bl,pos[rnd()%ARRAYLENGTH(pos)],
-				max(skill_lv * 500,(sstatus->dex * skill_lv * 10) - (tstatus->agi * 20)), //(custom)
-				BCT_ENEMY);
-		}
+		//kRO update 2014-02-12. Break a headgear by minimum chance 5%/10%/15%/20%/25%
+		skill_break_equip(src, bl, EQP_HEAD_TOP, max(skill_lv * 500, (sstatus->dex * skill_lv * 10) - (tstatus->agi * 20)), BCT_ENEMY); //! TODO: Figure out break chance formula
 		break;
 	case RL_AM_BLAST:
-		sc_start(src,bl,SC_ANTI_M_BLAST,10 * skill_lv + rnd()%50,skill_lv,skill_get_time2(skill_id,skill_lv)); //(custom)
+		sc_start(src,bl,SC_ANTI_M_BLAST,20 + 10 * skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
 		break;
 	case RL_HAMMER_OF_GOD:
 		sc_start(src,bl,SC_STUN,100,skill_lv,skill_get_time2(skill_id,skill_lv));
@@ -3053,10 +3047,6 @@ void skill_attack_blow(struct block_list *src, struct block_list *dsrc, struct b
 			if (skill_blown(dsrc,target,blewcount,dir,BLOWN_NONE) < blewcount)
 				skill_addtimerskill(src, tick + status_get_amotion(src), target->id, 0, 0, RL_R_TRIP_PLUSATK, skill_lv, BF_WEAPON, flag|SD_ANIMATION);
 			break;
-		case RL_SLUGSHOT:
-			skill_blown(dsrc,target,blewcount,dir, BLOWN_NONE);
-			skill_addtimerskill(src, tick + status_get_amotion(src), target->id, 0, 0, skill_id, skill_lv, skill_get_type(skill_id), flag|SD_ANIMATION);
-			break;
 		default:
 			skill_blown(dsrc,target,blewcount,dir, BLOWN_NONE);
 			if (!blewcount && target->type == BL_SKILL && damage > 0) {
@@ -3437,9 +3427,7 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
 			dmg.dmotion = clif_skill_damage(src, bl, tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, (flag&SD_LEVEL) ? -1 : skill_lv, DMG_SPLASH);
 			break;
 		case RL_R_TRIP_PLUSATK:
-		case RL_BANISHING_BUSTER:
 		case RL_S_STORM:
-		case RL_SLUGSHOT:
 			dmg.dmotion = clif_skill_damage(dsrc,bl,tick,status_get_amotion(src),dmg.dmotion,damage,dmg.div_,skill_id,-1,DMG_SPLASH);
 			break;
 		case AB_DUPLELIGHT_MELEE:
@@ -3948,8 +3936,8 @@ int skill_area_sub_count (struct block_list *src, struct block_list *target, uin
 				return 0;
 			{
 				struct status_change *tsc = status_get_sc(target);
-				// Only counts marked target with SC_C_MARKER by caster
-				if (!tsc || !tsc->data[SC_C_MARKER] || tsc->data[SC_C_MARKER]->val2 != src->id)
+				// Only counts marked target with SC_C_MARKER
+				if (!tsc || !tsc->data[SC_C_MARKER])
 					return 0;
 			}
 			break;
@@ -4184,10 +4172,7 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
 						skill_castend_damage_id(src, target, skl->skill_id, pc_checkskill(((TBL_PC *)src), skl->skill_id), tick, 0);
 					}
 					break;
-				case RL_SLUGSHOT:
-					if (target->type == BL_PC)
-						sc_start(src, target, SC_SITDOWN_FORCE, 100, skl->skill_lv, skill_get_time(skl->skill_id, skl->skill_lv));
-					break;
+
 				case SU_SV_ROOTTWIST_ATK: {
 						struct status_change *tsc = status_get_sc(target);
 
@@ -4228,25 +4213,11 @@ static int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data)
 				case RL_FIRE_RAIN: {
 						int dummy = 1, i = skill_get_splash(skl->skill_id,skl->skill_lv);
 
-						map_foreachinallarea(skill_cell_overlap,src->m,skl->x-i,skl->y-i,skl->x+i,skl->y+i,BL_SKILL,skl->skill_id,&dummy,src);
+						if (rnd() % 100 < (15 + 5 * skl->skill_lv))
+							map_foreachinallarea(skill_cell_overlap,src->m,skl->x-i,skl->y-i,skl->x+i,skl->y+i,BL_SKILL,skl->skill_id,&dummy,src);
 						skill_unitsetting(src,skl->skill_id,skl->skill_lv,skl->x,skl->y,0);
 					}
 					break;
-				case RL_FALLEN_ANGEL:
-					{
-						struct map_session_data *sd = (src->type == BL_PC) ? map_id2sd(src->id): NULL;
-						if (sd) {
-							if (!skill_check_condition_castend(sd,GS_DESPERADO,skl->skill_lv))
-								break;
-							sd->state.autocast = 1;
-						}
-						skill_castend_pos2(src,skl->x,skl->y,GS_DESPERADO,skl->skill_lv,tick,skl->flag);
-						if (sd) {
-							battle_consume_ammo(sd,GS_DESPERADO,skl->skill_lv);
-							sd->state.autocast = 0;
-						}
-					}
-					break;
 				case NC_MAGMA_ERUPTION:
 					skill_unitsetting(src,skl->skill_id,skl->skill_lv,skl->x,skl->y,0);
 					break;
@@ -4671,6 +4642,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case KO_SETSUDAN:
 	case GC_DARKCROW:
 	case RL_MASS_SPIRAL:
+	case RL_BANISHING_BUSTER:
 	case RL_SLUGSHOT:
 	case RL_AM_BLAST:
 		skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
@@ -4936,7 +4908,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case KO_BAKURETSU:
 	case GN_ILLUSIONDOPING:
 	case RL_FIREDANCE:
-	case RL_BANISHING_BUSTER:
 	case RL_S_STORM:
 	case RL_R_TRIP:
 	case MH_XENO_SLASHER:
@@ -5183,6 +5154,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 		skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
 		break;
 
+	case AL_HOLYLIGHT:
+		status_change_end(bl, SC_P_ALTER, INVALID_TIMER);
 	case MG_SOULSTRIKE:
 	case NPC_DARKSTRIKE:
 	case MG_COLDBOLT:
@@ -5190,7 +5163,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case MG_LIGHTNINGBOLT:
 	case WZ_EARTHSPIKE:
 	case AL_HEAL:
-	case AL_HOLYLIGHT:
 	case NPC_DARKTHUNDER:
 	case PR_ASPERSIO:
 	case MG_FROSTDIVER:
@@ -5206,7 +5178,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case WM_METALICSOUND:
 	case KO_KAIHOU:
 	case MH_ERASER_CUTTER:
-	case RL_B_TRAP:
 		skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
 		break;
 
@@ -5266,13 +5237,13 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case TF_THROWSTONE:
 #ifdef RENEWAL
 	case ASC_BREAKER:
-	case GS_MAGICALBULLET:
 #endif
 	case NPC_SMOKING:
 	case GS_FLING:
 	case NJ_ZENYNAGE:
 	case GN_THORNS_TRAP:
 	case GN_HELLS_PLANT_ATK:
+	case RL_B_TRAP:
 		skill_attack(BF_MISC,src,src,bl,skill_id,skill_lv,tick,flag);
 		break;
 #ifdef RENEWAL
@@ -5966,32 +5937,24 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 				break;
 			}
 
-			// First attack. If target is marked by SC_C_MARKER, do another splash damage!
-			if (tsc && tsc->data[SC_C_MARKER] && tsc->data[SC_C_MARKER]->val2 == src->id) {
-				map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR|BL_SKILL,
-					src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_damage_id);
-				status_change_end(bl, SC_C_MARKER, INVALID_TIMER);
-			}
-		}
-		else
+			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR|BL_SKILL, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_damage_id);
+		} else
 			skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag);
-		if ((flag&8))
-			flag |= 1;
 		break;
 
 	case RL_QD_SHOT:
+		if (sd)
+			status_change_end(&sd->bl, SC_QD_SHOT_READY, INVALID_TIMER);
 	case RL_D_TAIL:
-		if (!sd || (sd && tsc && tsc->data[SC_C_MARKER] && tsc->data[SC_C_MARKER]->val2 == src->id)) {
+		if (!sd || (sd && tsc && tsc->data[SC_C_MARKER])) {
 			int sflag = flag;
 			if (skill_id == RL_QD_SHOT && skill_area_temp[1] == bl->id )
 				break;
 			if (flag&1)
 				sflag = (skill_area_temp[0]&0xFFF)|(flag&SD_LEVEL ? SD_LEVEL : 0)|(flag&SD_ANIMATION ? SD_ANIMATION : 0);
 			skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, sflag);
-			if (sd) {
-				if (skill_id != RL_D_TAIL)
-					status_change_end(bl, SC_C_MARKER, INVALID_TIMER);
-			}
+			if (sd && skill_id == RL_D_TAIL)
+				status_change_end(bl, SC_C_MARKER, INVALID_TIMER);
 		}
 		break;
 
@@ -6656,6 +6619,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 	case GS_MADNESSCANCEL:
 	case GS_ADJUSTMENT:
 	case GS_INCREASING:
+#ifdef RENEWAL
+	case GS_MAGICALBULLET:
+#endif
 	case NJ_KASUMIKIRI:
 	case NJ_UTSUSEMI:
 	case NJ_NEN:
@@ -7932,7 +7898,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 					case SC_REBOUND:		case SC_TELEKINESIS_INTENSE:	case SC_MOONSTAR:
 					case SC_SUPER_STAR:		case SC_ALL_RIDING:		case SC_MTF_ASPD:
 					case SC_MTF_RANGEATK:	case SC_MTF_MATK:		case SC_MTF_MLEATKED:
-					case SC_MTF_CRIDAMAGE:	case SC_HEAT_BARREL:		case SC_HEAT_BARREL_AFTER:
+					case SC_MTF_CRIDAMAGE:	case SC_HEAT_BARREL:
 					case SC_P_ALTER:		case SC_E_CHAIN:		case SC_C_MARKER:
 					case SC_B_TRAP:			case SC_H_MINE:			case SC_STRANGELIGHTS:
 					case SC_DECORATION_OF_MUSIC:	case SC_GN_CARTBOOST:		case SC_CHASEWALK2:
@@ -9338,7 +9304,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 					case SC_MOONSTAR:		case SC_SUPER_STAR:		case SC_ALL_RIDING:
 					case SC_MTF_ASPD:		case SC_MTF_RANGEATK:		case SC_MTF_MATK:
 					case SC_MTF_MLEATKED:		case SC_MTF_CRIDAMAGE:		case SC_HEAT_BARREL:
-					case SC_HEAT_BARREL_AFTER:	case SC_P_ALTER:		case SC_E_CHAIN:
+					case SC_P_ALTER:		case SC_E_CHAIN:
 					case SC_C_MARKER:		case SC_B_TRAP:			case SC_H_MINE:
 					case SC_STRANGELIGHTS:		case SC_DECORATION_OF_MUSIC:	case SC_GN_CARTBOOST:
 					case SC_RECOGNIZEDSPELL:	case SC_CHASEWALK2: case SC_ACTIVE_MONSTER_TRANSFORM:
@@ -10712,11 +10678,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 		break;
 	case RL_C_MARKER:
 		if (sd) {
-			// If marked by someone else, failed
-			if (tsce && tsce->val2 != src->id) {
-				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
-				break;
-			}
+			// If marked by someone else remove it
+			if (tsce && tsce->val2 != src->id)
+				status_change_end(bl, type, INVALID_TIMER);
 
 			// Check if marked before
 			ARR_FIND(0, MAX_SKILL_CRIMSON_MARKER, i, sd->c_marker[i] == bl->id);
@@ -10740,15 +10704,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 		}
 		break;
 	case RL_D_TAIL:
-		if (sd) {
-			skill_area_temp[0] = map_foreachinrange(skill_area_sub, src, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, BCT_ENEMY, skill_area_sub_count);
-			if (!skill_area_temp[0]) {
-				clif_skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0);
-				break;
-			}
-		}
 		map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|SD_ANIMATION|1, skill_castend_damage_id);
-		skill_area_temp[0] = 0;
 		break;
 	case RL_QD_SHOT:
 		if (sd) {
@@ -10773,17 +10729,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
 		break;
 	case RL_FLICKER:
 		if (sd) {
-			int16 splash = skill_get_splash(skill_id, skill_lv);
 			sd->flicker = true;
 			skill_area_temp[1] = 0;
 			clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
 			// Detonate RL_B_TRAP
-			if ((i = pc_checkskill(sd, RL_B_TRAP))) {
+			if (pc_checkskill(sd, RL_B_TRAP))
 				map_foreachinallrange(skill_bind_trap, src, AREA_SIZE, BL_SKILL, src);
-			}
 			// Detonate RL_H_MINE
 			if ((i = pc_checkskill(sd, RL_H_MINE)))
-				map_foreachinallrange(skill_area_sub, src, splash, BL_CHAR, src, RL_H_MINE, i, tick, flag|BCT_ENEMY|SD_SPLASH, skill_castend_damage_id);
+				map_foreachinallrange(skill_area_sub, src, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, RL_H_MINE, i, tick, flag|BCT_ENEMY|SD_SPLASH, skill_castend_damage_id);
 			sd->flicker = false;
 		}
 		break;
@@ -10990,6 +10944,20 @@ static int8 skill_castend_id_check(struct block_list *src, struct block_list *ta
 					return USESKILL_FAIL_MAX;
 			}
 			break;
+		case RL_D_TAIL:
+			if (src) {
+				int count = 0;
+
+				if (battle_config.skill_wall_check)
+					count = map_foreachinshootrange(skill_area_sub, src, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, 0, BCT_ENEMY, skill_area_sub_count);
+				else
+					count = map_foreachinrange(skill_area_sub, src, skill_get_splash(skill_id, skill_lv), BL_CHAR, src, skill_id, skill_lv, 0, BCT_ENEMY, skill_area_sub_count);
+
+				if (!count) {
+					return USESKILL_FAIL_LEVEL;
+				}
+			}
+			break;
 	}
 
 	if (inf&INF_ATTACK_SKILL ||
@@ -11532,7 +11500,6 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
 		case HW_GANBANTEIN:
 		case LG_EARTHDRIVE:
 		case SC_ESCAPE:
-		case RL_HAMMER_OF_GOD:
 		case SU_CN_METEOR:
 			break; //Effect is displayed on respective switch case.
 		default:
@@ -12236,53 +12203,37 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
 
 	case RL_FALLEN_ANGEL:
 		if (unit_movepos(src,x,y,1,1)) {
-			uint8 skill_use_lv = sd ? pc_checkskill(sd,GS_DESPERADO) : 5;
-			if (!skill_use_lv) {
-				clif_skill_nodamage(src, src, skill_id, skill_lv, 0);
-				break;
-			}
-			clif_fixpos(src);
-			clif_skill_nodamage(src, src, skill_id, skill_lv, 1);
-			skill_addtimerskill(src, tick+500, 0, x, y, RL_FALLEN_ANGEL, skill_use_lv, BF_WEAPON, flag|SD_LEVEL|SD_ANIMATION|SD_SPLASH);
-		}
-		else {
+			clif_snap(src, src->x, src->y);
+			sc_start(src, src, type, 100, skill_id, skill_get_time(skill_id, skill_lv));
+		} else {
 			if (sd)
 				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
 		}
 		break;
-	case RL_HAMMER_OF_GOD:
-		{
-			i = skill_get_splash(skill_id, skill_lv);
-			if (sd) {
-				skill_area_temp[0] = map_foreachinarea(skill_area_sub, src->m, x-i, y-i, x+i, y+i, BL_CHAR, src, skill_id, skill_lv, tick, BCT_ENEMY, skill_area_sub_count);
-				if (!skill_area_temp[0]) {
-					// This skill doesn't have area effect, apply self? :P
-					//clif_skill_poseffect(src, skill_id, skill_lv, x, y, tick+500);
-					clif_skill_nodamage(src, src, skill_id, 0, 1);
-					break;
-				}
-			}
-			map_foreachinarea(skill_area_sub, src->m, x-i, y-i, x+i, y+i, BL_CHAR, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|SD_SPLASH|SD_ANIMATION|8, skill_castend_damage_id);
-			skill_area_temp[0] = 0;
-			break;
-		}
-		break;
 	case RL_FIRE_RAIN: {
 			int w, wave = skill_lv + 5, dir = map_calc_dir(src,x,y);
 			int sx = x = src->x, sy = y = src->y;
 
-			for (w = 1; w <= wave; w++) {
+			for (w = 0; w <= wave; w++) {
 				switch (dir) {
-					case 0: sy = y + w; break;
-					case 1: sy = y + w; sx = x - w; break;
-					case 2: sx = x - w; break;
-					case 3: sx = x - w; sy = y - w; break;
-					case 4: sy = y - w; break;
-					case 5: sx = x + w; sy = y - w; break;
-					case 6: sx = x + w; break;
-					case 7: sy = y + w; sx = x + w; break;
+					case DIR_NORTH:
+					case DIR_NORTHWEST:
+					case DIR_NORTHEAST:
+						sy = y + w;
+						break;
+					case DIR_WEST:
+						sx = x - w;
+						break;
+					case DIR_SOUTHWEST:
+					case DIR_SOUTH:
+					case DIR_SOUTHEAST:
+						sy = y - w;
+						break;
+					case DIR_EAST:
+						sx = x + w;
+						break;
 				}
-				skill_addtimerskill(src,gettick() + (40 * w),0,sx,sy,skill_id,skill_lv,dir,flag);
+				skill_addtimerskill(src,gettick() + (80 * w),0,sx,sy,skill_id,skill_lv,dir,flag);
 			}
 		}
 		break;
@@ -12702,8 +12653,8 @@ struct skill_unit_group *skill_unitsetting(struct block_list *src, uint16 skill_
 			ARR_FIND(0, MAX_SKILL_ITEM_REQUIRE, i, req.itemid[i] && (req.itemid[i] == ITEMID_TRAP || req.itemid[i] == ITEMID_TRAP_ALLOY));
 			if( i != MAX_SKILL_ITEM_REQUIRE && req.itemid[i] )
 				req_item = req.itemid[i];
-			if( map_flag_gvg2(src->m) || map[src->m].flag.battleground )
-				limit *= 4; // longer trap times in WOE [celest]
+			if (skill_id == RL_B_TRAP) // Target type should not change on GvG maps.
+				break;
 			if( battle_config.vs_traps_bctall && map_flag_vs(src->m) && (src->type&battle_config.vs_traps_bctall) )
 				target = BCT_ALL;
 		}
@@ -15183,6 +15134,7 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
 			break;
 
 		case GS_GLITTERING:
+		case RL_RICHS_COIN:
 			if(sd->spiritball >= 10) {
 				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
 				return false;
@@ -15607,7 +15559,14 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
 				break; //no required item; get out of here
 			if (!pc_checkequip2(sd,reqeqit,EQI_ACC_L,EQI_MAX)) {
 				if (i == require.eqItem_count) {
-					clif_skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0);
+					switch(skill_id) {
+						case RL_P_ALTER:
+							clif_msg(sd, SKILL_NEED_HOLY_BULLET);
+							break;
+						default:
+							clif_skill_fail(sd, skill_id, USESKILL_FAIL_THIS_WEAPON, 0);
+							break;
+					}
 					return false;
 				}
 			} else
@@ -15623,8 +15582,24 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
 	}
 
 	if( require.weapon && !pc_check_weapontype(sd,require.weapon) ) {
-		clif_skill_fail(sd,skill_id,USESKILL_FAIL_THIS_WEAPON,0);
-		return false;
+		switch(skill_id) {
+			case RA_AIMEDBOLT:
+				break;
+			default:
+				if (require.weapon&(1<<W_REVOLVER))
+					clif_msg(sd, SKILL_NEED_REVOLVER);
+				else if (require.weapon&(1<<W_RIFLE))
+					clif_msg(sd, SKILL_NEED_RIFLE);
+				else if (require.weapon&(1<<W_GATLING))
+					clif_msg(sd, SKILL_NEED_GATLING);
+				else if (require.weapon&(1<<W_SHOTGUN))
+					clif_msg(sd, SKILL_NEED_SHOTGUN);
+				else if (require.weapon&(1<<W_GRENADE))
+					clif_msg(sd, SKILL_NEED_GRENADE);
+				else
+					clif_skill_fail(sd, skill_id, USESKILL_FAIL_THIS_WEAPON, 0);
+				return false;
+		}
 	}
 
 	if( require.sp > 0 && status->sp < (unsigned int)require.sp) {
@@ -15637,9 +15612,12 @@ bool skill_check_condition_castbegin(struct map_session_data* sd, uint16 skill_i
 		return false;
 	}
 
-	if( (require.spiritball > 0 && sd->spiritball < require.spiritball) || 
-		(require.spiritball == -1 && sd->spiritball < 1) ) {
-		clif_skill_fail(sd,skill_id,USESKILL_FAIL_SPIRITS,(require.spiritball == -1)? 1: require.spiritball);
+	if ((require.spiritball > 0 && sd->spiritball < require.spiritball) ||
+		(require.spiritball == -1 && sd->spiritball < 1)) {
+		if ((sd->class_&MAPID_BASEMASK) == MAPID_GUNSLINGER || (sd->class_&MAPID_UPPERMASK) == MAPID_REBELLION)
+			clif_skill_fail(sd, skill_id, USESKILL_FAIL_COINS, (require.spiritball == -1) ? 1 : require.spiritball);
+		else
+			clif_skill_fail(sd, skill_id, USESKILL_FAIL_SPIRITS, (require.spiritball == -1) ? 1 : require.spiritball);
 		return false;
 	}
 
@@ -15827,7 +15805,12 @@ 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.
 			else if( require.itemid[i] == ITEMID_ANCILLA )
 				clif_skill_fail(sd,skill_id,USESKILL_FAIL_ANCILLA,0); //Ancilla is required.
-			else {
+			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 {
 				char output[CHAT_SIZE_MAX];
 				//Official is using msgstringtable.txt for each requirement failure
 				//clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
@@ -15835,7 +15818,8 @@ bool skill_check_condition_castend(struct map_session_data* sd, uint16 skill_id,
 				clif_messagecolor(&sd->bl,color_table[COLOR_RED],output,false,SELF);
 			}
 			return false;
-		}
+		} else if (skill_id == RL_SLUGSHOT) // Slug found - simulate priority and cancel the loop
+			break;
 	}
 
 	/* check the status required */
@@ -15943,6 +15927,9 @@ void skill_consume_requirement(struct map_session_data *sd, uint16 skill_id, uin
 
 			if( (n = pc_search_inventory(sd,require.itemid[i])) >= 0 )
 				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;
 		}
 	}
 }
@@ -17156,9 +17143,9 @@ int skill_detonator(struct block_list *bl, va_list ap)
 }
 
 /**
-* Rebellion's Bind Trap explosion
-* @author [Cydh]
-**/
+ * Rebellion's Bind Trap explosion
+ * @author [Cydh]
+ */
 static int skill_bind_trap(struct block_list *bl, va_list ap) {
 	struct skill_unit *su = NULL;
 	struct block_list *src = NULL;
@@ -17170,7 +17157,7 @@ static int skill_bind_trap(struct block_list *bl, va_list ap) {
 
 	if (bl->type != BL_SKILL || !(su = (struct skill_unit *)bl) || !(su->group))
 		return 0;
-	if (su->group->unit_id != UNT_B_TRAP || su->group->src_id != src->id )
+	if (su->group->unit_id != UNT_B_TRAP || su->group->src_id != src->id)
 		return 0;
 
 	map_foreachinallrange(skill_trap_splash, bl, su->range, BL_CHAR, bl,su->group->tick);

+ 22 - 27
src/map/status.c

@@ -501,6 +501,9 @@ void initChangeTables(void)
 #endif
 	set_sc( GS_ADJUSTMENT		, SC_ADJUSTMENT		, SI_ADJUSTMENT		, SCB_HIT|SCB_FLEE );
 	set_sc( GS_INCREASING		, SC_INCREASING		, SI_ACCURACY		, SCB_AGI|SCB_DEX|SCB_HIT );
+#ifdef RENEWAL
+	set_sc( GS_MAGICALBULLET	, SC_MAGICALBULLET	, SI_GS_MAGICAL_BULLET	, SCB_NONE );
+#endif
 	set_sc( GS_GATLINGFEVER		, SC_GATLINGFEVER	, SI_GATLINGFEVER	,
 #ifndef RENEWAL
 		SCB_BATK|SCB_FLEE|SCB_SPEED|SCB_ASPD );
@@ -835,8 +838,9 @@ void initChangeTables(void)
 	set_sc( RL_B_TRAP		, SC_B_TRAP		, SI_B_TRAP		, SCB_SPEED );
 	set_sc( RL_E_CHAIN		, SC_E_CHAIN	, SI_E_CHAIN	, SCB_NONE );
 	set_sc( RL_P_ALTER		, SC_P_ALTER	, SI_P_ALTER	, SCB_NONE );
+	set_sc( RL_FALLEN_ANGEL , SC_FALLEN_ANGEL, SI_BLANK, SCB_NONE );
 	set_sc( RL_SLUGSHOT		, SC_STUN		, SI_SLUGSHOT	, SCB_NONE );
-	set_sc( RL_HEAT_BARREL	, SC_HEAT_BARREL	, SI_HEAT_BARREL	, SCB_FLEE|SCB_ASPD );
+	set_sc( RL_HEAT_BARREL	, SC_HEAT_BARREL	, SI_HEAT_BARREL	, SCB_HIT|SCB_ASPD );
 	set_sc_with_vfx( RL_C_MARKER	, SC_C_MARKER		, SI_C_MARKER		, SCB_FLEE );
 	set_sc_with_vfx( RL_AM_BLAST	, SC_ANTI_M_BLAST	, SI_ANTI_M_BLAST	, SCB_NONE );
 
@@ -1055,7 +1059,6 @@ void initChangeTables(void)
 	StatusIconChangeTable[SC_MTF_MLEATKED] = SI_MTF_MLEATKED;
 	StatusIconChangeTable[SC_MTF_CRIDAMAGE] = SI_MTF_CRIDAMAGE;
 	StatusIconChangeTable[SC_QD_SHOT_READY] = SI_E_QD_SHOT_READY;
-	StatusIconChangeTable[SC_HEAT_BARREL_AFTER] = SI_HEAT_BARREL_AFTER;
 	StatusIconChangeTable[SC_QUEST_BUFF1] = SI_QUEST_BUFF1;
 	StatusIconChangeTable[SC_QUEST_BUFF2] = SI_QUEST_BUFF2;
 	StatusIconChangeTable[SC_QUEST_BUFF3] = SI_QUEST_BUFF3;
@@ -1425,7 +1428,6 @@ void initChangeTables(void)
 	StatusChangeStateTable[SC_SATURDAYNIGHTFEVER]	|= SCS_NOCAST;
 	StatusChangeStateTable[SC_CURSEDCIRCLE_TARGET]	|= SCS_NOCAST;
 	StatusChangeStateTable[SC_KINGS_GRACE]			|= SCS_NOCAST;
-	StatusChangeStateTable[SC_HEAT_BARREL_AFTER]	|= SCS_NOCAST;
 
 	/* StatusChangeState (SCS_) NOCHAT (skills) */
 	StatusChangeStateTable[SC_BERSERK]				|= SCS_NOCHAT;
@@ -6138,6 +6140,8 @@ static signed short status_calc_hit(struct block_list *bl, struct status_change
 		hit += hit * sc->data[SC_INCHITRATE]->val1/100;
 	if(sc->data[SC_BLIND])
 		hit -= hit * 25/100;
+	if(sc->data[SC_HEAT_BARREL])
+		hit -= sc->data[SC_HEAT_BARREL]->val4;
 	if(sc->data[SC__GROOMY])
 		hit -= hit * sc->data[SC__GROOMY]->val3 / 100;
 	if(sc->data[SC_FEAR])
@@ -6252,8 +6256,6 @@ static signed short status_calc_flee(struct block_list *bl, struct status_change
 		flee -= flee * 50 / 100;
 	//if( sc->data[SC_C_MARKER] )
 	//	flee -= (flee * sc->data[SC_C_MARKER]->val3) / 100;
-	if(sc->data[SC_HEAT_BARREL])
-		flee -= sc->data[SC_HEAT_BARREL]->val4;
 	if (sc->data[SC_GROOMING])
 		flee += sc->data[SC_GROOMING]->val2;
 
@@ -6792,6 +6794,8 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, b
 			bonus += sc->data[sc_val]->val1;
 		if (sc->data[SC_ATTHASTE_CASH])
 			bonus += sc->data[SC_ATTHASTE_CASH]->val1;
+		if (sc->data[SC_HEAT_BARREL])
+			bonus += sc->data[SC_HEAT_BARREL]->val1;
 	} else {
 		if (sc->data[SC_DONTFORGETME])
 			bonus -= sc->data[SC_DONTFORGETME]->val2 / 10;
@@ -6851,8 +6855,6 @@ static short status_calc_aspd(struct block_list *bl, struct status_change *sc, b
 			bonus += sc->data[SC_GATLINGFEVER]->val1;
 		if (sc->data[SC_STAR_COMFORT])
 			bonus += 3 * sc->data[SC_STAR_COMFORT]->val1;
-		if (sc->data[SC_HEAT_BARREL])
-			bonus += sc->data[SC_HEAT_BARREL]->val3;
 	}
 
 	return bonus;
@@ -7027,8 +7029,6 @@ static short status_calc_aspd_rate(struct block_list *bl, struct status_change *
 		aspd_rate += sc->data[SC_PAIN_KILLER]->val2 * 10;
 	if( sc->data[SC_GOLDENE_FERSE])
 		aspd_rate -= sc->data[SC_GOLDENE_FERSE]->val3 * 10;
-	if( sc->data[SC_HEAT_BARREL] )
-		aspd_rate -= sc->data[SC_HEAT_BARREL]->val3 * 10;
 
 	return (short)cap_value(aspd_rate,0,SHRT_MAX);
 }
@@ -8035,7 +8035,7 @@ int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_typ
 			tick_def2 = status_get_lv(bl) * 100 + (sd ? sd->status.job_level : 1) * 200;
 			break;
 		case SC_B_TRAP:
-			tick_def = (sd ? sd->status.str : status_get_base_status(bl)->str) * 50; // (custom)
+			tick_def = (sd ? sd->status.str : status_get_base_status(bl)->str) * 50; //! TODO: Figure out reduction formula
 			break;
 		case SC_NORECOVER_STATE:
 			tick_def2 = status->luk * 100;
@@ -8730,7 +8730,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		break;
 	case SC_HEAT_BARREL:
 		//kRO Update 2014-02-12
-		//- Cannot be stacked with Platinum Alter and Madness Canceler (and otherwise?) [Cydh]
+		//- Cannot be stacked with Platinum Alter and Madness Canceler [Cydh]
 		if (sc->data[SC_P_ALTER] || sc->data[SC_MADNESSCANCEL])
 			return 0;
 		break;
@@ -8739,6 +8739,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			return 0;
 		break;
 	case SC_MADNESSCANCEL:
+		if (sc->data[type]) { // Toggle the status but still consume requirements.
+			status_change_end(bl, type, INVALID_TIMER);
+			return 0;
+		}
 		if (sc->data[SC_P_ALTER] || sc->data[SC_HEAT_BARREL])
 			return 0;
 		break;
@@ -10876,7 +10880,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		/* Rebellion */
 		case SC_B_TRAP:
 			val2 = src->id;
-			val3 = val1 * 25; // -movespeed (custom)
+			val3 = val1 * 25; // -movespeed TODO: Figure out movespeed rate
 			break;
 		case SC_C_MARKER:
 			// val1 = skill_lv
@@ -10890,14 +10894,14 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			val2 = src->id;
 			break;
 		case SC_HEAT_BARREL:
-			//kRO Update 2014-02-26
+			//kRO Update 2016-05-25
 			{
 				uint8 n = 10;
 				if (sd)
 					n = (uint8)sd->spiritball_old;
-				val2 = val1 * 5; // -fixed casttime (custom)
-				val3 = val1 * n / 5; // +aspd (custom)
-				val4 = 75 - val1 * 5; // -flee
+				val2 = val1 * 5; // -fixed casttime
+				val3 = 6 + val1 * 2; // ATK
+				val4 = 25 + val1 * 5; // -hit
 			}
 			break;
 		case SC_P_ALTER:
@@ -10905,8 +10909,8 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 				uint8 n = 10;
 				if (sd)
 					n = (uint8)sd->spiritball_old;
-				val2 = val1 * n * 2; // +atk (custom)
-				val3 = val1 * 15; // +def (custom)
+				val2 = 10 * n; // +atk
+				val3 = (status->max_hp * (val1 * 5) / 100); // Barrier HP
 			}
 			break;
 		case SC_E_CHAIN:
@@ -10916,8 +10920,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 			break;
 		case SC_ANTI_M_BLAST:
 			val2 = val1 * 10;
-			if (bl->type != BL_PC)
-				val2 /= 5; //(custom) //kRO update 2012-02-12, reduce the rate for Non-Player target [Cydh]
 			break;
 		case SC_CATNIPPOWDER:
 			val2 = 50; // WATK%, MATK%
@@ -11223,7 +11225,6 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
 		case SC_CAMOUFLAGE:
 		case SC_STEALTHFIELD:
 		case SC_VOICEOFSIREN:
-		case SC_HEAT_BARREL_AFTER:
 		case SC_WEDDING:
 		case SC_XMAS:
 		case SC_SUMMER:
@@ -11673,7 +11674,6 @@ int status_change_clear(struct block_list* bl, int type)
 			case SC_PUSH_CART:
 			case SC_LIGHT_OF_REGENE:
 			case SC_STYLE_CHANGE:
-			case SC_HEAT_BARREL_AFTER:
 			case SC_QUEST_BUFF1:
 			case SC_QUEST_BUFF2:
 			case SC_QUEST_BUFF3:
@@ -12297,10 +12297,6 @@ int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const
 			if (sd && sce->val2 != SI_BLANK)
 				clif_status_load(bl, (enum si_type)sce->val2, 0);
 			break;
-		case SC_HEAT_BARREL:
-			if (sd)
-				sc_start(bl,bl,SC_HEAT_BARREL_AFTER,100,sce->val1,skill_get_time2(RL_HEAT_BARREL, sce->val1));
-			break;
 		case SC_C_MARKER:
 			{
 				// Remove mark data from caster
@@ -13662,7 +13658,6 @@ void status_change_clear_buffs(struct block_list* bl, uint8 type)
 			case SC_MTF_MATK:
 			case SC_MTF_MLEATKED:
 			case SC_MTF_CRIDAMAGE:
-			case SC_HEAT_BARREL_AFTER:
 			case SC_QUEST_BUFF1:
 			case SC_QUEST_BUFF2:
 			case SC_QUEST_BUFF3:

+ 3 - 1
src/map/status.h

@@ -695,7 +695,7 @@ typedef enum sc_type {
 	 * Rebellion [Cydh]
 	 **/
 	SC_HEAT_BARREL,
-	SC_HEAT_BARREL_AFTER,
+	SC_MAGICALBULLET,
 	SC_P_ALTER,
 	SC_E_CHAIN,
 	SC_C_MARKER,
@@ -837,6 +837,8 @@ typedef enum sc_type {
 	SC_DORAM_FLEE2,
 	SC_DORAM_SVSP,
 
+	SC_FALLEN_ANGEL,
+
 #ifdef RENEWAL
 	SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
 #endif

+ 0 - 3
src/map/unit.c

@@ -2511,9 +2511,6 @@ static int unit_attack_timer_sub(struct block_list* src, int tid, unsigned int t
 	   || (sd && !pc_can_attack(sd, target->id)) )
 		return 0; // Can't attack under these conditions
 
-	if (sd && &sd->sc && sd->sc.count && sd->sc.data[SC_HEAT_BARREL_AFTER])
-		return 0;
-
 	if( src->m != target->m ) {
 		if( src->type == BL_MOB && mob_warpchase((TBL_MOB*)src, target) )
 			return 1; // Follow up.

部分文件因为文件数量过多而无法显示