summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog.txt8
-rw-r--r--conf-tmpl/battle_athena.conf34
-rw-r--r--db/skill_cast_db.txt32
-rw-r--r--db/skill_db.txt2
-rw-r--r--db/skill_require_db.txt17
-rw-r--r--src/common/nullpo.h11
-rw-r--r--src/map/battle.c195
-rw-r--r--src/map/battle.h18
-rw-r--r--src/map/pc.c53
-rw-r--r--src/map/skill.c105
10 files changed, 267 insertions, 208 deletions
diff --git a/Changelog.txt b/Changelog.txt
index c95124ed2..6f9f872ed 100644
--- a/Changelog.txt
+++ b/Changelog.txt
@@ -1,15 +1,21 @@
Date Added
12/14
+ * Added nullpo_retb to nullpo.c - does a break; if null [celest]
+ * Replaced some parts in skill.c with nullpo checks [celest]
+ * Corrected some typos - penaly -> penalty [celest]
+ * Skill Updates [celest]
+ - Most of 12/14's Sakray patch
* The SKILL_MAX_DB (yes, a different #define from the one below)
was not large enough for current skills causing memory
corruptions and crashes [MouseJstr]
* Fixed how socket handles EAGIN errors (retry instead of
disconnecting) [MouseJstr]
+
12/13
* Skill Updates [celest]
- Added the new 'Throw Tomahawk' skill (Requires Sakexe1129 or newer)
- Added some new monster skills - but still not complete.
- - Adjusted Palm Strike, Tiger Fist and Chain Crush based on 11/14's patch
+ - Adjusted Palm Strike, Tiger Fist and Chain Crush based on 12/14's patch
* Removed redundant 'sg_count' for map_session_data and mob_data [celest]
* Save both persons' data after trading in case a crash causes them to
rollback - fix by Freya [celest]
diff --git a/conf-tmpl/battle_athena.conf b/conf-tmpl/battle_athena.conf
index bab565357..3cd2fce32 100644
--- a/conf-tmpl/battle_athena.conf
+++ b/conf-tmpl/battle_athena.conf
@@ -410,29 +410,29 @@ player_auto_counter_type: 0
// Monsters
monster_auto_counter_type: 0
-// Type of penalty that is applied to FLEE when more than agi_penaly_count monsters are targetting player
+// Type of penalty that is applied to FLEE when more than agi_penalty_count monsters are targetting player
// 0 = no penalty is applied
-// 1 = agi_penaly_num is reduced from FLEE as a %
-// 2 = agi_penaly_num is reduced from FLEE as an exact amount
-agi_penaly_type: 1
+// 1 = agi_penalty_num is reduced from FLEE as a %
+// 2 = agi_penalty_num is reduced from FLEE as an exact amount
+agi_penalty_type: 1
// Amount of enemies required to be targetting player before FLEE begins to be penalized
-agi_penaly_count: 3
+agi_penalty_count: 3
-// Amount of FLEE penalized per each attacking monster more than agi_penaly_count
-agi_penaly_num: 10
+// Amount of FLEE penalized per each attacking monster more than agi_penalty_count
+agi_penalty_num: 10
-// Type of penalty that is applied to VIT defense when more than vit_penaly_count monsters are targetting player
+// Type of penalty that is applied to VIT defense when more than vit_penalty_count monsters are targetting player
// 0 = no penalty is applied
-// 1 = vit_penaly_num is reduced from FLEE as a %
-// 2 = vit_penaly_num is reduced from FLEE as an exact amount
-vit_penaly_type: 1
+// 1 = vit_penalty_num is reduced from FLEE as a %
+// 2 = vit_penalty_num is reduced from FLEE as an exact amount
+vit_penalty_type: 1
// Amount of enemies required to be targetting player before VIT defense begins to be penalized
-vit_penaly_count: 3
+vit_penalty_count: 3
-// Amount of VIT defense penalized per each attacking monster more than vit_penaly_count
-vit_penaly_num: 5
+// Amount of VIT defense penalized per each attacking monster more than vit_penalty_count
+vit_penalty_num: 5
// When the player attacks an object, the calculation method of DEF.
// With 0 this will be ignored specification, at 1 or more def = subtraction of (DEF* value).
@@ -505,7 +505,7 @@ player_land_skill_limit: yes
monster_land_skill_limit: yes
// If a party uses a skill with penalties do they apply? (Note 1)
-party_skill_penaly: yes
+party_skill_penalty: yes
// If monster's class is changed will it fully recover HP and SP and Ailments? (Note 1)
monster_class_change_full_recover: no
@@ -572,14 +572,14 @@ gtb_pvp_only: no
// 2: Full evasion exclusion
// 3: Full evasion and evasion exclusion
// 4 or more: Except all.
-agi_penaly_count_lv: 2
+agi_penalty_count_lv: 2
// How to count the number of the enemies who do a vit penalty
// 1 or less: It is a count altogether.
// 2: Full evasion exclusion
// 3: Full evasion and evasion exclusion
// Four or more: Except all.
-vit_penaly_count_lv: 3
+vit_penalty_count_lv: 3
// Grandcross Settings (Dont mess with these)
// Even if MOB (PC) has overlapped, it HIT(s) compulsion 3. (Default no)
diff --git a/db/skill_cast_db.txt b/db/skill_cast_db.txt
index d6bfb8606..777d186f6 100644
--- a/db/skill_cast_db.txt
+++ b/db/skill_cast_db.txt
@@ -69,7 +69,7 @@
85,15000:14500:14000:13500:13000:12500:12000:11500:11000:10500,5000,0,5500:6000:6500:7000:7500:8000:8500:9000:9500:10000 //WZ_VERMILION#���[�h�I�u���@�[�~���I��#
86,1000:2000:3000:4000:5000,0,0,0 //WZ_WATERBALL#�E�H�[�^�[�{�[��#
87,0,0,5000:10000:15000:20000:25000:30000:35000:40000:45000:50000,0 //WZ_ICEWALL#�A�C�X�E�H�[��#
-88,5000:4700:4400:4100:3800:3500:3200:2900:2700:2500,1000,0,6000:7000:8000:9000:10000:11000:12000:13000:14000:15000 //WZ_FROSTNOVA#�t���X�g�m���@#
+88,5000:4700:4400:4100:3800:3500:3200:2900:2700:2500,1000,0,3000:3500:4000:4500:5000:5500:6000:6500:7000:7500 //WZ_FROSTNOVA#�t���X�g�m���@#
89,6000:7000:8000:9000:10000:11000:12000:13000:14000:15000,5000,0,10000:11000:12000:13000:14000:15000:16000:17000:18000:19000 //WZ_STORMGUST#�X�g�[���K�X�g#
90,1000:2000:3000:4000:5000,700,0,0 //WZ_EARTHSPIKE#�A�[�X�X�p�C�N#
91,1000:2000:3000:4000:5000,700,0,0 //WZ_HEAVENDRIVE#�w�����Y�h���C�u#
@@ -141,14 +141,14 @@
220,0,0,180000,0 //RG_GRAFFITI#�O���t�B�e�B#
229,1000,0,40000:45000:50000:55000:60000,0 //AM_DEMONSTRATION#�f�����X�g���[�V����#
-230,1000,0,3:7:10:12:13,0 //AM_ACIDTERROR#�A�V�b�h�e���[#
+230,1000,0,3:7:10:12:13,60000 //AM_ACIDTERROR#�A�V�b�h�e���[#
232,2000,500,40000:50000:60000:70000:80000,0 //AM_CANNIBALIZE#�o�C�I�v�����g#
233,2000,500,30000,0 //AM_SPHEREMINE#�X�t�B�A�[�}�C��#
-234,2000,0,60000:120000:180000:240000:300000,0 //AM_CP_WEAPON#�P�~�J���E�F�|���`���[�W#
-235,2000,0,60000:120000:180000:240000:300000,0 //AM_CP_SHIELD#�P�~�J���V�[���h�`���[�W#
-236,2000,0,60000:120000:180000:240000:300000,0 //AM_CP_ARMOR#�P�~�J���A�[�}�[�`���[�W#
-237,2000,0,60000:120000:180000:240000:300000,0 //AM_CP_HELM#�P�~�J���w�����`���[�W#
+234,2000,0,120000:240000:360000:480000:600000,0 //AM_CP_WEAPON#�P�~�J���E�F�|���`���[�W#
+235,2000,0,120000:240000:360000:480000:600000,0 //AM_CP_SHIELD#�P�~�J���V�[���h�`���[�W#
+236,2000,0,120000:240000:360000:480000:600000,0 //AM_CP_ARMOR#�P�~�J���A�[�}�[�`���[�W#
+237,2000,0,120000:240000:360000:480000:600000,0 //AM_CP_HELM#�P�~�J���w�����`���[�W#
249,0,0,300000,0 //CR_AUTOGUARD#�I�[�g�K�[�h#
250,0,0,0,8000:9000:10000:11000:12000 //CR_SHIELDCHARGE#�V�[���h�`���[�W#
@@ -175,15 +175,15 @@
277,700,0,0,0 //SA_SPELLBREAKER#�X�y���u���C�J�[#
279,3000,0,120000:150000:180000:210000:240000:270000:300000:360000:390000,0 //SA_AUTOSPELL#�I�[�g�X�y��#
-280,3000,0,1200000,0 //SA_FLAMELAUNCHER#�t���C�������`���[#
-281,3000,0,1200000,0 //SA_FROSTWEAPON#�t���X�g�E�F�|��#
-282,3000,0,1200000,0 //SA_LIGHTNINGLOADER#���C�g�j���O���[�_�[#
-283,3000,0,1200000,0 //SA_SEISMICWEAPON#�T�C�Y�~�b�N�E�F�|��#
-
-285,5000,0,180000,180000 //SA_VOLCANO#�{���P�[�m#
-286,5000,0,180000,180000 //SA_DELUGE#�f�����[�W#
-287,5000,0,180000,180000 //SA_VIOLENTGALE#�o�C�I�����g�Q�C��#
-288,5000,0,180000,180000 //SA_LANDPROTECTOR#�����h�v���e�N�^�[#
+280,3000,0,1200000:1200000:1200000:1200000:1800000,0 //SA_FLAMELAUNCHER#�t���C�������`���[#
+281,3000,0,1200000:1200000:1200000:1200000:1800000,0 //SA_FROSTWEAPON#�t���X�g�E�F�|��#
+282,3000,0,1200000:1200000:1200000:1200000:1800000,0 //SA_LIGHTNINGLOADER#���C�g�j���O���[�_�[#
+283,3000,0,1200000:1200000:1200000:1200000:1800000,0 //SA_SEISMICWEAPON#�T�C�Y�~�b�N�E�F�|��#
+
+285,5000,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000 //SA_VOLCANO#�{���P�[�m#
+286,5000,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000 //SA_DELUGE#�f�����[�W#
+287,5000,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000 //SA_VIOLENTGALE#�o�C�I�����g�Q�C��#
+288,5000,0,60000:120000:180000:240000:300000,60000:120000:180000:240000:300000 //SA_LANDPROTECTOR#�����h�v���e�N�^�[#
289,2000,0,0,0 //SA_DISPELL#�f�B�X�y��#
304,0,0,0,5000 //BD_ADAPTATION#�A�h���u#
@@ -243,7 +243,7 @@
380,0,0,30000,0 //SN_SIGHT#�g�D���[�T�C�g#
381,1000,1200,0,0,0 //SN_FALCONASSAULT
382,2000,0,0,0 //SN_SHARPSHOOTING
-383,2000:2400:2800:3200:3600:4000:4400:4800:5200:5600,0,65000:80000:95000:110000:125000:140000:155000:170000:185000:200000,0 //SN_WINDWALK#�E�C���h�E�H�[�N#
+383,2000:2400:2800:3200:3600:4000:4400:4800:5200:5600,0,130000:160000:190000:220000:250000:280000:310000:340000:370000:400000,0 //SN_WINDWALK#�E�C���h�E�H�[�N#
384,5000:5000:6000:6000:7000:7000:8000:8000:9000:10000,0,15000:20000:25000:30000:35000:40000:45000:50000:55000:60000,5000 //WS_MELTDOWN#�����g�_�E��#
387,0,0,60000,0 //WS_CARTBOOST#�J�[�g�u�[�X�g#
diff --git a/db/skill_db.txt b/db/skill_db.txt
index 50623f3e3..f9e28f3c2 100644
--- a/db/skill_db.txt
+++ b/db/skill_db.txt
@@ -282,7 +282,7 @@
230,8,6,1,0,0,5,0,no,0,0,0,weapon,0 //AM_ACIDTERROR#�A�V�b�h�e��?#
231,8,6,16,0,1,5,1,yes,0,0,0,none,0 //AM_POTIONPITCHER#??�V�����s�b?��?#
//231,8,6,16,0,1,10,1,yes,0,0,0,magic,0
-232,3,6,2,0,1,5,1,no,0,0,3,none,0 //AM_CANNIBALIZE#�o�C�I�v�����g#
+232,3,6,2,0,1,5,1,no,0,0,5,none,0 //AM_CANNIBALIZE#�o�C�I�v�����g#
233,3,6,2,0,1,5,1,no,0,128,3,none,0 //AM_SPHEREMINE#�X�t�B�A??�C��#
234,1,6,16,0,1,5,1,yes,0,0,0,weapon,0 //AM_CP_WEAPON#�P?�J���E�F?��?��?�W#
235,1,6,16,0,1,5,1,yes,0,0,0,weapon,0 //AM_CP_SHIELD#�P?�J���V?���h?��?�W#
diff --git a/db/skill_require_db.txt b/db/skill_require_db.txt
index 18d7a63c2..5cd9d73b4 100644
--- a/db/skill_require_db.txt
+++ b/db/skill_require_db.txt
@@ -112,7 +112,7 @@
138,0,0,20,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AS_ENCHANTPOISON#�G���`�����g�|�C�Y��#
139,0,0,20:25:30:35:40:45:50:55:60:45,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AS_POISONREACT#�|�C�Y�����A�N�g#
140,0,0,20,0,0,0,99,none,0,716,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AS_VENOMDUST#�x�i���_�X�g#
-141,0,0,33:36:39:42:45:48:51:54:57:60,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AS_SPLASHER#�x�i���X�v���b�V��?#
+141,0,0,12:14:16:18:20:22:24:26:28:30,0,0,0,99,none,0,716,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //AS_SPLASHER#�x�i���X�v���b�V��?#
142,0,0,3,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NV_FIRSTAID#?�}��?#
143,0,0,5,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //NV_TRICKDEAD#���񂾂ӂ�#
@@ -167,7 +167,7 @@
261,0,0,8,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MO_CALLSPIRITS#?��#
262,0,0,5,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MO_ABSORBSPIRITS#?�D#
-264,0,0,10,0,0,0,99,move_enable,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MO_BODYRELOCATION#?�e#
+264,0,0,14,0,0,0,99,move_enable,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MO_BODYRELOCATION#?�e#
266,0,0,10:14:17:19:20,0,0,0,0:1:2:3:4:5:6:7:8:9:10:12:13:14:15:16:17:18:19:20:21:22,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MO_INVESTIGATE#?��#
267,0,0,10,0,0,0,0:1:2:3:4:5:6:7:8:9:10:12:13:14:15:16:17:18:19:20:21:22,none,1:2:3:4:5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //MO_FINGEROFFENSIVE#�w?#
@@ -192,7 +192,7 @@
286,0,0,48:46:44:42:40,0,0,0,99,none,0,715,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_DELUGE#�f����?�W#
287,0,0,48:46:44:42:40,0,0,0,99,none,0,715,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_VIOLENTGALE#�o�C�I�����g�Q�C��#
288,0,0,66:62:58:54:50,0,0,0,99,none,0,717,1,715,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_LANDPROTECTOR#�����h�v���e�N�^?#
-289,0,0,1,0,0,0,99,none,0,716,1,715,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_DISPELL#�f�B�X�y��#
+289,0,0,1,0,0,0,99,none,0,715,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_DISPELL#�f�B�X�y��#
290,0,0,50,0,0,0,99,none,0,715,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_ABRACADABRA#�A�u���J�^�u��#
//reduced 2 to 1 Yellow gemstones, because Abrakadabra has extra hardcoded usage of 1 Yellow gemstone [Lupus]
291,0,0,1,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SA_MONOCELL#�`�F���W�|����#
@@ -243,7 +243,7 @@
355,0,0,18:26:34:42:50,0,0,0,1:2:3:4:5:6:7:8:9:10:11:12:13:14:15:16:17:18:19:20:21:22,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LK_AURABLADE#�I?���u��?�h#
356,0,0,50,0,0,0,3,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LK_PARRYING#�p���C���O#
-357,0,0,14:18:22:26:30,0,0,0,4:05,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LK_CONCENTRATION#�R���Z���g��?�V����#
+357,0,0,14:18:22:26:30,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LK_CONCENTRATION#�R���Z���g��?�V����#
358,0,0,15,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LK_TENSIONRELAX#�e���V���������b�N�X#
359,0,0,100,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LK_BERSERK#�o?�T?�N#
360,0,0,50,0,0,0,3,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //LK_FURY#�t��?��?#
@@ -255,9 +255,9 @@
367,0,0,30:35:40:45:50,0,20:25:30:35:40,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //PA_PRESSURE#�v���b�V��?#
368,0,9,100,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //PA_SACRIFICE#�T�N���t�@�C�X#
369,0,0,80:80:80:80:80:100:100:100:100:100,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //PA_GOSPEL#�S�X�y��#
-370,0,0,12:14:16:18:20,0,0,0,99,explosionspirits,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //CH_PALMSTRIKE#�ҌՍd�h�R#
-371,0,0,12:14:16:18:20,0,0,0,99,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //CH_TIGERFIST#���Ռ�#
-372,0,0,12:14:16:18:20:22:24:26:28:30,0,0,0,99,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //CH_CHAINCRUSH#�A����?#
+370,0,0,2:4:6:8:10,0,0,0,99,explosionspirits,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //CH_PALMSTRIKE#�ҌՍd�h�R#
+371,0,0,4:6:8:10:12,0,0,0,99,none,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //CH_TIGERFIST#���Ռ�#
+372,0,0,4:6:8:10:12:14:16:18:20:22,0,0,0,99,none,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //CH_CHAINCRUSH#�A����?#
373,0,0,1:2:3:4:5,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //PF_HPCONVERSION#???????#
374,0,0,5,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //PF_SOULCHANGE#�\�E���`�F���W#
375,0,0,80:90:100:110:120,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //PF_SOULBURN#?�E���o?��#
@@ -267,7 +267,7 @@
380,0,0,20:20:25:25:30:30:35:35:40:40,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SN_SIGHT#�g�D��?�T�C�g#
381,0,0,30:34:38:42:46,0,0,0,99,falcon,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SN_FALCONASSAULT#�t�@���R���A�T���g#
382,0,0,18:21:24:27:30,0,0,0,11,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SN_SHARPSHOOTING#�V��?�v�V��?�e�B���O#
-383,0,0,23:26:29:32:35:38:41:44:47:50,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SN_WINDWALK#�E�C���h�E�H?�N#
+383,0,0,46:52:58:64:70:76:82:88:94:100,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //SN_WINDWALK#�E�C���h�E�H?�N#
384,0,0,50:50:60:60:70:70:80:80:90:90,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WS_MELTDOWN#�����g�_�E��#
385,0,0,5,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WS_CREATECOIN#�N���G�C�g�R�C��#
386,0,0,5,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //WS_CREATENUGGET#�򐻑�#
@@ -289,7 +289,6 @@
404,0,0,25,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //PF_FOGWALL#�t�H�O�E�H?��#
405,0,0,50,0,0,0,99,none,0,1025,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //PF_SPIDERWEB#�X�p�C�_?�E�F�b�u#
406,0,0,10:12:14:16:18:20:22:24:26:28,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ASC_METEORASSAULT#���e�I�A�T���g#
-//407,0,0,50,0,0,0,99,none,0,937,1,952,1,939,1,7033,1,972,1,657,1,713,1,0,0,0,0,0,0 //ASC_CDP
407,0,0,50,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ASC_CDP#�f�b�h��?�|�C�Y���쐬#
475,0,0,40,0,0,0,99,none,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 //ST_PRESERVE##
diff --git a/src/common/nullpo.h b/src/common/nullpo.h
index 11283f941..0b9a9f7a5 100644
--- a/src/common/nullpo.h
+++ b/src/common/nullpo.h
@@ -87,6 +87,8 @@
#define nullpo_retr(ret, t) \
if (nullpo_chk(NLP_MARK, (void *)(t))) {return(ret);}
+#define nullpo_retb(t) \
+ if (nullpo_chk(NLP_MARK, (void *)(t))) {break;}
// �•ψ����}�N���Ɋւ�������R���p�C��
#if __STDC_VERSION__ >= 199901L
@@ -100,6 +102,9 @@
#define nullpo_retr_f(ret, t, fmt, ...) \
if (nullpo_chk_f(NLP_MARK, (void *)(t), (fmt), __VA_ARGS__)) {return(ret);}
+#define nullpo_retb_f(t, fmt, ...) \
+ if (nullpo_chk_f(NLP_MARK, (void *)(t), (fmt), __VA_ARGS__)) {break;}
+
#elif __GNUC__ >= 2
/* GCC�p */
#define nullpo_ret_f(t, fmt, args...) \
@@ -111,6 +116,9 @@
#define nullpo_retr_f(ret, t, fmt, args...) \
if (nullpo_chk_f(NLP_MARK, (void *)(t), (fmt), ## args)) {return(ret);}
+#define nullpo_retb_f(t, fmt, args...) \
+ if (nullpo_chk_f(NLP_MARK, (void *)(t), (fmt), ## args)) {break;}
+
#else
/* ���̑��̏ꍇ�E�E�E orz */
@@ -127,6 +135,7 @@
#define nullpo_ret(t) if((t)){;}
#define nullpo_retv(t) if((t)){;}
#define nullpo_retr(ret, t) if((t)){;}
+#define nullpo_retb(t) if((t)){;}
// �•ψ����}�N���Ɋւ�������R���p�C��
#if __STDC_VERSION__ >= 199901L
@@ -134,12 +143,14 @@
#define nullpo_ret_f(t, fmt, ...) if((t)){;}
#define nullpo_retv_f(t, fmt, ...) if((t)){;}
#define nullpo_retr_f(ret, t, fmt, ...) if((t)){;}
+#define nullpo_retb_f(t, fmt, ...) if((t)){;}
#elif __GNUC__ >= 2
/* GCC�p */
#define nullpo_ret_f(t, fmt, args...) if((t)){;}
#define nullpo_retv_f(t, fmt, args...) if((t)){;}
#define nullpo_retr_f(ret, t, fmt, args...) if((t)){;}
+#define nullpo_retb_f(t, fmt, args...) if((t)){;}
#else
/* ���̑��̏ꍇ�E�E�E orz */
diff --git a/src/map/battle.c b/src/map/battle.c
index 9c6b313cf..8892104b9 100644
--- a/src/map/battle.c
+++ b/src/map/battle.c
@@ -638,7 +638,7 @@ int battle_get_atk2(struct block_list *bl)
if(sc_data[SC_DRUMBATTLE].timer!=-1)
atk2 += sc_data[SC_DRUMBATTLE].val2;
if(sc_data[SC_NIBELUNGEN].timer!=-1 && (battle_get_element(bl)/10) >= 8 )
- atk2 += sc_data[SC_NIBELUNGEN].val2;
+ atk2 += sc_data[SC_NIBELUNGEN].val3;
if(sc_data[SC_STRIPWEAPON].timer!=-1)
atk2 = atk2*sc_data[SC_STRIPWEAPON].val2/100;
if(sc_data[SC_CONCENTRATION].timer!=-1) //�R���Z���g���[�V����
@@ -921,11 +921,12 @@ int battle_get_speed(struct block_list *bl)
if(sc_data[SC_STEELBODY].timer!=-1)
speed = speed*125/100;
//�f�B�t�F���_�[���͉��Z
- if(sc_data[SC_DEFENDER].timer!=-1)
- speed = (speed * (155 - sc_data[SC_DEFENDER].val1*5)) / 100;
+ // removed as of 12/14's patch [celest]
+ /*if(sc_data[SC_DEFENDER].timer!=-1)
+ speed = (speed * (155 - sc_data[SC_DEFENDER].val1*5)) / 100;*/
//�x���Ԃ�4�{�x��
if(sc_data[SC_DANCING].timer!=-1 )
- speed*=4;
+ speed *= 6;
//�􂢎���450���Z
if(sc_data[SC_CURSE].timer!=-1)
speed = speed + 450;
@@ -967,7 +968,7 @@ int battle_get_adelay(struct block_list *bl)
if(sc_data[SC_ADRENALINE].timer != -1 && sc_data[SC_TWOHANDQUICKEN].timer == -1 &&
sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) { // �A�h���i�������b�V��
//�g�p�҂ƃp�[�e�B�����o�[�Ŋi�����o��ݒ�łȂ����3�����Z
- if(sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penaly)
+ if(sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penalty)
aspd_rate -= 30;
//�����łȂ����2.5�����Z
else
@@ -1020,7 +1021,7 @@ int battle_get_amotion(struct block_list *bl)
aspd_rate -= 30;
if(sc_data[SC_ADRENALINE].timer != -1 && sc_data[SC_TWOHANDQUICKEN].timer == -1 &&
sc_data[SC_QUAGMIRE].timer == -1 && sc_data[SC_DONTFORGETME].timer == -1) { // �A�h���i�������b�V��
- if(sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penaly)
+ if(sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penalty)
aspd_rate -= 30;
else
aspd_rate -= 25;
@@ -1579,10 +1580,18 @@ int battle_calc_damage(struct block_list *src,struct block_list *bl,int damage,i
if(rand()%100 < sc_data[SC_AUTOGUARD].val2) {
damage = 0;
clif_skill_nodamage(bl,bl,CR_AUTOGUARD,sc_data[SC_AUTOGUARD].val1,1);
+ // different delay depending on skill level [celest]
+ int delay;
+ if (sc_data[SC_AUTOGUARD].val1 <= 5)
+ delay = 300;
+ else if (sc_data[SC_AUTOGUARD].val1 > 5 && sc_data[SC_AUTOGUARD].val1 <= 9)
+ delay = 200;
+ else
+ delay = 100;
if(sd)
- sd->canmove_tick = gettick() + 300;
+ sd->canmove_tick = gettick() + delay;
else if(md)
- md->canmove_tick = gettick() + 300;
+ md->canmove_tick = gettick() + delay;
}
}
// -- moonsoul (chance to block attacks with new Lord Knight skill parrying)
@@ -1838,14 +1847,14 @@ static struct Damage battle_calc_pet_weapon_attack(
// ��𗦌v�Z�A��𔻒�͌��
flee = battle_get_flee(target);
- if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0)
- target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv);
- if(battle_config.agi_penaly_type > 0) {
- if(target_count >= battle_config.agi_penaly_count) {
- if(battle_config.agi_penaly_type == 1)
- flee = (flee * (100 - (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num))/100;
- else if(battle_config.agi_penaly_type == 2)
- flee -= (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num;
+ if(battle_config.agi_penalty_type > 0 || battle_config.vit_penalty_type > 0)
+ target_count += battle_counttargeted(target,src,battle_config.agi_penalty_count_lv);
+ if(battle_config.agi_penalty_type > 0) {
+ if(target_count >= battle_config.agi_penalty_count) {
+ if(battle_config.agi_penalty_type == 1)
+ flee = (flee * (100 - (target_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num))/100;
+ else if(battle_config.agi_penalty_type == 2)
+ flee -= (target_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num;
if(flee < 1) flee = 1;
}
}
@@ -2065,11 +2074,11 @@ static struct Damage battle_calc_pet_weapon_attack(
damage = damage*(240+ 60*skill_lv)/100;
break;
case DC_THROWARROW: // ���
- damage = damage*(100+ 50 * skill_lv)/100;
+ damage = damage*(60+ 40 * skill_lv)/100;
flag=(flag&~BF_RANGEMASK)|BF_LONG;
break;
case BA_MUSICALSTRIKE: // �~���[�W�J���X�g���C�N
- damage = damage*(100+ 50 * skill_lv)/100;
+ damage = damage*(60+ 40 * skill_lv)/100;
flag=(flag&~BF_RANGEMASK)|BF_LONG;
break;
case CH_TIGERFIST: // ���Ռ�
@@ -2117,18 +2126,18 @@ static struct Damage battle_calc_pet_weapon_attack(
// �f�B�o�C���v���e�N�V�����i�����ł����̂��ȁH�j
if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000 ) { //DEF, VIT����
int t_def;
- target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penaly_count_lv);
- if(battle_config.vit_penaly_type > 0) {
- if(target_count >= battle_config.vit_penaly_count) {
- if(battle_config.vit_penaly_type == 1) {
- def1 = (def1 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
- def2 = (def2 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
- t_vit = (t_vit * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
+ target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penalty_count_lv);
+ if(battle_config.vit_penalty_type > 0) {
+ if(target_count >= battle_config.vit_penalty_count) {
+ if(battle_config.vit_penalty_type == 1) {
+ def1 = (def1 * (100 - (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num))/100;
+ def2 = (def2 * (100 - (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num))/100;
+ t_vit = (t_vit * (100 - (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num))/100;
}
- else if(battle_config.vit_penaly_type == 2) {
- def1 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
- def2 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
- t_vit -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
+ else if(battle_config.vit_penalty_type == 2) {
+ def1 -= (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num;
+ def2 -= (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num;
+ t_vit -= (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num;
}
if(def1 < 0) def1 = 0;
if(def2 < 1) def2 = 1;
@@ -2298,14 +2307,14 @@ static struct Damage battle_calc_mob_weapon_attack(
// ��𗦌v�Z�A��𔻒�͌��
flee = battle_get_flee(target);
- if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0)
- target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv);
- if(battle_config.agi_penaly_type > 0) {
- if(target_count >= battle_config.agi_penaly_count) {
- if(battle_config.agi_penaly_type == 1)
- flee = (flee * (100 - (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num))/100;
- else if(battle_config.agi_penaly_type == 2)
- flee -= (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num;
+ if(battle_config.agi_penalty_type > 0 || battle_config.vit_penalty_type > 0)
+ target_count += battle_counttargeted(target,src,battle_config.agi_penalty_count_lv);
+ if(battle_config.agi_penalty_type > 0) {
+ if(target_count >= battle_config.agi_penalty_count) {
+ if(battle_config.agi_penalty_type == 1)
+ flee = (flee * (100 - (target_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num))/100;
+ else if(battle_config.agi_penalty_type == 2)
+ flee -= (target_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num;
if(flee < 1) flee = 1;
}
}
@@ -2556,11 +2565,11 @@ static struct Damage battle_calc_mob_weapon_attack(
div_=4;
break;
case BA_MUSICALSTRIKE: // �~���[�W�J���X�g���C�N
- damage = damage*(100+ 50 * skill_lv)/100;
+ damage = damage*(60+ 40 * skill_lv)/100;
flag=(flag&~BF_RANGEMASK)|BF_LONG;
break;
case DC_THROWARROW: // ���
- damage = damage*(100+ 50 * skill_lv)/100;
+ damage = damage*(60+ 40 * skill_lv)/100;
flag=(flag&~BF_RANGEMASK)|BF_LONG;
break;
case MO_COMBOFINISH: // �җ���
@@ -2611,18 +2620,18 @@ static struct Damage battle_calc_mob_weapon_attack(
// �f�B�o�C���v���e�N�V�����i�����ł����̂��ȁH�j
if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) { //DEF, VIT����
int t_def;
- target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penaly_count_lv);
- if(battle_config.vit_penaly_type > 0) {
- if(target_count >= battle_config.vit_penaly_count) {
- if(battle_config.vit_penaly_type == 1) {
- def1 = (def1 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
- def2 = (def2 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
- t_vit = (t_vit * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
+ target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penalty_count_lv);
+ if(battle_config.vit_penalty_type > 0) {
+ if(target_count >= battle_config.vit_penalty_count) {
+ if(battle_config.vit_penalty_type == 1) {
+ def1 = (def1 * (100 - (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num))/100;
+ def2 = (def2 * (100 - (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num))/100;
+ t_vit = (t_vit * (100 - (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num))/100;
}
- else if(battle_config.vit_penaly_type == 2) {
- def1 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
- def2 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
- t_vit -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
+ else if(battle_config.vit_penalty_type == 2) {
+ def1 -= (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num;
+ def2 -= (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num;
+ t_vit -= (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num;
}
if(def1 < 0) def1 = 0;
if(def2 < 1) def2 = 1;
@@ -2856,14 +2865,14 @@ static struct Damage battle_calc_pc_weapon_attack(
// ��𗦌v�Z�A��𔻒�͌��
flee = battle_get_flee(target);
- if(battle_config.agi_penaly_type > 0 || battle_config.vit_penaly_type > 0) //AGI�AVIT�y�i���e�B�ݒ肪�L��
- target_count += battle_counttargeted(target,src,battle_config.agi_penaly_count_lv); //�Ώۂ̐����Z�o
- if(battle_config.agi_penaly_type > 0) {
- if(target_count >= battle_config.agi_penaly_count) { //�y�i���e�B�ݒ���Ώۂ�����
- if(battle_config.agi_penaly_type == 1) //��𗦂�agi_penaly_num%���Œ���
- flee = (flee * (100 - (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num))/100;
- else if(battle_config.agi_penaly_type == 2) //��𗦂�agi_penaly_num������
- flee -= (target_count - (battle_config.agi_penaly_count - 1))*battle_config.agi_penaly_num;
+ if(battle_config.agi_penalty_type > 0 || battle_config.vit_penalty_type > 0) //AGI�AVIT�y�i���e�B�ݒ肪�L��
+ target_count += battle_counttargeted(target,src,battle_config.agi_penalty_count_lv); //�Ώۂ̐����Z�o
+ if(battle_config.agi_penalty_type > 0) {
+ if(target_count >= battle_config.agi_penalty_count) { //�y�i���e�B�ݒ���Ώۂ�����
+ if(battle_config.agi_penalty_type == 1) //��𗦂�agi_penalty_num%���Œ���
+ flee = (flee * (100 - (target_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num))/100;
+ else if(battle_config.agi_penalty_type == 2) //��𗦂�agi_penalty_num������
+ flee -= (target_count - (battle_config.agi_penalty_count - 1))*battle_config.agi_penalty_num;
if(flee < 1) flee = 1; //��𗦂͍Œ�ł�1
}
}
@@ -3365,8 +3374,8 @@ static struct Damage battle_calc_pc_weapon_attack(
damage += arr;
damage2 += arr;
}
- damage = damage*(100+ 50 * skill_lv)/100;
- damage2 = damage2*(100+ 50 * skill_lv)/100;
+ damage = damage*(60+ 40 * skill_lv)/100;
+ damage2 = damage2*(60+ 40 * skill_lv)/100;
if(sd->arrow_ele > 0) {
s_ele = sd->arrow_ele;
s_ele_ = sd->arrow_ele;
@@ -3508,18 +3517,18 @@ static struct Damage battle_calc_pc_weapon_attack(
// �f�B�o�C���v���e�N�V�����i�����ł����̂��ȁH�j
if ( skill_num != MO_INVESTIGATE && skill_num != MO_EXTREMITYFIST && skill_num != KN_AUTOCOUNTER && def1 < 1000000) { //DEF, VIT����
int t_def;
- target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penaly_count_lv);
- if(battle_config.vit_penaly_type > 0) {
- if(target_count >= battle_config.vit_penaly_count) {
- if(battle_config.vit_penaly_type == 1) {
- def1 = (def1 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
- def2 = (def2 * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
- t_vit = (t_vit * (100 - (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num))/100;
+ target_count = 1 + battle_counttargeted(target,src,battle_config.vit_penalty_count_lv);
+ if(battle_config.vit_penalty_type > 0) {
+ if(target_count >= battle_config.vit_penalty_count) {
+ if(battle_config.vit_penalty_type == 1) {
+ def1 = (def1 * (100 - (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num))/100;
+ def2 = (def2 * (100 - (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num))/100;
+ t_vit = (t_vit * (100 - (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num))/100;
}
- else if(battle_config.vit_penaly_type == 2) {
- def1 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
- def2 -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
- t_vit -= (target_count - (battle_config.vit_penaly_count - 1))*battle_config.vit_penaly_num;
+ else if(battle_config.vit_penalty_type == 2) {
+ def1 -= (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num;
+ def2 -= (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num;
+ t_vit -= (target_count - (battle_config.vit_penalty_count - 1))*battle_config.vit_penalty_num;
}
if(def1 < 0) def1 = 0;
if(def2 < 1) def2 = 1;
@@ -5131,14 +5140,14 @@ static const struct {
{ "undead_detect_type", &battle_config.undead_detect_type },
{ "player_auto_counter_type", &battle_config.pc_auto_counter_type },
{ "monster_auto_counter_type", &battle_config.monster_auto_counter_type},
- { "agi_penaly_type", &battle_config.agi_penaly_type },
- { "agi_penaly_count", &battle_config.agi_penaly_count },
- { "agi_penaly_num", &battle_config.agi_penaly_num },
- { "agi_penaly_count_lv", &battle_config.agi_penaly_count_lv },
- { "vit_penaly_type", &battle_config.vit_penaly_type },
- { "vit_penaly_count", &battle_config.vit_penaly_count },
- { "vit_penaly_num", &battle_config.vit_penaly_num },
- { "vit_penaly_count_lv", &battle_config.vit_penaly_count_lv },
+ { "agi_penalty_type", &battle_config.agi_penalty_type },
+ { "agi_penalty_count", &battle_config.agi_penalty_count },
+ { "agi_penalty_num", &battle_config.agi_penalty_num },
+ { "agi_penalty_count_lv", &battle_config.agi_penalty_count_lv },
+ { "vit_penalty_type", &battle_config.vit_penalty_type },
+ { "vit_penalty_count", &battle_config.vit_penalty_count },
+ { "vit_penalty_num", &battle_config.vit_penalty_num },
+ { "vit_penalty_count_lv", &battle_config.vit_penalty_count_lv },
{ "player_defense_type", &battle_config.player_defense_type },
{ "monster_defense_type", &battle_config.monster_defense_type },
{ "pet_defense_type", &battle_config.pet_defense_type },
@@ -5159,7 +5168,7 @@ static const struct {
{ "monster_attack_direction_change", &battle_config.monster_attack_direction_change },
{ "player_land_skill_limit", &battle_config.pc_land_skill_limit },
{ "monster_land_skill_limit", &battle_config.monster_land_skill_limit},
- { "party_skill_penaly", &battle_config.party_skill_penaly },
+ { "party_skill_penalty", &battle_config.party_skill_penalty },
{ "monster_class_change_full_recover", &battle_config.monster_class_change_full_recover },
{ "produce_item_name_input", &battle_config.produce_item_name_input },
{ "produce_potion_name_input", &battle_config.produce_potion_name_input},
@@ -5365,14 +5374,14 @@ void battle_set_defaults() {
battle_config.undead_detect_type = 0;
battle_config.pc_auto_counter_type = 1;
battle_config.monster_auto_counter_type = 1;
- battle_config.agi_penaly_type = 0;
- battle_config.agi_penaly_count = 3;
- battle_config.agi_penaly_num = 0;
- battle_config.agi_penaly_count_lv = ATK_FLEE;
- battle_config.vit_penaly_type = 0;
- battle_config.vit_penaly_count = 3;
- battle_config.vit_penaly_num = 0;
- battle_config.vit_penaly_count_lv = ATK_DEF;
+ battle_config.agi_penalty_type = 0;
+ battle_config.agi_penalty_count = 3;
+ battle_config.agi_penalty_num = 0;
+ battle_config.agi_penalty_count_lv = ATK_FLEE;
+ battle_config.vit_penalty_type = 0;
+ battle_config.vit_penalty_count = 3;
+ battle_config.vit_penalty_num = 0;
+ battle_config.vit_penalty_count_lv = ATK_DEF;
battle_config.player_defense_type = 0;
battle_config.monster_defense_type = 0;
battle_config.pet_defense_type = 0;
@@ -5394,7 +5403,7 @@ void battle_set_defaults() {
battle_config.pc_undead_nofreeze = 0;
battle_config.pc_land_skill_limit = 1;
battle_config.monster_land_skill_limit = 1;
- battle_config.party_skill_penaly = 1;
+ battle_config.party_skill_penalty = 1;
battle_config.monster_class_change_full_recover = 0;
battle_config.produce_item_name_input = 1;
battle_config.produce_potion_name_input = 1;
@@ -5534,10 +5543,10 @@ void battle_validate_conf() {
battle_config.max_cart_weight = 100;
battle_config.max_cart_weight *= 10;
- if(battle_config.agi_penaly_count < 2)
- battle_config.agi_penaly_count = 2;
- if(battle_config.vit_penaly_count < 2)
- battle_config.vit_penaly_count = 2;
+ if(battle_config.agi_penalty_count < 2)
+ battle_config.agi_penalty_count = 2;
+ if(battle_config.vit_penalty_count < 2)
+ battle_config.vit_penalty_count = 2;
if(battle_config.guild_exp_limit > 99)
battle_config.guild_exp_limit = 99;
diff --git a/src/map/battle.h b/src/map/battle.h
index 2b901410f..48a543844 100644
--- a/src/map/battle.h
+++ b/src/map/battle.h
@@ -229,12 +229,12 @@ extern struct Battle_Config {
int undead_detect_type;
int pc_auto_counter_type;
int monster_auto_counter_type;
- int agi_penaly_type;
- int agi_penaly_count;
- int agi_penaly_num;
- int vit_penaly_type;
- int vit_penaly_count;
- int vit_penaly_num;
+ int agi_penalty_type;
+ int agi_penalty_count;
+ int agi_penalty_num;
+ int vit_penalty_type;
+ int vit_penalty_count;
+ int vit_penalty_num;
int player_defense_type;
int monster_defense_type;
int pet_defense_type;
@@ -256,7 +256,7 @@ extern struct Battle_Config {
int pc_undead_nofreeze;
int pc_land_skill_limit;
int monster_land_skill_limit;
- int party_skill_penaly;
+ int party_skill_penalty;
int monster_class_change_full_recover;
int produce_item_name_input;
int produce_potion_name_input;
@@ -297,8 +297,8 @@ extern struct Battle_Config {
int pk_mode;
int show_mob_hp; // end additions [Valaris]
- int agi_penaly_count_lv;
- int vit_penaly_count_lv;
+ int agi_penalty_count_lv;
+ int vit_penalty_count_lv;
int gx_allhit;
int gx_cardfix;
diff --git a/src/map/pc.c b/src/map/pc.c
index b7c540e1d..3cb78e65a 100644
--- a/src/map/pc.c
+++ b/src/map/pc.c
@@ -1458,7 +1458,7 @@ int pc_calcstatus(struct map_session_data* sd,int first)
}
if( (skill=pc_checkskill(sd,MC_INCCARRY))>0 ) // skill can be used with an item now, thanks to orn [Valaris]
- sd->max_weight += skill*1000;
+ sd->max_weight += skill*2000;
if( (skill=pc_checkskill(sd,AC_OWL))>0 ) // �ӂ��낤�̖�
sd->paramb[4] += skill;
@@ -1467,6 +1467,9 @@ int pc_calcstatus(struct map_session_data* sd,int first)
sd->paramb[0] ++;
sd->base_atk += 4;
}
+ if((skill=pc_checkskill(sd,SA_DRAGONOLOGY))>0 ){ // Dragonology increases +1 int every 2 levels
+ sd->paramb[3] += (skill+1)*0.5;
+ }
// New guild skills - Celest
if (sd->status.guild_id > 0) {
@@ -1656,7 +1659,7 @@ int pc_calcstatus(struct map_session_data* sd,int first)
//�U?���x?��
- if( (skill=pc_checkskill(sd,AC_VULTURE))>0){ // ���V�̖�
+ if((skill=pc_checkskill(sd,AC_VULTURE))>0){ // ���V�̖�
sd->hit += skill;
if(sd->status.weapon == 11)
sd->attackrange += skill;
@@ -1671,27 +1674,17 @@ int pc_calcstatus(struct map_session_data* sd,int first)
else if (pc_isriding(sd)) { // �y�R�y�R?��ɂ�鑬�x?��
sd->speed -= (0.25 * DEFAULT_WALK_SPEED);
sd->max_weight += 10000;
- }
- if(sd->sc_count){
- if(sd->sc_data[SC_WINDWALK].timer!=-1) //�E�B���h�E�H?�N����Lv*2%���Z
- sd->speed -= sd->speed *(sd->sc_data[SC_WINDWALK].val1*2)/100;
- if(sd->sc_data[SC_CARTBOOST].timer!=-1) // �J?�g�u?�X�g
- sd->speed -= (DEFAULT_WALK_SPEED * 20)/100;
- if(sd->sc_data[SC_BERSERK].timer!=-1) //�o?�T?�N����IA�Ɠ������炢�����H
- sd->speed -= sd->speed *25/100;
- if(sd->sc_data[SC_WEDDING].timer!=-1) //��������?���̂�?��
- sd->speed = 2*DEFAULT_WALK_SPEED;
- }
-
+ }
if((skill=pc_checkskill(sd,CR_TRUST))>0) { // �t�F�C�X
sd->status.max_hp += skill*200;
sd->subele[6] += skill*5;
}
- if((skill=pc_checkskill(sd,BS_SKINTEMPER))>0)
- {
+ if((skill=pc_checkskill(sd,BS_SKINTEMPER))>0) {
sd->subele[0] += skill;
sd->subele[3] += skill*5;
}
+ if((skill=pc_checkskill(sd,SA_ADVANCEDBOOK))>0 )
+ aspd_rate -= skill*0.5;
bl=sd->status.base_level;
@@ -1831,16 +1824,17 @@ int pc_calcstatus(struct map_session_data* sd,int first)
}
if(sd->sc_data[SC_NIBELUNGEN].timer!=-1) { // �j?�x�����O�̎w��
index = sd->equip_index[9];
- if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 3)
+ /*if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 3)
sd->watk += sd->sc_data[SC_NIBELUNGEN].val3;
index = sd->equip_index[8];
if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 3)
sd->watk_ += sd->sc_data[SC_NIBELUNGEN].val3;
+ index = sd->equip_index[9];*/
if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 4)
- sd->watk += sd->sc_data[SC_NIBELUNGEN].val2;
+ sd->watk2 += sd->sc_data[SC_NIBELUNGEN].val3;
index = sd->equip_index[8];
if(index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->wlv == 4)
- sd->watk_ += sd->sc_data[SC_NIBELUNGEN].val2;
+ sd->watk_2 += sd->sc_data[SC_NIBELUNGEN].val3;
}
if(sd->sc_data[SC_VOLCANO].timer!=-1 && sd->def_ele==3){ // �{���P?�m
@@ -1876,7 +1870,7 @@ int pc_calcstatus(struct map_session_data* sd,int first)
aspd_rate -= 30;
if(sd->sc_data[SC_ADRENALINE].timer != -1 && sd->sc_data[SC_TWOHANDQUICKEN].timer == -1 &&
sd->sc_data[SC_QUAGMIRE].timer == -1 && sd->sc_data[SC_DONTFORGETME].timer == -1) { // �A�h���i�������b�V��
- if(sd->sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penaly)
+ if(sd->sc_data[SC_ADRENALINE].val2 || !battle_config.party_skill_penalty)
aspd_rate -= 30;
else
aspd_rate -= 25;
@@ -1896,6 +1890,14 @@ int pc_calcstatus(struct map_session_data* sd,int first)
sd->sc_data[i=SC_SPEEDPOTION1].timer!=-1 ||
sd->sc_data[i=SC_SPEEDPOTION0].timer!=-1) // ? ���|?�V����
aspd_rate -= sd->sc_data[i].val2;
+ if(sd->sc_data[SC_WINDWALK].timer!=-1) //�E�B���h�E�H?�N����Lv*2%���Z
+ sd->speed -= sd->speed *(sd->sc_data[SC_WINDWALK].val1*2)/100;
+ if(sd->sc_data[SC_CARTBOOST].timer!=-1) // �J?�g�u?�X�g
+ sd->speed -= (DEFAULT_WALK_SPEED * 20)/100;
+ if(sd->sc_data[SC_BERSERK].timer!=-1) //�o?�T?�N����IA�Ɠ������炢�����H
+ sd->speed -= sd->speed *25/100;
+ if(sd->sc_data[SC_WEDDING].timer!=-1) //��������?���̂�?��
+ sd->speed = 2*DEFAULT_WALK_SPEED;
// HIT/FLEE?���n
if(sd->sc_data[SC_WHISTLE].timer!=-1){ // ���J
@@ -1980,13 +1982,15 @@ int pc_calcstatus(struct map_session_data* sd,int first)
}
if(sd->sc_data[SC_DEFENDER].timer != -1) {
sd->aspd += (550 - sd->sc_data[SC_DEFENDER].val1*50);
- sd->speed = (sd->speed * (155 - sd->sc_data[SC_DEFENDER].val1*5)) / 100;
+ // removed as of 12/14's patch [celest]
+ //sd->speed = (sd->speed * (155 - sd->sc_data[SC_DEFENDER].val1*5)) / 100;
}
if(sd->sc_data[SC_ENCPOISON].timer != -1)
sd->addeff[4] += sd->sc_data[SC_ENCPOISON].val2;
if( sd->sc_data[SC_DANCING].timer!=-1 ){ // ���t/�_���X�g�p��
- sd->speed*=4;
+ sd->speed = (double)sd->speed * (6.- 0.4 * pc_checkskill(sd, ((s_class.job == 19) ? BA_MUSICALLESSON : DC_DANCINGLESSON)));
+ //sd->speed*=4;
sd->nhealsp = 0;
sd->nshealsp = 0;
sd->nsshealsp = 0;
@@ -2175,10 +2179,11 @@ int pc_calcspeed (struct map_session_data *sd)
sd->speed = (sd->speed * 125) / 100;
}
if(sd->sc_data[SC_DEFENDER].timer != -1) {
- sd->speed = (sd->speed * (155 - sd->sc_data[SC_DEFENDER].val1*5)) / 100;
+ // removed as of 12/14's patch [celest]
+ //sd->speed = (sd->speed * (155 - sd->sc_data[SC_DEFENDER].val1*5)) / 100;
}
if( sd->sc_data[SC_DANCING].timer!=-1 ){
- sd->speed*=4;
+ sd->speed = (double)sd->speed * (6.- 0.4 * pc_checkskill(sd, ((s_class.job == 19) ? BA_MUSICALLESSON : DC_DANCINGLESSON)));
}
if(sd->sc_data[SC_CURSE].timer!=-1)
sd->speed += 450;
diff --git a/src/map/skill.c b/src/map/skill.c
index be23b2234..3cdc4a8f4 100644
--- a/src/map/skill.c
+++ b/src/map/skill.c
@@ -1195,6 +1195,11 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl,int s
}
break;
+ case AM_ACIDTERROR:
+ if( rand()%100 < (skilllv*3)*sc_def_vit/100 )
+ skill_status_change_start(bl,SC_BLEEDING,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
+ break;
+
case CR_SHIELDCHARGE: /* �V?���h�`��?�W */
if( rand()%100 < (15 + skilllv*5)*sc_def_vit/100 )
skill_status_change_start(bl,SC_STAN,skilllv,0,0,0,skill_get_time2(skillid,skilllv),0);
@@ -2391,8 +2396,10 @@ int skill_castend_damage_id( struct block_list* src, struct block_list *bl,int s
case AM_ACIDTERROR: /* �A�V�b�h�e��? */
skill_attack(BF_WEAPON,src,src,bl,skillid,skilllv,tick,flag);
- if(bl->type == BL_PC && rand()%100 < skill_get_time(skillid,skilllv) && battle_config.equipment_breaking)
+ if(bl->type == BL_PC && rand()%100 < skill_get_time(skillid,skilllv) && battle_config.equipment_breaking) {
pc_breakarmor((struct map_session_data *)bl);
+ clif_emotion(bl, 23);
+ }
break;
case MO_FINGEROFFENSIVE: /* �w? */
{
@@ -3170,7 +3177,7 @@ int skill_castend_nodamage_id( struct block_list *src, struct block_list *bl,int
break;
}
}
- if(rand()%100 > (75+skilllv*1) && (skilllv != 5)) {
+ if(rand()%100 > (60+skilllv*10) && (skilllv != 5)) {
clif_skill_fail(sd,skillid,0,0);
clif_skill_nodamage(src,bl,skillid,skilllv,0);
if(bl->type==BL_PC && battle_config.equipment_breaking) {
@@ -5041,15 +5048,19 @@ int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skil
pc_movepos(sd,x,y);
}else if( src->type==BL_MOB )
mob_warp((struct mob_data *)src,-1,x,y,0);
+ skill_status_change_start(src,SC_BLOCKSKILL,skilllv,0,MO_EXTREMITYFIST,0,2000,0 );
break;
case AM_CANNIBALIZE: // �o�C�I�v�����g
if(sd){
int mx,my,id=0;
+ int summons[5] = { 1020, 1068, 1118, 1500, 1368 };
+
struct mob_data *md;
mx = x;// + (rand()%10 - 5);
my = y;// + (rand()%10 - 5);
- id=mob_once_spawn(sd,"this",mx,my,"--ja--",1118,1,"");
+
+ id=mob_once_spawn(sd,"this",mx,my,"--ja--", summons[skilllv] ,1,"");
if( (md=(struct mob_data *)map_id2bl(id)) !=NULL ){
md->master_id=sd->bl.id;
md->hp=2210+skilllv*200;
@@ -5069,7 +5080,7 @@ int skill_castend_pos2( struct block_list *src, int x,int y,int skillid,int skil
id=mob_once_spawn(sd,"this",mx,my,"--ja--",1142,1,"");
if( (md=(struct mob_data *)map_id2bl(id)) !=NULL ){
md->master_id=sd->bl.id;
- md->hp=1000+skilllv*200;
+ md->hp=2000+skilllv*400;
md->state.special_mob_ai=2;
md->deletetimer=add_timer(gettick()+skill_get_time(skillid,skilllv),mob_timer_delete,id,0);
}
@@ -5272,7 +5283,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
case PR_SANCTUARY: /* �T���N�`���A�� */
count=21;
limit=skill_get_time(skillid,skilllv);
- val1=skilllv+3;
+ val1=(skilllv+3)*2;
val2=(skilllv>6)?777:skilllv*100;
target=BCT_ALL;
range=1;
@@ -5390,7 +5401,8 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
case SA_DELUGE: /* �f����?�W */
case SA_VIOLENTGALE: /* �o�C�I�����g�Q�C�� */
limit=skill_get_time(skillid,skilllv);
- count=skilllv<=2?25:(skilllv<=4?49:81);
+ //count=skilllv<=2?25:(skilllv<=4?49:81);
+ count=49;
target=BCT_ALL;
break;
@@ -5408,7 +5420,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid,
count=81;
limit=skill_get_time(skillid,skilllv);
range=5;
- target=BCT_ALL;
+ target=(skillid==BD_ETERNALCHAOS ? BCT_ENEMY : BCT_ALL);
break;
case BD_RICHMANKIM:
case BD_DRUMBATTLEFIELD: /* ?���ۂ̋��� */
@@ -5897,8 +5909,11 @@ int skill_unit_onplace(struct skill_unit *src,struct block_list *bl,unsigned int
clif_skill_nodamage(&src->bl,bl,AL_HEAL,heal,1);
battle_heal(NULL,bl,heal,0,0);
}
- else
+ else {
+ // reduce healing count if this was meant for damaging [celest]
+ sg->val1 /= 2;
skill_attack(BF_MAGIC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
+ }
}
break;
@@ -7032,6 +7047,10 @@ int skill_check_condition(struct map_session_data *sd,int type)
}
else sd->spiritball_old = lv;
break;
+ case MO_BODYRELOCATION:
+ if (sd->sc_count && sd->sc_data[SC_EXPLOSIONSPIRITS].timer!=-1)
+ spiritball = 0;
+ break;
case MO_CHAINCOMBO: //�A�ŏ�
if(sd->sc_data[SC_BLADESTOP].timer==-1){
if(sd->sc_data[SC_COMBO].timer == -1 || sd->sc_data[SC_COMBO].val1 != MO_TRIPLEATTACK)
@@ -7094,8 +7113,9 @@ int skill_check_condition(struct map_session_data *sd,int type)
case AM_SPHEREMINE: /* �X�t�B�A?�}�C�� */
if(type&1){
int c=0;
- int maxcount=skill_get_maxcount(skill);
- int mob_class=(skill==AM_CANNIBALIZE)?1118:1142;
+ int summons[5] = { 1020, 1068, 1118, 1500, 1368 };
+ int maxcount = (skill==AM_CANNIBALIZE)? 6-lv : skill_get_maxcount(skill);
+ int mob_class = (skill==AM_CANNIBALIZE)? summons[lv] :1142;
if(battle_config.pc_land_skill_limit && maxcount>0) {
map_foreachinarea(skill_check_condition_mob_master_sub ,sd->bl.m, 0, 0, map[sd->bl.m].xs, map[sd->bl.m].ys, BL_MOB, sd->bl.id, mob_class,&c );
if(c >= maxcount){
@@ -7657,15 +7677,16 @@ int skill_use_id( struct map_session_data *sd, int target_id,
return 0;
}
break;
- case AS_SPLASHER: /* �x�i���X�v���b�V��? */
- {
+ // removed on 12/14's patch [celest]
+ //case AS_SPLASHER: /* �x�i���X�v���b�V��? */
+ /* {
struct status_change *t_sc_data = battle_get_sc_data(bl);
if(t_sc_data && t_sc_data[SC_POISON].timer==-1){
clif_skill_fail(sd,skill_num,0,10);
return 0;
}
}
- break;
+ break;*/
case PF_MEMORIZE: /* �������C�Y */
casttime = 12000;
break;
@@ -8860,12 +8881,11 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
struct status_change *sc_data;
//short *sc_count; //�g���ĂȂ��H
- if( (bl=map_id2bl(id)) == NULL )
- return 0; //�Y?ID�����łɏ��ł��Ă���Ƃ����̂͂����ɂ����肻���Ȃ̂ŃX��?���Ă݂�
+ nullpo_retr(0, bl=map_id2bl(id));
nullpo_retr(0, sc_data=battle_get_sc_data(bl));
if(bl->type==BL_PC)
- sd=(struct map_session_data *)bl;
+ nullpo_retr(0, sd=(struct map_session_data *)bl);
//sc_count=battle_get_sc_count(bl); //�g���ĂȂ��H
@@ -8975,8 +8995,8 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
case SC_WATERBALL: /* �E�H?�^?�{?�� */
{
struct block_list *target=map_id2bl(sc_data[type].val2);
- if(target==NULL || target->prev==NULL)
- break;
+ nullpo_retb(target);
+ nullpo_retb(target->prev);
skill_attack(BF_MAGIC,bl,bl,target,WZ_WATERBALL,sc_data[type].val1,tick,0);
if((--sc_data[type].val3)>0) {
sc_data[type].timer=add_timer( 150+tick,skill_status_change_timer, bl->id, data );
@@ -9003,12 +9023,14 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
struct skill_unit *unit=
(struct skill_unit *)sc_data[type].val4;
struct block_list *src;
-
- if(!unit || !unit->group)
+ /*if(!unit || !unit->group)
break;
src=map_id2bl(unit->group->src_id);
if(!src)
- break;
+ break;*/
+ nullpo_retb(unit);
+ nullpo_retb(unit->group);
+ nullpo_retr(0, src=map_id2bl(unit->group->src_id));
skill_attack(BF_MISC,src,&unit->bl,bl,unit->group->skill_id,sc_data[type].val1,tick,0);
sc_data[type].timer=add_timer(skill_get_time2(unit->group->skill_id,unit->group->skill_lv)+tick,
skill_status_change_timer, bl->id, data );
@@ -9020,7 +9042,9 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
if( (--sc_data[type].val2)>0){
struct skill_unit *unit=
(struct skill_unit *)sc_data[type].val4;
- if(!unit || !unit->group || unit->group->src_id==bl->id)
+ nullpo_retb(unit);
+ nullpo_retb(unit->group);
+ if(unit->group->src_id == bl->id)
break;
skill_additional_effect(bl,bl,unit->group->skill_id,sc_data[type].val1,BF_LONG|BF_SKILL|BF_MISC,tick);
if (unit->group != 0)
@@ -9048,8 +9072,8 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
if((++sc_data[type].val4)%5 == 0 && battle_get_hp(bl) > hp>>2) {
hp = hp/100;
if(hp < 1) hp = 1;
- if(bl->type == BL_PC)
- pc_heal((struct map_session_data *)bl,-hp,0);
+ if(sd)
+ pc_heal(sd,-hp,0);
else if(bl->type == BL_MOB){
struct mob_data *md;
if((md=((struct mob_data *)bl)) == NULL)
@@ -9072,8 +9096,9 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
}
else if(bl->type == BL_MOB) {
struct mob_data *md;
- if((md=((struct mob_data *)bl)) == NULL)
- break;
+ nullpo_retr(0, md=(struct mob_data *)bl);
+ /*if((md=((struct mob_data *)bl)) == NULL)
+ break;*/
hp = 3 + hp/200;
md->hp -= hp;
}
@@ -9088,13 +9113,14 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
if (sc_data[SC_SLOWPOISON].timer == -1 && (--sc_data[type].val3) > 0) {
int hp = battle_get_max_hp(bl);
if (battle_get_hp(bl) > hp>>2) {
- if(bl->type == BL_PC) {
+ if(sd) {
hp = 3 + hp/50;
- pc_heal((struct map_session_data *)bl, -hp, 0);
+ pc_heal(sd, -hp, 0);
} else if (bl->type == BL_MOB) {
struct mob_data *md;
- if ((md=((struct mob_data *)bl)) == NULL)
- break;
+ nullpo_retr(0, md=(struct mob_data *)bl);
+ /*if ((md=((struct mob_data *)bl)) == NULL)
+ break;*/
hp = 3 + hp/100;
md->hp -= hp;
}
@@ -9124,14 +9150,15 @@ int skill_status_change_timer(int tid, unsigned int tick, int id, int data)
// case SC_BLEEDING:
if((--sc_data[type].val3) > 0) {
int hp = battle_get_max_hp(bl);
- if(bl->type == BL_PC) {
+ if(sd) {
hp = 3 + hp*3/200;
- pc_heal((struct map_session_data *)bl,-hp,0);
+ pc_heal(sd,-hp,0);
}
else if(bl->type == BL_MOB) {
struct mob_data *md;
- if((md=((struct mob_data *)bl)) == NULL)
- break;
+ nullpo_retr(0, md=(struct mob_data *)bl);
+ /*if((md=((struct mob_data *)bl)) == NULL)
+ break;*/
hp = 3 + hp/200;
md->hp -= hp;
}
@@ -9517,11 +9544,13 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
calc_flag = 1;
break;
case SC_WEAPONPERFECTION: /* �E�F�|���p?�t�F�N�V���� */
- if(battle_config.party_skill_penaly && !val2) tick /= 5;
+ // Lasting time penalties have been removed on sakray as of 12/14 [celest]
+ //if(battle_config.party_skill_penalty && !val2) tick /= 5;
break;
case SC_OVERTHRUST: /* �I?�o?�X���X�g */
*opt3 |= 2;
- if(battle_config.party_skill_penaly && !val2) tick /= 10;
+ // Lasting time penalties have been removed on sakray as of 12/14 [celest]
+ //if(battle_config.party_skill_penalty && !val2) tick /= 10;
break;
case SC_MAXIMIZEPOWER: /* �}�L�V�}�C�Y�p��?(SP��1���鎞��,val2�ɂ�) */
if(bl->type == BL_PC)
@@ -9682,7 +9711,7 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
break;
case SC_NIBELUNGEN: /* �j?�x�����O�̎w�� */
calc_flag = 1;
- val2 = (val1+2)*50;
+ //val2 = (val1+2)*50;
val3 = (val1+2)*25;
break;
case SC_ROKISWEIL: /* ���L�̋��� */
@@ -9691,7 +9720,7 @@ int skill_status_change_start(struct block_list *bl, int type, int val1, int val
break;
case SC_SIEGFRIED: /* �s���g�̃W?�N�t��?�h */
calc_flag = 1;
- val2 = 40 + val1*5;
+ val2 = 55 + val1*5;
val3 = val1*10;
break;
case SC_DISSONANCE: /* �s���a�� */