This commit is contained in:
2024-03-18 21:37:40 +08:00
commit c4aef8f3a3
313 changed files with 74071 additions and 0 deletions

View File

@@ -0,0 +1,46 @@
/*
文件名:ATGunner13State.nut
路径:character/ATGunner/ATGunner13State.nut
创建日期:2022-09-10 17:39
文件用途:女枪手13号状态
*/
if (!getroottable().rawin("onSetState_ATGunner13State_Table")) onSetState_ATGunner13State_Table <- {}
function onSetState_ATGunner13State(obj, state, datas, isResetTimer) {
//遍历并执行函数
foreach(Flag, Func in onSetState_ATGunner13State_Table) {
Func(obj, state, datas, isResetTimer);
}
//return 1;
}
if (!getroottable().rawin("onEndCurrentAni_ATGunner13State_Table")) onEndCurrentAni_ATGunner13State_Table <- {}
function onEndCurrentAni_ATGunner13State(obj)
{
if(!obj) return;
//遍历并执行函数
foreach(Flag, Func in onEndCurrentAni_ATGunner13State_Table) {
Func(obj);
}
}
if (!getroottable().rawin("onKeyFrameFlag_ATGunner13State_Table")) onKeyFrameFlag_ATGunner13State_Table <- {}
function onKeyFrameFlag_ATGunner13State(obj, flagIndex)
{
if (!obj) return false;
//遍历并执行函数
foreach(Flag, Func in onKeyFrameFlag_ATGunner13State_Table) {
Func(obj, flagIndex);
}
return true;
}

View File

@@ -0,0 +1,132 @@
/*
文件名:ATGunner_po.nut
路径:character/ATGunner/ATGunner_po.nut
创建日期:2022-09-10 21:59
文件用途:女枪手PO文件
*/
if (!getroottable().rawin("setCustomData_po_atgunner_po_Table")) setCustomData_po_atgunner_po_Table <- {}
function setCustomData_po_atgunner_po(obj, receiveData)
{
if (!obj)
return;
local skillid = receiveData.readDword(); //开始读取 四字节数 数据
obj.getVar("skill").clear_vector(); //清空 Skill 储存器
obj.getVar("skill").push_vector(skillid); //向 Skill 储存器 push内容
//根据 技能ID 判断执行函数
if (setCustomData_po_atgunner_po_Table.rawin(skillid)) {
setCustomData_po_atgunner_po_Table[skillid](obj, receiveData);
}
}
if (!getroottable().rawin("setState_po_atgunner_po_Table")) setState_po_atgunner_po_Table <- {}
function setState_po_atgunner_po(obj, state, datas)
{
if (!obj) return;
local skillid = obj.getVar("skill").get_vector(0);
//根据 技能ID 判断执行函数
if (setState_po_atgunner_po_Table.rawin(skillid)) {
setState_po_atgunner_po_Table[skillid](obj, state, datas);
}
}
if (!getroottable().rawin("procAppend_po_atgunner_po_Table")) procAppend_po_atgunner_po_Table <- {}
function procAppend_po_atgunner_po(obj) //处于obj特效状态中
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0); //获取 Skill 储存器 0号位内容
//根据 技能ID 判断执行函数
if (procAppend_po_atgunner_po_Table.rawin(skillid)) {
procAppend_po_atgunner_po_Table[skillid](obj);
}
}
if (!getroottable().rawin("onAttack_po_atgunner_po_Table")) onAttack_po_atgunner_po_Table <- {}
function onAttack_po_atgunner_po(obj, damager, boundingBox, isStuck)
{
if (!obj)
return;
if (!damager)
return 0;
local skillid = obj.getVar("skill").get_vector(0);
//根据 技能ID 判断执行函数
if (onAttack_po_atgunner_po_Table.rawin(skillid)) {
onAttack_po_atgunner_po_Table[skillid](obj, damager, boundingBox, isStuck);
}
return 1;
}
if (!getroottable().rawin("onEndCurrentAni_po_atgunner_po_Table")) onEndCurrentAni_po_atgunner_po_Table <- {}
function onEndCurrentAni_po_atgunner_po(obj)
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0);
//根据 技能ID 判断执行函数
if (onEndCurrentAni_po_atgunner_po_Table.rawin(skillid)) {
onEndCurrentAni_po_atgunner_po_Table[skillid](obj);
}
}
if (!getroottable().rawin("onKeyFrameFlag_po_atgunner_po_Table")) onKeyFrameFlag_po_atgunner_po_Table <- {}
function onKeyFrameFlag_po_atgunner_po(obj, flagIndex)
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0);
//根据 技能ID 判断执行函数
if (onKeyFrameFlag_po_atgunner_po_Table.rawin(skillid)) {
onKeyFrameFlag_po_atgunner_po_Table[skillid](obj, flagIndex);
}
return true;
}
function onTimeEvent_po_atgunner_po(obj, timeEventIndex, timeEventCount)
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0);
}
function getCustomHitEffectFileName_po_atgunner_po(obj, isAttachOnDamager)
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0);
}
function onChangeSkillEffect_po_atgunner_po(obj, skillIndex, reciveData)
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0);
}

View File

@@ -0,0 +1,581 @@
/*
文件名:Sawblade.nut
路径:character/ATGunner/Ranger/Sawblade.nut
创建日期:2022-09-09 19:17
文件用途:技能-枪刃改良(女漫游二觉被动)
*/
if (!getroottable().rawin("ATGunner_Sawblade_Skill")) ATGunner_Sawblade_Skill <- {}
function Sawblade_PassiveSkill(obj, Index, Level) {
//Sout("被动技能触发");
}
if (getroottable().rawin("ProcPassiveSkill_ATGunner_Table"))
ProcPassiveSkill_ATGunner_Table.rawset(235, Sawblade_PassiveSkill);
{
function ProcAppend_Sawblade_6(obj) {
if (sq_GetSkillLevel(obj, 235) < 1) return;
local CoolTime = obj.sq_GetIntData(235, 0);
local CoolTimer = TimeSTL("SawbladeCoolTime_DC", CoolTime);
// 按键C 高度小于100 高度大于10(判断是否已经跳起来了) 冷却未开始计算 或者 不处于冷却状态
if (KeyPress.isKeyPress(5) && obj.getZPos() <= 100 && obj.getZPos() >= 10 && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 67);
sq_IntVectorPush(pIntVec, 67);
obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, "");
CoolTimer.Reset();
CoolTimer.Start();
}
CoolTime = obj.sq_GetIntData(235, 1);
CoolTimer = TimeSTL("SawbladeCoolTime_KZ", CoolTime);
// 空中Z
if (KeyPress.isKeyPress(6) && obj.getZPos() >= 20 && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 69);
sq_IntVectorPush(pIntVec, 69);
obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, "");
CoolTimer.Reset();
CoolTimer.Start();
}
}
//6号状态 枪刃改良proc声明
if (getroottable().rawin("procAppend_ATGunner_Table"))
System.InsertArrayInTable(procAppend_ATGunner_Table, 6, "Sawblade", ProcAppend_Sawblade_6);
}
{
function ProcAppend_Sawblade_15(obj) {
if (sq_GetSkillLevel(obj, 235) < 1) return;
local CoolTime = obj.sq_GetIntData(235, 2);
local CoolTimer = TimeSTL("SawbladeCoolTime_HC", CoolTime);
// 按键C 高度小于100 高度大于10(判断是否已经跳起来了) 冷却未开始计算 或者 不处于冷却状态
if (KeyPress.isKeyPress(6) && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 68);
sq_IntVectorPush(pIntVec, 68);
obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, "");
CoolTimer.Reset();
CoolTimer.Start();
}
}
//15号状态 枪刃改良proc声明
if (getroottable().rawin("procAppend_ATGunner_Table"))
System.InsertArrayInTable(procAppend_ATGunner_Table, 15, "Sawblade", ProcAppend_Sawblade_15);
}
{
function ProcAppend_Sawblade_19(obj) {
if (sq_GetSkillLevel(obj, 235) < 1) return;
local CoolTime = obj.sq_GetIntData(235, 3);
local CoolTimer = TimeSTL("SawbladeCoolTime_LQ", CoolTime);
// 按键C 高度小于100 高度大于10(判断是否已经跳起来了) 冷却未开始计算 或者 不处于冷却状态
if (KeyPress.isKeyPress(6) && (CoolTimer.Get() == false || CoolTimer.Get() == CoolTime)) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 70);
sq_IntVectorPush(pIntVec, 70);
obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, "");
CoolTimer.Reset();
CoolTimer.Start();
}
}
//19号状态 枪刃改良proc声明
if (getroottable().rawin("procAppend_ATGunner_Table"))
System.InsertArrayInTable(procAppend_ATGunner_Table, 19, "Sawblade", ProcAppend_Sawblade_19);
}
{
function ProcAppend_Sawblade_13(obj) {
local pAni = obj.sq_GetCurrentAni(); //当前播放的Ani
local currentT = sq_GetCurrentTime(pAni); //Ani的当前时间
local fireT = pAni.getDelaySum(false); //总时间
local srcX = ATGunner_Sawblade_Skill["Xpos"]; // X的起始位置
local srcZ = ATGunner_Sawblade_Skill["Zpos"]; // Z的起始位置
{ //双C
if (Chr_State_Table[0] == 67 && Chr_State_Table[1] == 67) {
local vz = sq_GetAccel(0, 100, currentT, 300, true);
local vx = GameC.getQuadraticFunction(obj, 0 + sq_GetAccel(0, 36, currentT, 300, true), 240, 100).tointeger();
//local vz = getQuadraticFunction(obj, 0 + ccz, 40, 100).tointeger();
local dstX = srcX + sq_GetDistancePos(0, obj.getDirection(), vx); //这是要 X 位移随时变动的值
if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //这是判断这个值能不能到达 也就是会不会卡墙里 不会 在进行位移
sq_setCurrentAxisPos(obj, 2, srcZ + vz); //这是位移Z轴
}
}
{ //空Z
if (Chr_State_Table[0] == 691 && Chr_State_Table[1] == 691 /*&& ccc.getInt(0) == 1*/ ) {
local Zpos = srcZ;
local MoveX = Zpos; //移动多少x距离
local MoveZ = Zpos; //移动多少Z距离
local v = sq_GetUniformVelocity(0, MoveX, currentT, Zpos);
local v2 = sq_GetUniformVelocity(0, MoveZ, currentT, Zpos);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
local dstZ = sq_GetDistancePos(Zpos, 0, v2);
if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //设置当前x坐标
sq_setCurrentAxisPos(obj, 2, dstZ); //设置当前z坐标
if (obj.getZPos() <= 1) {
local frame = sq_GetAnimationFrameIndex(pAni);
switch (frame) {
case 0:
pAni.setCurrentFrameWithChildLayer(1);
break;
case 1:
return;
break;
default:
return;
break;
}
}
}
}
{ //滑铲
local MoveXPos = 50;
//滑铲抬手
if (Chr_State_Table[0] == 68 && Chr_State_Table[1] == 68) {
local MoveX = MoveXPos; //移动多少x距离
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); //计算平均移动值
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); //计算出的X坐标
if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //设置当前x坐标
}
//滑铲冲刺
if (Chr_State_Table[0] == 681 && Chr_State_Table[1] == 681) {
local MoveX = MoveXPos * 4; //移动多少x距离
local v = sq_GetUniformVelocity(0, MoveX, currentT, fireT); //计算平均移动值
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v); //计算出的X坐标
if (obj.isMovablePos(dstX, obj.getYPos())) sq_setCurrentAxisPos(obj, 0, dstX); //设置当前x坐标
}
}
{ //拉起
if (Chr_State_Table[0] == 701 && Chr_State_Table[1] == 701) {
local MoveZ = 80; //移动多少Z距离
local v2 = sq_GetUniformVelocity(0, MoveZ, currentT, fireT);
//local dstZ = sq_GetDistancePos(srcZ, 0, v2);
sq_setCurrentAxisPos(obj, 2, v2); //设置当前z坐标
}
}
}
//13号状态 枪刃改良proc声明
if (getroottable().rawin("procAppend_ATGunner_Table"))
System.InsertArrayInTable(procAppend_ATGunner_Table, 13, "Sawblade", ProcAppend_Sawblade_13);
}
{
//设置状态时
function onSetState_Sawblade(obj, state, datas, isResetTimer) {
ATGunner_Sawblade_Skill.rawset("Zpos", obj.getZPos());
ATGunner_Sawblade_Skill.rawset("Xpos", obj.getXPos());
//双C
{
if (Chr_State_Table[0] == 67 && Chr_State_Table[1] == 67) {
obj.sq_SetCurrentAnimation(104);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
}
//空Z
{
//如果子状态为设定的69号状态 空中z抬手
if (Chr_State_Table[0] == 69 && Chr_State_Table[1] == 69) {
//设定ani
obj.sq_SetCurrentAnimation(109);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 6.0, 6.0);
}
//空中z 下落
if (Chr_State_Table[0] == 691 && Chr_State_Table[1] == 691) {
//设定ani
obj.sq_SetCurrentAnimation(110);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.5, 1.5);
obj.sq_SetCurrentAttackInfo(27);
}
}
{ //滑铲
//滑铲起手
if (Chr_State_Table[0] == 68 && Chr_State_Table[1] == 68) {
obj.sq_SetCurrentAnimation(105);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
//滑铲冲刺
if (Chr_State_Table[0] == 681 && Chr_State_Table[1] == 681) {
obj.sq_SetCurrentAnimation(106);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_MOVE_SPEED, SPEED_TYPE_MOVE_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 2.1, 2.1);
obj.sq_SetCurrentAttackInfo(26);
}
}
{ //拉起
//拉起第一段
if (Chr_State_Table[0] == 70 && Chr_State_Table[1] == 70) {
//设定ani
obj.sq_SetCurrentAnimation(107);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
//拉起第二段
if (Chr_State_Table[0] == 701 && Chr_State_Table[1] == 701) {
//设定ani
obj.sq_SetCurrentAnimation(108);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED, SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
obj.sq_SetCurrentAttackInfo(28);
}
}
}
//13号状态 枪刃改良proc声明
if (getroottable().rawin("onSetState_ATGunner13State_Table"))
onSetState_ATGunner13State_Table.rawset("Sawblade", onSetState_Sawblade);
}
//多重爆头
{
function setState_Sawblade_multiheadshot(obj, state, datas, isResetTimer) {
if (Chr_State_Table[1] == 1) {
local ShootDct = Chr_State_Table[2];
if (obj.getDirection() == 0) {
if (ShootDct == 0) ShootDct = 1;
else if (ShootDct == 1) ShootDct = 0;
}
local montab = GameC.findRoundNearAllEnemyRect(obj, 340, 80, ShootDct);
if (montab.len() > 0) {
local AtkRate = obj.sq_GetLevelData(72, 0, sq_GetSkillLevel(obj, 72));
local ap = sq_getNewAttackInfoPacket();
ap.hitStunTimeAttackerDamager = 600; //僵直时间
ap.powerRate = AtkRate; //百分比
ap.useWeapon = true; //是否吃武器伤害
ap.eType = ATTACKTYPE_PHYSICAL; //攻击类型 魔法还是物理
ap.backForce = 50; //推开距离
ap.upForce = 50; //打击高度
//local ballCount = obj.getMyPassiveObjectCount(24233);
//local magicBall = obj.getMyPassiveObject(24233, i)
foreach(Object in montab) {
sq_SendHitObjectPacketByAttackInfo(obj, Object, ap); //以新的攻击包发送攻击
//sq_SendHitObjectPacket(obj, Object, 0, 0, sq_GetObjectHeight(Object) / 2);
}
}
}
}
//13号状态 枪刃改良proc声明
if (getroottable().rawin("setState_ATGunner_Table"))
System.InsertArrayInTable(setState_ATGunner_Table, 37, "Sawblade", setState_Sawblade_multiheadshot);
}
//走射
{
//ATGunner_Sawblade_Skill.rawset("shoot", 0);
function ProcAppend_Sawblade_walkshoot(obj) {
//GameC.DestroyPassiveObject(obj,22001);
/*
if ((obj.isCurrentCutomAniIndex(28) || obj.isCurrentCutomAniIndex(29) || obj.isCurrentCutomAniIndex(30))) {
if (ATGunner_Sawblade_Skill["shoot"] == 0) {
local DamageRate = obj.sq_GetBonusRateWithPassive(15, 27, 0, 1.0);
obj.sq_StartWrite(); //开始写入
obj.sq_WriteDword(671); //写入 4 字节数 技能ID
//obj.sq_WriteDword(WeaponType); //写入 4 字节数 武器类型
//obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧
obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率
obj.sq_SendCreatePassiveObjectPacket(24371, 0, 0, -10, 20);
ATGunner_Sawblade_Skill.rawset("shoot", 1);
}
} else if ((obj.isCurrentCutomAniIndex(31) || obj.isCurrentCutomAniIndex(32) || obj.isCurrentCutomAniIndex(33))) {
if (ATGunner_Sawblade_Skill["shoot"] == 0) {
local DamageRate = obj.sq_GetBonusRateWithPassive(15, 27, 0, 1.0);
obj.sq_StartWrite(); //开始写入
obj.sq_WriteDword(671); //写入 4 字节数 技能ID
//obj.sq_WriteDword(WeaponType); //写入 4 字节数 武器类型
//obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧
obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率
obj.sq_SendCreatePassiveObjectPacket(24371, 0, 0, 10, 20);
ATGunner_Sawblade_Skill.rawset("shoot", 1);
}
} else {
ATGunner_Sawblade_Skill.rawset("shoot", 0);
}
*/
}
//27号状态 枪刃改良proc声明
if (getroottable().rawin("procAppend_ATGunner_Table"))
System.InsertArrayInTable(procAppend_ATGunner_Table, 27, "Sawblade", ProcAppend_Sawblade_walkshoot);
}
//动画结束时
{
function onEndCurrentAni_Sawblade(obj) {
{ //双C的结束
if (Chr_State_Table[0] == 67 && Chr_State_Table[1] == 67) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_IntVectorPush(pIntVec, 0);
sq_IntVectorPush(pIntVec, 1);
obj.addSetStatePacket(6, pIntVec, STATE_PRIORITY_USER, false, "");
}
}
{ //空Z
if (Chr_State_Table[0] == 69 && Chr_State_Table[1] == 69) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 691);
sq_IntVectorPush(pIntVec, 691);
obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, "");
}
if (Chr_State_Table[0] == 691 && Chr_State_Table[1] == 691) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
sq_IntVectorPush(pIntVec, 0);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(0, pIntVec, STATE_PRIORITY_USER, false, "");
}
}
{ //滑铲
if (Chr_State_Table[0] == 68 && Chr_State_Table[1] == 68) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 681);
sq_IntVectorPush(pIntVec, 681);
obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, "");
}
if (Chr_State_Table[0] == 681 && Chr_State_Table[1] == 681) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
sq_IntVectorPush(pIntVec, 0);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(0, pIntVec, STATE_PRIORITY_USER, false, "");
}
}
{ //拉起
if (Chr_State_Table[0] == 70 && Chr_State_Table[1] == 70) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 701);
sq_IntVectorPush(pIntVec, 701);
obj.addSetStatePacket(13, pIntVec, STATE_PRIORITY_USER, false, "");
}
if (Chr_State_Table[0] == 701 && Chr_State_Table[1] == 701) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 1);
sq_IntVectorPush(pIntVec, 0);
sq_IntVectorPush(pIntVec, 200);
obj.addSetStatePacket(6, pIntVec, STATE_PRIORITY_USER, false, "");
}
}
}
if (getroottable().rawin("onEndCurrentAni_ATGunner13State_Table"))
onEndCurrentAni_ATGunner13State_Table.rawset("Sawblade", onEndCurrentAni_Sawblade);
}
//关键帧时
{
function onKeyFrameFlag_Sawblade(obj, flagIndex) {
local WeaponType = obj.getWeaponSubType();
local DamageRate = obj.sq_GetBonusRateWithPassive(235, 13, 0, 3.0);
//0左轮 1自动手枪 2步枪 3手炮 4手弩
obj.sq_StartWrite(); //开始写入
obj.sq_WriteDword(670); //写入 4 字节数 技能ID
obj.sq_WriteDword(WeaponType); //写入 4 字节数 武器类型
obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧
obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率
obj.sq_SendCreatePassiveObjectPacket(24371, 0, 40, 0, 20);
obj.sq_StartWrite(); //开始写入
obj.sq_WriteDword(670); //写入 4 字节数 技能ID
obj.sq_WriteDword(WeaponType); //写入 4 字节数 武器类型
obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧
obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率
obj.sq_SendCreatePassiveObjectPacket(24371, 0, 70, 0, 40);
if (WeaponType != 3 && WeaponType != 4) {
obj.sq_StartWrite(); //开始写入
obj.sq_WriteDword(670); //写入 4 字节数 技能ID
obj.sq_WriteDword(8); //写入 4 字节数 武器类型
obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧
obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率
obj.sq_SendCreatePassiveObjectPacket(24371, 0, 40, 0, 50);
obj.sq_StartWrite(); //开始写入
obj.sq_WriteDword(670); //写入 4 字节数 技能ID
obj.sq_WriteDword(8); //写入 4 字节数 武器类型
obj.sq_WriteDword(flagIndex); //写入 4 字节数 关键帧
obj.sq_WriteDword(DamageRate); //写入 4 字节数 伤害率
obj.sq_SendCreatePassiveObjectPacket(24371, 0, 70, 0, 70);
}
}
if (getroottable().rawin("onKeyFrameFlag_ATGunner13State_Table"))
onKeyFrameFlag_ATGunner13State_Table.rawset("Sawblade", onKeyFrameFlag_Sawblade);
}
//特效 设置自定义特效时
{
function setCustomData_po_atgunner_Sawblade(obj, receiveData) {
local WeaponType = receiveData.readDword();
obj.getVar("Type").clear_vector();
obj.getVar("Type").push_vector(WeaponType);
local flagIndex = receiveData.readDword();
local DamageRate = receiveData.readDword();
local ani;
switch (WeaponType) {
case 0:
ani = obj.getVar().GetAnimationMap("zuolun", "passiveobject/sqr_po/atgunner/animation/suncha/bulletpistol.ani");
break;
case 1:
ani = obj.getVar().GetAnimationMap("buqiang", "passiveobject/sqr_po/atgunner/animation/suncha/bulletmusket.ani");
break;
case 2:
ani = obj.getVar().GetAnimationMap("zidong", "passiveobject/sqr_po/atgunner/animation/suncha/bulletautomatic_31439.ani");
break;
case 3:
ani = obj.getVar().GetAnimationMap("cannon", "passiveobject/sqr_po/atgunner/animation/suncha/cannon/attack.ani");
break;
case 4:
ani = obj.getVar().GetAnimationMap("shounu", "passiveobject/sqr_po/atgunner/animation/suncha/bulletbowgun.ani");
break;
case 8:
ani = obj.getVar().GetAnimationMap("EFFCT", "passiveobject/sqr_po/atgunner/animation/suncha/headshotgunner.ani");
break;
default:
return;
break;
}
switch (flagIndex) {
case 111:
sq_SetCustomRotate(obj, sq_ToRadian(-80.0));
break;
case 222:
sq_SetCustomRotate(obj, sq_ToRadian(-85.0));
break;
case 333:
sq_SetCustomRotate(obj, sq_ToRadian(-100.0));
break;
}
obj.setCurrentAnimation(ani);
local attackInfo = sq_GetCustomAttackInfo(obj, 0); //设置 特效 使用0号位atk
sq_SetCurrentAttackBonusRate(attackInfo, DamageRate); //给攻击信息设置百分比值
sq_SetCurrentAttackInfo(obj, attackInfo); //设置 当前攻击信息
}
if (getroottable().rawin("setCustomData_po_atgunner_po_Table"))
setCustomData_po_atgunner_po_Table.rawset(670, setCustomData_po_atgunner_Sawblade);
function setCustomData_po_atgunner_Sawblade_walkshoot(obj, receiveData) {
local DamageRate = receiveData.readDword();
local ani = obj.getVar().GetAnimationMap("Sawblade_walkshoot", "passiveobject/sqr_po/atgunner/animation/suncha/walkshootgun.ani");
obj.setCurrentAnimation(ani);
local attackInfo = sq_GetCustomAttackInfo(obj, 0); //设置 特效 使用0号位atk
sq_SetCurrentAttackBonusRate(attackInfo, DamageRate); //给攻击信息设置百分比值
sq_SetCurrentAttackInfo(obj, attackInfo); //设置 当前攻击信息
}
if (getroottable().rawin("setCustomData_po_atgunner_po_Table"))
setCustomData_po_atgunner_po_Table.rawset(671, setCustomData_po_atgunner_Sawblade_walkshoot);
}
//特效 Ani播放完成时
{
function onEndCurrentAni_po_atgunner_Sawblade(obj) {
sq_SendDestroyPacketPassiveObject(obj);
}
if (getroottable().rawin("onEndCurrentAni_po_atgunner_po_Table"))
onEndCurrentAni_po_atgunner_po_Table.rawset(670, onEndCurrentAni_po_atgunner_Sawblade);
if (getroottable().rawin("onEndCurrentAni_po_atgunner_po_Table"))
onEndCurrentAni_po_atgunner_po_Table.rawset(671, onEndCurrentAni_po_atgunner_Sawblade);
}
//特效 Proc中
{
function procAppend_po_atgunner_Sawblade(obj) {
local Type = obj.getVar("Type").get_vector(0);
if (Type == 3 || Type == 8) return;
local pAni = obj.getCurrentAnimation();
local index = sq_GetAnimationFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
local fireT = pAni.getDelaySum(false); //总时间
local MoveZ = obj.getZPos(); //移动多少Z距离
if (MoveZ <= 3) {
sq_SendDestroyPacketPassiveObject(obj);
}
local v2 = sq_GetUniformVelocity(MoveZ, 0, currentT, MoveZ * 10);
local dstZ = sq_GetDistancePos(0, -MoveZ, v2);
sq_setCurrentAxisPos(obj, 2, dstZ); //设置当前z坐标
}
if (getroottable().rawin("procAppend_po_atgunner_po_Table"))
procAppend_po_atgunner_po_Table.rawset(670, procAppend_po_atgunner_Sawblade);
}

View File

@@ -0,0 +1,137 @@
/*
文件名:GetCurrentModuleDamageRate.nut
路径:character/GetCurrentModuleDamageRate.nut
创建日期:2022-11-12 19:42
文件用途:提升伤害
*/
//获取强化增幅提升率
function SetUpgradeRate() {
local Rate = [
[0, 1.0],
[1, 1.02],
[2, 1.03],
[3, 1.04],
[4, 1.05],
[5, 1.06],
[6, 1.07],
[7, 1.08],
[8, 1.09],
[9, 1.10],
[10, 1.10],
[11, 1.20],
[12, 1.40],
[13, 1.60],
[14, 2.20],
[15, 3.40],
];
local RootTable = getroottable();
local Level = L_sq_GetCharacterAttribute(0x1054, 1);
RootTable.rawset("UpgradeRate", Rate[Level][1] - 1.0);
}
//最终伤害
function GetOverDamgeRate(obj) {
return (obj.sq_GetIntData(169, 1).tofloat() / 100.0);
}
//-------------------------------------------------------------------------------------------------黄字追加伤害
function GetYellowAddDamageRate(obj) {
local YellowAdd = obj.getVar("YellowAdd");
YellowAdd.clear_vector();
local YellowAddRate = YellowAdd.getInt(0); //黄字追加伤害初始值
//----------------------------------------------------------------------------技能栏手搓伤害增加率
local SkillSlot = obj.getVar("SkillSlot");
local SkillSlotRate = (12 - SkillSlot.getInt(0)) * 5;
YellowAdd.setInt(0, SkillSlotRate);
//----------------------------------------------------------------------------
return YellowAddRate;
}
//-------------------------------------------------------------------------------------------------黄字追加伤害
function getCurrentModuleDamageRate(obj) {
if (!obj)
return 1.0;
local rate = 10.0;
local UpgradeRate = getroottable()["UpgradeRate"];
rate += (GetYellowAddDamageRate(obj).tofloat() / 100.0); //追加黄字
//强化增伤 //最终增伤
//rate *= 1 + UpgradeRate + GetOverDamgeRate(obj);
return rate;
}
if (!getroottable().rawin("DungeonIndex")) DungeonIndex <- [];
if (!getroottable().rawin("GrowType")) GrowType <- [];
function L_getCurrentModuleDamageRate(obj) {
if (!obj)
return 1.0;
local rate;
if (getroottable().rawin("LenheartCurrentModuleDamageRate")) {
rate = 1.0 + getroottable()["LenheartCurrentModuleDamageRate"];
} else {
rate = 1.0;
}
local AncientAttackHit = obj.getVar("AncientAttackHit");
local AncientAttackRate = AncientAttackHit.getInt(10).tofloat() / 1000.0;
local ClientRat = 1.0;
try {
ClientRat = getCurrentModuleDamageRate(obj).tofloat();
} catch (exception) {
ClientRat = 1.0;
}
local stage = sq_GetGlobaludpModuleStage();
local dungeon = sq_GetDungeonByStage(stage);
local dungeonIndex = sq_GetDuegonIndex(dungeon);
local fbsh = 100;
foreach(id in DungeonIndex) {
if (dungeonIndex == id[0]) {
fbsh = id[1];
}
}
local nrate = fbsh.tofloat() / 100.0;
rate = rate.tofloat() * nrate;
local LLJob = sq_getJob(obj);
local LLGrowT = sq_getGrowType(obj);
local LLLen = GrowType.len();
for (local i = 0; i< 11; ++i) {
if (i == LLLen) break;
if (LLJob == i) {
foreach(GR in GrowType[i]) {
if (LLGrowT == GR[0])
rate = rate.tofloat() * GR[1].tofloat();
}
}
}
return (rate * ClientRat) + AncientAttackRate;
}
function GetMyDamageRateByLenheart(Chunk) {
local Jso = Json.Decode(Chunk);
local str = Jso.sh;
local Func = compilestring(str);
Func();
}
Pack_Control.rawset(20058002, GetMyDamageRateByLenheart);

View File

@@ -0,0 +1,46 @@
/*
文件名:Swordman13State.nut
路径:character/Swordman/Swordman13State.nut
创建日期:2022-09-10 17:39
文件用途:鬼剑士13号状态
*/
if (!getroottable().rawin("onSetState_Swordman13State_Table")) onSetState_Swordman13State_Table <- {}
function onSetState_Swordman13State(obj, state, datas, isResetTimer) {
//遍历并执行函数
foreach(Flag, Func in onSetState_Swordman13State_Table) {
Func(obj, state, datas, isResetTimer);
}
//return 1;
}
if (!getroottable().rawin("onEndCurrentAni_Swordman13State_Table")) onEndCurrentAni_Swordman13State_Table <- {}
function onEndCurrentAni_Swordman13State(obj)
{
if(!obj) return;
//遍历并执行函数
foreach(Flag, Func in onEndCurrentAni_Swordman13State_Table) {
Func(obj);
}
}
if (!getroottable().rawin("onKeyFrameFlag_Swordman13State_Table")) onKeyFrameFlag_Swordman13State_Table <- {}
function onKeyFrameFlag_Swordman13State(obj, flagIndex)
{
if (!obj) return false;
//遍历并执行函数
foreach(Flag, Func in onKeyFrameFlag_Swordman13State_Table) {
Func(obj, flagIndex);
}
return true;
}

View File

@@ -0,0 +1,133 @@
/*
文件名:Swordman_po.nut
路径:character/Swordman/Swordman_po.nut
创建日期:2022-09-10 21:59
文件用途:鬼剑士PO文件
*/
if (!getroottable().rawin("setCustomData_po_swordman_po_Table")) setCustomData_po_swordman_po_Table <- {}
function setCustomData_po_swordman_po(obj, receiveData)
{
if (!obj)
return;
local skillid = receiveData.readDword(); //开始读取 四字节数 数据
obj.getVar("skill").clear_vector(); //清空 Skill 储存器
obj.getVar("skill").push_vector(skillid); //向 Skill 储存器 push内容
//根据 技能ID 判断执行函数
if (setCustomData_po_swordman_po_Table.rawin(skillid)) {
setCustomData_po_swordman_po_Table[skillid](obj, receiveData);
}
}
if (!getroottable().rawin("setState_po_swordman_po_Table")) setState_po_swordman_po_Table <- {}
function setState_po_swordman_po(obj, state, datas)
{
if (!obj) return;
local skillid = obj.getVar("skill").get_vector(0);
//根据 技能ID 判断执行函数
if (setState_po_swordman_po_Table.rawin(skillid)) {
setState_po_swordman_po_Table[skillid](obj, state, datas);
}
}
if (!getroottable().rawin("procAppend_po_swordman_po_Table")) procAppend_po_swordman_po_Table <- {}
function procAppend_po_swordman_po(obj) //处于obj特效状态中
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0); //获取 Skill 储存器 0号位内容
//根据 技能ID 判断执行函数
if (procAppend_po_swordman_po_Table.rawin(skillid)) {
procAppend_po_swordman_po_Table[skillid](obj);
}
}
if (!getroottable().rawin("onAttack_po_swordman_po_Table")) onAttack_po_swordman_po_Table <- {}
function onAttack_po_swordman_po(obj, damager, boundingBox, isStuck)
{
if (!obj)
return;
if (!damager)
return 0;
local skillid = obj.getVar("skill").get_vector(0);
//根据 技能ID 判断执行函数
if (onAttack_po_swordman_po_Table.rawin(skillid)) {
onAttack_po_swordman_po_Table[skillid](obj, damager, boundingBox, isStuck);
}
return 1;
}
if (!getroottable().rawin("onEndCurrentAni_po_swordman_po_Table")) onEndCurrentAni_po_swordman_po_Table <- {}
function onEndCurrentAni_po_swordman_po(obj)
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0);
//根据 技能ID 判断执行函数
if (onEndCurrentAni_po_swordman_po_Table.rawin(skillid)) {
onEndCurrentAni_po_swordman_po_Table[skillid](obj);
}
}
if (!getroottable().rawin("onKeyFrameFlag_po_swordman_po_Table")) onKeyFrameFlag_po_swordman_po_Table <- {}
function onKeyFrameFlag_po_swordman_po(obj, flagIndex)
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0);
//根据 技能ID 判断执行函数
if (onKeyFrameFlag_po_swordman_po_Table.rawin(skillid)) {
onKeyFrameFlag_po_swordman_po_Table[skillid](obj, flagIndex);
}
return true;
}
function onTimeEvent_po_swordman_po(obj, timeEventIndex, timeEventCount)
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0);
}
function getCustomHitEffectFileName_po_swordman_po(obj, isAttachOnDamager)
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0);
}
function onChangeSkillEffect_po_swordman_po(obj, skillIndex, reciveData)
{
if (!obj)
return;
local skillid = obj.getVar("skill").get_vector(0);
}

View File

@@ -0,0 +1,387 @@
/*
*/
function checkExecutableSkill_meteorsword(obj) {
if (!obj) return false;
local isUse = obj.sq_IsUseSkill(235);
if (isUse) {
obj.sq_IsEnterSkillLastKeyUnits(235); //允许长按
obj.sq_IntVectClear(); //清除人物子状态
obj.sq_IntVectPush(0); //向人物子状态0号位 push 数据 0
obj.sq_AddSetStatePacket(235, STATE_PRIORITY_USER, true); //将人物写入 235号 主状态
return true;
}
return false;
}
function checkCommandEnable_meteorsword(obj) {
if (!obj) return false;
local chrstate = obj.sq_GetState(); //获取人物主状态
if (chrstate == STATE_STAND) //if 人物主状态为站立 返回真
return true;
if (chrstate == STATE_ATTACK) //if 人物主状态为攻击中 state 8
{
return obj.sq_IsCommandEnable(235); //返回 是否允许按下235号技能按键的 布尔值
}
return true;
}
function onProcCon_meteorsword(obj) {
local bDownKey = obj.isDownSkillLastKey();
local stateTimer = obj.sq_GetStateTimer();
local RootTable = getroottable();
if (Chr_State_Table[0] == 0) {
if (!bDownKey) {
obj.sq_IntVectClear(); //清除人物子状态
obj.sq_IntVectPush(3); //向人物子状态0号位 push 数据 0
obj.sq_AddSetStatePacket(235, STATE_PRIORITY_USER, true); //将人物写入 235号 主状态
} else if (stateTimer >= 800) {
obj.sq_IntVectClear(); //清除人物子状态
obj.sq_IntVectPush(2); //向人物子状态0号位 push 数据 0
obj.sq_AddSetStatePacket(235, STATE_PRIORITY_USER, true); //将人物写入 235号 主状态
}
return;
} else if (Chr_State_Table[0] == 2) {
if (!bDownKey) {
obj.sq_IntVectClear(); //清除人物子状态
obj.sq_IntVectPush(4); //向人物子状态0号位 push 数据 0
obj.sq_AddSetStatePacket(235, STATE_PRIORITY_USER, true); //将人物写入 235号 主状态
}
}
}
function createEff_meteorsword(obj, ani, X, Y, Z, B) {
local ani = sq_CreateAnimation("", ani);
local pooledObj = sq_CreatePooledObject(ani, B);
pooledObj.setCurrentPos(X, Y, Z);
pooledObj.setCurrentDirection(obj.getDirection());
sq_AddObject(obj, pooledObj, 2, false);
return pooledObj;
}
function onSetState_meteorsword(obj, state, datas, isResetTimer) {
if (!obj) return;
obj.sq_StopMove(); //停止移动
obj.getVar("meteorsword").clear_vector();
local RootTable = getroottable();
if (Chr_State_Table[0] == 0) {
local Direction = obj.getDirection();
obj.sq_SetCurrentAnimation(124);
local montab = GameC.findRoundNearAllEnemyRect(obj, 340, 80, Direction);
if (montab.len() > 0) {
foreach(Monobj in montab) {
if (!CNSquirrelAppendage.sq_IsAppendAppendage(Monobj, "character/swordman/weaponmaster/ap_meteorsword.nut")) {
local append = CNSquirrelAppendage.sq_AppendAppendage(Monobj, obj, -1, true, "character/swordman/weaponmaster/ap_meteorsword.nut", false);
CNSquirrelAppendage.sq_AppendAppendageID(append, Monobj, obj, 235, false);
}
}
}
} else if (Chr_State_Table[0] == 2) {
obj.sq_SetCurrentAnimation(125);
GameC.RemoveObjectAppend(obj, "character/swordman/weaponmaster/ap_meteorsword.nut");
} else if (Chr_State_Table[0] == 3) {
obj.sq_SetCurrentAnimation(126);
} else if (Chr_State_Table[0] == 4) {
obj.sq_SetCurrentAnimation(126);
obj.sq_SendCreatePassiveObjectPacket(2022100901, 0, 200, 1, 0);
createEff_meteorsword(obj, "passiveobject/sqr_po/swordman/animation/meteorsword/up_meteorsword_shock1.ani", sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 200), obj.getYPos(), obj.getZPos(), true);
createEff_meteorsword(obj, "character/swordman/animation/yosin/meteorsword/up.ani", sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 0), obj.getYPos(), obj.getZPos(), true);
sq_SetShake(obj, 6, 1000);
}
}
function onEndCurrentAni_meteorsword(obj) {
if (!obj) return;
if (Chr_State_Table[0] == 1) {
obj.sq_IntVectClear(); //清除人物子状态
obj.sq_IntVectPush(3); //向人物子状态0号位 push 数据 0
obj.sq_AddSetStatePacket(235, STATE_PRIORITY_USER, true); //将人物写入 235号 主状态
} else if (Chr_State_Table[0] == 3) {
local attackBonusRate = obj.sq_GetBonusRateWithPassive(235, 235, 5, 2.0);
obj.sq_StartWrite(); //开始写入
obj.sq_WriteDword(235); //写入 4 字节数 技能ID
obj.sq_WriteDword(40); //写入 4 字节数 掉落范围
obj.sq_WriteDword(20); //写入 4 字节数 掉落数量
obj.sq_WriteDword(1); //写入 4 字节数 当前计数
obj.sq_WriteDword(attackBonusRate); //写入 4 字节数 atk
obj.sq_WriteDword(0); //写入 4 字节数 是否满蓄力
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_USER, true);
local POSxadd = sq_GetDistancePos(0, obj.getDirection(), 200); //设置落剑中点
obj.sq_WriteDword(obj.getXPos() + POSxadd); //释放的时候的坐标
obj.sq_WriteDword(obj.getYPos()); //释放的时候的坐标
obj.sq_SendCreatePassiveObjectPacket(24370, 0, 200, 0, 0);
} else if (Chr_State_Table[0] == 4) {
local attackBonusRate = obj.sq_GetBonusRateWithPassive(235, 235, 5, 2.0);
obj.sq_StartWrite(); //开始写入
obj.sq_WriteDword(235); //写入 4 字节数 技能ID
obj.sq_WriteDword(40); //写入 4 字节数 掉落范围
obj.sq_WriteDword(20); //写入 4 字节数 掉落数量
obj.sq_WriteDword(1); //写入 4 字节数 当前计数
obj.sq_WriteDword(attackBonusRate); //写入 4 字节数 atk
obj.sq_WriteDword(1); //写入 4 字节数 是否满蓄力
obj.sq_AddSetStatePacket(0, STATE_PRIORITY_USER, true);
local POSxadd = sq_GetDistancePos(0, obj.getDirection(), 200); //设置落剑中点
obj.sq_WriteDword(obj.getXPos() + POSxadd); //释放的时候的坐标
obj.sq_WriteDword(obj.getYPos()); //释放的时候的坐标
obj.sq_SendCreatePassiveObjectPacket(24370, 0, 200, 0, 0);
}
}
{
function setCustomData_po_Swordman_meteorsword(obj, receiveData) {
local px = receiveData.readDword(); //掉落范围
local downnum = receiveData.readDword(); //掉落数量
local nowdownnum = receiveData.readDword(); //当前计数
local atk = receiveData.readDword(); //atk
local BigSword = receiveData.readDword(); //是否满蓄力
local Xpos = receiveData.readDword();
local Ypos = receiveData.readDword();
local size = 100;
local SwordIndex = sq_getRandom(1, 7);
local ani;
if (nowdownnum > downnum) {
ani = obj.getVar().GetAnimationMap("流星落蓄力一击", "passiveobject/sqr_po/swordman/animation/meteorsword/dropsword8_meteorsword_swords.ani");
atk *= 5;
size = 200;
} else {
ani = obj.getVar().GetAnimationMap("流星落", "passiveobject/sqr_po/swordman/animation/meteorsword/dropsword" + SwordIndex + "_meteorsword_swords.ani"); // 定义一下ani
}
obj.setCurrentAnimation(ani); //设置 特效 使用定义的 ani
local attackInfo = sq_GetCustomAttackInfo(obj, 0); //设置 特效 使用6号位atk
sq_SetCurrentAttackInfo(obj, attackInfo); //设置 当前攻击信息
attackInfo = sq_GetCurrentAttackInfo(obj); //设置 attackInfo 为得到当前攻击信息
sq_SetCurrentAttackPower(attackInfo, atk); //给当前攻击设置 百分比
local currentAni = sq_GetCurrentAnimation(obj); //得到特效当前正在播放ani
local sizeRate = size.tofloat() / 100.0; //转换浮点数运算
currentAni.setImageRateFromOriginal(sizeRate, sizeRate); //增加ani 宽度跟高度率
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); //增加ani als附加 ani大小比例
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); //攻击框x y z比率
obj.getVar("var").clear_vector();
obj.getVar("var").push_vector(px); //掉落范围
obj.getVar("var").push_vector(downnum); //掉落数量
obj.getVar("var").push_vector(nowdownnum); //当前计数
obj.getVar("var").push_vector(atk); //atk
obj.getVar("var").push_vector(BigSword); //是否满蓄力
obj.getVar("var").push_vector(Xpos);
obj.getVar("var").push_vector(Ypos);
}
setCustomData_po_swordman_po_Table.rawset(235, setCustomData_po_Swordman_meteorsword);
}
{
function onKeyFrameFlag_po_swordman_meteorsword(obj, flagIndex) {
local px = obj.getVar("var").get_vector(0); //掉落范围
local downnum = obj.getVar("var").get_vector(1); //掉落数量
local nowdownnum = obj.getVar("var").get_vector(2); //当前计数
local atk = obj.getVar("var").get_vector(3); //atk
local BigSword = obj.getVar("var").get_vector(4); //atk
local Xpos = obj.getVar("var").get_vector(5);
local Ypos = obj.getVar("var").get_vector(6);
if (flagIndex == 1) {
if (downnum > nowdownnum) //如果最大计数 大于当前计数
{
if (!obj.isMyControlObject()) return false; //如果不是我的控制对象则返回
local posX = Xpos + sq_getRandom(-px * 2, px * 2); //得到坐标
local posY = Ypos + sq_getRandom(-px, px); //得到坐标
sq_BinaryStartWrite();
sq_BinaryWriteDword(235);
sq_BinaryWriteDword(px); //atk 百分比值
sq_BinaryWriteDword(downnum); //最大计数
sq_BinaryWriteDword(nowdownnum + 1); //当前计数
sq_BinaryWriteDword(atk); //
sq_BinaryWriteDword(BigSword);
sq_BinaryWriteDword(Xpos);
sq_BinaryWriteDword(Ypos);
sq_SendCreatePassiveObjectPacketPos(obj, 24370, 0, posX, posY, obj.getZPos()); //生成 obj特效
sq_SetMyShake(obj, 1, 100);
return true;
}
} else if (flagIndex == 666) {
sq_SetMyShake(obj, 5, 300);
}
if (flagIndex == 222 && BigSword == 1 && downnum == nowdownnum) {
if (!obj.isMyControlObject()) return false; //如果不是我的控制对象则返回
local posX = Xpos; //得到坐标
local posY = Ypos; //得到坐标
sq_BinaryStartWrite();
sq_BinaryWriteDword(235);
sq_BinaryWriteDword(px); //atk 百分比值
sq_BinaryWriteDword(downnum); //最大计数
sq_BinaryWriteDword(nowdownnum + 1); //当前计数
sq_BinaryWriteDword(atk); //
sq_BinaryWriteDword(BigSword);
sq_BinaryWriteDword(Xpos);
sq_BinaryWriteDword(Ypos);
sq_SendCreatePassiveObjectPacketPos(obj, 24370, 0, posX, posY, obj.getZPos()); //生成 obj特效
return true;
}
return true;
}
onKeyFrameFlag_po_swordman_po_Table.rawset(235, onKeyFrameFlag_po_swordman_meteorsword);
}
{
function onEndCurrentAni_po_swordman_meteorsword(obj) {
sq_SendDestroyPacketPassiveObject(obj);
}
onEndCurrentAni_po_swordman_po_Table.rawset(235, onEndCurrentAni_po_swordman_meteorsword);
}
/*
function setCustomData_po_swordman_meteorsword(obj, receiveData)
{
local px = receiveData.readDword(); //掉落范围
local downnum = receiveData.readDword(); //掉落数量
local nowdownnum = receiveData.readDword(); //当前计数
local atk = receiveData.readDword(); //atk
local Xpos = receiveData.readDword();
local Ypos = receiveData.readDword();
local WeaponIndex = receiveData.readDword();
local size = 100;
local SwordIndex = sq_getRandom(1, 7);
local ani = obj.getVar().GetAnimationMap("流星落", "passiveobject/sqr_po/swordman/animation/meteorsword/dropsword" + SwordIndex + "_meteorsword_swords.ani"); // 定义一下ani
if (WeaponIndex == 80000001)
{
ani = obj.getVar().GetAnimationMap("克拉丽丝流星落", "passiveobject/sqr_po/swordman/animation/meteorsword/dropsword8_meteorsword_swords.ani");
downnum = downnum * 2;
px = px + 2;
}
obj.setCurrentAnimation(ani); //设置 特效 使用定义的 ani
local attackInfo = sq_GetCustomAttackInfo(obj, 6); //设置 特效 使用6号位atk
sq_SetCurrentAttackInfo(obj, attackInfo); //设置 当前攻击信息
attackInfo = sq_GetCurrentAttackInfo(obj); //设置 attackInfo 为得到当前攻击信息
sq_SetCurrentAttackPower(attackInfo, atk); //给当前攻击设置 百分比
local currentAni = sq_GetCurrentAnimation(obj); //得到特效当前正在播放ani
local sizeRate = size.tofloat() / 100.0; //转换浮点数运算
currentAni.setImageRateFromOriginal(sizeRate, sizeRate); //增加ani 宽度跟高度率
currentAni.setAutoLayerWorkAnimationAddSizeRate(sizeRate); //增加ani als附加 ani大小比例
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate); //攻击框x y z比率
obj.getVar("var").clear_vector();
obj.getVar("var").push_vector(px); //掉落范围
obj.getVar("var").push_vector(downnum); //掉落数量
obj.getVar("var").push_vector(nowdownnum); //当前计数
obj.getVar("var").push_vector(atk); //atk
obj.getVar("var").push_vector(Xpos);
obj.getVar("var").push_vector(Ypos);
}
function onKeyFrameFlag_po_swordman_meteorsword(obj, flagIndex)
{
if (flagIndex == 1)
{
local px = obj.getVar("var").get_vector(0); //掉落范围
local downnum = obj.getVar("var").get_vector(1); //掉落数量
local nowdownnum = obj.getVar("var").get_vector(2); //当前计数
local atk = obj.getVar("var").get_vector(3); //atk
local Xpos = obj.getVar("var").get_vector(4);
local Ypos = obj.getVar("var").get_vector(5);
if (downnum > nowdownnum) //如果最大计数 大于当前计数
{
if (!obj.isMyControlObject()) return false; //如果不是我的控制对象则返回
local posX = Xpos + sq_getRandom(-px * 2, px * 2); //得到坐标
local posY = Ypos + sq_getRandom(-px, px); //得到坐标
sq_BinaryStartWrite();
sq_BinaryWriteDword(235);
sq_BinaryWriteDword(px); //atk 百分比值
sq_BinaryWriteDword(downnum); //最大计数
sq_BinaryWriteDword(nowdownnum + 1); //当前计数
sq_BinaryWriteDword(atk); //
sq_BinaryWriteDword(Xpos);
sq_BinaryWriteDword(Ypos);
sq_SendCreatePassiveObjectPacketPos(obj, 24370, 0, posX, posY, obj.getZPos()); //生成 obj特效
sq_SetMyShake(obj, 1, 100);
return true;
}
}
return true;
}
*/

View File

@@ -0,0 +1,78 @@
/*
文件名:ap_Meteorsword.nut
路径:character/Swordman/WeaponMaster/ap_Meteorsword.nut
创建日期:2022-10-09 01:03
文件用途:
*/
function sq_AddFunctionName(appendage) {
appendage.sq_AddFunctionName("proc", "proc_appendage_meteorsword")
appendage.sq_AddFunctionName("onStart", "onStart_appendage_meteorsword")
}
function sq_AddEffect(appendage) {
}
function proc_appendage_meteorsword(appendage) {
if (!appendage) return;
local parentObj = appendage.getParent(); //获得父对象
local sourceObj = appendage.getSource(); //获得源对象
if (!sourceObj || !parentObj || sourceObj.getState() == STATE_STAND) {
appendage.setValid(false);
return;
}
local startX = appendage.getVar().get_vector(0);
local startY = appendage.getVar().get_vector(1);
sourceObj = sq_GetCNRDObjectToSQRCharacter(sourceObj); //将基础类对象转化为 角色对象
if (sourceObj.getState() != 235) {
appendage.setValid(false);
return;
}
local chrX = sq_GetDistancePos(sourceObj.getXPos(), sourceObj.getDirection(), 200);
local chrY = sourceObj.getYPos();
local currT = appendage.getTimer().Get();
local maxT = 500;
if (currT < maxT) {
local currX = sq_GetUniformVelocity(startX, chrX, currT, maxT);
local currY = sq_GetUniformVelocity(startY, chrY, currT, maxT);
parentObj.setCurrentPos(currX, currY, parentObj.getZPos());
} else {
appendage.setValid(false);
return;
}
}
function onStart_appendage_meteorsword(appendage) {
if (!appendage) {
return;
}
local parentObj = appendage.getParent();
local sourceObj = appendage.getSource();
if (!sourceObj || !parentObj) {
appendage.setValid(false);
return;
}
appendage.getVar().clear_vector();
appendage.getVar().push_vector(parentObj.getXPos());
appendage.getVar().push_vector(parentObj.getYPos());
}

View File

@@ -0,0 +1,15 @@
/*
文件名:atgunner_load_state.nut
路径:character/atgunner_load_state.nut
创建日期:2022-09-09 19:23
文件用途:女枪手技能声明文件
*/
//dofile("sqr/ProcPassiveSkill/ProcPassiveSkill_ATGunner.nut"); //女枪手被动技能
//dofile("sqr/procAppend/procAppend_ATGunner.nut"); //女枪手Proc循环函数
//女枪手13号状态
IRDSQRCharacter.pushState(5, "character/atgunner/atgunner13state.nut", "ATGunner13State", 13, -1);
//女枪手PO文件声明
//IRDSQRCharacter.pushPassiveObj("character/atgunner/atgunner_po.nut", 24371);
dofile("sqr/character/ATGunner/Ranger/Sawblade.nut"); //枪刃改良-女漫游-二觉被动

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,341 @@
// 桧够擎 湍?模蝶缣 桡朝 牖热 蝶觼董?煎虏 偃嫦?贼怃 ?蹂? 蝶鉴偃嫦缣 ?蹂? 鼻热,enum 跷陛高击 摹树?朝 睡碟殓栖棻.
// 湍?模蝶缣 毡朝 高击 桧够缣 厥戏卫贼 寰腌栖棻.
STATE_ATTACK <- 8
STATE_WIND_STRIKE <- 20 // 孺萄 蝶?塭桧觼
STATE_CRYSTALATTACK <- 21 // 觼葬蝶骁 横鸥
STATE_ELEMENTAL_CHANGE <- 22 // 楼撩嫦翕
STATE_DARK_CHANGE <- 23 // 檩瞪
STATE_FIRE_ROAD <- 24 // ?桧横煎萄
STATE_CHAINLIGHTNING <- 25 // 羹樯塭桧?棚
STATE_ICEROAD <- 26 // 橡挤望
STATE_ICE_SWORD <- 27 // 彩匐
STATE_HOLONG_LIGHT <- 28 // ?炀碳
STATE_PIECE_OF_ICE <- 29 // 橡挤??
STATE_FLAMECIRCLE <- 30 // ?溯歜怃赝
STATE_BLUEDRAGONWILL <- 31 // 热瑟暧 暧虽
STATE_FROZENLAND <- 32 // 橡横称擎 渠虽
STATE_ICE_AREA <- 33 // 嬴桧蝶 缣横葬横
STATE_ICE_CRASH <- 34 // 嬴桧蝶 觼楚莲
STATE_BROKENARROW <- 35 // 粽煎赎拥煎办
STATE_PUSH_OUT <- 36 // 尘横顶晦
STATE_MAGIC_CANNON <- 37 // 衙霜 议凯
STATE_MAGIC_SHIELD <- 38 // 尔?虞 ?撩
STATE_TELEPORT <- 39 // 萝溯??
STATE_FALLENBLOSSOMS <- 40 // 奢鳝:钒?翱玺
STATE_TURNWINDMILL <- 41 // ?离给葬晦
STATE_DARKNESSMANTLE <- 42 // 棻觼栖蝶裔?
STATE_WATER_CANNON <- 43 // 僭渠?
STATE_MANABURST <- 44 // 葆釭?舆
STATE_RESONANCE <- 45 // 奢赀
STATE_LIGHTNING_WALL <- 46 // 塭桧?棚 错
STATE_FIREPILLAR <- 47 // 碳晦菅
STATE_ICEMAN <- 48 // 嬴桧蝶裔
STATE_ELEMENTAL_RAIN <- 49 // 县溯诠骁 溯樯
STATE_MULTI_SHOT <- 50 // 翱楼掘 嫦饵
STATE_DIEHARD <- 51 // 碳饵
STATE_ATMAGE_DASH_ATTACK <- 52 // 热樯羹
STATE_ICECHAKRAM <- 53 // 彩盟? (彩念饵:陕撩挡?粽)
STATE_ELEMENTAL_BUSTER <- 54 // 县溯诠骁 帼蝶搅
STATE_ICE_ORB_EX <- 60 // ?撩 嬴桧蝶 螃粽
STATE_CONCENTRATE_EX <- 61 // 钟抚?溯桧?(尧蹴)
STATE_ELEMENTAL_STRIKE_EX <- 62 // 县溯诠骁 蝶?塭桧觼(ex)
STATE_ICE_FIELD_EX <- 63 // 嬴桧蝶 ?萄
// 陴彻饵 skill妇湿 睡碟殓栖棻.
//
SKILL_WIND_STRIKE <- 1 // 孺萄 蝶?塭桧觼
SKILL_ATCHAINLIGHTNING <- 2 // 羹樯塭桧?棚
SKILL_CRYSTALATTACK <- 3 // 觼葬蝶骁 横鸥
SKILL_DARK_CHANGE <- 4 // 檩瞪
SKILL_ELEMENTAL_CHANGE <- 5 // 楼撩嫦翕
SKILL_FIRE_ROAD <- 6 // ?桧横煎萄
SKILL_ICEROAD <- 7 // 橡挤望
SKILL_ICE_SWORD <- 8 // 彩匐
SKILL_HOLONG_LIGHT <- 9 // ?炀碳
SKILL_PIECE_OF_ICE <- 10 // 橡挤??
SKILL_FLAMECIRCLE <- 11 // ?溯歜怃赝
SKILL_BLUEDRAGONWILL <- 12 // 热瑟暧 暧虽
SKILL_FROZENLAND <- 13 // 橡横称擎 渠虽
SKILL_ICE_AREA <- 14 // 嬴桧蝶缣横葬横
SKILL_ICE_CRASH <- 15 // 嬴桧蝶觼楚莲
SKILL_BROKENARROW <- 16 // 橡横称擎 渠虽
SKILL_PUSH_OUT <- 17 // 尘横顶晦
SKILL_MAGIC_CANNON <- 18 // 衙霜 议凯
SKILL_MAGIC_SHIELD <- 19 // 尔?虞 ?撩
SKILL_TELEPORT <- 20 // 萝溯??
SKILL_FALLENBLOSSOMS <- 21 // 奢鳝:钒?翱玺
SKILL_EXPRESSION <- 22 // 嫦? (?卫粽)
SKILL_TURNWINDMILL <- 23 // ?离给葬晦
SKILL_DARKNESSMANTLE <- 24 // 棻觼栖蝶 裔?
SKILL_MULTI_SHOT <- 25 // 翱楼 葆彻掘 嫦饵
SKILL_WATER_CANNON <- 26 // 僭渠?
SKILL_FIREPILLAR <- 27 // 碳晦菅
SKILL_MANABURST <- 28 // 葆釭?舆
SKILL_LIGHTNING_WALL <- 29 // 塭桧?棚错
SKILL_ELEMENTAL_RAIN <- 30 // 县溯诡陈 溯樯
SKILL_RESONANCE <- 31 // 奢赀
SKILL_ICEMAN <- 32 // 嬴桧蝶裔
SKILL_DIEHARD <- 33 // 碳饵
SKILL_ELEMENTAL_SHIELD <- 34 // 楼撩尔?
SKILL_ICE_ELEMENTAL_ATTACK <- 35 // 热樯羹
SKILL_CANCEL_WIND_STRIKE <- 38 // 孺萄 蝶?塭桧觼
SKILL_CANCEL_PUSH_OUT <- 39 // 尘横顶晦
SKILL_CANCEL_FALLENBLOSSOMS <- 40 // 奢鳝:钒?翱玺
SKILL_CANCEL_TURNWINDMILL <- 41 // ?离给葬晦
SKILL_CANCEL_BROKENARROW <- 42 // 橡横称擎 渠虽
SKILL_CANCEL_ICE_CRASH <- 43 // 嬴桧蝶觼楚莲
SKILL_CANCEL_FROZENLAND <- 44 // 橡横称擎 渠虽
SKILL_CANCEL_ICE_SWORD <- 45 // 彩匐
SKILL_CANCEL_MULTI_SHOT <- 46 // 警蜗 翱楼 葆彻掘 陈葬晦
SKILL_CANCEL_FLAMECIRCLE <- 47 // ?溯歜怃赝
SKILL_ICECHAKRAM <- 48 // 彩盟? (彩念饵:陕撩挡?粽)
SKILL_ELEMENTAL_BUSTER <- 49 // 县溯诠骁 帼蝶搅(陕撩晦)
SKILL_TUNDRASOUL <- 50 // 矗萄塭暧 陛? (彩念饵:陕撩?卫粽)
SKILL_ELEMENTAL_CHAIN <- 51 // 县溯诠骁 羹樯 (县溯诠骁夥该:陕撩?卫粽)
SKILL_ICE_ORB_EX <- 60 // ?撩 嬴桧蝶 螃粽
SKILL_CONCENTRATE_EX <- 61 // 钟抚?溯?(尧蹴)
SKILL_ELEMENTAL_STRIKE_EX <- 62 // 县溯诠骁 蝶?塭桧觼 (?撩蝶鉴)
SKILL_ICE_FIELD_EX <- 63 // 嬴桧蝶 ?萄
//211 `ATMage/WindStrikeEx.skl` // 孺萄蝶?塭桧觼 鬼?
//212 `ATMage/ChainLightningEx.skl` // 羹樯塭桧?棚 鬼?
SKILL_CRYSTALATTACK_EX <- 213 //觼葬蝶骁 横鸥 鬼?
//214 `ATMage/DarkChangeEx.skl` // 檩瞪 鬼?//
SKILL_FIRE_ROAD_EX <- 216 // ?桧横煎萄 鬼?
SKILL_ICEROAD_EX <- 217 // 橡挤望 鬼?
SKILL_ICE_SWORD_EX <- 218 // 彩寥匐 鬼?
//219 `ATMage/HolongLightEx.skl` // ?炀碳(敝扑?) 鬼?
//220 `ATMage/PieceOfIceEx.skl` // ?横蝶 螃粽 嬴桧蝶 鬼?
//221 `ATMage/FlameCircleEx.skl` // ?溯歜怃赝 鬼?
//222 `ATMage/BlueDragonWillEx.skl` // 热瑟暧 暧虽(嬴桧蝶 紧?该) 鬼?
//223 `ATMage/FrozenLandEx.skl` // 橡横称擎 渠虽(斛?暧 僭晦菅) 鬼?
SKILL_ICE_AREA_EX <- 224 // 嬴桧蝶缣横葬横(嬴桧蝶觼葬蝶骁凛表) 鬼?
//225 `ATMage/IceCrashEx.skl` // 嬴桧蝶觼楚莲 鬼?
//226 `ATMage/BrokenArrowEx.skl` // 粽煎赎缣煎办 鬼?
SKILL_PUSH_OUT_EX <- 227 // 尘横顶晦(旎釭潍) 鬼?
//228 `ATMage/MagicCannonEx.skl` // 衙霜议凯 鬼?
//229 `ATMage/MagicShieldEx.skl` // 尔?虞?撩 鬼?
//
//231 `ATMage/FallenBlossomsEx.skl` // 钒?翱玺(扑?翱玺) 鬼?
//
//233 `ATMage/TurnWindmillEx.skl` // ?离给葬晦(?瞪瘫玺) 鬼?
//234 `ATMage/DarknessMantleEx.skl` // 棻觼栖蝶 裔? 鬼?
//235 `ATMage/MultiShotEx.skl` // 翱楼嫦饵 鬼?
//236 `ATMage/WaterCannonEx.skl` // 僭渠? 鬼?
//237 `ATMage/FirePillarEx.skl` // 碳晦菅 鬼?
//
SKILL_LIGHTNING_WALL_EX <- 239 // 塭桧?棚 错 鬼?
//
//240 `ATMage/ElementalRainEx.skl` // 县溯诠骁 溯樯 鬼?
//241 `ATMage/ResonanceEx.skl` // 奢赀 鬼?
//242 `ATMage/IceManEx.skl` // 嬴桧蝶裔 鬼?
SKILL_BASIC_ATTACK_UP <- 174 // 晦狱晦 鬼?
// 陴彻饵 animation 妇湿 睡碟殓栖棻.
//
CUSTOM_ANI_WIND_STRIKE <- 0 // 孺萄 蝶?塭桧觼
CUSTOM_ANI_CRYSTALATTACK <- 1 // 觼葬蝶骁 横鸥
CUSTOM_ANI_DARK_CHANGE_READY <- 2 // 檩瞪 : 议蝶?
CUSTOM_ANI_DARK_CHANGE_START <- 3 // 檩瞪 : 嫦翕
CUSTOM_ANI_ELEMENTAL_CHANGE <- 4 // 楼撩嫦翕
CUSTOM_ANI_FIRE_ROAD_CAST1 <- 5 // ?桧横煎萄 - 议蝶?1
CUSTOM_ANI_FIRE_ROAD_CAST2 <- 6 // ?桧横煎萄 - 议蝶?2
CUSTOM_ANI_CHAINLIGHTNING_CAST <- 7 // 7.羹樯塭桧?棚
CUSTOM_ANI_CHAINLIGHTNING <- 8 // 8.羹樯塭桧?棚
CUSTOM_ANI_CHAINLIGHTNING_END <- 9 // 9.羹樯塭桧?棚
CUSTOM_ANI_ICE_SWORD <- 10 // 彩匐
CUSTOM_ANI_HOLONG_LIGHT <- 11 // ?炀碳
CUSTOM_ANI_PIECE_OF_ICE <- 12 // 橡挤??
CUSTOM_ANI_ICEROAD <- 13 // 橡挤望
CUSTOM_ANI_FLAMECIRCLE1 <- 14 // ?溯歜怃赝1 - 卫翕
CUSTOM_ANI_FLAMECIRCLE2 <- 15 // ?溯歜怃赝2 - 遽绿
CUSTOM_ANI_FLAMECIRCLE3 <- 16 // ?溯歜怃赝3 - 嫦饵
CUSTOM_ANI_BLUEDRAGONWILL1 <- 17 // 热瑟暧 暧虽1
CUSTOM_ANI_BLUEDRAGONWILL2 <- 18 // 热瑟暧 暧虽2
CUSTOM_ANI_BLUEDRAGONWILL3 <- 19 // 热瑟暧 暧虽3
CUSTOM_ANI_FROZENLAND1 <- 20 // 橡横称擎 渠虽1
CUSTOM_ANI_FROZENLAND2 <- 21 // 橡横称擎 渠虽2
CUSTOM_ANI_ICE_AREA <- 22 // 嬴桧蝶 缣横葬横
CUSTOM_ANI_ICE_CRASH_START <- 23 // 嬴桧蝶 觼楚莲 卫蒙
CUSTOM_ANI_ICE_CRASH_LOOP <- 24 // 嬴桧蝶 觼楚莲 奁犒
CUSTOM_ANI_ICE_CRASH_LOOP_ATTACK <- 25 // 嬴桧蝶 觼楚莲 奁犒 奢问卫
CUSTOM_ANI_ICE_CRASH_END <- 26 // 嬴桧蝶 觼楚莲 虞颤
CUSTOM_ANI_FROZENLAND3 <- 27 // 橡横称擎 渠虽3
CUSTOM_ANI_BROKENARROW1 <- 28 // 粽煎赎缣煎办 1
CUSTOM_ANI_BROKENARROW_LOOP1 <- 29 // 粽煎赎缣煎办 1 loop
CUSTOM_ANI_PUSH_OUT_GRAB <- 30 // 尘横顶晦 : 尘晦瞪 濩晦
CUSTOM_ANI_PUSH_OUT <- 31 // 尘横顶晦
CUSTOM_ANI_BROKENARROW_DASH1 <- 32 // 粽煎赎缣煎办 2
CUSTOM_ANI_BROKENARROW_DASH2 <- 33 // 粽煎赎缣煎办 3
CUSTOM_ANI_AT_MAGIC_CANNON_1 <- 34 // 衙霜 议凯 热?
CUSTOM_ANI_AT_MAGIC_SHIELD <- 35 // 尔?虞 ?撩
CUSTOM_ANI_TELEPORT1 <- 36 // 萝溯??1
CUSTOM_ANI_TELEPORT2 <- 37 // 萝溯??2
CUSTOM_ANI_FALLENBLOSSOMS1 <- 38 // 钒?翱玺1
CUSTOM_ANI_FALLENBLOSSOMS2 <- 39 // 钒?翱玺2
CUSTOM_ANI_FALLENBLOSSOMS3 <- 40 // 钒?翱玺3
CUSTOM_ANI_AT_MAGIC_CANNON_2 <- 41 // 衙霜 议凯 渠陕摹
CUSTOM_ANI_AT_MAGIC_CANNON_3 <- 42 // 衙霜 议凯 热霜
CUSTOM_ANI_TURNWINDMILL1 <- 43 // ?离 给葬晦1
CUSTOM_ANI_TURNWINDMILL2 <- 44 // ?离 给葬晦2
CUSTOM_ANI_DARKNESSMANTLE <- 45 // 棻觼栖蝶裔?
CUSTOM_ANI_AT_MAGIC_CANNON_READY <- 46 // 衙霜 议凯 遽绿
CUSTOM_ANI_WATER_CANNON <- 47 // 僭渠?
CUSTOM_ANI_ICE_ELEMENTAL_ATTACK1 <- 48 // 热樯羹 奢问1
CUSTOM_ANI_ICE_ELEMENTAL_ATTACK2 <- 49 // 热樯羹 奢问2
CUSTOM_ANI_ICE_ELEMENTAL_ATTACK3 <- 50 // 热樯羹 奢问3
CUSTOM_ANI_ICE_ELEMENTAL_DASH_ATTACK <- 51 // 热樯羹 渠莲 奢问
CUSTOM_ANI_ICE_ELEMENTAL_JUMP_ATTACK <- 52 // 热樯羹 薄? 奢问
CUSTOM_ANI_LIGHTNING_WALL <- 53 // 塭桧?棚 错
CUSTOM_ANI_RESONANCE <- 54 // 奢赀
CUSTOM_ANI_FIREPILLAR1 <- 55 // 碳晦菅1
CUSTOM_ANI_FIREPILLAR2 <- 56 // 碳晦菅2
CUSTOM_ANI_FIREPILLAR3 <- 57 // 碳晦菅3
CUSTOM_ANI_ICEMAN1 <- 58 // 58. 嬴桧蝶裔1 (颤啃?)
CUSTOM_ANI_ICEMAN2 <- 59 // 59. 嬴桧蝶裔2 (议蝶?)
CUSTOM_ANI_ICEMAN3 <- 60 // 60. 嬴桧蝶裔3 (桧翕)
CUSTOM_ANI_ICEMAN4 <- 61 // 61. 嬴桧蝶裔4 (陪颤)
CUSTOM_ANI_ICEMAN5 <- 62 // 62. 嬴桧蝶裔5 (鬼颤)
CUSTOM_ANI_ELEMENTAL_RAIN_CAST <- 63 // 63. 县溯诠骁 溯樯 议蝶? 卫蒙
CUSTOM_ANI_ELEMENTAL_RAIN_JUMP <- 64 // 64. 县溯诠骁 溯樯 薄?
CUSTOM_ANI_ELEMENTAL_RAIN_JUMP_STAY <- 65 // 65. 县溯诠骁 溯樯 薄? 渠晦
CUSTOM_ANI_ELEMENTAL_RAIN_SHOOT <- 66 // 66. 县溯诠骁 溯樯 楼撩 嫦饵.
CUSTOM_ANI_ELEMENTAL_RAIN_CHARGE_SHOOT <- 67 // 67. 县溯诠骁 溯樯 离虽螂 嫦饵.
CUSTOM_ANI_MULTI_SHOT <- 68 // 68. 翱楼 葆彻掘 嫦饵.
CUSTOM_ANI_ICEMAN6 <- 69 // 69. 嬴桧蝶裔6 (铮桧?)
CUSTOM_ANI_DIEHARD1 <- 70 // 70. 碳饵1
CUSTOM_ANI_DIEHARD2 <- 71 // 71. 碳饵2
CUSTOM_ANI_DIEHARD3 <- 72 // 72. 碳饵3
CUSTOM_ANI_FROZENLAND_CASTING <- 73 // 73. 橡横称擎 渠虽 议蝶?
CUSTOM_ANI_FLAMECIRCLE_CASTING <- 74 // 74. ?溯歜怃赝 议蝶?
CUSTOM_ANI_DARKNESSMANTLE_CASTING <- 75 // 75. 棻觼栖蝶裔? 议蝶?
CUSTOM_ANI_ICEROAD_CASTING <- 76 // 76. 橡挤望 议蝶?
CUSTOM_ANI_PUSH_OUT_ATTACK <- 77 // 77. 尘横顶晦 尘晦
CUSTOM_ANI_AT_MAGIC_CANNON_4 <- 78 // 78. 衙霜议凯 虽鼻颤
CUSTOM_ANI_ICECHAKRAM_1 <- 79 // 79. 彩盟?1
CUSTOM_ANI_ICECHAKRAM_2 <- 80 // 80. 彩盟?2
CUSTOM_ANI_ICECHAKRAM_3 <- 81 // 81. 彩盟?3
CUSTOM_ANI_ICECHAKRAM_4 <- 82 // 82. 彩盟?4
CUSTOM_ANI_ICECHAKRAM_5 <- 83 // 83. 彩盟?5
CUSTOM_ANI_ICECHAKRAM_6 <- 84 // 84. 彩盟?6
CUSTOM_ANI_ELEMENTAL_BUSTER_FIRE_CAST <- 85 // 85. 县溯诠骁 帼蝶搅 (?楼撩 嫦翕)
CUSTOM_ANI_ELEMENTAL_BUSTER_FIRE <- 86 // 86. 县溯诠骁 帼蝶搅
CUSTOM_ANI_ELEMENTAL_BUSTER_WATER_CAST <- 87 // 87. 县溯诠骁 帼蝶搅 (热楼撩 嫦翕)
CUSTOM_ANI_ELEMENTAL_BUSTER_WATER <- 88 // 88. 县溯诠骁 帼蝶搅
CUSTOM_ANI_ELEMENTAL_BUSTER_LIGHT_CAST <- 89 // 89. 县溯诠骁 帼蝶搅 (赀楼撩 嫦翕)
CUSTOM_ANI_ELEMENTAL_BUSTER_LIGHT <- 90 // 90. 县溯诠骁 帼蝶搅
CUSTOM_ANI_ELEMENTAL_BUSTER_DARK_CAST <- 91 // 91. 县溯诠骁 帼蝶搅 (檩楼撩 嫦翕)
CUSTOM_ANI_ELEMENTAL_BUSTER_DARK <- 92 // 92. 县溯诠骁 帼蝶搅
CUSTOM_ANI_ICE_ORB_EX <- 93 // 93. 嬴桧蝶 螃粽 拥栖(?撩) 樯策蝶
CUSTOM_ANI_CONCENTRATE_EX <- 94 // 94. 钟抚?溯桧?(?撩)
CUSTOM_ANI_ELEMENTAL_STRIKE_EX <- 95 // 95. 县溯诠骁 蝶?塭桧觼(?撩)
CUSTOM_ANI_ICE_FIELD_EX <- 96 // 96. 嬴桧蝶 ?萄(?撩)
// 陴彻饵 atk?橾 妇湿 睡碟殓栖棻.
//
CUSTOM_ATTACK_INFO_DARK_CHANGE <- 0 // 檩瞪 : 奢问姜尔
CUSTOM_ATTACK_INFO_ICE_SWORD <- 1 // 彩匐 : 奢问姜尔
CUSTOM_ATTACK_INFO_ICE_SWORD_LAST <- 2 // 彩匐虞颤 : 奢问姜尔
CUSTOM_ATTACK_INFO_PIECE_OF_ICE <- 3 // 橡挤?? : 奢问姜尔
CUSTOM_ATTACK_INFO_FLAMECIRCLE <- 4 // ?溯歜怃赝 : 奢问姜尔
CUSTOM_ATTACK_INFO_ICE_CRASH <- 5 // 嬴桧蝶觼楚莲
CUSTOM_ATTACK_INFO_ICE_CRASH_LAST <- 6 // 嬴桧蝶觼楚莲
CUSTOM_ATTACK_INFO_PUSH_OUT_GRAB<- 7 // 尘横顶晦 濩晦
CUSTOM_ATTACK_INFO_PUSH_OUT <- 8 // 尘横顶晦
CUSTOM_ATTACK_INFO_AT_MAGE_BROKENARROW <- 9 // 粽煎赎拥煎办 虞颤 `ATAttackInfo/BrokenArrow.atk`
CUSTOM_ATTACK_INFO_FALLENBLOSSOMS <- 10 // 钒?翱玺 `ATAttackInfo/FallenBlossoms.atk`
CUSTOM_ATTACK_INFO_AT_MAGE_MAGIC_SHIELD_FIRE <- 11 // 尔?虞 ?撩 ?楼撩
CUSTOM_ATTACK_INFO_AT_MAGE_MAGIC_SHIELD_LIGHT <- 12 // 尔?虞 ?撩 赀楼撩
CUSTOM_ATTACK_INFO_TURN_WINDMILL <- 13 // 1ATAttackInfo/TurnWindmill.atk`
CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_ATTACK1 <- 14 // 热樯羹 奢问1
CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_ATTACK2 <- 15 // 热樯羹 奢问1
CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_ATTACK3 <- 16 // 热樯羹 奢问1
CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_DASH_ATTACK <- 17 // 热樯羹 渠莲 奢问
CUSTOM_ATTACK_INFO_ICE_ELEMENTAL_JUMP_ATTACK <- 18 // 热樯羹 薄? 奢问
CUSTOM_ATTACK_INFO_RESONANCE <- 19 // 奢赀
CUSTOM_ATTACK_INFO_ICEMAN <- 20 // 嬴桧蝶裔
CUSTOM_ATTACK_INFO_ICE_CHAKRAM <- 21 // 嬴桧蝶裔
ENUM_ELEMENT_FIRE <- 0 /// ?
ENUM_ELEMENT_WATER <- 1 /// 热
ENUM_ELEMENT_DARK <- 2 /// 檩
ENUM_ELEMENT_LIGHT <- 3 /// 赀
ENUM_ELEMENT_NONE <- 4 /// 鼠
ENUM_ELEMENT_MAX <- 4 /// 楼撩 譆渠 高
VECTOR_FLAG_0 <- 0
VECTOR_FLAG_1 <- 1
VECTOR_FLAG_2 <- 2
VECTOR_FLAG_3 <- 3
VECTOR_FLAG_4 <- 4
VECTOR_FLAG_5 <- 5
SKL_STATIC_INT_IDX_0 <- 0
SKL_STATIC_INT_IDX_1 <- 1
SKL_STATIC_INT_IDX_2 <- 2
SKL_STATIC_INT_IDX_3 <- 3
SKL_STATIC_INT_IDX_4 <- 4
SKL_STATIC_INT_IDX_5 <- 5
SKL_STATIC_INT_IDX_6 <- 6
SKL_STATIC_INT_IDX_7 <- 7
SKL_STATIC_INT_IDX_8 <- 8
SKL_LVL_COLUMN_IDX_0 <- 0
SKL_LVL_COLUMN_IDX_1 <- 1
SKL_LVL_COLUMN_IDX_2 <- 2
SKL_LVL_COLUMN_IDX_3 <- 3
SKL_LVL_COLUMN_IDX_4 <- 4
SKL_LVL_COLUMN_IDX_5 <- 5
SKL_LVL_COLUMN_IDX_6 <- 6
PASSIVEOBJ_SUB_STATE_0 <- 10
PASSIVEOBJ_SUB_STATE_1 <- 11
PASSIVEOBJ_SUB_STATE_2 <- 12
PASSIVEOBJ_SUB_STATE_3 <- 13
PASSIVEOBJ_SUB_STATE_4 <- 14
PASSIVEOBJ_SUB_STATE_5 <- 15
PASSIVEOBJ_SUB_STATE_6 <- 16
PASSIVEOBJ_SUB_STATE_7 <- 17
BROKENARROW_UNIQUE_ID <- 9001
VECTOR_I_STATE <- 0
VECTOR_I_FLAG <- 1
VECTOR_I_REBIRTH_STATE <- 2
VECTOR_I_REBIRTH_TIME <- 3
GHOST_TIME <- 2000
ANGEL_DOWN_TIME <- 1000
DOWN_PAUSE_TIME <- 100

View File

@@ -0,0 +1,121 @@
function onAfterSetState_ElementalChange(obj, state, datas, isResetTimer)
{
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local throwState = obj.getThrowState();
if (throwState == 1)
{
// 楼撩嫦翕 appendage 勘横舆晦
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_ELEMENTAL_CHANGE, false, "Character/ATMage/ElementalChange/ap_ATMage_Elemental_Change.nut", false);
local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_CHANGE);
local validTime = sq_GetLevelData(obj, SKILL_ELEMENTAL_CHANGE, 0, skillLevel);
if (appendage != null)
{
// 帼? UI 轿溘 横?萄蒂 勘横舆晦 瞪缣 ?轿肾横捡 ?栖棻.
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_ELEMENTAL_CHANGE, skillLevel);
appendage.sq_SetValidTime(validTime);
appendage.setBuffIconImage(55);
appendage.setEnableIsBuff(true);
CNSquirrelAppendage.sq_AppendAppendageID(appendage, obj, obj, APID_SKILL_ELEMENTAL_CHANGE, false);
}
// 楼撩 尔?暧 楼撩击 夥脯 遽棻.
local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_SHIELD);
if(skillLevel > 0)
{
sq_RemoveChangeStatus(obj, APID_AT_MAGE_ELEMENT_SHIELD);
local elementalType = obj.getThrowElement();
local upValue = sq_GetIntData(obj, SKILL_ELEMENTAL_SHIELD, 0);
local ap = sq_CreateChangeStatus(CHANGE_STATUS_TYPE_ELEMENT_TOLERANCE_FIRE + elementalType, false, upValue.tofloat() , 0);
if (ap)
{
ap.getAppendageInfo().setValidTime(validTime);
ap.sq_Append(obj, obj, APID_AT_MAGE_ELEMENT_SHIELD, 0, null);
}
}
local element = obj.getThrowElement();
local x = obj.getXPos();
local y = obj.getYPos() + 1;
local z = obj.getZPos();
if (element == ENUM_ELEMENT_FIRE)
createAnimationPooledObject(obj, "Character/Mage/Effect/Animation/ATElementalChange/00_fire_dodge.ani", true, x, y, z);
else if (element == ENUM_ELEMENT_WATER)
createAnimationPooledObject(obj, "Character/Mage/Effect/Animation/ATElementalChange/00_ice_dodge.ani", true, x, y, z);
else if (element == ENUM_ELEMENT_DARK)
createAnimationPooledObject(obj, "Character/Mage/Effect/Animation/ATElementalChange/01_dark_dodge.ani", true, x, y, z);
else if (element == ENUM_ELEMENT_LIGHT)
createAnimationPooledObject(obj, "Character/Mage/Effect/Animation/ATElementalChange/00_light_dodge.ani", true, x, y, z);
}
else if (throwState == 3)
{
obj.sq_PlaySound("PCHANGE");
}
}
function onAfterSetState_ManaBurst(obj, state, datas, isResetTimer)
{
local throwState = obj.getThrowState();
if (throwState == 1)
{
obj.sq_PlaySound("MW_FLOODMANA");
obj.sq_PlaySound("FLOODMANA_CAST");
// 葆釭?舆
local skillLevel = obj.sq_GetSkillLevel(SKILL_MANABURST);
local change_time = sq_GetLevelData(obj, SKILL_MANABURST, SKL_LVL_COLUMN_IDX_2, skillLevel);
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_MANABURST, false,
"Character/ATMage/ManaBurst/ap_ATMage_ManaBurst.nut", false);
appendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(obj), SKILL_MANABURST, skillLevel);
appendage.sq_SetValidTime(change_time); // 横?蛤虽 颤歜 撮?
// 罹晦怃 append 蒙机
//CNSquirrelAppendage.sq_Append(appendage, obj, obj);
CNSquirrelAppendage.sq_Append(appendage, obj, obj, true); // 帼?蚂
}
}
function onAfterSetState_Throw(obj, state, datas, isResetTimer)
{
local skillIndex = obj.getThrowIndex();
if (skillIndex == SKILL_ELEMENTAL_CHANGE)
{
onAfterSetState_ElementalChange(obj, state, datas, isResetTimer);
if (obj.getThrowState() == 0)
{
// 醴蝶签 UI蒂 ?撩? 卫监棻.
obj.setIsCustomSelectSkill(true);
}
else if (obj.getThrowState() == 1)
{
obj.sq_PlaySound("PCHANGE_SELECT");
if (obj.isMyControlObject())
{
sq_BinaryStartWrite();
sq_BinaryWriteByte(obj.getThrowElement());
sq_SendChangeSkillEffectPacket(obj, SKILL_ELEMENTAL_CHANGE);
}
}
}
else if(skillIndex == SKILL_MANABURST)
{
onAfterSetState_ManaBurst(obj, state, datas, isResetTimer);
}
}

View File

@@ -0,0 +1,82 @@
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_ATMageDashAttack(obj, state, datas, isResetTimer)
{
if (!obj)
return;
local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
// 热樯羹蒂 寡锡挤.
if (skillLevel > 0)
{
local isPress = sq_IsKeyDown(OPTION_HOTKEY_MOVE_UP, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL);
// 渠卫 奢问卫, 擅戏煎 瞪霞 籀葬
if(!isPress)
obj.sq_SetStaticMoveInfo(0, 450, 450, false, -500, true);
// 晦狱晦 熨湿 瞳辨
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState());
sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj));
}
else
{
// 渠卫 奢问卫, 擅戏煎 瞪霞 籀葬
obj.sq_SetStaticMoveInfo(0, 450, 450, false, -500, true);
}
}
// 渠卫 奢问卫 葆彻 掘羹蒂 当撩?棻.
function onKeyFrameFlag_ATMageDashAttack(obj, flagIndex)
{
if(!obj)
return false;
if (flagIndex == 1)
{
// 葆彻掘羹蒂 当撩?棻.
if (obj.sq_IsMyControlObject())
{
// 当撩? ?卫粽 螃粽薛?暧 樯策蝶
local passiveObjectIndex = 24261;
local power = -25;
// 热樯羹 蝶鉴暧 溯涟
local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_CHANGE);
// 楼撩嫦翕 appendage缣 勘溥毡朝虽 羹觼?.
local element = obj.getThrowElement();
// 楼撩嫦翕缣 勘溥毡虽 强棻贼 鼠楼撩 ?颤陛 嫦饵脾
local appendage = obj.GetSquirrelAppendage("Character/ATMage/ElementalChange/ap_ATMage_Elemental_Change.nut");
if (!appendage || !appendage.isValid())
element = ENUM_ELEMENT_NONE;
if (element != ENUM_ELEMENT_NONE)
{
if (element == ENUM_ELEMENT_FIRE)
passiveObjectIndex = 24262;
else if (element == ENUM_ELEMENT_WATER)
passiveObjectIndex = 24263;
else if (element == ENUM_ELEMENT_DARK)
passiveObjectIndex = 24264;
else if (element == ENUM_ELEMENT_LIGHT)
passiveObjectIndex = 24265;
}
else
{
//晦狱晦 熨湿
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj),power);
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState());
power = sq_GetCurrentAttackBonusRate(obj);
}
obj.sq_StartWrite();
obj.sq_WriteWord(80); // ?嫦暧 饵桧锷(%)
obj.sq_WriteWord(power); // ?嫦暧 奢问溘(%)
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndex, 0, 100, 1, 55);
}
}
return true;
}

View File

@@ -0,0 +1,323 @@
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_Attack(obj, state, datas, isResetTimer)
{
if (!obj)
return;
local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
// 热樯羹蒂 寡锡挤.
if (skillLevel > 0)
{
// 橾奁 奢问卫, 擅戏煎 瞪霞 籀葬
obj.setAttackXVelocity(250);
obj.setAttackXAccel(-1000);
obj.setAttackXVelocityFast(400);
obj.setAttackXAccelFast(-1000);
// 晦狱晦 熨湿 瞳辨
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),obj.getState());
sq_SetCurrentAttackInfo(obj, sq_GetCurrentAttackInfo(obj));
}
else
{
// 热樯羹蒂 寡办虽 强懊棻贼 薯濠葬缣怃 葆彻掘 卫瞪
obj.setAttackXVelocity(0);
obj.setAttackXAccel(0);
obj.setAttackXVelocityFast(0);
obj.setAttackXAccelFast(0);
local element = obj.getThrowElement();
local attackIndex = obj.getAttackIndex();
playSoundForAtmageAttack(obj, element, attackIndex);
}
}
function onAfterSetState_Attack(obj, state, datas, isResetTimer)
{
if (!obj) return;
// 热樯羹 蝶鉴击 寡锡棻贼, ?颤 缣栖诡桧暮桧 夥莘
// 葆彻掘紫 嫦饵肾虽 强挤.
local iceElementalAttackSkillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
if (state == STATE_ATTACK && iceElementalAttackSkillLevel <= 0)
{
// ?颤 桧??蒂 称樯棻.
// 勘溥毡朝 帼? 蝶鉴 樯策蝶 塽 怃粽 蝶才桧?缣 评塭怃 尔罹虽朝 桧??陛 棻荤 (楼撩缣评塭怃 称朝 桧??陛 棻荤)
local element = obj.getThrowElement();
local attackIndex = obj.getAttackIndex();
// 楼撩嫦翕 appendage缣 勘溥毡朝虽 羹觼?.
// 楼撩嫦翕缣 勘溥毡虽 强棻贼 鼠楼撩 ?颤陛 嫦饵脾
local appendage = obj.GetSquirrelAppendage("Character/ATMage/ElementalChange/ap_ATMage_Elemental_Change.nut");
if (!appendage || !appendage.isValid())
element = ENUM_ELEMENT_NONE;
if (attackIndex == 0)
{
if (element == ENUM_ELEMENT_FIRE)
{ // ?楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack1_fire_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack1_fire_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_WATER)
{ // 热楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack1_water_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack1_water_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_DARK)
{ // 檩楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack1_dark_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack1_dark_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_LIGHT)
{ // 赀楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack1_light_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack1_light_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_NONE)
{ // 鼠楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack1_none_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack1_none_dodge.ani"), 0, 0);
}
}
else if (attackIndex == 1)
{
if (element == ENUM_ELEMENT_FIRE)
{ // ?楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack2_fire_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack2_fire_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_WATER)
{ // 热楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack2_water_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack2_water_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_DARK)
{ // 檩楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack2_dark_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack2_dark_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_LIGHT)
{ // 赀楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack2_light_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack2_light_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_NONE)
{ // 鼠楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack2_none_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack2_none_dodge.ani"), 0, 0);
}
}
else if (attackIndex == 2)
{
if (element == ENUM_ELEMENT_FIRE)
{ // ?楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack3_fire_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack3_fire_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_WATER)
{ // 热楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack3_water_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack3_water_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_DARK)
{ // 檩楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack3_dark_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack3_dark_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_LIGHT)
{ // 赀楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack3_light_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack3_light_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_NONE)
{ // 鼠楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack3_none_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack3_none_dodge.ani"), 0, 0);
}
}
else if (attackIndex == 3)
{
if (element == ENUM_ELEMENT_FIRE)
{ // ?楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack4_fire_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/fire/attack4_fire_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_WATER)
{ // 热楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack4_water_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/water/attack4_water_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_DARK)
{ // 檩楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack4_dark_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/dark/attack4_dark_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_LIGHT)
{ // 赀楼撩
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack4_light_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/light/attack4_light_dodge.ani"), 0, 0);
}
else if (element == ENUM_ELEMENT_NONE)
{
obj.sq_AddStateLayerAnimation(1, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack4_none_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2, obj.sq_CreateCNRDAnimation("Effect/Animation/ATAttack/attack4_none_dodge.ani"), 0, 0);
}
}
}
}
function createMiniMagicCircle(obj, xPos, zPos, shotDirection, bonusDamage) // direction 0:姜贼 1:渠陕摹 2:?钦)
{
if(!obj)
return;
if (obj.sq_IsMyControlObject()) {
// 葆彻掘羹 当撩嫔纂
local direction = sq_GetDirection(obj);
local x = sq_GetDistancePos(obj.getXPos(), direction, xPos);
local y = sq_GetDistancePos(obj.getYPos(), ENUM_DIRECTION_DOWN, 1);
local z = sq_GetDistancePos(obj.getZPos(), ENUM_DIRECTION_UP, zPos);
// 擒除暧 嵘紫晦栋桧 毡挤.
// 奢问濠
// 嫦饵 嫔纂(x,y,z)
// 陛煎 嫦饵陕 (0桧贼 擅戏煎 嫦饵, 30桧贼 螃艇薹 30紫煎 嫦饵)
// 撮煎 嫦饵陕 (0桧贼 擅戏煎 嫦饵, -30桧贼 嬴楚薹 30紫煎 嫦饵)
// 陛煎 譆渠 尔姜陕 (?薹 寞?)
// 撮煎 譆渠 尔姜陕 (?薹 寞?)
// 瞳娄暧 譆渠 剪葬. -1桧贼 薯? 桡挤
// x蹴 譆渠 饵姜剪葬
// 奢问 梦蝶暧 x蹴 觼晦
// 奢问 梦蝶暧 y蹴 觼晦
// 奢问 梦蝶暧 z蹴 觼晦
local activeObject;
local searchAngleH = 0;
local searchAngleV = 0;
local passiveObjectIndex = 0;
if(shotDirection == 0)
{ // 姜贼
//activeObject = sq_FindShootingTarget(obj, x, y, z, 0, 0, 10, 10, -1, 1000, 1000, 250, 100);
local distance = 1000;
local angle = 20;
activeObject = findAngleTarget(obj, distance, angle, 100); // 睡瓣笛 赅晔暧 瞳 匐仪
searchAngleH = 30;
searchAngleV = 15;
passiveObjectIndex = 24202;
// 翱楼嫦饵朝 当梯亿朝 伪虽虏, 棻艇 螃粽薛?陛 嫦饵脾 (钟帼瞪暧 舱?击 嫡晦阳侥)
if (obj.getState() == STATE_MULTI_SHOT)
passiveObjectIndex = 24266;
}
else if(shotDirection == 1) {// 渠陕摹
activeObject = sq_FindShootingTarget(obj, x, y, z, 0, 0, 4, 4, -1, 300, 100, 50, 100);
searchAngleH = 5;
searchAngleV = 5;
passiveObjectIndex = 24207;
// 翱楼嫦饵朝 当梯亿朝 伪虽虏, 棻艇 螃粽薛?陛 嫦饵脾 (钟帼瞪暧 舱?击 嫡晦阳侥)
if (obj.getState() == STATE_MULTI_SHOT)
passiveObjectIndex = 24271;
}
else if(shotDirection == 2) { // ?钦
activeObject = sq_FindShootingTarget(obj, x, y, z, 0, 0, 4, 4, -1, 300, 100, 50, 100);
searchAngleH = 5;
searchAngleV = 5;
passiveObjectIndex = 24228;
// 翱楼嫦饵朝 当梯亿朝 伪虽虏, 棻艇 螃粽薛?陛 嫦饵脾 (钟帼瞪暧 舱?击 嫡晦阳侥)
if (obj.getState() == STATE_MULTI_SHOT)
passiveObjectIndex = 24276;
}
else {
printc("error! magic ball create shotDirection error");
return;
}
// 楼撩嫦翕 appendage缣 勘溥毡朝虽 羹觼?.
// 楼撩嫦翕缣 勘溥毡虽 强棻贼 鼠楼撩 ?颤陛 嫦饵脾
local horizonAngle = 0.0;
local verticalAngle = 0.0;
if (activeObject != NULL) {
local maxDistance = abs(activeObject.getXPos() - x);
horizonAngle = sq_GetShootingHorizonAngle(activeObject, y, 0, searchAngleH, maxDistance);
verticalAngle = sq_GetShootingVerticalAngle(activeObject, z, 0, searchAngleV, maxDistance, 300);
}
local appendage = obj.GetSquirrelAppendage("Character/ATMage/ElementalChange/ap_ATMage_Elemental_Change.nut");
if (appendage && appendage.isValid()) {
local element = obj.getThrowElement();
passiveObjectIndex = passiveObjectIndex + 1 + element;
}
obj.sq_StartWrite();
obj.sq_WriteFloat(horizonAngle);
obj.sq_WriteFloat(verticalAngle);
obj.sq_WriteDword(bonusDamage);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndex, 0, xPos, 1, zPos);
}
}
// 奢问卫 葆彻 掘羹蒂 当撩?棻.
function onKeyFrameFlag_Attack(obj, flagIndex)
{
if(!obj)
return false;
local isMyControlObject = obj.sq_IsMyControlObject();
// 奢问?阳葆棻 葆彻 掘羹蒂 当撩?棻.
// 勘溥毡朝 帼?缣 评塭怃 当撩 肾横螳捡 ? ?卫粽 螃粽薛?陛 棻荤(楼撩)
//
local xPos = 0, zPos = 0;
local attackIndex = obj.getAttackIndex();
if (attackIndex == 0)
{
xPos = 65, zPos = 59;
}
else if (attackIndex == 1)
{
xPos = 60, zPos = 71;
}
else if (attackIndex == 2)
{
xPos = 55, zPos = 58;
}
else if (attackIndex == 3)
{
xPos = 65, zPos = 36;
}
if (flagIndex == 1)
{
// 葆彻掘羹蒂 当撩?棻.
createMiniMagicCircle(obj, xPos, zPos, 0, 0); // direction 0:姜贼 1:渠陕摹 2:?钦
}
return true;
}
function playSoundForAtmageAttack(obj, elementalType, attackCount)
{
if(!obj)
return;
local elementalName = "MWSHOT_0";
if (elementalType == ENUM_ELEMENT_FIRE)
elementalName = "FIRESHOT_0";
else if (elementalType == ENUM_ELEMENT_WATER)
elementalName = "ICESHOT_0";
else if (elementalType == ENUM_ELEMENT_DARK)
elementalName = "DARKSHOT_0";
else if (elementalType == ENUM_ELEMENT_LIGHT)
elementalName = "LIGHTSHOT_0";
obj.sq_PlaySound(elementalName + (attackCount+1));
}

View File

@@ -0,0 +1,440 @@
function setCustomData_po_ATMagicBallLightMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallLight(obj, receiveData);
}
function setCustomData_po_ATMagicBallDarkMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallDark(obj, receiveData);
}
function setCustomData_po_ATMagicBallWaterMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallWater(obj, receiveData);
}
function setCustomData_po_ATMagicBallFireMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallFire(obj, receiveData);
}
function setCustomData_po_ATMagicBallNoneMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallNone(obj, receiveData);
}
// 葆彻掘羹 - 赀楼撩
function setCustomData_po_ATMagicBallLight(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallLightMove.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallLight", "PassiveObject/Character/Mage/Particle/ATMagicBallLightTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTail1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTail2.ptl");
obj.sq_SetObjectParticlePos(0, -1, 0);
}
// 葆彻掘羹 - 檩楼撩
function setCustomData_po_ATMagicBallDark(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
local attackBonusRate = 0;
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
local mage = obj.getTopCharacter();
if (!mage)
return;
local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE);
local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE);
//attackBonusRate = sq_GetAttackBonusRate(skill, 6, 1.0) + attackBonusRate;
attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 6, 1.0) + attackBonusRate;
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackBonusRate);
// 檩楼撩暧 唳办缚 ?嫦桧 嫦当?虽 强晦阳侥缣 鼻鹧桧鼻击 掘羹缣 夥煎 勘横遽棻.
local changeStatusLevel = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 7, skillLevel);// 7.荡舆 溯涟
local changeStatusProb = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 8, skillLevel);// 8.荡舆 ?睦(0.1%)
changeStatusProb /= 10;
local changeStatusDuration = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 9, skillLevel);// 9.荡舆 虽楼卫除
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, changeStatusProb, changeStatusLevel, changeStatusDuration);
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallDarkMove.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallDark", "PassiveObject/Character/Mage/Particle/ATMagicBallDarkTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTail1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTail2.ptl");
obj.sq_SetObjectParticlePos(0, -1, 0);
}
// 葆彻掘羹 - 热楼撩
function setCustomData_po_ATMagicBallWater(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallWaterMove.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallWaterTail", "PassiveObject/Character/Mage/Particle/ATMagicBallWaterTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTail1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTail2.ptl");
obj.sq_SetObjectParticlePos(0, -1, 0);
}
// 葆彻掘羹 - ?楼撩
function setCustomData_po_ATMagicBallFire(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallFireMove.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallFireTail", "PassiveObject/Character/Mage/Particle/ATMagicBallFireTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTail1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTail2.ptl");
obj.sq_SetObjectParticlePos(0, -1, 0);
}
// 葆彻掘羹 - 鼠楼撩
function setCustomData_po_ATMagicBallNone(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallNoneMove.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallNoneTail.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallNoneTail.ptl");
obj.sq_SetObjectParticlePos(0, -1, 0);
local mage = obj.getTopCharacter();
if (!mage)
return;
// 晦狱晦 熨湿 瞳辨
mage.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),mage.getState());
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
function onAttack_po_ATMagicBallNone(obj, damager, boundingBox, isStuck)
{ // ?颤 鼠楼撩
if (!obj)
return 0;
return 0;
}
// ?楼撩 ?嫦 螃粽薛? 当撩
function createFireExplosion(obj, damager, boundingBox, isStuck, passiveObjectIndex)
{
if (!obj)
return 0;
if(!damager)
return 0;
local mage = obj.getTopCharacter();
if (!mage)
return 0;
if (obj.isMyControlObject())
{
// 嬴桧蛊 翱翕 偃嫦
// 县溯诠骁 溯樯暧 static data(3)暧 奢问溘 隶陛 parameter谛 翱翕脾
local var = obj.getVar();
local bonusRate = 1.0;
if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0)
{
local rate = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 3);
bonusRate = rate.tofloat() / 100.0;
}
local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE);
local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE);
local attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 1, bonusRate);
local sizeRate = sq_GetIntData(mage, SKILL_ELEMENTAL_CHANGE, 0);
local totalDamage = sq_GetCurrentAttackBonusRate(obj) + attackBonusRate;
local x = sq_GetCenterXPos(boundingBox);
local y = damager.getYPos() + 1;
local z = sq_GetCenterZPos(boundingBox);
sq_BinaryStartWrite()
sq_BinaryWriteWord(sizeRate); // ?嫦暧 觼晦
sq_BinaryWriteWord(totalDamage); // 等嘐虽
//sq_SendCreatePassiveObjectPacket(obj, passiveObjectIndex, 0, 0, 1, 0, ENUM_DIRECTION_NEUTRAL);
print(" x:" + x + " y:" + y + " z:" + z);
sq_SendCreatePassiveObjectPacketPos(mage, passiveObjectIndex, 0, x, y, z);
//sq_SendDestroyPacketPassiveObject(obj);
}
}
// 瞳桧 翱楼 葆彻掘(?楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallFireMultiShot(obj, damager, boundingBox, isStuck)
{ // 翱楼 葆彻掘 ?楼撩
createFireExplosion(obj, damager, boundingBox, isStuck, 24281);
return 0;
}
// 瞳桧 ?颤 葆彻掘(?楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallFire(obj, damager, boundingBox, isStuck)
{ // ?颤 ?楼撩
createFireExplosion(obj, damager, boundingBox, isStuck, 24214);
return 0;
}
// 热楼撩 ?嫦 螃粽薛? 当撩
function createWaterExplosion(obj, damager, boundingBox, isStuck, passiveObjectIndex)
{
if (!obj)
return 0;
if(!damager)
return 0;
local mage = obj.getTopCharacter();
if (!mage)
return 0;
if (obj.isMyControlObject())
{
// 嬴桧蛊 翱翕 偃嫦
// 县溯诠骁 溯樯暧 static data(3)暧 奢问溘 隶陛 parameter谛 翱翕脾
local var = obj.getVar();
local bonusRate = 1.0;
if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0)
{
local rate = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 3);
bonusRate = rate.tofloat() / 100.0;
}
local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE);
local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE);
//local attackBonusRate = sq_GetAttackBonusRate(skill, 2, 1.0);
local attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 2, bonusRate);
local sizeRate = sq_GetIntData(mage, SKILL_ELEMENTAL_CHANGE, 1);
local totalDamage = sq_GetCurrentAttackBonusRate(obj) + attackBonusRate;
local power = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 3, skillLevel);
local prob = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 4, skillLevel);
local validTime = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 5, skillLevel);
local x = sq_GetCenterXPos(boundingBox);
local y = damager.getYPos() + 1;
local z = sq_GetCenterZPos(boundingBox);
sq_BinaryStartWrite()
sq_BinaryWriteWord(sizeRate); // ?嫦暧 觼晦
sq_BinaryWriteWord(totalDamage); // 等嘐虽
sq_BinaryWriteByte(ACTIVESTATUS_FREEZE);// 彩念 鼻鹧桧鼻
prob = prob / 10.0;
sq_BinaryWriteFloat(prob.tofloat()); // ?睦 (0.1%)
sq_BinaryWriteFloat(power.tofloat()); // 溯涟
sq_BinaryWriteDword(validTime); // 虽楼卫除
//sq_SendCreatePassiveObjectPacket(obj, passiveObjectIndex, 0, 0, 1, 0, ENUM_DIRECTION_NEUTRAL);
sq_SendCreatePassiveObjectPacketPos(mage, passiveObjectIndex, 0, x, y, z);
}
}
// 瞳桧 翱楼 葆彻掘(热楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallWaterMultiShot(obj, damager, boundingBox, isStuck)
{ // 翱楼 葆彻掘 ?楼撩
createWaterExplosion(obj, damager, boundingBox, isStuck, 24282);
return 0;
}
// 瞳桧 ?颤 葆彻掘(热楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallWater(obj, damager, boundingBox, isStuck)
{
// ?颤 热楼撩
createWaterExplosion(obj, damager, boundingBox, isStuck, 24215);
return 0;
}
function onAttack_po_ATMagicBallDark(obj, damager, boundingBox, isStuck)
{ // ?颤 檩楼撩
if (!obj)
return 0;
return 0;
}
// 赀楼撩 ?嫦 螃粽薛? 当撩
function createLightExplosion(obj, damager, boundingBox, isStuck, passiveObjectIndex)
{
if(!damager)
return 0;
if (!obj)
return 0;
local mage = obj.getTopCharacter();
if (!mage)
return 0;
if (obj.isMyControlObject())
{
// 嬴桧蛊 翱翕 偃嫦
// 县溯诠骁 溯樯暧 static data(3)暧 奢问溘 隶陛 parameter谛 翱翕脾
local var = obj.getVar();
local bonusRate = 1.0;
if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0)
{
local rate = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 3);
bonusRate = rate.tofloat() / 100.0;
}
local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE);
local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE);
//local attackBonusRate = sq_GetAttackBonusRate(skill, 10, 1.0);
local attackBonusRate = sq_GetBonusRateWithPassive(mage, SKILL_ELEMENTAL_CHANGE, STATE_ELEMENTAL_CHANGE, 10, bonusRate);
local sizeRate = sq_GetIntData(mage, SKILL_ELEMENTAL_CHANGE, 2);
// 鼻鹧桧鼻 溯涟, ?睦, 虽楼卫除
local power = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 11, skillLevel);
local prob = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 12, skillLevel);
local validTime = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 13, skillLevel);
local damage = sq_GetLevelData(mage, SKILL_ELEMENTAL_CHANGE, 14, skillLevel);
local totalDamage = sq_GetCurrentAttackBonusRate(obj) + attackBonusRate;
local x = sq_GetCenterXPos(boundingBox);
local y = damager.getYPos() + 1;
local z = sq_GetCenterZPos(boundingBox);
sq_BinaryStartWrite()
sq_BinaryWriteWord(sizeRate); // ?嫦暧 觼晦
sq_BinaryWriteWord(totalDamage); // 等嘐虽
sq_BinaryWriteByte(ACTIVESTATUS_LIGHTNING); // 马瞪 鼻鹧桧鼻
prob = prob / 10.0;
sq_BinaryWriteFloat(prob.tofloat()); // ?睦 (0.1%)
sq_BinaryWriteFloat(power.tofloat()); // 溯涟
sq_BinaryWriteDword(validTime); // 虽楼卫除
sq_BinaryWriteDword(damage); // 马瞪 等嘐虽
//sq_SendCreatePassiveObjectPacket(obj, passiveObjectIndex, 0, 0, 1, 0, ENUM_DIRECTION_NEUTRAL);
print(" x:" + x + " y:" + y + " z:" + z);
sq_SendCreatePassiveObjectPacketPos(mage, passiveObjectIndex, 0, x, y, z);
}
}
// 瞳桧 ?颤 葆彻掘(赀楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallLight(obj, damager, boundingBox, isStuck)
{
createLightExplosion(obj, damager, boundingBox, isStuck, 24216);
return 0;
}
// 瞳桧 翱楼 葆彻掘(赀楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallLightMultiShot(obj, damager, boundingBox, isStuck)
{
createLightExplosion(obj, damager, boundingBox, isStuck, 24283);
return 0;
}
function procAppend_po_ATMagicBallNone(obj)
{
}

View File

@@ -0,0 +1,471 @@
SUB_STATE_BLUEDRAGONWILL_0 <- 0
SUB_STATE_BLUEDRAGONWILL_1 <- 1
SUB_STATE_BLUEDRAGONWILL_2 <- 2
SUB_STATE_BLUEDRAGONWILL_3 <- 3
SUB_STATE_BLUEDRAGONWILL_4 <- 4
function checkExecutableSkill_BlueDragonWill(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_BLUEDRAGONWILL);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BLUEDRAGONWILL_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_BLUEDRAGONWILL, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_BlueDragonWill(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_BLUEDRAGONWILL); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true;
}
function onSetState_BlueDragonWill(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().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
obj.sq_PlaySound("MW_ICEHAMMER_READY");
obj.sq_SetCurrentAnimation(CUSTOM_ANI_BLUEDRAGONWILL1);
local pAni = obj.sq_GetCurrentAni();
//local chargeT = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 0); // 晦遴 醱瞪卫除
//local delaySum = sq_GetDelaySum(pAni);
//
//local rate = delaySum.tofloat() * 100.0 / chargeT.tofloat();
//
//obj.sq_SetAnimationSpeedRate(pAni, rate);
local skillLevel = sq_GetSkillLevel(obj, SKILL_BLUEDRAGONWILL);
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
local castTime = sq_GetCastTime(obj, SKILL_BLUEDRAGONWILL, skillLevel);
local animation = sq_GetCurrentAnimation(obj);
local startTime = sq_GetFrameStartTime(animation, 16);
local speedRate = startTime.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, startTime, true);
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
local group = obj.sq_GetVectorData(datas, 1);
local uniqueId = obj.sq_GetVectorData(datas, 2);
local targetObj = sq_GetObject(obj, group, uniqueId);
obj.getVar().push_vector(posX); // ?营 x : i: 2
obj.getVar().push_vector(posY); // ?营 y : i: 3
if(targetObj) {
local disX = sq_Abs(targetObj.getXPos() - posX);
local disY = targetObj.getYPos() - posY;
disX = disX - 40;
if(disX <= 0)
disX = 0;
obj.getVar().push_vector(disX); // x蹴 桧翕剪葬 : i: 4
obj.getVar().push_vector(disY); // y蹴 桧翕剪葬 : i: 5
}
else { // 蛤?? 桧翕剪葬
local defaultDistance = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 1); // 除蕾 奢问 (虽霞 ?渠徽) (100~)
obj.getVar().push_vector(defaultDistance); // x蹴 桧翕剪葬
obj.getVar().push_vector(0); // y蹴 桧翕剪葬
}
obj.sq_SetCurrentAnimation(CUSTOM_ANI_BLUEDRAGONWILL2);
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
obj.sq_PlaySound("MW_ICEHAMMER");
obj.sq_SetCurrentAnimation(CUSTOM_ANI_BLUEDRAGONWILL3);
sq_setCurrentAxisPos(obj, 2, 0);
if(obj.isMyControlObject()) {
obj.sq_SetShake(obj,3,300);
local distanceL = 90;
local h = 0;
local spin_radius = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 2); // 除蕾 奢问 (虽霞 ?渠徽) (100~)
local spin_r = spin_radius.tofloat() / 100.0;
local firstAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_BLUEDRAGONWILL, STATE_BLUEDRAGONWILL, 0, 1.0); //2.奢问溘(%)
local power = obj.sq_GetPowerWithPassive(SKILL_BLUEDRAGONWILL, STATE_BLUEDRAGONWILL, 1,-1,1.0); // 除蕾奢问溘
local pow = obj.sq_GetSkillPower(SKILL_BLUEDRAGONWILL, 1);
local l_data = obj.sq_GetLevelData(SKILL_BLUEDRAGONWILL, 1, 1);
print("power:" + power + " pow:" + pow + " l_data:" + l_data);
sq_BinaryStartWrite();
sq_BinaryWriteFloat(spin_r); //
sq_BinaryWriteDword(power); // 除蕾奢问溘
obj.sq_SendCreatePassiveObjectPacket(24246, 0, distanceL, -1, h); // 虽霞桧嘐虽 除蕾 奢问
sq_BinaryStartWrite();
sq_BinaryWriteDword(firstAttackRate); // 奢问溘(%)
obj.sq_SendCreatePassiveObjectPacket(24245, 0, distanceL, 5, h);
}
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
//obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
// SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function prepareDraw_BlueDragonWill(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
// SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
// SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
}
function onProc_BlueDragonWill(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local sq_var = obj.getVar();
local currentT = sq_GetCurrentTime(pAni);
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
//local dash_t = pAni.getDelaySum(false); //
local dash_t = pAni.getDelaySum(0, 2) + 60; //
local srcX = obj.getVar().get_vector(2); // 卫蒙x
local srcY = obj.getVar().get_vector(3); // 卫蒙y
local dis_x_len = sq_var.get_vector(4); // 识 桧翕剪葬
local dis_y_len = obj.getVar().get_vector(5); // 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;
if(sq_var.get_vector(0)) { // 瞪?溯歜缣怃 桧翕? 热 桡朝 虽羲击 虏陬棻贼..
if(sq_var.get_vector(1) != posY) { // 瞪 posY谛 绿掖?瑭怃 殖塭螺棻贼..
sq_var.set_vector(0, 0); // 桧翕?楚斜蒂 off?鄹栖棻..
sq_var.set_vector(1, posY);
}
}
if(obj.isMovablePos(dstX, dstY) && !sq_var.get_vector(0)) { // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 1, dstY);
}
else { // 桧翕? 热 桡朝 虽羲击 虏陬棻..
sq_var.set_vector(0,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻..
local offset = dstX - posX;
if(offset != 0) {
if(offset < 0)
offset = -offset;
local totalLen = sq_var.get_vector(4); // 识桧翕剪葬
sq_var.set_vector(4, totalLen - offset);
}
}
if(frmIndex == 2){
sq_setCurrentAxisPos(obj, 2, 30);
}
else if(frmIndex == 3) {
sq_setCurrentAxisPos(obj, 2, 60);
}
else if(frmIndex == 4){
sq_setCurrentAxisPos(obj, 2, 50);
}
else if(frmIndex == 5){
sq_setCurrentAxisPos(obj, 2, 40);
}
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
}
function onProcCon_BlueDragonWill(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
// SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
// SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_BlueDragonWill(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) {
return;
}
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BLUEDRAGONWILL_1); // substate撮?
// 500 // x蹴 颤啃? 彰嫔
// 120 // y蹴 颤啃? 彰嫔
// 10 // z蹴 颤啃? 彰嫔
//local x_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 3); // 晦遴 醱瞪卫除
//local y_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 4); // 晦遴 醱瞪卫除
//local z_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 5); // 晦遴 醱瞪卫除
//local targetObj = sq_FindTarget(obj, 0, x_range, y_range, z_range);
//
//if(targetObj) {
//local group = sq_GetGroup(targetObj);
//local uniqueId = sq_GetUniqueId(targetObj);
//
//obj.sq_IntVectPush(group); //
//obj.sq_IntVectPush(uniqueId); //
//}
//else {
//obj.sq_IntVectPush(-1); //
//obj.sq_IntVectPush(-1); //
//}
local distance = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, SKL_STATIC_INT_IDX_3); // 瞳娄暧 剪葬
local angle = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, SKL_STATIC_INT_IDX_4); // 瞳娄暧 陕紫
local targetObj = findAngleTarget(obj, distance, angle, 100);
if(targetObj) {
local group = sq_GetGroup(targetObj);
local uniqueId = sq_GetUniqueId(targetObj);
obj.sq_IntVectPush(group); //
obj.sq_IntVectPush(uniqueId); //
}
else {
obj.sq_IntVectPush(-1); //
obj.sq_IntVectPush(-1); //
}
obj.sq_AddSetStatePacket(STATE_BLUEDRAGONWILL, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BLUEDRAGONWILL_2); // substate撮?
obj.sq_AddSetStatePacket(STATE_BLUEDRAGONWILL, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
}
function onKeyFrameFlag_BlueDragonWill(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
// SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
// SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_BlueDragonWill(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
// SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
// SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
sq_EndDrawCastGauge(obj);
}
function onAfterSetState_BlueDragonWill(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BLUEDRAGONWILL_0) {
// SUB_STATE_BLUEDRAGONWILL_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_1) {
// SUB_STATE_BLUEDRAGONWILL_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_2) {
// SUB_STATE_BLUEDRAGONWILL_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_3) {
// SUB_STATE_BLUEDRAGONWILL_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BLUEDRAGONWILL_4) {
// SUB_STATE_BLUEDRAGONWILL_4 怃粽蝶才桧? 蒙机
}
}
function getHitDirection_BlueDragonWill(obj, damager)
{
if(!obj) return 0;
print("getHitDirection_BlueDragonWill");
return sq_GetOppositeDirection(obj.getDirection());
}

View File

@@ -0,0 +1,667 @@
SUB_STATE_BROKENARROW_0 <- 0
SUB_STATE_BROKENARROW_1 <- 1
SUB_STATE_BROKENARROW_2 <- 2
SUB_STATE_BROKENARROW_3 <- 3
SUB_STATE_BROKENARROW_4 <- 4
BrokenArrow_state_0 <- 10
BrokenArrow_state_1 <- 11
BrokenArrow_state_2 <- 12
function checkExecutableSkill_BrokenArrow(obj)
{
if(!obj) return false;
//local targetObj = sq_GetObjectByObjectId(obj, BROKENARROW_UNIQUE_ID);
local flag = obj.getVar("brokenarrow").get_vector(VECTOR_FLAG_0);
local targetObj = sq_GetPassiveObjectByState(obj, 24250, BrokenArrow_state_1); // 24250 `Character/Mage/ATBrokenArrow.obj` // 陴彻饵 - 粽煎赎拥煎办 (?髦)
local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除)
// 觼煎栖赝 嬴桧蛊 蒙机.. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除)
// 0塭贼 渠莲蒂 ?虽 强朝棻..
if(!targetObj || flag == 0 || expTime == 0)
{
local b_useskill = obj.sq_IsUseSkill(SKILL_BROKENARROW);
if(b_useskill) {
obj.getVar("arrow").clear_vector();
obj.getVar("arrow").push_vector(0);
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BROKENARROW_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
}
else
{
print( " checkExecutableSkill_BrokenArrow targetObj:" + targetObj);
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BROKENARROW_2); // substate撮?
local group = sq_GetGroup(targetObj);
local uniqueId = sq_GetUniqueId(targetObj);
obj.sq_IntVectPush(group); // substate撮?
obj.sq_IntVectPush(uniqueId); // substate撮?
obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
//local arr=["one","two","three"]
//
//::print("FOREACH\n");
//
//foreach(i,val in arr)
//{
//::print("index ["+i+"]="+val+"\n");
//}
//
//::print("FOR\n");
//
//for(local i=0;i<arr.len();i+=1)
//{
//::print("index ["+i+"]="+arr[i]+"\n");
//}
//
//::print("WHILE\n");
//
//local i=0;
//while(i<arr.len())
//{
//::print("index ["+i+"]="+arr[i]+"\n");
//i+=1;
//}
//::print("DO WHILE\n");
//
//local i=0;
//do
//{
//::print("index ["+i+"]="+arr[i]+"\n");
//i+=1;
//}while(i<arr.len());
function checkCommandEnable_BrokenArrow(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_BROKENARROW); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true;
}
function onChangeSkillEffect_BrokenArrow(obj, skillIndex, reciveData)
{
if(!obj)
return;
}
function onSetState_BrokenArrow(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
local arrowLauchNum = obj.sq_GetIntData(SKILL_BROKENARROW, 0); // 0. ?髦 偎热
obj.getVar().clear_vector();
obj.getVar().push_vector(arrowLauchNum);
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
if(substate == SUB_STATE_BROKENARROW_0) {
if(obj.getVar("brokenarrow").size_vector() == 0)
{
obj.sq_PlaySound("MW_BARROW");
obj.getVar("brokenarrow").clear_vector();
obj.getVar("brokenarrow").push_vector(1);
}
else
obj.getVar("brokenarrow").set_vector(VECTOR_FLAG_0, 1);
// 渠莲?楚斜
obj.getVar("dash").clear_vector();
obj.getVar("dash").push_vector(0);
obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW1);
local pAni = obj.sq_GetCurrentAni();
pAni.setSpeedRate(200.0);
}
else if(substate == SUB_STATE_BROKENARROW_1) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW_LOOP1);
local pAni = obj.sq_GetCurrentAni();
pAni.setSpeedRate(200.0);
}
else if(substate == SUB_STATE_BROKENARROW_2) {
// 渠莲1
obj.getVar("brokenarrow").set_vector(VECTOR_FLAG_0, 0); // ?廓 ?溥耀棻贼..棻卫 葬掸桧 腌栖棻.
local group = obj.sq_GetVectorData(datas, 1);
local uniqueId = obj.sq_GetVectorData(datas, 2);
local targetObj = sq_GetObject(obj, group, uniqueId);
obj.getVar().push_vector(posX); // ?营 x : i: 3
obj.getVar().push_vector(posY); // ?营 y : i: 4
if(targetObj) {
local disX = sq_Abs(targetObj.getXPos() - posX);
local disY = targetObj.getYPos() - posY;
if(targetObj.getXPos() > posX)
{
obj.setDirection(ENUM_DIRECTION_RIGHT);
}
else
{
obj.setDirection(ENUM_DIRECTION_LEFT);
}
disX = disX - 60;
if(disX <= 0)
disX = 0;
obj.getVar().push_vector(disX); // x蹴 桧翕剪葬 : i: 5
obj.getVar().push_vector(disY); // y蹴 桧翕剪葬 : i: 6
}
else { // 蛤?? 桧翕剪葬
local defaultDistance = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 1); // 除蕾 奢问 (虽霞 ?渠徽) (100~)
obj.getVar().push_vector(defaultDistance); // x蹴 桧翕剪葬
obj.getVar().push_vector(0); // y蹴 桧翕剪葬
}
obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW_DASH1);
}
else if(substate == SUB_STATE_BROKENARROW_3) {
obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_AT_MAGE_BROKENARROW);
obj.sq_SetCurrentAnimation(CUSTOM_ANI_BROKENARROW_DASH2);
obj.sq_PlaySound("MW_BARROW_FIN");
local atk = sq_GetCurrentAttackInfo(obj);
local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_BROKENARROW, STATE_BROKENARROW, 1, 1.0); //1.?萃楝纂晦 奢问溘(%)
sq_SetCurrentAttackBonusRate(atk, attackRate);
}
else if(substate == SUB_STATE_BROKENARROW_4) {
// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机
}
}
function prepareDraw_BrokenArrow(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BROKENARROW_0) {
}
else if(substate == SUB_STATE_BROKENARROW_1) {
}
else if(substate == SUB_STATE_BROKENARROW_2) {
}
else if(substate == SUB_STATE_BROKENARROW_3) {
}
else if(substate == SUB_STATE_BROKENARROW_4) {
}
}
function getAngleArrow(obj, pTargetChr)
{
if(!obj) return;
if(!pTargetChr) return;
local offsetX = 58; // ?践朝 嫔纂
local offsetZ = 75; // ?践朝 嫔纂
local X = obj.getXPos() + sq_GetDistancePos(0, obj.getDirection(), offsetX);
local Y = obj.getYPos();
local Z = obj.getZPos() + offsetZ;
local posX = pTargetChr.getXPos();
local posY = pTargetChr.getYPos();
local posZ = pTargetChr.getZPos() + (sq_GetObjectHeight(pTargetChr) / 2);
local offset = posX - X;
local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true);
local w = posX - X;
if(w < 0) w = -w;
// ?贼鼻暧 陕紫蒂 掘?怃 桧??蒂 赁紫釭 给溥捡 肾朝虽 掘?棻.
local h = (posY - posZ) - (Y - Z);
local width = sq_Abs(posX - X);
local angle = sq_Atan2( h.tofloat(), width.tofloat());
//if((posY - posZ) < (Y - Z))
{
angle = -angle;
}
local nRevision = distance;
local cos = nRevision.tofloat() * sq_Cos(angle);
local sin = nRevision.tofloat() * sq_Sin(angle);
local nX = sq_Abs( cos.tointeger() );
local nY = sq_Abs( sin.tointeger() );
return angle;
//sq_SetfRotateAngle(pAni, angle);
}
function onProc_BrokenArrow(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local sq_var = obj.getVar();
local currentT = sq_GetCurrentTime(pAni);
local posX = sq_GetXPos(obj);
local posY = sq_GetYPos(obj);
local posZ = sq_GetZPos(obj);
if(substate == SUB_STATE_BROKENARROW_0) {
// SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_1) {
// SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_2) {
local dash_t = pAni.getDelaySum(false); //
//obj.getVar().push_vector(posX); // ?营 x : i: 3
//obj.getVar().push_vector(posY); // ?营 y : i: 4
local srcX = obj.getVar().get_vector(3); // 卫蒙x
local srcY = obj.getVar().get_vector(4); // 卫蒙y
local dis_x_len = sq_var.get_vector(5); // 识 桧翕剪葬
local dis_y_len = obj.getVar().get_vector(6) + 1; // 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;
if(sq_var.get_vector(1))
{ // 瞪?溯歜缣怃 桧翕? 热 桡朝 虽羲击 虏陬棻贼..
if(sq_var.get_vector(2) != posY)
{ // 瞪 posY谛 绿掖?瑭怃 殖塭螺棻贼..
sq_var.set_vector(1, 0); // 桧翕?楚斜蒂 off?鄹栖棻..
sq_var.set_vector(2, posY);
}
}
if(obj.isMovablePos(dstX, dstY) && !sq_var.get_vector(1))
{ // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 1, dstY);
}
else
{ // 桧翕? 热 桡朝 虽羲击 虏陬棻..
sq_var.set_vector(1,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻..
local offset = dstX - posX;
if(offset != 0) {
if(offset < 0)
offset = -offset;
local totalLen = sq_var.get_vector(5); // 识桧翕剪葬
sq_var.set_vector(5, totalLen - offset);
}
}
}
else if(substate == SUB_STATE_BROKENARROW_3) {
// SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_4) {
// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机
}
}
function onProcCon_BrokenArrow(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BROKENARROW_0 || substate == SUB_STATE_BROKENARROW_1)
{
local pAni = obj.getCurrentAnimation();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
//local x_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 3); // 晦遴 醱瞪卫除
//local y_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 4); // 晦遴 醱瞪卫除
//local z_range = obj.sq_GetIntData(SKILL_BLUEDRAGONWILL, 5); // 晦遴 醱瞪卫除
if(frmIndex >= 3)
{
if(obj.getVar("flag").get_vector(0) == 0)
{
local x_range = 400; // 匐仪彰嫔 x
local y_range = 200; // 匐仪彰嫔 y
local z_range = 50; // 匐仪彰嫔 z
x_range = obj.sq_GetIntData(SKILL_BROKENARROW, 3); // 3. x彰嫔
y_range = obj.sq_GetIntData(SKILL_BROKENARROW, 4); // 4. y彰嫔
z_range = obj.sq_GetIntData(SKILL_BROKENARROW, 5); // 5. z彰嫔
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_BROKENARROW, STATE_BROKENARROW, 0, 1.0); //2.奢问溘(%)
local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除)
local stunTime = obj.sq_GetIntData(SKILL_BROKENARROW, 2); // 2. 瞳 唳霜卫除
local targetObj = sq_FindTarget(obj, 80, x_range, y_range, z_range);
//local my = sq_GetUniformVelocity(0, dis_y_len, currentT, dash_t);
local xLen = 400;
local yLen = 0;
local zLen = 75;
local angle = -1.0;
if(targetObj)
{
xLen = obj.getXDistance(targetObj);
yLen = sq_GetYPos(targetObj) - sq_GetYPos(obj);
zLen = sq_GetZPos(targetObj) + (sq_GetObjectHeight(targetObj) / 2);
angle = getAngleArrow(obj, targetObj);
print(" angle:" + angle);
}
//local fireOffsetX = 56;
if(obj.isMyControlObject())
{
local fireOffsetX = 65;
local fireOffsetY = 0;
local fireOffsetZ = 73;
sq_BinaryStartWrite();
sq_BinaryWriteDword(xLen); //
sq_BinaryWriteDword(yLen); //
sq_BinaryWriteDword(zLen); //
sq_BinaryWriteDword(attackRate); //
sq_BinaryWriteDword(expTime); //
sq_BinaryWriteDword(stunTime); //
sq_BinaryWriteFloat(angle); //
obj.sq_SendCreatePassiveObjectPacket(24250, 0, fireOffsetX, fireOffsetY + 1, fireOffsetZ); // ?髦
}
obj.getVar("flag").set_vector(0, 1);
}
}
if(obj.getVar("dash").get_vector(0) == 0)
{
obj.setSkillCommandEnable(SKILL_BROKENARROW, true);
local iEnterSkill = obj.sq_IsEnterSkill(SKILL_BROKENARROW);
if(iEnterSkill != -1)
{
obj.getVar("dash").set_vector(0, 1);
}
}
//local particleCreater = null;
//particleCreater = obj.getVar().GetparticleCreaterMap("BrokenArrowDownAttack", "Character/Mage/Particle/BrokenArrowDownAttack.ptl", obj);
//
//particleCreater = obj.getVar().GetparticleCreaterMap("BrokenArrowUpAttack", "Character/Mage/Particle/BrokenArrowUpAttack.ptl", obj);
//
//particleCreater.Restart(0);
//particleCreater.SetPos(x + dx, y + dy, z + dz);
//
//sq_AddParticleObject(obj, particleCreater);
}
else if(substate == SUB_STATE_BROKENARROW_2) {
// SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_3) {
// SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_4) {
// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_BrokenArrow(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(!obj.isMyControlObject()) {
return;
}
local arrowNum = obj.getVar().get_vector(0);
if(substate == SUB_STATE_BROKENARROW_0 || substate == SUB_STATE_BROKENARROW_1)
{
local arrowIndex = obj.getVar("arrow").get_vector(0);
arrowIndex = arrowIndex + 1;
obj.getVar("arrow").set_vector(0, arrowIndex);
if(arrowIndex < arrowNum)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BROKENARROW_1); // substate撮?
obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true);
}
else
{
local expTime = obj.sq_GetIntData(SKILL_BROKENARROW, 1); // 1. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除)
// 觼煎栖赝 嬴桧蛊 蒙机.. 颤问 撩奢卫 渠莲晦栋击 饵辨? 热 毡朝 卫除 (?髦桧 笮?毡朝 卫除)
// 0塭贼 渠莲蒂 ?虽 强朝棻..
if(obj.getVar("dash").get_vector(0) == 1 && expTime > 0)
{
local targetObj = sq_GetPassiveObjectByState(obj, 24250, BrokenArrow_state_1); // 24250 `Character/Mage/ATBrokenArrow.obj` // 陴彻饵 - 粽煎赎拥煎办 (?髦)
if(!targetObj)
{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else
{
local group = sq_GetGroup(targetObj);
local uniqueId = sq_GetUniqueId(targetObj);
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BROKENARROW_2); // substate撮?
obj.sq_IntVectPush(group); // substate撮?
obj.sq_IntVectPush(uniqueId); // substate撮?
obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
else
{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
//obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
else if(substate == SUB_STATE_BROKENARROW_2)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_BROKENARROW_3); // substate撮?
obj.sq_AddSetStatePacket(STATE_BROKENARROW, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_BROKENARROW_3)
{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == SUB_STATE_BROKENARROW_4) {
// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机
}
}
function onKeyFrameFlag_BrokenArrow(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BROKENARROW_0) {
// SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_1) {
// SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_2) {
// SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_3) {
// SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_4) {
// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_BrokenArrow(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BROKENARROW_0) {
// SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_1) {
// SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_2) {
// SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_3) {
// SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_4) {
// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机
}
}
function onAfterSetState_BrokenArrow(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BROKENARROW_0) {
// SUB_STATE_BROKENARROW_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_1) {
// SUB_STATE_BROKENARROW_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_2) {
// SUB_STATE_BROKENARROW_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_3) {
// SUB_STATE_BROKENARROW_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_BROKENARROW_4) {
// SUB_STATE_BROKENARROW_4 怃粽蝶才桧? 蒙机
}
}
function onAttack_BrokenArrow(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_BROKENARROW_3)
{
}
}

View File

@@ -0,0 +1,358 @@
BrokenArrow_START_X <- 0
BrokenArrow_START_Y <- 1
BrokenArrow_START_Z <- 2
BrokenArrow_MOV_X <- 3
BrokenArrow_MOV_Y <- 4
BrokenArrow_MOV_Z <- 5
function setCustomData_po_ATBrokenArrow(obj, reciveData)
{
if(!obj) return;
local xLen = reciveData.readDword();
local yLen = reciveData.readDword();
local zLen = reciveData.readDword();
local attackRate = reciveData.readDword();
local expTime = reciveData.readDword();
local stunTime = reciveData.readDword();
local angle = reciveData.readFloat() * 100;
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
obj.getVar("dis").clear_vector();
obj.getVar("dis").push_vector(x);
obj.getVar("dis").push_vector(y);
obj.getVar("dis").push_vector(z);
obj.getVar("dis").push_vector(xLen);
obj.getVar("dis").push_vector(yLen);
obj.getVar("dis").push_vector(zLen);
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(BrokenArrow_state_0);
local expT = expTime; // 唳霜卫除
obj.getVar("fire").clear_vector(); // state vector
obj.getVar("fire").push_vector(expT);
local current100Angle = angle.tointeger();
obj.getVar("angle").clear_vector();
obj.getVar("angle").push_vector(current100Angle);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
//sq_SetAttackInfoForceHitStunTime(
local atk = sq_GetCurrentAttackInfo(obj);
if(atk)
{
sq_SetCurrentAttackBonusRate(atk, attackRate);
sq_SetAttackInfoForceHitStunTime(atk, stunTime);
}
if(obj.isMyControlObject())
{
obj.addSetStatePacket(BrokenArrow_state_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function setState_po_ATBrokenArrow(obj, state, datas)
{
if(!obj) return;
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
if(passiveState == BrokenArrow_state_0)
{
obj.sq_PlaySound("BARROW_SHOT");
}
else if(passiveState == BrokenArrow_state_1)
{
local ani = obj.getCustomAnimation(0);
obj.setCurrentAnimation(ani);
}
else if(passiveState == BrokenArrow_state_2)
{
local ani = obj.getCustomAnimation(1);
obj.setCurrentAnimation(ani);
}
local current100Angle = obj.getVar("angle").get_vector(0);
if(current100Angle != -100)
{
local pAni = obj.getCurrentAnimation();
local angle = current100Angle.tofloat() / 100.0;
print(" set angle:" + angle);
//sq_SetfRotateAngle(pAni, angle);
//sq_SetfRotateAngle(pAni, 5.0);
//obj.void CNRDObject::setCustomRotate(bool isApply, float rotateAnlge)
obj.setCustomRotate(true, angle);
}
}
function procAppend_po_ATBrokenArrow(obj)
{
if(!obj) return;
//BrokenArrow_START_X <- 0
//BrokenArrow_START_Y <- 1
//BrokenArrow_START_Z <- 2
//
//BrokenArrow_MOV_X <- 3
//BrokenArrow_MOV_Y <- 4
//BrokenArrow_MOV_Z <- 5
local passiveState = obj.getVar("state").get_vector(0);
//BrokenArrow_state_0 <- 10
//BrokenArrow_state_1 <- 11
local pAni = obj.getCurrentAnimation();
local currentT = sq_GetCurrentTime(pAni);
if(passiveState == 0)
{
return;
}
if(passiveState == BrokenArrow_state_0)
{
local fireT = 200;
local srcX = obj.getVar("dis").get_vector(BrokenArrow_START_X); // 卫蒙x
local srcY = obj.getVar("dis").get_vector(BrokenArrow_START_Y); // 卫蒙y
local srcZ = obj.getVar("dis").get_vector(BrokenArrow_START_Z); // 卫蒙z
local dis_x_len = obj.getVar("dis").get_vector(BrokenArrow_MOV_X); // 识 桧翕剪葬
local dis_y_len = obj.getVar("dis").get_vector(BrokenArrow_MOV_Y); // y蹴 桧翕剪葬
local endZ = obj.getVar("dis").get_vector(BrokenArrow_MOV_Z); // z蹴 桧翕剪葬
local v = sq_GetUniformVelocity(0, dis_x_len, currentT, fireT);
local my = sq_GetUniformVelocity(0, dis_y_len, currentT, fireT);
local mz = sq_GetUniformVelocity(srcZ, endZ, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
local dstY = srcY + my;
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 1, dstY);
sq_setCurrentAxisPos(obj, 2, mz);
if(currentT >= fireT)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
else if(passiveState == BrokenArrow_state_1)
{
local fireT = obj.getVar("fire").get_vector(0);
if(obj.isMyControlObject())
{
local moveParent = sq_GetMoveParent(obj);
local changeState = false;
if(!moveParent)
changeState = true;
if(moveParent)
{
local isSmashing = false; // ?溥纂朝 挡暮樯虽
local parentState = obj.sq_GetParentState();
local subState = obj.sq_GetParentSkillSubState();
if(parentState == STATE_BROKENARROW && subState >= SUB_STATE_BROKENARROW_3)
isSmashing = true;
if(moveParent.getState() == STATE_DOWN && isSmashing == true)
{
changeState = true;
}
}
if(currentT >= fireT)
changeState = true;
if(changeState == true)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(BrokenArrow_state_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
}
else if(passiveState == BrokenArrow_state_2)
{
local isEnd = sq_IsEnd(pAni);
if(isEnd == true)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
}
function onChangeSkillEffect_po_ATBrokenArrow(obj, skillIndex, reciveData)
{
if(!obj) return;
}
function onDestroyObject_po_ATBrokenArrow(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATBrokenArrow(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATBrokenArrow(obj)
{
if(!obj) return;
}
function onAttack_po_ATBrokenArrow(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
local pChr = obj.getTopCharacter();
if(!pChr)
return 0;
// ?髦缣 蜃懊击 阳 ?髦 ?瞳
local x = sq_GetXPos(pChr);
local y = sq_GetYPos(pChr);
local z = sq_GetZPos(pChr);
local damagerX = sq_GetXPos(damager);
local damagerY = sq_GetYPos(damager);
local damagerZ = sq_GetZPos(damager);
local direction = ENUM_DIRECTION_LEFT;
if(x < damagerX)
{
direction = ENUM_DIRECTION_RIGHT;
}
//local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj,
//SKILL_BROKENARROW, true, "Character/ATMage/BrokenArrow/ap_ATBrokenArrow.nut", true);
//
//local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATBrokenArrow/hiteffect/00_arrow_normal.ani");
//local arrowObj = sq_CreatePooledObject(ani,true);
//sq_AddObjectTarget(obj, arrowObj, damager, OBJECTTYPE_DRAWONLY, BROKENARROW_UNIQUE_ID);
//arrowObj.setCurrentDirection(direction);
//local hitX = (sq_GetCenterXPos(boundingBox) - 5);// + sq_getRandom(0, 2);
local hitX = sq_GetXPos(damager) + sq_getRandom(0, 2);
local hitY = sq_GetYPos(damager) + 1;
local hitZ = (sq_GetCenterZPos(boundingBox) - 5) + sq_getRandom(0, 5);
//arrowObj.setCurrentPos(hitX,hitY,hitZ);
//sq_moveWithParent(damager, arrowObj);
obj.setCurrentPos(hitX,hitY,hitZ);
sq_moveWithParent(damager, obj);
local appendage = CNSquirrelAppendage.sq_AppendAppendage(damager, damager, SKILL_BROKENARROW,
true, "Appendage/Character/ap_atmage_effect.nut", true);
print(" onattack");
if(obj.isMyControlObject())
{
local passiveState = obj.getVar("state").get_vector(0);
print(" onattack:" + passiveState);
if(passiveState == BrokenArrow_state_0)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(BrokenArrow_state_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
else if(passiveState == BrokenArrow_state_1)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(BrokenArrow_state_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
//sq_SendDestroyPacketPassiveObject(obj);
}
//local group = sq_GetGroup(damager);
//local uniqueId = sq_GetUniqueId(damager);
//
//sq_BinaryStartWrite();
//sq_BinaryWriteWord(group);
//sq_BinaryWriteWord(uniqueId);
//
//sq_SendChangeSkillEffectPacket(pChr, SKILL_BROKENARROW);
//sq_SendDestroyPacketPassiveObject(obj);
}
return 0;
}
function getCustomHitEffectFileName_po_ATBrokenArrow(obj, isAttachOnDamager)
{
return "PassiveObject/Character/Mage/Animation/ATBrokenArrow/02_arrowboom_dodge.ani";
}

View File

@@ -0,0 +1,385 @@
SUB_STATE_ATCHAINLIGHTNING_0 <- 0
SUB_STATE_ATCHAINLIGHTNING_1 <- 1
SUB_STATE_ATCHAINLIGHTNING_2 <- 2
SUB_STATE_ATCHAINLIGHTNING_3 <- 3
SUB_STATE_ATCHAINLIGHTNING_4 <- 4
SKL_CL_SD_0 <- 0 //200 // 10.籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??)
SKL_CL_SD_1 <- 1 //0 // 11.籀挤 颤啃?卫 X蹴 卫蒙 剪葬
SKL_CL_SD_2 <- 2 //400 // 12.籀挤 颤啃?卫 X蹴 部 剪葬
SKL_CL_SD_3 <- 3 //320 // 13.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬
SKL_CL_SD_4 <- 4 //300 // 14.颤问? 瞳暧 譆渠 堪桧
// 0.葭觼 譆渠 偎热 1.虽楼卫除 2.奢问溘(%) 3.棻钦?? ?热 4.棻钦?? 除问
SKL_CL_LI_0 <- 0 // 0.葭觼 譆渠 偎热
SKL_CL_LI_1 <- 1 // 1.虽楼卫除
SKL_CL_LI_2 <- 2 // 2.奢问溘(%)
SKL_CL_LI_3 <- 3 // 3.棻钦?? ?热
SKL_CL_LI_4 <- 4 // 4.棻钦?? 除问
function checkExecutableSkill_ChainLightning(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_ATCHAINLIGHTNING);
print("b_useskill : %d" + b_useskill);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ATCHAINLIGHTNING_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_CHAINLIGHTNING, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ChainLightning(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_ATCHAINLIGHTNING); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true;
}
function onSetState_ChainLightning(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().clear_vector();
obj.getVar().push_vector(0);
if(substate == SUB_STATE_ATCHAINLIGHTNING_0) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_CHAINLIGHTNING_CAST);
local pAni = obj.sq_GetCurrentAni();
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
local skillLevel = sq_GetSkillLevel(obj, SKILL_ATCHAINLIGHTNING);
local castTime = sq_GetCastTime(obj, SKILL_ATCHAINLIGHTNING, skillLevel);
local animation = sq_GetCurrentAnimation(obj);
local startTime = sq_GetFrameStartTime(animation, 16);
local speedRate = startTime.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, startTime, true);
addElementalChain_ATMage(obj, ENUM_ELEMENT_LIGHT);
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_CHAINLIGHTNING);
obj.sq_PlaySound("MW_CHAINLIGHT");
if(obj.isMyControlObject()) {
/////////////////////////////////////////////
local firstTargetYRange = obj.sq_GetIntData(SKILL_ATCHAINLIGHTNING, SKL_CL_SD_0); // 0.籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??)
local firstTargetXStartRange = obj.sq_GetIntData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_1); // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬
local firstTargetXEndRange = obj.sq_GetIntData(SKILL_ATCHAINLIGHTNING, SKL_CL_SD_2); // 2.籀挤 颤啃?卫 X蹴 部 剪葬
local nextTargetRange = obj.sq_GetIntData(SKILL_ATCHAINLIGHTNING, SKL_CL_SD_3); // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬
local targetMaxHeight = obj.sq_GetIntData(SKILL_ATCHAINLIGHTNING, SKL_CL_SD_4); // 4.颤问? 瞳暧 譆渠 堪桧
local skill_level = obj.sq_GetSkillLevel(SKILL_ATCHAINLIGHTNING);
local link_num = obj.sq_GetLevelData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_0, skill_level); // 0.葭觼 譆渠 偎热
local attack_time = obj.sq_GetLevelData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_1, skill_level); // 1.虽楼卫除
local firstAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_ATCHAINLIGHTNING, STATE_CHAINLIGHTNING, SKL_CL_LI_2, 1.0); //2.奢问溘(%)
local multi_hit_num = obj.sq_GetLevelData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_3, skill_level); // 3.棻钦?? ?热
//local multi_hit_term = obj.sq_GetLevelData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_4, skill_level); // 4.棻钦?? 除问
////////////////////////////////////////////////
sq_BinaryStartWrite();
sq_BinaryWriteWord(firstTargetYRange);
sq_BinaryWriteWord(firstTargetXStartRange);
sq_BinaryWriteWord(firstTargetXEndRange);
sq_BinaryWriteWord(nextTargetRange);
sq_BinaryWriteWord(targetMaxHeight);
sq_BinaryWriteWord(link_num);
sq_BinaryWriteWord(attack_time);
sq_BinaryWriteDword(firstAttackRate);
sq_BinaryWriteWord(multi_hit_num);
//sq_BinaryWriteWord(multi_hit_term);
//local ropeX = sq_GetDistancePos(posX, obj.getDirection(), offsetLen);
local distanceL = 50;
local h = 88;
obj.sq_SendCreatePassiveObjectPacket(24241, 0, distanceL, 0, h);
obj.sq_PlaySound("CHAINLIGHT_ELEC_LOOP", 7576);
}
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_CHAINLIGHTNING_END);
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) {
// SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) {
// SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机
}
}
function prepareDraw_ChainLightning(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ATCHAINLIGHTNING_0) {
// SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) {
// SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) {
// SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) {
// SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) {
// SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机
}
}
function onProc_ChainLightning(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if(substate == SUB_STATE_ATCHAINLIGHTNING_0) {
// SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) {
// SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机
if(obj.isMyControlObject()) {
//if(!obj.sq_GetPassiveObject(24241)) {
local skill_level = obj.sq_GetSkillLevel(SKILL_ATCHAINLIGHTNING);
local attack_time = obj.sq_GetLevelData(SKILL_ATCHAINLIGHTNING, SKL_CL_LI_1, skill_level); // 1.虽楼卫除
local passiveobj_cl = obj.sq_GetPassiveObject(24241);
if(passiveobj_cl) {
local flag = passiveobj_cl.getVar("nograb").get_vector(0);
if(flag)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ATCHAINLIGHTNING_2);
obj.sq_AddSetStatePacket(STATE_CHAINLIGHTNING, STATE_PRIORITY_USER, true);
return;
}
else
{
if(obj.getVar().get_vector(0) == 0) {
obj.sq_SetShake(obj,1,attack_time);
obj.getVar().set_vector(0, 1);
}
}
}
if(currentT > attack_time) {
//obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ATCHAINLIGHTNING_2);
obj.sq_AddSetStatePacket(STATE_CHAINLIGHTNING, STATE_PRIORITY_USER, true);
}
}
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) {
// SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) {
// SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) {
// SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机
}
}
function onProcCon_ChainLightning(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ATCHAINLIGHTNING_0) {
// SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) {
// SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) {
// SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) {
// SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) {
// SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_ChainLightning(obj)
{
if(!obj) return;
//local pSickleObj = obj.sq_GetPassiveObject(24101); // sickle
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ATCHAINLIGHTNING_0) {
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ATCHAINLIGHTNING_1);
obj.sq_AddSetStatePacket(STATE_CHAINLIGHTNING, STATE_PRIORITY_USER, true);
}
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) {
// SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机
//if(obj.isMyControlObject()) {
//obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
//}
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) {
if(obj.isMyControlObject()) {
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) {
// SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) {
// SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机
}
}
function onKeyFrameFlag_ChainLightning(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ATCHAINLIGHTNING_0) {
// SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) {
// SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) {
// SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) {
// SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) {
// SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_ChainLightning(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ATCHAINLIGHTNING_0) {
// SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) {
// SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) {
// SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) {
// SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) {
// SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机
}
// 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据
sq_EndDrawCastGauge(obj);
obj.stopSound(7576);
}
function onAfterSetState_ChainLightning(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ATCHAINLIGHTNING_0) {
// SUB_STATE_ATCHAINLIGHTNING_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_1) {
// SUB_STATE_ATCHAINLIGHTNING_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_2) {
// SUB_STATE_ATCHAINLIGHTNING_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_3) {
// SUB_STATE_ATCHAINLIGHTNING_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ATCHAINLIGHTNING_4) {
// SUB_STATE_ATCHAINLIGHTNING_4 怃粽蝶才桧? 蒙机
}
}

View File

@@ -0,0 +1,745 @@
S_PO_ATCL_0 <- 10
S_PO_ATCL_1 <- 11
VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??)
VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬
VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬
VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬
VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧
VI_SKL_5 <- 5 // 5.葭觼 譆渠 偎热
VI_SKL_6 <- 6 // 6.虽楼卫除
VI_SKL_7 <- 7 // 7.奢问溘(%)
VI_SKL_8 <- 8 // 8.棻钦?? ?热
VI_SKL_9 <- 9 // 9.棻钦?? 除问
function setAnimationEmptyLightning(obj)
{
if(!obj)
return;
local i = 0;
local object_num = obj.getVar("cl").get_obj_vector_size();
for(i = 0; i < object_num; i++)
{ // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻..
local pObj = obj.getVar("cl").get_obj_vector(i);
if(pObj)
{
local currentAni = sq_GetCurrentAnimation(pObj);
if(currentAni)
{
if(currentAni.isLoop())
{
local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATChainLightning/Firing/6_lightning_dodge_empty.ani");
pObj.setCurrentAnimation(ani);
}
}
}
}
}
function setAnimationDiableLightning(obj)
{
if(!obj)
return;
local i = 0;
local object_num = obj.getVar("cl").get_obj_vector_size();
for(i = 0; i < object_num; i++)
{ // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻..
local pObj = obj.getVar("cl").get_obj_vector(i);
if(pObj)
{
pObj.setValid(false);
}
}
}
function setCustomData_po_ATChainLightning(obj, reciveData)
{
if(!obj) return;
print("\n create chainlightning");
local firstTargetYRange = reciveData.readWord();
local firstTargetXStartRange = reciveData.readWord();
local firstTargetXEndRange = reciveData.readWord();
local nextTargetRange = reciveData.readWord();
local targetMaxHeight = reciveData.readWord();
local link_sum_num = reciveData.readWord() + 1;
local attack_time = reciveData.readWord();
local firstAttackRate = reciveData.readDword();
local multi_hit_num = reciveData.readWord();
//local multi_hit_term = reciveData.readWord();
obj.getVar("skl").clear_vector(); // 蝶鉴?橾 妇湿 姜尔 渗热菟
obj.getVar("skl").push_vector(firstTargetYRange); // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??)
obj.getVar("skl").push_vector(firstTargetXStartRange); // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬
obj.getVar("skl").push_vector(firstTargetXEndRange); // 2.籀挤 颤啃?卫 X蹴 部 剪葬
obj.getVar("skl").push_vector(nextTargetRange); // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬
obj.getVar("skl").push_vector(targetMaxHeight); // 4.颤问? 瞳暧 譆渠 堪桧
obj.getVar("skl").push_vector(link_sum_num); // 5.葭觼 譆渠 偎热
obj.getVar("skl").push_vector(attack_time); // 6.虽楼卫除
obj.getVar("skl").push_vector(firstAttackRate); // 7.奢问溘(%)
obj.getVar("skl").push_vector(multi_hit_num); // 8.棻钦?? ?热
//obj.getVar("skl").push_vector(multi_hit_term); // 9.棻钦?? 除问
obj.getVar("nograb").clear_vector();
obj.getVar("nograb").push_vector(0);
local link_num = link_sum_num;
obj.sq_var.clear_vector();
obj.sq_var.push_vector(link_num); // 偎热
local x = obj.getXPos();
local y = obj.getYPos();
local z = obj.getZPos();
obj.sq_var.push_vector(0); // 苹遴?
obj.getVar("cl").clear_obj_vector();
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(0);
// ?卫粽螃粽薛? 嫦当 ?楚斜
obj.getVar("cl").clear_vector();
obj.getVar("target").clear_vector();
local i = 0;
for(i = 0; i < link_num; i++) {
obj.getVar("cl").push_vector(0);
obj.getVar("target").push_vector(-1); // x
obj.getVar("target").push_vector(-1); // y
obj.getVar("target").push_vector(-1); // z
}
//
local isMyControl = obj.isMyControlObject();
if(isMyControl) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, x);
sq_IntVectorPush(pIntVec, y);
sq_IntVectorPush(pIntVec, z);
//VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??)
//VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬
//VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬
//VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬
//VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧
//
//VI_SKL_5 <- 5 // 5.葭觼 譆渠 偎热
//VI_SKL_6 <- 6 // 6.虽楼卫除
//VI_SKL_7 <- 7 // 7.奢问溘(%)
//VI_SKL_8 <- 8 // 8.棻钦?? ?热
//VI_SKL_9 <- 9 // 9.棻钦?? 除问
local start_x = obj.getVar("skl").get_vector(VI_SKL_1);
local start_end_x = obj.getVar("skl").get_vector(VI_SKL_2);
local y_range = obj.getVar("skl").get_vector(VI_SKL_0);
local z_range = obj.getVar("skl").get_vector(VI_SKL_4);
local pTargetChr = obj.sq_FindFirstTarget(start_x, start_end_x, y_range, z_range);
print( " pTargetChr:" + pTargetChr);
//print( " start_x:" + start_x + " start_end_x:" + start_end_x + " y_range:" + y_range + " z_range:" + z_range);
local id = sq_GetObjectId(pTargetChr);
sq_IntVectorPush(pIntVec, id);
if(id == -1) {
//print("nograb");
obj.getVar("nograb").set_vector(0, 1);
}
obj.addSetStatePacket(S_PO_ATCL_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function destroy_po_ATChainLightning(obj)
{
setAnimationDiableLightning(obj);
//setAnimationEmptyLightning(obj);
}
function setState_po_ATChainLightning(obj, state, datas)
{
if(!obj) return;
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
print( " setstate:" + passiveState);
if(passiveState == S_PO_ATCL_0)
{
//////////////////////////////////////////
// 苹遴? 萤葬晦
local cnt = obj.sq_var.get_vector(1);
cnt = cnt + 1;
obj.sq_var.set_vector(1, cnt); // 苹遴?
//////////////////////////////////////////
print(" setState_po_ATChainLightning S_PO_ATCL_0:" + obj.sq_var.get_vector(1));
if(obj.sq_var.get_vector(0) > obj.sq_var.get_vector(1)) // 绮 葭觼 偎热 薯?
{
local x = sq_GetVectorData(datas, 0); // x pos
local y = sq_GetVectorData(datas, 1); // y pos
local z = sq_GetVectorData(datas, 2); // z pos
local id = sq_GetVectorData(datas, 3); // id
local target_chr = sq_GetObjectByObjectId(obj, id);
if(target_chr)
{
// 绮 葬模蝶 煎注
local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATChainLightning/Firing/6_lightning_dodge.ani");
local lightObj = sq_CreatePooledObject(ani,true);
lightObj.setCurrentPos(x,y + 5,z);
lightObj.setCurrentDirection(obj.getDirection());
obj.getVar("cl").push_obj_vector(lightObj); // 罹晦怃
sq_AddObject(obj, lightObj, OBJECTTYPE_DRAWONLY, false);
///////////////////////////////////////////////////
obj.sq_var.remove_obj_vector(target_chr);
obj.sq_var.push_obj_vector(target_chr);
local pActiveTarget = sq_GetCNRDObjectToActiveObject(target_chr);
procChainLightning(obj, lightObj, pActiveTarget, obj.sq_var.get_vector(1));
}
else
{ // 蜃朝拥陛 桡击阳..
print(" obj.sq_var.get_vector(1):" + obj.sq_var.get_vector(1));
if(obj.sq_var.get_vector(1) == 1)
{
// 绮 葬模蝶 煎注
local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATChainLightning/Firing/6_lightning_dodge_empty.ani");
local lightObj = sq_CreatePooledObject(ani,true);
lightObj.setCurrentPos(x,y + 5,z);
lightObj.setCurrentDirection(obj.getDirection());
obj.getVar("cl").push_obj_vector(lightObj); // 罹晦怃
sq_AddObject(obj, lightObj, OBJECTTYPE_DRAWONLY, false);
///////////////////////////////////////////////////
}
}
}
}
else if(passiveState == S_PO_ATCL_1)
{
local object_num = obj.getVar("cl").get_obj_vector_size();
local i = 0;
for(i = 0; i < object_num; i++)
{ // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻..
local pObj = obj.getVar("cl").get_obj_vector(i);
local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATChainLightning/Firing/6_lightning_dodge_empty.ani");
pObj.setCurrentAnimation(ani);
}
for(i = 0; i < object_num; i++)
{
local target_obj_num = obj.sq_var.get_obj_vector_size();
local pObj = obj.getVar("cl").get_obj_vector(i);
if(target_obj_num > i)
{
local pTargetObj = obj.sq_var.get_obj_vector(i);
local pActiveTarget = sq_GetCNRDObjectToActiveObject(pTargetObj);
local target_x = sq_GetXPos(pActiveTarget);
local target_y = sq_GetYPos(pActiveTarget) + 5;
local target_z = sq_GetZPos(pActiveTarget) + (sq_GetObjectHeight(pActiveTarget) / 2);
if((i + 1) < object_num)
{
local next_obj = obj.getVar("cl").get_obj_vector(i + 1);
sq_SetCurrentPos(next_obj, target_x, target_y, target_z);
}
procChainLightning(obj, pObj, pActiveTarget, i);
}
else
{
procChainLightning(obj, pObj, null, i);
}
}
}
}
// 羹樯塭桧?棚 ?亵陕 籀葬
function procChainLightning(thisObj, obj, pTargetChr, targetIndex)
{
if(!obj) return;
//if(!pTargetChr) return;
local X = obj.getXPos();
local Y = obj.getYPos();
local Z = obj.getZPos();
local pAni = obj.getCurrentAnimation();
local frameIndex = pAni.GetCurrentFrameIndex();
local targetI = targetIndex * 3;
local posX = thisObj.getVar("target").get_vector(targetI);
local posY = thisObj.getVar("target").get_vector(targetI + 1);
local posZ = thisObj.getVar("target").get_vector(targetI + 2);
if(pTargetChr)
{
posX = pTargetChr.getXPos();
posY = pTargetChr.getYPos();
posZ = pTargetChr.getZPos() + (sq_GetObjectHeight(pTargetChr) / 2);
thisObj.getVar("target").set_vector(targetI, posX);
thisObj.getVar("target").set_vector(targetI + 1, posY);
thisObj.getVar("target").set_vector(targetI + 2, posZ);
}
if(posX == -1)
return;
local offset = posX - X;
if(offset < 0) {
//print(" ENUM_DIRECTION_LEFT");
obj.setCurrentDirection(ENUM_DIRECTION_LEFT);
}
else {
//print(" ENUM_DIRECTION_RIGHT");
obj.setCurrentDirection(ENUM_DIRECTION_RIGHT);
}
local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true);
local w = posX - X;
if(w < 0) w = -w;
// ?贼鼻暧 陕紫蒂 掘?怃 桧??蒂 赁紫釭 给溥捡 肾朝虽 掘?棻.
local h = (posY - posZ) - (Y - Z);
local width = sq_Abs(posX - X);
local angle = sq_Atan2( h.tofloat(), width.tofloat());
if((posY - posZ) > (Y - Z)) {
angle = -angle;
}
local nRevision = distance;
local cos = nRevision.tofloat() * sq_Cos(angle);
local sin = nRevision.tofloat() * sq_Sin(angle);
local nX = sq_Abs( cos.tointeger() );
local nY = sq_Abs( sin.tointeger() );
sq_SetfRotateAngle(pAni, angle);
pAni.setImageRate(1.0, 1.0);
local dis = 246;
local cos_x = dis.tofloat() * sq_Cos(angle);
local sin_y = dis.tofloat() * sq_Sin(angle);
//print("angle:" + angle);
local nW = sq_Abs( cos_x.tointeger() );
local nH = sq_Abs( sin_y.tointeger() );
//print(" nW:" + nX + "nH:" + nY);
local wRate = width.tofloat() / nW.tofloat();
local hRate = h.tofloat() / nH.tofloat();
//
pAni.setImageRate(wRate.tofloat(), hRate.tofloat());
}
function procAppend_po_ATChainLightning(obj)
{
if(!obj)
return;
local pChr = obj.getTopCharacter();
local state = obj.getVar("state").get_vector(0);
if(!pChr)
{
//sq_SendDestroyPacketPassiveObject(obj);
if(state == S_PO_ATCL_0)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
return;
}
else
{
if(obj.isMyControlObject())
sq_SendDestroyPacketPassiveObject(obj);
return;
}
}
local lightNum = obj.getVar("cl").get_obj_vector_size();
//print(" chain:" + lightNum);
if(pChr.getState() != STATE_CHAINLIGHTNING)
{
//sq_SendDestroyPacketPassiveObject(obj);
if(state == S_PO_ATCL_0)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
//print(" setstaet:" + S_PO_ATCL_1);
obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
return;
}
else if(state == S_PO_ATCL_1)
{
local clNum = obj.getVar("cl").get_obj_vector_size();
print(" state == S_PO_ATCL_1");
print(" clNum:" + clNum);
if(clNum == 0)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
return;
}
}
else
{
setAnimationEmptyLightning(obj);
}
}
}
local i = 0;
local object_num = obj.getVar("cl").get_obj_vector_size(); // 绮 螃粽薛?
for(i = 0; i < object_num; i++)
{
local pObj = obj.getVar("cl").get_obj_vector(i);
local target_obj_num = obj.sq_var.get_obj_vector_size();
if(target_obj_num > i)
{
local pTargetObj = obj.sq_var.get_obj_vector(i);
local pActiveTarget = sq_GetCNRDObjectToActiveObject(pTargetObj);
local target_x = sq_GetXPos(pActiveTarget);
local target_y = sq_GetYPos(pActiveTarget) + 5;
local target_z = sq_GetZPos(pActiveTarget) + (sq_GetObjectHeight(pActiveTarget) / 2);
if((i + 1) < object_num) {
local next_obj = obj.getVar("cl").get_obj_vector(i + 1);
sq_SetCurrentPos(next_obj, target_x, target_y, target_z);
}
local pAni = pObj.getCurrentAnimation();
if(state == S_PO_ATCL_0) {
procChainLightning(obj, pObj, pActiveTarget, i);
if(pAni.GetCurrentFrameIndex() >= 2)
{ // ?营 绮 螃粽薛?暧 ?溯歜樯策蝶陛 2?溯歜击 剩横除棻贼..
if(obj.getVar("cl").get_vector(i) == 0)
{ // ?营 绮 颤啃?桧 棻挤戏煎 葭觼肾虽 强懊棻贼..
if(obj.isMyControlObject())
{
local id = sq_GetObjectId(pTargetObj);
if(id != -1) {
//VI_SKL_6 <- 6 // 6.虽楼卫除
//VI_SKL_7 <- 7 // 7.奢问溘(%)
//VI_SKL_8 <- 8 // 8.棻钦?? ?热
//VI_SKL_9 <- 9 // 9.棻钦?? 除问
local attack_time = obj.getVar("skl").get_vector(VI_SKL_6);
local attack_rate = obj.getVar("skl").get_vector(VI_SKL_7);
local multi_hit_num = obj.getVar("skl").get_vector(VI_SKL_8);
//local multi_hit_term = obj.getVar("skl").get_vector(VI_SKL_9);
sq_BinaryStartWrite();
sq_BinaryWriteDword(id);
sq_BinaryWriteDword(attack_time);
sq_BinaryWriteDword(attack_rate);
sq_BinaryWriteDword(multi_hit_num);
//sq_BinaryWriteDword(multi_hit_term);
sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24242, 0, target_x, target_y - 1, target_z);
}
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, target_x);
sq_IntVectorPush(pIntVec, target_y + 1);
sq_IntVectorPush(pIntVec, target_z);
//VI_SKL_0 <- 0 // 0. 籀挤 颤啃?卫 Y蹴 彰嫔 (鼻? ??)
//VI_SKL_1 <- 1 // 1.籀挤 颤啃?卫 X蹴 卫蒙 剪葬
//VI_SKL_2 <- 2 // 2.籀挤 颤啃?卫 X蹴 部 剪葬
//VI_SKL_3 <- 3 // 3.羹樯卫 棻挤 颤啃梱虽暧 譆渠 剪葬
//VI_SKL_4 <- 4 // 4.颤问? 瞳暧 譆渠 堪桧
local next_x_range = obj.getVar("skl").get_vector(VI_SKL_3);
local z_range = obj.getVar("skl").get_vector(VI_SKL_4);
local pTargetChr = obj.sq_FindNextTarget(pActiveTarget, next_x_range, z_range);
local id = sq_GetObjectId(pTargetChr);
sq_IntVectorPush(pIntVec, id);
obj.addSetStatePacket(S_PO_ATCL_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
obj.getVar("cl").set_vector(i, 1); //
return;
}
}
}
else if(state == S_PO_ATCL_1) {
procChainLightning(obj, pObj, pActiveTarget, i);
}
}
else
{
if(state == S_PO_ATCL_1)
{
//print(" procChainLightning(obj, pObj, pActiveTarget, i):" + pObj);
procChainLightning(obj, pObj, null, i);
}
}
}
local substate = pChr.getSkillSubState();
if(substate == SUB_STATE_ATCHAINLIGHTNING_2) {
if(state == S_PO_ATCL_0)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
print(" ln546 setstate");
obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
return;
}
}
if(object_num <= 0)
{
if(obj.sq_var.get_vector(1) > 0)
{
if(obj.getVar("cl").get_obj_vector_size() == 0)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
}
}
function onChangeSkillEffect_po_ATChainLightning(obj, skillIndex, data, dataSize)
{
if(!obj) return;
}
function getDestroyObjectByCIObjectIndex(obj, diedObject)
{ // 饵塭虽朝 螃粽薛?煎 饵塭螳捡?朝 绮螃粽薛?蒂 葬欐?栖棻.
if(!diedObject || !obj)
return null;
local objectNum = obj.sq_var.get_obj_vector_size();
local index = obj.sq_var.get_obj_vector_index(diedObject);
return index;
}
function setDiableAnimationCIObject(obj, index)
{ // 饵塭螳捡? ?蹂陛 毡朝 绮 螃粽薛?蒂 饵塭虽紫烟 撮??栖棻.
if(!obj)
return;
//local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATChainLightning/Firing/6_lightning_dodge_empty.ani");
local destroyIndex = index + 1;
if(destroyIndex >= obj.getVar("cl").get_obj_vector_size())
destroyIndex = index;
local clObject = obj.getVar("cl").get_obj_vector(destroyIndex);
//print( " setDiableAnimationCIObject:" + (destroyIndex);
if(clObject)
{
if(destroyIndex < obj.getVar("cl").get_obj_vector_size())
{ // ?卫粽螃粽薛? ?桧横 ?楚斜蒂 樯策蝶翕晦? ?晦嫔?..觊 蜀缣 寰萄朝 翕晦? 寞彻 姜热漱搅朝 erase?晦缚 伞鼠 睑隶陪棻..
for (local i = destroyIndex;i < obj.getVar("cl").size_vector(); i+=1)
{
if( (i + 1) < obj.getVar("cl").size_vector())
{
local flagValue = obj.getVar("cl").get_vector(i + 1);
obj.getVar("cl").set_vector(i, flagValue);
}
}
}
obj.getVar("cl").remove_obj_vector(clObject); // 绮
clObject.setValid(false);
}
//clObject.setCurrentAnimation(ani);
}
function onDestroyObject_po_ATChainLightning(obj, object)
{
if(!obj) return;
if(!obj.isValid())
return;
local state = obj.getVar("state").get_vector(0);
if(state != S_PO_ATCL_1 && state != S_PO_ATCL_0)
{
return;
}
if(obj.getVar("cl").get_obj_vector_size() == 0)
{ //
//print(" nograb on");
obj.getVar("nograb").set_vector(0, 1);
}
local index = getDestroyObjectByCIObjectIndex(obj, object);
if(index != -1)
{
setDiableAnimationCIObject(obj, index);
}
obj.sq_var.remove_obj_vector(object); // 蜃坚毡朝 跪
//sq_SendDestroyPacketPassiveObject(obj);
obj.getVar("cl").remove_obj_vector(object); // 绮
//print(" ondestroy");
if(obj.isMyControlObject())
{
if(state == S_PO_ATCL_0)
{
if(!obj.sq_var.get_obj_vector_size())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
print(" ln671 setstate");
obj.addSetStatePacket(S_PO_ATCL_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
//print(" obj.addSetStatePacket(S_PO_ATCL_1 ");
}
//obj.setValid(false);
}
function onKeyFrameFlag_po_ATChainLightning(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATChainLightning(obj)
{
if(!obj) return;
//print("onEndCurrentAni_po_ATChainLightning");
//if(obj.isMyControlObject()) {
//sq_SendDestroyPacketPassiveObject(obj);
//}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,59 @@
function setCustomData_po_ATCrystalCore(obj,receiveData)
{
if(!obj)
return;
local dmg = receiveData.readDword();
local angle = receiveData.readFloat();
local attackSpeedRate = receiveData.readWord();
local index = receiveData.readWord();
if(index >= 3 && index <= 6)
setCurrentAnimationFromCutomIndex(obj,0);
else if(index > 6)
setCurrentAnimationFromCutomIndex(obj,1);
angle = sq_ToRadian(angle);
obj.sq_var.setInt(0,dmg);
sq_SetCustomRotate(obj,angle);
if(attackSpeedRate != 100) {
local ani = sq_GetCurrentAnimation(obj);
if(ani) {
ani.setSpeedRate(attackSpeedRate.tofloat());
}
}
}
function onKeyFrameFlag_po_ATCrystalCore(obj,flagIndex)
{
if(!obj)
return false;
local parentObj = obj.getParent();
if(parentObj) {
sq_SetCurrentAttackInfo(obj,obj.getDefaultAttackInfo());
local dmg = obj.sq_var.getInt(0);
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, dmg);
sq_SetMyShake(parentObj,3,120);
}
return true;
}
function onEndCurrentAni_po_ATCrystalCore(obj)
{
if(!obj)
return;
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}

Binary file not shown.

View File

@@ -0,0 +1,347 @@
SUB_STATE_DARKNESSMANTLE_0 <- 0
SUB_STATE_DARKNESSMANTLE_1 <- 1
SUB_STATE_DARKNESSMANTLE_2 <- 2
SUB_STATE_DARKNESSMANTLE_3 <- 3
SUB_STATE_DARKNESSMANTLE_4 <- 4
SUB_STATE_DARKNESSMANTLE_CASTING <- 5
function checkExecutableSkill_DarknessMantle(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_DARKNESSMANTLE);
if(b_useskill)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_DARKNESSMANTLE_CASTING); // substate撮?
obj.sq_AddSetStatePacket(STATE_DARKNESSMANTLE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_DarknessMantle(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_DARKNESSMANTLE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true;
}
function onSetState_DarknessMantle(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().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
if(substate == SUB_STATE_DARKNESSMANTLE_CASTING)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_DARKNESSMANTLE_CASTING);
local skillLevel = sq_GetSkillLevel(obj, SKILL_DARKNESSMANTLE);
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
local castTime = sq_GetCastTime(obj, SKILL_DARKNESSMANTLE, skillLevel);
local animation = sq_GetCurrentAnimation(obj);
local startTime = sq_GetFrameStartTime(animation, 16);
local speedRate = startTime.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, startTime, true);
addElementalChain_ATMage(obj, ENUM_ELEMENT_DARK);
}
else if(substate == SUB_STATE_DARKNESSMANTLE_0)
{
obj.sq_PlaySound("MW_DMANTLE_READY");
obj.sq_SetCurrentAnimation(CUSTOM_ANI_DARKNESSMANTLE);
}
else if(substate == SUB_STATE_DARKNESSMANTLE_1) {
// SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_2) {
// SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_3) {
// SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_4) {
// SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机
}
}
function prepareDraw_DarknessMantle(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_DARKNESSMANTLE_0) {
// SUB_STATE_DARKNESSMANTLE_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_1) {
// SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_2) {
// SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_3) {
// SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_4) {
// SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机
}
}
function onProc_DarknessMantle(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if(substate == SUB_STATE_DARKNESSMANTLE_0) {
// SUB_STATE_DARKNESSMANTLE_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_1) {
// SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_2) {
// SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_3) {
// SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_4) {
// SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机
}
}
function onProcCon_DarknessMantle(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if(substate == SUB_STATE_DARKNESSMANTLE_0) {
if(!obj.getVar("flag").get_vector(0))
{
if(frmIndex >= 4)
{
local skillLevel = obj.sq_GetSkillLevel(SKILL_DARKNESSMANTLE);
local suckVel = obj.sq_GetIntData(SKILL_DARKNESSMANTLE, 0); // 0. 庄横渡晦朝 ?
// 0.匐擎晦遴 彰嫔 (<-100%->) 1.裔?奢问溘(%) 2.菩?溯涟 3.菩?虽楼溯涟
local darkCircleRate = obj.sq_GetLevelData(SKILL_DARKNESSMANTLE, SKL_LVL_COLUMN_IDX_0, skillLevel);
local expAtkRate = obj.sq_GetBonusRateWithPassive(SKILL_DARKNESSMANTLE, STATE_DARKNESSMANTLE, SKL_LVL_COLUMN_IDX_1, 1.0); // 1.裔?奢问溘(%)
local slowLevel = obj.sq_GetLevelData(SKILL_DARKNESSMANTLE, SKL_LVL_COLUMN_IDX_2, skillLevel);
local slowTime = obj.sq_GetLevelData(SKILL_DARKNESSMANTLE, SKL_LVL_COLUMN_IDX_3, skillLevel);
// 觼煎栖赝 嬴桧蛊 跷陛蒙机
// 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%)
local sizeRate = obj.sq_GetIntData(SKILL_DARKNESSMANTLE, 0); // 0. 庄横渡晦朝 ?
if(obj.isMyControlObject())
{
local fireOffsetX = 200;
sq_BinaryStartWrite();
sq_BinaryWriteDword(suckVel); //
sq_BinaryWriteDword(darkCircleRate); //
sq_BinaryWriteDword(expAtkRate); //
sq_BinaryWriteDword(slowLevel); //
sq_BinaryWriteDword(slowTime); //
// 觼煎栖赝 嬴桧蛊 跷陛蒙机
// 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%)
local expSizeRate = obj.sq_GetIntData(SKILL_DARKNESSMANTLE, 1); // 1. 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%~)
sq_BinaryWriteDword(expSizeRate); //
obj.sq_SendCreatePassiveObjectPacket(24252, 0, fireOffsetX, 1, 0);
}
obj.getVar("flag").set_vector(0, 1);
}
}
}
else if(substate == SUB_STATE_DARKNESSMANTLE_1) {
// SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_2) {
// SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_3) {
// SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_4) {
// SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_DarknessMantle(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) {
return;
}
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_DARKNESSMANTLE_CASTING)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_DARKNESSMANTLE_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_DARKNESSMANTLE, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_DARKNESSMANTLE_0)
{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == SUB_STATE_DARKNESSMANTLE_1) {
// SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_2) {
// SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_3) {
// SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_4) {
// SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机
}
}
function onKeyFrameFlag_DarknessMantle(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_DARKNESSMANTLE_0) {
// SUB_STATE_DARKNESSMANTLE_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_1) {
// SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_2) {
// SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_3) {
// SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_4) {
// SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_DarknessMantle(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_DARKNESSMANTLE_0) {
// SUB_STATE_DARKNESSMANTLE_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_1) {
// SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_2) {
// SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_3) {
// SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_4) {
// SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机
}
// 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据
sq_EndDrawCastGauge(obj);
}
function onAfterSetState_DarknessMantle(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_DARKNESSMANTLE_0) {
// SUB_STATE_DARKNESSMANTLE_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_1) {
// SUB_STATE_DARKNESSMANTLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_2) {
// SUB_STATE_DARKNESSMANTLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_3) {
// SUB_STATE_DARKNESSMANTLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DARKNESSMANTLE_4) {
// SUB_STATE_DARKNESSMANTLE_4 怃粽蝶才桧? 蒙机
}
}

View File

@@ -0,0 +1,891 @@
function createBlackCrackPaticle(obj, x, y, z)
{
if(!obj)
return;
local particleCreater = obj.getVar().GetparticleCreaterMap("CrackBlackPtl", "PassiveObject/Character/Mage/Particle/ATDarknessMantleCrack.ptl", obj);
particleCreater.Restart(0);
particleCreater.SetPos(x, y, z);
sq_AddParticleObject(obj, particleCreater);
}
function createCrackPiece(obj, index, x, y, z)
{
if(!obj)
return null;
local pooledObj = null;
local cx = 0;
local cy = 0;
local cz = 0;
//obj.getVar("crackpos").push_vector(0);
//obj.getVar("crackpos").push_vector(0);
//obj.getVar("crackpos").push_vector(0);
//obj.getVar("crackpos").push_vector(0);
//obj.getVar("crackpos").push_vector(0);
//obj.getVar("crackpos").push_vector(0);
if(index == 0)
{
//pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge.ani", false, x, y, z);
cx = x - 30;
cy = y + 2;
cz = z + 174;
pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz);
}
else if(index == 1)
{
//pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_1.ani", false, x, y, z);
cx = x + 45;
cy = y + 1;
cz = z + 118;
pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz);
}
else if(index == 2)
{
//pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_2.ani", false, x, y, z);
cx = x + 8;
cy = y + 1;
cz = z + 50;
pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/08_crack_back_normal_50.ani", false, cx, cy, cz);
}
local vectorIndex = index * 2;
obj.getVar("crackpos").set_vector(vectorIndex + 0, cx);
obj.getVar("crackpos").set_vector(vectorIndex + 1, cz);
return pooledObj;
}
function createDarkBall(obj, x, y, z)
{
local pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/darkball/09_darkball_0.ani", false, x, y, z);
return pooledObj;
}
function createFrontFirstDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/05_aura_front_normal_1.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createBackFirstDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/01_aura_back_normal_1.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createFrontFirstSDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/05_aura_front_normal_2.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createBackFirstSDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/01/01_aura_back_normal_2.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createFrontLoopDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/05_aura_front_normal_1.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createBackLoopDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/01_aura_back_normal_1.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createFrontLoopSDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/05_aura_front_normal_2.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function createBackLoopSDarknessArea(obj, x, y, z, widthRate, heightRate)
{
local pooledObj = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Loop/01_aura_back_normal_2.ani", false, widthRate, heightRate, x, y, z);
return pooledObj;
}
function destroyCrackObject(obj)
{
if(!obj)
return;
local objListSize = obj.getVar("crack").get_obj_vector_size();
print(" crack objListSize:" + objListSize);
for(local i =0;i<objListSize;++i)
{
local crackObj = obj.getVar("crack").get_obj_vector(i);
if(crackObj == null)
continue;
crackObj.setValid(false);
}
obj.getVar("crack").clear_obj_vector();
}
function setPosXCrackObject(obj, cx)
{
local objListSize = obj.getVar("crack").get_obj_vector_size();
for(local i =0;i<objListSize;++i)
{
local vObj = obj.getVar("crack").get_obj_vector(i);
if(vObj == null)
continue;
sq_setCurrentAxisPos(vObj, 0, cx);
}
}
function procCrackDarknessCircle(obj) // 敕翮桧 陬击 阳 掘羹陛 ?菟葬朝 籀葬
{
if(!obj)
return;
local circle_obj = obj.getVar().get_obj_vector(0); // 掘
if(!circle_obj)
return;
local x = sq_GetXPos(circle_obj);
local y = sq_GetYPos(circle_obj);
local z = sq_GetZPos(circle_obj);
local vib = false;
local objListSize = obj.getVar().get_obj_vector_size();
for(local i =1;i<objListSize;++i)
{
local crackObj = obj.getVar().get_obj_vector(i);
if(crackObj == null)
continue;
local ani = sq_GetCurrentAnimation(crackObj);
local frmIndex = sq_GetAnimationFrameIndex(ani);
print( " exp i:" + i + " frmIndex:" + frmIndex);
if(frmIndex >= 1)
{
local expVectorIndex = i - 1;
if(!obj.getVar("crackexp").get_vector(expVectorIndex))
{
sq_SetMyShake(obj, 2, 100);
local ox = sq_GetXPos(obj);
local oy = y + 1;
local oz = sq_GetZPos(obj);
local crackPooledObj = null;
if(expVectorIndex == 0)
crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge.ani", false, ox, oy, oz);
else if(expVectorIndex == 1)
crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_1.ani", false, ox, oy, oz);
else if(expVectorIndex == 2)
crackPooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Crack/12_crack_darkball_dodge_2.ani", false, ox, oy, oz);
obj.getVar("crack").push_obj_vector(crackPooledObj);
local vectorIndex = (expVectorIndex) * 2;
//
local cx = obj.getVar("crackpos").get_vector(vectorIndex + 0);
local cz = obj.getVar("crackpos").get_vector(vectorIndex + 1);
//
local particleCreater = obj.getVar().GetparticleCreaterMap("ATDarknessMantlePtl", "PassiveObject/Character/Mage/Particle/Appear.ptl", obj);
//
particleCreater.Restart(0);
particleCreater.SetPos(cx, y + 5, cz);
sq_AddParticleObject(obj, particleCreater);
//
createBlackCrackPaticle(obj, cx, y + 4, cz);
//
obj.getVar("crackexp").set_vector(expVectorIndex, 1);
}
}
if(frmIndex >= 1 && frmIndex < 4)
{
vib = true;
}
}
local cx = obj.getVar("darkcircle").get_vector(0);
if(vib)
{
if(x <= cx)
{
sq_setCurrentAxisPos(circle_obj, 0, cx + 2);
setPosXCrackObject(obj, cx + 2);
}
else
{
sq_setCurrentAxisPos(circle_obj, 0, cx - 2);
setPosXCrackObject(obj, cx - 2);
}
}
else
{
if(x != cx)
{
sq_setCurrentAxisPos(circle_obj, 0, cx);
setPosXCrackObject(obj, cx);
}
}
}
function setCustomData_po_ATDarknessMantle(obj, reciveData)
{
if(!obj) return;
local suckVel = reciveData.readDword(); // 0. 庄横渡晦朝 ?
// 0.匐擎晦遴 彰嫔 (<-100%->) 1.裔?奢问溘(%) 2.菩?溯涟 3.菩?虽楼溯涟
local darkCircleRate = reciveData.readDword(); // 横菸怃赝 彰嫔 (100%)
local expAtkRate = reciveData.readDword(); // 1.裔?奢问溘(%)
local slowLevel = reciveData.readDword(); // 菩? 溯涟
local slowTime = reciveData.readDword(); // 菩? 虽楼卫除
local sizeRate = reciveData.readDword(); // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%)
// 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%)
obj.getVar("sizerate").clear_vector();
obj.getVar("sizerate").push_vector(sizeRate);
obj.getVar("attack").clear_vector();
obj.getVar("attack").push_vector(suckVel);
obj.getVar("attack").push_vector(darkCircleRate);
obj.getVar("attack").push_vector(expAtkRate);
obj.getVar("attack").push_vector(slowLevel);
obj.getVar("attack").push_vector(slowTime);
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(PASSIVEOBJ_SUB_STATE_0);
obj.getVar("state").clear_ct_vector();
obj.getVar("state").push_ct_vector();
obj.getVar("crackexp").clear_vector();
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackpos").clear_vector();
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crack").clear_obj_vector();
obj.getVar("create").clear_vector();
obj.getVar("create").push_vector(1);
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
function setState_po_ATDarknessMantle(obj, state, datas)
{
if(!obj) return;
local passiveState = state;
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("crackexp").clear_vector();
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackexp").push_vector(0);
obj.getVar("crackpos").clear_vector();
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("crackpos").push_vector(0);
obj.getVar("state").set_vector(0, passiveState);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local t = obj.getVar("state").get_ct_vector(0);
t.Reset();
t.Start(10000,0);
//obj.getVar("attack").push_vector(suckVel);
//obj.getVar("attack").push_vector(darkCircleRate);
//obj.getVar("attack").push_vector(expAtkRate);
//obj.getVar("attack").push_vector(slowLevel);
//obj.getVar("attack").push_vector(slowTime);
//.tointeger()
//.tofloat()
local area100Rate = obj.getVar("attack").get_vector(VECTOR_FLAG_1);
local areaRate = area100Rate.tofloat() / 100.0;
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
local po1 = createBackFirstDarknessArea(obj, x, y - 25, 0, areaRate, areaRate);
local po2 = createFrontFirstDarknessArea(obj, x, y + 50, 0, areaRate, areaRate);
local po3 = createBackFirstSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate);
local po4 = createFrontFirstSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate);
destroyObject(obj);
obj.getVar().push_obj_vector(po1);
obj.getVar().push_obj_vector(po2);
obj.getVar().push_obj_vector(po3);
obj.getVar().push_obj_vector(po4);
local currentAni = sq_GetCurrentAnimation(obj);
if(currentAni)
{
//currentAni.setImageRateFromOriginal(areaRate, areaRate);
currentAni.applyBoundingBoxRate(areaRate,0,0); //
}
initGetVarTimer(obj, 1, 30, -1);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
//local po1 = createBackLoopDarknessArea(obj, x, y - 25, 0, areaRate, areaRate);
//local po2 = createFrontLoopDarknessArea(obj, x, y + 50, 0, areaRate, areaRate);
//local po3 = createBackLoopSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate);
//local po4 = createFrontLoopSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate);
local ani = obj.getCustomAnimation(0);
if(ani)
obj.setCurrentAnimation(ani);
//destroyObject(obj);
//
//local loopAni = po2.getCurrentAnimation();
//local size = sq_GetAniRealImageSize(loopAni, ENUM_DIRECTION_RIGHT);
//
//obj.getVar("attack").push_vector(size);
//
//obj.getVar().push_obj_vector(po1);
//obj.getVar().push_obj_vector(po2);
//obj.getVar().push_obj_vector(po3);
//obj.getVar().push_obj_vector(po4);
local currentAni = sq_GetCurrentAnimation(obj);
if(currentAni)
{
currentAni.applyBoundingBoxRate(areaRate,0,0); //
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
local po1 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/01_aura_back_normal_1.ani", true, areaRate, areaRate, x, y - 25, 0);
local po2 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/05_aura_front_normal_1.ani", true, areaRate, areaRate, x, y + 50, 0);
local po3 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/01_aura_back_normal_2.ani", true, areaRate, areaRate, x, y - 22, 0);
local po4 = createAnimationImageRatePooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Release/05_aura_front_normal_2.ani", true, areaRate, areaRate, x, y + 20, 0);
destroyObject(obj);
local ani = obj.getCustomAnimation(1);
if(ani)
obj.setCurrentAnimation(ani);
local p5 = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/Suck/07_absorb_normal_50r.ani", false, x + 3, y + 10, 110);
obj.getVar().push_obj_vector(p5);
local parentObj = obj.getParent();
// 庄横菟桧朝 横?蛤虽 陛翕
local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_DARKNESSMANTLE, false, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut", false);
local suckVel = obj.getVar("attack").get_vector(VECTOR_FLAG_0);
local range = obj.getVar("attack").get_vector(VECTOR_FLAG_5);
if(appendage)
{
//appendage.sq_SetValidTime(3000);
// 罹晦怃 append 蒙机
CNSquirrelAppendage.sq_Append(appendage, parentObj, obj);
local auraAppendage = appendage.sq_getAuraMaster("auraMaster");
//
if(!auraAppendage)
auraAppendage = appendage.sq_AddAuraMaster("auraMaster", parentObj, obj, 1200, 18, 5, 0);
if(auraAppendage)
{
auraAppendage.setAttractionInfo(suckVel, suckVel, range, 100);
}
//
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_3)
{
local cx = x + 3;
local cy = y + 10;
local cz = 110;
local poBall = createDarkBall(obj, cx, cy, cz);
destroyObject(obj);
//4183
//6515
obj.getVar().push_obj_vector(poBall); // 0
obj.getVar("darkcircle").clear_vector();
obj.getVar("darkcircle").push_vector(cx);
obj.getVar("darkcircle").push_vector(cy);
obj.getVar("darkcircle").push_vector(cz);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_4)
{
local cx = x;
local cy = y + 12;
local cz = 0;
local expStartObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/16_exp_start.ani", false, cx, cy, cz);
obj.getVar().push_obj_vector(expStartObj); // 4
}
local atk = sq_GetCurrentAttackInfo(obj);
if(atk)
{
local slowLevel = obj.getVar("attack").get_vector(VECTOR_FLAG_3);
local slowTime = obj.getVar("attack").get_vector(VECTOR_FLAG_4);
sq_SetChangeStatusIntoAttackInfo(atk, 0, ACTIVESTATUS_SLOW, 100, slowLevel, slowTime);
}
}
function allDestroy(obj)
{
if(!obj)
return;
destroyObject(obj);
destroyCrackObject(obj);
local parentObj = obj.getParent();
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut");
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
function destroy_po_ATDarknessMantle(obj)
{
destroyObject(obj);
destroyCrackObject(obj);
local parentObj = obj.getParent();
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_suck.nut");
}
function reset_po_ATDarknessMantle(obj)
{
}
function procAppend_po_ATDarknessMantle(obj)
{
if(!obj) return;
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local passiveState = obj.getVar("state").get_vector(0);
local objListSize = obj.getVar().get_obj_vector_size();
local pAni = sq_GetCurrentAnimation(obj);
local frmIndex = sq_GetAnimationFrameIndex(pAni);
//local currentT = sq_GetCurrentTime(pAni);
//local currentT = obj.getStateTimer().Get();
local t = obj.getVar("state").get_ct_vector(0);
local currentT = 0;
if(t)
{
currentT = t.Get();
}
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
if(frmIndex > 1)
procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/mmagic_dark.ptl", x, y, z);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
if(objListSize > 0)
{
local p1 = obj.getVar().get_obj_vector(0);
local p2 = obj.getVar().get_obj_vector(1);
local p3 = obj.getVar().get_obj_vector(2);
local p4 = obj.getVar().get_obj_vector(3);
}
if(currentT > 1000)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
else
{
procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/mmagic_dark.ptl", x, y, z);
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
local darkCircleObj = obj.getVar().get_obj_vector(0); // 2
local ani = sq_GetCurrentAnimation(darkCircleObj);
if(sq_IsEnd(ani))
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_3, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_3)
{
if(currentT > 20)
{
local crack0 = obj.getVar().get_obj_vector(1);
local crack1 = obj.getVar().get_obj_vector(2);
local crack2 = obj.getVar().get_obj_vector(3);
local cy = y + 11;
if(!obj.getVar("flag").get_vector(0))
{
local p6 = createCrackPiece(obj, 0, x, cy, 0);
obj.getVar().push_obj_vector(p6); // 1
obj.getVar("flag").set_vector(0, 1);
}
if(obj.getVar("flag").get_vector(0) == 1)
{
if(!obj.getVar("flag").get_vector(1))
{
local ani = sq_GetCurrentAnimation(crack0);
local frmIndex = sq_GetAnimationFrameIndex(ani);
if(frmIndex >= 3)
{
local p6 = createCrackPiece(obj, 1, x, cy, 0);
obj.getVar().push_obj_vector(p6); // 2
obj.getVar("flag").set_vector(1, 1);
}
}
}
if(obj.getVar("flag").get_vector(1) == 1)
{
if(!obj.getVar("flag").get_vector(2))
{
local ani = sq_GetCurrentAnimation(crack1);
local frmIndex = sq_GetAnimationFrameIndex(ani);
if(frmIndex >= 3)
{
local p6 = createCrackPiece(obj, 2, x, cy, 0);
obj.getVar().push_obj_vector(p6); //3
obj.getVar("flag").set_vector(2, 1);
}
}
}
if(!obj.getVar("flag").get_vector(3))
{
local ani = sq_GetCurrentAnimation(crack2);
local frmIndex = sq_GetAnimationFrameIndex(ani);
if(frmIndex >= 3)
{
obj.getVar("flag").set_vector(3, 1);
}
}
procCrackDarknessCircle(obj);
local objListSize = obj.getVar().get_obj_vector_size();
if(objListSize >= 4)
{
local isEndAnimation = true; // 敕翮 拥栖诡桧暮桧 部陬朝虽 羹觼
for(local i =1;i<objListSize;++i)
{
local obj = obj.getVar().get_obj_vector(i);
if(obj == null)
continue;
local ani = sq_GetCurrentAnimation(obj);
local isEnd = sq_IsEnd(ani);
if(!isEnd)
isEndAnimation = false;
}
if(isEndAnimation)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_4, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
}
// PASSIVEOBJ_SUB_STATE_3
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_4)
{
local expStartObj = obj.getVar().get_obj_vector(4); // exp
if(expStartObj)
{
local ani = sq_GetCurrentAnimation(expStartObj);
local isEnd = sq_IsEnd(ani);
if(!obj.getVar("flag").get_vector(1))
{
local expFrmIndex = sq_GetAnimationFrameIndex(ani);
if(expFrmIndex >= 2)
{
local fScreen = sq_flashScreen(obj,0,100,0,200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.getVar("flag").set_vector(1, 1);
}
}
if(isEnd)
{
print(" exp:" + obj.getVar("flag").get_vector(0));
if(!obj.getVar("flag").get_vector(0))
{
destroyCrackObject(obj);
if(obj.isMyControlObject())
{
local expAtkRate = obj.getVar("attack").get_vector(VECTOR_FLAG_2);
sq_BinaryStartWrite();
sq_BinaryWriteDword(expAtkRate); //
// 觼煎栖赝 嬴桧蛊 跷陛蒙机
// 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%)
local size100Rate = 100;
if(obj.getVar("sizerate").get_vector(0) > 0)
{
size100Rate = obj.getVar("sizerate").get_vector(0);
}
sq_BinaryWriteDword(size100Rate); //
///////////////////////////////////
sq_SendCreatePassiveObjectPacket(obj, 24253, 0, 0, 1, 0, obj.getDirection());
}
obj.getVar("flag").set_vector(0, 1);
allDestroy(obj);
}
}
}
else
{
allDestroy(obj);
}
}
}
function onChangeSkillEffect_po_ATDarknessMantle(obj, skillIndex, reciveData)
{
if(!obj) return;
}
function onDestroyObject_po_ATDarknessMantle(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATDarknessMantle(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATDarknessMantle(obj)
{
if(!obj) return;
local passiveState = obj.getVar("state").get_vector(0);
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local area100Rate = obj.getVar("attack").get_vector(VECTOR_FLAG_1);
local areaRate = area100Rate.tofloat() / 100.0;
local po1 = createBackLoopDarknessArea(obj, x, y - 25, 0, areaRate, areaRate);
local po2 = createFrontLoopDarknessArea(obj, x, y + 50, 0, areaRate, areaRate);
local po3 = createBackLoopSDarknessArea(obj, x, y - 22, 0, areaRate, areaRate);
local po4 = createFrontLoopSDarknessArea(obj, x, y + 20, 0, areaRate, areaRate);
destroyObject(obj);
local loopAni = po2.getCurrentAnimation();
local size = sq_GetAniRealImageSize(loopAni, ENUM_DIRECTION_RIGHT);
obj.getVar("attack").push_vector(size);
obj.getVar().push_obj_vector(po1);
obj.getVar().push_obj_vector(po2);
obj.getVar().push_obj_vector(po3);
obj.getVar().push_obj_vector(po4);
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
}
}
function onAttack_po_ATDarknessMantle(obj, damager, boundingBox, isStuck)
{
if(!obj) return 0;
local pChr = obj.getTopCharacter();
if(!pChr) return 0;
local active_damager = sq_GetCNRDObjectToActiveObject(damager);
if(!active_damager)
return 0;
CNSquirrelAppendage.sq_AppendAppendage(damager, damager, SKILL_DARKNESSMANTLE,
false, "Character/ATMage/DarknessMantle/ap_ATDarknessMantle_effect.nut", true);
return 0;
}

View File

@@ -0,0 +1,91 @@
function setCustomData_po_ATDarknessMantleExp(obj, reciveData)
{
if(!obj) return;
local expAttackRate = reciveData.readDword(); // 横菸怃赝 ?湘
local sizeRate = reciveData.readDword(); // 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%)
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local pAttack = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(pAttack, expAttackRate);
local pooledObj = null;
pooledObj = sq_CreateDrawOnlyObject(obj, "PassiveObject/Character/Mage/Animation/ATDarknessMantle/exp/3_exp_shock_normal_1.ani", ENUM_DRAWLAYER_BOTTOM, true);
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
local fScreen = sq_flashScreen(obj,0,80,0,80, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_addFlashScreen(fScreen, 0, 240, 240, 150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_SetMyShake(obj,4,200);
obj.sq_PlaySound("MW_DMANTLE");
// 觼煎栖赝嬴桧蛊 跷陛 晦栋 横菸怃赝 ?渠徽 (100%)
local currentAni = sq_GetCurrentAnimation(obj);
if(currentAni)
{
sizeRate = sizeRate.tofloat() / 100.0;
currentAni.Proc();
currentAni.setImageRateFromOriginal(sizeRate, sizeRate);
sq_SetAttackBoundingBoxSizeRate(currentAni, sizeRate, sizeRate, sizeRate);
}
}
function setState_po_ATDarknessMantleExp(obj, state, datas)
{
if(!obj) return;
}
function procAppend_po_ATDarknessMantleExp(obj)
{
if(!obj) return;
}
function onChangeSkillEffect_po_ATDarknessMantleExp(obj, skillIndex, reciveData)
{
if(!obj) return;
}
function onDestroyObject_po_ATDarknessMantleExp(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATDarknessMantleExp(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATDarknessMantleExp(obj)
{
if(!obj) return;
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}

View File

@@ -0,0 +1,472 @@
STATE_SLOW_HEAL <- 0 /// 茧茧? ?犒酝
STATE_REBIRTH_READY_DOWN <- 1 /// HP 0桧 脾. 斜楝釭 嬴霜 DOWN 擎 寰腑挤
STATE_REBIRTH_DOWN <- 2 /// HP 0桧 肾坚 棻遴腑挤.
STATE_REBIRTH_DELAY <- 3 /// 睡? 裁溯桧
STATE_DIEHARD_DIE <- 4 // 棻桧
REBIRTH_STATE_NONE <- 0
REBIRTH_STATE_ANGEL_DOWN <- 1
REBIRTH_STATE_EFFECT <- 2
REBIRTH_STATE_END <- 3
VECTOR_I_STATE <- 0
VECTOR_I_FLAG <- 1
VECTOR_I_REBIRTH_STATE <- 2
VECTOR_I_REBIRTH_TIME <- 3
GHOST_TIME <- 2000
ANGEL_DOWN_TIME <- 1000
DOWN_PAUSE_TIME <- 100
function sq_AddFunctionName(appendage)
{
appendage.sq_AddFunctionName("proc", "proc_appendage_atmage_diehard")
appendage.sq_AddFunctionName("prepareDraw", "prepareDraw_appendage_atmage_diehard")
appendage.sq_AddFunctionName("onStart", "onStart_appendage_atmage_diehard")
appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_atmage_diehard")
appendage.sq_AddFunctionName("isEnd", "isEnd_appendage_atmage_diehard")
appendage.sq_AddFunctionName("onSetHp", "onSetHp_appendage_atmage_diehard")
}
function sq_AddEffect(appendage)
{
}
function pushSlowHeal(appendage)
{
if(!appendage)
{
return;
}
local parentObj = appendage.getParent();
local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj);
if(sqrChr)
{
local moduleType = sq_GetCurrentModuleType();
local recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_2); // 橾奁湍瞪
//print(" moduleType:" + moduleType);
local stage = sq_GetGlobaludpModuleStage();
local dungeon = sq_GetDungeonByStage(stage);
local isDimensionDungeon = sq_IsDimensionDungeon(dungeon); // 桧啗湍瞪樯虽
local isDespairTower = sq_IsDespairTower(dungeon); // 瞰蜂暧 鳖樯虽
local isAncientDungeon = sq_IsAncientDungeon(dungeon); // 坚渠湍瞪樯虽
if(isDimensionDungeon)
{ // 桧啗湍瞪桧塭贼..
//print( " DimensionDungeon");
recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_3);
}
else if(isDespairTower)
{ // 瞰蜂暧 鳖桧塭贼..
//print( " DespairTower");
recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_4);
}
else if(isAncientDungeon)
{// 坚渠湍蟒
recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_LVL_COLUMN_IDX_6);
}
else
{
if(moduleType == MODULE_TYPE_WARROOM)
{ // 瞪爵虽羲
//print( " WARROOM");
recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_5);
}
else if(moduleType == MODULE_TYPE_DEAD_TOWER)
{ // 饵鳖
//print( " DEAD_TOWER");
recoverTime = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_4);
}
}
// 鼻鹧桧鼻桧 勘溜棻贼 鼻鹧桧鼻击 ?横鄹栖棻. 酝絮, 轿?
if(parentObj.isMyControlObject())
{
sq_ReleaseActiveStatus(parentObj, ACTIVESTATUS_POISON);
sq_ReleaseActiveStatus(parentObj, ACTIVESTATUS_BLEEDING);
}
//print(" recoverTime:" + recoverTime);
sq_SendMessage(parentObj, OBJECT_MESSAGE_GHOST, 1, 0);
sq_PostDelayedMessage(parentObj, OBJECT_MESSAGE_GHOST, 0, 0, 8000);
appendage.getVar("diehard").set_vector(0, 1); // 碳饵蒂 ?廓 橾横陬历朝虽 羹觼?朝 ?楚斜殓栖棻.
local t = appendage.sq_var.get_ct_vector(0);
if(t)
{
t.Reset();
t.Start(10000,0);
}
local healAppendage = CNSquirrelAppendage.sq_AppendAppendage(sqrChr, sqrChr, SKILL_DIEHARD,
true, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut", false);
if(healAppendage)
{
local skillLevel = sqrChr.sq_GetSkillLevel(SKILL_DIEHARD);
healAppendage.setAppendCauseSkill(BUFF_CAUSE_SKILL, sq_getJob(sqrChr), SKILL_DIEHARD, skillLevel);
print( " recoverTime:" + recoverTime);
healAppendage.sq_SetValidTime(recoverTime);
// 罹晦怃 append 蒙机
CNSquirrelAppendage.sq_Append(healAppendage, sqrChr, sqrChr);
//
healAppendage.getVar("changehp").clear_vector();
healAppendage.getVar("changehp").push_vector(sqrChr.getHpMax());
healAppendage.getVar("changehp").push_vector(sqrChr.getMpMax());
//print(" recoverTime:" + recoverTime);
healAppendage.getVar("changehp").push_vector(recoverTime);
healAppendage.getVar("changehp").push_vector(0);
healAppendage.getVar("changehp").push_vector(0);
//local change_appendage = healAppendage.sq_GetCNChangeHp("changehp");
//if(!change_appendage)
{
//2. 橾钦湍瞪 ?犒卫除 (1/1000蟾)
//3. 桧啗湍瞪 ?犒卫除 (1/1000蟾)
//4. 鳖 ?犒卫除 (1/1000蟾)
//5. 瞪爵虽羲 ?犒卫除 (1/1000蟾)
// MODULE_TYPE_WARROOM // 瞪爵虽羲
// MODULE_TYPE_MAIN_GAME // 橾奁湍瞪(桧啗 ??)
// MODULE_TYPE_PVP // 念潍
// MODULE_TYPE_FAIR_PVP // 奢念
//local recoverHp_ = sqrChr.getHpMax();
//4000 //2. 橾钦湍瞪 ?犒卫除 (1/1000蟾)
//4000 //3. 桧啗湍瞪 ?犒卫除 (1/1000蟾)
//4000 //4. 鳖 ?犒卫除 (1/1000蟾)
//4000 //5. 瞪爵虽羲 ?犒卫除 (1/1000蟾)
//change_appendage = healAppendage.sq_AddCNChangeHp("changehp",parentObj, parentObj, 0,
//recoverHp_.tofloat(), recoverTime);
}
}
}
}
function proc_appendage_atmage_diehard(appendage)
{
if(!appendage) {
return;
}
local parentObj = appendage.getParent();
if(!parentObj)
{
appendage.setValid(false);
return;
}
local state_ = appendage.sq_var.get_vector(VECTOR_I_STATE);
if(state_ == STATE_SLOW_HEAL)
{
if(parentObj.isGhostMode())
{ // 鼠瞳虽楼 鼻鹧塭贼..
if (parentObj.getState() != STATE_DIEHARD)
{
if(appendage.getVar("diehard").get_vector(0) == 1)
{
local t = appendage.sq_var.get_ct_vector(0);
local ghostCurrentTime = t.Get();
if(ghostCurrentTime > 8000)
{
sq_SendMessage(parentObj, OBJECT_MESSAGE_GHOST, 0, 0);
appendage.getVar("diehard").set_vector(0, 0);
}
}
}
}
return;
}
local currentT = appendage.getTimer().Get();
local rebirthTime_ = appendage.sq_var.get_vector(VECTOR_I_REBIRTH_TIME);
//print(" proc_appendage_atmage_diehard Ln:" + 163);
//////////////////////////////////////////////////////////////////////////////
if (state_ == STATE_REBIRTH_READY_DOWN)
{
// 棻遴 渠晦酝
////print(" state_ == STATE_REBIRTH_READY_DOWN");
if (parentObj.getState() == STATE_DIEHARD)
{
appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_REBIRTH_DOWN);
// 陈嬴陛朝 翕寰 棻艇 蹂模缣 暧?怃 寞?嫡虽强紫烟 鼠瞳卫除 籀葬
}
else if (parentObj.getSendState() != STATE_DIEHARD &&
parentObj.getSendState() != STATE_HOLD && parentObj.getState() != STATE_HOLD &&
parentObj.getSendState() != STATE_DOWN && parentObj.getState() != STATE_DOWN &&
parentObj.getSendState() != STATE_DAMAGE && parentObj.getState() != STATE_DAMAGE
)
{
if (parentObj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, SUB_STATE_DIEHARD_0);
parentObj.addSetStatePacket(STATE_DIEHARD, pIntVec, STATE_PRIORITY_FORCE, false, "");
parentObj.flushSetStatePacket();
}
}
else
{
////print(" it is hold died");
////print(" state_hold");
}
}
else if (state_ == STATE_REBIRTH_DOWN)
{
//print(" proc_appendage_atmage_diehard Ln:" + 201);
////print(" state_ == STATE_REBIRTH_DOWN");
// 棻遴 鼻鹧
if (parentObj.getState() == STATE_DIEHARD)
{
local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj);
if(sqrChr)
{
if(sqrChr.getSkillSubState() == SUB_STATE_DIEHARD_1)
{
// 棻遴缣怃 ?犒腑棻贼 : 唳霜 籀葬
// 鼠瞳卫除 籀葬
// 橾姜卫除 唳霜
//sq_SetPause(parentObj, PAUSETYPE_OBJECT, DOWN_PAUSE_TIME);
// 睡? 卫除 荡潍
local rebirthTime = appendage.getTimer().Get() + GHOST_TIME;
appendage.sq_var.set_vector(VECTOR_I_REBIRTH_TIME, rebirthTime);
appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_REBIRTH_DELAY);
appendage.sq_var.set_vector(VECTOR_I_REBIRTH_STATE, REBIRTH_STATE_END);
}
}
}
}
else if (state_ == STATE_REBIRTH_DELAY)
{
// 睡? 裁溯桧
if (currentT >= rebirthTime_)
{
// HP ?犒
// ?廓 ?犒腑棻贼 夥煎 谦猿
print(" go rebirth");
appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_SLOW_HEAL);
appendage.sq_var.set_vector(VECTOR_I_REBIRTH_STATE, STATE_SLOW_HEAL); // state
}
}
//////////////////////////////////////////////////////////////////////////////
}
function onStart_appendage_atmage_diehard(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
appendage.sq_var.clear_timer_vector();
appendage.sq_var.push_timer_vector();
appendage.sq_var.push_timer_vector();
//VECTOR_I_STATE <- 0
//VECTOR_I_REBIRTH_STATE <- 1
//VECTOR_I_REBIRTH_TIME <- 2
appendage.sq_var.clear_vector();
appendage.sq_var.push_vector(STATE_SLOW_HEAL); // state
appendage.sq_var.push_vector(STATE_SLOW_HEAL); // state
appendage.sq_var.push_vector(0); // state
appendage.sq_var.push_vector(0); // state
local t = appendage.sq_var.get_timer_vector(0);
t.setParameter(400, -1);
t.resetInstant(0);
local t2 = appendage.sq_var.get_timer_vector(1);
t2.setParameter(500, -1);
t2.resetInstant(0);
appendage.sq_var.clear_ct_vector();
appendage.sq_var.push_ct_vector();
local time = appendage.sq_var.get_ct_vector(0);
time.Reset();
time.Start(10000,0);
appendage.getVar("diehard").clear_vector();
appendage.getVar("diehard").push_vector(0); // 碳饵蒂 ?廓 橾横陬历朝虽 羹觼?朝 ?楚斜殓栖棻.
local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj);
if(sqrObj)
{
}
}
function prepareDraw_appendage_atmage_diehard(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
}
function onSetHp_appendage_atmage_diehard(appendage, hp, attacker)
{
if(!appendage)
return hp;
local obj = appendage.getParent();
if(!obj)
return hp;
local org_hp = -1;
if (hp <= 0)
{
// 湍瞪? 蹂羶饵? 12.03.16
// 碳饵蒂 鼠卫?坚 钦寞缣 避横帼溥捡 ?朝 牖除桧 毡棻. 桧匙缣 渠? 籀葬蒂 嫔?
// attacker (奢问濠)暧 getCurrentAttackInfo 掘亵羹缣
// bool isIgnoreDieHard_; /// 碳饵 ?卫粽 蝶鉴 鼠卫 罹睡 (?问卫 夥煎 阔饵)
// 渗热蒂 跷陛?艘棻.
// 桧匙桧 true塭贼.. 夥煎 避横捡?匙
if(attacker)
{
local attackInfo = sq_GetCurrentAttackInfo(attacker);
if(attackInfo)
{
if(attackInfo.isIgnoreDieHard_)
return 0;
}
}
local isRelayTimeOut = sq_isSendTimeOutPacket(); // 念潍 莴溯桧 颤歜嬴醒桧塭贼 夥煎 避横捡 ?栖棻.
// 念潍 莴溯桧 颤歜嬴醒桧塭贼 夥煎 避横捡 ?栖棻.
if (isRelayTimeOut)
return 0;
// HP蒂 1煎 坚姜?坚 STATE 渗?
local sqrChr = sq_GetCNRDObjectToSQRCharacter(obj);
if(!sqrChr)
return hp;
if(!sq_IsInBattle())
{ // 瞪瘫酝桧 嬴栖塭贼
return hp;
}
local state_ = appendage.sq_var.get_vector(VECTOR_I_STATE);
if(!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "Character/ATMage/DieHard/ap_ATMage_DieHardSlowHeal.nut")) //
{
//1. 饵蜂卫 蟾晦 ?犒肾朝 HP绿徽(%)
local recoverHpRate = sq_GetIntData(sqrChr, SKILL_DIEHARD, SKL_STATIC_INT_IDX_1);
local maxHp = obj.getHpMax();
local currentHp = maxHp.tofloat() * (recoverHpRate.tofloat() / 100);
//print(" hp:" + currentHp);
org_hp = currentHp.tointeger();
pushSlowHeal(appendage);
appendage.sq_var.set_vector(VECTOR_I_STATE, STATE_REBIRTH_READY_DOWN);
print(" convert hp:" + org_hp);
}
else
{
if(state_ == STATE_REBIRTH_READY_DOWN || sqrChr.getState() == STATE_DIEHARD)
{
//print( " state_:" + state_ + " sqrChr.getState():" + sqrChr.getState() + " org_hp:" + org_hp);
org_hp = 1;
}
}
}
//print(" hp:" + org_hp);
return org_hp;
}
function onEnd_appendage_atmage_diehard(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj);
if(sqrObj)
{
}
}
// 横渐螳 陕撩 渗褐暧 部睡碟
function isEnd_appendage_atmage_diehard(appendage)
{
if(!appendage)
return false;
local T = appendage.getTimer().Get();
return false;
}

View File

@@ -0,0 +1,250 @@
function sq_AddFunctionName(appendage)
{
appendage.sq_AddFunctionName("proc", "proc_appendage_atmage_diehard_heal")
appendage.sq_AddFunctionName("prepareDraw", "prepareDraw_appendage_atmage_diehard_heal")
appendage.sq_AddFunctionName("onStart", "onStart_appendage_atmage_diehard_heal")
appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_atmage_diehard_heal")
appendage.sq_AddFunctionName("isEnd", "isEnd_appendage_atmage_diehard_heal")
appendage.sq_AddFunctionName("onSetHp", "onSetHp_appendage_atmage_diehard_heal")
}
function sq_AddEffect(appendage)
{
if(!appendage)
return;
appendage.sq_AddEffectFront("Character/Mage/Effect/Animation/ATDieHard/02_looping_dodge.ani");
}
function proc_appendage_atmage_diehard_heal(appendage)
{
if(!appendage) {
return;
}
//print(" proc");
local parentObj = appendage.getParent();
local currentT = appendage.getTimer().Get();
local t = appendage.sq_var.get_timer_vector(0);
//
local state_ = appendage.sq_var.get_vector(VECTOR_I_STATE);
local rebirthTime_ = appendage.sq_var.get_vector(VECTOR_I_REBIRTH_TIME);
if(!parentObj)
{
appendage.setValid(false);
return;
}
local changeHp_ = appendage.getVar("changehp").get_vector(0);
local changeTime_ = appendage.getVar("changehp").get_vector(2);
local changedHp_ = appendage.getVar("changehp").get_vector(3);
//print( " changeTime_:" + currentT);
local currentChangeHp = sq_GetUniformVelocity(0, changeHp_, currentT, changeTime_);
local sqrObj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if(sqrObj.getHp() <= 0)
{
appendage.setValid(false);
return;
}
if (currentChangeHp != changedHp_)
{
// 涡 渗?卫鉴 晔桧 毡戏贼 籀葬
local hp = currentChangeHp - changedHp_;
changedHp_ = currentChangeHp;
appendage.getVar("changehp").set_vector(3, changedHp_);
if(sqrObj)
{
//print(" sqrObj.getHp():" + sqrObj.getHp() + " hp:" + hp);
if(sqrObj.isMyControlObject())
{
sqrObj.sq_SendSetHpPacket(sqrObj.getHp() + hp, true, parentObj);
}
}
}
if(changeTime_ <= currentT)
{
if(parentObj)
{
if(parentObj.isMyControlObject())
{ // hp翕晦?
//local parentHp = parentObj.getHp();
//sq_BinaryStartWrite();
//sq_BinaryWriteDword(parentHp); //
//sq_SendChangeSkillEffectPacket(parentObj, SKILL_DIEHARD);
}
}
appendage.setValid(false);
}
if(parentObj.getHp() >= parentObj.getHpMax())
{
if(parentObj)
{
if(parentObj.isMyControlObject())
{ // hp翕晦?
//local parentHp = parentObj.getHp();
//sq_BinaryStartWrite();
//sq_BinaryWriteDword(parentHp); //
//sq_SendChangeSkillEffectPacket(parentObj, SKILL_DIEHARD);
}
}
appendage.setValid(false);
}
//print(" changeTime_:" + changeTime_ + " currentT:" + currentT);
}
function onStart_appendage_atmage_diehard_heal(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
appendage.sq_var.clear_timer_vector();
appendage.sq_var.push_timer_vector();
appendage.sq_var.push_timer_vector();
appendage.sq_var.clear_vector();
appendage.sq_var.push_vector(0);
appendage.sq_var.push_vector(0);
local t = appendage.sq_var.get_timer_vector(0);
t.setParameter(400, -1);
t.resetInstant(0);
local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj);
if(sqrObj)
{
}
}
function prepareDraw_appendage_atmage_diehard_heal(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
}
function onEnd_appendage_atmage_diehard_heal(appendage)
{
if(!appendage) {
return;
}
local obj = appendage.getParent();
local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj);
if(sqrObj)
{
}
}
function onSetHp_appendage_atmage_diehard_heal(appendage, hp, attacker)
{
if(!appendage)
return hp;
local obj = appendage.getParent();
//local dst_hp = hp;
local org_hp = -1;
local state_ = appendage.sq_var.get_vector(VECTOR_I_STATE);
if(obj.getHp() > hp)
{ // 等嘐虽塭贼..
//local damage = obj.getHp() - hp; // 殓擎 等嘐虽虏踯 隶陛?罹捡? ?犒譆渠热纂蒂 梗嬴鄹栖棻.
//local maxHp = appendage.getVar("changehp").get_vector(0);
//print(" damage:" + damage + " obj.getHp():" + obj.getHp());
//appendage.getVar("changehp").set_vector(0, maxHp - damage);
//0. ?问卫 嫡朝 等嘐虽 隶陛徽(%)
local sqrObj = sq_GetCNRDObjectToSQRCharacter(obj);
if(sqrObj)
{
local isConvert = true;
local dieHardAppendage = CNSquirrelAppendage.sq_GetAppendage(sqrObj, "Character/ATMage/DieHard/ap_ATMage_DieHard.nut");
if(dieHardAppendage)
{
local dieHardState = dieHardAppendage.sq_var.get_vector(VECTOR_I_STATE);
if(dieHardState != STATE_SLOW_HEAL)
{
isConvert = false;
if(hp < 0)
{
hp = 1;
print( " heal hp:" + hp);
if(sqrObj.isMyControlObject())
{
sq_ReleaseActiveStatus(sqrObj, ACTIVESTATUS_POISON);
sq_ReleaseActiveStatus(sqrObj, ACTIVESTATUS_BLEEDING);
}
}
}
}
if(isConvert)
{
if(sqrObj.isMyControlObject())
{
//local increaseDamageRate = sq_GetIntData(sqrObj, SKILL_DIEHARD, SKL_STATIC_INT_IDX_0);
//local damage = sqrObj.getHp() - hp; // 殓擎 等嘐虽虏踯 隶陛?罹捡? ?犒譆渠热纂蒂 梗嬴鄹栖棻.
//increaseDamageRate.tofloat() / 100.0;
//local addDamage = damage.tofloat() * increaseDamageRate.tofloat() / 100.0;
//hp = hp - addDamage;
}
}
}
return hp;
}
return -1;
}
// 横渐螳 陕撩 渗褐暧 部睡碟
function isEnd_appendage_atmage_diehard_heal(appendage)
{
if(!appendage)
return false;
local T = appendage.getTimer().Get();
return false;
}

View File

@@ -0,0 +1,203 @@
SUB_STATE_DIEHARD_0 <- 0
SUB_STATE_DIEHARD_1 <- 1
SUB_STATE_DIEHARD_2 <- 2
function onSetState_DieHard(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
if(substate == SUB_STATE_DIEHARD_0)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_DIEHARD1);
}
else if(substate == SUB_STATE_DIEHARD_1)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_DIEHARD2);
CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_DIEHARD, true, "Appendage/Character/ap_atmage_bodyeffect.nut", true);
obj.sq_PlaySound("IMMORTAL");
}
else if(substate == SUB_STATE_DIEHARD_2)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_DIEHARD3);
}
}
function prepareDraw_DieHard(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_DIEHARD_0) {
// SUB_STATE_DIEHARD_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DIEHARD_1) {
// SUB_STATE_DIEHARD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DIEHARD_2) {
// SUB_STATE_DIEHARD_2 怃粽蝶才桧? 蒙机
}
}
function onProc_DieHard(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if(substate == SUB_STATE_DIEHARD_0)
{
}
else if(substate == SUB_STATE_DIEHARD_1)
{
}
else if(substate == SUB_STATE_DIEHARD_2)
{
}
}
function onProcCon_DieHard(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_DIEHARD_0) {
// SUB_STATE_DIEHARD_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DIEHARD_1) {
// SUB_STATE_DIEHARD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DIEHARD_2) {
// SUB_STATE_DIEHARD_2 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_DieHard(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(!obj.isMyControlObject())
return;
if(substate == SUB_STATE_DIEHARD_0) {
print(" end");
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_DIEHARD_1); // substate撮?
obj.sq_AddSetStatePacket(STATE_DIEHARD, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_DIEHARD_1) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_DIEHARD_2); // substate撮?
obj.sq_AddSetStatePacket(STATE_DIEHARD, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_DIEHARD_2) {
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
function onKeyFrameFlag_DieHard(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_DIEHARD_0) {
// SUB_STATE_DIEHARD_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DIEHARD_1) {
// SUB_STATE_DIEHARD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DIEHARD_2) {
// SUB_STATE_DIEHARD_2 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_DieHard(obj, new_state)
{
if(!obj) return;
if(new_state != STATE_DIEHARD)
{
print(" ghost go");
//sq_SendMessage(obj, OBJECT_MESSAGE_INVINCIBLE, 1, 0);
sq_SetCustomDamageType(obj, false, 1);
sq_SendMessage(obj, OBJECT_MESSAGE_GHOST, 0, 0);
sq_SendMessage(obj, OBJECT_MESSAGE_GHOST, 1, 0);
sq_PostDelayedMessage(obj, OBJECT_MESSAGE_GHOST, 0, 0, 1500);
}
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_DIEHARD_0) {
// SUB_STATE_DIEHARD_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DIEHARD_1) {
// SUB_STATE_DIEHARD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DIEHARD_2) {
// SUB_STATE_DIEHARD_2 怃粽蝶才桧? 蒙机
}
}
function onAfterSetState_DieHard(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_DIEHARD_0) {
// SUB_STATE_DIEHARD_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DIEHARD_1) {
// SUB_STATE_DIEHARD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_DIEHARD_2) {
// SUB_STATE_DIEHARD_2 怃粽蝶才桧? 蒙机
}
}

View File

@@ -0,0 +1,483 @@
/************************************************
************************************************
// 议葛搅 嫔纂缣怃 当撩肾朝 赎 ?嫦 螃粽薛?
************************************************
************************************************/
// ?热赀檩 牖怃煎 嫦翕脾
// 楼撩嫦翕缣 暧?怃 摹鸥胀 楼撩桧 陛潍 葆虽虞缣 嫦翕腌栖棻.
SUB_STATE_ELEMENTAL_BUSTER_START <- 0
VAR_ELEMENTAL_BUSTER_COUNT <- 0;
VAR_ELEMENTAL_BUSTER_TYPE <- 1;
VAR_ELEMENTAL_BUSTER_IS_LAST <- 2;
function isElementalBusterCastingState(subState)
{
return subState%2 == 0;
}
function isLastElementalBusterAttack(obj)
{
local var = obj.getVar();
local count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT);
local maxCount = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 4);
if(count+1 >= maxCount)
return true;
return false;
}
function getStartElementalBuster(element, totalCount)
{
if(element == ENUM_ELEMENT_NONE)
return ENUM_ELEMENT_FIRE;
if (element == ENUM_ELEMENT_FIRE)
element = ENUM_ELEMENT_LIGHT;
else if (element == ENUM_ELEMENT_WATER)
element = ENUM_ELEMENT_FIRE;
else if (element == ENUM_ELEMENT_DARK)
element = ENUM_ELEMENT_WATER;
else if (element == ENUM_ELEMENT_LIGHT)
element = ENUM_ELEMENT_DARK;
totalCount = totalCount-1;
if(totalCount <= 1)
return element;
return getStartElementalBuster(element, totalCount)
}
// 县溯诠骁 帼蝶搅 蝶鉴嫦翕
function checkExecutableSkill_ElementalBuster(obj)
{
if (!obj) return false;
local isUseSkill = obj.sq_IsUseSkill(SKILL_ELEMENTAL_BUSTER);
if (isUseSkill)
{
// ?营 摹鸥胀 楼撩擎, 陛潍 葆虽虞缣 嫦翕?棻.
local element = obj.getThrowElement();
local maxCount = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 4);
element = getStartElementalBuster(element, maxCount);
printc("element : "+ element);
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_BUSTER_START);
obj.sq_IntVectPush(element);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_BUSTER, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ElementalBuster(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_ELEMENTAL_BUSTER); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true;
}
function onProc_ElementalBuster(obj)
{
if (!obj) return;
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_ElementalBuster(obj, state, datas, isResetTimer)
{
if (!obj) return;
local var = obj.getVar();
local subState = obj.sq_GetVectorData(datas, 0);
local count = 0;
local isLast = false;
local element = ENUM_ELEMENT_FIRE;
if (subState == SUB_STATE_ELEMENTAL_BUSTER_START)
{
element = obj.sq_GetVectorData(datas, 1);
var.setInt(VAR_ELEMENTAL_BUSTER_COUNT,0);
var.setInt(VAR_ELEMENTAL_BUSTER_TYPE, element);
var.setBool(VAR_ELEMENTAL_BUSTER_IS_LAST, false);
}
else
{
element = var.getInt(VAR_ELEMENTAL_BUSTER_TYPE);
count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT);
isLast = var.getBool(VAR_ELEMENTAL_BUSTER_IS_LAST);
}
local isCast = isElementalBusterCastingState(subState);
obj.setSkillSubState(subState);
obj.sq_SetStaticMoveInfo(0, 0, 0, false);
obj.sq_SetStaticMoveInfo(1, 0, 0, false);
local animationIndex = 0;
local soundTag = "";
local passiveObjectIndex = 0;
if (element == ENUM_ELEMENT_FIRE)
{
animationIndex = isCast ? 85 : 86;
passiveObjectIndex = 24290;
soundTag = "EBUSTER_FIRE";
}
else if (element == ENUM_ELEMENT_WATER)
{
animationIndex = isCast ? 87 : 88;
passiveObjectIndex = 24293;
soundTag = "EBUSTER_ICE";
}
else if (element == ENUM_ELEMENT_DARK)
{
animationIndex = isCast ? 91 : 92;
passiveObjectIndex = 24299;
soundTag = "EBUSTER_DARK";
}
else if (element == ENUM_ELEMENT_LIGHT)
{
animationIndex = isCast ? 89 : 90;
passiveObjectIndex = 24296;
soundTag = "EBUSTER_LIGHT";
}
if (subState != SUB_STATE_ELEMENTAL_BUSTER_START)
{
// 县溯诠骁 帼蝶搅朝 4楼撩 赅舒 勘横遽棻.
addElementalChain_ATMage(obj, -1);
}
local animation = obj.sq_GetCurrentAni();
local flashTime = 0;
// 议蝶?
//animationIndex = ANIMATION_TABLE[animationIndex];
obj.sq_SetCurrentAnimation(animationIndex);
if (subState == SUB_STATE_ELEMENTAL_BUSTER_START)
{
local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_BUSTER);
local castTime = sq_GetCastTime(obj, SKILL_ELEMENTAL_BUSTER, skillLevel);
local animation = sq_GetCurrentAnimation(obj);
local castAniTime = animation.getDelaySum(false);
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);
obj.sq_PlaySound("MW_EBUSTER_READY");
}
else
{
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CONST, SPEED_TYPE_CONST,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
if (!isCast) // 嫦饵
{
animation = obj.sq_GetCurrentAni();
flashTime += animation.getDelaySum(false);
obj.sq_PlaySound(soundTag);
// 议葛搅 嫔纂缣 当撩肾朝 醴棻坞 ?嫦 螃粽薛?
local powerIndex = count%3;
local sizeRate = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 5);
local time = 640;
local shake = 3;
if (isLastElementalBusterAttack(obj))
{ // 虞颤朝 饵桧锷陛 觼棻
sizeRate = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 6);
time = 800
shake = 5;
powerIndex = 3; // ?表紫 ?
print("isLast");
// 虞颤 饵遴萄
obj.sq_PlaySound("MW_EBUSTER");
}
local power = obj.sq_GetBonusRateWithPassive(SKILL_ELEMENTAL_BUSTER, STATE_ELEMENTAL_BUSTER, powerIndex, 1.0);
// 虽姜胀 嫔纂缣 ?卫粽 螃粽薛?菟击 当撩?棻
if (obj.sq_IsMyControlObject())
{
obj.sq_StartWrite();
obj.sq_WriteDword(power);
obj.sq_WriteWord(sizeRate);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndex, 0, 0, 1, 0);
sq_flashScreen(obj, 0, flashTime, 240, 200, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.sq_SetShake(obj, shake, time);
}
}
else
{
if (element == ENUM_ELEMENT_FIRE)
obj.sq_PlaySound("EBUSTER_CAST_01");
else if (element == ENUM_ELEMENT_WATER)
obj.sq_PlaySound("EBUSTER_CAST_02");
else if (element == ENUM_ELEMENT_DARK)
obj.sq_PlaySound("EBUSTER_CAST_04");
else if (element == ENUM_ELEMENT_LIGHT)
obj.sq_PlaySound("EBUSTER_CAST_03");
}
}
// 缣栖诡桧暮桧 部陬挤.
function onEndCurrentAni_ElementalBuster(obj)
{
if (!obj) return;
local subState = obj.getSkillSubState();
local nextAnimationIndex = obj.getVar().get_vector(0) + 1;
local nextSubState = subState + 1;
local isLast = false;
if(!isElementalBusterCastingState(subState)) // 奢问 拥栖陛 部陬棻贼
{
setNextElementalType(obj); // 怃粽蝶才桧?陛 奢问桧历棻贼 棻挤 锰模煎 渗?
local var = obj.getVar();
local count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT);
local maxCount = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, 4);
count = count + 1;
if(count >= maxCount)
{
var.setBool(VAR_ELEMENTAL_BUSTER_IS_LAST, true);
isLast = true;
}
var.setInt(VAR_ELEMENTAL_BUSTER_COUNT, count);
}
if (subState == SUB_STATE_ELEMENTAL_BUSTER_START)
{
sq_EndDrawCastGauge(obj);
}
if (!isLast)
{
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(nextSubState);
obj.sq_IntVectPush(nextAnimationIndex);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_BUSTER, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
else
{
if (obj.sq_IsMyControlObject())
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
function onEndState_ElementalBuster(obj, newState)
{
if (!obj) return;
}
function createElementalBusterCircle(obj, element, isLast, flagIndex)
{
if (obj.sq_IsMyControlObject())
{
local passiveObjectIndexBig = 24291; // ?
local passiveObjectIndexSmall = 24292;
if (element == ENUM_ELEMENT_FIRE)
{
passiveObjectIndexBig = 24291; // ?
passiveObjectIndexSmall = 24292;
}
else if (element == ENUM_ELEMENT_WATER)
{
passiveObjectIndexBig = 24294; // 热
passiveObjectIndexSmall = 24295;
}
else if (element == ENUM_ELEMENT_LIGHT)
{
passiveObjectIndexBig = 24297; // 赀
passiveObjectIndexSmall = 24298;
}
else if (element == ENUM_ELEMENT_DARK)
{
passiveObjectIndexBig = 24300; // 檩
passiveObjectIndexSmall = 24301;
}
// 议葛搅 嫔纂缣 当撩肾朝 醴棻坞 ?嫦 螃粽薛?
local var = obj.getVar();
local count = var.getInt(VAR_ELEMENTAL_BUSTER_COUNT);
local powerIndex = count%3;
local sizeIndex = 5;
if (isLastElementalBusterAttack(obj))
{
powerIndex = 3; // 虞颤辨 ?表
sizeIndex = 6;
}
local power = obj.sq_GetBonusRateWithPassive(SKILL_ELEMENTAL_BUSTER,
STATE_ELEMENTAL_BUSTER, powerIndex, 1.0);
local sizeRate = obj.sq_GetLevelData(SKILL_ELEMENTAL_BUSTER, sizeIndex);
obj.sq_StartWrite();
obj.sq_WriteDword(power);
obj.sq_WriteWord(sizeRate);
local isLastAttack = isLastElementalBusterAttack(obj);
if (flagIndex == 1)
{ // 赎 ?嫦 螃粽薛?
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 150, 2, 110);
if (isLastAttack && element != ENUM_ELEMENT_MAX)
{ // 葆虽虞 桧塭贼 涡 当撩?
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 100, 0, 110);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 80, 0, 110);
}
}
else if (flagIndex == 2)
{
// 蒙擎 ?嫦 螃粽薛?
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 187, 2, 229);
// 赎 ?嫦 螃粽薛?
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 308, 2, 208);
if (isLastAttack && element != ENUM_ELEMENT_MAX)
{ // 葆虽虞 桧塭贼 涡 当撩?
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, -4, 2, 239);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 157, 0, 229);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 157, 0, 229);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 208, 0, 208);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 208, 0, 208);
}
}
else if (flagIndex == 3)
{ // 蒙擎 ?嫦 螃粽薛?
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 310, 2, 98);
if (isLastAttack && element != ENUM_ELEMENT_MAX)
{ // 葆虽虞 桧塭贼 涡 当撩?
// 赎 ?嫦 螃粽薛?
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 278, 2, 328);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 250, 0, 98);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 250, 0, 98);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 278, 2, 110);
}
}
else if (flagIndex == 4)
{
// 赎 ?嫦 螃粽薛?
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 468, 2, 91);
if (isLastAttack && element != ENUM_ELEMENT_MAX)
{ // 葆虽虞 桧塭贼 涡 当撩?
// 蒙擎 ?嫦 螃粽薛?
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexSmall, 0, 569, 2, 242);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 358, 0, 200);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 418, 0, 150);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 550, 0, 250);
obj.sq_SendCreatePassiveObjectPacket(passiveObjectIndexBig, 0, 620, 0, 150);
}
}
}
}
function setNextElementalType(obj)
{
print("setNextElementalType");
local var = obj.getVar();
local element = var.getInt(VAR_ELEMENTAL_BUSTER_TYPE);
if(element == ENUM_ELEMENT_NONE)
return element;
local newElement;
switch(element)
{
case ENUM_ELEMENT_FIRE : newElement = ENUM_ELEMENT_WATER; break;
case ENUM_ELEMENT_WATER : newElement = ENUM_ELEMENT_DARK; break;
case ENUM_ELEMENT_DARK : newElement = ENUM_ELEMENT_LIGHT; break;
case ENUM_ELEMENT_LIGHT : newElement = ENUM_ELEMENT_FIRE; break;
}
var.setInt(VAR_ELEMENTAL_BUSTER_TYPE, newElement);
return element;
}
// 奢问卫 葆彻 掘羹蒂 当撩?棻.
function onKeyFrameFlag_ElementalBuster(obj, flagIndex)
{
if (!obj) return false;
local var = obj.getVar();
local subState = obj.getSkillSubState();
local element = var.getInt(VAR_ELEMENTAL_BUSTER_TYPE);
local isLast = (var.getBool(VAR_ELEMENTAL_BUSTER_IS_LAST)) && (obj.getThrowElement() != ENUM_ELEMENT_NONE);
createElementalBusterCircle(obj, element, isLast, flagIndex);
return true;
}
function getScrollBasisPos_ElementalBuster(obj)
{
if (!obj) return;
local subState = obj.getSkillSubState();
if (obj.isMyControlObject())
{
local destX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), 300);
local xPos = obj.getXPos();
local var = obj.getVar();
local isLast = var.getBool(VAR_ELEMENTAL_BUSTER_IS_LAST);
if (subState == SUB_STATE_ELEMENTAL_BUSTER_START)
{
// 蝶鉴 卫瞪 : 蝶觼煤 卫蒙
local stateTimer = obj.sq_GetStateTimer();
xPos = sq_GetUniformVelocity(xPos, destX, stateTimer, 300);
}
else if (isLast)
{
// 蝶鉴 谦猿 : 蝶觼煤 谦猿
local stateTimer = obj.sq_GetStateTimer();
xPos = sq_GetUniformVelocity(destX, xPos, stateTimer, 300);
}
else
{
xPos = destX;
}
obj.sq_SetCameraScrollPosition(xPos, obj.getYPos(), 0);
return true;
}
return false;
}

Binary file not shown.

View File

@@ -0,0 +1,386 @@
getroottable()["ElementalRainCreatePos"] <- {};
getroottable()["ElementalRainCreatePos"] = [[-76,27],[-108,44],[-129,67],[-79,57],[-50,66],
[-93,83],[-120,118],[-58,109],[-121,152],[-82,145],
[-92,180],[39,143],[-49,180],[-5,128],[-7,171],
[-24,221],[25,184],[-5,128],[43,113],[58,143]];
// 县溯诠骁 溯樯 怃粽 蝶才桧?
SUB_STATE_ELEMENTAL_RAIN_CAST <- 0 // 议蝶?
SUB_STATE_ELEMENTAL_RAIN_JUMP <- 1 // 薄?
SUB_STATE_ELEMENTAL_RAIN_CHARGE <- 2 // 醱瞪(薄? 渠晦)
SUB_STATE_ELEMENTAL_RAIN_FIRE <- 3 // 葆彻掘 嫦饵
SUB_STATE_ELEMENTAL_RAIN_LAST <- 4 // 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽
// 县溯诠骁 溯樯 蝶鉴嫦翕
function checkExecutableSkill_ElementalRain(obj)
{
if (!obj) return false;
local isUseSkill = obj.sq_IsUseSkill(SKILL_ELEMENTAL_RAIN);
if (isUseSkill)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_CAST);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_ElementalRain(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_ELEMENTAL_RAIN); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true
}
function onProc_ElementalRain(obj)
{
if (!obj) return;
local subState = obj.getSkillSubState();
// 橾姜 堪桧桧鼻 薄??棻贼 夸辞
if (subState == SUB_STATE_ELEMENTAL_RAIN_JUMP)
{
local zPos = obj.sq_GetIntData(SKILL_ELEMENTAL_RAIN, 2);
if (sq_GetZPos(obj) >= zPos)
{
obj.sq_SetCurrentPos(obj, obj.getXPos(), obj.getYPos(), zPos);
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_CHARGE);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
}
// state蒂 撮??坚 籀挤戏煎 菟横螃啪 腌栖棻. 陕谦 葬模蝶蒂 撮??栖棻.
function onSetState_ElementalRain(obj, state, datas, isResetTimer)
{
if (!obj) return;
local var = obj.getVar();
local oldSubState = obj.getSkillSubState();
local subState = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
obj.sq_SetStaticMoveInfo(0, 0, 0, false);
obj.sq_SetStaticMoveInfo(1, 0, 0, false);
if (subState == SUB_STATE_ELEMENTAL_RAIN_CAST)
{
obj.sq_ZStop();
// 议蝶?
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_CAST);
// 桧?? 缣栖诡桧暮
obj.sq_AddStateLayerAnimation(1,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Cast/1_under_dodge.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Cast/20_body_dodge.ani"), 0, 0);
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_RAIN);
local castTime = sq_GetCastTime(obj, SKILL_ELEMENTAL_RAIN, skillLevel);
local animation = sq_GetCurrentAnimation(obj);
local castAniTime = animation.getDelaySum(false);
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);
obj.sq_PlaySound("MW_ERAIN_READY");
// 县溯诠骁 溯樯擎 4楼撩 赅舒 勘横遽棻.
addElementalChain_ATMage(obj, -1);
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_JUMP)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_JUMP);
sq_SetZVelocity(obj, 750, -1200);
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_CHARGE)
{
local zPos = obj.sq_GetIntData(SKILL_ELEMENTAL_RAIN, 2);
obj.sq_SetCurrentPos(obj, obj.getXPos(), obj.getYPos(), zPos);
obj.sq_PlaySound("MW_ERAIN");
obj.sq_ZStop();
// 醱瞪
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_JUMP_STAY);
// 桧?? 缣栖诡桧暮
obj.sq_AddStateLayerAnimation(1,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Charge/26_handup_dodge.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Charge/25_shoot_dodge.ani"), 0, 0);
local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_RAIN);
local maxNumber = obj.sq_GetLevelData(SKILL_ELEMENTAL_RAIN, 0, skillLevel);
// 譆模高娄 譆渠高 饵桧暧 楠浑? 璋濠蒂 陛螳褥.
// 钦, ?廓 陛螳蚂 高擎 罗廓箪 ?塭嘐搅陛 true陛 肾虽 强朝 ?擎 舒廓 棻卫 釭螃虽 强挤.
// -1桧 釭螃贼 谦猿. 涡桧鼻 高桧 桡挤.
// min 高挤 0 桧?陛 腆热 桡挤.
local index = sq_getRandomUnique(true, 0, ::ElementalRainCreatePos.len()); // 蟾晦?
if (obj.sq_IsMyControlObject())
{
for (local i = 0; i < maxNumber; ++i)
{
if (index < 0)
break;
local pos = ::ElementalRainCreatePos[index];
local x = pos[0];
local y = sq_getRandom(0, 2)-1;
local z = pos[1];
local randElementalType = sq_getRandom(ENUM_ELEMENT_FIRE, ENUM_ELEMENT_MAX);
obj.sq_StartWrite();
obj.sq_WriteWord(randElementalType);
obj.sq_SendCreatePassiveObjectPacket(24233, 0, x, y, z);
index = sq_getRandomUnique(false, 0, i % ::ElementalRainCreatePos.len());
}
}
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_FIRE)
{
// 葆彻掘 嫦饵
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_SHOOT);
// 桧?? 缣栖诡桧暮
local angle = sq_GetIntData(obj, SKILL_ELEMENTAL_RAIN, 5);
local animation = obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/Shoot/25_shoot_dodge.ani");
sq_SetfRotateAngle(animation, sq_ToRadian(-angle.tofloat()));
obj.sq_AddStateLayerAnimation(1, animation, 0, 0);
sq_SetCustomRotate(obj, sq_ToRadian(-angle.tofloat()));
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_LAST)
{
// 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ELEMENTAL_RAIN_CHARGE_SHOOT);
// 桧?? 缣栖诡桧暮
obj.sq_AddStateLayerAnimation(1,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/21_circle_normal.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(2,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/22_circle_dodge.ani"), 0, 0);
obj.sq_AddStateLayerAnimation(3,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/23_circle1_normal.ani"), -62, -188);
obj.sq_AddStateLayerAnimation(4,
obj.sq_CreateCNRDAnimation("Effect/Animation/ATElementalRain/ChargeShoot/24_circle1_dodge.ani"), -62, -188);
obj.sq_PlaySound("MW_ERAIN_FIN");
}
}
// 缣栖诡桧暮桧 部陬挤.
function onEndCurrentAni_ElementalRain(obj)
{
if (!obj) return;
local subState = obj.getSkillSubState();
if (subState == SUB_STATE_ELEMENTAL_RAIN_CAST)
{
// 议蝶? -> 醱瞪
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_JUMP);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
sq_EndDrawCastGauge(obj);
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_JUMP)
{
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_CHARGE);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_CHARGE)
{
// 醱瞪 -> 葆彻掘 嫦饵
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_FIRE);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_FIRE)
{
// 葆彻掘 嫦饵
local var = obj.getVar();
local skillLevel = sq_GetSkillLevel(obj, SKILL_ELEMENTAL_RAIN);
local maxNumber = obj.sq_GetLevelData(SKILL_ELEMENTAL_RAIN, 0, skillLevel);
// 嫦饵?啪 陴懊挤.
local fireEnd = true;
local ballCount = obj.getMyPassiveObjectCount(24233);
for (local i = 0; i < ballCount ; ++i)
{
local magicBall = obj.getMyPassiveObject(24233,i)
if (!magicBall || magicBall.getState() != SUBSTATE_PO_ELEMENTAL_CREATOR_FIRE) {
fireEnd = false;
break;
}
}
if (!fireEnd)
{
if (obj.sq_IsMyControlObject())
{
// 葆彻掘 啗楼 嫦饵
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_FIRE);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
else
{
if (obj.sq_IsMyControlObject())
{
// 葆彻掘 嫦饵 -> 醱瞪 塽 ?嫦掘 当撩, 阶戏煎 杂虽
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ELEMENTAL_RAIN_LAST);
obj.sq_AddSetStatePacket(STATE_ELEMENTAL_RAIN, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_LAST)
{
// 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽
if (obj.sq_IsMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true);
}
}
}
function onEndState_ElementalRain(obj, newState)
{
if (!obj) return;
if (newState != STATE_ELEMENTAL_RAIN)
{
sq_SetCustomRotate(obj, 0.0);
if (obj.sq_IsMyControlObject())
{
local ballCount = obj.getMyPassiveObjectCount(24233);
for (local i = 0; i<ballCount ; ++i)
{
local magicBall = obj.getMyPassiveObject(24233,i)
if (!magicBall)
continue;
if (obj.sq_IsMyControlObject())
sq_SendDestroyPacketPassiveObject(magicBall);
}
}
}
}
// 奢问卫 葆彻 掘羹蒂 当撩?棻.
function onKeyFrameFlag_ElementalRain(obj, flagIndex)
{
if (!obj) return false;
local subState = obj.getSkillSubState();
if (subState == SUB_STATE_ELEMENTAL_RAIN_CAST)
{
if (flagIndex == 1)
sq_EffectLayerAppendage(obj, sq_RGB(255,255,255), 255, 0, 0, 240);
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_FIRE)
{
if (flagIndex == 1 && obj.sq_IsMyControlObject())
{
local ballCount = obj.getMyPassiveObjectCount(24233);
printc("ballCount" + ballCount);
for (local i = 0; i<ballCount ; ++i)
{
local magicBall = obj.getMyPassiveObject(24233,i)
if (!magicBall || magicBall.getState() == SUBSTATE_PO_ELEMENTAL_CREATOR_FIRE)
continue;
magicBall.sendStateOnlyPacket(SUBSTATE_PO_ELEMENTAL_CREATOR_FIRE);
break;
}
}
}
else if (subState == SUB_STATE_ELEMENTAL_RAIN_LAST)
{
// 醱瞪 塽 ?嫦掘 当撩, 阶戏煎暧 杂虽
if (flagIndex == 1 && obj.sq_IsMyControlObject())
{
// 葆虽虞 赎 葆彻掘暧 奢问溘 椭横螃晦
local skill = sq_GetSkill(obj, SKILL_ELEMENTAL_RAIN);
local attackBonusRate = obj.sq_GetBonusRateWithPassive(SKILL_ELEMENTAL_RAIN, STATE_ELEMENTAL_RAIN, 1, 1.0);
obj.sq_StartWrite();
obj.sq_WriteDword(attackBonusRate);
print("onKeyFrameFlag_ElementalRain");
obj.sq_SendCreatePassiveObjectPacket(24219, 0, -73, 1, 215);
}
}
return true;
}
function onEndMap_ElementalRain(obj)
{
if (obj.sq_IsMyControlObject())
{
local ballCount = obj.getMyPassiveObjectCount(24233);
printc("ballCount" + ballCount);
for (local i = 0; i<ballCount ; ++i)
{
local magicBall = obj.getMyPassiveObject(24233,i)
if (!magicBall)
continue;
if (obj.sq_IsMyControlObject())
{
print("onEndMap_ElementalRain");
sq_SendDestroyPacketPassiveObject(magicBall);
}
}
}
}

View File

@@ -0,0 +1,485 @@
function setCustomData_po_ATElementalStrikeEx(obj, reciveData)
{
if(!obj) return;
local pole_attack_rate = reciveData.readDword();
local attack_rate = reciveData.readDword();
local imagePerRate = reciveData.readDword();
local element = reciveData.readDword();
local speedRate = reciveData.readDword();
obj.getVar("imagerate").clear_vector(); // state vector
obj.getVar("imagerate").push_vector(imagePerRate);
obj.getVar("attack").clear_vector(); // state vector
obj.getVar("attack").push_vector(attack_rate);
obj.getVar("attack").push_vector(pole_attack_rate);
obj.getVar("element").clear_vector(); // state vector
obj.getVar("element").push_vector(element);
obj.getVar("speed").clear_vector(); // state vector
obj.getVar("speed").push_vector(speedRate);
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(0);
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function setState_po_ATElementalStrikeEx(obj, state, datas)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
local imagePerRate = obj.getVar("imagerate").get_vector(0);
local imageRate = imagePerRate.tofloat() / 100.0;
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
local attackInfo = sq_GetCustomAttackInfo(obj, 0);
sq_SetCurrentAttackInfo(obj, attackInfo);
local attack_rate = obj.getVar("attack").get_vector(1);
local pAttack = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(pAttack, attack_rate);
local element = obj.getVar("element").get_vector(0);
if(pAttack)
{
if (element != ENUM_ELEMENT_NONE)
{
pAttack.setElement(ENUM_ELEMENT_NONE);
print(" \n push element:" + element);
pAttack.setElement(element);
}
}
local currentAni = obj.getCurrentAnimation();
currentAni.Proc();
print( " setImageRate:");
currentAni.setImageRateFromOriginal(imageRate, imageRate);
sq_SetAttackBoundingBoxSizeRate(currentAni, imageRate, imageRate, imageRate);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
//local attackInfo = sq_GetDefaultAttackInfo(obj);
local attackInfo = sq_GetCustomAttackInfo(obj, 1);
sq_SetCurrentAttackInfo(obj, attackInfo);
local attack_rate = obj.getVar("attack").get_vector(0);
local pAttack = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(pAttack, attack_rate);
local element = obj.getVar("element").get_vector(0);
if(pAttack)
{
if(element != ENUM_ELEMENT_NONE)
pAttack.setElement(element);
}
sq_SetMyShake(pChr,4,320);
local ani = obj.getCustomAnimation(0);
obj.setCurrentAnimation(ani);
local currentAni = obj.getCurrentAnimation();
currentAni.Proc();
print( " setImageRate:");
currentAni.setImageRateFromOriginal(imageRate, imageRate);
sq_SetAttackBoundingBoxSizeRate(currentAni, imageRate, imageRate, imageRate);
local element = obj.getVar("element").get_vector(0);
if (element == ENUM_ELEMENT_FIRE)
{
obj.sq_PlaySound("ESTRIKE_FIRE");
}
else if(element == ENUM_ELEMENT_WATER)
{
obj.sq_PlaySound("ESTRIKE_WATER");
}
else if(element == ENUM_ELEMENT_DARK)
{
obj.sq_PlaySound("ESTRIKE_DARK");
}
else if(element == ENUM_ELEMENT_LIGHT)
{
obj.sq_PlaySound("ESTRIKE_LIGHT");
}
else if(element == ENUM_ELEMENT_NONE)
{
obj.sq_PlaySound("ESTRIKE_FIRE");
}
}
local currentAni = obj.getCurrentAnimation();
if(currentAni)
{
local speedRate = obj.getVar("speed").get_vector(0);
currentAni.setSpeedRate(speedRate.tofloat());
}
}
function procAppend_po_ATElementalStrikeEx(obj)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
local passiveState = obj.getVar("state").get_vector(0);
if(passiveState == 0)
{
return;
}
local pAni = obj.getCurrentAnimation();
local frameIndex = 0;
if(pAni)
{
frameIndex = pAni.GetCurrentFrameIndex();
}
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
if(frameIndex >= 10)
{
if(obj.getVar("flag").get_vector(1) == 0)
{
sq_SetMyShake(pChr,2,150);
obj.getVar("flag").set_vector(1, 1);
}
}
if(frameIndex >= 11)
{
if(obj.getVar("flag").get_vector(3) == 0)
{
local element = obj.getVar("element").get_vector(0);
if (element == ENUM_ELEMENT_FIRE)
{
obj.sq_PlaySound("MCANNON_FIREFALL");
}
else if(element == ENUM_ELEMENT_WATER)
{
obj.sq_PlaySound("MCANNON_ATK");
}
else if(element == ENUM_ELEMENT_DARK)
{
obj.sq_PlaySound("MCANNON_DARKFALL");
}
else if(element == ENUM_ELEMENT_LIGHT)
{
obj.sq_PlaySound("MCANNON_LIGHTFALL");
}
else if(element == ENUM_ELEMENT_NONE)
{
obj.sq_PlaySound("MCANNON_FIREFALL");
}
obj.getVar("flag").set_vector(3, 1);
}
}
if(frameIndex >= 14)
{
if(obj.getVar("flag").get_vector(2) == 0)
{
if(pChr)
{
obj.sq_PlaySound("ESTRIKE_READY");
}
obj.getVar("flag").set_vector(2, 1);
}
}
if(frameIndex >= 21)
{
if(obj.getVar("flag").get_vector(0) == 0)
{
local fScreen = sq_flashScreen(obj,0,80,0,80, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_addFlashScreen(fScreen, 0, 320, 320, 180, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
obj.getVar("flag").set_vector(0, 1);
}
}
}
}
function setCustomData_po_ATElementalStrikeFireEx(obj, reciveData)
{
setCustomData_po_ATElementalStrikeEx(obj, reciveData);
}
function setState_po_ATElementalStrikeFireEx(obj, state, datas)
{
setState_po_ATElementalStrikeEx(obj, state, datas);
}
function procAppend_po_ATElementalStrikeFireEx(obj)
{
procAppend_po_ATElementalStrikeEx(obj);
}
function onEndCurrentAni_po_ATElementalStrikeFireEx(obj)
{
if(!obj) return;
local passiveState = obj.getVar("state").get_vector(0);
print(" passiveState:" + passiveState);
if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
else
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
///////////////////////////////////
// 鼠楼撩
///////////////////////////////////
function setCustomData_po_ATElementalStrikeNoneEx(obj, reciveData)
{
setCustomData_po_ATElementalStrikeEx(obj, reciveData);
}
function setState_po_ATElementalStrikeNoneEx(obj, state, datas)
{
setState_po_ATElementalStrikeEx(obj, state, datas);
}
function procAppend_po_ATElementalStrikeNoneEx(obj)
{
procAppend_po_ATElementalStrikeEx(obj);
}
function onEndCurrentAni_po_ATElementalStrikeNoneEx(obj)
{
if(!obj) return;
local passiveState = obj.getVar("state").get_vector(0);
print(" passiveState:" + passiveState);
if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
else
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
/////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////
// 檩楼撩
///////////////////////////////////
function setCustomData_po_ATElementalStrikeDarkEx(obj, reciveData)
{
setCustomData_po_ATElementalStrikeEx(obj, reciveData);
}
function setState_po_ATElementalStrikeDarkEx(obj, state, datas)
{
setState_po_ATElementalStrikeEx(obj, state, datas);
}
function procAppend_po_ATElementalStrikeDarkEx(obj)
{
procAppend_po_ATElementalStrikeEx(obj);
}
function onEndCurrentAni_po_ATElementalStrikeDarkEx(obj)
{
if(!obj) return;
local passiveState = obj.getVar("state").get_vector(0);
print(" passiveState:" + passiveState);
if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
else
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
/////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////
// 热楼撩
///////////////////////////////////
function setCustomData_po_ATElementalStrikeWaterEx(obj, reciveData)
{
setCustomData_po_ATElementalStrikeEx(obj, reciveData);
}
function setState_po_ATElementalStrikeWaterEx(obj, state, datas)
{
setState_po_ATElementalStrikeEx(obj, state, datas);
}
function procAppend_po_ATElementalStrikeWaterEx(obj)
{
procAppend_po_ATElementalStrikeEx(obj);
}
function onEndCurrentAni_po_ATElementalStrikeWaterEx(obj)
{
if(!obj) return;
local passiveState = obj.getVar("state").get_vector(0);
print(" passiveState:" + passiveState);
if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
else
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
/////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////
// 赀楼撩
///////////////////////////////////
function setCustomData_po_ATElementalStrikeLightEx(obj, reciveData)
{
setCustomData_po_ATElementalStrikeEx(obj, reciveData);
}
function setState_po_ATElementalStrikeLightEx(obj, state, datas)
{
setState_po_ATElementalStrikeEx(obj, state, datas);
}
function procAppend_po_ATElementalStrikeLightEx(obj)
{
procAppend_po_ATElementalStrikeEx(obj);
}
function onEndCurrentAni_po_ATElementalStrikeLightEx(obj)
{
if(!obj) return;
local passiveState = obj.getVar("state").get_vector(0);
print(" passiveState:" + passiveState);
if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
else
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
/////////////////////////////////////////////////////////////////////////////////////////

Binary file not shown.

View File

@@ -0,0 +1,468 @@
SUB_STATE_FALLENBLOSSOMS_0 <- 0
SUB_STATE_FALLENBLOSSOMS_1 <- 1
SUB_STATE_FALLENBLOSSOMS_2 <- 2
SUB_STATE_FALLENBLOSSOMS_3 <- 3
SUB_STATE_FALLENBLOSSOMS_4 <- 4
//STATE_FALLENBLOSSOMS <- 40 // 奢鳝:钒?翱玺
//SKILL_FALLENBLOSSOMS <- 21 // 奢鳝:钒?翱玺
function checkExecutableSkill_FallenBlossoms(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_FALLENBLOSSOMS);
if(b_useskill)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FALLENBLOSSOMS_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_FALLENBLOSSOMS, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FallenBlossoms(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_FALLENBLOSSOMS); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_FALLENBLOSSOMS);
}
return true;
}
function createFallenBlossomsSpear(obj, disX, disY, disZ)
{
local ani = sq_CreateAnimation("","Character/Mage/Effect/Animation/ATFallenBlossoms/02/spear/01_lance_normal.ani");
local pooledObj = sq_CreatePooledObject(ani,true);
local posX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), disX);
pooledObj.setCurrentPos(posX,obj.getYPos() + disY,obj.getZPos() + disZ);
pooledObj.setCurrentDirection(obj.getDirection());
sq_moveWithParent(obj, pooledObj);
sq_AddObject(obj,pooledObj,2,false);
}
function createFallenBlossomsSpearEnd(obj, disX, disY, disZ)
{
local ani = sq_CreateAnimation("","Character/Mage/Effect/Animation/ATFallenBlossoms/02/spearEnd/01_lance_normal.ani");
local pooledObj = sq_CreatePooledObject(ani,true);
local posX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), disX);
pooledObj.setCurrentPos(posX,obj.getYPos() + disY,obj.getZPos() + disZ);
pooledObj.setCurrentDirection(obj.getDirection());
sq_moveWithParent(obj, pooledObj);
sq_AddObject(obj,pooledObj,2,false);
}
function createFallenBlossomsSpearExp(obj, disX, disY, disZ)
{
local ani = sq_CreateAnimation("","Character/Mage/Effect/Animation/ATFallenBlossoms/03/04_break_dodge.ani");
local pooledObj = sq_CreatePooledObject(ani,true);
local posX = sq_GetDistancePos(obj.getXPos(), obj.getDirection(), disX);
pooledObj.setCurrentPos(posX,obj.getYPos() + disY,obj.getZPos() + disZ);
pooledObj.setCurrentDirection(obj.getDirection());
sq_moveWithParent(obj, pooledObj);
sq_AddObject(obj,pooledObj,2,false);
}
function onSetState_FallenBlossoms(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
if(substate == SUB_STATE_FALLENBLOSSOMS_0) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FALLENBLOSSOMS1);
obj.sq_PlaySound("MW_ICESPEAR");
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_1)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FALLENBLOSSOMS2);
obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_FALLENBLOSSOMS);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local sq_var = obj.getVar();
sq_var.clear_timer_vector();
sq_var.push_timer_vector();
local t = sq_var.get_timer_vector(0);
t.setParameter(60, -1);
t.resetInstant(0);
local particle = sq_var.GetparticleCreaterMap("FallenBlossomsP", "Character/Fighter/Particle/ATThrowWeb.ptl", obj);
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
local len = obj.sq_GetIntData(SKILL_FALLENBLOSSOMS, 0); // 瞪霞剪葬
//local len = 250;
local pAttack = sq_GetCurrentAttackInfo(obj);
local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_FALLENBLOSSOMS STATE_FALLENBLOSSOMS, 0, 1.0); //2.奢问溘(%)
sq_SetCurrentAttackBonusRate(pAttack, attackRate);
local posX = obj.getXPos();
//local delay = 480;
local ani = obj.sq_GetCurrentAni();
local delay = 0;
if(ani)
delay = ani.getDelaySum(false);
local skillLevel = sq_GetSkillLevel(obj, SKILL_FALLENBLOSSOMS);
local multiHit = sq_GetLevelData(obj, SKILL_FALLENBLOSSOMS, 1, skillLevel);
print(" multiHit:" + multiHit + " delay:" + delay);
print(delay / multiHit);
obj.sq_timer_.setParameter(delay / multiHit, multiHit - 1);
obj.sq_timer_.resetInstant(0);
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(posX);
obj.getVar("flag").push_vector(len);
obj.getVar("flag").push_vector(delay);
obj.getVar("flag").push_vector(0);
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_2) {
createFallenBlossomsSpearExp(obj, 0, 3, 70);
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FALLENBLOSSOMS3);
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_ATTACK_SPEED, SPEED_TYPE_ATTACK_SPEED,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_3) {
// SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_4) {
// SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机
}
}
function prepareDraw_FallenBlossoms(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
}
function onProc_FallenBlossoms(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 posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
if(substate == SUB_STATE_FALLENBLOSSOMS_0) {
// SUB_STATE_FALLENBLOSSOMS_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_1) {
if(frmIndex >= 0)
{
if(!obj.getVar().get_vector(0))
{
createFallenBlossomsSpear(obj, 0, 1, 69);
obj.getVar().set_vector(0, 1);
}
}
if(frmIndex >= 1)
{
if(!obj.getVar().get_vector(1))
{
createFallenBlossomsSpear(obj, -12, -1, 85);
obj.getVar().set_vector(1, 1);
}
}
if(frmIndex >= 2)
{
if(!obj.getVar().get_vector(2))
{
createFallenBlossomsSpear(obj, -21, 2, 45);
obj.getVar().set_vector(2, 1);
}
}
if(frmIndex >= 4)
{
if(!obj.getVar().get_vector(3))
{
createFallenBlossomsSpearEnd(obj, 0, 3, 70);
obj.getVar().set_vector(3, 1);
}
}
//////
// 遗霜歜
local sq_var = obj.getVar("flag");
//obj.getVar("flag").clear_vector();
//obj.getVar("flag").push_vector(posX);
//obj.getVar("flag").push_vector(len);
//obj.getVar("flag").push_vector(delay);
local delayT = sq_var.get_vector(2); // 漱搅樯策蝶 2 识 桧翕卫除
local len = sq_var.get_vector(1);
local v = sq_GetAccel(0, len, currentT, delayT, true);
print(" delayT:" + delayT + " current:" + currentT);
local srcX = sq_var.get_vector(0); // 漱搅 樯策蝶 1
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
if(obj.isMovablePos(dstX, posY) && !sq_var.get_vector(3))
{ // 桧翕?楚斜谛 桧翕陛栋虽羲桧 赅舒 陛栋?捡 桧翕
sq_setCurrentAxisPos(obj, 0, dstX);
}
else
{ // 桧翕? 热 桡朝 虽羲击 虏陬棻..
sq_var.set_vector(3,1); // 桧翕 ?楚斜 樯策蝶 3 桧翕? 热 桡朝 虽羲击 虏陬击 阳 斜牖除 涡桧鼻 桧翕跤?棻..
local offset = dstX - posX;
if(offset != 0) {
if(offset < 0)
offset = -offset;
local totalLen = sq_var.get_vector(1);
sq_var.set_vector(1, totalLen - offset);
}
}
if (obj.sq_timer_.isOnEvent(currentT) == true)
obj.resetHitObjectList();
//////
// 试虽 ??赝 当撩
local t = obj.getVar().get_timer_vector(0);
if(t.isOnEvent(currentT) == true)
{
local particleCreater = sq_var.GetparticleCreaterMap("FallenBlossomsP", "Character/Fighter/Particle/ATThrowWeb.ptl", obj);
particleCreater.Restart(0);
local dstX = sq_GetDistancePos(posX, obj.getDirection(), -20);
particleCreater.SetPos(dstX, posY + 1, posZ + 5);
sq_AddParticleObject(obj, particleCreater);
}
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_2) {
// SUB_STATE_FALLENBLOSSOMS_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_3) {
// SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_4) {
// SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机
}
}
function onProcCon_FallenBlossoms(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FALLENBLOSSOMS_0) {
// SUB_STATE_FALLENBLOSSOMS_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_1) {
// SUB_STATE_FALLENBLOSSOMS_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_2) {
// SUB_STATE_FALLENBLOSSOMS_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_3) {
// SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_4) {
// SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_FallenBlossoms(obj)
{
if(!obj) return;
if(!obj.isMyControlObject())
return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FALLENBLOSSOMS_0) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FALLENBLOSSOMS_1); // substate撮?
obj.sq_AddSetStatePacket(STATE_FALLENBLOSSOMS, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_1) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FALLENBLOSSOMS_2); // substate撮?
obj.sq_AddSetStatePacket(STATE_FALLENBLOSSOMS, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_2) {
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_3) {
// SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_4) {
// SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机
}
}
function onKeyFrameFlag_FallenBlossoms(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FALLENBLOSSOMS_0) {
// SUB_STATE_FALLENBLOSSOMS_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_1) {
// SUB_STATE_FALLENBLOSSOMS_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_2) {
// SUB_STATE_FALLENBLOSSOMS_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_3) {
// SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_4) {
// SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_FallenBlossoms(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FALLENBLOSSOMS_0) {
// SUB_STATE_FALLENBLOSSOMS_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_1) {
// SUB_STATE_FALLENBLOSSOMS_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_2) {
// SUB_STATE_FALLENBLOSSOMS_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_3) {
// SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_4) {
// SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机
}
}
function onAfterSetState_FallenBlossoms(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FALLENBLOSSOMS_0) {
// SUB_STATE_FALLENBLOSSOMS_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_1) {
// SUB_STATE_FALLENBLOSSOMS_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_2) {
// SUB_STATE_FALLENBLOSSOMS_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_3) {
// SUB_STATE_FALLENBLOSSOMS_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FALLENBLOSSOMS_4) {
// SUB_STATE_FALLENBLOSSOMS_4 怃粽蝶才桧? 蒙机
}
}

View File

@@ -0,0 +1,388 @@
SUB_STATE_FIREPILLAR_0 <- 0
SUB_STATE_FIREPILLAR_1 <- 1
SUB_STATE_FIREPILLAR_2 <- 2
SUB_STATE_FIREPILLAR_3 <- 3
SUB_STATE_FIREPILLAR_4 <- 4
function checkExecutableSkill_FirePillar(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_FIREPILLAR);
if(b_useskill)
{
obj.sq_IsEnterSkillLastKeyUnits(SKILL_FIREPILLAR);
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FIREPILLAR_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_FIREPILLAR, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FirePillar(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
return obj.sq_IsCommandEnable(SKILL_FIREPILLAR); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_BROKENARROW);
}
return true;
}
function onSetState_FirePillar(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.getVar("firepillar").clear_vector();
obj.getVar("firepillar").push_vector(0);
obj.getVar("firepillar").push_vector(0);
obj.getVar("firepillar").push_vector(0);
obj.sq_StopMove();
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
if(substate == SUB_STATE_FIREPILLAR_0)
{
obj.sq_PlaySound("MW_FPILLAR_READY");
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FIREPILLAR1);
addElementalChain_ATMage(obj, ENUM_ELEMENT_FIRE);
}
else if(substate == SUB_STATE_FIREPILLAR_1)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FIREPILLAR2);
}
else if(substate == SUB_STATE_FIREPILLAR_2)
{
obj.sq_PlaySound("MW_FPILLAR");
if(obj.isMyControlObject())
{
local skillLevel = obj.sq_GetSkillLevel(SKILL_FIREPILLAR);
local arriveTime = obj.sq_GetIntData(SKILL_FIREPILLAR, 0); // 0. 模辨给桧 釭陛朝 楼紫 (剪葬梱虽 紫殖?朝 卫除) (1/1000蟾)
local attackRate = obj.sq_GetBonusRateWithPassive(SKILL_FIREPILLAR, STATE_FIREPILLAR, 2, 1.0); // 2. 颤问 奢问溘(%)
local distance = obj.sq_GetLevelData(SKILL_FIREPILLAR, 1, skillLevel); // 1.釭陛朝 剪葬
local term = obj.sq_GetIntData(SKILL_FIREPILLAR, 2); // 2. 棻钦?? 除问
sq_BinaryStartWrite();
sq_BinaryWriteDword(attackRate); // 横鸥奢问溘
sq_BinaryWriteDword(distance); // 釭陛朝 剪葬
sq_BinaryWriteDword(arriveTime); // 模辨给桧 釭陛朝 楼紫 (剪葬梱虽 紫殖?朝 卫除) (1/1000蟾)
sq_BinaryWriteDword(term); // 棻钦?? 除问
obj.sq_SendCreatePassiveObjectPacket(24254, 0, 0, 1, 0); //
}
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FIREPILLAR3);
}
else if(substate == SUB_STATE_FIREPILLAR_3)
{
}
else if(substate == SUB_STATE_FIREPILLAR_4)
{
}
//obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
// SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function prepareDraw_FirePillar(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FIREPILLAR_0) {
// SUB_STATE_FIREPILLAR_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_1) {
// SUB_STATE_FIREPILLAR_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_2) {
// SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_3) {
// SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_4) {
// SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机
}
}
function onProc_FirePillar(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
//print(" substate:" + substate);
if(substate == SUB_STATE_FIREPILLAR_0) {
// SUB_STATE_FIREPILLAR_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_1) {
}
else if(substate == SUB_STATE_FIREPILLAR_2) {
// SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_3) {
// SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_4) {
// SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机
}
}
function onProcCon_FirePillar(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FIREPILLAR_0) {
// SUB_STATE_FIREPILLAR_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_1)
{
local bDownKey = obj.isDownSkillLastKey();
local stateTimer = obj.sq_GetStateTimer();
local grabMaxTime = obj.sq_GetIntData(SKILL_FIREPILLAR, 1); // 1. 模辨给桧 濩坚 毡朝 譆渠卫除
// 蹂羶饵?
// 谏醱 ?缣 谏醱卫除虏踯 ?脑贼 濠翕戏煎 剩横骨栖棻..
if(!bDownKey || stateTimer >= grabMaxTime)// 桨击 嗥历棻朝匙擎..
//if(!bDownKey)// 桨击 嗥历棻朝匙擎..
{ // 桨击 嗥历棻朝匙擎..
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FIREPILLAR_2); // substate撮?
obj.sq_AddSetStatePacket(STATE_FIREPILLAR, STATE_PRIORITY_USER, true);
return;
}
}
else if(substate == SUB_STATE_FIREPILLAR_2) {
// SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_3) {
// SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_4) {
// SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_FirePillar(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) {
return;
}
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FIREPILLAR_0) {
print( " onend:" + substate);
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FIREPILLAR_1); // substate撮?
obj.sq_AddSetStatePacket(STATE_FIREPILLAR, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_FIREPILLAR_1) {
}
else if(substate == SUB_STATE_FIREPILLAR_2) {
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == SUB_STATE_FIREPILLAR_3) {
// SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_4) {
// SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机
}
}
function onKeyFrameFlag_FirePillar(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FIREPILLAR_0) {
// SUB_STATE_FIREPILLAR_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_1) {
// SUB_STATE_FIREPILLAR_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_2) {
// SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_3) {
// SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_4) {
// SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_FirePillar(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FIREPILLAR_0) {
// SUB_STATE_FIREPILLAR_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_1) {
// SUB_STATE_FIREPILLAR_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_2) {
// SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_3) {
// SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_4) {
// SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机
}
}
function onAfterSetState_FirePillar(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FIREPILLAR_0) {
}
else if(substate == SUB_STATE_FIREPILLAR_1) {
// SUB_STATE_FIREPILLAR_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_2) {
// SUB_STATE_FIREPILLAR_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_3) {
// SUB_STATE_FIREPILLAR_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FIREPILLAR_4) {
// SUB_STATE_FIREPILLAR_4 怃粽蝶才桧? 蒙机
}
}
function onBeforeDamage_FirePillar(obj, attacker, boundingBox, isStuck)
//function onBeforeDamage_FirePillar(obj, attacker, boundingBox)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FIREPILLAR_1)
{
// // 碳晦菅 锰剪葬 奢问暧 等嘐虽蒂 N%虏踯 马模卫郦坚, 唳霜击 嫡虽 强蝗栖棻.
local isMeleeAttack = attacker.isMeleeAttack();
local isMissileObj = attacker.isMissileObject();
if((isMeleeAttack == false) || (isMissileObj == true))
{
local direction = sq_GetOppositeDirection(obj. sq_GetDirection(obj));
if(direction == sq_GetDirection(attacker))
{
local attackerInfo = sq_GetCurrentAttackInfo(attacker);
print( " isMeleeAttack:" + isMeleeAttack);
print( " isMissileObj:" + isMissileObj);
if(attackerInfo)
{
local rateDamager = sq_GetAttackInfoHitDelayRateDamager(attackerInfo);
local backupRate = rateDamager * 100.0;
obj.getVar("firepillar").set_vector(VECTOR_FLAG_0, backupRate.tointeger());
sq_SetAttackInfoHitDelayRateDamager(attackerInfo, 0.0); // 横鸥 蝶欐?徽击 0.0戏煎 虏菟横帼萼棻..
obj.getVar("firepillar").set_vector(VECTOR_FLAG_1, sq_GetCurrentAttackeDamageAct(attackerInfo));
print( " DAMAGEACT_NONE");
sq_SetCurrentAttackeDamageAct(attackerInfo, DAMAGEACT_NONE);
obj.getVar("firepillar").set_vector(VECTOR_FLAG_2, 1);
}
}
}
}
}
function onAfterDamage_FirePillar(obj, attacker, boundingBox)
{
if(!obj) return;
local substate = obj.getSkillSubState();
// // 碳晦菅 锰剪葬 奢问暧 等嘐虽蒂 N%虏踯 马模卫郦坚, 唳霜击 嫡虽 强蝗栖棻.
if(substate == SUB_STATE_FIREPILLAR_1)
{
if(obj.getVar("firepillar").get_vector(VECTOR_FLAG_2))
{
local attackerInfo = sq_GetCurrentAttackInfo(attacker);
if(attackerInfo)
{
local backupRate = obj.getVar("firepillar").get_vector(VECTOR_FLAG_0);
local damageAct = obj.getVar("firepillar").get_vector(VECTOR_FLAG_1);
local rateDamager = backupRate.tofloat() / 100.0;
sq_SetAttackInfoHitDelayRateDamager(attackerInfo, rateDamager); // 横鸥 蝶欐?徽击 0.0戏煎 虏菟横帼萼棻..
sq_SetCurrentAttackeDamageAct(attackerInfo, damageAct);
}
obj.getVar("firepillar").set_vector(VECTOR_FLAG_2, 0);
}
}
}

View File

@@ -0,0 +1,241 @@
function setCustomData_po_ATFirePillar(obj, reciveData)
{
if(!obj) return;
local attackRate = reciveData.readDword(); // 横鸥奢问溘
local distance = reciveData.readDword(); // 釭陛朝 剪葬
local arriveTime = reciveData.readDword(); // 模辨给桧 釭陛朝 楼紫 (剪葬梱虽 紫殖?朝 卫除) (1/1000蟾)
local term = reciveData.readDword();
initGetVarTimer(obj, 1, term, -1);
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(0);
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
obj.getVar("dis").clear_vector();
obj.getVar("dis").push_vector(x);
obj.getVar("dis").push_vector(y);
obj.getVar("dis").push_vector(z);
obj.getVar("dis").push_vector(distance);
obj.getVar("arriveTime").clear_vector();
obj.getVar("arriveTime").push_vector(arriveTime);
obj.getVar("frmIndex").clear_vector();
obj.getVar("frmIndex").push_vector(0);
obj.getVar("frmIndex").push_vector(0);
obj.getVar("frmIndex").push_vector(0);
local pAttack = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(pAttack, attackRate);
if(obj.isMyControlObject()) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function setState_po_ATFirePillar(obj, state, datas)
{
if(!obj) return;
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 0);
//initGetVarTimer(obj, 1, 400, 10);
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
local ani = obj.getCustomAnimation(0);
obj.setCurrentAnimation(ani);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
}
}
function procAppend_po_ATFirePillar(obj)
{
if(!obj) return;
local state = obj.getVar("state").get_vector(0);
local passiveState = state;
local pAni = obj.getCurrentAnimation();
local frmIndex = sq_GetAnimationFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
local objX = sq_GetXPos(obj);
local objY = sq_GetYPos(obj);
local parentObj = obj.getParent();
if(!parentObj)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
return;
}
}
if(parentObj.getState() != STATE_FIREPILLAR)
{
//if(passiveState == PASSIVEOBJ_SUB_STATE_0)
//{
//if(obj.isMyControlObject())
//{
//local pIntVec = sq_GetGlobalIntVector();
//
//sq_IntVectorClear(pIntVec);
//sq_IntVectorPush(pIntVec, 0);
//
//obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
//return;
//}
//}
}
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
local fireT = obj.getVar("arriveTime").get_vector(0);
local srcX = obj.getVar("dis").get_vector(0); // 卫蒙x
local srcY = obj.getVar("dis").get_vector(1); // 卫蒙y
local srcZ = obj.getVar("dis").get_vector(2); // 卫蒙z
local distance = obj.getVar("dis").get_vector(3); // 识 桧翕剪葬
local v = sq_GetUniformVelocity(0, distance, currentT, fireT);
print(" distance:" + distance);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
local dstY = srcY;
sq_setCurrentAxisPos(obj, 0, dstX);
if(currentT >= fireT)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
local hitT = obj.getVar().get_timer_vector(0);
if(hitT)
{
if(hitT.isOnEvent(currentT) == true)
{
print(" reset");
obj.resetHitObjectList();
}
}
}
local oldFrmIndex = obj.getVar("frmIndex").get_vector(VECTOR_FLAG_0);
if(frmIndex != oldFrmIndex)
{
obj.getVar("frmIndex").set_vector(VECTOR_FLAG_0, frmIndex);
local x = objX;
local y = objY;
local cnt = obj.getVar("frmIndex").get_vector(VECTOR_FLAG_1);
local size = 3;
local iKeyList =[];
iKeyList.resize(size);
iKeyList[0] = 0;
iKeyList[1] = 15;
iKeyList[2] = -15;
local yList =[];
yList.resize(size);
yList[0] = -1;
yList[1] = 1;
yList[2] = -2;
local pooledObj = createAnimationPooledObject(obj, "PassiveObject/Character/Mage/Animation/ATFirePillar/3_firetail_dodge.ani", true, x, y + yList[cnt], iKeyList[cnt]);
pooledObj.setCurrentDirection(obj.getDirection());
cnt = cnt + 1;
if(cnt > (size - 1))
{
cnt = 0;
}
obj.getVar("frmIndex").set_vector(VECTOR_FLAG_1, cnt);
}
}
function onChangeSkillEffect_po_ATFirePillar(obj, skillIndex, reciveData)
{
if(!obj) return;
}
function onDestroyObject_po_ATFirePillar(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATFirePillar(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATFirePillar(obj)
{
if(!obj) return;
local state = obj.getVar("state").get_vector(0);
local passiveState = state;
if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,431 @@
SUB_STATE_FLAMECIRCLE_0 <- 0
SUB_STATE_FLAMECIRCLE_1 <- 1
SUB_STATE_FLAMECIRCLE_2 <- 2
SUB_STATE_FLAMECIRCLE_3 <- 3
SUB_STATE_FLAMECIRCLE_4 <- 4
SUB_STATE_FLAMECIRCLE_CASTING <- 5
SKL_LV_FRAMECIRCLE_0 <- 0 // 0. ?瞪热
SKL_LV_FRAMECIRCLE_1 <- 1 // 1. ?瞪楼紫 寡徽 (100%~)
SKL_LV_FRAMECIRCLE_2 <- 2 // 2. ?瞪 奢问溘(%)
SKL_LV_FRAMECIRCLE_3 <- 3 // 3. ?栖卫 奢问溘(%)
function checkExecutableSkill_FlameCircle(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_FLAMECIRCLE);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FLAMECIRCLE_CASTING); // substate撮?
obj.sq_AddSetStatePacket(STATE_FLAMECIRCLE, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FlameCircle(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_FLAMECIRCLE); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_FLAMECIRCLE);
}
return true;
}
function onSetState_FlameCircle(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().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
obj.getVar("expflag").clear_vector();
obj.getVar("expflag").push_vector(0);
if(substate == SUB_STATE_FLAMECIRCLE_CASTING)
{
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FLAMECIRCLE_CASTING);
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
//local skillLevel = sq_GetSkillLevel(obj, SKILL_FLAMECIRCLE);
//local castTime = sq_GetCastTime(obj, SKILL_FLAMECIRCLE, skillLevel);
//local animation = sq_GetCurrentAnimation(obj);
//local startTime = sq_GetFrameStartTime(animation, 16);
//local speedRate = startTime.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, startTime, true);
addElementalChain_ATMage(obj, ENUM_ELEMENT_FIRE);
}
else if(substate == SUB_STATE_FLAMECIRCLE_0) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FLAMECIRCLE1);
local pAni = obj.sq_GetCurrentAni();
}
else if(substate == SUB_STATE_FLAMECIRCLE_1) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FLAMECIRCLE2);
local pAni = obj.sq_GetCurrentAni();
//pAni.setSpeedRate(100.0);
}
else if(substate == SUB_STATE_FLAMECIRCLE_2) {
obj.sq_PlaySound("MW_FLAMECILCLE");
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FLAMECIRCLE3);
obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_FLAMECIRCLE);
local pAttack = sq_GetCurrentAttackInfo(obj);
// 跷陛 觼煎栖赝 蒙机
local currentAni = sq_GetCurrentAnimation(obj);
local exp100Rate = obj.sq_GetIntData(SKILL_FLAMECIRCLE, 1); // 1. 葆虽虞 ?嫦 等嘐虽 寡徽 (100%~)
local expRate = exp100Rate.tofloat() / 100.0;
print( " expRate:" + expRate);
sq_SetAttackBoundingBoxSizeRate(currentAni, expRate, expRate, expRate);
obj.getVar("expflag").set_vector(0, 1);
///////////////////////////
//SKL_LV_FRAMECIRCLE_3 <- 3 // 3. ?栖卫 奢问溘(%)
local firstAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_FLAMECIRCLE, STATE_FLAMECIRCLE, SKL_LV_FRAMECIRCLE_3, 1.0); //3. ?栖卫 奢问溘(%)
sq_SetCurrentAttackBonusRate(pAttack, firstAttackRate);
obj.sq_SetShake(obj,2,300);
//sq_SetCurrentAttackBonusRate(pAttack, attack_rate);
}
else if(substate == SUB_STATE_FLAMECIRCLE_3) {
// SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_4) {
// SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机
}
//obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
// SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function prepareDraw_FlameCircle(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FLAMECIRCLE_0) {
// SUB_STATE_FLAMECIRCLE_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_1) {
// SUB_STATE_FLAMECIRCLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_2) {
// SUB_STATE_FLAMECIRCLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_3) {
// SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_4) {
// SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机
}
}
function onProc_FlameCircle(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if(substate == SUB_STATE_FLAMECIRCLE_0) {
if(frmIndex >= 2) {
if(!obj.getVar().get_vector(0)) {
if(obj.isMyControlObject()) {
local distanceL = 0;
local h = 0;
//SKL_LV_FRAMECIRCLE_0 <- 0 // 0. ?瞪热
//SKL_LV_FRAMECIRCLE_1 <- 1 // 1. ?瞪楼紫 寡徽 (100%~)
//SKL_LV_FRAMECIRCLE_2 <- 2 // 2. ?瞪 奢问溘(%)
//SKL_LV_FRAMECIRCLE_3 <- 3 // 3. ?栖卫 奢问溘(%)
local skill_level = obj.sq_GetSkillLevel(SKILL_FLAMECIRCLE);
local spin_num = obj.sq_GetLevelData(SKILL_FLAMECIRCLE, SKL_LV_FRAMECIRCLE_0, skill_level); // 0.葭觼 譆渠 偎热
local speed_rate = obj.sq_GetLevelData(SKILL_FLAMECIRCLE, SKL_LV_FRAMECIRCLE_1, skill_level); // 1.虽楼卫除
local firstAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_FLAMECIRCLE, STATE_FLAMECIRCLE, SKL_LV_FRAMECIRCLE_2, 1.0); //2.奢问溘(%)
local spin_radius = obj.sq_GetIntData(SKILL_FLAMECIRCLE, 0); // ?瞪奁唳 (100%~)
local spin_r = spin_radius.tofloat() / 100.0;
sq_BinaryStartWrite();
sq_BinaryWriteWord(spin_num); // 蝶? 偎热
sq_BinaryWriteFloat(spin_r); // 蝶? 奁唳
sq_BinaryWriteFloat(speed_rate.tofloat()); // 楼紫
sq_BinaryWriteDword(firstAttackRate); // ?瞪 奢问溘(%)
obj.sq_SendCreatePassiveObjectPacket(24244, 0, distanceL, 1, h);
}
obj.getVar().set_vector(0, 1);
}
}
if(frmIndex >= 3) {
if(obj.getVar().get_vector(0) == 1) {
local flame_passive_obj = obj.sq_GetPassiveObject(24244); // 顶陛 当撩? ?溯歜怃赝
local next_state = false;
if(!flame_passive_obj) {
next_state = true;
}
else {
if(flame_passive_obj.sq_var.get_vector(3) == 1) {
next_state = true;
}
}
if(next_state) {
// 桧啪 桡戏贼
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FLAMECIRCLE_1);
obj.sq_AddSetStatePacket(STATE_FLAMECIRCLE, STATE_PRIORITY_USER, true);
}
}
}
}
}
else if(substate == SUB_STATE_FLAMECIRCLE_1) {
}
else if(substate == SUB_STATE_FLAMECIRCLE_2) {
if(frmIndex >= 1) {
if(!obj.getVar().get_vector(0)) {
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_FLAMECIRCLE, true, "Appendage/Character/ap_atmage_effect.nut", true);
obj.getVar().set_vector(0, 1);
}
}
}
else if(substate == SUB_STATE_FLAMECIRCLE_3) {
// SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_4) {
// SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机
}
}
function onProcCon_FlameCircle(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FLAMECIRCLE_0) {
// SUB_STATE_FLAMECIRCLE_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_1) {
// SUB_STATE_FLAMECIRCLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_2) {
// SUB_STATE_FLAMECIRCLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_3) {
// SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_4) {
// SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_FlameCircle(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
print( " substate:" + substate);
if(substate == SUB_STATE_FLAMECIRCLE_CASTING)
{
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FLAMECIRCLE_0);
obj.sq_AddSetStatePacket(STATE_FLAMECIRCLE, STATE_PRIORITY_USER, true);
}
}
else if(substate == SUB_STATE_FLAMECIRCLE_0) {
}
else if(substate == SUB_STATE_FLAMECIRCLE_1) {
if(obj.isMyControlObject()) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FLAMECIRCLE_2);
obj.sq_AddSetStatePacket(STATE_FLAMECIRCLE, STATE_PRIORITY_USER, true);
}
}
else if(substate == SUB_STATE_FLAMECIRCLE_2) {
if(obj.isMyControlObject()) {
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
else if(substate == SUB_STATE_FLAMECIRCLE_3) {
// SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_4) {
// SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机
}
}
function onKeyFrameFlag_FlameCircle(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FLAMECIRCLE_0) {
// SUB_STATE_FLAMECIRCLE_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_1) {
// SUB_STATE_FLAMECIRCLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_2) {
// SUB_STATE_FLAMECIRCLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_3) {
// SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_4) {
// SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_FlameCircle(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
// 觼煎栖赝 跷陛 蒙机
// 横鸥梦蝶 寡徽击 锰鼻鹧煎 给溥捡?栖棻.
if(obj.getVar("expflag").get_vector(0))
{
local ani = sq_GetCustomAni(obj, CUSTOM_ANI_FLAMECIRCLE3);
if(ani)
{
local currentAni = sq_GetCurrentAnimation(obj);
local exp100Rate = obj.sq_GetIntData(SKILL_FLAMECIRCLE, 1); // 1. 葆虽虞 ?嫦 等嘐虽 寡徽 (100%~)
local expOldRate = 100.0 / exp100Rate.tofloat();
sq_SetAttackBoundingBoxSizeRate(currentAni, expOldRate, expOldRate, expOldRate);
}
}
///////////////////////////
if(substate == SUB_STATE_FLAMECIRCLE_0) {
// SUB_STATE_FLAMECIRCLE_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_1) {
// SUB_STATE_FLAMECIRCLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_2) {
}
else if(substate == SUB_STATE_FLAMECIRCLE_3) {
// SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_4) {
// SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机
}
// 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据
//sq_EndDrawCastGauge(obj);
}
function onAfterSetState_FlameCircle(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FLAMECIRCLE_0) {
// SUB_STATE_FLAMECIRCLE_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_1) {
// SUB_STATE_FLAMECIRCLE_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_2) {
// SUB_STATE_FLAMECIRCLE_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_3) {
// SUB_STATE_FLAMECIRCLE_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FLAMECIRCLE_4) {
// SUB_STATE_FLAMECIRCLE_4 怃粽蝶才桧? 蒙机
}
}
function onAttack_FlameCircle(obj, damager, boundingBox, isStuck)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FLAMECIRCLE_2) {
// SUB_STATE_FLAMECIRCLE_2 怃粽蝶才桧? 蒙机
sq_AddHitObject(obj, damager);
}
}

View File

@@ -0,0 +1,189 @@
function setCustomData_po_ATFlameCircle(obj, reciveData)
{
if(!obj) return;
local spin_count = reciveData.readWord();
local radius = reciveData.readFloat();
local speed = reciveData.readFloat();
local attack_rate = reciveData.readDword();
local pAni = obj.getCurrentAnimation();
pAni.setImageRate(radius, 1.0);
pAni.setSpeedRate(speed);
obj.sq_var.clear_vector();
obj.sq_var.push_vector(spin_count); // 0
obj.sq_var.push_vector(0); // 1
obj.sq_var.push_vector(0); // 2
obj.sq_var.push_vector(0); // 3
obj.sq_var.clear_obj_vector();
//local pRopeNormal = obj.sq_createCNRDAnimation("Effect/Animation/Spincutter/throw/4_rope_normal_0.ani");
local ani = sq_CreateAnimation("","PassiveObject/Character/Mage/Animation/ATFlameCircle/04_bspin_dodge.ani");
ani.setImageRate(radius, 1.0);
ani.setSpeedRate(speed);
local bspin_dodge = sq_CreatePooledObject(ani,false);
bspin_dodge.setCurrentPos(obj.getXPos(),obj.getYPos()-2,obj.getZPos()-2);
bspin_dodge.setCurrentDirection(obj.getDirection());
sq_AddObject(obj,bspin_dodge,2,false);
obj.sq_var.push_obj_vector(bspin_dodge);
sq_SetAttackBoundingBoxSizeRate(pAni, radius, radius, radius);
local pAttack = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(pAttack, attack_rate);
}
function destroy_po_ATFlameCircle(obj)
{
local bspin_dodge_obj = obj.sq_var.get_obj_vector(0);
print( " destroy_po_ATFlameCircle:" + bspin_dodge_obj);
if(bspin_dodge_obj) {
bspin_dodge_obj.setValid(false);
obj.sq_var.clear_obj_vector();
}
}
function setState_po_ATFlameCircle(obj, state, datas)
{
if(!obj) return;
}
function onAttack_po_ATFlameCircle(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
local spin_cnt = obj.sq_var.get_vector(1);
local total_spin_cnt = obj.sq_var.get_vector(0);
if(spin_cnt >= total_spin_cnt)
{
sq_AddHitObject(obj, damager);
}
return 0;
}
function procAppend_po_ATFlameCircle(obj)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
if(!pChr)
{
if(obj.isMyControlObject()) {
sq_SendDestroyPacketPassiveObject(obj);
return;
}
}
if(pChr.getState() != STATE_FLAMECIRCLE)
{
if(obj.isMyControlObject()) {
sq_SendDestroyPacketPassiveObject(obj);
return;
}
}
local pAni = obj.getCurrentAnimation();
local frmIndex = sq_GetAnimationFrameIndex(pAni);
local bspin_dodge_obj = obj.sq_var.get_obj_vector(0);
if(bspin_dodge_obj) {
local bspin_dodge_ani = bspin_dodge_obj.getCurrentAnimation();
local bspin_frm_index = sq_GetAnimationFrameIndex(bspin_dodge_ani);
sq_SetAnimationCurrentTimeByFrame(pAni, bspin_frm_index, false);
}
if(frmIndex >= 0 && frmIndex < 3) {
if(obj.sq_var.get_vector(2) == 1) {
local cnt = obj.sq_var.get_vector(1);
cnt = cnt + 1;
obj.sq_var.set_vector(1, cnt); // ?夥袜 给嬴除 苹遴?蒂 ?廓 棺萼棻..
obj.sq_var.set_vector(2, 0);
obj.resetHitObjectList();
}
}
if(frmIndex >= 3 && frmIndex <= 4) {
if(obj.sq_var.get_vector(2) == 0) {
local cnt = obj.sq_var.get_vector(1);
obj.sq_var.set_vector(2, 1);
}
}
local spin_cnt = obj.sq_var.get_vector(1);
local total_spin_cnt = obj.sq_var.get_vector(0);
if(spin_cnt >= (total_spin_cnt - 1)) {
if(obj.sq_var.get_vector(3) == 0) {
obj.sq_var.set_vector(3, 1);
}
}
//print( " total_spin_cnt:" + total_spin_cnt + " spin_cnt:" + spin_cnt);
if(spin_cnt >= total_spin_cnt) {
//obj.resetHitObjectList();
if(bspin_dodge_obj) {
bspin_dodge_obj.setValid(false);
obj.sq_var.clear_obj_vector();
}
if(obj.isMyControlObject()) {
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
function onDestroyObject_po_ATFlameCircle(obj, object)
{
if(!obj) return;
if(object == obj)
{
local bspin_dodge_obj = obj.sq_var.get_obj_vector(0);
if(bspin_dodge_obj)
{
bspin_dodge_obj.setValid(false);
obj.sq_var.clear_obj_vector();
}
}
}
function onKeyFrameFlag_po_ATFlameCircle(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATFlameCircle(obj)
{
if(!obj) return;
//if(obj.isMyControlObject()) {
//sq_SendDestroyPacketPassiveObject(obj);
//}
}

View File

@@ -0,0 +1,419 @@
SUB_STATE_FROZENLAND_0 <- 0
SUB_STATE_FROZENLAND_1 <- 1
SUB_STATE_FROZENLAND_2 <- 2
SUB_STATE_FROZENLAND_3 <- 3
SUB_STATE_FROZENLAND_4 <- 4
SUB_STATE_FROZENLAND_CASTING <- 5
function createShockWaveAnimation(obj, x, y, z)
{
local ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATFrozenLand/sub_dodge.ani");
local shockWaveObj = sq_CreatePooledObject(ani,true);
shockWaveObj = sq_SetEnumDrawLayer(shockWaveObj, ENUM_DRAWLAYER_BOTTOM);
if(shockWaveObj)
{
shockWaveObj.setCurrentPos(x,y,z);
sq_AddObject(obj, shockWaveObj, OBJECTTYPE_DRAWONLY, false);
}
}
function checkExecutableSkill_FrozenLand(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_FROZENLAND);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FROZENLAND_CASTING); // substate撮?
obj.sq_AddSetStatePacket(STATE_FROZENLAND, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_FrozenLand(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK)
{
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_FROZENLAND); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_FROZENLAND);
}
return true;
}
function onSetState_FrozenLand(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
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();
if(substate == SUB_STATE_FROZENLAND_CASTING)
{
// 议蝶? 楼紫蒂 评塭陛紫烟 扑姜
// 议蝶? 楼紫陛 渗唳肾贼, 缣栖诡桧暮 楼紫紫 渗唳 腌栖棻.
// 议蝶? 啪桧虽紫 ?卫蒂 ?鄹栖棻.
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND_CASTING);
local skillLevel = sq_GetSkillLevel(obj, SKILL_FROZENLAND);
local castTime = sq_GetCastTime(obj, SKILL_FROZENLAND, skillLevel);
local animation = sq_GetCurrentAnimation(obj);
local startTime = sq_GetFrameStartTime(animation, 16);
local speedRate = startTime.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, startTime, true);
obj.sq_PlaySound("MW_SLASHWATER");
}
else if(substate == SUB_STATE_FROZENLAND_0) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND1);
}
else if(substate == SUB_STATE_FROZENLAND_1) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND2);
}
else if(substate == SUB_STATE_FROZENLAND_2) {
local t = obj.getVar("state").get_ct_vector(0);
t.Reset();
t.Start(10000,0);
//obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND3);
}
else if(substate == SUB_STATE_FROZENLAND_3)
{
//print(" obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND3);");
obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND3);
}
else if(substate == SUB_STATE_FROZENLAND_4) {
// SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机
}
//obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
// SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
}
function prepareDraw_FrozenLand(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FROZENLAND_0) {
// SUB_STATE_FROZENLAND_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_1) {
// SUB_STATE_FROZENLAND_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_2) {
// SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_3) {
// SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_4) {
// SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机
}
}
function onProc_FrozenLand(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if(substate == SUB_STATE_FROZENLAND_0) {
// SUB_STATE_FROZENLAND_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_1) {
// SUB_STATE_FROZENLAND_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_2) {
// SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机
local t = obj.getVar("state").get_ct_vector(0);
local currentT = 0;
currentT = t.Get();
//print(" currentT:" + currentT);
if(currentT > 240)
{
if(!obj.getVar().get_vector(1))
{
//obj.sq_SetCurrentAnimation(CUSTOM_ANI_FROZENLAND3);
if(obj.isMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FROZENLAND_3); // substate撮?
obj.sq_AddSetStatePacket(STATE_FROZENLAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
obj.getVar().set_vector(1, 1);
}
}
}
else if(substate == SUB_STATE_FROZENLAND_3) {
// SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_4) {
// SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机
}
}
function onProcCon_FrozenLand(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
if(substate == SUB_STATE_FROZENLAND_0) {
if(frmIndex >= 4) {
if(obj.getVar().get_vector(0) == 0)
{
if(obj.isMyControlObject())
{
local radiusRate = obj.sq_GetIntData(SKILL_FROZENLAND, 0);// 0. 卫瞪彰嫔 (葆彻霞 虽荤 绿徽 : 100%~)
local stopSpinNum = obj.sq_GetIntData(SKILL_FROZENLAND, 2); // 2. 晦菅桧 釭颤釭怃 薯濠葬缣怃 蝶?击 紫朝 热
local spinTime = obj.sq_GetIntData(SKILL_FROZENLAND, 3); // 3. 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除
sq_BinaryStartWrite();
sq_BinaryWriteDword(radiusRate); // 卫瞪彰嫔 (葆彻霞 虽荤 绿徽 : 100%~)
sq_BinaryWriteDword(stopSpinNum); // 晦菅桧 釭颤釭怃 薯濠葬缣怃 蝶?击 紫朝 热
sq_BinaryWriteDword(spinTime); // 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除
local multiHitTerm = obj.sq_GetIntData(SKILL_FROZENLAND, 1); // 1. 晦菅 棻钦?? 除问 (0.001蟾 钦嫔)
local multiHitAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_FROZENLAND, STATE_FROZENLAND, 0, 1.0); //0.晦菅 棻钦?? 奢问溘(%)
local expAttackRate = obj.sq_GetBonusRateWithPassive(SKILL_FROZENLAND, STATE_FROZENLAND, 1, 1.0); // 1.晦菅 ?嫦 奢问溘(%)
obj.sq_GetLevelData(SKILL_FROZENLAND, 1, obj.sq_GetSkillLevel(SKILL_FROZENLAND));
// 2.彩念 ?徽 3.彩念 溯涟 4.彩念 卫除
local skillLevel = obj.sq_GetSkillLevel(SKILL_FROZENLAND);
local frozenRate = obj.sq_GetLevelData(SKILL_FROZENLAND, 2, skillLevel); // 2.彩念 ?徽
local frozenLevel = obj.sq_GetLevelData(SKILL_FROZENLAND, 3, skillLevel); // 3.彩念 溯涟
local frozenTime = obj.sq_GetLevelData(SKILL_FROZENLAND, 4, skillLevel); // 4.彩念 卫除
sq_BinaryWriteDword(multiHitTerm); // 晦菅 棻钦?? 除问
sq_BinaryWriteDword(multiHitAttackRate); // 晦菅 棻钦?? 奢问溘 (%)
sq_BinaryWriteDword(expAttackRate); // 晦菅 ?嫦 奢问溘 (%)
sq_BinaryWriteDword(frozenRate); // 彩念 ?徽
sq_BinaryWriteDword(frozenLevel); // 彩念 溯涟
sq_BinaryWriteDword(frozenTime); // 彩念 卫除
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
local spinAddTime = obj.sq_GetIntData(SKILL_FROZENLAND, 4); // 4. 模辨给桧陛 议葛搅 舆渗击 ?瞪?朝 卫除 (0.001蟾钦嫔)
sq_BinaryWriteDword(spinAddTime); // 模辨给桧陛 议葛搅 舆渗击 ?瞪?朝 卫除 (0.001蟾钦嫔)
obj.sq_SendCreatePassiveObjectPacket(24247, 0, 10, -1, 0); // 陴彻饵 - 橡横称擎 渠虽 (葆彻霞)
}
obj.getVar().set_vector(0, 1);
}
}
}
else if(substate == SUB_STATE_FROZENLAND_1) {
local magicCirclePassiveObj = obj.sq_GetPassiveObject(24247); // po_ATFrozenLandMagicCircle
local stateChange = true;
if(magicCirclePassiveObj)
{
local magicCirclePassiveState = magicCirclePassiveObj.getState();
if(magicCirclePassiveState == S_PO_FROZENLAND_MC_3)
{
stateChange = true;
}
else
{
stateChange = false;
}
}
if(stateChange)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FROZENLAND_2); // substate撮?
obj.sq_AddSetStatePacket(STATE_FROZENLAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
else if(substate == SUB_STATE_FROZENLAND_2) {
// SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_3) {
// SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_4) {
// SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_FrozenLand(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) {
return;
}
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FROZENLAND_CASTING)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FROZENLAND_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_FROZENLAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_FROZENLAND_0) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_FROZENLAND_1); // substate撮?
obj.sq_AddSetStatePacket(STATE_FROZENLAND, STATE_PRIORITY_IGNORE_FORCE, true);
}
else if(substate == SUB_STATE_FROZENLAND_1) {
}
else if(substate == SUB_STATE_FROZENLAND_2) {
}
else if(substate == SUB_STATE_FROZENLAND_3) {
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
else if(substate == SUB_STATE_FROZENLAND_4) {
// SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机
}
}
function onKeyFrameFlag_FrozenLand(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FROZENLAND_0) {
// SUB_STATE_FROZENLAND_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_1) {
// SUB_STATE_FROZENLAND_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_2) {
// SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_3) {
// SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_4) {
// SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_FrozenLand(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FROZENLAND_0) {
// SUB_STATE_FROZENLAND_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_1) {
// SUB_STATE_FROZENLAND_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_2) {
// SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_3) {
// SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_4) {
// SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机
}
// 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据
sq_EndDrawCastGauge(obj);
}
function onAfterSetState_FrozenLand(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_FROZENLAND_0) {
// SUB_STATE_FROZENLAND_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_1) {
// SUB_STATE_FROZENLAND_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_2) {
// SUB_STATE_FROZENLAND_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_3) {
// SUB_STATE_FROZENLAND_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_FROZENLAND_4) {
// SUB_STATE_FROZENLAND_4 怃粽蝶才桧? 蒙机
}
}

Binary file not shown.

View File

@@ -0,0 +1,44 @@
function setCustomData_po_ATFrozenLandExpWaterPole(obj, reciveData)
{
if(!obj) return;
local index = reciveData.readDword(); // 樯策蝶
local expAttackRate = reciveData.readDword(); // ?嫦奢问溘
local atk = sq_GetCurrentAttackInfo(obj);
if(atk)
{
sq_SetCurrentAttackBonusRate(atk, expAttackRate);
}
if(index == 1)
{
local ani = obj.getCustomAnimation(0);
obj.setCurrentAnimation(ani);
}
}
function onDestroyObject_po_ATFrozenLandExpWaterPole(obj, object)
{
if(!obj) return;
}
function onEndCurrentAni_po_ATFrozenLandExpWaterPole(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) return;
sq_SendDestroyPacketPassiveObject(obj);
}

View File

@@ -0,0 +1,516 @@
S_PO_FROZENLAND_MC_0 <- 10
S_PO_FROZENLAND_MC_1 <- 11
S_PO_FROZENLAND_MC_2 <- 12
S_PO_FROZENLAND_MC_3 <- 13
S_PO_FROZENLAND_MC_4 <- 14
S_PO_FROZENLAND_MC_5 <- 15
function insertIceFog(obj, dx, dy, dz)
{
if(!obj)
return;
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local particleCreater = obj.getVar().GetparticleCreaterMap("fronzenLand", "PassiveObject/Character/Mage/Particle/ATFrozenLand.ptl", obj);
particleCreater.Restart(0);
particleCreater.SetPos(x + dx, y + dy, z + dz);
//print(" insertIceFog:" + particleCreater);
sq_AddParticleObject(obj, particleCreater);
}
function setCustomData_po_ATFrozenLandMagicCircle(obj, reciveData)
{
if(!obj) return;
local radiusRate = reciveData.readDword(); // 卫瞪彰嫔 (葆彻霞 虽荤 绿徽 : 100%~)
local spinNum = reciveData.readDword(); // 晦菅桧 釭颤釭怃 薯濠葬缣怃 蝶?击 紫朝 热
local spinTime = reciveData.readDword(); // 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除
local multiHitTerm = reciveData.readDword(); // 晦菅 棻钦?? 除问
local multiHitAttackRate = reciveData.readDword(); // 晦菅 棻钦?? 奢问溘 (%)
local expAttackRate = reciveData.readDword(); // 晦菅 ?嫦 奢问溘 (%)
local frozenRate = reciveData.readDword(); // 彩念 ?徽
local frozenLevel = reciveData.readDword(); // 彩念 溯涟
local frozenTime = reciveData.readDword(); // 彩念 卫除
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
local spinAddTime = reciveData.readDword(); // 模辨给桧陛 议葛搅 舆渗击 ?瞪?朝 卫除 (0.001蟾钦嫔)
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(0);
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("basePos").clear_vector();
obj.getVar("basePos").push_vector(0);
obj.getVar("basePos").push_vector(0);
obj.getVar("basePos").push_vector(0);
obj.getVar("flag").clear_timer_vector();
obj.getVar("flag").push_timer_vector();
obj.getVar("icefog").clear_vector();
obj.getVar("icefog").push_vector(0);
local t = obj.getVar("flag").get_timer_vector(0);
t.setParameter(50, 1);
t.resetInstant(0);
//radiusRate = 100;
obj.getVar("radius").clear_vector();
obj.getVar("radius").push_vector(radiusRate); //
obj.getVar("radius").push_vector(0); // setstate煎 setcurrentanimation 胀 拥栖诡桧暮 亿煎遴 绿徽
obj.getVar("radius").push_vector(spinNum); // 2 蝶?偎热
obj.getVar("radius").push_vector(spinTime); // 3 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除
obj.getVar("attack").clear_vector();
obj.getVar("attack").push_vector(multiHitTerm); //
obj.getVar("attack").push_vector(multiHitAttackRate); //
obj.getVar("attack").push_vector(expAttackRate); //
obj.getVar("attack").push_vector(frozenRate); //
obj.getVar("attack").push_vector(frozenLevel); //
obj.getVar("attack").push_vector(frozenTime); //
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
obj.getVar("spin").clear_vector();
obj.getVar("spin").push_vector(spinAddTime); //
if(obj.isMyControlObject()) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, radiusRate);
obj.addSetStatePacket(S_PO_FROZENLAND_MC_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function setState_po_ATFrozenLandMagicCircle(obj, state, datas)
{
if(!obj) return;
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 0);
initGetVarTimer(obj, 1, 400, 10);
if(passiveState == S_PO_FROZENLAND_MC_0) {
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
obj.getVar("basePos").set_vector(0, x);
obj.getVar("basePos").set_vector(1, y);
obj.getVar("basePos").set_vector(2, z);
local atk = sq_GetCurrentAttackInfo(obj);
if(atk)
{
local frozenRate = obj.getVar("attack").get_vector(3);
local frozenLevel = obj.getVar("attack").get_vector(4);
local frozenTime = obj.getVar("attack").get_vector(5);
print(" frozenRate:" + frozenRate);
sq_SetChangeStatusIntoAttackInfo(atk, 0, ACTIVESTATUS_FREEZE, frozenRate, frozenLevel, frozenTime);
}
}
else if(passiveState == S_PO_FROZENLAND_MC_1) {
}
else if(passiveState == S_PO_FROZENLAND_MC_2) {
local ani = obj.getCustomAnimation(0);
obj.setCurrentAnimation(ani);
}
else if(passiveState == S_PO_FROZENLAND_MC_3) {
}
else if(passiveState == S_PO_FROZENLAND_MC_4) {
local ani = obj.getCustomAnimation(1);
obj.setCurrentAnimation(ani);
}
if(passiveState != S_PO_FROZENLAND_MC_3)
{
local radius100Rate = obj.getVar("radius").get_vector(0);
local radiusRate = (radius100Rate.tofloat() / 100.0);
local currentAni = sq_GetCurrentAnimation(obj);
currentAni.setImageRateFromOriginal(radiusRate, radiusRate);
local size = (sq_GetAniRealImageSize(currentAni, ENUM_DIRECTION_RIGHT) / 2) + 60;
obj.getVar("radius").set_vector(1, size);
}
//radius100Rate
}
function procAppend_po_ATFrozenLandMagicCircle(obj)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
if(!pChr) {
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return;
}
local objX = sq_GetXPos(obj);
local objY = sq_GetYPos(obj);
local objZ = sq_GetZPos(obj);
local state = obj.getVar("state").get_vector(0);
local passiveState = state;
local pAni = sq_GetCurrentAnimation(obj);
local frmIndex = sq_GetAnimationFrameIndex(pAni);
if(passiveState == S_PO_FROZENLAND_MC_0) {
// 罹晦 passivestate缣怃朝 晦菅 ?卫粽螃粽薛?菟击 虏蛙栖棻..
if(frmIndex >= 2) {
if(obj.getVar("flag").get_vector(VECTOR_FLAG_0) == 0) {
if(obj.isMyControlObject()) {
//obj.getVar("attack").push_vector(multiHitTerm); //
//obj.getVar("attack").push_vector(multiHitAttackRate); //
//obj.getVar("attack").push_vector(expAttackRate); //
//obj.getVar("attack").push_vector(frozenRate); //
//obj.getVar("attack").push_vector(frozenLevel); //
//obj.getVar("attack").push_vector(frozenTime); //
local radius100Rate = obj.getVar("radius").get_vector(0);
local radiusRate = (radius100Rate.tofloat() / 100.0);
local size = (sq_GetAniRealImageSize(pAni, ENUM_DIRECTION_RIGHT) / 2) + 60;
obj.getVar("radius").set_vector(1, size);
local radiusSize = obj.getVar("radius").get_vector(1);
local spinNum = obj.getVar("radius").get_vector(2);
local spinTime = obj.getVar("radius").get_vector(3);
local multiHitTerm = obj.getVar("attack").get_vector(0);
local multiHitAttackRate = obj.getVar("attack").get_vector(1);
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
local spinAddTime = obj.getVar("spin").get_vector(0);
sq_BinaryStartWrite();
sq_BinaryWriteDword(0); //
sq_BinaryWriteDword(0); //
sq_BinaryWriteDword(radiusSize); //
sq_BinaryWriteDword(spinNum); //
sq_BinaryWriteDword(spinTime); //
sq_BinaryWriteDword(multiHitTerm); //
sq_BinaryWriteDword(multiHitAttackRate); //
sq_BinaryWriteDword(spinAddTime); //
sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24248, 0, 0, 0, 0);
sq_BinaryStartWrite();
sq_BinaryWriteDword(180); //
sq_BinaryWriteDword(1); //
sq_BinaryWriteDword(radiusSize); //
sq_BinaryWriteDword(spinNum); //
sq_BinaryWriteDword(spinTime); //
sq_BinaryWriteDword(multiHitTerm); //
sq_BinaryWriteDword(multiHitAttackRate); //
sq_BinaryWriteDword(spinAddTime); //
sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24248, 0, 0, 0, 0);
//obj.getVar().set_vector(1, 1);
}
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_FROZENLAND_MC_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 1);
}
local currentT = sq_GetCurrentTime(pAni);
//procParticleCreaterMap(obj, currentT, "PassiveObject/Character/Mage/Particle/ATFrozenLand.ptl", objX, objY + 5, objZ);
//insertIceFog(obj, 0, 5, 0);
}
}
else if(passiveState == S_PO_FROZENLAND_MC_1) {
}
else if(passiveState == S_PO_FROZENLAND_MC_2) {
// 罹晦 ?卫粽蝶才桧?缣怃朝 晦菅桧 桡横螺朝虽 ?樯?坚 棻 桡横螺棻贼 ?嫦?卫粽螃粽薛?蒂 当撩?怃 棻挤蝶才桧?煎 setstate?栖棻.
if(obj.getVar("flag").get_vector(VECTOR_FLAG_0) == 0)
{
local pole_passive_obj = sq_GetPassiveObject(obj, 24248);
if(!pole_passive_obj)
{
local parentObj = obj.getParent();
CNSquirrelAppendage.sq_RemoveAppendage(parentObj, "Appendage/Character/ap_common_suck.nut");
if(obj.isMyControlObject()) {
local radius100Rate = obj.getVar("radius").get_vector(0);
local radiusRate = (radius100Rate.tofloat() / 100.0);
local currentAni = sq_GetCurrentAnimation(obj);
local size = (sq_GetAniRealImageSize(currentAni, ENUM_DIRECTION_RIGHT) / 2) + 60;
obj.getVar("radius").set_vector(1, size);
local radiusSize = obj.getVar("radius").get_vector(1);
local expAttackRate = obj.getVar("attack").get_vector(2); //
sq_BinaryStartWrite();
sq_BinaryWriteDword(radiusSize); //
sq_BinaryWriteDword(expAttackRate); // ?嫦奢问溘
sq_BinaryWriteDword(radius100Rate); // 怃赝 ?渠 绿徽
local cx = obj.getVar("basePos").get_vector(0);
local cy = obj.getVar("basePos").get_vector(1);
local cz = obj.getVar("basePos").get_vector(2);
sq_SendCreatePassiveObjectPacket(obj, 24249, 0, 0, 1, 0, obj.getDirection());
//sq_SendCreatePassiveObjectPacketFromPassivePos( obj, 24249, 0, cx, cy, cz); // ?嫦 ?卫粽螃粽薛?
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_FROZENLAND_MC_3, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 1);
}
else
{
if(obj.getVar("flag").get_vector(VECTOR_FLAG_2) == 0)
{
local poleState = pole_passive_obj.getState();
if(poleState == S_PO_FROZENLAND_POLE_1 || poleState == S_PO_FROZENLAND_POLE_2)
{
local poleAni = pole_passive_obj.getCurrentAnimation();
local frmIndex = sq_GetAnimationFrameIndex(poleAni);
if(frmIndex >= 1)
{
// CNFlashScreen* sq_flashScreen(CNRDObject* obj, int inTime, int stayTime, int outTime,
// int maxAlpha, DWORD rbga, int effectType, int layerType)
sq_SetMyShake(obj,4,200);
local poleAniFrameNumber = sq_GetAniFrameNumber(poleAni, 0);
local poleAniDelayTime = poleAni.getDelaySum(0, poleAniFrameNumber - 1);
local poleAniLoopTime = poleAni.getDelaySum(3, poleAniFrameNumber - 1);
local spinNum = obj.getVar("radius").get_vector(2);
local spinTime = obj.getVar("radius").get_vector(3);
local totalSpinPoleDelaySum = ((spinNum - 1) * poleAniLoopTime) + poleAniDelayTime - 80;
totalSpinPoleDelaySum = totalSpinPoleDelaySum + spinTime;
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
totalSpinPoleDelaySum = totalSpinPoleDelaySum + obj.getVar("spin").get_vector(0);
//print( " spinNum:" + spinNum + " poleAniDelayTime:" + poleAniDelayTime + " poleAniLoopTime:" + poleAniLoopTime + " spinTime:" + spinTime + " totalSpinPoleDelaySum:" + totalSpinPoleDelaySum);
if(obj.isMyControlObject())
{
local fScreen = sq_flashScreen(obj,0,totalSpinPoleDelaySum,0,140, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
}
obj.getVar("flag").set_vector(VECTOR_FLAG_2, 1);
}
}
}
if(!obj.getVar("flag").get_vector(VECTOR_FLAG_3))
{
local poleState = pole_passive_obj.getState();
if(poleState == S_PO_FROZENLAND_POLE_2)
{
print(" appendage suck");
local parentObj = obj.getParent();
// 庄横菟桧朝 横?蛤虽 陛翕
local appendage = CNSquirrelAppendage.sq_AppendAppendage(parentObj, obj, SKILL_FROZENLAND, false, "Appendage/Character/ap_common_suck.nut", false);
local suckVel = 200;
local radiusSize = obj.getVar("radius").get_vector(1);
local range = radiusSize * 2;
if(appendage)
{
appendage.sq_SetValidTime(2000);
// 罹晦怃 append 蒙机
CNSquirrelAppendage.sq_Append(appendage, parentObj, obj);
local auraAppendage = appendage.sq_getAuraMaster("frozenAura");
//
if(!auraAppendage)
auraAppendage = appendage.sq_AddAuraMaster("frozenAura",parentObj, obj, 1200, 18, 5, 0);
auraAppendage.setAttractionInfo(suckVel, suckVel, range, 100);
}
//
obj.getVar("flag").set_vector(VECTOR_FLAG_3, 1);
obj.sq_PlaySound("ICEEARTH_SPIN");
}
}
}
}
}
else if(passiveState == S_PO_FROZENLAND_MC_3) {
// 罹晦 ?卫粽蝶才桧?缣怃朝 ?嫦 ?卫粽暧 拥栖诡桧暮 ?溯歜击 ?樯?怃 饵塭虽啪 ?栖棻.
if(obj.getVar("flag").get_vector(VECTOR_FLAG_0) == 0)
{
local exp_passive_obj = sq_GetPassiveObject(obj, 24249);
if(exp_passive_obj)
{
if(exp_passive_obj.getState() == S_PO_FROZENLAND_1)
{
local exp_ani = sq_GetCurrentAnimation(exp_passive_obj);
local exp_frm_index = sq_GetAnimationFrameIndex(exp_ani);
if(exp_frm_index >= 4)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_FROZENLAND_MC_4, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 1);
}
}
}
}
}
local t = obj.getVar("flag").get_timer_vector(0);
if(passiveState == S_PO_FROZENLAND_MC_2)
{
if(obj.getVar("flag").get_vector(VECTOR_FLAG_2) == 1)
{
local currentT = sq_GetCurrentTime(pAni);
if(t.isOnEvent(currentT) == true)
{
local radius = obj.getVar("radius").get_vector(1);
//
//local offset = 20;
local index = obj.getVar("icefog").get_vector(0);
local size = 3;
local iKeyList =[];
iKeyList.resize(size);
iKeyList[0] = ((radius * 2) / 3);
iKeyList[1] = -(radius * 2) / 3;
iKeyList[2] = 0;
print(" iKeyList[0]:" + iKeyList[0]);
print(" iKeyList[1]:" + iKeyList[1]);
insertIceFog(obj, iKeyList[0], 2, 40);
insertIceFog(obj, iKeyList[1], 2, 40);
insertIceFog(obj, iKeyList[2], 2, 40);
print(" insertIceFog:" + iKeyList[index]);
index = index + 1;
if(index > 2)
{
index = 0;
}
index = obj.getVar("icefog").set_vector(0, index);
}
}
}
}
function onDestroyObject_po_ATFrozenLandMagicCircle(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATFrozenLandMagicCircle(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATFrozenLandMagicCircle(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) return;
local state = obj.getVar("state").get_vector(0);
local passiveState = state;
if(passiveState == S_PO_FROZENLAND_MC_0) {
//local pIntVec = sq_GetGlobalIntVector();
//
//sq_IntVectorClear(pIntVec);
//sq_IntVectorPush(pIntVec, 0);
//
//obj.addSetStatePacket(S_PO_FROZENLAND_MC_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
else if(passiveState == S_PO_FROZENLAND_MC_1) {
}
else if(passiveState == S_PO_FROZENLAND_MC_2) {
}
else if(passiveState == S_PO_FROZENLAND_MC_4) {
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
}

View File

@@ -0,0 +1,420 @@
S_PO_FROZENLAND_POLE_0 <- 10
S_PO_FROZENLAND_POLE_1 <- 11
S_PO_FROZENLAND_POLE_2 <- 12
S_PO_FROZENLAND_POLE_3 <- 13
function procCreateShockWaveAnimation(obj, currentT)
{
if(!obj)
return;
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local t = obj.getVar("state").get_timer_vector(0);
if (t.getEventTerm() == -1) {
print(" return:" + t.getEventTerm());
return;
}
if (t.isOnEvent(currentT) == true)
{
createShockWaveAnimation(obj, x, y, z);
}
}
function setCustomData_po_ATFrozenLandPole(obj, reciveData)
{
if(!obj) return;
local angle = reciveData.readDword() * 100;
local flip = reciveData.readDword();
local radiusSize = reciveData.readDword(); // 奁虽荤
local spinNum = reciveData.readDword(); // 晦菅桧 釭颤釭怃 薯濠葬缣怃 蝶?击 紫朝 热
local spinTime = reciveData.readDword(); // 模辨给桧 药怃 陛遴等煎 菟横螃朝 卫除
local multiHitTerm = reciveData.readDword(); // 晦菅 棻钦?? 除问
local multiHitAttackRate = reciveData.readDword(); // 晦菅 棻钦?? 奢问溘 (%)
local spinAddTime = reciveData.readDword(); // 模辨给桧陛 议葛搅 舆渗击 ?瞪?朝 卫除 (0.001蟾钦嫔)
local atk = sq_GetCurrentAttackInfo(obj);
if(atk)
{
sq_SetCurrentAttackBonusRate(atk, multiHitAttackRate);
}
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(0);
obj.getVar("spin_dir").clear_vector(); // state vector
obj.getVar("spin_dir").push_vector(angle); // state vector
obj.getVar("flip").clear_vector(); // state vector
obj.getVar("flip").push_vector(0);
obj.getVar("radius").clear_vector(); // state vector
obj.getVar("radius").push_vector(radiusSize);
obj.getVar("pole").clear_vector();
obj.getVar("pole").push_vector(spinNum);
obj.getVar("pole").push_vector(spinTime);
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);
if(obj.isMyControlObject()) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_FROZENLAND_POLE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
if(flip)
{
obj.getVar("flip").set_vector(0, 1);
}
obj.getVar("state").clear_timer_vector();
obj.getVar("state").push_timer_vector();
local t = obj.getVar("state").get_timer_vector(0);
t.setParameter(200, -1);
t.resetInstant(0);
local hitCnt = obj.sq_var.get_vector(VECTOR_I_MULTI_HIT_COUNT);
print("\n\n multiHitTerm:" + multiHitTerm);
obj.timer_.setParameter(multiHitTerm, -1);
obj.timer_.resetInstant(0);
// 跷陛 觼煎栖赝 蒙机
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
obj.getVar("spin").clear_vector();
obj.getVar("spin").push_vector(spinAddTime); // 譆渠偎热
obj.getVar("spin").push_vector(0);
}
function setState_po_ATFrozenLandPole(obj, state, datas)
{
if(!obj) return;
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
if(passiveState == S_PO_FROZENLAND_POLE_0)
{
// 晦遽谢?
obj.getVar().set_vector(0, x);
obj.getVar().set_vector(1, y);
obj.getVar().set_vector(2, z);
local radius = obj.getVar("radius").get_vector(0);
local current100Angle = obj.getVar("spin_dir").get_vector(0);
current100Angle = current100Angle % 36000;
local angle = (current100Angle.tofloat() / 100.0);
local disMovLen = radius * sq_CosTable(angle.tointeger());
local mov_x = sq_GetDistancePos(x, obj.getDirection(), disMovLen.tointeger());
local axisMagnifyRate = 29.0;
local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100;
local mov_y = y + upMovLen.tointeger();
sq_setCurrentAxisPos(obj, 1, mov_y);
sq_setCurrentAxisPos(obj, 0, mov_x);
}
else if(passiveState == S_PO_FROZENLAND_POLE_1)
{
if(obj.getVar("flip").get_vector(0))
{
local ani = obj.getCustomAnimation(1);
obj.setCurrentAnimation(ani);
}
else
{
local ani = obj.getCustomAnimation(0);
obj.setCurrentAnimation(ani);
}
//local hitCnt = 10;
//local term = 4000 / hitCnt;
//print(" \n\n term:" + term);
////obj.timer_.setParameter(term, hitCnt);
//obj.timer_.resetInstant(0);
}
if(passiveState == S_PO_FROZENLAND_POLE_1 || passiveState == S_PO_FROZENLAND_POLE_3)
{
obj.getVar().clear_ct_vector();
obj.getVar().push_ct_vector();
local t = obj.getVar().get_ct_vector(0);
t.Reset();
t.Start(10000,0);
local stateTimer = obj.getVar("state").get_timer_vector(0);
stateTimer.setParameter(200, -1);
stateTimer.resetInstant(0);
}
}
function procAppend_po_ATFrozenLandPole(obj)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
if(!pChr) {
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return;
}
local state = obj.getVar("state").get_vector(0);
local passiveState = state;
local pAni = sq_GetCurrentAnimation(obj);
local frmIndex = sq_GetAnimationFrameIndex(pAni);
//local currentT = sq_GetCurrentTime(pAni);
local t = obj.getVar().get_ct_vector(0);
local currentT = 0;
if(t)
currentT = t.Get();
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
if(passiveState == S_PO_FROZENLAND_POLE_0) {
}
else if(passiveState == S_PO_FROZENLAND_POLE_1)
{
local stopSpinNum = obj.getVar("pole").get_vector(0);
if(obj.getVar().get_vector(2) >= stopSpinNum)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
if(obj.getVar("spin").get_vector(0) > 0)
obj.addSetStatePacket(S_PO_FROZENLAND_POLE_3, pIntVec, STATE_PRIORITY_AUTO, false, "");
else
obj.addSetStatePacket(S_PO_FROZENLAND_POLE_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
else
{
if(obj.getVar().get_vector(4) == 0)
{
if(frmIndex >= 6)
{
local spinNum = obj.getVar().get_vector(2);
obj.getVar().set_vector(2, spinNum + 1);
obj.getVar().set_vector(4, 1);
}
}
else
{
if(obj.getVar().get_vector(4) == 1)
{
if(frmIndex < 6)
{
obj.getVar().set_vector(4, 0);
}
}
}
obj.getVar().set_vector(3, currentT);
}
procCreateShockWaveAnimation(obj, currentT);
}
else if(passiveState == S_PO_FROZENLAND_POLE_3)
{
local baseX = obj.getVar().get_vector(0);
local baseY = obj.getVar().get_vector(1);
// 陕紫 侦褐
local currentSpeedRate = 1.0;
local defaultRoundTime = obj.getVar("pole").get_vector(1);
local radiusBaseSize = obj.getVar("radius").get_vector(0);
local radius = radiusBaseSize;
local base100Angle = obj.getVar("spin_dir").get_vector(0);
local current100Angle = (base100Angle + (36000 * currentSpeedRate * (currentT) / defaultRoundTime)) % 36000;
local angle = (current100Angle.tofloat() / 100.0);
//print( " angle:" + angle);
local disMovLen = radius * sq_CosTable(angle.tointeger());
local mov_x = sq_GetDistancePos(baseX, obj.getDirection(), disMovLen.tointeger());
local axisMagnifyRate = 29.0;
local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100;
local mov_y = baseY + upMovLen.tointeger();
sq_setCurrentAxisPos(obj, 1, mov_y);
sq_setCurrentAxisPos(obj, 0, mov_x);
procCreateShockWaveAnimation(obj, currentT);
// 觼煎栖赝 嬴桧蛊 跷陛 蒙机 薯濠葬缣怃 给坚毡朝 卫除桧 0尔棻 觼棻贼 舆嫔蒂 摹??朝 state煎 渗唳?捡 ?栖棻.
local spinAddTime = obj.getVar("spin").get_vector(0);
if(currentT > spinAddTime)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_FROZENLAND_POLE_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
//obj.getVar("spin_dir").set_vector(0, angle.tointeger());
obj.getVar().set_vector(3, currentT);
}
}
else if(passiveState == S_PO_FROZENLAND_POLE_2)
{
local delaySum = obj.getVar().get_vector(3);
//local delaySum = 0;
local baseX = obj.getVar().get_vector(0);
local baseY = obj.getVar().get_vector(1);
// 陕紫 侦褐
local currentSpeedRate = 1.0;
local defaultRoundTime = obj.getVar("pole").get_vector(1);
local radiusBaseSize = obj.getVar("radius").get_vector(0);
local radius = sq_GetUniformVelocity(radiusBaseSize, 0, currentT - delaySum, defaultRoundTime);
local base100Angle = obj.getVar("spin_dir").get_vector(0);
local current100Angle = (base100Angle + (36000 * currentSpeedRate * (currentT - delaySum) / defaultRoundTime)) % 36000;
local angle = (current100Angle.tofloat() / 100.0);
local disMovLen = radius * sq_CosTable(angle.tointeger());
local mov_x = sq_GetDistancePos(baseX, obj.getDirection(), disMovLen.tointeger());
local axisMagnifyRate = 29.0;
local upMovLen = radius * sq_SinTable(angle.tointeger()) * axisMagnifyRate / 100;
local mov_y = baseY + upMovLen.tointeger();
sq_setCurrentAxisPos(obj, 1, mov_y);
sq_setCurrentAxisPos(obj, 0, mov_x);
if(currentT > (defaultRoundTime + delaySum))
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
procCreateShockWaveAnimation(obj, currentT);
}
if (obj.timer_.isOnEvent(currentT) == true)
{
obj.resetHitObjectList();
}
}
function onDestroyObject_po_ATFrozenLandPole(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATFrozenLandPole(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATFrozenLandPole(obj)
{
if(!obj) return;
if(!obj.isMyControlObject()) return;
local state = obj.getVar("state").get_vector(0);
local passiveState = state;
if(passiveState == S_PO_FROZENLAND_POLE_0) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(S_PO_FROZENLAND_POLE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
else if(passiveState == S_PO_FROZENLAND_POLE_1) {
}
else if(passiveState == S_PO_FROZENLAND_POLE_2) {
}
}
//*.obj;*.ani;*.als;*.lst;*.atk;*.skl;*.lst;*.ptl;*.nut;*.equ;*.ptl;*.etc
//*.obj;*.ani;*.als;*.lst;*.atk;*.skl;*.lst;*.ptl;*.nut;*.equ;*.ptl;*.etc
// *.obj;*.ani;*.als;*.lst;*.atk;*.skl;*.lst;*.ptl;*.nut;*.equ;*.ptl;*.etc;*.ui

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,496 @@
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 怃粽蝶才桧? 蒙机
}
}

Binary file not shown.

View File

@@ -0,0 +1,663 @@
SMALLICERING_START_X <- 0
SMALLICERING_START_Y <- 1
SMALLICERING_START_Z <- 2
SMALLICERING_MOV_X <- 3
SMALLICERING_MOV_Y <- 4
SMALLICERING_MOV_Z <- 5
function getTargetZPos(target)
{
if(!target)
return 50;
local height = target.getZPos();
height = height + sq_GetObjectHeight(target);
height = height + 50;
return height;
}
function updateAngle(obj, angle)
{
if(!obj)
return;
local currentAngle_ = obj.getVar("angle").get_vector(0);
if (currentAngle_ == (angle + 360) % 360)
return;
currentAngle_ = (angle + 360) % 360;
obj.getVar("angle").set_vector(0, currentAngle_);
if (currentAngle_ >= 90 && currentAngle_ < 270)
{
obj.setCurrentDirection(ENUM_DIRECTION_LEFT);
}
else
{
obj.setCurrentDirection(ENUM_DIRECTION_RIGHT);
}
}
function moveToBombingState(obj, currentAngle)
{
//local angle = 20 + sq_getRandom(0, 10);
if(!obj)
return;
if(obj.isMyControlObject())
{
//int angle = 20 + Rand_r() % 10;
local angle = 50 + sq_getRandom(0, 10);
//local angle = sq_getRandom(0, 180);
if(sq_getRandom(0, 2) != 0)
angle = -angle;
//print( " send changeAngle:" + angle);
sq_BinaryStartWrite();
sq_BinaryWriteFloat(angle.tofloat());
sq_SendChangeSkillEffectPacket(obj, SKILL_ICECHAKRAM);
}
}
function procSmallRingMove(obj)
{
if(!obj)
return;
//local target = obj.sq_var.get_obj_vector(0);
//if (target)
{
local t = obj.getVar("sr").get_ct_vector(0);
if(!t)
return;
local time = t.Get();
local radius = 0;
local angle = 0;
local zPos = 0;
local currentAngle = 0;
//local bombingTurnStartTime_ = 10;
//local bombingTurnEndTime_ = 200;
local bombingTurnStartTime_ = 60;
local bombingTurnEndTime_ = 300;
local bombingStartAngle_ = obj.getVar("sr").get_vector(1)
local bombingChangeAngle_ = obj.getVar("sr").get_vector(0);
//print( " bombingChangeAngle_:" + bombingChangeAngle_);
//local BOMBING_RADIUS = 40;
local BOMBING_RADIUS = 30;
local srcZ = obj.getVar("pos").get_vector(2);
local currentAngle_ = obj.getVar("angle").get_vector(0);
if (time <= bombingTurnStartTime_)
{
// 霜摹
//radius = sq_GetUniformVelocity((isFlyToCenter_)? 0 : -BOMBING_RADIUS, BOMBING_RADIUS, time, bombingTurnStartTime_);
radius = sq_GetUniformVelocity(0, BOMBING_RADIUS, time, bombingTurnStartTime_);
angle = bombingStartAngle_;
zPos = srcZ;
currentAngle = currentAngle_;
}
else
{
// 摹?
local dstZPos_ = obj.getVar("pos").get_vector(2);
//local OVER_RADIUS = 50;
local OVER_RADIUS = 150;
local turnTime = time - bombingTurnStartTime_;
local turnEndTime = bombingTurnEndTime_ - bombingTurnStartTime_;
if (turnTime <= turnEndTime / 2)
radius = BOMBING_RADIUS + sq_GetAccel(0, OVER_RADIUS, turnTime, turnEndTime / 2, true);
else
radius = BOMBING_RADIUS + sq_GetAccel(OVER_RADIUS, 0, turnTime - turnEndTime / 2, turnEndTime / 2, false);
angle = bombingStartAngle_ + sq_GetUniformVelocity(0, bombingChangeAngle_, turnTime, turnEndTime);
//zPos = sq_GetUniformVelocity(srcZ, dstZPos_, turnTime, turnEndTime);
if (bombingChangeAngle_ > 0)
currentAngle = sq_GetUniformVelocity(bombingStartAngle_, bombingStartAngle_ + 180 + bombingChangeAngle_, turnTime, turnEndTime);
else
currentAngle = sq_GetUniformVelocity(bombingStartAngle_, bombingStartAngle_ - 180 + bombingChangeAngle_, turnTime, turnEndTime);
}
local posX = CNRDObject.getAngleDistanceXPos(obj.getVar("pos").get_vector(0), angle, radius, ENUM_DIRECTION_RIGHT);
local posY = CNRDObject.getAngleDistanceYPos(obj.getVar("pos").get_vector(1), angle, radius, false);
local posZ = obj.getVar("pos").get_vector(2);
sq_setCurrentAxisPos(obj, 0, posX);
sq_setCurrentAxisPos(obj, 1, posY);
sq_setCurrentAxisPos(obj, 2, posZ);
//setCurrentPos(2, zPos);
updateAngle(obj, currentAngle);
//print( " time:" + time);
if(time > bombingTurnEndTime_)
{
//print( " time out :" + time);
moveToBombingState(obj, 0);
//t.Reset();
//t.Start(10000,0);
//local changeAngle = moveToBombingState(obj, 0);
//obj.getVar("sr").set_vector(0, changeAngle);
//local currentAng = obj.getVar("angle").get_vector(0);
//obj.getVar("sr").set_vector(1, changeAngle);
//return;
}
}
}
function setCustomData_po_ATIceChakramSmallIceRing(obj, reciveData)
{
if(!obj) return;
local id = reciveData.readDword();
local multi_hit_num = reciveData.readDword();
local power = reciveData.readDword();
local moveMode = reciveData.readDword();
local hitCnt = multi_hit_num;
local atk = sq_GetCurrentAttackInfo(obj);
if(atk)
{
sq_SetCurrentAttackBonusRate(atk, power);
}
// 蒙擎 橡挤坚葬陛 奢问?贼怃 给嬴棻栖朝 卫除 卫除 (喻蝓霞)
local attackTime = 3000; // 0.01蟾钦嫔
obj.getVar("attackTime").clear_vector();
obj.getVar("attackTime").push_vector(attackTime);
obj.getVar("move").clear_vector();
obj.getVar("move").push_vector(moveMode);
local object = sq_GetObjectByObjectId(obj, id);
obj.sq_var.clear_obj_vector();
obj.sq_var.push_obj_vector(object);
obj.getVar("findchr").clear_vector();
obj.getVar("findchr").push_vector(1);
if(!object)
{
obj.getVar("findchr").set_vector(0, 0);
}
obj.getVar().clear_ct_vector();
obj.getVar().push_ct_vector();
local t = obj.getVar().get_ct_vector(0);
t.Reset();
t.Start(10000,0);
obj.getVar("sr").clear_ct_vector();
obj.getVar("sr").push_ct_vector();
obj.getVar("sr").clear_vector();
local changeAngle = 45;
obj.getVar("sr").push_vector(changeAngle);
obj.getVar("sr").push_vector(20);
obj.getVar("dir").clear_vector();
obj.getVar("dir").push_vector(0);
local pAni = obj.getCurrentAnimation();
local initDelay = 0;
local term = attackTime / hitCnt;
obj.timer_.setParameter(term, -1);
obj.timer_.resetInstant(initDelay);
///////////////////////////////////////////////////////////////////////
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
obj.getVar("pos").clear_vector();
obj.getVar("pos").push_vector(x);
obj.getVar("pos").push_vector(y);
obj.getVar("pos").push_vector(z);
obj.getVar("dis").clear_vector();
obj.getVar("dis").push_vector(x);
obj.getVar("dis").push_vector(y);
obj.getVar("dis").push_vector(z);
local xLen = 200;
local yLen = 0;
local zLen = 50;
//local zLen = 250;
if(object)
{
xLen = obj.getXDistance(object);
yLen = sq_GetYPos(object) - sq_GetYPos(obj);
zLen = sq_GetZPos(object) + (sq_GetObjectHeight(object) / 2);
}
obj.getVar("dis").push_vector(xLen);
obj.getVar("dis").push_vector(yLen);
obj.getVar("dis").push_vector(zLen);
///////////////////////////////////////////////////////////////////////
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(0);
obj.getVar("hitCnt").clear_vector();
obj.getVar("hitCnt").push_vector(hitCnt);
obj.getVar("hitCnt").push_vector(1);
obj.getVar("end").clear_vector();
obj.getVar("end").push_vector(0);
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(100000,0);
//print(" term:" + term + "hitCnt:" + hitCnt);
initGetVarTimer(obj, 2, term, hitCnt + 1);
local currentT = 0;
local isMyControl = obj.isMyControlObject();
if(isMyControl) {
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function setState_po_ATIceChakramSmallIceRing(obj, state, datas)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
if(!pChr)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return;
}
local t = obj.getVar().get_ct_vector(0);
if(t)
{
t.Reset();
t.Start(10000,0);
}
local srT = obj.getVar("sr").get_ct_vector(0);
srT.Reset();
srT.Start(10000,0);
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
obj.getVar("angle").clear_vector();
obj.getVar("angle").push_vector(0);
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{ // 跷问
local dir = obj.getDirection();
obj.getVar("dir").set_vector(0, dir);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{ // 颤问
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
obj.getVar("pos").clear_vector();
obj.getVar("pos").push_vector(x);
obj.getVar("pos").push_vector(y);
obj.getVar("pos").push_vector(z);
//obj.sq_SetMoveParticle("Particle/Sparrow.ptl", 20.0, -25.0);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
obj.getVar("dis").clear_vector();
obj.getVar("dis").push_vector(x);
obj.getVar("dis").push_vector(y);
obj.getVar("dis").push_vector(z);
local dx = sq_GetXPos(pChr);
local dy = sq_GetYPos(pChr) + 1;
local dz = sq_GetZPos(pChr) + 160;
local xLen = 200;
local yLen = 0;
local zLen = 50;
xLen = obj.getXDistance(pChr);
yLen = dy - sq_GetYPos(obj);
zLen = dz;
print(" zLen:" + zLen);
//print( " xlen:" + xLen + " ylen:" + yLen + " zlen:" + zLen);
obj.getVar("dis").push_vector(xLen);
obj.getVar("dis").push_vector(yLen);
obj.getVar("dis").push_vector(zLen);
local initDir = obj.getVar("dir").get_vector(0);
//local oppDir = sq_GetOppositeDirection(initDir);
//obj.setCurrentDirection(oppDir);
if(x > dx)
{
obj.setCurrentDirection(ENUM_DIRECTION_LEFT);
}
else
{
obj.setCurrentDirection(ENUM_DIRECTION_RIGHT);
}
}
}
function procAppend_po_ATIceChakramSmallIceRing(obj)
{
if(!obj) return;
local state = obj.getVar("state").get_vector(0);
if(state == 0)
return;
local pChr = obj.getTopCharacter();
if(!pChr)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return;
}
local passiveState = state;
local pAni = obj.getCurrentAnimation();
local t = obj.getVar().get_ct_vector(0);
local currentT = 0;
currentT = t.Get();
if(passiveState == PASSIVEOBJ_SUB_STATE_0 || passiveState == PASSIVEOBJ_SUB_STATE_2)
{ // 跷问, ?热
local fireT = 150;
if(obj.getVar("findchr").get_vector(0) == 0)
{
fireT = 350;
}
if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
fireT = 300;
}
local srcX = obj.getVar("dis").get_vector(SMALLICERING_START_X); // 卫蒙x
local srcY = obj.getVar("dis").get_vector(SMALLICERING_START_Y); // 卫蒙y
local srcZ = obj.getVar("dis").get_vector(SMALLICERING_START_Z); // 卫蒙z
local dis_x_len = obj.getVar("dis").get_vector(SMALLICERING_MOV_X); // 识 桧翕剪葬
local dis_y_len = obj.getVar("dis").get_vector(SMALLICERING_MOV_Y); // y蹴 桧翕剪葬
local endZ = obj.getVar("dis").get_vector(SMALLICERING_MOV_Z); // z蹴 桧翕剪葬
local v = sq_GetAccel(0, dis_x_len, currentT, fireT, true);
local my = sq_GetAccel(0, dis_y_len, currentT, fireT, true);
local mz = sq_GetAccel(srcZ, endZ, currentT, fireT, true);
//local v = sq_GetUniformVelocity(0, dis_x_len, currentT, fireT);
//local my = sq_GetUniformVelocity(0, dis_y_len, currentT, fireT);
//local mz = sq_GetUniformVelocity(srcZ, endZ, currentT, fireT);
local dstX = sq_GetDistancePos(srcX, obj.getDirection(), v);
local dstY = srcY + my;
sq_setCurrentAxisPos(obj, 0, dstX);
sq_setCurrentAxisPos(obj, 1, dstY);
sq_setCurrentAxisPos(obj, 2, mz);
if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
}
if(currentT >= fireT)
{
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{ // 颤问
local hitT = obj.getVar().get_timer_vector(0);
if(!obj.getVar("move").get_vector(0))
{
procSmallRingMove(obj);
}
else
{
local movT = obj.getVar().get_timer_vector(1);
if(movT)
{
if(movT.isOnEvent(currentT) == true)
{
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local ox = obj.getVar("pos").get_vector(0);
local oy = obj.getVar("pos").get_vector(1);
local oz = obj.getVar("pos").get_vector(2);
local dx = 0;
local dy = 0;
local dz = 0;
if(ox != x)
dx = ox;
else
dx = x + sq_getRandom(-40, 40);
if(oy != y)
dy = oy;
else
dy = y + sq_getRandom(-40, 40);
//print( " ox:" + ox + " oy:" + oy + " x:" + x + " y:" + y + " dx:" + dx + " dy:" + dy);
sq_setCurrentAxisPos(obj, 0, dx);
sq_setCurrentAxisPos(obj, 1, dy);
sq_setCurrentAxisPos(obj, 2, z);
}
}
}
if(hitT)
{
if(hitT.isOnEvent(currentT) == true)
{
obj.resetHitObjectList();
}
}
local targetObj = obj.sq_var.get_obj_vector(0);
if(targetObj)
{
local x = sq_GetXPos(targetObj);
local y = sq_GetYPos(targetObj);
local z = targetObj.getZPos() + (sq_GetObjectHeight(targetObj) / 2);
obj.getVar("pos").set_vector(0, x);
obj.getVar("pos").set_vector(1, y);
obj.getVar("pos").set_vector(2, z);
}
local attackTime = obj.getVar("attackTime").get_vector(0); // 0.01蟾钦嫔
if(currentT > attackTime || obj.getVar("findchr").get_vector(0) == 0)
{
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
}
function onChangeSkillEffect_po_ATIceChakramSmallIceRing(obj, skillIndex, reciveData)
{
if(!obj) return;
if(skillIndex != SKILL_ICECHAKRAM) return;
local pChr = obj.getTopCharacter();
if(!pChr) return;
local changeAngle = reciveData.readFloat();
//print( " changeAngle:" + changeAngle);
local t = obj.getVar("sr").get_ct_vector(0);
if(!t)
return;
t.Reset();
t.Start(10000,0);
//print( " changeAngle:" + changeAngle);
//local bombingStartAngle_ = obj.getVar("sr").get_vector(1)
//local bombingChangeAngle_ = obj.getVar("sr").get_vector(0);
obj.getVar("sr").set_vector(0, changeAngle.tointeger());
local currentAng = obj.getVar("angle").get_vector(0);
obj.getVar("sr").set_vector(1, currentAng);
}
function onDestroyObject_po_ATIceChakramSmallIceRing(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATIceChakramSmallIceRing(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATIceChakramSmallIceRing(obj)
{
if(!obj) return;
}
function getCustomHitEffectFileName_po_ATIceChakramSmallIceRing(obj, isAttachOnDamager)
{
return "PassiveObject/Character/Mage/Animation/ATIceChakram/fire/08_chakrahit_dodge.ani";
}

View File

@@ -0,0 +1,429 @@
function createIceSmallRing(obj, dx, dy, dz)
{
if(!obj)
return;
local x = sq_GetXPos(obj) + dx;
local y = sq_GetYPos(obj) + dy;
local z = sq_GetZPos(obj) + dz;
local ani = 0;
ani = sq_CreateAnimation("", "PassiveObject/Character/Mage/Animation/ATIceChakram/cast/04_schakra_normal.ani");
local ring_obj = sq_CreatePooledObject(ani,false);
ring_obj.setCurrentPos(x,y,z);
obj.getVar().push_obj_vector(ring_obj); // 罹晦怃
sq_AddObject(obj, ring_obj, OBJECTTYPE_DRAWONLY, false);
}
function procSmallRing(obj, currentT)
{
local object_num = obj.getVar().get_obj_vector_size();
local i = 0;
local startLen = 140;
local endLen = 210;
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
local size = 5;
local sr_angle_l = [];
sr_angle_l.resize(size);
sr_angle_l[0] = 90;
sr_angle_l[1] = 60;
sr_angle_l[2] = 120;
sr_angle_l[3] = 70;
sr_angle_l[4] = 110;
local sr_len_l =[];
sr_len_l.resize(size);
sr_len_l[0] = 180;
sr_len_l[1] = 160;
sr_len_l[2] = 140;
sr_len_l[3] = 245;
sr_len_l[4] = 240;
for(i = 0; i < object_num; i++)
{ // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻..
local ringObj = obj.getVar().get_obj_vector(i);
if(ringObj)
{
local angle = sr_angle_l[i%5];
local len = sq_GetUniformVelocity(startLen, sr_len_l[i%5] + ((i/5)*10), currentT, 80);
local upMovLen = len * sq_SinTable(angle.tointeger());
local lenMovLen = len * sq_CosTable(angle.tointeger());
sq_setCurrentAxisPos(ringObj, 0, x + lenMovLen.tointeger());
//sq_setCurrentAxisPos(ringObj, 1, y + 1);
//print( " angle:" + angle + " index:" + i + " lenMovLen:" + lenMovLen);
sq_setCurrentAxisPos(ringObj, 2, upMovLen.tointeger());
}
}
}
function procFireSmallRing(obj, currentT, maxT)
{
local object_num = obj.getVar().get_obj_vector_size();
local i = 0;
local startLen = 180;
local endLen = 210;
for(i = 0; i < object_num; i++)
{ // 绮 螃粽薛? 拥栖诡桧暮击 饵塭虽紫烟 ?朝 拥栖诡桧暮戏煎 赅舒 掖羹?棻..
local ringObj = obj.getVar().get_obj_vector(i);
if(ringObj)
{
if(currentT > maxT)
{
if(obj.isMyControlObject())
{
local x_range = 600; //
local y_range = 300; //
local z_range = 100; //
local pChr = obj.getTopCharacter();
local targetObj = getPriorityTarget(pChr, -40, x_range, y_range, z_range, obj.getVar("target"), false);
if(targetObj)
{
print( " find Target");
obj.getVar("target").push_obj_vector(targetObj);
obj.getVar("target").set_vector(0, 1);
}
else
{ // 嬴鼠匙紫 颤啃击 跤琼懊棻贼.. 锰楚 琼懊湍 颤啃桧 毡朝虽 羹觼?尔坚 毡棻贼 斜匙击 厥蝗栖棻.
local backTarget = obj.getVar("target").get_obj_vector(0);
print( " none find Target:" + backTarget);
if(backTarget)
{
obj.getVar("target").push_obj_vector(backTarget);
obj.getVar("target").set_vector(0, 1);
targetObj = backTarget;
}
}
local id = sq_GetObjectId(targetObj);
//obj.getVar("chakram").clear_vector();
//obj.getVar("chakram").push_vector(createSmallRingNum);
//obj.getVar("chakram").push_vector(multiHitNum);
//local power = reciveData.readDword(); // 0.蒙擎 橡挤坚葬 棻钦?? 奢问溘(+)
local multiHitNum = obj.getVar("chakram").get_vector(1); // 1. 蒙擎 橡挤 坚葬 棻钦?? ?热
local power = obj.getVar("chakram").get_vector(2); // power
local x = sq_GetXPos(ringObj);
local y = sq_GetYPos(ringObj);
local z = sq_GetZPos(ringObj);
sq_BinaryStartWrite();
sq_BinaryWriteDword(id);
sq_BinaryWriteDword(multiHitNum);
sq_BinaryWriteDword(power);
//local moveMode = sq_getRandom(0, 2);
local moveMode = 0;
sq_BinaryWriteDword(moveMode);
sq_SendCreatePassiveObjectPacketPos(pChr, 24258, 0, x, y, z);
}
ringObj.setValid(false);
obj.getVar().remove_obj_vector(ringObj);
return true;
}
return false;
}
}
return false;
}
function pushSmallRingFireTarget(obj, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange, targetMaxHeight, pushMaxNum)
{
if(!obj)
return null;
local objectManager = obj.getObjectManager();
if (objectManager == null)
return null;
obj.getVar("target").clear_obj_vector();
local i;
for(i = 0; i < pushMaxNum; i++)
{ //
local targetObj = getPriorityTarget(obj, firstTargetXStartRange, firstTargetXEndRange, firstTargetYRange, targetMaxHeight, obj.getVar("target"));
obj.getVar("target").push_obj_vector(targetObj);
}
}
function setCustomData_po_ATIceChakramSmallMgr(obj, reciveData)
{
if(!obj) return;
//sq_BinaryWriteDword(createSmallRingNum); //
//sq_BinaryWriteDword(multiHitNum); //
//sq_BinaryWriteDword(power); //
local createSmallRingNum = reciveData.readDword(); // 0. 当撩肾朝 橡挤坚葬 偎热
local multiHitNum = reciveData.readDword(); // 1. 蒙擎 橡挤 坚葬 棻钦?? ?热
local power = reciveData.readDword(); // 0.蒙擎 橡挤坚葬 棻钦?? 奢问溘(+)
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(0);
obj.getVar("flag").clear_timer_vector();
obj.getVar("flag").push_timer_vector();
obj.getVar("flag").clear_vector();
obj.getVar("chakram").clear_vector();
obj.getVar("chakram").push_vector(createSmallRingNum);
obj.getVar("chakram").push_vector(multiHitNum);
obj.getVar("chakram").push_vector(power);
local i;
for(i = 0; i < createSmallRingNum; i++)
{ //
obj.getVar("flag").push_vector(0);
}
local object_num = obj.getVar("cl").get_obj_vector_size();
obj.getVar().clear_ct_vector();
obj.getVar().push_ct_vector();
local t = obj.getVar().get_ct_vector(0);
t.Reset();
t.Start(10000,0);
obj.getVar().clear_obj_vector();
local t = obj.getVar("flag").get_timer_vector(0);
t.setParameter(50, 1);
t.resetInstant(0);
obj.getVar("attack").clear_vector();
obj.getVar().clear_vector();
obj.getVar().push_vector(90);
obj.getVar().push_vector(45);
obj.getVar().push_vector(135);
obj.getVar().push_vector(35);
obj.getVar().push_vector(155);
local atk = sq_GetCurrentAttackInfo(obj);
if(atk)
{
sq_SetCurrentAttackPower(atk, power);
}
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function destroy_po_ATIceChakramSmallMgr(obj)
{
destroyObject(obj);
}
function setState_po_ATIceChakramSmallMgr(obj, state, datas)
{
if(!obj) return;
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
obj.getVar("flag").set_vector(VECTOR_FLAG_0, 0);
initGetVarTimer(obj, 1, 400, 10);
obj.getVar("target").clear_obj_vector();
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
obj.getVar("target").clear_vector();
obj.getVar("target").push_vector(0);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
//obj.getVar("chakram").push_vector(multiHitNum);
local smallRingNum = obj.getVar("chakram").get_vector(0); // 0 createSmallRingNum
local i;
for(i = 0; i < smallRingNum; i++)
{
createIceSmallRing(obj, 0, 1, 210);
}
local t = obj.getVar().get_ct_vector(0);
t.Reset();
t.Start(10000,0);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
}
}
function procAppend_po_ATIceChakramSmallMgr(obj)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
if(!pChr)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return;
}
local chr_state = pChr.getState();
if(chr_state != STATE_ICECHAKRAM)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return;
}
local objX = sq_GetXPos(obj);
local objY = sq_GetYPos(obj);
local objZ = sq_GetZPos(obj);
local state = obj.getVar("state").get_vector(0);
local passiveState = state;
if(passiveState == 0)
return;
local t = obj.getVar().get_ct_vector(0);
local currentT = 0;
currentT = t.Get();
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
local parentState = obj.sq_GetParentState();
local subState = obj.sq_GetParentSkillSubState();
procSmallRing(obj, currentT);
if(parentState == STATE_ICECHAKRAM && subState == SUB_STATE_ICECHAKRAM_2)
{
if(obj.isMyControlObject())
{
local frmIndex = sq_GetCurrentFrameIndex(pChr);
if(frmIndex > 1)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
local result = procFireSmallRing(obj, currentT, 100);
if(result == true)
{
t.Reset();
t.Start(10000,0);
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
}
}
function onChangeSkillEffect_po_ATIceChakramSmallMgr(obj, skillIndex, reciveData)
{
if(!obj) return;
}
function onDestroyObject_po_ATIceChakramSmallMgr(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATIceChakramSmallMgr(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATIceChakramSmallMgr(obj)
{
if(!obj) return;
}

Binary file not shown.

View File

@@ -0,0 +1,238 @@
ENUM_ICE_CRASH_SUBSTATE_START <-0 ; //嫦翕
ENUM_ICE_CRASH_SUBSTATE_LOOP <-1 ; //?瞪
ENUM_ICE_CRASH_SUBSTATE_LOOP_ATTACKING <-2 ; //?瞪?贼怃 奢问酝
ENUM_ICE_CRASH_SUBSTATE_END <-3 ; //虞颤
ENUM_ICE_CRASH_TIMER_SPIN <- 0;
ENUM_ICE_CRASH_MULTI_HIT <- 1;
VAR_ICE_CRASH <-0
function checkExecutableSkill_IceCrash(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_ICE_CRASH);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(ENUM_ICE_CRASH_SUBSTATE_START); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICE_CRASH , STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function checkCommandEnable_IceCrash(obj)
{
if(!obj)
return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK) {
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_ICE_CRASH); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_ICE_CRASH);
}
return true;
}
function onEndState_IceCrash(obj, newState)
{
if(!obj)
return;
if(newState != STATE_ICE_CRASH)
{
removeAllIceCrashAppendage(obj);
sq_RemoveParticle("Character/Mage/Particle/IceCrashIceDust.ptl",obj);
}
}
function onSetState_IceCrash(obj, state, datas, isResetTimer)
{
if(!obj) return;
local level = sq_GetSkillLevel(obj, SKILL_ICE_CRASH);
local spinDistance = sq_GetIntData(obj, SKILL_ICE_CRASH, 0, level); // ?瞪?貊 陈嬴陛朝 剪葬
local spinSpeed = sq_GetIntData(obj, SKILL_ICE_CRASH, 1, level); // ?瞪?貊 陈嬴陛朝 卫除
local spinTime = (spinDistance.tofloat()/spinSpeed.tofloat()) * 1000.0;
local multiHitGap = sq_GetLevelData(obj, SKILL_ICE_CRASH, 0, level);
local subState = sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
if(subState == ENUM_ICE_CRASH_SUBSTATE_START) {
local attackPower = obj.sq_GetBonusRateWithPassive(SKILL_ICE_CRASH , STATE_ICE_CRASH, 1, 1.0);
local var = obj.getVar();
var.setBool(VAR_ICE_CRASH,true);
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_CRASH_START);
obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_ICE_CRASH);
local currentAttackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(currentAttackInfo, attackPower);
sq_SetCurrentAttackeHitStunTime(currentAttackInfo, 0);
obj.sq_PlaySound("MW_ICECRASH");
}
else if(subState == ENUM_ICE_CRASH_SUBSTATE_LOOP) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_CRASH_LOOP);
obj.setTimeEvent(ENUM_ICE_CRASH_TIMER_SPIN,spinTime.tointeger(),1,false);
obj.setTimeEvent(ENUM_ICE_CRASH_MULTI_HIT,multiHitGap,9999,false);
}
else if(subState == ENUM_ICE_CRASH_SUBSTATE_LOOP_ATTACKING) {
//颤桧该陛 嬴霜 寰给嬴 陛坚 毡击阳 : ENUM_ICE_CRASH_SUBSTATE_LOOP蒂 剪纂虽 强击阳
if(!obj.isExistTimeEvent(ENUM_ICE_CRASH_TIMER_SPIN)) {
obj.setTimeEvent(ENUM_ICE_CRASH_TIMER_SPIN,spinTime.tointeger(),1,false);
obj.setTimeEvent(ENUM_ICE_CRASH_MULTI_HIT,multiHitGap,9999,false);
}
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_CRASH_LOOP_ATTACK);
}
else if(subState == ENUM_ICE_CRASH_SUBSTATE_END) {
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_CRASH_END);
obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_ICE_CRASH_LAST);
sq_RemoveParticle("Character/Mage/Particle/IceCrashIceDust.ptl",obj);
local attackPower = obj.sq_GetBonusRateWithPassive(SKILL_ICE_CRASH , STATE_ICE_CRASH, 2, 1.0);
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackPower);
sq_SetMyShake(obj,2,120);
}
}
function onTimeEvent_IceCrash(obj, timeEventIndex, timeEventCount)
{
if(!obj)
return false;
if(!obj.isMyControlObject())
return false;
if(timeEventIndex == ENUM_ICE_CRASH_TIMER_SPIN)
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(ENUM_ICE_CRASH_SUBSTATE_END); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICE_CRASH , STATE_PRIORITY_USER, true);
return true; // true贼 属寥 酝钦
}
else if( timeEventIndex == ENUM_ICE_CRASH_MULTI_HIT )
{
if(obj.getSkillSubState() == ENUM_ICE_CRASH_SUBSTATE_END)
return true; // true贼 属寥 酝钦
// 葬蝶?鼻暧 赅苌 螃粽薛? ?才 棻钦?? 尔卤
local sq_var = obj.getVar();
local i=0;
local objectsSize = sq_var.get_obj_vector_size();
obj.sq_SetCurrentAttackInfo(CUSTOM_ATTACK_INFO_ICE_CRASH);
local attackPower = obj.sq_GetBonusRateWithPassive(SKILL_ICE_CRASH , STATE_ICE_CRASH, 1, 1.0);
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackPower);
for(;i<objectsSize;++i)
{
local damager = sq_var.get_obj_vector(i);
if(damager)
sq_SendHitObjectPacket(obj,damager,0,0,0);
}
//printc("hit!!");
}
return false;
}
function removeAllIceCrashAppendage(obj)
{
if(!obj)
return;
local sq_var = obj.getVar();
local objectsSize = sq_var.get_obj_vector_size();
for(local i=0;i<objectsSize;++i)
{
local damager = sq_var.get_obj_vector(i);
if(damager)
CNSquirrelAppendage.sq_RemoveAppendage(damager, "Character/ATMage/IceCrash/ap_IceCrash.nut");
}
sq_var.clear_obj_vector();
}
function prepareDraw_IceCrash(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
}
function onEndCurrentAni_IceCrash(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == ENUM_ICE_CRASH_SUBSTATE_START) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(ENUM_ICE_CRASH_SUBSTATE_LOOP);
obj.sq_AddSetStatePacket(STATE_ICE_CRASH, STATE_PRIORITY_USER, true);
}
else if(subState == ENUM_ICE_CRASH_SUBSTATE_END) {
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
// onAttack 属寥?热 殓栖棻
function onAttack_IceCrash(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
local subState = obj.getSkillSubState();
local var = obj.getVar();
if(subState < ENUM_ICE_CRASH_SUBSTATE_END && !var.is_obj_vector(damager)) {
if(sq_IsHoldable(obj,damager) && sq_IsGrabable(obj,damager) && !sq_IsFixture(damager)) {
local masterAppendage = CNSquirrelAppendage.sq_AppendAppendage(damager, obj, SKILL_ICE_CRASH, false, "Character/ATMage/IceCrash/ap_IceCrash.nut", true);
if(masterAppendage) {
sq_HoldAndDelayDie(damager, obj, true, true, true, 200, 200, ENUM_DIRECTION_NEUTRAL , masterAppendage);
damager.setCurrentDirection(sq_GetOppositeDirection(obj.getDirection()));
var.push_obj_vector(damager);
}
}
}
if(subState < ENUM_ICE_CRASH_SUBSTATE_LOOP_ATTACKING && var.get_obj_vector_size() > 0) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(ENUM_ICE_CRASH_SUBSTATE_LOOP_ATTACKING); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICE_CRASH , STATE_PRIORITY_USER, true);
}
}
function onKeyFrameFlag_IceCrash(obj, flagIndex)
{
if(!obj) return true;
if(flagIndex == 1) {
obj.sq_SetStaticMoveInfo(0, 200, 100, false);
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
}
else if(flagIndex == 2) {
local level = sq_GetSkillLevel(obj, SKILL_ICE_CRASH);
local speed = sq_GetIntData(obj, SKILL_ICE_CRASH, 1, level);
obj.sq_SetStaticMoveInfo(0, speed, speed, false);
obj.sq_SetMoveDirection(obj.getDirection(), ENUM_DIRECTION_NEUTRAL);
sq_CreateParticle("Character/Mage/Particle/IceCrashIceDust.ptl",obj,0,0,50,true,100,500,100);
}
else if(flagIndex == 3) {
removeAllIceCrashAppendage(obj);
}
return true;
}

View File

@@ -0,0 +1,77 @@
function checkExecutableSkill_IceFieldEx(obj)
{
if (!obj) return false;
local useSkill = obj.sq_IsUseSkill(SKILL_ICE_FIELD_EX);
if (useSkill) {
obj.sq_AddSetStatePacket(STATE_ICE_FIELD_EX, STATE_PRIORITY_IGNORE_FORCE, false);
return true;
}
return false;
}
function checkCommandEnable_IceFieldEx(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK) {
// 警蜗 蝶鉴 偃? 蒙机濠: 姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_ICE_FIELD_EX);
}
return true;
}
function onSetState_IceFieldEx(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_FIELD_EX);
obj.sq_PlaySound("MW_ICEFIELD");
}
function onEndCurrentAni_IceFieldEx(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); // 拥栖 部釭贼 蝶鼹萄煎.
}
function onKeyFrameFlag_IceFieldEx(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
local level = sq_GetSkillLevel(obj, SKILL_ICE_FIELD_EX);
if(flagIndex == 1) {
local level = sq_GetSkillLevel(obj, SKILL_ICE_FIELD_EX);
local power = obj.sq_GetBonusRateWithPassive(SKILL_ICE_FIELD_EX , STATE_ICE_FIELD_EX, 0, 1.0); // LEVEL 0. 橡挤 叹够 奢问溘(%)
local iceLevel = sq_GetLevelData(obj, SKILL_ICE_FIELD_EX, 1, level); // LEVEL 1. 彩念 溯涟
local iceProb = sq_GetLevelData(obj, SKILL_ICE_FIELD_EX, 2, level); // LEVEL 2. 彩念 ?睦
local iceTime = sq_GetLevelData(obj, SKILL_ICE_FIELD_EX, 3, level); // LEVEL 3. 彩念 卫除
obj.sq_StartWrite();
obj.sq_WriteFloat(power.tofloat()); //挤热橾热紫 毡晦阳侥缣 float?戏煎 尔鱼棻. sqr缣摹 DWORD ?击 濠翕戏煎 int?戏煎 夥脯 舆韩 强晦 阳侥.
obj.sq_WriteDword(iceLevel);
obj.sq_WriteDword(iceProb);
obj.sq_WriteDword(iceTime);
obj.sq_SendCreatePassiveObjectPacket(24237, 0, 0, 0, 0); // ?萄 当撩, 100,50暧 谢?缣 当撩
}
return true;
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,471 @@
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();
}

View File

@@ -0,0 +1,563 @@
function setCustomData_po_ATIceManMagicCircle(obj, reciveData)
{
if(!obj) return;
//sq_BinaryWriteDword(freezeRate); //
//sq_BinaryWriteDword(multiHitAttackRate); //
//sq_BinaryWriteDword(smashAttackRate); //
//sq_BinaryWriteDword(expPower); //
local freezeRate = reciveData.readDword(); //
local multiHitAttackRate = reciveData.readDword(); //
local smashAttackRate = reciveData.readDword(); //
local expPower = reciveData.readDword(); //
obj.getVar("freezeRate").clear_vector(); //
obj.getVar("freezeRate").push_vector(freezeRate);
obj.getVar("attack").clear_vector(); //
obj.getVar("attack").push_vector(multiHitAttackRate);
obj.getVar("attack").push_vector(smashAttackRate);
obj.getVar("attack").push_vector(expPower);
obj.getVar("state").clear_vector(); // state vector
obj.getVar("state").push_vector(0);
obj.getVar("flag").clear_vector();
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("flag").push_vector(0);
obj.getVar("casting").clear_obj_vector();
local pChr = obj.getTopCharacter();
print(" pChr:" + pChr);
sq_SetCurrentDirection(obj, obj.getDirection());
if(obj.isMyControlObject())
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_0, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
function destroy_po_ATIceManMagicCircle(obj)
{
if(!obj)
return;
destroyObjectByVar(obj, "casting");
destroyObject(obj);
}
function setState_po_ATIceManMagicCircle(obj, state, datas)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
local passiveState = state;
obj.getVar("state").set_vector(0, passiveState);
local x = sq_GetXPos(obj);
local y = sq_GetYPos(obj);
local z = sq_GetZPos(obj);
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);
local posX = obj.getXPos();
local posY = obj.getYPos();
local posZ = obj.getZPos();
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
local ani = obj.getCustomAnimation(0);
obj.setCurrentAnimation(ani);
local pooledBackObj = createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/01_casting/casting_base_back.ani", false,
posX, posY - 1, 0);
local pooledFrontObj = createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/01_casting/casting_base_front.ani", false,
posX, posY + 2, 0);
obj.getVar("casting").push_obj_vector(pooledBackObj);
obj.getVar("casting").push_obj_vector(pooledFrontObj);
createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/01_casting/02_roadappear_dodge_00.ani", true,
posX, posY + 2, 0);
createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/01_casting/02_roadappear_dodge_f_00.ani", true,
posX, posY - 1, 0);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
//pChr.setDirection(
local ani = obj.getCustomAnimation(1);
obj.setCurrentAnimation(ani);
local pooledFrontObj = createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/02_pole/pole_base.ani", false, posX, posY, 0);
obj.getVar().push_obj_vector(pooledFrontObj); // index 2
// 试虽
createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/02_pole/dust/19smoke_dodge_11.ani", true,
posX, posY + 1, 0);
//
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_3)
{ // 橡挤?惚 1
local ani = obj.getCustomAnimation(2);
obj.setCurrentAnimation(ani);
local attackInfo = sq_GetCustomAttackInfo(obj, 0);
sq_SetCurrentAttackInfo(obj, attackInfo);
////////////////////////////////////////////////////////
// 涧觼铮桧粽 跷陛
local pooledObj = null;
pooledObj = sq_CreateDrawOnlyObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/common/18_shockwave_dodge_0.ani",
ENUM_DRAWLAYER_BOTTOM, true);
pooledObj.setCurrentPos(posX, posY, 0);
sq_AddObject(obj, pooledObj, OBJECTTYPE_DRAWONLY, false);
////////////////////////////////////////////////////////
local pooledFrontObj = createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/destroy_base_0.ani", false, posX, posY, 0);
destroyObject(obj);
obj.getVar().push_obj_vector(pooledFrontObj);
local particleCreater = obj.getVar().GetparticleCreaterMap("AtIceManD0", "PassiveObject/Character/Mage/Particle/ATIceManDestroy0.ptl", obj);
//
particleCreater.Restart(0);
particleCreater.SetPos(posX, posY + 5, posZ);
sq_AddParticleObject(obj, particleCreater);
createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/02_broken/23_glow_dodge.ani", true,
posX, posY + 1, 0);
local particle = obj.getVar().GetparticleCreaterMap("AtIceManD1", "PassiveObject/Character/Mage/Particle/ATIceManDestroy1.ptl", obj);
//
particle.Restart(0);
particle.SetPos(posX, posY + 5, 55);
sq_AddParticleObject(obj, particle);
local atk = sq_GetCurrentAttackInfo(obj);
local smashAttackRate = obj.getVar("attack").get_vector(1);
sq_SetCurrentAttackBonusRate(atk, smashAttackRate);
if(obj.isMyControlObject())
{
// ?贼?娄
local fScreen = sq_flashScreen(obj,0,80,0,80, sq_RGB(255,255,255), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
sq_addFlashScreen(fScreen, 0, 400, 240, 150, sq_RGB(0,0,0), GRAPHICEFFECT_NONE, ENUM_DRAWLAYER_BOTTOM);
//
sq_SetMyShake(obj,4,300);
}
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_4)
{ // 橡挤?惚 2
local pooledFrontObj = createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/destroy_base_1.ani", false,
posX, posY, 0);
destroyObject(obj);
obj.getVar().push_obj_vector(pooledFrontObj);
// 旋煎办
createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/02_broken/23_glow_dodge.ani", true,
posX, posY + 1, 0);
// 试虽
createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/02_broken/dust/19smoke_dodge_00.ani", true,
posX, posY + 1, 0);
//
local ani = obj.getCustomAnimation(2);
obj.setCurrentAnimation(ani);
local atk = sq_GetCurrentAttackInfo(obj);
local smashAttackRate = obj.getVar("attack").get_vector(1);
sq_SetCurrentAttackBonusRate(atk, smashAttackRate);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_5)
{ // 橡挤?惚 3
local ani = obj.getCustomAnimation(2);
obj.setCurrentAnimation(ani);
local attackInfo = sq_GetCustomAttackInfo(obj, 1);
sq_SetCurrentAttackInfo(obj, attackInfo);
local pooledFrontObj = createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/destroy_base_2.ani", false,
posX, posY, 0);
destroyObject(obj);
local frontObj = obj.getVar("casting").get_obj_vector(0);
local backObj = obj.getVar("casting").get_obj_vector(1);
if(frontObj)
{
frontObj.setValid(false);
}
if(backObj)
{
backObj.setValid(false);
}
obj.getVar("casting").remove_obj_vector(frontObj);
obj.getVar("casting").remove_obj_vector(backObj);
obj.getVar().push_obj_vector(pooledFrontObj);
// 旋煎办
createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/02_broken/23_glow_dodge.ani", true,
posX, posY + 1, 0);
local particleCreater = obj.getVar().GetparticleCreaterMap("AtIceManD2", "PassiveObject/Character/Mage/Particle/ATIceManDestroy2.ptl", obj);
//
particleCreater.Restart(0);
particleCreater.SetPos(posX, posY + 5, 55);
sq_AddParticleObject(obj, particleCreater);
// 试虽
createAnimationPooledObject(obj,
"PassiveObject/Character/Mage/Animation/ATIceMan/03_destroy/03_broken_02/dust/19smoke_dodge_00.ani", true,
posX, posY + 1, 0);
//
if(obj.isMyControlObject())
{
sq_SetMyShake(obj,4,300);
}
local atk = sq_GetCurrentAttackInfo(obj);
local expPower = obj.getVar("attack").get_vector(2);
sq_SetCurrentAttackPower(atk, expPower);
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_6)
{ // 葆彻霞饷薯
print(" passiveState == PASSIVEOBJ_SUB_STATE_6");
local ani = obj.getCustomAnimation(3);
obj.setCurrentAnimation(ani);
}
//local radiusRate = (radius100Rate.tofloat() / 100.0);
//local size = (sq_GetAniRealImageSize(currentAni, ENUM_DIRECTION_RIGHT) / 2) + 60;
}
function procAppend_po_ATIceManMagicCircle(obj)
{
if(!obj) return;
local pChr = obj.getTopCharacter();
if(!pChr)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
return;
}
}
local passiveState = obj.getVar("state").get_vector(0);
if(pChr.getState() != STATE_ICEMAN)
{
if(passiveState <= PASSIVEOBJ_SUB_STATE_3)
{
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
return;
}
}
}
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
local sendState = false;
local castingObj = obj.getVar("casting").get_obj_vector(0);
if(castingObj)
{
local isEnd = sq_IsEnd(castingObj.getCurrentAnimation());
if(isEnd)
{
if(pChr.getState() == STATE_ICEMAN && pChr.getSkillSubState() >= SUB_STATE_ICEMAN_1)
{
local frmIndex = sq_GetCurrentFrameIndex(pChr);
if(frmIndex > 1)
{
//print(" pass");
sendState = true;
}
}
//
}
}
else
{
//print(" castingObj is null");
sendState = true;
}
if(obj.isMyControlObject())
{
if(sendState)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_2, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
else if(passiveState > PASSIVEOBJ_SUB_STATE_1 && passiveState < PASSIVEOBJ_SUB_STATE_6)
{ // 橡挤当撩, 橡挤?惚
//PASSIVEOBJ_SUB_STATE_2 // 橡挤当撩
//PASSIVEOBJ_SUB_STATE_3 // 橡挤?惚 - 梱虏?贼
//PASSIVEOBJ_SUB_STATE_4 // 橡挤?惚 - ?惚1
//PASSIVEOBJ_SUB_STATE_5 // 橡挤?惚 - ?惚2
local sendState = false;
local castingObj = obj.getVar().get_obj_vector(0);
if(castingObj)
{
local isEnd = sq_IsEnd(castingObj.getCurrentAnimation()); // index 2
if(isEnd)
{
if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{ // 橡挤当撩桧 赅舒 部陬击 阳
if(pChr.getState() == STATE_ICEMAN && pChr.getSkillSubState() >= SUB_STATE_ICEMAN_4)
{
local frmIndex = sq_GetCurrentFrameIndex(pChr);
//print( " now:" + frmIndex);
if(frmIndex > 5)
{
sendState = true;
}
}
}
else
{
sendState = true;
}
}
else
{ // 拥栖诡桧暮桧 寰部陬击 阳
if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{ // 晦菅娄 跺桧 ?溯歜 翕晦?
if(pChr.getSkillSubState() == SUB_STATE_ICEMAN_3)
{
local frmIndex = sq_GetCurrentFrameIndex(pChr);
if(frmIndex <= 18)
{
local poleObj = obj.getVar().get_obj_vector(2); // index 2
if(poleObj)
{
local poleFrmIndex = sq_GetCurrentFrameIndex(poleObj);
if(poleFrmIndex != frmIndex)
{
sq_SetAnimationFrameIndex(poleObj.getCurrentAnimation(), frmIndex);
}
}
}
}
else if(pChr.getState() == STATE_ICEMAN && pChr.getSkillSubState() >= SUB_STATE_ICEMAN_4)
{
local frmIndex = sq_GetCurrentFrameIndex(pChr);
if(frmIndex > 5)
sendState = true;
}
}
}
}
else
{
sendState = true;
}
if(obj.isMyControlObject())
{
if(sendState)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(passiveState + 1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
}
}
}
function onChangeSkillEffect_po_ATIceManMagicCircle(obj, skillIndex, reciveData)
{
if(!obj) return;
}
function onDestroyObject_po_ATIceManMagicCircle(obj, object)
{
if(!obj) return;
}
function onKeyFrameFlag_po_ATIceManMagicCircle(obj, flagIndex)
{
}
function onEndCurrentAni_po_ATIceManMagicCircle(obj)
{
if(!obj) return;
if(!obj.isMyControlObject())
return;
local passiveState = obj.getVar("state").get_vector(0);
if(passiveState == PASSIVEOBJ_SUB_STATE_0)
{
local pIntVec = sq_GetGlobalIntVector();
sq_IntVectorClear(pIntVec);
sq_IntVectorPush(pIntVec, 0);
obj.addSetStatePacket(PASSIVEOBJ_SUB_STATE_1, pIntVec, STATE_PRIORITY_AUTO, false, "");
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_2)
{
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_3)
{
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_4)
{
}
else if(passiveState == PASSIVEOBJ_SUB_STATE_6)
{ // 饷薯
print(" passiveState == PASSIVEOBJ_SUB_STATE_6 destroy");
sq_SendDestroyPacketPassiveObject(obj);
}
}
function onAttack_po_ATIceManMagicCircle(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
local pChr = obj.getTopCharacter();
if(!pChr)
return 0;
local active_damager = sq_GetCNRDObjectToActiveObject(damager);
if(!active_damager)
return 0;
local passiveState = obj.getVar("state").get_vector(0);
if(passiveState == PASSIVEOBJ_SUB_STATE_1)
{
local rand = sq_getRandom(0, 100);
local rate = obj.getVar("freezeRate").get_vector(0);
print(" rate:" + rate + " rand" + rand);
// 桧楼?徽桧 剩横陛捡 桧楼马模 横?蛤虽蒂 勘横鄹栖棻..
if(rand <= obj.getVar("freezeRate").get_vector(0))
{
CNSquirrelAppendage.sq_AppendAppendage(damager, pChr, SKILL_ICEMAN,
true, "Character/ATMage/IceMan/ap_ATIceManMagicCircle.nut", true);
}
}
return 0;
}

View File

@@ -0,0 +1,103 @@
function checkExecutableSkill_IceOrbEx(obj)
{
if (!obj) return false;
local useSkill = obj.sq_IsUseSkill(SKILL_ICE_ORB_EX);
if (useSkill) {
obj.sq_AddSetStatePacket(STATE_ICE_ORB_EX, STATE_PRIORITY_IGNORE_FORCE, false);
return true;
}
return false;
}
function checkCommandEnable_IceOrbEx(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK) {
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_ICE_ORB_EX);
}
return true;
}
function onSetState_IceOrbEx(obj, state, datas, isResetTimer)
{
if(!obj) return;
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICE_ORB_EX);
obj.sq_PlaySound("MW_ICEORB");
}
function onEndCurrentAni_IceOrbEx(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false); // 拥栖 部釭贼 蝶鼹萄煎.
}
function onKeyFrameFlag_IceOrbEx(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
local level = sq_GetSkillLevel(obj, SKILL_ICE_ORB_EX);
if(flagIndex == 1) {
// ?卫粽 嫦饵.
if(obj.isMyControlObject())
{
local distance = sq_GetIntData(obj, SKILL_ICE_ORB_EX, 0); // 0. 鼠殓溘 剪葬
local leftPress = sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL);
local rightPress = sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL);
if(leftPress && rightPress) // 翕卫缣 寰扬毓击阳 籀葬. 翕卫缣 扬毓击 隆 酝除戏煎.
{
//蛤?? 高桧晦缣 嬴鼠匙紫 ?虽强挤.
}
else if((sq_GetDirection(obj) == ENUM_DIRECTION_RIGHT && rightPress) // 伪擎 寞?击 扬毓击阳.
|| (sq_GetDirection(obj) == ENUM_DIRECTION_LEFT && leftPress))
{
distance = sq_GetIntData(obj, SKILL_ICE_ORB_EX, 1); // STATIC 1. 姜寞? 剪葬
}
else if(leftPress || rightPress) // ?釭塭紫 殓溘 腑棻贼 羲寞?
{
distance = sq_GetIntData(obj, SKILL_ICE_ORB_EX, 2); // STATIC 2. 羲寞? 剪葬
}
local speed = sq_GetIntData(obj, SKILL_ICE_ORB_EX, 3);// STATIC 3. 掘羹 嫦饵 楼紫
local level = sq_GetSkillLevel(obj, SKILL_ICE_ORB_EX);
local gap = sq_GetIntData(obj, SKILL_ICE_ORB_EX, 4); // STATIC 4. 陛卫 当撩 卫除 除问
local pricklePower = obj.sq_GetBonusRateWithPassive(SKILL_ICE_ORB_EX , STATE_ICE_ORB_EX, 0, 1.0); // LEVEL 0. 陛卫 奢问溘
local lastPower = obj.sq_GetBonusRateWithPassive(SKILL_ICE_ORB_EX , STATE_ICE_ORB_EX, 1, 1.0); // LEVEL 1. 虞颤 奢问溘
local maxCount = sq_GetLevelData(obj, SKILL_ICE_ORB_EX, 2, level); // LEVEL 2. 陛卫 当撩 ?热
local direction = sq_GetDirection(obj);
local targetPos = sq_GetDistancePos(obj.getXPos(), direction, distance);
// 卫除 = 剪葬/楼溘
obj.sq_StartWrite();
obj.sq_WriteDword(speed); // 陈嬴陛朝 楼紫.
obj.sq_WriteDword(gap);
obj.sq_WriteFloat(pricklePower.tofloat()); //挤热橾热紫 毡晦阳侥缣 float?戏煎 尔鱼棻. sqr缣摹 DWORD ?击 濠翕戏煎 int?戏煎 夥脯 舆韩 强晦 阳侥.
obj.sq_WriteFloat(lastPower.tofloat());
obj.sq_WriteDword(maxCount);
obj.sq_WriteWord(direction);
obj.sq_WriteDword(targetPos);
obj.sq_SendCreatePassiveObjectPacket(24235, 0, 100, 0, 50); // 橡挤掘 当撩, 100,50暧 谢?缣 当撩
}
}
return true;
}

View File

@@ -0,0 +1,300 @@
getroottable()["IceOrbExCreatePos"] <- {};
getroottable()["IceOrbExCreatePos"] = [[28,28], // 0
[22,-24], // 1
[-21,0], // 2
[-5,-28], // 3
[-17,36], // 4
[8,-19], // 5
[-31,9], // 6
[-2,42], // 7
[-24,-24], // 8
[36,7]]; // 9
PO_ICE_ORB_ETC_ANI_READY <- 0; // 赅暮 1 : 姜虽, 遽绿
PO_ICE_ORB_ETC_ANI_ATTACK <- 1; // 赅暮 2 : 陛卫奢问
PO_ICE_ORB_ETC_ANI_EXPLOSION <- 2; // 赅暮 3 : ?嫦
PO_ICE_ORB_SUB_STATE_FLYING <- 2; // 陈嬴马
PO_ICE_ORB_SUB_STATE_READY <- 3; // 奢问遽绿,姜虽
PO_ICE_ORB_SUB_STATE_ATTACK <- 4; // 奢问,陛卫络挤
PO_ICE_ORB_SUB_STATE_EXPLOSION <- 5; // ?嫦
//PO_ICE_ORB_VAR_TIME <- 0; // 陈嬴陛朝 卫除
PO_ICE_ORB_VAR_SPEED <- 1; // 陈嬴陛朝 楼紫
PO_ICE_ORB_VAR_GAP <- 2; // 陛卫 当撩 卫除除问
PO_ICE_ORB_VAR_POWER <- 3; // 陛卫 奢问溘
PO_ICE_ORB_VAR_MAXCOUNT <- 4; // 陛卫 当撩 譆渠 偎热.
PO_ICE_ORB_VAR_TARGET_X <- 5; // 迹瞳虽 X谢?
PO_ICE_ORB_VAR_TARGET_Z <- 6; // 迹瞳虽 z谢?
PO_ICE_ORB_TIMER_FLYING <- 0; //陈嬴陛朝 卫除
PO_ICE_ORB_TIMER_ATTACK_GAP <- 1; //陛卫 奢问 卫除 除问
PO_ICE_ORB_TIMER_WAITING_END <- 2; //葆虽虞 陛卫 奢问? 拥栖 部陈阳 梱虽 卫除 除问
PO_ICE_ORB_CONST_PRICKLE_ANI_TIME <- 160; // 陛卫 拥栖暧 识 卫除. : 葆虽虞 陛卫陛 当撩胀? 葆虽虞 陛卫陛 饵塭韩阳梱虽 渠晦 卫除
PO_ICE_ORB_CONST_START_FRAME <- 6; //籀挤 卫蒙? ?溯歜
function setCustomData_po_ATIceOrbEx(obj, reciveData)
{
if(!obj) return;
local speed = reciveData.readDword();
local gap = reciveData.readDword();
local pricklePower = reciveData.readFloat();
local lastPower = reciveData.readFloat();
local maxCount = reciveData.readDword();
local direction = reciveData.readWord();
local targetPos = reciveData.readDword();
obj.setDirection(direction); // 寞?击 睡赅偌羹谛 翕橾?啪
local var = obj.getVar();
var.setInt(PO_ICE_ORB_VAR_SPEED ,speed);
var.setInt(PO_ICE_ORB_VAR_GAP ,gap);
var.setFloat(PO_ICE_ORB_VAR_POWER ,pricklePower);
var.setInt(PO_ICE_ORB_VAR_MAXCOUNT ,maxCount);
var.setInt(PO_ICE_ORB_VAR_TARGET_X ,targetPos);
var.setInt(PO_ICE_ORB_VAR_TARGET_Z ,obj.getZPos());
obj.sendStateOnlyPacket(PO_ICE_ORB_SUB_STATE_FLYING);
// 虞颤 奢问溘 荡潍
local currentAttackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(currentAttackInfo, lastPower.tointeger());
}
//陛卫 当撩 ?热.
function createIcePrickleByIceOrbEx(obj, index, isFirst)
{
// 当撩 嫔纂陛 蟾娄 肾贼 蟾娄 寰肾朝 彰嫔煎 虽姜
local createPosMax = ::IceOrbExCreatePos.len();
index = index % createPosMax;
local pos = ::IceOrbExCreatePos[index];
local x = pos[0];
local z = pos[1];
// 桧嘐虽蒂 1.5寡 ?渠 ?棻. 评塭怃 陛卫暧 当撩嫔纂紫 1.5寡 渗?棻.
x = x.tofloat() * 1.0;
z = z.tofloat() * 1.0;
local var = obj.getVar();
local power = var.getFloat(PO_ICE_ORB_VAR_POWER);
sq_BinaryStartWrite();
sq_BinaryWriteWord(index); // 当撩 陛卫 樯策蝶.
sq_BinaryWriteFloat(power);
sq_BinaryWriteBool(isFirst);
sq_SendCreatePassiveObjectPacket(obj, 24236, 0, x.tointeger(), 1, z.tointeger(), obj.getDirection());
}
function onTimeEvent_po_ATIceOrbEx(obj, timeEventIndex, timeEventCount)
{
if(!obj)
return false;
if(timeEventIndex == PO_ICE_ORB_TIMER_ATTACK_GAP)
{
if(!obj.isMyControlObject())
return true; // 颤桧该陛 true桧贼 ?轿 酝钦.
local var = obj.getVar();
local maxCount = var.getInt(PO_ICE_ORB_VAR_MAXCOUNT);
if(timeEventCount < maxCount) //譆渠 偎热 嘐虏桧贼 陛卫 当撩
{
// 陛卫 当撩 ?热 属
createIcePrickleByIceOrbEx(obj, timeEventCount + PO_ICE_ORB_CONST_START_FRAME, false);
return false; // 颤桧该陛 false桧贼 啗楼 ?轿 ?棻.
}
else {
obj.setTimeEvent(PO_ICE_ORB_TIMER_WAITING_END, PO_ICE_ORB_CONST_PRICKLE_ANI_TIME ,1 , false);
return true; // 颤桧该陛 true桧贼 ?轿 酝钦.
}
}
else if(timeEventIndex == PO_ICE_ORB_TIMER_WAITING_END)
{
obj.sendStateOnlyPacket(PO_ICE_ORB_SUB_STATE_EXPLOSION);
return true; // 颤桧该陛 true桧贼 ?轿 酝钦.
}
return false;
}
function setState_po_ATIceOrbEx(obj, state, datas)
{
if(!obj) return;
if(state == PO_ICE_ORB_SUB_STATE_FLYING)
{
local var = obj.getVar();
local speed = var.getInt(PO_ICE_ORB_VAR_SPEED);
obj.sq_SetMoveParticle("Particle/ATIceOrbEx.ptl", 0.0, 0.0);
sq_SetSpeedToMoveParticle(obj,0,speed);
// 窒葬 试虽 : 绪蒂热烟 濠舆 当撩?棻.
local dustTimeGap = 50.0 * (1000.0/speed.tofloat());
sq_CreateParticle("PassiveObject/Character/Mage/Particle/ATIceOrbDust.ptl",obj,0,-1,0,true,dustTimeGap.tointeger(),500,100);
}
else if(state == PO_ICE_ORB_SUB_STATE_READY)
{
obj.sq_RemoveMoveParticle(); // 桧翕 姜虽.
setCurrentAnimationFromCutomIndex(obj, PO_ICE_ORB_ETC_ANI_READY); // 拥栖 掖羹
local xPos = sq_GetVectorData(datas,0); // 紫杂? x谢?.
sq_SetCurrentPos(obj, xPos, obj.getYPos(), obj.getZPos());
sq_RemoveParticle("PassiveObject/Character/Mage/Particle/ATIceOrbDust.ptl",obj);
}
else if(state == PO_ICE_ORB_SUB_STATE_ATTACK)
{
setCurrentAnimationFromCutomIndex(obj, PO_ICE_ORB_ETC_ANI_ATTACK); // 拥栖 掖羹
}
else if(state == PO_ICE_ORB_SUB_STATE_EXPLOSION)
{
setCurrentAnimationFromCutomIndex(obj, PO_ICE_ORB_ETC_ANI_EXPLOSION); // 拥栖 掖羹
obj.stopSound(3711);
}
}
function procAppend_po_ATIceOrbEx(obj)
{
if(!obj) return;
local state = obj.getState();
if(state == PO_ICE_ORB_SUB_STATE_FLYING)
{
local var = obj.getVar();
local targetXPos = var.getInt(PO_ICE_ORB_VAR_TARGET_X);
local direction = obj.getDirection();
if( (direction == ENUM_DIRECTION_LEFT && targetXPos > obj.getXPos())
|| (direction == ENUM_DIRECTION_RIGHT && targetXPos < obj.getXPos()) ) {
obj.sq_RemoveMoveParticle(); // 桧翕 姜虽.
targetXPos = obj.getXPos();
sq_SetCurrentPos(obj, targetXPos, obj.getYPos(), obj.getZPos());
// 桧翕 部 棻挤 鼻鹧煎 剩梯.
obj.sendStatePacket(PO_ICE_ORB_SUB_STATE_READY, obj.getXPos());
}
}
else if(state == PO_ICE_ORB_SUB_STATE_READY)
{
if(sq_GetCurrentFrameIndex(obj) < 1) {
local var = obj.getVar();
local targetXPos = var.getInt(PO_ICE_ORB_VAR_TARGET_X);
local addX = sq_GetShuttleValue(0, 10, sq_GetObjectTime(obj), 30)-5;
addX = addX >= 0 ? 2 : -2;
sq_SetCurrentPos(obj, targetXPos + addX, obj.getYPos(), obj.getZPos());
}
}
if(state == PO_ICE_ORB_SUB_STATE_ATTACK || state == PO_ICE_ORB_SUB_STATE_READY)
{
if(PO_ICE_ORB_SUB_STATE_READY && sq_GetCurrentFrameIndex(obj) < 2)
return;
local var = obj.getVar();
local x,z;
local t = (sq_GetObjectTime(obj)/100)%4; //sq_GetShuttleValue(0, 4,sq_GetObjectTime(obj),80)%4;
switch(t)
{
case 0 : x = 0; z = 2; break;
case 1 : x = 0; z = -2; break;
case 2 : x = -2; z = 0; break;
case 3 : x = 2; z = 0; break;
default : x = 0; z = 0; break;
}
x = x + var.getInt(PO_ICE_ORB_VAR_TARGET_X);
z = z + var.getInt(PO_ICE_ORB_VAR_TARGET_Z);
sq_SetCurrentPos(obj, x, obj.getYPos(), z);
}
}
function onKeyFrameFlag_po_ATIceOrbEx(obj, flagIndex)
{
if(!obj)
return false;
if(obj.getState() == PO_ICE_ORB_SUB_STATE_READY)
{
if(flagIndex == 1)
{
// 籀挤缚 棻 廓翻 鼻鹧煎 赅舒 当撩.
for(local i = 0; i<PO_ICE_ORB_CONST_START_FRAME ; ++i)
{
createIcePrickleByIceOrbEx(obj, i, true);
}
local var = obj.getVar();
local gap = var.getInt(PO_ICE_ORB_VAR_GAP);
local power = var.getInt(PO_ICE_ORB_VAR_POWER);
obj.setTimeEvent(PO_ICE_ORB_TIMER_ATTACK_GAP, gap, 999, true);
obj.sq_PlaySound("ICEORB_THORN_LOOP",3711);
}
}
else if(obj.getState() == PO_ICE_ORB_SUB_STATE_EXPLOSION)
{
if(flagIndex == 2)
{
sq_CreateParticleByGlobal(PARTICLE_CREATER_WATER_HIT_LIGHT, // ENUM_PARTICLE_CREATER
obj, // CNRDObject* master,
0, //int x,
-1, //int y,
0, //int z,
true, //bool posistionFromMaster,
30, //int timeGap,
150, //int maxTime,
5); //int maxCount
sq_CreateParticleByGlobal(PARTICLE_CREATER_WATER_HIT_ICE, // ENUM_PARTICLE_CREATER
obj, // CNRDObject* master,
0, //int x,
-1, //int y,
0, //int z,
true, //bool posistionFromMaster,
30, //int timeGap,
150, //int maxTime,
5); //int maxCount
sq_CreateParticleByGlobal(PARTICLE_CREATER_WATER_HIT, // ENUM_PARTICLE_CREATER
obj, // CNRDObject* master,
0, //int x,
0, //int y,
0, //int z,
true, //bool posistionFromMaster,
30, //int timeGap,
150, //int maxTime,
2); //int maxCount
}
}
return true;
}
function onEndCurrentAni_po_ATIceOrbEx(obj)
{
if(!obj) return;
if(obj.getState() == PO_ICE_ORB_SUB_STATE_READY)
{
obj.sendStateOnlyPacket(PO_ICE_ORB_SUB_STATE_ATTACK);
}
else if(obj.getState() == PO_ICE_ORB_SUB_STATE_EXPLOSION)
{
sq_SendDestroyPacketPassiveObject(obj);
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,351 @@
SUB_STATE_ICEROAD_0 <- 0
SUB_STATE_ICEROAD_1 <- 1
SUB_STATE_ICEROAD_2 <- 2
SUB_STATE_ICEROAD_3 <- 3
SUB_STATE_ICEROAD_4 <- 4
SUB_STATE_ICEROAD_CASTING <- 5
SKL_LV_0 <- 0 // 卫除渡 mp 模赅榆
SKL_LV_1 <- 1 // 虽楼卫除
SKL_LV_2 <- 2 // 桧楼 马模纂
SKL_LV_3 <- 3 // 桧楼 ?徽
function checkExecutableSkill_IceRoad(obj)
{
if(!obj) return false;
local skill = sq_GetSkill(obj, SKILL_ICEROAD);
if(!skill) return false;
local appendage = obj.GetSquirrelAppendage("Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut");
if(appendage) {
local isvalid = appendage.isValid();
if(isvalid) {
sq_SendChangeSkillEffectPacket(obj, SKILL_ICEROAD);
//skill.resetCurrentCoolTime();
//skill.setSealActiveFunction(true);
//local skill_level = sq_GetSkillLevel(obj, SKILL_ICEROAD);
//obj.startSkillCoolTime(SKILL_ICEROAD, skill_level, -1);
//
//appendage.setValid(false);
return true;
}
}
if(skill.isInCoolTime()) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_ICEROAD);
if(b_useskill) {
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ICEROAD_CASTING); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICEROAD, STATE_PRIORITY_IGNORE_FORCE, true);
return true;
}
return false;
}
function checkCommandEnable_IceRoad(obj)
{
if(!obj) return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK) {
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_ICEROAD);
}
return true;
}
function onSetState_IceRoad(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.sq_GetVectorData(datas, 0);
obj.setSkillSubState(substate);
obj.sq_StopMove();
//obj.sq_SendCreatePassiveObjectPacket(24243, 0, 0, 0, 0);
obj.getVar().clear_vector();
obj.getVar().push_vector(0);
obj.getVar().push_vector(0);
if(substate == SUB_STATE_ICEROAD_CASTING) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEROAD_CASTING);
local skillLevel = sq_GetSkillLevel(obj, SKILL_ICEROAD);
local castTime = sq_GetCastTime(obj, SKILL_ICEROAD, skillLevel);
local animation = sq_GetCurrentAnimation(obj);
local startTime = sq_GetFrameStartTime(animation, 16);
local speedRate = startTime.tofloat() / castTime.tofloat();
obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, speedRate, speedRate);
obj.sq_PlaySound("MW_ICEROAD");
sq_StartDrawCastGauge(obj, startTime, true);
}
else if(substate == SUB_STATE_ICEROAD_0) {
//CUSTOM_ANI_ICEROAD
obj.sq_SetCurrentAnimation(CUSTOM_ANI_ICEROAD);
}
else if(substate == SUB_STATE_ICEROAD_1) {
// SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_2) {
// SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_3) {
// SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_4) {
// SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机
}
}
function prepareDraw_IceRoad(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ICEROAD_0) {
// SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_1) {
// SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_2) {
// SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_3) {
// SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_4) {
// SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机
}
}
function onProc_IceRoad(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
local pAni = obj.sq_GetCurrentAni();
local frmIndex = obj.sq_GetCurrentFrameIndex(pAni);
local currentT = sq_GetCurrentTime(pAni);
if(substate == SUB_STATE_ICEROAD_0) {
if(frmIndex >= 7) {
if(!obj.getVar().get_vector(0)) {
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_ICEROAD, false, "Character/ATMage/IceRoad/ap_ATMage_IceRoad.nut", false);
// 罹晦怃 append 蒙机
CNSquirrelAppendage.sq_Append(appendage, obj, obj);
//
if(obj.isMyControlObject()) {
local skill = sq_GetSkill(obj, SKILL_ICEROAD);
skill.setSealActiveFunction(false);
}
obj.getVar().set_vector(0, 1);
}
}
if(frmIndex >= 4) {
if(!obj.getVar().get_vector(1)) {
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, SKILL_ICEROAD, true, "Appendage/Character/ap_atmage_effect.nut", true);
obj.getVar().set_vector(1, 1);
}
}
}
else if(substate == SUB_STATE_ICEROAD_1) {
// SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_2) {
// SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_3) {
// SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_4) {
// SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机
}
}
function onProcCon_IceRoad(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
//obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
if(substate == SUB_STATE_ICEROAD_0) {
// SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_1) {
// SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_2) {
// SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_3) {
// SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_4) {
// SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机
}
}
function onEndCurrentAni_IceRoad(obj)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ICEROAD_CASTING)
{
if(obj.isMyControlObject())
{
obj.sq_IntVectClear();
obj.sq_IntVectPush(SUB_STATE_ICEROAD_0); // substate撮?
obj.sq_AddSetStatePacket(STATE_ICEROAD, STATE_PRIORITY_IGNORE_FORCE, true);
}
}
else if(substate == SUB_STATE_ICEROAD_0)
{
// SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机
if(obj.isMyControlObject())
{
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
}
}
else if(substate == SUB_STATE_ICEROAD_1) {
// SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_2) {
// SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_3) {
// SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_4) {
// SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机
}
}
function onKeyFrameFlag_IceRoad(obj, flagIndex)
{
if(!obj) return false;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ICEROAD_0) {
// SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_1) {
// SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_2) {
// SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_3) {
// SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_4) {
// SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机
}
return false;
}
function onEndState_IceRoad(obj, new_state)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ICEROAD_0) {
// SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_1) {
// SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_2) {
// SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_3) {
// SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_4) {
// SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机
}
// 蝶才桧? 谦猿 ?擎 镞模 肾历棻贼 议蝶? 啪桧虽 桡据
sq_EndDrawCastGauge(obj);
}
function onAfterSetState_IceRoad(obj, state, datas, isResetTimer)
{
if(!obj) return;
local substate = obj.getSkillSubState();
if(substate == SUB_STATE_ICEROAD_0) {
// SUB_STATE_ICEROAD_0 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_1) {
// SUB_STATE_ICEROAD_1 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_2) {
// SUB_STATE_ICEROAD_2 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_3) {
// SUB_STATE_ICEROAD_3 怃粽蝶才桧? 蒙机
}
else if(substate == SUB_STATE_ICEROAD_4) {
// SUB_STATE_ICEROAD_4 怃粽蝶才桧? 蒙机
}
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,339 @@
VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT <- 0;
function setCustomData_po_ATMagicBallLightJumpMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallLightJump(obj, receiveData);
}
function setCustomData_po_ATMagicBallDarkJumpMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallDarkJump(obj, receiveData);
}
function setCustomData_po_ATMagicBallWaterJumpMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallWaterJump(obj, receiveData);
}
function setCustomData_po_ATMagicBallFireJumpMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallFireJump(obj, receiveData);
}
function setCustomData_po_ATMagicBallNoneJumpMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallNoneJump(obj, receiveData);
}
// 葆彻掘羹 - 赀楼撩
function setCustomData_po_ATMagicBallLightJump(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 县溯诠骁 溯樯 桧塭贼, 奢问溘击 荡潍?堡棻陛 ?嫦?阳 饵辨?紫烟 ?棻.
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 县溯诠骁 溯樯缣怃 当撩胀 螃粽薛?
local flag = receiveData.readDword();
local var = obj.getVar();
var.setInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT, flag);
}
// 觼煎栖赝 嬴桧蛊缣 暧?怃 嫦饵陕紫陛 渗唳脾
local mage = obj.getTopCharacter();
local angle = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 5);
verticalAngle = verticalAngle - angle;
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallLightMoveJump.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallLight", "PassiveObject/Character/Mage/Particle/ATMagicBallLightTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTailJump1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTailJump2.ptl");
}
function procAppend_po_ATMagicBallLightJump(obj)
{
// 葆彻掘羹 - 赀楼撩 (县溯诠骁 溯樯)
local var = obj.getVar();
if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0)
{
if (obj.isMyControlObject() && obj.getZPos() <= 16)
{
createLightExplosion(obj, null, null, false, 24283);
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
// 葆彻掘羹 - 檩楼撩
function setCustomData_po_ATMagicBallDarkJump(obj, receiveData)
{
if(!obj)
return 0;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
local attackBonusRate = 0;
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
local mage = obj.getTopCharacter();
if (!mage)
return 0;
// 觼煎栖赝 嬴桧蛊缣 暧?怃 嫦饵陕紫陛 渗唳脾
local angle = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 5);
verticalAngle = verticalAngle - angle;
local skill = sq_GetSkill(mage, SKILL_ELEMENTAL_CHANGE);
local skillLevel = sq_GetSkillLevel(mage, SKILL_ELEMENTAL_CHANGE);
attackBonusRate = sq_GetAttackBonusRate(skill, 6, 1.0) + attackBonusRate;
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackBonusRate);
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallDarkMoveJump.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallDark", "PassiveObject/Character/Mage/Particle/ATMagicBallDarkTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailJump1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailJump2.ptl");
//obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailJump3.ptl");
}
// 葆彻掘羹 - 热楼撩
function setCustomData_po_ATMagicBallWaterJump(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 县溯诠骁 溯樯缣怃 当撩胀 螃粽薛?
local flag = receiveData.readDword();
local var = obj.getVar();
var.setInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT, flag);
}
// 觼煎栖赝 嬴桧蛊缣 暧?怃 嫦饵陕紫陛 渗唳脾
local mage = obj.getTopCharacter();
local angle = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 5);
verticalAngle = verticalAngle - angle;
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallWaterMoveJump.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallWaterTailJump", "PassiveObject/Character/Mage/Particle/ATMagicBallWaterTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTailJump1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTailJump2.ptl");
}
function procAppend_po_ATMagicBallWaterJump(obj)
{
// 葆彻掘羹 - 热楼撩 (县溯诠骁 溯樯)
local var = obj.getVar();
if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0)
{
if (obj.isMyControlObject() && obj.getZPos() <= 16)
{
createWaterExplosion(obj, null, null, false, 24282);
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
// 葆彻掘羹 - ?楼撩
function setCustomData_po_ATMagicBallFireJump(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 县溯诠骁 溯樯缣怃 当撩胀 螃粽薛?
local flag = receiveData.readDword();
local var = obj.getVar();
var.setInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT, flag);
}
// 觼煎栖赝 嬴桧蛊缣 暧?怃 嫦饵陕紫陛 渗唳脾
local mage = obj.getTopCharacter();
local angle = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 5);
verticalAngle = verticalAngle - angle;
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallFireMoveJump.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallFireTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTailJump1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTailJump2.ptl");
}
function procAppend_po_ATMagicBallFireJump(obj)
{
// 葆彻掘羹 - ?楼撩 (县溯诠骁 溯樯)
local var = obj.getVar();
if (var.getInt(VAR_IS_ELEMENTAL_RAIN_PASSIVE_OBJECT) > 0)
{
if (obj.isMyControlObject() && obj.getZPos() <= 16)
{
createFireExplosion(obj, null, null, false, 24281);
sq_SendDestroyPacketPassiveObject(obj);
}
}
}
// 葆彻掘羹 - 鼠楼撩
function setCustomData_po_ATMagicBallNoneJump(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// 觼煎栖赝 嬴桧蛊缣 暧?怃 嫦饵陕紫陛 渗唳脾
local mage = obj.getTopCharacter();
if (!mage) return;
local angle = sq_GetIntData(mage, SKILL_ELEMENTAL_RAIN, 5);
verticalAngle = verticalAngle - angle;
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallNoneMoveJump.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallNoneTail.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallNoneTailJump.ptl");
// 晦狱晦 熨湿 瞳辨
mage.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),mage.getState());
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// 瞳桧 翱楼 葆彻掘(?楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallFireJumpMultiShot(obj, damager, boundingBox, isStuck)
{ // 翱楼 葆彻掘 ?楼撩
createFireExplosion(obj, damager, boundingBox, isStuck, 24281);
return 0;
}
// 瞳桧 ?颤 葆彻掘(?楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallFireJump(obj, damager, boundingBox, isStuck)
{
// ?颤 ?楼撩
createFireExplosion(obj, damager, boundingBox, isStuck, 24214);
return 0;
}
// 瞳桧 翱楼 葆彻掘(热楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallWaterJumpMultiShot(obj, damager, boundingBox, isStuck)
{
createWaterExplosion(obj, damager, boundingBox, isStuck, 24282);
return 0;
}
// 瞳桧 ?颤 葆彻掘(热楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallWaterJump(obj, damager, boundingBox, isStuck)
{
createWaterExplosion(obj, damager, boundingBox, isStuck, 24215);
return 0;
}
// 瞳桧 翱楼 葆彻掘(赀楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallLightJumpMultiShot(obj, damager, boundingBox, isStuck)
{ // ?颤 赀楼撩
createLightExplosion(obj, damager, boundingBox, isStuck, 24283);
return 0;
}
// 瞳桧 ?颤 葆彻掘(赀楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallLightJump(obj, damager, boundingBox, isStuck)
{ // ?颤 赀楼撩
createLightExplosion(obj, damager, boundingBox, isStuck, 24216);
return 0;
}

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,343 @@
// 塭桧?棚 错卫缣 当撩肾朝 维暧 潍虞
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);
}
}

Binary file not shown.

View File

@@ -0,0 +1,270 @@
PO_MAGIC_CANNON_STATE_CREATE <- 2;
PO_MAGIC_CANNON_STATE_SHOOT <- 3;
PO_MAGIC_CANNON_VAR_SHOOT_POSITION <- 0;
PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE <- 1;
function setCustomData_po_ATMagicCannon(obj, receiveData)
{
if(!obj) return;
local shootPosition = receiveData.readWord();
local elementalType = receiveData.readWord();
obj.setTimeEvent(0,2000,1,false); // 0廓 樯策蝶暧 颤桧该, 蟾钦嫔 桧渐? 嫦当, 1廓虏, 籀挤缚 褒?寰?.
local var = obj.getVar();
var.setInt(PO_MAGIC_CANNON_VAR_SHOOT_POSITION, shootPosition);
var.setInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE, elementalType);
if(elementalType != ENUM_ELEMENT_NONE) {
setCurrentAnimationFromCutomIndex(obj,elementalType);
}
// 檩楼暧 唳办 评煎 ?嫦桧 桡棻.
if(elementalType == ENUM_ELEMENT_DARK) {
local parentObj = obj.getTopCharacter();
parentObj = sq_ObjectToSQRCharacter(parentObj);
if(!parentObj)
return;
local skill_level = sq_GetSkillLevel(parentObj, SKILL_ELEMENTAL_CHANGE);
local changeStatusLevel = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 7, skill_level);// 7.荡舆 溯涟
local changeStatusProb = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 8, skill_level);// 8.荡舆 ?睦(0.1%)
local changeStatusDuration = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 9, skill_level);// 9.荡舆 虽楼卫除
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetChangeStatusIntoAttackInfo(attackInfo, 0, ACTIVESTATUS_CURSE, changeStatusProb, changeStatusLevel, changeStatusDuration);
local attackPower = 0;
attackPower = parentObj.sq_GetBonusRateWithPassive(SKILL_MAGIC_CANNON, STATE_MAGIC_CANNON, elementalType, 1.0);
sq_SetAddWeaponDamage(attackInfo, true);
sq_SetCurrentAttackBonusRate(attackInfo, attackPower);
// 棻艇 葆彻掘朝 ?嫦缣怃 等嘐虽蒂 籀葬?晦 阳侥缣 僭葬筒&?筒击 饵辨?釭
// 檩楼擎 葆彻掘 濠羹缣怃 等嘐虽蒂 籀葬?晦 阳侥缣 葆彻筒戏煎 渗唳
attackInfo.setAttackType(ATTACKTYPE_MAGICAL);
//等嘐虽 赅暮娄 挡暮 扑姜
//DAMAGEACT_NONE = 0, /// 奁拟 桡挤
//DAMAGEACT_DAMAGE = 1, /// 等嘐虽 赅暮
//DAMAGEACT_DOWN = 2, /// 棻遴
sq_SetCurrentAttackeDamageAct(attackInfo, 1);
attackInfo.setElement(ENUM_ELEMENT_DARK);
}
}
function addMagicCannonEffect(obj,vangle)
{
if(!obj)
return;
local var = obj.getVar();
local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE);
local currentAni = obj.getCurrentAnimation();
local typeName = "none";
switch(elementalType)
{
case ENUM_ELEMENT_FIRE : typeName = "fire"; break;
case ENUM_ELEMENT_WATER : typeName = "water"; break;
case ENUM_ELEMENT_DARK : typeName = "dark"; break;
case ENUM_ELEMENT_LIGHT : typeName = "light"; break;
default : return;
}
local effect = sq_AddDrawOnlyAniFromParent(obj,"PassiveObject/Character/Mage/Animation/ATMagicCannon/01_" + typeName + "_dodge.ani", 0 ,0 ,0);
effect.setCustomRotate(true, sq_ToRadian(vangle));
}
function onKeyFrameFlag_po_ATMagicCannon(obj, keyIndex)
{
if(!obj)
return false;
if(keyIndex == 1) {
obj.sendStateOnlyPacket(PO_MAGIC_CANNON_STATE_SHOOT);
}
return true;
}
function onTimeEvent_po_ATMagicCannon(obj, timeEventIndex, timeEventCount)
{
if(!obj)
return false;
if(obj.isMyControlObject())
{
sq_SendDestroyPacketPassiveObject(obj);
}
return true; // true贼 属寥 酝钦
}
function setState_po_ATMagicCannon(obj, state, datas)
{
if(!obj) return;
local var = obj.getVar();
local shootPosition = var.getInt(PO_MAGIC_CANNON_VAR_SHOOT_POSITION);
local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE);
if (state == PO_MAGIC_CANNON_STATE_SHOOT) {
local vangle = 0.0; // 热?
if(shootPosition == ENUM_MAGIC_CANNON_SUBSTATE_VERTICAL)
vangle = -90.0; // 热霜
else if(shootPosition == ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL)
vangle = -45.0; // 渠陕摹
if(elementalType != ENUM_ELEMENT_NONE) { // 鼠楼撩擎 桧嘐虽 蛤?? 桧嘐虽
setCurrentAnimationFromCutomIndex(obj,ENUM_ELEMENT_MAX + elementalType);
obj.setCustomRotate(true, sq_ToRadian(vangle));
}
obj.sq_SetMoveParticle("Particle/ATMagicCannon.ptl", 0.0, vangle);
addMagicCannonEffect(obj,vangle); // ? ?朝 桧??
local fireSound = "MWSHOW_04";
if (elementalType == ENUM_ELEMENT_FIRE)
fireSound = "MCANNON_FIRE";
else if (elementalType == ENUM_ELEMENT_WATER)
fireSound = "MCANNON_ATK";
else if (elementalType == ENUM_ELEMENT_DARK)
fireSound = "MCANNON_DARK";
else if (elementalType == ENUM_ELEMENT_LIGHT)
fireSound = "MCANNON_LIGHT";
obj.sq_PlaySound(fireSound);
}
}
function createMagicCannonElementlalExplosion(obj)
{
if(!obj)
return;
local var = obj.getVar();
local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE);
if(!obj.isMyControlObject())
return;
if(elementalType == ENUM_ELEMENT_DARK) //檩楼暧 唳办 ?嫦?虽 强朝棻.
return;
local changeStatusType = ACTIVESTATUS_MAX;
local parentObj = sq_GetCNRDObjectToCharacter(obj.getParent());
local skill_level = sq_GetSkillLevel(parentObj, SKILL_ELEMENTAL_CHANGE);
local changeStatusDuration = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 0, skill_level);
local changeStatusProb = 0.0;
local changeStatusLevel = 0.0;
local changeStatusdamage = 0;
// 衙霜议凯暧 ?嫦 觼晦(%)
local sizeRate = sq_GetIntData(parentObj, SKILL_MAGIC_CANNON, 0);
switch (elementalType)
{
case ENUM_ELEMENT_WATER :
changeStatusType = ACTIVESTATUS_FREEZE;
changeStatusLevel = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 3, skill_level);// 3.彩念 溯涟
changeStatusProb = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 4, skill_level);// 4.彩念 ?睦(0.1%)
changeStatusDuration = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 5, skill_level);// 5.彩念 虽楼卫除
break;
case ENUM_ELEMENT_LIGHT :
changeStatusType = ACTIVESTATUS_LIGHTNING;
changeStatusLevel = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 11, skill_level);// 11.马瞪 溯涟
changeStatusProb = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 12, skill_level);// 12.马瞪 ?睦(0.1%)
changeStatusDuration = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 13, skill_level);// 13.马瞪 虽楼卫除
changeStatusdamage = sq_GetLevelData(parentObj, SKILL_ELEMENTAL_CHANGE, 14, skill_level);// 14.马瞪 等嘐虽
break;
}
local explosionInfo = sq_getNewAttackInfoPacket();
// 衙霜议凯暧 ?嫦 觼晦(%)
explosionInfo.sizeRate = sizeRate;
if (changeStatusType != ACTIVESTATUS_MAX)
{
explosionInfo.changeStatusType = changeStatusType;
explosionInfo.changeStatusProb = changeStatusProb.tofloat(); // ?睦
explosionInfo.changeStatusLevel = changeStatusLevel.tofloat(); // 溯涟
explosionInfo.changeStatusDuration = changeStatusDuration;
explosionInfo.changeStatusdamage = changeStatusdamage;
}
local parentObj = obj.getParent();
parentObj = sq_ObjectToSQRCharacter(parentObj);
local attackPower = 0;
if(parentObj) {
attackPower = parentObj.sq_GetBonusRateWithPassive(SKILL_MAGIC_CANNON, STATE_MAGIC_CANNON, elementalType, 1.0);
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj), attackPower);
}
if(0 != attackPower) {
explosionInfo.powerRate = attackPower;
explosionInfo.useWeapon = true;
}
sq_createCommonElementalAttack(obj, elementalType, 0, 0, 0, explosionInfo);
}
function onAttack_po_ATMagicCannon(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
local var = obj.getVar();
local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE);
local state = obj.getState();
if (state == PO_MAGIC_CANNON_STATE_SHOOT && elementalType != ENUM_ELEMENT_DARK) {
createMagicCannonElementlalExplosion(obj);
sq_SendDestroyPacketPassiveObject(obj);
}
local fireSound = "R_MWSHOT_HIT";
if (elementalType == ENUM_ELEMENT_FIRE)
fireSound = "R_FIRESHOT_HIT";
else if (elementalType == ENUM_ELEMENT_WATER)
fireSound = "R_ICE_HIT";
else if (elementalType == ENUM_ELEMENT_DARK)
fireSound = "R_DARKSHOT_HIT";
else if (elementalType == ENUM_ELEMENT_LIGHT)
fireSound = "R_LIGHTSHOT_HIT";
obj.sq_PlaySound(fireSound);
return 0;
}
function procAppend_po_ATMagicCannon(obj)
{
if(obj.getZPos() <= 0)
{
createMagicCannonElementlalExplosion(obj);
sq_SendDestroyPacketPassiveObject(obj);
local var = obj.getVar();
local elementalType = var.getInt(PO_MAGIC_CANNON_VAR_ELEMENTAL_TYPE);
local fallSound = "MANTLE_TIGHTEN";
if (elementalType == ENUM_ELEMENT_FIRE)
fallSound = "MCANNON_FIREFALL";
else if (elementalType == ENUM_ELEMENT_WATER)
fallSound = "MCANNON_CRASH_02";
else if (elementalType == ENUM_ELEMENT_DARK)
fallSound = "MCANNON_DARKFALL";
else if (elementalType == ENUM_ELEMENT_LIGHT)
fallSound = "MCANNON_LIGHTFALL";
obj.sq_PlaySound(fallSound);
}
}
function onEndCurrentAni_po_ATMagicCannon(obj)
{
if(!obj) return;
}

View File

@@ -0,0 +1,347 @@
ATMAGE_MAGIC_ANI_TYPE_BACK <- 0;
ATMAGE_MAGIC_ANI_TYPE_FRONT <- 1;
ATMAGE_MAGIC_ANI_TYPE_CIRCLE <- 2;
VAR_MAGIC_SHIELD_BACK_ANI <- 0;
VAR_MAGIC_SHIELD_FRONT_ANI <- 1;
VAR_MAGIC_SHIELD_ICE_HIT_COUNT <- 2; // 热楼撩 尔?虞桧 虞击热 毡朝 苹遴? ?热.
function sq_AddFunctionName(appendage)
{
appendage.sq_AddFunctionName("proc", "proc_appendage_MagicShield")
appendage.sq_AddFunctionName("onStart", "onStart_appendage_MagicShield")
appendage.sq_AddFunctionName("onEnd", "onEnd_appendage_MagicShield")
appendage.sq_AddFunctionName("onDamageParent", "onDamageParent_appendage_MagicShield")
appendage.sq_AddFunctionName("drawAppend", "drawAppend_appendage_MagicShield")
appendage.sq_AddFunctionName("getImmuneTypeDamageRate", "getImmuneTypeDamageRate_appendage_MagicShield")
}
function sq_AddEffect(appendage)
{
}
function drawAppend_appendage_MagicShield(appendage, isOver, x, y, isFlip)
{
if (!appendage) {
return;
}
local obj = appendage.getParent();
if (!obj) {
appendage.setValid(false);
return;
}
local var = appendage.getVar();
local backAni = var.getAnimation(VAR_MAGIC_SHIELD_BACK_ANI);
local frontAni = var.getAnimation(VAR_MAGIC_SHIELD_FRONT_ANI);
if (frontAni && isOver) {
sq_AnimationProc(frontAni);
sq_drawCurrentFrame(frontAni, x, y, isFlip);
}
else if (backAni && !isOver) {
sq_AnimationProc(backAni);
sq_drawCurrentFrame(backAni, x, y, isFlip);
}
}
function getImmuneTypeDamageRate_appendage_MagicShield(appendage, damageRate, attacker)
{
if (!appendage)
return damageRate;
local parentObj = appendage.getParent();
parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if (!parentObj) {
appendage.setValid(false);
return damageRate;
}
local var = appendage.getVar();
if (!var)
return damageRate;
local type = parentObj.getThrowElement();
// 热楼撩 : 等嘐虽 橾姜 ?热 谏瞪 寞横
if (type == ENUM_ELEMENT_WATER)
return 0;
local type = parentObj.getThrowElement();
// 溯涟樯?煎 等嘐虽徽桧 亵姜脾.
local skill_level = parentObj.sq_GetSkillLevel(SKILL_MAGIC_SHIELD);
local decreaseRate = parentObj.sq_GetLevelData(SKILL_MAGIC_SHIELD, 1, skill_level); // 1. 等嘐虽 马模徽(%)
damageRate = damageRate - decreaseRate;
return damageRate;
}
function removeMagicShield(obj)
{
CNSquirrelAppendage.sq_RemoveAppendage(obj, "Character/ATMage/MagicShield/ap_MagicShield.nut");
}
// 等嘐虽卫 籀葬.
// 鼠楼撩 : 嫡朝 等嘐虽 橾姜 % 马模
// ?楼撩 : ?问卫 瞳缣啪 ?楼撩 等嘐虽
// 热楼撩 : 等嘐虽 橾姜 ?热 谏瞪 寞横
// 赀楼撩 : ?问卫 橾姜卫除 瞳 唳霜
// 檩楼撩 : ?问卫 奢问濠 菩?
function onDamageParent_appendage_MagicShield(appendage ,attacker, boundingBox, isStuck)
{
if (!appendage) {
return;
}
local parentObj = appendage.getParent();
parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if (!parentObj) {
appendage.setValid(false);
return;
}
local var = appendage.getVar();
if (!var)
return;
local type = parentObj.getThrowElement();
local circleObj = sq_AddDrawOnlyAniFromParent(parentObj, getMagicShieldAniPath(ATMAGE_MAGIC_ANI_TYPE_CIRCLE, type) ,0,-1,0);
if (circleObj) {
circleObj.setCurrentDirection(sq_GetOppositeDirection(attacker.getDirection()));
var.push_obj_vector(circleObj);
}
if (isStuck)
return;
local skill_level = sq_GetSkillLevel(parentObj, SKILL_MAGIC_SHIELD);
// ?楼撩 : ?问卫 瞳缣啪 ?楼撩 等嘐虽
if (type == ENUM_ELEMENT_FIRE)
{
local sqrChr = sq_GetCNRDObjectToSQRCharacter(parentObj);
if (sqrChr)
{
if (!(parentObj.sq_GetTeam() == attacker.getTeam()))
{
local fireDamage = sqrChr.sq_GetPowerWithPassive(SKILL_MAGIC_SHIELD, STATE_MAGIC_SHIELD, 2,-1,1.0);
local ap = sq_getNewAttackInfoPacket();
ap.power = fireDamage;
ap.element = ENUM_ELEMENT_FIRE;
ap.useWeapon = false;
ap.eType = ATTACKTYPE_MAGICAL;
if (parentObj.isMyControlObject())
sq_SendHitObjectPacketByAttackInfo(parentObj, attacker, ap);
}
}
}
// 热楼撩 : 等嘐虽 橾姜 ?热 谏瞪 寞横
if (type == ENUM_ELEMENT_WATER)
{
if (!attacker.isObjectType(0x0821))
{
if (!(parentObj.sq_GetTeam() == attacker.getTeam()))
{
local currentIceGuardCount = var.getInt(VAR_MAGIC_SHIELD_ICE_HIT_COUNT); // 热楼撩 尔? ?热
currentIceGuardCount--;
if (currentIceGuardCount <= 0)
appendage.setValid(false);
var.setInt(VAR_MAGIC_SHIELD_ICE_HIT_COUNT,currentIceGuardCount);
}
}
}
// 赀楼撩 : ?问卫 橾姜卫除 瞳 唳霜
else if (type == ENUM_ELEMENT_LIGHT)
{
if (!(parentObj.sq_GetTeam() == attacker.getTeam()))
{
local stunTime = sq_GetLevelData(parentObj, SKILL_MAGIC_SHIELD, 4, skill_level); // 4. 瞳 唳霜 卫除
local ap = sq_getNewAttackInfoPacket();
ap.hitStunTimeAttackerDamager = stunTime;
sq_SendHitObjectPacketByAttackInfo(parentObj, attacker, ap);
}
}
// 檩楼撩 : ?问卫 奢问濠 菩?
else if (type == ENUM_ELEMENT_DARK)
{
if (!(parentObj.sq_GetTeam() == attacker.getTeam()))
{
local prob = sq_GetLevelData(parentObj, SKILL_MAGIC_SHIELD, 5, skill_level)/10.0; // 5. 菩? ?睦 (0.1%)
local level = sq_GetLevelData(parentObj, SKILL_MAGIC_SHIELD, 6, skill_level); // 6. 菩? 溯涟
local time = sq_GetLevelData(parentObj, SKILL_MAGIC_SHIELD, 7, skill_level); // 7. 虽楼卫除
sq_sendSetActiveStatusPacket(attacker, parentObj, ACTIVESTATUS_SLOW, prob.tofloat(), level, false, time); // ?睦, 溯涟, 鬼薯, 卫除
}
}
}
function getMagicShieldAniPath(aniType, elementType)
{
local commonPath = "Character/Mage/Effect/Animation/ATMagicShield/";
local aniName = "00_shield_"; //ATMAGE_MAGIC_ANI_TYPE_BACK
local typeName = "none"; // ENUM_ELEMENT_NONE
if (aniType == ATMAGE_MAGIC_ANI_TYPE_FRONT)
aniName = "01_shield_";
else if (aniType == ATMAGE_MAGIC_ANI_TYPE_CIRCLE)
aniName = "02_shield_";
if (elementType == ENUM_ELEMENT_WATER)
typeName = "ice";
else if (elementType == ENUM_ELEMENT_FIRE)
typeName = "fire";
else if (elementType == ENUM_ELEMENT_DARK)
typeName = "dark";
else if (elementType == ENUM_ELEMENT_LIGHT)
typeName = "light";
return commonPath + aniName + typeName + "_dodge.ani";
}
function setMagicShieldType(appendage, obj, type)
{
local parentObj = sq_GetCNRDObjectToSQRCharacter(obj);
if (!parentObj) {
appendage.setValid(false);
return;
}
local var = appendage.getVar();
local currentAniFrameIndex = 0; // 晦襄 楼撩 桧?? 拥栖谛 褐叙 桧?? 拥栖谛 翕晦?蒂 嫔?.
local backAni = var.getAnimation(VAR_MAGIC_SHIELD_BACK_ANI);
local frontAni = var.getAnimation(VAR_MAGIC_SHIELD_FRONT_ANI);
if (backAni && frontAni) {
currentAniFrameIndex = sq_GetAnimationFrameIndex(backAni);
sq_DeleteAni(backAni);
sq_DeleteAni(frontAni);
}
backAni = sq_CreateAnimation("", getMagicShieldAniPath(ATMAGE_MAGIC_ANI_TYPE_BACK, type));
frontAni = sq_CreateAnimation("", getMagicShieldAniPath(ATMAGE_MAGIC_ANI_TYPE_FRONT, type));
sq_SetAnimationFrameIndex( backAni, currentAniFrameIndex); // ?溯歜 翕晦?
sq_SetAnimationFrameIndex( frontAni, currentAniFrameIndex);
var.setAnimation(VAR_MAGIC_SHIELD_BACK_ANI,backAni); // 渗热 荡潍 : 嫔纂 翕晦?辨
var.setAnimation(VAR_MAGIC_SHIELD_FRONT_ANI,frontAni);
}
function setMagicShieldTime(obj,time)
{
local appendage = CNSquirrelAppendage.sq_GetAppendage(obj, "Character/ATMage/MagicShield/ap_MagicShield.nut");
if (!appendage)
return;
appendage.sq_SetValidTime(time);
}
function proc_appendage_MagicShield(appendage)
{
if (!appendage) {
return;
}
local parentObj = appendage.getParent();
parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if (!parentObj) {
appendage.setValid(false);
return;
}
local var = appendage.getVar();
local objectsSize = var.get_obj_vector_size();
for (local i=0;i<objectsSize;++i)
{
local circle = var.get_obj_vector(i);
if (circle)
sq_SetCurrentPos(circle, parentObj.getXPos(), parentObj.getYPos()+1, parentObj.getZPos());
}
}
function onStart_appendage_MagicShield(appendage)
{
if (!appendage) {
return;
}
local parentObj = appendage.getParent();
parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if (!parentObj) {
appendage.setValid(false);
return;
}
//渗热 蟾晦?
local var = appendage.getVar();
local skill_level = sq_GetSkillLevel(parentObj, SKILL_MAGIC_SHIELD);
local maxIceGuardHit = sq_GetLevelData(parentObj, SKILL_MAGIC_SHIELD, 3, skill_level); // 3. 热楼撩 等嘐虽 ?热 ?热
var.setInt(VAR_MAGIC_SHIELD_ICE_HIT_COUNT, maxIceGuardHit);
// 罹晦缣怃 议葛搅 楼撩击 嫡嬴谛怃 楼撩 高击 虽姜?邀.
local elementalType = parentObj.getThrowElement();
setMagicShieldType(appendage, parentObj, elementalType);
// 卫除击 虽姜
local skill_level = sq_GetSkillLevel(parentObj,SKILL_MAGIC_SHIELD);
local time = sq_GetLevelData(parentObj, SKILL_MAGIC_SHIELD, 0, skill_level); // 0. 虽楼卫除
setMagicShieldTime(parentObj,time);
parentObj.sq_PlaySound("ESHIELD_LOOP",SKILL_MAGIC_SHIELD);
}
function onEnd_appendage_MagicShield(appendage)
{
if (!appendage) {
return;
}
local parentObj = appendage.getParent();
parentObj = sq_GetCNRDObjectToSQRCharacter(parentObj);
if (!parentObj) {
appendage.setValid(false);
return;
}
local var = appendage.getVar();
local backAni = var.getAnimation(VAR_MAGIC_SHIELD_BACK_ANI);
local frontAni = var.getAnimation(VAR_MAGIC_SHIELD_FRONT_ANI);
if (backAni && frontAni) {
sq_DeleteAni(backAni);
sq_DeleteAni(frontAni);
}
var.clear_obj_vector();
parentObj.stopSound(SKILL_MAGIC_SHIELD);
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -0,0 +1,275 @@
TIMER_MULTI_SHOT_CREATE_MAGIC_BALL <- 0; // 翱颤
TIMER_MULTI_SHOT_INPUT_COUNT <- 1; // 蟾渡 郦殓溘 ?热 ?钦.
TIMER_MULTI_SHOT_WATING_STAND <- 2; // 虞颤桧? 蝶鼹萄 梱虽暧 裁溯桧
VAR_MULTI_SHOT_CURRENT_COUNT <- 0;
ENUM_MULTI_SHOT_SUBSTATE_CHARGE <- 0; // 薄? 酝 遽绿
ENUM_MULTI_SHOT_SUBSTATE_HORIZON <- 1; // 薄? 酝 热?
ENUM_MULTI_SHOT_SUBSTATE_VERTICAL <- 2; // 薄? 酝 热霜
ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL <- 3; // 薄? 酝 渠陕摹
ENUM_MULTI_SHOT_SUBSTATE_FLOOR <- 4; // 夥款缣怃 ?颤
function checkExecutableSkill_MultiShot(obj)
{
if(!obj) return false;
local b_useskill = obj.sq_IsUseSkill(SKILL_MULTI_SHOT);
if(b_useskill) {
obj.sq_IntVectClear();
if(obj.getState() == STATE_JUMP)
obj.sq_IntVectPush(ENUM_MULTI_SHOT_SUBSTATE_CHARGE);
else
obj.sq_IntVectPush(ENUM_MULTI_SHOT_SUBSTATE_FLOOR);
obj.sq_IntVectPush(obj.getXPos());
obj.sq_IntVectPush(obj.getYPos());
obj.sq_IntVectPush(obj.getZPos());
obj.sq_AddSetStatePacket(STATE_MULTI_SHOT , STATE_PRIORITY_USER, true);
return true;
}
return false;
}
function checkCommandEnable_MultiShot(obj)
{
if(!obj)
return false;
local state = obj.sq_GetState();
if(state == STATE_ATTACK) {
// 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20]
return obj.sq_IsCommandEnable(SKILL_MULTI_SHOT); // 念瘫潍缣怃朝 ?姜蝶鉴虏 警蜗桧 陛栋?栖棻. 蒙机濠:姜霞热 [2012.04.20] obj.sq_IsCommandEnable(SKILL_MULTI_SHOT);
}
return true;
}
function sendMultiShotEnd(obj)
{
if(!obj)
return;
if(obj.isMyControlObject()) {
local subState = obj.getSkillSubState();
if(subState == ENUM_MULTI_SHOT_SUBSTATE_FLOOR)
obj.sq_AddSetStatePacket(STATE_STAND, STATE_PRIORITY_USER, false);
else {
obj.sq_IntVectClear();
obj.sq_IntVectPush(1);
obj.sq_IntVectPush(0);
obj.sq_IntVectPush(0);
obj.sq_AddSetStatePacket(STATE_JUMP, STATE_PRIORITY_USER, true);
}
}
}
function onProc_MultiShot(obj)
{
if(!obj)
return;
local var = obj.getVar();
local currentInputCount = var.getInt(VAR_MULTI_SHOT_CURRENT_COUNT);
if(obj.isMyControlObject())
{
obj.setSkillCommandEnable(SKILL_MULTI_SHOT,true);
local b_useskill = obj.sq_IsEnterSkill(SKILL_MULTI_SHOT);
sq_SetKeyxEnable(obj, E_ATTACK_COMMAND, true); //奢问郦 ?撩?
if(b_useskill != -1 || sq_IsEnterCommand(obj, E_ATTACK_COMMAND)) //蝶鉴嬴桧夔桧釭 奢问帼? 援蒂卫
obj.addRapidInput(); // 翱颤 殓溘 籀葬
}
sq_SetKeyxEnable(obj, E_JUMP_COMMAND, true); //薄?郦 ?撩?
if(sq_IsEnterCommand(obj, E_JUMP_COMMAND)) { // 薄?郦 殓溘卫 镞模
sendMultiShotEnd(obj);
}
}
function onSetState_MultiShot(obj, state, datas, isResetTimer)
{
if(!obj) return;
local subState = sq_GetVectorData(datas, 0);
obj.setSkillSubState(subState);
if(subState != ENUM_MULTI_SHOT_SUBSTATE_FLOOR) {
if(subState == ENUM_MULTI_SHOT_SUBSTATE_CHARGE) {
obj.sq_SetStaticMoveInfo(0, 0, 0, false);
obj.sq_SetStaticMoveInfo(1, 0, 0, false);
sq_SetZVelocity(obj,1,0);
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_READY);
}
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_HORIZON) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_1);
}
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_3);
}
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL) {
obj.sq_SetCurrentAnimation(CUSTOM_ANI_AT_MAGIC_CANNON_2);
}
}
else {
obj.sq_StopMove();
obj.sq_SetCurrentAnimation(CUSTOM_ANI_MULTI_SHOT);
}
//obj.sq_SetStaticSpeedInfo(SPEED_TYPE_CAST_SPEED, SPEED_TYPE_CAST_SPEED,
// SPEED_VALUE_DEFAULT, SPEED_VALUE_DEFAULT, 1.0, 1.0);
local x = sq_GetVectorData(datas, 1);
local y = sq_GetVectorData(datas, 2);
local z = sq_GetVectorData(datas, 3);
sq_SetCurrentPos(obj,x,y,z);
local var = obj.getVar();
var.setInt(VAR_MULTI_SHOT_CURRENT_COUNT,0);
if(subState == ENUM_MULTI_SHOT_SUBSTATE_FLOOR || subState == ENUM_MULTI_SHOT_SUBSTATE_CHARGE) // 嫦饵?阳 尔桧蝶
obj.sq_PlaySound("MW_TAKE");
local element = obj.getThrowElement();
addElementalChain_ATMage(obj, element);
}
function onTimeEvent_MultiShot(obj, timeEventIndex, timeEventCount)
{
if(!obj)
return false;
if(timeEventIndex == TIMER_MULTI_SHOT_CREATE_MAGIC_BALL) {
local var = obj.getVar();
local count = var.getInt(VAR_MULTI_SHOT_CURRENT_COUNT);
local level = sq_GetSkillLevel(obj, SKILL_MULTI_SHOT);
local max = sq_GetLevelData(obj, SKILL_MULTI_SHOT, 0, level);
if(count < max) {
local inputConut = obj.getRapidInputFrequency();
inputConut = inputConut.tointeger();
local inputMax = sq_GetIntData(obj, SKILL_MULTI_SHOT, 0); // 0:蟾渡 翱颤 缀紫 譆渠纂
local gapByInputMin = sq_GetIntData(obj, SKILL_MULTI_SHOT, 1); // 1:嫦饵 除问 ms (翱颤 譆模卫)
local gapByInputMax = sq_GetIntData(obj, SKILL_MULTI_SHOT, 2); // 2:嫦饵 除问 ms (翱颤 譆渠卫)
local gap = 300;
if(inputConut > inputMax)
inputConut = inputMax;
// 翱颤陛 桡戏贼 gapByInputMin 高戏煎.
// 翱颤陛 号击 热烟 gapByInputMax缣 陛梱遴 高戏煎.
local upValue = gapByInputMax - gapByInputMin;
upValue = upValue.tofloat() * (inputConut.tofloat()/inputMax.tofloat());
gap = gapByInputMin + upValue.tointeger();
obj.setTimeEvent(TIMER_MULTI_SHOT_CREATE_MAGIC_BALL, gap, 1,false);
count = count+1;
var.setInt(VAR_MULTI_SHOT_CURRENT_COUNT, count);
local currentElementalType = obj.getThrowElement();
local subState = obj.getSkillSubState();
local bonusDamage = 0;
if(currentElementalType == ENUM_ELEMENT_NONE)
{
local basicState = STATE_ATTACK;
if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL || subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) // 渠陕摹,热霜
basicState = STATE_JUMP_ATTACK;
sq_SetCurrentAttackBonusRate(sq_GetCurrentAttackInfo(obj),0);
obj.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),basicState);
bonusDamage = sq_GetCurrentAttackBonusRate(obj);
}
local addMultiShotDamage = sq_GetLevelData(obj, SKILL_MULTI_SHOT, 1, level);
if(subState == ENUM_MULTI_SHOT_SUBSTATE_FLOOR)
createMiniMagicCircle(obj, 30, 65, 0, bonusDamage + addMultiShotDamage);
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_HORIZON) // 姜贼
createMiniMagicCircle(obj, 30, 82, 0, bonusDamage + addMultiShotDamage);
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_DIAGONAL) // 渠陕摹
createMiniMagicCircle(obj, 20, 55, 1, bonusDamage + addMultiShotDamage);
else if(subState == ENUM_MULTI_SHOT_SUBSTATE_VERTICAL) // 热霜
createMiniMagicCircle(obj, 0, 45, 2, bonusDamage + addMultiShotDamage);
local typeName = "none";
switch(currentElementalType)
{
case ENUM_ELEMENT_FIRE : typeName = "fire"; break;
case ENUM_ELEMENT_WATER : typeName = "water"; break;
case ENUM_ELEMENT_DARK : typeName = "dark"; break;
case ENUM_ELEMENT_LIGHT : typeName = "light"; break;
}
local path = "Character/Mage/Effect/Animation/ATMultiShot/attack" + subState + "_" + typeName + "_dodge.ani";
sq_CreateDrawOnlyObject(obj,path, ENUM_DRAWLAYER_NORMAL, true);
local element = obj.getThrowElement();
local attackIndex = obj.getAttackIndex();
playSoundForAtmageAttack(obj, element, attackIndex);
}
else {
local endDelay = 50;
obj.setTimeEvent(TIMER_MULTI_SHOT_WATING_STAND, endDelay, 1,false);
}
}
else if(timeEventIndex == TIMER_MULTI_SHOT_INPUT_COUNT) {
}
else if(timeEventIndex == TIMER_MULTI_SHOT_WATING_STAND) {
// 谦猿 颤桧该
sendMultiShotEnd(obj);
return true;
}
return false;
}
function onEndCurrentAni_MultiShot(obj)
{
if(!obj) return;
local subState = obj.getSkillSubState();
if(subState == ENUM_MAGIC_CANNON_SUBSTATE_CHARGE) {
local isHorizon = sq_IsKeyDown(OPTION_HOTKEY_MOVE_LEFT, ENUM_SUBKEY_TYPE_ALL) || sq_IsKeyDown(OPTION_HOTKEY_MOVE_RIGHT, ENUM_SUBKEY_TYPE_ALL);
local isVertical = sq_IsKeyDown(OPTION_HOTKEY_MOVE_DOWN, ENUM_SUBKEY_TYPE_ALL);
local subState = ENUM_MAGIC_CANNON_SUBSTATE_DIAGONAL; // 渠陕摹桧 晦狱
if(isHorizon && !isVertical)
subState = ENUM_MAGIC_CANNON_SUBSTATE_HORIZON;
else if(!isHorizon && isVertical)
subState = ENUM_MAGIC_CANNON_SUBSTATE_VERTICAL;
obj.sq_IntVectClear();
obj.sq_IntVectPush(subState);
obj.sq_IntVectPush(obj.getXPos());
obj.sq_IntVectPush(obj.getYPos());
obj.sq_IntVectPush(obj.getZPos());
obj.sq_AddSetStatePacket(STATE_MULTI_SHOT , STATE_PRIORITY_USER, true);
}
}
function onKeyFrameFlag_MultiShot(obj, flagIndex)
{
if(!obj) return true;
local subState = obj.getSkillSubState();
if(flagIndex == 1) {
obj.setTimeEvent(TIMER_MULTI_SHOT_CREATE_MAGIC_BALL, 50, 1,true); // 嫦饵
obj.setTimeEvent(TIMER_MULTI_SHOT_INPUT_COUNT, 1000, 1,false); // 蟾渡 郦殓溘 ?热 ?钦.
obj.startRapidInput();
}
return true;
}

View File

@@ -0,0 +1,239 @@
function setCustomData_po_ATMagicBallLightDownMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallLightDown(obj, receiveData);
}
function setCustomData_po_ATMagicBallDarkDownMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallDarkDown(obj, receiveData);
}
function setCustomData_po_ATMagicBallWaterDownMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallWaterDown(obj, receiveData);
}
function setCustomData_po_ATMagicBallFireDownMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallFireDown(obj, receiveData);
}
function setCustomData_po_ATMagicBallNoneDownMultiShot(obj, receiveData)
{
setCustomData_po_ATMagicBallNoneDown(obj, receiveData);
}
// 葆彻掘羹 - 赀楼撩
function setCustomData_po_ATMagicBallLightDown(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 县溯诠骁 溯樯 桧塭贼, 奢问溘击 荡潍?堡棻陛 ?嫦?阳 饵辨?紫烟 ?棻.
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallLightMoveDown.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallLight", "PassiveObject/Character/Mage/Particle/ATMagicBallLightTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTailDown1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallLightTailDown2.ptl");
}
// 葆彻掘羹 - 檩楼撩
function setCustomData_po_ATMagicBallDarkDown(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallDarkMoveDown.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallDark", "PassiveObject/Character/Mage/Particle/ATMagicBallDarkTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailDown1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailDown2.ptl");
//obj.sq_AddObjectParticleCreater("Particle/ATMagicBallDarkTailDown3.ptl");
}
// 葆彻掘羹 - 热楼撩
function setCustomData_po_ATMagicBallWaterDown(obj, receiveData)
{
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallWaterMoveDown.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallWaterTailDown", "PassiveObject/Character/Mage/Particle/ATMagicBallWaterTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTailDown1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallWaterTailDown2.ptl");
}
// 葆彻掘羹 - ?楼撩
function setCustomData_po_ATMagicBallFireDown(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallFireMoveDown.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallFireTail1.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTailDown1.ptl");
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallFireTailDown2.ptl");
}
// 葆彻掘羹 - 鼠楼撩
function setCustomData_po_ATMagicBallNoneDown(obj, receiveData)
{
if(!obj)
return;
local horizonAngle = receiveData.readFloat();
local verticalAngle = receiveData.readFloat();
if (sq_BinaryGetReadSize() < receiveData.getSize())
{
// 奢问溘 掸?
local attackBonusRate = receiveData.readDword();
local attackInfo = sq_GetCurrentAttackInfo(obj);
sq_SetCurrentAttackBonusRate(attackInfo, attackBonusRate);
}
// ??赝暧 桧翕 陕紫蒂 亵瞰?
obj.sq_SetMoveParticle("Particle/ATMagicBallNoneMoveDown.ptl", horizonAngle, verticalAngle);
local particleCreater = obj.sq_var.GetparticleCreaterMap("ATMagicBallNoneTail", "PassiveObject/Character/Mage/Particle/ATMagicBallNoneTail.ptl", obj);
particleCreater.Restart(0);
obj.sq_AddObjectParticleCreater("Particle/ATMagicBallNoneTailDown.ptl");
local mage = obj.getTopCharacter();
if (!mage)
return;
// 晦狱晦 熨湿 瞳辨
mage.applyBasicAttackUp(sq_GetCurrentAttackInfo(obj),mage.getState());
sq_SetCurrentAttackInfo(obj,sq_GetCurrentAttackInfo(obj));
}
// 瞳桧 翱楼 葆彻掘(?楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallFireDownMultiShot(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
createFireExplosion(obj, damager, boundingBox, isStuck, 24281);
return 0;
}
// 瞳桧 ?颤 葆彻掘(?楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallFireDown(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
createFireExplosion(obj, damager, boundingBox, isStuck, 24214);
return 0;
}
// 瞳桧 翱楼 葆彻掘(热楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallWaterDownMultiShot(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
// ?颤 热楼撩
createWaterExplosion(obj, damager, boundingBox, isStuck, 24282);
return 0;
}
// 瞳桧 ?颤 葆彻掘(热楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallWaterDown(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
// ?颤 热楼撩
createWaterExplosion(obj, damager, boundingBox, isStuck, 24215);
return 0;
}
// 瞳桧 翱楼 葆彻掘(赀楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallLightDownMultiShot(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
// ?颤 赀楼撩
createLightExplosion(obj, damager, boundingBox, isStuck, 24283);
return 0;
}
// 瞳桧 ?颤 葆彻掘(赀楼撩)缣 蜃挤.
// ?嫦 当撩
function onAttack_po_ATMagicBallLightDown(obj, damager, boundingBox, isStuck)
{
if(!obj)
return 0;
// ?颤 赀楼撩
createLightExplosion(obj, damager, boundingBox, isStuck, 24216);
return 0;
}

View File

@@ -0,0 +1,104 @@
/////////////////////////////////////////////////////////
//
// ?卫粽 蝶鉴籀葬
// ?渡 蝶鉴暧 ?卫粽 蝶鉴暧 Appendage蛔烟/?薯 蛔蛔
//
/////////////////////////////////////////////////////////
function ProcPassiveSkill_ATMage(obj, skill_index, skill_level)
{
if (skill_index == SKILL_EXPRESSION)
{
if(skill_level > 0)
{
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false, "Character/ATMage/Expressions/ap_atmage_expression.nut", true);
print(" expression appendage:" + appendage);
if(appendage)
{
local magicalAtkChangeRate = sq_GetLevelData(obj, skill_index, SKL_LVL_COLUMN_IDX_1, skill_level);
local change_appendage = appendage.sq_getChangeStatus("expression");
if(!change_appendage) {
change_appendage = appendage.sq_AddChangeStatus("expression",obj, obj, 0, CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, magicalAtkChangeRate );
}
if(change_appendage)
{
change_appendage.clearParameter();
print(" expression attack rate:" + magicalAtkChangeRate.tofloat());
change_appendage.addParameter(CHANGE_STATUS_TYPE_MAGICAL_ATTACK, false, magicalAtkChangeRate.tofloat());
}
}
}
}
else if(skill_index == SKILL_DIEHARD)
{ // 碳饵
if(skill_level > 0)
{
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false,
"Character/ATMage/DieHard/ap_ATMage_DieHard.nut", true);
if(appendage)
{
}
}
}
else if(skill_index == SKILL_TUNDRASOUL)
{ // 矗萄塭暧 陛?
if(skill_level > 0)
{
local skill = sq_GetSkill(obj, SKILL_TUNDRASOUL);
if(!skill)
return true;
print( " passive_skill_tundrasoul");
//if(!skill.isSealFunction())
{
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, skill_index, false,
"Character/ATMage/TundraSoul/ap_ATMage_TundraSoul.nut", true);
if(appendage)
{
print(" passive object isinBattle:" + obj.isInBattle());
//if(!skill.isSealFunction())
//{
//if(sq_IsInBattle())
//{
//local range = obj.sq_GetIntData(SKILL_TUNDRASOUL , 0);// 0. 彩念 鼻鹧桧鼻缣 勘葬朝 ?娄彰嫔
//local AuraTundraSoulAppendage = appendage.sq_AddSquirrelAuraMaster("AuraTundraSoul",obj, obj, range, 18, 5, 0);
//}
//else
//{
//appendage.sq_DeleteAppendages();
//}
//}
//else
//{
//appendage.sq_DeleteAppendages();
//}
}
}
}
}
return true;
}
function onUseSkillPassiveSkill_ATMage(obj,skillIndex, skillLevel)
{
if(!obj)
return;
}

View File

@@ -0,0 +1,142 @@
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);
}

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More