Sqr/Plugins/Fate_Select/Fate_Select.nut

1135 lines
47 KiB
Plaintext

/*
文件名:Fate_Select.nut
路径:Plugins/Fate_Select/Fate_Select.nut
创建日期:2023-06-23 14:51
文件用途:命运的抉择
*/
//HudPro按钮类
class Fate_SelectPro extends BasicsDrawTool // obj -- 按钮名称 -- X坐标 -- Y坐标 -- Ani调用路径 -- 宽度 -- 高度
{
obj = null; //Obj对象
State = 0; //按钮状态
ClickEnble = false; //点击效果
ButtonDynamic = false; //动态按钮效果
BaseFrame = null;
CustomClickEnble = false; //自定义点击效果
CustomClickAnifile = null; //自定义点击效果Ani路径
CustomButtonName = null; //自定义点击效果名称
CustomClickFrame = null; //自定义点击效果Ani编号
CustomClickx = null; //自定义点击效果X坐标
CustomClicky = null; //自定义点击效果Y坐标
RectEnble = false; //悬停效果
RectButtonName = null; //悬停名称
RectBaseAnifile = null; //悬停Ani路径
RectFrame = null; //非动态按钮的悬停调用Ani编号
Rectx = null; //悬停X坐标
Recty = null; //悬停Y坐标
ButtonName = null; //按钮名称
x = null; //X坐标
y = null; //Y坐标
BaseAnifile = null; //调用Ani路径
width = null; //可点击宽度
length = null; //可点击高度
Mobj = null; //鼠标对象
//构造函数
constructor(gObj, gButtonName, gX, gY, gAnifile, gWidth, gLength, gBaseFrame) {
obj = gObj;
ButtonName = gButtonName;
x = gX;
y = gY;
BaseAnifile = gAnifile;
width = gWidth;
length = gLength;
BaseFrame = gBaseFrame;
if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"];
}
//绘制按钮
function Show() {
if (ClickEnble) //是否开启点击效果
{
if (isLBDown() && State == 0) //按下左键并且按钮处于弹起状态
{
State = 1; //按键进入按下状态
++y;
}
if (!isLBDown() && State == 1) //按下左键并且按钮处于弹起状态
{
State = 0; //按键进入弹起状态
--y;
}
}
if (CustomClickEnble) //是否开启自定义点击效果
{
if (isLBDown()) //按下左键并且按钮处于弹起状态
{
if (!ButtonDynamic) T_DrawStayAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomClickFrame, CustomButtonName);
else T_DrawDynamicAni(obj, CustomClickAnifile, CustomClickx, CustomClicky, CustomButtonName);
}
}
if (RectEnble) //开启悬停效果时
{
if ((isInRect() && !isLBDown()) || (isInRect() && !CustomClickEnble)) //如果鼠标悬停的时候 并且没有点击的时候
{
//IMouse.SetMouseTask(44);
if (!ButtonDynamic) T_DrawStayAni(obj, RectBaseAnifile, Rectx, Recty, RectFrame, RectButtonName);
else T_DrawDynamicAni(obj, RectBaseAnifile, Rectx, Recty, RectButtonName);
}
}
if (!isInRect()) //如果鼠标没有悬停的时候
{
//IMouse.SetMouseTask(0);
if (!ButtonDynamic) T_DrawStayAni(obj, BaseAnifile, x, y, BaseFrame, ButtonName);
else T_DrawDynamicAni(obj, BaseAnifile, x, y, ButtonName);
}
}
//设置自定义点击效果
function SetCustomClickEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) {
CustomClickEnble = bool; //自定义点击效果
CustomClickAnifile = gAnifile; //自定义点击效果Ani路径
CustomButtonName = gButtonName; //自定义点击效果名称
CustomClickFrame = gFrame; //自定义点击效果Ani编号
CustomClickx = gX; //自定义点击效果X坐标
CustomClicky = gY; //自定义点击效果Y坐标
}
//设置悬停效果
function SetRectEnble(bool, gButtonName, gX, gY, gAnifile, gFrame) {
RectEnble = bool; //悬停效果
RectButtonName = gButtonName; //悬停名称
RectBaseAnifile = gAnifile; //悬停Ani路径
RectFrame = gFrame; //非动态按钮的悬停调用Ani编号
Rectx = gX; //悬停X坐标
Recty = gY; //悬停Y坐标
}
//设置动态按钮
function SetClickEnble(bool) {
ButtonDynamic = bool;
}
//设置点击效果
function SetClickEnble(bool) {
ClickEnble = bool;
}
//悬停状态
function isInRect() {
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, x, y, width, length)) return true;
else return false;
}
//左键按下状态
function isLBDown() {
if (isInRect() && Mobj.Lb == 1) return true;
else return false;
}
//左键弹起状态
function isLBUp() {
if (isInRect() && Mobj.Lb == 0) return true;
else return false;
}
//左键单击状态
function isLBActive() {
if (isInRect() && Mobj.LbEvent) return true;
else return false;
}
}
class Fate_SelectWindow extends BasicsDrawTool {
//宽度
Width = null;
//高度
Height = null;
//标题高度
TitleH = null;
//X坐标
X = null;
B_X = null;
//Y坐标
Y = null;
B_Y = null;
YMouseSw = true;
DeBugMode = false;
Mobj = null;
M_Xpos = null;
M_Ypos = null;
constructor(gX, gY, gWidth, gHeight, gTitleH) {
//宽度
Width = gWidth;
//高度
Height = gHeight;
//标题高度
TitleH = gTitleH;
//X坐标
X = gX;
//Y坐标
Y = gY;
if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"];
}
//设定鼠标逻辑
function LockMouse() {
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, Height)) {
IMouse.LockMouseClick();
YMouseSw = false;
} else {
if (YMouseSw == false && sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, 0, 0, 800, 600)) {
IMouse.ReleaseMouseClick();
YMouseSw = true;
}
}
}
//设定窗口拖动逻辑
function MoveWindow() {
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, Width, TitleH)) {
if (Mobj.Lb == 1) {
if (!M_Xpos) M_Xpos = IMouse.GetXPos(); //原始鼠标位置数据
if (!M_Ypos) M_Ypos = IMouse.GetYPos();
if (!B_X) B_X = X; //原始窗口位置
if (!B_Y) B_Y = Y;
X = B_X - (M_Xpos - IMouse.GetXPos());
Y = B_Y - (M_Ypos - IMouse.GetYPos());
} else if (Mobj.Lb == 0) {
M_Xpos = null;
M_Ypos = null;
B_X = null;
B_Y = null;
}
}
}
function Show(obj) {
if (DeBugMode) sq_DrawBox(X, Y, Width, Height, 0xffffffff);
//设定鼠标逻辑
LockMouse();
//设定窗口拖动逻辑
MoveWindow();
}
}
class Fate_Select_SmallPowerCard extends BasicsDrawTool {
X = 0;
Y = 0;
Mobj = null; //鼠标对象
TState = null;
Img = null;
Idx = null;
Str = null;
Name = null;
Type = null;
SkillIndex = null;
SkillIdx = null;
SkillValue = null;
constructor(gImg, gIdx, gStr, gName, gX, gY, gType, gSkillIndex, gSkillIdx, gSkillValue) {
this.Img = gImg;
this.Idx = gIdx;
this.Str = gStr;
this.Name = gName;
this.Type = gType;
this.SkillIndex = gSkillIndex;
this.SkillIdx = gSkillIdx;
this.SkillValue = gSkillValue;
this.X = gX;
this.Y = gY;
if (getroottable().rawin("MouseObject")) Mobj = getroottable()["MouseObject"];
TState = 0;
}
function SetPower(obj) {
switch (Type) {
case 0:
AddIntData(obj, SkillIndex, SkillIdx, SkillValue);
break;
case 1:
AddLevelData(obj, SkillIndex, SkillIdx, SkillValue);
break;
case 2:
AddSkillCoolTime(obj, SkillIndex, SkillValue);
break;
case 3:
RecoveryHPMP(obj);
break;
case 4:
AddBaseAb(obj);
break;
}
}
function AddBaseAb(obj) {
local RootTab = getroottable();
RootTab["Fate_SelectCObj"].BasePwoer[SkillIdx] += SkillValue;
RootTab["Fate_SelectCObj"].AddBaseAb(obj);
}
function RecoveryHPMP(obj) {
switch (SkillIdx) {
case 0:
obj.setHp(obj.getHp() + (obj.getHpMax() * (SkillValue.tofloat() / 100.0)).tointeger(), null, true);
break;
case 1:
obj.sendSetMpPacket(obj.getMp() + (obj.getMpMax() * (SkillValue.tofloat() / 100.0)).tointeger());
break;
}
}
function Show(obj) {
local RootTab = getroottable();
if (isInRect()) {
T_DrawStayAni(obj, "common/dungeon/fate_select/powerframe.ani", X - 21, Y - 26, 0, "powerselect.ani7");
}
//绘制基础框
L_sq_DrawImg("interface2/event/dfo/2021/0323/decisionsuntodestiny/ingameui.img", 6, X - 21, Y - 26);
//绘制槽图标
L_sq_DrawImg(Img.tolower(), Idx, X + 57, Y + 49);
//绘制卡片名字
L_sq_DrawCode_Ex(Name, X + 64 - (Name.len() * 2), Y + 106, sq_RGBA(247, 214, 90, 250), 2, 1);
//绘制当卡牌描述
L_sq_DrawCode_Ex(Str, X + 20, Y + 140, sq_RGBA(150, 255, 30, 250), 0, 1);
if (TState == 1) {
local ani = T_DrawDynamicAni(obj, "common/dungeon/fate_select/powerselectendframe.ani", X - 41, Y - 26, "fatepowerselectendframe");
if (sq_IsEnd(ani)) {
sq_Rewind(ani);
TState = 2;
RootTab["Fate_SelectCObj"].SelectTiming = 3;
}
}
}
//高级绘制文字(带换行)
function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc) {
local strarr = [];
if (str.find("\n") == null) L_sq_DrawCode(str, x, y, rgba, mb, jc);
else {
local Bpos = 0;
while (true) {
local Npos = str.find("\n", Bpos);
if (!Npos) {
local strbuff = str.slice(Bpos, str.len());
strarr.append(strbuff);
break;
}
local strbuff = str.slice(Bpos, Npos);
strarr.append(strbuff);
Bpos = Npos + 1;
}
for (local z = 0; z < strarr.len(); z++) {
L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc);
}
}
}
//悬停状态
function isInRect() {
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 5, 5, X, Y, 143, 299)) return true;
else return false;
}
//左键按下状态
function isLBDown() {
if (isInRect() && Mobj.Lb == 1) return true;
else return false;
}
//左键弹起状态
function isLBUp() {
if (isInRect() && Mobj.Lb == 0) return true;
else return false;
}
//左键单击状态
function isLBActive() {
if (isInRect() && Mobj.LbEvent) {
return true;
} else return false;
}
}
class Fate_SelectC extends BasicsDrawTool {
WindowObj = null; //窗口对象
MainState = false; //主状态
X = 0;
Y = 0;
//退出副本执行操作判断
ExitIdx = false;
//副本背景
DgnBackground = null;
//波数时间配置
LevelTimeInfo = null;
//BOSS的ID
BOSSId = null;
//当前波数
NowLevel = 0;
//BOSS战
BossFight = false;
//杀死BOSS Flag
BossFightKillFlag = false;
//召唤背景
BackGroundSummon = false;
//时间容器对象
TimeObj = null;
//绘制对象时间
DrawTime = null;
//杀怪可获得能力数量
KillMonsterRewardCount = 15;
//杀怪数量
KillMonsterCount = 0;
//四维
BasePwoer = null;
PowerSelect = null;
SelectTiming = 1;
//获取基础配置包回调
function GetBaseInfoCallBack(Chunk) {
local Buffer = Json_STL("CheckFate_SelectCObjGetBaseInfoCallBackBuffer");
Buffer.Parse(Chunk, 0, false);
local RootTab = getroottable();
if (RootTab.rawin("Fate_SelectCObj")) {
local Tobj = RootTab["Fate_SelectCObj"];
Tobj.LevelTimeInfo = null;
Tobj.BOSSId = null;
Tobj.LevelTimeInfo = [];
Tobj.BOSSId = {};
for (local i = 0; i < 50; i++) {
local TimeBuf = Buffer.Get("Time->" + i);
Tobj.LevelTimeInfo.append(TimeBuf * 1000);
local BossId = Buffer.Get("BOSSId->" + i);
Tobj.BOSSId.rawset(BossId, true);
}
Tobj.KillMonsterRewardCount = Buffer.Get("KillMonsterRewardCount");
}
}
//获取基础配置包
function GetBaseInfo() {
local T = {
op = 20023001,
}
SendPack(T);
}
//进入副本标识包
function StartDgnIdxPack() {
local T = {
op = 20023009,
}
SendPack(T);
}
//退出副本标识包
function EndDgnIdxPack() {
local T = {
op = 20023011,
}
SendPack(T);
}
//获取小技能卡牌
function GetSmallPwoerCard(Job, JobGrow) {
local T = {
op = 20023003,
job = Job,
jobGrow = JobGrow,
}
SendPack(T);
}
//选择小技能卡牌
function SelectSmallPwoerCard(Job, JobGrow) {
local T = {
op = 20023005,
job = Job,
jobGrow = JobGrow,
}
SendPack(T);
}
//获取小技能卡牌回调
function GetSmallPwoerCardCallBack(Chunk) {
local Buffer = Json_STL("CheckFate_SelectCObjGetBaseInfoCallBackBuffer");
Buffer.Parse(Chunk, 0, false);
local RootTab = getroottable();
if (RootTab.rawin("Fate_SelectCObj")) {
local Tobj = RootTab["Fate_SelectCObj"];
for (local i = 0; i < 5; i++) {
local Img = Buffer.Get("SkillPack->" + i + "->Img");
local Idx = Buffer.Get("SkillPack->" + i + "->Idx");
local Str = Buffer.Get("SkillPack->" + i + "->Str");
local Name = Buffer.Get("SkillPack->" + i + "->Name");
local Type = Buffer.Get("SkillPack->" + i + "->Type");
local SkillIndex = Buffer.Get("SkillPack->" + i + "->SkillIndex");
local SkillIdx = Buffer.Get("SkillPack->" + i + "->SkillIdx");
local SkillValue = Buffer.Get("SkillPack->" + i + "->SkillValue");
Tobj.PowerSelect[i] = Fate_Select_SmallPowerCard(Img, Idx, Str, Name, 27 + (i * 150), 160, Type, SkillIndex, SkillIdx, SkillValue);
}
}
}
constructor() {
//读取基础配置
GetBaseInfo();
Pack_Control.rawset(20023002, GetBaseInfoCallBack);
Pack_Control.rawset(20023004, GetSmallPwoerCardCallBack);
//初始化能力包
PowerSelect = [0, 0, 0, 0, 0];
BasePwoer = [0, 0, 0, 0];
/*测试类*/
/***********************************************
**************** ****************
************************************************/
// for (local w = 0; w < 5; w++) {
// PowerSelect[w] = Fate_Select_SmallPowerCard("Character/Swordman/Effect/SkillIcon.img", 8, "测试功能描述", "拔刀斩(范围)", 27 + (w * 150), 160, 0, 0, 0, 0);
// }
// LevelTimeInfo = [];
// for (local i = 0; i < 50; i++) {
// LevelTimeInfo.append(5000);
// }
// BOSSId = {};
// BOSSId.rawset(59028, true);
// BOSSId.rawset(62681, true);
// BOSSId.rawset(64020, true);
// BOSSId.rawset(62721, true);
// BOSSId.rawset(62780, true);
for (local i = 0; i < 50; i++) {
local TimeObj = TimeSTL("FateTimeObj" + i, 1100);
TimeObj.Delete();
}
}
function AddBaseAb(obj) {
if (CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/ap_fateselect.nut")) {
CNSquirrelAppendage.sq_RemoveAppendage(obj, "appendage/ap_fateselect.nut");
}
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/ap_fateselect.nut", true);
CNSquirrelAppendage.sq_Append(appendage, obj, obj);
local change_appendage = appendage.sq_getChangeStatus("fateselectbasepower");
if (!change_appendage) {
change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0,
CHANGE_STATUS_TYPE_COOLTIME_DECLINE,
false, 0, 254);
}
if (change_appendage) {
change_appendage.clearParameter();
change_appendage.addParameter(0, false, BasePwoer[0].tofloat()); //力量
change_appendage.addParameter(3, false, BasePwoer[2].tofloat()); //体力
change_appendage.addParameter(2, false, BasePwoer[3].tofloat()); //精神
change_appendage.addParameter(1, false, BasePwoer[1].tofloat()); //智力
}
}
//绘制能力卡牌
function DrawPwoerCard(obj) {
//当卡牌包存在时绘制
if (PowerSelect[0] != 0) {
//世界静止
//PauseWorld(obj, 2, 100);
//绘制标签界面
T_DrawStayAni(obj, "common/dungeon/fate_select/powerselectmain.ani", 88, 40, 0, "fatepowerselectmain");
//光
T_DrawStayAni(obj, "common/dungeon/fate_select/goldselectframe.ani", 0, 0, 1, "powerselectmainlight");
//绘制能力选择卡牌
local RootTab = getroottable();
for (local i = 0; i < 5; i++) {
PowerSelect[i].Show(obj);
//常驻检测
if ((PowerSelect[i].isLBActive() || KeyPressNB.isKeyPress((32 + i), "Fate_SelectQu" + (32 + i))) && SelectTiming == 1) {
SelectTiming = 2;
PowerSelect[i].TState = 1;
PowerSelect[i].SetPower(obj);
}
}
}
//当能力选择后销毁卡牌包
if (SelectTiming == 3) {
PowerSelect = null;
PowerSelect = [0, 0, 0, 0, 0];
SelectTiming = 1;
//选择小技能卡牌
SelectSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj));
}
}
//绘制副本背景
function DrawDgnBackground(obj) {
if (DgnBackground == null) {
CreatFateSelectPassObject(obj, 0);
DgnBackground = 0;
//进入副本标识包
StartDgnIdxPack();
//进入副本重置Exit标识
ExitIdx = true;
//第一次获取小技能能力
GetSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj));
}
}
//绘制UI
function DrawFateUI(obj) {
//固定绘制右上角MainUI
{
//绘制UI
T_DrawStayAni(obj, "common/dungeon/fate_select/rightmain.ani", 537, 0, 0, "fate_selectRIGHTmain");
//绘制波数
DrawCustomNum(obj, 759 + ((NowLevel.tostring().len() - 1) * 6), 20, NowLevel, "common/dungeon/fate_select/num/", 1, -16);
//判断是否BOSS战
if (NowLevel != 0 && (NowLevel % 10) == 9) {
T_DrawStayAni(obj, "common/dungeon/fate_select/new/boss.ani", 539, 2, 0, "fate_selectBoss战");
} else {
if (!DrawTime) return;
local TimeStr = (DrawTime / 10).tostring();
if (TimeStr.len() == 3) TimeStr = "0" + TimeStr;
if (TimeStr.len() == 2) TimeStr = "00" + TimeStr;
if (TimeStr.len() == 1) TimeStr = "000" + TimeStr;
//绘制时间
fateDrawCustomTimeNum(obj, 759 - 48, 22, TimeStr, "common/dungeon/fate_select/num2/", 12, -16);
}
//绘制杀怪数量
DrawCustomNum(obj, 759 - 15, 102, (KillMonsterRewardCount - KillMonsterCount), "common/dungeon/fate_select/num2/", -5, -16);
//获取能力发包并且减少一次杀敌数
if (KillMonsterCount >= KillMonsterRewardCount) {
KillMonsterCount -= KillMonsterRewardCount;
//获取小技能能力
GetSmallPwoerCard(sq_getJob(obj), sq_getGrowType(obj));
}
}
}
//同步时间
function SyncTime(obj) {
if (NowLevel < 50) {
local Time = LevelTimeInfo[NowLevel];
if (TimeObj) {
local Nt = TimeObj.Get();
//时间到 切波数
if (Nt == Time) {
TimeObj.Delete();
TimeObj = null;
NowLevel++;
} else {
DrawTime = Time - Nt;
}
} else {
//更换地图
if ((NowLevel % 10) == 9 && NowLevel != 0) {
//开始遭遇BOSS战
if (!BossFight) {
//出怪
sq_SendCreatePassiveObjectPacketPos(obj, 101400 + NowLevel, 0, 0, 0, 0);
BossFight = true;
}
//如果杀死BOSS
if (BossFightKillFlag) {
local ani = T_DrawDynamicAni(obj, "common/dungeon/fate_select/cg/124.ani", 400, 300, "命运的抉择过场cg");
if (sq_GetAnimationFrameIndex(ani) >= 16 && BackGroundSummon == false) //当发光ani黑时
{
DestroyFateSelectPassObject(obj, (NowLevel / 9) - 1); //销毁上一个图
CreatFateSelectPassObject(obj, (NowLevel / 9)); //创建下一个图
BackGroundSummon = true;
local T = {
op = 20023013,
BOSSId = NowLevel,
}
SendPack(T);
}
if (sq_IsEnd(ani)) {
NowLevel++;
BossFightKillFlag = false;
BackGroundSummon = false;
BossFight = false;
sq_Rewind(ani);
}
}
} else {
TimeObj = TimeSTL("FateTimeObj" + NowLevel, Time);
TimeObj.Start();
local chrobj = sq_CreateCharacter(1, 4);
//出怪
sq_SendCreatePassiveObjectPacketPos(chrobj, 101400 + NowLevel, 0, 0, 0, 0);
}
}
}
if (NowLevel == 50) {
L_sq_GoTown();
}
}
//遍历怪物死亡
function SyncMonsterDie(obj) {
local objectManager = obj.getObjectManager();
local CollisionObjectNumber = objectManager.getCollisionObjectNumber();
for (local i = 0; i < CollisionObjectNumber; i += 1) {
local object = objectManager.getCollisionObject(i);
if (object && object.isObjectType(OBJECTTYPE_ACTIVE) && obj.isEnemy(object) && object.isInDamagableState(obj) && object.getTeam() != 0) {
local activeObj = sq_GetCNRDObjectToActiveObject(object);
local MonDieSoundIndex = activeObj.getCollisionObjectIndex();
local UUID = sq_GetUniqueId(activeObj);
if (activeObj.isDead()) {
if (!getroottable().rawin("fate_select" + UUID)) {
if (BOSSId.rawin(MonDieSoundIndex)) {
KillMonsterCount += 15;
//BOSS击杀标识
BossFightKillFlag = true;
}
KillMonsterCount++;
getroottable().rawset("fate_select" + UUID, true);
}
}
}
}
}
//副本销毁程序
function DgnExit(obj) {
DgnBackground = null;
KillMonsterCount = 0;
NowLevel = 0;
//退出副本标识包
EndDgnIdxPack();
//销毁技能提升
local RootTab = getroottable();
if (RootTab.rawin("LenheartSkillManager")) {
RootTab.rawdelete("LenheartSkillManager");
}
ExitIdx = false;
BossFight = false;
//杀死BOSS Flag
BossFightKillFlag = false;
//召唤背景
BackGroundSummon = false;
//时间容器对象
TimeObj = null;
//绘制对象时间
DrawTime = null;
SelectTiming = 1;
BasePwoer = [0, 0, 0, 0];
}
//副本逻辑程序
function DgnProc(obj) {
local stage = sq_GetGlobaludpModuleStage();
local dungeon = sq_GetDungeonByStage(stage);
local dungeonIndex = sq_GetDuegonIndex(dungeon);
if (dungeonIndex != 23048) {
if (ExitIdx == true) DgnExit(obj);
return;
} else {
if (sq_GetCurrentModuleType() == 3) {
//绘制副本背景
DrawDgnBackground(obj);
//绘制UI
DrawFateUI(obj);
//同步时间
SyncTime(obj);
//遍历怪物死亡
SyncMonsterDie(obj);
//绘制能力卡牌
DrawPwoerCard(obj);
}
}
}
//逻辑入口
function Proc(obj) {
if (KeyPressNB.isKeyPress(48, "Fate_SelectCloseKey")) {
MainState = false;
}
DgnProc(obj);
}
function DrawCustomNum(obj, xPos, yPos, num, str, Interval, OneDeviation) {
local len = (num.tostring()).len();
for (local i = 0; i < len; i++) {
local one = 0;
local DrawNum = (num.tostring()).slice(i, i + 1);
if (i != (len - 1)) one += OneDeviation * abs(i - (len - 1));
local ani = obj.getVar().GetAnimationMap(DrawNum + str, str + DrawNum + ".ani");
sq_AnimationProc(ani);
sq_drawCurrentFrame(ani, xPos + (i * Interval) + one, yPos, true);
}
}
function fateDrawCustomTimeNum(obj, xPos, yPos, num, str, Interval, OneDeviation) {
for (local i = 0; i < 4; i++) {
local Idx = num.slice(0 + i, 1 + i);
local ani = obj.getVar().GetAnimationMap(Idx + str, str + Idx + ".ani");
sq_AnimationProc(ani);
sq_drawCurrentFrame(ani, xPos + ((i - 4) * 14) + ((i / 2) * 18) - 10, yPos, true);
}
T_DrawStayAni(obj, "common/dungeon/fate_select/dian.ani", xPos - 146, yPos - 34, 0, "fatedian");
}
function PauseWorld(obj, Type, Time) {
local objectManager = obj.getObjectManager();
for (local i = 0; i < objectManager.getCollisionObjectNumber(); i += 1) {
local object = objectManager.getCollisionObject(i);
sq_SetPause(object, Type, Time);
}
}
function CreatFateSelectPassObject(obj, sc) {
switch (sc) {
case 0:
sq_SendCreatePassiveObjectPacketPos(obj, 102500, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102501, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102502, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102503, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102504, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102505, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 1012, 0, 391, 340, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 1013, 0, 538, 340, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1234, 193, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1004, 215, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 619, 255, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 607, 583, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 588, 591, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 583, 323, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 280, 202, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 261, 0, 1072, 298, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 479, 335, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 356, 360, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 474, 363, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 614, 341, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 565, 344, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 431, 346, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 322, 366, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 494, 374, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 540, 370, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 292, 0, 1, 228, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 292, 0, 6, 435, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 1012, 0, 1031, 468, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 990, 462, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3004, 0, 1067, 453, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1009, 444, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1133, 481, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 943, 482, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1047, 506, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 221, 0, 157, 575, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 282, 457, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 160, 427, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 263, 390, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 375, 427, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 863, 434, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1025, 447, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 905, 492, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 410, 315, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 72, 422, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 103, 584, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 160, 526, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 657, 259, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 571, 597, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 608, 597, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1060, 538, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1113, 444, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1092, 543, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 1012, 543, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 148, 512, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 228, 549, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 65, 397, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 175, 439, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 3000, 0, 280, 396, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 652, 190, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 217, 164, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 345, 202, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 248, 0, 1014, 199, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 247, 0, 1023, 206, 0);
break;
case 1:
sq_SendCreatePassiveObjectPacketPos(obj, 102515, 0, 0, -40, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102510, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102511, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102513, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102514, 0, 0, 0, 0);
/*
sq_SendCreatePassiveObjectPacketPos(obj, 868, 0, 591, 835, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 502, 601, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 562, 601, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 622, 601, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 802, 601, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 862, 601, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 922, 601, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1102, 601, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1162, 601, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006950, 0, 1222, 601, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 869, 0, 1020, 705, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 869, 0, 713, 719, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1540, 240, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1560, 394, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 1541, 551, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, -180, 293, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, -7, 360, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109006947, 0, 26, 508, 0);
*/
break;
case 2:
sq_SendCreatePassiveObjectPacketPos(obj, 102525, 0, 0, -40, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102520, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102521, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102522, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102523, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102524, 0, 0, 80, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102526, 0, 0, 80, 0);
/*
sq_SendCreatePassiveObjectPacketPos(obj, 10658, 0, 1699, 146, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10681, 0, 7, 284, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 15096, 0, 1582, 526, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10681, 0, 7, 391, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 15095, 0, 1620, 477, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 15095, 0, 1619, 419, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10671, 0, 7, 186, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10672, 0, -39, 511, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 1540, 351, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10671, 0, 189, 573, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 274, 691, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10675, 0, 222, 659, 0);
*/
break;
case 3:
sq_SendCreatePassiveObjectPacketPos(obj, 102535, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102530, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102531, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102534, 0, 0, 120, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102536, 0, 0, 120, 0);
/*
local YP = 120;
sq_SendCreatePassiveObjectPacketPos(obj, 8959, 0, 266, 151 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, -46, 582 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, 3, 130 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10232, 0, -99, 485 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1072, 153 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1039, 144 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 483, 572 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 503, 592 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 411, 568 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 777, 136 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 673, 137 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 1574, 265 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1526, 195 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1553, 533 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1538, 516 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 1440, 160 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10150, 0, 393, 141 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 139, 154 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 543, 598 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 464, 587 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1511, 211 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1500, 186 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 1528, 546 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10152, 0, 985, 137 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 860, 155 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 1323, 150 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 491, 138 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 538, 153 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 607, 148 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 638, 160 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1555, 312 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 405, 596 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1126, 157 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8960, 0, 1163, 146 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10151, 0, 1239, 126 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109002769, 0, 1354, 153 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 109002769, 0, 1543, 298 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8963, 0, 907, 138 + YP, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 8453, 0, 1573, 505 + YP, 0);
*/
break;
case 4:
sq_SendCreatePassiveObjectPacketPos(obj, 102545, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102540, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102541, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102542, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102543, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 102546, 0, 0, 120, 0);
/*
sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 0, 260, 100);
sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 640, 260, 100);
sq_SendCreatePassiveObjectPacketPos(obj, 9390, 0, 1280, 260, 100);
sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 0, 0, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 640, 23, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 1280, 24, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 0, 200, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 640, 200, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 9392, 0, 1280, 200, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 291, 165, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 10, 182, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 780, 159, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 1244, 601, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10247, 0, 681, 170, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 918, 169, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10245, 0, 648, 603, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10246, 0, 1066, 165, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10250, 0, 577, 263, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10250, 0, 1251, 264, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 544, 323, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 331, 619, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 1269, 352, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10248, 0, 441, 608, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 213, 385, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10251, 0, 1250, 546, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10247, 0, 953, 615, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 894, 599, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10248, 0, 1155, 164, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10243, 0, 1528, 141, 0);
sq_SendCreatePassiveObjectPacketPos(obj, 10244, 0, 1513, 157, 0);
*/
break;
}
}
//销毁特效
function DestroyPassiveObject(obj, Index) {
local ballCount = obj.getMyPassiveObjectCount(Index);
for (local i = 0; i < ballCount; ++i) {
local magicBall = obj.getMyPassiveObject(Index, i)
if (!magicBall)
continue;
sq_SendDestroyPacketPassiveObject(magicBall);
}
}
function DestroyFateSelectPassObject(obj, sc) {
switch (sc) {
case 0:
DestroyPassiveObject(obj, 102500);
DestroyPassiveObject(obj, 102501);
DestroyPassiveObject(obj, 102502);
DestroyPassiveObject(obj, 102503);
DestroyPassiveObject(obj, 102504);
DestroyPassiveObject(obj, 102505);
DestroyPassiveObject(obj, 1012);
DestroyPassiveObject(obj, 1013);
DestroyPassiveObject(obj, 261);
DestroyPassiveObject(obj, 248);
DestroyPassiveObject(obj, 247);
DestroyPassiveObject(obj, 3000);
DestroyPassiveObject(obj, 3004);
DestroyPassiveObject(obj, 292);
DestroyPassiveObject(obj, 221);
break;
case 1:
DestroyPassiveObject(obj, 102510);
DestroyPassiveObject(obj, 102511);
DestroyPassiveObject(obj, 102512);
DestroyPassiveObject(obj, 102513);
DestroyPassiveObject(obj, 102514);
DestroyPassiveObject(obj, 102515);
DestroyPassiveObject(obj, 868);
DestroyPassiveObject(obj, 869);
DestroyPassiveObject(obj, 109006950);
DestroyPassiveObject(obj, 109006947);
break;
case 2:
DestroyPassiveObject(obj, 102520);
DestroyPassiveObject(obj, 102521);
DestroyPassiveObject(obj, 102522);
DestroyPassiveObject(obj, 102523);
DestroyPassiveObject(obj, 102524);
DestroyPassiveObject(obj, 102525);
DestroyPassiveObject(obj, 102526);
DestroyPassiveObject(obj, 10658);
DestroyPassiveObject(obj, 10681);
DestroyPassiveObject(obj, 15096);
DestroyPassiveObject(obj, 10672);
DestroyPassiveObject(obj, 15095);
DestroyPassiveObject(obj, 10671);
DestroyPassiveObject(obj, 10675);
break;
case 3:
DestroyPassiveObject(obj, 102530);
DestroyPassiveObject(obj, 102531);
DestroyPassiveObject(obj, 102534);
DestroyPassiveObject(obj, 102535);
DestroyPassiveObject(obj, 102536);
DestroyPassiveObject(obj, 8959);
DestroyPassiveObject(obj, 10232);
DestroyPassiveObject(obj, 8963);
DestroyPassiveObject(obj, 10151);
DestroyPassiveObject(obj, 10150);
DestroyPassiveObject(obj, 10152);
DestroyPassiveObject(obj, 8453);
DestroyPassiveObject(obj, 8960);
DestroyPassiveObject(obj, 109002769);
break;
}
}
}
function Fate_Select(obj) {
local RootTab = getroottable();
if (!RootTab.rawin("Fate_SelectCObj")) {
local Cobj = Fate_SelectC();
RootTab.rawset("Fate_SelectCObj", Cobj);
} else {
RootTab["Fate_SelectCObj"].Proc(obj);
}
}