From 544e0c0ecdf3f4d0c875e19588fbdf848ffdac99 Mon Sep 17 00:00:00 2001 From: skotlex Date: Tue, 31 Oct 2006 16:04:06 +0000 Subject: - When Kaizel (or super novice rebirth skill) triggers, you get debuffed now. - Modified the player_cloak_check_type and monster_cloak_check_type settings. 1 makes it check for walls, 2 makes cloaking NOT end on normal attacks, and 4 makes cloaking NOT end when using skills. The default setting for players is still 1, but for mobs the default has been changed to 4. - Non-players can now use all skills while hidden. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9109 54d463be-8e91-2dee-dedb-b68131a5f0ec --- Changelog-Trunk.txt | 8 ++++++++ conf-tmpl/Changelog.txt | 6 ++++++ conf-tmpl/battle/skill.conf | 14 +++++++------- src/map/mob.c | 6 +++--- src/map/pc.c | 9 ++++++--- src/map/skill.c | 4 ++-- src/map/status.c | 13 ++++++++----- src/map/unit.c | 4 ++-- 8 files changed, 42 insertions(+), 22 deletions(-) diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index ef3ff982f..7f339b2e5 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,14 @@ 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. 2006/10/31 + * When Kaizel (or super novice rebirth skill) triggers, you get debuffed + now. [Skotlex] + * Modified the player_cloak_check_type and monster_cloak_check_type + settings. 1 makes it check for walls, 2 makes cloaking NOT end on normal + attacks, and 4 makes cloaking NOT end when using skills. The default + setting for players is still 1, but for mobs the default has been changed + to 4. [Skotlex] + * Non-players can now use all skills while hidden. [Skotlex] * Added a check to prevent adding negative damage to the total accumulated damage in mob_damage. It could fix some exploits, even though mob_damage should never be invoked with negative damage anyway. [Skotlex] diff --git a/conf-tmpl/Changelog.txt b/conf-tmpl/Changelog.txt index 9e8763f11..d58f3e083 100644 --- a/conf-tmpl/Changelog.txt +++ b/conf-tmpl/Changelog.txt @@ -1,5 +1,11 @@ Date Added +2006/10/31 + * Modified the player_cloak_check_type and monster_cloak_check_type + settings. 1 makes it check for walls, 2 makes cloaking NOT end on normal + attacks, and 4 makes cloaking NOT end when using skills. The default + setting for players is still 1, but for mobs the default has been changed + to 4 (skill.conf). [Skotlex] 2006/10/25 * Added exp-bonus settings exp_bonus_attacker and exp_bonus_max_attacker (exp.conf, default to 25 and 12) [Skotlex] diff --git a/conf-tmpl/battle/skill.conf b/conf-tmpl/battle/skill.conf index 87e37b4b2..f0c78c814 100644 --- a/conf-tmpl/battle/skill.conf +++ b/conf-tmpl/battle/skill.conf @@ -143,15 +143,15 @@ skill_wall_check: yes // When cloaking, Whether the wall is checked or not. (Note 1) // Note: When the skill does not checks for walls, you will always be considered -// as if you had a wall-next to you (you always get the wall-based speed). -// When "cloaking lasts forever" is set, it means attacking or using skills -// won't uncloak you, but being hit does. +// as if you had a wall-next to you (you always get the wall-based speed). +// Add the settings as required, being hit always uncloaks you. +// // 0 = doesn't check for walls -// 1 = it checks for walls -// 2 = it doesn't checks for walls + your cloaking lasts forever -// 3 = it checks for walls + your cloaking lasts forever +// 1 = Check for walls +// 2 = Cloaking is not cancelled when attacking. +// 4 = Cloaking is not cancelled when using skills player_cloak_check_type: 1 -monster_cloak_check_type: 0 +monster_cloak_check_type: 4 // Can't place unlimited land skills at the same time (Note 4) land_skill_limit: 1 diff --git a/src/map/mob.c b/src/map/mob.c index 9442adddf..2033cddbf 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -1594,15 +1594,15 @@ void mob_damage(struct mob_data *md, struct block_list *src, int damage) { int char_id = 0, flag = 0; + if (damage > 0) //Store total damage... + md->tdmg+=damage; + if(md->guardian_data && md->guardian_data->number < MAX_GUARDIANS) // guardian hp update [Valaris] (updated by [Skotlex]) md->guardian_data->castle->guardian[md->guardian_data->number].hp = md->status.hp; if (battle_config.show_mob_info&3) clif_charnameack (0, &md->bl); - if (damage > 0) //Store total damage... - md->tdmg+=damage; - if (!src) return; diff --git a/src/map/pc.c b/src/map/pc.c index 5ad01d285..81c503188 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -5094,21 +5094,24 @@ int pc_dead(struct map_session_data *sd,struct block_list *src) if (sd->sc.count && sd->sc.data[SC_KAIZEL].timer != -1) { + j = sd->sc.data[SC_KAIZEL].val1; //Kaizel Lv. pc_setstand(sd); + status_change_clear(&sd->bl,0); clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,1,1); if(sd->special_state.restart_full_recover) status_percent_heal(&sd->bl, 100, 100); else - status_percent_heal(&sd->bl, 10*sd->sc.data[SC_KAIZEL].val1, 0); + status_percent_heal(&sd->bl, 10*j, 0); + clif_resurrection(&sd->bl, 1); if(battle_config.pc_invincible_time) pc_setinvincibletimer(sd, battle_config.pc_invincible_time); - sc_start(&sd->bl,SkillStatusChangeTable(PR_KYRIE),100,10,skill_get_time2(SL_KAIZEL,sd->sc.data[SC_KAIZEL].val1)); - status_change_end(&sd->bl,SC_KAIZEL,-1); + sc_start(&sd->bl,SkillStatusChangeTable(PR_KYRIE),100,10,skill_get_time2(SL_KAIZEL,j)); return 0; } if (sd->state.snovice_flag == 4) { pc_setstand(sd); + status_change_clear(&sd->bl,0); clif_skill_nodamage(&sd->bl,&sd->bl,ALL_RESURRECTION,1,1); status_percent_heal(&sd->bl, 100, 100); clif_resurrection(&sd->bl, 1); diff --git a/src/map/skill.c b/src/map/skill.c index 724c915ba..b5e5dd31c 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -4940,9 +4940,9 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, in break; case NPC_INVISIBLE: - //Have val4 passed as 2 is for "infinite cloak". + //Have val4 passed as 6 is for "infinite cloak" (do not end on attack/skill use). clif_skill_nodamage(src,bl,skillid,skilllv, - sc_start4(bl,type,100,skilllv,0,0,2,skill_get_time(skillid,skilllv))); + sc_start4(bl,type,100,skilllv,0,0,6,skill_get_time(skillid,skilllv))); break; case NPC_SIEGEMODE: diff --git a/src/map/status.c b/src/map/status.c index 8ee4d5780..cbabda234 100644 --- a/src/map/status.c +++ b/src/map/status.c @@ -1046,7 +1046,9 @@ int status_check_skilluse(struct block_list *src, struct block_list *target, int case NJ_KIRIKAGE: break; default: - return 0; + //Non players can use all skills while hidden. + if (!skill_num || src->type == BL_PC) + return 0; } if (sc->option&OPTION_CHASEWALK && skill_num != ST_CHASEWALK) return 0; @@ -5047,7 +5049,7 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val if (map_flag_gvg(bl->m)) val4 *= 5; break; case SC_CLOAKING: - if (!sd) //Monsters should be able to walk no penalties. [Skotlex] + if (!sd) //Monsters should be able to walk with no penalties. [Skotlex] val1 = 10; val2 = tick>0?tick:60000; //SP consumption rate. val3 = 0; @@ -5057,11 +5059,12 @@ int status_change_start(struct block_list *bl,int type,int rate,int val1,int val val3+= 70+val1*3; //Speed adjustment without a wall. //With a wall, it is val3 +25. //val4&1 signals the presence of a wall. - //val4&2 signals eternal cloaking (not cancelled on attack) [Skotlex] + //val4&2 makes cloak not end on normal attacks [Skotlex] + //val4&4 makes cloak not end on using skills if (bl->type == BL_PC) //Standard cloaking. - val4 |= battle_config.pc_cloak_check_type&3; + val4 |= battle_config.pc_cloak_check_type&7; else - val4 |= battle_config.monster_cloak_check_type&3; + val4 |= battle_config.monster_cloak_check_type&7; break; case SC_SIGHT: /* サイト/ルアフ */ case SC_RUWACH: diff --git a/src/map/unit.c b/src/map/unit.c index 38589b8e0..c8e4fb341 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -970,7 +970,7 @@ int unit_skilluse_id2(struct block_list *src, int target_id, int skill_num, int ud->skilllv = skill_lv; if(sc && sc->data[SC_CLOAKING].timer != -1 && - !(sc->data[SC_CLOAKING].val4&2) && skill_num != AS_CLOAKING) + !(sc->data[SC_CLOAKING].val4&4) && skill_num != AS_CLOAKING) status_change_end(src,SC_CLOAKING,-1); if(casttime > 0) { @@ -1063,7 +1063,7 @@ int unit_skilluse_pos2( struct block_list *src, int skill_x, int skill_y, int sk ud->skilltarget = 0; if (sc && sc->data[SC_CLOAKING].timer != -1 && - !(sc->data[SC_CLOAKING].val4&2)) + !(sc->data[SC_CLOAKING].val4&4)) status_change_end(src,SC_CLOAKING,-1); if(casttime > 0) { -- cgit v1.2.3-60-g2f50