1256 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			1256 lines
		
	
	
		
			34 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| 
 | ||
| function destroyObject(obj)
 | ||
| {
 | ||
| 	local objListSize = obj.getVar().get_obj_vector_size();	
 | ||
| 	for(local i =0;i<objListSize;++i)
 | ||
| 	{				
 | ||
| 		local vObj = obj.getVar().get_obj_vector(i);
 | ||
| 		if(vObj == null)
 | ||
| 			continue;
 | ||
| 			
 | ||
| 		vObj.setValid(false);
 | ||
| 	}
 | ||
| 	
 | ||
| 	obj.getVar().clear_obj_vector();
 | ||
| 	
 | ||
| }
 | ||
| 
 | ||
| function destroyObjectByVar(obj, varStr)
 | ||
| {
 | ||
| 	local objListSize = obj.getVar(varStr).get_obj_vector_size();	
 | ||
| 	for(local i =0;i<objListSize;++i)
 | ||
| 	{				
 | ||
| 		local vObj = obj.getVar(varStr).get_obj_vector(i);
 | ||
| 		if(vObj == null)
 | ||
| 			continue;
 | ||
| 			
 | ||
| 		vObj.setValid(false);
 | ||
| 	}
 | ||
| 	
 | ||
| 	obj.getVar(varStr).clear_obj_vector();
 | ||
| 	
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| function getAngle(xPos1, yPos1, xPos2, yPos2)
 | ||
| {
 | ||
| 	// 舒 虽薄除暧 剪葬蒂 掘?棻
 | ||
| 	local xDistance = (xPos2 - xPos1);
 | ||
| 	local yDistance = (yPos2 - yPos1);
 | ||
| 
 | ||
| 	print(" xDistance:" + xDistance + " yDistance:" + yDistance);
 | ||
| 	
 | ||
| 	xDistance = sq_Abs(xDistance);
 | ||
| 	yDistance = sq_Abs(yDistance);
 | ||
| 
 | ||
| 	// 嬴觼 骄薇?煎 陕紫蒂 掘?棻
 | ||
| 	local radian = sq_Atan2(yDistance.tofloat(), xDistance.tofloat());
 | ||
| 	
 | ||
| 	// 塭蛤寰击 degree 煎 渗?
 | ||
| 	local angle = sq_ToDegree(radian);
 | ||
| 	// 0 ~ 360 饵桧暧 高击 掘?晦 嫔?
 | ||
| 	// 360 击 涡?朝 桧嵘朝 360尔棻 雪擎 高击 泞罹翱肮击 ?贼
 | ||
| 	// 0 桧 釭螃嘎煎
 | ||
| 	print(" radian:" + radian + " angle:" + angle);
 | ||
| 	return (angle + 360) % 360;
 | ||
| }
 | ||
| 
 | ||
| function getObjectAngle(orgObj, dstObj)
 | ||
| {
 | ||
| 	if(!orgObj || !dstObj)
 | ||
| 		return 9999.0;
 | ||
| 		
 | ||
| 	return getAngle(orgObj.getXPos(), orgObj.getYPos(), dstObj.getXPos(), dstObj.getYPos());
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| function isInFrontObject(orgObj, dstObj)
 | ||
| { // 瞳桧 顶 擅缣 毡朝虽 羹觼?朝 ?热 殓栖棻.
 | ||
| 	if(orgObj.getDirection() == ENUM_DIRECTION_RIGHT)
 | ||
| 	{
 | ||
| 		if(orgObj.getXPos() < dstObj.getXPos())
 | ||
| 			return true;
 | ||
| 	}
 | ||
| 	else
 | ||
| 	{
 | ||
| 		if(orgObj.getXPos() > dstObj.getXPos())
 | ||
| 			return true;
 | ||
| 	}
 | ||
| 	
 | ||
| 	return false;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| // 剪葬谛 陕紫煎 颤啃击 琼嬴顶横 葬欐?朝 ?热殓栖棻.
 | ||
| function findAngleTarget(obj, distance, angle, targetMaxHeight)
 | ||
| {
 | ||
| 	if(!obj)
 | ||
| 		return null;
 | ||
| 		
 | ||
| 	local objectManager = obj.getObjectManager();
 | ||
| 	
 | ||
| 
 | ||
| 	if (objectManager == null)
 | ||
| 		return null;
 | ||
| 
 | ||
| 	local minDistance = 0;
 | ||
| 	local target = null;
 | ||
| 	
 | ||
| 
 | ||
| 	for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1)
 | ||
| 	{
 | ||
| 		local object = objectManager.getCollisionObject(i);
 | ||
| 		if (object && obj.isEnemy(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_ACTIVE) &&
 | ||
| 			isInFrontObject(obj, object) && object.getZPos() <= targetMaxHeight)
 | ||
| 		{
 | ||
| 			local activeObj = sq_GetCNRDObjectToActiveObject(object);
 | ||
| 			//	舱羲 顶缣怃 陛潍 陛梱遴 瞳击 坚艇棻
 | ||
| 			
 | ||
| 			if(!activeObj.isDead())
 | ||
| 			{
 | ||
| 				//local testAngle = CNRDObject.getAngle(0, 0, 10, 10, false);
 | ||
| 				
 | ||
| 				print( " angle:" + getObjectAngle(obj, object));
 | ||
| 				if(sq_GetDistanceObject(obj, object, false) < distance && getObjectAngle(obj, object) < angle)
 | ||
| 				{
 | ||
| 					if (target == null || sq_GetDistanceObject(obj, object, false) < minDistance)
 | ||
| 					{
 | ||
| 						target = activeObj;
 | ||
| 						minDistance = sq_GetDistanceObject(obj, object, false);
 | ||
| 					}
 | ||
| 				}
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	return target;
 | ||
| }
 | ||
| 
 | ||
| // 蹂羶? 漱搅 getvar 螃粽薛? 葬蝶?寰缣 伪擎 螃粽薛?陛 毡朝虽 羹觼?朝 ?热殓栖棻.
 | ||
| // orgObj : 绿掖? object殓栖棻.
 | ||
| // sq_var get_obj_vector_size 绿掖? 葬蝶?菟
 | ||
| function isSameObjectBySqVar(orgObj, sq_var)
 | ||
| {
 | ||
| 	if(!orgObj || !sq_var)
 | ||
| 		return false;
 | ||
| 	
 | ||
| 	local i;
 | ||
| 	local object_num = sq_var.get_obj_vector_size();
 | ||
| 	
 | ||
| 	for(i = 0; i < object_num; i++)
 | ||
| 	{ // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻..
 | ||
| 		local dstObj = sq_var.get_obj_vector(i);
 | ||
| 		
 | ||
| 		local isSame = isSameObject(orgObj, dstObj);
 | ||
| 		
 | ||
| 		if(isSame) // 酝犒肾朝 匙桧 毡棻贼..
 | ||
| 			return true;
 | ||
| 	}
 | ||
| 	
 | ||
| 	return false;
 | ||
| 	
 | ||
| }
 | ||
| 
 | ||
| function getBossTarget(obj, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange, targetMaxHeight, exceptSqVar)
 | ||
| {
 | ||
| 	if(!obj)
 | ||
| 		return null;
 | ||
| 		
 | ||
| 	local objectManager = obj.getObjectManager();
 | ||
| 	
 | ||
| 
 | ||
| 	if (objectManager == null)
 | ||
| 		return null;
 | ||
| 
 | ||
| 	//local minDistance = 0;
 | ||
| 	local target = null;
 | ||
| 	
 | ||
| 
 | ||
| 	for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1)
 | ||
| 	{
 | ||
| 		local object = objectManager.getCollisionObject(i);
 | ||
| 		if (object && obj.isEnemy(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_ACTIVE) &&
 | ||
| 			isInFrontObject(obj, object) && object.getZPos() <= targetMaxHeight )
 | ||
| 		{
 | ||
| 			if(sq_IsinMapArea(obj, object, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange))
 | ||
| 			{
 | ||
| 				local activeObj = sq_GetCNRDObjectToActiveObject(object);
 | ||
| 				
 | ||
| 				if(!activeObj.isDead())
 | ||
| 				{ // 避虽 强擎
 | ||
| 					if(activeObj.isBoss())
 | ||
| 					{ // 尔蝶
 | ||
| 						local isExist = isSameObjectBySqVar(object, exceptSqVar);
 | ||
| 						
 | ||
| 						if(!isExist || target == null)
 | ||
| 						{
 | ||
| 							target = activeObj;
 | ||
| 						}
 | ||
| 					}
 | ||
| 				}
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	return target;
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| function getPriorityTarget(obj, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange, targetMaxHeight, exceptSqVar, isInFront)
 | ||
| {
 | ||
| 	if(!obj)
 | ||
| 		return null;
 | ||
| 		
 | ||
| 	local objectManager = obj.getObjectManager();
 | ||
| 	
 | ||
| 
 | ||
| 	if (objectManager == null)
 | ||
| 		return null;
 | ||
| 
 | ||
| 	//local minDistance = 0;
 | ||
| 	local target = null;
 | ||
| 	
 | ||
| 
 | ||
| 	for (local i = 0; i < objectManager.getCollisionObjectNumber(); i+=1)
 | ||
| 	{
 | ||
| 		local object = objectManager.getCollisionObject(i);
 | ||
| 		if (object && obj.isEnemy(object) && object.isInDamagableState(obj) && object.isObjectType(OBJECTTYPE_ACTIVE) &&
 | ||
| 			object.getZPos() <= targetMaxHeight )
 | ||
| 		{
 | ||
| 			if(isInFront == true)
 | ||
| 			{
 | ||
| 				if(isInFrontObject(obj, object) == false)
 | ||
| 				{
 | ||
| 					continue;
 | ||
| 				}
 | ||
| 			}
 | ||
| 			if(sq_IsinMapArea(obj, object, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange))
 | ||
| 			{
 | ||
| 				local activeObj = sq_GetCNRDObjectToActiveObject(object);
 | ||
| 				
 | ||
| 				if(!activeObj.isDead())
 | ||
| 				{ // 避虽 强擎
 | ||
| 					local isExist = isSameObjectBySqVar(object, exceptSqVar);
 | ||
| 					
 | ||
| 					if(activeObj.isBoss())
 | ||
| 					{
 | ||
| 						if(target == null)
 | ||
| 						{
 | ||
| 							target = activeObj;
 | ||
| 							
 | ||
| 							if(!isExist)
 | ||
| 								return target;
 | ||
| 						}
 | ||
| 					}
 | ||
| 					
 | ||
| 					if(activeObj.isSuperChampion())
 | ||
| 					{ // 尔蝶
 | ||
| 						if(target == null || !isExist)
 | ||
| 						{
 | ||
| 							target = activeObj;
 | ||
| 							
 | ||
| 							if(!isExist)
 | ||
| 								return target;
 | ||
| 						}
 | ||
| 					}
 | ||
| 					
 | ||
| 					if(activeObj.isCommonChampion())
 | ||
| 					{
 | ||
| 						if(target == null || !isExist)
 | ||
| 						{
 | ||
| 							target = activeObj;
 | ||
| 							
 | ||
| 							if(!isExist)
 | ||
| 								return target;
 | ||
| 						}
 | ||
| 					}
 | ||
| 					
 | ||
| 					if(activeObj.isChampion())
 | ||
| 					{
 | ||
| 						if(target == null || !isExist)
 | ||
| 						{
 | ||
| 							target = activeObj;
 | ||
| 							
 | ||
| 							if(!isExist)
 | ||
| 								return target;
 | ||
| 						}
 | ||
| 					}
 | ||
| 					
 | ||
| 					if(target == null || !isExist)
 | ||
| 					{
 | ||
| 						target = activeObj;
 | ||
| 						
 | ||
| 						if(!isExist)
 | ||
| 							return target;
 | ||
| 					}
 | ||
| 				}
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	return target;
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| function createPaticleMap(obj, filename, x, y, z)
 | ||
| {
 | ||
| 	local particleCreater = obj.getVar().GetparticleCreaterMap(filename, filename, obj);
 | ||
| 		
 | ||
| 	particleCreater.Restart(0);
 | ||
| 	particleCreater.SetPos(x, y, z);
 | ||
| 	sq_AddParticleObject(obj, particleCreater);
 | ||
| }
 | ||
| 
 | ||
| function initGetVarTimer(obj, maxTimerNum, eventTerm, eventMaxCount)
 | ||
| {
 | ||
| 	if(maxTimerNum <= 0)
 | ||
| 		return;
 | ||
| 		
 | ||
| 	local sq_var = obj.getVar();
 | ||
| 	
 | ||
| 	sq_var.clear_timer_vector();
 | ||
| 	
 | ||
| 	for (local i = 0;i < maxTimerNum; i+=1)
 | ||
| 	{
 | ||
| 		sq_var.push_timer_vector();
 | ||
| 	}
 | ||
| 	
 | ||
| 	for (local i = 0;i < maxTimerNum; i+=1)
 | ||
| 	{
 | ||
| 		local t = sq_var.get_timer_vector(i);
 | ||
| 		t.setParameter(eventTerm, eventMaxCount);
 | ||
| 		t.resetInstant(i);
 | ||
| 	}
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| function procParticleCreaterMap(obj, currentT, filename, x, y, z)
 | ||
| {
 | ||
| 	local t = obj.getVar().get_timer_vector(0);
 | ||
| 	
 | ||
| 	if(!t)
 | ||
| 		return;
 | ||
| 	
 | ||
| 	if(t.isOnEvent(currentT) == true)
 | ||
| 	{
 | ||
| 		local particleCreater = obj.getVar().GetparticleCreaterMap(filename, filename, obj);
 | ||
| 			
 | ||
| 		particleCreater.Restart(0);
 | ||
| 		particleCreater.SetPos(x, y, z);	
 | ||
| 		
 | ||
| 		sq_AddParticleObject(obj, particleCreater);
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| function createAnimationPooledObject(obj, aniFilename, isAutoDestroy, x, y, z)
 | ||
| {
 | ||
| 	local ani = sq_CreateAnimation("",aniFilename);
 | ||
| 	local pooledObj = sq_CreatePooledObject(ani,isAutoDestroy);
 | ||
| 	
 | ||
| 	pooledObj.setCurrentPos(x,y,z);
 | ||
| 	sq_SetCurrentDirection(pooledObj, obj.getDirection());
 | ||
| 	
 | ||
| 	sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
 | ||
| 	
 | ||
| 	return pooledObj;
 | ||
| }
 | ||
| 
 | ||
| function createAnimationImageRatePooledObject(obj, aniFilename, isAutoDestroy, widthRate, heightRate, x, y, z)
 | ||
| {
 | ||
| 	local ani = sq_CreateAnimation("",aniFilename);
 | ||
| 	
 | ||
| 	if(!ani)
 | ||
| 		return null;
 | ||
| 	
 | ||
| 	ani.setImageRateFromOriginal(widthRate, heightRate);
 | ||
| 	
 | ||
| 	local pooledObj = sq_CreatePooledObject(ani,isAutoDestroy);
 | ||
| 	
 | ||
| 	pooledObj.setCurrentPos(x,y,z);
 | ||
| 	sq_SetCurrentDirection(pooledObj, obj.getDirection());
 | ||
| 	
 | ||
| 	sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
 | ||
| 	
 | ||
| 	return pooledObj;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| function procSkill_IceRoad(obj)
 | ||
| {
 | ||
| 	local appendage = obj.GetSquirrelAppendage("Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut");
 | ||
| 	
 | ||
| 	if(appendage) {
 | ||
| 		local isvalid = appendage.isValid();
 | ||
| 		if(isvalid) {
 | ||
| 			local currentT = appendage.getTimer().Get();
 | ||
| 			local t = appendage.sq_var.get_timer_vector(0);
 | ||
| 			local t2 = appendage.sq_var.get_timer_vector(1); // 橡挤亵陕击 虏萄朝匙娄 涤紫煎 缟?模赅朝 棻艇颤桧该煎 给嬴陛怃 mp模赅蒂 卫霾栖棻.
 | ||
| 			
 | ||
| 			if (t2.isOnEvent(currentT) == true)
 | ||
| 			{
 | ||
| 				local skill = sq_GetSkill(obj, SKILL_ICEROAD);
 | ||
| 				if(skill)
 | ||
| 				{
 | ||
| 					local skill_level = obj.sq_GetSkillLevel(SKILL_ICEROAD);
 | ||
| 					local spendMp = obj.sq_GetLevelData(SKILL_ICEROAD, SKL_LV_0, skill_level); // 0.卫除渡MP 模赅榆
 | ||
| 					if (spendMp > obj.getMp())
 | ||
| 					{
 | ||
| 						appendage.setValid(false);
 | ||
| 						skill.setSealActiveFunction(true);
 | ||
| 						return;
 | ||
| 					}
 | ||
| 					else
 | ||
| 					{
 | ||
| 						// MP陛 醱碟?棻贼 橡挤暧 望 ?亵陕击 虏苌棻..
 | ||
| 						print( " spendMp:" + spendMp);
 | ||
| 						obj.sendSetMpPacket(obj.getMp() - spendMp);
 | ||
| 					}
 | ||
| 				
 | ||
| 				}
 | ||
| 			}
 | ||
| 			
 | ||
| 			if (t.getEventTerm() == -1)
 | ||
| 				return;
 | ||
| 			
 | ||
| 			if (t.isOnEvent(currentT) == true)
 | ||
| 			{
 | ||
| 				if(obj.isMyControlObject())
 | ||
| 				{
 | ||
| 					if(obj.getZPos() == 0)
 | ||
| 					{
 | ||
| 						local skill_level = sq_GetSkillLevel(obj, SKILL_ICEROAD);
 | ||
| 						local change_time = sq_GetLevelData(obj, SKILL_ICEROAD, SKL_LV_1, skill_level); // 虽楼卫除
 | ||
| 						local rate = sq_GetLevelData(obj, SKILL_ICEROAD, SKL_LV_3, skill_level); // 桧楼 ?徽
 | ||
| 						local movSpd = sq_GetLevelData(obj, SKILL_ICEROAD, SKL_LV_2, skill_level); // 
 | ||
| 					
 | ||
| 						sq_BinaryStartWrite();
 | ||
| 						sq_BinaryWriteDword(change_time);	// 卫除
 | ||
| 						sq_BinaryWriteDword(rate);			// ?徽
 | ||
| 						sq_BinaryWriteDword(movSpd);		// 马模纂 
 | ||
| 						
 | ||
| 						// 嬴桧蝶 煎萄 ?撩 ?卫粽 蝶鉴击 寡锡棻贼 蜃擎 瞳桧 彩念 鼻鹧桧鼻缣 勘萼棻.
 | ||
| 						local skillLevel = sq_GetSkillLevel(obj, SKILL_ICEROAD_EX);
 | ||
| 						sq_BinaryWriteWord(skillLevel);
 | ||
| 						
 | ||
| 						if (skillLevel > 0)
 | ||
| 						{
 | ||
| 							local prob = sq_GetLevelData(obj, SKILL_ICEROAD_EX, 4, skillLevel) / 10.0;// 鼻鹧桧鼻 彩念暧 ?睦
 | ||
| 							local asLevel = sq_GetLevelData(obj, SKILL_ICEROAD_EX, 5, skillLevel);	// 鼻鹧桧鼻 彩念暧 溯涟
 | ||
| 							local validTime = sq_GetLevelData(obj, SKILL_ICEROAD_EX, 6, skillLevel);	// 鼻鹧桧鼻 彩念暧 卫除
 | ||
| 							sq_BinaryWriteFloat(prob.tofloat());	// ?睦
 | ||
| 							sq_BinaryWriteWord(asLevel);			// 溯涟
 | ||
| 							sq_BinaryWriteDword(validTime);			// 卫除
 | ||
| 						}
 | ||
| 						
 | ||
| 						sq_SendCreatePassiveObjectPacket(obj, 24243, 0, 0, 0, 0, obj.getDirection());
 | ||
| 					}
 | ||
| 				}
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}	
 | ||
| }
 | ||
| 
 | ||
| function playMoveSound_ATMage(obj)
 | ||
| {
 | ||
| 	//obj.sq_PlaySound("R_ICE_WALK");
 | ||
| 	
 | ||
| 	if(!obj)
 | ||
| 		return;
 | ||
| 	
 | ||
| 	local result = CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut");
 | ||
| 
 | ||
| 	if (result == true) // 嬴桧蝶煎萄蒂 面堡击 隆 嫦濠措模葬陛 夥荸栖棻.
 | ||
| 	{
 | ||
| 		obj.sq_PlaySound("R_ICE_WALK_LOOP", SOUND_ID_MOVE);
 | ||
| 	}
 | ||
| 	else 
 | ||
| 	{
 | ||
| 		obj.sq_PlayMoveSound();
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| function procDash_ATMage(obj)
 | ||
| {
 | ||
| 	if(!obj)
 | ||
| 		return;
 | ||
| 	
 | ||
| 	local ani = sq_GetCurrentAnimation(obj);
 | ||
| 	
 | ||
| 	if(!ani)
 | ||
| 		return;
 | ||
| 		
 | ||
| 	local isFlag = obj.sq_IsKeyFrameFlag(ani, 1);
 | ||
| 	
 | ||
| 	
 | ||
| 	local result = CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut");
 | ||
| 
 | ||
| 	if (result == true) // 嬴桧蝶煎萄蒂 面堡击 隆 嫦濠措模葬陛 夥荸栖棻.
 | ||
| 	{
 | ||
| 		
 | ||
| 		if(isFlag)
 | ||
| 		{
 | ||
| 			obj.sq_PlaySound("R_ICE_WALK");
 | ||
| 		}
 | ||
| 		
 | ||
| 		obj.sq_ClearKeyFrameFlag(ani);
 | ||
| 	}
 | ||
| 	else
 | ||
| 	{
 | ||
| 		//print(" procDash");
 | ||
| 		
 | ||
| 		if (isFlag)
 | ||
| 		{
 | ||
| 			local stage = sq_GetGlobaludpModuleStage();
 | ||
| 			if(!stage)
 | ||
| 				return;
 | ||
| 			
 | ||
| 			local dungeon = sq_GetDungeonByStage(stage);
 | ||
| 			
 | ||
| 			if(!dungeon)
 | ||
| 				return;
 | ||
| 				
 | ||
| 			local dungeonIndex = sq_GetDuegonIndex(dungeon);			
 | ||
| 			local mapIndex = sq_GetMapIndex(stage);
 | ||
| 
 | ||
| 			//扑肮薹 湍瞪暧 唳办 40廓, 扑肮暧 跷瞳 PVP裘暧 唳办 50019廓.
 | ||
| 			if (dungeonIndex == 40 || mapIndex == 50019)
 | ||
| 			{
 | ||
| 				obj.sq_PlaySound("R_RUN_SNOW");
 | ||
| 			}
 | ||
| 			else
 | ||
| 			{
 | ||
| 				local weight = sq_GetObjectWeight(obj);
 | ||
| 				if (sq_GetShadowTypeByAnimation() != 0)
 | ||
| 					obj.sq_PlaySound("R_RUN_FLOOR");
 | ||
| 				else if (weight < LIGHT_OBJECT_MAX_WEIGHT)
 | ||
| 					obj.sq_PlaySound("RUN_STONE");
 | ||
| 				else if (weight < MIDDLE_OBJECT_MAX_WEIGHT)
 | ||
| 					obj.sq_PlaySound("RUN_SOIL");
 | ||
| 				else
 | ||
| 					obj.sq_PlaySound("RUN_GRASS");
 | ||
| 			}
 | ||
| 		}
 | ||
| 		obj.sq_ClearKeyFrameFlag(ani);
 | ||
| 		
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| function procSkill_MagicShield(obj)
 | ||
| {
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| function procSkill_MagicShield(obj)
 | ||
| {
 | ||
| }
 | ||
| 
 | ||
| function getImmuneTypeDamgeRate_ATMage(obj,damageRate, attacker)
 | ||
| {
 | ||
| 	// 碳晦菅 锰剪葬 奢问暧 等嘐虽蒂 N%虏踯 马模卫郦坚, 唳霜击 嫡虽 强蝗栖棻.
 | ||
| 	if(obj.getVar("firepillar").size_vector() > 0)
 | ||
| 	{
 | ||
| 		if(obj.getVar("firepillar").get_vector(VECTOR_FLAG_2))
 | ||
| 		{
 | ||
| 			if(attacker)
 | ||
| 			{
 | ||
| 				print( " damageRate:" + damageRate);
 | ||
| 				local skillLevel = obj.sq_GetSkillLevel(SKILL_FIREPILLAR);
 | ||
| 				local N = obj.sq_GetLevelData(SKILL_FIREPILLAR, 0, skillLevel); // 0.锰剪葬 ??还罹舆朝 马模纂(%)
 | ||
| 				// 锰剪葬 奢问桧塭贼..
 | ||
| 				damageRate = damageRate - N;
 | ||
| 				//damageRate = 10;
 | ||
| 				print( " convert damageRate:" + damageRate);
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| 
 | ||
| 	// 碳饵煎 ?犒卫缚 等嘐虽陛 2寡(1.5寡?) 菟横除棻.	
 | ||
| 	if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut")) //
 | ||
| 	{
 | ||
| 		//0. ?问卫 嫡朝 等嘐虽 隶陛徽(%)
 | ||
| 		local increaseDamageRate = sq_GetIntData(obj, SKILL_DIEHARD, SKL_STATIC_INT_IDX_0); 
 | ||
| 		
 | ||
| 		//increaseDamageRate.tofloat() / 100.0;
 | ||
| 		damageRate = damageRate + increaseDamageRate;
 | ||
| 	}
 | ||
| 	
 | ||
| 	return damageRate;
 | ||
| }
 | ||
| 
 | ||
| function getImmuneType_ATMage(obj,type, attacker)	
 | ||
| {
 | ||
| 	local immuneType = type;
 | ||
| 	
 | ||
| 	return immuneType;
 | ||
| }
 | ||
| 
 | ||
| function procSkill_ATMage(obj)
 | ||
| {
 | ||
| 	procSkill_IceRoad(obj);
 | ||
| 	procSkill_MagicShield(obj);
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| function useSkill_before_ATMage(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate)
 | ||
| {	
 | ||
| 	local bChangedMp = false;
 | ||
| 	
 | ||
| 	print(" consumpMp:" + consumeMp + " oldSkillMpRate:" + oldSkillMpRate);
 | ||
| 	
 | ||
| 	local appendage = obj.GetSquirrelAppendage("Character/ATMage/ManaBurst/ap_ATMage_ManaBurst.nut");
 | ||
| 	
 | ||
| 	if(appendage)
 | ||
| 	{
 | ||
| 		local isvalid = appendage.isValid();
 | ||
| 		
 | ||
| 		if(isvalid)
 | ||
| 		{
 | ||
| 			local skillLevel = obj.sq_GetSkillLevel(SKILL_MANABURST);
 | ||
| 			local mpComsumeRate = sq_GetLevelData(obj, SKILL_MANABURST, SKL_LVL_COLUMN_IDX_0, skillLevel);
 | ||
| 			local newMpRate = oldSkillMpRate.tofloat() * (100 + mpComsumeRate.tofloat()) / 100;
 | ||
| 			
 | ||
| 			print(" newMpRate:" + newMpRate);
 | ||
| 			obj.setSkillMpRate(skillIndex, newMpRate.tofloat());
 | ||
| 			bChangedMp = true;
 | ||
| 		}		
 | ||
| 	}
 | ||
| 	
 | ||
| 	if(obj.sq_GetSkillLevel(SKILL_EXPRESSION) > 0)
 | ||
| 	{
 | ||
| 		local skillLevel = obj.sq_GetSkillLevel(SKILL_EXPRESSION);
 | ||
| 		local skillMpRate = obj.getSkillMpRate(skillIndex);
 | ||
| 		local mpComsumeRate = sq_GetLevelData(obj, SKILL_EXPRESSION, 0, skillLevel);
 | ||
| 		local newMpRate = skillMpRate.tofloat() * (100 - mpComsumeRate.tofloat()) / 100;
 | ||
| 		
 | ||
| 		//print(" expression consumeMp oldMpRate:" + skillMpRate.tofloat() + " skillIndex:" + skillIndex);
 | ||
| 		//print(" expression consumeMp newMpRate:" + newMpRate.tofloat());
 | ||
| 		//print(" expression consumeMp mpComsumeRate:" + mpComsumeRate.tofloat());
 | ||
| 
 | ||
| 		obj.setSkillMpRate(skillIndex, newMpRate.tofloat());
 | ||
| 	}
 | ||
| 	
 | ||
| 	print(" now consumpMp:" + obj.getSkillMpRate(skillIndex));
 | ||
| 	
 | ||
| 	return true;
 | ||
| }
 | ||
| 
 | ||
| function useSkill_after_ATMage(obj, skillIndex, consumeMp, consumeItem, oldSkillMpRate)
 | ||
| {
 | ||
| 	if(!obj)
 | ||
| 		return false;
 | ||
| 		
 | ||
| 	obj.setSkillMpRate(skillIndex, oldSkillMpRate.tofloat());
 | ||
| 	print(" after set consumpMp:" + oldSkillMpRate);
 | ||
| 	
 | ||
| 	return true;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| // getAttackAni()
 | ||
| // ?蹂缣 评塭 ?颤赅暮桧 夥莞阳, 桧 ?热缣怃 籀葬?邀
 | ||
| // 蕨) 热樯羹 蝶鉴
 | ||
| function getAttackAni_ATMage(obj, index)
 | ||
| {
 | ||
| 	if (!obj)
 | ||
| 		return null;	
 | ||
| 	
 | ||
| 	local animation = obj.sq_GetAttackAni(index);
 | ||
| 
 | ||
| 	// 热樯羹 蝶鉴击 寡锡棻贼, ?颤 缣栖诡桧暮桧 夥莘
 | ||
| 	// 葆彻掘紫 嫦饵肾虽 强挤.
 | ||
| 	local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
 | ||
| 	if (skillLevel > 0)
 | ||
| 		animation = obj.sq_GetCustomAni(CUSTOM_ANI_ICE_ELEMENTAL_ATTACK1 + index);
 | ||
| 	
 | ||
| 	return animation;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| // getDashAttackAni()
 | ||
| // ?蹂缣 评塭 ?颤赅暮桧 夥莞阳, 桧 ?热缣怃 籀葬?邀
 | ||
| // 蕨) 热樯羹 蝶鉴
 | ||
| function getDashAttackAni_ATMage(obj)
 | ||
| {
 | ||
| 	if (!obj)
 | ||
| 		return null;	
 | ||
| 	
 | ||
| 	local animation = obj.sq_GetDashAttackAni();
 | ||
| 
 | ||
| 	// 热樯羹 蝶鉴击 寡锡棻贼, ?颤 缣栖诡桧暮桧 夥莘
 | ||
| 	// 葆彻掘紫 嫦饵肾虽 强挤.
 | ||
| 	local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
 | ||
| 	if (skillLevel > 0)
 | ||
| 		animation = obj.sq_GetCustomAni(CUSTOM_ANI_ICE_ELEMENTAL_DASH_ATTACK);
 | ||
| 	
 | ||
| 	return animation;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| // getJumpAttackAni()
 | ||
| // ?蹂缣 评塭 ?颤赅暮桧 夥莞阳, 桧 ?热缣怃 籀葬?邀
 | ||
| // 蕨) 热樯羹 蝶鉴
 | ||
| function getJumpAttackAni_ATMage(obj)
 | ||
| {
 | ||
| 	if (!obj)
 | ||
| 		return null;	
 | ||
| 	
 | ||
| 	local animation = obj.sq_GetJumpAttackAni();
 | ||
| 
 | ||
| 	// 热樯羹 蝶鉴击 寡锡棻贼, ?颤 缣栖诡桧暮桧 夥莘
 | ||
| 	// 葆彻掘紫 嫦饵肾虽 强挤.
 | ||
| 	local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
 | ||
| 	if (skillLevel > 0)
 | ||
| 		animation = obj.sq_GetCustomAni(CUSTOM_ANI_ICE_ELEMENTAL_JUMP_ATTACK);
 | ||
| 	
 | ||
| 	return animation;
 | ||
| }
 | ||
| 
 | ||
| // 晦狱 奢问桧 譆渠 赁颤樯陛?
 | ||
| // 热樯羹蒂 寡办贼 譆渠 3颤梱虽 ?颤陛 桧瑞横飓
 | ||
| function getAttackCancelStartFrameSize_ATMage(obj)
 | ||
| {
 | ||
| 	local maxAttackNumber = obj.sq_GetAttackCancelStartFrameSize();
 | ||
| 
 | ||
| 	local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
 | ||
| 	// 譆渠偃热尔棻 1蒙擎 热蒂 葬欐?贼 脾
 | ||
| 	if (skillLevel > 0)
 | ||
| 		maxAttackNumber = 2;
 | ||
| 
 | ||
| 	return maxAttackNumber;
 | ||
| }
 | ||
| 
 | ||
| function setState_ATMage(obj, state, datas, isResetTimer)
 | ||
| {
 | ||
| 	if(state == STATE_DIE)
 | ||
| 		obj.sq_RemoveSkillLoad(SKILL_HOLONG_LIGHT);	// 避戏贼 ?炀碳 UI 薯剪
 | ||
| 	return 0;
 | ||
| }
 | ||
| 
 | ||
| function getDefaultAttackInfo_ATMage(obj, index)
 | ||
| {
 | ||
| 	if (!obj)
 | ||
| 		return null;	
 | ||
| 	
 | ||
| 	local attackInfo = obj.sq_GetDefaultAttackInfo(index);
 | ||
| 
 | ||
| 	// ?颤 奢问姜尔 渗唳
 | ||
| 	local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
 | ||
| 	if (skillLevel > 0)
 | ||
| 	{
 | ||
| 		attackInfo = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_ATTACK1 + index);
 | ||
| 	}
 | ||
| 	
 | ||
| 	return attackInfo;
 | ||
| }
 | ||
| 
 | ||
| function getDashAttackInfo_ATMage(obj)
 | ||
| {
 | ||
| 	if (!obj)
 | ||
| 		return null;
 | ||
| 	
 | ||
| 	local attackInfo = obj.sq_GetDashAttackInfo();
 | ||
| 
 | ||
| 	// ?颤 奢问姜尔 渗唳
 | ||
| 	local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
 | ||
| 	if (skillLevel > 0)
 | ||
| 		attackInfo = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_DASH_ATTACK);
 | ||
| 	
 | ||
| 	return attackInfo;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| function getJumpAttackInfo_ATMage(obj)
 | ||
| {
 | ||
| 	if (!obj)
 | ||
| 		return null;	
 | ||
| 	
 | ||
| 	local attackInfo = obj.sq_GetJumpAttackInfo();
 | ||
| 
 | ||
| 	// ?颤 奢问姜尔 渗唳
 | ||
| 	local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
 | ||
| 	if (skillLevel > 0)
 | ||
| 		attackInfo = sq_GetCustomAttackInfo(obj, CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_JUMP_ATTACK);
 | ||
| 	
 | ||
| 	return attackInfo;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| function setEnableCancelSkill_ATMage(obj, isEnable)
 | ||
| {
 | ||
| 	if(!obj)
 | ||
| 		return false;
 | ||
| 	
 | ||
| 	if(!obj.isMyControlObject())
 | ||
| 		return false;
 | ||
| 
 | ||
| 
 | ||
| 	if(!isEnable)
 | ||
| 		return true;
 | ||
| 		
 | ||
| 	// 警蜗晦 饷薯 蒙机殓栖棻. (2012.04.12)
 | ||
| 	// 陴彻饵 - 紧屡匐擎 彩念饵煎 瞪霜?晦 瞪梱虽 濠翕警蜗桧 蒙翕寰?栖棻.
 | ||
| 	
 | ||
| 	local GROW_TYPE_AT_MAGE = 0; // 瞪霜 鼠
 | ||
| 	local GROW_TYPE_ELEMENTAL_BOMBER = 1; // 瞪霜 县葬诠骁 夥该
 | ||
| 	local GROW_TYPE_GLACIALMASTER = 2; // 瞪霜 彩念饵
 | ||
| 	
 | ||
| 	//print( "  growtype:" +  sq_getGrowType(obj));
 | ||
| 	
 | ||
| 	
 | ||
| 	
 | ||
| 	// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
 | ||
| 	//if(sq_isPVPMode())
 | ||
| 	{	
 | ||
| //38	`ATMage/CancelWindStrike.skl`		// 警蜗 孺萄蝶?塭桧觼
 | ||
| 		obj.setSkillCommandEnable(SKILL_WIND_STRIKE, isEnable);
 | ||
| //39	`ATMage/CancelAtMagePush.skl`		// 警蜗 尘横顶晦
 | ||
| 		obj.setSkillCommandEnable(SKILL_PUSH_OUT, isEnable);
 | ||
| //40	`ATMage/CancelFallenBlossoms.skl`	// 警蜗 钒?翱玺
 | ||
| 		obj.setSkillCommandEnable(SKILL_FALLENBLOSSOMS, isEnable);
 | ||
| //41	`ATMage/CancelTurnWindmill.skl`		// 警蜗 ?离给葬晦
 | ||
| 		obj.setSkillCommandEnable(SKILL_TURNWINDMILL, isEnable);
 | ||
| //42	`ATMage/CancelBrokenArrow.skl`		// 警蜗 粽煎赎拥煎办
 | ||
| 		obj.setSkillCommandEnable(SKILL_BROKENARROW, isEnable);
 | ||
| //43	`ATMage/CancelIceCrash.skl`			// 警蜗 嬴桧蝶 觼楚莲
 | ||
| 		obj.setSkillCommandEnable(SKILL_ICE_CRASH, isEnable);
 | ||
| //44	`ATMage/CancelFrozenLand.skl`		// 警蜗 橡横称擎 渠虽
 | ||
| 		obj.setSkillCommandEnable(SKILL_FROZENLAND, isEnable);
 | ||
| //45	`ATMage/CancelIceSword.skl`			// 警蜗 彩匐
 | ||
| 		obj.setSkillCommandEnable(SKILL_ICE_SWORD, isEnable);
 | ||
| //46	`ATMage/CancelMultiShot.skl`		// 警蜗 翱楼 葆彻掘 陈葬晦
 | ||
| 		obj.setSkillCommandEnable(SKILL_MULTI_SHOT, isEnable);
 | ||
| //47	`ATMage/CancelFlameCircle.skl`		// 警蜗 ?溯歜怃赝
 | ||
| 		obj.setSkillCommandEnable(SKILL_FLAMECIRCLE, isEnable);
 | ||
| //170	`ATMage/CancelBackStep.skl`			// 警蜗 寥蝶变	
 | ||
| 		//obj.setSkillCommandEnable(SKILL_BROKENARROW, isEnable);
 | ||
| 		
 | ||
| //60	`ATMage/IceOrbEx.skl`			// 嬴桧蝶 螃粽 (?撩)
 | ||
| //SKILL_ICE_ORB_EX				<- 60	// ?撩 嬴桧蝶 螃粽
 | ||
| 		obj.setSkillCommandEnable(SKILL_ICE_ORB_EX, isEnable);
 | ||
| //61	`ATMage/Concentrate.skl`		// 钟抚?溯桧?(?撩 挡?粽 蝶鉴)
 | ||
| //SKILL_CONCENTRATE_EX			<- 61	// 钟抚?溯?(尧蹴)
 | ||
| 		obj.setSkillCommandEnable(SKILL_CONCENTRATE_EX, isEnable);
 | ||
| //62 	`ATMage/ElementalStrikeEx.skl`		// 县溯诠骁蝶?塭桧觼 (?撩)
 | ||
| //SKILL_ELEMENTAL_STRIKE_EX		<- 62	// 县溯诠骁 蝶?塭桧觼 (?撩蝶鉴)
 | ||
| //63	`ATMage/IceFieldEx.skl`			// 嬴桧蝶 ?萄 (?撩)
 | ||
| 		obj.setSkillCommandEnable(SKILL_ELEMENTAL_STRIKE_EX, isEnable);
 | ||
| //SKILL_ICE_FIELD_EX				<- 63	// 嬴桧蝶 ?萄
 | ||
| 		obj.setSkillCommandEnable(SKILL_ICE_FIELD_EX, isEnable);
 | ||
| 		//
 | ||
| 		
 | ||
| 		if(sq_getGrowType(obj) == GROW_TYPE_GLACIALMASTER)
 | ||
| 		{	
 | ||
| 			obj.setSkillCommandEnable(SKILL_ICE_SWORD, isEnable);
 | ||
| 		}
 | ||
| 	}
 | ||
| 	//else
 | ||
| 	//{
 | ||
| 	//}
 | ||
| 	
 | ||
| 	
 | ||
| 	
 | ||
| 	return true;
 | ||
| 	
 | ||
| 	local size = 10; // ?釭 涡 跷陛?捡?
 | ||
| 	local cancel_skill_l =[];
 | ||
| 	local skill_l =[];
 | ||
| 	cancel_skill_l.resize(size);
 | ||
| 	skill_l.resize(size);
 | ||
| //SKILL_WIND_STRIKE				<- 38	// 孺萄 蝶?塭桧觼
 | ||
| //SKILL_PUSH_OUT				<- 39	// 尘横顶晦
 | ||
| //SKILL_FALLENBLOSSOMS			<- 40   // 奢鳝:钒?翱玺
 | ||
| //SKILL_TURNWINDMILL				<- 41	// ?离给葬晦
 | ||
| //SKILL_BROKENARROW				<- 42	// 橡横称擎 渠虽
 | ||
| //SKILL_ICE_CRASH					<- 43	// 嬴桧蝶觼楚莲
 | ||
| //SKILL_FROZENLAND				<- 44	// 橡横称擎 渠虽
 | ||
| //SKILL_ICE_SWORD					<- 45	// 彩匐
 | ||
| //SKILL_FLAMECIRCLE				<- 47	// ?溯歜怃赝
 | ||
| //SKILL_MULTI_SHOT				<- 25	// 翱楼 葆彻掘 嫦饵
 | ||
| 	cancel_skill_l[0] = SKILL_CANCEL_WIND_STRIKE;
 | ||
| 	cancel_skill_l[1] = SKILL_CANCEL_PUSH_OUT;
 | ||
| 	cancel_skill_l[2] = SKILL_CANCEL_FALLENBLOSSOMS;
 | ||
| 	cancel_skill_l[3] = SKILL_CANCEL_TURNWINDMILL;
 | ||
| 	cancel_skill_l[4] = SKILL_CANCEL_BROKENARROW;
 | ||
| 	cancel_skill_l[5] = SKILL_CANCEL_ICE_CRASH;
 | ||
| 	cancel_skill_l[6] = SKILL_CANCEL_FROZENLAND;
 | ||
| 	cancel_skill_l[7] = SKILL_CANCEL_ICE_SWORD;
 | ||
| 	cancel_skill_l[8] = SKILL_CANCEL_FLAMECIRCLE;
 | ||
| 	cancel_skill_l[9] = SKILL_CANCEL_MULTI_SHOT;
 | ||
| 
 | ||
| 	skill_l[0] = SKILL_WIND_STRIKE;
 | ||
| 	skill_l[1] = SKILL_PUSH_OUT;
 | ||
| 	skill_l[2] = SKILL_FALLENBLOSSOMS;
 | ||
| 	skill_l[3] = SKILL_TURNWINDMILL;
 | ||
| 	skill_l[4] = SKILL_BROKENARROW;
 | ||
| 	skill_l[5] = SKILL_ICE_CRASH;
 | ||
| 	skill_l[6] = SKILL_FROZENLAND;
 | ||
| 	skill_l[7] = SKILL_ICE_SWORD;
 | ||
| 	skill_l[8] = SKILL_FLAMECIRCLE;
 | ||
| 	skill_l[9] = SKILL_MULTI_SHOT;
 | ||
| 
 | ||
| 	for(local i=0;i<size;i+=1)
 | ||
| 	{
 | ||
| 		// ?塭嘐搅煎 剩啖霞 郦 樯策蝶谛, 奢问寞彻桧 陛栋?虽 羹觼?罹 鳝娄?贼 ?卫粽螃粽薛?蒂 虏菟横 蛔烟?栖棻..
 | ||
| 		local level = sq_GetSkillLevel(obj, cancel_skill_l[i]);
 | ||
| 		local bRet = false;
 | ||
| 		
 | ||
| 		if(level > 0)
 | ||
| 		{
 | ||
| 			if(isEnable)
 | ||
| 			{
 | ||
| 				bRet = true;
 | ||
| 			}
 | ||
| 		}
 | ||
| 		
 | ||
| 		obj.setSkillCommandEnable(skill_l[i], bRet);
 | ||
| 	}
 | ||
| 	
 | ||
| 	
 | ||
| 	return true;
 | ||
| }
 | ||
| 
 | ||
| function isUsableItem_ATMage(obj, itemIndex)
 | ||
| {
 | ||
| 	if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut")) //
 | ||
| 	{ // 碳饵煎 蜗煎办? 酝桧塭贼 ?犒啗翮 嬴桧蛊击 噩 热 桡蝗栖棻.
 | ||
| 		local isRecover = sq_IsItemRecover(itemIndex);
 | ||
| 
 | ||
| 		if(isRecover == true)
 | ||
| 		{
 | ||
| 			return false;
 | ||
| 		}
 | ||
| 		
 | ||
| 		if(itemIndex == 8)
 | ||
| 		{ // 溯嘐暧 桨望
 | ||
| 			return false;
 | ||
| 		}
 | ||
| 	}
 | ||
| 	//print( " is use itemIndex:" + itemIndex + " return true");
 | ||
| 	
 | ||
| 	return true;
 | ||
| }
 | ||
| 
 | ||
| function sendSetHpPacket_ATMage(obj, hp, sendInstant)
 | ||
| {
 | ||
| 	if(CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut")) //
 | ||
| 	{
 | ||
| 		if(obj.getHp() < hp)
 | ||
| 		{
 | ||
| 			//print(" not send hp");
 | ||
| 			return false;
 | ||
| 		}
 | ||
| 	}
 | ||
| 	//print( " go send hp");
 | ||
| 	return true;
 | ||
| }
 | ||
| 
 | ||
| function sendSetMpPacket_ATMage(obj, mp, sendInstant)
 | ||
| {	
 | ||
| 	return true;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| // 钟帼瞪 蝶鉴桧 瞳辨肾横捡 ? ?卫粽 螃粽薛? 樯策蝶塭贼,
 | ||
| // `isApplyConversionSkillPassiveObject`?热缣 跷陛蒂 ?舆紫烟 ?棻.
 | ||
| function isApplyConversionSkillPassiveObject_ATMage(passiveObjectIndex)
 | ||
| {
 | ||
| 	if (passiveObjectIndex == 24201)
 | ||
| 	{	// 孺萄 蝶?塭桧觼
 | ||
| 		return true;
 | ||
| 	}
 | ||
| 	else if (passiveObjectIndex == 24222)
 | ||
| 	{	// ?炀碳
 | ||
| 		return true;
 | ||
| 	}
 | ||
| 	else if (passiveObjectIndex == 24217)
 | ||
| 	{	// 僭渠?
 | ||
| 		return true;
 | ||
| 	}
 | ||
| 	else if (passiveObjectIndex == 24254)
 | ||
| 	{	// 碳晦菅(?腻寞?)
 | ||
| 		return true;
 | ||
| 	}
 | ||
| 	
 | ||
| 	// 翱楼嫦饵 ?卫粽 螃粽薛?, 翱楼嫦饵暧 ?嫦 ?卫粽 螃粽薛?
 | ||
| 	
 | ||
| 	local idx = passiveObjectIndex;
 | ||
| 	if (idx >= 24266 && idx <= 24283)
 | ||
| 	{
 | ||
| 		return true;
 | ||
| 	}
 | ||
| 	
 | ||
| 	return false;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| //湍瞪击 亿煎 卫蒙? 阳 ?轿肾朝 葬掸 ?热
 | ||
| // 湍瞪缣怃 葆击煎 釭萤 阳 羲卫 ?轿腌栖棻.
 | ||
| function resetDungeonStart_ATMage(obj, moduleType, resetReason, isDeadTower, isResetSkillUserCount)
 | ||
| {
 | ||
| 	if(!obj) return -1;	
 | ||
| 
 | ||
| 	local isReset = true; // 晦狱瞳戏烦 瞪睡 葬掸殓栖棻.
 | ||
| 		
 | ||
| 	if (sq_GetCurrentModuleType() == MODULE_TYPE_WARROOM || sq_GetCurrentModuleType() == MODULE_TYPE_DEAD_TOWER)
 | ||
| 	{
 | ||
| 		// 葬掸暧 桧嵘陛 避朝桧嵘陛 嬴栖塭贼..
 | ||
| 		if (resetReason != REASON_DEATH)
 | ||
| 		{
 | ||
| 			isReset = false; // 葬掸卫郦虽 强蝗栖棻.
 | ||
| 		}
 | ||
| 	}
 | ||
| 	
 | ||
| 	
 | ||
| 	if(isReset)
 | ||
| 	{ // 葬掸击 ?捡?棻贼..
 | ||
| 		local appendage = obj.GetSquirrelAppendage("Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut");
 | ||
| 		
 | ||
| 
 | ||
| 		if(appendage)
 | ||
| 		{
 | ||
| 			local skill = sq_GetSkill(obj, SKILL_ICEROAD);
 | ||
| 			local isvalid = appendage.isValid();
 | ||
| 			
 | ||
| 			if(skill)
 | ||
| 			{
 | ||
| 				print(" isSeal:" + skill.isSealActiveFunction());
 | ||
| 				if(!skill.isSealActiveFunction())
 | ||
| 				{
 | ||
| 					skill.setSealActiveFunction(true);
 | ||
| 				}
 | ||
| 			}
 | ||
| 			
 | ||
| 			if(isvalid)
 | ||
| 			{
 | ||
| 				appendage.setValid(false);
 | ||
| 			}
 | ||
| 		}
 | ||
| 		
 | ||
| 		obj.sq_RemoveSkillLoad(SKILL_HOLONG_LIGHT);	// ?炀碳 UI 薯剪
 | ||
| 	}
 | ||
| 	
 | ||
| 	return 1;
 | ||
| 	
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| // 陴彻饵 : 县溯诠骁 羹樯
 | ||
| // parameter煎 瞪殖胀 element楼撩击 薯谖? 棻艇3楼撩击 鬼??棻.
 | ||
| // appendage朝 酝绘肾虽 强挤.
 | ||
| function addElementalChain_ATMage(obj, element)
 | ||
| {
 | ||
| 	if (!obj) return;
 | ||
| 	if (element == ENUM_ELEMENT_MAX) return;
 | ||
| 	local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_CHAIN);
 | ||
| 	if (skillLevel <= 0) return;
 | ||
| 	
 | ||
| 	local skill = sq_GetSkill(obj, SKILL_ELEMENTAL_CHAIN);
 | ||
| 	if (!skill) return;
 | ||
| 	local changeValue = obj.sq_GetLevelData(SKILL_ELEMENTAL_CHAIN, 0, skillLevel);
 | ||
| 	local validTime = obj.sq_GetLevelData(SKILL_ELEMENTAL_CHAIN, 1, skillLevel);
 | ||
| 	
 | ||
| 	local apFire = null;
 | ||
| 	local apWater = null;
 | ||
| 	local apDark = null;
 | ||
| 	local apLight = null;
 | ||
| 	
 | ||
| 	if (element == ENUM_ELEMENT_FIRE)
 | ||
| 	{
 | ||
| 		apWater = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER, false, changeValue.tofloat(), validTime);
 | ||
| 		apDark = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, changeValue.tofloat(), validTime);
 | ||
| 		apLight = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT, false, changeValue.tofloat(), validTime);
 | ||
| 	}
 | ||
| 	else if (element == ENUM_ELEMENT_WATER)
 | ||
| 	{
 | ||
| 		apFire = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE, false, changeValue.tofloat(), validTime);
 | ||
| 		apDark = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, changeValue.tofloat(), validTime);
 | ||
| 		apLight = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT, false, changeValue.tofloat(), validTime);
 | ||
| 	}
 | ||
| 	else if (element == ENUM_ELEMENT_DARK)
 | ||
| 	{
 | ||
| 		apFire = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE, false, changeValue.tofloat(), validTime);
 | ||
| 		apWater = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER, false, changeValue.tofloat(), validTime);
 | ||
| 		apLight = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT, false, changeValue.tofloat(), validTime);
 | ||
| 	}
 | ||
| 	else if (element == ENUM_ELEMENT_LIGHT)
 | ||
| 	{
 | ||
| 		apFire = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE, false, changeValue.tofloat(), validTime);
 | ||
| 		apWater = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER, false, changeValue.tofloat(), validTime);
 | ||
| 		apDark = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, changeValue.tofloat(), validTime);
 | ||
| 	}
 | ||
| 	else if (element == -1)
 | ||
| 	{
 | ||
| 		apFire = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_FIRE, false, changeValue.tofloat(), validTime);
 | ||
| 		apWater = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_WATER, false, changeValue.tofloat(), validTime);
 | ||
| 		apDark = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_DARK, false, changeValue.tofloat(), validTime);
 | ||
| 		apLight = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_ATTACK_LIGHT, false, changeValue.tofloat(), validTime);
 | ||
| 	}
 | ||
| 	
 | ||
| 	if (apFire != null)
 | ||
| 		apFire.sq_Append(obj, obj, APID_SKILL_ELEMENTAL_CHAIN_FIRE);
 | ||
| 	if (apWater != null)
 | ||
| 		apWater.sq_Append(obj, obj, APID_SKILL_ELEMENTAL_CHAIN_WATER);
 | ||
| 	if (apDark != null)
 | ||
| 		apDark.sq_Append(obj, obj, APID_SKILL_ELEMENTAL_CHAIN_DARK);
 | ||
| 	if (apLight != null)
 | ||
| 		apLight.sq_Append(obj, obj, APID_SKILL_ELEMENTAL_CHAIN_LIGHT);
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| function onChangeSkillEffect_ATMage(obj, skillIndex, reciveData)
 | ||
| {
 | ||
| 	if(!obj)
 | ||
| 		return;
 | ||
| 		
 | ||
| 	if(skillIndex == SKILL_ICEROAD)
 | ||
| 	{
 | ||
| 		local skill = sq_GetSkill(obj, SKILL_ICEROAD);
 | ||
| 		skill.resetCurrentCoolTime();
 | ||
| 		skill.setSealActiveFunction(true);	
 | ||
| 		local skill_level = sq_GetSkillLevel(obj, SKILL_ICEROAD);
 | ||
| 		obj.startSkillCoolTime(SKILL_ICEROAD, skill_level, -1);
 | ||
| 		
 | ||
| 		local appendage = obj.GetSquirrelAppendage("Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut");
 | ||
| 		appendage.setValid(false);
 | ||
| 	}
 | ||
| 	else if(skillIndex == SKILL_DIEHARD)
 | ||
| 	{
 | ||
| 		if(reciveData.getSize() > 0)
 | ||
| 		{
 | ||
| 			local hp = reciveData.readDword(); // 翕晦?? hp
 | ||
| 			
 | ||
| 			if(hp > 0)
 | ||
| 			{
 | ||
| 				print(" onchange:" + hp);
 | ||
| 				obj.setHp(hp, null, true);
 | ||
| 			}
 | ||
| 		}
 | ||
| 	}
 | ||
| 	else if (skillIndex == SKILL_ELEMENTAL_CHANGE)
 | ||
| 	{
 | ||
| 		if (reciveData.getSize() > 0)
 | ||
| 		{
 | ||
| 			local element = reciveData.readByte();
 | ||
| 			obj.setThrowElement(element);
 | ||
| 			
 | ||
| 			// 尔?虞?撩 籀葬
 | ||
| 			local appendage = CNSquirrelAppendage.sq_GetAppendage(obj,"Character/ATMage/MagicShield/ap_MagicShield.nut");
 | ||
| 			if(appendage)
 | ||
| 				setMagicShieldType(appendage, obj, obj.getThrowElement());	
 | ||
| 		}
 | ||
| 	}
 | ||
| 	else if(skillIndex == SKILL_TUNDRASOUL)
 | ||
| 	{
 | ||
| 		if (reciveData.getSize() > 0)
 | ||
| 		{
 | ||
| 			local mode = reciveData.readDword();
 | ||
| 			
 | ||
| 			local auraAppendage = 0;
 | ||
| 			local appendage = CNSquirrelAppendage.sq_GetAppendage(obj, "Character/ATMage/TundraSoul/ap_ATMage_TundraSoul.nut");
 | ||
| 			
 | ||
| 			if(appendage)
 | ||
| 			{
 | ||
| 				auraAppendage = appendage.sq_getSquirrelAuraMaster("AuraTundraSoul");
 | ||
| 			
 | ||
| 				if(mode == 1)			
 | ||
| 				{ // 毡朝匙击 疏捡?栖棻. (嬴办塭)
 | ||
| 					appendage.sq_DeleteAppendages();
 | ||
| 				}
 | ||
| 				else if(mode == 0)
 | ||
| 				{ // 桡朝匙击 面捡?栖棻. (嬴办塭)
 | ||
| 					local range = obj.sq_GetIntData(SKILL_TUNDRASOUL , 0);// 0. 彩念 鼻鹧桧鼻缣 勘葬朝 ?娄彰嫔
 | ||
| 					appendage.sq_AddSquirrelAuraMaster("AuraTundraSoul",obj, obj, range, 18, 5, 0);
 | ||
| 				}
 | ||
| 			}
 | ||
| 		//CNSquirrelAppendage.sq_RemoveAppendage(obj, "Character/ATMage/TundraSoul/ap_ATMage_TundraSoul.nut");
 | ||
| 		}
 | ||
| 	}
 | ||
| }
 | ||
| 
 | ||
| function changeTrhowState_ATMage(obj, throwState)
 | ||
| {
 | ||
| 	if (!obj) return false;
 | ||
| 	
 | ||
| 	printc("changeTrhowState_ATMage");
 | ||
| 	if (throwState == 3 &&
 | ||
| 		obj.getThrowIndex() == SKILL_ELEMENTAL_CHANGE)
 | ||
| 	{
 | ||
| 		// 陴彻饵 : 楼撩 嫦翕
 | ||
| 		obj.sq_IntVectClear();
 | ||
| 		obj.sq_IntVectPush(throwState);
 | ||
| 		obj.sq_IntVectPush(-1);
 | ||
| 		obj.sq_IntVectPush(obj.getThrowElement());
 | ||
| 		obj.sq_AddSetStatePacket(STATE_THROW, STATE_PRIORITY_USER, true);
 | ||
| 		return true;
 | ||
| 	}
 | ||
| 
 | ||
| 	return false;
 | ||
| }
 | ||
| 
 | ||
| function isCounterState_ATMage(obj, isCounter)
 | ||
| {
 | ||
| 	if(obj.getVar("firepillar").size_vector() > 0)
 | ||
| 	{
 | ||
| 		if(obj.getVar("firepillar").get_vector(VECTOR_FLAG_2))
 | ||
| 		{
 | ||
| 			isCounter = false;
 | ||
| 		}
 | ||
| 	}
 | ||
| 	
 | ||
| 	return isCounter;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| function AppendAppendageToSimple(obj, skillIndex, appendageFileName, validTime, isBuff)
 | ||
| {
 | ||
| 	local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skillIndex, false, appendageFileName, false);
 | ||
| 	
 | ||
| 	appendage.sq_SetValidTime(validTime); // 横?蛤虽 颤歜 撮?
 | ||
| 	
 | ||
| 	// 罹晦怃 append 蒙机
 | ||
| 	CNSquirrelAppendage.sq_Append(appendage, obj, obj, isBuff); // 帼?蚂
 | ||
| 
 | ||
| }
 | ||
| 
 | ||
| function setActiveStatus_ATMage(obj, activeStatus, power)
 | ||
| {
 | ||
| 	if (!obj) return 0;
 | ||
| 	
 | ||
| 	local state = sq_GetState(obj);
 | ||
| 	
 | ||
| 	if (state == STATE_ELEMENTAL_BUSTER)
 | ||
| 	{
 | ||
| 		// 陕撩橾隆 评煎 鼻鹧桧鼻桧 勘葬虽 强挤 (县溯诠骁 帼蝶搅)
 | ||
| 		//printc("state : STATE_ELEMENTAL_BUSTER");
 | ||
| 		return 0;
 | ||
| 	}
 | ||
| 	
 | ||
| 	return 1;
 | ||
| }
 | ||
| 
 | ||
| 
 | ||
| function reset_ATMage(obj)
 | ||
| {
 | ||
| 	if(!obj)
 | ||
| 		return;		
 | ||
| 	
 | ||
| } |