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