- Modified Self Destruction, so that Marine Spheres in non-versus maps will hurt only enemies, while in all other situations this skill will hurt everyone around them.
- Expanded setting debuff_on_logout so that &1 removes negative buffs and &2 removes positive buffs. - Food status boosts will no longer end on death, but they will end when you respawn or logout. - Added battle config file status.conf, moved some settings from skill.conf and battle.conf to it since they are entirely Status-Change related. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@8033 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
7f0c0e574c
commit
4550e45f33
@ -4,6 +4,16 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
|
|||||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2006/08/01
|
2006/08/01
|
||||||
|
* Modified Self Destruction, so that Marine Spheres in non-versus maps will
|
||||||
|
hurt only enemies, while in all other situations this skill will hurt
|
||||||
|
everyone around them. [Skotlex]
|
||||||
|
* Expanded setting debuff_on_logout so that &1 removes negative buffs and
|
||||||
|
&2 removes positive buffs. [Skotlex]
|
||||||
|
* Food status boosts will no longer end on death, but they will end when
|
||||||
|
you respawn or logout. [Skotlex]
|
||||||
|
* Added battle config file status.conf, moved some settings from skill.conf
|
||||||
|
and battle.conf to it since they are entirely Status-Change related.
|
||||||
|
[Skotlex]
|
||||||
* Added the missing lines to enable script command "kickwaitingroomall"
|
* Added the missing lines to enable script command "kickwaitingroomall"
|
||||||
[Skotlex]
|
[Skotlex]
|
||||||
* Magic Rod's can-act delay will no longer be applied when you absorb a
|
* Magic Rod's can-act delay will no longer be applied when you absorb a
|
||||||
|
@ -147,23 +147,3 @@ delay_battle_damage: yes
|
|||||||
|
|
||||||
// Are arrows are consumed when used on a bow? (Note 1)
|
// Are arrows are consumed when used on a bow? (Note 1)
|
||||||
arrow_decrement: yes
|
arrow_decrement: yes
|
||||||
|
|
||||||
// Adjustment for the natural rate of resistance from status changes.
|
|
||||||
// If 50, status defense is halved, and you need twice as much stats to block
|
|
||||||
// them (eg: 200 vit to completely block stun)
|
|
||||||
pc_status_def_rate: 100
|
|
||||||
mob_status_def_rate: 100
|
|
||||||
|
|
||||||
// Required luk to gain inmunity to status changes.
|
|
||||||
// Luk increases resistance by closing the gap between natural resist and max
|
|
||||||
// linearly. This setting indicates required luk to gain complete inmunity.
|
|
||||||
// Eg: 40 vit -> 40% resist. 150 luk -> +50% of the missing gap.
|
|
||||||
// So 40% + (50% of 60%) = 70%
|
|
||||||
pc_luk_sc_def: 300
|
|
||||||
mob_luk_sc_def: 300
|
|
||||||
|
|
||||||
// Maximum resistance to status changes. (10000 = 100%)
|
|
||||||
// NOTE: This is applied after cards and equipment, so inmunity cards are
|
|
||||||
// capped to this.
|
|
||||||
pc_max_status_def: 10000
|
|
||||||
mob_max_status_def: 10000
|
|
||||||
|
@ -86,14 +86,6 @@ skillrange_from_weapon: 14
|
|||||||
// no effect while the caster is unable to fight (eg: stunned).
|
// no effect while the caster is unable to fight (eg: stunned).
|
||||||
skill_caster_check: yes
|
skill_caster_check: yes
|
||||||
|
|
||||||
// Should skill casting be cancelled when inflicted by curse/stun/sleep/etc?
|
|
||||||
status_cast_cancel: no
|
|
||||||
|
|
||||||
// Will certain negative skill status-changes be removed on logout?
|
|
||||||
// This mimics official servers, where Extremity Fist's no SP regen and
|
|
||||||
// Strip Equipment effects are removed when you logout.
|
|
||||||
debuff_on_logout: yes
|
|
||||||
|
|
||||||
// Should ground placed skills be removed as soon as the caster dies? [Note 4]
|
// Should ground placed skills be removed as soon as the caster dies? [Note 4]
|
||||||
clear_skills_on_death: 15
|
clear_skills_on_death: 15
|
||||||
|
|
||||||
|
61
conf-tmpl/battle/status.conf
Normal file
61
conf-tmpl/battle/status.conf
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
// ______ __ __
|
||||||
|
// /\ _ \/\ \__/\ \
|
||||||
|
// __\ \ \L\ \ \ ,_\ \ \___ __ ___ __
|
||||||
|
// /'__`\ \ __ \ \ \/\ \ _ `\ /'__`\/' _ `\ /'__`\
|
||||||
|
///\ __/\ \ \/\ \ \ \_\ \ \ \ \/\ __//\ \/\ \/\ \L\.\_
|
||||||
|
//\ \____\\ \_\ \_\ \__\\ \_\ \_\ \____\ \_\ \_\ \__/.\_\
|
||||||
|
// \/____/ \/_/\/_/\/__/ \/_/\/_/\/____/\/_/\/_/\/__/\/_/
|
||||||
|
// _ _ _ _ _ _ _ _ _ _ _ _ _
|
||||||
|
// / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \ / \
|
||||||
|
//( e | n | g | l | i | s | h ) ( A | t | h | e | n | a )
|
||||||
|
// \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/ \_/
|
||||||
|
//
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
// eAthena Battle Configuration File
|
||||||
|
// Originally Translated by Peter Kieser <pfak@telus.net>
|
||||||
|
// Made in to plainer English by Ancyker
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
//Note 1: Directives can be set using on/off, yes/no or 1/0.
|
||||||
|
//Note 2: All rates are in percents, 100 would mean 100%, 200
|
||||||
|
// would mean 200%, etc
|
||||||
|
//Note 3: Value is not limited to 60K (see below)
|
||||||
|
//Note 4: Use bitmask values to specify who is affected
|
||||||
|
// (1: Pc, 2: Mob, 4: Pet, 8: Homonculus)
|
||||||
|
// Other Information:
|
||||||
|
// All options are limited to a max of 60K (aprox) which is 600%
|
||||||
|
// or 60secs as appropiate.
|
||||||
|
// 1000 miliseconds is 1 second.
|
||||||
|
// Unless otherwise specified, the minimum value is 0 for all
|
||||||
|
// features.
|
||||||
|
//--------------------------------------------------------------
|
||||||
|
|
||||||
|
// Should skill casting be cancelled when inflicted by curse/stun/sleep/etc?
|
||||||
|
status_cast_cancel: no
|
||||||
|
|
||||||
|
// Will certain skill status-changes be removed on logout?
|
||||||
|
// This mimics official servers, where Extremity Fist's no SP regen,
|
||||||
|
// Strip Equipment, cooking effects are removed when you logout. Setting is:
|
||||||
|
// 1 - remove negative buffs (stripping, EF)
|
||||||
|
// 2 - remove positive buffs (cooking)
|
||||||
|
// 3 - remove all buffs that are not saved on official (default)
|
||||||
|
debuff_on_logout: 3
|
||||||
|
|
||||||
|
// Adjustment for the natural rate of resistance from status changes.
|
||||||
|
// If 50, status defense is halved, and you need twice as much stats to block
|
||||||
|
// them (eg: 200 vit to completely block stun)
|
||||||
|
pc_status_def_rate: 100
|
||||||
|
mob_status_def_rate: 100
|
||||||
|
|
||||||
|
// Required luk to gain inmunity to status changes.
|
||||||
|
// Luk increases resistance by closing the gap between natural resist and max
|
||||||
|
// linearly. This setting indicates required luk to gain complete inmunity.
|
||||||
|
// Eg: 40 vit -> 40% resist. 150 luk -> +50% of the missing gap.
|
||||||
|
// So 40% + (50% of 60%) = 70%
|
||||||
|
pc_luk_sc_def: 300
|
||||||
|
mob_luk_sc_def: 300
|
||||||
|
|
||||||
|
// Maximum resistance to status changes. (10000 = 100%)
|
||||||
|
// NOTE: This is applied after cards and equipment, so inmunity cards are
|
||||||
|
// capped to this.
|
||||||
|
pc_max_status_def: 10000
|
||||||
|
mob_max_status_def: 10000
|
@ -53,6 +53,9 @@ import: conf/battle/player.conf
|
|||||||
//Skill related settings
|
//Skill related settings
|
||||||
import: conf/battle/skill.conf
|
import: conf/battle/skill.conf
|
||||||
|
|
||||||
|
//Status change related settings
|
||||||
|
import: conf/battle/status.conf
|
||||||
|
|
||||||
// Anything else that didn't fit anywhere else.
|
// Anything else that didn't fit anywhere else.
|
||||||
// Includes duel, day/night, mute/manner, log settings.
|
// Includes duel, day/night, mute/manner, log settings.
|
||||||
import: conf/battle/misc.conf
|
import: conf/battle/misc.conf
|
||||||
|
@ -8940,6 +8940,31 @@ void clif_parse_Restart(int fd, struct map_session_data *sd) {
|
|||||||
if (pc_isdead(sd)) {
|
if (pc_isdead(sd)) {
|
||||||
pc_setstand(sd);
|
pc_setstand(sd);
|
||||||
pc_setrestartvalue(sd, 3);
|
pc_setrestartvalue(sd, 3);
|
||||||
|
if (sd->sc.count && battle_config.debuff_on_logout&2) {
|
||||||
|
//For some reason food buffs are removed when you respawn.
|
||||||
|
if(sd->sc.data[SC_STRFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_STRFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_AGIFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_AGIFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_VITFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_VITFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_INTFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_INTFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_DEXFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_DEXFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_LUKFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_LUKFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_HITFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_HITFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_FLEEFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_FLEEFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_BATKFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_BATKFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_WATKFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_WATKFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_MATKFOOD].timer!=-1)
|
||||||
|
status_change_end(&sd->bl,SC_MATKFOOD,-1);
|
||||||
|
}
|
||||||
pc_setpos(sd, sd->status.save_point.map, sd->status.save_point.x, sd->status.save_point.y, 2);
|
pc_setpos(sd, sd->status.save_point.map, sd->status.save_point.x, sd->status.save_point.y, 2);
|
||||||
}
|
}
|
||||||
// in case the player's status somehow wasn't updated yet [Celest]
|
// in case the player's status somehow wasn't updated yet [Celest]
|
||||||
|
@ -4089,10 +4089,13 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in
|
|||||||
}
|
}
|
||||||
case NPC_SELFDESTRUCTION:
|
case NPC_SELFDESTRUCTION:
|
||||||
//Self Destruction hits everyone in range (allies+enemies)
|
//Self Destruction hits everyone in range (allies+enemies)
|
||||||
|
//Except for Summoned Marine spheres on non-versus maps, where it's just enemy.
|
||||||
|
i = (md && md->special_state.ai == 2 && !map_flag_vs(src->m))?
|
||||||
|
BCT_ENEMY:BCT_ALL;
|
||||||
clif_skill_nodamage(src, src, skillid, -1, 1);
|
clif_skill_nodamage(src, src, skillid, -1, 1);
|
||||||
map_foreachinrange(skill_area_sub, bl,
|
map_foreachinrange(skill_area_sub, bl,
|
||||||
skill_get_splash(skillid, skilllv), BL_CHAR,
|
skill_get_splash(skillid, skilllv), BL_CHAR,
|
||||||
src, skillid, skilllv, tick, flag|BCT_ALL,
|
src, skillid, skilllv, tick, flag|i,
|
||||||
skill_castend_damage_id);
|
skill_castend_damage_id);
|
||||||
status_damage(src, src, sstatus->max_hp,0,0,1);
|
status_damage(src, src, sstatus->max_hp,0,0,1);
|
||||||
break;
|
break;
|
||||||
|
@ -5623,16 +5623,36 @@ int status_change_clear(struct block_list *bl,int type)
|
|||||||
skill_stop_dancing(bl);
|
skill_stop_dancing(bl);
|
||||||
for(i = 0; i < SC_MAX; i++)
|
for(i = 0; i < SC_MAX; i++)
|
||||||
{
|
{
|
||||||
//Type 0: PC killed -> Place here stats that do not dispel on death.
|
if(sc->data[i].timer == -1)
|
||||||
if(sc->data[i].timer == -1 ||
|
continue;
|
||||||
(type == 0 && (
|
if(type == 0)
|
||||||
i == SC_EDP || i == SC_MELTDOWN || i == SC_XMAS || i == SC_NOCHAT ||
|
switch (i)
|
||||||
i == SC_FUSION || i == SC_TKREST || i == SC_READYSTORM ||
|
{ //Type 0: PC killed -> Place here stats that do not dispel on death.
|
||||||
i == SC_READYDOWN || i == SC_READYCOUNTER || i == SC_READYTURN ||
|
case SC_EDP:
|
||||||
i == SC_DODGE || i == SC_JAILED
|
case SC_MELTDOWN:
|
||||||
)))
|
case SC_XMAS:
|
||||||
|
case SC_NOCHAT:
|
||||||
|
case SC_FUSION:
|
||||||
|
case SC_TKREST:
|
||||||
|
case SC_READYSTORM:
|
||||||
|
case SC_READYDOWN:
|
||||||
|
case SC_READYCOUNTER:
|
||||||
|
case SC_READYTURN:
|
||||||
|
case SC_DODGE:
|
||||||
|
case SC_JAILED:
|
||||||
|
case SC_STRFOOD:
|
||||||
|
case SC_AGIFOOD:
|
||||||
|
case SC_VITFOOD:
|
||||||
|
case SC_INTFOOD:
|
||||||
|
case SC_DEXFOOD:
|
||||||
|
case SC_LUKFOOD:
|
||||||
|
case SC_HITFOOD:
|
||||||
|
case SC_FLEEFOOD:
|
||||||
|
case SC_BATKFOOD:
|
||||||
|
case SC_WATKFOOD:
|
||||||
|
case SC_MATKFOOD:
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
status_change_end(bl, i, -1);
|
status_change_end(bl, i, -1);
|
||||||
|
|
||||||
if (type == 1 && sc->data[i].timer != -1)
|
if (type == 1 && sc->data[i].timer != -1)
|
||||||
|
@ -1621,7 +1621,7 @@ int unit_free(struct block_list *bl) {
|
|||||||
status_change_end(bl,SC_BERSERK,-1);
|
status_change_end(bl,SC_BERSERK,-1);
|
||||||
if(sd->sc.data[SC_TRICKDEAD].timer!=-1)
|
if(sd->sc.data[SC_TRICKDEAD].timer!=-1)
|
||||||
status_change_end(bl,SC_TRICKDEAD,-1);
|
status_change_end(bl,SC_TRICKDEAD,-1);
|
||||||
if (battle_config.debuff_on_logout) {
|
if (battle_config.debuff_on_logout&1) {
|
||||||
if(sd->sc.data[SC_ORCISH].timer!=-1)
|
if(sd->sc.data[SC_ORCISH].timer!=-1)
|
||||||
status_change_end(bl,SC_ORCISH,-1);
|
status_change_end(bl,SC_ORCISH,-1);
|
||||||
if(sd->sc.data[SC_STRIPWEAPON].timer!=-1)
|
if(sd->sc.data[SC_STRIPWEAPON].timer!=-1)
|
||||||
@ -1637,6 +1637,31 @@ int unit_free(struct block_list *bl) {
|
|||||||
if(sd->sc.data[SC_EXPLOSIONSPIRITS].timer!=-1)
|
if(sd->sc.data[SC_EXPLOSIONSPIRITS].timer!=-1)
|
||||||
status_change_end(bl,SC_EXPLOSIONSPIRITS,-1);
|
status_change_end(bl,SC_EXPLOSIONSPIRITS,-1);
|
||||||
}
|
}
|
||||||
|
if (battle_config.debuff_on_logout&2)
|
||||||
|
{ //Food items are removed on logout.
|
||||||
|
if(sd->sc.data[SC_STRFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_STRFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_AGIFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_AGIFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_VITFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_VITFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_INTFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_INTFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_DEXFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_DEXFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_LUKFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_LUKFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_HITFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_HITFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_FLEEFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_FLEEFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_BATKFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_BATKFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_WATKFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_WATKFOOD,-1);
|
||||||
|
if(sd->sc.data[SC_MATKFOOD].timer!=-1)
|
||||||
|
status_change_end(bl,SC_MATKFOOD,-1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (sd->followtimer != -1)
|
if (sd->followtimer != -1)
|
||||||
pc_stop_following(sd);
|
pc_stop_following(sd);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user