Sqr/character/atmage/icechakram/po_aticechakramsmallmgr.nut

429 lines
9.7 KiB
Plaintext
Raw Normal View History

2024-03-18 21:37:40 +08:00
function createIceSmallRing(obj, dx, dy, dz)
{
if(!obj)
return;
local x = sq_GetXPos(obj) + dx;
local y = sq_GetYPos(obj) + dy;
local z = sq_GetZPos(obj) + dz;
local ani = 0;
ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATIceChakram/cast/04_schakra_normal.ani");
local ring_obj = sq_CreatePooledObject(ani,false);
ring_obj.setCurrentPos(x,y,z);
obj.getVar().push_obj_vector(ring_obj); // 罹晦怃
sq_AddObject(obj, ring_obj, OBJECTTYPE_DRAWONLY, false);
}
function procSmallRing(obj, currentT)
{
local object_num = obj.getVar().get_obj_vector_size();
local i = 0;
local startLen = 140;
local endLen = 210;
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local size = 5;
local sr_angle_l = [];
sr_angle_l.resize(size);
sr_angle_l[0] = 90;
sr_angle_l[1] = 60;
sr_angle_l[2] = 120;
sr_angle_l[3] = 70;
sr_angle_l[4] = 110;
local sr_len_l =[];
sr_len_l.resize(size);
sr_len_l[0] = 180;
sr_len_l[1] = 160;
sr_len_l[2] = 140;
sr_len_l[3] = 245;
sr_len_l[4] = 240;
for(i = 0; i < object_num; i++)
{ // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻..
local ringObj = obj.getVar().get_obj_vector(i);
if(ringObj)
{
local angle = sr_angle_l[i%5];
local len = sq_GetUniformVelocity(startLen, sr_len_l[i%5] + ((i/5)*10), currentT, 80);
local upMovLen = len * sq_SinTable(angle.tointeger());
local lenMovLen = len * sq_CosTable(angle.tointeger());
sq_setCurrentAxisPos(ringObj, 0, x + lenMovLen.tointeger());
//sq_setCurrentAxisPos(ringObj, 1, y + 1);
//print( " angle:" + angle + " index:" + i + " lenMovLen:" + lenMovLen);
sq_setCurrentAxisPos(ringObj, 2, upMovLen.tointeger());
}
}
}
function procFireSmallRing(obj, currentT, maxT)
{
local object_num = obj.getVar().get_obj_vector_size();
local i = 0;
local startLen = 180;
local endLen = 210;
for(i = 0; i < object_num; i++)
{ // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻..
local ringObj = obj.getVar().get_obj_vector(i);
if(ringObj)
{
if(currentT > maxT)
{
if(obj.isMyControlObject())
{
local x_range = 600; //
local y_range = 300; //
local z_range = 100; //
local pChr = obj.getTopCharacter();
local targetObj = getPriorityTarget(pChr, -40, x_range, y_range, z_range, obj.getVar("target"), false);
if(targetObj)
{
print( " find Target");
obj.getVar("target").push_obj_vector(targetObj);
obj.getVar("target").set_vector(0, 1);
}
else
{ // 嬴鼠匙紫 颤啃击 跤琼懊棻贼.. 锰楚 琼懊湍 颤啃桧 毡朝虽 羹觼?尔坚 毡棻贼 斜匙击 厥蝗栖棻.
local backTarget = obj.getVar("target").get_obj_vector(0);
print( " none find Target:" + backTarget);
if(backTarget)
{
obj.getVar("target").push_obj_vector(backTarget);
obj.getVar("target").set_vector(0, 1);
targetObj = backTarget;
}
}
local id = sq_GetObjectId(targetObj);
//obj.getVar("chakram").clear_vector();
//obj.getVar("chakram").push_vector(createSmallRingNum);
//obj.getVar("chakram").push_vector(multiHitNum);
//local power = reciveData.readDword(); // 0.蒙擎 橡挤坚葬 棻钦?? 奢问溘(+)
local multiHitNum = obj.getVar("chakram").get_vector(1); // 1. 蒙擎 橡挤 坚葬 棻钦?? ?热
local power = obj.getVar("chakram").get_vector(2); // power
local x = sq_GetXPos(ringObj);
local y = sq_GetYPos(ringObj);
local z = sq_GetZPos(ringObj);
sq_BinaryStartWrite();
sq_BinaryWriteDword(id);
sq_BinaryWriteDword(multiHitNum);
sq_BinaryWriteDword(power);
//local moveMode = sq_getRandom(0, 2);
local moveMode = 0;
sq_BinaryWriteDword(moveMode);
sq_SendCreatePassiveObjectPacketPos(pChr, 24258, 0, x, y, z);
}
ringObj.setValid(false);
obj.getVar().remove_obj_vector(ringObj);
return true;
}
return false;
}
}
return false;
}
function pushSmallRingFireTarget(obj, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange, targetMaxHeight, pushMaxNum)
{
if(!obj)
return null;
local objectManager = obj.getObjectManager();
if (objectManager == null)
return null;
obj.getVar("target").clear_obj_vector();
local i;
for(i = 0; i < pushMaxNum; i++)
{ //
local targetObj = getPriorityTarget(obj, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange, targetMaxHeight, obj.getVar("target"));
obj.getVar("target").push_obj_vector(targetObj);
}
}
function setCustomData_po_ATIceChakramSmallMgr(obj, reciveData)
{
if(!obj) return;
//sq_BinaryWriteDword(createSmallRingNum); //
//sq_BinaryWriteDword(multiHitNum); //
//sq_BinaryWriteDword(power); //
local createSmallRingNum = reciveData.readDword(); // 0. 当撩肾朝 橡挤坚葬 偎热
local multiHitNum = reciveData.readDword(); // 1. 蒙擎 橡挤 坚葬 棻钦?? ?热
local power = reciveData.readDword(); // 0.蒙擎 橡挤坚葬 棻钦?? 奢问溘(+)
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(0);
obj.getVar("flag").clear_timer_vector();
obj.getVar("flag").push_timer_vector();
obj.getVar("flag").clear_vector();
obj.getVar("chakram").clear_vector();
obj.getVar("chakram").push_vector(createSmallRingNum);
obj.getVar("chakram").push_vector(multiHitNum);
obj.getVar("chakram").push_vector(power);
local i;
for(i = 0; i < createSmallRingNum; i++)
{ //
obj.getVar("flag").push_vector(0);
}
local object_num = obj.getVar("cl").get_obj_vector_size();
obj.getVar().clear_ct_vector();
obj.getVar().push_ct_vector();
local t = obj.getVar().get_ct_vector(0);
t.Reset();
t.Start(10000,0);
obj.getVar().clear_obj_vector();
local t = obj.getVar("flag").get_timer_vector(0);
t.setParameter(50, 1);
t.resetInstant(0);
obj.getVar("attack").clear_vector();
obj.getVar().clear_vector();
obj.getVar().push_vector(90);
obj.getVar().push_vector(45);
obj.getVar().push_vector(135);
obj.getVar().push_vector(35);
obj.getVar().push_vector(155);
local atk = sq_GetCurrentAttackInfo(obj);
if(atk)
{
sq_SetCurrentAttackPower(atk, power);
}
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function destroy_po_ATIceChakramSmallMgr(obj)
{
destroyObject(obj);
}
function setState_po_ATIceChakramSmallMgr(obj, state, datas)
{
if(!obj) return;
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 0);
initGetVarTimer(obj, 1, 400, 10);
obj.getVar("target").clear_obj_vector();
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
obj.getVar("target").clear_vector();
obj.getVar("target").push_vector(0);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
//obj.getVar("chakram").push_vector(multiHitNum);
local smallRingNum = obj.getVar("chakram").get_vector(0); // 0 createSmallRingNum
local i;
for(i = 0; i < smallRingNum; i++)
{
createIceSmallRing(obj, 0, 1, 210);
}
local t = obj.getVar().get_ct_vector(0);
t.Reset();
t.Start(10000,0);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
}
}
function procAppend_po_ATIceChakramSmallMgr(obj)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
if(!pChr)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return;
}
local chr_state = pChr.getState();
if(chr_state != STATE_ICECHAKRAM)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return;
}
local objX = sq_GetXPos(obj);
local objY = sq_GetYPos(obj);
local objZ = sq_GetZPos(obj);
local state = obj.getVar("state").get_vector(0);
local passiveState = state;
if(passiveState == 0)
return;
local t = obj.getVar().get_ct_vector(0);
local currentT = 0;
currentT = t.Get();
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
local parentState = obj.sq_GetParentState();
local subState = obj.sq_GetParentSkillSubState();
procSmallRing(obj, currentT);
if(parentState == STATE_ICECHAKRAM && subState == SUB_STATE_ICECHAKRAM_2)
{
if(obj.isMyControlObject())
{
local frmIndex = sq_GetCurrentFrameIndex(pChr);
if(frmIndex > 1)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
local result = procFireSmallRing(obj, currentT, 100);
if(result == true)
{
t.Reset();
t.Start(10000,0);
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
}
}
function onChangeSkillEffect_po_ATIceChakramSmallMgr(obj, skillIndex, reciveData)
{
if(!obj) return;
}
function onDestroyObject_po_ATIceChakramSmallMgr(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATIceChakramSmallMgr(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATIceChakramSmallMgr(obj)
{
if(!obj) return;
}