|
@@ -18048,21 +18048,25 @@ int skill_greed(struct block_list *bl, va_list ap)
|
|
|
/// Ranger's Detonator [Jobbie/3CeAM]
|
|
|
int skill_detonator(struct block_list *bl, va_list ap)
|
|
|
{
|
|
|
- struct skill_unit *unit = NULL;
|
|
|
- struct block_list *src;
|
|
|
- int unit_id;
|
|
|
-
|
|
|
nullpo_ret(bl);
|
|
|
nullpo_ret(ap);
|
|
|
|
|
|
- src = va_arg(ap,struct block_list *);
|
|
|
+ if (bl->type != BL_SKILL)
|
|
|
+ return 0;
|
|
|
|
|
|
- if( bl->type != BL_SKILL || (unit = (struct skill_unit *)bl) == NULL || !unit->group )
|
|
|
+ block_list *src = va_arg(ap, block_list *);
|
|
|
+ skill_unit *unit = (skill_unit *)bl;
|
|
|
+
|
|
|
+ if (unit == nullptr)
|
|
|
return 0;
|
|
|
- if( unit->group->src_id != src->id )
|
|
|
+
|
|
|
+ skill_unit_group *group = unit->group;
|
|
|
+
|
|
|
+ if (group == nullptr || group->src_id != src->id)
|
|
|
return 0;
|
|
|
|
|
|
- unit_id = unit->group->unit_id;
|
|
|
+ int unit_id = group->unit_id;
|
|
|
+
|
|
|
switch( unit_id )
|
|
|
{ //List of Hunter and Ranger Traps that can be detonate.
|
|
|
case UNT_BLASTMINE:
|
|
@@ -18074,21 +18078,23 @@ int skill_detonator(struct block_list *bl, va_list ap)
|
|
|
case UNT_ICEBOUNDTRAP:
|
|
|
switch(unit_id) {
|
|
|
case UNT_TALKIEBOX:
|
|
|
- clif_talkiebox(bl,unit->group->valstr);
|
|
|
- unit->group->val2 = -1;
|
|
|
+ clif_talkiebox(bl,group->valstr);
|
|
|
+ group->val2 = -1;
|
|
|
break;
|
|
|
case UNT_CLAYMORETRAP:
|
|
|
case UNT_FIRINGTRAP:
|
|
|
case UNT_ICEBOUNDTRAP:
|
|
|
- map_foreachinrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag|BL_SKILL|~BCT_SELF,bl,unit->group->tick);
|
|
|
+ map_foreachinrange(skill_trap_splash,bl,skill_get_splash(group->skill_id,group->skill_lv),group->bl_flag|BL_SKILL|~BCT_SELF,bl,group->tick);
|
|
|
break;
|
|
|
default:
|
|
|
- map_foreachinrange(skill_trap_splash,bl,skill_get_splash(unit->group->skill_id,unit->group->skill_lv),unit->group->bl_flag,bl,unit->group->tick);
|
|
|
+ map_foreachinrange(skill_trap_splash,bl,skill_get_splash(group->skill_id,group->skill_lv),group->bl_flag,bl,group->tick);
|
|
|
break;
|
|
|
}
|
|
|
+ if (unit->group == nullptr)
|
|
|
+ return 0;
|
|
|
clif_changetraplook(bl, UNT_USED_TRAPS);
|
|
|
- unit->group->unit_id = UNT_USED_TRAPS;
|
|
|
- unit->group->limit = DIFF_TICK(gettick(),unit->group->tick) +
|
|
|
+ group->unit_id = UNT_USED_TRAPS;
|
|
|
+ group->limit = DIFF_TICK(gettick(),group->tick) +
|
|
|
(unit_id == UNT_TALKIEBOX ? 5000 : (unit_id == UNT_CLUSTERBOMB || unit_id == UNT_ICEBOUNDTRAP? 2500 : (unit_id == UNT_FIRINGTRAP ? 0 : 1500)) );
|
|
|
break;
|
|
|
}
|