Sqr/character/atmage/atmage_common.nut

1256 lines
34 KiB
Plaintext
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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