Sqr/character/atmage/icechakram/icechakram.nut

497 lines
14 KiB
Plaintext
Raw Permalink Normal View History

2024-03-18 21:37:40 +08:00
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 怃粽蝶才桧? 蒙机
}
}