892 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			892 lines
		
	
	
		
			24 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | 
 | ||
|  | function createBlackCrackPaticle(obj, x, y, z) | ||
|  | { | ||
|  | 	if(!obj) | ||
|  | 		return; | ||
|  | 
 | ||
|  | 	local particleCreater = obj.getVar().GetparticleCreaterMap("CrackBlackPtl", "PassiveObject/Character/Mage/Particle/ATDarknessMantleCrack.ptl", obj); | ||
|  | 		 | ||
|  | 	particleCreater.Restart(0); | ||
|  | 	particleCreater.SetPos(x, y, z); | ||
|  | 	sq_AddParticleObject(obj, particleCreater); | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function createCrackPiece(obj, index, x, y, z) | ||
|  | { | ||
|  | 	if(!obj) | ||
|  | 		return null; | ||
|  | 		 | ||
|  | 	local pooledObj = null; | ||
|  | 	 | ||
|  | 	local cx = 0; | ||
|  | 	local cy = 0; | ||
|  | 	local cz = 0; | ||
|  | 	 | ||
|  | 	 | ||
|  | 	//obj.getVar("crackpos").push_vector(0); | ||
|  | 	//obj.getVar("crackpos").push_vector(0); | ||
|  | 	//obj.getVar("crackpos").push_vector(0); | ||
|  | 	//obj.getVar("crackpos").push_vector(0);	 | ||
|  | 	//obj.getVar("crackpos").push_vector(0);	 | ||
|  | 	//obj.getVar("crackpos").push_vector(0);	 | ||
|  | 	 | ||
|  | 	if(index == 0) | ||
|  | 	{ | ||
|  | 		//pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge.ani", false, x, y, z); | ||
|  | 		cx = x - 30; | ||
|  | 		cy = y + 2; | ||
|  | 		cz = z + 174; | ||
|  | 		pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz); | ||
|  | 	} | ||
|  | 	else if(index == 1) | ||
|  | 	{ | ||
|  | 		//pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_1.ani", false, x, y, z); | ||
|  | 		cx = x + 45; | ||
|  | 		cy = y + 1; | ||
|  | 		cz = z + 118; | ||
|  | 		pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz); | ||
|  | 	} | ||
|  | 	else if(index == 2) | ||
|  | 	{ | ||
|  | 		//pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_2.ani", false, x, y, z); | ||
|  | 		cx = x + 8; | ||
|  | 		cy = y + 1; | ||
|  | 		cz = z + 50; | ||
|  | 		pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	local vectorIndex = index * 2; | ||
|  | 	obj.getVar("crackpos").set_vector(vectorIndex + 0, cx); | ||
|  | 	obj.getVar("crackpos").set_vector(vectorIndex + 1, cz); | ||
|  | 	 | ||
|  | 	 | ||
|  | 	 | ||
|  | 	return pooledObj; | ||
|  | } | ||
|  | 
 | ||
