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