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;
 | |
| }
 |