viewing paste Unknown #5539 | Diff

Posted on the
  1. # This patch file was generated by NetBeans IDE
  2. # Following Index: paths are relative to: /home/lighta/Documents/Myscript/RO/Servs/rathena
  3. # This patch can be applied using context Tools: Patch action on respective folder.
  4. # It uses platform neutral UTF-8 encoding and \n newlines.
  5. # Above lines and this line are ignored by the patching process.
  6. Index: CMakeLists.txt
  7. --- CMakeLists.txt Base (BASE)
  8. +++ CMakeLists.txt Locally Modified (Based On LOCAL)
  9. @@ -481,7 +481,6 @@
  10.  	"${CMAKE_CURRENT_SOURCE_DIR}/README.txt"
  11.  	"${CMAKE_CURRENT_SOURCE_DIR}/runserver-sql.bat"
  12.  	"${CMAKE_CURRENT_SOURCE_DIR}/serv.bat"
  13. -	"${CMAKE_CURRENT_SOURCE_DIR}/start"
  14.  	"${CMAKE_CURRENT_SOURCE_DIR}/zlib1.dll"
  15.  	)
  16.  set( RUNTIME_DIRECTORIES
  17. Index: conf/char_athena.conf
  18. --- conf/char_athena.conf Base (BASE)
  19. +++ conf/char_athena.conf Locally Modified (Based On LOCAL)
  20. @@ -165,7 +165,7 @@
  21.  // NOTE: Requires client 2011-03-09aragexeRE or newer.
  22.  // A window is opened before you can select your character and you will have to enter a pincode by using only your mouse.
  23.  // Default: yes
  24. -pincode_enabled: yes
  25. +pincode_enabled: no
  26.  
  27.  // How often does a user have to change his pincode?
  28.  // 0: never (default)
  29. Index: db/re/skill_db.txt
  30. --- db/re/skill_db.txt Base (BASE)
  31. +++ db/re/skill_db.txt Locally Modified (Based On LOCAL)
  32. @@ -1128,7 +1128,7 @@
  33.  8025,7,6,2,4:0:4:0:4,0,0,5,1,no,0,0,0,magic,0,	MH_XENO_SLASHER,Xeno Slasher
  34.  8026,5:5:7:7:9,6,16,0,0x1,0,5,1,no,0,0,0,magic,0,	MH_SILENT_BREEZE,Silent Breeze
  35.  8027,0,6,4,0,0x1,0,1,1,no,0,0,0,none,0,		MH_STYLE_CHANGE,Style Change
  36. -8028,1,8,1,0,0,0,5,1,no,0,0,0,weapon,0,		MH_SONIC_CRAW,Sonic Claw
  37. +8028,1,8,1,0,0,0,5,1,no,0,0x200,0,weapon,0,		MH_SONIC_CRAW,Sonic Claw
  38.  8029,1,6,4,0,0,0,5,1,no,0,0x200,0,weapon,0,	MH_SILVERVEIN_RUSH,Silver Bain Rush
  39.  8030,1,6,4,0,0,0,5,1,no,0,0x200,0,weapon,0,	MH_MIDNIGHT_FRENZY,Midnight Frenzy
  40.  8031,5:6:7:8:9,6,1,0,0,0,5,1,no,0,0,0,weapon,3,	MH_STAHL_HORN,Steel Horn
  41. @@ -1136,7 +1136,7 @@
  42.  8033,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,		MH_STEINWAND,Stone Wall
  43.  8034,9,6,1,6,0x2,1:1:1:1:2,5,1,no,0,0,0,magic,0,	MH_HEILIGE_STANGE,Holy Pole
  44.  8035,0,6,4,0,0x1,0,5,1,no,0,0,0,none,0,		MH_ANGRIFFS_MODUS,Attack Mode
  45. -8036,3:4:5:6:7,6,1,0,0,0,5,1,no,0,0,0,weapon,0,	MH_TINDER_BREAKER,Tinder Breaker
  46. +8036,3:4:5:6:7,6,1,0,0,0,5,1,no,0,0x200,0,weapon,0,	MH_TINDER_BREAKER,Tinder Breaker
  47.  8037,1,6,4,0,0,0,5,1,no,0,0x200,0,weapon,0,	MH_CBC,Continual Break Combo
  48.  8038,1,6,4,0,0,0,5,1,no,0,0x200,0,weapon,0,	MH_EQC,Eternal Quick Combo
  49.  8039,0,6,4,3,0x2,1:1:1:2:2,5,1,no,0,0,0,weapon,0,	MH_MAGMA_FLOW,Magma Flow
  50. Index: npc/re/tester.txt
  51. --- npc/re/tester.txt No Base Revision
  52. +++ npc/re/tester.txt Locally New
  53. @@ -0,0 +1,6 @@
  54. +new_1-1,61,100,3	script	Hotel Keeper#bra1	478,{
  55. +	OnNPCKillEvent:
  56. +	.count++;
  57. +	dispbottom "You have killed mobid :"+killedrid+" count="+.count;
  58. +	end;
  59. +}
  60. Index: src/map/atcommand.c
  61. --- src/map/atcommand.c Base (BASE)
  62. +++ src/map/atcommand.c Locally Modified (Based On LOCAL)
  63. @@ -4501,7 +4501,7 @@
  64.  	}
  65.  
  66.  	//Duration of INT_MAX to specify infinity.
  67. -	sc_start4(&pl_sd->bl,SC_JAILED,100,INT_MAX,m_index,x,y,1000);
  68. +	sc_start4(NULL,&pl_sd->bl,SC_JAILED,100,INT_MAX,m_index,x,y,1000);
  69.  	clif_displaymessage(pl_sd->fd, msg_txt(117)); // GM has send you in jails.
  70.  	clif_displaymessage(fd, msg_txt(118)); // Player warped in jails.
  71.  	return 0;
  72. @@ -4540,7 +4540,7 @@
  73.  	}
  74.  
  75.  	//Reset jail time to 1 sec.
  76. -	sc_start(&pl_sd->bl,SC_JAILED,100,1,1000);
  77. +	sc_start(&pl_sd->bl,&pl_sd->bl,SC_JAILED,100,1,1000);
  78.  	clif_displaymessage(pl_sd->fd, msg_txt(120)); // A GM has discharged you from jail.
  79.  	clif_displaymessage(fd, msg_txt(121)); // Player unjailed.
  80.  	return 0;
  81. @@ -4653,7 +4653,7 @@
  82.  			break;
  83.  	}
  84.  
  85. -	sc_start4(&pl_sd->bl,SC_JAILED,100,jailtime,m_index,x,y,jailtime?60000:1000); //jailtime = 0: Time was reset to 0. Wait 1 second to warp player out (since it's done in status_change_timer).
  86. +	sc_start4(NULL,&pl_sd->bl,SC_JAILED,100,jailtime,m_index,x,y,jailtime?60000:1000); //jailtime = 0: Time was reset to 0. Wait 1 second to warp player out (since it's done in status_change_timer).
  87.  	return 0;
  88.  }
  89.  
  90. @@ -5604,7 +5604,7 @@
  91.  	sd->state.autotrade = 1;
  92.  	if( battle_config.at_timeout ) {
  93.  		int timeout = atoi(message);
  94. -		status_change_start(&sd->bl, SC_AUTOTRADE, 10000, 0, 0, 0, 0, ((timeout > 0) ? min(timeout,battle_config.at_timeout) : battle_config.at_timeout) * 60000, 0);
  95. +		status_change_start(NULL,&sd->bl, SC_AUTOTRADE, 10000, 0, 0, 0, 0, ((timeout > 0) ? min(timeout,battle_config.at_timeout) : battle_config.at_timeout) * 60000, 0);
  96.  	}
  97.  	clif_authfail_fd(sd->fd, 15);
  98.  
  99. @@ -6332,7 +6332,7 @@
  100.  	md->deletetimer=add_timer(tick+(duration*60000),mob_timer_delete,md->bl.id,0);
  101.  	clif_specialeffect(&md->bl,344,AREA);
  102.  	mob_spawn(md);
  103. -	sc_start4(&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
  104. +	sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
  105.  	clif_skill_poseffect(&sd->bl,AM_CALLHOMUN,1,md->bl.x,md->bl.y,tick);
  106.  	clif_displaymessage(fd, msg_txt(39));	// All monster summoned!
  107.  
  108. @@ -6516,7 +6516,7 @@
  109.  
  110.  	if( pl_sd->status.manner < manner ) {
  111.  		pl_sd->status.manner -= manner;
  112. -		sc_start(&pl_sd->bl,SC_NOCHAT,100,0,0);
  113. +		sc_start(&pl_sd->bl,&pl_sd->bl,SC_NOCHAT,100,0,0);
  114.  	} else {
  115.  		pl_sd->status.manner = 0;
  116.  		status_change_end(&pl_sd->bl, SC_NOCHAT, INVALID_TIMER);
  117. @@ -7326,7 +7326,7 @@
  118.  	if (id != bl->id && !pc_get_group_level(pl_sd)) {
  119.  		pl_sd->status.manner -= time;
  120.  		if (pl_sd->status.manner < 0)
  121. -			sc_start(&pl_sd->bl,SC_NOCHAT,100,0,0);
  122. +			sc_start(&pl_sd->bl,&pl_sd->bl,SC_NOCHAT,100,0,0);
  123.  		else
  124.  			status_change_end(&pl_sd->bl, SC_NOCHAT, INVALID_TIMER);
  125.  	}
  126. Index: src/map/battle.c
  127. --- src/map/battle.c Base (BASE)
  128. +++ src/map/battle.c Locally Modified (Based On LOCAL)
  129. @@ -837,7 +837,7 @@
  130.  		{
  131.  			clif_skill_nodamage(bl,src,GC_WEAPONBLOCKING,1,1);
  132.  			d->dmg_lv = ATK_BLOCK;
  133. -			sc_start2(bl,SC_COMBO,100,GC_WEAPONBLOCKING,src->id,2000);
  134. +			sc_start2(src,bl,SC_COMBO,100,GC_WEAPONBLOCKING,src->id,2000);
  135.  			return 0;
  136.  		}
  137.  		if( (sce=sc->data[SC_AUTOGUARD]) && flag&BF_WEAPON && !(skill_get_nk(skill_id)&NK_NO_CARDFIX_ATK) && rnd()%100 < sce->val2 )
  138. @@ -862,7 +862,7 @@
  139.  			clif_skill_nodamage(bl, bl, RK_MILLENNIUMSHIELD, 1, 1);
  140.  			sce->val3 -= damage; // absorb damage
  141.  			d->dmg_lv = ATK_BLOCK;
  142. -			sc_start(bl,SC_STUN,15,0,skill_get_time2(RK_MILLENNIUMSHIELD,sce->val1)); // There is a chance to be stuned when one shield is broken.
  143. +			sc_start(src,bl,SC_STUN,15,0,skill_get_time2(RK_MILLENNIUMSHIELD,sce->val1)); // There is a chance to be stuned when one shield is broken.
  144.  			if( sce->val3 <= 0 ) { // Shield Down
  145.  				sce->val2--;
  146.  				if( sce->val2 > 0 ) {
  147. @@ -888,7 +888,7 @@
  148.  			if (sd && pc_issit(sd)) pc_setstand(sd); //Stand it to dodge.
  149.  			clif_skill_nodamage(bl,bl,TK_DODGE,1,1);
  150.  			if (!sc->data[SC_COMBO])
  151. -				sc_start4(bl, SC_COMBO, 100, TK_JUMPKICK, src->id, 1, 0, 2000);
  152. +				sc_start4(src,bl, SC_COMBO, 100, TK_JUMPKICK, src->id, 1, 0, 2000);
  153.  			return 0;
  154.  		}
  155.  
  156. @@ -1070,12 +1070,12 @@
  157.  			if( src->type == BL_PC ) {
  158.  				TBL_PC *ssd = BL_CAST(BL_PC, src);
  159.  				if (ssd && ssd->status.weapon != W_BOW)
  160. -					skill_break_equip(src, EQP_WEAPON, 3000, BCT_SELF);
  161. +					skill_break_equip(src,src, EQP_WEAPON, 3000, BCT_SELF);
  162.  			} else
  163. -				skill_break_equip(src, EQP_WEAPON, 3000, BCT_SELF);
  164. +				skill_break_equip(src,src, EQP_WEAPON, 3000, BCT_SELF);
  165.  			// 30% chance to reduce monster's ATK by 25% for 10 seconds.
  166.  			if( src->type == BL_MOB )
  167. -				sc_start(src, SC_STRIPWEAPON, 30, 0, skill_get_time2(RK_STONEHARDSKIN, sce->val1));
  168. +				sc_start(src,src, SC_STRIPWEAPON, 30, 0, skill_get_time2(RK_STONEHARDSKIN, sce->val1));
  169.  			if( sce->val2 <= 0 )
  170.  				status_change_end(bl, SC_STONEHARDSKIN, INVALID_TIMER);
  171.  		}
  172. @@ -1197,7 +1197,7 @@
  173.  					}
  174.  		}
  175.  		if( sc->data[SC_POISONINGWEAPON] && skill_id != GC_VENOMPRESSURE && (flag&BF_WEAPON) && damage > 0 && rnd()%100 < sc->data[SC_POISONINGWEAPON]->val3 )
  176. -			sc_start(bl,sc->data[SC_POISONINGWEAPON]->val2,100,sc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON, 1));
  177. +			sc_start(src,bl,sc->data[SC_POISONINGWEAPON]->val2,100,sc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON, 1));
  178.  		if( sc->data[SC__DEADLYINFECT] && damage > 0 && rnd()%100 < 65 + 5 * sc->data[SC__DEADLYINFECT]->val1 )
  179.  			status_change_spread(src, bl);
  180.                  if (sc->data[SC_STYLE_CHANGE] && rnd()%2) {
  181. @@ -4828,11 +4828,11 @@
  182.  		uint16 skill_lv = tsc->data[SC_BLADESTOP_WAIT]->val1;
  183.  		int duration = skill_get_time2(MO_BLADESTOP,skill_lv);
  184.  		status_change_end(target, SC_BLADESTOP_WAIT, INVALID_TIMER);
  185. -		if(sc_start4(src, SC_BLADESTOP, 100, sd?pc_checkskill(sd, MO_BLADESTOP):5, 0, 0, target->id, duration))
  186. +		if(sc_start4(src,src, SC_BLADESTOP, 100, sd?pc_checkskill(sd, MO_BLADESTOP):5, 0, 0, target->id, duration))
  187.  	  	{	//Target locked.
  188.  			clif_damage(src, target, tick, sstatus->amotion, 1, 0, 1, 0, 0); //Display MISS.
  189.  			clif_bladestop(target, src->id, 1);
  190. -			sc_start4(target, SC_BLADESTOP, 100, skill_lv, 0, 0, src->id, duration);
  191. +			sc_start4(src,target, SC_BLADESTOP, 100, skill_lv, 0, 0, src->id, duration);
  192.  			return ATK_BLOCK;
  193.  		}
  194.  	}
  195. Index: src/map/chrif.c
  196. --- src/map/chrif.c Base (BASE)
  197. +++ src/map/chrif.c Locally Modified (Based On LOCAL)
  198. @@ -1230,7 +1230,7 @@
  199.  
  200.  	for (i = 0; i < count; i++) {
  201.  		data = (struct status_change_data*)RFIFOP(fd,14 + i*sizeof(struct status_change_data));
  202. -		status_change_start(&sd->bl, (sc_type)data->type, 10000, data->val1, data->val2, data->val3, data->val4, data->tick, 15);
  203. +		status_change_start(NULL,&sd->bl, (sc_type)data->type, 10000, data->val1, data->val2, data->val3, data->val4, data->tick, 15);
  204.  	}
  205.  #endif
  206.  
  207. Index: src/map/clif.c
  208. --- src/map/clif.c Base (BASE)
  209. +++ src/map/clif.c Locally Modified (Based On LOCAL)
  210. @@ -9275,14 +9275,14 @@
  211.  			clif_status_load(&sd->bl, SI_WUGRIDER, 1);
  212.  
  213.  		if(sd->status.manner < 0)
  214. -			sc_start(&sd->bl,SC_NOCHAT,100,0,0);
  215. +			sc_start(&sd->bl,&sd->bl,SC_NOCHAT,100,0,0);
  216.  
  217.  		//Auron reported that This skill only triggers when you logon on the map o.O [Skotlex]
  218.  		if ((lv = pc_checkskill(sd,SG_KNOWLEDGE)) > 0) {
  219.  			if(sd->bl.m == sd->feel_map[0].m
  220.  				|| sd->bl.m == sd->feel_map[1].m
  221.  				|| sd->bl.m == sd->feel_map[2].m)
  222. -				sc_start(&sd->bl, SC_KNOWLEDGE, 100, lv, skill_get_time(SG_KNOWLEDGE, lv));
  223. +				sc_start(&sd->bl,&sd->bl, SC_KNOWLEDGE, 100, lv, skill_get_time(SG_KNOWLEDGE, lv));
  224.  		}
  225.  
  226.  		if(sd->pd && sd->pd->pet.intimate > 900)
  227. @@ -12829,7 +12829,7 @@
  228.  
  229.  			if( percent && ( percent%100 ) == 0 )
  230.  			{// 10.0%, 20.0%, ..., 90.0%
  231. -				sc_start(&sd->bl, status_skill2sc(MO_EXPLOSIONSPIRITS), 100, 17, skill_get_time(MO_EXPLOSIONSPIRITS, 5)); //Lv17-> +50 critical (noted by Poki) [Skotlex]
  232. +				sc_start(&sd->bl,&sd->bl, status_skill2sc(MO_EXPLOSIONSPIRITS), 100, 17, skill_get_time(MO_EXPLOSIONSPIRITS, 5)); //Lv17-> +50 critical (noted by Poki) [Skotlex]
  233.  				clif_skill_nodamage(&sd->bl, &sd->bl, MO_EXPLOSIONSPIRITS, 5, 1);  // prayer always shows successful Lv5 cast and disregards noskill restrictions
  234.  			}
  235.  		}
  236. Index: src/map/guild.c
  237. --- src/map/guild.c Base (BASE)
  238. +++ src/map/guild.c Locally Modified (Based On LOCAL)
  239. @@ -1307,7 +1307,7 @@
  240.  	}
  241.  	group = skill_unitsetting(&sd->bl,skill_id,skill_lv,sd->bl.x,sd->bl.y,0);
  242.  	if( group ) {
  243. -		sc_start4(&sd->bl,type,100,(battle_config.guild_aura&16)?0:skill_lv,0,0,group->group_id,600000);//duration doesn't matter these status never end with val4
  244. +		sc_start4(NULL,&sd->bl,type,100,(battle_config.guild_aura&16)?0:skill_lv,0,0,group->group_id,600000);//duration doesn't matter these status never end with val4
  245.  	}
  246.  	return;
  247.  }
  248. Index: src/map/homunculus.c
  249. --- src/map/homunculus.c Base (BASE)
  250. +++ src/map/homunculus.c Locally Modified (Based On LOCAL)
  251. @@ -783,7 +783,7 @@
  252.  	map_addiddb(&hd->bl);
  253.  	status_calc_homunculus(hd,1);
  254.  	if(hom->class_ == 6052) //eleanor
  255. -	    sc_start(&hd->bl, SC_STYLE_CHANGE, 100, MH_MD_FIGHTING, -1);
  256. +	    sc_start(&hd->bl,&hd->bl, SC_STYLE_CHANGE, 100, MH_MD_FIGHTING, -1);
  257.  
  258.  	hd->hungry_timer = INVALID_TIMER;
  259.  	return 0;
  260. Index: src/map/map.h
  261. --- src/map/map.h Base (BASE)
  262. +++ src/map/map.h Locally Modified (Based On LOCAL)
  263. @@ -432,7 +432,8 @@
  264.  	LOOK_SHOES,
  265.  	LOOK_BODY,			//Purpose Unknown. Doesen't appear to do anything.
  266.  	LOOK_RESET_COSTUMES,//Makes all headgear sprites on player vanish when activated.
  267. -	LOOK_ROBE
  268. +	LOOK_ROBE,
  269. +	LOOK_FLOOR
  270.  };
  271.  
  272.  // used by map_setcell()
  273. Index: src/map/mercenary.c
  274. --- src/map/mercenary.c Base (BASE)
  275. +++ src/map/mercenary.c Locally Modified (Based On LOCAL)
  276. @@ -363,7 +363,7 @@
  277.  	const enum sc_type scs[] = { SC_MERC_FLEEUP, SC_MERC_ATKUP, SC_MERC_HPUP, SC_MERC_SPUP, SC_MERC_HITUP };
  278.  	int index = rnd() % ARRAYLENGTH(scs);
  279.  
  280. -    sc_start(&md->bl, scs[index], 100, rnd() % 5, 600000);
  281. +	sc_start(&md->bl,&md->bl, scs[index], 100, rnd() % 5, 600000);
  282.  	return 0;
  283.  }
  284.  
  285. Index: src/map/mob.c
  286. --- src/map/mob.c Base (BASE)
  287. +++ src/map/mob.c Locally Modified (Based On LOCAL)
  288. @@ -415,7 +415,7 @@
  289.  		return true;
  290.  	} while(0);
  291.  
  292. -	status_change_start(target, SC_KSPROTECTED, 10000, sd->bl.id, sd->state.noks, sd->status.party_id, sd->status.guild_id, battle_config.ksprotection, 0);
  293. +	status_change_start(src, target, SC_KSPROTECTED, 10000, sd->bl.id, sd->state.noks, sd->status.party_id, sd->status.guild_id, battle_config.ksprotection, 0);
  294.  
  295.  	return false;
  296.  }
  297. @@ -505,7 +505,7 @@
  298.  		if (class_ < 0 && battle_config.dead_branch_active)
  299.  			//Behold Aegis's masterful decisions yet again...
  300.  			//"I understand the "Aggressive" part, but the "Can Move" and "Can Attack" is just stupid" - Poki#3
  301. -			sc_start4(&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE|MD_CANATTACK|MD_CANMOVE|MD_ANGRY, 0, 60000);
  302. +			sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE|MD_CANATTACK|MD_CANMOVE|MD_ANGRY, 0, 60000);
  303.  	}
  304.  
  305.  	return (md) ? md->bl.id : 0; // id of last spawned mob
  306. @@ -2932,17 +2932,17 @@
  307.  			switch (battle_config.slaves_inherit_mode) {
  308.  			case 1: //Always aggressive
  309.  				if (!(md->status.mode&MD_AGGRESSIVE))
  310. -					sc_start4(&md->bl, SC_MODECHANGE, 100,1,0, MD_AGGRESSIVE, 0, 0);
  311. +					sc_start4(NULL,&md->bl, SC_MODECHANGE, 100,1,0, MD_AGGRESSIVE, 0, 0);
  312.  				break;
  313.  			case 2: //Always passive
  314.  				if (md->status.mode&MD_AGGRESSIVE)
  315. -					sc_start4(&md->bl, SC_MODECHANGE, 100,1,0, 0, MD_AGGRESSIVE, 0);
  316. +					sc_start4(NULL,&md->bl, SC_MODECHANGE, 100,1,0, 0, MD_AGGRESSIVE, 0);
  317.  				break;
  318.  			default: //Copy master.
  319.  				if (md2->status.mode&MD_AGGRESSIVE)
  320. -					sc_start4(&md->bl, SC_MODECHANGE, 100,1,0, MD_AGGRESSIVE, 0, 0);
  321. +					sc_start4(NULL,&md->bl, SC_MODECHANGE, 100,1,0, MD_AGGRESSIVE, 0, 0);
  322.  				else
  323. -					sc_start4(&md->bl, SC_MODECHANGE, 100,1,0, 0, MD_AGGRESSIVE, 0);
  324. +					sc_start4(NULL,&md->bl, SC_MODECHANGE, 100,1,0, 0, MD_AGGRESSIVE, 0);
  325.  				break;
  326.  			}
  327.  		}
  328. Index: src/map/party.c
  329. --- src/map/party.c Base (BASE)
  330. +++ src/map/party.c Locally Modified (Based On LOCAL)
  331. @@ -832,7 +832,7 @@
  332.  			case TK_COUNTER: //Increase Triple Attack rate of Monks.
  333.  				if((p_sd->class_&MAPID_UPPERMASK) == MAPID_MONK
  334.  					&& pc_checkskill(p_sd,MO_TRIPLEATTACK)) {
  335. -					sc_start4(&p_sd->bl,SC_SKILLRATE_UP,100,MO_TRIPLEATTACK,
  336. +					sc_start4(&p_sd->bl,&p_sd->bl,SC_SKILLRATE_UP,100,MO_TRIPLEATTACK,
  337.  						50+50*skill_lv, //+100/150/200% rate
  338.  						0,0,skill_get_time(SG_FRIEND, 1));
  339.  				}
  340. @@ -841,7 +841,7 @@
  341.  				if((p_sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR
  342.  					&& sd->sc.data[SC_READYCOUNTER]
  343.  					&& pc_checkskill(p_sd,SG_FRIEND)) {
  344. -					sc_start4(&p_sd->bl,SC_SKILLRATE_UP,100,TK_COUNTER,
  345. +					sc_start4(&p_sd->bl,&p_sd->bl,SC_SKILLRATE_UP,100,TK_COUNTER,
  346.  						50+50*pc_checkskill(p_sd,SG_FRIEND), //+100/150/200% rate
  347.  						0,0,skill_get_time(SG_FRIEND, 1));
  348.  				}
  349. Index: src/map/pc.c
  350. --- src/map/pc.c Base (BASE)
  351. +++ src/map/pc.c Locally Modified (Based On LOCAL)
  352. @@ -1634,9 +1634,9 @@
  353.  
  354.  	// start new status change
  355.  	if( new_overweight == 1 )
  356. -		sc_start(&sd->bl, SC_WEIGHT50, 100, 0, 0);
  357. +		sc_start(&sd->bl,&sd->bl, SC_WEIGHT50, 100, 0, 0);
  358.  	else if( new_overweight == 2 )
  359. -		sc_start(&sd->bl, SC_WEIGHT90, 100, 0, 0);
  360. +		sc_start(&sd->bl,&sd->bl, SC_WEIGHT90, 100, 0, 0);
  361.  
  362.  	// update overweight status
  363.  	sd->regen.state.overweight = new_overweight;
  364. @@ -5617,16 +5617,16 @@
  365.  	status_percent_heal(&sd->bl,100,100);
  366.  
  367.  	if((sd->class_&MAPID_UPPERMASK) == MAPID_SUPER_NOVICE) {
  368. -		sc_start(&sd->bl,status_skill2sc(PR_KYRIE),100,1,skill_get_time(PR_KYRIE,1));
  369. -		sc_start(&sd->bl,status_skill2sc(PR_IMPOSITIO),100,1,skill_get_time(PR_IMPOSITIO,1));
  370. -		sc_start(&sd->bl,status_skill2sc(PR_MAGNIFICAT),100,1,skill_get_time(PR_MAGNIFICAT,1));
  371. -		sc_start(&sd->bl,status_skill2sc(PR_GLORIA),100,1,skill_get_time(PR_GLORIA,1));
  372. -		sc_start(&sd->bl,status_skill2sc(PR_SUFFRAGIUM),100,1,skill_get_time(PR_SUFFRAGIUM,1));
  373. +		sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_KYRIE),100,1,skill_get_time(PR_KYRIE,1));
  374. +		sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_IMPOSITIO),100,1,skill_get_time(PR_IMPOSITIO,1));
  375. +		sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_MAGNIFICAT),100,1,skill_get_time(PR_MAGNIFICAT,1));
  376. +		sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_GLORIA),100,1,skill_get_time(PR_GLORIA,1));
  377. +		sc_start(&sd->bl,&sd->bl,status_skill2sc(PR_SUFFRAGIUM),100,1,skill_get_time(PR_SUFFRAGIUM,1));
  378.  		if (sd->state.snovice_dead_flag)
  379.  			sd->state.snovice_dead_flag = 0; //Reenable steelbody resurrection on dead.
  380.  	} else if( (sd->class_&MAPID_BASEMASK) == MAPID_TAEKWON ) {
  381. -		sc_start(&sd->bl,status_skill2sc(AL_INCAGI),100,10,600000);
  382. -		sc_start(&sd->bl,status_skill2sc(AL_BLESSING),100,10,600000);
  383. +		sc_start(&sd->bl,&sd->bl,status_skill2sc(AL_INCAGI),100,10,600000);
  384. +		sc_start(&sd->bl,&sd->bl,status_skill2sc(AL_BLESSING),100,10,600000);
  385.  	}
  386.  	clif_misceffect(&sd->bl,0);
  387.  	npc_script_event(sd, NPCE_BASELVUP); //LORDALFA - LVLUPEVENT
  388. @@ -6658,7 +6658,7 @@
  389.  		if (battle_config.pk_mode&2) {
  390.  			ssd->status.manner -= 5;
  391.  			if(ssd->status.manner < 0)
  392. -				sc_start(src,SC_NOCHAT,100,0,0);
  393. +				sc_start(&sd->bl,src,SC_NOCHAT,100,0,0);
  394.  #if 0
  395.  			// PK/Karma system code (not enabled yet) [celest]
  396.  			// originally from Kade Online, so i don't know if any of these is correct ^^;
  397. @@ -6711,7 +6711,7 @@
  398.  			clif_resurrection(&sd->bl, 1);
  399.  			if(battle_config.pc_invincible_time)
  400.  				pc_setinvincibletimer(sd, battle_config.pc_invincible_time);
  401. -			sc_start(&sd->bl,status_skill2sc(MO_STEELBODY),100,1,skill_get_time(MO_STEELBODY,1));
  402. +			sc_start(&sd->bl,&sd->bl,status_skill2sc(MO_STEELBODY),100,1,skill_get_time(MO_STEELBODY,1));
  403.  			if(map_flag_gvg(sd->bl.m))
  404.  				pc_respawn_timer(INVALID_TIMER, gettick(), sd->bl.id, 0);
  405.  			return 0;
  406. @@ -7726,7 +7726,7 @@
  407.  			if( !sd->sc.data[SC_PUSH_CART] ) /* first time, so fill cart data */
  408.  				clif_cartlist(sd);
  409.  			clif_updatestatus(sd, SP_CARTINFO);
  410. -			sc_start(&sd->bl, SC_PUSH_CART, 100, type, 0);
  411. +			sc_start(&sd->bl,&sd->bl, SC_PUSH_CART, 100, type, 0);
  412.  			clif_status_load_notick(&sd->bl, SI_ON_PUSH_CART,   2 , type, 0, 0);
  413.  			if( sd->sc.data[SC_PUSH_CART] )/* forcefully update */
  414.  				sd->sc.data[SC_PUSH_CART]->val1 = type;
  415. @@ -9207,9 +9207,9 @@
  416.  
  417.  	heat = max(0,heat); // Avoid negative HEAT
  418.  	if( heat >= limit[skill] )
  419. -		sc_start(&sd->bl,SC_OVERHEAT,100,0,1000);
  420. +		sc_start(&sd->bl,&sd->bl,SC_OVERHEAT,100,0,1000);
  421.  	else
  422. -		sc_start(&sd->bl,SC_OVERHEAT_LIMITPOINT,100,heat,30000);
  423. +		sc_start(&sd->bl,&sd->bl,SC_OVERHEAT_LIMITPOINT,100,heat,30000);
  424.  
  425.  	return;
  426.  }
  427. Index: src/map/script.c
  428. --- src/map/script.c Base (BASE)
  429. +++ src/map/script.c Locally Modified (Based On LOCAL)
  430. @@ -9877,7 +9877,7 @@
  431.  	}
  432.  
  433.  	if( bl )
  434. -		status_change_start(bl, type, 10000, val1, 0, 0, val4, tick, 2);
  435. +		status_change_start(NULL, bl, type, 10000, val1, 0, 0, val4, tick, 2);
  436.  
  437.  	return 0;
  438.  }
  439. @@ -9916,7 +9916,7 @@
  440.  	}
  441.  
  442.  	if( bl )
  443. -		status_change_start(bl, type, rate, val1, 0, 0, val4, tick, 2);
  444. +		status_change_start(NULL, bl, type, rate, val1, 0, 0, val4, tick, 2);
  445.  
  446.  	return 0;
  447.  }
  448. @@ -9957,7 +9957,7 @@
  449.  	}
  450.  
  451.  	if( bl )
  452. -		status_change_start(bl, type, 10000, val1, val2, val3, val4, tick, 2);
  453. +		status_change_start(NULL, bl, type, 10000, val1, val2, val3, val4, tick, 2);
  454.  
  455.  	return 0;
  456.  }
  457. @@ -10029,7 +10029,7 @@
  458.  		bl = map_id2bl(st->rid);
  459.  
  460.  	if (bl)
  461. -		rate = status_get_sc_def(bl, (sc_type)type, 10000, 10000, 0);
  462. +		rate = status_get_sc_def(NULL,bl, (sc_type)type, 10000, 10000, 0);
  463.  
  464.  	script_pushint(st,rate);
  465.  	return 0;
  466. @@ -13218,7 +13218,7 @@
  467.  		md->deletetimer = add_timer(tick+(timeout>0?timeout*1000:60000),mob_timer_delete,md->bl.id,0);
  468.  		mob_spawn (md); //Now it is ready for spawning.
  469.  		clif_specialeffect(&md->bl,344,AREA);
  470. -		sc_start4(&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
  471. +		sc_start4(NULL,&md->bl, SC_MODECHANGE, 100, 1, 0, MD_AGGRESSIVE, 0, 60000);
  472.  	}
  473.  	return 0;
  474.  }
  475. @@ -15768,7 +15768,7 @@
  476.  	tick = script_getnum(st,3);
  477.  	val1 = script_getnum(st,4);
  478.  
  479. -	status_change_start(&sd->md->bl, type, 10000, val1, 0, 0, 0, tick, 2);
  480. +	status_change_start(NULL, &sd->md->bl, type, 10000, val1, 0, 0, 0, tick, 2);
  481.  	return 0;
  482.  }
  483.  
  484. Index: src/map/skill.c
  485. --- src/map/skill.c Base (BASE)
  486. +++ src/map/skill.c Locally Modified (Based On LOCAL)
  487. @@ -854,10 +854,10 @@
  488.  				skill = skill_get_time2(status_sc2skill(type),7);
  489.  
  490.  				if (sd->addeff[i].flag&ATF_TARGET)
  491. -					status_change_start(bl,type,rate,7,0,0,0,skill,0);
  492. +					status_change_start(src, bl,type,rate,7,0,0,0,skill,0);
  493.  
  494.  				if (sd->addeff[i].flag&ATF_SELF)
  495. -					status_change_start(src,type,rate,7,0,0,0,skill,0);
  496. +					status_change_start(NULL, src,type,rate,7,0,0,0,skill,0);
  497.  			}
  498.  		}
  499.  
  500. @@ -873,9 +873,9 @@
  501.  				skill = skill_get_time2(status_sc2skill(type),7);
  502.  
  503.  				if( sd->addeff3[i].target&ATF_TARGET )
  504. -					status_change_start(bl,type,sd->addeff3[i].rate,7,0,0,0,skill,0);
  505. +					status_change_start(src, bl,type,sd->addeff3[i].rate,7,0,0,0,skill,0);
  506.  				if( sd->addeff3[i].target&ATF_SELF )
  507. -					status_change_start(src,type,sd->addeff3[i].rate,7,0,0,0,skill,0);
  508. +					status_change_start(src, src,type,sd->addeff3[i].rate,7,0,0,0,skill,0);
  509.  			}
  510.  		}
  511.  	}
  512. @@ -911,15 +911,15 @@
  513.  			// Chance to trigger Taekwon kicks [Dralnu]
  514.  			if(sc && !sc->data[SC_COMBO]) {
  515.  				if(sc->data[SC_READYSTORM] &&
  516. -					sc_start(src,SC_COMBO, 15, TK_STORMKICK,
  517. +					sc_start(src,src,SC_COMBO, 15, TK_STORMKICK,
  518.  						(2000 - 4*sstatus->agi - 2*sstatus->dex)))
  519.  					; //Stance triggered
  520.  				else if(sc->data[SC_READYDOWN] &&
  521. -					sc_start(src,SC_COMBO, 15, TK_DOWNKICK,
  522. +					sc_start(src,src,SC_COMBO, 15, TK_DOWNKICK,
  523.  						(2000 - 4*sstatus->agi - 2*sstatus->dex)))
  524.  					; //Stance triggered
  525.  				else if(sc->data[SC_READYTURN] &&
  526. -					sc_start(src,SC_COMBO, 15, TK_TURNKICK,
  527. +					sc_start(src,src,SC_COMBO, 15, TK_TURNKICK,
  528.  						(2000 - 4*sstatus->agi - 2*sstatus->dex)))
  529.  					; //Stance triggered
  530.  				else if (sc->data[SC_READYCOUNTER]) { //additional chance from SG_FRIEND [Komurka]
  531. @@ -928,7 +928,7 @@
  532.  						rate += rate*sc->data[SC_SKILLRATE_UP]->val2/100;
  533.  						status_change_end(src, SC_SKILLRATE_UP, INVALID_TIMER);
  534.  					}
  535. -					sc_start2(src, SC_COMBO, rate, TK_COUNTER, bl->id,
  536. +					sc_start2(src,src, SC_COMBO, rate, TK_COUNTER, bl->id,
  537.  						(2000 - 4*sstatus->agi - 2*sstatus->dex));
  538.  				}
  539.  			}
  540. @@ -940,11 +940,11 @@
  541.  			struct status_change_entry *sce;
  542.  			// Enchant Poison gives a chance to poison attacked enemies
  543.  			if((sce=sc->data[SC_ENCPOISON])) //Don't use sc_start since chance comes in 1/10000 rate.
  544. -				status_change_start(bl,SC_POISON,sce->val2, sce->val1,src->id,0,0,
  545. +				status_change_start(src, bl,SC_POISON,sce->val2, sce->val1,src->id,0,0,
  546.  					skill_get_time2(AS_ENCHANTPOISON,sce->val1),0);
  547.  			// Enchant Deadly Poison gives a chance to deadly poison attacked enemies
  548.  			if((sce=sc->data[SC_EDP]))
  549. -				sc_start4(bl,SC_DPOISON,sce->val2, sce->val1,src->id,0,0,
  550. +				sc_start4(src, bl,SC_DPOISON,sce->val2, sce->val1,src->id,0,0,
  551.  					skill_get_time2(ASC_EDP,sce->val1));
  552.  		}
  553.  	}
  554. @@ -953,13 +953,13 @@
  555.  	case SM_BASH:
  556.  		if( sd && skill_lv > 5 && pc_checkskill(sd,SM_FATALBLOW)>0 ){
  557.  			//TODO: How much % per base level it actually is?
  558. -			sc_start(bl,SC_STUN,(5*(skill_lv-5)+(int)sd->status.base_level/10),
  559. +			sc_start(src,bl,SC_STUN,(5*(skill_lv-5)+(int)sd->status.base_level/10),
  560.  				skill_lv,skill_get_time2(SM_FATALBLOW,skill_lv));
  561.  		}
  562.  		break;
  563.  
  564.  	case MER_CRASH:
  565. -		sc_start(bl,SC_STUN,(6*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  566. +		sc_start(src,bl,SC_STUN,(6*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  567.  		break;
  568.  
  569.  	case AS_VENOMKNIFE:
  570. @@ -967,14 +967,14 @@
  571.  			skill_lv = pc_checkskill(sd, TF_POISON);
  572.  	case TF_POISON:
  573.  	case AS_SPLASHER:
  574. -		if(!sc_start2(bl,SC_POISON,(4*skill_lv+10),skill_lv,src->id,skill_get_time2(skill_id,skill_lv))
  575. +		if(!sc_start2(src,bl,SC_POISON,(4*skill_lv+10),skill_lv,src->id,skill_get_time2(skill_id,skill_lv))
  576.  			&&	sd && skill_id==TF_POISON
  577.  		)
  578.  			clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  579.  		break;
  580.  
  581.  	case AS_SONICBLOW:
  582. -		sc_start(bl,SC_STUN,(2*skill_lv+10),skill_lv,skill_get_time2(skill_id,skill_lv));
  583. +		sc_start(src,bl,SC_STUN,(2*skill_lv+10),skill_lv,skill_get_time2(skill_id,skill_lv));
  584.  		break;
  585.  
  586.  	case WZ_FIREPILLAR:
  587. @@ -985,12 +985,12 @@
  588.  #ifndef RENEWAL
  589.  	case WZ_FROSTNOVA:
  590.  #endif
  591. -		sc_start(bl,SC_FREEZE,skill_lv*3+35,skill_lv,skill_get_time2(skill_id,skill_lv));
  592. +		sc_start(src,bl,SC_FREEZE,skill_lv*3+35,skill_lv,skill_get_time2(skill_id,skill_lv));
  593.  		break;
  594.  
  595.  #ifdef RENEWAL
  596.  	case WZ_FROSTNOVA:
  597. -		sc_start(bl,SC_FREEZE,skill_lv*5+33,skill_lv,skill_get_time2(skill_id,skill_lv));
  598. +		sc_start(src,bl,SC_FREEZE,skill_lv*5+33,skill_lv,skill_get_time2(skill_id,skill_lv));
  599.  		break;
  600.  #endif
  601.  
  602. @@ -999,11 +999,11 @@
  603.  	 * Storm Gust counter was dropped in renewal
  604.  	 **/
  605.  	#ifdef RENEWAL
  606. -		sc_start(bl,SC_FREEZE,65-(5*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  607. +		sc_start(src,bl,SC_FREEZE,65-(5*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  608.  	#else
  609.  		 //Tharis pointed out that this is normal freeze chance with a base of 300%
  610.  		if(tsc->sg_counter >= 3 &&
  611. -			sc_start(bl,SC_FREEZE,300,skill_lv,skill_get_time2(skill_id,skill_lv)))
  612. +			sc_start(src,bl,SC_FREEZE,300,skill_lv,skill_get_time2(skill_id,skill_lv)))
  613.  			tsc->sg_counter = 0;
  614.  		/**
  615.  		 * being it only resets on success it'd keep stacking and eventually overflowing on mvps, so we reset at a high value
  616. @@ -1014,25 +1014,25 @@
  617.  		break;
  618.  
  619.  	case WZ_METEOR:
  620. -		sc_start(bl,SC_STUN,3*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  621. +		sc_start(src,bl,SC_STUN,3*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  622.  		break;
  623.  
  624.  	case WZ_VERMILION:
  625. -		sc_start(bl,SC_BLIND,4*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  626. +		sc_start(src,bl,SC_BLIND,4*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  627.  		break;
  628.  
  629.  	case HT_FREEZINGTRAP:
  630.  	case MA_FREEZINGTRAP:
  631. -		sc_start(bl,SC_FREEZE,(3*skill_lv+35),skill_lv,skill_get_time2(skill_id,skill_lv));
  632. +		sc_start(src,bl,SC_FREEZE,(3*skill_lv+35),skill_lv,skill_get_time2(skill_id,skill_lv));
  633.  		break;
  634.  
  635.  	case HT_FLASHER:
  636. -		sc_start(bl,SC_BLIND,(10*skill_lv+30),skill_lv,skill_get_time2(skill_id,skill_lv));
  637. +		sc_start(src,bl,SC_BLIND,(10*skill_lv+30),skill_lv,skill_get_time2(skill_id,skill_lv));
  638.  		break;
  639.  
  640.  	case HT_LANDMINE:
  641.  	case MA_LANDMINE:
  642. -		sc_start(bl,SC_STUN,(5*skill_lv+30),skill_lv,skill_get_time2(skill_id,skill_lv));
  643. +		sc_start(src,bl,SC_STUN,(5*skill_lv+30),skill_lv,skill_get_time2(skill_id,skill_lv));
  644.  		break;
  645.  
  646.  	case HT_SHOCKWAVE:
  647. @@ -1041,43 +1041,43 @@
  648.  
  649.  	case HT_SANDMAN:
  650.  	case MA_SANDMAN:
  651. -		sc_start(bl,SC_SLEEP,(10*skill_lv+40),skill_lv,skill_get_time2(skill_id,skill_lv));
  652. +		sc_start(src,bl,SC_SLEEP,(10*skill_lv+40),skill_lv,skill_get_time2(skill_id,skill_lv));
  653.  		break;
  654.  
  655.  	case TF_SPRINKLESAND:
  656. -		sc_start(bl,SC_BLIND,20,skill_lv,skill_get_time2(skill_id,skill_lv));
  657. +		sc_start(src,bl,SC_BLIND,20,skill_lv,skill_get_time2(skill_id,skill_lv));
  658.  		break;
  659.  
  660.  	case TF_THROWSTONE:
  661. -		sc_start(bl,SC_STUN,3,skill_lv,skill_get_time(skill_id,skill_lv));
  662. -		sc_start(bl,SC_BLIND,3,skill_lv,skill_get_time2(skill_id,skill_lv));
  663. +		sc_start(src,bl,SC_STUN,3,skill_lv,skill_get_time(skill_id,skill_lv));
  664. +		sc_start(src,bl,SC_BLIND,3,skill_lv,skill_get_time2(skill_id,skill_lv));
  665.  		break;
  666.  
  667.  	case NPC_DARKCROSS:
  668.  	case CR_HOLYCROSS:
  669. -		sc_start(bl,SC_BLIND,3*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  670. +		sc_start(src,bl,SC_BLIND,3*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  671.  		break;
  672.  
  673.  	case CR_GRANDCROSS:
  674.  	case NPC_GRANDDARKNESS:
  675.  		//Chance to cause blind status vs demon and undead element, but not against players
  676.  		if(!dstsd && (battle_check_undead(tstatus->race,tstatus->def_ele) || tstatus->race == RC_DEMON))
  677. -			sc_start(bl,SC_BLIND,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  678. +			sc_start(src,bl,SC_BLIND,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  679.  		attack_type |= BF_WEAPON;
  680.  		break;
  681.  
  682.  	case AM_ACIDTERROR:
  683. -		sc_start2(bl,SC_BLEEDING,(skill_lv*3),skill_lv,src->id,skill_get_time2(skill_id,skill_lv));
  684. -		if (skill_break_equip(bl, EQP_ARMOR, 100*skill_get_time(skill_id,skill_lv), BCT_ENEMY))
  685. +		sc_start2(src,bl,SC_BLEEDING,(skill_lv*3),skill_lv,src->id,skill_get_time2(skill_id,skill_lv));
  686. +		if (skill_break_equip(src,bl, EQP_ARMOR, 100*skill_get_time(skill_id,skill_lv), BCT_ENEMY))
  687.  			clif_emotion(bl,E_OMG);
  688.  		break;
  689.  
  690.  	case AM_DEMONSTRATION:
  691. -		skill_break_equip(bl, EQP_WEAPON, 100*skill_lv, BCT_ENEMY);
  692. +		skill_break_equip(src,bl, EQP_WEAPON, 100*skill_lv, BCT_ENEMY);
  693.  		break;
  694.  
  695.  	case CR_SHIELDCHARGE:
  696. -		sc_start(bl,SC_STUN,(15+skill_lv*5),skill_lv,skill_get_time2(skill_id,skill_lv));
  697. +		sc_start(src,bl,SC_STUN,(15+skill_lv*5),skill_lv,skill_get_time2(skill_id,skill_lv));
  698.  		break;
  699.  
  700.  	case PA_PRESSURE:
  701. @@ -1085,28 +1085,28 @@
  702.  		break;
  703.  
  704.  	case RG_RAID:
  705. -		sc_start(bl,SC_STUN,(10+3*skill_lv),skill_lv,skill_get_time(skill_id,skill_lv));
  706. -		sc_start(bl,SC_BLIND,(10+3*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  707. +		sc_start(src,bl,SC_STUN,(10+3*skill_lv),skill_lv,skill_get_time(skill_id,skill_lv));
  708. +		sc_start(src,bl,SC_BLIND,(10+3*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  709.  
  710.  #ifdef RENEWAL
  711. -		sc_start(bl,SC_RAID,100,7,5000);
  712. +		sc_start(src,bl,SC_RAID,100,7,5000);
  713.  		break;
  714.  
  715.  	case RG_BACKSTAP:
  716. -		sc_start(bl,SC_STUN,(5+2*skill_lv),skill_lv,skill_get_time(skill_id,skill_lv));
  717. +		sc_start(src,bl,SC_STUN,(5+2*skill_lv),skill_lv,skill_get_time(skill_id,skill_lv));
  718.  #endif
  719.  		break;
  720.  
  721.  	case BA_FROSTJOKER:
  722. -		sc_start(bl,SC_FREEZE,(15+5*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  723. +		sc_start(src,bl,SC_FREEZE,(15+5*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  724.  		break;
  725.  
  726.  	case DC_SCREAM:
  727. -		sc_start(bl,SC_STUN,(25+5*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  728. +		sc_start(src,bl,SC_STUN,(25+5*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  729.  		break;
  730.  
  731.  	case BD_LULLABY:
  732. -		sc_start(bl,SC_SLEEP,15,skill_lv,skill_get_time2(skill_id,skill_lv));
  733. +		sc_start(src,bl,SC_SLEEP,15,skill_lv,skill_get_time2(skill_id,skill_lv));
  734.  		break;
  735.  
  736.  	case DC_UGLYDANCE:
  737. @@ -1117,11 +1117,11 @@
  738.    		break;
  739.  	case SL_STUN:
  740.  		if (tstatus->size==SZ_MEDIUM) //Only stuns mid-sized mobs.
  741. -			sc_start(bl,SC_STUN,(30+10*skill_lv),skill_lv,skill_get_time(skill_id,skill_lv));
  742. +			sc_start(src,bl,SC_STUN,(30+10*skill_lv),skill_lv,skill_get_time(skill_id,skill_lv));
  743.  		break;
  744.  
  745.  	case NPC_PETRIFYATTACK:
  746. -		sc_start4(bl,status_skill2sc(skill_id),50+10*skill_lv,
  747. +		sc_start4(src,bl,status_skill2sc(skill_id),50+10*skill_lv,
  748.  			skill_lv,0,0,skill_get_time(skill_id,skill_lv),
  749.  			skill_get_time2(skill_id,skill_lv));
  750.  		break;
  751. @@ -1132,14 +1132,14 @@
  752.  	case NPC_SILENCEATTACK:
  753.  	case NPC_STUNATTACK:
  754.  	case NPC_HELLPOWER:
  755. -		sc_start(bl,status_skill2sc(skill_id),50+10*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  756. +		sc_start(src,bl,status_skill2sc(skill_id),50+10*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  757.  		break;
  758.  	case NPC_ACIDBREATH:
  759.  	case NPC_ICEBREATH:
  760. -		sc_start(bl,status_skill2sc(skill_id),70,skill_lv,skill_get_time2(skill_id,skill_lv));
  761. +		sc_start(src,bl,status_skill2sc(skill_id),70,skill_lv,skill_get_time2(skill_id,skill_lv));
  762.  		break;
  763.  	case NPC_BLEEDING:
  764. -		sc_start2(bl,SC_BLEEDING,(20*skill_lv),skill_lv,src->id,skill_get_time2(skill_id,skill_lv));
  765. +		sc_start2(src,bl,SC_BLEEDING,(20*skill_lv),skill_lv,src->id,skill_get_time2(skill_id,skill_lv));
  766.  		break;
  767.  	case NPC_MENTALBREAKER:
  768.  	{	//Based on observations by Tharis, Mental Breaker should do SP damage
  769. @@ -1153,45 +1153,45 @@
  770.  	}
  771.  	// Equipment breaking monster skills [Celest]
  772.  	case NPC_WEAPONBRAKER:
  773. -		skill_break_equip(bl, EQP_WEAPON, 150*skill_lv, BCT_ENEMY);
  774. +		skill_break_equip(src,bl, EQP_WEAPON, 150*skill_lv, BCT_ENEMY);
  775.  		break;
  776.  	case NPC_ARMORBRAKE:
  777. -		skill_break_equip(bl, EQP_ARMOR, 150*skill_lv, BCT_ENEMY);
  778. +		skill_break_equip(src,bl, EQP_ARMOR, 150*skill_lv, BCT_ENEMY);
  779.  		break;
  780.  	case NPC_HELMBRAKE:
  781. -		skill_break_equip(bl, EQP_HELM, 150*skill_lv, BCT_ENEMY);
  782. +		skill_break_equip(src,bl, EQP_HELM, 150*skill_lv, BCT_ENEMY);
  783.  		break;
  784.  	case NPC_SHIELDBRAKE:
  785. -		skill_break_equip(bl, EQP_SHIELD, 150*skill_lv, BCT_ENEMY);
  786. +		skill_break_equip(src,bl, EQP_SHIELD, 150*skill_lv, BCT_ENEMY);
  787.  		break;
  788.  
  789.  	case CH_TIGERFIST:
  790. -		sc_start(bl,SC_STOP,(10+skill_lv*10),0,skill_get_time2(skill_id,skill_lv));
  791. +		sc_start(src,bl,SC_STOP,(10+skill_lv*10),0,skill_get_time2(skill_id,skill_lv));
  792.  		break;
  793.  
  794.  	case LK_SPIRALPIERCE:
  795.  	case ML_SPIRALPIERCE:
  796. -		sc_start(bl,SC_STOP,(15+skill_lv*5),0,skill_get_time2(skill_id,skill_lv));
  797. +		sc_start(src,bl,SC_STOP,(15+skill_lv*5),0,skill_get_time2(skill_id,skill_lv));
  798.  		break;
  799.  
  800.  	case ST_REJECTSWORD:
  801. -		sc_start(bl,SC_AUTOCOUNTER,(skill_lv*15),skill_lv,skill_get_time(skill_id,skill_lv));
  802. +		sc_start(src,bl,SC_AUTOCOUNTER,(skill_lv*15),skill_lv,skill_get_time(skill_id,skill_lv));
  803.  		break;
  804.  
  805.  	case PF_FOGWALL:
  806.  		if (src != bl && !tsc->data[SC_DELUGE])
  807. -			sc_start(bl,SC_BLIND,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  808. +			sc_start(src,bl,SC_BLIND,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  809.  		break;
  810.  
  811.  	case LK_HEADCRUSH: //Headcrush has chance of causing Bleeding status, except on demon and undead element
  812.  		if (!(battle_check_undead(tstatus->race, tstatus->def_ele) || tstatus->race == RC_DEMON))
  813. -			sc_start2(bl, SC_BLEEDING,50, skill_lv, src->id, skill_get_time2(skill_id,skill_lv));
  814. +			sc_start2(src,bl, SC_BLEEDING,50, skill_lv, src->id, skill_get_time2(skill_id,skill_lv));
  815.  		break;
  816.  
  817.  	case LK_JOINTBEAT:
  818.  		status = status_skill2sc(skill_id);
  819.  		if (tsc->jb_flag) {
  820. -			sc_start4(bl,status,(5*skill_lv+5),skill_lv,tsc->jb_flag&BREAK_FLAGS,src->id,0,skill_get_time2(skill_id,skill_lv));
  821. +			sc_start4(src,bl,status,(5*skill_lv+5),skill_lv,tsc->jb_flag&BREAK_FLAGS,src->id,0,skill_get_time2(skill_id,skill_lv));
  822.  			tsc->jb_flag = 0;
  823.  		}
  824.  		break;
  825. @@ -1199,30 +1199,30 @@
  826.  		//Any enemies hit by this skill will receive Stun, Darkness, or external bleeding status ailment with a 5%+5*skill_lv% chance.
  827.  		switch(rnd()%3) {
  828.  			case 0:
  829. -				sc_start(bl,SC_BLIND,(5+skill_lv*5),skill_lv,skill_get_time2(skill_id,1));
  830. +				sc_start(src,bl,SC_BLIND,(5+skill_lv*5),skill_lv,skill_get_time2(skill_id,1));
  831.  				break;
  832.  			case 1:
  833. -				sc_start(bl,SC_STUN,(5+skill_lv*5),skill_lv,skill_get_time2(skill_id,2));
  834. +				sc_start(src,bl,SC_STUN,(5+skill_lv*5),skill_lv,skill_get_time2(skill_id,2));
  835.  				break;
  836.  			default:
  837. -				sc_start2(bl,SC_BLEEDING,(5+skill_lv*5),skill_lv,src->id,skill_get_time2(skill_id,3));
  838. +				sc_start2(src,bl,SC_BLEEDING,(5+skill_lv*5),skill_lv,src->id,skill_get_time2(skill_id,3));
  839.    		}
  840.  		break;
  841.  
  842.  	case HW_NAPALMVULCAN:
  843. -		sc_start(bl,SC_CURSE,5*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  844. +		sc_start(src,bl,SC_CURSE,5*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  845.  		break;
  846.  
  847.  	case WS_CARTTERMINATION:	// Cart termination
  848. -		sc_start(bl,SC_STUN,5*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  849. +		sc_start(src,bl,SC_STUN,5*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  850.  		break;
  851.  
  852.  	case CR_ACIDDEMONSTRATION:
  853. -		skill_break_equip(bl, EQP_WEAPON|EQP_ARMOR, 100*skill_lv, BCT_ENEMY);
  854. +		skill_break_equip(src,bl, EQP_WEAPON|EQP_ARMOR, 100*skill_lv, BCT_ENEMY);
  855.  		break;
  856.  
  857.  	case TK_DOWNKICK:
  858. -		sc_start(bl,SC_STUN,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  859. +		sc_start(src,bl,SC_STUN,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  860.  		break;
  861.  
  862.  	case TK_JUMPKICK:
  863. @@ -1239,52 +1239,52 @@
  864.  	case TK_TURNKICK:
  865.  	case MO_BALKYOUNG: //Note: attack_type is passed as BF_WEAPON for the actual target, BF_MISC for the splash-affected mobs.
  866.  		if(attack_type&BF_MISC) //70% base stun chance...
  867. -			sc_start(bl,SC_STUN,70,skill_lv,skill_get_time2(skill_id,skill_lv));
  868. +			sc_start(src,bl,SC_STUN,70,skill_lv,skill_get_time2(skill_id,skill_lv));
  869.  		break;
  870.  	case GS_BULLSEYE: //0.1% coma rate.
  871.  		if(tstatus->race == RC_BRUTE || tstatus->race == RC_DEMIHUMAN)
  872. -			status_change_start(bl,SC_COMA,10,skill_lv,0,src->id,0,0,0);
  873. +			status_change_start(src, bl,SC_COMA,10,skill_lv,0,src->id,0,0,0);
  874.  		break;
  875.  	case GS_PIERCINGSHOT:
  876. -		sc_start2(bl,SC_BLEEDING,(skill_lv*3),skill_lv,src->id,skill_get_time2(skill_id,skill_lv));
  877. +		sc_start2(src,bl,SC_BLEEDING,(skill_lv*3),skill_lv,src->id,skill_get_time2(skill_id,skill_lv));
  878.  		break;
  879.  	case NJ_HYOUSYOURAKU:
  880. -		sc_start(bl,SC_FREEZE,(10+10*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  881. +		sc_start(src,bl,SC_FREEZE,(10+10*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
  882.  		break;
  883.  	case GS_FLING:
  884. -		sc_start(bl,SC_FLING,100, sd?sd->spiritball_old:5,skill_get_time(skill_id,skill_lv));
  885. +		sc_start(src,bl,SC_FLING,100, sd?sd->spiritball_old:5,skill_get_time(skill_id,skill_lv));
  886.  		break;
  887.  	case GS_DISARM:
  888.  		rate = 3*skill_lv;
  889.  		if (sstatus->dex > tstatus->dex)
  890.  			rate += (sstatus->dex - tstatus->dex)/5; //TODO: Made up formula
  891. -		skill_strip_equip(bl, EQP_WEAPON, rate, skill_lv, skill_get_time(skill_id,skill_lv));
  892. +		skill_strip_equip(src,bl, EQP_WEAPON, rate, skill_lv, skill_get_time(skill_id,skill_lv));
  893.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  894.  		break;
  895.  	case NPC_EVILLAND:
  896. -		sc_start(bl,SC_BLIND,5*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  897. +		sc_start(src,bl,SC_BLIND,5*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  898.  		break;
  899.  	case NPC_HELLJUDGEMENT:
  900. -		sc_start(bl,SC_CURSE,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  901. +		sc_start(src,bl,SC_CURSE,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  902.  		break;
  903.  	case NPC_CRITICALWOUND:
  904. -		sc_start(bl,SC_CRITICALWOUND,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  905. +		sc_start(src,bl,SC_CRITICALWOUND,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  906.  		break;
  907.  	case RK_WINDCUTTER:
  908. -		sc_start(bl,SC_FEAR,3+2*skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
  909. +		sc_start(src,bl,SC_FEAR,3+2*skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
  910.  		break;
  911.  	case RK_DRAGONBREATH:
  912. -		sc_start4(bl,SC_BURNING,5+5*skill_lv,skill_lv,1000,src->id,0,skill_get_time(skill_id,skill_lv));
  913. +		sc_start4(src,bl,SC_BURNING,5+5*skill_lv,skill_lv,1000,src->id,0,skill_get_time(skill_id,skill_lv));
  914.  		break;
  915.  	case AB_ADORAMUS:
  916.  		if( tsc && !tsc->data[SC_DECREASEAGI] ) //Prevent duplicate agi-down effect.
  917. -			sc_start(bl, SC_ADORAMUS, skill_lv * 4 + (sd ? sd->status.job_level : 50) / 2, skill_lv, skill_get_time(skill_id, skill_lv));
  918. +			sc_start(src,bl, SC_ADORAMUS, skill_lv * 4 + (sd ? sd->status.job_level : 50) / 2, skill_lv, skill_get_time(skill_id, skill_lv));
  919.  		break;
  920.  	case WL_CRIMSONROCK:
  921. -		sc_start(bl, SC_STUN, 40, skill_lv, skill_get_time(skill_id, skill_lv));
  922. +		sc_start(src,bl, SC_STUN, 40, skill_lv, skill_get_time(skill_id, skill_lv));
  923.  		break;
  924.  	case WL_COMET:
  925. -		sc_start4(bl,SC_BURNING,100,skill_lv,1000,src->id,0,skill_get_time(skill_id,skill_lv));
  926. +		sc_start4(src,bl,SC_BURNING,100,skill_lv,1000,src->id,0,skill_get_time(skill_id,skill_lv));
  927.  		break;
  928.  	case WL_EARTHSTRAIN:
  929.  		{
  930. @@ -1294,14 +1294,14 @@
  931.  			//rate -= rate * tstatus->dex / 200; // Disabled until official resistance is found.
  932.  
  933.  			for( i = 0; i < skill_lv; i++ )
  934. -				skill_strip_equip(bl,pos[i],rate,skill_lv,skill_get_time2(skill_id,skill_lv));
  935. +				skill_strip_equip(src,bl,pos[i],rate,skill_lv,skill_get_time2(skill_id,skill_lv));
  936.  		}
  937.  		break;
  938.  	case WL_JACKFROST:
  939. -		sc_start(bl,SC_FREEZE,100,skill_lv,skill_get_time(skill_id,skill_lv));
  940. +		sc_start(src,bl,SC_FREEZE,100,skill_lv,skill_get_time(skill_id,skill_lv));
  941.  		break;
  942.  	case RA_WUGBITE:
  943. -		sc_start(bl, SC_BITE,  (sd ? pc_checkskill(sd,RA_TOOTHOFWUG)*2 : 0), skill_lv, (skill_get_time(skill_id,skill_lv) + (sd ? pc_checkskill(sd,RA_TOOTHOFWUG)*500 : 0)) );
  944. +		sc_start(src,bl, SC_BITE,  (sd ? pc_checkskill(sd,RA_TOOTHOFWUG)*2 : 0), skill_lv, (skill_get_time(skill_id,skill_lv) + (sd ? pc_checkskill(sd,RA_TOOTHOFWUG)*500 : 0)) );
  945.  		break;
  946.  	case RA_SENSITIVEKEEN:
  947.  		if( rnd()%100 < 8 * skill_lv )
  948. @@ -1309,7 +1309,7 @@
  949.  		break;
  950.  	case RA_FIRINGTRAP:
  951.  	case RA_ICEBOUNDTRAP:
  952. -		sc_start(bl, (skill_id == RA_FIRINGTRAP) ? SC_BURNING:SC_FREEZING, 40 + 10 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
  953. +		sc_start(src,bl, (skill_id == RA_FIRINGTRAP) ? SC_BURNING:SC_FREEZING, 40 + 10 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
  954.  		break;
  955.  	case NC_PILEBUNKER:
  956.  		if( rnd()%100 < 5 + 15*skill_lv )
  957. @@ -1322,14 +1322,14 @@
  958.  		}
  959.  		break;
  960.  	case NC_FLAMELAUNCHER:
  961. -		sc_start4(bl, SC_BURNING, 50 + 10 * skill_lv, skill_lv, 1000, src->id, 0, skill_get_time2(skill_id, skill_lv));
  962. +		sc_start4(src,bl, SC_BURNING, 50 + 10 * skill_lv, skill_lv, 1000, src->id, 0, skill_get_time2(skill_id, skill_lv));
  963.  		break;
  964.  	case NC_COLDSLOWER:
  965. -		sc_start(bl, SC_FREEZE, 10 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  966. -		sc_start(bl, SC_FREEZING, 20 + 10 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  967. +		sc_start(src,bl, SC_FREEZE, 10 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  968. +		sc_start(src,bl, SC_FREEZING, 20 + 10 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  969.  		break;
  970.  	case NC_POWERSWING:
  971. -		sc_start(bl, SC_STUN, 5*skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  972. +		sc_start(src,bl, SC_STUN, 5*skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  973.  		if( rnd()%100 < 5*skill_lv )
  974.  			skill_castend_damage_id(src, bl, NC_AXEBOOMERANG, pc_checkskill(sd, NC_AXEBOOMERANG), tick, 1);
  975.  		break;
  976. @@ -1337,20 +1337,20 @@
  977.  		skill_castend_nodamage_id(src,bl,skill_id,skill_lv,tick,BCT_ENEMY);
  978.  		break;
  979.  	case LG_SHIELDPRESS:
  980. -		sc_start(bl, SC_STUN, 30 + 8 * skill_lv, skill_lv, skill_get_time(skill_id,skill_lv));
  981. +		sc_start(src,bl, SC_STUN, 30 + 8 * skill_lv, skill_lv, skill_get_time(skill_id,skill_lv));
  982.  		break;
  983.  	case LG_PINPOINTATTACK:
  984.  		rate = 30 + (((5 * (sd?pc_checkskill(sd,LG_PINPOINTATTACK):skill_lv)) + (sstatus->agi + status_get_lv(src))) / 10);
  985.  		switch( skill_lv ) {
  986.  			case 1:
  987. -				sc_start2(bl,SC_BLEEDING,rate,skill_lv,src->id,skill_get_time(skill_id,skill_lv));
  988. +				sc_start2(src,bl,SC_BLEEDING,rate,skill_lv,src->id,skill_get_time(skill_id,skill_lv));
  989.  				break;
  990.  			case 2:
  991.  				if( dstsd && dstsd->spiritball && rnd()%100 < rate )
  992.  					pc_delspiritball(dstsd, dstsd->spiritball, 0);
  993.  				break;
  994.  			default:
  995. -				skill_break_equip(bl,(skill_lv == 3) ? EQP_SHIELD : (skill_lv == 4) ? EQP_ARMOR : EQP_WEAPON,rate * 100,BCT_ENEMY);
  996. +				skill_break_equip(src,bl,(skill_lv == 3) ? EQP_SHIELD : (skill_lv == 4) ? EQP_ARMOR : EQP_WEAPON,rate * 100,BCT_ENEMY);
  997.  				break;
  998.  		}
  999.  		break;
  1000. @@ -1359,36 +1359,36 @@
  1001.  		if( rnd()%100 < rate && dstsd ) // Uses skill_addtimerskill to avoid damage and setsit packet overlaping. Officially clif_setsit is received about 500 ms after damage packet.
  1002.  			skill_addtimerskill(src,tick+500,bl->id,0,0,skill_id,skill_lv,BF_WEAPON,0);
  1003.  		else if( dstmd && !is_boss(bl) )
  1004. -			sc_start(bl,SC_STOP,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1005. +			sc_start(src,bl,SC_STOP,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1006.  		break;
  1007.  	case LG_RAYOFGENESIS:	// 50% chance to cause Blind on Undead and Demon monsters.
  1008.  		if ( battle_check_undead(tstatus->race, tstatus->def_ele) || tstatus->race == RC_DEMON )
  1009. -			sc_start(bl, SC_BLIND,50, skill_lv, skill_get_time(skill_id,skill_lv));
  1010. +			sc_start(src,bl, SC_BLIND,50, skill_lv, skill_get_time(skill_id,skill_lv));
  1011.  		break;
  1012.  	case LG_EARTHDRIVE:
  1013. -		skill_break_equip(src, EQP_SHIELD, 500, BCT_SELF);
  1014. -		sc_start(bl, SC_EARTHDRIVE, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  1015. +		skill_break_equip(src,src, EQP_SHIELD, 500, BCT_SELF);
  1016. +		sc_start(src,bl, SC_EARTHDRIVE, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  1017.  		break;
  1018.  	case SR_DRAGONCOMBO:
  1019. -		sc_start(bl, SC_STUN, 1 + skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  1020. +		sc_start(src,bl, SC_STUN, 1 + skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  1021.  		break;
  1022.  	case SR_FALLENEMPIRE:
  1023. -		sc_start(bl, SC_STOP, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  1024. +		sc_start(src,bl, SC_STOP, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  1025.  		break;
  1026.  	case SR_WINDMILL:
  1027.  		if( dstsd )
  1028.  			skill_addtimerskill(src,tick+status_get_amotion(src),bl->id,0,0,skill_id,skill_lv,BF_WEAPON,0);
  1029.  		else if( dstmd && !is_boss(bl) )
  1030. -			sc_start(bl, SC_STUN, 100, skill_lv, 1000 + 1000 * (rnd() %3));
  1031. +			sc_start(src,bl, SC_STUN, 100, skill_lv, 1000 + 1000 * (rnd() %3));
  1032.  		break;
  1033.  	case SR_GENTLETOUCH_QUIET:  //  [(Skill Level x 5) + (Caster?s DEX + Caster?s Base Level) / 10]
  1034. -		sc_start(bl, SC_SILENCE, 5 * skill_lv + (sstatus->dex + status_get_lv(src)) / 10, skill_lv, skill_get_time(skill_id, skill_lv));
  1035. +		sc_start(src,bl, SC_SILENCE, 5 * skill_lv + (sstatus->dex + status_get_lv(src)) / 10, skill_lv, skill_get_time(skill_id, skill_lv));
  1036.  		break;
  1037.  	case SR_EARTHSHAKER:
  1038. -		sc_start(bl,SC_STUN, 25 + 5 * skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
  1039. +		sc_start(src,bl,SC_STUN, 25 + 5 * skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
  1040.  		break;
  1041.  	case SR_HOWLINGOFLION:
  1042. -		sc_start(bl, SC_FEAR, 5 + 5 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  1043. +		sc_start(src,bl, SC_FEAR, 5 + 5 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  1044.  		break;
  1045.  	case WM_SOUND_OF_DESTRUCTION:
  1046.  		if( rnd()%100 < 5 + 5 * skill_lv ) { // Temporarly Check Until We Get the Official Formula
  1047. @@ -1423,73 +1423,73 @@
  1048.  		}
  1049.  		break;
  1050.  	case SO_EARTHGRAVE:
  1051. -		sc_start2(bl, SC_BLEEDING, 5 * skill_lv, skill_lv, src->id, skill_get_time2(skill_id, skill_lv));	// Need official rate. [LimitLine]
  1052. +		sc_start2(src,bl, SC_BLEEDING, 5 * skill_lv, skill_lv, src->id, skill_get_time2(skill_id, skill_lv));	// Need official rate. [LimitLine]
  1053.  		break;
  1054.  	case SO_DIAMONDDUST:
  1055.  		rate = 5 + 5 * skill_lv;
  1056.  		if( sc && sc->data[SC_COOLER_OPTION] )
  1057.  			rate += rate * sc->data[SC_COOLER_OPTION]->val2 / 100;
  1058. -		sc_start(bl, SC_CRYSTALIZE, rate, skill_lv, skill_get_time2(skill_id, skill_lv));
  1059. +		sc_start(src,bl, SC_CRYSTALIZE, rate, skill_lv, skill_get_time2(skill_id, skill_lv));
  1060.  		break;
  1061.  	case SO_VARETYR_SPEAR:
  1062. -		sc_start(bl, SC_STUN, 5 + 5 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
  1063. +		sc_start(src,bl, SC_STUN, 5 + 5 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
  1064.  		break;
  1065.  	case GN_SLINGITEM_RANGEMELEEATK:
  1066.  		if( sd ) {
  1067.  			switch( sd->itemid ) {	// Starting SCs here instead of do it in skill_additional_effect to simplify the code.
  1068.  				case 13261:
  1069. -					sc_start(bl, SC_STUN, 100, skill_lv, skill_get_time2(GN_SLINGITEM, skill_lv));
  1070. -					sc_start2(bl, SC_BLEEDING, 100, skill_lv, src->id, skill_get_time2(GN_SLINGITEM, skill_lv));
  1071. +					sc_start(src,bl, SC_STUN, 100, skill_lv, skill_get_time2(GN_SLINGITEM, skill_lv));
  1072. +					sc_start2(src,bl, SC_BLEEDING, 100, skill_lv, src->id, skill_get_time2(GN_SLINGITEM, skill_lv));
  1073.  					break;
  1074.  				case 13262:
  1075. -					sc_start(bl, SC_MELON_BOMB, 100, skill_lv, skill_get_time(GN_SLINGITEM, skill_lv));	// Reduces ASPD and moviment speed
  1076. +					sc_start(src,bl, SC_MELON_BOMB, 100, skill_lv, skill_get_time(GN_SLINGITEM, skill_lv));	// Reduces ASPD and moviment speed
  1077.  					break;
  1078.  				case 13264:
  1079. -					sc_start(bl, SC_BANANA_BOMB, 100, skill_lv, skill_get_time(GN_SLINGITEM, skill_lv));	// Reduces LUK ??Needed confirm it, may be it's bugged in kRORE?
  1080. -					sc_start(bl, SC_BANANA_BOMB_SITDOWN, 75, skill_lv, skill_get_time(GN_SLINGITEM_RANGEMELEEATK,skill_lv)); // Sitdown for 3 seconds.
  1081. +					sc_start(src,bl, SC_BANANA_BOMB, 100, skill_lv, skill_get_time(GN_SLINGITEM, skill_lv));	// Reduces LUK ??Needed confirm it, may be it's bugged in kRORE?
  1082. +					sc_start(src,bl, SC_BANANA_BOMB_SITDOWN, 75, skill_lv, skill_get_time(GN_SLINGITEM_RANGEMELEEATK,skill_lv)); // Sitdown for 3 seconds.
  1083.  					break;
  1084.  			}
  1085.  			sd->itemid = -1;
  1086.  		}
  1087.  		break;
  1088.  	case GN_HELLS_PLANT_ATK:
  1089. -		sc_start(bl, SC_STUN,  5 + 5 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
  1090. -		sc_start2(bl, SC_BLEEDING, 20 + 10 * skill_lv, skill_lv, src->id,skill_get_time2(skill_id, skill_lv));
  1091. +		sc_start(src,bl, SC_STUN,  5 + 5 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
  1092. +		sc_start2(src,bl, SC_BLEEDING, 20 + 10 * skill_lv, skill_lv, src->id,skill_get_time2(skill_id, skill_lv));
  1093.  		break;
  1094.  	case EL_WIND_SLASH:	// Non confirmed rate.
  1095. -		sc_start2(bl, SC_BLEEDING, 25, skill_lv, src->id, skill_get_time(skill_id,skill_lv));
  1096. +		sc_start2(src,bl, SC_BLEEDING, 25, skill_lv, src->id, skill_get_time(skill_id,skill_lv));
  1097.  		break;
  1098.  	case EL_STONE_HAMMER:
  1099.  		rate = 10 * skill_lv;
  1100. -		sc_start(bl, SC_STUN, rate, skill_lv, skill_get_time(skill_id,skill_lv));
  1101. +		sc_start(src,bl, SC_STUN, rate, skill_lv, skill_get_time(skill_id,skill_lv));
  1102.  		break;
  1103.  	case EL_ROCK_CRUSHER:
  1104.  	case EL_ROCK_CRUSHER_ATK:
  1105. -		sc_start(bl,status_skill2sc(skill_id),50,skill_lv,skill_get_time(EL_ROCK_CRUSHER,skill_lv));
  1106. +		sc_start(src,bl,status_skill2sc(skill_id),50,skill_lv,skill_get_time(EL_ROCK_CRUSHER,skill_lv));
  1107.  		break;
  1108.  	case EL_TYPOON_MIS:
  1109. -		sc_start(bl,SC_SILENCE,10*skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
  1110. +		sc_start(src,bl,SC_SILENCE,10*skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
  1111.  		break;
  1112.  	case KO_JYUMONJIKIRI: // needs more info
  1113. -		sc_start(bl,SC_JYUMONJIKIRI,25,skill_lv,skill_get_time(skill_id,skill_lv));
  1114. +		sc_start(src,bl,SC_JYUMONJIKIRI,25,skill_lv,skill_get_time(skill_id,skill_lv));
  1115.  		break;
  1116.  	case KO_MAKIBISHI:
  1117. -		sc_start(bl, SC_STUN, 100, skill_lv, skill_get_time2(skill_id,skill_lv));
  1118. +		sc_start(src,bl, SC_STUN, 100, skill_lv, skill_get_time2(skill_id,skill_lv));
  1119.  		break;
  1120.  	case MH_LAVA_SLIDE:
  1121. -		if (tsc && !tsc->data[SC_BURNING]) sc_start4(bl, SC_BURNING, 10 * skill_lv, skill_lv, 1000, src->id, 0, skill_get_time(skill_id, skill_lv));
  1122. +		if (tsc && !tsc->data[SC_BURNING]) sc_start4(src,bl, SC_BURNING, 10 * skill_lv, skill_lv, 1000, src->id, 0, skill_get_time(skill_id, skill_lv));
  1123.  		break;
  1124.  	case MH_STAHL_HORN:
  1125. -		sc_start(bl, SC_STUN, (20 + 4 * (skill_lv-1)), skill_lv, skill_get_time(skill_id, skill_lv));
  1126. +		sc_start(src,bl, SC_STUN, (20 + 4 * (skill_lv-1)), skill_lv, skill_get_time(skill_id, skill_lv));
  1127.  		break;
  1128.  	case MH_NEEDLE_OF_PARALYZE:
  1129. -		sc_start(bl, SC_PARALYSIS, 40 + (5*skill_lv), skill_lv, skill_get_time(skill_id, skill_lv));
  1130. +		sc_start(src,bl, SC_PARALYSIS, 40 + (5*skill_lv), skill_lv, skill_get_time(skill_id, skill_lv));
  1131.  		break;
  1132.  	case MH_SILVERVEIN_RUSH:
  1133. -		sc_start4(bl,SC_STUN,20 + (5*skill_lv),skill_lv,src->id,0,0,skill_get_time(skill_id,skill_lv));
  1134. +		sc_start4(src,bl,SC_STUN,20 + (5*skill_lv),skill_lv,src->id,0,0,skill_get_time(skill_id,skill_lv));
  1135.  		break;
  1136.  	case MH_MIDNIGHT_FRENZY:
  1137. -		sc_start4(bl,SC_FEAR,20 + (4*skill_lv),skill_lv,src->id,0,0,skill_get_time(skill_id,skill_lv));
  1138. +		sc_start4(src,bl,SC_FEAR,20 + (4*skill_lv),skill_lv,src->id,0,0,skill_get_time(skill_id,skill_lv));
  1139.  		break;
  1140.  	}
  1141.  
  1142. @@ -1507,7 +1507,7 @@
  1143.  			rate += sd->weapon_coma_race[tstatus->race];
  1144.  			rate += sd->weapon_coma_race[tstatus->mode&MD_BOSS?RC_BOSS:RC_NONBOSS];
  1145.  			if (rate)
  1146. -				status_change_start(bl, SC_COMA, rate, 0, 0, src->id, 0, 0, 0);
  1147. +				status_change_start(src,bl, SC_COMA, rate, 0, 0, src->id, 0, 0, 0);
  1148.  		}
  1149.  		if( sd && battle_config.equip_self_break_rate )
  1150.  		{	// Self weapon breaking
  1151. @@ -1522,7 +1522,7 @@
  1152.  					rate += 10;
  1153.  			}
  1154.  			if( rate )
  1155. -				skill_break_equip(src, EQP_WEAPON, rate, BCT_SELF);
  1156. +				skill_break_equip(src,src, EQP_WEAPON, rate, BCT_SELF);
  1157.  		}
  1158.  		if( battle_config.equip_skill_break_rate && skill_id != WS_CARTTERMINATION && skill_id != ITM_TOMAHAWK )
  1159.  		{	// Cart Termination/Tomahawk won't trigger breaking data. Why? No idea, go ask Gravity.
  1160. @@ -1533,7 +1533,7 @@
  1161.  			if( sc && sc->data[SC_MELTDOWN] )
  1162.  				rate += sc->data[SC_MELTDOWN]->val2;
  1163.  			if( rate )
  1164. -				skill_break_equip(bl, EQP_WEAPON, rate, BCT_ENEMY);
  1165. +				skill_break_equip(src,bl, EQP_WEAPON, rate, BCT_ENEMY);
  1166.  
  1167.  			// Target armor breaking
  1168.  			rate = 0;
  1169. @@ -1542,7 +1542,7 @@
  1170.  			if( sc && sc->data[SC_MELTDOWN] )
  1171.  				rate += sc->data[SC_MELTDOWN]->val3;
  1172.  			if( rate )
  1173. -				skill_break_equip(bl, EQP_ARMOR, rate, BCT_ENEMY);
  1174. +				skill_break_equip(src,bl, EQP_ARMOR, rate, BCT_ENEMY);
  1175.  		}
  1176.  	}
  1177.  
  1178. @@ -1851,19 +1851,19 @@
  1179.  			time = skill_get_time2(status_sc2skill(type),7);
  1180.  
  1181.  			if (dstsd->addeff2[i].flag&ATF_TARGET)
  1182. -				status_change_start(src,type,rate,7,0,0,0,time,0);
  1183. +				status_change_start(src, src,type,rate,7,0,0,0,time,0);
  1184.  
  1185.  			if (dstsd->addeff2[i].flag&ATF_SELF && !status_isdead(bl))
  1186. -				status_change_start(bl,type,rate,7,0,0,0,time,0);
  1187. +				status_change_start(src, bl,type,rate,7,0,0,0,time,0);
  1188.  		}
  1189.  	}
  1190.  
  1191.  	switch(skill_id){
  1192.  	case MO_EXTREMITYFIST:
  1193. -		sc_start(src,SC_EXTREMITYFIST,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  1194. +		sc_start(src,src,SC_EXTREMITYFIST,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  1195.  		break;
  1196.  	case GS_FULLBUSTER:
  1197. -		sc_start(src,SC_BLIND,2*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  1198. +		sc_start(src,src,SC_BLIND,2*skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv));
  1199.  		break;
  1200.  	case HFLI_SBR44:	//[orn]
  1201.  	case HVAN_EXPLOSION:
  1202. @@ -1882,7 +1882,7 @@
  1203.  
  1204.  	if(sd && (sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR &&
  1205.  		rnd()%10000 < battle_config.sg_miracle_skill_ratio)	//SG_MIRACLE [Komurka]
  1206. -		sc_start(src,SC_MIRACLE,100,1,battle_config.sg_miracle_skill_duration);
  1207. +		sc_start(src,src,SC_MIRACLE,100,1,battle_config.sg_miracle_skill_duration);
  1208.  
  1209.  	if(sd && skill_id && attack_type&BF_MAGIC && status_isdead(bl) &&
  1210.  	 	!(skill_get_inf(skill_id)&(INF_GROUND_SKILL|INF_SELF_SKILL)) &&
  1211. @@ -2038,7 +2038,7 @@
  1212.   - flag is a BCT_ flag to indicate which type of adjustment should be used
  1213.     (BCT_ENEMY/BCT_PARTY/BCT_SELF) are the valid values.
  1214.  --------------------------------------------------------------------------*/
  1215. -int skill_break_equip (struct block_list *bl, unsigned short where, int rate, int flag)
  1216. +int skill_break_equip (struct block_list *src,struct block_list *bl, unsigned short where, int rate, int flag)
  1217.  {
  1218.  	const int where_list[4]     = {EQP_WEAPON, EQP_ARMOR, EQP_SHIELD, EQP_HELM};
  1219.  	const enum sc_type scatk[4] = {SC_STRIPWEAPON, SC_STRIPARMOR, SC_STRIPSHIELD, SC_STRIPHELM};
  1220. @@ -2085,7 +2085,7 @@
  1221.  			else if (rnd()%10000 >= rate)
  1222.  				where&=~where_list[i];
  1223.  			else if (!sd && !(status_get_mode(bl)&MD_BOSS)) //Cause Strip effect.
  1224. -				sc_start(bl,scatk[i],100,0,skill_get_time(status_sc2skill(scatk[i]),1));
  1225. +				sc_start(src,bl,scatk[i],100,0,skill_get_time(status_sc2skill(scatk[i]),1));
  1226.  		}
  1227.  	}
  1228.  	if (!where) //Nothing to break.
  1229. @@ -2129,7 +2129,7 @@
  1230.  	return where; //Return list of pieces broken.
  1231.  }
  1232.  
  1233. -int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int lv, int time)
  1234. +int skill_strip_equip(struct block_list *src, struct block_list *bl, unsigned short where, int rate, int lv, int time)
  1235.  {
  1236.  	struct status_change *sc;
  1237.  	const int pos[5]             = {EQP_WEAPON, EQP_SHIELD, EQP_ARMOR, EQP_HELM, EQP_ACC};
  1238. @@ -2151,7 +2151,7 @@
  1239.  	if (!where) return 0;
  1240.  
  1241.  	for (i = 0; i < ARRAYLENGTH(pos); i++) {
  1242. -		if (where&pos[i] && !sc_start(bl, sc_atk[i], 100, lv, time))
  1243. +		if (where&pos[i] && !sc_start(src,bl, sc_atk[i], 100, lv, time))
  1244.  			where&=~pos[i];
  1245.  	}
  1246.  	return where?1:0;
  1247. @@ -2461,7 +2461,7 @@
  1248.  				if( (tstatus->race == RC_BRUTE || tstatus->race == RC_INSECT) && pc_checkskill(sd, HT_POWER))
  1249.  				{
  1250.  					//TODO: This code was taken from Triple Blows, is this even how it should be? [Skotlex]
  1251. -					sc_start2(src,SC_COMBO,100,HT_POWER,bl->id,2000);
  1252. +					sc_start2(src,src,SC_COMBO,100,HT_POWER,bl->id,2000);
  1253.  					clif_combo_delay(src,2000);
  1254.  				}
  1255.  				break;
  1256. @@ -2475,7 +2475,7 @@
  1257.  			case SL_STIN:
  1258.  			case SL_STUN:
  1259.  				if (skill_lv >= 7 && !sd->sc.data[SC_SMA])
  1260. -					sc_start(src,SC_SMA,100,skill_lv,skill_get_time(SL_SMA, skill_lv));
  1261. +					sc_start(src,src,SC_SMA,100,skill_lv,skill_get_time(SL_SMA, skill_lv));
  1262.  				break;
  1263.  			case GS_FULLBUSTER:
  1264.  				//Can't attack nor use items until skill's delay expires. [Skotlex]
  1265. @@ -2493,7 +2493,7 @@
  1266.  		if (flag) { //Possible to chain
  1267.  			flag = DIFF_TICK(sd->ud.canact_tick, tick);
  1268.  			if (flag < 1) flag = 1;
  1269. -			sc_start2(src,SC_COMBO,100,skill_id,bl->id,flag);
  1270. +			sc_start2(src,src,SC_COMBO,100,skill_id,bl->id,flag);
  1271.  			clif_combo_delay(src, flag);
  1272.  		}
  1273.  	}
  1274. @@ -2706,7 +2706,7 @@
  1275.  	}
  1276.  	// Hell Inferno burning status only starts if Fire part hits.
  1277.  	if( skill_id == WL_HELLINFERNO && dmg.damage > 0 )
  1278. -		sc_start4(bl,SC_BURNING,55+5*skill_lv,skill_lv,1000,src->id,0,skill_get_time(skill_id,skill_lv));
  1279. +		sc_start4(src,bl,SC_BURNING,55+5*skill_lv,skill_lv,1000,src->id,0,skill_get_time(skill_id,skill_lv));
  1280.  	// Apply knock back chance in SC_TRIANGLESHOT skill.
  1281.  	else if( skill_id == SC_TRIANGLESHOT && rnd()%100 > (1 + skill_lv) )
  1282.  		dmg.blewcount = 0;
  1283. @@ -2845,12 +2845,12 @@
  1284.  		 **/
  1285.  		switch( skill_id ) {
  1286.  			case RK_CRUSHSTRIKE:
  1287. -				skill_break_equip(src,EQP_WEAPON,2000,BCT_SELF); // 20% chance to destroy the weapon.
  1288. +				skill_break_equip(src,src,EQP_WEAPON,2000,BCT_SELF); // 20% chance to destroy the weapon.
  1289.  				break;
  1290.  			case GC_VENOMPRESSURE: {
  1291.  					struct status_change *ssc = status_get_sc(src);
  1292.  					if( ssc && ssc->data[SC_POISONINGWEAPON] && rnd()%100 < 70 + 5*skill_lv ) {
  1293. -						sc_start(bl,ssc->data[SC_POISONINGWEAPON]->val2,100,ssc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON, 1));
  1294. +						sc_start(src,bl,ssc->data[SC_POISONINGWEAPON]->val2,100,ssc->data[SC_POISONINGWEAPON]->val1,skill_get_time2(GC_POISONINGWEAPON, 1));
  1295.  						status_change_end(src,SC_POISONINGWEAPON,INVALID_TIMER);
  1296.  						clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  1297.  					}
  1298. @@ -3064,7 +3064,7 @@
  1299.  		}
  1300.  		return 0;
  1301.  	}
  1302. -	sc_start4(&sd->bl, SC_GUILDAURA,100, 1, id, strvit, agidex, 1000);
  1303. +	sc_start4(NULL,&sd->bl, SC_GUILDAURA,100, 1, id, strvit, agidex, 1000);
  1304.  	return 1;
  1305.  }
  1306.  
  1307. @@ -3319,7 +3319,7 @@
  1308.  							if( j )
  1309.  							{
  1310.  								i = applyeffects[rnd()%j];
  1311. -								status_change_start(target, i, 10000, skl->skill_lv,
  1312. +								status_change_start(src, target, i, 10000, skl->skill_lv,
  1313.  									(i == SC_BURNING ? 1000 : (i == SC_BLEEDING ? src->id : 0)),
  1314.  									(i == SC_BURNING ? src->id : 0),
  1315.  									0, skill_get_time(WL_TETRAVORTEX,skl->skill_lv), 0);
  1316. @@ -3803,7 +3803,7 @@
  1317.  				status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
  1318.  				status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
  1319.  #ifdef RENEWAL
  1320. -				sc_start(src,SC_EXTREMITYFIST2,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1321. +				sc_start(src,src,SC_EXTREMITYFIST2,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1322.  #endif
  1323.  			}else
  1324.  				status_set_hp(src,
  1325. @@ -4047,7 +4047,7 @@
  1326.  
  1327.  	case NPC_MAGICALATTACK:
  1328.  		skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag);
  1329. -		sc_start(src,status_skill2sc(skill_id),100,skill_lv,skill_get_time(skill_id,skill_lv));
  1330. +		sc_start(src,src,status_skill2sc(skill_id),100,skill_lv,skill_get_time(skill_id,skill_lv));
  1331.  		break;
  1332.  
  1333.  	case HVAN_CAPRICE: //[blackhole89]
  1334. @@ -4112,7 +4112,7 @@
  1335.  	case SL_STIN:
  1336.  	case SL_STUN:
  1337.  		if (sd && !battle_config.allow_es_magic_pc && bl->type != BL_MOB) {
  1338. -			status_change_start(src,SC_STUN,10000,skill_lv,0,0,0,500,10);
  1339. +			status_change_start(src, src,SC_STUN,10000,skill_lv,0,0,0,500,10);
  1340.  			clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  1341.  			break;
  1342.  		}
  1343. @@ -4187,7 +4187,7 @@
  1344.  
  1345.  	case NJ_KASUMIKIRI:
  1346.  		if (skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag) > 0)
  1347. -			sc_start(src,SC_HIDING,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1348. +			sc_start(src,src,SC_HIDING,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1349.  		break;
  1350.  	case NJ_KIRIKAGE:
  1351.  		if( !map_flag_gvg(src->m) && !map[src->m].flag.battleground )
  1352. @@ -4447,7 +4447,7 @@
  1353.  		break;
  1354.  	case WL_FROSTMISTY:
  1355.  		// Causes Freezing status through walls.
  1356. -		sc_start(bl,status_skill2sc(skill_id),20+12*skill_lv+(sd ? sd->status.job_level : 50)/5,skill_lv,skill_get_time(skill_id,skill_lv));
  1357. +		sc_start(src,bl,status_skill2sc(skill_id),20+12*skill_lv+(sd ? sd->status.job_level : 50)/5,skill_lv,skill_get_time(skill_id,skill_lv));
  1358.  		// Doesn't deal damage through non-shootable walls.
  1359.  		if( path_search(NULL,src->m,src->x,src->y,bl->x,bl->y,1,CELL_CHKWALL) )
  1360.  			skill_attack(BF_MAGIC,src,src,bl,skill_id,skill_lv,tick,flag|SD_ANIMATION);
  1361. @@ -4510,7 +4510,7 @@
  1362.  		if( flag&1 )
  1363.  		{ //TODO: Need a confirmation if the other type of hidden status is included to be scanned. [Jobbie]
  1364.  			if( rnd()%100 < 50 )
  1365. -				sc_start(bl, SC_INFRAREDSCAN, 10000, skill_lv, skill_get_time(skill_id, skill_lv));
  1366. +				sc_start(src,bl, SC_INFRAREDSCAN, 10000, skill_lv, skill_get_time(skill_id, skill_lv));
  1367.  			status_change_end(bl, SC_HIDING, INVALID_TIMER);
  1368.  			status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
  1369.  			status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER); // Need confirm it.
  1370. @@ -4524,7 +4524,7 @@
  1371.  		break;
  1372.  
  1373.  	case NC_MAGNETICFIELD:
  1374. -		sc_start2(bl,SC_MAGNETICFIELD,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv));
  1375. +		sc_start2(src,bl,SC_MAGNETICFIELD,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv));
  1376.  		break;
  1377.  	case SC_FATALMENACE:
  1378.  		if( flag&1 )
  1379. @@ -4689,8 +4689,8 @@
  1380.  			if( rnd()%100 < 50 )
  1381.  				skill_attack(skill_get_type(skill_id),src,src,bl,skill_id,skill_lv,tick,flag);
  1382.  			else {
  1383. -				sc_start(src,type2,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1384. -				sc_start(battle_get_master(src),type,100,ele->bl.id,skill_get_time(skill_id,skill_lv));
  1385. +				sc_start(src,src,type2,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1386. +				sc_start(src,battle_get_master(src),type,100,ele->bl.id,skill_get_time(skill_id,skill_lv));
  1387.  			}
  1388.  			clif_skill_nodamage(src,src,skill_id,skill_lv,1);
  1389.  		}
  1390. @@ -4764,9 +4764,9 @@
  1391.  			    duration = (status_get_str(src)*2 - status_get_str(bl))/10;//custom need real formula
  1392.  			    hom_delspiritball(hd,skill_id==MH_EQC?2:1,0); //only EQC consume 2 in grp 2
  1393.  			    if(skill_id==MH_TINDER_BREAKER)
  1394. -				sc_start2(src,status_skill2sc(skill_id),100,skill_lv,bl->id,duration);
  1395. +				sc_start2(src,src,status_skill2sc(skill_id),100,skill_lv,bl->id,duration);
  1396.  			    else
  1397. -				sc_start(bl,status_skill2sc(skill_id),100,skill_lv,duration);
  1398. +				sc_start(src,bl,status_skill2sc(skill_id),100,skill_lv,duration);
  1399.  			    skill_attack(skill_get_type(skill_id),src,src,tbl,skill_id,skill_lv,tick,flag);
  1400.  			    //TODO add bonus for dmg SP ? on battle
  1401.  			    break;
  1402. @@ -5063,12 +5063,12 @@
  1403.  	case AL_DECAGI:
  1404.  	case MER_DECAGI:
  1405.  		clif_skill_nodamage (src, bl, skill_id, skill_lv,
  1406. -			sc_start(bl, type, (50 + skill_lv * 3 + (status_get_lv(src) + sstatus->int_)/5), skill_lv, skill_get_time(skill_id,skill_lv)));
  1407. +			sc_start(src,bl, type, (50 + skill_lv * 3 + (status_get_lv(src) + sstatus->int_)/5), skill_lv, skill_get_time(skill_id,skill_lv)));
  1408.  		break;
  1409.  
  1410.  	case AL_CRUCIS:
  1411.  		if (flag&1)
  1412. -			sc_start(bl,type, 23+skill_lv*4 +status_get_lv(src) -status_get_lv(bl), skill_lv,skill_get_time(skill_id,skill_lv));
  1413. +			sc_start(src,bl,type, 23+skill_lv*4 +status_get_lv(src) -status_get_lv(bl), skill_lv,skill_get_time(skill_id,skill_lv));
  1414.  		else {
  1415.  			map_foreachinrange(skill_area_sub, src, skill_get_splash(skill_id, skill_lv), BL_CHAR,
  1416.  				src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
  1417. @@ -5081,7 +5081,7 @@
  1418.  		if( tsce )
  1419.  			status_change_end(bl,type, INVALID_TIMER);
  1420.  		else
  1421. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1422. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1423.  		clif_skill_nodamage (src, bl, skill_id, skill_lv, 1);
  1424.  		break;
  1425.  
  1426. @@ -5138,7 +5138,7 @@
  1427.  
  1428.  	case SA_COMA:
  1429.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1430. -			sc_start(bl,type,100,skill_lv,skill_get_time2(skill_id,skill_lv)));
  1431. +			sc_start(src,bl,type,100,skill_lv,skill_get_time2(skill_id,skill_lv)));
  1432.  		break;
  1433.  	case SA_FULLRECOVERY:
  1434.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  1435. @@ -5210,7 +5210,7 @@
  1436.  		break;
  1437.  	case SA_REVERSEORCISH:
  1438.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1439. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv)));
  1440. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv)));
  1441.  		break;
  1442.  	case SA_FORTUNE:
  1443.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  1444. @@ -5234,7 +5234,7 @@
  1445.  			}
  1446.  		}
  1447.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1448. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1449. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1450.  		break;
  1451.  
  1452.  	case CG_MARIONETTE:
  1453. @@ -5252,8 +5252,8 @@
  1454.  			{
  1455.  				if( !sc->data[SC_MARIONETTE] && !tsc->data[SC_MARIONETTE2] )
  1456.  				{
  1457. -					sc_start(src,SC_MARIONETTE,100,bl->id,skill_get_time(skill_id,skill_lv));
  1458. -					sc_start(bl,SC_MARIONETTE2,100,src->id,skill_get_time(skill_id,skill_lv));
  1459. +					sc_start(src,src,SC_MARIONETTE,100,bl->id,skill_get_time(skill_id,skill_lv));
  1460. +					sc_start(src,bl,SC_MARIONETTE2,100,src->id,skill_get_time(skill_id,skill_lv));
  1461.  					clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  1462.  				}
  1463.  				else
  1464. @@ -5277,7 +5277,7 @@
  1465.  
  1466.  	case RG_CLOSECONFINE:
  1467.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1468. -			sc_start4(bl,type,100,skill_lv,src->id,0,0,skill_get_time(skill_id,skill_lv)));
  1469. +			sc_start4(src,bl,type,100,skill_lv,src->id,0,0,skill_get_time(skill_id,skill_lv)));
  1470.  		break;
  1471.  	case SA_FLAMELAUNCHER:	// added failure chance and chance to break weapon if turned on [Valaris]
  1472.  	case SA_FROSTWEAPON:
  1473. @@ -5302,10 +5302,10 @@
  1474.  			}
  1475.  		}
  1476.  		// 100% success rate at lv4 & 5, but lasts longer at lv5
  1477. -		if(!clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(bl,type,(60+skill_lv*10),skill_lv, skill_get_time(skill_id,skill_lv)))) {
  1478. +		if(!clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,type,(60+skill_lv*10),skill_lv, skill_get_time(skill_id,skill_lv)))) {
  1479.  			if (sd)
  1480.  				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  1481. -			if (skill_break_equip(bl, EQP_WEAPON, 10000, BCT_PARTY) && sd && sd != dstsd)
  1482. +			if (skill_break_equip(src,bl, EQP_WEAPON, 10000, BCT_PARTY) && sd && sd != dstsd)
  1483.  				clif_displaymessage(sd->fd, msg_txt(669));
  1484.  		}
  1485.  		break;
  1486. @@ -5316,12 +5316,12 @@
  1487.  			break;
  1488.  		}
  1489.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1490. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1491. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1492.  		break;
  1493.  
  1494.  	case ITEM_ENCHANTARMS:
  1495.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1496. -			sc_start2(bl,type,100,skill_lv,
  1497. +			sc_start2(src,bl,type,100,skill_lv,
  1498.  				skill_get_ele(skill_id,skill_lv), skill_get_time(skill_id,skill_lv)));
  1499.  		break;
  1500.  
  1501. @@ -5336,16 +5336,16 @@
  1502.  			case ELE_HOLY  : type = SC_ASPERSIO;     break;
  1503.  		}
  1504.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1505. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1506. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1507.  
  1508. -		sc_start(bl,SC_SEVENWIND,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1509. +		sc_start(src,bl,SC_SEVENWIND,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1510.  
  1511.  		break;
  1512.  
  1513.  	case PR_KYRIE:
  1514.  	case MER_KYRIE:
  1515.  		clif_skill_nodamage(bl,bl,skill_id,skill_lv,
  1516. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1517. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1518.  		break;
  1519.  	//Passive Magnum, should had been casted on yourself.
  1520.  	case SM_MAGNUM:
  1521. @@ -5355,7 +5355,7 @@
  1522.  			src,skill_id,skill_lv,tick, flag|BCT_ENEMY|1, skill_castend_damage_id);
  1523.  		clif_skill_nodamage (src,src,skill_id,skill_lv,1);
  1524.  		// Initiate 10% of your damage becomes fire element.
  1525. -		sc_start4(src,SC_WATK_ELEMENT,100,3,20,0,0,skill_get_time2(skill_id, skill_lv));
  1526. +		sc_start4(src,src,SC_WATK_ELEMENT,100,3,20,0,0,skill_get_time2(skill_id, skill_lv));
  1527.  		if( sd )
  1528.  			skill_blockpc_start(sd, skill_id, skill_get_time(skill_id, skill_lv));
  1529.  		else if( bl->type == BL_MER )
  1530. @@ -5452,7 +5452,7 @@
  1531.  	case GN_CARTBOOST:
  1532.  	case KO_MEIKYOUSISUI:
  1533.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1534. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1535. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1536.  		break;
  1537.  
  1538.  	case SO_STRIKING:
  1539. @@ -5461,7 +5461,7 @@
  1540.  			bonus += (pc_checkskill(sd, SA_FLAMELAUNCHER)+pc_checkskill(sd, SA_FROSTWEAPON)+pc_checkskill(sd, SA_LIGHTNINGLOADER)+pc_checkskill(sd, SA_SEISMICWEAPON))*5;
  1541.  			clif_skill_nodamage( src, bl, skill_id, skill_lv,
  1542.  								battle_check_target(src,bl,BCT_PARTY) ?
  1543. -								sc_start2(bl, type, 100, skill_lv, bonus, skill_get_time(skill_id,skill_lv)) :
  1544. +								sc_start2(src,bl, type, 100, skill_lv, bonus, skill_get_time(skill_id,skill_lv)) :
  1545.  								0
  1546.  				);
  1547.  		}
  1548. @@ -5469,15 +5469,15 @@
  1549.  
  1550.  	case NPC_STOP:
  1551.  		if( clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1552. -			sc_start2(bl,type,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv)) ) )
  1553. -			sc_start2(src,type,100,skill_lv,bl->id,skill_get_time(skill_id,skill_lv));
  1554. +			sc_start2(src,bl,type,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv)) ) )
  1555. +			sc_start2(src,src,type,100,skill_lv,bl->id,skill_get_time(skill_id,skill_lv));
  1556.  		break;
  1557.  	case HP_ASSUMPTIO:
  1558.  		if( sd && dstmd )
  1559.  			clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  1560.  		else
  1561.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1562. -				sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1563. +				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1564.  		break;
  1565.  	case MG_SIGHT:
  1566.  	case MER_SIGHT:
  1567. @@ -5487,17 +5487,17 @@
  1568.  	case NPC_STONESKIN:
  1569.  	case NPC_ANTIMAGIC:
  1570.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1571. -			sc_start2(bl,type,100,skill_lv,skill_id,skill_get_time(skill_id,skill_lv)));
  1572. +			sc_start2(src,bl,type,100,skill_lv,skill_id,skill_get_time(skill_id,skill_lv)));
  1573.  		break;
  1574.  	case HLIF_AVOID:
  1575.  	case HAMI_DEFENCE:
  1576.  		i = skill_get_time(skill_id,skill_lv);
  1577. -		clif_skill_nodamage(bl,bl,skill_id,skill_lv,sc_start(bl,type,100,skill_lv,i)); // Master
  1578. -		clif_skill_nodamage(src,src,skill_id,skill_lv,sc_start(src,type,100,skill_lv,i)); // Homunc
  1579. +		clif_skill_nodamage(bl,bl,skill_id,skill_lv,sc_start(src,bl,type,100,skill_lv,i)); // Master
  1580. +		clif_skill_nodamage(src,src,skill_id,skill_lv,sc_start(src,src,type,100,skill_lv,i)); // Homunc
  1581.  		break;
  1582.  	case NJ_BUNSINJYUTSU:
  1583.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1584. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1585. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1586.  		status_change_end(bl, SC_NEN, INVALID_TIMER);
  1587.  		break;
  1588.  /* Was modified to only affect targetted char.	[Skotlex]
  1589. @@ -5516,7 +5516,7 @@
  1590.  */
  1591.  	case SM_ENDURE:
  1592.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1593. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1594. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1595.  		if (sd)
  1596.  			skill_blockpc_start (sd, skill_id, skill_get_time2(skill_id,skill_lv));
  1597.  		break;
  1598. @@ -5537,12 +5537,12 @@
  1599.  			}
  1600.  		}
  1601.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1602. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1603. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1604.  		break;
  1605.  
  1606.  	case LK_TENSIONRELAX:
  1607.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1608. -			sc_start4(bl,type,100,skill_lv,0,0,skill_get_time2(skill_id,skill_lv),
  1609. +			sc_start4(src,bl,type,100,skill_lv,0,0,skill_get_time2(skill_id,skill_lv),
  1610.  				skill_get_time(skill_id,skill_lv)));
  1611.  		break;
  1612.  
  1613. @@ -5574,7 +5574,7 @@
  1614.  	case AC_CONCENTRATION:
  1615.  		{
  1616.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1617. -				sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1618. +				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1619.  			map_foreachinrange( status_change_timer_sub, src,
  1620.  				skill_get_splash(skill_id, skill_lv), BL_CHAR,
  1621.  				src,NULL,type,tick);
  1622. @@ -5591,7 +5591,7 @@
  1623.  		}
  1624.  		//TODO: How much does base level affects? Dummy value of 1% per level difference used. [Skotlex]
  1625.  		clif_skill_nodamage(src,bl,skill_id == SM_SELFPROVOKE ? SM_PROVOKE : skill_id,skill_lv,
  1626. -			(i = sc_start(bl,type, skill_id == SM_SELFPROVOKE ? 100:( 50 + 3*skill_lv + status_get_lv(src) - status_get_lv(bl)), skill_lv, skill_get_time(skill_id,skill_lv))));
  1627. +			(i = sc_start(src,bl,type, skill_id == SM_SELFPROVOKE ? 100:( 50 + 3*skill_lv + status_get_lv(src) - status_get_lv(bl)), skill_lv, skill_get_time(skill_id,skill_lv))));
  1628.  		if( !i )
  1629.  		{
  1630.  			if( sd )
  1631. @@ -5664,7 +5664,7 @@
  1632.  				mer->devotion_flag = 1; // Mercenary Devoting Owner
  1633.  
  1634.  			clif_skill_nodamage(src, bl, skill_id, skill_lv,
  1635. -				sc_start4(bl, type, 100, src->id, i, skill_get_range2(src,skill_id,skill_lv),0, skill_get_time2(skill_id, skill_lv)));
  1636. +				sc_start4(src,bl, type, 100, src->id, i, skill_get_range2(src,skill_id,skill_lv),0, skill_get_time2(skill_id, skill_lv)));
  1637.  			clif_devotion(src, NULL);
  1638.  		}
  1639.  		break;
  1640. @@ -5742,7 +5742,7 @@
  1641.  
  1642.  	case BS_HAMMERFALL:
  1643.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1644. -			sc_start(bl,SC_STUN,(20 + 10 * skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)));
  1645. +			sc_start(src,bl,SC_STUN,(20 + 10 * skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)));
  1646.  		break;
  1647.  	case RG_RAID:
  1648.  		skill_area_temp[1] = 0;
  1649. @@ -5838,18 +5838,18 @@
  1650.  	case CASH_INCAGI:
  1651.  	case CASH_ASSUMPTIO:
  1652.  		if( sd == NULL || sd->status.party_id == 0 || (flag & 1) )
  1653. -			clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1654. +			clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1655.  		else if( sd )
  1656.  			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
  1657.  		break;
  1658.  	case MER_MAGNIFICAT:
  1659.  		if( mer != NULL )
  1660.  		{
  1661. -			clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1662. +			clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1663.  			if( mer->master && mer->master->status.party_id != 0 && !(flag&1) )
  1664.  				party_foreachsamemap(skill_area_sub, mer->master, skill_get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
  1665.  			else if( mer->master && !(flag&1) )
  1666. -				clif_skill_nodamage(src, &mer->master->bl, skill_id, skill_lv, sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1667. +				clif_skill_nodamage(src, &mer->master->bl, skill_id, skill_lv, sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1668.  		}
  1669.  		break;
  1670.  
  1671. @@ -5859,7 +5859,7 @@
  1672.  	case BS_OVERTHRUST:
  1673.  		if (sd == NULL || sd->status.party_id == 0 || (flag & 1)) {
  1674.  			clif_skill_nodamage(bl,bl,skill_id,skill_lv,
  1675. -				sc_start2(bl,type,100,skill_lv,(src == bl)? 1:0,skill_get_time(skill_id,skill_lv)));
  1676. +				sc_start2(src,bl,type,100,skill_lv,(src == bl)? 1:0,skill_get_time(skill_id,skill_lv)));
  1677.  		} else if (sd) {
  1678.  			party_foreachsamemap(skill_area_sub,
  1679.  				sd,skill_get_splash(skill_id, skill_lv),
  1680. @@ -5888,7 +5888,7 @@
  1681.  			map_freeblock_unlock();
  1682.  			return 0;
  1683.  		}
  1684. -		clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1685. +		clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1686.  		break;
  1687.  	case SL_KAITE:
  1688.  	case SL_KAAHI:
  1689. @@ -5902,20 +5902,20 @@
  1690.  				dstsd->status.char_id == sd->status.partner_id ||
  1691.  				dstsd->status.char_id == sd->status.child
  1692.  			)) {
  1693. -				status_change_start(src,SC_STUN,10000,skill_lv,0,0,0,500,8);
  1694. +				status_change_start(src, src,SC_STUN,10000,skill_lv,0,0,0,500,8);
  1695.  				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  1696.  				break;
  1697.  			}
  1698.  		}
  1699.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1700. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv)));
  1701. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv)));
  1702.  		break;
  1703.  	case SM_AUTOBERSERK:
  1704.  	case MER_AUTOBERSERK:
  1705.  		if( tsce )
  1706.  			i = status_change_end(bl, type, INVALID_TIMER);
  1707.  		else
  1708. -			i = sc_start(bl,type,100,skill_lv,60000);
  1709. +			i = sc_start(src,bl,type,100,skill_lv,60000);
  1710.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,i);
  1711.  		break;
  1712.  	case TF_HIDING:
  1713. @@ -5932,7 +5932,7 @@
  1714.  			map_freeblock_unlock();
  1715.  			return 0;
  1716.  		}
  1717. -		clif_skill_nodamage(src,bl,skill_id,-1,sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1718. +		clif_skill_nodamage(src,bl,skill_id,-1,sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1719.  		break;
  1720.  	case TK_RUN:
  1721.  		if (tsce)
  1722. @@ -5941,7 +5941,7 @@
  1723.  			map_freeblock_unlock();
  1724.  			return 0;
  1725.  		}
  1726. -		clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start4(bl,type,100,skill_lv,unit_getdir(bl),0,0,0));
  1727. +		clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start4(src,bl,type,100,skill_lv,unit_getdir(bl),0,0,0));
  1728.  		if (sd) // If the client receives a skill-use packet inmediately before a walkok packet, it will discard the walk packet! [Skotlex]
  1729.  			clif_walkok(sd); // So aegis has to resend the walk ok.
  1730.  		break;
  1731. @@ -5960,7 +5960,7 @@
  1732.  			return 0;
  1733.  		}
  1734.  	case RA_CAMOUFLAGE:
  1735. -		i = sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1736. +		i = sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1737.  		if( i )
  1738.  			clif_skill_nodamage(src,bl,skill_id,( skill_id == LG_FORCEOFVANGUARD ) ? skill_lv : -1,i);
  1739.  		else if( sd )
  1740. @@ -5989,19 +5989,19 @@
  1741.  		break;
  1742.  
  1743.  	case BA_PANGVOICE:
  1744. -		clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(bl,SC_CONFUSION,50,7,skill_get_time(skill_id,skill_lv)));
  1745. +		clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,SC_CONFUSION,50,7,skill_get_time(skill_id,skill_lv)));
  1746.  		break;
  1747.  
  1748.  	case DC_WINKCHARM:
  1749.  		if( dstsd )
  1750. -			clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(bl,SC_CONFUSION,30,7,skill_get_time2(skill_id,skill_lv)));
  1751. +			clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start(src,bl,SC_CONFUSION,30,7,skill_get_time2(skill_id,skill_lv)));
  1752.  		else
  1753.  		if( dstmd )
  1754.  		{
  1755.  			if( status_get_lv(src) > status_get_lv(bl)
  1756.  			&&  (tstatus->race == RC_DEMON || tstatus->race == RC_DEMIHUMAN || tstatus->race == RC_ANGEL)
  1757.  			&&  !(tstatus->mode&MD_BOSS) )
  1758. -				clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start2(bl,type,70,skill_lv,src->id,skill_get_time(skill_id,skill_lv)));
  1759. +				clif_skill_nodamage(src,bl,skill_id,skill_lv, sc_start2(src,bl,type,70,skill_lv,src->id,skill_get_time(skill_id,skill_lv)));
  1760.  			else
  1761.  			{
  1762.  				clif_skill_nodamage(src,bl,skill_id,skill_lv,0);
  1763. @@ -6051,7 +6051,7 @@
  1764.  				if (sd) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  1765.  				break;
  1766.  			}
  1767. -			if (sc_start4(bl,SC_STONE,(skill_lv*4+20)+brate,
  1768. +			if (sc_start4(src,bl,SC_STONE,(skill_lv*4+20)+brate,
  1769.  				skill_lv, 0, 0, skill_get_time(skill_id, skill_lv),
  1770.  				skill_get_time2(skill_id,skill_lv)))
  1771.  					clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  1772. @@ -6104,7 +6104,7 @@
  1773.  		//Is this equation really right? It looks so... special.
  1774.  		if(battle_check_undead(tstatus->race,tstatus->def_ele))
  1775.  		{
  1776. -			status_change_start(bl, SC_BLIND,
  1777. +			status_change_start(src, bl, SC_BLIND,
  1778.  				100*(100-(tstatus->int_/2+tstatus->vit/3+tstatus->luk/10)),
  1779.  				1,0,0,0,
  1780.  				skill_get_time2(skill_id, skill_lv) * (100-(tstatus->int_+tstatus->vit)/2)/100,0);
  1781. @@ -6335,7 +6335,7 @@
  1782.  		}
  1783.  
  1784.  		//Attempts to strip at rate i and duration d
  1785. -		if( (i = skill_strip_equip(bl, location, i, skill_lv, d)) || (skill_id != ST_FULLSTRIP && skill_id != GC_WEAPONCRUSH ) )
  1786. +		if( (i = skill_strip_equip(src,bl, location, i, skill_lv, d)) || (skill_id != ST_FULLSTRIP && skill_id != GC_WEAPONCRUSH ) )
  1787.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,i);
  1788.  
  1789.  		//Nothing stripped.
  1790. @@ -6460,7 +6460,7 @@
  1791.  			}
  1792.  
  1793.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1794. -				sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1795. +				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1796.  		}
  1797.  		break;
  1798.  	case AM_TWILIGHT1:
  1799. @@ -6636,7 +6636,7 @@
  1800.  		if(sd) {
  1801.  			int sp = skill_get_sp(sd->skill_id_old,sd->skill_lv_old);
  1802.  			if( skill_id == SO_SPELLFIST ){
  1803. -				sc_start4(src,type,100,skill_lv+1,skill_lv,sd->skill_id_old,sd->skill_lv_old,skill_get_time(skill_id,skill_lv));
  1804. +				sc_start4(src,src,type,100,skill_lv+1,skill_lv,sd->skill_id_old,sd->skill_lv_old,skill_get_time(skill_id,skill_lv));
  1805.  				sd->skill_id_old = sd->skill_lv_old = 0;
  1806.  				break;
  1807.  			}
  1808. @@ -6691,7 +6691,7 @@
  1809.  		break;
  1810.  	case SA_MAGICROD:
  1811.  		clif_skill_nodamage(src,src,SA_MAGICROD,skill_lv,1);
  1812. -		sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1813. +		sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1814.  		break;
  1815.  	case SA_AUTOSPELL:
  1816.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  1817. @@ -6725,7 +6725,7 @@
  1818.  				maxlv = 3;
  1819.  			}
  1820.  			if(spellid > 0)
  1821. -				sc_start4(src,SC_AUTOSPELL,100,skill_lv,spellid,maxlv,0,
  1822. +				sc_start4(src,src,SC_AUTOSPELL,100,skill_lv,spellid,maxlv,0,
  1823.  					skill_get_time(SA_AUTOSPELL,skill_lv));
  1824.  		}
  1825.  		break;
  1826. @@ -6756,7 +6756,7 @@
  1827.  	case NPC_CHANGEDARKNESS:
  1828.  	case NPC_CHANGETELEKINESIS:
  1829.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1830. -			sc_start2(bl, type, 100, skill_lv, skill_get_ele(skill_id,skill_lv),
  1831. +			sc_start2(src,bl, type, 100, skill_lv, skill_get_ele(skill_id,skill_lv),
  1832.  				skill_get_time(skill_id, skill_lv)));
  1833.  		break;
  1834.  	case NPC_CHANGEUNDEAD:
  1835. @@ -6764,7 +6764,7 @@
  1836.  		//TO-DO This is ugly, fix it
  1837.  		if(tstatus->def_ele==ELE_UNDEAD || tstatus->def_ele==ELE_DARK) break;
  1838.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1839. -			sc_start2(bl, type, 100, skill_lv, skill_get_ele(skill_id,skill_lv),
  1840. +			sc_start2(src,bl, type, 100, skill_lv, skill_get_ele(skill_id,skill_lv),
  1841.  				skill_get_time(skill_id, skill_lv)));
  1842.  		break;
  1843.  
  1844. @@ -6779,7 +6779,7 @@
  1845.  			int skill_time = skill_get_time(skill_id,skill_lv);
  1846.  			struct unit_data *ud = unit_bl2ud(bl);
  1847.  			if (clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1848. -					sc_start(bl,type,100,skill_lv,skill_time))
  1849. +					sc_start(src,bl,type,100,skill_lv,skill_time))
  1850.  			&& ud) {	//Disable attacking/acting/moving for skill's duration.
  1851.  				ud->attackabletime =
  1852.  				ud->canact_tick =
  1853. @@ -6791,18 +6791,18 @@
  1854.  	case NPC_REBIRTH:
  1855.  		if( md && md->state.rebirth )
  1856.  			break; // only works once
  1857. -		sc_start(bl,type,100,skill_lv,-1);
  1858. +		sc_start(src,bl,type,100,skill_lv,-1);
  1859.  		break;
  1860.  
  1861.  	case NPC_DARKBLESSING:
  1862.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1863. -			sc_start2(bl,type,(50+skill_lv*5),skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv)));
  1864. +			sc_start2(src,bl,type,(50+skill_lv*5),skill_lv,skill_lv,skill_get_time2(skill_id,skill_lv)));
  1865.  		break;
  1866.  
  1867.  	case NPC_LICK:
  1868.  		status_zap(bl, 0, 100);
  1869.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1870. -			sc_start(bl,type,(skill_lv*5),skill_lv,skill_get_time2(skill_id,skill_lv)));
  1871. +			sc_start(src,bl,type,(skill_lv*5),skill_lv,skill_get_time2(skill_id,skill_lv)));
  1872.  		break;
  1873.  
  1874.  	case NPC_SUICIDE:
  1875. @@ -6834,7 +6834,7 @@
  1876.  			if (i > SC_ASPDPOTION3)
  1877.  				i = SC_ASPDPOTION3;
  1878.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1879. -				sc_start(bl,(sc_type)i,100,skill_lv,skill_lv * 60000));
  1880. +				sc_start(src,bl,(sc_type)i,100,skill_lv,skill_lv * 60000));
  1881.  		}
  1882.  		break;
  1883.  
  1884. @@ -6890,7 +6890,7 @@
  1885.  				mob_unlocktarget(md,tick);
  1886.  
  1887.  			if(md->db->skill[md->skill_idx].val[1] || md->db->skill[md->skill_idx].val[2])
  1888. -				sc_start4(src, type, 100, skill_lv,
  1889. +				sc_start4(src,src, type, 100, skill_lv,
  1890.  					md->db->skill[md->skill_idx].val[1],
  1891.  					md->db->skill[md->skill_idx].val[2],
  1892.  					md->db->skill[md->skill_idx].val[3],
  1893. @@ -6899,21 +6899,21 @@
  1894.  		break;
  1895.  
  1896.  	case NPC_POWERUP:
  1897. -		sc_start(bl,SC_INCATKRATE,100,200,skill_get_time(skill_id, skill_lv));
  1898. +		sc_start(src,bl,SC_INCATKRATE,100,200,skill_get_time(skill_id, skill_lv));
  1899.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1900. -			sc_start(bl,type,100,100,skill_get_time(skill_id, skill_lv)));
  1901. +			sc_start(src,bl,type,100,100,skill_get_time(skill_id, skill_lv)));
  1902.  		break;
  1903.  
  1904.  	case NPC_AGIUP:
  1905. -		sc_start(bl,SC_SPEEDUP1,100,skill_lv,skill_get_time(skill_id, skill_lv));
  1906. +		sc_start(src,bl,SC_SPEEDUP1,100,skill_lv,skill_get_time(skill_id, skill_lv));
  1907.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1908. -			sc_start(bl,type,100,100,skill_get_time(skill_id, skill_lv)));
  1909. +			sc_start(src,bl,type,100,100,skill_get_time(skill_id, skill_lv)));
  1910.  		break;
  1911.  
  1912.  	case NPC_INVISIBLE:
  1913.  		//Have val4 passed as 6 is for "infinite cloak" (do not end on attack/skill use).
  1914.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1915. -			sc_start4(bl,type,100,skill_lv,0,0,6,skill_get_time(skill_id,skill_lv)));
  1916. +			sc_start4(src,bl,type,100,skill_lv,0,0,6,skill_get_time(skill_id,skill_lv)));
  1917.  		break;
  1918.  
  1919.  	case NPC_SIEGEMODE:
  1920. @@ -6947,9 +6947,9 @@
  1921.  				map_freeblock_unlock();
  1922.  				return 0;
  1923.  			}
  1924. -			status_change_start(bl,SC_STUN,10000,skill_lv,0,0,0,skill_get_time2(skill_id,skill_lv),8);
  1925. -			if (f_sd) sc_start(&f_sd->bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1926. -			if (m_sd) sc_start(&m_sd->bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1927. +			status_change_start(src, bl,SC_STUN,10000,skill_lv,0,0,0,skill_get_time2(skill_id,skill_lv),8);
  1928. +			if (f_sd) sc_start(src,&f_sd->bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1929. +			if (m_sd) sc_start(src,&m_sd->bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  1930.  		}
  1931.  		break;
  1932.  
  1933. @@ -7068,7 +7068,7 @@
  1934.  			return 1;
  1935.  		}
  1936.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1937. -			sc_start4(bl,type,100,skill_lv,skill_id,src->id,skill_get_time(skill_id,skill_lv),1000));
  1938. +			sc_start4(src,bl,type,100,skill_lv,skill_id,src->id,skill_get_time(skill_id,skill_lv),1000));
  1939.  #ifndef RENEWAL
  1940.  		if (sd) skill_blockpc_start (sd, skill_id, skill_get_time(skill_id, skill_lv)+3000);
  1941.  #endif
  1942. @@ -7091,7 +7091,7 @@
  1943.  
  1944.  			//Has a 55% + skill_lv*5% success chance.
  1945.  			if (!clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1946. -				sc_start(bl,type,55+5*skill_lv,skill_lv,skill_get_time(skill_id,skill_lv))))
  1947. +				sc_start(src,bl,type,55+5*skill_lv,skill_lv,skill_get_time(skill_id,skill_lv))))
  1948.  			{
  1949.  				if (sd) clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  1950.  				map_freeblock_unlock();
  1951. @@ -7185,7 +7185,7 @@
  1952.  			for (i=0 ; i<4; i++) {
  1953.  				if( bl->type != BL_PC || ( dstsd && pc_checkequip(dstsd,equip[i]) < 0 ) )
  1954.  					continue;
  1955. -				sc_start(bl,(sc_type)(SC_CP_WEAPON + i),100,skill_lv,skilltime);
  1956. +				sc_start(src,bl,(sc_type)(SC_CP_WEAPON + i),100,skill_lv,skilltime);
  1957.  				s++;
  1958.  			}
  1959.  			if( sd && !s ){
  1960. @@ -7207,7 +7207,7 @@
  1961.  				&& (tsce->val1&0xFFFF) != CG_MOONLIT) //Can't use Longing for Freedom while under Moonlight Petals. [Skotlex]
  1962.  			{
  1963.  				clif_skill_nodamage(src,bl,skill_id,skill_lv,
  1964. -					sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1965. +					sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  1966.  			}
  1967.  		}
  1968.  		break;
  1969. @@ -7233,7 +7233,7 @@
  1970.  					status_percent_damage(src, bl, 0, 100, false);
  1971.  					break;
  1972.  				case 1:	// matk halved
  1973. -					sc_start(bl,SC_INCMATKRATE,100,-50,skill_get_time2(skill_id,skill_lv));
  1974. +					sc_start(src,bl,SC_INCMATKRATE,100,-50,skill_get_time2(skill_id,skill_lv));
  1975.  					break;
  1976.  				case 2:	// all buffs removed
  1977.  					status_change_clear_buffs(bl,1);
  1978. @@ -7244,12 +7244,12 @@
  1979.  						clif_damage(src,bl,tick,0,0,1000,0,0,0);
  1980.  						if( !status_isdead(bl) ) {
  1981.  							int where[] = { EQP_ARMOR, EQP_SHIELD, EQP_HELM, EQP_SHOES, EQP_GARMENT };
  1982. -							skill_break_equip(bl, where[rnd()%5], 10000, BCT_ENEMY);
  1983. +							skill_break_equip(src,bl, where[rnd()%5], 10000, BCT_ENEMY);
  1984.  						}
  1985.  					}
  1986.  					break;
  1987.  				case 4:	// atk halved
  1988. -					sc_start(bl,SC_INCATKRATE,100,-50,skill_get_time2(skill_id,skill_lv));
  1989. +					sc_start(src,bl,SC_INCATKRATE,100,-50,skill_get_time2(skill_id,skill_lv));
  1990.  					break;
  1991.  				case 5:	// 2000HP heal, random teleported
  1992.  					status_heal(src, 2000, 0, 0);
  1993. @@ -7265,37 +7265,37 @@
  1994.  				case 7:	// stop freeze or stoned
  1995.  					{
  1996.  						enum sc_type sc[] = { SC_STOP, SC_FREEZE, SC_STONE };
  1997. -						sc_start(bl,sc[rnd()%3],100,skill_lv,skill_get_time2(skill_id,skill_lv));
  1998. +						sc_start(src,bl,sc[rnd()%3],100,skill_lv,skill_get_time2(skill_id,skill_lv));
  1999.  					}
  2000.  					break;
  2001.  				case 8:	// curse coma and poison
  2002. -					sc_start(bl,SC_COMA,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  2003. -					sc_start(bl,SC_CURSE,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  2004. -					sc_start(bl,SC_POISON,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  2005. +					sc_start(src,bl,SC_COMA,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  2006. +					sc_start(src,bl,SC_CURSE,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  2007. +					sc_start(src,bl,SC_POISON,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  2008.  					break;
  2009.  				case 9:	// confusion
  2010. -					sc_start(bl,SC_CONFUSION,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  2011. +					sc_start(src,bl,SC_CONFUSION,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  2012.  					break;
  2013.  				case 10:	// 6666 damage, atk matk halved, cursed
  2014.  					status_fix_damage(src, bl, 6666, 0);
  2015.  					clif_damage(src,bl,tick,0,0,6666,0,0,0);
  2016. -					sc_start(bl,SC_INCATKRATE,100,-50,skill_get_time2(skill_id,skill_lv));
  2017. -					sc_start(bl,SC_INCMATKRATE,100,-50,skill_get_time2(skill_id,skill_lv));
  2018. -					sc_start(bl,SC_CURSE,skill_lv,100,skill_get_time2(skill_id,skill_lv));
  2019. +					sc_start(src,bl,SC_INCATKRATE,100,-50,skill_get_time2(skill_id,skill_lv));
  2020. +					sc_start(src,bl,SC_INCMATKRATE,100,-50,skill_get_time2(skill_id,skill_lv));
  2021. +					sc_start(src,bl,SC_CURSE,skill_lv,100,skill_get_time2(skill_id,skill_lv));
  2022.  					break;
  2023.  				case 11:	// 4444 damage
  2024.  					status_fix_damage(src, bl, 4444, 0);
  2025.  					clif_damage(src,bl,tick,0,0,4444,0,0,0);
  2026.  					break;
  2027.  				case 12:	// stun
  2028. -					sc_start(bl,SC_STUN,100,skill_lv,5000);
  2029. +					sc_start(src,bl,SC_STUN,100,skill_lv,5000);
  2030.  					break;
  2031.  				case 13:	// atk,matk,hit,flee,def reduced
  2032. -					sc_start(bl,SC_INCATKRATE,100,-20,skill_get_time2(skill_id,skill_lv));
  2033. -					sc_start(bl,SC_INCMATKRATE,100,-20,skill_get_time2(skill_id,skill_lv));
  2034. -					sc_start(bl,SC_INCHITRATE,100,-20,skill_get_time2(skill_id,skill_lv));
  2035. -					sc_start(bl,SC_INCFLEERATE,100,-20,skill_get_time2(skill_id,skill_lv));
  2036. -					sc_start(bl,SC_INCDEFRATE,100,-20,skill_get_time2(skill_id,skill_lv));
  2037. +					sc_start(src,bl,SC_INCATKRATE,100,-20,skill_get_time2(skill_id,skill_lv));
  2038. +					sc_start(src,bl,SC_INCMATKRATE,100,-20,skill_get_time2(skill_id,skill_lv));
  2039. +					sc_start(src,bl,SC_INCHITRATE,100,-20,skill_get_time2(skill_id,skill_lv));
  2040. +					sc_start(src,bl,SC_INCFLEERATE,100,-20,skill_get_time2(skill_id,skill_lv));
  2041. +					sc_start(src,bl,SC_INCDEFRATE,100,-20,skill_get_time2(skill_id,skill_lv));
  2042.  					break;
  2043.  				default:
  2044.  					break;
  2045. @@ -7333,8 +7333,8 @@
  2046.  			//SC_SPIRIT invokes status_calc_pc for us.
  2047.  		}
  2048.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  2049. -			sc_start4(bl,SC_SPIRIT,100,skill_lv,skill_id,0,0,skill_get_time(skill_id,skill_lv)));
  2050. -		sc_start(src,SC_SMA,100,skill_lv,skill_get_time(SL_SMA,skill_lv));
  2051. +			sc_start4(src,bl,SC_SPIRIT,100,skill_lv,skill_id,0,0,skill_get_time(skill_id,skill_lv)));
  2052. +		sc_start(src,src,SC_SMA,100,skill_lv,skill_get_time(SL_SMA,skill_lv));
  2053.  		break;
  2054.  	case SL_HIGH:
  2055.  		if (sd && !(dstsd && (dstsd->class_&JOBL_UPPER) && !(dstsd->class_&JOBL_2) && dstsd->status.base_level < 70)) {
  2056. @@ -7342,15 +7342,15 @@
  2057.  			break;
  2058.  		}
  2059.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  2060. -			sc_start4(bl,type,100,skill_lv,skill_id,0,0,skill_get_time(skill_id,skill_lv)));
  2061. -		sc_start(src,SC_SMA,100,skill_lv,skill_get_time(SL_SMA,skill_lv));
  2062. +			sc_start4(src,bl,type,100,skill_lv,skill_id,0,0,skill_get_time(skill_id,skill_lv)));
  2063. +		sc_start(src,src,SC_SMA,100,skill_lv,skill_get_time(SL_SMA,skill_lv));
  2064.  		break;
  2065.  
  2066.  	case SL_SWOO:
  2067.  		if (tsce) {
  2068.  			if(sd)
  2069.  				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  2070. -			status_change_start(src,SC_STUN,10000,skill_lv,0,0,0,10000,8);
  2071. +			status_change_start(src, src,SC_STUN,10000,skill_lv,0,0,0,10000,8);
  2072.  			status_change_end(bl, SC_SWOO, INVALID_TIMER);
  2073.  			break;
  2074.  		}
  2075. @@ -7358,19 +7358,19 @@
  2076.  	case SL_SKE:
  2077.  		if (sd && !battle_config.allow_es_magic_pc && bl->type != BL_MOB) {
  2078.  			clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  2079. -			status_change_start(src,SC_STUN,10000,skill_lv,0,0,0,500,10);
  2080. +			status_change_start(src, src,SC_STUN,10000,skill_lv,0,0,0,500,10);
  2081.  			break;
  2082.  		}
  2083. -		clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2084. +		clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2085.  		if (skill_id == SL_SKE)
  2086. -			sc_start(src,SC_SMA,100,skill_lv,skill_get_time(SL_SMA,skill_lv));
  2087. +			sc_start(src,src,SC_SMA,100,skill_lv,skill_get_time(SL_SMA,skill_lv));
  2088.  		break;
  2089.  
  2090.  	// New guild skills [Celest]
  2091.  	case GD_BATTLEORDER:
  2092.  		if(flag&1) {
  2093.  			if (status_get_guild_id(src) == status_get_guild_id(bl))
  2094. -				sc_start(bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv));
  2095. +				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv));
  2096.  		} else if (status_get_guild_id(src)) {
  2097.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  2098.  			map_foreachinrange(skill_area_sub, src,
  2099. @@ -7384,7 +7384,7 @@
  2100.  	case GD_REGENERATION:
  2101.  		if(flag&1) {
  2102.  			if (status_get_guild_id(src) == status_get_guild_id(bl))
  2103. -				sc_start(bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv));
  2104. +				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id, skill_lv));
  2105.  		} else if (status_get_guild_id(src)) {
  2106.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  2107.  			map_foreachinrange(skill_area_sub, src,
  2108. @@ -7470,7 +7470,7 @@
  2109.  			i =65 -5*distance_bl(src,bl); //Base rate
  2110.  			if (i < 30) i = 30;
  2111.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  2112. -			sc_start(bl,SC_STUN, i,skill_lv,skill_get_time2(skill_id,skill_lv));
  2113. +			sc_start(src,bl,SC_STUN, i,skill_lv,skill_get_time2(skill_id,skill_lv));
  2114.  		}
  2115.  		break;
  2116.  
  2117. @@ -7545,7 +7545,7 @@
  2118.  	case MH_ANGRIFFS_MODUS:
  2119.  	case MH_GOLDENE_FERSE:
  2120.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  2121. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2122. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2123.  		if (hd)
  2124.  			skill_blockhomun_start(hd, skill_id, skill_get_time2(skill_id,skill_lv));
  2125.  		break;
  2126. @@ -7555,7 +7555,7 @@
  2127.  			const enum sc_type sc[] = { SC_STUN, SC_SILENCE, SC_CONFUSION, SC_BLEEDING };
  2128.  			int j;
  2129.  			j = i = rnd()%ARRAYLENGTH(sc);
  2130. -			while ( !sc_start2(bl,sc[i],100,skill_lv,src->id,skill_get_time2(skill_id,i+1)) ) {
  2131. +			while ( !sc_start2(src,bl,sc[i],100,skill_lv,src->id,skill_get_time2(skill_id,i+1)) ) {
  2132.  				i++;
  2133.  				if ( i == ARRAYLENGTH(sc) )
  2134.  					i = 0;
  2135. @@ -7575,7 +7575,7 @@
  2136.  	case NPC_SLOWCAST:
  2137.  	case NPC_WIDEHELLDIGNITY:
  2138.  		if (flag&1)
  2139. -			sc_start2(bl,type,100,skill_lv,src->id,skill_get_time2(skill_id,skill_lv));
  2140. +			sc_start2(src,bl,type,100,skill_lv,src->id,skill_get_time2(skill_id,skill_lv));
  2141.  		else {
  2142.  			skill_area_temp[2] = 0; //For SD_PREAMBLE
  2143.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  2144. @@ -7608,7 +7608,7 @@
  2145.  			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
  2146.  		}
  2147.  		else
  2148. -			clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2149. +			clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2150.  		break;
  2151.  	case NPC_TALK:
  2152.  	case ALL_WEWISH:
  2153. @@ -7622,11 +7622,11 @@
  2154.  		break;
  2155.  	case RK_ENCHANTBLADE:
  2156.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  2157. -			sc_start2(bl,type,100,skill_lv,(100+20*skill_lv)*(status_get_lv(src)/150)+sstatus->int_,skill_get_time(skill_id,skill_lv)));
  2158. +			sc_start2(src,bl,type,100,skill_lv,(100+20*skill_lv)*(status_get_lv(src)/150)+sstatus->int_,skill_get_time(skill_id,skill_lv)));
  2159.  		break;
  2160.  	case RK_DRAGONHOWLING:
  2161.  		if( flag&1)
  2162. -			sc_start(bl,type,50 + 6 * skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
  2163. +			sc_start(src,bl,type,50 + 6 * skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
  2164.  		else
  2165.  		{
  2166.  			skill_area_temp[2] = 0;
  2167. @@ -7653,7 +7653,7 @@
  2168.  		{
  2169.  			int heal = sstatus->hp / 5; // 20% HP
  2170.  			if( status_charge(bl,heal,0) )
  2171. -				clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start2(bl,type,100,skill_lv,heal,skill_get_time(skill_id,skill_lv)));
  2172. +				clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start2(src,bl,type,100,skill_lv,heal,skill_get_time(skill_id,skill_lv)));
  2173.  			else
  2174.  				clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  2175.  		}
  2176. @@ -7663,7 +7663,7 @@
  2177.  		{
  2178.  			int heal = status_get_max_hp(bl) * 25 / 100;
  2179.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,
  2180. -				sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2181. +				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2182.  			status_heal(bl,heal,0,1);
  2183.  			status_change_clear_buffs(bl,4);
  2184.  		}
  2185. @@ -7674,7 +7674,7 @@
  2186.  		{
  2187.  			int8 rate = rnd()%100;
  2188.  			int16 shields = ((rate < 20) ? 4 : (rate < 50) ? 3 : 2);
  2189. -			sc_start4(bl,type,100,skill_lv,shields,1000,0,skill_get_time(skill_id,skill_lv));
  2190. +			sc_start4(src,bl,type,100,skill_lv,shields,1000,0,skill_get_time(skill_id,skill_lv));
  2191.  			clif_millenniumshield(sd,shields);
  2192.  			clif_skill_nodamage(src,bl,skill_id,1,1);
  2193.  		}
  2194. @@ -7694,7 +7694,7 @@
  2195.  			else if( skill_id == RK_CRUSHSTRIKE )
  2196.  				lv = 7;
  2197.  			if( pc_checkskill(sd,RK_RUNEMASTERY) >= lv )
  2198. -				clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2199. +				clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2200.  		}
  2201.  		break;
  2202.  
  2203. @@ -7702,14 +7702,14 @@
  2204.  			int atkbonus = 7 * party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,BCT_PARTY,skill_area_sub_count);
  2205.  			if( flag&1 ) {
  2206.  				if( src == bl )
  2207. -					sc_start2(bl,type,100,atkbonus,10*(sd?pc_checkskill(sd,RK_RUNEMASTERY):10),skill_get_time(skill_id,skill_lv));
  2208. +					sc_start2(src,bl,type,100,atkbonus,10*(sd?pc_checkskill(sd,RK_RUNEMASTERY):10),skill_get_time(skill_id,skill_lv));
  2209.  				else
  2210. -					sc_start(bl,type,100,atkbonus / 4,skill_get_time(skill_id,skill_lv));
  2211. +					sc_start(src,bl,type,100,atkbonus / 4,skill_get_time(skill_id,skill_lv));
  2212.  			} else if( sd && pc_checkskill(sd,RK_RUNEMASTERY) >= 5 ) {
  2213.  				if( sd->status.party_id )
  2214.  					party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,flag|BCT_PARTY|1,skill_castend_nodamage_id);
  2215.  				else
  2216. -					sc_start2(bl,type,100,7,10*(sd?pc_checkskill(sd,RK_RUNEMASTERY):10),skill_get_time(skill_id,skill_lv));
  2217. +					sc_start2(src,bl,type,100,7,10*(sd?pc_checkskill(sd,RK_RUNEMASTERY):10),skill_get_time(skill_id,skill_lv));
  2218.  				clif_skill_nodamage(src,bl,skill_id,1,1);
  2219.  			}
  2220.  		}
  2221. @@ -7729,7 +7729,7 @@
  2222.  					count = 10; // Max coounter
  2223.  				status_change_end(bl, SC_ROLLINGCUTTER, INVALID_TIMER);
  2224.  			}
  2225. -			sc_start(bl,SC_ROLLINGCUTTER,100,count,skill_get_time(skill_id,skill_lv));
  2226. +			sc_start(src,bl,SC_ROLLINGCUTTER,100,count,skill_get_time(skill_id,skill_lv));
  2227.  			clif_skill_nodamage(src,src,skill_id,skill_lv,1);
  2228.  		}
  2229.  		break;
  2230. @@ -7738,7 +7738,7 @@
  2231.  		if( tsc && tsc->data[SC_WEAPONBLOCKING] )
  2232.  			status_change_end(bl, SC_WEAPONBLOCKING, INVALID_TIMER);
  2233.  		else
  2234. -			sc_start(bl,SC_WEAPONBLOCKING,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2235. +			sc_start(src,bl,SC_WEAPONBLOCKING,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2236.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  2237.  		break;
  2238.  
  2239. @@ -7791,7 +7791,7 @@
  2240.  				if( sd ) clif_skill_fail(sd,skill_id,USESKILL_FAIL_HP_INSUFFICIENT,0);
  2241.  				break;
  2242.  			}
  2243. -			clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2244. +			clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2245.  		}
  2246.  		break;
  2247.  	/**
  2248. @@ -7810,7 +7810,7 @@
  2249.  			int bless_lv = pc_checkskill(sd,AL_BLESSING) + ((sd ? sd->status.job_level : 50) / 10);
  2250.  			int agi_lv = pc_checkskill(sd,AL_INCAGI) + ((sd ? sd->status.job_level : 50) / 10);
  2251.  			if( sd == NULL || sd->status.party_id == 0 || flag&1 )
  2252. -				clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(bl,type,100,
  2253. +				clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start(src,bl,type,100,
  2254.  					(skill_id == AB_CLEMENTIA)? bless_lv : (skill_id == AB_CANTO)? agi_lv : skill_lv, skill_get_time(skill_id,skill_lv)));
  2255.  			else if( sd )
  2256.  				party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
  2257. @@ -7819,7 +7819,7 @@
  2258.  
  2259.  	case AB_PRAEFATIO:
  2260.  		if( sd == NULL || sd->status.party_id == 0 || flag&1 )
  2261. -			clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start4(bl, type, 100, skill_lv, 0, 0, 1, skill_get_time(skill_id, skill_lv)));
  2262. +			clif_skill_nodamage(bl, bl, skill_id, skill_lv, sc_start4(src,bl, type, 100, skill_lv, 0, 0, 1, skill_get_time(skill_id, skill_lv)));
  2263.  		else if( sd )
  2264.  			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
  2265.  		break;
  2266. @@ -7844,7 +7844,7 @@
  2267.  
  2268.  	case AB_ORATIO:
  2269.  		if( flag&1 )
  2270. -			sc_start(bl, type, 40 + 5 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  2271. +			sc_start(src,bl, type, 40 + 5 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv));
  2272.  		else
  2273.  		{
  2274.  			map_foreachinrange(skill_area_sub, src, skill_get_splash(skill_id, skill_lv), BL_CHAR,
  2275. @@ -7867,7 +7867,7 @@
  2276.  				status_change_end(bl, SC_CRYSTALIZE, INVALID_TIMER);
  2277.  			}else //Success rate only applies to the curing effect and not stat bonus. Bonus status only applies to non infected targets
  2278.  				clif_skill_nodamage(bl, bl, skill_id, skill_lv,
  2279. -					sc_start(bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)));
  2280. +					sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)));
  2281.  		} else if( sd )
  2282.  			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv),
  2283.  				src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
  2284. @@ -7885,7 +7885,7 @@
  2285.  				status_change_end(bl, SC_DEEPSLEEP, INVALID_TIMER);
  2286.  			}else // Success rate only applies to the curing effect and not stat bonus. Bonus status only applies to non infected targets
  2287.  				clif_skill_nodamage(bl, bl, skill_id, skill_lv,
  2288. -					sc_start(bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)));
  2289. +					sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)));
  2290.  		} else if( sd )
  2291.  			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv),
  2292.  				src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
  2293. @@ -7975,7 +7975,7 @@
  2294.  	 **/
  2295.  	case WL_STASIS:
  2296.  		if( flag&1 )
  2297. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2298. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2299.  		else
  2300.  		{
  2301.  			map_foreachinrange(skill_area_sub,src,skill_get_splash(skill_id, skill_lv),BL_CHAR,src,skill_id,skill_lv,tick,(map_flag_vs(src->m)?BCT_ALL:BCT_ENEMY|BCT_SELF)|flag|1,skill_castend_nodamage_id);
  2302. @@ -7996,7 +7996,7 @@
  2303.  				skill_blockpc_start(sd,skill_id,4000);
  2304.  
  2305.  			if( !(tsc && tsc->data[type]) ){
  2306. -				i = sc_start2(bl,type,rate,skill_lv,src->id,(src == bl)?5000:(bl->type == BL_PC)?skill_get_time(skill_id,skill_lv):skill_get_time2(skill_id, skill_lv));
  2307. +				i = sc_start2(src,bl,type,rate,skill_lv,src->id,(src == bl)?5000:(bl->type == BL_PC)?skill_get_time(skill_id,skill_lv):skill_get_time2(skill_id, skill_lv));
  2308.  				clif_skill_nodamage(src,bl,skill_id,skill_lv,i);
  2309.  				if( !i )
  2310.  					clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  2311. @@ -8019,7 +8019,7 @@
  2312.  	case WL_MARSHOFABYSS:
  2313.  		// Should marsh of abyss still apply half reduction to players after the 28/10 patch? [LimitLine]
  2314.  		clif_skill_nodamage(src, bl, skill_id, skill_lv,
  2315. -			sc_start4(bl, type, 100, skill_lv, status_get_int(src), sd ? sd->status.job_level : 50, 0,
  2316. +			sc_start4(src,bl, type, 100, skill_lv, status_get_int(src), sd ? sd->status.job_level : 50, 0,
  2317.  			skill_get_time(skill_id, skill_lv)));
  2318.  		break;
  2319.  
  2320. @@ -8034,13 +8034,13 @@
  2321.  			if( tsc && tsc->data[SC_STONE] )
  2322.  				status_change_end(bl,SC_STONE,INVALID_TIMER);
  2323.  			else
  2324. -				status_change_start(bl,SC_STONE,10000,skill_lv,0,0,1000,skill_get_time(skill_id, skill_lv),2);
  2325. +				status_change_start(src, bl,SC_STONE,10000,skill_lv,0,0,1000,skill_get_time(skill_id, skill_lv),2);
  2326.  		} else {
  2327.  			int rate = 40 + 8 * skill_lv + ( sd? sd->status.job_level : 50 ) / 4;
  2328.  			// IroWiki says Rate should be reduced by target stats, but currently unknown
  2329.  			if( rnd()%100 < rate ) { // Success on First Target
  2330.  				if( !tsc->data[SC_STONE] )
  2331. -					rate = status_change_start(bl,SC_STONE,10000,skill_lv,0,0,1000,skill_get_time(skill_id, skill_lv),2);
  2332. +					rate = status_change_start(src, bl,SC_STONE,10000,skill_lv,0,0,1000,skill_get_time(skill_id, skill_lv),2);
  2333.  				else {
  2334.  					rate = 1;
  2335.  					status_change_end(bl,SC_STONE,INVALID_TIMER);
  2336. @@ -8090,7 +8090,7 @@
  2337.  			case WL_SUMMONSTONE: element = WLS_STONE; break;
  2338.  			}
  2339.  
  2340. -			sc_start4(src,sctype,100,element,pos,skill_lv,0,skill_get_time(skill_id,skill_lv));
  2341. +			sc_start4(src,src,sctype,100,element,pos,skill_lv,0,skill_get_time(skill_id,skill_lv));
  2342.  			clif_skill_nodamage(src,bl,skill_id,0,0);
  2343.  		}
  2344.  		break;
  2345. @@ -8107,7 +8107,7 @@
  2346.  				break;
  2347.  			}
  2348.  
  2349. -			sc_start(bl, SC_STOP, 100, skill_lv, INVALID_TIMER); //Can't move while selecting a spellbook.
  2350. +			sc_start(src,bl, SC_STOP, 100, skill_lv, INVALID_TIMER); //Can't move while selecting a spellbook.
  2351.  			clif_spellbook_list(sd);
  2352.  			clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
  2353.  		}
  2354. @@ -8117,7 +8117,7 @@
  2355.  	 **/
  2356.  	case RA_FEARBREEZE:
  2357.  		clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
  2358. -		clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)));
  2359. +		clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)));
  2360.  		break;
  2361.  
  2362.  	case RA_WUGMASTERY:
  2363. @@ -8150,7 +8150,7 @@
  2364.  			return 0;
  2365.  		}
  2366.  		if( sd && pc_isridingwug(sd) ) {
  2367. -			clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start4(bl,type,100,skill_lv,unit_getdir(bl),0,0,1));
  2368. +			clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start4(src,bl,type,100,skill_lv,unit_getdir(bl),0,0,1));
  2369.  			clif_walkok(sd);
  2370.  		}
  2371.  		break;
  2372. @@ -8187,12 +8187,12 @@
  2373.  	case NC_ANALYZE:
  2374.  		clif_skill_damage(src, bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
  2375.  		clif_skill_nodamage(src, bl, skill_id, skill_lv,
  2376. -			sc_start(bl,type, 30 + 12 * skill_lv,skill_lv,skill_get_time(skill_id,skill_lv)));
  2377. +			sc_start(src,bl,type, 30 + 12 * skill_lv,skill_lv,skill_get_time(skill_id,skill_lv)));
  2378.  		if( sd ) pc_overheat(sd,1);
  2379.  		break;
  2380.  
  2381.  	case NC_MAGNETICFIELD:
  2382. -		if( (i = sc_start2(bl,type,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv))) )
  2383. +		if( (i = sc_start2(src,bl,type,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv))) )
  2384.  		{
  2385.  			map_foreachinrange(skill_area_sub,src,skill_get_splash(skill_id,skill_lv),splash_target(src),src,skill_id,skill_lv,tick,flag|BCT_ENEMY|SD_SPLASH|1,skill_castend_damage_id);;
  2386.  			clif_skill_damage(src,src,tick,status_get_amotion(src),0,-30000,1,skill_id,skill_lv,6);
  2387. @@ -8231,7 +8231,7 @@
  2388.  	case SC_AUTOSHADOWSPELL:
  2389.  		if( sd ) {
  2390.  			if( sd->status.skill[sd->reproduceskill_id].id || sd->status.skill[sd->cloneskill_id].id ) {
  2391. -				sc_start(src,SC_STOP,100,skill_lv,-1);// The skill_lv is stored in val1 used in skill_select_menu to determine the used skill lvl [Xazax]
  2392. +				sc_start(src,src,SC_STOP,100,skill_lv,-1);// The skill_lv is stored in val1 used in skill_select_menu to determine the used skill lvl [Xazax]
  2393.  				clif_autoshadowspell_list(sd);
  2394.  				clif_skill_nodamage(src,bl,skill_id,1,1);
  2395.  			}
  2396. @@ -8242,7 +8242,7 @@
  2397.  
  2398.  	case SC_SHADOWFORM:
  2399.  		if( sd && dstsd && src != bl && !dstsd->shadowform_id ) {
  2400. -			if( clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start4(src,type,100,skill_lv,bl->id,4+skill_lv,0,skill_get_time(skill_id, skill_lv))) )
  2401. +			if( clif_skill_nodamage(src,bl,skill_id,skill_lv,sc_start4(src,src,type,100,skill_lv,bl->id,4+skill_lv,0,skill_get_time(skill_id, skill_lv))) )
  2402.  				dstsd->shadowform_id = src->id;
  2403.  		}
  2404.  		else if( sd )
  2405. @@ -8260,8 +8260,8 @@
  2406.  				status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
  2407.  				status_change_end(bl, SC__INVISIBILITY, INVALID_TIMER);
  2408.  
  2409. -				sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2410. -				sc_start(bl,SC_BLIND,53 + 2 * skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
  2411. +				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2412. +				sc_start(src,bl,SC_BLIND,53 + 2 * skill_lv,skill_lv,skill_get_time(skill_id,skill_lv));
  2413.  			}
  2414.  		} else {
  2415.  			clif_skill_nodamage(src, bl, skill_id, 0, 1);
  2416. @@ -8280,7 +8280,7 @@
  2417.  			int rate = rnd_value(sstatus->dex/12,sstatus->dex/4) + 10*skill_lv + (sd?sd->status.job_level:0) + status_get_lv(src)/10
  2418.  				- status_get_lv(bl)/10 - tstatus->luk/10 - (dstsd?(dstsd->max_weight-dstsd->weight)/10000:0) - rnd_value(tstatus->agi/6,tstatus->agi/3);
  2419.  			rate = cap_value(rate, skill_lv+sstatus->dex/20, 100);
  2420. -			clif_skill_nodamage(src,bl,skill_id,0,sc_start(bl,type,rate,skill_lv,skill_get_time(skill_id,skill_lv)));
  2421. +			clif_skill_nodamage(src,bl,skill_id,0,sc_start(src,bl,type,rate,skill_lv,skill_get_time(skill_id,skill_lv)));
  2422.  		} else if( sd )
  2423.  			 clif_skill_fail(sd,skill_id,0,0);
  2424.  		break;
  2425. @@ -8290,7 +8290,7 @@
  2426.  			int rate = rnd_value(sstatus->dex/12,sstatus->dex/4) + 10*skill_lv + (sd?sd->status.job_level:0) + status_get_lv(src)/10
  2427.  				- status_get_lv(bl)/10 - tstatus->luk/10 - (dstsd?(dstsd->max_weight-dstsd->weight)/10000:0) - rnd_value(tstatus->agi/6,tstatus->agi/3);
  2428.  			rate = cap_value(rate, skill_lv+sstatus->dex/20, 100);
  2429. -			if (clif_skill_nodamage(src,bl,skill_id,0,sc_start(bl,type,rate,skill_lv,skill_get_time(skill_id,skill_lv)))) {
  2430. +			if (clif_skill_nodamage(src,bl,skill_id,0,sc_start(src,bl,type,rate,skill_lv,skill_get_time(skill_id,skill_lv)))) {
  2431.  				int sp = 200 * skill_lv;
  2432.  				if( dstmd ) sp = dstmd->level * 2;
  2433.  				if( status_zap(bl,0,sp) )
  2434. @@ -8310,14 +8310,14 @@
  2435.  		if( tsc && tsc->data[type] )
  2436.  			status_change_end(bl,type,INVALID_TIMER);
  2437.  		else
  2438. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2439. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2440.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  2441.  		break;
  2442.  
  2443.  	case LG_SHIELDSPELL:
  2444.  		if( flag&1 ) {
  2445.  			int duration = (sd) ? sd->bonus.shieldmdef * 2000 : 10000;
  2446. -			sc_start(bl,SC_SILENCE,100,skill_lv,duration);
  2447. +			sc_start(src,bl,SC_SILENCE,100,skill_lv,duration);
  2448.  		} else if( sd ) {
  2449.  			int opt = skill_lv;
  2450.  			int rate = rnd()%100;
  2451. @@ -8340,7 +8340,7 @@
  2452.  
  2453.  						switch( opt ) {
  2454.  							case 1:
  2455. -								sc_start(bl,SC_SHIELDSPELL_DEF,100,opt,-1);
  2456. +								sc_start(src,bl,SC_SHIELDSPELL_DEF,100,opt,-1);
  2457.  								clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
  2458.  								if( rate < brate )
  2459.  									map_foreachinrange(skill_area_sub,src,skill_get_splash(skill_id,skill_lv),BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_damage_id);
  2460. @@ -8348,11 +8348,11 @@
  2461.  								break;
  2462.  							case 2:
  2463.  								val = shield_data->def / 10; // % Reflected damage.
  2464. -								sc_start2(bl,SC_SHIELDSPELL_DEF,brate,opt,val,shield_data->def * 1000);
  2465. +								sc_start2(src,bl,SC_SHIELDSPELL_DEF,brate,opt,val,shield_data->def * 1000);
  2466.  								break;
  2467.  							case 3:
  2468.  								val = shield_data->def; // Attack increase.
  2469. -								sc_start2(bl,SC_SHIELDSPELL_DEF,brate,opt,val,shield_data->def * 3000);
  2470. +								sc_start2(src,bl,SC_SHIELDSPELL_DEF,brate,opt,val,shield_data->def * 3000);
  2471.  								break;
  2472.  						}
  2473.  					}
  2474. @@ -8368,22 +8368,22 @@
  2475.  						opt = 3;
  2476.  					switch( opt ) {
  2477.  						case 1:
  2478. -							sc_start(bl,SC_SHIELDSPELL_MDEF,100,opt,-1);
  2479. +							sc_start(src,bl,SC_SHIELDSPELL_MDEF,100,opt,-1);
  2480.  							clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
  2481.  							if( rate < brate )
  2482.  								map_foreachinrange(skill_area_sub,src,skill_get_splash(skill_id,skill_lv),BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|2,skill_castend_damage_id);
  2483.  							status_change_end(bl,SC_SHIELDSPELL_MDEF,INVALID_TIMER);
  2484.  							break;
  2485.  						case 2:
  2486. -							sc_start(bl,SC_SHIELDSPELL_MDEF,100,opt,-1);
  2487. +							sc_start(src,bl,SC_SHIELDSPELL_MDEF,100,opt,-1);
  2488.  							clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
  2489.  							if( rate < brate )
  2490.  								map_foreachinrange(skill_area_sub,src,skill_get_splash(skill_id,skill_lv),BL_CHAR,src,skill_id,skill_lv,tick,flag|BCT_ENEMY|1,skill_castend_nodamage_id);
  2491.  							break;
  2492.  						case 3:
  2493. -							if( sc_start(bl,SC_SHIELDSPELL_MDEF,brate,opt,sd->bonus.shieldmdef * 30000) )
  2494. +							if( sc_start(src,bl,SC_SHIELDSPELL_MDEF,brate,opt,sd->bonus.shieldmdef * 30000) )
  2495.  								clif_skill_nodamage(src,bl,PR_MAGNIFICAT,skill_lv,
  2496. -								sc_start(bl,SC_MAGNIFICAT,100,1,sd->bonus.shieldmdef * 30000));
  2497. +								sc_start(src,bl,SC_MAGNIFICAT,100,1,sd->bonus.shieldmdef * 30000));
  2498.  							break;
  2499.  					}
  2500.  					break;
  2501. @@ -8405,7 +8405,7 @@
  2502.  					switch( opt ) {
  2503.  						case 1:
  2504.  							val = 105 * it->refine / 10;
  2505. -							sc_start2(bl,SC_SHIELDSPELL_REF,brate,opt,val,skill_get_time(skill_id,skill_lv));
  2506. +							sc_start2(src,bl,SC_SHIELDSPELL_REF,brate,opt,val,skill_get_time(skill_id,skill_lv));
  2507.  							break;
  2508.  						case 2: case 3:
  2509.  							if( rate < brate )
  2510. @@ -8427,7 +8427,7 @@
  2511.  
  2512.  	case LG_PIETY:
  2513.  		if( flag&1 )
  2514. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2515. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2516.  		else {
  2517.  			skill_area_temp[2] = 0;
  2518.  			map_foreachinrange(skill_area_sub,bl,skill_get_splash(skill_id,skill_lv),BL_PC,src,skill_id,skill_lv,tick,flag|SD_PREAMBLE|BCT_PARTY|BCT_SELF|1,skill_castend_nodamage_id);
  2519. @@ -8443,12 +8443,12 @@
  2520.  				clif_updatestatus(sd,SP_JOBEXP);
  2521.  		}
  2522.  			clif_skill_nodamage(bl,src,skill_id,skill_lv,
  2523. -				sc_start(bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)));
  2524. +				sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)));
  2525.  		break;
  2526.  	case SR_CURSEDCIRCLE:
  2527.  		if( flag&1 ) {
  2528.  			if( is_boss(bl) ) break;
  2529. -			if( sc_start2(bl, type, 100, skill_lv, src->id, skill_get_time(skill_id, skill_lv))) {
  2530. +			if( sc_start2(src,bl, type, 100, skill_lv, src->id, skill_get_time(skill_id, skill_lv))) {
  2531.  				if( bl->type == BL_MOB )
  2532.  					mob_unlocktarget((TBL_MOB*)bl,gettick());
  2533.  				unit_stop_attack(bl);
  2534. @@ -8463,17 +8463,17 @@
  2535.  				BL_CHAR, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
  2536.  			if( sd ) pc_delspiritball(sd, count, 0);
  2537.  			clif_skill_nodamage(src, src, skill_id, skill_lv,
  2538. -				sc_start2(src, SC_CURSEDCIRCLE_ATKER, 100, skill_lv, count, skill_get_time(skill_id,skill_lv)));
  2539. +				sc_start2(src,src, SC_CURSEDCIRCLE_ATKER, 100, skill_lv, count, skill_get_time(skill_id,skill_lv)));
  2540.  		}
  2541.  		break;
  2542.  
  2543.  	case SR_RAISINGDRAGON:
  2544.  		if( sd ) {
  2545.  			short max = 5 + skill_lv;
  2546. -			sc_start(bl, SC_EXPLOSIONSPIRITS, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2547. +			sc_start(src,bl, SC_EXPLOSIONSPIRITS, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2548.  			for( i = 0; i < max; i++ ) // Don't call more than max available spheres.
  2549.  				pc_addspiritball(sd, skill_get_time(skill_id, skill_lv), max);
  2550. -			clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(bl, type, 100, skill_lv,skill_get_time(skill_id, skill_lv)));
  2551. +			clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src,bl, type, 100, skill_lv,skill_get_time(skill_id, skill_lv)));
  2552.  		}
  2553.  		break;
  2554.  
  2555. @@ -8537,12 +8537,12 @@
  2556.  	case SR_GENTLETOUCH_CHANGE:
  2557.  	case SR_GENTLETOUCH_REVITALIZE:
  2558.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  2559. -			sc_start2(bl,type,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv)));
  2560. +			sc_start2(src,bl,type,100,skill_lv,src->id,skill_get_time(skill_id,skill_lv)));
  2561.  		break;
  2562.  	case WA_SWING_DANCE:
  2563.  	case WA_MOONLIT_SERENADE:
  2564.  		if( sd == NULL || sd->status.party_id == 0 || (flag & 1) )
  2565. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2566. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2567.  		else if( sd ) {	// Only shows effects on caster.
  2568.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  2569.  			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
  2570. @@ -8553,7 +8553,7 @@
  2571.  	case MI_RUSH_WINDMILL:
  2572.  	case MI_ECHOSONG:
  2573.  		if( sd == NULL || sd->status.party_id == 0 || (flag & 1) )
  2574. -			sc_start4(bl,type,100,skill_lv,6*skill_lv,(sd?pc_checkskill(sd,WM_LESSON):0),(sd?sd->status.job_level:0),skill_get_time(skill_id,skill_lv));
  2575. +			sc_start4(src,bl,type,100,skill_lv,6*skill_lv,(sd?pc_checkskill(sd,WM_LESSON):0),(sd?sd->status.job_level:0),skill_get_time(skill_id,skill_lv));
  2576.  		else if( sd ) {	// Only shows effects on caster.
  2577.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  2578.  			party_foreachsamemap(skill_area_sub, sd, skill_get_splash(skill_id, skill_lv), src, skill_id, skill_lv, tick, flag|BCT_PARTY|1, skill_castend_nodamage_id);
  2579. @@ -8562,8 +8562,8 @@
  2580.  
  2581.  	case MI_HARMONIZE:
  2582.  		if( src != bl )
  2583. -			clif_skill_nodamage(src, src, skill_id, skill_lv, sc_start(src, type, 100, skill_lv, skill_get_time(skill_id,skill_lv)));
  2584. -		clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(bl, type, 100, skill_lv, skill_get_time(skill_id,skill_lv)));
  2585. +			clif_skill_nodamage(src, src, skill_id, skill_lv, sc_start(src,src, type, 100, skill_lv, skill_get_time(skill_id,skill_lv)));
  2586. +		clif_skill_nodamage(src, bl, skill_id, skill_lv, sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id,skill_lv)));
  2587.  		break;
  2588.  
  2589.  	case WM_DEADHILLHERE:
  2590. @@ -8590,7 +8590,7 @@
  2591.  		if( skill_id != WM_SIRCLEOFNATURE )
  2592.  			flag &= ~BCT_SELF;
  2593.  		if( flag&1 ) {
  2594. -			sc_start2(bl,type,(skill_id==WM_VOICEOFSIREN)?20+10*skill_lv:100,skill_lv,(skill_id==WM_VOICEOFSIREN)?src->id:0,skill_get_time(skill_id,skill_lv));
  2595. +			sc_start2(src,bl,type,(skill_id==WM_VOICEOFSIREN)?20+10*skill_lv:100,skill_lv,(skill_id==WM_VOICEOFSIREN)?src->id:0,skill_get_time(skill_id,skill_lv));
  2596.  		} else {
  2597.  			map_foreachinrange(skill_area_sub, src, skill_get_splash(skill_id,skill_lv),(skill_id==WM_VOICEOFSIREN)?BL_CHAR|BL_SKILL:BL_PC, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|1, skill_castend_nodamage_id);
  2598.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  2599. @@ -8603,16 +8603,16 @@
  2600.  				pc_checkskill(dstsd,CR_SHIELDCHARGE) || pc_checkskill(dstsd,CR_SHIELDBOOMERANG) ||
  2601.  				pc_checkskill(dstsd,PA_SHIELDCHAIN) || pc_checkskill(dstsd,LG_SHIELDPRESS) ) )
  2602.  			{
  2603. -				sc_start(bl,SC_GLOOMYDAY_SK,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2604. +				sc_start(src,bl,SC_GLOOMYDAY_SK,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2605.  				break;
  2606.  			}
  2607. -		sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2608. +		sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2609.  		break;
  2610.  
  2611.  	case WM_SATURDAY_NIGHT_FEVER:
  2612.  		if( flag&1 ) {	// Affect to all targets arround the caster and caster too.
  2613.  			if( !(tsc && tsc->data[type]) )
  2614. -				sc_start(bl, type, 100, skill_lv,skill_get_time(skill_id, skill_lv));
  2615. +				sc_start(src,bl, type, 100, skill_lv,skill_get_time(skill_id, skill_lv));
  2616.  		} else if( flag&2 ) {
  2617.  			if( src->id != bl->id && battle_check_target(src,bl,BCT_ENEMY) > 0 )
  2618.  				status_fix_damage(src,bl,9999,clif_damage(src,bl,tick,0,0,9999,0,0,0));
  2619. @@ -8629,7 +8629,7 @@
  2620.  				flag |= 1;
  2621.  			map_foreachinrange(skill_area_sub, src, skill_get_splash(skill_id,skill_lv),BL_PC, src, skill_id, skill_lv, tick, flag|BCT_ENEMY|BCT_SELF, skill_castend_nodamage_id);
  2622.  			clif_skill_nodamage(src, bl, skill_id, skill_lv,
  2623. -				sc_start(src,SC_STOP,100,skill_lv,skill_get_time2(skill_id,skill_lv)));
  2624. +				sc_start(src,src,SC_STOP,100,skill_lv,skill_get_time2(skill_id,skill_lv)));
  2625.  			if( flag&2 ) // Dealed here to prevent conflicts
  2626.  				status_fix_damage(src,bl,9999,clif_damage(src,bl,tick,0,0,9999,0,0,0));
  2627.  		}
  2628. @@ -8641,12 +8641,12 @@
  2629.  		if( flag&1 ) {	// These affect to to all party members near the caster.
  2630.  			struct status_change *sc = status_get_sc(src);
  2631.  			if( sc && sc->data[type] ) {
  2632. -				sc_start2(bl,type,100,skill_lv,sc->data[type]->val2,skill_get_time(skill_id,skill_lv));
  2633. +				sc_start2(src,bl,type,100,skill_lv,sc->data[type]->val2,skill_get_time(skill_id,skill_lv));
  2634.  			}
  2635.  		} else if( sd ) {
  2636.  			short lv = (short)skill_lv;
  2637.  			int count = skill_check_pc_partner(sd,skill_id,&lv,skill_get_splash(skill_id,skill_lv),1);
  2638. -			if( sc_start2(bl,type,100,skill_lv,count,skill_get_time(skill_id,skill_lv)) )
  2639. +			if( sc_start2(src,bl,type,100,skill_lv,count,skill_get_time(skill_id,skill_lv)) )
  2640.  				party_foreachsamemap(skill_area_sub,sd,skill_get_splash(skill_id,skill_lv),src,skill_id,skill_lv,tick,flag|BCT_PARTY|1,skill_castend_nodamage_id);
  2641.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,1);
  2642.  
  2643. @@ -8657,7 +8657,7 @@
  2644.  	case WM_BEYOND_OF_WARCRY:
  2645.  	case WM_UNLIMITED_HUMMING_VOICE:
  2646.  		if( flag&1 ) {
  2647. -			sc_start2(bl,type,100,skill_lv,skill_area_temp[0],skill_get_time(skill_id,skill_lv));
  2648. +			sc_start2(src,bl,type,100,skill_lv,skill_area_temp[0],skill_get_time(skill_id,skill_lv));
  2649.  		} else {	// These affect to all targets arround the caster.
  2650.  			short lv = (short)skill_lv;
  2651.  			skill_area_temp[0] = (sd) ? skill_check_pc_partner(sd,skill_id,&lv,skill_get_splash(skill_id,skill_lv),1) : 50; // 50% chance in non BL_PC (clones).
  2652. @@ -8758,7 +8758,7 @@
  2653.  			int rate = (15 + 5 * skill_lv) + status_get_int(src)/5 + (sd ? sd->status.job_level : 0);
  2654.  			rate -= status_get_int(bl)/6 - status_get_luk(bl)/10;
  2655.  			clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
  2656. -			sc_start2(bl, type, rate, skill_lv, 1, skill_get_time(skill_id, skill_lv));
  2657. +			sc_start2(src,bl, type, rate, skill_lv, 1, skill_get_time(skill_id, skill_lv));
  2658.  		}
  2659.  		break;
  2660.  
  2661. @@ -8767,7 +8767,7 @@
  2662.  			//[(Skill Level x 4) + (Voice Lessons Skill Level x 2) + (Caster's Base Level / 15) + (Caster's Job Level / 5)] %
  2663.  			int rate = (4 * skill_lv) + ( (sd) ? pc_checkskill(sd,WM_LESSON)*2 + sd->status.job_level/5 : 0 ) + status_get_lv(src) / 15;
  2664.  			if( bl != src )
  2665. -				sc_start(bl,type,rate,skill_lv,skill_get_time(skill_id,skill_lv));
  2666. +				sc_start(src,bl,type,rate,skill_lv,skill_get_time(skill_id,skill_lv));
  2667.  		}else {
  2668.  			clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
  2669.  			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR,
  2670. @@ -8874,7 +8874,7 @@
  2671.  					status_change_end(src, type, INVALID_TIMER); // the first one cancels and the last one will take effect resetting the timer
  2672.  				}
  2673.  				clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
  2674. -				sc_start2(bl, type, 100, skill_lv, src->id, skill_get_time(skill_id,skill_lv));
  2675. +				sc_start2(src,bl, type, 100, skill_lv, src->id, skill_get_time(skill_id,skill_lv));
  2676.  				(sc->bs_counter)++;
  2677.  			} else if( sd ) {
  2678.  				clif_skill_fail(sd, skill_id, USESKILL_FAIL_LEVEL, 0);
  2679. @@ -8886,7 +8886,7 @@
  2680.  	case GN_MANDRAGORA:
  2681.  		if( flag&1 ) {
  2682.  			if ( clif_skill_nodamage(bl, src, skill_id, skill_lv,
  2683. -									 sc_start(bl, type, 25 + 10 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv))) )
  2684. +									 sc_start(src,bl, type, 25 + 10 * skill_lv, skill_lv, skill_get_time(skill_id, skill_lv))) )
  2685.  				status_zap(bl, 0, status_get_max_sp(bl) * (25 + 5 * skill_lv) / 100);
  2686.  		} else
  2687.  			map_foreachinrange(skill_area_sub, bl, skill_get_splash(skill_id, skill_lv), BL_CHAR,
  2688. @@ -8969,8 +8969,8 @@
  2689.  					clif_skill_damage(src, ( skill_id == EL_GUST || skill_id == EL_BLAST || skill_id == EL_WILD_STORM )?src:bl, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
  2690.  					if( skill_id == EL_WIND_STEP )	// There aren't teleport, just push the master away.
  2691.  						skill_blown(src,bl,(rnd()%skill_get_blewcount(skill_id,skill_lv))+1,rand()%8,0);
  2692. -					sc_start(src,type2,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2693. -					sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2694. +					sc_start(src,src,type2,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2695. +					sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2696.  				}
  2697.  			}
  2698.  		}
  2699. @@ -8997,8 +8997,8 @@
  2700.  				} else {
  2701.  					// This not heals at the end.
  2702.  					clif_skill_damage(src, src, tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
  2703. -					sc_start(src,type2,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2704. -					sc_start(bl,type,100,src->id,skill_get_time(skill_id,skill_lv));
  2705. +					sc_start(src,src,type2,100,skill_lv,skill_get_time(skill_id,skill_lv));
  2706. +					sc_start(src,bl,type,100,src->id,skill_get_time(skill_id,skill_lv));
  2707.  				}
  2708.  			}
  2709.  		}
  2710. @@ -9038,7 +9038,7 @@
  2711.  	case KO_KYOUGAKU:
  2712.  		if( dstsd && tsc && !tsc->data[type] && rand()%100 < tstatus->int_/2 ){
  2713.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,
  2714. -				sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2715. +				sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2716.  		}else if( sd )
  2717.  			clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  2718.  		break;
  2719. @@ -9047,10 +9047,10 @@
  2720.  		if( dstsd && tsc && !tsc->data[type] &&
  2721.  			rand()%100 < ((45+5*skill_lv) + skill_lv*5 - status_get_int(bl)/2) ){//[(Base chance of success) + (Skill Level x 5) - (int / 2)]%.
  2722.  			clif_skill_nodamage(src,bl,skill_id,skill_lv,
  2723. -				status_change_start(bl,type,10000,skill_lv,0,0,0,skill_get_time(skill_id,skill_lv),1));
  2724. +				status_change_start(src, bl,type,10000,skill_lv,0,0,0,skill_get_time(skill_id,skill_lv),1));
  2725.  			status_zap(bl, tstatus->max_hp*skill_lv*5/100 , 0);
  2726.  			if( status_get_lv(bl) <= status_get_lv(src) )
  2727. -				status_change_start(bl,SC_COMA,10,skill_lv,0,src->id,0,0,0);
  2728. +				status_change_start(src, bl,SC_COMA,10,skill_lv,0,src->id,0,0,0);
  2729.  		}else if( sd )
  2730.  			clif_skill_fail(sd,skill_id,USESKILL_FAIL_LEVEL,0);
  2731.  		break;
  2732. @@ -9067,14 +9067,14 @@
  2733.  			if (unit_movepos(src,bl->x,bl->y,0,0)) {
  2734.  				clif_skill_nodamage(src,src,skill_id,skill_lv,1);
  2735.  				clif_slide(src,bl->x,bl->y) ;
  2736. -				sc_start(src,SC_CONFUSION,80,skill_lv,skill_get_time(skill_id,skill_lv));
  2737. +				sc_start(src,src,SC_CONFUSION,80,skill_lv,skill_get_time(skill_id,skill_lv));
  2738.  				if (unit_movepos(bl,x,y,0,0))
  2739.  				{
  2740.  					clif_skill_damage(bl,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, -1, 6);
  2741.  					if( bl->type == BL_PC && pc_issit((TBL_PC*)bl))
  2742.  						clif_sitting(bl); //Avoid sitting sync problem
  2743.  					clif_slide(bl,x,y) ;
  2744. -					sc_start(bl,SC_CONFUSION,80,skill_lv,skill_get_time(skill_id,skill_lv));
  2745. +					sc_start(src,bl,SC_CONFUSION,80,skill_lv,skill_get_time(skill_id,skill_lv));
  2746.  				}
  2747.  			}
  2748.  		}
  2749. @@ -9092,7 +9092,7 @@
  2750.  	case KG_KYOMU:
  2751.  	case KG_KAGEMUSYA:
  2752.  		clif_skill_nodamage(src,bl,skill_id,skill_lv,
  2753. -			sc_start(bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2754. +			sc_start(src,bl,type,100,skill_lv,skill_get_time(skill_id,skill_lv)));
  2755.  		clif_skill_damage(src,bl,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
  2756.  		break;
  2757.  
  2758. @@ -9101,8 +9101,8 @@
  2759.  			if(tsc && ( tsc->option&(OPTION_CLOAK|OPTION_HIDE) ||
  2760.  				tsc->data[SC_CAMOUFLAGE] || tsc->data[SC__SHADOWFORM] ||
  2761.  				tsc->data[SC_MARIONETTE] || tsc->data[SC_HARMONIZE])){
  2762. -					sc_start(src, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2763. -					sc_start(bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2764. +					sc_start(src,src, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2765. +					sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2766.  					status_change_end(bl, SC_HIDING, INVALID_TIMER);
  2767.  					status_change_end(bl, SC_CLOAKING, INVALID_TIMER);
  2768.  					status_change_end(bl, SC_CLOAKINGEXCEED, INVALID_TIMER);
  2769. @@ -9113,7 +9113,7 @@
  2770.  			}
  2771.  			if( skill_area_temp[2] == 1 ){
  2772.  				clif_skill_damage(src,src,tick, status_get_amotion(src), 0, -30000, 1, skill_id, skill_lv, 6);
  2773. -				sc_start(src, SC_STOP, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2774. +				sc_start(src,src, SC_STOP, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2775.  			}
  2776.  		}else{
  2777.  			skill_area_temp[2] = 0;
  2778. @@ -9133,18 +9133,18 @@
  2779.                      if (tsc->data[scs[i]]) status_change_end(bl, scs[i], INVALID_TIMER);
  2780.                  }
  2781.                  if (!tsc->data[SC_SILENCE]) //put inavoidable silence on target
  2782. -                        status_change_start(bl, SC_SILENCE, 100, skill_lv, 0,0,0, skill_get_time(skill_id, skill_lv),1|2|8);
  2783. +                        status_change_start(src, bl, SC_SILENCE, 100, skill_lv, 0,0,0, skill_get_time(skill_id, skill_lv),1|2|8);
  2784.  	    }
  2785.  	    heal = status_get_matk_min(src)*4;
  2786.              status_heal(bl, heal, 0, 7);
  2787.  
  2788.  	    //now inflict silence on everyone
  2789.  	    if(ssc && !ssc->data[SC_SILENCE]) //put inavoidable silence on homun
  2790. -		status_change_start(src, SC_SILENCE, 100, skill_lv, 0,0,0, skill_get_time(skill_id, skill_lv),1|2|8);
  2791. +		status_change_start(src, src, SC_SILENCE, 100, skill_lv, 0,0,0, skill_get_time(skill_id, skill_lv),1|2|8);
  2792.  	    if(m_bl){
  2793.  		struct status_change *msc = status_get_sc(m_bl);
  2794.  		if(msc && !msc->data[SC_SILENCE]) //put inavoidable silence on master
  2795. -		    status_change_start(m_bl, SC_SILENCE, 100, skill_lv, 0,0,0, skill_get_time(skill_id, skill_lv),1|2|8);
  2796. +		    status_change_start(src, m_bl, SC_SILENCE, 100, skill_lv, 0,0,0, skill_get_time(skill_id, skill_lv),1|2|8);
  2797.  	    }
  2798.              if (hd)
  2799.                  skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
  2800. @@ -9160,17 +9160,17 @@
  2801.                  if(s_bl && s_bl->type==BL_PC){
  2802.                      status_set_sp(s_bl,status_get_max_sp(s_bl)/2,0); //master drain 50% sp
  2803.                      clif_send_homdata(((TBL_PC *)s_bl), SP_HUNGRY, hd->homunculus.hunger); //refresh hunger info
  2804. -                    sc_start(s_bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)); //gene bonus
  2805. +                    sc_start(src,s_bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)); //gene bonus
  2806.                  }
  2807. -                sc_start(bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2808. +                sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2809.  		skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
  2810.              }
  2811.              break;
  2812.         case MH_GRANITIC_ARMOR:
  2813.         case MH_PYROCLASTIC: {
  2814.                  struct block_list *s_bl = battle_get_master(src);
  2815. -                if(s_bl) sc_start2(s_bl, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv)); //start on master
  2816. -                sc_start2(bl, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv));
  2817. +                if(s_bl) sc_start2(src,s_bl, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv)); //start on master
  2818. +                sc_start2(src,bl, type, 100, skill_lv, hd->homunculus.level, skill_get_time(skill_id, skill_lv));
  2819.  		if (hd) skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
  2820.              }
  2821.              break;
  2822. @@ -9197,7 +9197,7 @@
  2823.  	}
  2824.          case MH_MAGMA_FLOW:
  2825.          case MH_PAIN_KILLER:
  2826. -           sc_start(bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2827. +           sc_start(src,bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
  2828.             if (hd)
  2829.                  skill_blockhomun_start(hd, skill_id, skill_get_cooldown(skill_id, skill_lv));
  2830.             break;
  2831. @@ -9218,7 +9218,7 @@
  2832.                              delete_timer(sum_md->deletetimer, mob_timer_delete);
  2833.                          sum_md->deletetimer = add_timer(gettick() + skill_get_time(skill_id, skill_lv), mob_timer_delete, sum_md->bl.id, 0);
  2834.                          mob_spawn(sum_md); //Now it is ready for spawning.
  2835. -                        sc_start4(&sum_md->bl, SC_MODECHANGE, 100, 1, 0, MD_CANATTACK|MD_AGGRESSIVE, 0, 60000);
  2836. +                        sc_start4(src,&sum_md->bl, SC_MODECHANGE, 100, 1, 0, MD_CANATTACK|MD_AGGRESSIVE, 0, 60000);
  2837.                      }
  2838.                  }
  2839.  		if (hd)
  2840. @@ -9498,7 +9498,7 @@
  2841.  					if( timer && timer->func == status_change_timer && DIFF_TICK(timer->tick,gettick()+skill_get_time(ud->skill_id, ud->skill_lv)) > 0 )
  2842.  						break;
  2843.  				}
  2844. -				sc_start2(src, SC_STRIPSHIELD, 100, 0, 1, skill_get_time(ud->skill_id, ud->skill_lv));
  2845. +				sc_start2(src,src, SC_STRIPSHIELD, 100, 0, 1, skill_get_time(ud->skill_id, ud->skill_lv));
  2846.  				break;
  2847.  			}
  2848.  		}
  2849. @@ -9557,7 +9557,7 @@
  2850.  			status_change_end(src, SC_EXPLOSIONSPIRITS, INVALID_TIMER);
  2851.  			status_change_end(src, SC_BLADESTOP, INVALID_TIMER);
  2852.  #ifdef RENEWAL
  2853. -			sc_start(src, SC_EXTREMITYFIST2, 100, ud->skill_lv, skill_get_time(ud->skill_id, ud->skill_lv));
  2854. +			sc_start(src,src, SC_EXTREMITYFIST2, 100, ud->skill_lv, skill_get_time(ud->skill_id, ud->skill_lv));
  2855.  #endif
  2856.  		}
  2857.  		if (target && target->m == src->m)
  2858. @@ -9985,14 +9985,14 @@
  2859.  			}
  2860.  			skill_clear_unitgroup(src);
  2861.  			if( skill_unitsetting(src,skill_id,skill_lv,x,y,0) )
  2862. -				sc_start4(src,type,100,skill_lv,0,0,src->id,skill_get_time(skill_id,skill_lv));
  2863. +				sc_start4(src,src,type,100,skill_lv,0,0,src->id,skill_get_time(skill_id,skill_lv));
  2864.  			flag|=1;
  2865.  		}
  2866.  		break;
  2867.  	case CG_HERMODE:
  2868.  		skill_clear_unitgroup(src);
  2869.  		if ((sg = skill_unitsetting(src,skill_id,skill_lv,x,y,0)))
  2870. -			sc_start4(src,SC_DANCING,100,
  2871. +			sc_start4(src,src,SC_DANCING,100,
  2872.  				skill_id,0,skill_lv,sg->group_id,skill_get_time(skill_id,skill_lv));
  2873.  		flag|=1;
  2874.  		break;
  2875. @@ -10152,7 +10152,7 @@
  2876.  
  2877.  	case HW_GRAVITATION:
  2878.  		if ((sg = skill_unitsetting(src,skill_id,skill_lv,x,y,0)))
  2879. -			sc_start4(src,type,100,skill_lv,0,BCT_SELF,sg->group_id,skill_get_time(skill_id,skill_lv));
  2880. +			sc_start4(src,src,type,100,skill_lv,0,BCT_SELF,sg->group_id,skill_get_time(skill_id,skill_lv));
  2881.  		flag|=1;
  2882.  		break;
  2883.  
  2884. @@ -10187,7 +10187,7 @@
  2885.  	case SG_STAR_WARM:
  2886.  		skill_clear_unitgroup(src);
  2887.  		if ((sg = skill_unitsetting(src,skill_id,skill_lv,src->x,src->y,0)))
  2888. -			sc_start4(src,type,100,skill_lv,0,0,sg->group_id,skill_get_time(skill_id,skill_lv));
  2889. +			sc_start4(src,src,type,100,skill_lv,0,0,sg->group_id,skill_get_time(skill_id,skill_lv));
  2890.  		flag|=1;
  2891.  		break;
  2892.  
  2893. @@ -10203,13 +10203,13 @@
  2894.  			if (!sg) break;
  2895.  			if (sce)
  2896.  				status_change_end(src, type, INVALID_TIMER); //Was under someone else's Gospel. [Skotlex]
  2897. -			sc_start4(src,type,100,skill_lv,0,sg->group_id,BCT_SELF,skill_get_time(skill_id,skill_lv));
  2898. +			sc_start4(src,src,type,100,skill_lv,0,sg->group_id,BCT_SELF,skill_get_time(skill_id,skill_lv));
  2899.  			clif_skill_poseffect(src, skill_id, skill_lv, 0, 0, tick); // PA_GOSPEL music packet
  2900.  		}
  2901.  		break;
  2902.  	case NJ_TATAMIGAESHI:
  2903.  		if (skill_unitsetting(src,skill_id,skill_lv,src->x,src->y,0))
  2904. -			sc_start(src,type,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  2905. +			sc_start(src,src,type,100,skill_lv,skill_get_time2(skill_id,skill_lv));
  2906.  		break;
  2907.  
  2908.  	case AM_RESURRECTHOMUN:	//[orn]
  2909. @@ -10304,7 +10304,7 @@
  2910.  	case NC_STEALTHFIELD:
  2911.  		skill_clear_unitgroup(src); // To remove previous skills - cannot used combined
  2912.  		if( (sg = skill_unitsetting(src,skill_id,skill_lv,src->x,src->y,0)) != NULL ) {
  2913. -			sc_start2(src,skill_id == NC_NEUTRALBARRIER ? SC_NEUTRALBARRIER_MASTER : SC_STEALTHFIELD_MASTER,100,skill_lv,sg->group_id,skill_get_time(skill_id,skill_lv));
  2914. +			sc_start2(src,src,skill_id == NC_NEUTRALBARRIER ? SC_NEUTRALBARRIER_MASTER : SC_STEALTHFIELD_MASTER,100,skill_lv,sg->group_id,skill_get_time(skill_id,skill_lv));
  2915.  			if( sd ) pc_overheat(sd,1);
  2916.  		}
  2917.  		break;
  2918. @@ -10354,7 +10354,7 @@
  2919.  		if( sc && sc->data[SC_BANDING] )
  2920.  			status_change_end(src,SC_BANDING,INVALID_TIMER);
  2921.  		else if( (sg = skill_unitsetting(src,skill_id,skill_lv,src->x,src->y,0)) != NULL ) {
  2922. -			sc_start4(src,SC_BANDING,100,skill_lv,0,0,sg->group_id,skill_get_time(skill_id,skill_lv));
  2923. +			sc_start4(src,src,SC_BANDING,100,skill_lv,0,0,sg->group_id,skill_get_time(skill_id,skill_lv));
  2924.  			if( sd ) pc_banding(sd,skill_lv);
  2925.  		}
  2926.  		clif_skill_nodamage(src,src,skill_id,skill_lv,1);
  2927. @@ -10430,7 +10430,7 @@
  2928.  		if( sc && sc->data[type] )
  2929.  			status_change_end(src,type,INVALID_TIMER);
  2930.  		clif_skill_nodamage(src, src ,skill_id, skill_lv,
  2931. -							sc_start2(src, type, 100, skill_id, skill_lv, skill_get_time(skill_id, skill_lv)));
  2932. +			sc_start2(src,src, type, 100, skill_id, skill_lv, skill_get_time(skill_id, skill_lv)));
  2933.  		break;
  2934.  
  2935.  	case SC_BLOODYLUST: //set in another group so instance will move if recasted
  2936. @@ -11084,7 +11084,7 @@
  2937.  			sd->skill_lv_dance = skill_lv;
  2938.  		}
  2939.  		if (
  2940. -			sc_start4(src, SC_DANCING, 100, skill_id, group->group_id, skill_lv,
  2941. +			sc_start4(src,src, SC_DANCING, 100, skill_id, group->group_id, skill_lv,
  2942.  				(group->state.song_dance&2?BCT_SELF:0), limit+1000) &&
  2943.  			sd && group->state.song_dance&2 && skill_id != CG_HERMODE //Hermod is a encore with a warp!
  2944.  		)
  2945. @@ -11249,7 +11249,7 @@
  2946.  				break;
  2947.  			} else if( sc && battle_check_target(&sg->unit->bl,bl,sg->target_flag) > 0 ) {
  2948.  				int sec = skill_get_time2(sg->skill_id,sg->skill_lv);
  2949. -				if( status_change_start(bl,type,10000,sg->skill_lv,1,sg->group_id,0,sec,8) ) {
  2950. +				if( status_change_start(&src->bl, bl,type,10000,sg->skill_lv,1,sg->group_id,0,sec,8) ) {
  2951.  					const struct TimerData* td = sc->data[type]?get_timer(sc->data[type]->timer):NULL;
  2952.  					if( td )
  2953.  						sec = DIFF_TICK(td->tick, tick);
  2954. @@ -11264,14 +11264,14 @@
  2955.  			break;
  2956.  		case UNT_SAFETYWALL:
  2957.  			if (!sce)
  2958. -				sc_start4(bl,type,100,sg->skill_lv,sg->skill_id,sg->group_id,0,sg->limit);
  2959. +				sc_start4(&src->bl,bl,type,100,sg->skill_lv,sg->skill_id,sg->group_id,0,sg->limit);
  2960.  			break;
  2961.  
  2962.  		case UNT_PNEUMA:
  2963.  		case UNT_CHAOSPANIC:
  2964.  		case UNT_MAELSTROM:
  2965.  			if (!sce)
  2966. -				sc_start4(bl,type,100,sg->skill_lv,sg->group_id,0,0,sg->limit);
  2967. +				sc_start4(&src->bl,bl,type,100,sg->skill_lv,sg->group_id,0,0,sg->limit);
  2968.  			break;
  2969.  		case UNT_BLOODYLUST:
  2970.  			if (sg->src_id == bl->id)
  2971. @@ -11280,11 +11280,11 @@
  2972.  				TBL_PC *sd = BL_CAST(BL_PC, bl); //prevent fullheal exploit
  2973.  				if (sd && sd->bloodylust_tick && DIFF_TICK(gettick(), sd->bloodylust_tick) < skill_get_time2(SC_BLOODYLUST, 1))
  2974.  					clif_skill_nodamage(&src->bl,bl,sg->skill_id,sg->skill_lv,
  2975. -						sc_start4(bl, type, 100, sg->skill_lv, 1, 0, 0, skill_get_time(LK_BERSERK, sg->skill_lv)));
  2976. +						sc_start4(&src->bl,bl, type, 100, sg->skill_lv, 1, 0, 0, skill_get_time(LK_BERSERK, sg->skill_lv)));
  2977.  				else {
  2978.  					if (sd) sd->bloodylust_tick = gettick();
  2979.  						clif_skill_nodamage(&src->bl,bl,sg->skill_id,sg->skill_lv,
  2980. -							sc_start4(bl, type, 100, sg->skill_lv, 0, 0, 0, skill_get_time(LK_BERSERK, sg->skill_lv)));
  2981. +							sc_start4(&src->bl,bl, type, 100, sg->skill_lv, 0, 0, 0, skill_get_time(LK_BERSERK, sg->skill_lv)));
  2982.  				}
  2983.  			}
  2984.  			break;
  2985. @@ -11322,19 +11322,19 @@
  2986.  
  2987.  		case UNT_QUAGMIRE:
  2988.  			if( !sce && battle_check_target(&sg->unit->bl,bl,sg->target_flag) > 0 )
  2989. -				sc_start4(bl,type,100,sg->skill_lv,sg->group_id,0,0,sg->limit);
  2990. +				sc_start4(&src->bl,bl,type,100,sg->skill_lv,sg->group_id,0,0,sg->limit);
  2991.  			break;
  2992.  
  2993.  		case UNT_VOLCANO:
  2994.  		case UNT_DELUGE:
  2995.  		case UNT_VIOLENTGALE:
  2996.  			if(!sce)
  2997. -				sc_start(bl,type,100,sg->skill_lv,sg->limit);
  2998. +				sc_start(&src->bl,bl,type,100,sg->skill_lv,sg->limit);
  2999.  			break;
  3000.  
  3001.  		case UNT_SUITON:
  3002.  			if(!sce)
  3003. -				sc_start4(bl,type,100,sg->skill_lv,
  3004. +				sc_start4(&src->bl,bl,type,100,sg->skill_lv,
  3005.  				map_flag_vs(bl->m) || battle_check_target(&src->bl,bl,BCT_ENEMY)>0?1:0, //Send val3 =1 to reduce agi.
  3006.  				0,0,sg->limit);
  3007.  			break;
  3008. @@ -11353,7 +11353,7 @@
  3009.  			if (sg->src_id==bl->id && !(sc && sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_BARDDANCER))
  3010.  				return skill_id;
  3011.  			if (!sce)
  3012. -				sc_start4(bl,type,100,sg->skill_lv,sg->val1,sg->val2,0,sg->limit);
  3013. +				sc_start4(&src->bl,bl,type,100,sg->skill_lv,sg->val1,sg->val2,0,sg->limit);
  3014.  			break;
  3015.  		case UNT_WHISTLE:
  3016.  		case UNT_ASSASSINCROSS:
  3017. @@ -11368,7 +11368,7 @@
  3018.  
  3019.  			if (!sc) return 0;
  3020.  			if (!sce)
  3021. -				sc_start4(bl,type,100,sg->skill_lv,sg->val1,sg->val2,0,sg->limit);
  3022. +				sc_start4(&src->bl,bl,type,100,sg->skill_lv,sg->val1,sg->val2,0,sg->limit);
  3023.  			else if (sce->val4 == 1) { //Readjust timers since the effect will not last long.
  3024.  				sce->val4 = 0; //remove the mark that we stepped out
  3025.  				delete_timer(sce->timer, status_change_timer);
  3026. @@ -11379,7 +11379,7 @@
  3027.  		case UNT_FOGWALL:
  3028.  			if (!sce)
  3029.  			{
  3030. -				sc_start4(bl, type, 100, sg->skill_lv, sg->val1, sg->val2, sg->group_id, sg->limit);
  3031. +				sc_start4(&src->bl,bl, type, 100, sg->skill_lv, sg->val1, sg->val2, sg->group_id, sg->limit);
  3032.  				if (battle_check_target(&src->bl,bl,BCT_ENEMY)>0)
  3033.  					skill_additional_effect (ss, bl, sg->skill_id, sg->skill_lv, BF_MISC, ATK_DEF, tick);
  3034.  			}
  3035. @@ -11387,7 +11387,7 @@
  3036.  
  3037.  		case UNT_GRAVITATION:
  3038.  			if (!sce)
  3039. -				sc_start4(bl,type,100,sg->skill_lv,0,BCT_ENEMY,sg->group_id,sg->limit);
  3040. +				sc_start4(&src->bl,bl,type,100,sg->skill_lv,0,BCT_ENEMY,sg->group_id,sg->limit);
  3041.  			break;
  3042.  
  3043.  		// officially, icewall has no problems existing on occupied cells [ultramage]
  3044. @@ -11415,7 +11415,7 @@
  3045.  
  3046.  		case UNT_VOLCANIC_ASH:
  3047.  			if (!sce)
  3048. -				sc_start(bl, SC_ASH, 100, sg->skill_lv, skill_get_time(MH_VOLCANIC_ASH, sg->skill_lv));
  3049. +				sc_start(&src->bl,bl, SC_ASH, 100, sg->skill_lv, skill_get_time(MH_VOLCANIC_ASH, sg->skill_lv));
  3050.  			break;
  3051.  
  3052.  		case UNT_GD_LEADERSHIP:
  3053. @@ -11423,7 +11423,7 @@
  3054.  		case UNT_GD_SOULCOLD:
  3055.  		case UNT_GD_HAWKEYES:
  3056.  			if ( !sce )
  3057. -				sc_start4(bl,type,100,sg->skill_lv,0,0,0,1000);
  3058. +				sc_start4(&src->bl,bl,type,100,sg->skill_lv,0,0,0,1000);
  3059.  			break;
  3060.  	}
  3061.  	return skill_id;
  3062. @@ -11636,7 +11636,7 @@
  3063.  		case UNT_MANHOLE:
  3064.  			if( sg->val2 == 0 && tsc && (sg->unit_id == UNT_ANKLESNARE || bl->id != sg->src_id) ) {
  3065.  				int sec = skill_get_time2(sg->skill_id,sg->skill_lv);
  3066. -				if( status_change_start(bl,type,10000,sg->skill_lv,sg->group_id,0,0,sec, 8) ) {
  3067. +				if( status_change_start(&src->bl,bl,type,10000,sg->skill_lv,sg->group_id,0,0,sec, 8) ) {
  3068.  					const struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL;
  3069.  					if( td )
  3070.  						sec = DIFF_TICK(td->tick, tick);
  3071. @@ -11666,7 +11666,7 @@
  3072.  			if( bl->id != ss->id ) {
  3073.  				if( status_get_mode(bl)&MD_BOSS )
  3074.  					break;
  3075. -				if( status_change_start(bl,type,10000,sg->skill_lv,sg->group_id,0,0,skill_get_time2(sg->skill_id, sg->skill_lv), 8) ) {
  3076. +				if( status_change_start(&src->bl,bl,type,10000,sg->skill_lv,sg->group_id,0,0,skill_get_time2(sg->skill_id, sg->skill_lv), 8) ) {
  3077.  
  3078.  					map_moveblock(bl, src->bl.x, src->bl.y, tick);
  3079.  					clif_fixpos(bl);
  3080. @@ -11680,7 +11680,7 @@
  3081.  
  3082.  		case UNT_VENOMDUST:
  3083.  			if(tsc && !tsc->data[type])
  3084. -				status_change_start(bl,type,10000,sg->skill_lv,sg->group_id,0,0,skill_get_time2(sg->skill_id,sg->skill_lv),0);
  3085. +				status_change_start(&src->bl,bl,type,10000,sg->skill_lv,sg->group_id,0,0,skill_get_time2(sg->skill_id,sg->skill_lv),0);
  3086.  			break;
  3087.  
  3088.  
  3089. @@ -11781,46 +11781,46 @@
  3090.  						if (tsd) clif_gospel_info(tsd, 0x15);
  3091.  						break;
  3092.  					case 2: // Immunity to all status
  3093. -						sc_start(bl,SC_SCRESIST,100,100,time);
  3094. +						sc_start(&src->bl,bl,SC_SCRESIST,100,100,time);
  3095.  						if (tsd) clif_gospel_info(tsd, 0x16);
  3096.  						break;
  3097.  					case 3: // MaxHP +100%
  3098. -						sc_start(bl,SC_INCMHPRATE,100,100,time);
  3099. +						sc_start(&src->bl,bl,SC_INCMHPRATE,100,100,time);
  3100.  						if (tsd) clif_gospel_info(tsd, 0x17);
  3101.  						break;
  3102.  					case 4: // MaxSP +100%
  3103. -						sc_start(bl,SC_INCMSPRATE,100,100,time);
  3104. +						sc_start(&src->bl,bl,SC_INCMSPRATE,100,100,time);
  3105.  						if (tsd) clif_gospel_info(tsd, 0x18);
  3106.  						break;
  3107.  					case 5: // All stats +20
  3108. -						sc_start(bl,SC_INCALLSTATUS,100,20,time);
  3109. +						sc_start(&src->bl,bl,SC_INCALLSTATUS,100,20,time);
  3110.  						if (tsd) clif_gospel_info(tsd, 0x19);
  3111.  						break;
  3112.  					case 6: // Level 10 Blessing
  3113. -						sc_start(bl,SC_BLESSING,100,10,time);
  3114. +						sc_start(&src->bl,bl,SC_BLESSING,100,10,time);
  3115.  						break;
  3116.  					case 7: // Level 10 Increase AGI
  3117. -						sc_start(bl,SC_INCREASEAGI,100,10,time);
  3118. +						sc_start(&src->bl,bl,SC_INCREASEAGI,100,10,time);
  3119.  						break;
  3120.  					case 8: // Enchant weapon with Holy element
  3121. -						sc_start(bl,SC_ASPERSIO,100,1,time);
  3122. +						sc_start(&src->bl,bl,SC_ASPERSIO,100,1,time);
  3123.  						if (tsd) clif_gospel_info(tsd, 0x1c);
  3124.  						break;
  3125.  					case 9: // Enchant armor with Holy element
  3126. -						sc_start(bl,SC_BENEDICTIO,100,1,time);
  3127. +						sc_start(&src->bl,bl,SC_BENEDICTIO,100,1,time);
  3128.  						if (tsd) clif_gospel_info(tsd, 0x1d);
  3129.  						break;
  3130.  					case 10: // DEF +25%
  3131. -						sc_start(bl,SC_INCDEFRATE,100,25,time);
  3132. +						sc_start(&src->bl,bl,SC_INCDEFRATE,100,25,time);
  3133.  						if (tsd) clif_gospel_info(tsd, 0x1e);
  3134.  						break;
  3135.  					case 11: // ATK +100%
  3136. -						sc_start(bl,SC_INCATKRATE,100,100,time);
  3137. +						sc_start(&src->bl,bl,SC_INCATKRATE,100,100,time);
  3138.  						if (tsd) clif_gospel_info(tsd, 0x1f);
  3139.  						break;
  3140.  					case 12: // HIT/Flee +50
  3141. -						sc_start(bl,SC_INCHIT,100,50,time);
  3142. -						sc_start(bl,SC_INCFLEE,100,50,time);
  3143. +						sc_start(&src->bl,bl,SC_INCHIT,100,50,time);
  3144. +						sc_start(&src->bl,bl,SC_INCFLEE,100,50,time);
  3145.  						if (tsd) clif_gospel_info(tsd, 0x20);
  3146.  						break;
  3147.  				}
  3148. @@ -11835,28 +11835,28 @@
  3149.  						skill_attack(BF_MISC,ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
  3150.  						break;
  3151.  					case 1: // Curse
  3152. -						sc_start(bl,SC_CURSE,100,1,time);
  3153. +						sc_start(&src->bl,bl,SC_CURSE,100,1,time);
  3154.  						break;
  3155.  					case 2: // Blind
  3156. -						sc_start(bl,SC_BLIND,100,1,time);
  3157. +						sc_start(&src->bl,bl,SC_BLIND,100,1,time);
  3158.  						break;
  3159.  					case 3: // Poison
  3160. -						sc_start(bl,SC_POISON,100,1,time);
  3161. +						sc_start(&src->bl,bl,SC_POISON,100,1,time);
  3162.  						break;
  3163.  					case 4: // Level 10 Provoke
  3164. -						sc_start(bl,SC_PROVOKE,100,10,time);
  3165. +						sc_start(&src->bl,bl,SC_PROVOKE,100,10,time);
  3166.  						break;
  3167.  					case 5: // DEF -100%
  3168. -						sc_start(bl,SC_INCDEFRATE,100,-100,time);
  3169. +						sc_start(&src->bl,bl,SC_INCDEFRATE,100,-100,time);
  3170.  						break;
  3171.  					case 6: // ATK -100%
  3172. -						sc_start(bl,SC_INCATKRATE,100,-100,time);
  3173. +						sc_start(&src->bl,bl,SC_INCATKRATE,100,-100,time);
  3174.  						break;
  3175.  					case 7: // Flee -100%
  3176. -						sc_start(bl,SC_INCFLEERATE,100,-100,time);
  3177. +						sc_start(&src->bl,bl,SC_INCFLEERATE,100,-100,time);
  3178.  						break;
  3179.  					case 8: // Speed/ASPD -25%
  3180. -						sc_start4(bl,SC_GOSPEL,100,1,0,0,BCT_ENEMY,time);
  3181. +						sc_start4(&src->bl,bl,SC_GOSPEL,100,1,0,0,BCT_ENEMY,time);
  3182.  						break;
  3183.  				}
  3184.  			}
  3185. @@ -11872,7 +11872,7 @@
  3186.  				}
  3187.  
  3188.  				if( sg->src_id != bl->id && i <= 0 )
  3189. -					sc_start4(bl, type, 100, 0, 0, 0, src->bl.id, sg->interval + 100);
  3190. +					sc_start4(&src->bl,bl, type, 100, 0, 0, 0, src->bl.id, sg->interval + 100);
  3191.  			}
  3192.  			break;
  3193.  
  3194. @@ -11901,7 +11901,7 @@
  3195.  		 **/
  3196.  		case UNT_POISONSMOKE:
  3197.  			if( battle_check_target(ss,bl,BCT_ENEMY) > 0 && !(tsc && tsc->data[sg->val2]) && rnd()%100 < 20 )
  3198. -				sc_start(bl,sg->val2,100,sg->val3,skill_get_time2(GC_POISONINGWEAPON, 1));
  3199. +				sc_start(&src->bl,bl,sg->val2,100,sg->val3,skill_get_time2(GC_POISONINGWEAPON, 1));
  3200.  			break;
  3201.  
  3202.  		case UNT_EPICLESIS:
  3203. @@ -11918,7 +11918,7 @@
  3204.  					hp = tstatus->max_hp * hp / 100;
  3205.  					sp = tstatus->max_sp * sp / 100;
  3206.  					status_heal(bl, hp, sp, 2);
  3207. -					sc_start(bl, type, 100, sg->skill_lv, (sg->interval * 3) + 100);
  3208. +					sc_start(&src->bl,bl, type, 100, sg->skill_lv, (sg->interval * 3) + 100);
  3209.  				}
  3210.  				// Reveal hidden players every 5 seconds.
  3211.  				if( sg->val2 % 5 == 0 ) {
  3212. @@ -11936,7 +11936,7 @@
  3213.  			if( bl->id == sg->src_id )
  3214.  				break; // Dont work on Self (video shows that)
  3215.  		case UNT_NEUTRALBARRIER:
  3216. -			sc_start(bl,type,100,sg->skill_lv,sg->interval + 100);
  3217. +			sc_start(&src->bl,bl,type,100,sg->skill_lv,sg->interval + 100);
  3218.  			break;
  3219.  
  3220.  		case UNT_DIMENSIONDOOR:
  3221. @@ -11960,7 +11960,7 @@
  3222.  		case UNT_NETHERWORLD:
  3223.  			if( !(status_get_mode(bl)&MD_BOSS) && ss != bl && battle_check_target(&src->bl, bl, BCT_PARTY) > 0 ) {
  3224.  				if( !(tsc && tsc->data[type]) ){
  3225. -					sc_start(bl, type, 100, sg->skill_lv, skill_get_time2(sg->skill_id,sg->skill_lv));
  3226. +					sc_start(&src->bl,bl, type, 100, sg->skill_lv, skill_get_time2(sg->skill_id,sg->skill_lv));
  3227.  					sg->limit = DIFF_TICK(tick,sg->tick);
  3228.  					sg->unit_id = UNT_USED_TRAPS;
  3229.  				}
  3230. @@ -11970,7 +11970,7 @@
  3231.  			if( tsc ) {
  3232.  				if( !sg->val2 ) {
  3233.  					int sec = skill_get_time2(sg->skill_id, sg->skill_lv);
  3234. -					if( sc_start(bl, type, 100, sg->skill_lv, sec) ) {
  3235. +					if( sc_start(&src->bl,bl, type, 100, sg->skill_lv, sec) ) {
  3236.  						const struct TimerData* td = tsc->data[type]?get_timer(tsc->data[type]->timer):NULL;
  3237.  						if( td )
  3238.  							sec = DIFF_TICK(td->tick, tick);
  3239. @@ -11991,7 +11991,7 @@
  3240.  					case 1:
  3241.  					case 2:
  3242.  					default:
  3243. -						sc_start(bl, SC_BURNING, 4 + 4 * sg->skill_lv, sg->skill_lv,
  3244. +						sc_start(&src->bl,bl, SC_BURNING, 4 + 4 * sg->skill_lv, sg->skill_lv,
  3245.  								 skill_get_time2(sg->skill_id, sg->skill_lv));
  3246.  						skill_attack(skill_get_type(sg->skill_id), ss, &src->bl, bl,
  3247.  									 sg->skill_id, sg->skill_lv + 10 * sg->val2, tick, 0);
  3248. @@ -12006,11 +12006,11 @@
  3249.  			break;
  3250.  
  3251.  		case UNT_FIRE_EXPANSION_SMOKE_POWDER:
  3252. -			sc_start(bl, status_skill2sc(GN_FIRE_EXPANSION_SMOKE_POWDER), 100, sg->skill_lv, 1000);
  3253. +			sc_start(&src->bl,bl, status_skill2sc(GN_FIRE_EXPANSION_SMOKE_POWDER), 100, sg->skill_lv, 1000);
  3254.  			break;
  3255.  
  3256.  		case UNT_FIRE_EXPANSION_TEAR_GAS:
  3257. -			sc_start(bl, status_skill2sc(GN_FIRE_EXPANSION_TEAR_GAS), 100, sg->skill_lv, 1000);
  3258. +			sc_start(&src->bl,bl, status_skill2sc(GN_FIRE_EXPANSION_TEAR_GAS), 100, sg->skill_lv, 1000);
  3259.  			break;
  3260.  
  3261.  		case UNT_HELLS_PLANT:
  3262. @@ -12022,7 +12022,7 @@
  3263.  
  3264.  		case UNT_CLOUD_KILL:
  3265.  			if(tsc && !tsc->data[type])
  3266. -				status_change_start(bl,type,10000,sg->skill_lv,sg->group_id,0,0,skill_get_time2(sg->skill_id,sg->skill_lv),8);
  3267. +				status_change_start(&src->bl,bl,type,10000,sg->skill_lv,sg->group_id,0,0,skill_get_time2(sg->skill_id,sg->skill_lv),8);
  3268.  			skill_attack(skill_get_type(sg->skill_id),ss,&src->bl,bl,sg->skill_id,sg->skill_lv,tick,0);
  3269.  			break;
  3270.  
  3271. @@ -12037,7 +12037,7 @@
  3272.  				if( tsc && tsc->data[SC_AKAITSUKI] && hp )
  3273.  					hp = ~hp + 1;
  3274.  				status_heal(bl, hp, 0, 0);
  3275. -				sc_start(bl, SC_WARMER, 100, sg->skill_lv, skill_get_time2(sg->skill_id,sg->skill_lv));
  3276. +				sc_start(&src->bl,bl, SC_WARMER, 100, sg->skill_lv, skill_get_time2(sg->skill_id,sg->skill_lv));
  3277.  			}
  3278.  			break;
  3279.  
  3280. @@ -12046,7 +12046,7 @@
  3281.  		case UNT_WIND_INSIGNIA:
  3282.  		case UNT_EARTH_INSIGNIA:
  3283.  		case UNT_ZEPHYR:
  3284. -			sc_start(bl,type, 100, sg->skill_lv, sg->interval);
  3285. +			sc_start(&src->bl,bl,type, 100, sg->skill_lv, sg->interval);
  3286.  			if (sg->unit_id != UNT_ZEPHYR && !battle_check_undead(tstatus->race, tstatus->def_ele)) {
  3287.  				int hp = tstatus->max_hp / 100; //+1% each 5s
  3288.  				if ((sg->val3) % 5) { //each 5s
  3289. @@ -12072,7 +12072,7 @@
  3290.  
  3291.  				if( tsc && !tsc->data[type] &&
  3292.  					distance_xy(src->bl.x, src->bl.y, bl->x, bl->y) <= range)// don't consider outer bounderies
  3293. -					sc_start(bl, type, 100, sg->skill_lv, sec);
  3294. +					sc_start(&src->bl,bl, type, 100, sg->skill_lv, sec);
  3295.  
  3296.  				if( unit_is_walking(bl) && // wait until target stop walking
  3297.  					( tsc && tsc->data[type] && tsc->data[type]->val4 >= tsc->data[type]->val3-range ))
  3298. @@ -12106,25 +12106,25 @@
  3299.  			if( battle_check_target(&src->bl,bl,BCT_ENEMY) > 0 ){
  3300.  				switch( sg->unit_id ){
  3301.  					case UNT_ZENKAI_WATER:
  3302. -						sc_start(bl, SC_CRYSTALIZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3303. -						sc_start(bl, SC_FREEZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3304. -						sc_start(bl, SC_FREEZING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3305. +						sc_start(&src->bl,bl, SC_CRYSTALIZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3306. +						sc_start(&src->bl,bl, SC_FREEZE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3307. +						sc_start(&src->bl,bl, SC_FREEZING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3308.  						break;
  3309.  					case UNT_ZENKAI_LAND:
  3310. -						sc_start(bl, SC_STONE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3311. -						sc_start(bl, SC_POISON, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3312. +						sc_start(&src->bl,bl, SC_STONE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3313. +						sc_start(&src->bl,bl, SC_POISON, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3314.  						break;
  3315.  					case UNT_ZENKAI_FIRE:
  3316. -						sc_start(bl, SC_BURNING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3317. +						sc_start(&src->bl,bl, SC_BURNING, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3318.  						break;
  3319.  					case UNT_ZENKAI_WIND:
  3320. -						sc_start(bl, SC_SILENCE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3321. -						sc_start(bl, SC_SLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3322. -						sc_start(bl, SC_DEEPSLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3323. +						sc_start(&src->bl,bl, SC_SILENCE, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3324. +						sc_start(&src->bl,bl, SC_SLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3325. +						sc_start(&src->bl,bl, SC_DEEPSLEEP, sg->val1*5, sg->skill_lv, skill_get_time2(sg->skill_id, sg->skill_lv));
  3326.  						break;
  3327.  				}
  3328.  			}else
  3329. -				sc_start2(bl,type,100,sg->val1,sg->val2,skill_get_time2(sg->skill_id, sg->skill_lv));
  3330. +				sc_start2(&src->bl,bl,type,100,sg->val1,sg->val2,skill_get_time2(sg->skill_id, sg->skill_lv));
  3331.  			break;
  3332.  
  3333.  		case UNT_MAKIBISHI:
  3334. @@ -12140,7 +12140,7 @@
  3335.  			break;
  3336.  		case UNT_POISON_MIST:
  3337.  			skill_attack(BF_MAGIC, ss, &src->bl, bl, sg->skill_id, sg->skill_lv, tick, 0);
  3338. -			status_change_start(bl, SC_BLIND, rnd() % 100 > sg->skill_lv * 10, sg->skill_lv, sg->skill_id, 0, 0, skill_get_time2(sg->skill_id, sg->skill_lv), 2|8);
  3339. +			status_change_start(&src->bl,bl, SC_BLIND, rnd() % 100 > sg->skill_lv * 10, sg->skill_lv, sg->skill_id, 0, 0, skill_get_time2(sg->skill_id, sg->skill_lv), 2|8);
  3340.  			break;
  3341.  	}
  3342.  
  3343. @@ -12213,6 +12213,7 @@
  3344.  	struct status_change_entry *sce;
  3345.  	enum sc_type type;
  3346.  
  3347. +	ShowDebug("skill_unit_onleft skill_id=%d\n",skill_id);
  3348.  	sc = status_get_sc(bl);
  3349.  	if (sc && !sc->count)
  3350.  		sc = NULL;
  3351. @@ -12325,6 +12326,7 @@
  3352.   *------------------------------------------*/
  3353.  static int skill_unit_effect (struct block_list* bl, va_list ap)
  3354.  {
  3355. +
  3356.  	struct skill_unit* unit = va_arg(ap,struct skill_unit*);
  3357.  	struct skill_unit_group* group = unit->group;
  3358.  	unsigned int tick = va_arg(ap,unsigned int);
  3359. @@ -12341,6 +12343,7 @@
  3360.  
  3361.  	//Necessary in case the group is deleted after calling on_place/on_out [Skotlex]
  3362.  	skill_id = group->skill_id;
  3363. +	ShowDebug("skill_unit_effect, skill_id=%d, flag=%d\n",skill_id,flag);
  3364.  	//Target-type check.
  3365.  	if( !(group->bl_flag&bl->type && battle_check_target(&unit->bl,bl,group->target_flag)>0) && (flag&4) ) {
  3366.  		if( group->state.song_dance&0x1 || (group->src_id == bl->id && group->state.song_dance&0x2) )
  3367. @@ -12520,7 +12523,7 @@
  3368.  					break;//Chorus skills are not to be parsed as ensambles
  3369.  				if (c > 0 && sd->sc.data[SC_DANCING] && (tsd = map_id2sd(p_sd[0])) != NULL) {
  3370.  					sd->sc.data[SC_DANCING]->val4 = tsd->bl.id;
  3371. -					sc_start4(&tsd->bl,SC_DANCING,100,skill_id,sd->sc.data[SC_DANCING]->val2,*skill_lv,sd->bl.id,skill_get_time(skill_id,*skill_lv)+1000);
  3372. +					sc_start4(&sd->bl,&tsd->bl,SC_DANCING,100,skill_id,sd->sc.data[SC_DANCING]->val2,*skill_lv,sd->bl.id,skill_get_time(skill_id,*skill_lv)+1000);
  3373.  					clif_skill_nodamage(&tsd->bl, &sd->bl, skill_id, *skill_lv, 1);
  3374.  					tsd->skill_id_dance = skill_id;
  3375.  					tsd->skill_lv_dance = *skill_lv;
  3376. @@ -14548,7 +14551,7 @@
  3377.  	if(maxlv > lv)
  3378.  		maxlv = lv;
  3379.  
  3380. -	sc_start4(&sd->bl,SC_AUTOSPELL,100,skill_lv,skill_id,maxlv,0,
  3381. +	sc_start4(&sd->bl,&sd->bl,SC_AUTOSPELL,100,skill_lv,skill_id,maxlv,0,
  3382.  		skill_get_time(SA_AUTOSPELL,skill_lv));
  3383.  	return 0;
  3384.  }
  3385. @@ -15040,19 +15043,19 @@
  3386.  			break;
  3387.  		case UNT_GROUNDDRIFT_WIND:
  3388.  			if(skill_attack(BF_WEAPON,ss,src,bl,sg->skill_id,sg->skill_lv,tick,sg->val1))
  3389. -				sc_start(bl,SC_STUN,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
  3390. +				sc_start(src,bl,SC_STUN,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
  3391.  			break;
  3392.  		case UNT_GROUNDDRIFT_DARK:
  3393.  			if(skill_attack(BF_WEAPON,ss,src,bl,sg->skill_id,sg->skill_lv,tick,sg->val1))
  3394. -				sc_start(bl,SC_BLIND,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
  3395. +				sc_start(src,bl,SC_BLIND,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
  3396.  			break;
  3397.  		case UNT_GROUNDDRIFT_POISON:
  3398.  			if(skill_attack(BF_WEAPON,ss,src,bl,sg->skill_id,sg->skill_lv,tick,sg->val1))
  3399. -				sc_start(bl,SC_POISON,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
  3400. +				sc_start(src,bl,SC_POISON,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
  3401.  			break;
  3402.  		case UNT_GROUNDDRIFT_WATER:
  3403.  			if(skill_attack(BF_WEAPON,ss,src,bl,sg->skill_id,sg->skill_lv,tick,sg->val1))
  3404. -				sc_start(bl,SC_FREEZE,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
  3405. +				sc_start(src,bl,SC_FREEZE,5,sg->skill_lv,skill_get_time2(sg->skill_id, sg->skill_lv));
  3406.  			break;
  3407.  		case UNT_GROUNDDRIFT_FIRE:
  3408.  			if(skill_attack(BF_WEAPON,ss,src,bl,sg->skill_id,sg->skill_lv,tick,sg->val1))
  3409. @@ -15072,7 +15075,7 @@
  3410.  		case UNT_MAIZETRAP:
  3411.  		case UNT_VERDURETRAP:
  3412.  			if( bl->type != BL_PC && !is_boss(bl) )
  3413. -				sc_start2(bl,SC_ELEMENTALCHANGE,100,sg->skill_lv,skill_get_ele(sg->skill_id,sg->skill_lv),skill_get_time2(sg->skill_id,sg->skill_lv));
  3414. +				sc_start2(src,bl,SC_ELEMENTALCHANGE,100,sg->skill_lv,skill_get_ele(sg->skill_id,sg->skill_lv),skill_get_time2(sg->skill_id,sg->skill_lv));
  3415.  			break;
  3416.  		case UNT_REVERBERATION:
  3417.  			skill_addtimerskill(ss,tick+50,bl->id,0,0,WM_REVERBERATION_MELEE,sg->skill_lv,BF_WEAPON,0); // for proper skill delay animation when use with Dominion Impulse
  3418. @@ -15917,7 +15920,7 @@
  3419.  				}
  3420.  
  3421.  			}
  3422. -
  3423. +			ShowDebug("skill_unit_move_sub, skill_id=%d, flag=%d\n",skill_id,flag);
  3424.  			if( flag&4 )
  3425.  				skill_unit_onleft(skill_id,target,tick);
  3426.  		}
  3427. @@ -15956,6 +15959,7 @@
  3428.  		//cells do not get deleted within them. [Skotlex]
  3429.  		if( dissonance ) skill_dance_switch(unit, 1);
  3430.  
  3431. +		ShowDebug("skill_unit_move_sub2, skill_id=%d flag=%d\n",skill_id,flag);
  3432.  		if( flag&4 )
  3433.  			skill_unit_onleft(skill_id,target,tick);
  3434.  
  3435. @@ -15989,9 +15993,11 @@
  3436.  	{	//Onplace, check any skill units you have left.
  3437.  		int i;
  3438.  		for( i = 0; i < ARRAYLENGTH(skill_unit_temp); i++ )
  3439. -			if( skill_unit_temp[i] )
  3440. +			if( skill_unit_temp[i] ) {
  3441. +				ShowDebug("skill_unit_move, skill_id=%d\n",skill_unit_temp[i]);
  3442.  				skill_unit_onleft(skill_unit_temp[i], bl, tick);
  3443.  	}
  3444. +	}
  3445.  
  3446.  	return 0;
  3447.  }
  3448. @@ -16801,7 +16807,7 @@
  3449.  	}
  3450.  
  3451.  	chance = 2 + 2 * sd->menuskill_val; // 2 + 2 * skill_lv
  3452. -	sc_start4(&sd->bl, SC_POISONINGWEAPON, 100, pc_checkskill(sd, GC_RESEARCHNEWPOISON), //in Aegis it store the level of GC_RESEARCHNEWPOISON in val1
  3453. +	sc_start4(&sd->bl,&sd->bl, SC_POISONINGWEAPON, 100, pc_checkskill(sd, GC_RESEARCHNEWPOISON), //in Aegis it store the level of GC_RESEARCHNEWPOISON in val1
  3454.  		type, chance, 0, skill_get_time(GC_POISONINGWEAPON, sd->menuskill_val));
  3455.  
  3456.  	return 0;
  3457. @@ -16894,7 +16900,7 @@
  3458.  
  3459.  	if( !pc_checkskill(sd, (skill_id = skill_spellbook_db[i].skill_id)) )
  3460.  	{ // User don't know the skill
  3461. -		sc_start(&sd->bl, SC_SLEEP, 100, 1, skill_get_time(WL_READING_SB, pc_checkskill(sd,WL_READING_SB)));
  3462. +		sc_start(&sd->bl,&sd->bl, SC_SLEEP, 100, 1, skill_get_time(WL_READING_SB, pc_checkskill(sd,WL_READING_SB)));
  3463.  		clif_skill_fail(sd, WL_READING_SB, USESKILL_FAIL_SPELLBOOK_DIFFICULT_SLEEP, 0);
  3464.  		return 0;
  3465.  	}
  3466. @@ -16911,13 +16917,13 @@
  3467.  		for(i = SC_MAXSPELLBOOK; i >= SC_SPELLBOOK1; i--){ // This is how official saves spellbook. [malufett]
  3468.  			if( !sc->data[i] ){
  3469.  				sc->data[SC_READING_SB]->val2 += point; // increase points
  3470. -				sc_start4(&sd->bl, (sc_type)i, 100, skill_id, pc_checkskill(sd,skill_id), point, 0, INVALID_TIMER);
  3471. +				sc_start4(&sd->bl,&sd->bl, (sc_type)i, 100, skill_id, pc_checkskill(sd,skill_id), point, 0, INVALID_TIMER);
  3472.  				break;
  3473.  			}
  3474.  		}
  3475.  	}else{
  3476. -		sc_start2(&sd->bl, SC_READING_SB, 100, 0, point, INVALID_TIMER);
  3477. -		sc_start4(&sd->bl, SC_MAXSPELLBOOK, 100, skill_id, pc_checkskill(sd,skill_id), point, 0, INVALID_TIMER);
  3478. +		sc_start2(&sd->bl,&sd->bl, SC_READING_SB, 100, 0, point, INVALID_TIMER);
  3479. +		sc_start4(&sd->bl,&sd->bl, SC_MAXSPELLBOOK, 100, skill_id, pc_checkskill(sd,skill_id), point, 0, INVALID_TIMER);
  3480.  	}
  3481.  
  3482.  	return 1;
  3483. @@ -16940,7 +16946,7 @@
  3484.  	lv = (aslvl + 1) / 2; // The level the skill will be autocasted
  3485.  	lv = min(lv,sd->status.skill[skill_id].lv);
  3486.  	prob = (aslvl == 10) ? 15 : (32 - 2 * aslvl); // Probability at level 10 was increased to 15.
  3487. -	sc_start4(&sd->bl,SC__AUTOSHADOWSPELL,100,id,lv,prob,0,skill_get_time(SC_AUTOSHADOWSPELL,aslvl));
  3488. +	sc_start4(&sd->bl,&sd->bl,SC__AUTOSHADOWSPELL,100,id,lv,prob,0,skill_get_time(SC_AUTOSHADOWSPELL,aslvl));
  3489.  	return 0;
  3490.  }
  3491.  int skill_elementalanalysis(struct map_session_data* sd, int n, uint16 skill_lv, unsigned short* item_list) {
  3492. Index: src/map/skill.h
  3493. --- src/map/skill.h Base (BASE)
  3494. +++ src/map/skill.h Locally Modified (Based On LOCAL)
  3495. @@ -290,8 +290,8 @@
  3496.  int skill_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,int dmg_lv,unsigned int tick);
  3497.  int skill_counter_additional_effect( struct block_list* src, struct block_list *bl,uint16 skill_id,uint16 skill_lv,int attack_type,unsigned int tick);
  3498.  int skill_blown(struct block_list* src, struct block_list* target, int count, int8 dir, int flag);
  3499. -int skill_break_equip(struct block_list *bl, unsigned short where, int rate, int flag);
  3500. -int skill_strip_equip(struct block_list *bl, unsigned short where, int rate, int lv, int time);
  3501. +int skill_break_equip(struct block_list *src,struct block_list *bl, unsigned short where, int rate, int flag);
  3502. +int skill_strip_equip(struct block_list *src,struct block_list *bl, unsigned short where, int rate, int lv, int time);
  3503.  // Skills unit
  3504.  struct skill_unit_group* skill_id2group(int group_id);
  3505.  struct skill_unit_group *skill_unitsetting(struct block_list* src, uint16 skill_id, uint16 skill_lv, short x, short y, int flag);
  3506. Index: src/map/status.c
  3507. --- src/map/status.c Base (BASE)
  3508. +++ src/map/status.c Locally Modified (Based On LOCAL)
  3509. @@ -338,8 +338,8 @@
  3510.  	add_sc( BA_FROSTJOKER        , SC_FREEZE          );
  3511.  	set_sc( BA_WHISTLE           , SC_WHISTLE         , SI_BLANK           , SCB_FLEE|SCB_FLEE2 );
  3512.  	set_sc( BA_ASSASSINCROSS     , SC_ASSNCROS        , SI_BLANK           , SCB_ASPD );
  3513. -	add_sc( BA_POEMBRAGI         , SC_POEMBRAGI       );
  3514. -	set_sc( BA_APPLEIDUN         , SC_APPLEIDUN       , SI_BLANK           , SCB_MAXHP );
  3515. +	set_sc( BA_POEMBRAGI         , SC_POEMBRAGI       ,SI_FIREWEAPON	,SCB_NONE);
  3516. +	set_sc( BA_APPLEIDUN         , SC_APPLEIDUN       , SI_WATERWEAPON           , SCB_MAXHP );
  3517.  	add_sc( DC_SCREAM            , SC_STUN            );
  3518.  	set_sc( DC_HUMMING           , SC_HUMMING         , SI_BLANK           , SCB_HIT );
  3519.  	set_sc( DC_DONTFORGETME      , SC_DONTFORGETME    , SI_BLANK           , SCB_SPEED|SCB_ASPD );
  3520. @@ -1230,7 +1230,7 @@
  3521.  		if (sc->data[SC_AUTOBERSERK] &&
  3522.  			(!sc->data[SC_PROVOKE] || !sc->data[SC_PROVOKE]->val2) &&
  3523.  			status->hp < status->max_hp>>2)
  3524. -			sc_start4(target,SC_PROVOKE,100,10,1,0,0,0);
  3525. +			sc_start4(src,target,SC_PROVOKE,100,10,1,0,0,0);
  3526.  		if (sc->data[SC_BERSERK] && status->hp <= 100)
  3527.  			status_change_end(target, SC_BERSERK, INVALID_TIMER);
  3528.  		if( sc->data[SC_RAISINGDRAGON] && status->hp <= 1000 )
  3529. @@ -1308,7 +1308,7 @@
  3530.  			status_revive(target, sc->data[SC_KAIZEL]->val2, 0);
  3531.  		status_change_clear(target,0);
  3532.  		clif_skill_nodamage(target,target,ALL_RESURRECTION,1,1);
  3533. -		sc_start(target,status_skill2sc(PR_KYRIE),100,10,time);
  3534. +		sc_start(src,target,status_skill2sc(PR_KYRIE),100,10,time);
  3535.  
  3536.  		if( target->type == BL_MOB )
  3537.  			((TBL_MOB*)target)->state.rebirth = 1;
  3538. @@ -6193,7 +6193,7 @@
  3539.  //Applies SC defense to a given status change.
  3540.  //Returns the adjusted duration based on flag values.
  3541.  //the flag values are the same as in status_change_start.
  3542. -int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int tick, int flag)
  3543. +int status_get_sc_def(struct block_list *src, struct block_list *bl, enum sc_type type, int rate, int tick, int flag)
  3544.  {
  3545.  	//Percentual resistance: 10000 = 100% Resist
  3546.  	//Example: 50% -> sc_def=5000 -> 25%; 5000ms -> tick_def=5000 -> 2500ms
  3547. @@ -6471,9 +6471,10 @@
  3548.   * &4: sc_data loaded, no value has to be altered.
  3549.   * &8: rate should not be reduced
  3550.   *------------------------------------------*/
  3551. -int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val1,int val2,int val3,int val4,int tick,int flag)
  3552. +int status_change_start(struct block_list *src,struct block_list* bl,enum sc_type type,int rate,int val1,int val2,int val3,int val4,int tick,int flag)
  3553.  {
  3554.  	struct map_session_data *sd = NULL;
  3555. +	struct block_list *ssrc = NULL;
  3556.  	struct status_change* sc;
  3557.  	struct status_change_entry* sce;
  3558.  	struct status_data *status;
  3559. @@ -6482,6 +6483,10 @@
  3560.  	bool sc_isnew = true;
  3561.  
  3562.  	nullpo_ret(bl);
  3563. +	if(src != NULL){
  3564. +	    ssrc = battle_get_master(src); //get the final master src
  3565. +	    //flag....
  3566. +	}
  3567.  	sc = status_get_sc(bl);
  3568.  	status = status_get_status_data(bl);
  3569.  
  3570. @@ -6564,7 +6569,7 @@
  3571.  	//Adjust tick according to status resistances
  3572.  	if( !(flag&(1|4)) )
  3573.  	{
  3574. -		tick = status_get_sc_def(bl, type, rate, tick, flag);
  3575. +		tick = status_get_sc_def(src,bl, type, rate, tick, flag);
  3576.  		if( !tick ) return 0;
  3577.  	}
  3578.  
  3579. @@ -6910,6 +6915,15 @@
  3580.  
  3581.  	//Before overlapping fail, one must check for status cured.
  3582.  	switch (type) {
  3583. +	case SC_WHITEIMPRISON:
  3584. +		status_change_end(bl, SC_BURNING, INVALID_TIMER);
  3585. +		status_change_end(bl, SC_FREEZING, INVALID_TIMER);
  3586. +		status_change_end(bl, SC_FREEZE, INVALID_TIMER);
  3587. +		status_change_end(bl, SC_STONE, INVALID_TIMER);
  3588. +		break;
  3589. +	case SC_FREEZING:
  3590. +		status_change_end(bl, SC_BURNING, INVALID_TIMER);
  3591. +		break;
  3592.  	case SC_BLESSING:
  3593.  		//TO-DO Blessing and Agi up should do 1 damage against players on Undead Status, even on PvM
  3594.  		//but cannot be plagiarized (this requires aegis investigation on packets and official behavior) [Brainstorm]
  3595. @@ -7255,7 +7269,7 @@
  3596.  		case SC_ADORAMUS:
  3597.  			val2 = 2 + val1; //Agi change
  3598.  			if( type == SC_ADORAMUS )
  3599. -				sc_start(bl,SC_BLIND,val1 * 4 + (sd ? sd->status.job_level : 50) / 2,val1,skill_get_time(status_sc2skill(type),val1));
  3600. +				sc_start(src,bl,SC_BLIND,val1 * 4 + (sd ? sd->status.job_level : 50) / 2,val1,skill_get_time(status_sc2skill(type),val1));
  3601.  			break;
  3602.  		case SC_ENDURE:
  3603.  			val2 = 7; // Hit-count [Celest]
  3604. @@ -7268,11 +7282,11 @@
  3605.  					for( i = 0; i < 5; i++ )
  3606.  					{
  3607.  						if( sd->devotion[i] && (tsd = map_id2sd(sd->devotion[i])) )
  3608. -							status_change_start(&tsd->bl, type, 10000, val1, val2, val3, val4, tick, 1);
  3609. +							status_change_start(src,&tsd->bl, type, 10000, val1, val2, val3, val4, tick, 1);
  3610.  					}
  3611.  				}
  3612.  				else if( bl->type == BL_MER && ((TBL_MER*)bl)->devotion_flag && (tsd = ((TBL_MER*)bl)->master) )
  3613. -					status_change_start(&tsd->bl, type, 10000, val1, val2, val3, val4, tick, 1);
  3614. +					status_change_start(src,&tsd->bl, type, 10000, val1, val2, val3, val4, tick, 1);
  3615.  			}
  3616.  			//val4 signals infinite endure (if val4 == 2 it is infinite endure from Berserk)
  3617.  			if( val4 )
  3618. @@ -7281,7 +7295,7 @@
  3619.  		case SC_AUTOBERSERK:
  3620.  			if (status->hp < status->max_hp>>2 &&
  3621.  				(!sc->data[SC_PROVOKE] || sc->data[SC_PROVOKE]->val2==0))
  3622. -					sc_start4(bl,SC_PROVOKE,100,10,1,0,0,60000);
  3623. +					sc_start4(src,bl,SC_PROVOKE,100,10,1,0,0,60000);
  3624.  			tick = -1;
  3625.  			break;
  3626.  		case SC_SIGNUMCRUCIS:
  3627. @@ -7368,11 +7382,11 @@
  3628.  					for( i = 0; i < 5; i++ )
  3629.  					{
  3630.  						if( sd->devotion[i] && (tsd = map_id2sd(sd->devotion[i])) )
  3631. -							status_change_start(&tsd->bl, type, 10000, val1, val2, 0, 0, tick, 1);
  3632. +							status_change_start(src,&tsd->bl, type, 10000, val1, val2, 0, 0, tick, 1);
  3633.  					}
  3634.  				}
  3635.  				else if( bl->type == BL_MER && ((TBL_MER*)bl)->devotion_flag && (tsd = ((TBL_MER*)bl)->master) )
  3636. -					status_change_start(&tsd->bl, type, 10000, val1, val2, 0, 0, tick, 1);
  3637. +					status_change_start(src,&tsd->bl, type, 10000, val1, val2, 0, 0, tick, 1);
  3638.  			}
  3639.  			break;
  3640.  		case SC_STRIPWEAPON:
  3641. @@ -7631,11 +7645,11 @@
  3642.  						for( i = 0; i < 5; i++ )
  3643.  						{
  3644.  							if( sd->devotion[i] && (tsd = map_id2sd(sd->devotion[i])) )
  3645. -								status_change_start(&tsd->bl, type, 10000, val1, val2, 0, 0, tick, 1);
  3646. +								status_change_start(src,&tsd->bl, type, 10000, val1, val2, 0, 0, tick, 1);
  3647.  						}
  3648.  					}
  3649.  					else if( bl->type == BL_MER && ((TBL_MER*)bl)->devotion_flag && (tsd = ((TBL_MER*)bl)->master) )
  3650. -						status_change_start(&tsd->bl, type, 10000, val1, val2, 0, 0, tick, 1);
  3651. +						status_change_start(src,&tsd->bl, type, 10000, val1, val2, 0, 0, tick, 1);
  3652.  				}
  3653.  			}
  3654.  			break;
  3655. @@ -7654,7 +7668,7 @@
  3656.  					for (i = 0; i < 5; i++)
  3657.  					{	//See if there are devoted characters, and pass the status to them. [Skotlex]
  3658.  						if (sd->devotion[i] && (tsd = map_id2sd(sd->devotion[i])))
  3659. -							status_change_start(&tsd->bl,type,10000,val1,5+val1*5,val3,val4,tick,1);
  3660. +							status_change_start(src,&tsd->bl,type,10000,val1,5+val1*5,val3,val4,tick,1);
  3661.  					}
  3662.  				}
  3663.  			}
  3664. @@ -7681,12 +7695,12 @@
  3665.  
  3666.  		case SC_JOINTBEAT:
  3667.  			if( val2&BREAK_NECK )
  3668. -				sc_start2(bl,SC_BLEEDING,100,val1,val3,skill_get_time2(status_sc2skill(type),val1));
  3669. +				sc_start2(src,bl,SC_BLEEDING,100,val1,val3,skill_get_time2(status_sc2skill(type),val1));
  3670.  			break;
  3671.  
  3672.  		case SC_BERSERK:
  3673.  			if (!sc->data[SC_ENDURE] || !sc->data[SC_ENDURE]->val4)
  3674. -				sc_start4(bl, SC_ENDURE, 100,10,0,0,2, tick);
  3675. +				sc_start4(src,bl, SC_ENDURE, 100,10,0,0,2, tick);
  3676.  		case SC__BLOODYLUST:
  3677.  			//HP healing is performing after the calc_status call.
  3678.  			//Val2 holds HP penalty
  3679. @@ -7780,7 +7794,7 @@
  3680.  				{
  3681.  					type2 = types[i];
  3682.  					if( d_sc->data[type2] )
  3683. -						sc_start(bl, type2, 100, d_sc->data[type2]->val1, skill_get_time(status_sc2skill(type2),d_sc->data[type2]->val1));
  3684. +						sc_start(src,bl, type2, 100, d_sc->data[type2]->val1, skill_get_time(status_sc2skill(type2),d_sc->data[type2]->val1));
  3685.  					i--;
  3686.  				}
  3687.  			}
  3688. @@ -7803,7 +7817,7 @@
  3689.  			struct status_change_entry *sce2 = sc2?sc2->data[SC_CLOSECONFINE]:NULL;
  3690.  			if (src && sc2) {
  3691.  				if (!sce2) //Start lock on caster.
  3692. -					sc_start4(src,SC_CLOSECONFINE,100,val1,1,0,0,tick+1000);
  3693. +					sc_start4(src,src,SC_CLOSECONFINE,100,val1,1,0,0,tick+1000);
  3694.  				else { //Increase count of locked enemies and refresh time.
  3695.  					(sce2->val2)++;
  3696.  					delete_timer(sce2->timer, status_change_timer);
  3697. @@ -8168,7 +8182,7 @@
  3698.  			tick_time = 4000; // [GodLesZ] tick time
  3699.  			break;
  3700.  		case SC_PYREXIA:
  3701. -			status_change_start(bl,SC_BLIND,10000,val1,0,0,0,30000,11); // Blind status that last for 30 seconds
  3702. +			status_change_start(src,bl,SC_BLIND,10000,val1,0,0,0,30000,11); // Blind status that last for 30 seconds
  3703.  			val4 = tick / 3000;
  3704.  			tick_time = 3000; // [GodLesZ] tick time
  3705.  			break;
  3706. @@ -8198,15 +8212,6 @@
  3707.  			val3 = 10 * val1; // Evasion rate of magical attacks.
  3708.  			val_flag |= 1|2|4;
  3709.  			break;
  3710. -		case SC_WHITEIMPRISON:
  3711. -			status_change_end(bl, SC_BURNING, INVALID_TIMER);
  3712. -			status_change_end(bl, SC_FREEZING, INVALID_TIMER);
  3713. -			status_change_end(bl, SC_FREEZE, INVALID_TIMER);
  3714. -			status_change_end(bl, SC_STONE, INVALID_TIMER);
  3715. -			break;
  3716. -		case SC_FREEZING:
  3717. -			status_change_end(bl, SC_BURNING, INVALID_TIMER);
  3718. -			break;
  3719.  		case SC_READING_SB:
  3720.  			// val2 = sp reduction per second
  3721.  			tick_time = 5000; // [GodLesZ] tick time
  3722. @@ -8303,8 +8308,8 @@
  3723.  			val2 = 10 * val1;
  3724.  			val_flag |= 1|2;
  3725.  			// bypasses coating protection and MADO
  3726. -			sc_start(bl,SC_STRIPWEAPON,100,val1,tick);
  3727. -			sc_start(bl,SC_STRIPSHIELD,100,val1,tick);
  3728. +			sc_start(src,bl,SC_STRIPWEAPON,100,val1,tick);
  3729. +			sc_start(src,bl,SC_STRIPSHIELD,100,val1,tick);
  3730.  			break;
  3731.  			break;
  3732.  		case SC_GN_CARTBOOST:
  3733. @@ -8677,7 +8682,7 @@
  3734.  			    val2 = 2*val1; //aspd reduction %
  3735.  			    val3 = 2*val1; //dmg reduction %
  3736.  			    if(sc->data[SC_PARALYSIS])
  3737. -				sc_start(bl, SC_ENDURE, 100, val1, tick); //start endure for same duration
  3738. +				sc_start(src,bl, SC_ENDURE, 100, val1, tick); //start endure for same duration
  3739.  			    break;
  3740.                          case SC_STYLE_CHANGE: //[Lighta] need real info
  3741.                              tick = -1;
  3742. @@ -9057,7 +9062,7 @@
  3743.  			sce->val2 = status->max_hp / 100;// Officially tested its 1%hp drain. [Jobbie]
  3744.  			break;
  3745.  		case SC_TINDER_BREAKER:
  3746. -			sc_start2(map_id2bl(val2),SC_CLOSECONFINE2,100,val1,bl->id,tick);
  3747. +			sc_start2(src,map_id2bl(val2),SC_CLOSECONFINE2,100,val1,bl->id,tick);
  3748.  			break;
  3749.  		case SC_EQC:
  3750.  			status_change_end(bl,SC_TINDER_BREAKER,INVALID_TIMER);
  3751. @@ -9067,6 +9072,7 @@
  3752.  	if( opt_flag&2 && sd && sd->touching_id )
  3753.  		npc_touchnext_areanpc(sd,false); // run OnTouch_ on next char in range
  3754.  
  3755. +	ShowInfo("Status %d started with %d,%d,%d,%d\n\t tick=%d, flag=%d\n",type,val1,val2,val3,val4,tick,flag);
  3756.  	return 1;
  3757.  }
  3758.  
  3759. @@ -9254,7 +9260,7 @@
  3760.          }
  3761.          case SC_PYROCLASTIC:
  3762.              if(bl->type == BL_PC)
  3763. -                skill_break_equip(bl,EQP_WEAPON,10000,BCT_SELF);
  3764. +                skill_break_equip(bl,bl,EQP_WEAPON,10000,BCT_SELF);
  3765.              break;
  3766.  		case SC_WEDDING:
  3767.  		case SC_XMAS:
  3768. @@ -9293,7 +9299,7 @@
  3769.  				DIFF_TICK(gettick(), sce->val4) <= 1000 &&
  3770.  				(!sd || (sd->weapontype1 == 0 && sd->weapontype2 == 0))
  3771.  			)
  3772. -				sc_start(bl,SC_SPURT,100,sce->val1,skill_get_time2(status_sc2skill(type), sce->val1));
  3773. +				sc_start(bl,bl,SC_SPURT,100,sce->val1,skill_get_time2(status_sc2skill(type), sce->val1));
  3774.  		}
  3775.  		break;
  3776.  		case SC_AUTOBERSERK:
  3777. @@ -9504,9 +9510,9 @@
  3778.  				status_change_end(bl, SC_ENDURE, INVALID_TIMER);
  3779.  			}
  3780.  		case SC__BLOODYLUST:
  3781. -			sc_start4(bl, SC_REGENERATION, 100, 10,0,0,(RGN_HP|RGN_SP), skill_get_time(LK_BERSERK, sce->val1));
  3782. +			sc_start4(bl,bl, SC_REGENERATION, 100, 10,0,0,(RGN_HP|RGN_SP), skill_get_time(LK_BERSERK, sce->val1));
  3783.  			if( type == SC_SATURDAYNIGHTFEVER ) //Sit down force of Saturday Night Fever has the duration of only 3 seconds.
  3784. -				sc_start(bl,SC_SITDOWN_FORCE,100,sce->val1,skill_get_time2(WM_SATURDAY_NIGHT_FEVER,sce->val1));
  3785. +				sc_start(bl,bl,SC_SITDOWN_FORCE,100,sce->val1,skill_get_time2(WM_SATURDAY_NIGHT_FEVER,sce->val1));
  3786.  			break;
  3787.  		case SC_GOSPEL:
  3788.  			if (sce->val3) { //Clear the group.
  3789. @@ -9579,7 +9585,7 @@
  3790.  			clif_millenniumshield(sd,0);
  3791.  			break;
  3792.  		case SC_HALLUCINATIONWALK:
  3793. -			sc_start(bl,SC_HALLUCINATIONWALK_POSTDELAY,100,sce->val1,skill_get_time2(GC_HALLUCINATIONWALK,sce->val1));
  3794. +			sc_start(bl,bl,SC_HALLUCINATIONWALK_POSTDELAY,100,sce->val1,skill_get_time2(GC_HALLUCINATIONWALK,sce->val1));
  3795.  			break;
  3796.  		case SC_WHITEIMPRISON:
  3797.  			{
  3798. @@ -9863,6 +9869,7 @@
  3799.  		npc_touch_areanpc(sd,bl->m,bl->x,bl->y); //Trigger on-touch event.
  3800.  
  3801.  	ers_free(sc_data_ers, sce);
  3802. +	ShowInfo("Status %d ended\n",type);
  3803.  	return 1;
  3804.  }
  3805.  
  3806. @@ -9957,7 +9964,7 @@
  3807.  			break; //Not enough SP to continue.
  3808.  
  3809.  		if (!sc->data[SC_INCSTR]) {
  3810. -			sc_start(bl, SC_INCSTR,100,1<<(sce->val1-1),
  3811. +			sc_start(bl,bl, SC_INCSTR,100,1<<(sce->val1-1),
  3812.  				(sc->data[SC_SPIRIT] && sc->data[SC_SPIRIT]->val2 == SL_ROGUE?10:1) //SL bonus -> x10 duration
  3813.  				*skill_get_time2(status_sc2skill(type),sce->val1));
  3814.  		}
  3815. @@ -11020,7 +11027,7 @@
  3816.  			data.val2 = sc->data[i]->val2;
  3817.  			data.val3 = sc->data[i]->val3;
  3818.  			data.val4 = sc->data[i]->val4;
  3819. -			status_change_start(bl,(sc_type)i,10000,data.val1,data.val2,data.val3,data.val4,data.tick,1|2|8);
  3820. +			status_change_start(src,bl,(sc_type)i,10000,data.val1,data.val2,data.val3,data.val4,data.tick,1|2|8);
  3821.  			flag = 1;
  3822.  		}
  3823.  	}
  3824. @@ -11201,7 +11208,7 @@
  3825.  				val*=2;
  3826.  				sd->state.doridori = 0;
  3827.  				if ((rate = pc_checkskill(sd,TK_SPTIME)))
  3828. -					sc_start(bl,status_skill2sc(TK_SPTIME),
  3829. +					sc_start(bl,bl,status_skill2sc(TK_SPTIME),
  3830.  						100,rate,skill_get_time(TK_SPTIME, rate));
  3831.  				if (
  3832.  					(sd->class_&MAPID_UPPERMASK) == MAPID_STAR_GLADIATOR &&
  3833. Index: src/map/status.h
  3834. --- src/map/status.h Base (BASE)
  3835. +++ src/map/status.h Locally Modified (Based On LOCAL)
  3836. @@ -1795,13 +1795,13 @@
  3837.  int status_isdead(struct block_list *bl);
  3838.  int status_isimmune(struct block_list *bl);
  3839.  
  3840. -int status_get_sc_def(struct block_list *bl, enum sc_type type, int rate, int tick, int flag);
  3841. +int status_get_sc_def(struct block_list *src,struct block_list *bl, enum sc_type type, int rate, int tick, int flag);
  3842.  //Short version, receives rate in 1->100 range, and does not uses a flag setting.
  3843. -#define sc_start(bl, type, rate, val1, tick) status_change_start(bl,type,100*(rate),val1,0,0,0,tick,0)
  3844. -#define sc_start2(bl, type, rate, val1, val2, tick) status_change_start(bl,type,100*(rate),val1,val2,0,0,tick,0)
  3845. -#define sc_start4(bl, type, rate, val1, val2, val3, val4, tick) status_change_start(bl,type,100*(rate),val1,val2,val3,val4,tick,0)
  3846. +#define sc_start(src, bl, type, rate, val1, tick) status_change_start(src,bl,type,100*(rate),val1,0,0,0,tick,0)
  3847. +#define sc_start2(src, bl, type, rate, val1, val2, tick) status_change_start(src,bl,type,100*(rate),val1,val2,0,0,tick,0)
  3848. +#define sc_start4(src, bl, type, rate, val1, val2, val3, val4, tick) status_change_start(src,bl,type,100*(rate),val1,val2,val3,val4,tick,0)
  3849.  
  3850. -int status_change_start(struct block_list* bl,enum sc_type type,int rate,int val1,int val2,int val3,int val4,int tick,int flag);
  3851. +int status_change_start(struct block_list* src,struct block_list* bl,enum sc_type type,int rate,int val1,int val2,int val3,int val4,int tick,int flag);
  3852.  int status_change_end_(struct block_list* bl, enum sc_type type, int tid, const char* file, int line);
  3853.  #define status_change_end(bl,type,tid) status_change_end_(bl,type,tid,__FILE__,__LINE__)
  3854.  int kaahi_heal_timer(int tid, unsigned int tick, int id, intptr_t data);
  3855. Index: src/map/unit.c
  3856. --- src/map/unit.c Base (BASE)
  3857. +++ src/map/unit.c Locally Modified (Based On LOCAL)
  3858. @@ -955,10 +955,10 @@
  3859.  
  3860.  	if(sd && pc_isridingwug(sd))
  3861.  		clif_skill_nodamage(ud->bl,ud->bl,RA_WUGDASH,ud->skill_lv,
  3862. -			sc_start4(ud->bl,status_skill2sc(RA_WUGDASH),100,ud->skill_lv,unit_getdir(ud->bl),0,0,1));
  3863. +			sc_start4(ud->bl,ud->bl,status_skill2sc(RA_WUGDASH),100,ud->skill_lv,unit_getdir(ud->bl),0,0,1));
  3864.  	else
  3865.  		clif_skill_nodamage(ud->bl,ud->bl,TK_RUN,ud->skill_lv,
  3866. -			sc_start4(ud->bl,status_skill2sc(TK_RUN),100,ud->skill_lv,unit_getdir(ud->bl),0,0,0));
  3867. +			sc_start4(ud->bl,ud->bl,status_skill2sc(TK_RUN),100,ud->skill_lv,unit_getdir(ud->bl),0,0,0));
  3868.  
  3869.  	if (sd) clif_walkok(sd);
Viewed 1445 times, submitted by lighta.