Sqr/character/atmage/attack/po_magic_ball.nut

440 lines
15 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 setCustomData_po_ATMagicBallLightMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallLight(obj, receiveData);
}
function setCustomData_po_ATMagicBallDarkMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallDark(obj, receiveData);
}
function setCustomData_po_ATMagicBallWaterMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallWater(obj, receiveData);
}
function setCustomData_po_ATMagicBallFireMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallFire(obj, receiveData);
}
function setCustomData_po_ATMagicBallNoneMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallNone(obj, receiveData);
}
// 葆彻掘羹 - 赀楼撩
function setCustomData_po_ATMagicBallLight(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallLightMove.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallLight", "PassiveObject/Character/Mage/Particle/ATMagicBallLightTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTail1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTail2.ptl");
obj.sq_SetObjectParticlePos(0, -1, 0);
}
// 葆彻掘羹 - 檩楼撩
function setCustomData_po_ATMagicBallDark(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
local attackBonusRate = 0;
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
local mage = obj.getTopCharacter();
if (!mage)
return;
local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE);
local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE);
//attackBonusRate = sq_GetAttackBonusRate(skill, 6, 1.0) + attackBonusRate;
attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 6, 1.0) + attackBonusRate;
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackBonusRate);
// 檩楼撩暧 唳办缚 ?嫦桧 嫦当?虽 强晦阳侥缣 鼻鹧桧鼻击 掘羹缣 夥煎 勘横遽棻.
local changeStatusLevel = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 7, skillLevel);// 7.荡舆 溯涟
local changeStatusProb = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 8, skillLevel);// 8.荡舆 ?睦(0.1%)
changeStatusProb /= 10;
local changeStatusDuration = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 9, skillLevel);// 9.荡舆 虽楼卫除
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, changeStatusProb, changeStatusLevel, changeStatusDuration);
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallDarkMove.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallDark", "PassiveObject/Character/Mage/Particle/ATMagicBallDarkTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTail1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTail2.ptl");
obj.sq_SetObjectParticlePos(0, -1, 0);
}
// 葆彻掘羹 - 热楼撩
function setCustomData_po_ATMagicBallWater(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallWaterMove.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallWaterTail", "PassiveObject/Character/Mage/Particle/ATMagicBallWaterTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTail1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTail2.ptl");
obj.sq_SetObjectParticlePos(0, -1, 0);
}
// 葆彻掘羹 - ?楼撩
function setCustomData_po_ATMagicBallFire(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallFireMove.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallFireTail", "PassiveObject/Character/Mage/Particle/ATMagicBallFireTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTail1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTail2.ptl");
obj.sq_SetObjectParticlePos(0, -1, 0);
}
// 葆彻掘羹 - 鼠楼撩
function setCustomData_po_ATMagicBallNone(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallNoneMove.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallNoneTail.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallNoneTail.ptl");
obj.sq_SetObjectParticlePos(0, -1, 0);
local mage = obj.getTopCharacter();
if (!mage)
return;
// 晦狱晦 熨湿 瞳辨
mage.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),mage.getState());
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
function onAttack_po_ATMagicBallNone(obj, damager, boundingBox, isStuck)
{ // ?颤 鼠楼撩
if (!obj)
return 0;
return 0;
}
// ?楼撩 ?嫦 螃粽薛? 当撩
function createFireExplosion(obj, damager, boundingBox, isStuck, passiveObjectIndex)
{
if (!obj)
return 0;
if(!damager)
return 0;
local mage = obj.getTopCharacter();
if (!mage)
return 0;
if (obj.isMyControlObject())
{
// 嬴桧蛊 翱翕 偃嫦
// 县溯诠骁 溯樯暧 static data(3)暧 奢问溘 隶陛 parameter谛 翱翕脾
local var = obj.getVar();
local bonusRate = 1.0;
if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0)
{
local rate = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 3);
bonusRate = rate.tofloat() / 100.0;
}
local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE);
local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE);
local attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 1, bonusRate);
local sizeRate = sq_GetIntData(mage, SKILL_ELEMENTAL_CHANGE, 0);
local totalDamage = sq_GetCurrentAttackBonusRate(obj) + attackBonusRate;
local x = sq_GetCenterXPos(boundingBox);
local y = damager.getYPos() + 1;
local z = sq_GetCenterZPos(boundingBox);
sq_BinaryStartWrite()
sq_BinaryWriteWord(sizeRate); // ?嫦暧 觼晦
sq_BinaryWriteWord(totalDamage); // 等嘐虽
//sq_SendCreatePassiveObjectPacket(obj, passiveObjectIndex, 0, 0, 1, 0, ENUM_DIRECTION_NEUTRAL);
print(" x:" + x + " y:" + y + " z:" + z);
sq_SendCreatePassiveObjectPacketPos(mage, passiveObjectIndex, 0, x, y, z);
//sq_SendDestroyPacketPassiveObject(obj);
}
}
// 瞳桧 翱楼 葆彻掘(?楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallFireMultiShot(obj, damager, boundingBox, isStuck)
{ // 翱楼 葆彻掘 ?楼撩
createFireExplosion(obj, damager, boundingBox, isStuck, 24281);
return 0;
}
// 瞳桧 ?颤 葆彻掘(?楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallFire(obj, damager, boundingBox, isStuck)
{ // ?颤 ?楼撩
createFireExplosion(obj, damager, boundingBox, isStuck, 24214);
return 0;
}
// 热楼撩 ?嫦 螃粽薛? 当撩
function createWaterExplosion(obj, damager, boundingBox, isStuck, passiveObjectIndex)
{
if (!obj)
return 0;
if(!damager)
return 0;
local mage = obj.getTopCharacter();
if (!mage)
return 0;
if (obj.isMyControlObject())
{
// 嬴桧蛊 翱翕 偃嫦
// 县溯诠骁 溯樯暧 static data(3)暧 奢问溘 隶陛 parameter谛 翱翕脾
local var = obj.getVar();
local bonusRate = 1.0;
if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0)
{
local rate = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 3);
bonusRate = rate.tofloat() / 100.0;
}
local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE);
local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE);
//local attackBonusRate = sq_GetAttackBonusRate(skill, 2, 1.0);
local attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 2, bonusRate);
local sizeRate = sq_GetIntData(mage, SKILL_ELEMENTAL_CHANGE, 1);
local totalDamage = sq_GetCurrentAttackBonusRate(obj) + attackBonusRate;
local power = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 3, skillLevel);
local prob = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 4, skillLevel);
local validTime = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 5, skillLevel);
local x = sq_GetCenterXPos(boundingBox);
local y = damager.getYPos() + 1;
local z = sq_GetCenterZPos(boundingBox);
sq_BinaryStartWrite()
sq_BinaryWriteWord(sizeRate); // ?嫦暧 觼晦
sq_BinaryWriteWord(totalDamage); // 等嘐虽
sq_BinaryWriteByte(ACTIVESTATUS_FREEZE);// 彩念 鼻鹧桧鼻
prob = prob / 10.0;
sq_BinaryWriteFloat(prob.tofloat()); // ?睦 (0.1%)
sq_BinaryWriteFloat(power.tofloat()); // 溯涟
sq_BinaryWriteDword(validTime); // 虽楼卫除
//sq_SendCreatePassiveObjectPacket(obj, passiveObjectIndex, 0, 0, 1, 0, ENUM_DIRECTION_NEUTRAL);
sq_SendCreatePassiveObjectPacketPos(mage, passiveObjectIndex, 0, x, y, z);
}
}
// 瞳桧 翱楼 葆彻掘(热楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallWaterMultiShot(obj, damager, boundingBox, isStuck)
{ // 翱楼 葆彻掘 ?楼撩
createWaterExplosion(obj, damager, boundingBox, isStuck, 24282);
return 0;
}
// 瞳桧 ?颤 葆彻掘(热楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallWater(obj, damager, boundingBox, isStuck)
{
// ?颤 热楼撩
createWaterExplosion(obj, damager, boundingBox, isStuck, 24215);
return 0;
}
function onAttack_po_ATMagicBallDark(obj, damager, boundingBox, isStuck)
{ // ?颤 檩楼撩
if (!obj)
return 0;
return 0;
}
// 赀楼撩 ?嫦 螃粽薛? 当撩
function createLightExplosion(obj, damager, boundingBox, isStuck, passiveObjectIndex)
{
if(!damager)
return 0;
if (!obj)
return 0;
local mage = obj.getTopCharacter();
if (!mage)
return 0;
if (obj.isMyControlObject())
{
// 嬴桧蛊 翱翕 偃嫦
// 县溯诠骁 溯樯暧 static data(3)暧 奢问溘 隶陛 parameter谛 翱翕脾
local var = obj.getVar();
local bonusRate = 1.0;
if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0)
{
local rate = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 3);
bonusRate = rate.tofloat() / 100.0;
}
local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE);
local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE);
//local attackBonusRate = sq_GetAttackBonusRate(skill, 10, 1.0);
local attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 10, bonusRate);
local sizeRate = sq_GetIntData(mage, SKILL_ELEMENTAL_CHANGE, 2);
// 鼻鹧桧鼻 溯涟, ?睦, 虽楼卫除
local power = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 11, skillLevel);
local prob = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 12, skillLevel);
local validTime = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 13, skillLevel);
local damage = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 14, skillLevel);
local totalDamage = sq_GetCurrentAttackBonusRate(obj) + attackBonusRate;
local x = sq_GetCenterXPos(boundingBox);
local y = damager.getYPos() + 1;
local z = sq_GetCenterZPos(boundingBox);
sq_BinaryStartWrite()
sq_BinaryWriteWord(sizeRate); // ?嫦暧 觼晦
sq_BinaryWriteWord(totalDamage); // 等嘐虽
sq_BinaryWriteByte(ACTIVESTATUS_LIGHTNING); // 马瞪 鼻鹧桧鼻
prob = prob / 10.0;
sq_BinaryWriteFloat(prob.tofloat()); // ?睦 (0.1%)
sq_BinaryWriteFloat(power.tofloat()); // 溯涟
sq_BinaryWriteDword(validTime); // 虽楼卫除
sq_BinaryWriteDword(damage); // 马瞪 等嘐虽
//sq_SendCreatePassiveObjectPacket(obj, passiveObjectIndex, 0, 0, 1, 0, ENUM_DIRECTION_NEUTRAL);
print(" x:" + x + " y:" + y + " z:" + z);
sq_SendCreatePassiveObjectPacketPos(mage, passiveObjectIndex, 0, x, y, z);
}
}
// 瞳桧 ?颤 葆彻掘(赀楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallLight(obj, damager, boundingBox, isStuck)
{
createLightExplosion(obj, damager, boundingBox, isStuck, 24216);
return 0;
}
// 瞳桧 翱楼 葆彻掘(赀楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallLightMultiShot(obj, damager, boundingBox, isStuck)
{
createLightExplosion(obj, damager, boundingBox, isStuck, 24283);
return 0;
}
function procAppend_po_ATMagicBallNone(obj)
{
}