function destroyObject(obj) { local objListSize = obj.getVar().get_obj_vector_size(); for(local i =0;i 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 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; }