143 lines
3.7 KiB
Plaintext
143 lines
3.7 KiB
Plaintext
POI_MAX_KEYFRAME_INDEX <-8;
|
|
|
|
function checkExecutableSkill_PieceOfIce(obj)
|
|
{
|
|
|
|
if (!obj) return false;
|
|
|
|
local useSkill = obj.sq_IsUseSkill(SKILL_PIECE_OF_ICE);
|
|
|
|
if (useSkill) {
|
|
//obj.sq_IntVectClear();
|
|
//obj.sq_IntVectPush(SUB_STATE_ICEROAD_0); // substate撮?
|
|
obj.sq_AddSetStatePacket(STATE_PIECE_OF_ICE, STATE_PRIORITY_IGNORE_FORCE, false);
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
function checkCommandEnable_PieceOfIce(obj)
|
|
{
|
|
|
|
if(!obj) return false;
|
|
|
|
local state = obj.sq_GetState();
|
|
|
|
if(state == STATE_ATTACK) {
|
|
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
|
|
return obj.sq_IsCommandEnable(SKILL_PIECE_OF_ICE);
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
function onSetState_PieceOfIce(obj, state, datas, isResetTimer)
|
|
{
|
|
if(!obj) return;
|
|
|
|
obj.sq_StopMove();
|
|
obj.sq_SetCurrentAnimation(CUSTOM_ANI_PIECE_OF_ICE);
|
|
|
|
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,
|
|
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
|
|
}
|
|
|
|
function onProc_PieceOfIce(obj)
|
|
{
|
|
|
|
if(!obj) return;
|
|
|
|
local substate = obj.getSkillSubState();
|
|
|
|
}
|
|
|
|
function onEndCurrentAni_PieceOfIce(obj)
|
|
{
|
|
|
|
if(!obj) return;
|
|
|
|
local substate = obj.getSkillSubState();
|
|
|
|
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
|
|
}
|
|
|
|
function onKeyFrameFlag_PieceOfIce(obj, flagIndex)
|
|
{
|
|
|
|
if(!obj) return false;
|
|
|
|
local substate = obj.getSkillSubState();
|
|
local level = sq_GetSkillLevel(obj, SKILL_PIECE_OF_ICE);
|
|
|
|
if(flagIndex == 1) {
|
|
if(obj.isMyControlObject())
|
|
{
|
|
obj.sq_StartWrite();
|
|
obj.sq_WriteBool(false);
|
|
local x = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 0);
|
|
local z = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 1);
|
|
obj.sq_SendCreatePassiveObjectPacket(24224, 0, x, 0, z);
|
|
}
|
|
}
|
|
else if(flagIndex >= 2 ) {
|
|
local iceCoreObj = obj.getMyPassiveObject(24224,0);
|
|
if(iceCoreObj)
|
|
{
|
|
if(iceCoreObj.isMyControlObject()) {
|
|
iceCoreObj.sendStatePacket(PIECE_OF_ICE_CORE_STATE_DAMAGE, flagIndex);
|
|
}
|
|
|
|
local randMin = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 2);
|
|
local randMax = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 3);
|
|
local randNum = sq_getRandom(randMin, randMax);
|
|
|
|
for(local i=0;i<randNum;++i) {
|
|
|
|
//譆渠 ?楚斜 樯策蝶 = 8 8缣 陛梱选热烟 彰嫔陛 还横 苌棻.
|
|
if(obj.isMyControlObject())
|
|
{
|
|
local hAngleRange = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 5); //谢办 彰嫔
|
|
local vAngleRange = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 6); //鼻? 彰嫔
|
|
|
|
if(hAngleRange > 360)
|
|
hAngleRange = 360;
|
|
|
|
local horizonAngle = sq_getRandom(0,hAngleRange) -(hAngleRange/2);
|
|
local verticalAngle = sq_getRandom(0,vAngleRange);
|
|
|
|
|
|
// ?溯歜桧 虽陈热烟 当撩 谢?陛 薄薄 寰戏煎 菟横陛啪莠
|
|
local startPosY = (40 * (8-flagIndex)/POI_MAX_KEYFRAME_INDEX) * (vAngleRange == 0 ? 1 : horizonAngle/(hAngleRange/2));
|
|
local lifeTime = sq_GetIntData(obj, SKILL_PIECE_OF_ICE, 4);
|
|
local iceParticle = sq_CreateDrawOnlyObject(iceCoreObj, "PassiveObject/Character/Mage/Animation/ATPieceOfIce/08_ice_shard1_dodge.ani",ENUM_DRAWLAYER_NORMAL,true);
|
|
sq_SetCustomRotate(iceParticle,sq_ToRadian(-horizonAngle.tofloat()));
|
|
|
|
obj.sq_StartWrite();
|
|
obj.sq_WriteWord(sq_getRandom(0,5));
|
|
obj.sq_WriteFloat(horizonAngle.tofloat()); // 热? 彰嫔
|
|
obj.sq_WriteFloat(verticalAngle.tofloat()); // 热霜 彰嫔
|
|
obj.sq_WriteWord(lifeTime);
|
|
|
|
obj.sq_SendCreatePassiveObjectPacket(24223, 0, 60, startPosY, 75);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
function onDamage_PieceOfIce(obj, attacker, boundingBox)
|
|
{
|
|
if(!obj) return;
|
|
|
|
local iceCoreObj = obj.getMyPassiveObject(24224,0);
|
|
if(iceCoreObj)
|
|
iceCoreObj.sendStateOnlyPacket(PIECE_OF_ICE_CORE_STATE_END);
|
|
|
|
}
|