Sqr/character/atmage/atmage_common.nut

1256 lines
34 KiB
Plaintext
Raw Permalink Normal View History

2024-03-18 21:37:40 +08:00
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;
}