From c776066a6116c2e2bfcd73eab7bcf2c044442292 Mon Sep 17 00:00:00 2001 From: skotlex Date: Tue, 25 Apr 2006 23:58:19 +0000 Subject: - Renamed skill_clear_element_field to skill_clear_group, it accepts a flag to determine what to erase. &1 for elemental fields, &2 for traps. Also rewrote how it works to prevent missing elements (since each time an element is erased, the array contents shift) - Added battle config traps_setting to determine how traps should behave. With &1 traps are invisible if you didn't see them get set up. With &2 traps will be removed after changing maps. The default is 2. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@6285 54d463be-8e91-2dee-dedb-b68131a5f0ec --- src/map/skill.c | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'src/map/skill.c') diff --git a/src/map/skill.c b/src/map/skill.c index e1f5b52ac..e17af7e23 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -6402,7 +6402,7 @@ struct skill_unit_group *skill_unitsetting( struct block_list *src, int skillid, if (limit < 0) //This can happen... limit = skill_get_time(skillid,skilllv); } - skill_clear_element_field(src); + skill_clear_group(src,1); } break; } @@ -8915,27 +8915,39 @@ int skill_attack_area(struct block_list *bl,va_list ap) * *------------------------------------------ */ -int skill_clear_element_field(struct block_list *bl) +int skill_clear_group(struct block_list *bl, int flag) { struct unit_data *ud = unit_bl2ud(bl); - int i; + struct skill_unit_group *group[MAX_SKILLUNITGROUP]; + int i, count=0; nullpo_retr(0, bl); if (!ud) return 0; - - for (i=0;iskillunit[i];i++) { + + //All groups to be deleted are first stored on an array since the array elements shift around when you delete them. [Skotlex] + for (i=0;iskillunit[i];i++) + { switch (ud->skillunit[i]->skill_id) { case SA_DELUGE: case SA_VOLCANO: case SA_VIOLENTGALE: case SA_LANDPROTECTOR: case NJ_SUITON: - skill_delunitgroup(bl, ud->skillunit[i]); + if (flag&1) + group[count++]= ud->skillunit[i]; + break; + default: + if (flag&2 && skill_get_inf2(ud->skillunit[i]->skill_id)&INF2_TRAP) + group[count++]= ud->skillunit[i]; + break; } + } - return 1; + for (i=0;i