Sqr/character/atmage/icechakram/po_aticechakramsmallmgr.nut

429 lines
9.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 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;
}