Sqr/character/atmage/watercannon/po_atwatercannon.nut

239 lines
5.7 KiB
Plaintext
Raw Normal View History

2024-03-18 21:37:40 +08:00
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 "";
}