239 lines
5.7 KiB
Plaintext
239 lines
5.7 KiB
Plaintext
|
|
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 "";
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
|