270 lines
9.1 KiB
Plaintext
270 lines
9.1 KiB
Plaintext
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;
|
||
}
|
||
|