ソースを参照

Fiberlock now can trap multiple enemies on the same cell and its triggering area was reduced to 1x1.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@13792 54d463be-8e91-2dee-dedb-b68131a5f0ec
Inkfish 16 年 前
コミット
dbb4774882
3 ファイル変更15 行追加9 行削除
  1. 1 0
      Changelog-Trunk.txt
  2. 1 1
      db/skill_unit_db.txt
  3. 13 8
      src/map/skill.c

+ 1 - 0
Changelog-Trunk.txt

@@ -5,6 +5,7 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
 09/05/19
 	* Added missing packet 0x2c9 and fixed 0x2da's length error. [Inkfish]
+	* Fiberlock now can trap multiple enemies on the same cell and its triggering area was reduced to 1x1. [Inkfish]
 09/05/18
 	* Item-bonuses now use the official default durations for status changes [Playtester]
 	* status calc code cleanup [ultramage]

+ 1 - 1
db/skill_unit_db.txt

@@ -81,7 +81,7 @@
 369,0xb3,    , -1, 0,10000,all,  0x008	//PA_GOSPEL
 395,0xb5,    ,  4, 0,  -1,all,   0x200	//CG_MOONLIT
 404,0xb6,    , -1, 0,  -1,all,   0x000	//PF_FOGWALL
-405,0xb7,    ,  0, 1,1000,enemy, 0x000	//PF_SPIDERWEB
+405,0xb7,    ,  0, 0,1000,enemy, 0x000	//PF_SPIDERWEB
 409,0xb2,    ,  0,-1,  -1,noone, 0x000	//WE_CALLBABY
 410,0xb2,    ,  0,-1,  -1,noone, 0x000	//WE_CALLPARENT
 428,0x86,    ,  0, 1, 100,enemy, 0x000	//SG_SUN_WARM

+ 13 - 8
src/map/skill.c

@@ -7162,8 +7162,9 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 
 	if (sg->interval == -1) {
 		switch (sg->unit_id) {
+			case UNT_SPIDERWEB: // The 'interval' value was set to -1 so that the unit wouldn't trigger in the next interval,
+				break;			// but FiberLock can trap multiple targets on the same cell. [Inkfish]
 			case UNT_ANKLESNARE: //These happen when a trap is splash-triggered by multiple targets on the same cell.
-			case UNT_SPIDERWEB:
 			case UNT_FIREPILLAR_ACTIVE:
 				return 0;
 			default:
@@ -7337,18 +7338,22 @@ int skill_unit_onplace_timer (struct skill_unit *src, struct block_list *bl, uns
 
 		case UNT_SPIDERWEB:
 		case UNT_ANKLESNARE:
-			if(sg->val2==0 && tsc){
+			if( ( sg->val2 == 0 || sg->unit_id == UNT_SPIDERWEB ) && tsc )
+			{
 				int sec = skill_get_time2(sg->skill_id,sg->skill_lv);
-				if (status_change_start(bl,type,10000,sg->skill_lv,sg->group_id,0,0,sec, 8))
+				if( status_change_start(bl,type,10000,sg->skill_lv,sg->group_id,0,0,sec, 8) )
 				{
-					const struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL;
-					if (td) sec = DIFF_TICK(td->tick, tick);
+					const struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL; 
+					if( td )
+						sec = DIFF_TICK(td->tick, tick);
 					map_moveblock(bl, src->bl.x, src->bl.y, tick);
 					clif_fixpos(bl);
-					sg->val2=bl->id;
-				} else
+					sg->val2 = bl->id;
+				}
+				else
 					sec = 3000; //Couldn't trap it?
-				if( sg->unit_id == UNT_ANKLESNARE ) clif_01ac(&src->bl); // mysterious packet
+				if( sg->unit_id == UNT_ANKLESNARE )
+					clif_01ac(&src->bl); // mysterious packet
 				sg->limit = DIFF_TICK(tick,sg->tick)+sec;
 				sg->interval = -1;
 				src->range = 0;