From 83e3b8d22acc73aeaafbf2a95e1fb9e6b228a63a Mon Sep 17 00:00:00 2001 From: malufett Date: Thu, 4 Jul 2013 23:22:12 +0800 Subject: Fixed Bug#7459 -where 'working in progress' state is not cancel in change map/teleport. Fixed Bug#7265 -where casting AL_INCAGI into chars force them to stand where it now suppose to be. Fixed Bug#7337 -fixed some skills that deals 'work in progress' state. Fixed Bug#7467 -fixed compiling warning message. Renewal Updates -Temporary fix for skills final damage reduction. -Updated NJ_KUNAI to its renewal formula. -Updated/Fixed some interface messages. -Implemented additional new 3rd job skills(GN_ILLUSIONDOPING,RK_LUXANIMA,SO_ELEMENTAL_SHIELD,SC_ESCAPE) Signed-off-by: malufett --- db/item_delay.txt | 1 + db/item_stack.txt | 1 + db/pre-re/item_db.txt | 2 + db/pre-re/skill_cast_db.txt | 10 +++- db/pre-re/skill_db.txt | 10 ++-- db/pre-re/skill_require_db.txt | 18 +++--- db/pre-re/skill_tree.conf | 20 ++++--- db/produce_db.txt | 2 + db/re/item_db.txt | 1 + db/re/skill_cast_db.txt | 13 ++++- db/re/skill_db.txt | 12 ++-- db/re/skill_require_db.txt | 4 +- db/re/skill_tree.conf | 20 ++++--- src/char/char.c | 2 +- src/config/const.h | 5 ++ src/map/battle.c | 16 ++++-- src/map/clif.c | 17 ++++++ src/map/itemdb.h | 3 +- src/map/pc.c | 23 ++++++-- src/map/skill.c | 124 ++++++++++++++++++++++++++++++++++++----- src/map/status.c | 18 +++--- src/map/status.h | 3 +- 22 files changed, 246 insertions(+), 79 deletions(-) diff --git a/db/item_delay.txt b/db/item_delay.txt index afcb56f9e..c5bf0da7d 100644 --- a/db/item_delay.txt +++ b/db/item_delay.txt @@ -33,4 +33,5 @@ 12726,30000 // Runstone_Rhydo,Raido Rune 12727,60000 // Runstone_Verkana,Berkana Rune 12732,1000 // Runstone_Pertz,Wyrd Rune +22540,60000 // Runstone_Luxanima,Lux Anima Rune diff --git a/db/item_stack.txt b/db/item_stack.txt index b2932b56b..262945c4c 100644 --- a/db/item_stack.txt +++ b/db/item_stack.txt @@ -22,6 +22,7 @@ 12731,20,1 // Thurisaz Rune 12732,20,1 // Wyrd Rune 12733,20,1 // Hagalaz Rune +22540,20,1 // Lux Anima Rune // Arch Bishop 12333,3,1 // Ancilla diff --git a/db/pre-re/item_db.txt b/db/pre-re/item_db.txt index c01d60b75..191cb0d86 100644 --- a/db/pre-re/item_db.txt +++ b/db/pre-re/item_db.txt @@ -6554,3 +6554,5 @@ 19505,T_Cigarette,T Cigarette,5,0,,0,,0,,0,0xFFFFFFFF,7,2,4096,,0,0,54,{},{},{} 19506,T_Valkyrie_Feather_Band,T Valkyrie Feather Band,5,0,,0,,0,,0,0xFFFFFFFF,7,2,1024,,0,1,300,{},{},{} 19507,Clear_Sun,Clear Sun,5,0,,0,,0,,0,0xFFFFFFFF,7,2,1024,,1,0,654,{},{},{} + +22540,Runstone_Luxanima,Lux Anima Rune,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_LUXANIMA",1; },{},{} \ No newline at end of file diff --git a/db/pre-re/skill_cast_db.txt b/db/pre-re/skill_cast_db.txt index abcda323b..38347f931 100644 --- a/db/pre-re/skill_cast_db.txt +++ b/db/pre-re/skill_cast_db.txt @@ -1110,6 +1110,8 @@ 2019,0,0,0,180000,0,0 //-- RK_DRAGONBREATH_WATER 5004,0:0:0:1000:1000:1000:1500:1500:2000:2000,2000,0,40000,0,0 +//-- RK_LUXANIMA +5005,0,0,0,60000,0,0 //========================================== //===== Gillotine Cross ==================== @@ -1147,7 +1149,7 @@ //-- GC_CROSSRIPPERSLASHER 2037,0,1000,0,0,0,0 //-- GC_DARKCROW -5001,0,1500,0,5000,0,0 +5001,0,1500,0,5000,0,60000 //========================================== //===== Arch Bishop ======================== @@ -1381,6 +1383,8 @@ 2303,2000,2000,0,10000:20000:30000,0,180000 //-- SC_FEINTBOMB 2304,1000,0,0,1000,0,5000 +//-- SC_ESCAPE +5010,0,0,0,1000,0,15000 //========================================== //==== Royal Guard skills ================== @@ -1589,6 +1593,8 @@ 2467,1000,0,0,60000,0,60000 //-- SO_EARTH_INSIGNIA 2468,1000,0,0,60000,0,60000 +//-- SO_ELEMENTAL_SHIELD +5008,1000,0,0,0,0,10000 //========================================== //==== Genetic skills ====================== @@ -1631,6 +1637,8 @@ //-- GN_SLINGITEM_RANGEMELEEATK 2498,0,0,0,3000,0,0 +//-- GN_ILLUSIONDOPING +5003,0,0,0,10000,0,10000 //========================================== //===== Extra 3rd Class Skills ============= diff --git a/db/pre-re/skill_db.txt b/db/pre-re/skill_db.txt index 26030c867..54b891c51 100644 --- a/db/pre-re/skill_db.txt +++ b/db/pre-re/skill_db.txt @@ -1067,16 +1067,16 @@ 3035,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, ECLAGE_RECALL,Return To Eclage // EP 14.3 Part 2 3rd Job Skills -5001,1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, GC_DARKCROW,Dark Claw +5001,1,8,1,-1,0,0,5,3,no,0,0,0,weapon,0, GC_DARKCROW,Dark Claw 5002,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, RA_UNLIMIT,Unlimited -//5003,7,6,1,-1,0x2,4:5:6:7:8,5,1,no,0,0,0,weapon,0, GN_ILLUSIONDOPING,Illusion Doping +5003,7,6,1,-1,0x2,4:5:6:7:8,5,1,no,0,0,0,weapon,0, GN_ILLUSIONDOPING,Illusion Doping 5004,9,6,2,1,0x2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0, RK_DRAGONBREATH_WATER,Dragon Breath - Water -//5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0, RK_LUXANIMA,Lux Anima +5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0, RK_LUXANIMA,Lux Anima 5006,1,6,2,3,0,0,5,1,no,0,0,3,misc,0, NC_MAGMA_ERUPTION,Magma Eruption 5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0, WM_FRIGG_SONG,Frigg's Song -//5008,0,6,4,0,0x3,15,5,1,no,0,0,0,none,0, SO_ELEMENTAL_SHIELD,Elemental Shield +5008,0,6,4,0,0x3,15,5,1,no,0,0,0,none,0, SO_ELEMENTAL_SHIELD,Elemental Shield 5009,1,6,1,0,0x1,0,5,1,no,0,0,0,none,0, SR_FLASHCOMBO,Flash Combo -//5010,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, SC_ESCAPE,Emergency Escape +5010,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, SC_ESCAPE,Emergency Escape 5011,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, AB_OFFERTORIUM,Offertorium 5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, WL_TELEKINESIS_INTENSE,Intense Telekinesis 5013,0,6,4,0,0x3,5,5,1,no,0,0,0,none,0, LG_KINGS_GRACE,King's Grace diff --git a/db/pre-re/skill_require_db.txt b/db/pre-re/skill_require_db.txt index 96568de53..5b04d5f6a 100644 --- a/db/pre-re/skill_require_db.txt +++ b/db/pre-re/skill_require_db.txt @@ -467,7 +467,7 @@ 2008,0,0,30:35:40:45:50:55:60:65:70:75,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DRAGONBREATH#Dragon Breath# 2009,0,0,70,0,0,0,99,0,0,dragon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_DRAGONHOWLING#Dragon Howling# 2011,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 //RK_MILLENNIUMSHIELD#Millenium Shield# -2012,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 //RK_CRUSHSTRIKE#Crush Strike# +2012,0,0,1,0,0,0,1:2:3:4:5:6:7:8,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //RK_CRUSHSTRIKE#Crush Strike# 2013,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 //RK_REFRESH#Refresh# 2014,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 //RK_GIANTGROWTH#Giant Growth# 2015,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 //RK_STONEHARDSKIN#Stone Hard Skin# @@ -650,7 +650,7 @@ 2314,0,0,150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_RAGEBURST#Rage Burst# 2315,0,0,50,0,0,0,99,0,0,shield,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_SHIELDSPELL#Shield Spell# 2316,0,0,24:28:32:36:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_EXEEDBREAK#Exceed Break# -2317,0,0,42:44:46:48:50,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 //LG_OVERBRAND#Over Brand# +2317,0,0,42:44:46:48:50,0,0,0,4:5,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_OVERBRAND#Over Brand# 2318,0,0,75:80:85:90:95,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 //LG_PRESTIGE#Prestige# 2319,0,0,30:36:42:48:54,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 //LG_BANDING#Banding# 2320,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 //LG_MOONSLASHER#Moon Slasher# @@ -659,6 +659,7 @@ 2323,0,0,52:60:68:76:84,0,0,0,99,0,0,shield,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_EARTHDRIVE#Earth Drive# 2324,0,0,80:90:100:110:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_HESPERUSLIT#Hesperus Lit# 2325,0,0,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 //LG_INSPIRATION#Inspiration# + //**** // SR Sura 2326,0,0,3:4:5:6:7:8:9:10:11:12,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_DRAGONCOMBO#Dragon Combo# @@ -779,6 +780,7 @@ 2497,0,0,12,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //GN_S_PHARMACY#Special Pharmacy# 2498,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 //GN_SLINGITEM_RANGEMELEEATK#Sling Item Attack# + //2533,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 //ALL_ODINS_RECALL#Odin's Recall# 2534,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 //RETURN_TO_ELDICASTES#Return To Eldicastes# 2535,0,0,1,0,0,0,99,0,0,none,0,6377,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ALL_BUYING_STORE#Open Buying Store @@ -815,7 +817,7 @@ 3022,0,0,70:75:80:85: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 //KO_IZAYOI#Izayoi# 3023,0,0,60:65:70:75:80,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 //KG_KAGEHUMI#Kagehumi# 3024,0,0,50,0,0,0,99,0,0,none,0,7524,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KG_KYOMU#Kyomu# -3025,0,0,25:30:35:40:45,0,0,0,99,0,0,none,0,6499,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KG_KAGEMUSYA#Kagemusha# +3025,0,0,25:30:35:40:45,0,0,0,99,0,0,none,0,7524,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //KG_KAGEMUSYA#Kagemusha# 3026,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 //OB_ZANGETSU#Zangetsu# 3027,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 //OB_OBOROGENSOU#Oboro Gensou# 3029,0,0,20:30:40:50: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 //OB_AKAITSUKI#Akaitsuki# @@ -828,9 +830,9 @@ 5005,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 //RK_LUXANIMA#Lux Anima# 5006,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 //NC_MAGMA_ERUPTION#Magma Eruption# 5007,0,0,200:230:260:290:320,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 //WM_FRIGG_SONG#Frigg's Song# -5008,0,0,120:120:120:120:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_ELEMENTAL_SHIELD#Elemental Shield# +5008,0,0,120:120:120:120:120,0,0,0,99,0,0,elementalspirit,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_ELEMENTAL_SHIELD#Elemental Shield# 5009,0,0,75:65:55:45:35,0,0,0,99,0,0,none,5:5:4:4:3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FLASHCOMBO#Flash Combo# -5010,0,0,30:26:22:18:14,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 //SC_ESCAPE#Emergency Escape# +5010,0,0,30:26:22:18:14,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_ESCAPE#Emergency Escape# 5011,0,0,30:60:90:120:150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_OFFERTORIUM#Offertorium# 5012,0,0,100:150:200:250:300,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_TELEKINESIS_INTENSE#Intense Telekinesis# 5013,0,0,200:180:160:140:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_KINGS_GRACE#King's Grace# @@ -868,7 +870,7 @@ 8025,0,0,90:100:110:120:130,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 //MH_XENO_SLASHER#Xeno Slasher# 8026,0,0,45:54:63:72:81,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 //MH_SILENT_BREEZE#Silent Breeze# 8027,0,0,35,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 //MH_STYLE_CHANGE#Style Change# -8028,0,0,20:25:30:35:40,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_SONIC_CRAW#Sonic Claw# +8028,0,0,20:25:30:35:40,0,0,0,99,0,0,mh_fighting,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_SONIC_CRAW#Sonic Claw# 8029,0,0,10:15:20:25:30,0,0,0,99,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_SILVERVEIN_RUSH#Silver Bain Rush# 8030,0,0,8:16:24:32:40,0,0,0,99,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_MIDNIGHT_FRENZY#Midnight Frenzy# 8031,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 //MH_STAHL_HORN#Steel Horn# @@ -876,8 +878,8 @@ 8033,0,0,80:90:100:110:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_STEINWAND#Stone Wall# 8034,0,0,60:68:76:84: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 //MH_HEILIGE_STANGE#Holy Pole# 8035,0,0,60:65:70:75:80,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 //MH_ANGRIFFS_MODUS#Attack Mode# -8036,0,0,20:25:30:35:40,0,0,0,99,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_TINDER_BREAKER#Tinder Breaker# -8037,0,0,10:20:30:40:50,0,0,0,99,0,0,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_CBC#Continual Break Combo# +8036,0,0,20:25:30:35:40,0,0,0,99,0,0,mh_grappling,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_TINDER_BREAKER#Tinder Breaker# +8037,0,0,10:20:30:40:50,0,0,0,99,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_CBC#Continual Break Combo# 8038,0,0,24:28:32:36:40,0,0,0,99,0,0,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MH_EQC#Eternal Quick Combo# 8039,0,0,34:38:42:46:50,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 //MH_MAGMA_FLOW#Magma Flow# 8040,0,0,54:58:62:66: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 //MH_GRANITIC_ARMOR#Granitic Armor# diff --git a/db/pre-re/skill_tree.conf b/db/pre-re/skill_tree.conf index 659c331de..a6eb10626 100644 --- a/db/pre-re/skill_tree.conf +++ b/db/pre-re/skill_tree.conf @@ -2980,6 +2980,10 @@ Sorcerer: { MaxLevel: 3 SO_SUMMON_TERA: 3 } + SO_ELEMENTAL_SHIELD: { + MaxLevel: 5 + SO_EL_CONTROL: 3 + } ALL_FULL_THROTTLE: 5 } } @@ -3384,10 +3388,10 @@ Genetic: { GN_MIX_COOKING: 1 } GN_S_PHARMACY: 10 -// GN_ILLUSIONDOOPING: { -// MaxLevel: 5 -// GN_S_PHARMACY: 1 -// } + GN_ILLUSIONDOPING: { + MaxLevel: 5 + GN_S_PHARMACY: 1 + } ALL_FULL_THROTTLE: 5 } } @@ -3485,10 +3489,10 @@ Shadow_Chaser: { MaxLevel: 3 SC_DIMENSIONDOOR: 3 } -// SC_SCAPE: { -// MaxLevel: 5 -// SC_TRIANGLESHOT: 2 -// } + SC_ESCAPE: { + MaxLevel: 5 + SC_TRIANGLESHOT: 2 + } ALL_FULL_THROTTLE: 5 } } diff --git a/db/produce_db.txt b/db/produce_db.txt index caf653090..9588edb14 100644 --- a/db/produce_db.txt +++ b/db/produce_db.txt @@ -420,6 +420,8 @@ 12732,24,2010,3,1035,1,7221,1,7938,1,7939,1 //-- Runstone Hagalas <-- RK_RUNEMASTERY Lv4, 1 Round Shell, 1 Dragon's Skin, 1 Elder Branch 12733,24,2010,4,1096,1,7123,1,7939,1 +//-- Runstone Lux Anima <-- RK_RUNEMASTERY Lv10, 3 Gold, 3 Light Granule +22540,24,2010,10,969,3,7938,3 //============================================== //===== Guillotine Cross Poisons === ItemLv=25 = diff --git a/db/re/item_db.txt b/db/re/item_db.txt index 98dd24ea6..e42443d73 100644 --- a/db/re/item_db.txt +++ b/db/re/item_db.txt @@ -8051,3 +8051,4 @@ 21003,Muramasa_,Muramasa ,4,20,,1000,155,,1,2,0x00004082,7,2,34,4,48,1,3,{},{},{} 21004,Alca_Bringer_,Alca Bringer ,4,20,,3400,280,,2,2,125,7,2,34,3,100,1,3,{},{},{} 21005,Metal_Two_Hand_Sword,Metal Two Hand Sword,4,20,,0,95,,1,1,0x00004082,7,2,34,3,1,1,3,{},{},{} +22540,Runstone_Luxanima,Lux Anima Rune,11,2,,100,,,,,0xFFFFFFFF,7,2,,,,,,{ itemskill "RK_LUXANIMA",1; },{},{} \ No newline at end of file diff --git a/db/re/skill_cast_db.txt b/db/re/skill_cast_db.txt index 446f0d698..e61b066be 100644 --- a/db/re/skill_cast_db.txt +++ b/db/re/skill_cast_db.txt @@ -1113,6 +1113,8 @@ 2019,0,0,0,180000,0,0,-1 //-- RK_DRAGONBREATH_WATER 5004,0:0:0:1000:1000:1000:1500:1500:2000:2000,2000,0,40000,0,0,500 +//-- RK_LUXANIMA +5005,0,0,0,60000,0,0,-1 //========================================== //===== Gillotine Cross ==================== @@ -1148,7 +1150,7 @@ //-- GC_CROSSRIPPERSLASHER 2037,0,1000,0,0,0,0,-1 //-- GC_DARKCROW -5001,0,1500,0,5000,0,0,-1 +5001,0,1500,0,5000,0,60000,-1 //========================================== //===== Arch Bishop ======================== @@ -1380,8 +1382,8 @@ 2303,2000,2000,0,10000:20000:30000,0,180000,-1 //-- SC_FEINTBOMB 2304,1000,0,0,1000,0,5000,-1 -//-- SC_SCAPE -5010,1000,0,0,1000,0,5000,-1 +//-- SC_ESCAPE +5010,0,0,0,1000,0,15000,-1 //========================================== //==== Royal Guard skills ================== @@ -1591,6 +1593,8 @@ 2467,1000,0,0,60000,0,60000,1000 //-- SO_EARTH_INSIGNIA 2468,1000,0,0,60000,0,60000,1000 +//-- SO_ELEMENTAL_SHIELD +5008,1000,0,0,0,0,10000,-1 //========================================== //==== Genetic skills ====================== @@ -1633,6 +1637,9 @@ //-- GN_SLINGITEM_RANGEMELEEATK 2498,0,0,0,3000,0,0,-1 + +//-- GN_ILLUSIONDOPING +5003,0,0,0,10000,0,10000,-1 //========================================== //===== Extra 3rd Class Skills ============= diff --git a/db/re/skill_db.txt b/db/re/skill_db.txt index 45ec76c38..5164e511a 100644 --- a/db/re/skill_db.txt +++ b/db/re/skill_db.txt @@ -567,7 +567,7 @@ 521,-9,6,2,-1,0x40,1,10,1,no,0,0,0,weapon,3, GS_GROUNDDRIFT,Ground Drift 522,0,0,0,0,0,0,10,1,no,0,0,0,weapon,0, NJ_TOBIDOUGU,Shuriken Training 523,9,6,1,-1,0x40,0,10,1,no,0,0,0,weapon,0, NJ_SYURIKEN,Throw Shuriken -524,9,8,1,-1,0x40,0,5,3,no,0,0,0,weapon,0, NJ_KUNAI,Throw Kunai +524,9,8,1,-1,0x40,0,5,-3,no,0,0,0,weapon,0, NJ_KUNAI,Throw Kunai 525,9,8,2,-1,0x2,0,5,-3:-3:-4:-4:-5,no,0,0,0,weapon,0, NJ_HUUMA,Throw Huuma Shuriken 526,9,6,1,0,0x50,0,10,1,no,0,0,0,misc,0, NJ_ZENYNAGE,Throw Zeny 527,0,6,4,-1,0,0,5,1,no,0,0,0,weapon,4, NJ_TATAMIGAESHI,Improvised Defense @@ -1079,16 +1079,16 @@ 3035,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0, ECLAGE_RECALL,Return To Eclage // EP 14.3 Part 2 3rd Job Skills -5001,1,6,1,-1,0,0,5,1,no,0,0,0,weapon,0, GC_DARKCROW,Dark Claw +5001,1,8,1,-1,0,0,5,3,no,0,0,0,weapon,0, GC_DARKCROW,Dark Claw 5002,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, RA_UNLIMIT,Unlimited -//5003,7,6,1,-1,0x2,4:5:6:7:8,5,1,no,0,0,0,weapon,0, GN_ILLUSIONDOPING,Illusion Doping +5003,7,6,1,-1,0x2,4:5:6:7:8,5,1,no,0,0,0,weapon,0, GN_ILLUSIONDOPING,Illusion Doping 5004,9,6,2,1,0x2,1:1:1:2:2:2:3:3:4:4,10,1,no,0,0,0,misc,0, RK_DRAGONBREATH_WATER,Dragon Breath - Water -//5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0, RK_LUXANIMA,Lux Anima +5005,0,6,4,0,0x3,3,1,1,no,0,0,0,none,0, RK_LUXANIMA,Lux Anima 5006,1,6,2,3,0,0,5,1,no,0,0,3,misc,0, NC_MAGMA_ERUPTION,Magma Eruption 5007,0,6,4,0,0x3,5:6:7:8:9,5,1,no,0,0,0,none,0, WM_FRIGG_SONG,Frigg's Song -//5008,0,6,4,0,0x3,15,5,1,no,0,0,0,none,0, SO_ELEMENTAL_SHIELD,Elemental Shield +5008,0,6,4,0,0x3,15,5,1,no,0,0,0,none,0, SO_ELEMENTAL_SHIELD,Elemental Shield 5009,1,6,1,0,0x1,0,5,1,no,0,0,0,none,0, SR_FLASHCOMBO,Flash Combo -//5010,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, SC_ESCAPE,Emergency Escape +5010,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, SC_ESCAPE,Emergency Escape 5011,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, AB_OFFERTORIUM,Offertorium 5012,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0, WL_TELEKINESIS_INTENSE,Intense Telekinesis 5013,0,6,4,0,0x3,5,5,1,no,0,0,0,none,0, LG_KINGS_GRACE,King's Grace diff --git a/db/re/skill_require_db.txt b/db/re/skill_require_db.txt index 75ac6d3cf..2f2c1e8b6 100644 --- a/db/re/skill_require_db.txt +++ b/db/re/skill_require_db.txt @@ -842,9 +842,9 @@ 5005,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 //RK_LUXANIMA#Lux Anima# 5006,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 //NC_MAGMA_ERUPTION#Magma Eruption# 5007,0,0,200:230:260:290:320,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 //WM_FRIGG_SONG#Frigg's Song# -5008,0,0,120:120:120:120:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_ELEMENTAL_SHIELD#Elemental Shield# +5008,0,0,120:120:120:120:120,0,0,0,99,0,0,elementalspirit,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SO_ELEMENTAL_SHIELD#Elemental Shield# 5009,0,0,75:65:55:45:35,0,0,0,99,0,0,none,5:5:4:4:3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SR_FLASHCOMBO#Flash Combo# -5010,0,0,30:26:22:18:14,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 //SC_ESCAPE#Emergency Escape# +5010,0,0,30:26:22:18:14,0,0,0,99,0,0,none,0,7940,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SC_ESCAPE#Emergency Escape# 5011,0,0,30:60:90:120:150,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AB_OFFERTORIUM#Offertorium# 5012,0,0,100:150:200:250:300,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WL_TELEKINESIS_INTENSE#Intense Telekinesis# 5013,0,0,200:180:160:140:120,0,0,0,99,0,0,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LG_KINGS_GRACE#King's Grace# diff --git a/db/re/skill_tree.conf b/db/re/skill_tree.conf index 80c4a43df..3cd90f201 100644 --- a/db/re/skill_tree.conf +++ b/db/re/skill_tree.conf @@ -2977,6 +2977,10 @@ Sorcerer: { MaxLevel: 3 SO_SUMMON_TERA: 3 } + SO_ELEMENTAL_SHIELD: { + MaxLevel: 5 + SO_EL_CONTROL: 3 + } ALL_FULL_THROTTLE: 5 } } @@ -3381,10 +3385,10 @@ Genetic: { GN_MIX_COOKING: 1 } GN_S_PHARMACY: 10 -// GN_ILLUSIONDOOPING: { -// MaxLevel: 5 -// GN_S_PHARMACY: 1 -// } + GN_ILLUSIONDOPING: { + MaxLevel: 5 + GN_S_PHARMACY: 1 + } ALL_FULL_THROTTLE: 5 } } @@ -3482,10 +3486,10 @@ Shadow_Chaser: { MaxLevel: 3 SC_DIMENSIONDOOR: 3 } -// SC_SCAPE: { -// MaxLevel: 5 -// SC_TRIANGLESHOT: 2 -// } + SC_ESCAPE: { + MaxLevel: 5 + SC_TRIANGLESHOT: 2 + } ALL_FULL_THROTTLE: 5 } } diff --git a/src/char/char.c b/src/char/char.c index ac5a9a66c..edc73223a 100644 --- a/src/char/char.c +++ b/src/char/char.c @@ -3620,7 +3620,7 @@ static void char_delete2_req(int fd, struct char_session_data* sd) static void char_delete2_accept(int fd, struct char_session_data* sd) {// CH: <0829>.W .L .6B char birthdate[8+1]; - int char_id, i, k; + int char_id, i; unsigned int base_level; char* data; time_t delete_date; diff --git a/src/config/const.h b/src/config/const.h index d8e397b1e..b51db97e5 100644 --- a/src/config/const.h +++ b/src/config/const.h @@ -62,6 +62,11 @@ #ifdef RENEWAL #define MOB_FLEE(mob) ( mob->lv + mob->status.agi + 100 ) #define MOB_HIT(mob) ( mob->lv + mob->status.dex + 150 ) + #define RE_SKILL_REDUCTION(){ \ + wd.damage = battle->calc_elefix(src, target, skill_id, skill_lv, battle->calc_cardfix(BF_WEAPON, src, target, nk, s_ele, s_ele_, wd.damage, 2, wd.flag), nk, n_ele, s_ele, s_ele_, false, flag.arrow); \ + if( flag.lh ) \ + wd.damage2 = battle->calc_elefix(src, target, skill_id, skill_lv, battle->calc_cardfix(BF_WEAPON, src, target, nk, s_ele, s_ele_, wd.damage2, 3, wd.flag), nk, n_ele, s_ele, s_ele_, true, flag.arrow); \ + } #else #define MOB_FLEE(mob) ( mob->lv + mob->status.agi ) #define MOB_HIT(mob) ( mob->lv + mob->status.dex ) diff --git a/src/map/battle.c b/src/map/battle.c index 1d14c1828..a1c0a01d3 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -443,9 +443,8 @@ int battle_calc_weapon_damage(struct block_list *src, struct block_list *bl, uin eatk += 200; #ifdef RENEWAL_EDP if( sc->data[SC_EDP] && skill_id != AS_GRIMTOOTH && skill_id != AS_VENOMKNIFE && skill_id != ASC_BREAKER ){ - eatk = eatk * sc->data[SC_EDP]->val3 / 100; // 400% - damage = damage * sc->data[SC_EDP]->val4 / 100; // 500% - damage--; // temporary until we find the correct formula [malufett] + eatk = eatk * sc->data[SC_EDP]->val4 / 100; + damage += damage * sc->data[SC_EDP]->val3 / 100; } #endif } @@ -4401,11 +4400,13 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list ATK_ADD(-totaldef); if( is_boss(target) ) ATK_RATE(50); + RE_SKILL_REDUCTION(); } break; case NJ_SYURIKEN: // [malufett] GET_NORMAL_ATTACK( (sc && sc->data[SC_MAXIMIZEPOWER]?1:0)|(sc && sc->data[SC_WEAPONPERFECT]?8:0) ); wd.damage += battle->calc_masteryfix(src, target, skill_id, skill_lv, 4 * skill_lv + (sd ? sd->bonus.arrow_atk : 0), wd.div_, 0, flag.weapon) - status_get_total_def(target); + RE_SKILL_REDUCTION(); break; case MO_EXTREMITYFIST: // [malufett] { @@ -4415,6 +4416,7 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list wd.damage = (250 + 150 * skill_lv) + (10 * (status_get_sp(src)+1) * wd.damage / 100) + (8 * wd.damage); ATK_ADD(-totaldef); } + RE_SKILL_REDUCTION(); } #endif break; @@ -4708,7 +4710,11 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list if( (i = battle->adjust_skill_damage(src->m,skill_id)) ) ATK_RATE(i); - + + if( skill_id && (wd.damage+wd.damage2) ){ + RE_SKILL_REDUCTION(); + } + if( sd ) { if (skill_id && (i = pc->skillatk_bonus(sd, skill_id))) ATK_ADDRATE(i); @@ -4813,7 +4819,7 @@ struct Damage battle_calc_weapon_attack(struct block_list *src,struct block_list #ifndef RENEWAL wd.damage = battle->calc_masteryfix(src, target, skill_id, skill_lv, wd.damage, wd.div_, 0, flag.weapon); - if( flag.lh) + if( flag.lh ) wd.damage2 = battle->calc_masteryfix(src, target, skill_id, skill_lv, wd.damage2, wd.div_, 1, flag.weapon); #else if( sd && flag.cri ) diff --git a/src/map/clif.c b/src/map/clif.c index 30903872d..d08bb3868 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -11172,6 +11172,13 @@ void clif_parse_ChangeCart(int fd,struct map_session_data *sd) if( sd && pc->checkskill(sd, MC_CHANGECART) < 1 ) return; +#ifdef RENEWAL + if( sd->npc_id || sd->state.workinprogress&1 ){ + clif->msg(sd, 0x783); + return; + } +#endif + type = (int)RFIFOW(fd,2); #ifdef NEW_CARTS if( (type == 9 && sd->status.base_level > 131) || @@ -11425,6 +11432,13 @@ void clif_parse_UseSkillToPosSub(int fd, struct map_session_data *sd, uint16 ski clif->pUseSkillToPos_mercenary(sd->md, sd, tick, skill_id, skill_lv, x, y, skillmoreinfo); return; } + +#ifdef RENEWAL + if( sd->state.workinprogress&1 ){ + clif->msg(sd, 0x783); // TODO look for the client date that has this message. + return; + } +#endif //Whether skill fails or not is irrelevant, the char ain't idle. [Skotlex] sd->idletime = last_tick; @@ -11529,7 +11543,9 @@ void clif_parse_UseSkillMap(int fd, struct map_session_data* sd) { uint16 skill_id = RFIFOW(fd,2); char map_name[MAP_NAME_LENGTH]; + mapindex_getmapname((char*)RFIFOP(fd,4), map_name); + sd->state.workinprogress = 0; if(skill_id != sd->menuskill_id) return; @@ -11782,6 +11798,7 @@ void clif_parse_AutoSpell(int fd,struct map_session_data *sd) return; skill->autospell(sd,RFIFOL(fd,2)); clif_menuskill_clear(sd); + sd->state.workinprogress = 0; } diff --git a/src/map/itemdb.h b/src/map/itemdb.h index dcd0ae644..db1330344 100644 --- a/src/map/itemdb.h +++ b/src/map/itemdb.h @@ -63,6 +63,7 @@ enum { ITEMID_THURISAZ, ITEMID_WYRD, ITEMID_HAGALAZ, + ITEMID_LUX_ANIMA = 22540, } rune_list; /** @@ -226,7 +227,7 @@ struct item_package { #define itemdb_available(n) (itemdb->search(n)->flag.available) #define itemdb_viewid(n) (itemdb->search(n)->view_id) #define itemdb_autoequip(n) (itemdb->search(n)->flag.autoequip) -#define itemdb_is_rune(n) (n >= ITEMID_NAUTHIZ && n <= ITEMID_HAGALAZ) +#define itemdb_is_rune(n) ((n >= ITEMID_NAUTHIZ && n <= ITEMID_HAGALAZ) || n == ITEMID_LUX_ANIMA) #define itemdb_is_element(n) (n >= 990 && n <= 993) #define itemdb_is_spellbook(n) (n >= 6188 && n <= 6205) #define itemdb_is_poison(n) (n >= 12717 && n <= 12724) diff --git a/src/map/pc.c b/src/map/pc.c index 3ddae9222..f2c0ddc37 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -861,11 +861,15 @@ int pc_isequip(struct map_session_data *sd,int n) if(item == NULL) return 0; - if(item->elv && sd->status.base_level < (unsigned int)item->elv) + if(item->elv && sd->status.base_level < (unsigned int)item->elv){ + clif->msg(sd, 0x6ED); return 0; + } #ifdef RENEWAL - if(item->elvmax && sd->status.base_level > (unsigned int)item->elvmax) + if(item->elvmax && sd->status.base_level > (unsigned int)item->elvmax){ + clif->msg(sd, 0x6ED); return 0; + } #endif if(item->sex != 2 && sd->status.sex != item->sex) return 0; @@ -4113,7 +4117,7 @@ int pc_isUseitem(struct map_session_data *sd,int n) return 0; if( (item->item_usage.flag&NOUSE_SITTING) && (pc_issit(sd) == 1) && (pc->get_group_level(sd) < item->item_usage.override) ) { - clif->msgtable(sd->fd,664); + clif->msgtable(sd->fd,0x297); //clif->colormes(sd->fd,COLOR_WHITE,msg_txt(1474)); return 0; // You cannot use this item while sitting. } @@ -4218,12 +4222,16 @@ int pc_isUseitem(struct map_session_data *sd,int n) if(item->sex != 2 && sd->status.sex != item->sex) return 0; //Required level check - if(item->elv && sd->status.base_level < (unsigned int)item->elv) + if(item->elv && sd->status.base_level < (unsigned int)item->elv){ + clif->msg(sd, 0x6EE); return 0; + } #ifdef RENEWAL - if(item->elvmax && sd->status.base_level > (unsigned int)item->elvmax) + if(item->elvmax && sd->status.base_level > (unsigned int)item->elvmax){ + clif->msg(sd, 0x6EE); return 0; + } #endif //Not equipable by class. [Skotlex] @@ -4775,6 +4783,7 @@ int pc_setpos(struct map_session_data* sd, unsigned short mapindex, int x, int y sd->state.changemap = (sd->mapindex != mapindex); sd->state.warping = 1; + sd->state.workinprogress = 0; if( sd->state.changemap ) { // Misc map-changing settings int i; sd->state.pmap = sd->bl.m; @@ -6607,8 +6616,10 @@ void pc_damage(struct map_session_data *sd,struct block_list *src,unsigned int h skill->sit(sd,0); } - if( sd->progressbar.npc_id ) + if( sd->progressbar.npc_id ){ clif->progressbar_abort(sd); + sd->state.workinprogress = 0; + } if( sd->status.pet_id > 0 && sd->pd && battle_config.pet_damage_support ) pet_target_check(sd,src,1); diff --git a/src/map/skill.c b/src/map/skill.c index d3dc98f14..9823fec0a 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -1056,7 +1056,7 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint case LK_SPIRALPIERCE: case ML_SPIRALPIERCE: - sc_start(bl,SC_STOP,(15+skill_lv*5),0,skill->get_time2(skill_id,skill_lv)); + sc_start(bl,SC_ANKLESNARE,100,0,skill->get_time2(skill_id,skill_lv)); break; case ST_REJECTSWORD: @@ -1387,6 +1387,10 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, uint case MH_NEEDLE_OF_PARALYZE: sc_start(bl, SC_NEEDLE_OF_PARALYZE, 40 + (5*skill_lv), skill_lv, skill->get_time(skill_id, skill_lv)); break; + case GN_ILLUSIONDOPING: + if( sc_start(bl, SC_ILLUSIONDOPING, 10 * skill_lv, skill_lv, skill->get_time(skill_id, skill_lv)) ) //custom rate. + sc_start(bl, SC_ILLUSION, 100, skill_lv, skill->get_time(skill_id, skill_lv)); + break; } if (md && battle_config.summons_trigger_autospells && md->master_id && md->special_state.ai) @@ -3238,6 +3242,13 @@ int skill_timerskill(int tid, unsigned int tick, int id, intptr_t data) { } } break; + case SC_ESCAPE: + if( skl->type < 4+skl->skill_lv ){ + clif->skill_damage(src,src,tick,0,0,-30000,1,skl->skill_id,skl->skill_lv,5); + skill->blown(src,src,1,unit_getdir(src),0); + skill->addtimerskill(src,tick+80,src->id,0,0,skl->skill_id,skl->skill_lv,skl->type+1,0); + } + break; case CH_PALMSTRIKE: { struct status_change* tsc = status_get_sc(target); @@ -3745,6 +3756,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case KO_HUUMARANKA: case KO_MUCHANAGE: case KO_BAKURETSU: + case GN_ILLUSIONDOPING: if( flag&1 ) {//Recursive invocation // skill_area_temp[0] holds number of targets in area // skill_area_temp[1] holds the id of the original target @@ -5658,6 +5670,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case MC_CHANGECART: + if( sd ) + sd->state.workinprogress = 3; clif->skill_nodamage(src,bl,skill_id,skill_lv,1); break; @@ -6778,9 +6792,10 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui break; case SA_AUTOSPELL: clif->skill_nodamage(src,bl,skill_id,skill_lv,1); - if(sd) + if(sd){ + sd->state.workinprogress = 3; clif->autospell(sd,skill_lv); - else { + }else { int maxlv=1,spellid=0; static const int spellarray[3] = { MG_COLDBOLT,MG_FIREBOLT,MG_LIGHTNINGBOLT }; if(skill_lv >= 10) { @@ -7799,6 +7814,67 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } clif->skill_nodamage(src,bl,skill_id,1,1); break; + + case RK_LUXANIMA: + if( sd == NULL || sd->status.party_id == 0 || flag&1 ){ + if( src == bl ) + break; + while( skill_area_temp[5] >= 0x10 ){ + type = SC_NONE; + i = 0; + if( skill_area_temp[5]&0x10 ){ + if( dstsd ){ + i = (rnd()%100<50) ? 4 : ((rnd()%100<80) ? 3 : 2); + clif->millenniumshield(dstsd,i); + skill_area_temp[5] &= ~0x10; + type = SC_MILLENNIUMSHIELD; + } + }else if( skill_area_temp[5]&0x20 ){ + i = status_get_max_hp(bl) * 25 / 100; + status_change_clear_buffs(bl,4); + skill_area_temp[5] &= ~0x20; + status_heal(bl,i,0,1); + type = SC_REFRESH; + }else if( skill_area_temp[5]&0x40 ){ + skill_area_temp[5] &= ~0x40; + type = SC_GIANTGROWTH; + }else if( skill_area_temp[5]&0x80 ){ + if( dstsd ){ + i = sstatus->hp / 4; + if( status_charge(bl,i,0) ) + type = SC_STONEHARDSKIN; + skill_area_temp[5] &= ~0x80; + } + }else if( skill_area_temp[5]&0x100 ){ + skill_area_temp[5] &= ~0x100; + type = SC_VITALITYACTIVATION; + }else if( skill_area_temp[5]&0x200 ){ + skill_area_temp[5] &= ~0x200; + type = SC_ABUNDANCE; + } + if( type > SC_NONE ) + clif->skill_nodamage(bl, bl, skill_id, skill_lv, + sc_start4(bl, type, 100, skill_lv, i, 0, 1, skill->get_time(skill_id, skill_lv))); + } + }else if( sd ){ + if( tsc && tsc->count ){ + if(tsc->data[SC_MILLENNIUMSHIELD]) + skill_area_temp[5] |= 0x10; + if(tsc->data[SC_REFRESH]) + skill_area_temp[5] |= 0x20; + if(tsc->data[SC_GIANTGROWTH]) + skill_area_temp[5] |= 0x40; + if(tsc->data[SC_STONEHARDSKIN]) + skill_area_temp[5] |= 0x80; + if(tsc->data[SC_VITALITYACTIVATION]) + skill_area_temp[5] |= 0x100; + if(tsc->data[SC_ABUNDANCE]) + skill_area_temp[5] |= 0x200; + } + clif->skill_nodamage(src, bl, skill_id, skill_lv, 1); + party_foreachsamemap(skill->area_sub, sd, skill->get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill->castend_nodamage_id); + } + break; /** * Guilotine Cross **/ @@ -7891,15 +7967,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case AB_CLEMENTIA: case AB_CANTO: - { - int bless_lv = sd ? ( pc->checkskill(sd,AL_BLESSING) + (sd->status.job_level / 10) ) : 10; - int agi_lv = sd ? ( pc->checkskill(sd,AL_INCAGI) + (sd->status.job_level / 10) ) : 10; - if( sd == NULL || sd->status.party_id == 0 || flag&1 ) - clif->skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(bl,type,100, - (skill_id == AB_CLEMENTIA)? bless_lv : (skill_id == AB_CANTO)? agi_lv : skill_lv, skill->get_time(skill_id,skill_lv))); - else if( sd ) + if( sd ) + i = skill_id == AB_CLEMENTIA ? pc->checkskill(sd,AL_BLESSING) : pc->checkskill(sd,AL_INCAGI); + if( sd == NULL || sd->status.party_id == 0 || flag&1 ) + clif->skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(bl, type, 100, i + (sd?(sd->status.job_level / 10):0), skill->get_time(skill_id,skill_lv))); + else if( sd ) + if( !i ) + clif->skill_fail(sd,skill_id,USESKILL_FAIL,0); + else party_foreachsamemap(skill->area_sub, sd, skill->get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill->castend_nodamage_id); - } break; case AB_PRAEFATIO: @@ -8853,7 +8929,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SO_EL_ACTION: if( sd ) { - int duration = 3000; + int duration = 3000; if( !sd->ed ) break; sd->skill_id_old = skill_id; elemental_action(sd->ed, bl, tick); @@ -8890,6 +8966,15 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } break; + case SO_ELEMENTAL_SHIELD: + if( !sd->ed ) break; + elemental_delete(sd->ed, 0); + if( sd == NULL || sd->status.party_id == 0 || flag&1 ) + skill->unitsetting(src,MG_SAFETYWALL,skill_lv,bl->x,bl->y,0); + else if( sd ) + party_foreachsamemap(skill->area_sub, sd, skill->get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill->castend_nodamage_id); + break; + case GN_CHANGEMATERIAL: case SO_EL_ANALYSIS: if( sd ) { @@ -9528,7 +9613,6 @@ int skill_castend_map (struct map_session_data *sd, uint16 skill_id, const char unsigned short mapindex; mapindex = mapindex_name2id((char*)map); - sd->state.workinprogress = 0; if(!mapindex) { //Given map not found? clif->skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0); skill_failed(sd); @@ -9626,6 +9710,7 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui case CR_CULTIVATION: case HW_GANBANTEIN: case LG_EARTHDRIVE: + case SC_ESCAPE: break; //Effect is displayed on respective switch case. default: if(skill->get_inf(skill_id)&INF_SELF_SKILL) @@ -10161,6 +10246,12 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui skill->castend_nodamage_id(src,src,TF_HIDING,1,tick,0x2); break; + case SC_ESCAPE: + clif->skill_nodamage(src,src,skill_id,-1,1); + skill->unitsetting(src,HT_ANKLESNARE,skill_lv,x,y,2); + skill->addtimerskill(src,tick,src->id,0,0,skill_id,skill_lv,0,0); + break; + case LG_OVERBRAND: { int width;//according to data from irowiki it actually is a square @@ -10498,6 +10589,9 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill && (src->type&battle_config.vs_traps_bctall)) target = BCT_ALL; break; + case HT_ANKLESNARE: + if( flag&2 ) + val3 = SC_ESCAPE; case HT_SHOCKWAVE: val1=skill_lv*15+10; case HT_SANDMAN: @@ -10507,7 +10601,6 @@ struct skill_unit_group* skill_unitsetting (struct block_list *src, uint16 skill case MA_SKIDTRAP: case HT_LANDMINE: case MA_LANDMINE: - case HT_ANKLESNARE: case HT_FLASHER: case HT_FREEZINGTRAP: case MA_FREEZINGTRAP: @@ -15450,7 +15543,7 @@ int skill_unit_timer_sub(DBKey key, DBData *data, va_list ap) { case UNT_ANKLESNARE: case UNT_ELECTRICSHOCKER: - if( group->val2 > 0 ) { + if( group->val2 > 0 || group->val3 == SC_ESCAPE ) { // Used Trap don't returns back to item skill->delunit(unit); break; @@ -16127,6 +16220,7 @@ int skill_produce_mix (struct map_session_data *sd, uint16 skill_id, int nameid, case ITEMID_URUZ: D -= 500; //Rank A case ITEMID_BERKANA: + case ITEMID_LUX_ANIMA: D -= 500; //Rank S } make_per = A + B + C - D; diff --git a/src/map/status.c b/src/map/status.c index 64c591b3b..fb843da0c 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -782,6 +782,8 @@ void initChangeTables(void) { add_sc( NPC_WIDE_DEEP_SLEEP , SC_DEEP_SLEEP ); add_sc( NPC_WIDESIREN , SC_SIREN ); + set_sc_with_vfx( GN_ILLUSIONDOPING , SC_ILLUSIONDOPING , SI_ILLUSIONDOPING , SCB_HIT ); + // Storing the target job rather than simply SC_SOULLINK simplifies code later on. SkillStatusChangeTable[SL_ALCHEMIST] = (sc_type)MAPID_ALCHEMIST, SkillStatusChangeTable[SL_MONK] = (sc_type)MAPID_MONK, @@ -4749,8 +4751,10 @@ static signed short status_calc_hit(struct block_list *bl, struct status_change hit -= hit * sc->data[SC__GROOMY]->val3 / 100; if(sc->data[SC_FEAR]) hit -= hit * 20 / 100; - if (sc->data[SC_VOLCANIC_ASH]) + if(sc->data[SC_VOLCANIC_ASH]) hit /= 2; + if(sc->data[SC_ILLUSIONDOPING]) + hit -= hit * (5 + sc->data[SC_ILLUSIONDOPING]->val1) / 100; //custom return (short)cap_value(hit,1,SHRT_MAX); } @@ -6712,11 +6716,6 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val return 0; case SC_INC_AGI: - if(sd && pc_issit(sd)){ - pc->setstand(sd); - clif->standing(&sd->bl); - } - case SC_CONCENTRATION: case SC_SPEARQUICKEN: case SC_TRUESIGHT: @@ -7338,11 +7337,9 @@ int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val break; case SC_EDP: // [Celest] val2 = val1 + 2; //Chance to Poison enemies. + val3 = 50*(val1+1); //Damage increase (+50 +50*lv%) #ifdef RENEWAL_EDP - val3 = 50*(val1+3); val4 = 100 * ((val1 + 1)/2 + 2); - #else - val3 = 50*(val1+1); //Damage increase (+50 +50*lv%) #endif if( sd )//[Ind] - iROwiki says each level increases its duration by 3 seconds tick += pc->checkskill(sd,GC_RESEARCHNEWPOISON)*3000; @@ -11085,6 +11082,9 @@ int status_change_clear_buffs (struct block_list* bl, int type) continue; sc->data[i]->val2 = 0; break; + default: + if(type&4) + continue; } status_change_end(bl, (sc_type)i, INVALID_TIMER); } diff --git a/src/map/status.h b/src/map/status.h index 380b49879..7c9c16a0e 100644 --- a/src/map/status.h +++ b/src/map/status.h @@ -673,6 +673,7 @@ typedef enum sc_type { SC_MONSTER_TRANSFORM, SC_ANGEL_PROTECT, + SC_ILLUSIONDOPING, SC_MAX, //Automatically updated max, used in for's to check we are within bounds. } sc_type; @@ -1405,7 +1406,7 @@ enum si_type { SI_2013_VALENTINE1 = 731, SI_2013_VALENTINE2 = 732, SI_2013_VALENTINE3 = 733, - //SI_ = 734, + SI_ILLUSIONDOPING = 734, //SI_ = 735, SI_CHILL = 736, SI_BURNT = 737, -- cgit v1.2.3-60-g2f50