111
This commit is contained in:
496
character/atmage/icechakram/icechakram.nut
Normal file
496
character/atmage/icechakram/icechakram.nut
Normal file
@@ -0,0 +1,496 @@
|
||||
ENUM_ICE_CHAKRAM_TIMER_LARGE_MULTI_HIT <- 0;
|
||||
|
||||
SUB_STATE_ICECHAKRAM_0 <- 0
|
||||
SUB_STATE_ICECHAKRAM_1 <- 1
|
||||
SUB_STATE_ICECHAKRAM_2 <- 2
|
||||
SUB_STATE_ICECHAKRAM_3 <- 3
|
||||
SUB_STATE_ICECHAKRAM_4 <- 4 // 陈萼 离觼茔 赅戏晦.
|
||||
SUB_STATE_ICECHAKRAM_5 <- 5 // 赎 离觼茔 ?瞪
|
||||
SUB_STATE_ICECHAKRAM_6 <- 6 // 赎 离觼茔 湍虽晦
|
||||
|
||||
VAR_ICE_CHAKRAM_ATTRACT_APPENDAGE <- 0;
|
||||
|
||||
function checkExecutableSkill_IceChakram(obj)
|
||||
{
|
||||
|
||||
if(!obj) return false;
|
||||
|
||||
local b_useskill = obj.sq_IsUseSkill(SKILL_ICECHAKRAM);
|
||||
|
||||
if(b_useskill) {
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(SUB_STATE_ICECHAKRAM_0); // substate撮?
|
||||
//2离 奢问 才蝶?辨.
|
||||
//obj.sq_IntVectPush(SUB_STATE_ICECHAKRAM_4); // substate撮?
|
||||
|
||||
obj.sq_AddSetStatePacket(STATE_ICECHAKRAM, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
|
||||
}
|
||||
|
||||
function checkCommandEnable_IceChakram(obj)
|
||||
{
|
||||
|
||||
if(!obj) return false;
|
||||
|
||||
local state = obj.sq_GetState();
|
||||
|
||||
if(state == STATE_ATTACK) {
|
||||
// 警蜗 蝶鉴 偃? 蒙机濠: 姜霞热 [2012.04.20]
|
||||
return obj.sq_IsCommandEnable(SKILL_ICECHAKRAM);
|
||||
}
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
function onSetState_IceChakram(obj, state, datas, isResetTimer)
|
||||
{
|
||||
|
||||
if(!obj) return;
|
||||
|
||||
local substate = obj.sq_GetVectorData(datas, 0);
|
||||
obj.setSkillSubState(substate);
|
||||
|
||||
obj.getVar().clear_vector();
|
||||
obj.getVar().push_vector(0);
|
||||
obj.getVar().push_vector(0);
|
||||
obj.getVar().push_vector(0);
|
||||
obj.getVar().push_vector(0);
|
||||
obj.getVar().push_vector(0);
|
||||
|
||||
obj.getVar("state").clear_ct_vector();
|
||||
obj.getVar("state").push_ct_vector();
|
||||
|
||||
obj.getVar("ani").clear_vector();
|
||||
obj.getVar("ani").push_vector(0);
|
||||
|
||||
if(substate == SUB_STATE_ICECHAKRAM_0) {
|
||||
// SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机
|
||||
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICECHAKRAM_1);
|
||||
|
||||
|
||||
// 议蝶? 桡挤.
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_1) {
|
||||
// SUB_STATE_ICECHAKRAM_1 怃粽蝶才桧? 蒙机
|
||||
local t = obj.getVar("state").get_ct_vector(0);
|
||||
t.Reset();
|
||||
t.Start(10000,0);
|
||||
|
||||
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICECHAKRAM_2);
|
||||
|
||||
if(obj.isMyControlObject())
|
||||
{
|
||||
//5 // 0. 当撩肾朝 橡挤坚葬 偎热
|
||||
//5 // 1. 蒙擎 橡挤 坚葬 棻钦?? ?热
|
||||
local createSmallRingNum = sq_GetLevelData(obj, SKILL_ICECHAKRAM, 3, sq_GetSkillLevel(obj, SKILL_ICECHAKRAM)); // 3. 当撩肾朝 橡挤坚葬 偎热
|
||||
local multiHitNum = sq_GetLevelData(obj, SKILL_ICECHAKRAM, 4, sq_GetSkillLevel(obj, SKILL_ICECHAKRAM)); // 4. 蒙擎 橡挤 坚葬 棻钦?? ?热
|
||||
local power = obj.sq_GetBonusRateWithPassive(SKILL_ICECHAKRAM, STATE_ICECHAKRAM, 0,1.0); // 0.蒙擎 橡挤坚葬 棻钦?? 奢问溘(+)
|
||||
|
||||
sq_BinaryStartWrite();
|
||||
sq_BinaryWriteDword(createSmallRingNum); //
|
||||
sq_BinaryWriteDword(multiHitNum); //
|
||||
sq_BinaryWriteDword(power); //
|
||||
obj.sq_SendCreatePassiveObjectPacket(24257, 0, 0, 0, 0); // 24257 `Character/Mage/ATIceChakramSmallMgr.obj` // 陴彻饵 彩盟? 蒙擎彩念 衙栖螳
|
||||
}
|
||||
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_2) {
|
||||
// SUB_STATE_ICECHAKRAM_2 怃粽蝶才桧? 蒙机
|
||||
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICECHAKRAM_3);
|
||||
obj.sq_PlaySound("RAGEBLAST_SPIN_01", 7577);
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_3) {
|
||||
// SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机
|
||||
local isFindChr = obj.sq_GetVectorData(datas, 1);
|
||||
obj.getVar("findchr").clear_vector();
|
||||
obj.getVar("findchr").push_vector(isFindChr);
|
||||
|
||||
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICECHAKRAM_4);
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_4) {
|
||||
// SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机
|
||||
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICECHAKRAM_4);
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_5) { // ?瞪
|
||||
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICECHAKRAM_5);
|
||||
sq_SetCurrentAttackInfoFromCustomIndex(obj,CUSTOM_ATTACK_INFO_ICE_CHAKRAM);
|
||||
|
||||
sq_SetBodyEffect(obj, obj, true, sq_RGB(255,255,255), 0, 80, 0, sq_ALPHA(255)); // 跺缣 ?担 桧??
|
||||
|
||||
sq_SetCurrentAttackeHitStunTime(sq_GetCurrentAttackInfo(obj), 0); // 奢问 唳霜卫除 桡拥晦.
|
||||
|
||||
// 赎坚葬 棻钦 ?? 奢问溘 扑姜
|
||||
local power = obj.sq_GetBonusRateWithPassive(SKILL_ICECHAKRAM , STATE_ICECHAKRAM, 1, 1.0);
|
||||
obj.sq_SetCurrentAttackBonusRate(power);
|
||||
|
||||
// 赎坚葬 棻钦 ?? 除问 属寥
|
||||
local multiHitTimeGab = sq_GetIntData(obj, SKILL_ICECHAKRAM, 4);
|
||||
obj.setTimeEvent(ENUM_ICE_CHAKRAM_TIMER_LARGE_MULTI_HIT, multiHitTimeGab , 0, false); // 0桧贼 鼠?渠
|
||||
|
||||
obj.sq_PlaySound("MW_RAGEBLAST_READY");
|
||||
|
||||
local attractPower = sq_GetLevelData(obj, SKILL_ICECHAKRAM, 6, sq_GetSkillLevel(obj, SKILL_ICECHAKRAM));
|
||||
if(attractPower > 0)
|
||||
{
|
||||
// 庄横渡啖韩 迹瞳虽 颤啃, 庄横菟桧朝 ?暧 剪葬 , 颤啃戏煎 睡搅暧 迹瞳虽 剪葬, 庄横渡望 楼紫
|
||||
local appendage = sq_AttractToMe(obj, 200, 100, attractPower);
|
||||
local var = obj.getVar();
|
||||
var.setAppendage(VAR_ICE_CHAKRAM_ATTRACT_APPENDAGE, appendage);
|
||||
}
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_6) {
|
||||
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICECHAKRAM_6);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
function onTimeEvent_IceChakram(obj, timeEventIndex, timeEventCount)
|
||||
{
|
||||
if(!obj)
|
||||
return false;
|
||||
|
||||
if(!obj.isMyControlObject())
|
||||
return false;
|
||||
|
||||
if(timeEventIndex == ENUM_ICE_CHAKRAM_TIMER_LARGE_MULTI_HIT)
|
||||
{
|
||||
obj.resetHitObjectList(); //棻钦??蒂嫔? ??螃粽薛? 葬蝶?蒂 葬掸.
|
||||
return false; // false贼 啗楼 属寥 (timeEventCount苹遴?陛 嵘?桧塭贼 timeEventCount 虏踯 属寥)
|
||||
}
|
||||
|
||||
return true; // true贼 属寥 酝钦
|
||||
}
|
||||
|
||||
|
||||
function prepareDraw_IceChakram(obj)
|
||||
{
|
||||
|
||||
if(!obj) return;
|
||||
|
||||
local substate = obj.getSkillSubState();
|
||||
|
||||
if(substate == SUB_STATE_ICECHAKRAM_0) {
|
||||
// SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_1) {
|
||||
// SUB_STATE_ICECHAKRAM_1 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_2) {
|
||||
// SUB_STATE_ICECHAKRAM_2 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_3) {
|
||||
// SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_4) {
|
||||
// SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function onProc_IceChakram(obj)
|
||||
{
|
||||
|
||||
if(!obj) return;
|
||||
|
||||
local substate = obj.getSkillSubState();
|
||||
|
||||
local pAni = obj.sq_GetCurrentAni();
|
||||
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
|
||||
local currentT = sq_GetCurrentTime(pAni);
|
||||
|
||||
obj.sq_StopMove();
|
||||
if(substate == SUB_STATE_ICECHAKRAM_0) {
|
||||
// SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_1) {
|
||||
// SUB_STATE_ICECHAKRAM_1 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_2) {
|
||||
// SUB_STATE_ICECHAKRAM_2 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_3) {
|
||||
// SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_4) {
|
||||
// SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function onProcCon_IceChakram(obj)
|
||||
{
|
||||
|
||||
if(!obj) return;
|
||||
|
||||
local substate = obj.getSkillSubState();
|
||||
|
||||
local pAni = obj.sq_GetCurrentAni();
|
||||
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
|
||||
|
||||
|
||||
|
||||
if(substate == SUB_STATE_ICECHAKRAM_0) {
|
||||
// SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_1)
|
||||
{
|
||||
local loopTime = 400;
|
||||
|
||||
local t = obj.getVar("state").get_ct_vector(0);
|
||||
local currentT = 0;
|
||||
|
||||
currentT = t.Get();
|
||||
|
||||
//print( " currentT:" + currentT + " loopTime:" + loopTime);
|
||||
|
||||
if(currentT > loopTime)
|
||||
{
|
||||
if(!obj.getVar().get_vector(0))
|
||||
{
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(SUB_STATE_ICECHAKRAM_2); // substate撮?
|
||||
obj.sq_AddSetStatePacket(STATE_ICECHAKRAM, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
|
||||
obj.getVar().set_vector(0, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_2)
|
||||
{
|
||||
if(obj.isMyControlObject())
|
||||
{
|
||||
if(obj.getVar("ani").get_vector(0))
|
||||
{
|
||||
local smallRingObj = obj.sq_GetPassiveObject(24258); // po_ATIceChakramSmallIceRing.nut 24258
|
||||
|
||||
if(smallRingObj)
|
||||
{
|
||||
local passiveState = smallRingObj.getState();
|
||||
|
||||
if(passiveState == PASSIVEOBJ_SUB_STATE_2)
|
||||
{
|
||||
local isFindChr = smallRingObj.getVar("findchr").get_vector(0);
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(SUB_STATE_ICECHAKRAM_3); // substate撮?
|
||||
obj.sq_IntVectPush(isFindChr); // substate撮?
|
||||
obj.sq_AddSetStatePacket(STATE_ICECHAKRAM, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_3) {
|
||||
// SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_4) {
|
||||
// SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_6) {
|
||||
sq_RemoveParticle("Character/Mage/Effect/Particle/ATIceChakramDust.ptl", obj);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
function onEndCurrentAni_IceChakram(obj)
|
||||
{
|
||||
|
||||
if(!obj) return;
|
||||
|
||||
local substate = obj.getSkillSubState();
|
||||
|
||||
if(substate == SUB_STATE_ICECHAKRAM_0) {
|
||||
// SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机
|
||||
if(obj.isMyControlObject())
|
||||
{
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(SUB_STATE_ICECHAKRAM_1); // substate撮?
|
||||
obj.sq_AddSetStatePacket(STATE_ICECHAKRAM, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
}
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_1) {
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_2) {
|
||||
obj.getVar("ani").set_vector(0, 1);
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_3) {
|
||||
// SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机
|
||||
if(obj.isMyControlObject())
|
||||
{
|
||||
if(obj.getVar("findchr").get_vector(0))
|
||||
{
|
||||
obj.sq_IntVectClear();
|
||||
obj.sq_IntVectPush(SUB_STATE_ICECHAKRAM_5); // substate撮?
|
||||
obj.sq_AddSetStatePacket(STATE_ICECHAKRAM, STATE_PRIORITY_IGNORE_FORCE, true);
|
||||
}
|
||||
else
|
||||
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
|
||||
}
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_4) {
|
||||
// 陈嬴蚂 离觼茔击 赅戏朝 翕蒙
|
||||
obj.sendStatePacket(STATE_ICECHAKRAM, SUB_STATE_ICECHAKRAM_5);
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_5) {
|
||||
// 赎 离觼茔 ?瞪 卫郦朝 翕蒙
|
||||
obj.sendStatePacket(STATE_ICECHAKRAM, SUB_STATE_ICECHAKRAM_6);
|
||||
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_6) {
|
||||
// 赎 离觼茔 ?瞪 卫郦朝 翕蒙
|
||||
obj.sendStateOnlyPacket(STATE_STAND);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function onKeyFrameFlag_IceChakram(obj, flagIndex)
|
||||
{
|
||||
|
||||
if(!obj) return true;
|
||||
|
||||
local substate = obj.getSkillSubState();
|
||||
|
||||
if(substate == SUB_STATE_ICECHAKRAM_0) {
|
||||
// SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_1) {
|
||||
// SUB_STATE_ICECHAKRAM_1 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_2) {
|
||||
// SUB_STATE_ICECHAKRAM_2 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_3) {
|
||||
// SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_4) {
|
||||
// SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机
|
||||
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_5) {
|
||||
if(flagIndex == 1)
|
||||
{
|
||||
obj.sq_PlaySound("RAGEBLAST_THROW_LOOP",3711);
|
||||
|
||||
sq_SetMyShake(obj,2,100);
|
||||
sq_CreateParticle("Character/Mage/Effect/Particle/ATIceChakramDust.ptl",obj,60, -60,0,true,350,1000,100);
|
||||
sq_CreateParticle("Character/Mage/Effect/Particle/ATIceChakramDust_1.ptl",obj,-10,-10,0,true,350,1000,100);
|
||||
}
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_6) {
|
||||
if(flagIndex == 1)
|
||||
{
|
||||
local createXDis = 30;
|
||||
local createYDis = 1;
|
||||
local createZDis = 58;
|
||||
local searchAngleH = 30;
|
||||
local searchAngleV = 15;
|
||||
local distance = 1000;
|
||||
local angle = 20;
|
||||
|
||||
local x = sq_GetDistancePos(obj.getXPos(), sq_GetDirection(obj), createXDis);
|
||||
local y = sq_GetDistancePos(obj.getYPos(), ENUM_DIRECTION_DOWN, createYDis);
|
||||
local z = sq_GetDistancePos(obj.getZPos(), ENUM_DIRECTION_UP, createZDis);
|
||||
|
||||
local x_range = obj.sq_GetIntData(SKILL_ICECHAKRAM , 3); // x蹴 譆渠 彰嫔
|
||||
local y_range = 200; //
|
||||
local z_range = 100; //
|
||||
|
||||
printc("x_range " + x_range);
|
||||
local activeObject = getPriorityTarget(obj, 0, x_range, y_range, z_range, null, true);
|
||||
printc("activeObject " + activeObject);
|
||||
|
||||
local maxDistance = activeObject ? abs(activeObject.getXPos() - x) : obj.sq_GetIntData(SKILL_ICECHAKRAM , 3);;
|
||||
local horizonAngle = activeObject ? sq_GetShootingHorizonAngle(activeObject, y, 0, searchAngleH, maxDistance) : 0.0 ;
|
||||
local verticalAngle = activeObject ? sq_GetShootingVerticalAngle(activeObject, z, 0, searchAngleV, maxDistance, 300) : 0.0;
|
||||
local moveSpeed = obj.sq_GetIntData(SKILL_ICECHAKRAM , 5);
|
||||
|
||||
sq_BinaryStartWrite();
|
||||
sq_BinaryWriteFloat(horizonAngle); // 桧翕 陕紫 热?
|
||||
sq_BinaryWriteFloat(verticalAngle); // 桧翕 陕紫 热霜
|
||||
sq_BinaryWriteDword(moveSpeed); // 桧翕 楼紫
|
||||
sq_BinaryWriteDword(maxDistance); // 桧翕 剪葬
|
||||
sq_BinaryWriteDword(sq_GetGroup(activeObject)); // 颤啃 姜尔
|
||||
sq_BinaryWriteDword(sq_GetUniqueId(activeObject)); // 颤啃 姜尔
|
||||
|
||||
obj.sq_SendCreatePassiveObjectPacket(24234, 0, createXDis, createYDis, createZDis);
|
||||
|
||||
local attractPower = sq_GetLevelData(obj, SKILL_ICECHAKRAM, 6, sq_GetSkillLevel(obj, SKILL_ICECHAKRAM));
|
||||
if(attractPower > 0)
|
||||
{
|
||||
local var = obj.getVar();
|
||||
local appendage = var.getAppendage(VAR_ICE_CHAKRAM_ATTRACT_APPENDAGE);
|
||||
if(appendage)
|
||||
appendage.setValid(false);
|
||||
}
|
||||
|
||||
obj.stopSound(3711);
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
function onEndState_IceChakram(obj, new_state)
|
||||
{
|
||||
if(!obj)
|
||||
return;
|
||||
|
||||
obj.stopSound(7577);
|
||||
|
||||
if (new_state != STATE_STAND)
|
||||
{
|
||||
local var = obj.getVar();
|
||||
local appendage = var.getAppendage(VAR_ICE_CHAKRAM_ATTRACT_APPENDAGE);
|
||||
if (appendage)
|
||||
appendage.setValid(false);
|
||||
}
|
||||
|
||||
// 等嘐虽,鼻鹧桧鼻 蛔戏煎 嬴桧蝶 离觼茔桧 部陬棻.
|
||||
if(new_state != STATE_ICECHAKRAM)
|
||||
{
|
||||
obj.stopSound(3711);
|
||||
// ??赝 薯剪.
|
||||
sq_RemoveParticle("Character/Mage/Effect/Particle/ATIceChakramDust.ptl", obj);
|
||||
sq_RemoveParticle("Character/Mage/Effect/Particle/ATIceChakramDust_1.ptl", obj);
|
||||
}
|
||||
}
|
||||
|
||||
function onAfterSetState_IceChakram(obj, state, datas, isResetTimer)
|
||||
{
|
||||
|
||||
if(!obj) return;
|
||||
|
||||
local substate = obj.getSkillSubState();
|
||||
|
||||
if(substate == SUB_STATE_ICECHAKRAM_0) {
|
||||
// SUB_STATE_ICECHAKRAM_0 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_1) {
|
||||
// SUB_STATE_ICECHAKRAM_1 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_2) {
|
||||
// SUB_STATE_ICECHAKRAM_2 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_3) {
|
||||
// SUB_STATE_ICECHAKRAM_3 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
else if(substate == SUB_STATE_ICECHAKRAM_4) {
|
||||
// SUB_STATE_ICECHAKRAM_4 怃粽蝶才桧? 蒙机
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
BIN
character/atmage/icechakram/po_aticechakramlarge.nut
Normal file
BIN
character/atmage/icechakram/po_aticechakramlarge.nut
Normal file
Binary file not shown.
663
character/atmage/icechakram/po_aticechakramsmallicering.nut
Normal file
663
character/atmage/icechakram/po_aticechakramsmallicering.nut
Normal file
@@ -0,0 +1,663 @@
|
||||
|
||||
SMALLICERING_START_X <- 0
|
||||
SMALLICERING_START_Y <- 1
|
||||
SMALLICERING_START_Z <- 2
|
||||
|
||||
SMALLICERING_MOV_X <- 3
|
||||
SMALLICERING_MOV_Y <- 4
|
||||
SMALLICERING_MOV_Z <- 5
|
||||
|
||||
|
||||
function getTargetZPos(target)
|
||||
{
|
||||
if(!target)
|
||||
return 50;
|
||||
|
||||
local height = target.getZPos();
|
||||
|
||||
height = height + sq_GetObjectHeight(target);
|
||||
|
||||
height = height + 50;
|
||||
|
||||
return height;
|
||||
}
|
||||
|
||||
function updateAngle(obj, angle)
|
||||
{
|
||||
if(!obj)
|
||||
return;
|
||||
|
||||
local currentAngle_ = obj.getVar("angle").get_vector(0);
|
||||
|
||||
if (currentAngle_ == (angle + 360) % 360)
|
||||
return;
|
||||
|
||||
currentAngle_ = (angle + 360) % 360;
|
||||
obj.getVar("angle").set_vector(0, currentAngle_);
|
||||
|
||||
if (currentAngle_ >= 90 && currentAngle_ < 270)
|
||||
{
|
||||
obj.setCurrentDirection(ENUM_DIRECTION_LEFT);
|
||||
}
|
||||
else
|
||||
{
|
||||
obj.setCurrentDirection(ENUM_DIRECTION_RIGHT);
|
||||
}
|
||||
}
|
||||
|
||||
function moveToBombingState(obj, currentAngle)
|
||||
{
|
||||
//local angle = 20 + sq_getRandom(0, 10);
|
||||
if(!obj)
|
||||
return;
|
||||
|
||||
if(obj.isMyControlObject())
|
||||
{
|
||||
//int angle = 20 + Rand_r() % 10;
|
||||
local angle = 50 + sq_getRandom(0, 10);
|
||||
//local angle = sq_getRandom(0, 180);
|
||||
|
||||
if(sq_getRandom(0, 2) != 0)
|
||||
angle = -angle;
|
||||
|
||||
//print( " send changeAngle:" + angle);
|
||||
|
||||
sq_BinaryStartWrite();
|
||||
sq_BinaryWriteFloat(angle.tofloat());
|
||||
|
||||
sq_SendChangeSkillEffectPacket(obj, SKILL_ICECHAKRAM);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function procSmallRingMove(obj)
|
||||
{
|
||||
if(!obj)
|
||||
return;
|
||||
|
||||
//local target = obj.sq_var.get_obj_vector(0);
|
||||
|
||||
//if (target)
|
||||
{
|
||||
local t = obj.getVar("sr").get_ct_vector(0);
|
||||
if(!t)
|
||||
return;
|
||||
|
||||
local time = t.Get();
|
||||
|
||||
|
||||
local radius = 0;
|
||||
local angle = 0;
|
||||
local zPos = 0;
|
||||
local currentAngle = 0;
|
||||
//local bombingTurnStartTime_ = 10;
|
||||
//local bombingTurnEndTime_ = 200;
|
||||
local bombingTurnStartTime_ = 60;
|
||||
local bombingTurnEndTime_ = 300;
|
||||
local bombingStartAngle_ = obj.getVar("sr").get_vector(1)
|
||||
local bombingChangeAngle_ = obj.getVar("sr").get_vector(0);
|
||||
|
||||
//print( " bombingChangeAngle_:" + bombingChangeAngle_);
|
||||
//local BOMBING_RADIUS = 40;
|
||||
local BOMBING_RADIUS = 30;
|
||||
|
||||
local srcZ = obj.getVar("pos").get_vector(2);
|
||||
local currentAngle_ = obj.getVar("angle").get_vector(0);
|
||||
|
||||
|
||||
if (time <= bombingTurnStartTime_)
|
||||
{
|
||||
// 霜摹
|
||||
//radius = sq_GetUniformVelocity((isFlyToCenter_)? 0 : -BOMBING_RADIUS, BOMBING_RADIUS, time, bombingTurnStartTime_);
|
||||
radius = sq_GetUniformVelocity(0, BOMBING_RADIUS, time, bombingTurnStartTime_);
|
||||
angle = bombingStartAngle_;
|
||||
zPos = srcZ;
|
||||
currentAngle = currentAngle_;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 摹?
|
||||
local dstZPos_ = obj.getVar("pos").get_vector(2);
|
||||
|
||||
|
||||
//local OVER_RADIUS = 50;
|
||||
local OVER_RADIUS = 150;
|
||||
local turnTime = time - bombingTurnStartTime_;
|
||||
local turnEndTime = bombingTurnEndTime_ - bombingTurnStartTime_;
|
||||
|
||||
if (turnTime <= turnEndTime / 2)
|
||||
radius = BOMBING_RADIUS + sq_GetAccel(0, OVER_RADIUS, turnTime, turnEndTime / 2, true);
|
||||
else
|
||||
radius = BOMBING_RADIUS + sq_GetAccel(OVER_RADIUS, 0, turnTime - turnEndTime / 2, turnEndTime / 2, false);
|
||||
|
||||
angle = bombingStartAngle_ + sq_GetUniformVelocity(0, bombingChangeAngle_, turnTime, turnEndTime);
|
||||
//zPos = sq_GetUniformVelocity(srcZ, dstZPos_, turnTime, turnEndTime);
|
||||
|
||||
if (bombingChangeAngle_ > 0)
|
||||
currentAngle = sq_GetUniformVelocity(bombingStartAngle_, bombingStartAngle_ + 180 + bombingChangeAngle_, turnTime, turnEndTime);
|
||||
else
|
||||
currentAngle = sq_GetUniformVelocity(bombingStartAngle_, bombingStartAngle_ - 180 + bombingChangeAngle_, turnTime, turnEndTime);
|
||||
}
|
||||
|
||||
local posX = CNRDObject.getAngleDistanceXPos(obj.getVar("pos").get_vector(0), angle, radius, ENUM_DIRECTION_RIGHT);
|
||||
local posY = CNRDObject.getAngleDistanceYPos(obj.getVar("pos").get_vector(1), angle, radius, false);
|
||||
local posZ = obj.getVar("pos").get_vector(2);
|
||||
sq_setCurrentAxisPos(obj, 0, posX);
|
||||
sq_setCurrentAxisPos(obj, 1, posY);
|
||||
sq_setCurrentAxisPos(obj, 2, posZ);
|
||||
//setCurrentPos(2, zPos);
|
||||
updateAngle(obj, currentAngle);
|
||||
|
||||
//print( " time:" + time);
|
||||
|
||||
if(time > bombingTurnEndTime_)
|
||||
{
|
||||
//print( " time out :" + time);
|
||||
moveToBombingState(obj, 0);
|
||||
//t.Reset();
|
||||
//t.Start(10000,0);
|
||||
//local changeAngle = moveToBombingState(obj, 0);
|
||||
//obj.getVar("sr").set_vector(0, changeAngle);
|
||||
//local currentAng = obj.getVar("angle").get_vector(0);
|
||||
//obj.getVar("sr").set_vector(1, changeAngle);
|
||||
//return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function setCustomData_po_ATIceChakramSmallIceRing(obj, reciveData)
|
||||
{
|
||||
|
||||
if(!obj) return;
|
||||
|
||||
local id = reciveData.readDword();
|
||||
local multi_hit_num = reciveData.readDword();
|
||||
local power = reciveData.readDword();
|
||||
local moveMode = reciveData.readDword();
|
||||
|
||||
local hitCnt = multi_hit_num;
|
||||
|
||||
local atk = sq_GetCurrentAttackInfo(obj);
|
||||
|
||||
if(atk)
|
||||
{
|
||||
sq_SetCurrentAttackBonusRate(atk, power);
|
||||
}
|
||||
|
||||
|
||||
// 蒙擎 橡挤坚葬陛 奢问?贼怃 给嬴棻栖朝 卫除 卫除 (喻蝓霞)
|
||||
local attackTime = 3000; // 0.01蟾钦嫔
|
||||
|
||||
obj.getVar("attackTime").clear_vector();
|
||||
obj.getVar("attackTime").push_vector(attackTime);
|
||||
|
||||
|
||||
obj.getVar("move").clear_vector();
|
||||
obj.getVar("move").push_vector(moveMode);
|
||||
|
||||
local object = sq_GetObjectByObjectId(obj, id);
|
||||
obj.sq_var.clear_obj_vector();
|
||||
obj.sq_var.push_obj_vector(object);
|
||||
|
||||
obj.getVar("findchr").clear_vector();
|
||||
obj.getVar("findchr").push_vector(1);
|
||||
|
||||
|
||||
|
||||
if(!object)
|
||||
{
|
||||
obj.getVar("findchr").set_vector(0, 0);
|
||||
}
|
||||
|
||||
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("sr").clear_ct_vector();
|
||||
obj.getVar("sr").push_ct_vector();
|
||||
|
||||
obj.getVar("sr").clear_vector();
|
||||
|
||||
local changeAngle = 45;
|
||||
obj.getVar("sr").push_vector(changeAngle);
|
||||
obj.getVar("sr").push_vector(20);
|
||||
|
||||
|
||||
|
||||
|
||||
obj.getVar("dir").clear_vector();
|
||||
obj.getVar("dir").push_vector(0);
|
||||
|
||||
local pAni = obj.getCurrentAnimation();
|
||||
local initDelay = 0;
|
||||
|
||||
local term = attackTime / hitCnt;
|
||||
|
||||
obj.timer_.setParameter(term, -1);
|
||||
obj.timer_.resetInstant(initDelay);
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
local x = sq_GetXPos(obj);
|
||||
local y = sq_GetYPos(obj);
|
||||
local z = sq_GetZPos(obj);
|
||||
|
||||
obj.getVar("pos").clear_vector();
|
||||
|
||||
obj.getVar("pos").push_vector(x);
|
||||
obj.getVar("pos").push_vector(y);
|
||||
obj.getVar("pos").push_vector(z);
|
||||
|
||||
obj.getVar("dis").clear_vector();
|
||||
|
||||
|
||||
|
||||
obj.getVar("dis").push_vector(x);
|
||||
obj.getVar("dis").push_vector(y);
|
||||
obj.getVar("dis").push_vector(z);
|
||||
|
||||
local xLen = 200;
|
||||
local yLen = 0;
|
||||
local zLen = 50;
|
||||
//local zLen = 250;
|
||||
|
||||
if(object)
|
||||
{
|
||||
xLen = obj.getXDistance(object);
|
||||
yLen = sq_GetYPos(object) - sq_GetYPos(obj);
|
||||
zLen = sq_GetZPos(object) + (sq_GetObjectHeight(object) / 2);
|
||||
}
|
||||
|
||||
obj.getVar("dis").push_vector(xLen);
|
||||
obj.getVar("dis").push_vector(yLen);
|
||||
obj.getVar("dis").push_vector(zLen);
|
||||
|
||||
///////////////////////////////////////////////////////////////////////
|
||||
|
||||
obj.getVar("state").clear_vector(); // state vector
|
||||
obj.getVar("state").push_vector(0);
|
||||
|
||||
obj.getVar("hitCnt").clear_vector();
|
||||
obj.getVar("hitCnt").push_vector(hitCnt);
|
||||
obj.getVar("hitCnt").push_vector(1);
|
||||
|
||||
obj.getVar("end").clear_vector();
|
||||
obj.getVar("end").push_vector(0);
|
||||
|
||||
|
||||
obj.getVar("state").clear_ct_vector();
|
||||
|
||||
obj.getVar("state").push_ct_vector();
|
||||
local t = obj.getVar("state").get_ct_vector(0);
|
||||
t.Reset();
|
||||
t.Start(100000,0);
|
||||
|
||||
//print(" term:" + term + "hitCnt:" + hitCnt);
|
||||
initGetVarTimer(obj, 2, term, hitCnt + 1);
|
||||
|
||||
local currentT = 0;
|
||||
|
||||
local isMyControl = obj.isMyControlObject();
|
||||
|
||||
|
||||
|
||||
if(isMyControl) {
|
||||
local pIntVec = sq_GetGlobalIntVector();
|
||||
|
||||
sq_IntVectorClear(pIntVec);
|
||||
sq_IntVectorPush(pIntVec, 0);
|
||||
|
||||
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
function setState_po_ATIceChakramSmallIceRing(obj, state, datas)
|
||||
{
|
||||
if(!obj) return;
|
||||
|
||||
local pChr = obj.getTopCharacter();
|
||||
|
||||
if(!pChr)
|
||||
{
|
||||
if(obj.isMyControlObject())
|
||||
{
|
||||
sq_SendDestroyPacketPassiveObject(obj);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
local t = obj.getVar().get_ct_vector(0);
|
||||
|
||||
if(t)
|
||||
{
|
||||
t.Reset();
|
||||
t.Start(10000,0);
|
||||
}
|
||||
|
||||
local srT = obj.getVar("sr").get_ct_vector(0);
|
||||
srT.Reset();
|
||||
srT.Start(10000,0);
|
||||
|
||||
|
||||
|
||||
local passiveState = state;
|
||||
|
||||
obj.getVar("state").set_vector(0, passiveState);
|
||||
|
||||
obj.getVar("angle").clear_vector();
|
||||
obj.getVar("angle").push_vector(0);
|
||||
|
||||
|
||||
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
|
||||
{ // 跷问
|
||||
local dir = obj.getDirection();
|
||||
obj.getVar("dir").set_vector(0, dir);
|
||||
}
|
||||
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
|
||||
{ // 颤问
|
||||
local x = sq_GetXPos(obj);
|
||||
local y = sq_GetYPos(obj);
|
||||
local z = sq_GetZPos(obj);
|
||||
|
||||
obj.getVar("pos").clear_vector();
|
||||
|
||||
obj.getVar("pos").push_vector(x);
|
||||
obj.getVar("pos").push_vector(y);
|
||||
obj.getVar("pos").push_vector(z);
|
||||
|
||||
//obj.sq_SetMoveParticle("Particle/Sparrow.ptl", 20.0, -25.0);
|
||||
}
|
||||
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
|
||||
{
|
||||
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);
|
||||
|
||||
local dx = sq_GetXPos(pChr);
|
||||
local dy = sq_GetYPos(pChr) + 1;
|
||||
local dz = sq_GetZPos(pChr) + 160;
|
||||
|
||||
local xLen = 200;
|
||||
local yLen = 0;
|
||||
local zLen = 50;
|
||||
|
||||
xLen = obj.getXDistance(pChr);
|
||||
yLen = dy - sq_GetYPos(obj);
|
||||
zLen = dz;
|
||||
|
||||
print(" zLen:" + zLen);
|
||||
//print( " xlen:" + xLen + " ylen:" + yLen + " zlen:" + zLen);
|
||||
|
||||
obj.getVar("dis").push_vector(xLen);
|
||||
obj.getVar("dis").push_vector(yLen);
|
||||
obj.getVar("dis").push_vector(zLen);
|
||||
|
||||
local initDir = obj.getVar("dir").get_vector(0);
|
||||
|
||||
//local oppDir = sq_GetOppositeDirection(initDir);
|
||||
//obj.setCurrentDirection(oppDir);
|
||||
if(x > dx)
|
||||
{
|
||||
obj.setCurrentDirection(ENUM_DIRECTION_LEFT);
|
||||
}
|
||||
else
|
||||
{
|
||||
obj.setCurrentDirection(ENUM_DIRECTION_RIGHT);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function procAppend_po_ATIceChakramSmallIceRing(obj)
|
||||
{
|
||||
if(!obj) return;
|
||||
|
||||
local state = obj.getVar("state").get_vector(0);
|
||||
|
||||
if(state == 0)
|
||||
return;
|
||||
|
||||
local pChr = obj.getTopCharacter();
|
||||
|
||||
if(!pChr)
|
||||
{
|
||||
if(obj.isMyControlObject())
|
||||
{
|
||||
sq_SendDestroyPacketPassiveObject(obj);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
local passiveState = state;
|
||||
|
||||
local pAni = obj.getCurrentAnimation();
|
||||
|
||||
local t = obj.getVar().get_ct_vector(0);
|
||||
local currentT = 0;
|
||||
|
||||
currentT = t.Get();
|
||||
|
||||
|
||||
if(passiveState == PASSIVEOBJ_SUB_STATE_0 || passiveState == PASSIVEOBJ_SUB_STATE_2)
|
||||
{ // 跷问, ?热
|
||||
local fireT = 150;
|
||||
|
||||
if(obj.getVar("findchr").get_vector(0) == 0)
|
||||
{
|
||||
fireT = 350;
|
||||
}
|
||||
|
||||
if(passiveState == PASSIVEOBJ_SUB_STATE_2)
|
||||
{
|
||||
fireT = 300;
|
||||
}
|
||||
local srcX = obj.getVar("dis").get_vector(SMALLICERING_START_X); // 卫蒙x
|
||||
local srcY = obj.getVar("dis").get_vector(SMALLICERING_START_Y); // 卫蒙y
|
||||
local srcZ = obj.getVar("dis").get_vector(SMALLICERING_START_Z); // 卫蒙z
|
||||
|
||||
local dis_x_len = obj.getVar("dis").get_vector(SMALLICERING_MOV_X); // 识 桧翕剪葬
|
||||
local dis_y_len = obj.getVar("dis").get_vector(SMALLICERING_MOV_Y); // y蹴 桧翕剪葬
|
||||
local endZ = obj.getVar("dis").get_vector(SMALLICERING_MOV_Z); // z蹴 桧翕剪葬
|
||||
|
||||
local v = sq_GetAccel(0, dis_x_len, currentT, fireT, true);
|
||||
local my = sq_GetAccel(0, dis_y_len, currentT, fireT, true);
|
||||
local mz = sq_GetAccel(srcZ, endZ, currentT, fireT, true);
|
||||
//local v = sq_GetUniformVelocity(0, dis_x_len, currentT, fireT);
|
||||
//local my = sq_GetUniformVelocity(0, dis_y_len, currentT, fireT);
|
||||
//local mz = sq_GetUniformVelocity(srcZ, endZ, currentT, fireT);
|
||||
|
||||
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
|
||||
local dstY = srcY + my;
|
||||
|
||||
sq_setCurrentAxisPos(obj, 0, dstX);
|
||||
sq_setCurrentAxisPos(obj, 1, dstY);
|
||||
sq_setCurrentAxisPos(obj, 2, mz);
|
||||
|
||||
if(passiveState == PASSIVEOBJ_SUB_STATE_2)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
if(currentT >= fireT)
|
||||
{
|
||||
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
|
||||
{
|
||||
if(obj.isMyControlObject())
|
||||
{
|
||||
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_2)
|
||||
{
|
||||
if(obj.isMyControlObject())
|
||||
{
|
||||
sq_SendDestroyPacketPassiveObject(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
|
||||
{ // 颤问
|
||||
|
||||
local hitT = obj.getVar().get_timer_vector(0);
|
||||
|
||||
if(!obj.getVar("move").get_vector(0))
|
||||
{
|
||||
procSmallRingMove(obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
local movT = obj.getVar().get_timer_vector(1);
|
||||
if(movT)
|
||||
{
|
||||
if(movT.isOnEvent(currentT) == true)
|
||||
{
|
||||
local x = sq_GetXPos(obj);
|
||||
local y = sq_GetYPos(obj);
|
||||
local z = sq_GetZPos(obj);
|
||||
|
||||
local ox = obj.getVar("pos").get_vector(0);
|
||||
local oy = obj.getVar("pos").get_vector(1);
|
||||
local oz = obj.getVar("pos").get_vector(2);
|
||||
|
||||
local dx = 0;
|
||||
local dy = 0;
|
||||
local dz = 0;
|
||||
|
||||
|
||||
if(ox != x)
|
||||
dx = ox;
|
||||
else
|
||||
dx = x + sq_getRandom(-40, 40);
|
||||
|
||||
if(oy != y)
|
||||
dy = oy;
|
||||
else
|
||||
dy = y + sq_getRandom(-40, 40);
|
||||
|
||||
//print( " ox:" + ox + " oy:" + oy + " x:" + x + " y:" + y + " dx:" + dx + " dy:" + dy);
|
||||
|
||||
sq_setCurrentAxisPos(obj, 0, dx);
|
||||
sq_setCurrentAxisPos(obj, 1, dy);
|
||||
sq_setCurrentAxisPos(obj, 2, z);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(hitT)
|
||||
{
|
||||
if(hitT.isOnEvent(currentT) == true)
|
||||
{
|
||||
obj.resetHitObjectList();
|
||||
}
|
||||
}
|
||||
|
||||
local targetObj = obj.sq_var.get_obj_vector(0);
|
||||
|
||||
if(targetObj)
|
||||
{
|
||||
local x = sq_GetXPos(targetObj);
|
||||
local y = sq_GetYPos(targetObj);
|
||||
local z = targetObj.getZPos() + (sq_GetObjectHeight(targetObj) / 2);
|
||||
|
||||
obj.getVar("pos").set_vector(0, x);
|
||||
obj.getVar("pos").set_vector(1, y);
|
||||
obj.getVar("pos").set_vector(2, z);
|
||||
}
|
||||
|
||||
|
||||
local attackTime = obj.getVar("attackTime").get_vector(0); // 0.01蟾钦嫔
|
||||
if(currentT > attackTime || obj.getVar("findchr").get_vector(0) == 0)
|
||||
{
|
||||
if(obj.isMyControlObject())
|
||||
{
|
||||
local pIntVec = sq_GetGlobalIntVector();
|
||||
|
||||
sq_IntVectorClear(pIntVec);
|
||||
sq_IntVectorPush(pIntVec, 0);
|
||||
|
||||
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onChangeSkillEffect_po_ATIceChakramSmallIceRing(obj, skillIndex, reciveData)
|
||||
{
|
||||
if(!obj) return;
|
||||
|
||||
if(skillIndex != SKILL_ICECHAKRAM) return;
|
||||
|
||||
local pChr = obj.getTopCharacter();
|
||||
|
||||
if(!pChr) return;
|
||||
|
||||
local changeAngle = reciveData.readFloat();
|
||||
|
||||
//print( " changeAngle:" + changeAngle);
|
||||
local t = obj.getVar("sr").get_ct_vector(0);
|
||||
|
||||
if(!t)
|
||||
return;
|
||||
|
||||
t.Reset();
|
||||
t.Start(10000,0);
|
||||
|
||||
//print( " changeAngle:" + changeAngle);
|
||||
|
||||
//local bombingStartAngle_ = obj.getVar("sr").get_vector(1)
|
||||
//local bombingChangeAngle_ = obj.getVar("sr").get_vector(0);
|
||||
|
||||
obj.getVar("sr").set_vector(0, changeAngle.tointeger());
|
||||
local currentAng = obj.getVar("angle").get_vector(0);
|
||||
obj.getVar("sr").set_vector(1, currentAng);
|
||||
|
||||
|
||||
}
|
||||
|
||||
function onDestroyObject_po_ATIceChakramSmallIceRing(obj, object)
|
||||
{
|
||||
|
||||
if(!obj) return;
|
||||
|
||||
}
|
||||
|
||||
function onKeyFrameFlag_po_ATIceChakramSmallIceRing(obj, flagIndex)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
function onEndCurrentAni_po_ATIceChakramSmallIceRing(obj)
|
||||
{
|
||||
|
||||
if(!obj) return;
|
||||
|
||||
}
|
||||
|
||||
function getCustomHitEffectFileName_po_ATIceChakramSmallIceRing(obj, isAttachOnDamager)
|
||||
{
|
||||
return "PassiveObject/Character/Mage/Animation/ATIceChakram/fire/08_chakrahit_dodge.ani";
|
||||
}
|
||||
429
character/atmage/icechakram/po_aticechakramsmallmgr.nut
Normal file
429
character/atmage/icechakram/po_aticechakramsmallmgr.nut
Normal file
@@ -0,0 +1,429 @@
|
||||
|
||||
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;
|
||||
|
||||
}
|
||||
| ||||