This commit is contained in:
2024-03-18 21:37:40 +08:00
commit c4aef8f3a3
313 changed files with 74071 additions and 0 deletions

View File

@@ -0,0 +1,323 @@
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_Attack(obj, state, datas, isResetTimer)
{
if (!obj)
return;
local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
// 热樯羹蒂 寡锡挤.
if (skillLevel > 0)
{
// 橾奁 奢问卫, 擅戏煎 瞪霞 籀葬
obj.setAttackXVelocity(250);
obj.setAttackXAccel(-1000);
obj.setAttackXVelocityFast(400);
obj.setAttackXAccelFast(-1000);
// 晦狱晦 熨湿 瞳辨
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState());
sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj));
}
else
{
// 热樯羹蒂 寡办虽 强懊棻贼 薯濠葬缣怃 葆彻掘 卫瞪
obj.setAttackXVelocity(0);
obj.setAttackXAccel(0);
obj.setAttackXVelocityFast(0);
obj.setAttackXAccelFast(0);
local element = obj.getThrowElement();
local attackIndex = obj.getAttackIndex();
playSoundForAtmageAttack(obj, element, attackIndex);
}
}
function onAfterSetState_Attack(obj, state, datas, isResetTimer)
{
if (!obj) return;
// 热樯羹 蝶鉴击 寡锡棻贼, ?颤 缣栖诡桧暮桧 夥莘
// 葆彻掘紫 嫦饵肾虽 强挤.
local iceElementalAttackSkillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
if (state == STATE_ATTACK && iceElementalAttackSkillLevel <= 0)
{
// ?颤 桧??蒂 称樯棻.
// 勘溥毡朝 帼? 蝶鉴 樯策蝶 塽 怃粽 蝶才桧?缣 评塭怃 尔罹虽朝 桧??陛 棻荤 (楼撩缣评塭怃 称朝 桧??陛 棻荤)
local element = obj.getThrowElement();
local attackIndex = obj.getAttackIndex();
// 楼撩嫦翕 appendage缣 勘溥毡朝虽 羹觼?.
// 楼撩嫦翕缣 勘溥毡虽 强棻贼 鼠楼撩 ?颤陛 嫦饵脾
local appendage = obj.GetSquirrelAppendage("Character/ATMage/ElementalChange/ap_ATMage_Elemental_Change.nut");
if (!appendage || !appendage.isValid())
element = ENUM_ELEMENT_NONE;
if (attackIndex == 0)
{
if (element == ENUM_ELEMENT_FIRE)
{ // ?楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack1_fire_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack1_fire_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_WATER)
{ // 热楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack1_water_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack1_water_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_DARK)
{ // 檩楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack1_dark_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack1_dark_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_LIGHT)
{ // 赀楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack1_light_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack1_light_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_NONE)
{ // 鼠楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack1_none_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack1_none_dodge.ani"), 0, 0);
}
}
else if (attackIndex == 1)
{
if (element == ENUM_ELEMENT_FIRE)
{ // ?楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack2_fire_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack2_fire_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_WATER)
{ // 热楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack2_water_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack2_water_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_DARK)
{ // 檩楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack2_dark_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack2_dark_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_LIGHT)
{ // 赀楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack2_light_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack2_light_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_NONE)
{ // 鼠楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack2_none_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack2_none_dodge.ani"), 0, 0);
}
}
else if (attackIndex == 2)
{
if (element == ENUM_ELEMENT_FIRE)
{ // ?楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack3_fire_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack3_fire_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_WATER)
{ // 热楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack3_water_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack3_water_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_DARK)
{ // 檩楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack3_dark_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack3_dark_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_LIGHT)
{ // 赀楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack3_light_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack3_light_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_NONE)
{ // 鼠楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack3_none_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack3_none_dodge.ani"), 0, 0);
}
}
else if (attackIndex == 3)
{
if (element == ENUM_ELEMENT_FIRE)
{ // ?楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack4_fire_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack4_fire_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_WATER)
{ // 热楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack4_water_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack4_water_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_DARK)
{ // 檩楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack4_dark_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack4_dark_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_LIGHT)
{ // 赀楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack4_light_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack4_light_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_NONE)
{
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack4_none_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack4_none_dodge.ani"), 0, 0);
}
}
}
}
function createMiniMagicCircle(obj, xPos, zPos, shotDirection, bonusDamage) // direction 0:姜贼 1:渠陕摹 2:?钦)
{
if(!obj)
return;
if (obj.sq_IsMyControlObject()) {
// 葆彻掘羹 当撩嫔纂
local direction = sq_GetDirection(obj);
local x = sq_GetDistancePos(obj.getXPos(), direction, xPos);
local y = sq_GetDistancePos(obj.getYPos(), ENUM_DIRECTION_DOWN, 1);
local z = sq_GetDistancePos(obj.getZPos(), ENUM_DIRECTION_UP, zPos);
// 擒除暧 嵘紫晦栋桧 毡挤.
// 奢问濠
// 嫦饵 嫔纂(x,y,z)
// 陛煎 嫦饵陕 (0桧贼 擅戏煎 嫦饵, 30桧贼 螃艇薹 30紫煎 嫦饵)
// 撮煎 嫦饵陕 (0桧贼 擅戏煎 嫦饵, -30桧贼 嬴楚薹 30紫煎 嫦饵)
// 陛煎 譆渠 尔姜陕 (?薹 寞?)
// 撮煎 譆渠 尔姜陕 (?薹 寞?)
// 瞳娄暧 譆渠 剪葬. -1桧贼 薯? 桡挤
// x蹴 譆渠 饵姜剪葬
// 奢问 梦蝶暧 x蹴 觼晦
// 奢问 梦蝶暧 y蹴 觼晦
// 奢问 梦蝶暧 z蹴 觼晦
local activeObject;
local searchAngleH = 0;
local searchAngleV = 0;
local passiveObjectIndex = 0;
if(shotDirection == 0)
{ // 姜贼
//activeObject = sq_FindShootingTarget(obj, x, y, z, 0, 0, 10, 10, -1, 1000, 1000, 250, 100);
local distance = 1000;
local angle = 20;
activeObject = findAngleTarget(obj, distance, angle, 100); // 睡瓣笛 赅晔暧 瞳 匐仪
searchAngleH = 30;
searchAngleV = 15;
passiveObjectIndex = 24202;
// 翱楼嫦饵朝 当梯亿朝 伪虽虏, 棻艇 螃粽薛?陛 嫦饵脾 (钟帼瞪暧 舱?击 嫡晦阳侥)
if (obj.getState() == STATE_MULTI_SHOT)
passiveObjectIndex = 24266;
}
else if(shotDirection == 1) {// 渠陕摹
activeObject = sq_FindShootingTarget(obj, x, y, z, 0, 0, 4, 4, -1, 300, 100, 50, 100);
searchAngleH = 5;
searchAngleV = 5;
passiveObjectIndex = 24207;
// 翱楼嫦饵朝 当梯亿朝 伪虽虏, 棻艇 螃粽薛?陛 嫦饵脾 (钟帼瞪暧 舱?击 嫡晦阳侥)
if (obj.getState() == STATE_MULTI_SHOT)
passiveObjectIndex = 24271;
}
else if(shotDirection == 2) { // ?钦
activeObject = sq_FindShootingTarget(obj, x, y, z, 0, 0, 4, 4, -1, 300, 100, 50, 100);
searchAngleH = 5;
searchAngleV = 5;
passiveObjectIndex = 24228;
// 翱楼嫦饵朝 当梯亿朝 伪虽虏, 棻艇 螃粽薛?陛 嫦饵脾 (钟帼瞪暧 舱?击 嫡晦阳侥)
if (obj.getState() == STATE_MULTI_SHOT)
passiveObjectIndex = 24276;
}
else {
printc("error! magic ball create shotDirection error");
return;
}
// 楼撩嫦翕 appendage缣 勘溥毡朝虽 羹觼?.
// 楼撩嫦翕缣 勘溥毡虽 强棻贼 鼠楼撩 ?颤陛 嫦饵脾
local horizonAngle = 0.0;
local verticalAngle = 0.0;
if (activeObject != NULL) {
local maxDistance = abs(activeObject.getXPos() - x);
horizonAngle = sq_GetShootingHorizonAngle(activeObject, y, 0, searchAngleH, maxDistance);
verticalAngle = sq_GetShootingVerticalAngle(activeObject, z, 0, searchAngleV, maxDistance, 300);
}
local appendage = obj.GetSquirrelAppendage("Character/ATMage/ElementalChange/ap_ATMage_Elemental_Change.nut");
if (appendage && appendage.isValid()) {
local element = obj.getThrowElement();
passiveObjectIndex = passiveObjectIndex + 1 + element;
}
obj.sq_StartWrite();
obj.sq_WriteFloat(horizonAngle);
obj.sq_WriteFloat(verticalAngle);
obj.sq_WriteDword(bonusDamage);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndex, 0, xPos, 1, zPos);
}
}
// 奢问卫 葆彻 掘羹蒂 当撩?棻.
function onKeyFrameFlag_Attack(obj, flagIndex)
{
if(!obj)
return false;
local isMyControlObject = obj.sq_IsMyControlObject();
// 奢问?阳葆棻 葆彻 掘羹蒂 当撩?棻.
// 勘溥毡朝 帼?缣 评塭怃 当撩 肾横螳捡 ? ?卫粽 螃粽薛?陛 棻荤(楼撩)
//
local xPos = 0, zPos = 0;
local attackIndex = obj.getAttackIndex();
if (attackIndex == 0)
{
xPos = 65, zPos = 59;
}
else if (attackIndex == 1)
{
xPos = 60, zPos = 71;
}
else if (attackIndex == 2)
{
xPos = 55, zPos = 58;
}
else if (attackIndex == 3)
{
xPos = 65, zPos = 36;
}
if (flagIndex == 1)
{
// 葆彻掘羹蒂 当撩?棻.
createMiniMagicCircle(obj, xPos, zPos, 0, 0); // direction 0:姜贼 1:渠陕摹 2:?钦
}
return true;
}
function playSoundForAtmageAttack(obj, elementalType, attackCount)
{
if(!obj)
return;
local elementalName = "MWSHOT_0";
if (elementalType == ENUM_ELEMENT_FIRE)
elementalName = "FIRESHOT_0";
else if (elementalType == ENUM_ELEMENT_WATER)
elementalName = "ICESHOT_0";
else if (elementalType == ENUM_ELEMENT_DARK)
elementalName = "DARKSHOT_0";
else if (elementalType == ENUM_ELEMENT_LIGHT)
elementalName = "LIGHTSHOT_0";
obj.sq_PlaySound(elementalName + (attackCount+1));
}

View File

@@ -0,0 +1,440 @@
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)
{
}