Sqr/character/atmage/iceman/iceman.nut

471 lines
11 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.

SUB_STATE_ICEMAN_0 <- 0
SUB_STATE_ICEMAN_1 <- 1
SUB_STATE_ICEMAN_2 <- 2
SUB_STATE_ICEMAN_3 <- 3
SUB_STATE_ICEMAN_4 <- 4
SUB_STATE_ICEMAN_WAIT <- 5
function checkExecutableSkill_IceMan(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_ICEMAN);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ICEMAN_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_IceMan(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK) {
// 警蜗 蝶鉴 偃? 蒙机濠: 姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_ICEMAN);
}
return true;
}
function onSetState_IceMan(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
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(10000,0);
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().push_vector(0);
obj.getVar().push_vector(0);
if(substate == SUB_STATE_ICEMAN_0)
{
//ICEBLADE_CAST
obj.sq_PlaySound("ICEBLADE_CAST");
local offsetX = 100;
offsetX = obj.sq_GetDistancePos(posX, obj.sq_GetDirection(), offsetX);
local vX = obj.sq_GetIntData(SKILL_ICEMAN, 0); // 0. 葆彻霞 桧翕楼紫
local vY = 0;
obj.sq_AddAimPointMark(offsetX, posY, vX, vY);
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN1);
}
else if(substate == SUB_STATE_ICEMAN_WAIT)
{
local dstX = obj.sq_GetVectorData(datas, 1);
obj.getVar("dash").clear_vector();
obj.getVar("dash").push_vector(dstX); //
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN6);
}
else if(substate == SUB_STATE_ICEMAN_1)
{
// 颤啃? 陛舒晦
print(" sub_state_1");
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN2);
}
else if(substate == SUB_STATE_ICEMAN_2)
{
// 殖溥陛晦
local dstX = obj.getVar("dash").get_vector(0);
obj.getVar("dash").push_vector(posX); // ?营 x : i: 1
obj.getVar("dash").push_vector(posY); // ?营 y : i: 2
local disX = sq_Abs(dstX - posX);
local disY = posY;
if(dstX > posX)
{
obj.setDirection(ENUM_DIRECTION_RIGHT);
}
else
{
obj.setDirection(ENUM_DIRECTION_LEFT);
}
disX = disX - 120;
if(disX <= 0)
disX = 0;
obj.getVar("dash").push_vector(disX); // x蹴 桧翕剪葬 : i: 3
obj.getVar("dash").push_vector(disY); // y蹴 桧翕剪葬 : i: 4
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN3);
}
else if(substate == SUB_STATE_ICEMAN_3) {
// 阳葬晦
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN4);
obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_ICEMAN);
local multiHitAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_ICEMAN,
STATE_ICEMAN, SKL_LVL_COLUMN_IDX_1, 1.0); //1.陪颤奢问溘(%)
obj.sq_SetCurrentAttackBonusRate(multiHitAttackRate);
//CUSTOM_ATTACK_INFO_ICEMAN
// 觼煎栖赝 蒙机 翱颤楼紫陛 殖塭韩 热 毡蝗栖棻.
local currentAni = sq_GetCurrentAnimation(obj);
if(currentAni)
{
local multiHitSpeed100Rate = obj.sq_GetIntData(SKILL_ICEMAN, 2); // 2. 翱颤楼紫
currentAni.setSpeedRate(multiHitSpeed100Rate.tofloat());
}
//setSpeedRate
}
else if(substate == SUB_STATE_ICEMAN_4) {
// ?嫦
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEMAN5);
}
}
function prepareDraw_IceMan(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
}
function onProc_IceMan(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
local sq_var = obj.getVar();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
if(substate == SUB_STATE_ICEMAN_0)
{ // 颤啃? 僭仪
if(obj.isMyControlObject())
{
local targetTime = obj.sq_GetIntData(SKILL_ICEMAN, 1); // 1. 葆彻霞戏煎 颤啃陛栋 卫除
print( " targetTime:" + targetTime);
if(currentT > targetTime)
{
local skillLevel = sq_GetSkillLevel(obj, SKILL_ICEMAN);
local value = 0;
local freezeRate = obj.sq_GetLevelData(SKILL_ICEMAN,
SKL_LVL_COLUMN_IDX_0, skillLevel); // 彩念?徽(%)
local multiHitAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_ICEMAN,
STATE_ICEMAN, SKL_LVL_COLUMN_IDX_1, 1.0); //1.陪颤奢问溘(%)
local smashAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_ICEMAN,
STATE_ICEMAN, SKL_LVL_COLUMN_IDX_2, 1.0); //2.鬼颤奢问溘(%)
local expPower = obj.sq_GetPowerWithPassive(SKILL_ICEMAN,
STATE_ICEMAN, SKL_LVL_COLUMN_IDX_3, -1, 1.0); //3.鼠伞虽朝 橡挤晦菅 奢问溘(+)
sq_BinaryStartWrite();
sq_BinaryWriteDword(freezeRate); //
sq_BinaryWriteDword(multiHitAttackRate); //
sq_BinaryWriteDword(smashAttackRate); //
sq_BinaryWriteDword(expPower); //
local aimPosX = obj.sq_GetAimPosX(posX, posY, true);
local offsetX = aimPosX - posX;
if (offsetX < 0)
{
offsetX = -offsetX;
}
local offsetY = -1;
obj.sq_SendCreatePassiveObjectPacket(24255, 0, offsetX, offsetY, 0); // 陴彻饵 嬴桧蝶裔 葆彻霞
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ICEMAN_WAIT); // substate撮?
obj.sq_IntVectPush(aimPosX); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
else if(substate == SUB_STATE_ICEMAN_WAIT)
{
local t = obj.getVar("state").get_ct_vector(0);
local currentT = t.Get();
if(currentT > 620)
//if(currentT > 880)
{
if(obj.isMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ICEMAN_1); //
obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
else if(substate == SUB_STATE_ICEMAN_1) {
// 颤啃? 陛舒晦
if(!obj.getVar().get_vector(0))
{
if(frmIndex >= 4)
{
obj.sq_PlaySound("MW_ICEMAN");
obj.getVar().set_vector(0, 1);
}
}
}
else if(substate == SUB_STATE_ICEMAN_2)
{
// 殖溥陛晦
local dash_t = pAni.getDelaySum(false); //
local srcX = obj.getVar("dash").get_vector(1); // 卫蒙x
local srcY = obj.getVar("dash").get_vector(2); // 卫蒙y
local dis_x_len = obj.getVar("dash").get_vector(3); // 识 桧翕剪葬
local dis_y_len = obj.getVar("dash").get_vector(4); // y蹴 桧翕剪葬
local v = sq_GetAccel(0, dis_x_len, currentT, dash_t, true);
//local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
//local dstY = srcY + my;
sq_setCurrentAxisPos(obj, 0, dstX);
//sq_setCurrentAxisPos(obj, 1, dstY);
}
else if(substate == SUB_STATE_ICEMAN_3)
{
// 阳葬晦
local isHit = false;
local particleX = sq_GetXPos(obj);
local particleY = sq_GetYPos(obj);
local particleZ = sq_GetZPos(obj);
local offsetLen = 140;
if(frmIndex >= 1 && !obj.getVar().get_vector(0))
{
isHit = true;
offsetLen = 140;
obj.getVar().set_vector(0, 1);
}
if(frmIndex >= 4 && !obj.getVar().get_vector(1))
{
isHit = true;
offsetLen = 114;
obj.getVar().set_vector(1, 1);
}
if(frmIndex >= 8 && !obj.getVar().get_vector(2))
{
isHit = true;
offsetLen = 90;
obj.getVar().set_vector(2, 1);
}
if(frmIndex >= 11 && !obj.getVar().get_vector(3))
{
isHit = true;
offsetLen = 150;
obj.getVar().set_vector(3, 1);
}
if(frmIndex >= 16 && !obj.getVar().get_vector(4))
{
isHit = true;
offsetLen = 85;
obj.getVar().set_vector(4, 1);
}
if(isHit)
{
obj.resetHitObjectList();
particleX = sq_GetDistancePos(posX, obj.getDirection(), offsetLen);
sq_SetMyShake(obj,2,100);
local particleCreater = obj.getVar().GetparticleCreaterMap("AtIceManPoleD2",
"PassiveObject/Character/Mage/Particle/ATIceManPoleDestroy.ptl", obj);
particleCreater.Restart(0);
particleCreater.SetPos(particleX, particleY + 5, particleZ + 65);
sq_AddParticleObject(obj, particleCreater);
}
}
else if(substate == SUB_STATE_ICEMAN_4) {
// ?嫦
}
}
function onProcCon_IceMan(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
if(substate == SUB_STATE_ICEMAN_0)
{
local disX = sq_GetDistancePos(obj.getXPos(), sq_GetDirection(obj), 50);
local iPX = obj.sq_GetAimPosX(obj.getXPos(), posY, false);
if (sq_GetDirection(obj) == ENUM_DIRECTION_LEFT)
{
if (disX < iPX)
{
obj.sq_SetAimPointMarkPosition(disX, posY);
}
}
if (sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT)
{
if (disX > iPX)
{
obj.sq_SetAimPointMarkPosition(disX, posY);
}
}
}
else if(substate == SUB_STATE_ICEMAN_1) {
// SUB_STATE_ICEMAN_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEMAN_2) {
// SUB_STATE_ICEMAN_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEMAN_3) {
// SUB_STATE_ICEMAN_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEMAN_4) {
// SUB_STATE_ICEMAN_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_IceMan(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(!obj.isMyControlObject())
return;
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
if(substate == SUB_STATE_ICEMAN_0)
{
}
else if(substate == SUB_STATE_ICEMAN_1) {
//obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ICEMAN_2); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_ICEMAN_2) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ICEMAN_3); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_ICEMAN_3) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ICEMAN_4); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICEMAN, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_ICEMAN_4) {
sq_SimpleMoveToNearMovablePos(obj,200);
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
function onKeyFrameFlag_IceMan(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
return false;
}
function onEndState_IceMan(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(new_state != STATE_ICEMAN)
obj.sq_RemoveAimPointMark();
}