// state”刻在这里,您将第一次进入。配置各种资源
function onSetState_Attack(obj, state, datas, isResetTimer)
{
if (!obj)
return;
//得到技能等级
local skillLevel = obj.sq_GetSkillLevel(SKILL_ICE_ELEMENTAL_ATTACK);
// 学会了转职
if (skillLevel > 0)
{
// 常规攻击时前进处理
//攻击速度250
obj.setAttackXVelocity(250);
//加速度-1000
obj.setAttackXAccel(-1000);
//攻击速率 400
obj.setAttackXVelocityFast(400);
//渐块-1000
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)
{ // 火属性
// 创建CNRD ani数据库 添加到ani状态层
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.光q_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度)
// 横向最大校正角(单向)
// 垂直最大校正角(单向)
// 与敌人的最大距离。是-无限制
// x轴最大射程
// 攻击框的x轴大小
// 攻击框的y轴大小
// 攻击框的y轴大小
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); // 方向 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));
}
© 版权声明
THE END
暂无评论内容