PO_MAGIC_CANNON_STATE_CREATE <- 2; PO_MAGIC_CANNON_STATE_SHOOT <- 3; PO_MAGIC_CANNON_VAR_SHOOT_POSITION <- 0; PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE <- 1; function setCustomData_po_ATMagicCannon(obj, receiveData) { if(!obj) return; local shootPosition = receiveData.readWord(); local elementalType = receiveData.readWord(); obj.setTimeEvent(0,2000,1,false); // 0廓 樯策蝶暧 颤桧该, 蟾钦嫔 桧渐? 嫦当, 1廓虏, 籀挤缚 褒?寰?. local var = obj.getVar(); var.setInt(PO_MAGIC_CANNON_VAR_SHOOT_POSITION, shootPosition); var.setInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE, elementalType); if(elementalType != ENUM_ELEMENT_NONE) { setCurrentAnimationFromCutomIndex(obj,elementalType); } // 檩楼暧 唳办 评煎 ?嫦桧 桡棻. if(elementalType == ENUM_ELEMENT_DARK) { local parentObj = obj.getTopCharacter(); parentObj = sq_ObjectToSQRCharacter(parentObj); if(!parentObj) return; local skill_level = sq_GetSkillLevel(parentObj, SKILL_ELEMENTAL_CHANGE); local changeStatusLevel = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 7, skill_level);// 7.荡舆 溯涟 local changeStatusProb = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 8, skill_level);// 8.荡舆 ?睦(0.1%) local changeStatusDuration = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 9, skill_level);// 9.荡舆 虽楼卫除 local attackInfo = sq_GetCurrentAttackInfo(obj); sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, changeStatusProb, changeStatusLevel, changeStatusDuration); local attackPower = 0; attackPower = parentObj.sq_GetBonusRateWithPassive(SKILL_MAGIC_CANNON, STATE_MAGIC_CANNON, elementalType, 1.0); sq_SetAddWeaponDamage(attackInfo, true); sq_SetCurrentAttackBonusRate(attackInfo, attackPower); // 棻艇 葆彻掘朝 ?嫦缣怃 等嘐虽蒂 籀葬?晦 阳侥缣 僭葬筒&?筒击 饵辨?釭 // 檩楼擎 葆彻掘 濠羹缣怃 等嘐虽蒂 籀葬?晦 阳侥缣 葆彻筒戏煎 渗唳 attackInfo.setAttackType(ATTACKTYPE_MAGICAL); //等嘐虽 赅暮娄 挡暮 扑姜 //DAMAGEACT_NONE = 0, /// 奁拟 桡挤 //DAMAGEACT_DAMAGE = 1, /// 等嘐虽 赅暮 //DAMAGEACT_DOWN = 2, /// 棻遴 sq_SetCurrentAttackeDamageAct(attackInfo, 1); attackInfo.setElement(ENUM_ELEMENT_DARK); } } function addMagicCannonEffect(obj,vangle) { if(!obj) return; local var = obj.getVar(); local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE); local currentAni = obj.getCurrentAnimation(); local typeName = "none"; switch(elementalType) { case ENUM_ELEMENT_FIRE : typeName = "fire"; break; case ENUM_ELEMENT_WATER : typeName = "water"; break; case ENUM_ELEMENT_DARK : typeName = "dark"; break; case ENUM_ELEMENT_LIGHT : typeName = "light"; break; default : return; } local effect = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATMagicCannon/01_" + typeName + "_dodge.ani", 0 ,0 ,0); effect.setCustomRotate(true, sq_ToRadian(vangle)); } function onKeyFrameFlag_po_ATMagicCannon(obj, keyIndex) { if(!obj) return false; if(keyIndex == 1) { obj.sendStateOnlyPacket(PO_MAGIC_CANNON_STATE_SHOOT); } return true; } function onTimeEvent_po_ATMagicCannon(obj, timeEventIndex, timeEventCount) { if(!obj) return false; if(obj.isMyControlObject()) { sq_SendDestroyPacketPassiveObject(obj); } return true; // true贼 属寥 酝钦 } function setState_po_ATMagicCannon(obj, state, datas) { if(!obj) return; local var = obj.getVar(); local shootPosition = var.getInt(PO_MAGIC_CANNON_VAR_SHOOT_POSITION); local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE); if (state == PO_MAGIC_CANNON_STATE_SHOOT) { local vangle = 0.0; // 热? if(shootPosition == ENUM_MAGIC_CANNON_SUBSTATE_VERTICAL) vangle = -90.0; // 热霜 else if(shootPosition == ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL) vangle = -45.0; // 渠陕摹 if(elementalType != ENUM_ELEMENT_NONE) { // 鼠楼撩擎 桧嘐虽 蛤?? 桧嘐虽 setCurrentAnimationFromCutomIndex(obj,ENUM_ELEMENT_MAX + elementalType); obj.setCustomRotate(true, sq_ToRadian(vangle)); } obj.sq_SetMoveParticle("Particle/ATMagicCannon.ptl", 0.0, vangle); addMagicCannonEffect(obj,vangle); // ? ?朝 桧?? local fireSound = "MWSHOW_04"; if (elementalType == ENUM_ELEMENT_FIRE) fireSound = "MCANNON_FIRE"; else if (elementalType == ENUM_ELEMENT_WATER) fireSound = "MCANNON_ATK"; else if (elementalType == ENUM_ELEMENT_DARK) fireSound = "MCANNON_DARK"; else if (elementalType == ENUM_ELEMENT_LIGHT) fireSound = "MCANNON_LIGHT"; obj.sq_PlaySound(fireSound); } } function createMagicCannonElementlalExplosion(obj) { if(!obj) return; local var = obj.getVar(); local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE); if(!obj.isMyControlObject()) return; if(elementalType == ENUM_ELEMENT_DARK) //檩楼暧 唳办 ?嫦?虽 强朝棻. return; local changeStatusType = ACTIVESTATUS_MAX; local parentObj = sq_GetCNRDObjectToCharacter(obj.getParent()); local skill_level = sq_GetSkillLevel(parentObj, SKILL_ELEMENTAL_CHANGE); local changeStatusDuration = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 0, skill_level); local changeStatusProb = 0.0; local changeStatusLevel = 0.0; local changeStatusdamage = 0; // 衙霜议凯暧 ?嫦 觼晦(%) local sizeRate = sq_GetIntData(parentObj, SKILL_MAGIC_CANNON, 0); switch (elementalType) { case ENUM_ELEMENT_WATER : changeStatusType = ACTIVESTATUS_FREEZE; changeStatusLevel = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 3, skill_level);// 3.彩念 溯涟 changeStatusProb = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 4, skill_level);// 4.彩念 ?睦(0.1%) changeStatusDuration = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 5, skill_level);// 5.彩念 虽楼卫除 break; case ENUM_ELEMENT_LIGHT : changeStatusType = ACTIVESTATUS_LIGHTNING; changeStatusLevel = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 11, skill_level);// 11.马瞪 溯涟 changeStatusProb = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 12, skill_level);// 12.马瞪 ?睦(0.1%) changeStatusDuration = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 13, skill_level);// 13.马瞪 虽楼卫除 changeStatusdamage = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 14, skill_level);// 14.马瞪 等嘐虽 break; } local explosionInfo = sq_getNewAttackInfoPacket(); // 衙霜议凯暧 ?嫦 觼晦(%) explosionInfo.sizeRate = sizeRate; if (changeStatusType != ACTIVESTATUS_MAX) { explosionInfo.changeStatusType = changeStatusType; explosionInfo.changeStatusProb = changeStatusProb.tofloat(); // ?睦 explosionInfo.changeStatusLevel = changeStatusLevel.tofloat(); // 溯涟 explosionInfo.changeStatusDuration = changeStatusDuration; explosionInfo.changeStatusdamage = changeStatusdamage; } local parentObj = obj.getParent(); parentObj = sq_ObjectToSQRCharacter(parentObj); local attackPower = 0; if(parentObj) { attackPower = parentObj.sq_GetBonusRateWithPassive(SKILL_MAGIC_CANNON, STATE_MAGIC_CANNON, elementalType, 1.0); sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackPower); } if(0 != attackPower) { explosionInfo.powerRate = attackPower; explosionInfo.useWeapon = true; } sq_createCommonElementalAttack(obj, elementalType, 0, 0, 0, explosionInfo); } function onAttack_po_ATMagicCannon(obj, damager, boundingBox, isStuck) { if(!obj) return 0; local var = obj.getVar(); local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE); local state = obj.getState(); if (state == PO_MAGIC_CANNON_STATE_SHOOT && elementalType != ENUM_ELEMENT_DARK) { createMagicCannonElementlalExplosion(obj); sq_SendDestroyPacketPassiveObject(obj); } local fireSound = "R_MWSHOT_HIT"; if (elementalType == ENUM_ELEMENT_FIRE) fireSound = "R_FIRESHOT_HIT"; else if (elementalType == ENUM_ELEMENT_WATER) fireSound = "R_ICE_HIT"; else if (elementalType == ENUM_ELEMENT_DARK) fireSound = "R_DARKSHOT_HIT"; else if (elementalType == ENUM_ELEMENT_LIGHT) fireSound = "R_LIGHTSHOT_HIT"; obj.sq_PlaySound(fireSound); return 0; } function procAppend_po_ATMagicCannon(obj) { if(obj.getZPos() <= 0) { createMagicCannonElementlalExplosion(obj); sq_SendDestroyPacketPassiveObject(obj); local var = obj.getVar(); local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE); local fallSound = "MANTLE_TIGHTEN"; if (elementalType == ENUM_ELEMENT_FIRE) fallSound = "MCANNON_FIREFALL"; else if (elementalType == ENUM_ELEMENT_WATER) fallSound = "MCANNON_CRASH_02"; else if (elementalType == ENUM_ELEMENT_DARK) fallSound = "MCANNON_DARKFALL"; else if (elementalType == ENUM_ELEMENT_LIGHT) fallSound = "MCANNON_LIGHTFALL"; obj.sq_PlaySound(fallSound); } } function onEndCurrentAni_po_ATMagicCannon(obj) { if(!obj) return; }