|  | function createDarkBall(obj, x, y, z) | ||
|  | { | ||
|  | 	local pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/darkball/09_darkball_0.ani", false, x, y, z); | ||
|  | 	 | ||
|  | 	return pooledObj; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function createFrontFirstDarknessArea(obj, x, y, z, widthRate, heightRate) | ||
|  | { | ||
|  | 	local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/05_aura_front_normal_1.ani", false, widthRate, heightRate, x, y, z); | ||
|  | 	 | ||
|  | 	return pooledObj; | ||
|  | } | ||
|  | 
 | ||
|  | function createBackFirstDarknessArea(obj, x, y, z, widthRate, heightRate) | ||
|  | { | ||
|  | 	local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/01_aura_back_normal_1.ani", false, widthRate, heightRate, x, y, z); | ||
|  | 	 | ||
|  | 	return pooledObj; | ||
|  | } | ||
|  | 
 | ||
|  | function createFrontFirstSDarknessArea(obj, x, y, z, widthRate, heightRate) | ||
|  | { | ||
|  | 	local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/05_aura_front_normal_2.ani", false, widthRate, heightRate, x, y, z); | ||
|  | 	 | ||
|  | 	return pooledObj; | ||
|  | } | ||
|  | 
 | ||
|  | function createBackFirstSDarknessArea(obj, x, y, z, widthRate, heightRate) | ||
|  | { | ||
|  | 	local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/01_aura_back_normal_2.ani", false, widthRate, heightRate, x, y, z); | ||
|  | 	 | ||
|  | 	return pooledObj; | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | function createFrontLoopDarknessArea(obj, x, y, z, widthRate, heightRate) | ||
|  | { | ||
|  | 	local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/05_aura_front_normal_1.ani", false, widthRate, heightRate, x, y, z); | ||
|  | 	 | ||
|  | 	return pooledObj;	 | ||
|  | } | ||
|  | 
 | ||
|  | function createBackLoopDarknessArea(obj, x, y, z, widthRate, heightRate) | ||
|  | { | ||
|  | 	local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/01_aura_back_normal_1.ani", false, widthRate, heightRate, x, y, z); | ||
|  | 	 | ||
|  | 	return pooledObj; | ||
|  | } | ||
|  | 
 | ||
|  | function createFrontLoopSDarknessArea(obj, x, y, z, widthRate, heightRate) | ||
|  | { | ||
|  | 	local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/05_aura_front_normal_2.ani", false, widthRate, heightRate, x, y, z); | ||
|  | 	 | ||
|  | 	return pooledObj; | ||
|  | } | ||
|  | 
 | ||
|  | function createBackLoopSDarknessArea(obj, x, y, z, widthRate, heightRate) | ||
|  | { | ||
|  | 	local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/01_aura_back_normal_2.ani", false, widthRate, heightRate, x, y, z); | ||
|  | 	 | ||
|  | 	return pooledObj;	 | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function destroyCrackObject(obj) | ||
|  | { | ||
|  | 	if(!obj) | ||
|  | 		return; | ||
|  | 
 | ||
|  | 	local objListSize = obj.getVar("crack").get_obj_vector_size(); | ||
|  | 	 | ||
|  | 	print(" crack objListSize:" + objListSize); | ||
|  | 	for(local i =0;i<objListSize;++i) | ||
|  | 	{				 | ||
|  | 		local crackObj = obj.getVar("crack").get_obj_vector(i); | ||
|  | 		if(crackObj == null) | ||
|  | 			continue; | ||
|  | 			 | ||
|  | 		crackObj.setValid(false); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	obj.getVar("crack").clear_obj_vector(); | ||
|  | } | ||
|  | 
 | ||
|  | function setPosXCrackObject(obj, cx) | ||
|  | { | ||
|  | 	local objListSize = obj.getVar("crack").get_obj_vector_size(); | ||
|  | 	 | ||
|  | 	for(local i =0;i<objListSize;++i) | ||
|  | 	{				 | ||
|  | 		local vObj = obj.getVar("crack").get_obj_vector(i); | ||
|  | 		if(vObj == null) | ||
|  | 			continue; | ||
|  | 
 | ||
|  | 		sq_setCurrentAxisPos(vObj, 0, cx); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function procCrackDarknessCircle(obj) // 敕翮桧 陬击 阳 掘羹陛 ?菟葬朝 籀葬 | ||
|  | { | ||
|  | 	if(!obj) | ||
|  | 		return; | ||
|  | 		 | ||
|  | 	local circle_obj = obj.getVar().get_obj_vector(0); // 掘 | ||
|  | 	 | ||
|  | 	if(!circle_obj) | ||
|  | 		return; | ||
|  | 	 | ||
|  | 	local x = sq_GetXPos(circle_obj); | ||
|  | 	local y = sq_GetYPos(circle_obj); | ||
|  | 	local z = sq_GetZPos(circle_obj); | ||
|  | 	 | ||
|  | 	local vib = false; | ||
|  | 	local objListSize = obj.getVar().get_obj_vector_size();	 | ||
|  | 
 | ||
|  | 	for(local i =1;i<objListSize;++i) | ||
|  | 	{				 | ||
|  | 		local crackObj = obj.getVar().get_obj_vector(i); | ||
|  | 		if(crackObj == null) | ||
|  | 			continue; | ||
|  | 			 | ||
|  | 		local ani = sq_GetCurrentAnimation(crackObj); | ||
|  | 		local frmIndex = sq_GetAnimationFrameIndex(ani); | ||
|  | 	 | ||
|  | 		print( " exp i:" + i + " frmIndex:" + frmIndex); | ||
|  | 		if(frmIndex >= 1) | ||
|  | 		{ | ||
|  | 			local expVectorIndex = i - 1; | ||
|  | 			 | ||
|  | 			if(!obj.getVar("crackexp").get_vector(expVectorIndex)) | ||
|  | 			{ | ||
|  | 				sq_SetMyShake(obj, 2, 100); | ||
|  | 							 | ||
|  | 				local ox = sq_GetXPos(obj); | ||
|  | 				local oy = y + 1; | ||
|  | 				local oz = sq_GetZPos(obj); | ||
|  | 			 | ||
|  | 				local crackPooledObj = null; | ||
|  | 				 | ||
|  | 				if(expVectorIndex == 0) | ||
|  | 					crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge.ani", false, ox, oy, oz); | ||
|  | 				else if(expVectorIndex == 1) | ||
|  | 					crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_1.ani", false, ox, oy, oz); | ||
|  | 				else if(expVectorIndex == 2) | ||
|  | 					crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_2.ani", false, ox, oy, oz); | ||
|  | 
 | ||
|  | 				obj.getVar("crack").push_obj_vector(crackPooledObj); | ||
|  | 				 | ||
|  | 				local vectorIndex = (expVectorIndex) * 2; | ||
|  | 				// | ||
|  | 				local cx = obj.getVar("crackpos").get_vector(vectorIndex + 0); | ||
|  | 				local cz = obj.getVar("crackpos").get_vector(vectorIndex + 1); | ||
|  | 				// | ||
|  | 				local particleCreater = obj.getVar().GetparticleCreaterMap("ATDarknessMantlePtl", "PassiveObject/Character/Mage/Particle/Appear.ptl", obj); | ||
|  | 					// | ||
|  | 				particleCreater.Restart(0); | ||
|  | 				particleCreater.SetPos(cx, y + 5, cz);	 | ||
|  | 				 | ||
|  | 				sq_AddParticleObject(obj, particleCreater); | ||
|  | 				//	 | ||
|  | 				createBlackCrackPaticle(obj, cx, y + 4, cz); | ||
|  | 				// | ||
|  | 				obj.getVar("crackexp").set_vector(expVectorIndex, 1); | ||
|  | 			} | ||
|  | 		} | ||
|  | 		 | ||
|  | 		if(frmIndex >= 1 && frmIndex < 4) | ||
|  | 		{ | ||
|  | 			vib = true; | ||
|  | 		} | ||
|  | 	} | ||
|  | 	 | ||
|  | 	 | ||
|  | 	 | ||
|  | 	 | ||
|  | 	local cx = obj.getVar("darkcircle").get_vector(0); | ||
|  | 	 | ||
|  | 	if(vib) | ||
|  | 	{ | ||
|  | 		if(x <= cx) | ||
|  | 		{ | ||
|  | 			sq_setCurrentAxisPos(circle_obj, 0, cx + 2); | ||
|  | 			setPosXCrackObject(obj, cx + 2); | ||
|  | 		} | ||
|  | 		else | ||
|  | 		{ | ||
|  | 			sq_setCurrentAxisPos(circle_obj, 0, cx - 2); | ||
|  | 			setPosXCrackObject(obj, cx - 2); | ||
|  | 		} | ||
|  | 	} | ||
|  | 	else | ||
|  | 	{ | ||
|  | 		if(x != cx) | ||
|  | 		{ | ||
|  | 			sq_setCurrentAxisPos(circle_obj, 0, cx); | ||
|  | 			setPosXCrackObject(obj, cx); | ||
|  | 		} | ||
|  | 	} | ||
|  | 	 | ||
|  | 	 | ||
|  | } | ||
|  | 
 | ||
|  | function setCustomData_po_ATDarknessMantle(obj, reciveData) | ||
|  | { | ||
|  | 
 | ||
|  | 	if(!obj) return; | ||
|  | 
 | ||
|  | 	local suckVel = reciveData.readDword(); // 0. 庄横渡晦朝 ? | ||
|  | 	// 0.匐擎晦遴 彰嫔 (<-100%->) 1.裔?奢问溘(%) 2.菩?溯涟 3.菩?虽楼溯涟 | ||
|  | 	local darkCircleRate = reciveData.readDword(); // 横菸怃赝 彰嫔 (100%) | ||
|  | 	local expAtkRate = reciveData.readDword(); // 1.裔?奢问溘(%) | ||
|  | 	local slowLevel = reciveData.readDword(); // 菩? 溯涟 | ||
|  | 	local slowTime = reciveData.readDword(); // 菩? 虽楼卫除 | ||
|  | 	local sizeRate = reciveData.readDword(); // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%) | ||
|  | 
 | ||
|  | 
 | ||
|  | 	// 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%) | ||
|  | 	obj.getVar("sizerate").clear_vector(); | ||
|  | 	obj.getVar("sizerate").push_vector(sizeRate); | ||
|  | 	 | ||
|  | 	obj.getVar("attack").clear_vector(); | ||
|  | 	obj.getVar("attack").push_vector(suckVel); | ||
|  | 	obj.getVar("attack").push_vector(darkCircleRate); | ||
|  | 	obj.getVar("attack").push_vector(expAtkRate); | ||
|  | 	obj.getVar("attack").push_vector(slowLevel); | ||
|  | 	obj.getVar("attack").push_vector(slowTime); | ||
|  | 	 | ||
|  | 	obj.getVar("flag").clear_vector(); | ||
|  | 	obj.getVar("flag").push_vector(0); | ||
|  | 	obj.getVar("flag").push_vector(0); | ||
|  | 	obj.getVar("flag").push_vector(0); | ||
|  | 	obj.getVar("flag").push_vector(0); | ||
|  | 	 | ||
|  | 	obj.getVar("state").clear_vector(); // state vector | ||
|  | 	obj.getVar("state").push_vector(PASSIVEOBJ_SUB_STATE_0); | ||
|  | 	 | ||
|  | 
 | ||
|  | 	obj.getVar("state").clear_ct_vector(); | ||
|  | 	obj.getVar("state").push_ct_vector();	 | ||
|  | 	 | ||
|  | 	obj.getVar("crackexp").clear_vector(); | ||
|  | 	obj.getVar("crackexp").push_vector(0); | ||
|  | 	obj.getVar("crackexp").push_vector(0); | ||
|  | 	obj.getVar("crackexp").push_vector(0); | ||
|  | 	obj.getVar("crackexp").push_vector(0);	 | ||
|  | 	obj.getVar("crackexp").push_vector(0);	 | ||
|  | 	obj.getVar("crackexp").push_vector(0);	 | ||
|  | 	 | ||
|  | 	obj.getVar("crackpos").clear_vector(); | ||
|  | 	obj.getVar("crackpos").push_vector(0); | ||
|  | 	obj.getVar("crackpos").push_vector(0); | ||
|  | 	obj.getVar("crackpos").push_vector(0); | ||
|  | 	obj.getVar("crackpos").push_vector(0);	 | ||
|  | 	obj.getVar("crackpos").push_vector(0);	 | ||
|  | 	obj.getVar("crackpos").push_vector(0);	 | ||
|  | 	 | ||
|  | 	obj.getVar("crack").clear_obj_vector(); | ||
|  | 	 | ||
|  | 	obj.getVar("create").clear_vector(); | ||
|  | 	obj.getVar("create").push_vector(1); | ||
|  | 	 | ||
|  | 	 | ||
|  | 	local pIntVec = sq_GetGlobalIntVector(); | ||
|  | 	sq_IntVectorClear(pIntVec); | ||
|  | 	sq_IntVectorPush(pIntVec, 0);	 | ||
|  | 	obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, ""); | ||
|  | } | ||
|  | 
 | ||
|  | function setState_po_ATDarknessMantle(obj, state, datas) | ||
|  | { | ||
|  | 	if(!obj) return; | ||
|  | 	 | ||
|  | 	local passiveState = state; | ||
|  | 	 | ||
|  | 	obj.getVar("flag").clear_vector(); | ||
|  | 	obj.getVar("flag").push_vector(0); | ||
|  | 	obj.getVar("flag").push_vector(0); | ||
|  | 	obj.getVar("flag").push_vector(0); | ||
|  | 	obj.getVar("flag").push_vector(0);	 | ||
|  | 	 | ||
|  | 	obj.getVar("crackexp").clear_vector(); | ||
|  | 	obj.getVar("crackexp").push_vector(0); | ||
|  | 	obj.getVar("crackexp").push_vector(0); | ||
|  | 	obj.getVar("crackexp").push_vector(0); | ||
|  | 	obj.getVar("crackexp").push_vector(0);	 | ||
|  | 	obj.getVar("crackexp").push_vector(0);	 | ||
|  | 	obj.getVar("crackexp").push_vector(0);	 | ||
|  | 	 | ||
|  | 	obj.getVar("crackpos").clear_vector(); | ||
|  | 	obj.getVar("crackpos").push_vector(0); | ||
|  | 	obj.getVar("crackpos").push_vector(0); | ||
|  | 	obj.getVar("crackpos").push_vector(0); | ||
|  | 	obj.getVar("crackpos").push_vector(0);	 | ||
|  | 	obj.getVar("crackpos").push_vector(0);	 | ||
|  | 	obj.getVar("crackpos").push_vector(0);	 | ||
|  | 	 | ||
|  | 	obj.getVar("state").set_vector(0, passiveState); | ||
|  | 
 | ||
|  | 	local x = sq_GetXPos(obj); | ||
|  | 	local y = sq_GetYPos(obj); | ||
|  | 	local z = sq_GetZPos(obj); | ||
|  | 
 | ||
|  | 	 | ||
|  | 	local t = obj.getVar("state").get_ct_vector(0); | ||
|  | 	t.Reset(); | ||
|  | 	t.Start(10000,0); | ||
|  | 	 | ||
|  | 	 | ||
|  | 	//obj.getVar("attack").push_vector(suckVel); | ||
|  | 	//obj.getVar("attack").push_vector(darkCircleRate); | ||
|  | 	//obj.getVar("attack").push_vector(expAtkRate); | ||
|  | 	//obj.getVar("attack").push_vector(slowLevel); | ||
|  | 	//obj.getVar("attack").push_vector(slowTime); | ||
|  | //.tointeger() | ||
|  | //.tofloat()	 | ||
|  | 
 | ||
|  | 	local area100Rate = obj.getVar("attack").get_vector(VECTOR_FLAG_1); | ||
|  | 	 | ||
|  | 	local areaRate = area100Rate.tofloat() / 100.0; | ||
|  | 	 | ||
|  | 	 | ||
|  | 	if(passiveState == PASSIVEOBJ_SUB_STATE_0) | ||
|  | 	{ | ||
|  | 		local po1 = createBackFirstDarknessArea(obj, x, y - 25, 0, areaRate, areaRate); | ||
|  | 		local po2 = createFrontFirstDarknessArea(obj, x, y + 50, 0, areaRate, areaRate);		 | ||
|  | 		local po3 = createBackFirstSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate); | ||
|  | 		local po4 = createFrontFirstSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate); | ||
|  | 		 | ||
|  | 		destroyObject(obj); | ||
|  | 
 | ||
|  | 
 | ||
|  | 		 | ||
|  | 		obj.getVar().push_obj_vector(po1); | ||
|  | 		obj.getVar().push_obj_vector(po2); | ||
|  | 		obj.getVar().push_obj_vector(po3); | ||
|  | 		obj.getVar().push_obj_vector(po4); | ||
|  | 		 | ||
|  | 		local currentAni = sq_GetCurrentAnimation(obj); | ||
|  | 		 | ||
|  | 		if(currentAni) | ||
|  | 		{ | ||
|  | 			//currentAni.setImageRateFromOriginal(areaRate, areaRate); | ||
|  | 			currentAni.applyBoundingBoxRate(areaRate,0,0); // | ||
|  | 		} | ||
|  | 		 | ||
|  | 		initGetVarTimer(obj, 1, 30, -1); | ||
|  | 	} | ||
|  | 	else if(passiveState == PASSIVEOBJ_SUB_STATE_1) | ||
|  | 	{ | ||
|  | 		//local po1 = createBackLoopDarknessArea(obj, x, y - 25, 0, areaRate, areaRate); | ||
|  | 		//local po2 = createFrontLoopDarknessArea(obj, x, y + 50, 0, areaRate, areaRate); | ||
|  | 		//local po3 = createBackLoopSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate); | ||
|  | 		//local po4 = createFrontLoopSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate); | ||
|  | 		 | ||
|  | 		local ani = obj.getCustomAnimation(0); | ||
|  | 		 | ||
|  | 		if(ani) | ||
|  | 			obj.setCurrentAnimation(ani); | ||
|  | 			 | ||
|  | 		//destroyObject(obj); | ||
|  | // | ||
|  | 		//local loopAni = po2.getCurrentAnimation(); | ||
|  | 		//local size = sq_GetAniRealImageSize(loopAni, ENUM_DIRECTION_RIGHT); | ||
|  | 		// | ||
|  | 		//obj.getVar("attack").push_vector(size); | ||
|  | // | ||
|  | 		//obj.getVar().push_obj_vector(po1); | ||
|  | 		//obj.getVar().push_obj_vector(po2); | ||
|  | 		//obj.getVar().push_obj_vector(po3); | ||
|  | 		//obj.getVar().push_obj_vector(po4); | ||
|  | 		 | ||
|  | 		local currentAni = sq_GetCurrentAnimation(obj); | ||
|  | 		 | ||
|  | 		if(currentAni) | ||
|  | 		{ | ||
|  | 			currentAni.applyBoundingBoxRate(areaRate,0,0); // | ||
|  | 		} | ||
|  | 	}	 | ||
|  | 	else if(passiveState == PASSIVEOBJ_SUB_STATE_2) | ||
|  | 	{ | ||
|  | 		local po1 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/01_aura_back_normal_1.ani", true, areaRate, areaRate, x, y - 25, 0); | ||
|  | 		local po2 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/05_aura_front_normal_1.ani", true, areaRate, areaRate, x, y + 50, 0); | ||
|  | 		local po3 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/01_aura_back_normal_2.ani", true, areaRate, areaRate, x, y - 22, 0); | ||
|  | 		local po4 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/05_aura_front_normal_2.ani", true, areaRate, areaRate, x, y + 20, 0); | ||
|  | 		 | ||
|  | 		destroyObject(obj); | ||
|  | 		 | ||
|  | 		local ani = obj.getCustomAnimation(1); | ||
|  | 		 | ||
|  | 		if(ani) | ||
|  | 			obj.setCurrentAnimation(ani); | ||
|  | 			 | ||
|  | 		 | ||
|  | 			 | ||
|  | 		local p5 = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Suck/07_absorb_normal_50r.ani", false, x + 3, y + 10, 110); | ||
|  | 		obj.getVar().push_obj_vector(p5); | ||
|  | 		 | ||
|  | 		local parentObj = obj.getParent(); | ||
|  | 
 | ||
|  | 		// 庄横菟桧朝 横?蛤虽 陛翕		 | ||
|  | 		local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_DARKNESSMANTLE, false, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut", false); | ||
|  | 
 | ||
|  | 		 | ||
|  | 		local suckVel = obj.getVar("attack").get_vector(VECTOR_FLAG_0); | ||
|  | 		local range = obj.getVar("attack").get_vector(VECTOR_FLAG_5); | ||
|  | 		 | ||
|  | 		if(appendage) | ||
|  | 		{ | ||
|  | 			//appendage.sq_SetValidTime(3000); | ||
|  | 			// 罹晦怃 append 蒙机		 | ||
|  | 			CNSquirrelAppendage.sq_Append(appendage, parentObj, obj); | ||
|  | 			 | ||
|  | 			local auraAppendage = appendage.sq_getAuraMaster("auraMaster"); | ||
|  | 			// | ||
|  | 			if(!auraAppendage) | ||
|  | 				auraAppendage = appendage.sq_AddAuraMaster("auraMaster", parentObj, obj, 1200, 18, 5, 0); | ||
|  | 			 | ||
|  | 			if(auraAppendage) | ||
|  | 			{ | ||
|  | 				auraAppendage.setAttractionInfo(suckVel, suckVel, range, 100); | ||
|  | 			} | ||
|  | 			// | ||
|  | 		} | ||
|  | 		 | ||
|  | 		 | ||
|  | 	} | ||
|  | 	else if(passiveState == PASSIVEOBJ_SUB_STATE_3) | ||
|  | 	{ | ||
|  | 		local cx = x + 3; | ||
|  | 		local cy = y + 10; | ||
|  | 		local cz = 110; | ||
|  | 		 | ||
|  | 		local poBall = createDarkBall(obj, cx, cy, cz); | ||
|  | 		 | ||
|  | 		destroyObject(obj); | ||
|  | 	 | ||
|  | 	//4183 | ||
|  | 	//6515 | ||
|  | 		 | ||
|  | 		obj.getVar().push_obj_vector(poBall); // 0 | ||
|  | 		 | ||
|  | 		obj.getVar("darkcircle").clear_vector(); | ||
|  | 		 | ||
|  | 		obj.getVar("darkcircle").push_vector(cx); | ||
|  | 		obj.getVar("darkcircle").push_vector(cy); | ||
|  | 		obj.getVar("darkcircle").push_vector(cz); | ||
|  | 	} | ||
|  | 	else if(passiveState == PASSIVEOBJ_SUB_STATE_4) | ||
|  | 	{ | ||
|  | 		local cx = x; | ||
|  | 		local cy = y + 12; | ||
|  | 		local cz = 0;		 | ||
|  | 		 | ||
|  | 		local expStartObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/16_exp_start.ani", false, cx, cy, cz); | ||
|  | 		obj.getVar().push_obj_vector(expStartObj); // 4 | ||
|  | 	} | ||
|  | 	 | ||
|  | 	local atk = sq_GetCurrentAttackInfo(obj); | ||
|  | 	 | ||
|  | 	if(atk) | ||
|  | 	{ | ||
|  | 		local slowLevel = obj.getVar("attack").get_vector(VECTOR_FLAG_3); | ||
|  | 		local slowTime = obj.getVar("attack").get_vector(VECTOR_FLAG_4); | ||
|  | 		 | ||
|  | 		sq_SetChangeStatusIntoAttackInfo(atk, 0, ACTIVESTATUS_SLOW, 100, slowLevel, slowTime); | ||
|  | 	}		 | ||
|  | 	 | ||
|  | 	 | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | function allDestroy(obj) | ||
|  | { | ||
|  | 	if(!obj) | ||
|  | 		return; | ||
|  | 
 | ||
|  | 	destroyObject(obj); | ||
|  | 	destroyCrackObject(obj); | ||
|  | 	 | ||
|  | 	local parentObj = obj.getParent(); | ||
|  | 	CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut");	 | ||
|  | 
 | ||
|  | 	if(obj.isMyControlObject()) | ||
|  | 	{ | ||
|  | 		sq_SendDestroyPacketPassiveObject(obj); | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | function destroy_po_ATDarknessMantle(obj) | ||
|  | { | ||
|  | 	destroyObject(obj); | ||
|  | 	destroyCrackObject(obj); | ||
|  | 	 | ||
|  | 	local parentObj = obj.getParent(); | ||
|  | 	CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut"); | ||
|  | } | ||
|  | 
 | ||
|  | function reset_po_ATDarknessMantle(obj) | ||
|  | { | ||
|  | } | ||
|  | 
 | ||
|  | function procAppend_po_ATDarknessMantle(obj) | ||
|  | { | ||
|  | 	if(!obj) return;	 | ||
|  | 	 | ||
|  | 	local x = sq_GetXPos(obj); | ||
|  | 	local y = sq_GetYPos(obj); | ||
|  | 	local z = sq_GetZPos(obj); | ||
|  | 	 | ||
|  | 	local passiveState = obj.getVar("state").get_vector(0); | ||
|  | 	 | ||
|  | 	local objListSize = obj.getVar().get_obj_vector_size();	 | ||
|  | 	 | ||
|  | 	local pAni = sq_GetCurrentAnimation(obj); | ||
|  | 	local frmIndex = sq_GetAnimationFrameIndex(pAni); | ||
|  | 	//local currentT = sq_GetCurrentTime(pAni); | ||
|  | 	//local currentT = obj.getStateTimer().Get(); | ||
|  | 	 | ||
|  | 	 | ||
|  | 	local t = obj.getVar("state").get_ct_vector(0); | ||
|  | 	local currentT = 0; | ||
|  | 	 | ||
|  | 	if(t) | ||
|  | 	{ | ||
|  | 		currentT = t.Get(); | ||
|  | 	} | ||
|  | 	 | ||
|  | 	 | ||
|  | 	if(passiveState == PASSIVEOBJ_SUB_STATE_0) | ||
|  | 	{ | ||
|  | 		if(frmIndex > 1) | ||
|  | 			procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/mmagic_dark.ptl", x, y, z);  | ||
|  | 	} | ||
|  | 	else if(passiveState == PASSIVEOBJ_SUB_STATE_1) | ||
|  | 	{ | ||
|  | 		if(objListSize > 0) | ||
|  | 		{ | ||
|  | 			local p1 = obj.getVar().get_obj_vector(0);	 | ||
|  | 			local p2 = obj.getVar().get_obj_vector(1); | ||
|  | 			local p3 = obj.getVar().get_obj_vector(2); | ||
|  | 			local p4 = obj.getVar().get_obj_vector(3); | ||
|  | 		} | ||
|  | 		 | ||
|  | 		if(currentT > 1000) | ||
|  | 		{ | ||
|  | 			if(obj.isMyControlObject()) | ||
|  | 			{ | ||
|  | 				local pIntVec = sq_GetGlobalIntVector(); | ||
|  | 				sq_IntVectorClear(pIntVec); | ||
|  | 				sq_IntVectorPush(pIntVec, 0);	 | ||
|  | 				obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, ""); | ||
|  | 			} | ||
|  | 		} | ||
|  | 		else | ||
|  | 		{ | ||
|  | 			procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/mmagic_dark.ptl", x, y, z);  | ||
|  | 		} | ||
|  | 	} | ||
|  | 	else if(passiveState == PASSIVEOBJ_SUB_STATE_2) | ||
|  | 	{ | ||
|  | 		local darkCircleObj = obj.getVar().get_obj_vector(0); // 2 | ||
|  | 		 | ||
|  | 		local ani = sq_GetCurrentAnimation(darkCircleObj); | ||
|  | 		 | ||
|  | 		if(sq_IsEnd(ani)) | ||
|  | 		{		 | ||
|  | 			if(obj.isMyControlObject()) | ||
|  | 			{ | ||
|  | 				local pIntVec = sq_GetGlobalIntVector(); | ||
|  | 				sq_IntVectorClear(pIntVec); | ||
|  | 				sq_IntVectorPush(pIntVec, 0);	 | ||
|  | 				obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_3, pIntVec, STATE_PRIORITY_AUTO, false, ""); | ||
|  | 			} | ||
|  | 		} | ||
|  | 	} | ||
|  | 	else if(passiveState == PASSIVEOBJ_SUB_STATE_3) | ||
|  | 	{ | ||
|  | 		if(currentT > 20) | ||
|  | 		{	 | ||
|  | 			local crack0 = obj.getVar().get_obj_vector(1); | ||
|  | 			local crack1 = obj.getVar().get_obj_vector(2); | ||
|  | 			local crack2 = obj.getVar().get_obj_vector(3); | ||
|  | 			 | ||
|  | 			local cy = y + 11; | ||
|  | 			 | ||
|  | 			if(!obj.getVar("flag").get_vector(0)) | ||
|  | 			{ | ||
|  | 				local p6 = createCrackPiece(obj, 0, x, cy, 0); | ||
|  | 				obj.getVar().push_obj_vector(p6); // 1 | ||
|  | 				obj.getVar("flag").set_vector(0, 1); | ||
|  | 			} | ||
|  | 			 | ||
|  | 			if(obj.getVar("flag").get_vector(0) == 1) | ||
|  | 			{		 | ||
|  | 				if(!obj.getVar("flag").get_vector(1)) | ||
|  | 				{				 | ||
|  | 					local ani = sq_GetCurrentAnimation(crack0); | ||
|  | 					local frmIndex = sq_GetAnimationFrameIndex(ani); | ||
|  | 					 | ||
|  | 					if(frmIndex >= 3) | ||
|  | 					{ | ||
|  | 						local p6 = createCrackPiece(obj, 1, x, cy, 0); | ||
|  | 						obj.getVar().push_obj_vector(p6); // 2 | ||
|  | 						obj.getVar("flag").set_vector(1, 1); | ||
|  | 					} | ||
|  | 				} | ||
|  | 			} | ||
|  | 			 | ||
|  | 			if(obj.getVar("flag").get_vector(1) == 1) | ||
|  | 			{ | ||
|  | 				if(!obj.getVar("flag").get_vector(2)) | ||
|  | 				{ | ||
|  | 					local ani = sq_GetCurrentAnimation(crack1); | ||
|  | 					local frmIndex = sq_GetAnimationFrameIndex(ani); | ||
|  | 					 | ||
|  | 					if(frmIndex >= 3) | ||
|  | 					{			 | ||
|  | 						local p6 = createCrackPiece(obj, 2, x, cy, 0); | ||
|  | 						obj.getVar().push_obj_vector(p6); //3 | ||
|  | 						obj.getVar("flag").set_vector(2, 1); | ||
|  | 					} | ||
|  | 				} | ||
|  | 			} | ||
|  | 			 | ||
|  | 			if(!obj.getVar("flag").get_vector(3)) | ||
|  | 			{ | ||
|  | 				local ani = sq_GetCurrentAnimation(crack2); | ||
|  | 				local frmIndex = sq_GetAnimationFrameIndex(ani); | ||
|  | 				 | ||
|  | 				if(frmIndex >= 3) | ||
|  | 				{ | ||
|  | 					obj.getVar("flag").set_vector(3, 1); | ||
|  | 				} | ||
|  | 			} | ||
|  | 			 | ||
|  | 			procCrackDarknessCircle(obj); | ||
|  | 			 | ||
|  | 			local objListSize = obj.getVar().get_obj_vector_size();	 | ||
|  | 			 | ||
|  | 			if(objListSize >= 4) | ||
|  | 			{		 | ||
|  | 				local isEndAnimation = true; // 敕翮 拥栖诡桧暮桧 部陬朝虽 羹觼 | ||
|  | 
 | ||
|  | 				for(local i =1;i<objListSize;++i) | ||
|  | 				{				 | ||
|  | 					local obj = obj.getVar().get_obj_vector(i); | ||
|  | 					if(obj == null) | ||
|  | 						continue; | ||
|  | 						 | ||
|  | 					local ani = sq_GetCurrentAnimation(obj); | ||
|  | 					 | ||
|  | 					local isEnd = sq_IsEnd(ani); | ||
|  | 					 | ||
|  | 					if(!isEnd) | ||
|  | 						isEndAnimation = false; | ||
|  | 				} | ||
|  | 				 | ||
|  | 				if(isEndAnimation) | ||
|  | 				{ | ||
|  | 					if(obj.isMyControlObject()) | ||
|  | 					{ | ||
|  | 						local pIntVec = sq_GetGlobalIntVector(); | ||
|  | 						sq_IntVectorClear(pIntVec); | ||
|  | 						sq_IntVectorPush(pIntVec, 0);	 | ||
|  | 						obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_4, pIntVec, STATE_PRIORITY_AUTO, false, ""); | ||
|  | 					} | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 			 | ||
|  | 		// PASSIVEOBJ_SUB_STATE_3 | ||
|  | 	} | ||
|  | 	else if(passiveState == PASSIVEOBJ_SUB_STATE_4) | ||
|  | 	{ | ||
|  | 		local expStartObj = obj.getVar().get_obj_vector(4); // exp | ||
|  | 		 | ||
|  | 		if(expStartObj) | ||
|  | 		{ | ||
|  | 			local ani = sq_GetCurrentAnimation(expStartObj); | ||
|  | 			local isEnd = sq_IsEnd(ani); | ||
|  | 			 | ||
|  | 			if(!obj.getVar("flag").get_vector(1)) | ||
|  | 			{ | ||
|  | 				local expFrmIndex = sq_GetAnimationFrameIndex(ani); | ||
|  | 				 | ||
|  | 				if(expFrmIndex >= 2) | ||
|  | 				{ | ||
|  | 					local fScreen = sq_flashScreen(obj,0,100,0,200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM); | ||
|  | 					obj.getVar("flag").set_vector(1, 1); | ||
|  | 				} | ||
|  | 			} | ||
|  | 			 | ||
|  | 			if(isEnd) | ||
|  | 			{ | ||
|  | 				print(" exp:" + obj.getVar("flag").get_vector(0)); | ||
|  | 				if(!obj.getVar("flag").get_vector(0)) | ||
|  | 				{ | ||
|  | 					destroyCrackObject(obj); | ||
|  | 
 | ||
|  | 					if(obj.isMyControlObject()) | ||
|  | 					{ | ||
|  | 						local expAtkRate = obj.getVar("attack").get_vector(VECTOR_FLAG_2); | ||
|  | 						sq_BinaryStartWrite(); | ||
|  | 						sq_BinaryWriteDword(expAtkRate); // | ||
|  | 						// 觼煎栖赝 嬴桧蛊 跷陛蒙机 | ||
|  | 						// 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%) | ||
|  | 						local size100Rate = 100; | ||
|  | 						 | ||
|  | 						if(obj.getVar("sizerate").get_vector(0) > 0) | ||
|  | 						{ | ||
|  | 							size100Rate = obj.getVar("sizerate").get_vector(0); | ||
|  | 						} | ||
|  | 						 | ||
|  | 						sq_BinaryWriteDword(size100Rate); // | ||
|  | 						/////////////////////////////////// | ||
|  | 						 | ||
|  | 						 | ||
|  | 						sq_SendCreatePassiveObjectPacket(obj, 24253, 0, 0, 1, 0, obj.getDirection()); | ||
|  | 					} | ||
|  | 					obj.getVar("flag").set_vector(0, 1); | ||
|  | 					allDestroy(obj); | ||
|  | 				} | ||
|  | 			} | ||
|  | 		} | ||
|  | 		else | ||
|  | 		{ | ||
|  | 			allDestroy(obj); | ||
|  | 		} | ||
|  | 		 | ||
|  | 	} | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | function onChangeSkillEffect_po_ATDarknessMantle(obj, skillIndex, reciveData) | ||
|  | { | ||
|  | 
 | ||
|  | 	if(!obj) return; | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | function onDestroyObject_po_ATDarknessMantle(obj, object) | ||
|  | { | ||
|  | 	if(!obj) return; | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | function onKeyFrameFlag_po_ATDarknessMantle(obj, flagIndex) | ||
|  | { | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | function onEndCurrentAni_po_ATDarknessMantle(obj) | ||
|  | { | ||
|  | 	if(!obj) return; | ||
|  | 	 | ||
|  | 	local passiveState = obj.getVar("state").get_vector(0); | ||
|  | 	 | ||
|  | 	if(passiveState == PASSIVEOBJ_SUB_STATE_0) | ||
|  | 	{ | ||
|  | 		local x = sq_GetXPos(obj); | ||
|  | 		local y = sq_GetYPos(obj); | ||
|  | 		local z = sq_GetZPos(obj); | ||
|  | 		 | ||
|  | 		local area100Rate = obj.getVar("attack").get_vector(VECTOR_FLAG_1); | ||
|  | 		 | ||
|  | 		local areaRate = area100Rate.tofloat() / 100.0; | ||
|  | 		 | ||
|  | 		local po1 = createBackLoopDarknessArea(obj, x, y - 25, 0, areaRate, areaRate); | ||
|  | 		local po2 = createFrontLoopDarknessArea(obj, x, y + 50, 0, areaRate, areaRate); | ||
|  | 		local po3 = createBackLoopSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate); | ||
|  | 		local po4 = createFrontLoopSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate); | ||
|  | 			 | ||
|  | 		destroyObject(obj); | ||
|  | 		 | ||
|  | 		local loopAni = po2.getCurrentAnimation(); | ||
|  | 		local size = sq_GetAniRealImageSize(loopAni, ENUM_DIRECTION_RIGHT); | ||
|  | 		 | ||
|  | 		obj.getVar("attack").push_vector(size); | ||
|  | 
 | ||
|  | 		obj.getVar().push_obj_vector(po1); | ||
|  | 		obj.getVar().push_obj_vector(po2); | ||
|  | 		obj.getVar().push_obj_vector(po3); | ||
|  | 		obj.getVar().push_obj_vector(po4); | ||
|  | 	 | ||
|  | 	 | ||
|  | 		if(obj.isMyControlObject()) | ||
|  | 		{ | ||
|  | 			local pIntVec = sq_GetGlobalIntVector(); | ||
|  | 			sq_IntVectorClear(pIntVec); | ||
|  | 			sq_IntVectorPush(pIntVec, 0);	 | ||
|  | 			obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, ""); | ||
|  | 		} | ||
|  | 	} | ||
|  | 	else if(passiveState == PASSIVEOBJ_SUB_STATE_2) | ||
|  | 	{ | ||
|  | 	} | ||
|  | 	 | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | function onAttack_po_ATDarknessMantle(obj, damager, boundingBox, isStuck) | ||
|  | { | ||
|  | 	if(!obj) return 0; | ||
|  | 	 | ||
|  | 	local pChr = obj.getTopCharacter(); | ||
|  | 	 | ||
|  | 	if(!pChr) return 0; | ||
|  | 	 | ||
|  | 	local active_damager = sq_GetCNRDObjectToActiveObject(damager); | ||
|  | 	 | ||
|  | 	if(!active_damager) | ||
|  | 		return 0; | ||
|  | 		 | ||
|  | 	CNSquirrelAppendage.sq_AppendAppendage(damager, damager, SKILL_DARKNESSMANTLE,  | ||
|  | 	false, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_effect.nut", true); | ||
|  | 	 | ||
|  | 	 | ||
|  | 	 | ||
|  | 	return 0; | ||
|  | } |