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; }