* Bug Fixes:
- Added base level modifier for Great Echo. (bugreport:9179). - Fixed Max HP/SP rate reduction, should be limited to -100% if the value less than it. (bugreport:9195). - Fixed Knuckle Arrow (SR_KNUCKLEARROW, Sura) knockback damage bonus behavior. (bugreport:9096). - Fixed Knuckle Arrow (SR_KNUCKLEARROW, Sura) knockback direction by saving last direction before attacker slides to target first. - Fixed Overbrand (LG_OVERBRAND_BRANDISH, Royal Guard) knockback damage bonus behavior. (bugreport:9096). - Fixed knockback direction for Arrow Shower (AC_SHOWER, Archer), now using target to attacker direction. (bugreport:1709). * Misc: - Added new flags for Skill Unit to remove hardcoded checks: --- UF_NOKNOCKBACK: Cannot be knocked back (only unit that can be damaged). --- UF_REM_CRAZYWEED: Removed if be overlapped by GN_CRAZYWEED. --- UF_REM_FIRERAIN: Removed if be overlapped by RL_FIRE_RAIN. - Implemented knockback damage bonus for Round Trip (RL_R_TRIP, Rebellion). Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
This commit is contained in:
@@ -1250,7 +1250,7 @@
|
||||
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
|
||||
//2572,0,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0, RL_R_TRIP_PLUSATK,Round Trip Plus Attack
|
||||
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
|
||||
|
||||
|
||||
@@ -886,7 +886,7 @@
|
||||
|
||||
//****
|
||||
// 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
|
||||
//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
|
||||
@@ -908,8 +908,8 @@
|
||||
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
|
||||
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
|
||||
//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
|
||||
|
||||
//****
|
||||
// Kagerou/Oboro
|
||||
|
||||
@@ -18,7 +18,10 @@
|
||||
// 0x0200(UF_ENSEMBLE) Ensemble skill
|
||||
// 0x0400(UF_SONG) Song skill
|
||||
// 0x0800(UF_DUALMODE) Spell has effects both at an interval and when you step in/out
|
||||
// 0x1000(UF_NOKNOCKBACK) Cannot be knocked back (only unit that can be damaged)
|
||||
// 0x2000(UF_RANGEDSINGLEUNIT) Layout hack, use layout range propriety but only display center.
|
||||
// 0x4000(UF_REM_CRAZYWEED) Removed if be overlapped by GN_CRAZYWEED
|
||||
// 0x8000(UF_REM_FIRERAIN) Removed if be overlapped by RL_FIRE_RAIN
|
||||
// Example: 0x006 = 0x002+0x004 -> Cannot be stacked nor cast near targets
|
||||
//
|
||||
// Notes:
|
||||
@@ -27,39 +30,39 @@
|
||||
// u1 u2 lay r intr target flag
|
||||
//
|
||||
|
||||
12,0x7e, , 0, 0, -1,all, 0x003 //MG_SAFETYWALL
|
||||
18,0x7f, , -1, 0, 20,enemy, 0x010 //MG_FIREWALL
|
||||
12,0x7e, , 0, 0, -1,all, 0x4003 //MG_SAFETYWALL
|
||||
18,0x7f, , -1, 0, 20,enemy, 0x8010 //MG_FIREWALL
|
||||
21,0x86, , 0, 2,1000,enemy, 0x018 //MG_THUNDERSTORM
|
||||
25,0x85, , 1, 0, -1,all, 0x2003 //AL_PNEUMA
|
||||
25,0x85, , 1, 0, -1,all, 0x6003 //AL_PNEUMA
|
||||
27,0x81,0x80, 0, 0, -1,all, 0x00E //AL_WARP
|
||||
47,0x86, , 0, 2,1000,enemy, 0x080 //AC_SHOWER
|
||||
70,0x83, , -1, 1,1000,all, 0x018 //PR_SANCTUARY
|
||||
79,0x84, , -1, 1,3000,enemy, 0x018 //PR_MAGNUS
|
||||
80,0x87,0x88, 0, 1,2000,enemy, 0x006 //WZ_FIREPILLAR
|
||||
79,0x84, , -1, 1,3000,enemy, 0x8018 //PR_MAGNUS
|
||||
80,0x87,0x88, 0, 1,2000,enemy, 0x4006 //WZ_FIREPILLAR
|
||||
83,0x86, , 0, 3,1000,enemy, 0x010 //WZ_METEOR
|
||||
85,0x86, , 0, 6:6:6:6:6:6:6:6:6:6:8,1250,enemy,0x018 //WZ_VERMILION
|
||||
87,0x8d, , -1, 0, -1,all, 0x010 //WZ_ICEWALL
|
||||
87,0x8d, , -1, 0, -1,all, 0x9010 //WZ_ICEWALL
|
||||
89,0x86, , 0, 5, 450,enemy, 0x018 //WZ_STORMGUST
|
||||
91,0x86, , 0, 2,1000,enemy, 0x010 //WZ_HEAVENDRIVE
|
||||
92,0x8e, , 2, 0, -1,enemy, 0x010 //WZ_QUAGMIRE
|
||||
115,0x90, , 0, 1,1000,enemy, 0x006 //HT_SKIDTRAP
|
||||
116,0x93, , 0, 1,1000,enemy, 0x006 //HT_LANDMINE
|
||||
117,0x91, , 0, 1,1000,enemy, 0x006 //HT_ANKLESNARE
|
||||
118,0x94, , 0, 1,1000,enemy, 0x006 //HT_SHOCKWAVE
|
||||
119,0x95, , 0, 1,1000,enemy, 0x006 //HT_SANDMAN
|
||||
120,0x96, , 0, 1,1000,enemy, 0x006 //HT_FLASHER
|
||||
121,0x97, , 0, 1,1000,enemy, 0x006 //HT_FREEZINGTRAP
|
||||
122,0x8f, , 0, 1,1000,enemy, 0x006 //HT_BLASTMINE
|
||||
123,0x98, , 0, 1,1000,enemy, 0x006 //HT_CLAYMORETRAP
|
||||
125,0x99, , 0, 1,1000,all, 0x000 //HT_TALKIEBOX
|
||||
140,0x92, , -1, 0,1000,enemy, 0x000 //AS_VENOMDUST
|
||||
220,0xb0, , 0, 0, -1,all, 0x002 //RG_GRAFFITI
|
||||
92,0x8e, , 2, 0, -1,enemy, 0x8010 //WZ_QUAGMIRE
|
||||
115,0x90, , 0, 1,1000,enemy, 0x8006 //HT_SKIDTRAP
|
||||
116,0x93, , 0, 1,1000,enemy, 0x8006 //HT_LANDMINE
|
||||
117,0x91, , 0, 1,1000,enemy, 0x9006 //HT_ANKLESNARE
|
||||
118,0x94, , 0, 1,1000,enemy, 0x8006 //HT_SHOCKWAVE
|
||||
119,0x95, , 0, 1,1000,enemy, 0x8006 //HT_SANDMAN
|
||||
120,0x96, , 0, 1,1000,enemy, 0x8006 //HT_FLASHER
|
||||
121,0x97, , 0, 1,1000,enemy, 0x8006 //HT_FREEZINGTRAP
|
||||
122,0x8f, , 0, 1,1000,enemy, 0x8006 //HT_BLASTMINE
|
||||
123,0x98, , 0, 1,1000,enemy, 0x8006 //HT_CLAYMORETRAP
|
||||
125,0x99, , 0, 1,1000,all, 0x8000 //HT_TALKIEBOX
|
||||
140,0x92, , -1, 0,1000,enemy, 0x8000 //AS_VENOMDUST
|
||||
220,0xb0, , 0, 0, -1,all, 0x8002 //RG_GRAFFITI
|
||||
229,0xb1, , 0, 1,1000,enemy, 0x006 //AM_DEMONSTRATION
|
||||
254,0x86, , -1, 0, 300,enemy, 0x010 //CR_GRANDCROSS
|
||||
285,0x9a, , 3, 0, -1,all, 0x010 //SA_VOLCANO
|
||||
286,0x9b, , 3, 0, -1,all, 0x010 //SA_DELUGE
|
||||
287,0x9c, , 3, 0, -1,all, 0x010 //SA_VIOLENTGALE
|
||||
288,0x9d, , 3:3:4:4:5,0, -1,all, 0x010 //SA_LANDPROTECTOR
|
||||
285,0x9a, , 3, 0, -1,all, 0xC010 //SA_VOLCANO
|
||||
286,0x9b, , 3, 0, -1,all, 0xC010 //SA_DELUGE
|
||||
287,0x9c, , 3, 0, -1,all, 0xC010 //SA_VIOLENTGALE
|
||||
288,0x9d, , 3:3:4:4:5,0, -1,all, 0xC010 //SA_LANDPROTECTOR
|
||||
306,0x9e, , 4, 0,6000,enemy, 0x200 //BD_LULLABY
|
||||
307,0x9f, , 4, 0, -1,enemy, 0x220 //BD_RICHMANKIM
|
||||
308,0xa0, , 4, 0, -1,enemy, 0x200 //BD_ETERNALCHAOS
|
||||
@@ -83,77 +86,77 @@
|
||||
362,0xb4, , 0, 2, 300,all, 0x000 //HP_BASILICA
|
||||
369,0xb3, , -1, 0,10000,all, 0x008 //PA_GOSPEL
|
||||
395,0xb5, , 4, 0, -1,all, 0x200 //CG_MOONLIT
|
||||
404,0xb6, , -1, 0, -1,all, 0x000 //PF_FOGWALL
|
||||
405,0xb7, , 0, 0, -1,enemy, 0x000 //PF_SPIDERWEB
|
||||
404,0xb6, , -1, 0, -1,all, 0x8000 //PF_FOGWALL
|
||||
405,0xb7, , 0, 0, -1,enemy, 0x8000 //PF_SPIDERWEB
|
||||
409,0xb2, , 0,-1, -1,noone, 0x000 //WE_CALLBABY
|
||||
410,0xb2, , 0,-1, -1,noone, 0x000 //WE_CALLPARENT
|
||||
428,0x86, , 0, 1, 100,enemy, 0x000 //SG_SUN_WARM
|
||||
429,0x86, , 0, 1, 100,enemy, 0x000 //SG_MOON_WARM
|
||||
430,0x86, , 0, 1, 100,enemy, 0x000 //SG_STAR_WARM
|
||||
484,0xb8, , 2, 0,1000,enemy, 0x808 //HW_GRAVITATION
|
||||
484,0xb8, , 2, 0,1000,enemy, 0x8808 //HW_GRAVITATION
|
||||
488,0xb9, , 3, 0, -1,all, 0x200 //CG_HERMODE
|
||||
516,0x86, , 3, 0, 100,enemy, 0x000 //GS_DESPERADO
|
||||
521,0xbe, , 0, 1,1000,enemy, 0x000 //GS_GROUNDDRIFT
|
||||
527,0xbc, , -1, 0,2000,enemy, 0x018 //NJ_TATAMIGAESHI
|
||||
535,0xbd, , -1, 0, 20,enemy, 0x010 //NJ_KAENSIN
|
||||
538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x010 //NJ_SUITON
|
||||
535,0xbd, , -1, 0, 20,enemy, 0x8010 //NJ_KAENSIN
|
||||
538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x8010 //NJ_SUITON
|
||||
670,0xc7, , 1, 4:7:10:13:16:19:22:25:28:31,1000,all,0x008 //NPC_EVILLAND
|
||||
|
||||
//706,0xfd, , 0, 0,1000,all, 0x000 //NPC_VENOMFOG
|
||||
|
||||
2044,0xca, , 0, 2,3000,all, 0x018 //AB_EPICLESIS
|
||||
|
||||
2032,0xe1, , 2, 0,1000,enemy, 0x018 //GC_POISONSMOKE
|
||||
2032,0xe1, , 2, 0,1000,enemy, 0x8018 //GC_POISONSMOKE
|
||||
|
||||
2213,0x86, , 0, 9,1000,enemy, 0x018 //WL_COMET
|
||||
2214,0x86, , 0, 5, 100,enemy, 0x080 //WL_CHAINLIGHTNING
|
||||
2216,0xcb, , -1, 2,2000,enemy, 0x018 //WL_EARTHSTRAIN
|
||||
|
||||
2238,0xd8, , 0, 1,1000,enemy, 0x006 //RA_ELECTRICSHOCKER
|
||||
2239,0xd9, , 0, 1,1000,enemy, 0x006 //RA_CLUSTERBOMB
|
||||
2249,0xd2, , 0, 1,1000,enemy, 0x022 //RA_MAGENTATRAP
|
||||
2250,0xd3, , 0, 1,1000,enemy, 0x022 //RA_COBALTTRAP
|
||||
2251,0xd4, , 0, 1,1000,enemy, 0x022 //RA_MAIZETRAP
|
||||
2252,0xd5, , 0, 1,1000,enemy, 0x022 //RA_VERDURETRAP
|
||||
2253,0xd6, , 0, 1,1000,enemy, 0x002 //RA_FIRINGTRAP
|
||||
2254,0xd7, , 0, 1,1000,enemy, 0x002 //RA_ICEBOUNDTRAP
|
||||
2238,0xd8, , 0, 1,1000,enemy, 0x9006 //RA_ELECTRICSHOCKER
|
||||
2239,0xd9, , 0, 1,1000,enemy, 0x8006 //RA_CLUSTERBOMB
|
||||
2249,0xd2, , 0, 1,1000,enemy, 0x8022 //RA_MAGENTATRAP
|
||||
2250,0xd3, , 0, 1,1000,enemy, 0x8022 //RA_COBALTTRAP
|
||||
2251,0xd4, , 0, 1,1000,enemy, 0x8022 //RA_MAIZETRAP
|
||||
2252,0xd5, , 0, 1,1000,enemy, 0x8022 //RA_VERDURETRAP
|
||||
2253,0xd6, , 0, 1,1000,enemy, 0x8002 //RA_FIRINGTRAP
|
||||
2254,0xd7, , 0, 1,1000,enemy, 0x8002 //RA_ICEBOUNDTRAP
|
||||
|
||||
2273,0xe2, , 2, 0, 500,all, 0x000 //NC_NEUTRALBARRIER
|
||||
2274,0xe3, , 2, 0, 500,friend,0x000 //NC_STEALTHFIELD
|
||||
|
||||
2299,0xcc, , 0, 1,1000,all, 0x006 //SC_MANHOLE
|
||||
2300,0xcd, , 0, 0,1000,all, 0x006 //SC_DIMENSIONDOOR
|
||||
2301,0xce, , 2, 0, -1,all, 0x200E //SC_CHAOSPANIC
|
||||
2302,0xcf, , 2, 0, -1,all, 0x2002 //SC_MAELSTROM
|
||||
2303,0xd0, , 3, 0, -1,all, 0x2058 //SC_BLOODYLUST
|
||||
2299,0xcc, , 0, 1,1000,all, 0xC006 //SC_MANHOLE
|
||||
2300,0xcd, , 0, 0,1000,all, 0xC006 //SC_DIMENSIONDOOR
|
||||
2301,0xce, , 2, 0, -1,all, 0xE00E //SC_CHAOSPANIC
|
||||
2302,0xcf, , 2, 0, -1,all, 0xE002 //SC_MAELSTROM
|
||||
2303,0xd0, , 3, 0, -1,all, 0xE058 //SC_BLOODYLUST
|
||||
2304,0xd1, , 0, 2, 500,enemy, 0x018 //SC_FEINTBOMB
|
||||
|
||||
2319,0xec, , 0, 3,5000,all, 0x000 //LG_BANDING
|
||||
|
||||
2414,0xda, , 0, 0,1000,enemy, 0x008 //WM_REVERBERATION
|
||||
2414,0xda, , 0, 0,1000,enemy, 0x1008 //WM_REVERBERATION
|
||||
2418,0xdb, , 0, 5, 300,enemy, 0x800 //WM_SEVERE_RAINSTORM
|
||||
2419,0xde, , 0, 1,1000,enemy, 0x014 //WM_POEMOFNETHERWORLD
|
||||
2419,0xde, , 0, 1,1000,enemy, 0x1014 //WM_POEMOFNETHERWORLD
|
||||
|
||||
2443,0xdc, , 0, 0,1000,enemy, 0x00A //SO_FIREWALK
|
||||
2444,0xdd, , 0, 0,1000,enemy, 0x00A //SO_ELECTRICWALK
|
||||
2446,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_EARTHGRAVE
|
||||
2447,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_DIAMONDDUST
|
||||
2449,0xdf, , 0, 3:3:4:4:5,500,enemy, 0x018 //SO_PSYCHIC_WAVE
|
||||
2450,0xe0, , 0, 3, 500,enemy, 0x010 //SO_CLOUD_KILL
|
||||
2452,0xe4, , 0, 3,3000,all, 0x010 //SO_WARMER
|
||||
2453,0xeb, , 0, 1:1:2:2:3,500,enemy,0x010 //SO_VACUUM_EXTREME
|
||||
2450,0xe0, , 0, 3, 500,enemy, 0x8010 //SO_CLOUD_KILL
|
||||
2452,0xe4, , 0, 3,3000,all, 0x8010 //SO_WARMER
|
||||
2453,0xeb, , 0, 1:1:2:2:3,500,enemy,0x8010 //SO_VACUUM_EXTREME
|
||||
2465,0xf1, , 0, 1,1000,all, 0x010 //SO_FIRE_INSIGNIA
|
||||
2466,0xf2, , 0, 1,1000,all, 0x010 //SO_WATER_INSIGNIA
|
||||
2467,0xf3, , 0, 1,1000,all, 0x010 //SO_WIND_INSIGNIA
|
||||
2468,0xf4, , 0, 1,1000,all, 0x010 //SO_EARTH_INSIGNIA
|
||||
|
||||
2479,0xe5, , 0, 1,1000,enemy, 0x006 //GN_THORNS_TRAP
|
||||
2482,0xe6,0x7f, 0, 1, 100,all, 0x000 //GN_WALLOFTHORN
|
||||
2479,0xe5, , 0, 1,1000,enemy, 0xC006 //GN_THORNS_TRAP
|
||||
2482,0xe6,0x7f, 0, 1, 100,all, 0xD000 //GN_WALLOFTHORN
|
||||
2484,0x86, , 0, 1, 100,enemy, 0x080 //GN_CRAZYWEED_ATK
|
||||
2485,0xe7, , 0, 2,2000,enemy, 0x098 //GN_DEMONIC_FIRE
|
||||
2485,0xe7, , 0, 2,2000,enemy, 0x8098 //GN_DEMONIC_FIRE
|
||||
2487,0xe8, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_SMOKE_POWDER
|
||||
2488,0xe9, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_TEAR_GAS
|
||||
2490,0xea, , 0, 1,1000,enemy, 0x002 //GN_HELLS_PLANT
|
||||
2490,0xea, , 0, 1,1000,enemy, 0x8002 //GN_HELLS_PLANT
|
||||
|
||||
2555,0x104, , 0, 1:2:2:3:3,500,enemy,0x6 //RL_B_TRAP
|
||||
2567,0x105, , -1, 0,1000,enemy, 0x98 //RL_FIRE_RAIN
|
||||
|
||||
@@ -1253,7 +1253,7 @@
|
||||
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
|
||||
//2572,0,6,1,-1,0x40,0,5,1,no,0,0,0,weapon,0,0, RL_R_TRIP_PLUSATK,Round Trip Plus Attack
|
||||
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
|
||||
|
||||
|
||||
@@ -911,7 +911,7 @@
|
||||
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
|
||||
//2572,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_R_TRIP_PLUSATK
|
||||
2572,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_R_TRIP_PLUSATK
|
||||
//2573,0,0,1,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RL_B_FLICKER_ATK
|
||||
//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
|
||||
|
||||
|
||||
@@ -18,7 +18,10 @@
|
||||
// 0x0200(UF_ENSEMBLE) Ensemble skill
|
||||
// 0x0400(UF_SONG) Song skill
|
||||
// 0x0800(UF_DUALMODE) Spell has effects both at an interval and when you step in/out
|
||||
// 0x1000(UF_NOKNOCKBACK) Cannot be knocked back (only unit that can be damaged)
|
||||
// 0x2000(UF_RANGEDSINGLEUNIT) Layout hack, use layout range propriety but only display center.
|
||||
// 0x4000(UF_REM_CRAZYWEED) Removed if be overlapped by GN_CRAZYWEED
|
||||
// 0x8000(UF_REM_FIRERAIN) Removed if be overlapped by RL_FIRE_RAIN
|
||||
// Example: 0x006 = 0x002+0x004 -> Cannot be stacked nor cast near targets
|
||||
//
|
||||
// Notes:
|
||||
@@ -27,48 +30,48 @@
|
||||
// u1 u2 lay r intr target flag
|
||||
//
|
||||
|
||||
12,0x7e, , 0, 0, -1,all, 0x003 //MG_SAFETYWALL
|
||||
18,0x7f, , -1, 0, 20,enemy, 0x010 //MG_FIREWALL
|
||||
12,0x7e, , 0, 0, -1,all, 0x4003 //MG_SAFETYWALL
|
||||
18,0x7f, , -1, 0, 20,enemy, 0x8010 //MG_FIREWALL
|
||||
21,0x86, , 0, 2,1000,enemy, 0x018 //MG_THUNDERSTORM
|
||||
25,0x85, , 1, 0, -1,all, 0x2003 //AL_PNEUMA
|
||||
25,0x85, , 1, 0, -1,all, 0x6003 //AL_PNEUMA
|
||||
27,0x81,0x80, 0, 0, -1,all, 0x00E //AL_WARP
|
||||
47,0x86, , 0, 2:2:2:2:2:3:3:3:3:3,1000,enemy, 0x080 //AC_SHOWER
|
||||
70,0x83, , -1, 1,1000,all, 0x018 //PR_SANCTUARY
|
||||
79,0x84, , -1, 1,3000,enemy, 0x018 //PR_MAGNUS
|
||||
80,0x87,0x88, 0, 1,2000,enemy, 0x006 //WZ_FIREPILLAR
|
||||
79,0x84, , -1, 1,3000,enemy, 0x8018 //PR_MAGNUS
|
||||
80,0x87,0x88, 0, 1,2000,enemy, 0x4006 //WZ_FIREPILLAR
|
||||
83,0x86, , 0, 3,1000,enemy, 0x010 //WZ_METEOR
|
||||
85,0x86, , 0, 6:6:6:6:6:6:6:6:6:6:8,1250,enemy,0x018 //WZ_VERMILION
|
||||
87,0x8d, , -1, 0, -1,all, 0x010 //WZ_ICEWALL
|
||||
87,0x8d, , -1, 0, -1,all, 0x9010 //WZ_ICEWALL
|
||||
89,0x86, , 0, 5, 450,enemy, 0x018 //WZ_STORMGUST
|
||||
91,0x86, , 0, 2,1000,enemy, 0x010 //WZ_HEAVENDRIVE
|
||||
92,0x8e, , 2, 0, -1,enemy, 0x010 //WZ_QUAGMIRE
|
||||
115,0x90, , 0, 1,1000,enemy, 0x006 //HT_SKIDTRAP
|
||||
116,0x93, , 0, 1,1000,enemy, 0x006 //HT_LANDMINE
|
||||
117,0x91, , 0, 1,1000,enemy, 0x006 //HT_ANKLESNARE
|
||||
118,0x94, , 0, 1,1000,enemy, 0x006 //HT_SHOCKWAVE
|
||||
119,0x95, , 0, 1,1000,enemy, 0x006 //HT_SANDMAN
|
||||
120,0x96, , 0, 1,1000,enemy, 0x006 //HT_FLASHER
|
||||
121,0x97, , 0, 1,1000,enemy, 0x006 //HT_FREEZINGTRAP
|
||||
122,0x8f, , 0, 1,1000,enemy, 0x006 //HT_BLASTMINE
|
||||
123,0x98, , 0, 1,1000,enemy, 0x006 //HT_CLAYMORETRAP
|
||||
125,0x99, , 0, 1,1000,all, 0x000 //HT_TALKIEBOX
|
||||
140,0x92, , -1, 0,1000,enemy, 0x000 //AS_VENOMDUST
|
||||
220,0xb0, , 0, 0, -1,all, 0x002 //RG_GRAFFITI
|
||||
92,0x8e, , 2, 0, -1,enemy, 0x8010 //WZ_QUAGMIRE
|
||||
115,0x90, , 0, 1,1000,enemy, 0x8006 //HT_SKIDTRAP
|
||||
116,0x93, , 0, 1,1000,enemy, 0x8006 //HT_LANDMINE
|
||||
117,0x91, , 0, 1,1000,enemy, 0x9006 //HT_ANKLESNARE
|
||||
118,0x94, , 0, 1,1000,enemy, 0x8006 //HT_SHOCKWAVE
|
||||
119,0x95, , 0, 1,1000,enemy, 0x8006 //HT_SANDMAN
|
||||
120,0x96, , 0, 1,1000,enemy, 0x8006 //HT_FLASHER
|
||||
121,0x97, , 0, 1,1000,enemy, 0x8006 //HT_FREEZINGTRAP
|
||||
122,0x8f, , 0, 1,1000,enemy, 0x8006 //HT_BLASTMINE
|
||||
123,0x98, , 0, 1,1000,enemy, 0x8006 //HT_CLAYMORETRAP
|
||||
125,0x99, , 0, 1,1000,all, 0x8000 //HT_TALKIEBOX
|
||||
140,0x92, , -1, 0,1000,enemy, 0x8000 //AS_VENOMDUST
|
||||
220,0xb0, , 0, 0, -1,all, 0x8002 //RG_GRAFFITI
|
||||
229,0xb1, , 0, 1,1000,enemy, 0x006 //AM_DEMONSTRATION
|
||||
254,0x86, , -1, 0, 300,enemy, 0x010 //CR_GRANDCROSS
|
||||
285,0x9a, , 3, 0, -1,all, 0x010 //SA_VOLCANO
|
||||
286,0x9b, , 3, 0, -1,all, 0x010 //SA_DELUGE
|
||||
287,0x9c, , 3, 0, -1,all, 0x010 //SA_VIOLENTGALE
|
||||
288,0x9d, , 3:3:4:4:5,0, -1,all, 0x010 //SA_LANDPROTECTOR
|
||||
285,0x9a, , 3, 0, -1,all, 0xC010 //SA_VOLCANO
|
||||
286,0x9b, , 3, 0, -1,all, 0xC010 //SA_DELUGE
|
||||
287,0x9c, , 3, 0, -1,all, 0xC010 //SA_VIOLENTGALE
|
||||
288,0x9d, , 3:3:4:4:5,0, -1,all, 0xC010 //SA_LANDPROTECTOR
|
||||
306,0x9e, , 4, 0,6000,enemy, 0x200 //BD_LULLABY
|
||||
307,0x9f, , 4, 0, -1,enemy, 0x220 //BD_RICHMANKIM
|
||||
308,0xa0, , 4, 0, -1,enemy, 0x200 //BD_ETERNALCHAOS
|
||||
308,0xa0, , 4, 0, -1,enemy, 0x8200 //BD_ETERNALCHAOS
|
||||
309,0xa1, , 4, 0, -1,party, 0x200 //BD_DRUMBATTLEFIELD
|
||||
310,0xa2, , 4, 0, -1,party, 0x200 //BD_RINGNIBELUNGEN
|
||||
311,0xa3, , 4, 0, -1,all, 0x200 //BD_ROKISWEIL
|
||||
311,0xa3, , 4, 0, -1,all, 0x8200 //BD_ROKISWEIL
|
||||
312,0xa4, , 4, 0, -1,party, 0x240 //BD_INTOABYSS
|
||||
313,0xa5, , 4, 0, -1,party, 0x200 //BD_SIEGFRIED
|
||||
317,0xa6, , 3, 0,3000,enemy, 0x400 //BA_DISSONANCE
|
||||
317,0xa6, , 3, 0,3000,enemy, 0x8400 //BA_DISSONANCE
|
||||
319,0xa7, , 3, 0, -1,all, 0x440 //BA_WHISTLE
|
||||
320,0xa8, , 3, 0, -1,all, 0x440 //BA_ASSASSINCROSS
|
||||
321,0xa9, , 3, 0, -1,all, 0x440 //BA_POEMBRAGI
|
||||
@@ -83,21 +86,21 @@
|
||||
362,0xb4, , 0, 2, 300,all, 0x000 //HP_BASILICA
|
||||
369,0xb3, , -1, 0,10000,all, 0x008 //PA_GOSPEL
|
||||
395,0xb5, , 4, 0, -1,all, 0x200 //CG_MOONLIT
|
||||
404,0xb6, , -1, 0, -1,all, 0x000 //PF_FOGWALL
|
||||
405,0xb7, , 0, 0, -1,enemy, 0x000 //PF_SPIDERWEB
|
||||
404,0xb6, , -1, 0, -1,all, 0x8000 //PF_FOGWALL
|
||||
405,0xb7, , 0, 0, -1,enemy, 0x8000 //PF_SPIDERWEB
|
||||
409,0xb2, , 0,-1, -1,noone, 0x000 //WE_CALLBABY
|
||||
410,0xb2, , 0,-1, -1,noone, 0x000 //WE_CALLPARENT
|
||||
428,0x86, , 0, 1, 100,enemy, 0x000 //SG_SUN_WARM
|
||||
429,0x86, , 0, 1, 100,enemy, 0x000 //SG_MOON_WARM
|
||||
430,0x86, , 0, 1, 100,enemy, 0x000 //SG_STAR_WARM
|
||||
484,0xb8, , 2, 0, 500,enemy, 0x808 //HW_GRAVITATION
|
||||
484,0xb8, , 2, 0, 500,enemy, 0x8808 //HW_GRAVITATION
|
||||
488,0xb9, , 3, 0, -1,all, 0x200 //CG_HERMODE
|
||||
516,0x86, , 3, 0, 100,enemy, 0x000 //GS_DESPERADO
|
||||
521,0xbe, , 0, 1,1000,enemy, 0x000 //GS_GROUNDDRIFT
|
||||
525,0x86, , 0, 2,1000,enemy, 0x018 //NJ_HUUMA
|
||||
527,0xbc, , -1, 0,2000,enemy, 0x018 //NJ_TATAMIGAESHI
|
||||
535,0xbd, , -1, 0, 20,enemy, 0x010 //NJ_KAENSIN
|
||||
538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x010 //NJ_SUITON
|
||||
535,0xbd, , -1, 0, 20,enemy, 0x8010 //NJ_KAENSIN
|
||||
538,0xbb, , 1:1:1:2:2:2:3:3:3:4,0,-1,all,0x8010 //NJ_SUITON
|
||||
541,0x86, , 0, 3:3:4:4:5,1000,enemy, 0x018 //NJ_RAIGEKISAI
|
||||
670,0xc7, , 1, 4:7:10:13:16:19:22:25:28:31,1000,all,0x008 //NPC_EVILLAND
|
||||
|
||||
@@ -105,57 +108,57 @@
|
||||
|
||||
2044,0xca, , 0, 2,3000,all, 0x018 //AB_EPICLESIS
|
||||
|
||||
2032,0xe1, , 2, 0,1000,enemy, 0x018 //GC_POISONSMOKE
|
||||
2032,0xe1, , 2, 0,1000,enemy, 0x8018 //GC_POISONSMOKE
|
||||
|
||||
2213,0x86, , 0, 9,1000,enemy, 0x018 //WL_COMET
|
||||
2214,0x86, , 0, 5, 100,enemy, 0x080 //WL_CHAINLIGHTNING
|
||||
2216,0xcb, , -1, 2,2000,enemy, 0x018 //WL_EARTHSTRAIN
|
||||
|
||||
2238,0xd8, , 0, 1,1000,enemy, 0x006 //RA_ELECTRICSHOCKER
|
||||
2239,0xd9, , 0, 1,1000,enemy, 0x006 //RA_CLUSTERBOMB
|
||||
2249,0xd2, , 0, 1,1000,enemy, 0x022 //RA_MAGENTATRAP
|
||||
2250,0xd3, , 0, 1,1000,enemy, 0x022 //RA_COBALTTRAP
|
||||
2251,0xd4, , 0, 1,1000,enemy, 0x022 //RA_MAIZETRAP
|
||||
2252,0xd5, , 0, 1,1000,enemy, 0x022 //RA_VERDURETRAP
|
||||
2253,0xd6, , 0, 1,1000,enemy, 0x002 //RA_FIRINGTRAP
|
||||
2254,0xd7, , 0, 1,1000,enemy, 0x002 //RA_ICEBOUNDTRAP
|
||||
2238,0xd8, , 0, 1,1000,enemy, 0x9006 //RA_ELECTRICSHOCKER
|
||||
2239,0xd9, , 0, 1,1000,enemy, 0x8006 //RA_CLUSTERBOMB
|
||||
2249,0xd2, , 0, 1,1000,enemy, 0x8022 //RA_MAGENTATRAP
|
||||
2250,0xd3, , 0, 1,1000,enemy, 0x8022 //RA_COBALTTRAP
|
||||
2251,0xd4, , 0, 1,1000,enemy, 0x8022 //RA_MAIZETRAP
|
||||
2252,0xd5, , 0, 1,1000,enemy, 0x8022 //RA_VERDURETRAP
|
||||
2253,0xd6, , 0, 1,1000,enemy, 0x8002 //RA_FIRINGTRAP
|
||||
2254,0xd7, , 0, 1,1000,enemy, 0x8002 //RA_ICEBOUNDTRAP
|
||||
|
||||
2273,0xe2, , 2, 0, 500,all, 0x000 //NC_NEUTRALBARRIER
|
||||
2274,0xe3, , 2, 0, 500,friend,0x000 //NC_STEALTHFIELD
|
||||
|
||||
2299,0xcc, , 0, 1,1000,all, 0x006 //SC_MANHOLE
|
||||
2300,0xcd, , 0, 0,1000,all, 0x006 //SC_DIMENSIONDOOR
|
||||
2301,0xce, , 2, 0, -1,all, 0x200E //SC_CHAOSPANIC
|
||||
2302,0xcf, , 2, 0, -1,all, 0x2002 //SC_MAELSTROM
|
||||
2303,0xd0, , 3, 0, -1,all, 0x2058 //SC_BLOODYLUST
|
||||
2299,0xcc, , 0, 1,1000,all, 0xC006 //SC_MANHOLE
|
||||
2300,0xcd, , 0, 0,1000,all, 0xC006 //SC_DIMENSIONDOOR
|
||||
2301,0xce, , 2, 0, -1,all, 0xC00E //SC_CHAOSPANIC
|
||||
2302,0xcf, , 2, 0, -1,all, 0xC002 //SC_MAELSTROM
|
||||
2303,0xd0, , 3, 0, -1,all, 0xE058 //SC_BLOODYLUST
|
||||
2304,0xd1, , 0, 2, 500,enemy, 0x018 //SC_FEINTBOMB
|
||||
|
||||
2319,0xec, , 0, 3,5000,all, 0x000 //LG_BANDING
|
||||
|
||||
2414,0xda, , 0, 0,1000,enemy, 0x008 //WM_REVERBERATION
|
||||
2414,0xda, , 0, 0,1000,enemy, 0x1008 //WM_REVERBERATION
|
||||
2418,0xdb, , 0, 5, 300,enemy, 0x800 //WM_SEVERE_RAINSTORM
|
||||
2419,0xde, , 0, 1,1000,enemy, 0x014 //WM_POEMOFNETHERWORLD
|
||||
2419,0xde, , 0, 1,1000,enemy, 0x1014 //WM_POEMOFNETHERWORLD
|
||||
|
||||
2443,0xdc, , 0, 0,1000,enemy, 0x00A //SO_FIREWALK
|
||||
2444,0xdd, , 0, 0,1000,enemy, 0x00A //SO_ELECTRICWALK
|
||||
2446,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_EARTHGRAVE
|
||||
2447,0x86, , 0, 3:3:3:4:4,1000,enemy, 0x018 //SO_DIAMONDDUST
|
||||
2449,0xdf, , 0, 3:3:4:4:5,500,enemy, 0x018 //SO_PSYCHIC_WAVE
|
||||
2450,0xe0, , 0, 3, 500,enemy, 0x010 //SO_CLOUD_KILL
|
||||
2452,0xe4, , 0, 3,3000,all, 0x010 //SO_WARMER
|
||||
2453,0xeb, , 0, 1:1:2:2:3,500,enemy,0x010 //SO_VACUUM_EXTREME
|
||||
2450,0xe0, , 0, 3, 500,enemy, 0x8010 //SO_CLOUD_KILL
|
||||
2452,0xe4, , 0, 3,3000,all, 0x8010 //SO_WARMER
|
||||
2453,0xeb, , 0, 1:1:2:2:3,500,enemy,0x8010 //SO_VACUUM_EXTREME
|
||||
2465,0xf1, , 0, 1,1000,all, 0x010 //SO_FIRE_INSIGNIA
|
||||
2466,0xf2, , 0, 1,1000,all, 0x010 //SO_WATER_INSIGNIA
|
||||
2467,0xf3, , 0, 1,1000,all, 0x010 //SO_WIND_INSIGNIA
|
||||
2468,0xf4, , 0, 1,1000,all, 0x010 //SO_EARTH_INSIGNIA
|
||||
|
||||
2479,0xe5, , 0, 1,1000,enemy, 0x006 //GN_THORNS_TRAP
|
||||
2482,0xe6,0x7f, 0, 1, 100,all, 0x000 //GN_WALLOFTHORN
|
||||
2479,0xe5, , 0, 1,1000,enemy, 0xC006 //GN_THORNS_TRAP
|
||||
2482,0xe6,0x7f, 0, 1, 100,all, 0xD000 //GN_WALLOFTHORN
|
||||
2484,0x86, , 0, 1, 100,enemy, 0x080 //GN_CRAZYWEED_ATK
|
||||
2485,0xe7, , 0, 2,2000,enemy, 0x098 //GN_DEMONIC_FIRE
|
||||
2485,0xe7, , 0, 2,2000,enemy, 0x8098 //GN_DEMONIC_FIRE
|
||||
2487,0xe8, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_SMOKE_POWDER
|
||||
2488,0xe9, , 2, 0, -1,enemy, 0x2000 //GN_FIRE_EXPANSION_TEAR_GAS
|
||||
2490,0xea, , 0, 1,1000,enemy, 0x002 //GN_HELLS_PLANT
|
||||
2490,0xea, , 0, 1,1000,enemy, 0x8002 //GN_HELLS_PLANT
|
||||
|
||||
2555,0x104, , 0, 1:2:2:3:3,500,enemy,0x6 //RL_B_TRAP
|
||||
2567,0x105, , -1, 0,1000,enemy, 0x98 //RL_FIRE_RAIN
|
||||
@@ -177,10 +180,10 @@
|
||||
8043,0xf7, , 1, 0,-1,all, 0x2018 //MH_VOLCANIC_ASH
|
||||
|
||||
8208,0x86, , 0, 2,1000,enemy, 0x080 //MA_SHOWER
|
||||
8209,0x90, , 0, 1,1000,enemy, 0x006 //MA_SKIDTRAP
|
||||
8210,0x93, , 0, 0,1000,enemy, 0x006 //MA_LANDMINE
|
||||
8211,0x95, , 0, 1,1000,enemy, 0x006 //MA_SANDMAN
|
||||
8212,0x97, , 0, 1,1000,enemy, 0x006 //MA_FREEZINGTRAP
|
||||
8209,0x90, , 0, 1,1000,enemy, 0x8006 //MA_SKIDTRAP
|
||||
8210,0x93, , 0, 0,1000,enemy, 0x8006 //MA_LANDMINE
|
||||
8211,0x95, , 0, 1,1000,enemy, 0x8006 //MA_SANDMAN
|
||||
8212,0x97, , 0, 1,1000,enemy, 0x8006 //MA_FREEZINGTRAP
|
||||
|
||||
8403,0xed, , -1, 1,1000,enemy, 0x018 //EL_FIRE_MANTLE
|
||||
8406,0xee, , 0, 1, -1,friend,0x018 //EL_WATER_BARRIER
|
||||
|
||||
@@ -142,7 +142,7 @@ Loc: Equipment's placement. Values are:
|
||||
2^16 65536 = Shadow Armor
|
||||
2^17 131072 = Shadow Weapon
|
||||
2^18 262144 = Shadow Shield
|
||||
2^18 524288 = Shadow Shoes
|
||||
2^19 524288 = Shadow Shoes
|
||||
2^20 1048576 = Shadow Accessory Right (Earring)
|
||||
2^21 2097152 = Shadow Accessory Left (Pendant)
|
||||
|
||||
|
||||
@@ -3701,6 +3701,7 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
|
||||
uint16 lv = skill_lv;
|
||||
skillratio += 100 * skill_check_pc_partner(sd,skill_id,&lv,skill_get_splash(skill_id,skill_lv),0);
|
||||
}
|
||||
RE_LVL_DMOD(100);
|
||||
break;
|
||||
case WM_SOUND_OF_DESTRUCTION:
|
||||
skillratio = (1000 * skill_lv) + (((sd) ? pc_checkskill(sd, WM_LESSON) : skill_get_max(WM_LESSON)) * status_get_int(src));
|
||||
@@ -3875,6 +3876,9 @@ static int battle_calc_attack_skill_ratio(struct Damage wd, struct block_list *s
|
||||
case RL_R_TRIP:
|
||||
skillratio += -100 + (150 * skill_lv); //(custom)
|
||||
break;
|
||||
case RL_R_TRIP_PLUSATK:
|
||||
skillratio += -100 + (50 * skill_lv); //(custom)
|
||||
break;
|
||||
case RL_H_MINE:
|
||||
skillratio += 100 + (200 * skill_lv);
|
||||
//If damaged by Flicker
|
||||
|
||||
@@ -1589,6 +1589,7 @@ void pc_calc_skilltree(struct map_session_data *sd)
|
||||
case LG_OVERBRAND_BRANDISH:
|
||||
case LG_OVERBRAND_PLUSATK:
|
||||
case WM_SEVERE_RAINSTORM_MELEE:
|
||||
case RL_R_TRIP_PLUSATK:
|
||||
continue;
|
||||
default:
|
||||
break;
|
||||
|
||||
170
src/map/skill.c
170
src/map/skill.c
@@ -110,6 +110,8 @@ struct s_skill_nounit_layout skill_nounit_layout[MAX_SKILL_UNIT_LAYOUT];
|
||||
int overbrand_nounit_pos;
|
||||
int overbrand_brandish_nounit_pos;
|
||||
|
||||
static char dir_ka = -1; // Holds temporary direction to the target for SR_KNUCKLEARROW
|
||||
|
||||
//early declaration
|
||||
int skill_block_check(struct block_list *bl, enum sc_type type, uint16 skill_id);
|
||||
static int skill_check_unit_range (struct block_list *bl, int x, int y, uint16 skill_id, uint16 skill_lv);
|
||||
@@ -2345,67 +2347,68 @@ int skill_strip_equip(struct block_list *src,struct block_list *bl, unsigned sho
|
||||
static int skill_area_temp[8];
|
||||
/*=========================================================================
|
||||
Used to knock back players, monsters, traps, etc
|
||||
- 'count' is the number of squares to knock back
|
||||
- 'direction' indicates the way OPPOSITE to the knockback direction (or -1 for default behavior)
|
||||
- if 'flag&0x1', position update packets must not be sent.
|
||||
- if 'flag&0x2', skill blown ignores players' special_state.no_knockback
|
||||
* @param src Object that give knock back
|
||||
* @param target Object that receive knock back
|
||||
* @param count Number of knock back cell requested
|
||||
* @param dir Direction indicates the way OPPOSITE to the knockback direction (or -1 for default behavior)
|
||||
* @param flag
|
||||
0x01 - position update packets must not be sent;
|
||||
0x02 - ignores players' special_state.no_knockback;
|
||||
These flags "return 'count' instead of 0 if target is cannot be knocked back":
|
||||
0x04 - at WOE/BG map;
|
||||
0x08 - if target is MD_KNOCKBACK_IMMUNE|MD_BOSS;
|
||||
0x10 - if target has 'special_state.no_knockback';
|
||||
0x20 - if target is in Basilica area;
|
||||
* @return Number of knocked back cells done
|
||||
-------------------------------------------------------------------------*/
|
||||
int skill_blown(struct block_list* src, struct block_list* target, int count, int8 dir, int flag) {
|
||||
short skill_blown(struct block_list* src, struct block_list* target, char count, int8 dir, unsigned char flag) {
|
||||
int dx = 0, dy = 0;
|
||||
struct skill_unit* su = NULL;
|
||||
|
||||
nullpo_ret(src);
|
||||
nullpo_ret(target);
|
||||
|
||||
if (count == 0)
|
||||
return count; // Actual knockback distance is 0.
|
||||
|
||||
if (src != target && (map_flag_gvg(target->m) || map[target->m].flag.battleground))
|
||||
return 0; //No knocking back in WoE
|
||||
if (count == 0)
|
||||
return 0; //Actual knockback distance is 0.
|
||||
return ((flag&0x04) ? count : 0); // No knocking back in WoE
|
||||
|
||||
switch (target->type) {
|
||||
case BL_MOB: {
|
||||
struct mob_data* md = BL_CAST(BL_MOB, target);
|
||||
if( md->mob_id == MOBID_EMPERIUM )
|
||||
return 0;
|
||||
//Bosses or imune can't be knocked-back
|
||||
return count;
|
||||
// Bosses or imune can't be knocked-back
|
||||
if(src != target && status_get_mode(target)&(MD_KNOCKBACK_IMMUNE|MD_BOSS))
|
||||
return 0;
|
||||
return ((flag&0x08) ? count : 0);
|
||||
}
|
||||
break;
|
||||
case BL_PC: {
|
||||
struct map_session_data *sd = BL_CAST(BL_PC, target);
|
||||
if( sd->sc.data[SC_BASILICA] && sd->sc.data[SC_BASILICA]->val4 == sd->bl.id && !is_boss(src))
|
||||
return 0; // Basilica caster can't be knocked-back by normal monsters.
|
||||
return ((flag&0x20) ? count : 0); // Basilica caster can't be knocked-back by normal monsters.
|
||||
if( !(flag&0x2) && src != target && sd->special_state.no_knockback )
|
||||
return 0;
|
||||
return ((flag&0x10) ? count : 0);
|
||||
}
|
||||
break;
|
||||
case BL_SKILL:
|
||||
su = (struct skill_unit *)target;
|
||||
|
||||
if (su && su->group) {
|
||||
switch (su->group->unit_id) {
|
||||
case UNT_ICEWALL:
|
||||
case UNT_ANKLESNARE:
|
||||
case UNT_ELECTRICSHOCKER:
|
||||
case UNT_REVERBERATION:
|
||||
case UNT_NETHERWORLD:
|
||||
case UNT_WALLOFTHORN:
|
||||
return 0; //Cannot be knocked back
|
||||
}
|
||||
case BL_SKILL: {
|
||||
struct skill_unit* su = NULL;
|
||||
su = (struct skill_unit *)target;
|
||||
if (su && su->group && skill_get_unit_flag(su->group->skill_id)&UF_NOKNOCKBACK)
|
||||
return count; // Cannot be knocked back
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (dir == -1) // <optimized>: do the computation here instead of outside
|
||||
dir = map_calc_dir(target, src->x, src->y); // direction from src to target, reversed
|
||||
dir = map_calc_dir(target, src->x, src->y); // Direction from src to target, reversed
|
||||
|
||||
if (dir >= 0 && dir < 8)
|
||||
{ // take the reversed 'direction' and reverse it
|
||||
if (dir >= 0 && dir < 8) { // Take the reversed 'direction' and reverse it
|
||||
dx = -dirx[dir];
|
||||
dy = -diry[dir];
|
||||
}
|
||||
|
||||
return unit_blown(target, dx, dy, count, flag); // send over the proper flag
|
||||
return unit_blown(target, dx, dy, count, flag); // Send over the proper flag
|
||||
}
|
||||
|
||||
|
||||
@@ -3032,6 +3035,9 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
|
||||
case WZ_SIGHTBLASTER:
|
||||
dmg.dmotion = clif_skill_damage(src,bl,tick, dmg.amotion, dmg.dmotion, damage, dmg.div_, skill_id, flag&SD_LEVEL?-1:skill_lv, 5);
|
||||
break;
|
||||
case RL_R_TRIP_PLUSATK:
|
||||
dmg.dmotion = clif_skill_damage(dsrc,bl,tick,status_get_amotion(src),dmg.dmotion,damage,dmg.div_,skill_id,-1,5);
|
||||
break;
|
||||
case AB_DUPLELIGHT_MELEE:
|
||||
case AB_DUPLELIGHT_MAGIC:
|
||||
dmg.amotion = 300;/* makes the damage value not overlap with previous damage (when displayed by the client) */
|
||||
@@ -3075,16 +3081,16 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
|
||||
|
||||
//Only knockback if it's still alive, otherwise a "ghost" is left behind. [Skotlex]
|
||||
//Reflected spells do not bounce back (bl == dsrc since it only happens for direct skills)
|
||||
if (dmg.blewcount > 0 && bl!=dsrc && !status_isdead(bl)) {
|
||||
int8 dir = -1; // default
|
||||
switch(skill_id) {//direction
|
||||
if (dmg.blewcount > 0 && bl != dsrc && !status_isdead(bl)) {
|
||||
int8 dir = -1; // Default direction
|
||||
// Skill spesific direction
|
||||
switch (skill_id) {
|
||||
case MG_FIREWALL:
|
||||
case PR_SANCTUARY:
|
||||
case SC_TRIANGLESHOT:
|
||||
case SR_KNUCKLEARROW:
|
||||
case GN_WALLOFTHORN:
|
||||
case EL_FIRE_MANTLE:
|
||||
dir = unit_getdir(bl);// backwards
|
||||
dir = unit_getdir(bl); // Backwards
|
||||
break;
|
||||
// This ensures the storm randomly pushes instead of exactly a cell backwards per official mechanics.
|
||||
case WZ_STORMGUST:
|
||||
@@ -3097,25 +3103,42 @@ int64 skill_attack (int attack_type, struct block_list* src, struct block_list *
|
||||
if (battle_config.cart_revo_knockback)
|
||||
dir = 6; // Official servers push target to the West
|
||||
break;
|
||||
case AC_SHOWER:
|
||||
// Direction between target to actual attacker location instead of the unit location (bugreport:1709)
|
||||
if (dsrc != src)
|
||||
dir = map_calc_dir(bl, src->x, src->y);
|
||||
break;
|
||||
}
|
||||
//blown-specific handling
|
||||
// Blown-specific handling
|
||||
switch( skill_id ) {
|
||||
case LG_OVERBRAND_BRANDISH:
|
||||
if( skill_blown(dsrc,bl,dmg.blewcount,dir,0) < dmg.blewcount )
|
||||
// Give knockback damage bonus only hits the wall. (bugreport:9096)
|
||||
if( skill_blown(dsrc,bl,dmg.blewcount,dir,0x04|0x08|0x10|0x20) < dmg.blewcount )
|
||||
skill_addtimerskill(src, tick + status_get_amotion(src), bl->id, 0, 0, LG_OVERBRAND_PLUSATK, skill_lv, BF_WEAPON, flag|SD_ANIMATION);
|
||||
break;
|
||||
case SR_KNUCKLEARROW:
|
||||
if (!(flag&4)) {
|
||||
short i = skill_blown(dsrc, bl, dmg.blewcount, dir, 0);
|
||||
short x = bl->x, y = bl->y;
|
||||
|
||||
if (!map_flag_gvg2(src->m) && !map[src->m].flag.battleground && unit_movepos(src,bl->x,bl->y,1,1)) {
|
||||
// Ignore knockback damage bonus if in WOE (player cannot be knocked in WOE)
|
||||
// Boss & Immune Knockback (mode or from bonus bNoKnockBack) target still remains the damage bonus
|
||||
// (bugreport:9096)
|
||||
if (skill_blown(dsrc, bl, dmg.blewcount, dir_ka, 0x04) < dmg.blewcount)
|
||||
skill_addtimerskill(src, tick + 300 * ((flag&2) ? 1 : 2), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|4);
|
||||
|
||||
dir_ka = -1;
|
||||
|
||||
// Move attacker to the target position after knocked back
|
||||
if ((bl->x != x || bl->y != y) && unit_movepos(src,bl->x,bl->y,1,1)) {
|
||||
clif_slide(src, bl->x, bl->y);
|
||||
clif_fixpos(src);
|
||||
}
|
||||
if (i < dmg.blewcount)
|
||||
skill_addtimerskill(src, tick + 300 * ((flag&2) ? 1 : 2), bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|4);
|
||||
}
|
||||
break;
|
||||
case RL_R_TRIP:
|
||||
if( skill_blown(dsrc,bl,dmg.blewcount,dir,0) < dmg.blewcount )
|
||||
skill_addtimerskill(src, tick + status_get_amotion(src), bl->id, 0, 0, RL_R_TRIP_PLUSATK, skill_lv, BF_WEAPON, flag|SD_ANIMATION);
|
||||
break;
|
||||
default:
|
||||
skill_blown(dsrc,bl,dmg.blewcount,dir, 0x0 );
|
||||
if ( !dmg.blewcount && bl->type == BL_SKILL && damage > 0 ){
|
||||
@@ -5120,15 +5143,18 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
|
||||
break;
|
||||
|
||||
case SR_KNUCKLEARROW:
|
||||
if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground && unit_movepos(src, bl->x, bl->y, 1, 1) ) {
|
||||
clif_slide(src, bl->x, bl->y);
|
||||
clif_fixpos(src);
|
||||
}
|
||||
// Holds current direction of bl/target to src/attacker before the src is moved to bl location
|
||||
dir_ka = map_calc_dir(bl, src->x, src->y);
|
||||
// Has slide effect even in GVG
|
||||
if( unit_movepos(src, bl->x, bl->y, 1, 1) ) {
|
||||
clif_slide(src, bl->x, bl->y);
|
||||
clif_fixpos(src);
|
||||
}
|
||||
|
||||
if( flag&1 )
|
||||
skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag|SD_LEVEL);
|
||||
else
|
||||
skill_addtimerskill(src, tick + 300, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|SD_LEVEL|2);
|
||||
if( flag&1 )
|
||||
skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag|SD_LEVEL);
|
||||
else
|
||||
skill_addtimerskill(src, tick + 300, bl->id, 0, 0, skill_id, skill_lv, BF_WEAPON, flag|SD_LEVEL|2);
|
||||
break;
|
||||
|
||||
case SR_HOWLINGOFLION:
|
||||
@@ -11490,7 +11516,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui
|
||||
case 6: sx = x + w; break;
|
||||
case 7: sy = y + w; sx = x + w; break;
|
||||
}
|
||||
skill_addtimerskill(src,gettick() + (140 * w),0,sx,sy,skill_id,skill_lv,dir,flag);
|
||||
skill_addtimerskill(src,gettick() + (40 * w),0,sx,sy,skill_id,skill_lv,dir,flag);
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -16259,43 +16285,17 @@ static int skill_cell_overlap(struct block_list *bl, va_list ap)
|
||||
}
|
||||
break;
|
||||
case GN_CRAZYWEED_ATK:
|
||||
switch(unit->group->unit_id) {
|
||||
case UNT_WALLOFTHORN:
|
||||
case UNT_THORNS_TRAP:
|
||||
case UNT_MANHOLE:
|
||||
case UNT_DIMENSIONDOOR:
|
||||
case UNT_BLOODYLUST:
|
||||
case UNT_CHAOSPANIC:
|
||||
case UNT_MAELSTROM:
|
||||
case UNT_FIREPILLAR_ACTIVE:
|
||||
case UNT_LANDPROTECTOR:
|
||||
case UNT_VOLCANO:
|
||||
case UNT_DELUGE:
|
||||
case UNT_VIOLENTGALE:
|
||||
case UNT_SAFETYWALL:
|
||||
case UNT_PNEUMA:
|
||||
skill_delunit(unit);
|
||||
return 1;
|
||||
if (unit->group->skill_id == WZ_FIREPILLAR && unit->group->unit_id != UNT_FIREPILLAR_ACTIVE)
|
||||
break;
|
||||
if (skill_get_unit_flag(unit->group->skill_id)&UF_REM_CRAZYWEED) {
|
||||
skill_delunit(unit);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
case RL_FIRE_RAIN:
|
||||
switch (unit->group->unit_id) {
|
||||
case UNT_LANDPROTECTOR: case UNT_ICEWALL: case UNT_FIREWALL:
|
||||
case UNT_WARMER: case UNT_CLOUD_KILL: case UNT_VACUUM_EXTREME:
|
||||
case UNT_SPIDERWEB: case UNT_FOGWALL: case UNT_DELUGE:
|
||||
case UNT_VIOLENTGALE: case UNT_VOLCANO: case UNT_QUAGMIRE:
|
||||
case UNT_GRAVITATION: case UNT_MAGNUS: case UNT_THORNS_TRAP:
|
||||
case UNT_WALLOFTHORN: case UNT_DEMONIC_FIRE: case UNT_HELLS_PLANT:
|
||||
case UNT_POISONSMOKE: case UNT_VENOMDUST: case UNT_MAELSTROM:
|
||||
case UNT_MANHOLE: case UNT_DIMENSIONDOOR: case UNT_GRAFFITI:
|
||||
case UNT_LANDMINE: case UNT_SANDMAN: case UNT_SHOCKWAVE:
|
||||
case UNT_SKIDTRAP: case UNT_ANKLESNARE: case UNT_CLAYMORETRAP:
|
||||
case UNT_TALKIEBOX: case UNT_FREEZINGTRAP: case UNT_VERDURETRAP:
|
||||
case UNT_ICEBOUNDTRAP: case UNT_FIRINGTRAP: case UNT_ELECTRICSHOCKER:
|
||||
case UNT_DISSONANCE: case UNT_ROKISWEIL: case UNT_ETERNALCHAOS:
|
||||
case UNT_SUITON: case UNT_KAEN:
|
||||
skill_delunit(unit);
|
||||
return 1;
|
||||
if (skill_get_unit_flag(unit->group->skill_id)&UF_REM_FIRERAIN) {
|
||||
skill_delunit(unit);
|
||||
return 1;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -253,19 +253,22 @@ struct skill_unit_group_tickset {
|
||||
|
||||
|
||||
enum {
|
||||
UF_DEFNOTENEMY = 0x0001, // If 'defunit_not_enemy' is set, the target is changed to 'friend'
|
||||
UF_NOREITERATION = 0x0002, // Spell cannot be stacked
|
||||
UF_NOFOOTSET = 0x0004, // Spell cannot be cast near/on targets
|
||||
UF_NOOVERLAP = 0x0008, // Spell effects do not overlap
|
||||
UF_PATHCHECK = 0x0010, // Only cells with a shootable path will be placed
|
||||
UF_NOPC = 0x0020, // May not target players
|
||||
UF_NOMOB = 0x0040, // May not target mobs
|
||||
UF_SKILL = 0x0080, // May target skills
|
||||
UF_DANCE = 0x0100, // Dance
|
||||
UF_ENSEMBLE = 0x0200, // Duet
|
||||
UF_SONG = 0x0400, // Song
|
||||
UF_DUALMODE = 0x0800, // Spells should trigger both ontimer and onplace/onout/onleft effects.
|
||||
UF_RANGEDSINGLEUNIT = 0x2000 // hack for ranged layout, only display center
|
||||
UF_DEFNOTENEMY = 0x0001, // If 'defunit_not_enemy' is set, the target is changed to 'friend'
|
||||
UF_NOREITERATION = 0x0002, // Spell cannot be stacked
|
||||
UF_NOFOOTSET = 0x0004, // Spell cannot be cast near/on targets
|
||||
UF_NOOVERLAP = 0x0008, // Spell effects do not overlap
|
||||
UF_PATHCHECK = 0x0010, // Only cells with a shootable path will be placed
|
||||
UF_NOPC = 0x0020, // May not target players
|
||||
UF_NOMOB = 0x0040, // May not target mobs
|
||||
UF_SKILL = 0x0080, // May target skills
|
||||
UF_DANCE = 0x0100, // Dance
|
||||
UF_ENSEMBLE = 0x0200, // Duet
|
||||
UF_SONG = 0x0400, // Song
|
||||
UF_DUALMODE = 0x0800, // Spells should trigger both ontimer and onplace/onout/onleft effects.
|
||||
UF_NOKNOCKBACK = 0x1000, // Skill unit cannot be knocked back
|
||||
UF_RANGEDSINGLEUNIT = 0x2000, // hack for ranged layout, only display center
|
||||
UF_REM_CRAZYWEED = 0x4000, // removed by Crazyweed
|
||||
UF_REM_FIRERAIN = 0x8000, // removed by Fire Rain
|
||||
};
|
||||
|
||||
/// Create Database item
|
||||
@@ -366,7 +369,7 @@ int skill_addtimerskill(struct block_list *src,unsigned int tick,int target,int
|
||||
// Results? Added
|
||||
int skill_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,int dmg_lv,unsigned int tick);
|
||||
int skill_counter_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,unsigned int tick);
|
||||
int skill_blown(struct block_list* src, struct block_list* target, int count, int8 dir, int flag);
|
||||
short skill_blown(struct block_list* src, struct block_list* target, char count, int8 dir, unsigned char flag);
|
||||
int skill_break_equip(struct block_list *src,struct block_list *bl, unsigned short where, int rate, int flag);
|
||||
int skill_strip_equip(struct block_list *src,struct block_list *bl, unsigned short where, int rate, int lv, int time);
|
||||
// Skills unit
|
||||
|
||||
@@ -2632,6 +2632,8 @@ static int status_get_hpbonus(struct block_list *bl, enum e_status_bonus type) {
|
||||
if(sc->data[SC_EQC])
|
||||
bonus -= sc->data[SC_EQC]->val4;
|
||||
}
|
||||
// Max rate reduce is -100%
|
||||
bonus = cap_value(bonus,-100,INT_MAX);
|
||||
}
|
||||
|
||||
return min(bonus,INT_MAX);
|
||||
@@ -2704,6 +2706,8 @@ static int status_get_spbonus(struct block_list *bl, enum e_status_bonus type) {
|
||||
if(sc->data[SC_LIFE_FORCE_F])
|
||||
bonus += sc->data[SC_LIFE_FORCE_F]->val1;
|
||||
}
|
||||
// Max rate reduce is -100%
|
||||
bonus = cap_value(bonus,-100,INT_MAX);
|
||||
}
|
||||
|
||||
return min(bonus,INT_MAX);
|
||||
|
||||
@@ -464,7 +464,7 @@ int unit_delay_walktobl_timer(int tid, unsigned int tick, int id, intptr_t data)
|
||||
* &4: Delay walking for can_move
|
||||
* @return 1: Success 0: Fail or unit_walktoxy_sub()
|
||||
*/
|
||||
int unit_walktoxy( struct block_list *bl, short x, short y, int flag)
|
||||
int unit_walktoxy( struct block_list *bl, short x, short y, unsigned char flag)
|
||||
{
|
||||
struct unit_data* ud = NULL;
|
||||
struct status_change* sc = NULL;
|
||||
@@ -571,7 +571,7 @@ static int unit_walktobl_sub(int tid, unsigned int tick, int id, intptr_t data)
|
||||
* &2: Start attacking upon arrival within range, otherwise just walk to target
|
||||
* @return 1: Started walking or set timer 0: Failed
|
||||
*/
|
||||
int unit_walktobl(struct block_list *bl, struct block_list *tbl, int range, int flag)
|
||||
int unit_walktobl(struct block_list *bl, struct block_list *tbl, int range, unsigned char flag)
|
||||
{
|
||||
struct unit_data *ud = NULL;
|
||||
struct status_change *sc = NULL;
|
||||
|
||||
@@ -74,8 +74,8 @@ struct view_data {
|
||||
// PC, MOB, PET
|
||||
|
||||
// Does walk action for unit
|
||||
int unit_walktoxy( struct block_list *bl, short x, short y, int easy);
|
||||
int unit_walktobl( struct block_list *bl, struct block_list *target, int range, int easy);
|
||||
int unit_walktoxy( struct block_list *bl, short x, short y, unsigned char flag);
|
||||
int unit_walktobl( struct block_list *bl, struct block_list *target, int range, unsigned char flag);
|
||||
int unit_run(struct block_list *bl);
|
||||
int unit_calc_pos(struct block_list *bl, int tx, int ty, uint8 dir);
|
||||
int unit_delay_walktoxy_timer(int tid, unsigned int tick, int id, intptr_t data);
|
||||
|
||||
Reference in New Issue
Block a user