Sqr/character/atmage/watercannon/po_atwatercannon.nut

239 lines
5.7 KiB
Plaintext
Raw 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_ATWaterCannon(obj, receiveData)
{
if (!obj)
return;
// ?鞑 等桧搅 嫡晦
local attackBonusRate = receiveData.readDword();
local sizeRate = receiveData.readWord();
local xVelocity = receiveData.readWord();
local distance = receiveData.readWord();
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.getVar("attack").clear_vector();
obj.getVar("attack").push_vector(attackBonusRate);
// 桧翕 塽 ?娄 ??赝暧 扑姜
//obj.sq_SetMoveParticle("Particle/ATWaterCannonMove.ptl", 0.0, 0.0);
//local particleCreater = obj.sq_var.GetparticleCreaterMap("ATWaterCannon",
//"PassiveObject/Character/Mage/Particle/ATWaterCannonTail.ptl", obj);
//particleCreater.Restart(0);
//obj.sq_AddObjectParticleCreater("Particle/ATWaterCannonTail.ptl");
//obj.sq_SetObjectParticlePos(0, 1, 0);
//local distance = 400; // 釭陛朝 剪葬
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
obj.getVar("dis").clear_vector();
obj.getVar("dis").push_vector(x);
obj.getVar("dis").push_vector(y);
obj.getVar("dis").push_vector(z);
obj.getVar("dis").push_vector(distance);
//local arriveTime = distance;
local arriveTime = (distance * 800) / xVelocity;
obj.getVar("arriveTime").clear_vector();
obj.getVar("arriveTime").push_vector(arriveTime);
obj.getVar("arriveTime").push_vector(arriveTime);
// ?鞑戏煎 嫡擎 奢问溘 掸?
local attackInfo = sq_GetCurrentAttackInfo(obj);
if (attackInfo)
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
// 僭渠?暧 觼晦蒂 亵瞰?.
local currentAni = sq_GetCurrentAnimation(obj);
obj.getVar("rate").clear_vector();
obj.getVar("rate").push_vector(sizeRate);
sizeRate = sizeRate.tofloat() / 100.0;
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate);
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);
}
function setState_po_ATWaterCannon(obj, state, datas)
{
if (!obj)
return;
}
function procAppend_po_ATWaterCannon(obj)
{
if (!obj)
return;
local pAni = obj.getCurrentAnimation();
local frmIndex = sq_GetAnimationFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
local objX = sq_GetXPos(obj);
local objY = sq_GetYPos(obj);
local parentObj = obj.getParent();
if(!parentObj)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
return;
}
}
local fireT = obj.getVar("arriveTime").get_vector(0);
local srcX = obj.getVar("dis").get_vector(0); // 卫蒙x
local srcY = obj.getVar("dis").get_vector(1); // 卫蒙y
local srcZ = obj.getVar("dis").get_vector(2); // 卫蒙z
local distance = obj.getVar("dis").get_vector(3); // 识 桧翕剪葬
local v = sq_GetUniformVelocity(0, distance, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
local dstY = srcY;
sq_setCurrentAxisPos(obj, 0, dstX);
local remainT = obj.getVar("arriveTime").get_vector(1);
if(currentT >= remainT)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
function onChangeSkillEffect_po_ATWaterCannon(obj, skillIndex, reciveData)
{
if (!obj)
return;
}
function onDestroyObject_po_ATWaterCannon(obj, object)
{
if (!obj)
return;
}
function onKeyFrameFlag_po_ATWaterCannon(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATWaterCannon(obj)
{
if (!obj)
return;
}
function onAttack_po_ATWaterCannon(obj, damager, boundingBox, isStuck)
{
if (!obj)
return 0;
if(!damager)
return 0;
// PassiveObject/Character/Mage/Animation/ATWaterCannon/explode_normal.ani
local attackRate = obj.getVar("attack").get_vector(0);
local sizeRate = obj.getVar("rate").get_vector(0) - 30;
local group = sq_GetGroup(damager);
local id = sq_GetUniqueId(damager);
//local x = sq_GetCenterXPos(boundingBox);
//local y = damager.getYPos() + 1;
//local z = sq_GetCenterZPos(boundingBox);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj) + 1;
local z = sq_GetZPos(obj);
local parentObj = obj.getParent();
if(obj.isMyControlObject())
{
local cnt = obj.getVar().get_vector(0);
if(!cnt)
{
sq_BinaryStartWrite();
sq_BinaryWriteDword(attackRate);
sq_BinaryWriteDword(group);
sq_BinaryWriteDword(id);
sq_BinaryWriteDword(sizeRate);
print(" exp create:" + cnt);
obj.getVar().set_vector(0, cnt + 1);
sq_SendCreatePassiveObjectPacketPos(parentObj, 24256, 0, x, y, z);
}
}
//local sizeRateFloat = sizeRate.tofloat() / 100.0a
//local x = sq_GetCenterXPos(boundingBox);
//local y = damager.getYPos();
//local z = sq_GetCenterZPos(boundingBox);
//local isAutoDestroy = true;
//
//local ani = sq_CreateAnimation("","PassiveObject/Character/Mage/Animation/ATWaterCannon/explode_normal.ani");
//
//if(!ani)
//return 0;
//
//local pooledObj = sq_CreatePooledObject(ani,isAutoDestroy);
//
//local hitAni = sq_GetCurrentAnimation(pooledObj);
//hitAni.Proc();
//hitAni.setImageRate(sizeRateFloat, sizeRateFloat);
////hitAni.resize(sizeRateFloat, sizeRateFloat);
//
//pooledObj.setCurrentPos(x,y + 1,z);
//sq_SetCurrentDirection(pooledObj, obj.getDirection());
//
//sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
return 0;
}
function onAfterAttack_po_ATWaterCannon(obj, damager, boundingBox, isStuck)
{
if (!obj)
return 0;
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return 0;
}
function getCustomHitEffectFileName_po_ATWaterCannon(obj, isAttachOnDamager)
{
return "";
}