DNF/sqr/character/atmage/lightningwall/lightningwall.nut

157 lines
4.6 KiB
Plaintext
Raw Normal View History

2024-03-30 00:19:16 +08:00
// 横?蛤虽虏击 称桧坚 鼻撮晦栋擎 横?蛤虽缣怃 棻 ?棻.
function checkExecutableSkill_LightningWall(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_LIGHTNING_WALL);
if(b_useskill) {
obj.sq_AddSetStatePacket(STATE_LIGHTNING_WALL , STATE_PRIORITY_USER, false);
return true;
}
return false;
}
function checkCommandEnable_LightningWall(obj)
{
if(!obj)
return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK) {
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_LIGHTNING_WALL);
}
return true;
}
function onEndState_LightningWall(obj, newState)
{
if(!obj)
return;
if(newState != STATE_LIGHTNING_WALL)
setLightningWallState(obj, PO_LIGHTNING_WALL_DESTROY);
}
function onSetState_LightningWall(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_LIGHTNING_WALL);
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
local skillLevel = sq_GetSkillLevel(obj, SKILL_LIGHTNING_WALL);
local castTime = sq_GetCastTime(obj, SKILL_LIGHTNING_WALL, skillLevel);
local animation = sq_GetCurrentAnimation(obj);
local castAniTime = sq_GetFrameStartTime(animation, 6);
local speedRate = castAniTime.tofloat() / castTime.tofloat();
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
sq_StartDrawCastGauge(obj, castAniTime, true);
local var = obj.getVar();
var.setBool(0,false);
addElementalChain_ATMage(obj, ENUM_ELEMENT_LIGHT);
}
function setLightningWallState(obj, state)
{
if(!obj || !obj.isMyControlObject())
return;
local count = obj.getMyPassiveObjectCount(24218);
for(local i =0; i<count ; ++i) {
local wall = obj.getMyPassiveObject(24218,i);
if(wall) {
local var = obj.getVar();
local isSendMove = var.getBool(0);
if(state == PO_LIGHTNING_WALL_DESTROY) // 桧嘐 桧翕酝橾隆 赅暮桧 镞模 腑棻坚 饵塭虽虽 强朝棻.
{
if(wall.getState() != PO_LIGHTNING_WALL_MOVE)
wall.sendStateOnlyPacket(PO_LIGHTNING_WALL_DESTROY);
}
else
{
wall.sendStateOnlyPacket(state);
}
}
}
}
function onEndCurrentAni_LightningWall(obj)
{
if(!obj) return;
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
function onProc_LightningWall(obj)
{
if(!obj)
return;
local var = obj.getVar();
if(obj.isMyControlObject() && var.getBool(0) == false && sq_GetCurrentFrameIndex(obj) > 20)
{
setLightningWallState(obj,PO_LIGHTNING_WALL_MOVE);
sq_flashScreen(obj, 0, 1000,500, 180, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
var.setBool(0,true);
obj.sq_PlaySound("LIGHTWALL_SHOT");
}
}
function onKeyFrameFlag_LightningWall(obj, flagIndex)
{
if(!obj) return true;
if (flagIndex == 1) {
sq_EndDrawCastGauge(obj);
sq_EffectLayerAppendageOnlyBody(obj, sq_RGB(255,255,255), 255, 0, 0, 320);
if(obj.isMyControlObject()) {
local yByDirection = -1;
if(obj.getDirection() != ENUM_DIRECTION_RIGHT)
yByDirection = 1;
local moveDistance = sq_GetIntData(obj, SKILL_LIGHTNING_WALL, 2); //2: 桧翕 剪葬
local attackPower = obj.sq_GetBonusRateWithPassive(SKILL_LIGHTNING_WALL , STATE_LIGHTNING_WALL, 0, 1.0);
local skill_level = sq_GetSkillLevel(obj, SKILL_LIGHTNING_WALL);
local prob = sq_GetLevelData(obj, SKILL_LIGHTNING_WALL, 2, skill_level)/10.0; // 2. 马瞪 ?睦 (0.1%)
local level = sq_GetLevelData(obj, SKILL_LIGHTNING_WALL, 1, skill_level); // 1. 马瞪 溯涟
local duration = sq_GetLevelData(obj, SKILL_LIGHTNING_WALL, 4, skill_level); // 4. 虽楼卫除
local lightDamage = sq_GetLevelData(obj, SKILL_LIGHTNING_WALL, 3, skill_level); // 3. 马瞪 奢问溘
// 塭桧?棚 错 当撩
obj.sq_StartWrite();
obj.sq_WriteDword(moveDistance); // 迹瞳虽 x 谢?
obj.sq_WriteDword(attackPower);
obj.sq_WriteDword(skill_level);
obj.sq_WriteFloat(prob);
obj.sq_WriteDword(level);
obj.sq_WriteDword(duration);
obj.sq_WriteDword(lightDamage);
obj.sq_SendCreatePassiveObjectPacket(24218, 0, 50, -1, 0);
}
}
else if (flagIndex == 2) {
sq_EffectLayerAppendageOnlyBody(obj, sq_RGB(255,255,255), 255, 0, 0, 400);
}
else if (flagIndex == 3) {
// 塭桧?棚 错 桧翕
sq_SetMyShake(obj,4,300);
}
return true;
}