ATMAGE_MAGIC_ANI_TYPE_BACK <- 0; ATMAGE_MAGIC_ANI_TYPE_FRONT <- 1; ATMAGE_MAGIC_ANI_TYPE_CIRCLE <- 2; VAR_MAGIC_SHIELD_BACK_ANI <- 0; VAR_MAGIC_SHIELD_FRONT_ANI <- 1; VAR_MAGIC_SHIELD_ICE_HIT_COUNT <- 2; // 热楼撩 尔?虞桧 虞击热 毡朝 苹遴? ?热. function sq_AddFunctionName(appendage) { appendage.sq_AddFunctionName("proc", "proc_appendage_MagicShield") appendage.sq_AddFunctionName("onStart", "onStart_appendage_MagicShield") appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_MagicShield") appendage.sq_AddFunctionName("onDamageParent", "onDamageParent_appendage_MagicShield") appendage.sq_AddFunctionName("drawAppend", "drawAppend_appendage_MagicShield") appendage.sq_AddFunctionName("getImmuneTypeDamageRate", "getImmuneTypeDamageRate_appendage_MagicShield") } function sq_AddEffect(appendage) { } function drawAppend_appendage_MagicShield(appendage, isOver, x, y, isFlip) { if (!appendage) { return; } local obj = appendage.getParent(); if (!obj) { appendage.setValid(false); return; } local var = appendage.getVar(); local backAni = var.getAnimation(VAR_MAGIC_SHIELD_BACK_ANI); local frontAni = var.getAnimation(VAR_MAGIC_SHIELD_FRONT_ANI); if (frontAni && isOver) { sq_AnimationProc(frontAni); sq_drawCurrentFrame(frontAni, x, y, isFlip); } else if (backAni && !isOver) { sq_AnimationProc(backAni); sq_drawCurrentFrame(backAni, x, y, isFlip); } } function getImmuneTypeDamageRate_appendage_MagicShield(appendage, damageRate, attacker) { if (!appendage) return damageRate; local parentObj = appendage.getParent(); parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj); if (!parentObj) { appendage.setValid(false); return damageRate; } local var = appendage.getVar(); if (!var) return damageRate; local type = parentObj.getThrowElement(); // 热楼撩 : 等嘐虽 橾姜 ?热 谏瞪 寞横 if (type == ENUM_ELEMENT_WATER) return 0; local type = parentObj.getThrowElement(); // 溯涟樯?煎 等嘐虽徽桧 亵姜脾. local skill_level = parentObj.sq_GetSkillLevel(SKILL_MAGIC_SHIELD); local decreaseRate = parentObj.sq_GetLevelData(SKILL_MAGIC_SHIELD, 1, skill_level); // 1. 等嘐虽 马模徽(%) damageRate = damageRate - decreaseRate; return damageRate; } function removeMagicShield(obj) { CNSquirrelAppendage.sq_RemoveAppendage(obj, "Character/ATMage/MagicShield/ap_MagicShield.nut"); } // 等嘐虽卫 籀葬. // 鼠楼撩 : 嫡朝 等嘐虽 橾姜 % 马模 // ?楼撩 : ?问卫 瞳缣啪 ?楼撩 等嘐虽 // 热楼撩 : 等嘐虽 橾姜 ?热 谏瞪 寞横 // 赀楼撩 : ?问卫 橾姜卫除 瞳 唳霜 // 檩楼撩 : ?问卫 奢问濠 菩? function onDamageParent_appendage_MagicShield(appendage ,attacker, boundingBox, isStuck) { if (!appendage) { return; } local parentObj = appendage.getParent(); parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj); if (!parentObj) { appendage.setValid(false); return; } local var = appendage.getVar(); if (!var) return; local type = parentObj.getThrowElement(); local circleObj = sq_AddDrawOnlyAniFromParent(parentObj, getMagicShieldAniPath(ATMAGE_MAGIC_ANI_TYPE_CIRCLE, type) ,0,-1,0); if (circleObj) { circleObj.setCurrentDirection(sq_GetOppositeDirection(attacker.getDirection())); var.push_obj_vector(circleObj); } if (isStuck) return; local skill_level = sq_GetSkillLevel(parentObj, SKILL_MAGIC_SHIELD); // ?楼撩 : ?问卫 瞳缣啪 ?楼撩 等嘐虽 if (type == ENUM_ELEMENT_FIRE) { local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj); if (sqrChr) { if (!(parentObj.sq_GetTeam() == attacker.getTeam())) { local fireDamage = sqrChr.sq_GetPowerWithPassive(SKILL_MAGIC_SHIELD, STATE_MAGIC_SHIELD, 2,-1,1.0); local ap = sq_getNewAttackInfoPacket(); ap.power = fireDamage; ap.element = ENUM_ELEMENT_FIRE; ap.useWeapon = false; ap.eType = ATTACKTYPE_MAGICAL; if (parentObj.isMyControlObject()) sq_SendHitObjectPacketByAttackInfo(parentObj, attacker, ap); } } } // 热楼撩 : 等嘐虽 橾姜 ?热 谏瞪 寞横 if (type == ENUM_ELEMENT_WATER) { if (!attacker.isObjectType(0x0821)) { if (!(parentObj.sq_GetTeam() == attacker.getTeam())) { local currentIceGuardCount = var.getInt(VAR_MAGIC_SHIELD_ICE_HIT_COUNT); // 热楼撩 尔? ?热 currentIceGuardCount--; if (currentIceGuardCount <= 0) appendage.setValid(false); var.setInt(VAR_MAGIC_SHIELD_ICE_HIT_COUNT,currentIceGuardCount); } } } // 赀楼撩 : ?问卫 橾姜卫除 瞳 唳霜 else if (type == ENUM_ELEMENT_LIGHT) { if (!(parentObj.sq_GetTeam() == attacker.getTeam())) { local stunTime = sq_GetLevelData(parentObj, SKILL_MAGIC_SHIELD, 4, skill_level); // 4. 瞳 唳霜 卫除 local ap = sq_getNewAttackInfoPacket(); ap.hitStunTimeAttackerDamager = stunTime; sq_SendHitObjectPacketByAttackInfo(parentObj, attacker, ap); } } // 檩楼撩 : ?问卫 奢问濠 菩? else if (type == ENUM_ELEMENT_DARK) { if (!(parentObj.sq_GetTeam() == attacker.getTeam())) { local prob = sq_GetLevelData(parentObj, SKILL_MAGIC_SHIELD, 5, skill_level)/10.0; // 5. 菩? ?睦 (0.1%) local level = sq_GetLevelData(parentObj, SKILL_MAGIC_SHIELD, 6, skill_level); // 6. 菩? 溯涟 local time = sq_GetLevelData(parentObj, SKILL_MAGIC_SHIELD, 7, skill_level); // 7. 虽楼卫除 sq_sendSetActiveStatusPacket(attacker, parentObj, ACTIVESTATUS_SLOW, prob.tofloat(), level, false, time); // ?睦, 溯涟, 鬼薯, 卫除 } } } function getMagicShieldAniPath(aniType, elementType) { local commonPath = "Character/Mage/Effect/Animation/ATMagicShield/"; local aniName = "00_shield_"; //ATMAGE_MAGIC_ANI_TYPE_BACK local typeName = "none"; // ENUM_ELEMENT_NONE if (aniType == ATMAGE_MAGIC_ANI_TYPE_FRONT) aniName = "01_shield_"; else if (aniType == ATMAGE_MAGIC_ANI_TYPE_CIRCLE) aniName = "02_shield_"; if (elementType == ENUM_ELEMENT_WATER) typeName = "ice"; else if (elementType == ENUM_ELEMENT_FIRE) typeName = "fire"; else if (elementType == ENUM_ELEMENT_DARK) typeName = "dark"; else if (elementType == ENUM_ELEMENT_LIGHT) typeName = "light"; return commonPath + aniName + typeName + "_dodge.ani"; } function setMagicShieldType(appendage, obj, type) { local parentObj = sq_GetCNRDObjectToSQRCharacter(obj); if (!parentObj) { appendage.setValid(false); return; } local var = appendage.getVar(); local currentAniFrameIndex = 0; // 晦襄 楼撩 桧?? 拥栖谛 褐叙 桧?? 拥栖谛 翕晦?蒂 嫔?. local backAni = var.getAnimation(VAR_MAGIC_SHIELD_BACK_ANI); local frontAni = var.getAnimation(VAR_MAGIC_SHIELD_FRONT_ANI); if (backAni && frontAni) { currentAniFrameIndex = sq_GetAnimationFrameIndex(backAni); sq_DeleteAni(backAni); sq_DeleteAni(frontAni); } backAni = sq_CreateAnimation("", getMagicShieldAniPath(ATMAGE_MAGIC_ANI_TYPE_BACK, type)); frontAni = sq_CreateAnimation("", getMagicShieldAniPath(ATMAGE_MAGIC_ANI_TYPE_FRONT, type)); sq_SetAnimationFrameIndex( backAni, currentAniFrameIndex); // ?溯歜 翕晦? sq_SetAnimationFrameIndex( frontAni, currentAniFrameIndex); var.setAnimation(VAR_MAGIC_SHIELD_BACK_ANI,backAni); // 渗热 荡潍 : 嫔纂 翕晦?辨 var.setAnimation(VAR_MAGIC_SHIELD_FRONT_ANI,frontAni); } function setMagicShieldTime(obj,time) { local appendage = CNSquirrelAppendage.sq_GetAppendage(obj, "Character/ATMage/MagicShield/ap_MagicShield.nut"); if (!appendage) return; appendage.sq_SetValidTime(time); } function proc_appendage_MagicShield(appendage) { if (!appendage) { return; } local parentObj = appendage.getParent(); parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj); if (!parentObj) { appendage.setValid(false); return; } local var = appendage.getVar(); local objectsSize = var.get_obj_vector_size(); for (local i=0;i