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

343 lines
12 KiB
Plaintext

// 塭桧?棚 错卫缣 当撩肾朝 维暧 潍虞
PO_LIGHTNING_WALL_CREATE <- 2; // ?卫粽 螃粽薛?朝 state陛 2睡搅 卫蒙?棻.
PO_LIGHTNING_WALL_MOVE <- 3;
PO_LIGHTNING_WALL_DESTROY <- 4;
PO_LIGHTNING_VAR_LIGHTNING_1 <- 0;
PO_LIGHTNING_VAR_LIGHTNING_2 <- 1;
PO_LIGHTNING_VAR_TARGET_X_POS <- 2;
PO_LIGHTNING_VAR_DIRECTION <- 3; // 潍虞暧 寞?擎 ?鼻 伪晦 阳侥缣 蟾晦 寞?击 荡潍
PO_LIGHTNING_1_DISTANCE_X <- 61;
PO_LIGHTNING_1_DISTANCE_Y <- 32;
PO_LIGHTNING_2_DISTANCE_X <- -76;
PO_LIGHTNING_2_DISTANCE_Y <- -32;
PO_LIGHTNING_TIMER_BLACK_MARK_SMALL <- 0; // 蒙擎 夥款 濠措 当撩 卫除
PO_LIGHTNING_TIMER_BLACK_MARK_BIG <- 1; // 赎 夥款 濠措 当撩 卫除
PO_LIGHTNING_TIMER_ELEC_MARK_1 <- 2; // 瞪晦 葆觼 1
PO_LIGHTNING_TIMER_ELEC_MARK_2 <- 3; // 瞪晦 葆觼 2
// 蝶鹧? 等桧搅蒂 奁舱?罹 谆桧锷 亵瞰
function lightingWallObjAniResizeing(parentObj, obj){
local parentChr = parentObj.getTopCharacter();
if(!parentChr)
return;
local size = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 0);
size = size.tofloat()/100.0;
local ani = sq_GetCurrentAnimation(obj);
if(ani)
ani.resizeWithChild(size);
}
// 饵桧锷 渗?缣 评艇 螃?掸 嫔纂蒂 葬欐.
function getLightningWallPos(obj, offset) {
local parentChr = obj.getTopCharacter();
if(!parentChr)
return offset;
local walllGap = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 0);
offset = offset.tofloat() * (walllGap.tofloat()/100.0);
return offset.tointeger();
}
// 夥款 瞪晦 葆觼 当撩
function lightningWallMakeElectMark(obj, x, y)
{
local randNum = sq_getRandom(0,1);
local elecMark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/8_el-p2_dodge_" + randNum + ".ani", 0, 0, 0);
local x = obj.getXPos() + getLightningWallPos(obj, x);
local y = obj.getYPos() + getLightningWallPos(obj, y);
elecMark.setCurrentPos(x, y, 0);
lightingWallObjAniResizeing(obj, elecMark);
local ani = sq_GetCurrentAnimation(obj);
}
function setCustomData_po_ATLightningWall(obj, receiveData)
{
if(!obj) return;
local moveDistance = receiveData.readDword();
local attackPower = receiveData.readDword();
local skill_level = receiveData.readDword();
local prob = receiveData.readFloat();
local level = receiveData.readDword();
local duration = receiveData.readDword();
local lightDamage = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackPower);
sq_SetChangeStatusIntoAttackInfoWithEtc(attackInfo, 0, ACTIVESTATUS_LIGHTNING ,prob.tointeger() ,level ,duration, lightDamage, 0);
sq_SetCurrentAttackeHitStunTime(attackInfo, 0);
// 谢办 塭桧?棚 偌羹 当撩
local var = obj.getVar();
local lightningObj1 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/5_el-p_normal_1.ani", PO_LIGHTNING_1_DISTANCE_X, PO_LIGHTNING_1_DISTANCE_Y, 0);
local lightningObj2 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/5_el-p_normal_2.ani", PO_LIGHTNING_2_DISTANCE_X, PO_LIGHTNING_2_DISTANCE_Y, 0);
lightingWallObjAniResizeing(obj, lightningObj1);
lightingWallObjAniResizeing(obj, lightningObj2);
var.setObject(PO_LIGHTNING_VAR_LIGHTNING_1, lightningObj1);
var.setObject(PO_LIGHTNING_VAR_LIGHTNING_2, lightningObj2);
local targetXPos = sq_GetDistancePos(50, sq_GetDirection(obj), moveDistance); // 譆谦迹瞳虽 x谢?
var.setInt(PO_LIGHTNING_VAR_TARGET_X_POS, targetXPos);
var.setInt(PO_LIGHTNING_VAR_DIRECTION, sq_GetDirection(obj));
// 维暧 潍虞擎 卫薄鼻 ?鼻 螃艇薹桧横捡 ?棻.
obj.setDirection(ENUM_DIRECTION_RIGHT);
lightingWallObjAniResizeing(obj, obj);
obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_CREATE);
}
function onKeyFrameFlag_po_ATLightningWall(obj, keyIndex)
{
// 当撩卫 霞翕
if(keyIndex == 1) {
sq_SetMyShake(obj,4,200);
return false;
}
return true;
}
function onTimeEvent_po_ATLightningWall(obj, timeEventIndex, timeEventCount)
{
if(timeEventIndex == PO_LIGHTNING_TIMER_BLACK_MARK_SMALL) // 夥款缣 匐湮桧 濠措
{
if(obj.isCurrentAnimationIndex(0)) {
local var = obj.getVar();
local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1);
local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2);
if(lightningObj1) {
local floorMark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/0_bottom_normal_1.ani", 0, 0, 0);
floorMark.setCurrentPos(lightningObj1.getXPos(), lightningObj1.getYPos(), 0);
lightingWallObjAniResizeing(obj, floorMark);
sq_ChangeDrawLayer(floorMark, ENUM_DRAWLAYER_BOTTOM);
}
if(lightningObj2) {
local floorMark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/0_bottom_normal_1.ani", 0, 0, 0);
floorMark.setCurrentPos(lightningObj2.getXPos(), lightningObj2.getYPos(), 0);
lightingWallObjAniResizeing(obj, floorMark);
sq_ChangeDrawLayer(floorMark, ENUM_DRAWLAYER_BOTTOM);
}
return false;
}
else
return true;
}
else if(timeEventIndex == PO_LIGHTNING_TIMER_BLACK_MARK_BIG) // 夥款缣 匐湮桧 濠措
{
if(obj.isCurrentAnimationIndex(0)) {
local randNum = sq_getRandom(0,2);
local floorDark = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/0_bottom_normal_2.ani", 0, 0, 0);
sq_ChangeDrawLayer(floorDark, ENUM_DRAWLAYER_BOTTOM);
lightingWallObjAniResizeing(obj, floorDark);
local floorElec = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/4_el-b_dodge_" + randNum+ ".ani", 0, 0, 0);
sq_ChangeDrawLayer(floorElec, ENUM_DRAWLAYER_BOTTOM);
lightingWallObjAniResizeing(obj, floorElec);
return false;
}
else
return true;
}
else if(timeEventIndex == PO_LIGHTNING_TIMER_ELEC_MARK_1) // 瞪晦 涛鼻
{
if(obj.isCurrentAnimationIndex(0)) {
lightningWallMakeElectMark(obj, PO_LIGHTNING_1_DISTANCE_X , PO_LIGHTNING_1_DISTANCE_Y);
return false;
}
else
return true;
}
else if(timeEventIndex == PO_LIGHTNING_TIMER_ELEC_MARK_2) // 瞪晦 涛鼻
{
if(obj.isCurrentAnimationIndex(0)) {
lightningWallMakeElectMark(obj, PO_LIGHTNING_2_DISTANCE_X , PO_LIGHTNING_2_DISTANCE_Y);
return false;
}
else
return true;
}
return true;
}
function setState_po_ATLightningWall(obj, state, datas)
{
if(!obj) return;
if(state == PO_LIGHTNING_WALL_MOVE) { //桧翕
setCurrentAnimationFromCutomIndex(obj, 0);
obj.sq_SetMoveParticle("Particle/ATLightningWall.ptl", 0.0, 0.0 );// 桧翕 ??赝 虽姜
local parentChr = obj.getTopCharacter();
local size = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 0);
size = size.tofloat()/100.0; //谆桧锷. 谆桧锷陛 觼贼 夥款缣 桧嘐虽蒂 斜葬朝 除问紫 创?棻.
local speed = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 1);
local speedPerSec = speed.tofloat()/1000.0;
local calltime = 55.0/speedPerSec * size;
if(parentChr) {
// 卫薄鼻 塭桧?棚 错擎 ?薹 寞?戏煎虏 尔樯棻. 评塭怃 奁渠寞?缣怃 陈莴唳办 寞?击 庵煎 ?棻.
if(parentChr.getDirection() != obj.getDirection())
speed = -speed;
sq_SetSpeedToMoveParticle(obj,0,speed); // x蹴 蝶?萄 虽姜
}
obj.setTimeEvent(PO_LIGHTNING_TIMER_BLACK_MARK_SMALL, calltime.tointeger(),999,true); // 蒙擎 夥款 濠措 当撩 卫除
calltime = 100.0/speedPerSec * size;
obj.setTimeEvent(PO_LIGHTNING_TIMER_BLACK_MARK_BIG, calltime.tointeger(),999,true); // 赎 夥款 濠措 当撩 卫除
calltime = 90.0/speedPerSec * size;
obj.setTimeEvent(PO_LIGHTNING_TIMER_ELEC_MARK_1, calltime.tointeger(),999,true); // 瞪晦 葆觼
calltime = 110.0/speedPerSec * size;
obj.setTimeEvent(PO_LIGHTNING_TIMER_ELEC_MARK_2, calltime.tointeger(),999,true); // 瞪晦 葆觼
local var = obj.getVar();
local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1);
local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2);
// 桧?? 称桧晦 /|/|/| <- 蹂楛 窒葬 伪擎 桧??
local currentAni = sq_GetCurrentAnimation(lightningObj1);
if(currentAni) {
currentAni.addLayerAnimation(6,sq_CreateAnimation("","PassiveObject/Character/Mage/Animation/ATLightningWall/7_el-p1_dodge_1.ani"),true);
currentAni = sq_GetCurrentAnimation(lightningObj2);
currentAni.addLayerAnimation(6,sq_CreateAnimation("","PassiveObject/Character/Mage/Animation/ATLightningWall/7_el-p1_dodge_2.ani"),true);
}
lightingWallObjAniResizeing(obj, obj);
}
else if(state == PO_LIGHTNING_WALL_DESTROY) {
obj.sq_RemoveMoveParticle(); // 桧翕部
setCurrentAnimationFromCutomIndex(obj, 1); // ?惚 拥栖
lightingWallObjAniResizeing(obj, obj);
local var = obj.getVar();
local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1);
local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2);
if(lightningObj1 && lightningObj2) {
lightningObj1.setValid(false);
lightningObj2.setValid(false);
lightningObj1 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/d5_el-p_normal_1.ani", PO_LIGHTNING_1_DISTANCE_X, PO_LIGHTNING_1_DISTANCE_Y, 0);
lightningObj2 = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATLightningWall/d5_el-p_normal_2.ani", PO_LIGHTNING_2_DISTANCE_X, PO_LIGHTNING_2_DISTANCE_Y, 0);
var.setObject(PO_LIGHTNING_VAR_LIGHTNING_1, lightningObj1);
var.setObject(PO_LIGHTNING_VAR_LIGHTNING_2, lightningObj2);
}
}
}
function onAttack_po_ATLightningWall(obj, damager, boundingBox, isStuck)
{
if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)) {
local parentChr = obj.getTopCharacter();
local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_LIGHTNING_WALL, false, "Character/ATMage/LightningWall/ap_LightningWall.nut", true);
if(parentChr && masterAppendage) {
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , masterAppendage);
local time = sq_GetIntData(parentChr, SKILL_LIGHTNING_WALL, 3); // 虽虽霜 唳霜卫除
local appendageInfo = masterAppendage.getAppendageInfo();
appendageInfo.setValidTime(time);
}
}
return 0;
}
function procAppend_po_ATLightningWall(obj)
{
if(!obj) return;
local var = obj.getVar();
if(!var) return;
local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1);
local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2);
local pos1X = getLightningWallPos(obj, PO_LIGHTNING_1_DISTANCE_X);
local pos1Y = getLightningWallPos(obj, PO_LIGHTNING_1_DISTANCE_Y);
local pos2X = getLightningWallPos(obj, PO_LIGHTNING_2_DISTANCE_X);
local pos2Y = getLightningWallPos(obj, PO_LIGHTNING_2_DISTANCE_Y);
if(lightningObj1)
lightningObj1.setCurrentPos(obj.getXPos() + pos1X.tointeger(), obj.getYPos()+ pos1Y.tointeger(), obj.getZPos()); // ?惚陛 嬴栖塭 ?惚 拥栖煎 掖羹.
if(lightningObj2)
lightningObj2.setCurrentPos(obj.getXPos() + pos2X.tointeger(), obj.getYPos()+ pos2Y.tointeger(), obj.getZPos());
local targetXPos = var.getInt(PO_LIGHTNING_VAR_TARGET_X_POS);
local direction = var.getInt(PO_LIGHTNING_VAR_DIRECTION);
if(direction == ENUM_DIRECTION_RIGHT) {
if(obj.getXPos() > targetXPos)
{
sq_SetCurrentPos(obj, targetXPos, obj.getYPos(), obj.getZPos());
obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_DESTROY);
}
}
else if(direction == ENUM_DIRECTION_LEFT) {
if(obj.getXPos() < targetXPos)
{
sq_SetCurrentPos(obj, targetXPos, obj.getYPos(), obj.getZPos());
obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_DESTROY);
}
}
else {
obj.sendStateOnlyPacket(PO_LIGHTNING_WALL_DESTROY); // 寞?桧 桡戏贼 饵塭虽虽 强挤戏煎 ?惚
}
}
function onEndCurrentAni_po_ATLightningWall(obj)
{
if(!obj) return;
if(obj.isCurrentAnimationIndex(1)) {
if(obj.isMyControlObject())
sq_SendDestroyPacketPassiveObject(obj); // 饵塭虽朝 赅暮? ?惚
}
}
function onDestroyObject_po_ATLightningWall(obj, destroyObj)
{
if(!obj || isSameObject(obj,destroyObj)) {
local var = obj.getVar();
local lightningObj1 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_1);
local lightningObj2 = var.getObject(PO_LIGHTNING_VAR_LIGHTNING_2);
if(lightningObj1)
lightningObj1.setValid(false); // ?惚陛 嬴栖塭 ?惚 拥栖煎 掖羹.
if(lightningObj2)
lightningObj2.setValid(false);
}
local parentChr = obj.getTopCharacter();
if(isSameObject(obj,parentChr)) {
if(obj.isMyControlObject())
sq_SendDestroyPacketPassiveObject(obj);
}
}