From 73243e8e9d905e2f46e56e35fcf07fb419a2942a Mon Sep 17 00:00:00 2001 From: aleos89 Date: Fri, 23 Jan 2015 14:39:13 -0500 Subject: [PATCH] Fixed #138 - Updated trap visibility to official settings. --- conf/battle/skill.conf | 9 +++++---- src/map/clif.c | 32 ++++++++++++++++++++++++-------- src/map/clif.h | 2 +- src/map/skill.c | 14 +++++++------- 4 files changed, 37 insertions(+), 20 deletions(-) diff --git a/conf/battle/skill.conf b/conf/battle/skill.conf index 99e66e0636..0e033bbb10 100644 --- a/conf/battle/skill.conf +++ b/conf/battle/skill.conf @@ -119,10 +119,11 @@ skill_nofootset: 1 // Default on official servers: 1 (for players) gvg_traps_target_all: 1 -// Some traps settings (add as necessary): -// 1: Traps are invisible to those who come into view of it. When unset, all traps are visible at all times. -// (Invisible traps can be revealed through Hunter's Detecting skill) -traps_setting: 0 +// Hunter's traps visibility setting: +// 1: (Official) Many of Hunter's traps are invisible at all times. +// But any player who see the Hunter laying the trap will be able to see the trap until they move out of sight of it. +// Although, invisible traps can be revealed through Hunter's Detecting skill. +traps_setting: 1 // Restrictions applied to the Alchemist's Summon Flora skill (add as necessary) // 1: Enable players to damage the floras outside of versus grounds. diff --git a/src/map/clif.c b/src/map/clif.c index a44138e6a5..011f254351 100644 --- a/src/map/clif.c +++ b/src/map/clif.c @@ -4545,10 +4545,10 @@ static void clif_graffiti(struct block_list *bl, struct skill_unit *unit, enum s /// 08c7 .W L .L .W .W .B .W .B (ZC_SKILL_ENTRY3) /// 099f .W L .L .W .W .L .W .B (ZC_SKILL_ENTRY4) /// 09ca .W L .L .W .W .L .B .B .B (ZC_SKILL_ENTRY5) -void clif_getareachar_skillunit(struct block_list *bl, struct skill_unit *unit, enum send_target target) { +void clif_getareachar_skillunit(struct block_list *bl, struct skill_unit *unit, enum send_target target, uint8 flag) { int header = 0, unit_id = 0, pos = 0, fd = 0, len = -1; unsigned char buf[128]; - + nullpo_retv(bl); nullpo_retv(unit); @@ -4558,15 +4558,31 @@ void clif_getareachar_skillunit(struct block_list *bl, struct skill_unit *unit, if (unit->group->state.guildaura) return; - if (battle_config.traps_setting&1 && skill_get_inf2(unit->group->skill_id)&INF2_TRAP) - unit_id = UNT_DUMMYSKILL; //Use invisible unit id for traps. - else if (unit->group->state.song_dance&0x1 && unit->val2&UF_ENSEMBLE) + if (unit->group->state.song_dance&0x1 && unit->val2&UF_ENSEMBLE) unit_id = unit->val2&UF_SONG ? UNT_DISSONANCE : UNT_UGLYDANCE; else if (skill_get_unit_flag(unit->group->skill_id) & UF_RANGEDSINGLEUNIT && !(unit->val2 & UF_RANGEDSINGLEUNIT)) - unit_id = UNT_DUMMYSKILL; //Use invisible unit id for other case of rangedsingle unit + unit_id = UNT_DUMMYSKILL; // Use invisible unit id for other case of rangedsingle unit else unit_id = unit->group->unit_id; + if (flag && battle_config.traps_setting&1) { + switch(unit->group->skill_id) { + case HT_ANKLESNARE: + if (!map_flag_vs(((TBL_PC*)bl)->bl.m)) + break; + case HT_SKIDTRAP: + case MA_SKIDTRAP: + case HT_SHOCKWAVE: + case HT_SANDMAN: + case MA_SANDMAN: + case HT_FLASHER: + case HT_FREEZINGTRAP: + case MA_FREEZINGTRAP: + unit_id = UNT_DUMMYSKILL; // Use invisible unit id for Hunter's traps + break; + } + } + #if PACKETVER >= 3 if (unit_id == UNT_GRAFFITI) { // Graffiti [Valaris] clif_graffiti(bl, unit, target); @@ -4690,7 +4706,7 @@ static int clif_getareachar(struct block_list* bl,va_list ap) clif_getareachar_item(sd,(struct flooritem_data*) bl); break; case BL_SKILL: - clif_getareachar_skillunit(&sd->bl, (TBL_SKILL*)bl, SELF); + clif_getareachar_skillunit(&sd->bl, (TBL_SKILL*)bl, SELF, 1); break; default: if(&sd->bl == bl) @@ -4778,7 +4794,7 @@ int clif_insight(struct block_list *bl,va_list ap) clif_getareachar_item(tsd,(struct flooritem_data*)bl); break; case BL_SKILL: - clif_getareachar_skillunit(&tsd->bl, (TBL_SKILL*)bl, SELF); + clif_getareachar_skillunit(&tsd->bl, (TBL_SKILL*)bl, SELF, 1); break; default: clif_getareachar_unit(tsd,bl); diff --git a/src/map/clif.h b/src/map/clif.h index 1c46152683..6907b6d11c 100644 --- a/src/map/clif.h +++ b/src/map/clif.h @@ -553,7 +553,7 @@ void clif_cooking_list(struct map_session_data *sd, int trigger, uint16 skill_id void clif_produceeffect(struct map_session_data* sd,int flag, unsigned short nameid); -void clif_getareachar_skillunit(struct block_list *bl, struct skill_unit *unit, enum send_target target); +void clif_getareachar_skillunit(struct block_list *bl, struct skill_unit *unit, enum send_target target, uint8 flag); void clif_skill_delunit(struct skill_unit *unit); void clif_skillunit_update(struct block_list* bl); diff --git a/src/map/skill.c b/src/map/skill.c index e94631f53a..fad7c7b6a7 100755 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -4017,7 +4017,7 @@ static int skill_reveal_trap(struct block_list *bl, va_list ap) { //Reveal trap. //Change look is not good enough, the client ignores it as an actual trap still. [Skotlex] //clif_changetraplook(bl, su->group->unit_id); - clif_getareachar_skillunit(&su->bl, su, AREA); + clif_getareachar_skillunit(&su->bl, su, AREA, 0); return 1; } return 0; @@ -10954,8 +10954,8 @@ int skill_castend_pos2(struct block_list* src, int x, int y, uint16 skill_id, ui src->m, x-i, y-i, x+i,y+i,BL_CHAR, src,NULL,SC_SIGHT,tick); if(battle_config.traps_setting&1) - map_foreachinarea( skill_reveal_trap, - src->m, x-i, y-i, x+i,y+i,BL_SKILL); + map_foreachinarea(skill_reveal_trap, src->m, x-i, y-i, x+i, y+i, BL_SKILL); + break; break; case SR_RIDEINLIGHTNING: @@ -11818,7 +11818,7 @@ static int skill_dance_overlap_sub(struct block_list* bl, va_list ap) else //Remove dissonance target->val2 &= ~UF_ENSEMBLE; - clif_getareachar_skillunit(&target->bl, target, AREA); //Update look of affected cell. + clif_getareachar_skillunit(&target->bl, target, AREA, 0); //Update look of affected cell. return 1; } @@ -16997,7 +16997,7 @@ struct skill_unit *skill_initunit(struct skill_unit_group *group, int idx, int x break; } - clif_getareachar_skillunit(&unit->bl, unit, AREA); + clif_getareachar_skillunit(&unit->bl, unit, AREA, 0); return unit; } @@ -17840,7 +17840,7 @@ void skill_unit_move_unit(struct block_list *bl, int dx, int dy) { map_moveblock(bl, dx, dy, tick); map_foreachincell(skill_unit_effect,bl->m,bl->x,bl->y,su->group->bl_flag,bl,tick,1); - clif_getareachar_skillunit(bl, su, AREA); + clif_getareachar_skillunit(bl, su, AREA, 0); return; } @@ -17934,7 +17934,7 @@ void skill_unit_move_unit_group(struct skill_unit_group *group, int16 m, int16 d if (!(m_flag[i]&0x2)) { //We only moved the cell in 0-1 if (group->state.song_dance&0x1) //Check for dissonance effect. skill_dance_overlap(unit1, 1); - clif_getareachar_skillunit(&unit1->bl, unit1, AREA); + clif_getareachar_skillunit(&unit1->bl, unit1, AREA, 0); map_foreachincell(skill_unit_effect,unit1->bl.m,unit1->bl.x,unit1->bl.y,group->bl_flag,&unit1->bl,tick,1); } }