11111
|
|
@ -0,0 +1,5 @@
|
|||
# This directory is a Syncthing folder marker.
|
||||
# Do not delete.
|
||||
|
||||
folderID: ss9v4-63p4r
|
||||
created: 2025-05-01T05:49:43+08:00
|
||||
|
|
@ -2,8 +2,9 @@
|
|||
文件名:DrawHudMain.nut
|
||||
路径:Base/CallBack/DrawHudMain.nut
|
||||
创建日期:2024-08-29 09:39
|
||||
文件用途:血槽绘制入口(图层在血槽层)
|
||||
文件用途:
|
||||
*/
|
||||
//血槽背景
|
||||
function L_HUD_BloodBackground() {
|
||||
local RootTab = getroottable();
|
||||
local obj = sq_getMyCharacter();
|
||||
|
|
@ -21,6 +22,7 @@ function L_HUD_BloodBackground() {
|
|||
|
||||
getroottable().Camera_Pos <- {};
|
||||
|
||||
//城镇摄像机
|
||||
function L_Sync_Camera_Pos(Camera_Object) {
|
||||
// print(Camera_Object);
|
||||
// print(Camera_Object);
|
||||
|
|
@ -31,5 +33,5 @@ function L_Sync_Camera_Pos(Camera_Object) {
|
|||
|
||||
function Sq_DrawChannel() {
|
||||
// L_sq_DrawImg("interface2/cs_shop/cs_packageevent/2021_summer/hearoursummer_calendarui.img", 0, 0, 0);
|
||||
print(Clock());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,17 +9,18 @@ function L_drawMainCustomUI_All() {
|
|||
local obj = sq_getMyCharacter();
|
||||
if (!obj) return;
|
||||
|
||||
local RootTab = getroottable();
|
||||
|
||||
//获取与上一帧的dt
|
||||
if (!(getroottable().rawin("Rindro_DurationFlag"))) {
|
||||
if (!(RootTab.rawin("Rindro_DurationFlag"))) {
|
||||
Rindro_DurationFlag <- L_Getmicroseconds();
|
||||
Rindro_Duration <- 0;
|
||||
} else {
|
||||
local NowM = L_Getmicroseconds();
|
||||
Rindro_Duration = NowM - Rindro_DurationFlag;
|
||||
Rindro_Duration = (NowM - Rindro_DurationFlag) / 2;
|
||||
Rindro_DurationFlag = NowM;
|
||||
}
|
||||
|
||||
local RootTab = getroottable();
|
||||
//下帧执行任务事件
|
||||
if (RootTab.rawin("LenheartNextFrameFuncTab")) {
|
||||
foreach(Func in RootTab["LenheartNextFrameFuncTab"]) {
|
||||
|
|
@ -31,158 +32,119 @@ function L_drawMainCustomUI_All() {
|
|||
}
|
||||
|
||||
//重载逻辑
|
||||
try {
|
||||
local Func = loadfile("Yosin_Game_Reloading.Sign", true);
|
||||
Func();
|
||||
L_Cmd("cmd.exe /c del Yosin_Game_Reloading.Sign");
|
||||
//清空窗口
|
||||
L_Windows_List = [];
|
||||
//清空所有注册包
|
||||
Pack_Control = {};
|
||||
|
||||
PushDamageFontDataFuncTab <- {};
|
||||
PushDamageFontFuncTab <- {};
|
||||
|
||||
//清空活动图标窗口
|
||||
getroottable().rawdelete("EventList_Obj");
|
||||
//清空插件初始化状态
|
||||
getroottable().rawdelete("LenheartPluginsInitFlag");
|
||||
|
||||
getroottable().rawdelete("RINDRO_GET_ITEM_FLAG");
|
||||
//特殊清空
|
||||
getroottable().rawdelete("OnlineAnnouncement_Obj");
|
||||
//血槽UI
|
||||
getroottable().rawdelete("HudUi_Obj");
|
||||
//交互UI
|
||||
getroottable().rawdelete("L_Each_Obj");
|
||||
|
||||
//战令
|
||||
getroottable().rawdelete("AradPass_Obj");
|
||||
//战斗力系统
|
||||
getroottable().rawdelete("CombatRankC_Obj");
|
||||
//刷图签到
|
||||
getroottable().rawdelete("FightSign_Obj");
|
||||
//希曼音乐会
|
||||
getroottable().rawdelete("MidsummerParty_Obj");
|
||||
//在线签到
|
||||
getroottable().rawdelete("OnilneSign_Obj");
|
||||
//全服竞拍
|
||||
getroottable().rawdelete("ServerAuction_Obj");
|
||||
//秒伤统计
|
||||
getroottable().rawdelete("DamagePerSecond_Obj");
|
||||
//皮肤仓库
|
||||
getroottable().rawdelete("SkinHub_Obj");
|
||||
|
||||
} catch (exception) {
|
||||
if (exception != "cannot open the file")
|
||||
print("Reloading Script Fail !!! \n" + exception);
|
||||
}
|
||||
|
||||
//
|
||||
local RootTab = getroottable();
|
||||
|
||||
|
||||
//尝试调用百级UI
|
||||
// if (getroottable().rawin("Lenheart_100UI_Event_BackGround")) Lenheart_100UI_Event_BackGround();
|
||||
// if (getroottable().rawin("Lenheart_100UI")) Lenheart_100UI(obj);
|
||||
Sq_ReloadLogic();
|
||||
|
||||
//初始化活动图标
|
||||
Lenheart_EventList_Fun(obj);
|
||||
|
||||
//加载注册Base函数窗口
|
||||
if (RootTab.rawin("LenheartBaseFuncTab")) {
|
||||
if (RINDRO_INIT_FLAG) {
|
||||
local LenheartFunc = RootTab["LenheartBaseFuncTab"];
|
||||
foreach(Func in LenheartFunc) {
|
||||
Func(obj);
|
||||
}
|
||||
local LenheartFunc = RootTab["LenheartBaseFuncTab"];
|
||||
foreach(Func in LenheartFunc) {
|
||||
Func(obj);
|
||||
}
|
||||
}
|
||||
|
||||
//加载注册Ex函数窗口
|
||||
if (RootTab.rawin("LenheartFuncTab")) {
|
||||
if (RINDRO_INIT_FLAG) {
|
||||
local LenheartFunc = RootTab["LenheartFuncTab"];
|
||||
foreach(Func in LenheartFunc) {
|
||||
Func(obj);
|
||||
}
|
||||
local LenheartFunc = RootTab["LenheartFuncTab"];
|
||||
foreach(Func in LenheartFunc) {
|
||||
Func(obj);
|
||||
}
|
||||
}
|
||||
|
||||
//所有插件初始化完毕
|
||||
if (!getroottable().rawin("LenheartPluginsInitFlag")) {
|
||||
if (RINDRO_INIT_FLAG) {
|
||||
local T = {
|
||||
op = 25001021,
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
getroottable().LenheartPluginsInitFlag <- true;
|
||||
local T = {
|
||||
op = 25001021,
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
getroottable().LenheartPluginsInitFlag <- true;
|
||||
}
|
||||
|
||||
//初始化Item信息
|
||||
if (!getroottable().rawin("RINDRO_GET_ITEM_FLAG")) {
|
||||
RINDRO_CONFIG <- Rindro_GetLocalConfig();
|
||||
getroottable().RINDRO_GET_ITEM_FLAG <- true;
|
||||
Rindro_BaseToolClass.SendPackEx({
|
||||
op = 20069005,
|
||||
md5 = Rindro_GetMd5()
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
// if (Clock() - getroottable().Lsnzz >= 50) {
|
||||
// getroottable().Lsnzz = Clock();
|
||||
// local T = {
|
||||
// op = 25001021,
|
||||
// }
|
||||
// Rindro_BaseToolClass.SendPackEx(T);
|
||||
// }
|
||||
|
||||
// if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/curreny.nut")) {
|
||||
// local appendage1 = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, 174, false, "appendage/curreny.nut", true);
|
||||
// }
|
||||
|
||||
// print(format("%02X", L_sq_RA(0x1B474D4)));
|
||||
// print(R_Mouse.IsLock());
|
||||
// print(format("%02X", L_sq_RA(0x3431de00 + 0x14)));
|
||||
// L_sq_WA(0x3431de00 + 0x14,200);
|
||||
// print(format("%02X", L_sq_RA(0x1AE94C4, "0x590+0x44+")));
|
||||
//外界主界面
|
||||
// if(L_sq_RA(0x1B474D4) == 0x3C7FB100)print(true);
|
||||
// else print(false);
|
||||
// print(CheckInOldW());
|
||||
// GetTownBaseBackgroundAddress();
|
||||
|
||||
// print(getroottable().WindowsShowABFlag);
|
||||
|
||||
// L_Sq_GetPlayerEachName();
|
||||
// Sout("%L",L_Sq_GetPlayerEachName());
|
||||
// print(Rindro_BaseToolClass.GetEachNpcId());
|
||||
|
||||
|
||||
|
||||
|
||||
// for (local i = 0; i< 400; i++) {
|
||||
// local WindowAddress = L_sq_GetWindowById(i);
|
||||
// if (WindowAddress != 0) print(format("%02X", WindowAddress));
|
||||
// if (WindowAddress == 0x39F56000) print(i);
|
||||
// }
|
||||
|
||||
// if (Clock() - getroottable().SINNU >= 10) {
|
||||
// getroottable().SINNU = Clock();
|
||||
// L_sq_MoveTown(1, 1, 474, 249);
|
||||
// }
|
||||
|
||||
// print(sq_GetCurrentModuleType());
|
||||
// Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/luke/newtile/02_success_back_1.ani", 430, 210 + 26, "卢克阻截开始" + AHSJKDNJKA);
|
||||
}
|
||||
|
||||
// AHSJKDNJKA <- Clock();
|
||||
// getroottable().SINNU <- Clock();
|
||||
// L_NewWindows("Lenheart", 56, 0x1);
|
||||
// L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], 0x01ADE090, 56, 0, 0);
|
||||
// getroottable().Lsnzz <- Clock();
|
||||
|
||||
// dofile("sqr/Base/_Tool/Json.nut");
|
||||
|
||||
// print(T);
|
||||
// print(T);
|
||||
|
||||
|
||||
|
||||
// Register_DPS_Pack(1, function(Jso) {
|
||||
// printT(Jso);
|
||||
// });
|
||||
|
||||
|
||||
// local asos = sq_CreateAICharacter(900);
|
||||
// asos.setCurrentPos(sq_getMyCharacter().getXPos() + 100, sq_getMyCharacter().getYPos(), 0);
|
||||
// sq_AddObject(sq_getMyCharacter(), asos, OBJECTTYPE_VIRTUALCHARACTER, false);
|
||||
// sq_ChangeDrawLayer(asos, ENUM_DRAWLAYER_CLOSEBACK);
|
||||
|
||||
|
||||
// L_sq_GoDungeon(1504);
|
||||
|
||||
CargoType <- 0;
|
||||
Sq_GetExeStr_Map[21910] <- function(Index) {
|
||||
CargoType = 0;
|
||||
return 21910;
|
||||
}
|
||||
Sq_GetExeStr_Map[21911] <- function(Index) {
|
||||
CargoType = 1;
|
||||
return 21911;
|
||||
}
|
||||
Rindro_Haker.LoadHook(0xE67800, ["int", "int"],
|
||||
function(args) {
|
||||
//点击了仓库转移物品
|
||||
if (args[0] == 0x2B) {
|
||||
if (CargoType == 0) {
|
||||
printf("点击个人仓库转移物品");
|
||||
local T = {
|
||||
op = 21091001,
|
||||
type = 0,
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
return [0];
|
||||
}
|
||||
if (CargoType == 1) {
|
||||
printf("点击账号仓库转移物品");
|
||||
local T = {
|
||||
op = 21091001,
|
||||
type = 1,
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
return [0];
|
||||
}
|
||||
}
|
||||
return null;
|
||||
},
|
||||
function(args) {
|
||||
// print(666);
|
||||
// print(format("%02x", args.pop()));
|
||||
// TTTAni <- args.pop();
|
||||
return null;
|
||||
});
|
||||
|
||||
|
||||
|
||||
// function onAttack_Swordman(obj, damager, boundingBox, isStuck)
|
||||
// {
|
||||
// local Mon = sq_GetCNRDObjectToActiveObject(damager);
|
||||
// Mon.setHp(0, null, true);
|
||||
// }
|
||||
|
||||
// function getCurrentModuleDamageRate(obj) {
|
||||
// local LLJob = sq_getJob(obj);
|
||||
// local LLGrowT = sq_getGrowType(obj);
|
||||
// if (LLJob == 0 && LLGrowT == 2)
|
||||
// return 2100000000.0;
|
||||
|
||||
// return 1.0;
|
||||
// }
|
||||
|
||||
// function onStartDungeon_Swordman(obj) {
|
||||
// print(666);
|
||||
// obj.setEnableDamageBox(false);
|
||||
// }
|
||||
|
|
@ -35,4 +35,50 @@ function SetDamageRateCallBack(Chunk) {
|
|||
}
|
||||
Pack_Control.rawset(2024110902, SetDamageRateCallBack);
|
||||
|
||||
getroottable()["LenheartFuncTab"].rawset("GetDamageRateFuncN", Lenheart_GetDamageRate_Fun);
|
||||
getroottable()["LenheartFuncTab"].rawset("GetDamageRateFuncN", Lenheart_GetDamageRate_Fun);
|
||||
|
||||
|
||||
// ModuleDamageTable <- {
|
||||
// //这个1是 副本编号
|
||||
// [1] = {
|
||||
// //这个0是大职业编号 比如说鬼剑士就是 0 女格斗家就是 1 在character/character.lst 这个文件里可以看
|
||||
// [0] = {
|
||||
// //这个0 和 1 是转职编号 0就是未转职 1 就是转了剑魂
|
||||
// [0] = 1.0,
|
||||
// [1] = 3.0
|
||||
// }
|
||||
// },
|
||||
// //2号副本
|
||||
// [2] ={
|
||||
// //女格斗家职业
|
||||
// [1] = {
|
||||
// [0] = 1.0,
|
||||
// [1] = 3.0
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// function getCurrentModuleDamageRate(obj)
|
||||
// {
|
||||
// local Rate = 1.0;
|
||||
// local stage = sq_GetGlobaludpModuleStage();
|
||||
// local dungeon = sq_GetDungeonByStage(stage);
|
||||
// local dungeonIndex = sq_GetDuegonIndex(dungeon);
|
||||
|
||||
// local LLJob = sq_getJob(obj);
|
||||
// local LLGrowT = sq_getGrowType(obj);
|
||||
|
||||
// //处于生效副本中
|
||||
// if(ModuleDamageTable.rawin(dungeonIndex)){
|
||||
// //自己是生效职业
|
||||
// if(ModuleDamageTable[dungeonIndex].rawin(LLJob)){
|
||||
// //是生效转职
|
||||
// if(ModuleDamageTable[dungeonIndex][LLJob].rawin(LLGrowT)){
|
||||
// Rate += ModuleDamageTable[dungeonIndex][LLJob][LLGrowT].tofloat();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// return Rate;
|
||||
// }
|
||||
|
|
@ -0,0 +1,157 @@
|
|||
/*
|
||||
文件名:PackControl.nut
|
||||
路径:Base/PackControl/PackControl.nut
|
||||
创建日期:2024-08-06 22:13
|
||||
文件用途:
|
||||
*/
|
||||
Pack_Control <- {}
|
||||
Pack_DPS_Control <- {}
|
||||
|
||||
function Register_DPS_Pack(Id, Func) {
|
||||
Pack_DPS_Control.rawset(Id, Func);
|
||||
}
|
||||
|
||||
function Sq_Pack_Control(Chunk) {
|
||||
try {
|
||||
local Pack_Json = Json.Decode(Chunk);
|
||||
if (Pack_Json.op == 2147483646) {
|
||||
if (Pack_DPS_Control.rawin(Pack_Json.dps_id)) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
Jso.rawdelete("op");
|
||||
Pack_DPS_Control[Pack_Json.dps_id](Jso);
|
||||
}
|
||||
} else {
|
||||
if (Pack_Control.rawin(Pack_Json.op)) {
|
||||
try {
|
||||
Pack_Control[Pack_Json.op](Chunk);
|
||||
} catch (exception) {
|
||||
print("error pack: " + Pack_Json.op);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (exception) {
|
||||
print("error packmsg: " + Pack_Json.op);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function Sq_Pack_ControlLocal(Chunk) {
|
||||
local Pack_Json = Json.Decode(Chunk);
|
||||
if (Pack_Json.op == 2147483646) {
|
||||
if (Pack_DPS_Control.rawin(Pack_Json.dps_id)) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
Jso.rawdelete("op");
|
||||
Pack_DPS_Control[Pack_Json.dps_id](Jso);
|
||||
}
|
||||
} else {
|
||||
if (Pack_Control.rawin(Pack_Json.op)) {
|
||||
Pack_Control[Pack_Json.op](Chunk);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function SendPackToDP_S(Id, T) {
|
||||
T.op <- 2147483646;
|
||||
T.dps_id <- Id;
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
}
|
||||
|
||||
|
||||
//进入副本回调
|
||||
function LenheartGotoDgnCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local DgnId = Jso.map.id;
|
||||
local DgnRate = Jso.map.ra;
|
||||
L_sq_GoDungeon(DgnId);
|
||||
}
|
||||
Pack_Control.rawset(2024041602, LenheartGotoDgnCallBack);
|
||||
|
||||
|
||||
//进入副本增加属性
|
||||
function LenheartAdditionalAttributes(obj) {
|
||||
//在副本中
|
||||
if (sq_GetCurrentModuleType() == 3) {
|
||||
if (!CNSquirrelAppendage.sq_IsAppendAppendage(obj, "appendage/lenheartap.nut")) {
|
||||
if ("LenheartAttributesTable" in getroottable()) {
|
||||
local Abarr = {};
|
||||
foreach(AtObj in getroottable()["LenheartAttributesTable"]) {
|
||||
foreach(Apos, At in AtObj) {
|
||||
if(!Abarr.rawin(Apos))Abarr[Apos] <- At;
|
||||
else Abarr[Apos]+= At;
|
||||
}
|
||||
}
|
||||
|
||||
local appendage = CNSquirrelAppendage.sq_AppendAppendage(obj, obj, -1, false, "appendage/lenheartap.nut", true);
|
||||
CNSquirrelAppendage.sq_Append(appendage, obj, obj);
|
||||
local change_appendage = appendage.sq_getChangeStatus("Yosin_LenheartDgnBuff");
|
||||
if (!change_appendage) {
|
||||
change_appendage = appendage.sq_AddChangeStatusAppendageID(obj, obj, 0,
|
||||
CHANGE_STATUS_TYPE_COOLTIME_DECLINE,
|
||||
false, 0, 115514);
|
||||
}
|
||||
if (change_appendage) {
|
||||
change_appendage.clearParameter();
|
||||
|
||||
foreach(Key, Value in Abarr) {
|
||||
if (Key == 0) change_appendage.addParameter(13, false, Value.tofloat()); //HP
|
||||
else if (Key == 1) change_appendage.addParameter(48, false, Value.tofloat()); //MP
|
||||
else if (Key == "strength") change_appendage.addParameter(0, false, Value.tofloat()); //力量
|
||||
else if (Key == "intelligence") change_appendage.addParameter(1, false, Value.tofloat()); //智力
|
||||
else if (Key == "vitality") change_appendage.addParameter(2, false, Value.tofloat()); //体力
|
||||
else if (Key == "spirit") change_appendage.addParameter(3, false, Value.tofloat()); //精神
|
||||
else if (Key == "physicalAttack") change_appendage.addParameter(4, false, Value.tofloat()); //物攻
|
||||
else if (Key == "magicAttack") change_appendage.addParameter(31, false, Value.tofloat()); //魔攻
|
||||
else if (Key == "independentAttack") {
|
||||
change_appendage.addParameter(53, false, Value.tofloat()); //独立
|
||||
change_appendage.addParameter(54, false, Value.tofloat()); //独立
|
||||
} else if (Key == "physicalDefense") change_appendage.addParameter(5, false, Value.tofloat()); //物理防御
|
||||
else if (Key == "magicDefense") change_appendage.addParameter(32, false, Value.tofloat()); //魔法防御
|
||||
else if (Key == "physicalCritical") change_appendage.addParameter(15, false, Value.tofloat() / 10.0); //物理暴击
|
||||
else if (Key == "magicCritical") change_appendage.addParameter(16, false, Value.tofloat() / 10.0); //魔法暴击
|
||||
else if (Key == "attackSpeed") change_appendage.addParameter(10, false, Value.tofloat()); //攻速
|
||||
else if (Key == "releaseSpeed") change_appendage.addParameter(12, false, Value.tofloat()); //释放
|
||||
else if (Key == "moveSpeed") change_appendage.addParameter(11, false, Value.tofloat()); //移速
|
||||
else if (Key == "resistance") change_appendage.addParameter(39, false, Value.tofloat()); //抗磨
|
||||
else if (Key == "hitRate") change_appendage.addParameter(33, false, Value.tofloat()); //命中
|
||||
else if (Key == "avoidance") change_appendage.addParameter(27, false, Value.tofloat()); //闪避
|
||||
else if (Key == "hpRecovery") change_appendage.addParameter(14, false, Value.tofloat()); //HP恢复
|
||||
else if (Key == "mpRecovery") change_appendage.addParameter(29, false, Value.tofloat()); //MP恢复
|
||||
else if (Key == "stun") change_appendage.addParameter(41, false, Value.tofloat()); //僵直
|
||||
else if (Key == "hardStun") change_appendage.addParameter(34, false, Value.tofloat()); //硬直
|
||||
else if (Key == "fire") change_appendage.addParameter(42, false, Value.tofloat()); //火强
|
||||
else if (Key == "fireResistance") change_appendage.addParameter(20, false, Value.tofloat()); //火抗
|
||||
else if (Key == "water") change_appendage.addParameter(43, false, Value.tofloat()); //冰强
|
||||
else if (Key == "waterResistance") change_appendage.addParameter(21, false, Value.tofloat()); //冰抗
|
||||
else if (Key == "light") change_appendage.addParameter(45, false, Value.tofloat()); //光强
|
||||
else if (Key == "lightResistance") change_appendage.addParameter(23, false, Value.tofloat()); //光抗
|
||||
else if (Key == "dark") change_appendage.addParameter(44, false, Value.tofloat()); //暗强
|
||||
else if (Key == "darkResistance") change_appendage.addParameter(22, false, Value.tofloat()); //暗抗
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (getroottable().rawin("LenheartFuncTab")) {
|
||||
getroottable()["LenheartFuncTab"].rawset("LenheartAdditionalAttributesFunc", LenheartAdditionalAttributes);
|
||||
} else {
|
||||
local T = {};
|
||||
T.rawset("LenheartAdditionalAttributesFunc", LenheartAdditionalAttributes);
|
||||
getroottable().rawset("LenheartFuncTab", T);
|
||||
}
|
||||
|
||||
|
||||
//进入副本增加属性
|
||||
function LenheartAdditionalCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
if ("LenheartAttributesTable" in getroottable()) {
|
||||
local T = getroottable()["LenheartAttributesTable"];
|
||||
T.rawset("LenheartCollectBoxAb", Jso.Attribute);
|
||||
} else {
|
||||
local T = {};
|
||||
T.rawset("LenheartCollectBoxAb", Jso.Attribute);
|
||||
getroottable().rawset("LenheartAttributesTable", T);
|
||||
}
|
||||
}
|
||||
Pack_Control.rawset(20069016, LenheartAdditionalCallBack);
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
/*
|
||||
文件名:Window_Get.nut
|
||||
路径:Base/CallBack/Window_Get.nut
|
||||
创建日期:2024-08-08 13:38
|
||||
文件用途:窗口被获取时经过的函数
|
||||
*/
|
||||
getroottable().RindroOneRunTable <- {};
|
||||
|
||||
function OneRunCode(Func, Key, Window_Obj) {
|
||||
if (!RindroOneRunTable.rawin(Key)) {
|
||||
Func(Window_Obj);
|
||||
RindroOneRunTable.rawset(Key, true);
|
||||
}
|
||||
}
|
||||
|
||||
function L_Old_Window_Get(Window_Obj) {
|
||||
// print(L_sq_RA(Window_Obj + 0xC));
|
||||
// L_sq_WA(Window_Obj + 0xC,257);
|
||||
// L_sq_RA(Window_Obj, "0xC+");
|
||||
|
||||
// if (L_sq_RA(Window_Obj + 0x14) == 0) {
|
||||
// print(L_sq_RA(Window_Obj + 0x18));
|
||||
// print(format("%02x", Window_Obj));
|
||||
// }
|
||||
|
||||
// if (0x422e2100 == Window_Obj) {
|
||||
// print(L_sq_RA(Window_Obj + 0x14));
|
||||
// }
|
||||
|
||||
|
||||
// OneRunCode(function(Window_Obj) {
|
||||
// if (0x185242C == L_sq_RA(Window_Obj)) {
|
||||
// //任务提示
|
||||
// if (L_sq_RAB(Window_Obj + 0x78) == 131 && L_sq_RAB(Window_Obj + 0x79) == 2) {
|
||||
// L_sq_WA(Window_Obj + 0x14, 144);
|
||||
// L_sq_WA(Window_Obj + 0x18, 53);
|
||||
// }
|
||||
// }
|
||||
// }, "任务提示设置", Window_Obj);
|
||||
|
||||
|
||||
// //任务提示
|
||||
// if (0x185242C == L_sq_RA(Window_Obj)) {
|
||||
// if (L_sq_RA(Window_Obj + 0x44) == 131 && L_sq_RAB(Window_Obj + 0x79) == 2) {
|
||||
// L_sq_WA(Window_Obj + 0x14, 144);
|
||||
// L_sq_WA(Window_Obj + 0x18, 53);
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// if(369 == L_sq_RA(Window_Obj + 0x78))
|
||||
// print(format("%02X", Window_Obj));
|
||||
}
|
||||
|
||||
|
||||
//窗口是否打开
|
||||
function L_Old_Window_Visible(WindowObject, Flag) {
|
||||
// print(format("%02X", WindowObject));
|
||||
|
||||
// if (Character_Info_Window_Address.rawin(WindowObject)) {
|
||||
// L_sq_WAB(WindowObject + 0xc, 0);
|
||||
// // print(L_sq_RA(WindowObject + 0x14));
|
||||
// // print(format("%02X", WindowObject));
|
||||
// }
|
||||
// print(1213);
|
||||
// foreach(Key, Table in Character_Info_Window_Address) {
|
||||
// L_sq_WA(Key + 0xC, 256);
|
||||
// // print(format("%02X", Key));
|
||||
// }
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
文件名:Interface.nut
|
||||
路径:Base/Interface.nut
|
||||
创建日期:2025-05-01 07:39
|
||||
文件用途:所有基础文件加载以后 将会执行的逻辑 用于初始化一些接口和默认设置
|
||||
*/
|
||||
|
||||
//消息框黏贴
|
||||
NativePointer(0x011C53B0).writeShort(0x1B0);
|
||||
|
||||
//修复233号弹窗
|
||||
NativePointer(0x00727017).writeByteArray([0xEB, 0x11, 0x90, 0x90, 0x90, 0x90, 0x90]);
|
||||
|
||||
//反遍历函数
|
||||
NativePointer(0x1370FD7).writeInt(0);
|
||||
|
||||
//全局的道具信息
|
||||
if (!getroottable().rawin("Rindro_ItemInfoObject")) Rindro_ItemInfoObject <- {};
|
||||
|
||||
//开启热重载目录
|
||||
if(getroottable().rawin("RINDROLOCAL"))Sq_AutoReload("sqr");
|
||||
|
|
@ -1,40 +0,0 @@
|
|||
/*
|
||||
文件名:PackControl.nut
|
||||
路径:Base/PackControl/PackControl.nut
|
||||
创建日期:2024-08-06 22:13
|
||||
文件用途:
|
||||
*/
|
||||
Pack_Control <- {}
|
||||
|
||||
function Sq_Pack_Control(Chunk) {
|
||||
try {
|
||||
local Pack_Json = Json.Decode(Chunk);
|
||||
if (Pack_Control.rawin(Pack_Json.op)) {
|
||||
try {
|
||||
Pack_Control[Pack_Json.op](Chunk);
|
||||
} catch (exception) {
|
||||
print("error pack: " + Pack_Json.op);
|
||||
}
|
||||
}
|
||||
} catch (exception) {
|
||||
print("error packmsg: " + Pack_Json.op);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function Sq_Pack_ControlLocal(Chunk) {
|
||||
local Pack_Json = Json.Decode(Chunk);
|
||||
if (Pack_Control.rawin(Pack_Json.op)) {
|
||||
Pack_Control[Pack_Json.op](Chunk);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//进入副本回调
|
||||
function LenheartGotoDgnCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local DgnId = Jso.map.id;
|
||||
local DgnRate = Jso.map.ra;
|
||||
L_sq_GoDungeon(DgnId);
|
||||
}
|
||||
Pack_Control.rawset(2024041602, LenheartGotoDgnCallBack);
|
||||
|
|
@ -4,6 +4,7 @@
|
|||
创建日期:2024-08-27 12:13
|
||||
文件用途:个人信息属性面板
|
||||
*/
|
||||
return;
|
||||
class Lenheart_Character_Info_ClassC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
|
@ -372,6 +373,7 @@ DrawCodeCallBackFunc.Rindro_Character_Info <- function(Args) {
|
|||
|
||||
//个人信息窗口逻辑
|
||||
function L_Character_Info_Window(WindowObject) {
|
||||
return false;
|
||||
// //返回Flase 原逻辑继续执行 返回Tue 原逻辑终止执行
|
||||
// local Flag = false;
|
||||
// if (getroottable().rawin("Lenheart_Character_Info_Class_Obj")) {
|
||||
|
|
@ -487,6 +489,7 @@ class Lenheart_Other_Character_Info_ClassC extends Lenheart_Character_Info_Class
|
|||
|
||||
//他人信息窗口逻辑
|
||||
function L_Other_Character_Info_Window(WindowObject) {
|
||||
return false;
|
||||
//返回Flase 原逻辑继续执行 返回Tue 原逻辑终止执行
|
||||
local Flag = false;
|
||||
if (getroottable().rawin("Lenheart_Other_Character_Info_Class_Obj")) {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,11 @@
|
|||
*/
|
||||
class Rindro_Cursor {
|
||||
|
||||
//强制锁
|
||||
ForceLockState = false;
|
||||
|
||||
|
||||
//是否启用
|
||||
UseState = 0;
|
||||
|
||||
TypeState = 0;
|
||||
|
|
|
|||
|
|
@ -238,13 +238,181 @@ function Lenheart_Each_Fun(obj) {
|
|||
getroottable()["LenheartFuncTab"].rawset("Lenheart_EachN", Lenheart_Each_Fun);
|
||||
|
||||
|
||||
// Rindro_Haker.LoadHook(0x10041D0, ["int", "int", "int"],
|
||||
// function(args) {
|
||||
// if (getroottable().rawin("L_Each_Obj")) {
|
||||
// getroottable()["L_Each_Obj"].BottomShow();
|
||||
// }
|
||||
// return null;
|
||||
// },
|
||||
// function(args) {
|
||||
// return null;
|
||||
// });
|
||||
|
||||
|
||||
|
||||
class Lenheart_PlayerEachC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//不是窗口
|
||||
NoWindow = true;
|
||||
|
||||
//是否可见
|
||||
// Visible = false;
|
||||
|
||||
Info = null;
|
||||
Basic = null;
|
||||
|
||||
//当前交互角色姓名
|
||||
PlayerEach_Name = null;
|
||||
PlayerEach_Flag = false;
|
||||
PlayerEach_ButtonMap = null;
|
||||
|
||||
//通用按钮
|
||||
PlayerEach_CommonButtonMap = null;
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
PlayerEach_ButtonMap = {};
|
||||
PlayerEach_CommonButtonMap = {};
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
}
|
||||
|
||||
function RegisterWidget() {}
|
||||
|
||||
function Show(obj) {}
|
||||
|
||||
function TopShow(obj) {}
|
||||
|
||||
function DrawMain(obj) {}
|
||||
|
||||
function MySelfShow() {
|
||||
if (PlayerEach_Name) {
|
||||
local obj = sq_getMyCharacter();
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//初始化NPC按钮
|
||||
function InitNpcButton() {
|
||||
Childrens = [];
|
||||
if (PlayerEach_ButtonMap.rawin(PlayerEach_Name)) {
|
||||
foreach(Func in PlayerEach_ButtonMap[PlayerEach_Name]) {
|
||||
Func(this);
|
||||
}
|
||||
}
|
||||
foreach(Func in PlayerEach_CommonButtonMap) {
|
||||
Func(this);
|
||||
}
|
||||
this.Visible = true;
|
||||
}
|
||||
|
||||
function AddEachForCommon(Index, Func) {
|
||||
PlayerEach_CommonButtonMap.rawset(Index, Func);
|
||||
}
|
||||
|
||||
function RemoveEachForCommon(Index) {
|
||||
PlayerEach_CommonButtonMap.rawdelete(Index);
|
||||
}
|
||||
|
||||
function AddEachForPlayerName(Index, Func) {
|
||||
if (PlayerEach_ButtonMap.rawin(Index)) {
|
||||
PlayerEach_ButtonMap[Index].append(Func);
|
||||
return;
|
||||
}
|
||||
PlayerEach_ButtonMap.rawset(Index, [Func]);
|
||||
}
|
||||
|
||||
function RemoveEachForPlayerName(Index) {
|
||||
PlayerEach_ButtonMap.rawdelete(Index);
|
||||
}
|
||||
|
||||
function CloseAllEach() {
|
||||
if (Basic) {
|
||||
L_sq_WA(L_sq_P2I(Basic) + 0xC, 256);
|
||||
}
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
|
||||
local Str = L_Sq_GetPlayerEachName();
|
||||
if (Str.len() > 0) {
|
||||
PlayerEach_Name = Str;
|
||||
}
|
||||
if (PlayerEach_Name) {
|
||||
if (!PlayerEach_Flag) {
|
||||
PlayerEach_Flag = true;
|
||||
InitNpcButton();
|
||||
}
|
||||
} else {
|
||||
PlayerEach_Flag = false;
|
||||
}
|
||||
}
|
||||
|
||||
//override
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
}
|
||||
|
||||
function SelfSyncPos(gInfo) {
|
||||
//读取交互坐标数据
|
||||
Info = gInfo;
|
||||
Basic = gInfo.BasicAdd;
|
||||
|
||||
X = Info.X;
|
||||
Y = Info.Y + (21 * Info.Count);
|
||||
//宽度
|
||||
Width = 100;
|
||||
//高度
|
||||
Height = (21 * Childrens.len());
|
||||
//同步子对象坐标
|
||||
foreach(pos, winobj in Childrens) {
|
||||
winobj.X = Info.X;
|
||||
winobj.Y = Info.Y + (21 * (Info.Count + pos));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
RindroPlayerEachDrawFlag <- false;
|
||||
RindroPlayerEachDrawCountBuffer <- 0;
|
||||
RindroPlayerEachDrawCount <- 0;
|
||||
Rindro_Haker.LoadHook(0x10002A0, ["pointer", "int", "int"],
|
||||
function(args) {
|
||||
if (L_Sq_GetPlayerEachName().len() <= 0) return;
|
||||
local Xpos = L_sq_RA(L_sq_P2I(args[0]) + 0x14);
|
||||
local Ypos = L_sq_RA(L_sq_P2I(args[0]) + 0x18);
|
||||
|
||||
if (!RindroPlayerEachDrawFlag) {
|
||||
local RootTab = getroottable();
|
||||
RindroPlayerEachDrawFlag = true;
|
||||
if (RootTab.rawin("L_PlayerEach_Obj")) {
|
||||
RootTab["L_PlayerEach_Obj"].SelfSyncPos({
|
||||
X = Xpos,
|
||||
Y = Ypos,
|
||||
Count = RindroPlayerEachDrawCount,
|
||||
BasicAdd = args[0]
|
||||
});
|
||||
RootTab["L_PlayerEach_Obj"].MySelfShow();
|
||||
}
|
||||
}
|
||||
RindroPlayerEachDrawCountBuffer++;
|
||||
// print(args[0]);
|
||||
return null;
|
||||
|
||||
},
|
||||
function(args) {
|
||||
return null;
|
||||
});
|
||||
|
||||
|
||||
function Lenheart_PlayerEach_Fun(obj) {
|
||||
local RootTab = getroottable();
|
||||
RindroPlayerEachDrawFlag = false;
|
||||
RindroPlayerEachDrawCount = RindroPlayerEachDrawCountBuffer;
|
||||
RindroPlayerEachDrawCountBuffer = 0;
|
||||
if (!RootTab.rawin("L_PlayerEach_Obj")) {
|
||||
RootTab.rawset("L_PlayerEach_Obj", LenheartNewUI_CreateWindow(Lenheart_PlayerEachC, "玩家与玩家交互界面窗口", 0, 0, 0, 0, 0));
|
||||
}
|
||||
}
|
||||
|
||||
getroottable()["LenheartFuncTab"].rawset("Lenheart_PlayerEachN", Lenheart_PlayerEach_Fun);
|
||||
|
|
@ -88,6 +88,9 @@ class Rindro_Event extends LenheartNewUI_Windows {
|
|||
//是否可见
|
||||
Visible = true;
|
||||
|
||||
//主要Button
|
||||
MainButton = null;
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
|
@ -127,13 +130,17 @@ class Rindro_Event extends LenheartNewUI_Windows {
|
|||
|
||||
function TopShow(obj) {
|
||||
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 20, 20)) {
|
||||
L_sq_DrawImg("interface2/yosin/eventsystem.img", 0, X - 7, Y - 24);
|
||||
local Len = ObjectId.len() / 3;
|
||||
for (local i = 0; i< Len; i++) {
|
||||
L_sq_DrawImg("interface2/yosin/eventsystem.img", 1, X - 2 + (15 * i), Y - 24);
|
||||
local XposOffset = 0;
|
||||
local Len = LenheartTextClass.GetStringLength(MainButton.ShowName);
|
||||
local Count = ((Len - 10) / 15) + 1;
|
||||
XposOffset = (-(10 + Count * 15) / 2) + 10;
|
||||
|
||||
L_sq_DrawImg("interface2/yosin/eventsystem.img", 0, X + XposOffset, Y - 24);
|
||||
for (local i = 0; i< Count; i++) {
|
||||
L_sq_DrawImg("interface2/yosin/eventsystem.img", 1, X + XposOffset + 5 + (15 * i), Y - 24);
|
||||
}
|
||||
L_sq_DrawImg("interface2/yosin/eventsystem.img", 2, X - 2 + (15 * Len - 1), Y - 24);
|
||||
L_sq_DrawCode(ObjectId, X + 5, Y - 17, sq_RGBA(255, 255, 255, 250), 0, 1);
|
||||
L_sq_DrawImg("interface2/yosin/eventsystem.img", 2, X + XposOffset + 5 + (15 * Count), Y - 24);
|
||||
L_sq_DrawCode(MainButton.ShowName, X - Len / 2 + 12, Y - 17, sq_RGBA(255, 255, 255, 250), 0, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -158,6 +165,7 @@ class Rindro_EventList {
|
|||
|
||||
//活动数组
|
||||
Events = null;
|
||||
EventsMap = null;
|
||||
|
||||
function YosinEventIconInfoCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
|
|
@ -175,12 +183,14 @@ class Rindro_EventList {
|
|||
constructor() {
|
||||
|
||||
Events = [];
|
||||
EventsMap = {};
|
||||
Pack_Control.rawset(30002, YosinEventIconInfoCallBack.bindenv(this));
|
||||
|
||||
}
|
||||
|
||||
//添加活动
|
||||
function AddEvent(Name, Idx, WindowObject, ...) {
|
||||
if (EventsMap.rawin(Name)) return EventsMap.rawget(Name);
|
||||
local Window = LenheartNewUI_CreateWindow(Rindro_Event, Name, 0, 0, 20, 20, 0)
|
||||
local Flag = Events.len();
|
||||
local ImgPath = "interface2/yosin/eventsystemlist.img";
|
||||
|
|
@ -193,7 +203,10 @@ class Rindro_EventList {
|
|||
}.bindenv(this);
|
||||
Window.AddChild(ButtonBuf);
|
||||
Window.PosIdx = Events.len();
|
||||
Window.MainButton = ButtonBuf;
|
||||
Events.append(Window);
|
||||
EventsMap.rawset(Name, Window);
|
||||
return Window;
|
||||
}
|
||||
|
||||
//检测是否悬停活动图标
|
||||
|
|
|
|||
|
|
@ -21,12 +21,13 @@ class R_Mouse {
|
|||
}
|
||||
//锁定鼠标
|
||||
function Lock() {
|
||||
|
||||
_Rindro_Cusor_.UseState = 1;
|
||||
L_sq_WAB(0x1B46886, 1);
|
||||
//技能描述窗口
|
||||
Sq_Memory_WriteByteArr(L_sq_I2P(0x4CC47E), [0xE9, 0xA0, 0x00, 0x00, 0x00, 0x90]);
|
||||
//物品描述窗口
|
||||
Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x90, 0x90, 0x90, 0x90, 0x90, 0x90]);
|
||||
// Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x90, 0x90, 0x90, 0x90, 0x90, 0x90]);
|
||||
//buff信息描述窗口
|
||||
Sq_Memory_WriteByteArr(L_sq_I2P(0x4BF532), [0x90, 0x90, 0x90, 0x90]);
|
||||
//原生商城 个人信息等按钮的悬停
|
||||
|
|
@ -36,10 +37,11 @@ class R_Mouse {
|
|||
}
|
||||
//解锁鼠标
|
||||
function UnLock() {
|
||||
|
||||
_Rindro_Cusor_.UseState = 0;
|
||||
L_sq_WAB(0x1B46886, 0);
|
||||
Sq_Memory_WriteByteArr(L_sq_I2P(0x4CC47E), [0x39, 0x05, 0xE0, 0xF6, 0xA3, 0x01]);
|
||||
Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x56, 0xE8, 0x10, 0xFE, 0xFF, 0xFF]);
|
||||
// Sq_Memory_WriteByteArr(L_sq_I2P(0xF63DDA), [0x56, 0xE8, 0x10, 0xFE, 0xFF, 0xFF]);
|
||||
Sq_Memory_WriteByteArr(L_sq_I2P(0x4BF532), [0x75, 0x07, 0x32, 0xC0]);
|
||||
L_sq_WAB(0x4C4690, 0x55);
|
||||
L_sq_WAB(0x11C6510, 0x55);
|
||||
|
|
@ -51,6 +53,7 @@ class R_Mouse {
|
|||
}
|
||||
//设置鼠标工作类型
|
||||
function SetType(Type) {
|
||||
|
||||
_Rindro_Cusor_.TypeState = Type;
|
||||
// L_sq_WAB(0x1b46898, Type);
|
||||
}
|
||||
|
|
@ -61,6 +64,7 @@ class R_Mouse {
|
|||
}
|
||||
//鼠标0状态设置是否按下
|
||||
function SetBaseState(Flag) {
|
||||
|
||||
_Rindro_Cusor_.SubState = Flag;
|
||||
// return L_sq_WAB(0x1B46874, Flag);
|
||||
}
|
||||
|
|
@ -145,6 +149,15 @@ class LenheartNewUI_BaseWindow extends Rindro_BaseToolClass {
|
|||
Window.SyncPos(X, Y);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* @函数作用: 添加子对象
|
||||
* @参数 name
|
||||
*/
|
||||
function AddChild(gChild) {
|
||||
this.Childrens.append(gChild);
|
||||
gChild.Parent = this;
|
||||
}
|
||||
}
|
||||
|
||||
//游戏窗口类
|
||||
|
|
@ -473,18 +486,17 @@ function CheackMouseInOldWindows() {
|
|||
local Flag = L_sq_RA(WindowAddress);
|
||||
foreach(value in OldBaseWindowArr) {
|
||||
if (Flag == value) {
|
||||
// if ((L_sq_RA(WindowAddress + 0x14) == 0 && L_sq_RA(WindowAddress + 0x18) == 0) || Flag == 0x184D0C4) {
|
||||
// print(false);
|
||||
|
||||
// }
|
||||
|
||||
//空地
|
||||
if (Flag == 0x184D0C4 || Flag == 0x0184CF6C) {
|
||||
//都为0的时候城镇背景 508是血槽那一块的逻辑 坐标Y是508
|
||||
if ((L_sq_RA(WindowAddress + 0x14) == 0 && (L_sq_RA(WindowAddress + 0x18) == 0 || L_sq_RA(WindowAddress + 0x18) == 508))) {
|
||||
return false;
|
||||
}
|
||||
} else return false;
|
||||
} else {
|
||||
//原生窗口里的按钮
|
||||
if(Flag == 0x184D174)return true;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -547,7 +559,8 @@ function L_MouseCallBack(MouseState, MouseFlag, MousePos_X, MousePos_Y) {
|
|||
// }
|
||||
if (MouseState == 0x200) {
|
||||
//常规事件就要设定鼠标是否锁定逻辑
|
||||
RunMouseLogic(MousePos_X, MousePos_Y);
|
||||
if (_Rindro_Cusor_.ForceLockState == false)
|
||||
RunMouseLogic(MousePos_X, MousePos_Y);
|
||||
}
|
||||
|
||||
//判断是否悬停活动图标 没悬停在老窗口上 没在选图界面
|
||||
|
|
@ -615,7 +628,8 @@ function L_MouseCallBack(MouseState, MouseFlag, MousePos_X, MousePos_Y) {
|
|||
//打开原生窗口回调
|
||||
function L_OpenOldWindowCallBack(WindowIndex) {
|
||||
//将新窗口渲染队列改为下层 抵消窗口 Esc窗口 登录可能显示的任务窗口
|
||||
if (WindowIndex != 170 && WindowIndex != 176 && WindowIndex != 276 && WindowIndex != 275 && WindowIndex != 278 && WindowIndex != 283 && WindowIndex != 36) {
|
||||
if (WindowIndex != 170 && WindowIndex != 176 && WindowIndex != 276 && WindowIndex != 275 && WindowIndex != 278 && WindowIndex != 279 && WindowIndex != 283 && WindowIndex != 36) {
|
||||
|
||||
getroottable().WindowsShowABFlag <- false;
|
||||
}
|
||||
}
|
||||
|
|
@ -865,6 +879,48 @@ class LenheartNewUI_Button extends LenheartNewUI_CommonUi {
|
|||
}
|
||||
}
|
||||
|
||||
class LenheartNewUI_VerticalButton extends LenheartNewUI_CommonUi {
|
||||
State = 0;
|
||||
BaseIdx = 29;
|
||||
DHeight = null; // 改为高度
|
||||
Path = "interface/lenheartwindowcommon.img";
|
||||
Idx = 172;
|
||||
FillHeight = 2; // 改为填充高度
|
||||
FirstHeight = 28; // 改为首节高度
|
||||
Width = 24; // 固定宽度,垂直按钮宽度通常是固定的
|
||||
|
||||
constructor(X, Y, H) {
|
||||
this.DHeight = H;
|
||||
LenheartNewUI_CommonUi.constructor(X, Y, 24, H + 28 * 2); // 宽度固定,高度动态
|
||||
}
|
||||
|
||||
function SetFrame(gPath, gIdx) {
|
||||
if (gPath) Path = gPath;
|
||||
Idx = gIdx;
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//不可用
|
||||
if (State == 8) {
|
||||
L_sq_Draw3Image_Vertical(X + 1, Y, this.Width, this.DHeight, Path, Idx + 9, FillHeight, FirstHeight);
|
||||
} else {
|
||||
//按下
|
||||
if (isLBDown) {
|
||||
L_sq_Draw3Image_Vertical(X + 1, Y, this.Width, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight);
|
||||
}
|
||||
//悬停
|
||||
else if (isInRect) {
|
||||
L_sq_Draw3Image_Vertical(X, Y, this.Width, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight);
|
||||
}
|
||||
//普通
|
||||
else {
|
||||
L_sq_Draw3Image_Vertical(X, Y, this.Width, this.DHeight, Path, Idx, FillHeight, FirstHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class LenheartNewUI_ButtonText extends LenheartNewUI_Button {
|
||||
TextStr = null;
|
||||
TextX = null;
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@
|
|||
创建日期:2024-08-06 22:09
|
||||
文件用途:按键枚举类
|
||||
*/
|
||||
//反遍历
|
||||
L_sq_WA(0x1370FD7, 0);
|
||||
DIK_ESCAPE <- 0x01
|
||||
DIK_1 <- 0x02
|
||||
DIK_2 <- 0x03
|
||||
|
|
@ -150,7 +148,144 @@ DIK_WEBBACK <- 0xEA /* Web Back */
|
|||
DIK_MYCOMPUTER <- 0xEB /* My Computer */
|
||||
DIK_MAIL <- 0xEC /* Mail */
|
||||
DIK_MEDIASELECT <- 0xED /* Media Select */
|
||||
FFI_FIRST_ABI <- 0;
|
||||
FFI_SYSV <- 1;
|
||||
FFI_STDCALL <- 2;
|
||||
FFI_THISCALL <- 3;
|
||||
FFI_FASTCALL <- 4;
|
||||
FFI_MS_CDECL <- 5;
|
||||
FFI_PASCAL <- 6;
|
||||
FFI_REGISTER <- 7;
|
||||
|
||||
|
||||
function Sq_L_Medal(x, y) {}
|
||||
|
||||
function Sq_SettingWindowCallBack(x, y) {}
|
||||
|
||||
function Sq_BuffSwitchingCallBack(x, y) {}
|
||||
|
||||
function Sq_SwitchingCallBack(x, y) {}
|
||||
|
||||
function Sq_UpgradeCallBack(x, y) {}
|
||||
|
||||
function Sq_RecoveryCallBack(x, y) {}
|
||||
|
||||
function Sq_RecoveryTypeSetCallBack(Type) {}
|
||||
|
||||
function Sq_DrawMainMaxLayerCustomUI(pack) {}
|
||||
|
||||
function Lenheart(VmTop) {}
|
||||
|
||||
function Sq_MouseEventCallBack(Lb, Rb, Mb) {}
|
||||
|
||||
function Sq_SelectCharacter(Chunk) {}
|
||||
|
||||
function Sq_DrawMainTopLayerCustomUI(pack) {}
|
||||
|
||||
function Sq_GetExeStr_Event(StrIndex) {
|
||||
return StrIndex;
|
||||
}
|
||||
|
||||
function Sq_CreatChr(chunk) {}
|
||||
|
||||
function Sq_SendPackType_Event(Type) {}
|
||||
|
||||
function Sq_SendPackByte_Event(Parm) {}
|
||||
|
||||
function Sq_SendPackWord_Event(Parm) {}
|
||||
|
||||
function Sq_SendPackDWord_Event(Parm) {}
|
||||
|
||||
function Sq_SendPackChar_Event(Parm) {}
|
||||
|
||||
function Sq_SendPack_Event() {}
|
||||
|
||||
function Sq_DrawItemBack(Xpos, Ypos, Image) {}
|
||||
|
||||
function Sq_DrawItemFront(Xpos, Ypos, Image) {}
|
||||
|
||||
function Sq_GetDrawMonBloodSw() {
|
||||
return false;
|
||||
}
|
||||
|
||||
function Sq_DrawMonsterBlood(Object, X, Y) {}
|
||||
|
||||
function Sq_Set_Inventory_M_Pos(This) {}
|
||||
|
||||
function Sq_Get_Ex_IntData(SkillAddress, Idx, objAddress) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
function Sq_Get_Ex_SkillCoolTime(SkillAddress, Idx, objAddress) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
function Sq_Get_Ex_LevelData(SkillAddress, Idx, objAddress) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
function Sq_PlayerEachPos(x, y) {}
|
||||
|
||||
function Sq_DrawMainMaxLayerCustomUI(pack) {}
|
||||
|
||||
function Sq_PushDamageFontData(ObjAddress, X, Y, Z, Value, Type, A8, A9) {
|
||||
return true;
|
||||
}
|
||||
|
||||
function Sq_PushDamageData(ObjAddress, MySelfAddress, Value);
|
||||
|
||||
function Sq_Pack_Control(chunk) {}
|
||||
|
||||
function Sq_MessageWindowDraw(a, c) {}
|
||||
|
||||
function Sq_Get_Event_Pos_X() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
function Sq_Get_Event_Pos_Y() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
function Sq_L_OtherPlayerInfo(x, y, Type, Value, ImgBuf) {
|
||||
local str = Value.tostring();
|
||||
local lenght = L_sq_GetStringDrawLength(str);
|
||||
L_sq_DrawImg(ImgBuf, x + 70 - lenght, y + 5);
|
||||
return Value;
|
||||
}
|
||||
|
||||
function Sq_DrawMiniMapUI(a) {}
|
||||
|
||||
function Sq_CompleteTask(a1, a2, a3) {}
|
||||
|
||||
function L_drawMainCustomUI_All() {}
|
||||
|
||||
function L_MouseCallBack(a, b, c, d) {}
|
||||
|
||||
function L_DrawWindow_A() {}
|
||||
|
||||
function L_DrawWindow_B() {}
|
||||
|
||||
function L_OpenOldWindowCallBack(WindowIndex) {}
|
||||
|
||||
function L_Old_Window_Get(WindowObject) {}
|
||||
|
||||
function L_Character_Info_Window(WindowObject) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function L_Other_Character_Info_Window(WindowObject) {
|
||||
return false;
|
||||
}
|
||||
|
||||
function L_Old_Window_Visible(WindowObject, Flag) {}
|
||||
|
||||
|
||||
getroottable().LenheartBaseFuncTab <- {};
|
||||
getroottable().LenheartFuncTab <- {};
|
||||
getroottable().Rindro_Scr_Width <- L_sq_RA(0x4D848E);
|
||||
getroottable().Rindro_Scr_High <- L_sq_RA(0x4D8495);
|
||||
|
||||
//获取装备偏移
|
||||
function Rindro_GetEquAddr(addr) {
|
||||
switch (addr) {
|
||||
case 1:
|
||||
|
|
@ -238,4 +373,7 @@ function Rindro_GetEquAddr(addr) {
|
|||
break;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
//本地模式
|
||||
if(!getroottable().rawin("RINDROLOCAL"))RINDROLOCAL <- false;
|
||||
|
|
@ -62,8 +62,8 @@ class Rindro_Animation {
|
|||
foreach(FrameObj in FrameList) {
|
||||
//如果有附加处理 格式化
|
||||
if (AdditionalOptions && AdditionalOptions.rawin("ImgFormat")) FrameObj.Img_Path = AdditionalOptions["ImgFormat"](FrameObj.Img_Path);
|
||||
local Png = Rindro_Image.Load(FrameObj.Img_Path).GetPng(FrameObj.Img_Index);
|
||||
Png.Draw(-500, -500);
|
||||
local Png = Rindro_Image.Load(FrameObj.Img_Path);
|
||||
// Png.Draw(-500, -500);
|
||||
|
||||
//如果有附加处理 坐标
|
||||
if (AdditionalOptions && AdditionalOptions.rawin("Pos")) {
|
||||
|
|
@ -75,7 +75,22 @@ class Rindro_Animation {
|
|||
PngList.append(Png);
|
||||
}
|
||||
} else {
|
||||
error("创建Ani失败,找不到Ani数据");
|
||||
AnimationFlag = {};
|
||||
FrameList.append({
|
||||
AttackBox = [],
|
||||
DamageBox = [],
|
||||
Delay = 800,
|
||||
Flag = {},
|
||||
Img_Index = 0,
|
||||
Img_Path = "",
|
||||
Pos = {
|
||||
x = -248,
|
||||
y = -331
|
||||
}
|
||||
})
|
||||
|
||||
// print(Data);
|
||||
// print("创建Ani失败,找不到Ani数据");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -92,6 +107,7 @@ class Rindro_Animation {
|
|||
}
|
||||
|
||||
function FlushFrame(Index) {
|
||||
if (PngList.len() <= 0) return;
|
||||
//同步当前帧
|
||||
CurrentFrameIndex = Index;
|
||||
//当前帧更换为本帧
|
||||
|
|
@ -110,13 +126,12 @@ class Rindro_Animation {
|
|||
|
||||
//绘制
|
||||
function DrawFrame(X, Y) {
|
||||
// local NowDrawPng = CurrentFrame;
|
||||
local FrameObj = FrameList[CurrentFrameIndex];
|
||||
|
||||
//线性减淡
|
||||
if ("GRAPHIC_EFFECT_LINEARDODGE" in FrameObj.Flag) {
|
||||
L_sq_SetDrawImgModel(2, 0);
|
||||
}
|
||||
// local NowDrawPng = CurrentFrame;
|
||||
if (FrameList.len() <= 0) return;
|
||||
local FrameObj = FrameList[CurrentFrameIndex];
|
||||
// printT(FrameObj);
|
||||
|
||||
|
||||
//坐标偏移
|
||||
local XOffset = FrameObj.Pos.x;
|
||||
|
|
@ -138,8 +153,17 @@ class Rindro_Animation {
|
|||
YRate = Fbuf.y;
|
||||
}
|
||||
|
||||
if (CurrentFrame) CurrentFrame.DrawEx(X + XOffset, Y + YOffset, Angle, RGBA, XRate, YRate);
|
||||
L_sq_ReleaseDrawImgModel();
|
||||
//线性减淡
|
||||
if ("GRAPHIC_EFFECT_LINEARDODGE" in FrameObj.Flag) {
|
||||
L_sq_SetDrawImgModel(2, 0);
|
||||
}
|
||||
|
||||
if (CurrentFrame) CurrentFrame.DrawExPng(FrameObj.Img_Index, X + XOffset, Y + YOffset, Angle, RGBA, XRate, YRate);
|
||||
|
||||
//线性减淡
|
||||
if ("GRAPHIC_EFFECT_LINEARDODGE" in FrameObj.Flag) {
|
||||
L_sq_ReleaseDrawImgModel();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -172,6 +196,14 @@ class Rindro_Animation {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
function DrawIndex(X, Y, Index) {
|
||||
// return;
|
||||
if (IsUsability) {
|
||||
FlushFrame(Index);
|
||||
DrawFrame(X, Y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -246,6 +278,65 @@ class Rindro_Draw_Character {
|
|||
},
|
||||
];
|
||||
|
||||
ENUM_RINDRO_JOB_FACE_HEIGHT = [
|
||||
//男鬼剑士
|
||||
{
|
||||
x = 11,
|
||||
y = 111
|
||||
},
|
||||
//女格斗
|
||||
{
|
||||
x = 9,
|
||||
y = 103
|
||||
},
|
||||
//男神枪手
|
||||
{
|
||||
x = 13,
|
||||
y = 131
|
||||
},
|
||||
//女魔法师
|
||||
{
|
||||
x = 14,
|
||||
y = 87
|
||||
},
|
||||
//男圣职者
|
||||
{
|
||||
x = 16,
|
||||
y = 126
|
||||
},
|
||||
//女神枪手
|
||||
{
|
||||
x = 11,
|
||||
y = 119
|
||||
},
|
||||
|
||||
//女暗夜使者
|
||||
{
|
||||
x = 12,
|
||||
y = 115
|
||||
},
|
||||
//男格斗家
|
||||
{
|
||||
x = 13,
|
||||
y = 119
|
||||
},
|
||||
//男魔法师
|
||||
{
|
||||
x = 13,
|
||||
y = 101
|
||||
},
|
||||
//黑暗武士
|
||||
{
|
||||
x = -42,
|
||||
y = -154
|
||||
},
|
||||
//缔造者
|
||||
{
|
||||
x = -46,
|
||||
y = -126
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
//获取角色AniBy装备
|
||||
function GetCharacAniByEqu(Job, Equ, AniName) {
|
||||
|
|
@ -379,8 +470,15 @@ class Rindro_Draw_Character {
|
|||
L_sq_DrawCode(Name, 44 + X + ENUM_RINDRO_JOB_TITLE_HEIGHT[Job].x - (LenheartTextClass.GetStringLength(Name) / 2), Y + ENUM_RINDRO_JOB_TITLE_HEIGHT[Job].y + 24, sq_RGBA(255, 255, 255, 250), 1, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function DrawFace(X, Y) {
|
||||
setClip(X, Y, X + 22, Y + 18); //开始裁切
|
||||
foreach(AniInfo in DrawInfo) {
|
||||
AniInfo.Ani.DrawIndex(X + ENUM_RINDRO_JOB_FACE_HEIGHT[Job].x, Y + ENUM_RINDRO_JOB_FACE_HEIGHT[Job].y, 0);
|
||||
}
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
}
|
||||
//鬼剑士
|
||||
//601580026 101550559
|
||||
// Sassq <- {};
|
||||
|
|
|
|||
|
|
@ -192,21 +192,22 @@ class MemoryTool {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
//解密读取内存地址的数据
|
||||
function DecodeMemoryData(Address) {
|
||||
local nEax, nEcx8, nEsi, nEdx, nTmp;
|
||||
nEax = L_sq_RA(Address);
|
||||
nEax = NativePointer(L_sq_I2P(Address)).readInt();
|
||||
if (nEax == -1) return nEax;
|
||||
nEcx8 = L_sq_RA(Address + 8);
|
||||
nEcx8 = NativePointer(L_sq_I2P(Address + 8)).readInt();
|
||||
if (nEcx8 == -1) return nEcx8;
|
||||
nEsi = L_sq_RA(0x1AF8D78);
|
||||
nEsi = NativePointer(L_sq_I2P(0x1AF8D78)).readInt();
|
||||
nEdx = nEax >> 16;
|
||||
nTmp = (nEdx << 2) + nEsi + 36;
|
||||
nEdx = L_sq_RA(nTmp);
|
||||
nEdx = NativePointer(L_sq_I2P(nTmp)).readInt();
|
||||
if (nEdx == -1) return nEdx;
|
||||
nEax = nEax & 65535;
|
||||
nTmp = (nEax << 2) + nEdx + 8468;
|
||||
nEax = L_sq_RA(nTmp);
|
||||
nEax = NativePointer(L_sq_I2P(nTmp)).readInt();
|
||||
if (nEax == -1) return nEax;
|
||||
nEdx = nEax & 0xFFFF;
|
||||
nEsi = nEdx << 16;
|
||||
|
|
@ -285,4 +286,47 @@ class MemoryTool {
|
|||
Bl.seek(0);
|
||||
return Bl.readn('f');
|
||||
}
|
||||
}
|
||||
|
||||
//大数字
|
||||
class longlong {
|
||||
Value = null;
|
||||
//构造函数 不管是不是string类型都要转成string类型
|
||||
constructor(StrValue) {
|
||||
Value = StrValue.tostring();
|
||||
}
|
||||
|
||||
function _add(other) {
|
||||
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "+"));
|
||||
}
|
||||
|
||||
function _sub(other) {
|
||||
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "-"));
|
||||
}
|
||||
|
||||
function _mul(other) {
|
||||
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "*"));
|
||||
}
|
||||
|
||||
function _div(other) {
|
||||
return L_sq_LongLongOperation(this.Value, other.Value, "/");
|
||||
}
|
||||
|
||||
function _unm() {
|
||||
return longlong(L_sq_LongLongOperation(longlong("0"), this.Value, "-"));
|
||||
}
|
||||
|
||||
function _modulo(other) {
|
||||
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "%"));
|
||||
}
|
||||
|
||||
function GetFormat(FType) {
|
||||
local Buf = L_sq_LongLongOperation(this.Value, FType, "format");
|
||||
if (Buf.len()< 2) return Buf + ".0";
|
||||
local Value = Buf.slice(0, -1);
|
||||
local Unit = Buf.slice(-1);
|
||||
local RetStr = format(FType + Unit, Value.tofloat());
|
||||
return RetStr;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -42,4 +42,19 @@ Rindro_Haker.LoadHook(0x674350, ["pointer", "int"],
|
|||
function(args) {
|
||||
|
||||
return null;
|
||||
});
|
||||
});
|
||||
|
||||
OnSetCharacter_Control.MarrySystem <- function() {
|
||||
if (getroottable().rawin("Yosin_14SkillXpos1") &&
|
||||
getroottable().rawin("Yosin_14SkillXpos2") &&
|
||||
getroottable().rawin("Yosin_14SkillYpos1") &&
|
||||
getroottable().rawin("Yosin_14SkillYpos2")
|
||||
) {
|
||||
for (local i = 6; i< 7; i++) {
|
||||
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x14, Yosin_14SkillXpos1 + (i * 31));
|
||||
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x18, Yosin_14SkillYpos1);
|
||||
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x14, Yosin_14SkillXpos2 + (i * 31));
|
||||
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x18, Yosin_14SkillYpos2);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
@ -100,6 +100,49 @@ class R_Utils {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
//获取Lst文件的返回Array
|
||||
function GetLstArr(Path, Header) {
|
||||
local Arr = [];
|
||||
local LstBuf = R_Utils.GetScriptFileReader(Path);
|
||||
if (LstBuf) {
|
||||
local IO = Sq_Point2Blob(L_sq_P2I(LstBuf.Buffer.C_Object), LstBuf.Size);
|
||||
local i = 2;
|
||||
while (i< LstBuf.Size) {
|
||||
if ((LstBuf.Size - i) >= 10) {
|
||||
IO.seek(i + 6); //内容指示位
|
||||
local FindKey = IO.readn('i');
|
||||
local Key = Rindro_Script.GetBinString(FindKey);
|
||||
if (Key) {
|
||||
local StrFilePath = Header + Key.tolower();
|
||||
Arr.append(StrFilePath);
|
||||
}
|
||||
} else break;
|
||||
i += 10;
|
||||
}
|
||||
}
|
||||
return Arr;
|
||||
}
|
||||
|
||||
//通过处理函数获取文件Table
|
||||
function GetFileTableByHandle(Path, Func) {
|
||||
local Data = {};
|
||||
local FileData = R_Utils.GetScriptFileReader(Path);
|
||||
if (FileData) {
|
||||
if (FileData.Size >= 7) {
|
||||
//创建Blob对象
|
||||
local IO = Sq_Point2Blob(L_sq_P2I(FileData.Buffer.C_Object), FileData.Size);
|
||||
//以5为单步从第二位开始遍历字节
|
||||
local i = 2;
|
||||
while (true) {
|
||||
if (i< FileData.Size && FileData.Size - i >= 5) {
|
||||
i = Func(Data, IO, i);
|
||||
} else break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return Data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -158,11 +201,11 @@ getroottable().DrawCodeCallBackFunc <- {};
|
|||
// // print("nut:" + format("%02x", args[3]));
|
||||
|
||||
// if (args[3]) {
|
||||
// // for (local i = 0; i< 10000; i++) {
|
||||
// local DrawCode = NativePointer((args[3])).readUnicodeString();
|
||||
// // print(DrawCode);
|
||||
// if (DrawCode in DrawCodeCallBackFunc)
|
||||
// DrawCodeCallBackFunc[DrawCode](args);
|
||||
// // print(args[3]);
|
||||
// // }
|
||||
// }
|
||||
// return null;
|
||||
// },
|
||||
|
|
@ -173,6 +216,7 @@ getroottable().DrawCodeCallBackFunc <- {};
|
|||
// return null;
|
||||
// });
|
||||
|
||||
|
||||
//绘制城镇回调
|
||||
getroottable().DrawTownCallBackFunc <- {};
|
||||
Rindro_Haker.LoadHook(0x1108700, ["int", "void"],
|
||||
|
|
@ -193,8 +237,65 @@ Rindro_Haker.LoadHook(0x1108700, ["int", "void"],
|
|||
|
||||
|
||||
//顺图
|
||||
function Rindro_Gm_MoveMap()
|
||||
{
|
||||
|
||||
function Rindro_Gm_MoveMap(obj) {
|
||||
if (sq_IsKeyDown(OPTION_HOTKEY_PAUSE_IN_TOWER, ENUM_SUBKEY_TYPE_ALL) && RINDROLOCAL) {
|
||||
if (KeyPress.isKeyPress(0)) L_sq_MoveMap(2);
|
||||
if (KeyPress.isKeyPress(1)) L_sq_MoveMap(0);
|
||||
if (KeyPress.isKeyPress(2)) L_sq_MoveMap(3);
|
||||
if (KeyPress.isKeyPress(3)) L_sq_MoveMap(1);
|
||||
}
|
||||
}
|
||||
getroottable()["LenheartFuncTab"].rawset("Rindro_Gm_MoveMapFuncN", Rindro_Gm_MoveMap);
|
||||
getroottable()["LenheartFuncTab"].rawset("Rindro_Gm_MoveMapFuncN", Rindro_Gm_MoveMap);
|
||||
|
||||
|
||||
//丢弃物品回调
|
||||
getroottable().DiscardItemCallBackFunc <- {};
|
||||
|
||||
function Sq_DiscardItem(Item) {
|
||||
local Flag = true;
|
||||
foreach(Func in DiscardItemCallBackFunc) {
|
||||
local Ret = Func(Item);
|
||||
if (!Ret) Flag = false;
|
||||
}
|
||||
return Flag;
|
||||
}
|
||||
|
||||
//从exe获取字符串
|
||||
getroottable()["Sq_GetExeStr_Map"] <- {};
|
||||
function Sq_GetExeStr_Event(Index)
|
||||
{
|
||||
if(Index in getroottable()["Sq_GetExeStr_Map"]){
|
||||
return getroottable()["Sq_GetExeStr_Map"][Index](Index);
|
||||
}
|
||||
return Index;
|
||||
}
|
||||
|
||||
|
||||
// //hook打开窗口
|
||||
// Rindro_Haker.LoadHook(0xE6E070, ["int","int","int","int","void"],
|
||||
// function(args) {
|
||||
|
||||
// return null;
|
||||
// },
|
||||
// function(args) {
|
||||
// // print(666);
|
||||
// // print(format("%02x", args.pop()));
|
||||
// // TTTAni <- args.pop();
|
||||
// return null;
|
||||
// });
|
||||
|
||||
|
||||
// Rindro_Haker.LoadHook(0xE6E070, ["int", "int", "int", "int", "int"],
|
||||
// function(args) {
|
||||
// print("nut:" + format("%02x", args[0]));
|
||||
// print("nut:" + format("%02x", args[1]));
|
||||
// print("nut:" + format("%02x", args[2]));
|
||||
// print("nut:" + format("%02x", args[3]));
|
||||
// return null;
|
||||
// },
|
||||
// function(args) {
|
||||
// // print(666);
|
||||
// // print(format("%02x", args.pop()));
|
||||
// // TTTAni <- args.pop();
|
||||
// return null;
|
||||
// });
|
||||
|
|
@ -6,8 +6,12 @@
|
|||
*/
|
||||
class Rindro_Png {
|
||||
C_Object = null;
|
||||
Path = null;
|
||||
Idx = null;
|
||||
|
||||
constructor(Object) {
|
||||
constructor(Object, Path, Idx) {
|
||||
this.Path = Path;
|
||||
this.Idx = Idx;
|
||||
this.C_Object = Object;
|
||||
}
|
||||
|
||||
|
|
@ -22,15 +26,18 @@ class Rindro_Png {
|
|||
class Rindro_Image {
|
||||
|
||||
Img = null;
|
||||
Path = null;
|
||||
|
||||
constructor(Path) {
|
||||
this.Path = Path;
|
||||
//读取Img
|
||||
Img = L_Sq_CallFunc(0x11C0410, "int", FFI_THISCALL, ["int", "int", "int"], NativePointer(0x1B4684C).readInt(), 0, L_sq_P2I(Memory.allocUtf8String(Path).C_Object));
|
||||
}
|
||||
|
||||
function GetPng(Idx) {
|
||||
if (Img) {
|
||||
return Rindro_Png(L_Sq_CallFunc(0x11AA190, "int", FFI_THISCALL, ["int", "int"], Img, Idx));
|
||||
local PngObject = L_Sq_CallFunc(0x11AA190, "int", FFI_THISCALL, ["int", "int"], Img, Idx);
|
||||
return Rindro_Png(PngObject, Path, Idx);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ class JSONParser {
|
|||
if (vargc > 0) converter = vargc[0];
|
||||
|
||||
|
||||
// actions for string tokens
|
||||
|
||||
local string = {
|
||||
go = function() {
|
||||
state = "ok";
|
||||
|
|
@ -55,7 +55,7 @@ class JSONParser {
|
|||
}.bindenv(this)
|
||||
};
|
||||
|
||||
// the actions for number tokens
|
||||
|
||||
local number = {
|
||||
go = function() {
|
||||
state = "ok";
|
||||
|
|
@ -75,8 +75,8 @@ class JSONParser {
|
|||
};
|
||||
|
||||
|
||||
// action table
|
||||
// describes where the state machine will go from each given state
|
||||
|
||||
|
||||
local action = {};
|
||||
|
||||
|
||||
|
|
@ -188,9 +188,9 @@ class JSONParser {
|
|||
|
||||
action[":"] <- {
|
||||
colon = function() {
|
||||
// Check if the key already exists
|
||||
// NOTE previous code used 'if (key in container)...'
|
||||
// but this finds table ('container') member methods too
|
||||
|
||||
|
||||
|
||||
local err = false;
|
||||
foreach(akey, avalue in container) {
|
||||
if (akey == key) err = true;
|
||||
|
|
@ -271,11 +271,11 @@ class JSONParser {
|
|||
|
||||
|
||||
|
||||
//
|
||||
|
||||
state = "go";
|
||||
stack = [];
|
||||
|
||||
// current tokenizeing position
|
||||
|
||||
local start = 0;
|
||||
|
||||
try {
|
||||
|
|
@ -285,14 +285,14 @@ class JSONParser {
|
|||
while (token = tokenizer.nextToken(str, start)) {
|
||||
|
||||
if ("ptfn" == token.type) {
|
||||
// punctuation/true/false/null
|
||||
|
||||
action[token.value][state]();
|
||||
} else if ("number" == token.type) {
|
||||
// number
|
||||
|
||||
value = token.value;
|
||||
number[state]();
|
||||
} else if ("string" == token.type) {
|
||||
// string
|
||||
|
||||
value = tokenizer.unescape(token.value);
|
||||
string[state]();
|
||||
}
|
||||
|
|
@ -322,11 +322,11 @@ class JSONParser {
|
|||
function _convert(value, type, converter) {
|
||||
if ("function" == typeof converter) {
|
||||
|
||||
// # of params for converter function
|
||||
|
||||
|
||||
local parametercCount = 2;
|
||||
|
||||
// .getinfos() is missing on ei platform
|
||||
|
||||
if ("getinfos" in converter) {
|
||||
parametercCount = converter.getinfos().parameters.len() -
|
||||
1;
|
||||
|
|
@ -361,19 +361,19 @@ class _JSONTokenizer {
|
|||
_unescapeRegex = null;
|
||||
|
||||
constructor() {
|
||||
// punctuation/true/false/null
|
||||
|
||||
this._ptfnRegex = regexp("^(?:\\,|\\:|\\[|\\]|\\{|\\}|true|false|null)");
|
||||
|
||||
// numbers
|
||||
|
||||
this._numberRegex = regexp("^(?:\\-?\\d+(?:\\.\\d*)?(?:[eE][+\\-]?\\d+)?)");
|
||||
|
||||
// strings
|
||||
|
||||
this._stringRegex = regexp("^(?:\\\"((?:[^\\r\\n\\t\\\\\\\"]|\\\\(?:[\"\\\\\\/trnfb]|u[0-9a-fA-F]{4}))*)\\\")");
|
||||
|
||||
// ltrim pattern
|
||||
|
||||
this._ltrimRegex = regexp("^[\\s\\t\\n\\r]*");
|
||||
|
||||
// string unescaper tokenizer pattern
|
||||
|
||||
this._unescapeRegex = regexp("\\\\(?:(?:u\\d{4})|[\\\"\\\\/bfnrt])");
|
||||
}
|
||||
|
||||
|
|
@ -389,20 +389,20 @@ class _JSONTokenizer {
|
|||
length,
|
||||
whitespaces;
|
||||
|
||||
// count # of left-side whitespace chars
|
||||
|
||||
whitespaces = this._leadingWhitespaces(str, start);
|
||||
start += whitespaces;
|
||||
|
||||
if (m = this._ptfnRegex.capture(str, start)) {
|
||||
// punctuation/true/false/null
|
||||
|
||||
value = str.slice(m[0].begin, m[0].end);
|
||||
type = "ptfn";
|
||||
} else if (m = this._numberRegex.capture(str, start)) {
|
||||
// number
|
||||
|
||||
value = str.slice(m[0].begin, m[0].end);
|
||||
type = "number";
|
||||
} else if (m = this._stringRegex.capture(str, start)) {
|
||||
// string
|
||||
|
||||
value = str.slice(m[1].begin, m[1].end);
|
||||
type = "string";
|
||||
} else {
|
||||
|
|
@ -429,7 +429,7 @@ class _JSONTokenizer {
|
|||
}
|
||||
}
|
||||
|
||||
// unesacape() replacements table
|
||||
|
||||
_unescapeReplacements = {
|
||||
b = "\b",
|
||||
f = "\f",
|
||||
|
|
@ -449,7 +449,7 @@ class _JSONTokenizer {
|
|||
if (m) {
|
||||
local token = str.slice(m[0].begin, m[0].end);
|
||||
|
||||
// append chars before match
|
||||
|
||||
local pre = str.slice(start, m[0].begin);
|
||||
res += pre;
|
||||
|
||||
|
|
@ -482,8 +482,8 @@ class JSONEncoder {
|
|||
|
||||
static VERSION = "2.0.0";
|
||||
|
||||
// max structure depth
|
||||
// anything above probably has a cyclic ref
|
||||
|
||||
|
||||
static _maxDepth = 32;
|
||||
|
||||
|
||||
|
|
@ -495,7 +495,7 @@ class JSONEncoder {
|
|||
function _encode(val, ...) {
|
||||
local depth = 0;
|
||||
if (vargc > 0) depth = vargv[0];
|
||||
// detect cyclic reference
|
||||
|
||||
if (depth > this._maxDepth) {
|
||||
throw "Possible cyclic reference";
|
||||
}
|
||||
|
|
@ -511,7 +511,7 @@ class JSONEncoder {
|
|||
case "class":
|
||||
s = "";
|
||||
|
||||
// serialize properties, but not functions
|
||||
|
||||
foreach(k, v in val) {
|
||||
if (typeof v != "function") {
|
||||
s += ",\"" + k + "\":" + this._encode(v, depth + 1);
|
||||
|
|
@ -547,12 +547,12 @@ class JSONEncoder {
|
|||
|
||||
if ("_serializeRaw" in val && typeof val._serializeRaw == "function") {
|
||||
|
||||
// include value produced by _serializeRaw()
|
||||
|
||||
r += val._serializeRaw().tostring();
|
||||
|
||||
} else if ("_serialize" in val && typeof val._serialize == "function") {
|
||||
|
||||
// serialize instances by calling _serialize method
|
||||
|
||||
r += this._encode(val._serialize(), depth + 1);
|
||||
|
||||
} else {
|
||||
|
|
@ -561,15 +561,15 @@ class JSONEncoder {
|
|||
|
||||
try {
|
||||
|
||||
// iterate through instances which implement _nexti meta-method
|
||||
|
||||
foreach(k, v in val) {
|
||||
s += ",\"" + k + "\":" + this._encode(v, depth + 1);
|
||||
}
|
||||
|
||||
} catch (e) {
|
||||
|
||||
// iterate through instances w/o _nexti
|
||||
// serialize properties, but not functions
|
||||
|
||||
|
||||
foreach(k, v in val.getclass()) {
|
||||
if (typeof v != "function") {
|
||||
s += ",\"" + k + "\":" + this._encode(val[k], depth + 1);
|
||||
|
|
@ -585,13 +585,13 @@ class JSONEncoder {
|
|||
break;
|
||||
|
||||
case "blob":
|
||||
// This is a workaround for a known bug:
|
||||
// on device side Blob.tostring() returns null
|
||||
// (instaead of an empty string)
|
||||
|
||||
|
||||
|
||||
r += "\"" + (val.len() ? this._escape(val.tostring()) : "") + "\"";
|
||||
break;
|
||||
|
||||
// strings and all other
|
||||
|
||||
default:
|
||||
r += "\"" + this._escape(val.tostring()) + "\"";
|
||||
break;
|
||||
|
|
@ -608,7 +608,7 @@ class JSONEncoder {
|
|||
local ch1 = (str[i] & 0xFF);
|
||||
|
||||
if ((ch1 & 0x80) == 0x00) {
|
||||
// 7-bit Ascii
|
||||
|
||||
|
||||
ch1 = format("%c", ch1);
|
||||
|
||||
|
|
@ -637,16 +637,16 @@ class JSONEncoder {
|
|||
} else {
|
||||
|
||||
if ((ch1 & 0xE0) == 0xC0) {
|
||||
// 110xxxxx = 2-byte unicode
|
||||
|
||||
local ch2 = (str[++i] & 0xFF);
|
||||
res += format("%c%c", ch1, ch2);
|
||||
} else if ((ch1 & 0xF0) == 0xE0) {
|
||||
// 1110xxxx = 3-byte unicode
|
||||
|
||||
local ch2 = (str[++i] & 0xFF);
|
||||
local ch3 = (str[++i] & 0xFF);
|
||||
res += format("%c%c%c", ch1, ch2, ch3);
|
||||
} else if ((ch1 & 0xF8) == 0xF0) {
|
||||
// 11110xxx = 4 byte unicode
|
||||
|
||||
local ch2 = (str[++i] & 0xFF);
|
||||
local ch3 = (str[++i] & 0xFF);
|
||||
local ch4 = (str[++i] & 0xFF);
|
||||
|
|
|
|||
|
|
@ -24,6 +24,14 @@ class BlobEx extends blob {
|
|||
return readn('w');
|
||||
}
|
||||
|
||||
function charPtrToInt(arr) {
|
||||
local value = ((arr[0]) << 0) |
|
||||
((arr[1]) << 8) |
|
||||
((arr[2]) << 16) |
|
||||
((arr[3]) << 24);
|
||||
return value;
|
||||
}
|
||||
|
||||
function GetInt() {
|
||||
local CurTPos = tell();
|
||||
local Ret = charPtrToInt([this[CurTPos], this[CurTPos + 1], this[CurTPos + 2], this[CurTPos + 3]]);
|
||||
|
|
@ -55,6 +63,59 @@ class BlobEx extends blob {
|
|||
|
||||
Rindro_Script_Bin_Data <- [];
|
||||
|
||||
class _PVF_Data_ {
|
||||
//数据
|
||||
Data = null;
|
||||
//位置
|
||||
Pos = 0;
|
||||
//最大值
|
||||
Max = 0;
|
||||
|
||||
function _typeof() {
|
||||
return "pvf_data";
|
||||
}
|
||||
|
||||
constructor(gData) {
|
||||
Data = gData;
|
||||
Max = gData.len();
|
||||
}
|
||||
|
||||
function Last() {
|
||||
if (Pos > 0) {
|
||||
Pos--;
|
||||
return Get();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
function Seek(i) {
|
||||
if (Pos > 0 && Pos<(Max - 1)) {
|
||||
Pos = i;
|
||||
}
|
||||
}
|
||||
|
||||
function Get() {
|
||||
local Ret = Data[Pos];
|
||||
if (Pos<(Max - 1)) {
|
||||
Pos++;
|
||||
}
|
||||
return Ret;
|
||||
}
|
||||
|
||||
function Eof() {
|
||||
if (Pos == Max - 1)
|
||||
return true;
|
||||
}
|
||||
|
||||
function Next() {
|
||||
if (Pos<(Max - 1)) {
|
||||
Pos++;
|
||||
return Get();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
class Rindro_Script {
|
||||
|
||||
function Get_Ani_Flip_Type(data) {
|
||||
|
|
@ -215,6 +276,8 @@ class Rindro_Script {
|
|||
if (Len > 0) {
|
||||
local Str = Ro.GetString(Len);
|
||||
Rindro_Script_Bin_Data.append(Str);
|
||||
} else {
|
||||
Rindro_Script_Bin_Data.append("");
|
||||
}
|
||||
CurrentIndex++;
|
||||
}
|
||||
|
|
@ -222,8 +285,12 @@ class Rindro_Script {
|
|||
}
|
||||
|
||||
function GetBinString(Index) {
|
||||
if (Index< Rindro_Script_Bin_Data.len()) return Rindro_Script_Bin_Data[Index];
|
||||
return "";
|
||||
if (!(getroottable().rawin("ENUM_TW_GROWTYPE_VERS")) || ENUM_TW_GROWTYPE_VERS >= 24112901) //24112901更新了新的读取bin文件的方式
|
||||
return L_sq_StringBinById(Index);
|
||||
else {
|
||||
if (Index< Rindro_Script_Bin_Data.len()) return Rindro_Script_Bin_Data[Index];
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
||||
function GetLoadString(Key) {
|
||||
|
|
@ -235,7 +302,7 @@ class Rindro_Script {
|
|||
local out = "";
|
||||
IO.seek(i); //内容指示位
|
||||
local currentByte = IO.readn('c'); //内容指示位
|
||||
local after = IO.readn('i');
|
||||
local after = IO.GetInt();
|
||||
switch (currentByte) {
|
||||
case 10: {
|
||||
IO.seek(i - 4);
|
||||
|
|
@ -251,8 +318,9 @@ class Rindro_Script {
|
|||
break;
|
||||
}
|
||||
case 2: {
|
||||
out += after + '\t';
|
||||
break;
|
||||
IO.seek(-4, 'c');
|
||||
local ret = IO.readn('i');
|
||||
return ret;
|
||||
}
|
||||
case 4: {
|
||||
local Bbuf = blob(4);
|
||||
|
|
@ -289,7 +357,8 @@ class Rindro_Script {
|
|||
local EquipmentAtt = {};
|
||||
if (ReadObject.Size >= 7) {
|
||||
//创建Blob对象
|
||||
local IO = Sq_Point2Blob(L_sq_P2I(ReadObject.Buffer.C_Object), ReadObject.Size);
|
||||
local IOBUF = Sq_Point2Blob(L_sq_P2I(ReadObject.Buffer.C_Object), ReadObject.Size);
|
||||
local IO = BlobEx(IOBUF.readblob(IOBUF.len()));
|
||||
//以5为单步从第二位开始遍历字节
|
||||
local i = 2;
|
||||
while (true) {
|
||||
|
|
@ -320,10 +389,10 @@ class Rindro_Script {
|
|||
EquipmentAtt["Aurora"] <- {};
|
||||
EquipmentAtt["Aurora"].Back <- [];
|
||||
EquipmentAtt["Aurora"].Front <- [];
|
||||
local Count = Rindro_Script.UnpackData(IO, i).tointeger() - 9;
|
||||
local Count = Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
for (local z = 0; z< Count; z++) {
|
||||
local Layer = Rindro_Script.UnpackData(IO, i).tointeger() - 9;
|
||||
local Layer = Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
local Path = Rindro_Script.UnpackData(IO, i).tolower();
|
||||
i += 5;
|
||||
|
|
@ -343,9 +412,9 @@ class Rindro_Script {
|
|||
EquipmentAtt["Ani_" + Job] <- {};
|
||||
i += 5;
|
||||
|
||||
local Index1 = Rindro_Script.UnpackData(IO, i).tointeger() - 9;
|
||||
local Index1 = Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
local Index2 = Rindro_Script.UnpackData(IO, i).tointeger() - 9;
|
||||
local Index2 = Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
EquipmentAtt["Ani_" + Job].variation <- [Index1, Index2];
|
||||
EquipmentAtt["Ani_" + Job].layer_variation <- [];
|
||||
|
|
@ -358,7 +427,7 @@ class Rindro_Script {
|
|||
break;
|
||||
} else if (Ret == "[layer variation]") {
|
||||
local InfoBuf = {};
|
||||
InfoBuf.Zorder <- Rindro_Script.UnpackData(IO, i).tointeger() - 9;
|
||||
InfoBuf.Zorder <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
InfoBuf.Path <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
|
|
@ -594,6 +663,39 @@ class Rindro_Script {
|
|||
}
|
||||
return AniObject;
|
||||
}
|
||||
|
||||
//获取文件并处理
|
||||
function GetFileData(Path, Func) {
|
||||
local N_Buffer = R_Utils.GetScriptFileReader(Path);
|
||||
if (N_Buffer) {
|
||||
local IO = Sq_Point2Blob(L_sq_P2I(N_Buffer.Buffer.C_Object), N_Buffer.Size);
|
||||
IO = BlobEx(IO.readblob(IO.len()));
|
||||
return Rindro_Script.ResolvingData(IO, Func, Path);
|
||||
} else {
|
||||
print(Path + "找不到文件!");
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function ResolvingData(IO, Func, Path) {
|
||||
local DataTable = {};
|
||||
DataTable.filepath <- Path;
|
||||
local DataArr = [];
|
||||
local Length = IO.len();
|
||||
if (Length >= 7) {
|
||||
local i = 2;
|
||||
while (true) {
|
||||
if (i< Length && Length - i >= 5) {
|
||||
local str = Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
DataArr.push(str);
|
||||
} else break;
|
||||
}
|
||||
Func(DataTable, _PVF_Data_(DataArr));
|
||||
return DataTable;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
Rindro_Script.GetBin();
|
||||
// Rindro_Script.GetBin();
|
||||
Rindro_Script.InitLoad_String();
|
||||
|
|
@ -104,10 +104,10 @@ function Lenheart_Character_GetAttribute(Address) {
|
|||
return Info;
|
||||
}
|
||||
|
||||
function Rindro_GetCharacterInfoCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
Jso.op <- 20069011;
|
||||
Jso.Info <- Lenheart_Character_GetAttribute(null);
|
||||
Rindro_BaseToolClass.SendPackEx(Jso);
|
||||
}
|
||||
Pack_Control.rawset(20069010, Rindro_GetCharacterInfoCallBack);
|
||||
// function Rindro_GetCharacterInfoCallBack(Chunk) {
|
||||
// local Jso = Json.Decode(Chunk);
|
||||
// Jso.op <- 20069011;
|
||||
// Jso.Info <- Lenheart_Character_GetAttribute(null);
|
||||
// Rindro_BaseToolClass.SendPackEx(Jso);
|
||||
// }
|
||||
// Pack_Control.rawset(20069010, Rindro_GetCharacterInfoCallBack);
|
||||
|
|
@ -1,483 +0,0 @@
|
|||
/*
|
||||
文件名:ItemData.nut
|
||||
路径:Base/_Z_Data/ItemData.nut
|
||||
创建日期:2024-08-06 23:58
|
||||
文件用途:用于存放Item数据
|
||||
*/
|
||||
if (!getroottable().rawin("Rindro_ItemInfoObject")) Rindro_ItemInfoObject <- {};
|
||||
if (!getroottable().rawin("Rindro_ItemInfoBuf")) Rindro_ItemInfoBuf <- "";
|
||||
if (!getroottable().rawin("RINDRO_INIT_FLAG")) RINDRO_INIT_FLAG <- true;
|
||||
|
||||
//获取本地配置
|
||||
function Rindro_GetLocalConfig() {
|
||||
// local Buf = L_sq_GetLocalConfig();
|
||||
// if (!Buf) {
|
||||
// return {
|
||||
// md5 = -1
|
||||
// };
|
||||
// } else return dofile("Rindro_Config.cfg");
|
||||
}
|
||||
|
||||
//获取本地信息版本
|
||||
function Rindro_GetMd5() {
|
||||
// return RINDRO_CONFIG.md5;
|
||||
return -1;
|
||||
}
|
||||
|
||||
//初始化各种信息
|
||||
function Rindro_Init() {
|
||||
// //道具信息
|
||||
// local ItemArray = getroottable().RINDRO_CONFIG.itemInfo;
|
||||
// Rindro_ItemInfoBuf = "";
|
||||
// foreach(Value in ItemArray) {
|
||||
// if (Value.Name2.len() == 0)
|
||||
// Value.Name2 = "Rindro-Team";
|
||||
// getroottable().Rindro_ItemInfoObject[Value.Id] <- Value;
|
||||
// }
|
||||
// RINDRO_INIT_FLAG = true;
|
||||
}
|
||||
//更新本地配置
|
||||
function Rindro_ItemInfoCallBack(Chunk) {
|
||||
// local Jso = Json.Decode(Chunk);
|
||||
// if ("ZipSEnd" in Jso) {
|
||||
// getroottable().Rindro_ItemInfoObject <- {};
|
||||
// Rindro_ItemInfoBuf += Jso.ZipS;
|
||||
// local ZlibStrBuf = L_sq_Dezlib(Rindro_ItemInfoBuf);
|
||||
// if (ZlibStrBuf == "null") {
|
||||
// Rindro_ItemInfoBuf = "";
|
||||
// return;
|
||||
// }
|
||||
// ZlibStrBuf = L_sq_DecondeJson(ZlibStrBuf);
|
||||
// L_sq_SetLocalConfig("return " + ZlibStrBuf);
|
||||
// getroottable().RINDRO_CONFIG <- dofile("Rindro_Config.cfg");
|
||||
// Rindro_Init();
|
||||
// } else {
|
||||
// Rindro_ItemInfoBuf += Jso.ZipS;
|
||||
// }
|
||||
}
|
||||
Pack_Control.rawset(20240422, Rindro_ItemInfoCallBack);
|
||||
//无需更新本地配置
|
||||
Pack_Control.rawset(20240424, function(Chunk) {
|
||||
Rindro_Init();
|
||||
});
|
||||
|
||||
|
||||
//道具绘制类
|
||||
class ItemInfoClass {
|
||||
|
||||
//Gm模式
|
||||
GmModel = true;
|
||||
|
||||
Info = null;
|
||||
PageLength = 0;
|
||||
|
||||
//静态品级颜色
|
||||
static RarityColor = [
|
||||
0xFFFFFFFF, //白
|
||||
0xFFEDD568, //蓝
|
||||
0xFFFF6BB3, //紫
|
||||
0xFFF000FF, //粉
|
||||
0xFF00B1FF, //黄
|
||||
0xFF6666FF, //红
|
||||
0xFF0055FF, //橙
|
||||
];
|
||||
|
||||
//我的品级颜色
|
||||
MyRarityColor = null;
|
||||
//我的售价长度
|
||||
MyPriceLength = null;
|
||||
//我的冷却时间长度
|
||||
MyCoolTimeLength = null;
|
||||
|
||||
//获取真实类型
|
||||
function GetRealType(Type) {
|
||||
switch (Type) {
|
||||
case "[material]":
|
||||
return "材料";
|
||||
case "[recipe]":
|
||||
return "设计图";
|
||||
case "[upgradable legacy]":
|
||||
return "袖珍罐";
|
||||
case "[quest]":
|
||||
return "任务";
|
||||
case "[booster random]":
|
||||
case "[multi upgradable legacy]":
|
||||
case "[booster selection]":
|
||||
case "[cera booster]":
|
||||
case "[unlimited waste]":
|
||||
case "[usable cera package]":
|
||||
case "[only effect]":
|
||||
return "消耗品";
|
||||
case "[weapon]":
|
||||
return "武器";
|
||||
case "[title name]":
|
||||
return "称号";
|
||||
case "[coat]":
|
||||
return "上衣";
|
||||
case "[pants]":
|
||||
return "下衣";
|
||||
case "[hat]":
|
||||
return "帽子";
|
||||
case "[shoulder]":
|
||||
return "护肩";
|
||||
case "[waist]":
|
||||
return "腰带";
|
||||
case "[shoes]":
|
||||
return "鞋子";
|
||||
case "[amulet]":
|
||||
return "项链";
|
||||
case "[wrist]":
|
||||
return "手镯";
|
||||
case "[ring]":
|
||||
return "戒指";
|
||||
case "[support]":
|
||||
return "辅助装备";
|
||||
case "[aurora avatar]":
|
||||
return "光环";
|
||||
case "[magic stone]":
|
||||
return "魔法石";
|
||||
case "[creature]":
|
||||
return "寵物";
|
||||
case "[artifact red]":
|
||||
return "宠物装备 红";
|
||||
case "[artifact blue]":
|
||||
return "宠物装备 蓝";
|
||||
case "[artifact green]":
|
||||
return "宠物装备 绿";
|
||||
case "[skin avatar]":
|
||||
return "皮肤";
|
||||
case "[hair avatar]":
|
||||
return "头部装扮";
|
||||
case "[waist avatar]":
|
||||
return "腰部装扮";
|
||||
case "[hat avatar]":
|
||||
return "帽子装扮";
|
||||
case "[coat avatar]":
|
||||
return "上衣装扮";
|
||||
case "[face avatar]":
|
||||
return "脸部装扮";
|
||||
case "[breast avatar]":
|
||||
return "胸部装扮";
|
||||
case "[pants avatar]":
|
||||
return "下装装扮";
|
||||
case "[shoes avatar]":
|
||||
return "鞋装扮";
|
||||
default:
|
||||
return "道具";
|
||||
}
|
||||
}
|
||||
|
||||
constructor(gInfo) {
|
||||
Info = clone(gInfo);
|
||||
|
||||
//Gm模式显示编号
|
||||
if (GmModel) Info.Name += "[" + Info.Id + "]";
|
||||
|
||||
//配置品级颜色
|
||||
if (Info.Rarity< 0 || Info.Rarity > 6) {
|
||||
MyRarityColor = Info.Rarity;
|
||||
} else {
|
||||
MyRarityColor = RarityColor[Info.Rarity];
|
||||
}
|
||||
|
||||
//配置售价长度
|
||||
if ("Price" in Info) {
|
||||
MyPriceLength = LenheartTextClass.GetStringLength(Info.Price.tostring());
|
||||
}
|
||||
|
||||
//配置冷却时间长度
|
||||
if ("CoolTime" in Info) {
|
||||
MyCoolTimeLength = LenheartTextClass.GetStringLength((Info.CoolTime / 1000.0).tostring());
|
||||
}
|
||||
|
||||
//配置类型
|
||||
if ("Type" in Info) {
|
||||
Info.Type = GetRealType(Info.Type);
|
||||
}
|
||||
//配置装备类型
|
||||
else if ("EquipmentType" in Info) {
|
||||
Info.Type <- GetRealType(Info.EquipmentType);
|
||||
}
|
||||
|
||||
PageLength += 72;
|
||||
CheckStrLength();
|
||||
}
|
||||
|
||||
function CheckInfoLength(TableKey, AddLength) {
|
||||
if (TableKey in Info) {
|
||||
PageLength += AddLength;
|
||||
}
|
||||
}
|
||||
|
||||
function CheckStrLength() {
|
||||
if ("Explain" in Info) {
|
||||
// local Buf = LenheartTextClass.GetStringLength(Info.Explain.tostring());
|
||||
// local Pn = (Buf / 211.0);
|
||||
// if (Pn< 1) PageLength += 12;
|
||||
// if (Pn > 1) Pn = Pn.tointeger() + 1;
|
||||
// PageLength += (16 * Pn);
|
||||
|
||||
local Buf = L_sq_GetStringDrawArray(Info.Explain, 220);
|
||||
PageLength += (Buf.len() * 16);
|
||||
// PageLength += 12;
|
||||
}
|
||||
}
|
||||
|
||||
//高级绘制文字(带换行)
|
||||
function L_sq_DrawCode_Ex(str, x, y, rgba, mb, jc, hl) {
|
||||
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 Show(X, Y) {
|
||||
if (X< 0) X = 0;
|
||||
if ((X + 211) > 800) X = (800 - 211);
|
||||
if (Y< 0) Y = 0;
|
||||
if (Y + PageLength > 600) Y = 600 - PageLength;
|
||||
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X, Y, 211, PageLength, "interface2/popup/popup.img", 134, 6, 12, 6, 13);
|
||||
|
||||
//绘制名字 和 图标
|
||||
if ("Id" in Info) L_Sq_DrawItem(X + 8 + 174, Y + 8, Info.Id, 1, 0, 0, 0);
|
||||
if ("Name2" in Info) L_sq_DrawCode(Info.Name2, X + 8, Y + 9, MyRarityColor, 1, 1);
|
||||
if ("Name" in Info) L_sq_DrawCode(Info.Name, X + 8, Y + 23, MyRarityColor, 1, 1);
|
||||
|
||||
|
||||
//绘制线
|
||||
L_sq_DrawImg("interface2/popup/popup.img", 270, X + 7, Y + 26 + 16);
|
||||
|
||||
//绘制重量
|
||||
if ("Weight" in Info) {
|
||||
L_sq_DrawCode((Info.Weight.tofloat() / 1000.0).tostring() + "kg", X + 7, Y + 24 + 24, 0xFFFFFFFF, 1, 1);
|
||||
}
|
||||
|
||||
//绘制售价
|
||||
if ("Price" in Info) {
|
||||
L_sq_DrawCode("金币", X + 186, Y + 24 + 24, 0xFFFFFFFF, 1, 1);
|
||||
L_sq_DrawCode(Info.Price.tostring(), X - MyPriceLength + 186, Y + 24 + 24, 0xFFFFFFFF, 1, 1);
|
||||
}
|
||||
|
||||
|
||||
//绘制类型
|
||||
if ("Type" in Info) {
|
||||
L_sq_DrawCode(Info.Type.tostring(), X + 7, Y + 48 + 16, 0xFFFFFFFF, 1, 1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//绘制冷却时间
|
||||
if ("CoolTime" in Info) {
|
||||
L_sq_DrawCode("秒", X + 186 + 12, Y + 48 + 16, 0xFFFFFFFF, 1, 1);
|
||||
L_sq_DrawCode((Info.CoolTime / 1000.0).tostring(), X - MyCoolTimeLength + 214 - 18, Y + 48 + 16, 0xFFFFFFFF, 1, 1);
|
||||
}
|
||||
|
||||
//绘制普通描述
|
||||
if ("Explain" in Info) {
|
||||
local a = L_sq_GetStringDrawArray(Info.Explain, 220);
|
||||
foreach(Pos, va in a) {
|
||||
L_sq_DrawCode(va, X + 7, Y + 48 + 12 + 24 + (Pos * 16), 0xFFEDD568, 1, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// print(L_sq_P2I(Memory.allocUtf8String("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img").C_Object));
|
||||
// local Npk = L_Sq_CallFunc(0x11C0410, "int", FFI_THISCALL, ["int", "int", "int"], L_sq_RA(0x1B4684C), 0, L_sq_P2I(Memory.allocUtf8String("interface2/event/chn_event_2016/160927_joustmatches/joustmatches_ui.img").C_Object));
|
||||
// print(Npk);
|
||||
// local Img = L_Sq_CallFunc(0x11AA190, "int", FFI_THISCALL, ["int", "int"], Npk, 0);
|
||||
// print(format("%02x", Img));
|
||||
// print("width: " + NativePointer(Img).add(0x1C).readShort());
|
||||
// print("height: " + NativePointer(Img).add(0x20).readShort());
|
||||
|
||||
// local ReadPath = L_sq_P2I(Memory.allocUtf8String("etc/rindro/horseguessing/horseguessing.dat").C_Object);
|
||||
// print(format("%02x", ReadPath));
|
||||
// local Reader = Memory.alloc(1024);
|
||||
// local ReadBuffer = L_sq_P2I(Reader.C_Object);
|
||||
// print(format("%02x", ReadBuffer));
|
||||
// L_Sq_CallFunc(0x11A2030, "int", FFI_FASTCALL, ["int", "int", "int", "int", "int", "int"], 0x1D17638, 0, ReadPath, ReadBuffer, 0x100000, 0x19DAF4);
|
||||
// // print(Reader.readUtf8String());
|
||||
// local Func = compilestring(Reader.readUtf8String());
|
||||
// local Ret = Func();
|
||||
// print(Ret);
|
||||
|
||||
// local Tabs = dofile("aw.nut");
|
||||
// print(Tabs.itemInfo.len());
|
||||
// local Address = L_Sq_GetExportByName("fopen");
|
||||
// print(Address);
|
||||
// L_Sq_CallFunc(0xE6E070, "void", 4, ["int", "int", "int", "int", "char"], L_sq_RA(0x1A5FB20), 0, 33, "", 0x65535);
|
||||
|
||||
// Rindro_Haker.LoadHook(0x4C9FA0, ["pointer", "int", "void"],
|
||||
// function(args) {
|
||||
// // print(555);
|
||||
// return null;
|
||||
// },
|
||||
// function(args) {
|
||||
// // print(666);
|
||||
// return null;
|
||||
// });
|
||||
|
||||
|
||||
// print(L_sq_StringBinById(435110));
|
||||
|
||||
// Rindro_Haker.LoadHook(0x4017F0, ["int", "int", "int", "int"],
|
||||
// function(args) {
|
||||
// print(args[0]);
|
||||
// print(args[1]);
|
||||
// print(args[2]);
|
||||
// return null;
|
||||
// },
|
||||
// function(args) {
|
||||
|
||||
// return null;
|
||||
// });
|
||||
|
||||
|
||||
// 0x121a1e2
|
||||
//this 0x1D17638
|
||||
// local Read = Memory.alloc(10000);
|
||||
// print(Read);
|
||||
// L_Sq_CallFunc(0x11A2030, "int", FFI_THISCALL, ["int", "int", "int", "int", "int"], 0x1D17638, Memory.allocUtf8String("sqr/a.nut").C_Object, Read.C_Object, 0x100000,0x19DAF4);
|
||||
// local Str = Read.readUtf8String();
|
||||
// print(Str);
|
||||
|
||||
// local A = IRDSQRCharacter.pushScriptFiles("a.nut");
|
||||
// local Read = Memory.alloc(10000);
|
||||
// print(Read);
|
||||
// L_Sq_CallFunc(0x121A100, "char", FFI_MS_CDECL, ["int", "int", "int", "int", "int"], Memory.allocUtf8String("").C_Object, Memory.allocUtf8String("sqr/a.nut").C_Object, Read.C_Object, 0x100000,0x19DAF4);
|
||||
// local Str = Read.readUtf8String();
|
||||
// print(Str);
|
||||
|
||||
// L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], L_sq_RA(0x1A5FB20), 79, 0, 0);
|
||||
|
||||
// local Old = L_sq_RA(0x1AB7CDC);
|
||||
// Old = L_sq_RA(Old + 0x3038);
|
||||
// local ItemObject = L_sq_GetItem(27582);
|
||||
// //移除
|
||||
// L_Sq_CallFunc(0x825AD0, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC),Old);
|
||||
// //移除Ani
|
||||
// L_Sq_CallFunc(0x84CD10, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC),Old);
|
||||
// //穿戴
|
||||
// L_Sq_CallFunc(0x825570, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC),ItemObject);
|
||||
|
||||
// local ItemObject = L_sq_GetItem(101020037);
|
||||
// // print(ItemObject);
|
||||
// // L_Sq_CallFunc(0x4B0F10, "int", FFI_THISCALL, ["int"], L_sq_RA(0x1AE45B4));
|
||||
// local Hs = L_Sq_CallFunc(0x779EB0, "pointer", FFI_THISCALL, ["int"], L_sq_RA(0x1AE45B4));
|
||||
// print(Hs);
|
||||
// Hs = L_sq_P2I(Hs);
|
||||
// print(format("%02x", Hs));
|
||||
// L_Sq_CallFunc(0x825AD0, "void", FFI_THISCALL, ["int","int"], Hs, ItemObject);
|
||||
// L_Sq_CallFunc(0x84CD10, "void", FFI_THISCALL, ["int","int"], L_sq_RA(0x1AB7CDC), ItemObject);
|
||||
// local PP = L_Sq_CallFunc(0x65DE50, "pointer", FFI_THISCALL, ["pointer"], 0xE8675E97, 0);
|
||||
// print("PP: " + PP);
|
||||
|
||||
// local WuseAdd = L_Sq_CallFunc(0x972220, "int", FFI_MS_CDECL, ["int", "int", "int"], 27582, 0x19E990, 0);
|
||||
// print("MY: " + WuseAdd);
|
||||
// print(L_sq_Test());
|
||||
// local Address = L_sq_Test(26058);
|
||||
// print(Address);
|
||||
// local Ret = L_Sq_CallFunc(0xE6E070, "int", FFI_THISCALL, ["int", "int", "int", "int"], L_sq_RA(0x1A5FB20), 275, Address, 41);
|
||||
// print(Ret);
|
||||
// L_Sq_CallFunc(0xF3B3B0, "int", FFI_THISCALL, ["int", "int", "int", "int", "int"], Ret, 600, 200, 28, 28);
|
||||
|
||||
|
||||
// Rindro_Haker.LoadHook(0x8265A0, ["int", "int", "int", "void"],
|
||||
// function(args) {
|
||||
// // print(args[0]);
|
||||
// // print(args[1]);
|
||||
// print(format("%02x", args[0]));
|
||||
|
||||
|
||||
// // print(args[0]);
|
||||
// return null;
|
||||
// },
|
||||
// function(args) {
|
||||
// // print(args.pop());
|
||||
// // print(">>>>>>");
|
||||
// return null;
|
||||
// });
|
||||
|
||||
|
||||
// Rindro_Haker.LoadHook(0x7B64BA, ["int", "int", "int", "int", "int", "int", "char"],
|
||||
// function(args) {
|
||||
// // print("args[0] : " + args[0]);
|
||||
// // print("args[1] : " + format("%02x", args[1]));
|
||||
// // print("args[2] : " + format("%02x", args[2]));
|
||||
// // print("args[3] : " + args[3]);
|
||||
// // print("args[4] : " + args[4]);
|
||||
// // print("args[5] : " + args[5]);
|
||||
// // print(args[1]);
|
||||
// // print(args[2]);
|
||||
|
||||
|
||||
// // print(args[0]);
|
||||
// return null;
|
||||
// },
|
||||
// function(args) {
|
||||
// // print(args.pop());
|
||||
// // print(">>>>>>");
|
||||
// return null;
|
||||
// });
|
||||
|
||||
// local Str = "{\"stringValue\":\"thisiszifuchuan\",\"numberValue\":123.45,\"integerValue\":42,\"booleanValue\":true,\"arrayValue\":[1,\"two\",true,{\"key\":\"value\"}],\"objectValue\":{\"name\":\"John Doe\",\"age\":30,\"address\":{\"street\":\"123 Main St\",\"city\":\"Anytown\",\"state\":\"CA\",\"zip\":\"12345\"}}}";
|
||||
// print("***********************");
|
||||
// print(Str);
|
||||
// print(Str.len());
|
||||
// local JsonObj = JSONParser();
|
||||
// local T = JsonObj.parse(Str);
|
||||
// print(">>>>>>>>>>>>>>");
|
||||
// print(T);
|
||||
// print(">>>>>>>>>>>>>>");
|
||||
// local Str2 = Json.Encode(T);
|
||||
// print("***********************");
|
||||
// print(Str2);
|
||||
// print(Str2.len());
|
||||
|
||||
function getScrollBasisPos_Swordman(obj) {
|
||||
print(111);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
function drawAppend_VirtualCharacter(ChrJob, GrowJob, Sc_Xpos, Sc_Ypos, Front_After_Flag, f) {
|
||||
// local obj = sq_GetMyMasterCharacter();
|
||||
// print(Clock());
|
||||
// Sout("a: %L",a);
|
||||
// Sout("b: %L",b);
|
||||
// Sout("c: %L",c);
|
||||
// Sout("d: %L",d);
|
||||
// Sout("e: %L",e);
|
||||
// Sout("f: %L",f);
|
||||
// print(a);
|
||||
// print(b);
|
||||
// print(c);
|
||||
// print(d);
|
||||
// print(e);
|
||||
// print(f);
|
||||
|
||||
// if (!e) {
|
||||
// BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3/Chivalry_S3_Bottom_00.ani", c, d, "Server_AuctionSystemTimeP22");
|
||||
// BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3_2/Chivalry_S3_Text.ani", c, d, "Server_AuctionSystemTimeP");
|
||||
// BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3/Chivalry_S3_Text.ani", c, d - 50, "Server_AuctionSystemTimeP2");
|
||||
// BasicsDrawTool.T_DrawDynamicAni(obj, "Character/Common/Animation/Aura/chn_2021_chivarly_system3_3/Chivalry_S3_Text.ani", c, d - 100, "Server_AuctionSystemTimeP3");
|
||||
// }
|
||||
}
|
||||
|
|
@ -1,63 +0,0 @@
|
|||
//枚举类
|
||||
dofile("sqr/Base/_ENUM/_ENUM_KEY.nut"); //按键枚举类
|
||||
//枚举类
|
||||
|
||||
//基础工具类
|
||||
dofile("sqr/Base/_Tool/Json_Class.nut"); //Json类
|
||||
dofile("sqr/Base/_Tool/BaseTool_Class.nut"); //基础工具类
|
||||
dofile("sqr/Base/_Tool/MemoryClass.nut"); //内存类
|
||||
dofile("sqr/Base/_Tool/Hacker_Class.nut"); //黑客工具类
|
||||
dofile("sqr/Base/_Tool/Hacker_RegApi.nut"); //黑客注册工具类
|
||||
dofile("sqr/Base/_Tool/Script_Class.nut"); //pvf读取类
|
||||
dofile("sqr/Base/_Tool/Image_Class.nut"); //image类
|
||||
dofile("sqr/Base/_Tool/Animation_Class.nut"); //动画类
|
||||
//基础工具类
|
||||
|
||||
//回调注册类
|
||||
dofile("sqr/Base/PackControl/PackControl.nut"); //收包类
|
||||
dofile("sqr/Base/CallBack/DrawMain.nut"); //绘制入口
|
||||
dofile("sqr/Base/CallBack/DrawHudMain.nut"); //hud绘制入口
|
||||
dofile("sqr/Base/CallBack/Window_Get.nut"); //原始窗口HOOK
|
||||
dofile("sqr/Base/CallBack/PushDamage.nut"); //Push伤害
|
||||
dofile("sqr/Base/CallBack/GetDamageRate.nut"); //获取伤害
|
||||
// dofile("sqr/Base/CallBack/Window_Get.nut"); //原始窗口HOOK
|
||||
|
||||
//数据类
|
||||
dofile("sqr/Base/_Z_Data/ItemData.nut"); //Item数据
|
||||
dofile("sqr/Base/_Z_Data/CharacterInfoData.nut"); //角色信息数据
|
||||
//数据类
|
||||
|
||||
//UI框架类
|
||||
dofile("sqr/Base/UI/Lenheart_Cursor_Class.nut"); //鼠标类
|
||||
dofile("sqr/Base/UI/OldWindowsMap.nut"); //窗口Map
|
||||
dofile("sqr/Base/UI/Lenheart_UI_Class.nut"); //UI
|
||||
dofile("sqr/Base/UI/Lenheart_Ani_Class.nut"); //Ani
|
||||
dofile("sqr/Base/UI/Lenheart_Each_Class.nut"); //交互图标类
|
||||
dofile("sqr/Base/UI/Lenheart_Event_Class.nut"); //活动图标
|
||||
dofile("sqr/Base/UI/Lenheart_Character_Info_Class.nut"); //个人信息属性面板
|
||||
//-----------------------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
dofile("sqr/Project/Tuguan/Tuguan.nut"); //土罐
|
||||
dofile("sqr/Project/HellExLogic/HellExLogic.nut"); //深渊派对特殊逻辑
|
||||
dofile("sqr/Project/RepairWorldMap/RepairWorldMap.nut"); //修补世界地图
|
||||
|
||||
dofile("sqr/Project/OnilneSign/OnilneSign.nut"); //在线签到
|
||||
dofile("sqr/Project/FightSign/FightSign.nut"); //每日签到
|
||||
dofile("sqr/Project/CombatRank/CombatRank.nut"); //战斗力系统
|
||||
dofile("sqr/Project/Anton/Rindro_Anton.nut"); //安图恩
|
||||
dofile("sqr/Project/Luke/Rindro_Luke.nut"); //卢克
|
||||
dofile("sqr/Project/AradPass/AradPass.nut"); //战令
|
||||
dofile("sqr/Project/MidsummerParty/MidsummerParty.nut"); //希曼音乐会
|
||||
dofile("sqr/Project/ServerAuction/ServerAuction.nut"); //全服竞拍
|
||||
dofile("sqr/Project/OnlineAnnouncement/OnlineAnnouncement.nut"); //上线公告
|
||||
dofile("sqr/Project/Shapeshifting/Shapeshifting.nut"); //时装变身
|
||||
dofile("sqr/Project/HudUi/HudUi.nut"); //百级UI
|
||||
dofile("sqr/Project/DamagePerSecond/DamagePerSecond.nut"); //秒伤统计
|
||||
dofile("sqr/Project/CollectionBox/CollectionBox.nut"); //收集箱
|
||||
dofile("sqr/Project/HorseGuessing/HorseGuessing.nut"); //骑士马战
|
||||
dofile("sqr/Project/SkinHub/SkinHub.nut"); //皮肤仓库
|
||||
dofile("sqr/Project/MarrySystem/MarrySystem.nut"); //结婚系统
|
||||
|
|
@ -0,0 +1,443 @@
|
|||
{
|
||||
"BaseScript": [
|
||||
"Base/_ENUM/_ENUM_.nut",
|
||||
"Base/_Tool/Json_Class.nut",
|
||||
"Base/_Tool/BaseTool_Class.nut",
|
||||
"Base/_Tool/MemoryClass.nut",
|
||||
"Base/_Tool/Hacker_Class.nut",
|
||||
"Base/_Tool/Hacker_RegApi.nut",
|
||||
"Base/_Tool/Script_Class.nut",
|
||||
"Base/_Tool/Image_Class.nut",
|
||||
"Base/_Tool/Animation_Class.nut",
|
||||
"Base/CallBack/PackControl.nut",
|
||||
"Base/CallBack/DrawMain.nut",
|
||||
"Base/CallBack/DrawHudMain.nut",
|
||||
"Base/CallBack/PushDamage.nut",
|
||||
"Base/CallBack/GetDamageRate.nut",
|
||||
"Base/_Z_Data/CharacterInfoData.nut",
|
||||
"Base/UI/Lenheart_Cursor_Class.nut",
|
||||
"Base/UI/OldWindowsMap.nut",
|
||||
"Base/UI/Lenheart_UI_Class.nut",
|
||||
"Base/UI/Lenheart_Ani_Class.nut",
|
||||
"Base/UI/Lenheart_Each_Class.nut",
|
||||
"Base/UI/Lenheart_Event_Class.nut",
|
||||
"Base/UI/Lenheart_Character_Info_Class.nut",
|
||||
"Base/Interface.nut"
|
||||
],
|
||||
"ProjectScript": {
|
||||
"成就系统": {
|
||||
"Private": true,
|
||||
"Script": [
|
||||
"Project/Achievement/Achievement.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "自用成就系统",
|
||||
"ImageMini": "http://49.234.27.222:8651/dps/download2/Image:chengjiu.png"
|
||||
}
|
||||
},
|
||||
"世界BOSS": {
|
||||
"Private": true,
|
||||
"Script": [
|
||||
"Project/WorldBoss/WorldBoss.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "自用世界BOSS",
|
||||
"ImageMini": "http://49.234.27.222:8651/dps/download2/Image:chengjiu.png"
|
||||
}
|
||||
},
|
||||
"百级血槽": {
|
||||
"Private": true,
|
||||
"Script": [
|
||||
"Project/HudUi/HudUi.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "自用血槽",
|
||||
"ImageMini": "http://49.234.27.222:8651/dps/download2/Image:baijixueshuang.png"
|
||||
}
|
||||
},
|
||||
"骑士马战": {
|
||||
"Private": true,
|
||||
"price": 100,
|
||||
"Script": [
|
||||
"Project/HorseGuessing/HorseGuessing_Guide.nut",
|
||||
"Project/HorseGuessing/HorseGuessing_KnightInfo.nut",
|
||||
"Project/HorseGuessing/HorseGuessing_PastRecord.nut",
|
||||
"Project/HorseGuessing/HorseGuessing.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "通过配置表,周期性的开发马战活动,可使用游戏道具进行竞猜获得游戏中的道具。",
|
||||
"ProjectDetails": [
|
||||
{
|
||||
"type": "str",
|
||||
"content": "骑士马战为娱乐玩法,禁止用于任何违法行为,否则后果自负"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "1"
|
||||
}
|
||||
]
|
||||
},
|
||||
"imgPath": "HorseGuessing"
|
||||
},
|
||||
"皮肤仓库": {
|
||||
"price": 25,
|
||||
"Script": [
|
||||
"Project/SkinHub/SkinHub.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "可设置伤害字体的皮肤,使用字体道具解锁,可预览伤害字体样式。",
|
||||
"ProjectDetails": [
|
||||
{
|
||||
"type": "str",
|
||||
"content": "可设置伤害字体的皮肤,使用字体道具解锁,可预览伤害字体样式。"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "点击测试字体按钮或者按空格键可以飘出测试字体。"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "1"
|
||||
}
|
||||
]
|
||||
},
|
||||
"imgPath": "SkinHub"
|
||||
},
|
||||
"收集箱": {
|
||||
"price": 50,
|
||||
"Script": [
|
||||
"Project/CollectionBox/CollectionBox.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "可设置多期收集箱,可自定义宝珠摆放位置。",
|
||||
"ProjectDetails": [
|
||||
{
|
||||
"type": "str",
|
||||
"content": "可在收集箱中点击镶嵌,消耗对应的道具后,可以完成镶嵌,收集箱会提升角色的属性!"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "0"
|
||||
}
|
||||
]
|
||||
},
|
||||
"imgPath": "CollectionBox"
|
||||
},
|
||||
"战令": {
|
||||
"price": 60,
|
||||
"Script": [
|
||||
"Project/AradPass/AradPass.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "可通过设置后台表格,开启期限战令活动。",
|
||||
"ProjectDetails": [
|
||||
{
|
||||
"type": "str",
|
||||
"content": "后台表格可配置开启豪华版战令所需要的解锁道具,拥有该道具可以激活豪华版战令,获得更多奖励.还可以设置使用后增加战令经验的道具,方便大佬快速战令满级!"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "1"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "后台表格可配置每日任务,赛季任务,重复任务。有可完成的任务时,会有红色角标提醒,也可以一键完成所有已达成任务."
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "2"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "后台表格可配置全服助力相关内容,多少次数给予多少战力经验."
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "3"
|
||||
},
|
||||
{
|
||||
"type": "mov",
|
||||
"content": "http://110.40.43.39:5244/d/script/rindro/Script/Project/AradPass/vid/2.mp4?sign=t2C9PYMuyrbJxUoVzskhNGE2JPvSNDeJviCUUZpQWps=:0",
|
||||
"width": 1130,
|
||||
"height": 712,
|
||||
"index": 2
|
||||
}
|
||||
]
|
||||
},
|
||||
"imgPath": "AradPass"
|
||||
},
|
||||
"秒伤统计": {
|
||||
"price": 0,
|
||||
"Script": [
|
||||
"Project/DamagePerSecond/DamagePerSecond.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "组队可用的秒伤统计系统,可显示每个玩家的秒伤排列。",
|
||||
"ProjectDetails": [
|
||||
{
|
||||
"type": "str",
|
||||
"content": "在团队副本、多人 PVP 等激烈战斗场景中,实时显示每位队员的输出能力(DPS,每秒伤害)。"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "伤害统计窗口可以随意拖动位置"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "1"
|
||||
}
|
||||
]
|
||||
},
|
||||
"imgPath": "DamagePerSecond"
|
||||
},
|
||||
"土罐": {
|
||||
"price": 25,
|
||||
"Script": [
|
||||
"Project/Tuguan/Tuguan.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "通过服务器的表格配置,可开启土罐的黄金袖珍罐来获取游戏道具。",
|
||||
"ProjectDetails": [
|
||||
{
|
||||
"type": "str",
|
||||
"content": "通过服务器的表格配置,可开启土罐的黄金袖珍罐来获取游戏道具。"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "1"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "点击查看概率按钮可跳转网页,显示设定的概率"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "2"
|
||||
}
|
||||
]
|
||||
},
|
||||
"imgPath": "Tuguan"
|
||||
},
|
||||
"上线公告": {
|
||||
"price": 0,
|
||||
"Script": [
|
||||
"Project/OnlineAnnouncement/OnlineAnnouncement.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "通过设定后台的表格,让指定玩家上线时触发全体动画播报。",
|
||||
"ProjectDetails": [
|
||||
{
|
||||
"type": "str",
|
||||
"content": "在大佬玩家上线时,播放定制好的Ani内容,给大佬的牌面拉满!"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "0"
|
||||
}
|
||||
]
|
||||
},
|
||||
"imgPath": "OnlineAnnouncement"
|
||||
},
|
||||
"时装变身": {
|
||||
"price": 0,
|
||||
"Script": [
|
||||
"Project/Shapeshifting/Shapeshifting.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "通过设定后台的表格,让拥有指定时装套装的角色可以在城镇变身。",
|
||||
"ProjectDetails": [
|
||||
{
|
||||
"type": "str",
|
||||
"content": "通过设定后台的表格,让拥有指定时装套装的角色可以在城镇变身。可以随时召唤和解除。"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "1"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "2"
|
||||
}
|
||||
]
|
||||
},
|
||||
"imgPath": "Shapeshifting"
|
||||
},
|
||||
"战力系统": {
|
||||
"price": 50,
|
||||
"Script": [
|
||||
"Project/CombatRank/CombatRank.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "当自身战斗力发生变化时显示战力浮动UI,并且在活动图标处可查看全服战斗力排行榜。",
|
||||
"ProjectDetails": [
|
||||
{
|
||||
"type": "str",
|
||||
"content": "当自身战斗力发生变化时显示战力浮动UI,并且在活动图标处可查看全服战斗力排行榜。"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "0"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "1"
|
||||
}
|
||||
]
|
||||
},
|
||||
"imgPath": "CombatRank"
|
||||
},
|
||||
"安图恩": {
|
||||
"price": 200,
|
||||
"Script": [
|
||||
"Project/Anton/Rindro_Anton_CreateParty.nut",
|
||||
"Project/Anton/Rindro_Anton_FightSituation.nut",
|
||||
"Project/Anton/Rindro_Anton_Noti.nut",
|
||||
"Project/Anton/Rindro_Anton_Party.nut",
|
||||
"Project/Anton/Rindro_Anton_PartyApplyJoin.nut",
|
||||
"Project/Anton/Rindro_Anton_PartyFormation.nut",
|
||||
"Project/Anton/Rindro_Anton_PartyHall.nut",
|
||||
"Project/Anton/Rindro_Anton_PartyInfo.nut",
|
||||
"Project/Anton/Rindro_Anton_PartyMemberInfo.nut",
|
||||
"Project/Anton/Rindro_Anton_PlayerInteractive.nut",
|
||||
"Project/Anton/Rindro_Anton_Reward.nut",
|
||||
"Project/Anton/Rindro_Anton.nut"
|
||||
],
|
||||
"info": {
|
||||
"ProjectAuthor": "官方 (期限:月)",
|
||||
"ProjectVersion": "1.0.0",
|
||||
"ProjectDescribe": "一比一复刻!安图恩攻坚战 完全体!",
|
||||
"ProjectDetails": [
|
||||
{
|
||||
"type": "str",
|
||||
"content": "99%机制还原,包含炸震颤 炸舰炮,孵化不打火山动物园等等。"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "加载插件后,要启动18频道作为安图恩攻坚战频道。"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "1"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "频道将会限制只能够在安图恩区域活动!"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "2"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "通过游戏菜单中的寻找队伍,打开攻坚战队伍界面,在这里可以创建与加入攻坚队!"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "3"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "4"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "13"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "独家功能1:进团时队长能看到申请人信息,战斗力会直接读登录器的战斗力表!"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "5"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "独家功能2:攻坚队队内聊天"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "6"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "独家功能3:头像直接读取当前时装"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "7"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "独家功能4:后台配置表里可以直接对安图恩难度进行调整(适合原版、微变、超变的服务器),不用麻烦的改pvf副本难度"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "独家功能5:可以对全攻坚队复活币使用进行限制"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "8"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "独家功能6:有简易战况表,可以在没打开大攻坚战况表的的情况下知道了解攻坚状态"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "9"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "独家功能7:每次攻坚的孵化会随机感染 不通关感染的情况下,火山能量额外上涨"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "10"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "独家功能8:如果不压制孵化,火山将会投放孵化的怪物(动物园机制)"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "11"
|
||||
},
|
||||
{
|
||||
"type": "str",
|
||||
"content": "独家功能9:可以设定通关多少次副本才能领取翻牌奖励(也可设置站甲板即可翻牌)"
|
||||
},
|
||||
{
|
||||
"type": "img",
|
||||
"content": "12"
|
||||
}
|
||||
]
|
||||
},
|
||||
"imgPath": "Anton"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,691 @@
|
|||
/*
|
||||
文件名:Achievement.nut
|
||||
路径:Project/Achievement/Achievement.nut
|
||||
创建日期:2025-02-23 08:37
|
||||
文件用途:成就系统
|
||||
*/
|
||||
|
||||
|
||||
class Yosin_DragButton extends LenheartNewUI_CommonUi {
|
||||
State = 0;
|
||||
BaseIdx = 29;
|
||||
DHeight = null; // 改为高度
|
||||
Path = "interface/lenheartwindowcommon.img";
|
||||
Idx = 172;
|
||||
FillHeight = 2; // 改为填充高度
|
||||
FirstHeight = 7; // 改为首节高度
|
||||
Width = 9; // 固定宽度,垂直按钮宽度通常是固定的
|
||||
Visible = true;
|
||||
DeBugMode = false;
|
||||
|
||||
BasePos = null;
|
||||
MoveFlag = false;
|
||||
//鼠标相对位置
|
||||
M_Xpos = null;
|
||||
M_Ypos = null;
|
||||
B_X = null;
|
||||
B_Y = null;
|
||||
Move_Value = 0;
|
||||
Max_Move_Value = 0;
|
||||
|
||||
CurrentMovePosY = 0;
|
||||
|
||||
constructor(X, Y, H) {
|
||||
this.DHeight = H;
|
||||
LenheartNewUI_CommonUi.constructor(X, Y, Width, H + 7 * 2); // 宽度固定,高度动态
|
||||
|
||||
BasePos = {
|
||||
x = X,
|
||||
y = Y
|
||||
}
|
||||
}
|
||||
|
||||
function SetFrame(gPath, gIdx) {
|
||||
if (gPath) Path = gPath;
|
||||
Idx = gIdx;
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//不可用
|
||||
if (State == 8) {
|
||||
L_sq_Draw3Image_Vertical(X + 1, Y, this.DHeight, Path, Idx + 9, FillHeight, FirstHeight);
|
||||
} else {
|
||||
//按下
|
||||
if (isLBDown) {
|
||||
L_sq_Draw3Image_Vertical(X, Y + 1, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight);
|
||||
}
|
||||
//悬停
|
||||
else if (isInRect) {
|
||||
L_sq_Draw3Image_Vertical(X, Y, this.DHeight, Path, Idx + 3, FillHeight, FirstHeight);
|
||||
}
|
||||
//普通
|
||||
else {
|
||||
L_sq_Draw3Image_Vertical(X, Y, this.DHeight, Path, Idx, FillHeight, FirstHeight);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//鼠标左键按下回调
|
||||
function OnMouseLbDown(MousePos_X, MousePos_Y) {
|
||||
LenheartNewUI_CommonUi.OnMouseLbDown(MousePos_X, MousePos_Y);
|
||||
|
||||
if (isInRect) {
|
||||
MoveFlag = true;
|
||||
M_Xpos = MousePos_X; //原始鼠标位置数据
|
||||
M_Ypos = MousePos_Y;
|
||||
B_X = X; //原始窗口位置
|
||||
B_Y = Y;
|
||||
}
|
||||
}
|
||||
|
||||
//鼠标事件回调
|
||||
function OnMouseProc(Flag, MousePos_X, MousePos_Y) {
|
||||
LenheartNewUI_CommonUi.OnMouseProc(Flag, MousePos_X, MousePos_Y);
|
||||
|
||||
//移动
|
||||
if (MoveFlag) {
|
||||
Move_Value = MousePos_Y - M_Ypos + CurrentMovePosY;
|
||||
print(Move_Value);
|
||||
if ( Move_Value <= (Max_Move_Value - Height + BasePos.y)) {
|
||||
Y = (Move_Value);
|
||||
Localtion_Y = (BasePos.y + Move_Value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
LenheartNewUI_CommonUi.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
MoveFlag = false;
|
||||
CurrentMovePosY = Move_Value; //记录当前移动位置
|
||||
}
|
||||
|
||||
//设置最大移动值
|
||||
function SetMaxMoveValue(Value) {
|
||||
Max_Move_Value = Value;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// class Yosin_DragButton extends LenheartNewUI_CommonUi {
|
||||
// //路径
|
||||
// Path = "";
|
||||
// //索引
|
||||
// Idx = 0;
|
||||
// //方向
|
||||
// Direction = false;
|
||||
|
||||
// //按钮
|
||||
// Button = null;
|
||||
|
||||
// //变动位置回调函数
|
||||
// OnChange = null;
|
||||
|
||||
// //鼠标相对位置
|
||||
// M_Xpos = null;
|
||||
// M_Ypos = null;
|
||||
// //未移动时的初始坐标
|
||||
// BasePos = null;
|
||||
// //移动Flag
|
||||
// MoveFlag = false;
|
||||
// //最大移动值
|
||||
// Max_Move_Value = 0;
|
||||
// //移动值
|
||||
// Move_Value = 0;
|
||||
// //侦测值
|
||||
// Detect_Value = 0;
|
||||
|
||||
// B_X = null;
|
||||
// B_Y = null;
|
||||
|
||||
// Visible = true;
|
||||
// DeBugMode = false;
|
||||
|
||||
// constructor(X, Y, S_H, H) {
|
||||
// Childrens = [];
|
||||
// this.Path = Path;
|
||||
// this.Idx = Idx;
|
||||
// LenheartNewUI_CommonUi.constructor(X, Y, 9, H);
|
||||
|
||||
// Button = LenheartNewUI_VerticalButton(X, Y, S_H);
|
||||
// Button.SetFrame("interface/lenheartwindowcommon.img", 184);
|
||||
// AddChild(Button);
|
||||
|
||||
|
||||
// BasePos = {
|
||||
// x = X,
|
||||
// y = Y
|
||||
// }
|
||||
// }
|
||||
|
||||
// //生成DT
|
||||
// function GenerateDt() {
|
||||
// try {
|
||||
// local CurT = L_Getmicroseconds();
|
||||
// Duration = (CurT - DurationFlag);
|
||||
// DurationFlag = CurT;
|
||||
// } catch (exception) {
|
||||
|
||||
// }
|
||||
// }
|
||||
|
||||
// function DeBug(obj) {
|
||||
// sq_DrawBox(X, Y, Width, Height, 0xffffffff);
|
||||
// }
|
||||
|
||||
// function Show(obj) {
|
||||
// LenheartNewUI_Windows.Show(obj);
|
||||
// }
|
||||
|
||||
// //同步坐标
|
||||
// function SyncPos(X, Y) {
|
||||
// this.X = X;
|
||||
// this.Y = Y;
|
||||
// foreach(Window in Childrens) {
|
||||
// Window.SyncPos(X, Y);
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
// //鼠标事件回调
|
||||
// function OnMouseProc(Flag, MousePos_X, MousePos_Y) {
|
||||
// LenheartNewUI_CommonUi.OnMouseProc(Flag, MousePos_X, MousePos_Y);
|
||||
|
||||
// if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, Parent.X + Button.Localtion_X , Parent.Y + Button.Localtion_Y, Width, Height)){
|
||||
// isInRect = true;
|
||||
// }
|
||||
// else isInRect = false;
|
||||
|
||||
|
||||
// foreach(Window in Childrens) {
|
||||
// Window.OnMouseProc(Flag, MousePos_X, MousePos_Y);
|
||||
// }
|
||||
// //移动
|
||||
// if (MoveFlag) {
|
||||
// //左键拖动
|
||||
// if (Direction) {
|
||||
// Move_Value = B_X + (MousePos_X - M_Xpos);
|
||||
// if (!(Move_Value >= (0 + BasePos.x) && Move_Value <= (Max_Move_Value - Width + BasePos.x))) {
|
||||
// X = Move_Value;
|
||||
// // DragLogic((Move_Value - Localtion_X).tofloat() / (Max_Move_Value - Width + BasePos.x - Localtion_X).tofloat());
|
||||
// }
|
||||
// } else {
|
||||
// Move_Value = B_Y + (MousePos_Y - M_Ypos);
|
||||
// if (Move_Value >= (0 + BasePos.y) && Move_Value <= (Max_Move_Value - Height + BasePos.y)) {
|
||||
// Y = (Move_Value);
|
||||
// Button.Localtion_Y = (Move_Value);
|
||||
// // DragLogic((Move_Value - Localtion_Y).tofloat() / (Max_Move_Value - Height + BasePos.y - Localtion_Y).tofloat());
|
||||
// }
|
||||
// }
|
||||
|
||||
// SyncPos(X, Y);
|
||||
// }
|
||||
// }
|
||||
// //鼠标左键按下回调
|
||||
// function OnMouseLbDown(MousePos_X, MousePos_Y) {
|
||||
// LenheartNewUI_CommonUi.OnMouseLbDown(MousePos_X, MousePos_Y);
|
||||
// foreach(Window in Childrens) {
|
||||
// Window.OnMouseLbDown(MousePos_X, MousePos_Y);
|
||||
// }
|
||||
|
||||
// if (isInRect) {
|
||||
// MoveFlag = true;
|
||||
// M_Xpos = MousePos_X; //原始鼠标位置数据
|
||||
// M_Ypos = MousePos_Y;
|
||||
// B_X = X; //原始窗口位置
|
||||
// B_Y = Y;
|
||||
// }
|
||||
// }
|
||||
// //鼠标左键弹起回调
|
||||
// function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
// LenheartNewUI_CommonUi.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
// foreach(Window in Childrens) {
|
||||
// Window.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
// }
|
||||
|
||||
// MoveFlag = false;
|
||||
// }
|
||||
// //鼠标右键按下回调
|
||||
// function OnMouseRbDown(MousePos_X, MousePos_Y) {
|
||||
// LenheartNewUI_CommonUi.OnMouseRbDown(MousePos_X, MousePos_Y);
|
||||
// foreach(Window in Childrens) {
|
||||
// Window.OnMouseRbDown(MousePos_X, MousePos_Y);
|
||||
// }
|
||||
// }
|
||||
// //鼠标右键弹起回调
|
||||
// function OnMouseRbUp(MousePos_X, MousePos_Y) {
|
||||
// LenheartNewUI_CommonUi.OnMouseRbUp(MousePos_X, MousePos_Y);
|
||||
// foreach(Window in Childrens) {
|
||||
// Window.OnMouseRbUp(MousePos_X, MousePos_Y);
|
||||
// }
|
||||
// }
|
||||
// //鼠标滚轮时间回调
|
||||
// function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
|
||||
// LenheartNewUI_CommonUi.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
|
||||
// foreach(Window in Childrens) {
|
||||
// Window.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
|
||||
// }
|
||||
// }
|
||||
|
||||
// //设置最大移动值
|
||||
// function SetMaxMoveValue(Value) {
|
||||
// Max_Move_Value = Value;
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
class AchievementC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//不是窗口
|
||||
// NoWindow = true;
|
||||
|
||||
//是否可见
|
||||
// Visible = false;
|
||||
|
||||
EtcInfo = null;
|
||||
|
||||
WindowImg = Rindro_Image("achievement/main.img");
|
||||
WindowBackGroundImg = Rindro_Image("achievement/mainbackground.img");
|
||||
|
||||
ButtonInfo = null;
|
||||
Info = null;
|
||||
Data = null;
|
||||
|
||||
IsOther = false;
|
||||
OtherName = null;
|
||||
|
||||
Page = 1;
|
||||
|
||||
//滚轮值
|
||||
ScrollValue = 0;
|
||||
ScrollValueMax = 500;
|
||||
|
||||
EventWindow = null;
|
||||
|
||||
//查询成就回包
|
||||
function OnQueryAchievementBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
if (Jso.rawin("click")) {
|
||||
IsOther = true;
|
||||
} else IsOther = false;
|
||||
Data = {};
|
||||
foreach(ValueObject in Jso.Achievement) {
|
||||
Data.rawset(ValueObject.id, ValueObject);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function OnQueryAchievementBack2(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
EventWindow = EventList_Obj.AddEvent("AchievementEvent1", 682, null);
|
||||
EventWindow.MainButton.ShowName = Jso.VipInfo;
|
||||
}
|
||||
|
||||
function OnQueryAchievementBack3(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
EventWindow = EventList_Obj.AddEvent("人物属性加成", 433, null);
|
||||
EventWindow.MainButton.OnClick = function(B_obj) {
|
||||
local T = {
|
||||
op = 20091601,
|
||||
}
|
||||
SendPackEx(T);
|
||||
}.bindenv(this);
|
||||
}
|
||||
|
||||
//查询成就
|
||||
function QueryAchievement() {
|
||||
local T = {
|
||||
op = 20091001,
|
||||
cjid = Page,
|
||||
cid2 = OtherName ? OtherName : "-1"
|
||||
}
|
||||
SendPackEx(T);
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
InitButtonConfig();
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
Pack_Control.rawset(20091002, OnQueryAchievementBack.bindenv(this));
|
||||
Pack_Control.rawset(20092002, OnQueryAchievementBack2.bindenv(this));
|
||||
Pack_Control.rawset(20091010, OnQueryAchievementBack3.bindenv(this));
|
||||
|
||||
InitConfig();
|
||||
InitAchievement();
|
||||
QueryAchievement();
|
||||
|
||||
|
||||
|
||||
EventWindow = EventList_Obj.AddEvent("人物属性加成", 433, null);
|
||||
EventWindow.MainButton.OnClick = function(B_obj) {
|
||||
local T = {
|
||||
op = 20091601,
|
||||
}
|
||||
SendPackEx(T);
|
||||
}.bindenv(this);
|
||||
}
|
||||
|
||||
function InitAchievement() {
|
||||
Childrens = [];
|
||||
ScrollValueMax = 0;
|
||||
RegisterWidget();
|
||||
|
||||
|
||||
if (Info.len() > Page) {
|
||||
//绘制成就
|
||||
foreach(InfoObj in Info[Page]) {
|
||||
if (InfoObj.Pos.y - 320 > ScrollValueMax) ScrollValueMax = InfoObj.Pos.y - 320;
|
||||
DrawAItem(InfoObj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function InitButtonConfig() {
|
||||
local AchieData = R_Utils.GetScriptFileReader("etc/th_plugin/control.etc");
|
||||
if (AchieData) {
|
||||
local DataArr = [];
|
||||
if (AchieData.Size >= 7) {
|
||||
//创建Blob对象
|
||||
local IOBUF = Sq_Point2Blob(L_sq_P2I(AchieData.Buffer.C_Object), AchieData.Size);
|
||||
local IO = BlobEx(IOBUF.readblob(IOBUF.len()));
|
||||
//以5为单步从第二位开始遍历字节
|
||||
local i = 2;
|
||||
while (true) {
|
||||
if (i< AchieData.Size && AchieData.Size - i >= 5) {
|
||||
local str = Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
//城镇编号
|
||||
if (str == "[info]") {
|
||||
local Data = {};
|
||||
while (true) {
|
||||
local Ret = Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
if (Ret == "[/info]") {
|
||||
DataArr.append(Data);
|
||||
break;
|
||||
}
|
||||
if (Ret == "[icon]") {
|
||||
Data.Icon <- {};
|
||||
Data.Icon.Path <- Rindro_Script.UnpackData(IO, i).tolower();
|
||||
i += 5;
|
||||
Data.Icon.Idx <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
}
|
||||
if (Ret == "[pos]") {
|
||||
Data.Pos <- {};
|
||||
Data.Pos.x <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
Data.Pos.y <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
}
|
||||
if (Ret == "[size]") {
|
||||
Data.Size <- {};
|
||||
Data.Size.x <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
Data.Size.y <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else break;
|
||||
}
|
||||
}
|
||||
ButtonInfo = DataArr;
|
||||
}
|
||||
}
|
||||
|
||||
function InitConfig() {
|
||||
Info = [];
|
||||
local PageLst = R_Utils.GetLstArr("etc/th_plugin/info.lst", "etc/");
|
||||
foreach(Index, Path in PageLst) {
|
||||
local AchieData = R_Utils.GetScriptFileReader(Path);
|
||||
if (AchieData) {
|
||||
local DataArr = {};
|
||||
if (AchieData.Size >= 7) {
|
||||
//创建Blob对象
|
||||
local IOBUF = Sq_Point2Blob(L_sq_P2I(AchieData.Buffer.C_Object), AchieData.Size);
|
||||
local IO = BlobEx(IOBUF.readblob(IOBUF.len()));
|
||||
//以5为单步从第二位开始遍历字节
|
||||
local i = 2;
|
||||
while (true) {
|
||||
if (i< AchieData.Size && AchieData.Size - i >= 5) {
|
||||
local str = Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
//城镇编号
|
||||
if (str == "[info]") {
|
||||
local Data = {};
|
||||
while (true) {
|
||||
local Ret = Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
if (Ret == "[/info]") {
|
||||
DataArr.rawset(Data.Id, Data);
|
||||
break;
|
||||
}
|
||||
if (Ret == "[id]") {
|
||||
Data.Id <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
}
|
||||
if (Ret == "[icon]") {
|
||||
Data.Icon <- {};
|
||||
Data.Icon.Path <- Rindro_Script.UnpackData(IO, i).tolower();
|
||||
i += 5;
|
||||
Data.Icon.Idx <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
}
|
||||
if (Ret == "[pos]") {
|
||||
Data.Pos <- {};
|
||||
Data.Pos.x <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
Data.Pos.y <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
}
|
||||
if (Ret == "[size]") {
|
||||
Data.Size <- {};
|
||||
Data.Size.x <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
Data.Size.y <- Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
}
|
||||
if (Ret == "[str]") {
|
||||
Data.Str <- [];
|
||||
while (true) {
|
||||
local strbuffer = Rindro_Script.UnpackData(IO, i);
|
||||
i += 5;
|
||||
strbuffer = Sq_ConvertWideChar(strbuffer, "big5")
|
||||
if (strbuffer == "[/str]") break;
|
||||
Data.Str.append(strbuffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else break;
|
||||
}
|
||||
}
|
||||
Info.append(DataArr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function RegisterWidget() {
|
||||
//类型按钮
|
||||
for (local i = 0; i< ButtonInfo.len(); i++) {
|
||||
local Config = ButtonInfo[i];
|
||||
local TypeButton = LenheartNewUI_BaseButton(Config.Pos.x, Config.Pos.y, Config.Size.x, Config.Size.y, Config.Icon.Path, Config.Icon.Idx);
|
||||
TypeButton.Data = i;
|
||||
TypeButton.OnClickEx = function(Button) {
|
||||
Page = Button.Data;
|
||||
InitAchievement();
|
||||
QueryAchievement();
|
||||
}.bindenv(this);
|
||||
Childrens.append(TypeButton);
|
||||
}
|
||||
|
||||
|
||||
// local TestButton = Yosin_DragButton(50, 120, 10);
|
||||
// TestButton.SetFrame("interface/lenheartwindowcommon.img", 184);
|
||||
// TestButton.SetMaxMoveValue(400);
|
||||
// AddChild(TestButton);
|
||||
// Childrens.append(TestButton);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
WindowBackGroundImg.DrawPng(0 + Page, X, Y);
|
||||
WindowImg.DrawPng(19, X + EtcInfo.closebutton_pos[0], Y + EtcInfo.closebutton_pos[1]); //关闭按钮图标
|
||||
}
|
||||
|
||||
function DrawInfo() {
|
||||
if (Info.len() > Page) {
|
||||
//绘制成就
|
||||
foreach(InfoObj in Info[Page]) {
|
||||
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + InfoObj.Pos.x, Y + InfoObj.Pos.y - ScrollValue, InfoObj.Size.x, InfoObj.Size.y)) {
|
||||
|
||||
for (local i = 0; i< InfoObj.Str.len(); i += 2) {
|
||||
local OffsetRate = InfoObj.Str.len() / 2;
|
||||
local StrBuffer = format(InfoObj.Str[i], Data[InfoObj.Id].num);
|
||||
local StrBuffer2 = InfoObj.Str[i + 1];
|
||||
|
||||
L_sq_DrawWindow(IMouse.GetXPos() + 32, IMouse.GetYPos() + 60 - (OffsetRate * 44) + (i / 2 * 44), 144, 24, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
L_sq_DrawCode(StrBuffer, IMouse.GetXPos() + 42, IMouse.GetYPos() + 70 - (OffsetRate * 44) + (i / 2 * 44), (Data[InfoObj.Id].achievement > (i / 2)) ? 0xFFedd568 : 0xFF969696, 1, 1);
|
||||
L_sq_DrawCode(StrBuffer2, IMouse.GetXPos() + 42, IMouse.GetYPos() + 88 - (OffsetRate * 44) + (i / 2 * 44), (Data[InfoObj.Id].achievement > (i / 2)) ? 0xFFedd568 : 0xFF969696, 1, 1);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
setClip(X + EtcInfo.clicp_pos[0], Y + EtcInfo.clicp_pos[1], X + EtcInfo.clicp_pos[2], Y + EtcInfo.clicp_pos[3]);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
releaseClip(); //裁切结束
|
||||
DrawInfo();
|
||||
}
|
||||
|
||||
function DrawAItem(InfoObj) {
|
||||
local Button = LenheartNewUI_BaseButton(InfoObj.Pos.x, InfoObj.Pos.y, InfoObj.Size.x, InfoObj.Size.y, InfoObj.Icon.Path, InfoObj.Icon.Idx);
|
||||
Button.Data = InfoObj;
|
||||
Button.SetCallBackFunc(function(Button) {
|
||||
local InfoObj = Button.Data;
|
||||
Button.Localtion_X = InfoObj.Pos.x;
|
||||
Button.Localtion_Y = InfoObj.Pos.y - ScrollValue;
|
||||
}.bindenv(this));
|
||||
Button.OnClickEx = function(Button) {
|
||||
if (IsOther) return;
|
||||
local T = {
|
||||
op = 20091005,
|
||||
cjid = Page,
|
||||
id = Button.Data.Id
|
||||
}
|
||||
SendPackEx(T);
|
||||
}.bindenv(this);
|
||||
Childrens.append(Button);
|
||||
}
|
||||
|
||||
RegisFlag = false;
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
|
||||
|
||||
local RootTab = getroottable();
|
||||
if (RootTab.rawin("L_PlayerEach_Obj") && RegisFlag == false) {
|
||||
RegisFlag = true;
|
||||
RootTab["L_PlayerEach_Obj"].AddEachForCommon("查看收集信息", function(SThis) {
|
||||
//关闭按钮
|
||||
local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3);
|
||||
ApplyEngagementButton.Icon = "interface2/popup_menu/popup_icon_cn.img";
|
||||
ApplyEngagementButton.IconIdx = 58;
|
||||
ApplyEngagementButton.Str = "查看收集信息";
|
||||
ApplyEngagementButton.OnClick = function(Button) {
|
||||
if (L_Sq_GetPlayerEachName().len() <= 0 || L_Sq_GetPlayerEachName() == L_Sq_GetObjectName(sq_GetMyMasterCharacter())) {
|
||||
|
||||
} else {
|
||||
OtherName = L_Sq_GetPlayerEachName();
|
||||
Visible = true;
|
||||
InitAchievement();
|
||||
QueryAchievement();
|
||||
}
|
||||
Button.Parent.CloseAllEach();
|
||||
}.bindenv(this);
|
||||
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
|
||||
SThis.AddChild(ApplyEngagementButton);
|
||||
}.bindenv(this));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//override
|
||||
//鼠标滚轮事件回调
|
||||
function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
|
||||
|
||||
|
||||
if (Flag) {
|
||||
if (ScrollValue > 0) ScrollValue -= 35;
|
||||
}
|
||||
if (!Flag) {
|
||||
if (ScrollValue< ScrollValueMax) ScrollValue += 35;
|
||||
}
|
||||
|
||||
//调用原生方法
|
||||
LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
|
||||
}
|
||||
|
||||
//override
|
||||
//鼠标左键按下回调
|
||||
function OnMouseLbDown(MousePos_X, MousePos_Y) {
|
||||
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + EtcInfo.closebutton_pos[0], Y + EtcInfo.closebutton_pos[1], EtcInfo.closebutton_pos[2], EtcInfo.closebutton_pos[3])) {
|
||||
CloseWindow();
|
||||
}
|
||||
|
||||
LenheartNewUI_Windows.OnMouseLbDown(MousePos_X, MousePos_Y);
|
||||
}
|
||||
|
||||
function OpenCallBack() {
|
||||
Visible = true;
|
||||
IsOther = false;
|
||||
OtherName = null;
|
||||
InitAchievement();
|
||||
QueryAchievement();
|
||||
}
|
||||
}
|
||||
|
||||
L_Windows_List <- [];
|
||||
getroottable().rawdelete("LenheartPluginsInitFlag");
|
||||
getroottable().rawdelete("EventList_Obj")
|
||||
getroottable().rawdelete("Achievement_Obj");
|
||||
|
||||
function Lenheart_Achievement_Fun(obj) {
|
||||
local RootTab = getroottable();
|
||||
if (!RootTab.rawin("Achievement_Obj")) {
|
||||
RootTab.rawset("Achievement_Obj", true);
|
||||
|
||||
local Info = Rindro_Script.GetFileData("etc/th_plugin/etc.etc", function(DataTable, Data) {
|
||||
while (!Data.Eof()) {
|
||||
local Str = Data.Get();
|
||||
if (Str == "[window pos]") {
|
||||
DataTable.window_pos <- [Data.Get(), Data.Get(), Data.Get(), Data.Get(), Data.Get()];
|
||||
} else if (Str == "[clicp pos]") {
|
||||
DataTable.clicp_pos <- [Data.Get(), Data.Get(), Data.Get(), Data.Get()];
|
||||
} else if (Str == "[closebutton pos]") {
|
||||
DataTable.closebutton_pos <- [Data.Get(), Data.Get(), Data.Get(), Data.Get()];
|
||||
}
|
||||
}
|
||||
}.bindenv(this));
|
||||
local window_Info = Info.window_pos;
|
||||
|
||||
local Win = LenheartNewUI_CreateWindow(AchievementC, "成就系统窗口", window_Info[0], window_Info[1], window_Info[2], window_Info[3], window_Info[4]);
|
||||
Win.EtcInfo = Info;
|
||||
EventList_Obj.AddEvent("成就系统", 118, Win);
|
||||
}
|
||||
}
|
||||
|
||||
getroottable()["LenheartFuncTab"].rawset("AchievementFuncN", Lenheart_Achievement_Fun);
|
||||
|
|
@ -6,19 +6,6 @@
|
|||
*/
|
||||
|
||||
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_CreateParty.nut");
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_FightSituation.nut");
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_Noti.nut");
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_Party.nut");
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_PartyApplyJoin.nut");
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_PartyFormation.nut");
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_PartyHall.nut");
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_PartyInfo.nut");
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_PartyMemberInfo.nut");
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_PlayerInteractive.nut");
|
||||
dofile("sqr/Project/Anton/Rindro_Anton_Reward.nut");
|
||||
|
||||
|
||||
//安图恩核心数据类
|
||||
class RinDro_Anton extends Rindro_BaseToolClass {
|
||||
//基础配置
|
||||
|
|
@ -98,7 +85,7 @@ class RinDro_Anton extends Rindro_BaseToolClass {
|
|||
} else {
|
||||
//在安图恩区域的 要转移回普通城镇
|
||||
if (L_sq_GetTownIndex() == BaseConfig.town_index) {
|
||||
L_sq_MoveTown(1, 1, 474, 249);
|
||||
L_sq_MoveTown(getroottable().rawin("RindroRaidNormalTown") ? getroottable().RindroRaidNormalTown : 2, getroottable().rawin("RindroRaidNormalArea") ? getroottable().RindroRaidNormalArea : 1, 474, 249);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -158,7 +145,7 @@ class RinDro_Anton extends Rindro_BaseToolClass {
|
|||
}
|
||||
//构造CID对应的装备数组方便绘制
|
||||
Portrait.rawset(MemberObj.CID, {
|
||||
EquVos = clone(MemberObj.equVos),
|
||||
EquVos = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null),
|
||||
Job = MemberObj.PlayerJob,
|
||||
TeamId = MemberObj.characNum,
|
||||
Name = MemberObj.PlayerName,
|
||||
|
|
@ -172,7 +159,7 @@ class RinDro_Anton extends Rindro_BaseToolClass {
|
|||
JobName = MemberObj.PlayerGrowTypeJob, //职业名
|
||||
Job = MemberObj.PlayerJob, //职业编号
|
||||
StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料
|
||||
EquVos = MemberObj.equVos, //装备List 用于显示头像
|
||||
EquVos = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null), //装备List 用于显示头像
|
||||
Captain = MemberObj.CaptainBool, //是否为攻坚队队长
|
||||
Cid = MemberObj.CID, //Cid
|
||||
OnlineState = MemberObj.onLineStart, //在线状态
|
||||
|
|
|
|||
|
|
@ -401,13 +401,9 @@ class Rindro_AntonFightSituationC extends LenheartNewUI_Windows {
|
|||
local YOffset = 9 + (index * 22);
|
||||
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[PartyMasterIcon.InfoObj.Job][0] - 17 + ((PosI % 10) * 24);
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 512 + ((PosI / 10) * 20);
|
||||
setClip(AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local AXpos = X + 26 + ((PosI % 10) * 24);
|
||||
local AYpos = Y + 513 + ((PosI / 10) * 20);
|
||||
PartyMasterIcon.InfoObj.EquVos.DrawFace(AXpos, AYpos);
|
||||
PosI++;
|
||||
}
|
||||
}
|
||||
|
|
@ -550,14 +546,12 @@ class Rindro_AntonFightSituationC extends LenheartNewUI_Windows {
|
|||
local XOffset = 0;
|
||||
local YOffset = 9;
|
||||
|
||||
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in CharacV.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[CharacV.Job][0] + DgnObj.X + ImgInfo[3] - 28;
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[CharacV.Job][1] + DgnObj.Y + ImgInfo[4] + 2;
|
||||
setClip(AXpos + OffsetArr[CharacV.Job][2], AYpos + OffsetArr[CharacV.Job][3], AXpos + OffsetArr[CharacV.Job][2] + 22, AYpos + OffsetArr[CharacV.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local AXpos = X + DgnObj.X + ImgInfo[3] + 16;
|
||||
local AYpos = Y + DgnObj.Y + ImgInfo[4] + 2;
|
||||
CharacV.EquVos.DrawFace(AXpos, AYpos);
|
||||
|
||||
|
||||
//绘制队伍人数
|
||||
for (local z = 0; z< count; z++) {
|
||||
|
|
|
|||
|
|
@ -87,18 +87,16 @@ class Rindro_Anton_NotiC extends LenheartNewUI_Windows {
|
|||
|
||||
if (Ct >= 200) {
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[PartyMasterIcon.InfoObj.Job][0] - 9 + 150;
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 184;
|
||||
setClip(AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local AXpos = X - 9 + 150 + 44;
|
||||
local AYpos = Y + 184 + 2;
|
||||
PartyMasterIcon.InfoObj.EquVos.DrawFace(AXpos, AYpos);
|
||||
}
|
||||
}
|
||||
|
||||
//绘制消息
|
||||
if (Ct >= 200) L_sq_DrawCode(Msg, X + 270 + LenheartTextClass.GetStringLength(Name), Y + 190, sq_RGBA(230, 200, 155, 255), 0, 1);
|
||||
|
||||
if (Ct >= 2000) Msg = null;
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
|
|
|
|||
|
|
@ -47,7 +47,6 @@ class Rindro_AntonPartyC extends LenheartNewUI_CommonUi {
|
|||
|
||||
//绘制队伍编号
|
||||
L_sq_DrawCode(TeamObj.TeamId, X + 22 - LenheartTextClass.GetStringLength(TeamObj.TeamId) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制队长头像
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", 55, X + 52, Y + 7);
|
||||
try {
|
||||
local channel_index = FiendwarTotal.GetInstance().BaseConfig.channel_index;
|
||||
|
|
|
|||
|
|
@ -205,13 +205,10 @@ class Rindro_AntonApplyJoinC extends LenheartNewUI_Windows {
|
|||
L_sq_DrawImg("hud/fiendwarl.img", 14, X + 8, Y + 40);
|
||||
//绘制角色头像
|
||||
if (AvatarArr) {
|
||||
foreach(AvatarObj in AvatarArr) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[Job][0] - 8;
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[Job][1] + 40;
|
||||
setClip(AXpos + OffsetArr[Job][2], AYpos + OffsetArr[Job][3], AXpos + OffsetArr[Job][2] + 22, AYpos + OffsetArr[Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
//绘制队长头像
|
||||
local AXpos = X + 42 - 8;
|
||||
local AYpos = Y + 1 + 40;
|
||||
AvatarArr.DrawFace(AXpos, AYpos);
|
||||
}
|
||||
//绘制角色等级
|
||||
L_sq_DrawCode(Level, X + 78 - LenheartTextClass.GetStringLength(Level) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ class Rindro_Anton_PartyHallC extends LenheartNewUI_Windows {
|
|||
//计算页数
|
||||
local PageStr = Page + 1 + " / " + ((PartyList.len() / PageMaxCount) + 1);
|
||||
//绘制当前页数
|
||||
L_sq_DrawCode(PageStr, X + 166 + LenheartTextClass.GetStringLength(PageStr) / 2, Y + 402, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode(PageStr, X + 196 - LenheartTextClass.GetStringLength(PageStr) / 2, Y + 402, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
}
|
||||
|
||||
//重置所有选中
|
||||
|
|
|
|||
|
|
@ -45,7 +45,7 @@ class Rindro_AntonPartyInfoC extends LenheartNewUI_Windows {
|
|||
Fatigue = Jso.charac.PlayFatigue,
|
||||
Combat = Jso.charac.ZL,
|
||||
ClearanceCount = Jso.charac.ClearanceCount,
|
||||
AvatarArr = Jso.charac.equVos,
|
||||
AvatarArr = Rindro_Draw_Character(Jso.charac.PlayerJob, Jso.charac.equVos, "rest.ani", null),
|
||||
PlayerSession = Jso.charac.PlayerSession
|
||||
}
|
||||
//没人
|
||||
|
|
@ -159,7 +159,7 @@ class Rindro_AntonPartyInfoC extends LenheartNewUI_Windows {
|
|||
}.bindenv(this);
|
||||
JoinPartyButton.SetCallBackFunc(function(window) {
|
||||
if (!IsMyTeam && !RinDro_Anton_Obj.MyRaidTeamId)
|
||||
window.X = 10;
|
||||
window.X = X + 10;
|
||||
else window.X = 90000;
|
||||
}.bindenv(this));
|
||||
AddChild(JoinPartyButton);
|
||||
|
|
|
|||
|
|
@ -135,13 +135,9 @@ class Rindro_AntonPartyInfoMemberC extends LenheartNewUI_CommonUi {
|
|||
|
||||
sq_DrawBox(X + 42, Y + 1, 22, 18, HandBoxColor[InfoObj.TeamId]);
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[InfoObj.Job][0];
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[InfoObj.Job][1];
|
||||
setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local AXpos = X + 42;
|
||||
local AYpos = Y + 1;
|
||||
InfoObj.EquVos.DrawFace(AXpos, AYpos);
|
||||
|
||||
if (InfoObj.Captain) L_sq_DrawImg("hud/rindroanton.img", 18, X + 42, Y + 1);
|
||||
|
||||
|
|
|
|||
|
|
@ -370,12 +370,9 @@ class Rindro_Anton_RewardC extends LenheartNewUI_Windows {
|
|||
L_sq_DrawImg("interface2/raid/anton/reward/anton_reward.img", 5 + Rarity, X + 156 + (160 * i), Y + 378, 1, sq_RGBA(255, 255, 255, CradAlphaOffset), OpenRealXrate, 1.0);
|
||||
|
||||
//绘制物品
|
||||
if (OpenRealXrate >= 1.0 && i == 3) {
|
||||
if (OpenRealXrate >= 1.0) {
|
||||
DrawItemBase(X + 159 + (160 * i), Y + 380, CardInfo.item, CardInfo.num);
|
||||
L_sq_DrawCode(Name, X + 174 + (160 * i) - LenheartTextClass.GetStringLength(Name) / 2, Y + 416, ItemNameColor[Rarity], 0, 1);
|
||||
// if (ActFlag == 5) {
|
||||
// ActFlag = 6;
|
||||
// }
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -506,14 +503,11 @@ class Rindro_Anton_RewardC extends LenheartNewUI_Windows {
|
|||
function DrawProfile(Cid, gx, gy, CodeXOffset) {
|
||||
if (RinDro_Anton_Obj.Portrait.rawin(Cid)) {
|
||||
local InfoObj = RinDro_Anton_Obj.Portrait[Cid];
|
||||
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[InfoObj.Job][0] + gx - 110;
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[InfoObj.Job][1] + gy - 5;
|
||||
setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local AXpos = X + gx - 110 + 42;
|
||||
local AYpos = Y + gy - 5 + 1;
|
||||
InfoObj.EquVos.DrawFace(AXpos, AYpos);
|
||||
|
||||
L_sq_DrawCode(InfoObj.Name, gx + CodeXOffset - LenheartTextClass.GetStringLength(InfoObj.Name) / 2, gy, 0xff00b1ff, 0, 1);
|
||||
} else {
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 372 KiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 154 KiB |
|
After Width: | Height: | Size: 886 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 396 KiB |
|
After Width: | Height: | Size: 402 KiB |
|
After Width: | Height: | Size: 432 KiB |
|
After Width: | Height: | Size: 341 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 57 KiB |
|
After Width: | Height: | Size: 44 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
|
@ -135,14 +135,14 @@ class AradPass_QuestC extends LenheartNewUI_Windows {
|
|||
ExpLimit = Jso.ExpLimit;
|
||||
|
||||
QuestSuccessTips = [0, 0, 0];
|
||||
if (Parent) Parent.TabSuccessTips[1] = 0;
|
||||
if (Parent && Parent.TabSuccessTips) Parent.TabSuccessTips[1] = 0;
|
||||
|
||||
foreach(Pos, Value in Jso.task) {
|
||||
foreach(QuestObject in Value) {
|
||||
if (QuestObject.SuccessState == 0) {
|
||||
if (QuestObject.NowSuccessCount >= QuestObject.MaxSuccessCount) {
|
||||
QuestSuccessTips[Pos] = 1;
|
||||
Parent.TabSuccessTips[1] = 1;
|
||||
if (Parent && Parent.TabSuccessTips)Parent.TabSuccessTips[1] = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 610 KiB |
|
After Width: | Height: | Size: 610 KiB |
|
After Width: | Height: | Size: 571 KiB |
|
After Width: | Height: | Size: 599 KiB |
|
After Width: | Height: | Size: 405 KiB |
|
|
@ -338,22 +338,26 @@ class CombatRankC extends LenheartNewUI_Windows {
|
|||
|
||||
if (ShowCharacter) {
|
||||
foreach(Index, AniDrawObj in ShowCharacter) {
|
||||
local OffsetX = 270;
|
||||
local OffsetY = 268;
|
||||
if (Index == 1) {
|
||||
OffsetX = 130;
|
||||
OffsetY = 268;
|
||||
}
|
||||
if (Index == 2) {
|
||||
OffsetX = 410;
|
||||
OffsetY = 268;
|
||||
}
|
||||
if (AniDrawObj) {
|
||||
foreach(AniObj in AniDrawObj) {
|
||||
AniObj.X = X + OffsetX;
|
||||
AniObj.Y = Y + OffsetY;
|
||||
AniObj.Show(Duration);
|
||||
try {
|
||||
local OffsetX = 270;
|
||||
local OffsetY = 268;
|
||||
if (Index == 1) {
|
||||
OffsetX = 130;
|
||||
OffsetY = 268;
|
||||
}
|
||||
if (Index == 2) {
|
||||
OffsetX = 410;
|
||||
OffsetY = 268;
|
||||
}
|
||||
if (AniDrawObj) {
|
||||
foreach(AniObj in AniDrawObj) {
|
||||
AniObj.X = X + OffsetX;
|
||||
AniObj.Y = Y + OffsetY;
|
||||
AniObj.Show(Duration);
|
||||
}
|
||||
}
|
||||
} catch (exception) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 72 KiB |
|
After Width: | Height: | Size: 479 KiB |
|
|
@ -4,48 +4,7 @@
|
|||
创建日期:2024-08-31 10:32
|
||||
文件用途:秒伤统计
|
||||
*/
|
||||
//大数字
|
||||
class longlong {
|
||||
Value = null;
|
||||
//构造函数 不管是不是string类型都要转成string类型
|
||||
constructor(StrValue) {
|
||||
Value = StrValue.tostring();
|
||||
}
|
||||
|
||||
function _add(other) {
|
||||
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "+"));
|
||||
}
|
||||
|
||||
function _sub(other) {
|
||||
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "-"));
|
||||
}
|
||||
|
||||
function _mul(other) {
|
||||
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "*"));
|
||||
}
|
||||
|
||||
function _div(other) {
|
||||
return L_sq_LongLongOperation(this.Value, other.Value, "/");
|
||||
}
|
||||
|
||||
function _unm() {
|
||||
return longlong(L_sq_LongLongOperation(longlong("0"), this.Value, "-"));
|
||||
}
|
||||
|
||||
function _modulo(other) {
|
||||
return longlong(L_sq_LongLongOperation(this.Value, other.Value, "%"));
|
||||
}
|
||||
|
||||
function GetFormat(FType) {
|
||||
local Buf = L_sq_LongLongOperation(this.Value, FType, "format");
|
||||
if (Buf.len()< 2) return Buf + ".0";
|
||||
local Value = Buf.slice(0, -1);
|
||||
local Unit = Buf.slice(-1);
|
||||
local RetStr = format(FType + Unit, Value.tofloat());
|
||||
return RetStr;
|
||||
}
|
||||
|
||||
}
|
||||
class DamagePerSecondC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
|
@ -93,27 +52,6 @@ class DamagePerSecondC extends LenheartNewUI_Windows {
|
|||
Childrens = [];
|
||||
DamagePerSecondList = {};
|
||||
|
||||
// DamagePerSecondList.rawset(0, {
|
||||
// Name = "测试1",
|
||||
// Damage = longlong("3002132000321100000")
|
||||
// });
|
||||
// DamagePerSecondList.rawset(1, {
|
||||
// Name = "测试2",
|
||||
// Damage = longlong("2002313000012310000")
|
||||
// });
|
||||
// DamagePerSecondList.rawset(2, {
|
||||
// Name = "测试3",
|
||||
// Damage = longlong("10000012121300000")
|
||||
// });
|
||||
// DamagePerSecondList.rawset(3, {
|
||||
// Name = "测试4",
|
||||
// Damage = longlong("1500012313000000")
|
||||
// });
|
||||
|
||||
// foreach(Oii in DamagePerSecondList) {
|
||||
// TotalDamage += Oii.Damage;
|
||||
// }
|
||||
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 190 KiB |
|
After Width: | Height: | Size: 82 KiB |
|
|
@ -0,0 +1,182 @@
|
|||
/*
|
||||
文件名:EventShop.nut
|
||||
路径:Project/EventShop/EventShop.nut
|
||||
创建日期:2025-01-11 13:59
|
||||
文件用途:活动商店
|
||||
*/
|
||||
class EventShopC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//不是窗口
|
||||
// NoWindow = true;
|
||||
|
||||
//是否可见
|
||||
Visible = false;
|
||||
|
||||
//商品列表
|
||||
GoodsList = null;
|
||||
//当前商店归属NPC
|
||||
NPC_Index = -1;
|
||||
//活动币数量
|
||||
ActivityCoin = 99999;
|
||||
|
||||
WindowImg = Rindro_Image("eventshop/main.img");
|
||||
|
||||
//配置包
|
||||
function BaseConfig(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
//注册NPC功能
|
||||
RegisterNpc(Jso.npc);
|
||||
foreach(npc_id in Jso.npc) {
|
||||
RegisterNpc(npc_id);
|
||||
}
|
||||
}
|
||||
|
||||
//请求商品列表
|
||||
function RequestGoodsList(Index) {
|
||||
local T = {
|
||||
op = 20088001,
|
||||
npc = Index
|
||||
}
|
||||
SendPackEx(T);
|
||||
}
|
||||
|
||||
//请求商品列表回调
|
||||
function RequestGoodsListCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
GoodsList = Jso.itemShops;
|
||||
ActivityCoin = Jso.count;
|
||||
NPC_Index = Jso.npc;
|
||||
//初始化商店
|
||||
InitGoodsList();
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
Pack_Control.rawset(20088004, BaseConfig.bindenv(this));
|
||||
Pack_Control.rawset(20088002, RequestGoodsListCallBack.bindenv(this));
|
||||
|
||||
RequestGoodsList(2);
|
||||
}
|
||||
|
||||
function RegisterNpc(id) {
|
||||
local EachManager = getroottable()["L_Each_Obj"];
|
||||
//先清空注册
|
||||
EachManager.RemoveEachForNpc(id);
|
||||
|
||||
EachManager.AddEachForNpc(id, function(SThis) {
|
||||
//关闭按钮
|
||||
local ApplyEngagementButton = LenheartNewUI_Each_BaseButton(0, 0, 100, 21, "interface2/popup_menu/popup_back.img", 3);
|
||||
ApplyEngagementButton.Icon = "interface2/popup_menu/popup_icon_cn.img";
|
||||
ApplyEngagementButton.IconIdx = 7;
|
||||
ApplyEngagementButton.Str = "活动商店";
|
||||
ApplyEngagementButton.OnClick = function(Button) {
|
||||
Button.Parent.CloseAllEach();
|
||||
Button.Parent.CloseWindow();
|
||||
RequestGoodsList(Button.Parent.NPC_Index);
|
||||
Visible = true;
|
||||
ResetFocus();
|
||||
}.bindenv(this);
|
||||
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
|
||||
SThis.AddChild(ApplyEngagementButton);
|
||||
}.bindenv(this));
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
// //关闭按钮
|
||||
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
// CloseButton.OnClick = function() {
|
||||
// this.Visible = false;
|
||||
// }.bindenv(this);
|
||||
// Childrens.append(CloseButton);
|
||||
|
||||
}
|
||||
|
||||
//初始化商店
|
||||
function InitGoodsList() {
|
||||
|
||||
}
|
||||
|
||||
//绘制项目
|
||||
function DrawItemCur(Object, XPos, Ypos) {
|
||||
DrawItemBase(XPos, Ypos, Object.itemId, Object.num);
|
||||
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, XPos, Ypos, 24, 24)) {
|
||||
WindowImg.DrawPng(1, XPos, Ypos);
|
||||
L_sq_DrawCode("所需活动币: " + Object.reItemNum, X + 26, Y + 288, sq_RGBA(189, 159, 126, 255), 0, 1);
|
||||
if (MouseClickFlag) {
|
||||
local T = {
|
||||
op = 20088005,
|
||||
npc = NPC_Index,
|
||||
itemId = Object.itemId,
|
||||
itemNum = 1
|
||||
}
|
||||
SendPackEx(T);
|
||||
}
|
||||
} else {
|
||||
// if (Info.vis) {
|
||||
// //关闭道具信息窗口
|
||||
// L_Sq_CallFunc(0xE6B2B0, "int", FFI_THISCALL, ["int", "int", "int", "char"], 0x1ADE090, 0x113, 0xFFFFFFFF, 0x0);
|
||||
// Info.vis = false;
|
||||
// DrawItemCurObject = null;
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
MouseClickFlag = false;
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
MouseClickFlag = true;
|
||||
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
if (!GoodsList) return;
|
||||
WindowImg.DrawPng(0, X + 0, Y + 0);
|
||||
|
||||
foreach(Pos, Object in GoodsList) {
|
||||
DrawItemCur(Object, X + 24 + ((Pos % 7) * 30), Y + 64 + ((Pos / 7) * 30));
|
||||
}
|
||||
|
||||
//绘制活动币数量
|
||||
L_sq_DrawCode(ActivityCoin.tostring(), X + 188 - LenheartTextClass.GetStringLength(ActivityCoin.tostring()) / 2, Y + 288, sq_RGBA(189, 159, 126, 255), 0, 1);
|
||||
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X + 124, Y + 284, 21, 21)) {
|
||||
L_sq_DrawWindow(X + 40, Y - 100 + 350, 224, 30, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
local QuestTipsStr = "拥有的活动币数量,活动币可在游戏中获得,请留意有以内的各种玩法!";
|
||||
local QuestTipsArray = L_sq_GetStringDrawArray(QuestTipsStr, 251);
|
||||
foreach(Pos, va in QuestTipsArray) {
|
||||
// Sout("文本内容嗯: %L", va);
|
||||
L_sq_DrawCode(va, X + 40 + 7, Y - 100 + 7 + 350 + (Pos * 16), 0xFFFFFFFF, 1, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
MouseClickFlag = false;
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
}
|
||||
getroottable().rawdelete("EventShop_Obj");
|
||||
|
||||
function Lenheart_EventShop_Fun(obj) {
|
||||
local RootTab = getroottable();
|
||||
if (!RootTab.rawin("EventShop_Obj")) {
|
||||
RootTab.rawset("EventShop_Obj", true);
|
||||
LenheartNewUI_CreateWindow(EventShopC, "活动商店窗口", 60, 120, 260, 318, 32);
|
||||
}
|
||||
}
|
||||
|
||||
getroottable()["LenheartFuncTab"].rawset("EventShopFuncN", Lenheart_EventShop_Fun);
|
||||
|
|
@ -0,0 +1,190 @@
|
|||
/*
|
||||
文件名:FiendFightLogic.nut
|
||||
路径:Plugins/Fiendwar/FiendFightLogic.nut
|
||||
创建日期:2024-05-27 19:18
|
||||
文件用途:超时空战斗逻辑
|
||||
*/
|
||||
class FiendFightLogicC {
|
||||
//进入BOSS房间发包告诉服务端的Flag
|
||||
IsBossActiveMsgPackFlag = false;
|
||||
|
||||
constructor() {
|
||||
|
||||
//注册回调包
|
||||
Pack_Control.rawset(20063030, SetCharacterDamageRate.bindenv(this));
|
||||
Pack_Control.rawset(20063600, CreatePassiveObjectById.bindenv(this));
|
||||
Pack_Control.rawset(20063602, GetBossHp.bindenv(this));
|
||||
Pack_Control.rawset(20063604, SetBossHp.bindenv(this));
|
||||
Pack_Control.rawset(20063608, CheckMonsterIsV.bindenv(this));
|
||||
}
|
||||
|
||||
//检测怪物是否存在
|
||||
function CheckMonsterIsV(Chunk) {
|
||||
if (!IsBossActiveMsgPackFlag) return;
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local Idx = Jso.id;
|
||||
local ObjectBuf = GetObjectByIndex(Idx);
|
||||
if (!ObjectBuf) {
|
||||
local T = {
|
||||
op = 20063609,
|
||||
id = Idx
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(T);
|
||||
}
|
||||
}
|
||||
|
||||
//设置BOSS生命值
|
||||
function SetBossHp(Chunk) {
|
||||
if (!IsBossActiveMsgPackFlag) return;
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local BossObject = GetObjectByIndex(210994);
|
||||
|
||||
//没找到BOSS
|
||||
if (!BossObject) {
|
||||
local T = {
|
||||
op = 20063605,
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(T);
|
||||
} else {
|
||||
BossObject.setHp(Jso.hp, null, true);
|
||||
}
|
||||
|
||||
}
|
||||
//获取BOSS生命值
|
||||
function GetBossHp(Chunk) {
|
||||
if (!IsBossActiveMsgPackFlag) return;
|
||||
local BossObject = GetObjectByIndex(210994);
|
||||
local curthp = -1;
|
||||
local rmaxhp = -1;
|
||||
//找到BOSS
|
||||
if (BossObject) {
|
||||
curthp = BossObject.getHp();
|
||||
rmaxhp = BossObject.getHpMax();
|
||||
}
|
||||
|
||||
local T = {
|
||||
op = 20063603,
|
||||
hp = curthp,
|
||||
maxhp = rmaxhp
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(T);
|
||||
}
|
||||
|
||||
//设置伤害值回调
|
||||
function SetCharacterDamageRate(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local Rate = Jso.damageMarkup.tofloat() / 100.0;
|
||||
//超时空伤害设置
|
||||
if (getroottable().rawin("LenheartFiendModuleDamageRate")) {
|
||||
getroottable()["LenheartFiendModuleDamageRate"] = Rate;
|
||||
}
|
||||
}
|
||||
|
||||
//召唤PassiveObject回调
|
||||
function CreatePassiveObjectById(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local ObjectId = Jso.id;
|
||||
local ZPos = Jso.z;
|
||||
|
||||
//确保在BOSS房间才召唤免得游戏崩溃
|
||||
if (IsBossActiveMsgPackFlag) {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
obj = sq_GetCNRDObjectToActiveObject(obj);
|
||||
// obj.sq_SendCreatePassiveObjectPacket(ObjectId, 0, 99999990, 0, ZPos);
|
||||
// sq_SendCreatePassiveObjectPacketFromPassivePos(obj, ObjectId, 0, 99999990, 0, ZPos);
|
||||
sq_SendCreatePassiveObjectPacket(obj, ObjectId, 0, 99999990, 0, ZPos, obj.getDirection());
|
||||
local Jso = {
|
||||
op = 20063601,
|
||||
id = ObjectId,
|
||||
z = ZPos
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(Jso);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//获取指定对象
|
||||
function GetObjectByIndex(Idx) {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
obj = sq_GetCNRDObjectToActiveObject(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)) {
|
||||
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
||||
local MonsterIndex = activeObj.getCollisionObjectIndex();
|
||||
if (MonsterIndex == Idx) {
|
||||
return activeObj;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
//获取地图ID
|
||||
function GetMapIndex() {
|
||||
local stage = sq_GetGlobaludpModuleStage();
|
||||
local MapIndex = sq_GetMapIndex(stage);
|
||||
return MapIndex;
|
||||
}
|
||||
|
||||
//检测是否在超时空BOSS图
|
||||
function CheckBossIsActive() {
|
||||
//如果在副本中
|
||||
if (sq_GetCurrentModuleType() == 3) {
|
||||
//在BOSS地图
|
||||
if (GetMapIndex() == 24151) {
|
||||
if (!IsBossActiveMsgPackFlag) {
|
||||
IsBossActiveMsgPackFlag = true;
|
||||
local Jso = {
|
||||
op = 20063801
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(Jso);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
//退出副本以后设置flag 还原
|
||||
else {
|
||||
IsBossActiveMsgPackFlag = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//怪物死亡回调包
|
||||
function MonsterDieCallBack(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);
|
||||
if (activeObj.isDead()) {
|
||||
local MonsterIndex = activeObj.getCollisionObjectIndex();
|
||||
if (MonsterIndex >= 210994 && MonsterIndex <= 210999) {
|
||||
local Jso = {
|
||||
op = 20063503,
|
||||
monster_id = MonsterIndex
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(Jso);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Proc(obj) {
|
||||
|
||||
//如果进入BOSS房间需要告诉服务端
|
||||
CheckBossIsActive();
|
||||
|
||||
//如果在和BOSS干架 要检测所有怪物的死亡
|
||||
if (IsBossActiveMsgPackFlag) {
|
||||
//怪物死亡检测
|
||||
MonsterDieCallBack(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,328 @@
|
|||
/*
|
||||
文件名:FiendReward.nut
|
||||
路径:Plugins/Fiendwar/FiendReward.nut
|
||||
创建日期:2024-05-13 10:03
|
||||
文件用途:超时空奖励
|
||||
*/
|
||||
class FiendRewardC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
DeBugMode = true;
|
||||
//默认显示状态需要是关闭 因为要通过收包打开
|
||||
Visible = false;
|
||||
|
||||
//奖励信息
|
||||
RewardInfo = null;
|
||||
//奖励动画开始时间
|
||||
AniStartFlag = null;
|
||||
|
||||
//收到奖励包
|
||||
function RewardCallBack(Chunk) {
|
||||
// Sout("收到请求加入包 : \n\n\n %L", Chunk);
|
||||
local Jso = Json.Decode(Chunk);
|
||||
RewardInfo = Jso;
|
||||
Visible = true;
|
||||
AniStartFlag = Clock();
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
Pack_Control.rawset(20063026, RewardCallBack.bindenv(this));
|
||||
|
||||
local T = {
|
||||
op = 20063061,
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
// //关闭按钮
|
||||
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
// CloseButton.OnClick = function() {
|
||||
// this.Visible = false;
|
||||
// }.bindenv(this);
|
||||
// Childrens.append(CloseButton);
|
||||
|
||||
}
|
||||
|
||||
AniName_Flag = 0;
|
||||
AniActFlag = 0;
|
||||
Ani_Title = null;
|
||||
Ani_Time = null;
|
||||
Ani_Time2 = null;
|
||||
Ani_Card_1 = null;
|
||||
Ani_Card_2 = null;
|
||||
Ani_Card_Open_1 = null;
|
||||
Ani_Card_Open_2 = null;
|
||||
AniTimeStartFlag = 0;
|
||||
AniRewardMyStartFlag = 0;
|
||||
Ani_Card_All_1 = null;
|
||||
Ani_Card_All_Open = null;
|
||||
Ani_Card_All_Open_Gold = null;
|
||||
AniRewardReloadFlag = 0;
|
||||
AlphaValue = 0.0;
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
if (AniStartFlag) {
|
||||
local ExiTime = Clock() - AniStartFlag;
|
||||
|
||||
//绘制背景
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 0, X + 0, Y + 0, 1, sq_RGBA(255, 255, 255, 150), 1.0, 1.0);
|
||||
|
||||
//标题一阶段
|
||||
Ani_Title = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_title_00.ani", X + 188, Y + 30, "超时空奖励标题1" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Title)) {
|
||||
if (AniActFlag == 0) AniActFlag = 1;
|
||||
}
|
||||
//时间二阶段
|
||||
if (AniActFlag >= 1) {
|
||||
Ani_Time = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_time.ani", X + 55, Y + 120, "超时空奖励标题2" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Time)) {
|
||||
if (AniActFlag == 1) AniActFlag = 2;
|
||||
}
|
||||
}
|
||||
//时间三阶段
|
||||
if (AniActFlag >= 2) {
|
||||
Ani_Time2 = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_rank_00.ani", X + 570, Y + 90, "超时空奖励标题3" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Time2)) {
|
||||
//记录一下时间
|
||||
if (AniActFlag == 2) {
|
||||
AniTimeStartFlag = Clock();
|
||||
AniActFlag = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
//时间四阶段
|
||||
if (AniActFlag >= 3) {
|
||||
local al = sq_GetUniformVelocity(0, 100, Clock() - AniTimeStartFlag, 1500);
|
||||
AlphaValue = al.tofloat() / 100.0;
|
||||
|
||||
local RealTime = RewardInfo.time;
|
||||
local seconds = RealTime / 10;
|
||||
local hours = seconds / 3600;
|
||||
local minutes = seconds / 60;
|
||||
|
||||
seconds %= 60;
|
||||
hours = format("%02d", hours);
|
||||
seconds = format("%02d", seconds).slice(-2);
|
||||
minutes = format("%02d", minutes).slice(-2);
|
||||
|
||||
local Offset = -6;
|
||||
DrawImg("hud/fiendwartime.img", hours.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", hours.slice(1).tointeger(), X + 260 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", 10, X + 286 + Offset, Y + 139);
|
||||
Offset += 60;
|
||||
DrawImg("hud/fiendwartime.img", minutes.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", minutes.slice(1).tointeger(), X + 260 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", 10, X + 286 + Offset, Y + 139);
|
||||
Offset += 60;
|
||||
DrawImg("hud/fiendwartime.img", seconds.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", seconds.slice(1).tointeger(), X + 260 + Offset, Y + 139);
|
||||
|
||||
Offset += 160;
|
||||
local DieCount = RewardInfo.deathsNum;
|
||||
local DrawDieStr = format("%02d", DieCount);
|
||||
DrawImg("hud/fiendwartime.img", DrawDieStr.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", DrawDieStr.slice(1).tointeger(), X + 260 + Offset, Y + 139);
|
||||
|
||||
if (al >= 100) {
|
||||
if (AniActFlag == 3) {
|
||||
AniActFlag = 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
//卡牌一阶段
|
||||
if (AniActFlag == 4) {
|
||||
Ani_Card_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_01.ani", X + 0, Y + 30, "超时空奖励个人第一张卡牌" + AniName_Flag);
|
||||
Ani_Card_2 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_02.ani", X + 0, Y + 30, "超时空奖励个人第二张卡牌" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Card_1) && sq_IsEnd(Ani_Card_2)) {
|
||||
if (AniActFlag == 4) AniActFlag = 5;
|
||||
}
|
||||
}
|
||||
//卡牌二阶段
|
||||
if (AniActFlag == 5) {
|
||||
Ani_Card_Open_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 218, Y + 280, "超时空奖励个人第一张卡牌打开" + AniName_Flag);
|
||||
Ani_Card_Open_2 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 406, Y + 280, "超时空奖励个人第二张卡牌打开" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Card_Open_1) && sq_IsEnd(Ani_Card_Open_2)) {
|
||||
if (AniActFlag == 5) {
|
||||
AniRewardMyStartFlag = Clock();
|
||||
AniActFlag = 6;
|
||||
}
|
||||
}
|
||||
}
|
||||
//卡牌三阶段
|
||||
if (AniActFlag == 6) {
|
||||
local BackGroundFlag = 0;
|
||||
if (RewardInfo.rewards[0].item == -1) BackGroundFlag = 1;
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 218, Y + 280);
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 406, Y + 280);
|
||||
|
||||
DrawItemEx(X + 290, Y + 342, RewardInfo.rewards[0].item, RewardInfo.rewards[0].num, RewardInfo.pid, 0, -10);
|
||||
DrawItemEx(X + 478, Y + 342, RewardInfo.rewards[0].item2, RewardInfo.rewards[0].num2, RewardInfo.pid, 0, -10);
|
||||
|
||||
if ((Clock() - AniRewardMyStartFlag) >= 1500) {
|
||||
AniActFlag = 7;
|
||||
}
|
||||
}
|
||||
//卡牌四阶段
|
||||
if (AniActFlag == 7) {
|
||||
Ani_Card_All_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_00.ani", X + 0, Y + 0, "二阶段翻牌未翻开" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Card_All_1)) {
|
||||
if (AniActFlag == 7) {
|
||||
Ani_Card_All_Open = array(8);
|
||||
Ani_Card_All_Open_Gold = array(8);
|
||||
AniActFlag = 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
//卡牌五阶段
|
||||
if (AniActFlag == 8) {
|
||||
for (local i = 0; i< 8; i++) {
|
||||
Ani_Card_All_Open[i] = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 30 + ((i % 4) * 188), Y + 250 + ((i / 4) * 138), "超时空奖励团队卡牌打开" + "i" + AniName_Flag);
|
||||
|
||||
if (i<(RewardInfo.rewards2.len() - 1) && RewardInfo.rewards2[i][0].grade == 1) {
|
||||
Ani_Card_All_Open_Gold[i] = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/gold_nomal.ani", X + 30 + ((i % 4) * 188), Y + 250 + ((i / 4) * 138), "超时空奖励团队卡牌打开金牌" + "i" + AniName_Flag);
|
||||
}
|
||||
}
|
||||
if (sq_IsEnd(Ani_Card_All_Open[7])) {
|
||||
if (AniActFlag == 8) {
|
||||
AniActFlag = 9;
|
||||
AniRewardReloadFlag = Clock();
|
||||
}
|
||||
}
|
||||
}
|
||||
//卡牌六阶段
|
||||
if (AniActFlag == 9) {
|
||||
for (local i = 0; i< 8; i++) {
|
||||
DrawRewardCard(i);
|
||||
}
|
||||
//重置
|
||||
if (Clock() - AniRewardReloadFlag >= 2000) {
|
||||
AniActFlag = 0;
|
||||
Ani_Title = null;
|
||||
Ani_Time = null;
|
||||
Ani_Time2 = null;
|
||||
Ani_Card_1 = null;
|
||||
Ani_Card_2 = null;
|
||||
Ani_Card_Open_1 = null;
|
||||
Ani_Card_Open_2 = null;
|
||||
AniTimeStartFlag = 0;
|
||||
AniRewardMyStartFlag = 0;
|
||||
Ani_Card_All_1 = null;
|
||||
Ani_Card_All_Open = null;
|
||||
Ani_Card_All_Open_Gold = null;
|
||||
AniRewardReloadFlag = 0;
|
||||
AlphaValue = 0.0;
|
||||
RewardInfo = null;
|
||||
AniStartFlag = null;
|
||||
AniName_Flag += 1;
|
||||
CloseWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function DrawRewardCard(Index) {
|
||||
if (Index > (RewardInfo.rewards2.len() - 1)) {
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 24, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
|
||||
return;
|
||||
}
|
||||
local Info = RewardInfo.rewards2[Index][0];
|
||||
local BackGroundFlag = 0;
|
||||
if (Info.count == 0) {
|
||||
BackGroundFlag = 1;
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
|
||||
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 0, -10);
|
||||
}
|
||||
if (Info.count == 1) {
|
||||
if (Info.grade == 1)(BackGroundFlag = -5)
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
|
||||
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 0, -10);
|
||||
} else if (Info.count == 2) {
|
||||
if (Info.grade == 1)(BackGroundFlag = -5)
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
|
||||
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72 - 20, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 999999, 0);
|
||||
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72 + 20, Y + 250 + ((Index / 4) * 138) + 62, Info.item2, Info.num2, Index, -20, -10);
|
||||
}
|
||||
}
|
||||
|
||||
ItemInfoDrawS = null;
|
||||
//绘制道具相信信息
|
||||
ItemObject = null;
|
||||
|
||||
//绘制道具带道具信息
|
||||
function DrawItemEx(X, Y, Id, Count, Pid, Flag, Flag2) {
|
||||
try {
|
||||
if (Flag != 999999) {
|
||||
local PartyMasterIcon = FiendwarTotal.GetInstance().MyTeam.MembersList[Pid];
|
||||
|
||||
local XOffset = -77 + Flag;
|
||||
local YOffset = -31 + Flag2;
|
||||
sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
|
||||
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.D[0] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12;
|
||||
local AYpos = AvatarObj.D[1] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset;
|
||||
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
|
||||
DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local DrawName = PartyMasterIcon.InfoObj.Name;
|
||||
//绘制名字
|
||||
L_sq_DrawCode(DrawName, X + XOffset + 100 - LenheartTextClass.GetStringLength(DrawName) / 2, Y + YOffset + 4, sq_RGBA(247, 214, 90, 250), 0, 1);
|
||||
}
|
||||
|
||||
if (Id != -1) {
|
||||
local Rarity = AllItemInfoObject[Id].Rarity;
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 5 + Rarity, X - 3, Y - 3);
|
||||
L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0);
|
||||
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) {
|
||||
ItemInfoDrawS = {};
|
||||
ItemInfoDrawS.X <- X;
|
||||
ItemInfoDrawS.Y <- Y;
|
||||
ItemInfoDrawS.ItemId <- Id;
|
||||
}
|
||||
}
|
||||
} catch (exception) {
|
||||
|
||||
}
|
||||
}
|
||||
//绘制悬停
|
||||
function DrawItemInfoF(obj) {
|
||||
if (ItemInfoDrawS) {
|
||||
if (!ItemObject) {
|
||||
local ItemId = ItemInfoDrawS.ItemId;
|
||||
if (AllItemInfoObject.rawin(ItemId)) {
|
||||
ItemObject = ItemInfoClass(AllItemInfoObject[ItemId]);
|
||||
}
|
||||
}
|
||||
ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength);
|
||||
} else {
|
||||
ItemObject = null;
|
||||
}
|
||||
}
|
||||
|
||||
function DrawImg(Path, Index, XPos, YPos) {
|
||||
L_sq_DrawImg(Path, Index, XPos, YPos, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
ItemInfoDrawS = null;
|
||||
DrawMain(obj);
|
||||
// DrawItemInfoF(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
文件名:Fiendwar.nut
|
||||
路径:Project/Fiendwar/Fiendwar.nut
|
||||
创建日期:2024-11-16 20:19
|
||||
文件用途:
|
||||
*/
|
||||
|
||||
|
||||
dofile("sqr/Project/Fiendwar/FiendwarHall.nut"); //大厅
|
||||
dofile("sqr/Project/Fiendwar/FiendwarHallParty.nut"); //大厅的队伍
|
||||
|
||||
dofile("sqr/Project/Fiendwar/FiendwarPartyInfo.nut"); //攻坚队具体信息窗口
|
||||
dofile("sqr/Project/Fiendwar/FiendwarPartyMemberInfo.nut"); //攻坚队具体信息中的队员信息UI
|
||||
|
||||
dofile("sqr/Project/Fiendwar/FiendwarPlayerInteractive.nut"); //攻坚队玩家交互
|
||||
dofile("sqr/Project/Fiendwar/FiendwarPartyFormation.nut"); //攻坚队具体信息中的编队
|
||||
|
||||
dofile("sqr/Project/Fiendwar/FiendwarHallCreateParty.nut");
|
||||
dofile("sqr/Project/Fiendwar/FiendwarHallApplyJoin.nut");
|
||||
|
||||
|
||||
|
||||
dofile("sqr/Project/Fiendwar/FiendwarFightSituation.nut"); //战况表
|
||||
dofile("sqr/Project/Fiendwar/FiendwarHallGoBossDgn.nut"); //前往BOSS框
|
||||
|
||||
|
||||
|
||||
dofile("sqr/Project/Fiendwar/FiendwarNoti.nut"); //超时空信息分发
|
||||
dofile("sqr/Project/Fiendwar/FiendReward.nut"); //超时空奖励
|
||||
dofile("sqr/Project/Fiendwar/FiendFightLogic.nut"); //战斗逻辑
|
||||
|
||||
class FiendwarTotal extends Rindro_BaseToolClass {
|
||||
//基础配置
|
||||
BaseConfig = null;
|
||||
/*
|
||||
town_index 城镇编号
|
||||
channel_index 频道编号
|
||||
*/
|
||||
//我的客户端cid
|
||||
MyCid = null;
|
||||
//我的攻坚队ID
|
||||
MyPartyId = null;
|
||||
//我是否是攻坚队队长
|
||||
IsCaptain = null;
|
||||
//我的队伍
|
||||
MyTeam = null;
|
||||
//开始攻坚动画
|
||||
StartAniFlag = false;
|
||||
//攻坚结束时间
|
||||
EndTime = null;
|
||||
PackCurT = null;
|
||||
|
||||
|
||||
//全局获取对象方法
|
||||
function GetInstance() {
|
||||
if (getroottable().rawin("FiendwarCObj"))
|
||||
return getroottable()["FiendwarCObj"];
|
||||
else {
|
||||
local RootTab = getroottable();
|
||||
local Cobj = FiendwarTotal();
|
||||
RootTab.rawset("FiendwarCObj", Cobj);
|
||||
Cobj.InitWindow();
|
||||
return Cobj;
|
||||
}
|
||||
}
|
||||
|
||||
//请求基础信息配置
|
||||
function GetFiendwarBase() {
|
||||
local T = {
|
||||
op = 20063501,
|
||||
}
|
||||
SendPack(T);
|
||||
}
|
||||
//请求掉线配置信息
|
||||
function GetFiendwarDown() {
|
||||
local T = {
|
||||
op = 20063063,
|
||||
}
|
||||
SendPack(T);
|
||||
}
|
||||
|
||||
//基础信息配置
|
||||
function FiendwarBase(Chunk) {
|
||||
BaseConfig = Json.Decode(Chunk);
|
||||
FiendwarChannelTownLogicCallBack();
|
||||
}
|
||||
|
||||
//团本专属频道上线城镇移动包
|
||||
function FiendwarChannelTownLogicCallBack() {
|
||||
if (BaseConfig.channel_index.find("20")) {
|
||||
if (L_sq_GetTownIndex() != BaseConfig.town_index) {
|
||||
L_sq_MoveTown(BaseConfig.town_index, 0, 474, 249);
|
||||
}
|
||||
} else {
|
||||
//在超时空区域的 要转移回普通城镇
|
||||
if (L_sq_GetTownIndex() == BaseConfig.town_index) {
|
||||
L_sq_MoveTown(1, 1, 474, 249);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//开团Flag包
|
||||
function StartFight(Chunk) {
|
||||
FiendwarTotal.GetInstance().StartAniFlag = true;
|
||||
}
|
||||
|
||||
|
||||
FiendwarHallC_Window = null;
|
||||
FiendwarFightSituationSwitchC_Window = null;
|
||||
FiendwarNotiC_Window = null;
|
||||
FiendRewardC_Window = null;
|
||||
FiendFightLogicC_Object = null;
|
||||
constructor() {
|
||||
//获取基础配置回调包
|
||||
Pack_Control.rawset(20063502, FiendwarBase.bindenv(this));
|
||||
Pack_Control.rawset(20063028, StartFight.bindenv(this));
|
||||
|
||||
//第一次上线要重新请求一下位置信息
|
||||
GetFiendwarBase();
|
||||
//请求掉线配置信息
|
||||
GetFiendwarDown();
|
||||
|
||||
|
||||
}
|
||||
|
||||
//初始化窗口
|
||||
function InitWindow() {
|
||||
FiendwarHallC_Window = LenheartNewUI_CreateWindow(FiendwarHallC, "超时空攻坚队伍列表", 320, 40, 478, 434, 18);
|
||||
FiendwarFightSituationSwitchC_Window = LenheartNewUI_CreateWindow(FiendwarFightSituationSwitchC, "超时空战况表开关", 770, 9, 30, 30, 0);
|
||||
FiendwarNotiC_Window = LenheartNewUI_CreateWindow(FiendwarNotiC, "超时空攻坚队伍消息分发", 0, 0, 0, 0, 0);
|
||||
FiendRewardC_Window = LenheartNewUI_CreateWindow(FiendRewardC, "超时空奖励界面", 0, 0, 800, 600, 0);
|
||||
|
||||
FiendFightLogicC_Object = FiendFightLogicC();
|
||||
}
|
||||
|
||||
function ClearInfo() {
|
||||
//我的客户端cid
|
||||
MyCid = null;
|
||||
//我的攻坚队ID
|
||||
MyPartyId = null;
|
||||
//我是否是攻坚队队长
|
||||
IsCaptain = null;
|
||||
//我的队伍
|
||||
MyTeam = null;
|
||||
//开始攻坚动画
|
||||
StartAniFlag = false;
|
||||
//攻坚结束时间
|
||||
EndTime = null;
|
||||
PackCurT = null;
|
||||
}
|
||||
|
||||
function Proc(obj) {
|
||||
|
||||
//开始攻坚动画
|
||||
if (FiendwarTotal.GetInstance().StartAniFlag) {
|
||||
local Ani = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/common/title/start_back.ani", 400, 260, "超时空开始攻坚Ani1");
|
||||
if (sq_IsEnd(Ani)) {
|
||||
FiendwarTotal.GetInstance().StartAniFlag = false;
|
||||
sq_Rewind(Ani);
|
||||
}
|
||||
}
|
||||
|
||||
if (FiendFightLogicC_Object) FiendFightLogicC_Object.Proc(obj);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
getroottable().rawdelete("FiendwarCObj");
|
||||
|
||||
function LenheartFiendwar(obj) {
|
||||
local RootTab = getroottable();
|
||||
if (!RootTab.rawin("FiendwarCObj")) {
|
||||
local Cobj = FiendwarTotal();
|
||||
RootTab.rawset("FiendwarCObj", Cobj);
|
||||
Cobj.InitWindow();
|
||||
} else {
|
||||
RootTab["FiendwarCObj"].Proc(obj);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (getroottable().rawin("LenheartTopFuncTab")) {
|
||||
getroottable()["LenheartTopFuncTab"].rawset("LenheartFiendwarFunc", LenheartFiendwar);
|
||||
} else {
|
||||
local T = {};
|
||||
T.rawset("LenheartFiendwarFunc", LenheartFiendwar);
|
||||
getroottable().rawset("LenheartTopFuncTab", T);
|
||||
}
|
||||
|
|
@ -0,0 +1,696 @@
|
|||
/*
|
||||
文件名:FiendwarFightSituation.nut
|
||||
路径:Plugins/Fiendwar/FiendwarFightSituation.nut
|
||||
创建日期:2024-04-10 21:28
|
||||
文件用途:超时空攻坚战况
|
||||
*/
|
||||
|
||||
//复选框
|
||||
class Fiendwar_LenheartNewUI_SwitchButton extends LenheartNewUI_CommonUi {
|
||||
//透明度
|
||||
AlphaValue = 1.0;
|
||||
State = 0;
|
||||
ImgIndex = null;
|
||||
|
||||
constructor(X, Y) {
|
||||
LenheartNewUI_CommonUi.constructor(X, Y, 14, 15);
|
||||
}
|
||||
|
||||
function SyncAlpha(Value) {
|
||||
AlphaValue = Value;
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//不可用
|
||||
if (State == 8) {
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 3 : 141, X, Y + 1, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
} else {
|
||||
//悬停
|
||||
if (isLBDown) {
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y + 1, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
//按下
|
||||
else if (isInRect) {
|
||||
if (State == 0)
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 1 : 139, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
if (State == 1)
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
//普通
|
||||
else {
|
||||
if (State == 0)
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex : 138, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
if (State == 1)
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Fiendwar_LenheartNewUI_ProgressIndicator extends LenheartNewUI_CommonUi {
|
||||
//透明度
|
||||
AlphaValue = 1.0;
|
||||
//宽
|
||||
DWidth = null;
|
||||
//控制者
|
||||
Controller = 0;
|
||||
//回调函数
|
||||
OnChangeControl = null;
|
||||
//球的偏移 因为除不尽 所以这个最好单独写
|
||||
BXposOffset = 0;
|
||||
|
||||
constructor(X, Y, W, H) {
|
||||
this.DWidth = W;
|
||||
LenheartNewUI_CommonUi.constructor(X, Y, W, H);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//绘制左
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 19, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
|
||||
local OffserIndex = 0;
|
||||
//绘制中
|
||||
for (local i = 0; i< this.DWidth; i++) {
|
||||
if (i > (Controller * this.DWidth).tointeger())
|
||||
OffserIndex = 0;
|
||||
else OffserIndex = 1;
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 21 + OffserIndex, X + 8 + i, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
//绘制右
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 20, X + 8 + this.DWidth, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
|
||||
// local BXposOffset = 0;
|
||||
// if (BaseX && EndX) BXposOffset = EndX - BaseX;
|
||||
//绘制球
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 23, X + BXposOffset + 1, Y + 1, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
|
||||
//按下时的基准X
|
||||
BaseX = null;
|
||||
EndX = null;
|
||||
//鼠标左键按下回调
|
||||
function OnMouseLbDown(MousePos_X, MousePos_Y) {
|
||||
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + BXposOffset + 1, Y + 1, 15, 14)) {
|
||||
isLBDown = true;
|
||||
if (!BaseX) BaseX = MousePos_X;
|
||||
}
|
||||
}
|
||||
|
||||
//鼠标事件回调
|
||||
function OnMouseProc(Flag, MousePos_X, MousePos_Y) {
|
||||
if (isLBDown && Flag == 1) {
|
||||
if (MousePos_X > (X + DWidth + 8))
|
||||
MousePos_X = (X + DWidth + 8);
|
||||
else if (MousePos_X<(X + 8))
|
||||
MousePos_X = (X + 8);
|
||||
EndX = MousePos_X;
|
||||
if (BaseX && EndX) {
|
||||
BXposOffset = EndX - BaseX;
|
||||
Controller = BXposOffset.tofloat() / DWidth.tofloat();
|
||||
AlphaValue = Controller;
|
||||
if (AlphaValue< 0.4) AlphaValue = 0.4;
|
||||
if (OnChangeControl) OnChangeControl(Controller);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
isLBDown = false;
|
||||
}
|
||||
}
|
||||
|
||||
class FiendwarFightSituationC extends LenheartNewUI_Windows {
|
||||
|
||||
Visible = false;
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
//透明度
|
||||
AlphaValue = 1.0;
|
||||
//简易战况表复选框
|
||||
BaseSituationBtn = null;
|
||||
//简易战况表是否开启
|
||||
BaseSituationFlag = 0;
|
||||
|
||||
//雷达是否存在
|
||||
RadarFlag = true;
|
||||
//turret2
|
||||
turret2 = true;
|
||||
|
||||
MonsterFace = {
|
||||
m20413 = 1,
|
||||
m20412 = 3,
|
||||
m20411 = 4,
|
||||
m20415 = 15,
|
||||
m20408 = 9,
|
||||
m20409 = 8,
|
||||
m20405 = 5,
|
||||
m20404 = 6,
|
||||
m20406 = 12,
|
||||
m20401 = 13,
|
||||
m20402 = 10,
|
||||
m20403 = 11,
|
||||
};
|
||||
|
||||
SlotPos = [
|
||||
[50, 479],
|
||||
[50, 374],
|
||||
[50, 270],
|
||||
[140, 167],
|
||||
[186, 89],
|
||||
[275, 36],
|
||||
[275, 141],
|
||||
[411, 11],
|
||||
[365, 88],
|
||||
[455, 141],
|
||||
[545, 36],
|
||||
|
||||
[141, 427],
|
||||
[185, 348],
|
||||
[185, 245],
|
||||
[321, 271],
|
||||
[411, 219],
|
||||
[546, 245],
|
||||
[591, 166],
|
||||
|
||||
[141, 530],
|
||||
[276, 505],
|
||||
[320, 375],
|
||||
[410, 478],
|
||||
[546, 504],
|
||||
[456, 401],
|
||||
[681, 478],
|
||||
[545, 348],
|
||||
[680, 374],
|
||||
[725, 244],
|
||||
|
||||
[690, 53],
|
||||
[727, 129],
|
||||
]
|
||||
|
||||
|
||||
Info = null;
|
||||
PackCurT = null;
|
||||
EndTime = null;
|
||||
|
||||
function InfoCallBack(Chunk) {
|
||||
// print(Chunk);
|
||||
local Jso = Json.Decode(Chunk);
|
||||
Info = Jso.fightInfo.platVos;
|
||||
EndTime = Jso.fightInfo.endTime;
|
||||
RadarFlag = Jso.fightInfo.radar;
|
||||
turret2 = Jso.fightInfo.turret2;
|
||||
FiendwarTotal.GetInstance().EndTime = Jso.fightInfo.endTime;
|
||||
local Pt = Clock();
|
||||
PackCurT = Pt;
|
||||
FiendwarTotal.GetInstance().PackCurT = Pt;
|
||||
|
||||
local Win = LenheartNewUI_CreateWindow(FiendwarPartyInfoC, "超时空我的队伍窗口", 430, 15, 354, 290, 18);
|
||||
Win.CloseWindow();
|
||||
local Win = LenheartNewUI_CreateWindow(FiendwarHallC, "超时空攻坚队伍列表", 320, 40, 478, 434, 18);
|
||||
Win.CloseWindow();
|
||||
}
|
||||
|
||||
//收到进入BOSS请求包
|
||||
function GoBossCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local Win = LenheartNewUI_CreateWindow(FiendwarHallGoBossDgnC, "超时空攻坚进入罗什", 273, 225, 270, 120, 19);
|
||||
Win.Visible = true;
|
||||
Win.Dark = Jso.boss1;
|
||||
Win.Light = Jso.boss2;
|
||||
Win.RegisterWidget();
|
||||
}
|
||||
|
||||
PlayerGiveUpTime = null;
|
||||
PlayerGiveUpFlagTime = null;
|
||||
//放弃副本包
|
||||
function PlayerGiveUpCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
PlayerGiveUpTime = Jso.endTime;
|
||||
PlayerGiveUpFlagTime = Clock();
|
||||
}
|
||||
|
||||
function GetInfo() {
|
||||
local T = {
|
||||
op = 20063053,
|
||||
// teamsId = FiendwarTotal.GetInstance().MyPartyId
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
Pack_Control.rawset(20063016, InfoCallBack.bindenv(this));
|
||||
Pack_Control.rawset(20063022, GoBossCallBack.bindenv(this));
|
||||
Pack_Control.rawset(20063024, PlayerGiveUpCallBack.bindenv(this));
|
||||
|
||||
GetInfo();
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(770, 0, 30, 30, "interface2/fiendwar_kr/navigation/navigationframe.img", 13);
|
||||
CloseButton.OnClick = function() {
|
||||
local Win = LenheartNewUI_CreateWindow(FiendwarFightSituationSwitchC, "超时空战况表开关", 770, 9, 30, 30, 0);
|
||||
Win.ResetFocus();
|
||||
this.Visible = false;
|
||||
}.bindenv(this);
|
||||
Childrens.append(CloseButton);
|
||||
|
||||
local PIButton = Fiendwar_LenheartNewUI_ProgressIndicator(264, 11, 80, 10);
|
||||
PIButton.Controller = 1.0;
|
||||
PIButton.BaseX = 273;
|
||||
PIButton.EndX = 352;
|
||||
PIButton.BXposOffset = 79;
|
||||
PIButton.OnChangeControl = function(Controller) {
|
||||
AlphaValue = Controller;
|
||||
if (AlphaValue< 0.4) AlphaValue = 0.4;
|
||||
}.bindenv(this);
|
||||
Childrens.append(PIButton);
|
||||
|
||||
|
||||
//简易战况表复选框
|
||||
BaseSituationBtn = Fiendwar_LenheartNewUI_SwitchButton(198, 9);
|
||||
BaseSituationBtn.State = 0;
|
||||
BaseSituationBtn.ImgIndex = 358;
|
||||
BaseSituationBtn.Width = 19;
|
||||
BaseSituationBtn.Height = 19;
|
||||
BaseSituationBtn.OnClick = function() {
|
||||
switch (BaseSituationFlag) {
|
||||
case 0:
|
||||
BaseSituationFlag = 1;
|
||||
break;
|
||||
case 1:
|
||||
BaseSituationFlag = 0;
|
||||
break;
|
||||
}
|
||||
BaseSituationBtn.State = BaseSituationFlag;
|
||||
}.bindenv(this);
|
||||
AddChild(BaseSituationBtn);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//绘制简易动态Ani // obj -- ani路径 -- X -- Y -- ani名字
|
||||
function T_DrawDynamicAni(obj, aniFileName, x, y, aniname, Alpha) {
|
||||
local ani = obj.getVar().GetAnimationMap(aniname, aniFileName);
|
||||
ani.setRGBA(255, 255, 255, Alpha);
|
||||
sq_AnimationProc(ani);
|
||||
sq_drawCurrentFrame(ani, x, y, true);
|
||||
return ani;
|
||||
}
|
||||
|
||||
function DrawParty() {
|
||||
//绘制我的队伍
|
||||
if (FiendwarTotal.GetInstance().MyTeam) {
|
||||
local Mt = FiendwarTotal.GetInstance().MyTeam;
|
||||
if (!Mt) return;
|
||||
local PartyMaster;
|
||||
foreach(index, PartyMasterIcon in Mt.MembersList) {
|
||||
local XOffset = 0;
|
||||
local YOffset = 9 + (index * 22);
|
||||
|
||||
DrawImg("interface2/fiendwar_kr/navigation/partyseatnumber.img", 0, X + XOffset + 10, Y + YOffset);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/partyseatnumber.img", PartyMasterIcon.InfoObj.TeamId, X + XOffset + 10, Y + YOffset + 1);
|
||||
|
||||
sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
|
||||
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.D[0] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12;
|
||||
local AYpos = AvatarObj.D[1] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset;
|
||||
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
|
||||
DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local RgbaValue = sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger());
|
||||
if (PartyMasterIcon.InfoObj.Captain) RgbaValue = sq_RGBA(247, 214, 90, (250 * AlphaValue).tointeger());
|
||||
if (PartyMasterIcon.InfoObj.Captain) DrawImg("hud/fiendwarl.img", 18, X + 42 + XOffset, Y + 1 + YOffset);
|
||||
|
||||
local DrawName = PartyMasterIcon.InfoObj.Name;
|
||||
if (PlayerGiveUpTime && PlayerGiveUpTime[index]) {
|
||||
local STime = ((PlayerGiveUpTime[index] - (Clock() - PlayerGiveUpFlagTime)) / 1000);
|
||||
DrawName = "复活时间: " + STime.tostring() + "秒";
|
||||
if (STime <= 0) DrawName = PartyMasterIcon.InfoObj.Name;
|
||||
}
|
||||
//绘制名字
|
||||
L_sq_DrawCode(DrawName, X + XOffset + 58, Y + YOffset + 4, RgbaValue, 0, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
//绘制背景框
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 0, X + 7, Y);
|
||||
//绘制建议进度表文字
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 71, X + 130, Y + 10);
|
||||
|
||||
//绘制透明度文字
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 72, X + 220, Y + 10);
|
||||
|
||||
|
||||
|
||||
DrawParty();
|
||||
|
||||
|
||||
|
||||
//Boss底层特效
|
||||
T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/boss_effect.ani", X + 720, Y + 110, "超时空战况表背景图BOSS区域", (250 * AlphaValue).tointeger());
|
||||
|
||||
//下路特效
|
||||
Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/linebottom.ani", X + 7, Y, "超时空战况表背景图下路特效B");
|
||||
//中路特效
|
||||
Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/linemiddle.ani", X + 7, Y, "超时空战况表背景图中路特效B");
|
||||
//上路特效
|
||||
Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/linetop.ani", X + 7, Y, "超时空战况表背景图上路特效B");
|
||||
|
||||
//绘制地图
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 64, X + 7, Y + 1);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (Info) {
|
||||
foreach(Index, Value in Info) {
|
||||
if (Value.id != -1) {
|
||||
//裁切比例
|
||||
local SliceRate = 0;
|
||||
if (Value.e && Value.s) {
|
||||
SliceRate = (Value.e.tofloat() - (Clock().tofloat() - PackCurT.tofloat())) / Value.s.tofloat();
|
||||
}
|
||||
//BOSS暗
|
||||
if (Value.id == 28) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 60, X - 68 + SlotPos[Value.id][0], Y - 56 + SlotPos[Value.id][1]);
|
||||
}
|
||||
//BOSS光
|
||||
else if (Value.id == 29) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 61, X - 68 + SlotPos[Value.id][0], Y - 56 + SlotPos[Value.id][1]);
|
||||
}
|
||||
//兵营
|
||||
else if (Value.id == 10 || Value.id == 17 || Value.id == 27) {
|
||||
local Offset = 0;
|
||||
if (!Value.m) Offset = 7;
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 5 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
|
||||
//复活
|
||||
if (!Value.m) {
|
||||
if (SliceRate != 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 55, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
|
||||
DrawProgress(50, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
//生成小怪
|
||||
else {
|
||||
if (SliceRate != 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 54, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
|
||||
DrawProgress(50, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
//前哨
|
||||
else if (Value.id == 7 || Value.id == 15 || Value.id == 24) {
|
||||
local Offset = 0;
|
||||
if (!Value.m) Offset = 7;
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 4 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
|
||||
|
||||
if (SliceRate != 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 54, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
|
||||
DrawProgress(50, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
|
||||
}
|
||||
|
||||
} else if (Value.id == 6 || Value.id == 23) {
|
||||
//雷达
|
||||
if (Value.id == 6) {
|
||||
local Offset = 0;
|
||||
if (!Value.m) Offset = 7;
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 2 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
|
||||
}
|
||||
//炮塔
|
||||
else if (Value.id == 23) {
|
||||
local Offset = 0;
|
||||
if (!Value.m) Offset = 7;
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 3 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//基地和出发点一定有框
|
||||
if (Value.id == 0 || Value.id == 1 || Value.id == 11 || Value.id == 18) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
//基地两边都画
|
||||
if (Value.id == 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 26, X - 30 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 26, X + 33 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
|
||||
}
|
||||
} else {
|
||||
//有怪物
|
||||
if (Value.m || Value.n) {
|
||||
if (Value.m) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 27, X + 36 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
|
||||
//如果不是这些 那就是移动怪 并且活着
|
||||
if (Value.id != 10 && Value.id != 17 && Value.id != 27 && Value.id != 28 && Value.id != 29 && Value.id != 7 && Value.id != 15 && Value.id != 24 && Value.id != 6 && Value.id != 23 && !Value.n) {
|
||||
//没人打
|
||||
if (Value.u.len()< 1) {
|
||||
if (SliceRate != 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 56, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
|
||||
DrawProgress(52, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
//战斗中
|
||||
else {
|
||||
if (SliceRate != 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 53, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
|
||||
DrawProgress(49, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (Value.n) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 59, X + 36 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
|
||||
}
|
||||
DrawImg("interface2/fiendwar_kr/navigation/monsterface.img", 14, X + 37 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 98, X + 38 + SlotPos[Value.id][0], Y + 37 + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
|
||||
//如果有玩家
|
||||
if (Value.u.len() >= 1) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 26, X - 30 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
|
||||
|
||||
//说明有战斗
|
||||
if (Value.m) {
|
||||
//战斗特效
|
||||
T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/hexagon_ef_red.ani", X - 32 + SlotPos[Value.id][0], Y - 25 + SlotPos[Value.id][1], "超时空战况表战斗方格", (250 * AlphaValue).tointeger());
|
||||
} else {
|
||||
//TODO 这里判断有没有商人 没有商人画绿色 有画黄色
|
||||
T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/hexagon_ef_green.ani", X - 32 + SlotPos[Value.id][0], Y - 25 + SlotPos[Value.id][1], "超时空战况表安全方格", (250 * AlphaValue).tointeger());
|
||||
}
|
||||
//绘制队伍编号
|
||||
foreach(index, pos in Value.u) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 28 + pos, X - 24 + SlotPos[Value.id][0], Y + (index * 11) + 2 + SlotPos[Value.id][1]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//雷达死完要绘制怪物头像
|
||||
if (!RadarFlag) {
|
||||
if (Value.m || Value.n) {
|
||||
local ImgIndex = 0;
|
||||
if (Value.m && MonsterFace.rawin("m" + Value.m)) ImgIndex = MonsterFace["m" + Value.m];
|
||||
DrawImg("interface2/fiendwar_kr/navigation/monsterface.img", ImgIndex, X + 37 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
DrawFightTime(obj);
|
||||
}
|
||||
|
||||
function DrawImg(Path, Index, XPos, YPos) {
|
||||
L_sq_DrawImg(Path, Index, XPos, YPos, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
|
||||
function DrawProgress(Index, SliceRate, X, Y) {
|
||||
if (!turret2) return;
|
||||
if (RadarFlag) SliceRate = 1.0;
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 48, X, Y);
|
||||
setClip(X, Y, X + (SliceRate * 61.0).tointeger(), Y + 3); //开始裁切
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", Index, X, Y);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
}
|
||||
|
||||
//攻坚时间
|
||||
function DrawFightTime(obj) {
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 47, X + 576, Y - 9);
|
||||
if (EndTime) {
|
||||
local RealTime = EndTime - (Clock() - PackCurT);
|
||||
|
||||
local seconds = RealTime / 1000;
|
||||
local hours = seconds / 3600;
|
||||
local minutes = seconds / 60;
|
||||
|
||||
seconds %= 60;
|
||||
hours = format("%02d", hours);
|
||||
seconds = format("%02d", seconds).slice(-2);
|
||||
minutes = format("%02d", minutes).slice(-2);
|
||||
|
||||
local Offset = 0;
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", hours.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", hours.slice(1).tointeger(), X + 669 + Offset, Y + 2);
|
||||
Offset += 38;
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", minutes.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", minutes.slice(1).tointeger(), X + 669 + Offset, Y + 2);
|
||||
Offset += 38;
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", seconds.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", seconds.slice(1).tointeger(), X + 669 + Offset, Y + 2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
MainButton = null;
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
//在基地
|
||||
if (L_sq_GetRegionIndex() == 2) DrawParty();
|
||||
|
||||
if (getroottable().rawin("FiendwarTotal") && FiendwarTotal.GetInstance().EndTime) {
|
||||
DrawFightTime(obj);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 13, X + 770, Y);
|
||||
}
|
||||
|
||||
// //界面未打开
|
||||
// if (!this.Visible) {
|
||||
// //在甲板
|
||||
// if (FiendwarTotal.GetInstance().BaseConfig && FiendwarTotal.GetInstance().BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == FiendwarTotal.GetInstance().BaseConfig.town_index && L_sq_GetRegionIndex() >= 1) {
|
||||
// if (!MainButton) {
|
||||
// MainButton = LenheartBaseButton(X + 770, Y, 30, 30, "interface2/fiendwar_kr/navigation/navigationframe.img", 13);
|
||||
// } else {
|
||||
// MainButton.Show();
|
||||
// if (MainButton.isLBActive()) {
|
||||
// this.Visible = true;
|
||||
// GetInfo();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
文件名:FiendwarHallCreateParty.nut
|
||||
路径:Plugins/Fiendwar/FiendwarHallCreateParty.nut
|
||||
创建日期:2024-03-18 13:20
|
||||
文件用途:
|
||||
*/
|
||||
|
||||
|
||||
class FiendwarFightSituationSwitchC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//不要窗口模式
|
||||
NoWindow = true;
|
||||
|
||||
function GetInfo() {
|
||||
local T = {
|
||||
op = 20063053,
|
||||
// teamsId = FiendwarTotal.GetInstance().MyPartyId
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(0, 0, 30, 30, "interface2/fiendwar_kr/navigation/navigationframe.img", 13);
|
||||
CloseButton.OnClick = function() {
|
||||
local Win = LenheartNewUI_CreateWindow(FiendwarFightSituationC, "超时空攻坚战况表", 0, 8, 800, 600, 0);
|
||||
Win.Visible = true;
|
||||
Win.ResetFocus();
|
||||
GetInfo();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
if (FiendwarTotal.GetInstance().EndTime)
|
||||
DrawFightTime(obj);
|
||||
}
|
||||
|
||||
//攻坚时间
|
||||
function DrawFightTime(obj) {
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 47, X + 576, Y - 9);
|
||||
if (FiendwarTotal.GetInstance().EndTime) {
|
||||
local RealTime = FiendwarTotal.GetInstance().EndTime - (Clock() - FiendwarTotal.GetInstance().PackCurT);
|
||||
|
||||
local seconds = RealTime / 1000;
|
||||
local hours = seconds / 3600;
|
||||
local minutes = seconds / 60;
|
||||
|
||||
seconds %= 60;
|
||||
hours = format("%02d", hours);
|
||||
seconds = format("%02d", seconds).slice(-2);
|
||||
minutes = format("%02d", minutes).slice(-2);
|
||||
|
||||
local Offset = 0;
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", hours.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", hours.slice(1).tointeger(), X + 669 + Offset, Y + 2);
|
||||
Offset += 38;
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", minutes.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", minutes.slice(1).tointeger(), X + 669 + Offset, Y + 2);
|
||||
Offset += 38;
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", seconds.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", seconds.slice(1).tointeger(), X + 669 + Offset, Y + 2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function CloseWindow() {
|
||||
// print(1233);
|
||||
// local Win = LenheartNewUI_CreateWindow(FiendwarFightSituationSwitchC, "超时空战况表开关", 770, 9, 30, 30, 0);
|
||||
// Win.Visible = true;
|
||||
// Win.ResetFocus();
|
||||
// LenheartNewUI_Windows.CloseWindow();
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
if (!FiendwarTotal.GetInstance().EndTime) {
|
||||
Visible = false;
|
||||
} else {
|
||||
Visible = true;
|
||||
}
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
}
|
||||
LenheartNewUI_CreateWindow(FiendwarFightSituationC, "超时空攻坚战况表", 0, 8, 800, 600, 0);
|
||||
|
|
@ -0,0 +1,406 @@
|
|||
/*
|
||||
文件名:FiendwarHall.nut
|
||||
路径:Plugins/Fiendwar/FiendwarHall.nut
|
||||
创建日期:2024-03-11 12:54
|
||||
文件用途:超时空之战大厅
|
||||
*/
|
||||
class FiendwarHallC extends LenheartNewUI_Windows {
|
||||
|
||||
// DeBugMode = true;
|
||||
|
||||
WindowObj = null; //窗口对象
|
||||
MainState = false; //主状态
|
||||
X = 320;
|
||||
Y = 40;
|
||||
//默认显示状态需要是关闭 因为要通过按钮打开
|
||||
Visible = false;
|
||||
//攻坚队List
|
||||
PartyList = null;
|
||||
|
||||
|
||||
function GetInstance() {
|
||||
return getroottable()["FiendwarHallCObj"];
|
||||
}
|
||||
|
||||
//获取所有队伍回调包
|
||||
function GetAllTeamCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
//清除原来的List PartyList可以直接清除 但是Childrens中的窗口需要调用底层方法清除队伍类
|
||||
PartyList = [];
|
||||
// this.RemoveChilds(FiendwarHallPartyC);
|
||||
//遍历包构造攻坚队UI对象
|
||||
foreach(TeamsSimple in Jso.TeamSimList) {
|
||||
local T = {
|
||||
TeamId = TeamsSimple.TeamId.tostring(),
|
||||
TeamName = TeamsSimple.TeamName,
|
||||
TeamPlayerCount = TeamsSimple.TeamPlayerCount,
|
||||
State = TeamsSimple.State
|
||||
}
|
||||
local TeamBuf = FiendwarHallPartyC(T);
|
||||
AddChild(TeamBuf);
|
||||
PartyList.append(TeamBuf);
|
||||
}
|
||||
//收到刷新队伍列表包时需要将队伍窗口关闭
|
||||
if ("Close" in Jso) LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
|
||||
// RemoveChilds(FiendwarHallPartyC, false);
|
||||
}
|
||||
|
||||
//获取攻坚队信息回调
|
||||
function GetTeamInfoCallBack(Chunk) {
|
||||
// Sout("收到包 : \n %L", Chunk);
|
||||
|
||||
local Jso = Json.Decode(Chunk);
|
||||
LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
|
||||
local Win = LenheartNewUI_CreateWindow(FiendwarPartyInfoC, "超时空我的队伍窗口", 430, 15, 354, 290, 18);
|
||||
FiendwarTotal.GetInstance().MyTeam = Win;
|
||||
Win.Visible = false;
|
||||
|
||||
if (!("Close" in Jso)) {
|
||||
//开启队伍窗口显示
|
||||
Win.Visible = true;
|
||||
//设置置顶
|
||||
Win.ResetFocus();
|
||||
}
|
||||
//清空成员对象集合
|
||||
Win.MembersList = [];
|
||||
//清空是否为我的队伍状态
|
||||
Win.IsMyTeam = false;
|
||||
//清空是否为队长状态
|
||||
Win.IsCaptain = false;
|
||||
//赋值队伍名称
|
||||
Win.TeamName = Jso.team.TeamName;
|
||||
//赋值队伍ID
|
||||
Win.TeamID = Jso.team.TeamId;
|
||||
//遍历Team包 用于构造队伍窗口中的每一位成员
|
||||
foreach(_index, MemberObj in Jso.team.characNum) {
|
||||
//说明我在这个攻坚队里
|
||||
if (Jso.cid == MemberObj.CID) {
|
||||
Win.IsMyTeam = true;
|
||||
|
||||
local Fo = FiendwarTotal.GetInstance();
|
||||
//向全局类存入我的攻坚队伍ID
|
||||
Fo.MyPartyId = Jso.team.TeamId;
|
||||
//存入我的CID
|
||||
Fo.MyCid = Jso.cid;
|
||||
//说明是队长
|
||||
if (Jso.cid == Jso.team.captainCid) {
|
||||
Win.IsCaptain = true;
|
||||
//存入我是攻坚队队长
|
||||
Fo.IsCaptain = true;
|
||||
}
|
||||
}
|
||||
local T = {
|
||||
PartyId = Jso.team.TeamId, //攻坚队ID
|
||||
TeamId = MemberObj.characNum + 1, //小队编号
|
||||
Level = MemberObj.PlayerLevel.tostring(), //等级
|
||||
Name = MemberObj.PlayerName, //名字
|
||||
JobName = MemberObj.PlayerGrowTypeJob, //职业名
|
||||
Job = MemberObj.PlayerJob, //职业编号
|
||||
StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料
|
||||
EquVos = MemberObj.equVos, //装备List 用于显示头像
|
||||
Captain = MemberObj.CaptainBool, //是否为攻坚队队长
|
||||
Cid = MemberObj.CID, //Cid
|
||||
OnlineState = MemberObj.onLineStart, //在线状态
|
||||
ExitTime = MemberObj.exitTime, //离队时间
|
||||
PlayerSession = MemberObj.PlayerSession, //玩家在世界中的Session 用于进行原生用户操作
|
||||
ClearanceCount = MemberObj.ClearanceCount, //通关次数
|
||||
ClearanceCountMax = Jso.ClearanceCountMax, //总通关次数
|
||||
}
|
||||
//通过类构造并添加队伍成员UI对象
|
||||
local TeamBuf = FiendwarPartyInfoMemberC(T);
|
||||
Win.AddChild(TeamBuf);
|
||||
Win.MembersList.append(TeamBuf);
|
||||
}
|
||||
|
||||
//刷新界面
|
||||
Win.RegisterWidget();
|
||||
//刷新自己的界面
|
||||
RegisterWidget();
|
||||
}
|
||||
//获取所有队伍
|
||||
function GetAllTeamCall() {
|
||||
local Jso = {
|
||||
op = 20063011
|
||||
}
|
||||
SendPack(Jso);
|
||||
}
|
||||
//退出队伍回调
|
||||
function ExitPartyCallBack(Chunk) {
|
||||
LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
|
||||
FiendwarTotal.GetInstance().ClearInfo();
|
||||
|
||||
local Win = LenheartNewUI_CreateWindow(FiendwarHallC, "超时空攻坚队伍列表", 320, 40, 478, 434, 18);
|
||||
Win.CloseWindow();
|
||||
RegisterWidget();
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
PartyList = [];
|
||||
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
//注册回调包
|
||||
Pack_Control.rawset(20063002, GetAllTeamCallBack.bindenv(this));
|
||||
Pack_Control.rawset(20063004, GetTeamInfoCallBack.bindenv(this));
|
||||
Pack_Control.rawset(20063008, ExitPartyCallBack.bindenv(this));
|
||||
|
||||
GetAllTeamCall();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
OnlyPreparingBtn = null;
|
||||
OnlyPreparingFlag = 1;
|
||||
InputObject = null;
|
||||
|
||||
function RegisterWidget() {
|
||||
RemoveChilds(FiendwarHallPartyC, false);
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(457, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
//我的频道复选框
|
||||
local MyChannelBtn = LenheartNewUI_SwitchButtonText(16, 30, "我的频道");
|
||||
MyChannelBtn.State = 1;
|
||||
MyChannelBtn.ImgIndex = 358;
|
||||
MyChannelBtn.SetTextPos(12, 2);
|
||||
MyChannelBtn.Width = 76;
|
||||
MyChannelBtn.Height = 16;
|
||||
AddChild(MyChannelBtn);
|
||||
|
||||
//只查看招募中的攻坚队
|
||||
OnlyPreparingBtn = LenheartNewUI_SwitchButtonText(110, 30, "只查看招募中的攻坚队");
|
||||
OnlyPreparingBtn.ImgIndex = 358;
|
||||
OnlyPreparingBtn.SetTextPos(12, 2);
|
||||
OnlyPreparingBtn.Width = 76;
|
||||
OnlyPreparingBtn.Height = 16;
|
||||
OnlyPreparingBtn.OnClick = function() {
|
||||
switch (OnlyPreparingFlag) {
|
||||
case 0:
|
||||
OnlyPreparingFlag = 1;
|
||||
break;
|
||||
case 1:
|
||||
OnlyPreparingFlag = 0;
|
||||
break;
|
||||
}
|
||||
OnlyPreparingBtn.State = OnlyPreparingFlag;
|
||||
}.bindenv(this);
|
||||
AddChild(OnlyPreparingBtn);
|
||||
|
||||
//搜索队伍输入框
|
||||
InputObject = LenheartNewUI_BaseInput(260, 31, 80, 20);
|
||||
AddChild(InputObject);
|
||||
|
||||
//搜索按钮
|
||||
local FindButton = LenheartNewUI_ButtonText(348, 28, 5, "搜索");
|
||||
FindButton.SetTextOffset(0, 1);
|
||||
FindButton.OnClick = function() {
|
||||
if (InputObject.str.len() > 0) {
|
||||
|
||||
}
|
||||
}.bindenv(this);
|
||||
AddChild(FindButton);
|
||||
|
||||
//重置按钮
|
||||
local ResetButton = LenheartNewUI_ButtonText(408, 28, 5, "重置");
|
||||
ResetButton.SetTextOffset(0, 1);
|
||||
ResetButton.OnClick = function() {
|
||||
InputObject.str = "";
|
||||
}.bindenv(this);
|
||||
AddChild(ResetButton);
|
||||
|
||||
//编号按钮
|
||||
local ModelButton = LenheartNewUI_ButtonText(9, 56, -18, "编号");
|
||||
ModelButton.Idx = 163;
|
||||
ModelButton.DWidth = -8;
|
||||
ModelButton.SetTextOffset(-9, 1);
|
||||
AddChild(ModelButton);
|
||||
|
||||
//状态按钮
|
||||
local StateButton = LenheartNewUI_ButtonText(51, 56, -18, "状态");
|
||||
StateButton.Idx = 163;
|
||||
StateButton.DWidth = -8;
|
||||
StateButton.SetTextOffset(-9, 1);
|
||||
AddChild(StateButton);
|
||||
|
||||
//频道按钮
|
||||
local ChannelButton = LenheartNewUI_ButtonText(93, 56, -18, "频道");
|
||||
ChannelButton.Idx = 163;
|
||||
ChannelButton.DWidth = -8;
|
||||
ChannelButton.SetTextOffset(-9, 1);
|
||||
AddChild(ChannelButton);
|
||||
|
||||
//攻坚队名称按钮
|
||||
local PartyNameButton = LenheartNewUI_ButtonText(135, 56, 100, "攻坚队名称");
|
||||
PartyNameButton.Idx = 163;
|
||||
PartyNameButton.DWidth = 223;
|
||||
PartyNameButton.FillWidth = 1;
|
||||
PartyNameButton.FirstWidth = 21;
|
||||
PartyNameButton.SetTextOffset(26, 1);
|
||||
AddChild(PartyNameButton);
|
||||
|
||||
//阶段按钮
|
||||
local StageButton = LenheartNewUI_ButtonText(289, 56, 52, "阶段");
|
||||
StageButton.Idx = 163;
|
||||
StageButton.DWidth = 140;
|
||||
StageButton.FillWidth = 1;
|
||||
StageButton.FirstWidth = 21;
|
||||
StageButton.SetTextOffset(26, 1);
|
||||
AddChild(StageButton);
|
||||
|
||||
//队员数量按钮
|
||||
local TeammembersButton = LenheartNewUI_ButtonText(402, 56, 50, "队员数量");
|
||||
TeammembersButton.Idx = 163;
|
||||
TeammembersButton.FillWidth = 1;
|
||||
TeammembersButton.FirstWidth = 21;
|
||||
TeammembersButton.DWidth = 47;
|
||||
TeammembersButton.SetTextOffset(-8, 1);
|
||||
AddChild(TeammembersButton);
|
||||
|
||||
//创建攻坚队按钮
|
||||
local CreateOrMyPartyStr = "创建攻坚队";
|
||||
if (FiendwarTotal.GetInstance().MyPartyId) CreateOrMyPartyStr = "我的攻坚队";
|
||||
local MyPartyButton = LenheartNewUI_ButtonText(15, 395, 30, CreateOrMyPartyStr);
|
||||
MyPartyButton.SetTextOffset(-6, 1);
|
||||
MyPartyButton.OnClick = function() {
|
||||
if (FiendwarTotal.GetInstance().MyPartyId) {
|
||||
//发送查看攻坚队具体信息包
|
||||
local T = {
|
||||
op = 20063013,
|
||||
teamsId = FiendwarTotal.GetInstance().MyPartyId
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
} else {
|
||||
local Win = LenheartNewUI_CreateWindow(FiendwarHallCreatePartyC, "超时空创建队伍窗口", 290, 220, 284, 154, 18);
|
||||
Win.Visible = true;
|
||||
Win.ResetFocus();
|
||||
}
|
||||
}.bindenv(this);
|
||||
AddChild(MyPartyButton);
|
||||
|
||||
//左翻页按钮
|
||||
local LeftButton = LenheartNewUI_BaseButton(160, 400, 15, 15, "interface/lenheartwindowcommon.img", 34);
|
||||
LeftButton.OnClick = function() {
|
||||
if (Page > 0) Page--;
|
||||
}.bindenv(this);
|
||||
AddChild(LeftButton);
|
||||
|
||||
//右翻页按钮
|
||||
local RightButton = LenheartNewUI_BaseButton(220, 400, 15, 15, "interface/lenheartwindowcommon.img", 38);
|
||||
RightButton.OnClick = function() {
|
||||
if (Page<(((PartyList.len() / PageMaxCount)))) Page++;
|
||||
}.bindenv(this);
|
||||
AddChild(RightButton);
|
||||
|
||||
//进入待机按钮
|
||||
local FQButton = LenheartNewUI_ButtonText(300, 394, 20, "进入待机");
|
||||
FQButton.SetTextOffset(-5, 2);
|
||||
FQButton.State = 8;
|
||||
AddChild(FQButton);
|
||||
|
||||
//刷新按钮
|
||||
local RefreshButton = LenheartNewUI_BaseButton(410, 395, 25, 25, "interface/lenheartwindowcommon.img", 366);
|
||||
RefreshButton.OnClick = function() {
|
||||
GetAllTeamCall();
|
||||
}.bindenv(this);
|
||||
AddChild(RefreshButton);
|
||||
|
||||
//设置按钮
|
||||
local SettingButton = LenheartNewUI_BaseButton(440, 394, 15, 15, "interface/lenheartwindowcommon.img", 362);
|
||||
SettingButton.State = 8;
|
||||
AddChild(SettingButton);
|
||||
}
|
||||
|
||||
|
||||
function DrawMainBackGround(obj) {
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X, Y + 10, 540 * 0.85, 420 * 0.9, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
|
||||
L_sq_DrawWindow(X + 6, Y + 19, 528 * 0.85, 47, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
|
||||
//绘制背景框标题栏
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 3, X + 1, Y);
|
||||
|
||||
L_sq_DrawCode("寻找攻坚队", X + 217, Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1);
|
||||
|
||||
//绘制队伍List
|
||||
DrawPartyList(obj);
|
||||
|
||||
L_sq_DrawWindow(X + 6, Y + 382, 528 * 0.85, 24, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
|
||||
//计算页数
|
||||
local PageStr = Page + 1 + " / " + ((PartyList.len() / PageMaxCount) + 1);
|
||||
//绘制当前页数
|
||||
L_sq_DrawCode(PageStr, X + 166 + LenheartTextClass.GetStringLength(PageStr) / 2, Y + 402, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
}
|
||||
|
||||
|
||||
Page = 0;
|
||||
PageMaxCount = 13;
|
||||
//绘制队伍信息
|
||||
function DrawPartyList(obj) {
|
||||
if (PartyList.len() <= 0) return;
|
||||
//先遍历一遍全部挪走
|
||||
foreach(Index, TeamObj in PartyList) {
|
||||
TeamObj.SyncPos(9999, 9999);
|
||||
}
|
||||
//在遍历需要显示的同步坐标
|
||||
foreach(Index, TeamObj in PartyList.slice((((Page) * PageMaxCount) > 0) ? ((Page) * PageMaxCount) : 0, ((Page + 1) * PageMaxCount) > PartyList.len() ? PartyList.len() : ((Page + 1) * PageMaxCount))) {
|
||||
TeamObj.SyncPos(X, Y + 2 + (Index % PageMaxCount) * 23);
|
||||
// TeamObj.Show();
|
||||
}
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
DrawMainBackGround(obj);
|
||||
}
|
||||
|
||||
//绘制入口
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
}
|
||||
|
||||
|
||||
MainButton = null;
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
//界面未打开
|
||||
if (!this.Visible && L_sq_RA(0x1A5FB4C, "0x14+0x28+")< 2) {
|
||||
//在甲板
|
||||
if (FiendwarTotal.GetInstance().BaseConfig && FiendwarTotal.GetInstance().BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == FiendwarTotal.GetInstance().BaseConfig.town_index && L_sq_GetRegionIndex() >= 1) {
|
||||
local PaW = sq_GetPopupWindowMainCotrol(6);
|
||||
if (PaW) {
|
||||
L_sq_UseSkill(DIK_ESCAPE);
|
||||
this.Visible = true;
|
||||
GetAllTeamCall();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
//鼠标滚轮时间回调
|
||||
function OnMouseWheel(Flag, MousePos_X, MousePos_Y) {
|
||||
|
||||
switch (Flag) {
|
||||
//下
|
||||
case 0: {
|
||||
if (Page<(((PartyList.len() / PageMaxCount)))) Page++;
|
||||
break;
|
||||
}
|
||||
//上
|
||||
case 1: {
|
||||
if (Page > 0) Page--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
LenheartNewUI_Windows.OnMouseWheel(Flag, MousePos_X, MousePos_Y);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,259 @@
|
|||
/*
|
||||
文件名:FiendwarHallApplyJoin.nut
|
||||
路径:Plugins/Fiendwar/FiendwarHallApplyJoin.nut
|
||||
创建日期:2024-04-02 12:07
|
||||
文件用途:超时空玩家申请加入攻坚队
|
||||
*/
|
||||
class FiendwarHallApplyJoinC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//角色对象
|
||||
Charc = null;
|
||||
//角色等级
|
||||
Level = "100级";
|
||||
//角色名称
|
||||
Name = "凌众K";
|
||||
//角色职业
|
||||
Job = 0;
|
||||
//角色决斗等级
|
||||
PvpLevel = 1;
|
||||
//职业名称
|
||||
JobName = "大暗黑天";
|
||||
//角色复活币
|
||||
Coin = "139个";
|
||||
//角色疲劳值
|
||||
Fatigue = "156";
|
||||
//战斗力
|
||||
Combat = "170051206";
|
||||
//通过次数
|
||||
ClearanceCount = 63;
|
||||
//玩家世界Session
|
||||
PlayerSession = 0;
|
||||
|
||||
//请求者信息集合
|
||||
RequestJoinTeamArr = null;
|
||||
NowSelectJoinIndex = 0;
|
||||
|
||||
//角色头像集合
|
||||
AvatarArr = null;
|
||||
|
||||
//初始化Flag
|
||||
InitFlag = false;
|
||||
|
||||
//X Y 裁切开始X Y 裁切结束X Y
|
||||
OffsetArr = [
|
||||
//男鬼剑士
|
||||
[45, 103, 230, 231],
|
||||
//女格斗家
|
||||
[56, 102, 235, 279],
|
||||
//男神枪手
|
||||
[52, 130, 238, 246],
|
||||
//女魔法师
|
||||
[55, 87, 234, 293],
|
||||
//男圣职者
|
||||
[42, 115, 223, 200],
|
||||
//女神枪手
|
||||
[52, 119, 226, 209],
|
||||
//暗夜使者
|
||||
[56, 102, 225, 226],
|
||||
//男格斗家
|
||||
[50, 114, 239, 216],
|
||||
//男魔法师
|
||||
[54, 103, 236, 276],
|
||||
//黑暗武士
|
||||
[46, 102, 229, 232],
|
||||
//缔造者
|
||||
[56, 86, 235, 293],
|
||||
]
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
RequestJoinTeamArr = [];
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
function InitInfo() {
|
||||
local InfoObj = RequestJoinTeamArr[NowSelectJoinIndex];
|
||||
Charc = InfoObj.Charc;
|
||||
//角色等级
|
||||
Level = InfoObj.Level;
|
||||
//角色名称
|
||||
Name = InfoObj.Name;
|
||||
//角色职业
|
||||
Job = InfoObj.Job;
|
||||
//角色决斗等级
|
||||
PvpLevel = InfoObj.PvpLevel;
|
||||
//职业名称
|
||||
JobName = InfoObj.JobName;
|
||||
//角色复活币
|
||||
Coin = InfoObj.Coin + "个";
|
||||
//角色疲劳值
|
||||
Fatigue = InfoObj.Fatigue.tostring();
|
||||
//战斗力
|
||||
Combat = InfoObj.Combat;
|
||||
//通过次数
|
||||
ClearanceCount = InfoObj.ClearanceCount;
|
||||
//头像
|
||||
AvatarArr = InfoObj.AvatarArr;
|
||||
//玩家世界Session
|
||||
this.PlayerSession = InfoObj.PlayerSession;
|
||||
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
InitFlag = true;
|
||||
}
|
||||
|
||||
function PopOne() {
|
||||
if (RequestJoinTeamArr.len() > 1) {
|
||||
RequestJoinTeamArr.remove(0);
|
||||
InitInfo();
|
||||
} else {
|
||||
RequestJoinTeamArr = [];
|
||||
CloseWindow();
|
||||
}
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(244, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
PopOne();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
//冒险团按钮
|
||||
local MButton = LenheartNewUI_ButtonText(24, 114, 15, "冒险团信息");
|
||||
MButton.SetTextOffset(-13, 2);
|
||||
AddChild(MButton);
|
||||
//冒险图鉴按钮
|
||||
local FQButton = LenheartNewUI_ButtonText(95, 113, 15, "冒险图鉴");
|
||||
FQButton.State = 8;
|
||||
FQButton.SetTextOffset(-7, 2);
|
||||
AddChild(FQButton);
|
||||
//查看信息按钮
|
||||
local CButton = LenheartNewUI_ButtonText(166, 114, 15, "查看信息");
|
||||
CButton.SetTextOffset(-7, 2);
|
||||
CButton.OnClick = function() {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
// obj.sq_PlaySound("CLICK_BUTTON1");
|
||||
L_sq_SendPackType(8);
|
||||
L_sq_SendPackWord(this.PlayerSession);
|
||||
L_sq_SendPackByte(3);
|
||||
L_sq_SendPack();
|
||||
getroottable().WindowsShowABFlag <- false; //让原生窗口置顶
|
||||
}.bindenv(this);
|
||||
AddChild(CButton);
|
||||
|
||||
//确认按钮
|
||||
local OkButton = LenheartNewUI_ButtonText(74, 192, -1, "是");
|
||||
OkButton.SetTextOffset(3, 2);
|
||||
OkButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063003,
|
||||
teamsId = RinDro_Anton_Obj.MyRaidTeamId,
|
||||
charac = Charc
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
PopOne();
|
||||
}.bindenv(this);
|
||||
AddChild(OkButton);
|
||||
//拒绝按钮
|
||||
local NoButton = LenheartNewUI_ButtonText(130, 192, -1, "否");
|
||||
NoButton.SetTextOffset(3, 2);
|
||||
NoButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063019,
|
||||
charac = Charc.CID
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
PopOne();
|
||||
}.bindenv(this);
|
||||
AddChild(NoButton);
|
||||
|
||||
//左翻页按钮
|
||||
local LeftButton = LenheartNewUI_BaseButton(90, 220, 15, 15, "interface/lenheartwindowcommon.img", 34);
|
||||
LeftButton.OnClick = function() {
|
||||
if (NowSelectJoinIndex > 0) NowSelectJoinIndex--;
|
||||
InitInfo();
|
||||
}.bindenv(this);
|
||||
AddChild(LeftButton);
|
||||
|
||||
//右翻页按钮
|
||||
local RightButton = LenheartNewUI_BaseButton(154, 220, 15, 15, "interface/lenheartwindowcommon.img", 38);
|
||||
RightButton.OnClick = function() {
|
||||
if (NowSelectJoinIndex< RequestJoinTeamArr.len() - 1) NowSelectJoinIndex++;
|
||||
InitInfo();
|
||||
}.bindenv(this);
|
||||
AddChild(RightButton);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
if (!InitFlag) return;
|
||||
//标题栏
|
||||
L_sq_DrawButton(X - 2, Y, 252, "interface/lenheartwindowcommon.img", 609, 2, 7);
|
||||
//绘制窗口名字
|
||||
L_sq_DrawCode("攻坚队申请", X + 100, Y + 4, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X, Y + 16, 240, 200, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
//绘制背景
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 15, X + 6, Y + 22);
|
||||
//绘制角色背景
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 14, X + 8, Y + 40);
|
||||
//绘制角色头像
|
||||
if (AvatarArr) {
|
||||
|
||||
foreach(AvatarObj in AvatarArr) {
|
||||
local AXpos = AvatarObj.D[0] + X + OffsetArr[Job][0] - 8;
|
||||
local AYpos = AvatarObj.D[1] + Y + OffsetArr[Job][1] + 40;
|
||||
setClip(AXpos + OffsetArr[Job][2], AYpos + OffsetArr[Job][3], AXpos + OffsetArr[Job][2] + 22, AYpos + OffsetArr[Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
}
|
||||
//绘制角色等级
|
||||
L_sq_DrawCode(Level, X + 78 - LenheartTextClass.GetStringLength(Level) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制角色名字
|
||||
L_sq_DrawCode(Name, X + 137 - LenheartTextClass.GetStringLength(Name) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制角色职业类型图标
|
||||
if (Job != 4) L_sq_DrawImg("hud/fiendwarl.img", 16, X + 176, Y + 43);
|
||||
//绘制角色职业名称
|
||||
L_sq_DrawCode(JobName, X + 224 - LenheartTextClass.GetStringLength(JobName) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X + 21, Y + 65, 30, 30, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
L_sq_DrawWindow(X + 62, Y + 65, 156, 30, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
//绘制决斗等级
|
||||
local PvpImg = PvpLevel / 6;
|
||||
L_sq_DrawImg("hud/fiendwarl1.img", 99, X + 25, Y + 74);
|
||||
L_sq_DrawCode(PvpLevel.tostring(), X + 45 - LenheartTextClass.GetStringLength(PvpLevel.tostring()) / 2, Y + 91, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制各项信息
|
||||
L_sq_DrawCode("复活币:", X + 70, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode(Coin, X + 134 - LenheartTextClass.GetStringLength(Coin) / 2, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode("疲劳值:", X + 158, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode(Fatigue, X + 216 - LenheartTextClass.GetStringLength(Fatigue) / 2, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode("战斗力:", X + 70, Y + 93, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode(Combat, X + 170 - LenheartTextClass.GetStringLength(Combat) / 2, Y + 93, sq_RGBA(74, 162, 86, 255), 0, 1);
|
||||
L_sq_DrawCode("通关超时空攻坚战" + ClearanceCount + "次", X + 130 - LenheartTextClass.GetStringLength("通关超时空攻坚战" + ClearanceCount + "次") / 2, Y + 144, sq_RGBA(221, 213, 147, 255), 0, 1);
|
||||
L_sq_DrawCode("申请加入攻坚队。", X + 87, Y + 160, sq_RGBA(160, 132, 75, 255), 0, 1);
|
||||
L_sq_DrawCode("请确定是否同意?", X + 87, Y + 176, sq_RGBA(160, 132, 75, 255), 0, 1);
|
||||
|
||||
L_sq_DrawWindow(X + 77, Y + 216, 100, 20, "interface/lenheartwindowcommon.img", 204, 4, 14, 4, 14);
|
||||
//绘制页数
|
||||
local Str = (NowSelectJoinIndex + 1) + " / " + RequestJoinTeamArr.len();
|
||||
L_sq_DrawCode(Str, X + 137 - LenheartTextClass.GetStringLength(Str) / 2, Y + 222, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
文件名:FiendwarHallCreateParty.nut
|
||||
路径:Plugins/Fiendwar/FiendwarHallCreateParty.nut
|
||||
创建日期:2024-03-18 13:20
|
||||
文件用途:
|
||||
*/
|
||||
|
||||
|
||||
class FiendwarHallCreatePartyC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
DeBugMode = false;
|
||||
|
||||
X = 290;
|
||||
Y = 220;
|
||||
//输入框
|
||||
InputObject = null;
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(266, 2, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
local OkButton = LenheartNewUI_ButtonText(78, 124, 5, "确定");
|
||||
OkButton.SetTextOffset(0, 1);
|
||||
OkButton.OnClick = function() {
|
||||
//如果队伍名输出框的文字长度大于0就创建队伍 创建时告诉服务端自己的 头发 帽子 脸部 皮肤
|
||||
if (InputObject.str.len() > 0) {
|
||||
local T = {
|
||||
op = 20063001,
|
||||
teamsName = InputObject.str,
|
||||
items = [L_sq_GetCharacterAttribute(0x1c, 21), L_sq_GetCharacterAttribute(0x1c, 15), L_sq_GetCharacterAttribute(0x1c, 14), L_sq_GetCharacterAttribute(0x1c, 13)],
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
CloseWindow();
|
||||
}
|
||||
}.bindenv(this);
|
||||
AddChild(OkButton);
|
||||
|
||||
local CloseButton = LenheartNewUI_ButtonText(144, 124, 5, "取消");
|
||||
CloseButton.SetTextOffset(0, 1);
|
||||
CloseButton.OnClick = function() {
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
InputObject = LenheartNewUI_BaseInput(62, 68, 152, 20);
|
||||
AddChild(InputObject);
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
L_sq_DrawWindow(X, Y + 10, 260, 120, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
|
||||
L_sq_DrawWindow(X, Y + 10, 260, 120, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
|
||||
L_sq_DrawImg("interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 0, X + 11, Y + 21);
|
||||
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 9, X - 2, Y + 2);
|
||||
L_sq_DrawCode("创建攻坚队", X + 112, Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1);
|
||||
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 10, X + 72, Y + 44);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
文件名:FiendwarHallGoBossDgn.nut
|
||||
路径:Plugins/Fiendwar/FiendwarHallGoBossDgn.nut
|
||||
创建日期:2024-05-10 06:55
|
||||
文件用途:进入罗什的窗口
|
||||
*/
|
||||
class FiendwarHallGoBossDgnC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
Dark = 0;
|
||||
Light = 0;
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
Childrens = [];
|
||||
// //关闭按钮
|
||||
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
// CloseButton.OnClick = function() {
|
||||
// this.Visible = false;
|
||||
// }.bindenv(this);
|
||||
// Childrens.append(CloseButton);
|
||||
|
||||
//黑暗按钮
|
||||
local DarkButton = LenheartNewUI_BaseButton(4, 20, 264, 48, "interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 1);
|
||||
DarkButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063059,
|
||||
key = 28
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
if (Dark) DarkButton.State = 8;
|
||||
Childrens.append(DarkButton);
|
||||
//纯白按钮
|
||||
local LightButton = LenheartNewUI_BaseButton(4, 68, 264, 48, "interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 5);
|
||||
LightButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063059,
|
||||
key = 29
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
if (Light) LightButton.State = 8;
|
||||
Childrens.append(LightButton);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
L_sq_DrawWindow(X, Y + 10, 246, 85, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
|
||||
L_sq_DrawWindow(X, Y + 10, 246, 85, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
|
||||
|
||||
// L_sq_DrawImg("interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 0, X + 11, Y + 21);
|
||||
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 25, X - 3, Y + 2);
|
||||
L_sq_DrawCode("量子时空传送站", X + 98, Y + 5, sq_RGBA(179, 169, 135, 255), 0, 1);
|
||||
|
||||
// L_sq_DrawImg("hud/fiendwarl.img", 10, X + 72, Y + 44);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
/*
|
||||
文件名:FiendwarHallParty.nut
|
||||
路径:Plugins/Fiendwar/FiendwarHallParty.nut
|
||||
创建日期:2024-04-01 22:30
|
||||
文件用途:超时空之战 大厅中的队伍对象
|
||||
*/
|
||||
|
||||
class FiendwarHallPartyC extends LenheartNewUI_CommonUi {
|
||||
X = 0;
|
||||
Y = 0;
|
||||
Width = null;
|
||||
Height = null;
|
||||
TeamObj = null;
|
||||
//选中状态
|
||||
SelectState = false;
|
||||
//攻坚状态
|
||||
OffensiveState = 0;
|
||||
|
||||
constructor(gTeamObj) {
|
||||
//拿到信息Map
|
||||
TeamObj = gTeamObj;
|
||||
//设定宽高 坐标不重要 会被父窗口的Sync同步坐标
|
||||
this.Width = 458;
|
||||
this.Height = 21;
|
||||
|
||||
this.OnClick = function() {
|
||||
//还原父对象中其他攻坚队伍类 选中自己
|
||||
foreach(Obj in Parent.PartyList) {
|
||||
Obj.SelectState = false;
|
||||
}
|
||||
SelectState = !SelectState;
|
||||
//发送查看攻坚队具体信息包
|
||||
local T = {
|
||||
op = 20063013,
|
||||
teamsId = TeamObj.TeamId
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
}
|
||||
LenheartNewUI_CommonUi.constructor(10, 82, this.Width, this.Height);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
|
||||
//绘制底槽
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 4, X, Y);
|
||||
|
||||
//绘制队伍编号
|
||||
L_sq_DrawCode(TeamObj.TeamId, X + 22 - LenheartTextClass.GetStringLength(TeamObj.TeamId) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制队长头像
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", 55, X + 52, Y + 7);
|
||||
try {
|
||||
local channel_index = FiendwarTotal.GetInstance().BaseConfig.channel_index;
|
||||
channel_index = channel_index.slice(channel_index.len() - 2, channel_index.len());
|
||||
//绘制频道信息
|
||||
L_sq_DrawCode(channel_index, X + 102 - LenheartTextClass.GetStringLength(channel_index) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
} catch (exception) {
|
||||
|
||||
}
|
||||
//绘制攻坚队名称
|
||||
L_sq_DrawCode(TeamObj.TeamName, X + 130, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制攻坚队攻坚状态
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 6 + TeamObj.State, X + 314, Y + 2);
|
||||
|
||||
local PartyPlayerCountStr = TeamObj.TeamPlayerCount + " / " + 8;
|
||||
//绘制攻坚队队员数量
|
||||
L_sq_DrawCode(PartyPlayerCountStr, X + 434 - LenheartTextClass.GetStringLength(PartyPlayerCountStr) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
|
||||
if (SelectState) {
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 5, X, Y);
|
||||
}
|
||||
|
||||
if (isInRect) {
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 5, X, Y);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
文件名:FiendwarNoti.nut
|
||||
路径:Plugins/Fiendwar/FiendwarNoti.nut
|
||||
创建日期:2024-04-12 22:12
|
||||
文件用途:超时空攻坚战队伍消息
|
||||
*/
|
||||
class FiendwarNotiC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//消息内容
|
||||
Msg = null;
|
||||
//队长名称
|
||||
Name = null;
|
||||
//消息时间
|
||||
Timer = null;
|
||||
|
||||
//队伍聊天消息分发
|
||||
function FiendwarPartyNotiCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
Name = Jso.Name;
|
||||
Msg = Jso.msg;
|
||||
Timer = Clock();
|
||||
}
|
||||
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
//队伍聊天消息分发
|
||||
Pack_Control.rawset(20063018, FiendwarPartyNotiCallBack.bindenv(this));
|
||||
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
// //关闭按钮
|
||||
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
// CloseButton.OnClick = function() {
|
||||
// this.Visible = false;
|
||||
// }.bindenv(this);
|
||||
// Childrens.append(CloseButton);
|
||||
|
||||
}
|
||||
|
||||
//队长头像
|
||||
PartyMasterIcon = null;
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
|
||||
if (!Name || !Msg) return;
|
||||
//绘制背景框
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 24, X + 134, Y + 180);
|
||||
//绘制队长图标
|
||||
// L_sq_DrawImg
|
||||
|
||||
if (FiendwarTotal.GetInstance().MyTeam) {
|
||||
local Mt = FiendwarTotal.GetInstance().MyTeam;
|
||||
local PartyMaster;
|
||||
foreach(index, value in Mt.MembersList) {
|
||||
if (value.InfoObj.Captain) {
|
||||
PartyMasterIcon = clone(value);
|
||||
}
|
||||
}
|
||||
|
||||
sq_DrawBox(X + 42 + 118, Y + 1 + 185, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.D[0] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + 118;
|
||||
local AYpos = AvatarObj.D[1] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 185;
|
||||
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//绘制队长名字
|
||||
L_sq_DrawCode(Name, X + 184, Y + 189, sq_RGBA(247, 214, 90, 255), 0, 1);
|
||||
//绘制点
|
||||
L_sq_DrawCode(" : ", X + 210, Y + 189, sq_RGBA(230, 200, 155, 255), 0, 1);
|
||||
//绘制消息
|
||||
L_sq_DrawCode(Msg, X + 190 + LenheartTextClass.GetStringLength(Name), Y + 189, sq_RGBA(230, 200, 155, 255), 0, 1);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
if (Name && Msg)
|
||||
Visible = true;
|
||||
else
|
||||
Visible = false;
|
||||
|
||||
if (Timer) {
|
||||
if (Clock() - Timer >= 3500) {
|
||||
Timer = null;
|
||||
Name = null;
|
||||
Msg = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
文件名:FiendwarPartyFormation.nut
|
||||
路径:Plugins/Fiendwar/FiendwarPartyFormation.nut
|
||||
创建日期:2024-04-02 12:09
|
||||
文件用途:超时空攻坚队 队内编队
|
||||
*/
|
||||
//编队用按钮需要传递参数所以重写
|
||||
class FiendwarPartyInfoEdit_BaseButton extends LenheartNewUI_BaseButton {
|
||||
MyInfoIndex = 0;
|
||||
constructor(X, Y, W, H, Path, Idx, InfoIndex) {
|
||||
MyInfoIndex = InfoIndex;
|
||||
LenheartNewUI_BaseButton.constructor(X, Y, W, H, Path, Idx);
|
||||
}
|
||||
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
if (isLBDown && OnClick) {
|
||||
OnClick(MyInfoIndex);
|
||||
}
|
||||
isLBDown = false;
|
||||
}
|
||||
}
|
||||
//编队窗口
|
||||
class FiendwarPartyFormation extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
PartyMarkFlag = -1;
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
|
||||
function RegisterWidget() {
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
//搜索按钮
|
||||
local QdButton = LenheartNewUI_ButtonText(10, 157, 5, "签到");
|
||||
QdButton.State = 8;
|
||||
QdButton.SetTextOffset(0, 1);
|
||||
AddChild(QdButton);
|
||||
|
||||
//解散队伍按钮
|
||||
local BreakPartyButton = LenheartNewUI_ButtonText(80, 158, 5, "解散队伍");
|
||||
BreakPartyButton.SetTextOffset(-12, 1);
|
||||
BreakPartyButton.OnClick = function() {
|
||||
|
||||
}.bindenv(this);
|
||||
AddChild(BreakPartyButton);
|
||||
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_ButtonText(150, 158, 5, "关闭");
|
||||
CloseButton.SetTextOffset(0, 1);
|
||||
CloseButton.OnClick = function() {
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
for (local i = 0; i< 8; i++) {
|
||||
//右翻页按钮
|
||||
local PartyIndexButton = FiendwarPartyInfoEdit_BaseButton(12 + (i % 2 * 136), 35 + ((i / 2) * 30), 41, 17, "interface/newstyle/windows/party/party_icon.img", 3 + (i * 3), i);
|
||||
//继承类 并重写 调用时传入InfoIndex
|
||||
PartyIndexButton.OnClick = function(MyInfoIndex) {
|
||||
PartyMarkFlag = MyInfoIndex;
|
||||
}.bindenv(this);
|
||||
AddChild(PartyIndexButton);
|
||||
}
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
//标题栏
|
||||
L_sq_DrawButton(X - 1, Y, 284, "interface/lenheartwindowcommon.img", 609, 2, 7);
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X, Y + 17, 272, 154, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
|
||||
|
||||
for (local q = 0; q< 8; q++) {
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", 358, X + 60 + (q % 2 * 136), Y + 34 + ((q / 2) * 30));
|
||||
for (local i = 0; i< 3; i++) {
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", 361, X + 80 + (q % 2 * 136) + (i * 20), Y + 34 + ((q / 2) * 30));
|
||||
}
|
||||
}
|
||||
|
||||
if (PartyMarkFlag != -1) {
|
||||
L_sq_WA(0x1b46898, 47);
|
||||
}
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
//还原编队的鼠标指针
|
||||
local win = LenheartNewUI_CreateWindow(FiendwarPartyFormation, "超时空我的队伍编队窗口", 105, 40, 294, 192, 18);
|
||||
if (win.PartyMarkFlag != -1) {
|
||||
win.PartyMarkFlag = -1;
|
||||
L_sq_WA(0x1b46898, 0);
|
||||
}
|
||||
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,252 @@
|
|||
/*
|
||||
文件名:FiendwarPartyInfo.nut
|
||||
路径:Plugins/Fiendwar/FiendwarPartyInfo.nut
|
||||
创建日期:2024-03-27 19:18
|
||||
文件用途:超时空攻坚队队伍信息窗口
|
||||
*/
|
||||
class FiendwarPartyInfoC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//队员列表
|
||||
MembersList = null;
|
||||
|
||||
//队伍名称
|
||||
TeamName = "";
|
||||
//队伍ID
|
||||
TeamID = 99999999;
|
||||
|
||||
//是否是我的攻坚队
|
||||
IsMyTeam = false;
|
||||
//是否是队长
|
||||
IsCaptain = false;
|
||||
|
||||
|
||||
|
||||
//收到请求加入攻坚队包
|
||||
function JoinTeamCallBack(Chunk) {
|
||||
// Sout("收到请求加入包 : \n\n\n %L", Chunk);
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local win = LenheartNewUI_CreateWindow(FiendwarHallApplyJoinC, "超时空申请加入队伍窗口", 542, 348, 257, 240, 18);
|
||||
win.Visible = true;
|
||||
win.ResetFocus();
|
||||
local T = {
|
||||
Charc = Jso.charac, //角色对象
|
||||
Level = Jso.charac.PlayerLevel,
|
||||
Name = Jso.charac.PlayerName,
|
||||
Job = Jso.charac.PlayerJob,
|
||||
PvpLevel = Jso.charac.pvp,
|
||||
JobName = Jso.charac.PlayerGrowTypeJob,
|
||||
Coin = Jso.charac.PlayCoin,
|
||||
Fatigue = Jso.charac.PlayFatigue,
|
||||
Combat = Jso.charac.ZL,
|
||||
ClearanceCount = Jso.charac.ClearanceCount,
|
||||
AvatarArr = Jso.charac.equVos,
|
||||
PlayerSession = Jso.charac.PlayerSession
|
||||
}
|
||||
//没人
|
||||
if (win.RequestJoinTeamArr.len() == 0) {
|
||||
win.RequestJoinTeamArr.append(T);
|
||||
win.InitInfo();
|
||||
} else win.RequestJoinTeamArr.append(T);
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
// RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
|
||||
Pack_Control.rawset(20063006, JoinTeamCallBack.bindenv(this));
|
||||
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
//清除老的按钮在刷新
|
||||
RemoveChilds(FiendwarPartyInfoMemberC, false);
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(336, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
|
||||
//队伍按钮
|
||||
local ModelButton = LenheartNewUI_ButtonText(9, 60, -18, "队伍");
|
||||
ModelButton.Idx = 163;
|
||||
ModelButton.DWidth = -8;
|
||||
ModelButton.SetTextOffset(-9, 1);
|
||||
AddChild(ModelButton);
|
||||
|
||||
//等级按钮
|
||||
local StateButton = LenheartNewUI_ButtonText(51, 60, -18, "等级");
|
||||
StateButton.Idx = 163;
|
||||
StateButton.DWidth = -8;
|
||||
StateButton.SetTextOffset(-9, 1);
|
||||
AddChild(StateButton);
|
||||
|
||||
//角色名按钮
|
||||
local ChannelButton = LenheartNewUI_ButtonText(93, 60, 44, "角色名");
|
||||
ChannelButton.Idx = 163;
|
||||
ChannelButton.DWidth = 120;
|
||||
ChannelButton.FillWidth = 1;
|
||||
ChannelButton.FirstWidth = 21;
|
||||
ChannelButton.SetTextOffset(17, 1);
|
||||
AddChild(ChannelButton);
|
||||
|
||||
//攻坚队名称按钮
|
||||
local PartyNameButton = LenheartNewUI_ButtonText(196, 60, 36, "职业名");
|
||||
PartyNameButton.Idx = 163;
|
||||
PartyNameButton.DWidth = 100;
|
||||
PartyNameButton.FillWidth = 1;
|
||||
PartyNameButton.FirstWidth = 21;
|
||||
PartyNameButton.SetTextOffset(11, 1);
|
||||
AddChild(PartyNameButton);
|
||||
|
||||
//入场材料按钮
|
||||
local Striiu = "入场材料";
|
||||
if (FiendwarTotal.GetInstance().EndTime) Striiu = "通关次数";
|
||||
local StageButton = LenheartNewUI_ButtonText(289, 60, 0, Striiu);
|
||||
StageButton.Idx = 163;
|
||||
StageButton.DWidth = 26;
|
||||
StageButton.FillWidth = 1;
|
||||
StageButton.FirstWidth = 21;
|
||||
StageButton.SetTextOffset(-14, 1);
|
||||
AddChild(StageButton);
|
||||
|
||||
//如果不是我的队伍 并且我没有攻坚队
|
||||
if (!IsMyTeam && !FiendwarTotal.GetInstance().MyPartyId) {
|
||||
local JoinPartyButton = LenheartNewUI_ButtonText(10, 268, 10, "参加攻坚队");
|
||||
JoinPartyButton.SetTextOffset(-15, 1);
|
||||
JoinPartyButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063005,
|
||||
teamsId = TeamID,
|
||||
items = [L_sq_GetCharacterAttribute(0x1c, 21), L_sq_GetCharacterAttribute(0x1c, 15), L_sq_GetCharacterAttribute(0x1c, 14), L_sq_GetCharacterAttribute(0x1c, 13)],
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
}.bindenv(this);
|
||||
AddChild(JoinPartyButton);
|
||||
}
|
||||
|
||||
//如果是我的队伍
|
||||
if (IsMyTeam) {
|
||||
//退出按钮
|
||||
local ExitButton = LenheartNewUI_ButtonText(220, 268, 5, "退出");
|
||||
ExitButton.SetTextOffset(-1, 1);
|
||||
ExitButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063009,
|
||||
teamsId = TeamID
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
FiendwarTotal.GetInstance().MyCid = null;
|
||||
FiendwarTotal.GetInstance().MyPartyId = null;
|
||||
FiendwarTotal.GetInstance().IsCaptain = null;
|
||||
}.bindenv(this);
|
||||
AddChild(ExitButton);
|
||||
|
||||
if (IsCaptain) {
|
||||
//队伍编制按钮
|
||||
local PartyEditButton = LenheartNewUI_ButtonText(10, 268, 5, "队伍编制");
|
||||
PartyEditButton.SetTextOffset(-12, 1);
|
||||
PartyEditButton.OnClick = function() {
|
||||
local win = LenheartNewUI_CreateWindow(FiendwarPartyFormation, "超时空我的队伍编队窗口", 105, 40, 294, 192, 18);
|
||||
win.Visible = true;
|
||||
}.bindenv(this);
|
||||
AddChild(PartyEditButton);
|
||||
|
||||
//修改信息按钮
|
||||
local FqButton = LenheartNewUI_ButtonText(100, 267, 5, "修改信息");
|
||||
FqButton.State = 8;
|
||||
FqButton.SetTextOffset(-12, 1);
|
||||
AddChild(FqButton);
|
||||
|
||||
//队伍招募按钮
|
||||
local FqButton1 = LenheartNewUI_ButtonText(160, 267, 5, "队伍招募");
|
||||
FqButton1.State = 8;
|
||||
FqButton1.SetTextOffset(-12, 1);
|
||||
AddChild(FqButton1);
|
||||
|
||||
if (!FiendwarTotal.GetInstance().EndTime) {
|
||||
//队伍招募按钮
|
||||
local FightOpenButton = LenheartNewUI_ButtonText(290, 268, 5, "开始攻坚");
|
||||
FightOpenButton.SetTextOffset(-12, 1);
|
||||
FightOpenButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063051,
|
||||
teamsId = TeamID
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
}.bindenv(this);
|
||||
AddChild(FightOpenButton);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
//标题栏
|
||||
L_sq_DrawButton(X, Y, 344, "interface/lenheartwindowcommon.img", 609, 2, 7);
|
||||
//绘制队伍名字
|
||||
L_sq_DrawCode(TeamName, X + 178 - LenheartTextClass.GetStringLength(TeamName) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X, Y + 17, 340, 250, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
//绘制头图
|
||||
L_sq_DrawImg("interface2/gcontents/180621_fiendwar/raid/memberwindow.img", 0, X + 10, Y + 24);
|
||||
//绘制阶段图 //TODO 根据阶段绘制img
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 7, X + 296, Y + 34);
|
||||
|
||||
//绘制队伍List
|
||||
DrawMembersList(obj);
|
||||
}
|
||||
|
||||
//绘制队伍信息
|
||||
function DrawMembersList(obj) {
|
||||
if (MembersList.len() <= 0) return;
|
||||
//遍历需要显示的同步坐标
|
||||
foreach(Index, TeamObj in MembersList) {
|
||||
TeamObj.SyncPos(X, Y + 2 + Index * 23);
|
||||
}
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
# override # "
|
||||
* @函数作用:
|
||||
* @参数 name
|
||||
* @返回值
|
||||
*/
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
foreach(Window in Childrens) {
|
||||
Window.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
}
|
||||
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
//判断没有点到具体角色就隐藏
|
||||
if (!sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y + 80, Width, MembersList.len() * 21)) {
|
||||
//交互窗口需要隐藏
|
||||
local Each = LenheartNewUI_CreateWindow(FiendwarHallPlayerInteractiveC, "超时空玩家交互", X, Y, 100, 21, 0);
|
||||
Each.Visible = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,188 @@
|
|||
/*
|
||||
文件名:FiendwarPartyMemberInfo.nut
|
||||
路径:Plugins/Fiendwar/FiendwarPartyMemberInfo.nut
|
||||
创建日期:2024-04-02 10:49
|
||||
文件用途:攻坚队详细信息中的队员显示类
|
||||
*/
|
||||
//队员显示类
|
||||
class FiendwarPartyInfoMemberC extends LenheartNewUI_CommonUi {
|
||||
X = 0;
|
||||
Y = 0;
|
||||
Width = null;
|
||||
Height = null;
|
||||
InfoObj = null;
|
||||
|
||||
//构造时间
|
||||
ConstructorTime = null;
|
||||
//选中状态
|
||||
SelectState = false;
|
||||
//攻坚状态
|
||||
OffensiveState = 0;
|
||||
//头像框的颜色
|
||||
HandBoxColor = [
|
||||
0xff717272,
|
||||
0xff7b2a29,
|
||||
0xff874e0d,
|
||||
0xff8b8108,
|
||||
0xff658e2d,
|
||||
0xff0f5c8a,
|
||||
0xff27238f,
|
||||
0xff4e2491,
|
||||
0xff932586,
|
||||
]
|
||||
|
||||
//X Y 裁切开始X Y 裁切结束X Y
|
||||
OffsetArr = [
|
||||
//男鬼剑士
|
||||
[45, 103, 230, 231],
|
||||
//女格斗家
|
||||
[56, 102, 235, 279],
|
||||
//男神枪手
|
||||
[52, 130, 238, 246],
|
||||
//女魔法师
|
||||
[55, 87, 234, 293],
|
||||
//男圣职者
|
||||
[42, 115, 223, 200],
|
||||
//女神枪手
|
||||
[52, 119, 226, 209],
|
||||
//暗夜使者
|
||||
[56, 102, 225, 226],
|
||||
//男格斗家
|
||||
[50, 114, 239, 216],
|
||||
//男魔法师
|
||||
[54, 103, 236, 276],
|
||||
//黑暗武士
|
||||
[46, 102, 229, 232],
|
||||
//缔造者
|
||||
[56, 86, 235, 293],
|
||||
]
|
||||
|
||||
constructor(gInfoObj) {
|
||||
ConstructorTime = Clock();
|
||||
|
||||
InfoObj = gInfoObj;
|
||||
this.Width = 458;
|
||||
this.Height = 21;
|
||||
|
||||
this.OnClick = function() {
|
||||
//还原其他 选中自己
|
||||
foreach(Obj in Parent.MembersList) {
|
||||
Obj.SelectState = false;
|
||||
}
|
||||
SelectState = !SelectState;
|
||||
|
||||
local win = LenheartNewUI_CreateWindow(FiendwarPartyFormation, "超时空我的队伍编队窗口", 105, 40, 294, 192, 18);
|
||||
//编队状态
|
||||
if (win.PartyMarkFlag != -1) {
|
||||
//并且是属于我的攻坚队的成员
|
||||
if (FiendwarTotal.GetInstance().MyPartyId == InfoObj.PartyId) {
|
||||
local T = {
|
||||
op = 20063015,
|
||||
teamsId = InfoObj.PartyId,
|
||||
cidNew = InfoObj.Cid,
|
||||
num = win.PartyMarkFlag
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
win.PartyMarkFlag = -1;
|
||||
L_sq_WA(0x1b46898, 0);
|
||||
return;
|
||||
}
|
||||
//点了其他队伍成员要还原编队状态
|
||||
else {
|
||||
win.PartyMarkFlag = -1;
|
||||
L_sq_WA(0x1b46898, 0);
|
||||
}
|
||||
}
|
||||
|
||||
local Interactive = LenheartNewUI_CreateWindow(FiendwarHallPlayerInteractiveC, "超时空玩家交互", 0, 0, 100, 21, 0);
|
||||
//改变鼠标坐标
|
||||
Interactive.X = MousePos_X;
|
||||
Interactive.Y = MousePos_Y;
|
||||
//赋值对象参数
|
||||
Interactive.InfoObj = InfoObj;
|
||||
//对象不是我
|
||||
if (InfoObj.Cid == FiendwarTotal.GetInstance().MyCid) {
|
||||
Interactive.InfoObj.IsMyself <- true;
|
||||
}
|
||||
//刷新UI
|
||||
Interactive.InitInfo();
|
||||
}
|
||||
LenheartNewUI_CommonUi.constructor(10, 82, this.Width, this.Height);
|
||||
|
||||
|
||||
//如果没有材料要建立一个购买材料的Button 并且要判断是否是自己 //TODO 这里还不行 要拓展一个函数来比对名字
|
||||
/*
|
||||
local Name = L_Sq_GetObjectName(sq_GetMyMasterCharacter());
|
||||
local Name2 = "夜刃";
|
||||
Name == Name2 失败了
|
||||
*/
|
||||
// if (!InfoObj.StkHasFlag && InfoObj.Name == L_Sq_GetObjectName(sq_GetMyMasterCharacter())) {
|
||||
|
||||
// }
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//绘制底槽
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 12, X, Y);
|
||||
|
||||
//绘制队伍编号
|
||||
L_sq_DrawImg("interface/newstyle/windows/party/party_icon.img", InfoObj.TeamId * 3, X, Y + 1);
|
||||
|
||||
sq_DrawBox(X + 42, Y + 1, 22, 18, HandBoxColor[InfoObj.TeamId]);
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.D[0] + X + OffsetArr[InfoObj.Job][0];
|
||||
local AYpos = AvatarObj.D[1] + Y + OffsetArr[InfoObj.Job][1];
|
||||
setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
// }
|
||||
}
|
||||
|
||||
if (InfoObj.Captain) L_sq_DrawImg("hud/fiendwarl.img", 18, X + 42, Y + 1);
|
||||
|
||||
|
||||
//绘制等级
|
||||
L_sq_DrawCode(InfoObj.Level, X + 76 - LenheartTextClass.GetStringLength(InfoObj.Level) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制角色名
|
||||
L_sq_DrawCode(InfoObj.Name, X + 138 - LenheartTextClass.GetStringLength(InfoObj.Name) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制职业名
|
||||
L_sq_DrawCode(InfoObj.JobName, X + 234 - LenheartTextClass.GetStringLength(InfoObj.JobName) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
|
||||
|
||||
//离线了
|
||||
if (InfoObj.ExitTime > 0) {
|
||||
local DrawTime = InfoObj.ExitTime - (Clock() - ConstructorTime);
|
||||
local seconds = (DrawTime / 1000) % 60; // 计算秒数
|
||||
local minutes = (DrawTime / (1000 * 60)) % 60; // 计算分钟数
|
||||
local DrawTimeStr = format("%02d分%02d秒", minutes, seconds);
|
||||
|
||||
L_sq_DrawCode(DrawTimeStr, X + 306 - LenheartTextClass.GetStringLength(DrawTimeStr) / 2, Y + 5, sq_RGBA(255, 50, 50, 255), 0, 1);
|
||||
}
|
||||
//通关次数
|
||||
else if (InfoObj.ClearanceCount > 0) {
|
||||
L_sq_DrawCode((InfoObj.ClearanceCount - 1) + "/" + (InfoObj.ClearanceCountMax), X + 306 - LenheartTextClass.GetStringLength((InfoObj.ClearanceCount - 1) + "/" + (InfoObj.ClearanceCountMax)) / 2, Y + 5, sq_RGBA(250, 250, 181, 255), 0, 1);
|
||||
} else if (InfoObj.StkHasFlag) {
|
||||
L_sq_DrawImg("hud/fiendwarlstk.img", 0, X + 280, Y + 3);
|
||||
} else {
|
||||
L_sq_DrawImg("hud/fiendwarlstk.img", 1, X + 280, Y + 3);
|
||||
}
|
||||
|
||||
if (SelectState) {
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 13, X, Y);
|
||||
}
|
||||
|
||||
if (isInRect) {
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 13, X, Y);
|
||||
}
|
||||
}
|
||||
|
||||
MousePos_X = 0;
|
||||
MousePos_Y = 0;
|
||||
//鼠标事件回调
|
||||
function OnMouseProc(Flag, gMousePos_X, gMousePos_Y) {
|
||||
this.MousePos_X = gMousePos_X;
|
||||
this.MousePos_Y = gMousePos_Y;
|
||||
LenheartNewUI_CommonUi.OnMouseProc(Flag, gMousePos_X, gMousePos_Y);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,227 @@
|
|||
/*
|
||||
文件名:FiendwarPlayerInteractive.nut
|
||||
路径:Plugins/Fiendwar/FiendwarPlayerInteractive.nut
|
||||
创建日期:2024-04-02 10:55
|
||||
文件用途:超时空玩家交互
|
||||
*/
|
||||
//角色交互按钮需要传递参数所以重写
|
||||
class FiendwarPlayerInteractive_BaseButton extends LenheartNewUI_BaseButton {
|
||||
|
||||
OnShow = null;
|
||||
|
||||
constructor(X, Y, W, H, Path, Idx) {
|
||||
|
||||
LenheartNewUI_BaseButton.constructor(X, Y, W, H, Path, Idx);
|
||||
}
|
||||
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
Y--;
|
||||
if (isLBDown && OnClick) {
|
||||
OnClick();
|
||||
}
|
||||
isLBDown = false;
|
||||
local Each = LenheartNewUI_CreateWindow(FiendwarHallPlayerInteractiveC, "超时空玩家交互", X, Y, 100, 21, 0);
|
||||
Each.Visible = false;
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//不可用
|
||||
if (State == 8) {
|
||||
L_sq_DrawImg(Path, Idx + 3, X, Y + 1);
|
||||
} else {
|
||||
//按下
|
||||
if (isLBDown) {
|
||||
Y++;
|
||||
L_sq_DrawImg(Path, (Idx * 2) + 2, X, Y);
|
||||
}
|
||||
//悬停
|
||||
else if (isInRect) {
|
||||
L_sq_DrawImg(Path, (Idx * 2) + 1, X, Y);
|
||||
}
|
||||
//普通
|
||||
else {
|
||||
L_sq_DrawImg(Path, 0, X, Y);
|
||||
}
|
||||
}
|
||||
if (OnShow) OnShow(X, Y);
|
||||
}
|
||||
}
|
||||
|
||||
//角色交互类
|
||||
class FiendwarHallPlayerInteractiveC extends LenheartNewUI_Windows {
|
||||
// DeBugMode = true;
|
||||
|
||||
//信息对象
|
||||
InfoObj = null;
|
||||
|
||||
//初始化Flag 初始化以后才显示
|
||||
InitInfoFlag = false;
|
||||
|
||||
//有多少个标签
|
||||
InitIndexFlag = 1;
|
||||
|
||||
//头像框颜色
|
||||
HandBoxColor = [
|
||||
0xff717272,
|
||||
0xff7b2a29,
|
||||
0xff874e0d,
|
||||
0xff8b8108,
|
||||
0xff658e2d,
|
||||
0xff0f5c8a,
|
||||
0xff27238f,
|
||||
0xff4e2491,
|
||||
0xff932586,
|
||||
]
|
||||
|
||||
//X Y 裁切开始X Y 裁切结束X Y
|
||||
OffsetArr = [
|
||||
//男鬼剑士
|
||||
[45, 103, 230, 231],
|
||||
//女格斗家
|
||||
[56, 102, 235, 279],
|
||||
//男神枪手
|
||||
[52, 130, 238, 246],
|
||||
//女魔法师
|
||||
[55, 87, 234, 293],
|
||||
//男圣职者
|
||||
[42, 115, 223, 200],
|
||||
//女神枪手
|
||||
[52, 119, 226, 209],
|
||||
//暗夜使者
|
||||
[56, 102, 225, 226],
|
||||
//男格斗家
|
||||
[50, 114, 239, 216],
|
||||
//男魔法师
|
||||
[54, 103, 236, 276],
|
||||
//黑暗武士
|
||||
[46, 102, 229, 232],
|
||||
//缔造者
|
||||
[56, 86, 235, 293],
|
||||
]
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
//初始化信息
|
||||
function InitInfo() {
|
||||
Childrens = [];
|
||||
//还原标签数量
|
||||
InitIndexFlag = 1;
|
||||
//还原高度
|
||||
Height = 21;
|
||||
//还原可见性
|
||||
Visible = true;
|
||||
//置顶窗口
|
||||
ResetFocus();
|
||||
RegisterWidget();
|
||||
InitInfoFlag = true;
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
|
||||
|
||||
//是团长才能委任 并且不是我自己 并且我们在同一个攻坚队
|
||||
if (FiendwarTotal.GetInstance().IsCaptain && !("IsMyself" in InfoObj) && FiendwarTotal.GetInstance().MyPartyId == InfoObj.PartyId) {
|
||||
//委任团长按钮
|
||||
local GiveMasterButton = FiendwarPlayerInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 0);
|
||||
GiveMasterButton.OnShow = function(X, Y) {
|
||||
L_sq_DrawImg("interface2/popup_menu/popup_icon_character.img", 11, X, Y + 2);
|
||||
L_sq_DrawCode("委任团长", X + 36, Y + 5, sq_RGBA(104, 213, 237, 255), 0, 1);
|
||||
}
|
||||
GiveMasterButton.OnClick = function() {
|
||||
|
||||
}.bindenv(this);
|
||||
AddChild(GiveMasterButton);
|
||||
InitIndexFlag++;
|
||||
Height += 21;
|
||||
}
|
||||
|
||||
//查看信息按钮
|
||||
local CheckInfoButton = FiendwarPlayerInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 0);
|
||||
CheckInfoButton.OnShow = function(X, Y) {
|
||||
L_sq_DrawImg("interface2/popup_menu/popup_icon_character.img", 10, X, Y + 2);
|
||||
L_sq_DrawCode("查看信息", X + 36, Y + 5, sq_RGBA(104, 213, 237, 255), 0, 1);
|
||||
}
|
||||
CheckInfoButton.OnClick = function() {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
//obj.sq_PlaySound("CLICK_BUTTON1");
|
||||
L_sq_SendPackType(8);
|
||||
L_sq_SendPackWord(InfoObj.PlayerSession);
|
||||
L_sq_SendPackByte(3);
|
||||
L_sq_SendPack();
|
||||
getroottable().WindowsShowABFlag <- false; //让原生窗口置顶
|
||||
}.bindenv(this);
|
||||
AddChild(CheckInfoButton);
|
||||
InitIndexFlag++;
|
||||
Height += 21;
|
||||
|
||||
if (!("IsMyself" in InfoObj)) {
|
||||
//交易按钮
|
||||
local TransactionButton = FiendwarPlayerInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 0);
|
||||
TransactionButton.OnShow = function(X, Y) {
|
||||
L_sq_DrawImg("interface2/popup_menu/popup_icon_character.img", 0, X, Y + 2);
|
||||
L_sq_DrawCode("交易", X + 46, Y + 5, sq_RGBA(104, 213, 237, 255), 0, 1);
|
||||
}
|
||||
TransactionButton.OnClick = function() {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
//obj.sq_PlaySound("CLICK_BUTTON1");
|
||||
L_sq_SendPackType(10);
|
||||
L_sq_SendPackWord(InfoObj.PlayerSession);
|
||||
L_sq_SendPackByte(1);
|
||||
L_sq_SendPackDWord(22053);
|
||||
L_sq_SendPack();
|
||||
getroottable().WindowsShowABFlag <- false; //让原生窗口置顶
|
||||
}.bindenv(this);
|
||||
AddChild(TransactionButton);
|
||||
InitIndexFlag++;
|
||||
Height += 21;
|
||||
|
||||
|
||||
if (FiendwarTotal.GetInstance().IsCaptain && FiendwarTotal.GetInstance().MyPartyId == InfoObj.PartyId) {
|
||||
//攻坚队员强退按钮
|
||||
local KickMemberButton = FiendwarPlayerInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 4);
|
||||
KickMemberButton.OnShow = function(X, Y) {
|
||||
L_sq_DrawImg("interface2/popup_menu/popup_icon_warning.img", 3, X, Y + 2);
|
||||
L_sq_DrawCode("攻坚队员强退", X + 24, Y + 5, sq_RGBA(255, 50, 50, 255), 0, 1);
|
||||
}
|
||||
KickMemberButton.OnClick = function() {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
//obj.sq_PlaySound("CLICK_BUTTON1");
|
||||
local T = {
|
||||
op = 20063021,
|
||||
teamsId = InfoObj.PartyId,
|
||||
charCid = InfoObj.Cid
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
}.bindenv(this);
|
||||
AddChild(KickMemberButton);
|
||||
InitIndexFlag++;
|
||||
Height += 21;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
if (!InitInfoFlag) return;
|
||||
L_sq_DrawImg("interface2/popup_menu/popup_back.img", 0, X, Y);
|
||||
//绘制角色名
|
||||
L_sq_DrawCode(InfoObj.Name, X + 61 - LenheartTextClass.GetStringLength(InfoObj.Name) / 2, Y + 4, sq_RGBA(169, 255, 171, 255), 0, 1);
|
||||
//绘制头像
|
||||
foreach(AvatarObj in InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.D[0] + X + OffsetArr[InfoObj.Job][0] - 40;
|
||||
local AYpos = AvatarObj.D[1] + Y + OffsetArr[InfoObj.Job][1];
|
||||
setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
}
|
||||
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,190 @@
|
|||
/*
|
||||
文件名:FiendFightLogic.nut
|
||||
路径:Plugins/Fiendwar/FiendFightLogic.nut
|
||||
创建日期:2024-05-27 19:18
|
||||
文件用途:超时空战斗逻辑
|
||||
*/
|
||||
class FiendFightLogicC {
|
||||
//进入BOSS房间发包告诉服务端的Flag
|
||||
IsBossActiveMsgPackFlag = false;
|
||||
|
||||
constructor() {
|
||||
|
||||
//注册回调包
|
||||
Pack_Control.rawset(20063030, SetCharacterDamageRate.bindenv(this));
|
||||
Pack_Control.rawset(20063600, CreatePassiveObjectById.bindenv(this));
|
||||
Pack_Control.rawset(20063602, GetBossHp.bindenv(this));
|
||||
Pack_Control.rawset(20063604, SetBossHp.bindenv(this));
|
||||
Pack_Control.rawset(20063608, CheckMonsterIsV.bindenv(this));
|
||||
}
|
||||
|
||||
//检测怪物是否存在
|
||||
function CheckMonsterIsV(Chunk) {
|
||||
if (!IsBossActiveMsgPackFlag) return;
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local Idx = Jso.id;
|
||||
local ObjectBuf = GetObjectByIndex(Idx);
|
||||
if (!ObjectBuf) {
|
||||
local T = {
|
||||
op = 20063609,
|
||||
id = Idx
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(T);
|
||||
}
|
||||
}
|
||||
|
||||
//设置BOSS生命值
|
||||
function SetBossHp(Chunk) {
|
||||
if (!IsBossActiveMsgPackFlag) return;
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local BossObject = GetObjectByIndex(210994);
|
||||
|
||||
//没找到BOSS
|
||||
if (!BossObject) {
|
||||
local T = {
|
||||
op = 20063605,
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(T);
|
||||
} else {
|
||||
BossObject.setHp(Jso.hp, null, true);
|
||||
}
|
||||
|
||||
}
|
||||
//获取BOSS生命值
|
||||
function GetBossHp(Chunk) {
|
||||
if (!IsBossActiveMsgPackFlag) return;
|
||||
local BossObject = GetObjectByIndex(210994);
|
||||
local curthp = -1;
|
||||
local rmaxhp = -1;
|
||||
//找到BOSS
|
||||
if (BossObject) {
|
||||
curthp = BossObject.getHp();
|
||||
rmaxhp = BossObject.getHpMax();
|
||||
}
|
||||
|
||||
local T = {
|
||||
op = 20063603,
|
||||
hp = curthp,
|
||||
maxhp = rmaxhp
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(T);
|
||||
}
|
||||
|
||||
//设置伤害值回调
|
||||
function SetCharacterDamageRate(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local Rate = Jso.damageMarkup.tofloat() / 100.0;
|
||||
//超时空伤害设置
|
||||
if (getroottable().rawin("LenheartFiendModuleDamageRate")) {
|
||||
getroottable()["LenheartFiendModuleDamageRate"] = Rate;
|
||||
}
|
||||
}
|
||||
|
||||
//召唤PassiveObject回调
|
||||
function CreatePassiveObjectById(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local ObjectId = Jso.id;
|
||||
local ZPos = Jso.z;
|
||||
|
||||
//确保在BOSS房间才召唤免得游戏崩溃
|
||||
if (IsBossActiveMsgPackFlag) {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
obj = sq_GetCNRDObjectToActiveObject(obj);
|
||||
// obj.sq_SendCreatePassiveObjectPacket(ObjectId, 0, 99999990, 0, ZPos);
|
||||
// sq_SendCreatePassiveObjectPacketFromPassivePos(obj, ObjectId, 0, 99999990, 0, ZPos);
|
||||
sq_SendCreatePassiveObjectPacket(obj, ObjectId, 0, 99999990, 0, ZPos, obj.getDirection());
|
||||
local Jso = {
|
||||
op = 20063601,
|
||||
id = ObjectId,
|
||||
z = ZPos
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(Jso);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//获取指定对象
|
||||
function GetObjectByIndex(Idx) {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
obj = sq_GetCNRDObjectToActiveObject(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)) {
|
||||
local activeObj = sq_GetCNRDObjectToActiveObject(object);
|
||||
local MonsterIndex = activeObj.getCollisionObjectIndex();
|
||||
if (MonsterIndex == Idx) {
|
||||
return activeObj;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
//获取地图ID
|
||||
function GetMapIndex() {
|
||||
local stage = sq_GetGlobaludpModuleStage();
|
||||
local MapIndex = sq_GetMapIndex(stage);
|
||||
return MapIndex;
|
||||
}
|
||||
|
||||
//检测是否在超时空BOSS图
|
||||
function CheckBossIsActive() {
|
||||
//如果在副本中
|
||||
if (sq_GetCurrentModuleType() == 3) {
|
||||
//在BOSS地图
|
||||
if (GetMapIndex() == 24151) {
|
||||
if (!IsBossActiveMsgPackFlag) {
|
||||
IsBossActiveMsgPackFlag = true;
|
||||
local Jso = {
|
||||
op = 20063801
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(Jso);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
//退出副本以后设置flag 还原
|
||||
else {
|
||||
IsBossActiveMsgPackFlag = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//怪物死亡回调包
|
||||
function MonsterDieCallBack(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);
|
||||
if (activeObj.isDead()) {
|
||||
local MonsterIndex = activeObj.getCollisionObjectIndex();
|
||||
if (MonsterIndex >= 210994 && MonsterIndex <= 210999) {
|
||||
local Jso = {
|
||||
op = 20063503,
|
||||
monster_id = MonsterIndex
|
||||
}
|
||||
Rindro_BaseToolClass.SendPack(Jso);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Proc(obj) {
|
||||
|
||||
//如果进入BOSS房间需要告诉服务端
|
||||
CheckBossIsActive();
|
||||
|
||||
//如果在和BOSS干架 要检测所有怪物的死亡
|
||||
if (IsBossActiveMsgPackFlag) {
|
||||
//怪物死亡检测
|
||||
MonsterDieCallBack(obj);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,328 @@
|
|||
/*
|
||||
文件名:FiendReward.nut
|
||||
路径:Project/Fiendwar/FiendReward.nut
|
||||
创建日期:2024-11-26 14:44
|
||||
文件用途:
|
||||
*/
|
||||
class FiendRewardC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
DeBugMode = true;
|
||||
//默认显示状态需要是关闭 因为要通过收包打开
|
||||
Visible = false;
|
||||
|
||||
//奖励信息
|
||||
RewardInfo = null;
|
||||
//奖励动画开始时间
|
||||
AniStartFlag = null;
|
||||
|
||||
//收到奖励包
|
||||
function RewardCallBack(Chunk) {
|
||||
// Sout("收到请求加入包 : \n\n\n %L", Chunk);
|
||||
local Jso = Json.Decode(Chunk);
|
||||
RewardInfo = Jso;
|
||||
Visible = true;
|
||||
AniStartFlag = Clock();
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
Pack_Control.rawset(20063026, RewardCallBack.bindenv(this));
|
||||
|
||||
local T = {
|
||||
op = 20063061,
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
// //关闭按钮
|
||||
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
// CloseButton.OnClick = function() {
|
||||
// this.Visible = false;
|
||||
// }.bindenv(this);
|
||||
// Childrens.append(CloseButton);
|
||||
|
||||
}
|
||||
|
||||
AniName_Flag = 0;
|
||||
AniActFlag = 0;
|
||||
Ani_Title = null;
|
||||
Ani_Time = null;
|
||||
Ani_Time2 = null;
|
||||
Ani_Card_1 = null;
|
||||
Ani_Card_2 = null;
|
||||
Ani_Card_Open_1 = null;
|
||||
Ani_Card_Open_2 = null;
|
||||
AniTimeStartFlag = 0;
|
||||
AniRewardMyStartFlag = 0;
|
||||
Ani_Card_All_1 = null;
|
||||
Ani_Card_All_Open = null;
|
||||
Ani_Card_All_Open_Gold = null;
|
||||
AniRewardReloadFlag = 0;
|
||||
AlphaValue = 0.0;
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
if (AniStartFlag) {
|
||||
local ExiTime = Clock() - AniStartFlag;
|
||||
|
||||
//绘制背景
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 0, X + 0, Y + 0, 1, sq_RGBA(255, 255, 255, 150), 1.0, 1.0);
|
||||
|
||||
//标题一阶段
|
||||
Ani_Title = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_title_00.ani", X + 188, Y + 30, "超时空奖励标题1" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Title)) {
|
||||
if (AniActFlag == 0) AniActFlag = 1;
|
||||
}
|
||||
//时间二阶段
|
||||
if (AniActFlag >= 1) {
|
||||
Ani_Time = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_time.ani", X + 55, Y + 120, "超时空奖励标题2" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Time)) {
|
||||
if (AniActFlag == 1) AniActFlag = 2;
|
||||
}
|
||||
}
|
||||
//时间三阶段
|
||||
if (AniActFlag >= 2) {
|
||||
Ani_Time2 = Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_rank_00.ani", X + 570, Y + 90, "超时空奖励标题3" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Time2)) {
|
||||
//记录一下时间
|
||||
if (AniActFlag == 2) {
|
||||
AniTimeStartFlag = Clock();
|
||||
AniActFlag = 3;
|
||||
}
|
||||
}
|
||||
}
|
||||
//时间四阶段
|
||||
if (AniActFlag >= 3) {
|
||||
local al = sq_GetUniformVelocity(0, 100, Clock() - AniTimeStartFlag, 1500);
|
||||
AlphaValue = al.tofloat() / 100.0;
|
||||
|
||||
local RealTime = RewardInfo.time;
|
||||
local seconds = RealTime / 10;
|
||||
local hours = seconds / 3600;
|
||||
local minutes = seconds / 60;
|
||||
|
||||
seconds %= 60;
|
||||
hours = format("%02d", hours);
|
||||
seconds = format("%02d", seconds).slice(-2);
|
||||
minutes = format("%02d", minutes).slice(-2);
|
||||
|
||||
local Offset = -6;
|
||||
DrawImg("hud/fiendwartime.img", hours.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", hours.slice(1).tointeger(), X + 260 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", 10, X + 286 + Offset, Y + 139);
|
||||
Offset += 60;
|
||||
DrawImg("hud/fiendwartime.img", minutes.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", minutes.slice(1).tointeger(), X + 260 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", 10, X + 286 + Offset, Y + 139);
|
||||
Offset += 60;
|
||||
DrawImg("hud/fiendwartime.img", seconds.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", seconds.slice(1).tointeger(), X + 260 + Offset, Y + 139);
|
||||
|
||||
Offset += 160;
|
||||
local DieCount = RewardInfo.deathsNum;
|
||||
local DrawDieStr = format("%02d", DieCount);
|
||||
DrawImg("hud/fiendwartime.img", DrawDieStr.slice(0, 1).tointeger(), X + 240 + Offset, Y + 139);
|
||||
DrawImg("hud/fiendwartime.img", DrawDieStr.slice(1).tointeger(), X + 260 + Offset, Y + 139);
|
||||
|
||||
if (al >= 100) {
|
||||
if (AniActFlag == 3) {
|
||||
AniActFlag = 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
//卡牌一阶段
|
||||
if (AniActFlag == 4) {
|
||||
Ani_Card_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_01.ani", X + 0, Y + 30, "超时空奖励个人第一张卡牌" + AniName_Flag);
|
||||
Ani_Card_2 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_02.ani", X + 0, Y + 30, "超时空奖励个人第二张卡牌" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Card_1) && sq_IsEnd(Ani_Card_2)) {
|
||||
if (AniActFlag == 4) AniActFlag = 5;
|
||||
}
|
||||
}
|
||||
//卡牌二阶段
|
||||
if (AniActFlag == 5) {
|
||||
Ani_Card_Open_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 218, Y + 280, "超时空奖励个人第一张卡牌打开" + AniName_Flag);
|
||||
Ani_Card_Open_2 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 406, Y + 280, "超时空奖励个人第二张卡牌打开" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Card_Open_1) && sq_IsEnd(Ani_Card_Open_2)) {
|
||||
if (AniActFlag == 5) {
|
||||
AniRewardMyStartFlag = Clock();
|
||||
AniActFlag = 6;
|
||||
}
|
||||
}
|
||||
}
|
||||
//卡牌三阶段
|
||||
if (AniActFlag == 6) {
|
||||
local BackGroundFlag = 0;
|
||||
if (RewardInfo.rewards[0].item == -1) BackGroundFlag = 1;
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 218, Y + 280);
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 406, Y + 280);
|
||||
|
||||
DrawItemEx(X + 290, Y + 342, RewardInfo.rewards[0].item, RewardInfo.rewards[0].num, RewardInfo.pid, 0, -10);
|
||||
DrawItemEx(X + 478, Y + 342, RewardInfo.rewards[0].item2, RewardInfo.rewards[0].num2, RewardInfo.pid, 0, -10);
|
||||
|
||||
if ((Clock() - AniRewardMyStartFlag) >= 1500) {
|
||||
AniActFlag = 7;
|
||||
}
|
||||
}
|
||||
//卡牌四阶段
|
||||
if (AniActFlag == 7) {
|
||||
Ani_Card_All_1 = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/cardspread_00.ani", X + 0, Y + 0, "二阶段翻牌未翻开" + AniName_Flag);
|
||||
if (sq_IsEnd(Ani_Card_All_1)) {
|
||||
if (AniActFlag == 7) {
|
||||
Ani_Card_All_Open = array(8);
|
||||
Ani_Card_All_Open_Gold = array(8);
|
||||
AniActFlag = 8;
|
||||
}
|
||||
}
|
||||
}
|
||||
//卡牌五阶段
|
||||
if (AniActFlag == 8) {
|
||||
for (local i = 0; i< 8; i++) {
|
||||
Ani_Card_All_Open[i] = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/reward_card_open.ani", X + 30 + ((i % 4) * 188), Y + 250 + ((i / 4) * 138), "超时空奖励团队卡牌打开" + "i" + AniName_Flag);
|
||||
|
||||
if (i<(RewardInfo.rewards2.len() - 1) && RewardInfo.rewards2[i][0].grade == 1) {
|
||||
Ani_Card_All_Open_Gold[i] = T_DrawDynamicAni(obj, "common/fiendwar_kr/reward/gold_nomal.ani", X + 30 + ((i % 4) * 188), Y + 250 + ((i / 4) * 138), "超时空奖励团队卡牌打开金牌" + "i" + AniName_Flag);
|
||||
}
|
||||
}
|
||||
if (sq_IsEnd(Ani_Card_All_Open[7])) {
|
||||
if (AniActFlag == 8) {
|
||||
AniActFlag = 9;
|
||||
AniRewardReloadFlag = Clock();
|
||||
}
|
||||
}
|
||||
}
|
||||
//卡牌六阶段
|
||||
if (AniActFlag == 9) {
|
||||
for (local i = 0; i< 8; i++) {
|
||||
DrawRewardCard(i);
|
||||
}
|
||||
//重置
|
||||
if (Clock() - AniRewardReloadFlag >= 2000) {
|
||||
AniActFlag = 0;
|
||||
Ani_Title = null;
|
||||
Ani_Time = null;
|
||||
Ani_Time2 = null;
|
||||
Ani_Card_1 = null;
|
||||
Ani_Card_2 = null;
|
||||
Ani_Card_Open_1 = null;
|
||||
Ani_Card_Open_2 = null;
|
||||
AniTimeStartFlag = 0;
|
||||
AniRewardMyStartFlag = 0;
|
||||
Ani_Card_All_1 = null;
|
||||
Ani_Card_All_Open = null;
|
||||
Ani_Card_All_Open_Gold = null;
|
||||
AniRewardReloadFlag = 0;
|
||||
AlphaValue = 0.0;
|
||||
RewardInfo = null;
|
||||
AniStartFlag = null;
|
||||
AniName_Flag += 1;
|
||||
CloseWindow();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function DrawRewardCard(Index) {
|
||||
if (Index > (RewardInfo.rewards2.len() - 1)) {
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 24, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
|
||||
return;
|
||||
}
|
||||
local Info = RewardInfo.rewards2[Index][0];
|
||||
local BackGroundFlag = 0;
|
||||
if (Info.count == 0) {
|
||||
BackGroundFlag = 1;
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
|
||||
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 0, -10);
|
||||
}
|
||||
if (Info.count == 1) {
|
||||
if (Info.grade == 1)(BackGroundFlag = -5)
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
|
||||
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 0, -10);
|
||||
} else if (Info.count == 2) {
|
||||
if (Info.grade == 1)(BackGroundFlag = -5)
|
||||
DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 23 + BackGroundFlag, X + 29 + ((Index % 4) * 189), Y + 250 + ((Index / 4) * 138));
|
||||
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72 - 20, Y + 250 + ((Index / 4) * 138) + 62, Info.item, Info.num, Index, 999999, 0);
|
||||
DrawItemEx(X + 29 + ((Index % 4) * 189) + 72 + 20, Y + 250 + ((Index / 4) * 138) + 62, Info.item2, Info.num2, Index, -20, -10);
|
||||
}
|
||||
}
|
||||
|
||||
ItemInfoDrawS = null;
|
||||
//绘制道具相信信息
|
||||
ItemObject = null;
|
||||
|
||||
//绘制道具带道具信息
|
||||
function DrawItemEx(X, Y, Id, Count, Pid, Flag, Flag2) {
|
||||
try {
|
||||
if (Flag != 999999) {
|
||||
local PartyMasterIcon = RinDro_Fiendwar_Obj.MyRaidTeam.MembersList[Pid];
|
||||
|
||||
local XOffset = -77 + Flag;
|
||||
local YOffset = -31 + Flag2;
|
||||
sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
|
||||
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12;
|
||||
local AYpos = AvatarObj.F[1][3] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset;
|
||||
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
|
||||
DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local DrawName = PartyMasterIcon.InfoObj.Name;
|
||||
//绘制名字
|
||||
L_sq_DrawCode(DrawName, X + XOffset + 100 - LenheartTextClass.GetStringLength(DrawName) / 2, Y + YOffset + 4, sq_RGBA(247, 214, 90, 250), 0, 1);
|
||||
}
|
||||
|
||||
if (Id != -1) {
|
||||
local Rarity = L_sq_RA(L_sq_GetItem(Id) + 0xF4);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/reward/fiend_reward.img", 5 + Rarity, X - 3, Y - 3);
|
||||
L_Sq_DrawItem(X, Y, Id, Count, 0, 0, 0);
|
||||
if (sq_IsIntersectRect(IMouse.GetXPos(), IMouse.GetYPos(), 1, 1, X, Y, 24, 24)) {
|
||||
ItemInfoDrawS = {};
|
||||
ItemInfoDrawS.X <- X;
|
||||
ItemInfoDrawS.Y <- Y;
|
||||
ItemInfoDrawS.ItemId <- Id;
|
||||
}
|
||||
}
|
||||
} catch (exception) {
|
||||
print(exception);
|
||||
}
|
||||
}
|
||||
//绘制悬停
|
||||
function DrawItemInfoF(obj) {
|
||||
if (ItemInfoDrawS) {
|
||||
if (!ItemObject) {
|
||||
local ItemId = ItemInfoDrawS.ItemId;
|
||||
if (AllItemInfoObject.rawin(ItemId)) {
|
||||
ItemObject = ItemInfoClass(AllItemInfoObject[ItemId]);
|
||||
}
|
||||
}
|
||||
ItemObject.Show(ItemInfoDrawS.X, ItemInfoDrawS.Y - ItemObject.PageLength);
|
||||
} else {
|
||||
ItemObject = null;
|
||||
}
|
||||
}
|
||||
|
||||
function DrawImg(Path, Index, XPos, YPos) {
|
||||
L_sq_DrawImg(Path, Index, XPos, YPos, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
ItemInfoDrawS = null;
|
||||
DrawMain(obj);
|
||||
// DrawItemInfoF(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,703 @@
|
|||
/*
|
||||
文件名:FiendwarFightSituation.nut
|
||||
路径:Project/Fiendwar/FiendwarFightSituation.nut
|
||||
创建日期:2024-11-26 14:44
|
||||
文件用途:
|
||||
*/
|
||||
|
||||
//复选框
|
||||
class Fiendwar_LenheartNewUI_SwitchButton extends LenheartNewUI_CommonUi {
|
||||
//透明度
|
||||
AlphaValue = 1.0;
|
||||
State = 0;
|
||||
ImgIndex = null;
|
||||
|
||||
constructor(X, Y) {
|
||||
LenheartNewUI_CommonUi.constructor(X, Y, 14, 15);
|
||||
}
|
||||
|
||||
function SyncAlpha(Value) {
|
||||
AlphaValue = Value;
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//不可用
|
||||
if (State == 8) {
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 3 : 141, X, Y + 1, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
} else {
|
||||
//悬停
|
||||
if (isLBDown) {
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y + 1, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
//按下
|
||||
else if (isInRect) {
|
||||
if (State == 0)
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 1 : 139, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
if (State == 1)
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
//普通
|
||||
else {
|
||||
if (State == 0)
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex : 138, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
if (State == 1)
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", ImgIndex ? ImgIndex + 2 : 140, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class Fiendwar_LenheartNewUI_ProgressIndicator extends LenheartNewUI_CommonUi {
|
||||
//透明度
|
||||
AlphaValue = 1.0;
|
||||
//宽
|
||||
DWidth = null;
|
||||
//控制者
|
||||
Controller = 0;
|
||||
//回调函数
|
||||
OnChangeControl = null;
|
||||
//球的偏移 因为除不尽 所以这个最好单独写
|
||||
BXposOffset = 0;
|
||||
|
||||
constructor(X, Y, W, H) {
|
||||
this.DWidth = W;
|
||||
LenheartNewUI_CommonUi.constructor(X, Y, W, H);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//绘制左
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 19, X, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
|
||||
local OffserIndex = 0;
|
||||
//绘制中
|
||||
for (local i = 0; i< this.DWidth; i++) {
|
||||
if (i > (Controller * this.DWidth).tointeger())
|
||||
OffserIndex = 0;
|
||||
else OffserIndex = 1;
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 21 + OffserIndex, X + 8 + i, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
//绘制右
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 20, X + 8 + this.DWidth, Y, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
|
||||
// local BXposOffset = 0;
|
||||
// if (BaseX && EndX) BXposOffset = EndX - BaseX;
|
||||
//绘制球
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 23, X + BXposOffset + 1, Y + 1, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
|
||||
//按下时的基准X
|
||||
BaseX = null;
|
||||
EndX = null;
|
||||
//鼠标左键按下回调
|
||||
function OnMouseLbDown(MousePos_X, MousePos_Y) {
|
||||
if (sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X + BXposOffset + 1, Y + 1, 15, 14)) {
|
||||
isLBDown = true;
|
||||
if (!BaseX) BaseX = MousePos_X;
|
||||
}
|
||||
}
|
||||
|
||||
//鼠标事件回调
|
||||
function OnMouseProc(Flag, MousePos_X, MousePos_Y) {
|
||||
if (isLBDown && Flag == 1) {
|
||||
if (MousePos_X > (X + DWidth + 8))
|
||||
MousePos_X = (X + DWidth + 8);
|
||||
else if (MousePos_X<(X + 8))
|
||||
MousePos_X = (X + 8);
|
||||
EndX = MousePos_X;
|
||||
if (BaseX && EndX) {
|
||||
BXposOffset = EndX - BaseX;
|
||||
Controller = BXposOffset.tofloat() / DWidth.tofloat();
|
||||
AlphaValue = Controller;
|
||||
if (AlphaValue< 0.4) AlphaValue = 0.4;
|
||||
if (OnChangeControl) OnChangeControl(Controller);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
isLBDown = false;
|
||||
}
|
||||
}
|
||||
|
||||
class FiendwarFightSituationC extends LenheartNewUI_Windows {
|
||||
|
||||
Visible = false;
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
//透明度
|
||||
AlphaValue = 1.0;
|
||||
//简易战况表复选框
|
||||
BaseSituationBtn = null;
|
||||
//简易战况表是否开启
|
||||
BaseSituationFlag = 0;
|
||||
|
||||
ExternalWindow = null;
|
||||
|
||||
//雷达是否存在
|
||||
RadarFlag = true;
|
||||
//turret2
|
||||
turret2 = true;
|
||||
|
||||
MonsterFace = {
|
||||
m20413 = 1,
|
||||
m20412 = 3,
|
||||
m20411 = 4,
|
||||
m20415 = 15,
|
||||
m20408 = 9,
|
||||
m20409 = 8,
|
||||
m20405 = 5,
|
||||
m20404 = 6,
|
||||
m20406 = 12,
|
||||
m20401 = 13,
|
||||
m20402 = 10,
|
||||
m20403 = 11,
|
||||
};
|
||||
|
||||
SlotPos = [
|
||||
[50, 479],
|
||||
[50, 374],
|
||||
[50, 270],
|
||||
[140, 167],
|
||||
[186, 89],
|
||||
[275, 36],
|
||||
[275, 141],
|
||||
[411, 11],
|
||||
[365, 88],
|
||||
[455, 141],
|
||||
[545, 36],
|
||||
|
||||
[141, 427],
|
||||
[185, 348],
|
||||
[185, 245],
|
||||
[321, 271],
|
||||
[411, 219],
|
||||
[546, 245],
|
||||
[591, 166],
|
||||
|
||||
[141, 530],
|
||||
[276, 505],
|
||||
[320, 375],
|
||||
[410, 478],
|
||||
[546, 504],
|
||||
[456, 401],
|
||||
[681, 478],
|
||||
[545, 348],
|
||||
[680, 374],
|
||||
[725, 244],
|
||||
|
||||
[690, 53],
|
||||
[727, 129],
|
||||
]
|
||||
|
||||
|
||||
Info = null;
|
||||
PackCurT = null;
|
||||
EndTime = null;
|
||||
|
||||
function InfoCallBack(Chunk) {
|
||||
// print(Chunk);
|
||||
local Jso = Json.Decode(Chunk);
|
||||
Info = Jso.fightInfo.platVos;
|
||||
EndTime = Jso.fightInfo.endTime;
|
||||
RadarFlag = Jso.fightInfo.radar;
|
||||
turret2 = Jso.fightInfo.turret2;
|
||||
RinDro_Fiendwar_Obj.EndTime = Jso.fightInfo.endTime;
|
||||
local Pt = Clock();
|
||||
PackCurT = Pt;
|
||||
RinDro_Fiendwar_Obj.PackCurT = Pt;
|
||||
|
||||
// local Win = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyInfoC, "超时空我的队伍窗口", 430, 15, 354, 290, 18);
|
||||
// Win.CloseWindow();
|
||||
// local Win = LenheartNewUI_CreateWindow(Rindro_Fiendwar_PartyHallC, "超时空攻坚队伍列表", 320, 40, 478, 434, 18);
|
||||
// Win.CloseWindow();
|
||||
}
|
||||
|
||||
//收到进入BOSS请求包
|
||||
function GoBossCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local Win = LenheartNewUI_CreateWindow(FiendwarHallGoBossDgnC, "超时空攻坚进入罗什", 273, 225, 270, 120, 19);
|
||||
Win.Visible = true;
|
||||
Win.Dark = Jso.boss1;
|
||||
Win.Light = Jso.boss2;
|
||||
Win.RegisterWidget();
|
||||
}
|
||||
|
||||
PlayerGiveUpTime = null;
|
||||
PlayerGiveUpFlagTime = null;
|
||||
//放弃副本包
|
||||
function PlayerGiveUpCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
PlayerGiveUpTime = Jso.endTime;
|
||||
PlayerGiveUpFlagTime = Clock();
|
||||
}
|
||||
|
||||
function GetInfo() {
|
||||
local T = {
|
||||
op = 20063053,
|
||||
// teamsId = RinDro_Fiendwar_Obj.MyPartyId
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
Pack_Control.rawset(20063016, InfoCallBack.bindenv(this));
|
||||
Pack_Control.rawset(20063022, GoBossCallBack.bindenv(this));
|
||||
Pack_Control.rawset(20063024, PlayerGiveUpCallBack.bindenv(this));
|
||||
|
||||
ExternalWindow = Rindro_Fiendwar_FightSituatioExternalC("超时空攻坚战况表外部窗口", getroottable().Rindro_Scr_Width.tointeger() - 296, 8, 103, 22, 0);
|
||||
ExternalWindow.AddParentWin(this);
|
||||
|
||||
GetInfo();
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
// //关闭按钮
|
||||
// local CloseButton = LenheartNewUI_BaseButton(770, 0, 30, 30, "interface2/fiendwar_kr/navigation/navigationframe.img", 13);
|
||||
// CloseButton.OnClick = function() {
|
||||
// local Win = LenheartNewUI_CreateWindow(FiendwarFightSituationC, "超时空战况表开关", 770, 9, 30, 30, 0);
|
||||
// Win.ResetFocus();
|
||||
// this.Visible = false;
|
||||
// }.bindenv(this);
|
||||
// Childrens.append(CloseButton);
|
||||
|
||||
local PIButton = Fiendwar_LenheartNewUI_ProgressIndicator(264, 11, 80, 10);
|
||||
PIButton.Controller = 1.0;
|
||||
PIButton.BaseX = 273;
|
||||
PIButton.EndX = 352;
|
||||
PIButton.BXposOffset = 79;
|
||||
PIButton.OnChangeControl = function(Controller) {
|
||||
AlphaValue = Controller;
|
||||
if (AlphaValue< 0.4) AlphaValue = 0.4;
|
||||
}.bindenv(this);
|
||||
Childrens.append(PIButton);
|
||||
|
||||
|
||||
//简易战况表复选框
|
||||
BaseSituationBtn = Fiendwar_LenheartNewUI_SwitchButton(198, 9);
|
||||
BaseSituationBtn.State = 0;
|
||||
BaseSituationBtn.ImgIndex = 358;
|
||||
BaseSituationBtn.Width = 19;
|
||||
BaseSituationBtn.Height = 19;
|
||||
BaseSituationBtn.OnClick = function() {
|
||||
switch (BaseSituationFlag) {
|
||||
case 0:
|
||||
BaseSituationFlag = 1;
|
||||
break;
|
||||
case 1:
|
||||
BaseSituationFlag = 0;
|
||||
break;
|
||||
}
|
||||
BaseSituationBtn.State = BaseSituationFlag;
|
||||
}.bindenv(this);
|
||||
AddChild(BaseSituationBtn);
|
||||
|
||||
}
|
||||
|
||||
|
||||
//绘制简易动态Ani // obj -- ani路径 -- X -- Y -- ani名字
|
||||
function T_DrawDynamicAni(obj, aniFileName, x, y, aniname, Alpha) {
|
||||
local ani = obj.getVar().GetAnimationMap(aniname, aniFileName);
|
||||
ani.setRGBA(255, 255, 255, Alpha);
|
||||
sq_AnimationProc(ani);
|
||||
sq_drawCurrentFrame(ani, x, y, true);
|
||||
return ani;
|
||||
}
|
||||
|
||||
function DrawParty() {
|
||||
//绘制我的队伍
|
||||
if (RinDro_Fiendwar_Obj.MyRaidTeam) {
|
||||
local Mt = RinDro_Fiendwar_Obj.MyRaidTeam;
|
||||
if (!Mt) return;
|
||||
local PartyMaster;
|
||||
foreach(index, PartyMasterIcon in Mt.MembersList) {
|
||||
local XOffset = 0;
|
||||
local YOffset = 9 + (index * 22);
|
||||
|
||||
DrawImg("interface2/fiendwar_kr/navigation/partyseatnumber.img", 0, X + XOffset + 10, Y + YOffset);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/partyseatnumber.img", PartyMasterIcon.InfoObj.TeamId, X + XOffset + 10, Y + YOffset + 1);
|
||||
|
||||
sq_DrawBox(X + 30 + XOffset, Y + 1 + YOffset, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
|
||||
|
||||
// //绘制队长头像
|
||||
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + XOffset - 12;
|
||||
local AYpos = AvatarObj.F[1][3] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + YOffset;
|
||||
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
|
||||
DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
|
||||
local RgbaValue = sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger());
|
||||
if (PartyMasterIcon.InfoObj.Captain) RgbaValue = sq_RGBA(247, 214, 90, (250 * AlphaValue).tointeger());
|
||||
if (PartyMasterIcon.InfoObj.Captain) DrawImg("hud/fiendwarl.img", 18, X + 42 + XOffset, Y + 1 + YOffset);
|
||||
|
||||
local DrawName = PartyMasterIcon.InfoObj.Name;
|
||||
if (PlayerGiveUpTime && PlayerGiveUpTime[index]) {
|
||||
local STime = ((PlayerGiveUpTime[index] - (Clock() - PlayerGiveUpFlagTime)) / 1000);
|
||||
DrawName = "复活时间: " + STime.tostring() + "秒";
|
||||
if (STime <= 0) DrawName = PartyMasterIcon.InfoObj.Name;
|
||||
}
|
||||
//绘制名字
|
||||
L_sq_DrawCode(DrawName, X + XOffset + 58, Y + YOffset + 4, RgbaValue, 0, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
//绘制背景框
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 0, X + 7, Y);
|
||||
//绘制建议进度表文字
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 71, X + 130, Y + 10);
|
||||
|
||||
//绘制透明度文字
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 72, X + 220, Y + 10);
|
||||
|
||||
|
||||
|
||||
DrawParty();
|
||||
|
||||
|
||||
|
||||
//Boss底层特效
|
||||
T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/boss_effect.ani", X + 720, Y + 110, "超时空战况表背景图BOSS区域", (250 * AlphaValue).tointeger());
|
||||
|
||||
//下路特效
|
||||
Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/linebottom.ani", X + 7, Y, "超时空战况表背景图下路特效B");
|
||||
//中路特效
|
||||
Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/linemiddle.ani", X + 7, Y, "超时空战况表背景图中路特效B");
|
||||
//上路特效
|
||||
Rindro_BaseToolClass.T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/linetop.ani", X + 7, Y, "超时空战况表背景图上路特效B");
|
||||
|
||||
//绘制地图
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 64, X + 7, Y + 1);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
if (Info) {
|
||||
foreach(Index, Value in Info) {
|
||||
if (Value.id != -1) {
|
||||
//裁切比例
|
||||
local SliceRate = 0;
|
||||
if (Value.e && Value.s) {
|
||||
SliceRate = (Value.e.tofloat() - (Clock().tofloat() - PackCurT.tofloat())) / Value.s.tofloat();
|
||||
}
|
||||
//BOSS暗
|
||||
if (Value.id == 28) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 60, X - 68 + SlotPos[Value.id][0], Y - 56 + SlotPos[Value.id][1]);
|
||||
}
|
||||
//BOSS光
|
||||
else if (Value.id == 29) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 61, X - 68 + SlotPos[Value.id][0], Y - 56 + SlotPos[Value.id][1]);
|
||||
}
|
||||
//兵营
|
||||
else if (Value.id == 10 || Value.id == 17 || Value.id == 27) {
|
||||
local Offset = 0;
|
||||
if (!Value.m) Offset = 7;
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 5 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
|
||||
//复活
|
||||
if (!Value.m) {
|
||||
if (SliceRate != 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 55, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
|
||||
DrawProgress(50, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
//生成小怪
|
||||
else {
|
||||
if (SliceRate != 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 54, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
|
||||
DrawProgress(50, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
//前哨
|
||||
else if (Value.id == 7 || Value.id == 15 || Value.id == 24) {
|
||||
local Offset = 0;
|
||||
if (!Value.m) Offset = 7;
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 4 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
|
||||
|
||||
if (SliceRate != 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 54, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
|
||||
DrawProgress(50, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
|
||||
}
|
||||
|
||||
} else if (Value.id == 6 || Value.id == 23) {
|
||||
//雷达
|
||||
if (Value.id == 6) {
|
||||
local Offset = 0;
|
||||
if (!Value.m) Offset = 7;
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 2 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
|
||||
}
|
||||
//炮塔
|
||||
else if (Value.id == 23) {
|
||||
local Offset = 0;
|
||||
if (!Value.m) Offset = 7;
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 3 + Offset, X - 14 + SlotPos[Value.id][0], Y - 4 + SlotPos[Value.id][1]);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
//基地和出发点一定有框
|
||||
if (Value.id == 0 || Value.id == 1 || Value.id == 11 || Value.id == 18) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
//基地两边都画
|
||||
if (Value.id == 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 26, X - 30 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 26, X + 33 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
|
||||
}
|
||||
} else {
|
||||
//有怪物
|
||||
if (Value.m || Value.n) {
|
||||
if (Value.m) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 27, X + 36 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
|
||||
//如果不是这些 那就是移动怪 并且活着
|
||||
if (Value.id != 10 && Value.id != 17 && Value.id != 27 && Value.id != 28 && Value.id != 29 && Value.id != 7 && Value.id != 15 && Value.id != 24 && Value.id != 6 && Value.id != 23 && !Value.n) {
|
||||
//没人打
|
||||
if (Value.u.len()< 1) {
|
||||
if (SliceRate != 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 56, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
|
||||
DrawProgress(52, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
//战斗中
|
||||
else {
|
||||
if (SliceRate != 0) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 53, X - 24 + SlotPos[Value.id][0], Y + 45 + SlotPos[Value.id][1]);
|
||||
DrawProgress(49, SliceRate, X - 10 + SlotPos[Value.id][0], Y + 51 + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (Value.n) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 59, X + 36 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
|
||||
}
|
||||
DrawImg("interface2/fiendwar_kr/navigation/monsterface.img", 14, X + 37 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 98, X + 38 + SlotPos[Value.id][0], Y + 37 + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
|
||||
//如果有玩家
|
||||
if (Value.u.len() >= 1) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 25, X - 10 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 26, X - 30 + SlotPos[Value.id][0], Y - 1 + SlotPos[Value.id][1]);
|
||||
|
||||
//说明有战斗
|
||||
if (Value.m) {
|
||||
//战斗特效
|
||||
T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/hexagon_ef_red.ani", X - 32 + SlotPos[Value.id][0], Y - 25 + SlotPos[Value.id][1], "超时空战况表战斗方格", (250 * AlphaValue).tointeger());
|
||||
} else {
|
||||
//TODO 这里判断有没有商人 没有商人画绿色 有画黄色
|
||||
T_DrawDynamicAni(obj, "common/fiendwar_kr/navigation/common/hexagon_ef_green.ani", X - 32 + SlotPos[Value.id][0], Y - 25 + SlotPos[Value.id][1], "超时空战况表安全方格", (250 * AlphaValue).tointeger());
|
||||
}
|
||||
//绘制队伍编号
|
||||
foreach(index, pos in Value.u) {
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 28 + pos, X - 24 + SlotPos[Value.id][0], Y + (index * 11) + 2 + SlotPos[Value.id][1]);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//雷达死完要绘制怪物头像
|
||||
if (!RadarFlag) {
|
||||
if (Value.m || Value.n) {
|
||||
local ImgIndex = 0;
|
||||
if (Value.m && MonsterFace.rawin("m" + Value.m)) ImgIndex = MonsterFace["m" + Value.m];
|
||||
DrawImg("interface2/fiendwar_kr/navigation/monsterface.img", ImgIndex, X + 37 + SlotPos[Value.id][0], Y + SlotPos[Value.id][1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
DrawFightTime(obj);
|
||||
}
|
||||
|
||||
function DrawImg(Path, Index, XPos, YPos) {
|
||||
L_sq_DrawImg(Path, Index, XPos, YPos, 1, sq_RGBA(255, 255, 255, (250 * AlphaValue).tointeger()), 1.0, 1.0);
|
||||
}
|
||||
|
||||
function DrawProgress(Index, SliceRate, X, Y) {
|
||||
if (!turret2) return;
|
||||
if (RadarFlag) SliceRate = 1.0;
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 48, X, Y);
|
||||
setClip(X, Y, X + (SliceRate * 61.0).tointeger(), Y + 3); //开始裁切
|
||||
DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", Index, X, Y);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
}
|
||||
|
||||
//攻坚时间
|
||||
function DrawFightTime(obj) {
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 47, X + 576, Y - 9);
|
||||
if (EndTime) {
|
||||
local RealTime = EndTime - (Clock() - PackCurT);
|
||||
|
||||
local seconds = RealTime / 1000;
|
||||
local hours = seconds / 3600;
|
||||
local minutes = seconds / 60;
|
||||
|
||||
seconds %= 60;
|
||||
hours = format("%02d", hours);
|
||||
seconds = format("%02d", seconds).slice(-2);
|
||||
minutes = format("%02d", minutes).slice(-2);
|
||||
|
||||
local Offset = 0;
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", hours.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", hours.slice(1).tointeger(), X + 669 + Offset, Y + 2);
|
||||
Offset += 38;
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", minutes.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", minutes.slice(1).tointeger(), X + 669 + Offset, Y + 2);
|
||||
Offset += 38;
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", seconds.slice(0, 1).tointeger(), X + 657 + Offset, Y + 2);
|
||||
L_sq_DrawImg("interface2/fiendwar_kr/navigation/timenumberset.img", seconds.slice(1).tointeger(), X + 669 + Offset, Y + 2);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
//在基地
|
||||
if (RinDro_Fiendwar_Obj.BaseConfig && RinDro_Fiendwar_Obj.BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == RinDro_Fiendwar_Obj.BaseConfig.town_index && L_sq_GetRegionIndex() >= 1) DrawParty();
|
||||
|
||||
// if (getroottable().rawin("FiendwarTotal") && RinDro_Fiendwar_Obj.EndTime) {
|
||||
// DrawFightTime(obj);
|
||||
// L_sq_DrawImg("interface2/fiendwar_kr/navigation/navigationframe.img", 13, X + 770, Y);
|
||||
// }
|
||||
|
||||
// //界面未打开
|
||||
// if (!this.Visible) {
|
||||
// //在甲板
|
||||
// if (RinDro_Fiendwar_Obj.BaseConfig && RinDro_Fiendwar_Obj.BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == RinDro_Fiendwar_Obj.BaseConfig.town_index && L_sq_GetRegionIndex() >= 1) {
|
||||
// if (!MainButton) {
|
||||
// MainButton = LenheartBaseButton(X + 770, Y, 30, 30, "interface2/fiendwar_kr/navigation/navigationframe.img", 13);
|
||||
// } else {
|
||||
// MainButton.Show();
|
||||
// if (MainButton.isLBActive()) {
|
||||
// this.Visible = true;
|
||||
// GetInfo();
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
|
||||
|
||||
MainButton = null;
|
||||
CloseMainButton = null;
|
||||
CloseFlag = false;
|
||||
//顶层绘制
|
||||
function TopDraw(obj) {
|
||||
//界面未打开
|
||||
if (!this.Visible) {
|
||||
//在甲板
|
||||
if (RinDro_Fiendwar_Obj.BaseConfig && "channel_index" in RinDro_Fiendwar_Obj.BaseConfig && RinDro_Fiendwar_Obj.BaseConfig.channel_index.find("19") && "town_index" in RinDro_Fiendwar_Obj.BaseConfig && L_sq_GetTownIndex() == RinDro_Fiendwar_Obj.BaseConfig.town_index && (RinDro_Fiendwar_Obj.MyRaidState == 1 || RinDro_Fiendwar_Obj.MyRaidState == 3) && !CloseFlag) {
|
||||
|
||||
}
|
||||
|
||||
if (CloseFlag) {
|
||||
if (Clock() - CloseFlag >= 10)
|
||||
CloseFlag = false;
|
||||
}
|
||||
} else {
|
||||
|
||||
}
|
||||
|
||||
ExternalWindow.Show(obj);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
class Rindro_Fiendwar_FightSituatioExternalC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//不是窗口
|
||||
NoWindow = true;
|
||||
|
||||
//操作窗口
|
||||
Window = null;
|
||||
|
||||
//是否可见
|
||||
// Visible = false;
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
//开启按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(0, 0, 30, 30, "interface2/fiendwar_kr/navigation/navigationframe.img", 13);
|
||||
CloseButton.OnClick = function() {
|
||||
if (!Window.Visible) {
|
||||
Window.Visible = true;
|
||||
Window.ResetFocus();
|
||||
Window.GetInfo();
|
||||
} else {
|
||||
Window.CloseWindow();
|
||||
}
|
||||
}.bindenv(this);
|
||||
CloseButton.SetCallBackFunc(function(button) {
|
||||
if (!Window.Visible) {
|
||||
button.Idx = 13;
|
||||
} else {
|
||||
button.Idx = 13;
|
||||
}
|
||||
}.bindenv(this));
|
||||
Childrens.append(CloseButton);
|
||||
}
|
||||
|
||||
function AddParentWin(Win) {
|
||||
Window = Win;
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
}
|
||||
|
||||
function TopShow(obj) {
|
||||
//结束时间
|
||||
if (RinDro_Fiendwar_Obj.EndTime) {
|
||||
Window.DrawFightTime(obj);
|
||||
|
||||
}
|
||||
// Window.DrawSimpleSituation();
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
//在甲板
|
||||
if (RinDro_Fiendwar_Obj.BaseConfig && "channel_index" in RinDro_Fiendwar_Obj.BaseConfig && RinDro_Fiendwar_Obj.BaseConfig.channel_index.find("20") && "town_index" in RinDro_Fiendwar_Obj.BaseConfig && L_sq_GetTownIndex() == RinDro_Fiendwar_Obj.BaseConfig.town_index && (RinDro_Fiendwar_Obj.RaidStage == 1 || RinDro_Fiendwar_Obj.RaidStage == 3)) {
|
||||
Visible = true;
|
||||
} else {
|
||||
Visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
/*
|
||||
文件名:FiendwarHallGoBossDgn.nut
|
||||
路径:Project/Fiendwar/FiendwarHallGoBossDgn.nut
|
||||
创建日期:2024-11-28 15:07
|
||||
文件用途:进入罗什的窗口
|
||||
*/
|
||||
class FiendwarHallGoBossDgnC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
Dark = 0;
|
||||
Light = 0;
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
Childrens = [];
|
||||
// //关闭按钮
|
||||
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
// CloseButton.OnClick = function() {
|
||||
// this.Visible = false;
|
||||
// }.bindenv(this);
|
||||
// Childrens.append(CloseButton);
|
||||
|
||||
//黑暗按钮
|
||||
local DarkButton = LenheartNewUI_BaseButton(4, 20, 264, 48, "interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 1);
|
||||
DarkButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063059,
|
||||
key = 28
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
if (Dark) DarkButton.State = 8;
|
||||
Childrens.append(DarkButton);
|
||||
//纯白按钮
|
||||
local LightButton = LenheartNewUI_BaseButton(4, 68, 264, 48, "interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 5);
|
||||
LightButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063059,
|
||||
key = 29
|
||||
}
|
||||
Rindro_BaseToolClass.SendPackEx(T);
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
if (Light) LightButton.State = 8;
|
||||
Childrens.append(LightButton);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
L_sq_DrawWindow(X, Y + 10, 246, 85, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
|
||||
L_sq_DrawWindow(X, Y + 10, 246, 85, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
|
||||
|
||||
// L_sq_DrawImg("interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 0, X + 11, Y + 21);
|
||||
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 25, X - 3, Y + 2);
|
||||
L_sq_DrawCode("量子时空传送站", X + 98, Y + 5, sq_RGBA(179, 169, 135, 255), 0, 1);
|
||||
|
||||
// L_sq_DrawImg("hud/fiendwarl.img", 10, X + 72, Y + 44);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,112 @@
|
|||
/*
|
||||
文件名:FiendwarNoti.nut
|
||||
路径:Project/Fiendwar/FiendwarNoti.nut
|
||||
创建日期:2024-11-26 14:45
|
||||
文件用途:
|
||||
*/
|
||||
class FiendwarNotiC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//消息内容
|
||||
Msg = null;
|
||||
//队长名称
|
||||
Name = null;
|
||||
//消息时间
|
||||
Timer = null;
|
||||
|
||||
//队伍聊天消息分发
|
||||
function FiendwarPartyNotiCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
Name = Jso.Name;
|
||||
Msg = Jso.msg;
|
||||
Timer = Clock();
|
||||
}
|
||||
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
//队伍聊天消息分发
|
||||
Pack_Control.rawset(20063018, FiendwarPartyNotiCallBack.bindenv(this));
|
||||
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
// //关闭按钮
|
||||
// local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
// CloseButton.OnClick = function() {
|
||||
// this.Visible = false;
|
||||
// }.bindenv(this);
|
||||
// Childrens.append(CloseButton);
|
||||
|
||||
}
|
||||
|
||||
//队长头像
|
||||
PartyMasterIcon = null;
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
|
||||
if (!Name || !Msg) return;
|
||||
//绘制背景框
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 24, X + 134, Y + 180);
|
||||
//绘制队长图标
|
||||
// L_sq_DrawImg
|
||||
|
||||
if (FiendwarTotal.GetInstance().MyTeam) {
|
||||
local Mt = FiendwarTotal.GetInstance().MyTeam;
|
||||
local PartyMaster;
|
||||
foreach(index, value in Mt.MembersList) {
|
||||
if (value.InfoObj.Captain) {
|
||||
PartyMasterIcon = clone(value);
|
||||
}
|
||||
}
|
||||
|
||||
sq_DrawBox(X + 42 + 118, Y + 1 + 185, 22, 18, PartyMasterIcon.HandBoxColor[PartyMasterIcon.InfoObj.TeamId]);
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.D[0] + X + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][0] + 118;
|
||||
local AYpos = AvatarObj.D[1] + Y + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 185;
|
||||
setClip(AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + PartyMasterIcon.OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.C, AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//绘制队长名字
|
||||
L_sq_DrawCode(Name, X + 184, Y + 189, sq_RGBA(247, 214, 90, 255), 0, 1);
|
||||
//绘制点
|
||||
L_sq_DrawCode(" : ", X + 210, Y + 189, sq_RGBA(230, 200, 155, 255), 0, 1);
|
||||
//绘制消息
|
||||
L_sq_DrawCode(Msg, X + 190 + LenheartTextClass.GetStringLength(Name), Y + 189, sq_RGBA(230, 200, 155, 255), 0, 1);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
if (Name && Msg)
|
||||
Visible = true;
|
||||
else
|
||||
Visible = false;
|
||||
|
||||
if (Timer) {
|
||||
if (Clock() - Timer >= 3500) {
|
||||
Timer = null;
|
||||
Name = null;
|
||||
Msg = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,434 @@
|
|||
/*
|
||||
文件名:Rindro_Fiendwar.nut
|
||||
路径:Project/Fiendwar/Rindro_Fiendwar.nut
|
||||
创建日期:2024-08-13 09:30
|
||||
文件用途:超时空
|
||||
*/
|
||||
|
||||
|
||||
dofile("sqr/Project/Fiendwar/FiendFightLogic.nut");
|
||||
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_CreateParty.nut");
|
||||
dofile("sqr/Project/Fiendwar/FiendwarHallGoBossDgn.nut");
|
||||
dofile("sqr/Project/Fiendwar/FiendwarFightSituation.nut");
|
||||
dofile("sqr/Project/Fiendwar/FiendwarNoti.nut");
|
||||
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_Party.nut");
|
||||
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyApplyJoin.nut");
|
||||
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyFormation.nut");
|
||||
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyHall.nut");
|
||||
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyInfo.nut");
|
||||
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PartyMemberInfo.nut");
|
||||
dofile("sqr/Project/Fiendwar/Rindro_Fiendwar_PlayerInteractive.nut");
|
||||
dofile("sqr/Project/Fiendwar/FiendReward.nut");
|
||||
|
||||
|
||||
//超时空核心数据类
|
||||
class RinDro_Fiendwar extends Rindro_BaseToolClass {
|
||||
//基础配置
|
||||
BaseConfig = null;
|
||||
//攻坚配置
|
||||
FightConfig = null;
|
||||
|
||||
//我的攻坚队状态
|
||||
MyRaidState = null;
|
||||
//我的攻坚队伍
|
||||
MyRaidTeam = null;
|
||||
//我的攻坚队伍ID
|
||||
MyRaidTeamId = null;
|
||||
//我的Cid
|
||||
MyCid = null;
|
||||
//我是否是攻坚队队长
|
||||
IsCaptain = null;
|
||||
//结束时间
|
||||
EndTime = null;
|
||||
//我的攻坚队攻坚阶段
|
||||
RaidStage = 0;
|
||||
//我的攻坚队伍头像存储
|
||||
Portrait = null;
|
||||
|
||||
|
||||
//超时空我的队伍窗口
|
||||
PartyWindow_Object = null;
|
||||
//攻坚战况表窗口
|
||||
FightSituationWindow_Object = null;
|
||||
//攻坚大厅窗口
|
||||
PartyHallWindow_Object = null;
|
||||
//翻牌奖励窗口
|
||||
RewardWindow_Object = null;
|
||||
//编队窗口
|
||||
PartyFormationWindow_Object = null;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//攻坚开始动画的Flag
|
||||
DrawStartAniMark = false;
|
||||
|
||||
|
||||
//请求基础信息配置
|
||||
function GetFiendwarBase() {
|
||||
local T = {
|
||||
op = 20063501,
|
||||
}
|
||||
SendPackEx(T);
|
||||
}
|
||||
//请求掉线配置信息
|
||||
function GetFiendwarDown() {
|
||||
local T = {
|
||||
op = 20063063,
|
||||
}
|
||||
SendPackEx(T);
|
||||
}
|
||||
|
||||
//基础信息配置
|
||||
function FiendwarBase(Chunk) {
|
||||
BaseConfig = Json.Decode(Chunk);
|
||||
FiendwarChannelTownLogicCallBack();
|
||||
}
|
||||
|
||||
//基础攻坚信息配置
|
||||
function FiendwarFightBase(Chunk) {
|
||||
FightConfig = Json.Decode(Chunk);
|
||||
}
|
||||
|
||||
//团本专属频道上线城镇移动包
|
||||
function FiendwarChannelTownLogicCallBack() {
|
||||
if (BaseConfig.channel_index.find("20")) {
|
||||
if (L_sq_GetTownIndex() != BaseConfig.town_index) {
|
||||
L_sq_MoveTown(BaseConfig.town_index, 0, 474, 249);
|
||||
}
|
||||
} else {
|
||||
//在超时空区域的 要转移回普通城镇
|
||||
if (L_sq_GetTownIndex() == BaseConfig.town_index) {
|
||||
L_sq_MoveTown(getroottable().rawin("RindroRaidNormalTown") ? getroottable().RindroRaidNormalTown : 2, getroottable().rawin("RindroRaidNormalArea") ? getroottable().RindroRaidNormalArea : 1, 474, 249);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//获取攻坚队信息回调
|
||||
function GetTeamInfoCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local ZlibStr = Jso.ZipS;
|
||||
Jso.ZipS = Json.Decode(L_sq_Dezlib(Jso.ZipS));
|
||||
Jso.team <- Jso.ZipS.team;
|
||||
|
||||
//取的窗口对象
|
||||
local Win = PartyWindow_Object;
|
||||
Win.InfoFlag = true;
|
||||
|
||||
//如果攻坚队伍信息中已经有了角色成员 清空成员对象集合
|
||||
for (local i = 0; i< Win.Childrens.len(); i++) {
|
||||
local Cobj = Win.Childrens[i];
|
||||
if (Cobj instanceof Rindro_FiendwarPartyInfoMemberC) {
|
||||
Win.Childrens.remove(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
//重置成员数组
|
||||
Win.MembersList = [];
|
||||
|
||||
//清空是否为我的队伍状态
|
||||
Win.IsMyTeam = false;
|
||||
//清空是否为队长状态
|
||||
Win.IsCaptain = false;
|
||||
//赋值队伍名称
|
||||
Win.TeamName = Jso.team.TeamName;
|
||||
//赋值队伍ID
|
||||
Win.TeamID = Jso.team.TeamId;
|
||||
|
||||
//还原头像
|
||||
Portrait = {};
|
||||
//遍历Team包 用于构造队伍窗口中的每一位成员
|
||||
foreach(_index, MemberObj in Jso.team.characNum) {
|
||||
// for (local i = 0; i< 8; i++) {
|
||||
// local MemberObj = Jso.team.characNum[0];
|
||||
// local MemberObj = Jso.team.characNum[0];
|
||||
//说明我在这个攻坚队里
|
||||
if (Jso.cid == MemberObj.CID) {
|
||||
Win.IsMyTeam = true;
|
||||
MyRaidState = Jso.team.State;
|
||||
MyRaidTeam = PartyWindow_Object;
|
||||
//向全局类存入我的攻坚队伍ID
|
||||
MyRaidTeamId = Jso.team.TeamId;
|
||||
//存入我的CID
|
||||
MyCid = Jso.cid;
|
||||
//说明是队长
|
||||
if (Jso.cid == Jso.team.captainCid) {
|
||||
Win.IsCaptain = true;
|
||||
//存入我是攻坚队队长
|
||||
IsCaptain = true;
|
||||
}
|
||||
}
|
||||
//构造CID对应的装备数组方便绘制
|
||||
Portrait.rawset(MemberObj.CID, {
|
||||
EquVos = clone(MemberObj.equVos),
|
||||
Job = MemberObj.PlayerJob,
|
||||
TeamId = MemberObj.characNum + 1,
|
||||
Name = MemberObj.PlayerName,
|
||||
});
|
||||
local T = {
|
||||
PartyId = Jso.team.TeamId, //攻坚队ID
|
||||
TeamId = MemberObj.characNum + 1, //小队编号
|
||||
Level = MemberObj.PlayerLevel.tostring(), //等级
|
||||
Name = MemberObj.PlayerName, //名字
|
||||
JobName = MemberObj.PlayerGrowTypeJob, //职业名
|
||||
Job = MemberObj.PlayerJob, //职业编号
|
||||
StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料
|
||||
EquVos = MemberObj.equVos, //装备List 用于显示头像
|
||||
Captain = MemberObj.CaptainBool, //是否为攻坚队队长
|
||||
Cid = MemberObj.CID, //Cid
|
||||
OnlineState = MemberObj.onLineStart, //在线状态
|
||||
ExitTime = MemberObj.exitTime, //离队时间
|
||||
PlayerSession = MemberObj.PlayerSession, //玩家在世界中的Session 用于进行原生用户操作
|
||||
ClearanceCount = MemberObj.ClearanceCount, //通关次数
|
||||
ClearanceCountMax = FightConfig.rewardCondition, //总通关次数
|
||||
}
|
||||
//通过类构造并添加队伍成员UI对象
|
||||
local TeamBuf = Rindro_FiendwarPartyInfoMemberC(T);
|
||||
Win.AddChild(TeamBuf);
|
||||
Win.MembersList.append(TeamBuf);
|
||||
}
|
||||
|
||||
if (("OpenWin" in Jso)) {
|
||||
//开启队伍窗口显示
|
||||
Win.Visible = true;
|
||||
//设置置顶
|
||||
Win.ResetFocus();
|
||||
}
|
||||
}
|
||||
|
||||
//攻坚队攻坚开始回调
|
||||
function RaidStartFightCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
RaidStage = 1;
|
||||
MyRaidState = 1;
|
||||
|
||||
//在获取一下攻坚队信息
|
||||
local Jso = {
|
||||
op = 20063011
|
||||
}
|
||||
SendPackEx(Jso);
|
||||
}
|
||||
|
||||
|
||||
|
||||
//结束时间
|
||||
EndTime = null;
|
||||
//上次刷新信息包的时间
|
||||
PackCurT = null;
|
||||
|
||||
//攻坚队信息包
|
||||
function RaidFightInfoCallBack(Chunk) {
|
||||
PackCurT = Clock();
|
||||
local Info = Json.Decode(Chunk).fightInfo;
|
||||
EndTime = Info.endTime;
|
||||
|
||||
if (FightSituationWindow_Object) FightSituationWindow_Object.InitInfo(Info);
|
||||
|
||||
//如果存在
|
||||
if (MyRaidTeam && MyRaidTeam.InfoFlag) {
|
||||
for (local i = 0; i< MyRaidTeam.MembersList.len(); i++) {
|
||||
local PInfo = MyRaidTeam.MembersList[i].InfoObj;
|
||||
local CID = PInfo.Cid;
|
||||
|
||||
local Flag = false;
|
||||
foreach(scid in Info.Standby) {
|
||||
if (scid == CID) Flag = true;
|
||||
}
|
||||
if (Flag) {
|
||||
MyRaidTeam.MembersList[i].InfoObj.Standby <- true;
|
||||
} else {
|
||||
MyRaidTeam.MembersList[i].InfoObj.Standby <- false;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//收到奖励包
|
||||
function RaidRewardInfoCallBack(Chunk) {
|
||||
local Info = Json.Decode(Chunk);
|
||||
RewardWindow_Object.Init(Info);
|
||||
}
|
||||
|
||||
//收到初始化包
|
||||
function RaidInitCallBack(Chunk) {
|
||||
//我的攻坚队状态
|
||||
MyRaidState = null;
|
||||
//我的攻坚队伍
|
||||
MyRaidTeam = null;
|
||||
//我的攻坚队伍ID
|
||||
MyRaidTeamId = null;
|
||||
//我的Cid
|
||||
MyCid = null;
|
||||
//我是否是攻坚队队长
|
||||
IsCaptain = null;
|
||||
//结束时间
|
||||
EndTime = null;
|
||||
//我的攻坚队攻坚阶段
|
||||
RaidStage = 0;
|
||||
//我的攻坚队伍头像存储
|
||||
Portrait = null;
|
||||
|
||||
//超时空我的队伍窗口
|
||||
PartyWindow_Object.DestroyWindow();
|
||||
//攻坚战况表窗口
|
||||
FightSituationWindow_Object.DestroyWindow();
|
||||
//攻坚大厅窗口
|
||||
PartyHallWindow_Object.DestroyWindow();
|
||||
//翻牌奖励窗口
|
||||
RewardWindow_Object.DestroyWindow();
|
||||
//编队窗口
|
||||
PartyFormationWindow_Object.DestroyWindow();
|
||||
|
||||
//超时空我的队伍窗口
|
||||
PartyWindow_Object = null;
|
||||
//攻坚战况表窗口
|
||||
FightSituationWindow_Object = null;
|
||||
//攻坚大厅窗口
|
||||
PartyHallWindow_Object = null;
|
||||
//翻牌奖励窗口
|
||||
RewardWindow_Object = null;
|
||||
//编队窗口
|
||||
PartyFormationWindow_Object = null;
|
||||
|
||||
}
|
||||
|
||||
MonsterFMap = [202210052, 202210053, 202210054, 202210055];
|
||||
//火山怪物投放包
|
||||
function MonsterSendCallBack(Chunk) {
|
||||
local Info = Json.Decode(Chunk);
|
||||
if (sq_GetCurrentModuleType() == 3) {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
obj = sq_ObjectToSQRCharacter(obj);
|
||||
obj.sq_SendCreatePassiveObjectPacket(MonsterFMap[Info.id], 0, 120, 1, 0);
|
||||
}
|
||||
}
|
||||
|
||||
constructor() {
|
||||
// DrawStartAniMark = true;
|
||||
// DrawStartAniT = Clock();
|
||||
|
||||
Pack_Control.rawset(20063028, RaidStartFightCallBack.bindenv(this));
|
||||
Pack_Control.rawset(20063016, RaidFightInfoCallBack.bindenv(this));
|
||||
Pack_Control.rawset(20063004, GetTeamInfoCallBack.bindenv(this));
|
||||
Pack_Control.rawset(20063036, FiendwarFightBase.bindenv(this));
|
||||
//攻坚奖励包
|
||||
Pack_Control.rawset(20063026, RaidRewardInfoCallBack.bindenv(this));
|
||||
//初始化包 退出队伍 或者 被 请出队伍
|
||||
Pack_Control.rawset(20063008, RaidInitCallBack.bindenv(this));
|
||||
//火山怪物投放
|
||||
Pack_Control.rawset(20063050, MonsterSendCallBack.bindenv(this));
|
||||
//绘制动画包
|
||||
Pack_Control.rawset(20063038, RaidPlayAniCallBack.bindenv(this));
|
||||
|
||||
|
||||
//获取基础配置回调包
|
||||
Pack_Control.rawset(20063502, FiendwarBase.bindenv(this));
|
||||
//第一次上线要重新请求一下位置信息
|
||||
GetFiendwarBase();
|
||||
//看看是否有断线重连
|
||||
GetFiendwarDown();
|
||||
FiendFightLogicC_Object = FiendFightLogicC();
|
||||
}
|
||||
|
||||
|
||||
FiendFightLogicC_Object = null;
|
||||
|
||||
function Proc(obj) {
|
||||
PartyHallWindow_Object = LenheartNewUI_CreateWindow(Rindro_Fiendwar_PartyHallC, "新超时空攻坚大厅窗口", ((getroottable().Rindro_Scr_Width - 478)).tointeger(), 40, 478, 434, 18);
|
||||
PartyFormationWindow_Object = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyFormation, "超时空我的队伍编队窗口", 375, 190, 294, 192, 18);
|
||||
FightSituationWindow_Object = LenheartNewUI_CreateWindow(FiendwarFightSituationC, "超时空攻坚战况表", 0, 8, 770, 600, 0);
|
||||
PartyWindow_Object = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyInfoC, "超时空我的队伍窗口", 6, 15, 354, 566 - 255, 18);
|
||||
RewardWindow_Object = LenheartNewUI_CreateWindow(FiendRewardC, "超时空翻牌奖励窗口", 0, 0, 0, 0, 0);
|
||||
LenheartNewUI_CreateWindow(FiendwarNotiC, "超时空攻坚队伍消息分发", 0, 0, 0, 0, 0);
|
||||
|
||||
if (FightSituationWindow_Object) FightSituationWindow_Object.TopDraw(obj);
|
||||
|
||||
//绘制动画
|
||||
DrawPlayAni(obj);
|
||||
|
||||
if (FiendFightLogicC_Object) FiendFightLogicC_Object.Proc(obj);
|
||||
}
|
||||
|
||||
|
||||
DrawPlayAniMark = null;
|
||||
DrawPlayAniT = null;
|
||||
|
||||
function RaidPlayAniCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
DrawPlayAniMark = Jso.type;
|
||||
DrawPlayAniT = Clock();
|
||||
}
|
||||
|
||||
//绘制通关副本动画
|
||||
function DrawPlayAni(obj) {
|
||||
if (!DrawPlayAniMark || !DrawPlayAniT) return;
|
||||
local Offset = 0;
|
||||
if (getroottable().Rindro_Scr_Width > 800) Offset = ((getroottable().Rindro_Scr_Width - 800) / 2);
|
||||
local Ct = Clock() - DrawPlayAniT;
|
||||
switch (DrawPlayAniMark) {
|
||||
case 1: //通关擎天A
|
||||
case 2: //通关擎天B
|
||||
case 13: //通关擎天B
|
||||
local Ani = T_DrawDynamicAni(obj, "common/anton/title/04_clear_back.ani", 0 + Offset, 180, "超时空通关擎天A" + DrawPlayAniT);
|
||||
local str = "擎天之柱A";
|
||||
if (DrawPlayAniMark == 2) str = "擎天之柱B"
|
||||
if (DrawPlayAniMark == 13) str = "黑色火山"
|
||||
if (Ct >= 350 && Ct <= 1400) L_sq_DrawCode(str, 236 + Offset + 158 - LenheartTextClass.GetStringLength(str) / 2, 244, sq_RGBA(255, 146, 0, 250), 0, 1);
|
||||
break;
|
||||
case 5:
|
||||
T_DrawDynamicAni(obj, "common/luke/newtile/00_start_back.ani", 401 + Offset, 210 + 26, "超时空阻截开始" + DrawPlayAniT);
|
||||
break;
|
||||
case 6:
|
||||
T_DrawDynamicAni(obj, "common/luke/newtile/02_success_back.ani", 401 + Offset, 210 + 26, "超时空阻截成功" + DrawPlayAniT);
|
||||
break;
|
||||
case 7:
|
||||
T_DrawDynamicAni(obj, "common/luke/newtile/01_fail_back.ani", 401 + Offset, 210 + 26, "超时空阻截失败" + DrawPlayAniT);
|
||||
break;
|
||||
case 8:
|
||||
T_DrawDynamicAni(obj, "common/luke/newtile/00_start_back_1.ani", 401 + Offset, 210 + 26, "超时空灭杀开始" + DrawPlayAniT);
|
||||
break;
|
||||
case 9:
|
||||
T_DrawDynamicAni(obj, "common/luke/newtile/02_success_back_1.ani", 401 + Offset, 210 + 26, "超时空灭杀成功" + DrawPlayAniT);
|
||||
break;
|
||||
case 10:
|
||||
T_DrawDynamicAni(obj, "common/luke/newtile/01_fail_back_1.ani", 401 + Offset, 210 + 26, "超时空灭杀失败" + DrawPlayAniT);
|
||||
break;
|
||||
case 11:
|
||||
case 12:
|
||||
T_DrawDynamicAni(obj, "common/anton/title/03_warning_back.ani", 0 + Offset, 210 + 26, "超时空火山警告" + DrawPlayAniT);
|
||||
local str = "火山能量即将过载,请立即前往压制!!!";
|
||||
if (DrawPlayAniMark == 12) str = "震颤的大地已经复活,请立即前往压制!!!"
|
||||
if (Ct >= 350 && Ct <= 1600) L_sq_DrawCode(str, 236 + Offset + 158 - LenheartTextClass.GetStringLength(str) / 2, 320, sq_RGBA(255, 50, 50, 250), 0, 1);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (Ct >= 3000) {
|
||||
DrawPlayAniMark = null;
|
||||
DrawPlayAniT = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
getroottable().rawdelete("RinDro_Fiendwar_Obj");
|
||||
|
||||
function Lenheart_Rindro_Fiendwar_New(obj) {
|
||||
local RootTab = getroottable();
|
||||
if (!RootTab.rawin("RinDro_Fiendwar_Obj")) {
|
||||
RootTab.rawset("RinDro_Fiendwar_Obj", RinDro_Fiendwar());
|
||||
} else {
|
||||
RootTab["RinDro_Fiendwar_Obj"].Proc(obj);
|
||||
}
|
||||
}
|
||||
|
||||
if (getroottable().rawin("LenheartTopFuncTab")) {
|
||||
getroottable()["LenheartTopFuncTab"].rawset("Lenheart_Rindro_Fiendwar_NewFunc", Lenheart_Rindro_Fiendwar_New);
|
||||
} else {
|
||||
local T = {};
|
||||
T.rawset("Lenheart_Rindro_Fiendwar_NewFunc", Lenheart_Rindro_Fiendwar_New);
|
||||
getroottable().rawset("LenheartTopFuncTab", T);
|
||||
}
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
/*
|
||||
文件名:Rindro_Fiendwar_CreateParty.nut
|
||||
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_CreateParty.nut
|
||||
创建日期:2024-07-15 20:28
|
||||
文件用途:超时空创建队伍窗口
|
||||
*/
|
||||
|
||||
|
||||
class Rindro_FiendwarCreatePartyC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
DeBugMode = false;
|
||||
|
||||
X = 290;
|
||||
Y = 220;
|
||||
//输入框
|
||||
InputObject = null;
|
||||
|
||||
//时装 帽子 头部 脸 上衣 下装 鞋子 胸部 腰部 皮肤 光环
|
||||
AvatarInfoIdx = [0x3038, 0x3010, 0x3014, 0x3018, 0x301c, 0x3020, 0x3024, 0x3028, 0x302c, 0x3030, 0x3034];
|
||||
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(266, 2, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
DestroyWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
local OkButton = LenheartNewUI_ButtonText(78, 124, 5, "确定");
|
||||
OkButton.SetTextOffset(0, 1);
|
||||
OkButton.OnClick = function() {
|
||||
|
||||
//如果队伍名输出框的文字长度大于0就创建队伍 创建时告诉服务端自己的 头发 帽子 脸部 皮肤
|
||||
if (InputObject.str.len() > 0) {
|
||||
|
||||
local C_Object = L_sq_RA(0x1ab7cdc);
|
||||
local avataritemsbuf = [];
|
||||
foreach(offset in AvatarInfoIdx) {
|
||||
local AvatarEquiAddress = L_sq_RA(C_Object + offset);
|
||||
if (AvatarEquiAddress >= 0x400000) {
|
||||
local Ab = [];
|
||||
local NormalIndex = L_sq_RA(AvatarEquiAddress + 0x1c);
|
||||
local ExIndex = L_sq_RA(AvatarEquiAddress + 0x13E0);
|
||||
Ab.append(NormalIndex);
|
||||
Ab.append(ExIndex);
|
||||
avataritemsbuf.append(Ab);
|
||||
} else {
|
||||
local Ab = [];
|
||||
Ab.append(0);
|
||||
Ab.append(0);
|
||||
avataritemsbuf.append(Ab);
|
||||
}
|
||||
}
|
||||
|
||||
local T = {
|
||||
op = 20063001,
|
||||
teamsName = InputObject.str,
|
||||
items = avataritemsbuf,
|
||||
}
|
||||
SendPackEx(T);
|
||||
DestroyWindow();
|
||||
}
|
||||
}.bindenv(this);
|
||||
AddChild(OkButton);
|
||||
|
||||
local CloseButton = LenheartNewUI_ButtonText(144, 124, 5, "取消");
|
||||
CloseButton.SetTextOffset(0, 1);
|
||||
CloseButton.OnClick = function() {
|
||||
DestroyWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
InputObject = LenheartNewUI_BaseInput(62, 68, 152, 20);
|
||||
AddChild(InputObject);
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
L_sq_DrawWindow(X, Y + 10, 260, 120, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
|
||||
L_sq_DrawWindow(X, Y + 10, 260, 120, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
|
||||
L_sq_DrawImg("interface2/gcontents/180621_fiendwar/raid/raid_areaimg_fiend.img", 0, X + 11, Y + 21);
|
||||
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 9, X - 2, Y + 2);
|
||||
L_sq_DrawCode("创建攻坚队", X + 112, Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1);
|
||||
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 10, X + 72, Y + 44);
|
||||
|
||||
}
|
||||
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
/*
|
||||
文件名:Rindro_Fiendwar_Party.nut
|
||||
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_Party.nut
|
||||
创建日期:2024-07-15 21:02
|
||||
文件用途:超时空队伍对象
|
||||
*/
|
||||
|
||||
class Rindro_FiendwarPartyC extends LenheartNewUI_CommonUi {
|
||||
X = 0;
|
||||
Y = 0;
|
||||
Width = null;
|
||||
Height = null;
|
||||
TeamObj = null;
|
||||
//选中状态
|
||||
SelectState = false;
|
||||
//攻坚状态
|
||||
OffensiveState = 0;
|
||||
|
||||
constructor(gTeamObj) {
|
||||
//拿到信息Map
|
||||
TeamObj = gTeamObj;
|
||||
//设定宽高 坐标不重要 会被父窗口的Sync同步坐标
|
||||
this.Width = 458;
|
||||
this.Height = 21;
|
||||
|
||||
this.OnClick = function() {
|
||||
//还原父对象中其他攻坚队伍类 选中自己
|
||||
foreach(Obj in Parent.Childrens) {
|
||||
if (Obj instanceof Rindro_FiendwarPartyC) {
|
||||
Obj.SelectState = false;
|
||||
}
|
||||
}
|
||||
SelectState = !SelectState;
|
||||
//发送查看攻坚队具体信息包
|
||||
local T = {
|
||||
op = 20063013,
|
||||
teamsId = TeamObj.TeamId
|
||||
}
|
||||
SendPackEx(T);
|
||||
}
|
||||
LenheartNewUI_CommonUi.constructor(10, 82, this.Width, this.Height);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//绘制底槽
|
||||
L_sq_DrawImg("hud/rindroanton.img", 4, X, Y);
|
||||
|
||||
//绘制队伍编号
|
||||
L_sq_DrawCode(TeamObj.TeamId, X + 22 - LenheartTextClass.GetStringLength(TeamObj.TeamId) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制队长头像
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", 55, X + 52, Y + 7);
|
||||
try {
|
||||
local channel_index = FiendwarTotal.GetInstance().BaseConfig.channel_index;
|
||||
channel_index = channel_index.slice(channel_index.len() - 2, channel_index.len());
|
||||
//绘制频道信息
|
||||
L_sq_DrawCode(channel_index, X + 102 - LenheartTextClass.GetStringLength(channel_index) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
} catch (exception) {
|
||||
|
||||
}
|
||||
//绘制攻坚队名称
|
||||
L_sq_DrawCode(TeamObj.TeamName, X + 130, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
// print(TeamObj.State);
|
||||
//绘制攻坚队攻坚状态
|
||||
L_sq_DrawImg("hud/newantonui.img", 4 + TeamObj.State, X + 314, Y + 2);
|
||||
|
||||
local PartyPlayerCountStr = TeamObj.TeamPlayerCount + " / " + 20;
|
||||
//绘制攻坚队队员数量
|
||||
L_sq_DrawCode(PartyPlayerCountStr, X + 434 - LenheartTextClass.GetStringLength(PartyPlayerCountStr) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
|
||||
if (SelectState) {
|
||||
L_sq_DrawImg("hud/rindroanton.img", 5, X, Y);
|
||||
}
|
||||
|
||||
if (isInRect) {
|
||||
L_sq_DrawImg("hud/rindroanton.img", 5, X, Y);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,258 @@
|
|||
/*
|
||||
文件名:Rindro_Fiendwar_PartyApplyJoin.nut
|
||||
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PartyApplyJoin.nut
|
||||
创建日期:2024-07-16 21:54
|
||||
文件用途:超时空玩家申请加入攻坚队
|
||||
*/
|
||||
class Rindro_FiendwarApplyJoinC extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//角色对象
|
||||
Charc = null;
|
||||
//角色等级
|
||||
Level = "100级";
|
||||
//角色名称
|
||||
Name = "凌众K";
|
||||
//角色职业
|
||||
Job = 0;
|
||||
//角色决斗等级
|
||||
PvpLevel = 1;
|
||||
//职业名称
|
||||
JobName = "大暗黑天";
|
||||
//角色复活币
|
||||
Coin = "139个";
|
||||
//角色疲劳值
|
||||
Fatigue = "156";
|
||||
//战斗力
|
||||
Combat = "170051206";
|
||||
//通过次数
|
||||
ClearanceCount = 63;
|
||||
//玩家世界Session
|
||||
PlayerSession = 0;
|
||||
|
||||
//请求者信息集合
|
||||
RequestJoinTeamArr = null;
|
||||
NowSelectJoinIndex = 0;
|
||||
|
||||
//角色头像集合
|
||||
AvatarArr = null;
|
||||
|
||||
//初始化Flag
|
||||
InitFlag = false;
|
||||
|
||||
//X Y 裁切开始X Y 裁切结束X Y
|
||||
OffsetArr = [
|
||||
//男鬼剑士
|
||||
[56, 112, 220, 222],
|
||||
//女格斗家
|
||||
[54, 103, 240, 278],
|
||||
//男神枪手
|
||||
[55, 130, 236, 246],
|
||||
//女魔法师
|
||||
[57, 88, 234, 291],
|
||||
//男圣职者
|
||||
[57, 124, 208, 190],
|
||||
//女神枪手
|
||||
[56, 119, 226, 209],
|
||||
//暗夜使者
|
||||
[56, 117, 225, 212],
|
||||
//男格斗家
|
||||
[56, 118, 233, 212],
|
||||
//男魔法师
|
||||
[54, 103, 236, 276],
|
||||
//黑暗武士
|
||||
[56, 112, 220, 222],
|
||||
//缔造者
|
||||
[57, 88, 234, 291],
|
||||
]
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
RequestJoinTeamArr = [];
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
function InitInfo() {
|
||||
local InfoObj = RequestJoinTeamArr[NowSelectJoinIndex];
|
||||
Charc = InfoObj.Charc;
|
||||
//角色等级
|
||||
Level = InfoObj.Level;
|
||||
//角色名称
|
||||
Name = InfoObj.Name;
|
||||
//角色职业
|
||||
Job = InfoObj.Job;
|
||||
//角色决斗等级
|
||||
PvpLevel = InfoObj.PvpLevel;
|
||||
//职业名称
|
||||
JobName = InfoObj.JobName;
|
||||
//角色复活币
|
||||
Coin = InfoObj.Coin + "个";
|
||||
//角色疲劳值
|
||||
Fatigue = InfoObj.Fatigue.tostring();
|
||||
//战斗力
|
||||
Combat = InfoObj.Combat;
|
||||
//通过次数
|
||||
ClearanceCount = InfoObj.ClearanceCount;
|
||||
//头像
|
||||
AvatarArr = InfoObj.AvatarArr;
|
||||
//玩家世界Session
|
||||
this.PlayerSession = InfoObj.PlayerSession;
|
||||
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
InitFlag = true;
|
||||
}
|
||||
|
||||
function PopOne() {
|
||||
if (RequestJoinTeamArr.len() > 1) {
|
||||
RequestJoinTeamArr.remove(0);
|
||||
InitInfo();
|
||||
} else {
|
||||
RequestJoinTeamArr = [];
|
||||
CloseWindow();
|
||||
}
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(244, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
PopOne();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
//冒险团按钮
|
||||
local MButton = LenheartNewUI_ButtonText(24, 114, 15, "冒险团信息");
|
||||
MButton.SetTextOffset(-13, 2);
|
||||
AddChild(MButton);
|
||||
//冒险图鉴按钮
|
||||
local FQButton = LenheartNewUI_ButtonText(95, 113, 15, "冒险图鉴");
|
||||
FQButton.State = 8;
|
||||
FQButton.SetTextOffset(-7, 2);
|
||||
AddChild(FQButton);
|
||||
//查看信息按钮
|
||||
local CButton = LenheartNewUI_ButtonText(166, 114, 15, "查看信息");
|
||||
CButton.SetTextOffset(-7, 2);
|
||||
CButton.OnClick = function() {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
// obj.sq_PlaySound("CLICK_BUTTON1");
|
||||
L_sq_SendPackType(8);
|
||||
L_sq_SendPackWord(this.PlayerSession);
|
||||
L_sq_SendPackByte(3);
|
||||
L_sq_SendPack();
|
||||
getroottable().WindowsShowABFlag <- false; //让原生窗口置顶
|
||||
}.bindenv(this);
|
||||
AddChild(CButton);
|
||||
|
||||
//确认按钮
|
||||
local OkButton = LenheartNewUI_ButtonText(74, 192, -1, "是");
|
||||
OkButton.SetTextOffset(3, 2);
|
||||
OkButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063003,
|
||||
teamsId = RinDro_Fiendwar_Obj.MyRaidTeamId,
|
||||
applyCid = Charc.CID
|
||||
}
|
||||
SendPackEx(T);
|
||||
PopOne();
|
||||
}.bindenv(this);
|
||||
AddChild(OkButton);
|
||||
//拒绝按钮
|
||||
local NoButton = LenheartNewUI_ButtonText(130, 192, -1, "否");
|
||||
NoButton.SetTextOffset(3, 2);
|
||||
NoButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063019,
|
||||
charac = Charc.CID
|
||||
}
|
||||
SendPackEx(T);
|
||||
PopOne();
|
||||
}.bindenv(this);
|
||||
AddChild(NoButton);
|
||||
|
||||
//左翻页按钮
|
||||
local LeftButton = LenheartNewUI_BaseButton(90, 220, 15, 15, "interface/lenheartwindowcommon.img", 34);
|
||||
LeftButton.OnClick = function() {
|
||||
if (NowSelectJoinIndex > 0) NowSelectJoinIndex--;
|
||||
InitInfo();
|
||||
}.bindenv(this);
|
||||
AddChild(LeftButton);
|
||||
|
||||
//右翻页按钮
|
||||
local RightButton = LenheartNewUI_BaseButton(154, 220, 15, 15, "interface/lenheartwindowcommon.img", 38);
|
||||
RightButton.OnClick = function() {
|
||||
if (NowSelectJoinIndex< RequestJoinTeamArr.len() - 1) NowSelectJoinIndex++;
|
||||
InitInfo();
|
||||
}.bindenv(this);
|
||||
AddChild(RightButton);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
if (!InitFlag) return;
|
||||
//标题栏
|
||||
L_sq_DrawButton(X - 2, Y, 252, "interface/lenheartwindowcommon.img", 609, 2, 7);
|
||||
//绘制窗口名字
|
||||
L_sq_DrawCode("攻坚队申请", X + 100, Y + 4, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X, Y + 16, 240, 200, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
//绘制背景
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 15, X + 6, Y + 22);
|
||||
//绘制角色背景
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 14, X + 8, Y + 40);
|
||||
//绘制角色头像
|
||||
if (AvatarArr) {
|
||||
foreach(AvatarObj in AvatarArr) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[Job][0] - 8;
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[Job][1] + 40;
|
||||
setClip(AXpos + OffsetArr[Job][2], AYpos + OffsetArr[Job][3], AXpos + OffsetArr[Job][2] + 22, AYpos + OffsetArr[Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
}
|
||||
//绘制角色等级
|
||||
L_sq_DrawCode(Level, X + 78 - LenheartTextClass.GetStringLength(Level) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制角色名字
|
||||
L_sq_DrawCode(Name, X + 137 - LenheartTextClass.GetStringLength(Name) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制角色职业类型图标
|
||||
if (Job != 4) L_sq_DrawImg("hud/fiendwarl.img", 16, X + 176, Y + 43);
|
||||
//绘制角色职业名称
|
||||
L_sq_DrawCode(JobName, X + 224 - LenheartTextClass.GetStringLength(JobName) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X + 21, Y + 65, 30, 30, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
L_sq_DrawWindow(X + 62, Y + 65, 156, 30, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
//绘制决斗等级
|
||||
local PvpImg = PvpLevel / 6;
|
||||
L_sq_DrawImg("hud/fiendwarl1.img", 99, X + 25, Y + 74);
|
||||
L_sq_DrawCode(PvpLevel.tostring(), X + 45 - LenheartTextClass.GetStringLength(PvpLevel.tostring()) / 2, Y + 91, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制各项信息
|
||||
L_sq_DrawCode("复活币:", X + 70, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode(Coin, X + 134 - LenheartTextClass.GetStringLength(Coin) / 2, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode("疲劳值:", X + 158, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode(Fatigue, X + 216 - LenheartTextClass.GetStringLength(Fatigue) / 2, Y + 76, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode("战斗力:", X + 70, Y + 93, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
L_sq_DrawCode(Combat, X + 170 - LenheartTextClass.GetStringLength(Combat) / 2, Y + 93, sq_RGBA(74, 162, 86, 255), 0, 1);
|
||||
L_sq_DrawCode("通关超时空攻坚战" + ClearanceCount + "次", X + 130 - LenheartTextClass.GetStringLength("通关超时空攻坚战" + ClearanceCount + "次") / 2, Y + 144, sq_RGBA(221, 213, 147, 255), 0, 1);
|
||||
L_sq_DrawCode("申请加入攻坚队。", X + 87, Y + 160, sq_RGBA(160, 132, 75, 255), 0, 1);
|
||||
L_sq_DrawCode("请确定是否同意?", X + 87, Y + 176, sq_RGBA(160, 132, 75, 255), 0, 1);
|
||||
|
||||
L_sq_DrawWindow(X + 77, Y + 216, 100, 20, "interface/lenheartwindowcommon.img", 204, 4, 14, 4, 14);
|
||||
//绘制页数
|
||||
local Str = (NowSelectJoinIndex + 1) + " / " + RequestJoinTeamArr.len();
|
||||
L_sq_DrawCode(Str, X + 137 - LenheartTextClass.GetStringLength(Str) / 2, Y + 222, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
/*
|
||||
文件名:Rindro_Fiendwar_PartyFormation.nut
|
||||
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PartyFormation.nut
|
||||
创建日期:2024-07-16 16:22
|
||||
文件用途:超时空 队内编队
|
||||
*/
|
||||
//编队用按钮需要传递参数所以重写
|
||||
class Rindro_FiendwarPartyInfoEdit_BaseButton extends LenheartNewUI_BaseButton {
|
||||
MyInfoIndex = 0;
|
||||
constructor(X, Y, W, H, Path, Idx, InfoIndex) {
|
||||
MyInfoIndex = InfoIndex;
|
||||
LenheartNewUI_BaseButton.constructor(X, Y, W, H, Path, Idx);
|
||||
}
|
||||
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
if (isLBDown && OnClick) {
|
||||
OnClick(MyInfoIndex);
|
||||
}
|
||||
isLBDown = false;
|
||||
}
|
||||
}
|
||||
//编队窗口
|
||||
class Rindro_FiendwarPartyFormation extends LenheartNewUI_Windows {
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
Visible = false;
|
||||
|
||||
PartyMarkFlag = -1;
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
|
||||
function RegisterWidget() {
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(278, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
//搜索按钮
|
||||
local QdButton = LenheartNewUI_ButtonText(10, 157, 5, "签到");
|
||||
QdButton.State = 8;
|
||||
QdButton.SetTextOffset(0, 1);
|
||||
AddChild(QdButton);
|
||||
|
||||
//解散队伍按钮
|
||||
local BreakPartyButton = LenheartNewUI_ButtonText(80, 158, 5, "解散队伍");
|
||||
BreakPartyButton.SetTextOffset(-12, 1);
|
||||
BreakPartyButton.OnClick = function() {
|
||||
PartyMarkFlag = 99;
|
||||
}.bindenv(this);
|
||||
AddChild(BreakPartyButton);
|
||||
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_ButtonText(150, 158, 5, "关闭");
|
||||
CloseButton.SetTextOffset(0, 1);
|
||||
CloseButton.OnClick = function() {
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
for (local i = 0; i< 8; i++) {
|
||||
//右翻页按钮
|
||||
local PartyIndexButton = Rindro_FiendwarPartyInfoEdit_BaseButton(12 + (i % 2 * 136), 35 + ((i / 2) * 30), 41, 17, "interface/newstyle/windows/party/party_icon.img", 3 + (i * 3), i);
|
||||
//继承类 并重写 调用时传入InfoIndex
|
||||
PartyIndexButton.OnClick = function(MyInfoIndex) {
|
||||
PartyMarkFlag = MyInfoIndex;
|
||||
}.bindenv(this);
|
||||
AddChild(PartyIndexButton);
|
||||
}
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
//标题栏
|
||||
L_sq_DrawButton(X - 1, Y, 284, "interface/lenheartwindowcommon.img", 609, 2, 7);
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X, Y + 17, 272, 154, "interface/lenheartwindowcommon.img", 213, 12, 2, 13, 2);
|
||||
|
||||
for (local q = 0; q< 8; q++) {
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", 358, X + 60 + (q % 2 * 136), Y + 34 + ((q / 2) * 30));
|
||||
for (local i = 0; i< 3; i++) {
|
||||
L_sq_DrawImg("interface/lenheartwindowcommon.img", 361, X + 80 + (q % 2 * 136) + (i * 20), Y + 34 + ((q / 2) * 30));
|
||||
}
|
||||
}
|
||||
|
||||
if (PartyMarkFlag != -1) {
|
||||
R_Mouse.SetType(151);
|
||||
}
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
|
||||
}
|
||||
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
//还原编队的鼠标指针
|
||||
if (this.PartyMarkFlag != -1) {
|
||||
this.PartyMarkFlag = -1;
|
||||
R_Mouse.SetType(0);
|
||||
}
|
||||
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,347 @@
|
|||
/*
|
||||
文件名:Rindro_Fiendwar_PartyHall.nut
|
||||
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PartyHall.nut
|
||||
创建日期:2024-07-15 16:50
|
||||
文件用途:超时空组队大厅
|
||||
*/
|
||||
class Rindro_Fiendwar_PartyHallC extends LenheartNewUI_Windows {
|
||||
|
||||
Visible = false;
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
|
||||
//页数
|
||||
Page = 0;
|
||||
//一页放多少个队伍
|
||||
PageMaxCount = 13;
|
||||
//攻坚队List
|
||||
PartyList = null;
|
||||
|
||||
|
||||
|
||||
//获取所有队伍
|
||||
function GetAllTeamCall() {
|
||||
local Jso = {
|
||||
op = 20063011
|
||||
}
|
||||
SendPack(Jso);
|
||||
}
|
||||
|
||||
//获取所有队伍收包
|
||||
function GetAllTeamCallCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
|
||||
//清除原来的List PartyList可以直接清除 但是Childrens中的窗口需要调用底层方法清除队伍类
|
||||
PartyList = [];
|
||||
|
||||
RemoveAllParty();
|
||||
//遍历包构造攻坚队UI对象
|
||||
foreach(TeamsSimple in Jso.TeamSimList) {
|
||||
local RealState = 0;
|
||||
if (TeamsSimple.State == 1) RealState = 1;
|
||||
else if (TeamsSimple.State == 2) RealState = 0;
|
||||
else if (TeamsSimple.State == 3) RealState = 2;
|
||||
else if (TeamsSimple.State == 4) RealState = 3;
|
||||
local T = {
|
||||
TeamId = TeamsSimple.TeamId.tostring(),
|
||||
TeamName = TeamsSimple.TeamName,
|
||||
TeamPlayerCount = TeamsSimple.TeamPlayerCount,
|
||||
State = RealState
|
||||
}
|
||||
local TeamBuf = Rindro_FiendwarPartyC(T);
|
||||
AddChild(TeamBuf);
|
||||
PartyList.append(TeamBuf);
|
||||
}
|
||||
//收到刷新队伍列表包时需要将队伍窗口关闭 //TODO
|
||||
// if ("Close" in Jso) LenheartNewUI_DestoryWindow("超时空我的队伍窗口");
|
||||
}
|
||||
|
||||
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
|
||||
PartyList = [];
|
||||
//注册控件
|
||||
RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
|
||||
Pack_Control.rawset(20063002, GetAllTeamCallCallBack.bindenv(this));
|
||||
|
||||
|
||||
GetAllTeamCall();
|
||||
}
|
||||
|
||||
|
||||
OnlyPreparingBtn = null;
|
||||
OnlyPreparingFlag = 1;
|
||||
InputObject = null;
|
||||
|
||||
function RegisterWidget() {
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(457, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
|
||||
//我的频道复选框
|
||||
local MyChannelBtn = LenheartNewUI_SwitchButtonText(16, 30, "我的频道");
|
||||
MyChannelBtn.State = 1;
|
||||
MyChannelBtn.ImgIndex = 358;
|
||||
MyChannelBtn.SetTextPos(12, 2);
|
||||
MyChannelBtn.Width = 76;
|
||||
MyChannelBtn.Height = 16;
|
||||
AddChild(MyChannelBtn);
|
||||
|
||||
//只查看招募中的攻坚队
|
||||
OnlyPreparingBtn = LenheartNewUI_SwitchButtonText(110, 30, "只查看招募中的攻坚队");
|
||||
OnlyPreparingBtn.ImgIndex = 358;
|
||||
OnlyPreparingBtn.SetTextPos(12, 2);
|
||||
OnlyPreparingBtn.Width = 76;
|
||||
OnlyPreparingBtn.Height = 16;
|
||||
OnlyPreparingBtn.OnClick = function() {
|
||||
switch (OnlyPreparingFlag) {
|
||||
case 0:
|
||||
OnlyPreparingFlag = 1;
|
||||
break;
|
||||
case 1:
|
||||
OnlyPreparingFlag = 0;
|
||||
break;
|
||||
}
|
||||
OnlyPreparingBtn.State = OnlyPreparingFlag;
|
||||
}.bindenv(this);
|
||||
AddChild(OnlyPreparingBtn);
|
||||
|
||||
//搜索队伍输入框
|
||||
InputObject = LenheartNewUI_BaseInput(260, 31, 80, 20);
|
||||
AddChild(InputObject);
|
||||
|
||||
//搜索按钮
|
||||
local FindButton = LenheartNewUI_ButtonText(348, 28, 5, "搜索");
|
||||
FindButton.SetTextOffset(0, 1);
|
||||
FindButton.OnClick = function() {
|
||||
if (InputObject.str.len() > 0) {
|
||||
|
||||
}
|
||||
}.bindenv(this);
|
||||
AddChild(FindButton);
|
||||
|
||||
//重置按钮
|
||||
local ResetButton = LenheartNewUI_ButtonText(408, 28, 5, "重置");
|
||||
ResetButton.SetTextOffset(0, 1);
|
||||
ResetButton.OnClick = function() {
|
||||
InputObject.str = "";
|
||||
}.bindenv(this);
|
||||
AddChild(ResetButton);
|
||||
|
||||
//编号按钮
|
||||
local ModelButton = LenheartNewUI_ButtonText(9, 56, -18, "编号");
|
||||
ModelButton.Idx = 163;
|
||||
ModelButton.DWidth = -8;
|
||||
ModelButton.SetTextOffset(-9, 1);
|
||||
AddChild(ModelButton);
|
||||
|
||||
//状态按钮
|
||||
local StateButton = LenheartNewUI_ButtonText(51, 56, -18, "状态");
|
||||
StateButton.Idx = 163;
|
||||
StateButton.DWidth = -8;
|
||||
StateButton.SetTextOffset(-9, 1);
|
||||
AddChild(StateButton);
|
||||
|
||||
//频道按钮
|
||||
local ChannelButton = LenheartNewUI_ButtonText(93, 56, -18, "频道");
|
||||
ChannelButton.Idx = 163;
|
||||
ChannelButton.DWidth = -8;
|
||||
ChannelButton.SetTextOffset(-9, 1);
|
||||
AddChild(ChannelButton);
|
||||
|
||||
//攻坚队名称按钮
|
||||
local PartyNameButton = LenheartNewUI_ButtonText(135, 56, 100, "攻坚队名称");
|
||||
PartyNameButton.Idx = 163;
|
||||
PartyNameButton.DWidth = 223;
|
||||
PartyNameButton.FillWidth = 1;
|
||||
PartyNameButton.FirstWidth = 21;
|
||||
PartyNameButton.SetTextOffset(26, 1);
|
||||
AddChild(PartyNameButton);
|
||||
|
||||
//阶段按钮
|
||||
local StageButton = LenheartNewUI_ButtonText(289, 56, 52, "阶段");
|
||||
StageButton.Idx = 163;
|
||||
StageButton.DWidth = 140;
|
||||
StageButton.FillWidth = 1;
|
||||
StageButton.FirstWidth = 21;
|
||||
StageButton.SetTextOffset(26, 1);
|
||||
AddChild(StageButton);
|
||||
|
||||
//队员数量按钮
|
||||
local TeammembersButton = LenheartNewUI_ButtonText(402, 56, 50, "队员数量");
|
||||
TeammembersButton.Idx = 163;
|
||||
TeammembersButton.FillWidth = 1;
|
||||
TeammembersButton.FirstWidth = 21;
|
||||
TeammembersButton.DWidth = 47;
|
||||
TeammembersButton.SetTextOffset(-8, 1);
|
||||
AddChild(TeammembersButton);
|
||||
|
||||
//创建攻坚队按钮
|
||||
local MyPartyButton = LenheartNewUI_ButtonText(15, 395, 30, "创建攻坚队");
|
||||
MyPartyButton.SetTextOffset(-6, 1);
|
||||
MyPartyButton.OnClick = function() {
|
||||
//有队伍则查看队伍信息
|
||||
if (RinDro_Fiendwar_Obj.MyRaidTeamId) {
|
||||
//发送查看攻坚队具体信息包
|
||||
local T = {
|
||||
op = 20063013,
|
||||
teamsId = RinDro_Fiendwar_Obj.MyRaidTeamId
|
||||
}
|
||||
SendPackEx(T);
|
||||
}
|
||||
//否则创建队伍
|
||||
else {
|
||||
local Win = LenheartNewUI_CreateWindow(Rindro_FiendwarCreatePartyC, "超时空创建队伍窗口", 290, 220, 284, 154, 18);
|
||||
Win.Visible = true;
|
||||
Win.ResetFocus();
|
||||
}
|
||||
}.bindenv(this);
|
||||
//设置动态回调改变按钮名称
|
||||
MyPartyButton.SetCallBackFunc(function(window) {
|
||||
if (RinDro_Fiendwar_Obj.MyRaidTeamId) window.TextStr = "我的攻坚队";
|
||||
else window.TextStr = "创建攻坚队";
|
||||
}.bindenv(this));
|
||||
|
||||
AddChild(MyPartyButton);
|
||||
|
||||
//左翻页按钮
|
||||
local LeftButton = LenheartNewUI_BaseButton(160, 400, 15, 15, "interface/lenheartwindowcommon.img", 34);
|
||||
LeftButton.OnClick = function() {
|
||||
if (Page > 0) Page--;
|
||||
}.bindenv(this);
|
||||
AddChild(LeftButton);
|
||||
|
||||
//右翻页按钮
|
||||
local RightButton = LenheartNewUI_BaseButton(220, 400, 15, 15, "interface/lenheartwindowcommon.img", 38);
|
||||
RightButton.OnClick = function() {
|
||||
if (Page<(((PartyList.len() / PageMaxCount)))) Page++;
|
||||
}.bindenv(this);
|
||||
AddChild(RightButton);
|
||||
|
||||
//进入待机按钮
|
||||
local FQButton = LenheartNewUI_ButtonText(300, 394, 20, "进入待机");
|
||||
FQButton.SetTextOffset(-5, 2);
|
||||
FQButton.State = 8;
|
||||
AddChild(FQButton);
|
||||
|
||||
//刷新按钮
|
||||
local RefreshButton = LenheartNewUI_BaseButton(410, 395, 25, 25, "interface/lenheartwindowcommon.img", 366);
|
||||
RefreshButton.OnClick = function() {
|
||||
GetAllTeamCall();
|
||||
}.bindenv(this);
|
||||
AddChild(RefreshButton);
|
||||
|
||||
//设置按钮
|
||||
local SettingButton = LenheartNewUI_BaseButton(440, 394, 15, 15, "interface/lenheartwindowcommon.img", 362);
|
||||
SettingButton.State = 8;
|
||||
AddChild(SettingButton);
|
||||
}
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X, Y + 10, 540 * 0.85, 420 * 0.9, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
|
||||
L_sq_DrawWindow(X + 6, Y + 19, 528 * 0.85, 47, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
|
||||
//绘制背景框标题栏
|
||||
L_sq_DrawImg("hud/rindroanton.img", 3, X + 1, Y);
|
||||
|
||||
L_sq_DrawCode("寻找攻坚队", X + 217, Y + 3, sq_RGBA(179, 169, 135, 255), 0, 1);
|
||||
|
||||
//绘制队伍List
|
||||
DrawPartyList(obj);
|
||||
|
||||
L_sq_DrawWindow(X + 6, Y + 382, 528 * 0.85, 24, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
|
||||
//计算页数
|
||||
local PageStr = Page + 1 + " / " + ((PartyList.len() / PageMaxCount) + 1);
|
||||
//绘制当前页数
|
||||
L_sq_DrawCode(PageStr, X + 166 + LenheartTextClass.GetStringLength(PageStr) / 2, Y + 402, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
}
|
||||
|
||||
//重置所有选中
|
||||
function ResetAllSelect() {
|
||||
foreach(Index, TeamObj in PartyList) {
|
||||
TeamObj.SelectState = false;
|
||||
}
|
||||
}
|
||||
|
||||
//移除队伍
|
||||
function RemoveParty(TeamId) {
|
||||
local ObjectID = null;
|
||||
for (local i = 0; i< Childrens.len(); i++) {
|
||||
local Cobj = Childrens[i];
|
||||
if (Cobj instanceof Rindro_FiendwarPartyC) {
|
||||
if (Cobj.TeamObj.TeamId.tointeger() == TeamId.tointeger()) {
|
||||
ObjectID = Cobj.ObjectId;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (ObjectID) RemoveChild(ObjectID);
|
||||
}
|
||||
|
||||
//移除所有队伍
|
||||
function RemoveAllParty() {
|
||||
for (local i = 0; i< Childrens.len(); i++) {
|
||||
local Cobj = Childrens[i];
|
||||
if (Cobj instanceof Rindro_FiendwarPartyC) {
|
||||
Childrens.remove(i);
|
||||
i--;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//绘制队伍信息
|
||||
function DrawPartyList(obj) {
|
||||
if (PartyList.len() <= 0) return;
|
||||
//先遍历一遍全部挪走
|
||||
foreach(Index, TeamObj in PartyList) {
|
||||
TeamObj.SyncPos(9999, 9999);
|
||||
}
|
||||
//在遍历需要显示的同步坐标
|
||||
foreach(Index, TeamObj in PartyList.slice((((Page) * PageMaxCount) > 0) ? ((Page) * PageMaxCount) : 0, ((Page + 1) * PageMaxCount) > PartyList.len() ? PartyList.len() : ((Page + 1) * PageMaxCount))) {
|
||||
TeamObj.SyncPos(X, Y + 2 + (Index % PageMaxCount) * 23);
|
||||
}
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
MainButton = null;
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
|
||||
|
||||
//界面未打开
|
||||
if (!this.Visible && L_sq_RA(0x1A5FB4C, "0x14+0x28+")< 2) {
|
||||
//在甲板
|
||||
if (RinDro_Fiendwar_Obj.BaseConfig && RinDro_Fiendwar_Obj.BaseConfig.channel_index.find("20") && L_sq_GetTownIndex() == RinDro_Fiendwar_Obj.BaseConfig.town_index && L_sq_GetRegionIndex() >= 1) {
|
||||
local PaW = sq_GetPopupWindowMainCotrol(6);
|
||||
if (PaW) {
|
||||
L_sq_UseSkill(DIK_ESCAPE);
|
||||
this.Visible = true;
|
||||
GetAllTeamCall();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,311 @@
|
|||
/*
|
||||
文件名:Rindro_Fiendwar_PartyInfo.nut
|
||||
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PartyInfo.nut
|
||||
创建日期:2024-07-15 22:12
|
||||
文件用途:超时空队伍信息窗口
|
||||
*/
|
||||
class Rindro_FiendwarPartyInfoC extends LenheartNewUI_Windows {
|
||||
|
||||
Visible = false;
|
||||
//调试模式
|
||||
// DeBugMode = true;
|
||||
|
||||
//是否存在信息
|
||||
InfoFlag = false;
|
||||
|
||||
//队员列表
|
||||
MembersList = null;
|
||||
|
||||
//队伍名称
|
||||
TeamName = "";
|
||||
//队伍ID
|
||||
TeamID = 99999999;
|
||||
|
||||
//是否是我的攻坚队
|
||||
IsMyTeam = false;
|
||||
//是否是队长
|
||||
IsCaptain = false;
|
||||
|
||||
|
||||
|
||||
//收到请求加入攻坚队包
|
||||
function JoinTeamCallBack(Chunk) {
|
||||
local Jso = Json.Decode(Chunk);
|
||||
local win = LenheartNewUI_CreateWindow(Rindro_FiendwarApplyJoinC, "超时空申请加入队伍窗口", 542, 348, 257, 240, 18);
|
||||
win.Visible = true;
|
||||
win.ResetFocus();
|
||||
local T = {
|
||||
Charc = Jso.charac, //角色对象
|
||||
Level = Jso.charac.PlayerLevel,
|
||||
Name = Jso.charac.PlayerName,
|
||||
Job = Jso.charac.PlayerJob,
|
||||
PvpLevel = Jso.charac.pvp,
|
||||
JobName = Jso.charac.PlayerGrowTypeJob,
|
||||
Coin = Jso.charac.PlayCoin,
|
||||
Fatigue = Jso.charac.PlayFatigue,
|
||||
Combat = Jso.charac.ZL,
|
||||
ClearanceCount = Jso.charac.ClearanceCount,
|
||||
AvatarArr = Jso.charac.equVos,
|
||||
PlayerSession = Jso.charac.PlayerSession
|
||||
}
|
||||
//没人
|
||||
if (win.RequestJoinTeamArr.len() == 0) {
|
||||
win.RequestJoinTeamArr.append(T);
|
||||
win.InitInfo();
|
||||
} else win.RequestJoinTeamArr.append(T);
|
||||
}
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
//注册控件
|
||||
// RegisterWidget();
|
||||
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
|
||||
|
||||
Pack_Control.rawset(20063006, JoinTeamCallBack.bindenv(this));
|
||||
|
||||
RegisterWidget();
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
//关闭按钮
|
||||
local CloseButton = LenheartNewUI_BaseButton(336, 0, 11, 12, "interface/lenheartwindowcommon.img", 276);
|
||||
CloseButton.OnClick = function() {
|
||||
CloseWindow();
|
||||
}.bindenv(this);
|
||||
AddChild(CloseButton);
|
||||
|
||||
|
||||
//队伍按钮
|
||||
local ModelButton = LenheartNewUI_ButtonText(9, 60, -18, "队伍");
|
||||
ModelButton.Idx = 163;
|
||||
ModelButton.DWidth = -8;
|
||||
ModelButton.SetTextOffset(-9, 1);
|
||||
AddChild(ModelButton);
|
||||
|
||||
//等级按钮
|
||||
local StateButton = LenheartNewUI_ButtonText(51, 60, -18, "等级");
|
||||
StateButton.Idx = 163;
|
||||
StateButton.DWidth = -8;
|
||||
StateButton.SetTextOffset(-9, 1);
|
||||
AddChild(StateButton);
|
||||
|
||||
//角色名按钮
|
||||
local ChannelButton = LenheartNewUI_ButtonText(93, 60, 44, "角色名");
|
||||
ChannelButton.Idx = 163;
|
||||
ChannelButton.DWidth = 120;
|
||||
ChannelButton.FillWidth = 1;
|
||||
ChannelButton.FirstWidth = 21;
|
||||
ChannelButton.SetTextOffset(17, 1);
|
||||
AddChild(ChannelButton);
|
||||
|
||||
//攻坚队名称按钮
|
||||
local PartyNameButton = LenheartNewUI_ButtonText(196, 60, 36, "职业名");
|
||||
PartyNameButton.Idx = 163;
|
||||
PartyNameButton.DWidth = 100;
|
||||
PartyNameButton.FillWidth = 1;
|
||||
PartyNameButton.FirstWidth = 21;
|
||||
PartyNameButton.SetTextOffset(11, 1);
|
||||
AddChild(PartyNameButton);
|
||||
|
||||
//入场材料按钮
|
||||
local StageButton = LenheartNewUI_ButtonText(289, 60, 0, "入场材料");
|
||||
StageButton.Idx = 163;
|
||||
StageButton.DWidth = 26;
|
||||
StageButton.FillWidth = 1;
|
||||
StageButton.FirstWidth = 21;
|
||||
StageButton.SetTextOffset(-14, 1);
|
||||
StageButton.SetCallBackFunc(function(window) {
|
||||
if (RinDro_Fiendwar_Obj.EndTime) window.TextStr = "通关次数";
|
||||
else window.TextStr = "入场材料";
|
||||
}.bindenv(this));
|
||||
AddChild(StageButton);
|
||||
|
||||
//如果不是我的队伍 并且我没有攻坚队
|
||||
local JoinPartyButton = LenheartNewUI_ButtonText(10, 268 + 8, 10, "参加攻坚队");
|
||||
JoinPartyButton.SetTextOffset(-15, 1);
|
||||
JoinPartyButton.OnClick = function() {
|
||||
|
||||
//时装 帽子 头部 脸 上衣 下装 鞋子 胸部 腰部 皮肤 光环
|
||||
local AvatarInfoIdx = [0x3038, 0x3010, 0x3014, 0x3018, 0x301c, 0x3020, 0x3024, 0x3028, 0x302c, 0x3030, 0x3034];
|
||||
|
||||
local C_Object = L_sq_RA(0x1ab7cdc);
|
||||
local avataritemsbuf = [];
|
||||
foreach(offset in AvatarInfoIdx) {
|
||||
local AvatarEquiAddress = L_sq_RA(C_Object + offset);
|
||||
if (AvatarEquiAddress >= 0x400000) {
|
||||
local Ab = [];
|
||||
local NormalIndex = L_sq_RA(AvatarEquiAddress + 0x1c);
|
||||
local ExIndex = L_sq_RA(AvatarEquiAddress + 0x13E0);
|
||||
Ab.append(NormalIndex);
|
||||
Ab.append(ExIndex);
|
||||
avataritemsbuf.append(Ab);
|
||||
} else {
|
||||
local Ab = [];
|
||||
Ab.append(0);
|
||||
Ab.append(0);
|
||||
avataritemsbuf.append(Ab);
|
||||
}
|
||||
}
|
||||
|
||||
local T = {
|
||||
op = 20063005,
|
||||
teamsId = TeamID,
|
||||
items = avataritemsbuf,
|
||||
}
|
||||
SendPackEx(T);
|
||||
|
||||
}.bindenv(this);
|
||||
JoinPartyButton.SetCallBackFunc(function(window) {
|
||||
if (!IsMyTeam && !RinDro_Fiendwar_Obj.MyRaidTeamId)
|
||||
window.X = 10;
|
||||
else window.X = 90000;
|
||||
}.bindenv(this));
|
||||
AddChild(JoinPartyButton);
|
||||
|
||||
//如果是我的队伍
|
||||
//退出按钮
|
||||
local ExitButton = LenheartNewUI_ButtonText(220, 268 + 8, 5, "退出");
|
||||
ExitButton.SetTextOffset(-1, 1);
|
||||
ExitButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063009,
|
||||
teamsId = TeamID
|
||||
}
|
||||
SendPackEx(T);
|
||||
RinDro_Fiendwar_Obj.MyCid = null;
|
||||
RinDro_Fiendwar_Obj.MyRaidTeamId = null;
|
||||
RinDro_Fiendwar_Obj.IsCaptain = null;
|
||||
|
||||
//重置所有选中 并且从攻坚大厅对象中移除这个子对象
|
||||
local HallWin = LenheartNewUI_CreateWindow(Rindro_Fiendwar_PartyHallC, "新超时空攻坚大厅窗口", 320, 40, 478, 434, 18);
|
||||
HallWin.ResetAllSelect();
|
||||
HallWin.RemoveParty(this.TeamID);
|
||||
DestroyWindow();
|
||||
}.bindenv(this);
|
||||
ExitButton.SetCallBackFunc(function(window) {
|
||||
if (!IsMyTeam) window.X = X + 900000;
|
||||
else window.X = X + 220;
|
||||
}.bindenv(this));
|
||||
AddChild(ExitButton);
|
||||
|
||||
|
||||
//队伍编制按钮
|
||||
local PartyEditButton = LenheartNewUI_ButtonText(10, 268 + 8, 5, "队伍编制");
|
||||
PartyEditButton.SetTextOffset(-12, 1);
|
||||
PartyEditButton.OnClick = function() {
|
||||
local win = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyFormation, "超时空我的队伍编队窗口", 105, 40, 294, 192, 18);
|
||||
win.Visible = true;
|
||||
win.ResetFocus();
|
||||
}.bindenv(this);
|
||||
PartyEditButton.SetCallBackFunc(function(window) {
|
||||
if (!IsMyTeam || !IsCaptain) window.X = X + 900000;
|
||||
else window.X = X + 10;
|
||||
}.bindenv(this));
|
||||
AddChild(PartyEditButton);
|
||||
|
||||
//修改信息按钮
|
||||
local FqButton = LenheartNewUI_ButtonText(100, 267 + 8, 5, "修改信息");
|
||||
FqButton.State = 8;
|
||||
FqButton.SetTextOffset(-12, 1);
|
||||
FqButton.SetCallBackFunc(function(window) {
|
||||
if (!IsMyTeam || !IsCaptain) window.X = X + 900000;
|
||||
else window.X = X + 100;
|
||||
}.bindenv(this));
|
||||
AddChild(FqButton);
|
||||
|
||||
//队伍招募按钮
|
||||
local FqButton1 = LenheartNewUI_ButtonText(160, 267 + 8, 5, "队伍招募");
|
||||
FqButton1.State = 8;
|
||||
FqButton1.SetTextOffset(-12, 1);
|
||||
FqButton1.SetCallBackFunc(function(window) {
|
||||
if (!IsMyTeam || !IsCaptain) window.X = X + 900000;
|
||||
else window.X = X + 160;
|
||||
}.bindenv(this));
|
||||
AddChild(FqButton1);
|
||||
|
||||
|
||||
//队伍招募按钮
|
||||
local FightOpenButton = LenheartNewUI_ButtonText(290, 268 + 8, 5, "开始攻坚");
|
||||
FightOpenButton.SetTextOffset(-12, 1);
|
||||
FightOpenButton.OnClick = function() {
|
||||
local T = {
|
||||
op = 20063051,
|
||||
teamsId = TeamID
|
||||
}
|
||||
SendPackEx(T);
|
||||
}.bindenv(this);
|
||||
FightOpenButton.SetCallBackFunc(function(window) {
|
||||
// if (!IsMyTeam || !IsCaptain || RinDro_Fiendwar_Obj.EndTime) window.X = X + 900000;
|
||||
// else window.X = X + 290;
|
||||
if ((RinDro_Fiendwar_Obj.MyRaidState == 0 || RinDro_Fiendwar_Obj.MyRaidState == 2) && IsCaptain && IsMyTeam) window.X = X + 290;
|
||||
else window.X = X + 900000;
|
||||
}.bindenv(this));
|
||||
AddChild(FightOpenButton);
|
||||
}
|
||||
|
||||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
//如果没有信息则直接返回不绘制
|
||||
if (!InfoFlag) return;
|
||||
//标题栏
|
||||
L_sq_DrawButton(X, Y, 344, "interface/lenheartwindowcommon.img", 609, 2, 7);
|
||||
//绘制队伍名字
|
||||
L_sq_DrawCode(TeamName, X + 178 - LenheartTextClass.GetStringLength(TeamName) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
|
||||
//Item信息框一般为211的宽度
|
||||
L_sq_DrawWindow(X, Y + 17, 340, 252, "interface/lenheartwindowcommon.img", 97, 11, 12, 11, 13);
|
||||
//绘制头图
|
||||
L_sq_DrawImg("interface2/gcontents/180621_fiendwar/raid/memberwindow.img", 0, X + 10, Y + 24);
|
||||
//绘制阶段图 //TODO 根据阶段绘制img
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 7, X + 296, Y + 34);
|
||||
|
||||
//绘制队伍List
|
||||
DrawMembersList(obj);
|
||||
}
|
||||
|
||||
//绘制队伍信息
|
||||
function DrawMembersList(obj) {
|
||||
if (MembersList.len() <= 0) return;
|
||||
//遍历需要显示的同步坐标
|
||||
foreach(Index, TeamObj in MembersList) {
|
||||
TeamObj.SyncPos(X, Y + 2 + Index * 23);
|
||||
}
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
DrawMain(obj);
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
|
||||
}
|
||||
|
||||
//逻辑入口
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
# override # "
|
||||
* @函数作用:
|
||||
* @参数 name
|
||||
* @返回值
|
||||
*/
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
foreach(Window in Childrens) {
|
||||
Window.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
}
|
||||
LenheartNewUI_Windows.OnMouseLbUp(MousePos_X, MousePos_Y);
|
||||
//判断没有点到具体角色就隐藏
|
||||
if (!sq_IsIntersectRect(MousePos_X, MousePos_Y, 1, 1, X, Y + 80, Width, MembersList.len() * 21)) {
|
||||
//交互窗口需要隐藏
|
||||
local Each = LenheartNewUI_CreateWindow(Rindro_FiendwarPlayerInteractiveC, "超时空玩家交互", X, Y, 100, 21, 0);
|
||||
Each.Visible = false;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,190 @@
|
|||
/*
|
||||
文件名:Rindro_Fiendwar_PartyMemberInfo.nut
|
||||
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PartyMemberInfo.nut
|
||||
创建日期:2024-07-15 22:52
|
||||
文件用途:超时空队伍横条
|
||||
*/
|
||||
//队员显示类
|
||||
class Rindro_FiendwarPartyInfoMemberC extends LenheartNewUI_CommonUi {
|
||||
X = 0;
|
||||
Y = 0;
|
||||
Width = null;
|
||||
Height = null;
|
||||
InfoObj = null;
|
||||
|
||||
//构造时间
|
||||
ConstructorTime = null;
|
||||
//选中状态
|
||||
SelectState = false;
|
||||
//攻坚状态
|
||||
OffensiveState = 0;
|
||||
//头像框的颜色
|
||||
HandBoxColor = [
|
||||
0xff717272,
|
||||
0xff7b2a29,
|
||||
0xff874e0d,
|
||||
0xff8b8108,
|
||||
0xff658e2d,
|
||||
0xff0f5c8a,
|
||||
0xff27238f,
|
||||
0xff4e2491,
|
||||
0xff932586,
|
||||
]
|
||||
|
||||
//X Y 裁切开始X Y 裁切结束X Y
|
||||
OffsetArr = [
|
||||
//男鬼剑士
|
||||
[56, 112, 220, 222],
|
||||
//女格斗家
|
||||
[54, 103, 240, 278],
|
||||
//男神枪手
|
||||
[55, 130, 236, 246],
|
||||
//女魔法师
|
||||
[57, 88, 234, 291],
|
||||
//男圣职者
|
||||
[57, 124, 208, 190],
|
||||
//女神枪手
|
||||
[56, 119, 226, 209],
|
||||
//暗夜使者
|
||||
[56, 117, 225, 212],
|
||||
//男格斗家
|
||||
[56, 118, 233, 212],
|
||||
//男魔法师
|
||||
[54, 103, 236, 276],
|
||||
//黑暗武士
|
||||
[56, 112, 220, 222],
|
||||
//缔造者
|
||||
[57, 88, 234, 291],
|
||||
]
|
||||
|
||||
constructor(gInfoObj) {
|
||||
ConstructorTime = Clock();
|
||||
|
||||
InfoObj = gInfoObj;
|
||||
this.Width = 458;
|
||||
this.Height = 21;
|
||||
|
||||
this.OnClick = function() {
|
||||
//还原其他 选中自己
|
||||
foreach(Obj in Parent.MembersList) {
|
||||
Obj.SelectState = false;
|
||||
}
|
||||
SelectState = !SelectState;
|
||||
|
||||
local win = LenheartNewUI_CreateWindow(Rindro_FiendwarPartyFormation, "超时空我的队伍编队窗口", 105, 40, 294, 192, 18);
|
||||
//编队状态
|
||||
if (win.PartyMarkFlag != -1) {
|
||||
//并且是属于我的攻坚队的成员
|
||||
if (RinDro_Fiendwar_Obj.MyRaidTeamId == InfoObj.PartyId) {
|
||||
local gnum = win.PartyMarkFlag + 1;
|
||||
if (gnum == 100) gnum = 0;
|
||||
local T = {
|
||||
op = 20063015,
|
||||
teamsId = InfoObj.PartyId,
|
||||
cidNew = InfoObj.Cid,
|
||||
num = gnum
|
||||
}
|
||||
SendPackEx(T);
|
||||
win.PartyMarkFlag = -1;
|
||||
R_Mouse.SetType(0);
|
||||
win.ResetFocus();
|
||||
return;
|
||||
}
|
||||
//点了其他队伍成员要还原编队状态
|
||||
else {
|
||||
win.PartyMarkFlag = -1;
|
||||
R_Mouse.SetType(0);
|
||||
}
|
||||
}
|
||||
|
||||
local Interactive = LenheartNewUI_CreateWindow(Rindro_FiendwarPlayerInteractiveC, "超时空玩家交互", 0, 0, 100, 21, 0);
|
||||
//改变鼠标坐标
|
||||
Interactive.X = MousePos_X;
|
||||
Interactive.Y = MousePos_Y;
|
||||
//赋值对象参数
|
||||
Interactive.InfoObj = InfoObj;
|
||||
//对象不是我
|
||||
if (InfoObj.Cid == RinDro_Fiendwar_Obj.MyCid) {
|
||||
Interactive.InfoObj.IsMyself <- true;
|
||||
}
|
||||
//刷新UI
|
||||
Interactive.InitInfo();
|
||||
}
|
||||
LenheartNewUI_CommonUi.constructor(10, 82, this.Width, this.Height);
|
||||
|
||||
|
||||
//如果没有材料要建立一个购买材料的Button 并且要判断是否是自己 //TODO 这里还不行 要拓展一个函数来比对名字
|
||||
/*
|
||||
local Name = L_Sq_GetObjectName(sq_GetMyMasterCharacter());
|
||||
local Name2 = "夜刃";
|
||||
Name == Name2 失败了
|
||||
*/
|
||||
// if (!InfoObj.StkHasFlag && InfoObj.Name == L_Sq_GetObjectName(sq_GetMyMasterCharacter())) {
|
||||
|
||||
// }
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//绘制底槽
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 12, X, Y);
|
||||
|
||||
//绘制队伍编号
|
||||
L_sq_DrawImg("interface/newstyle/windows/party/party_icon.img", InfoObj.TeamId * 3, X, Y + 1);
|
||||
|
||||
sq_DrawBox(X + 42, Y + 1, 22, 18, HandBoxColor[InfoObj.TeamId]);
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[InfoObj.Job][0];
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[InfoObj.Job][1];
|
||||
setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
|
||||
if (InfoObj.Captain) L_sq_DrawImg("hud/fiendwarl.img", 18, X + 42, Y + 1);
|
||||
|
||||
|
||||
//绘制等级
|
||||
L_sq_DrawCode(InfoObj.Level, X + 76 - LenheartTextClass.GetStringLength(InfoObj.Level) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制角色名
|
||||
L_sq_DrawCode(InfoObj.Name, X + 138 - LenheartTextClass.GetStringLength(InfoObj.Name) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
//绘制职业名
|
||||
L_sq_DrawCode(InfoObj.JobName, X + 234 - LenheartTextClass.GetStringLength(InfoObj.JobName) / 2, Y + 5, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
|
||||
|
||||
//离线了
|
||||
if (InfoObj.ExitTime > 0) {
|
||||
local DrawTime = InfoObj.ExitTime - (Clock() - ConstructorTime);
|
||||
local seconds = (DrawTime / 1000) % 60; // 计算秒数
|
||||
local minutes = (DrawTime / (1000 * 60)) % 60; // 计算分钟数
|
||||
local DrawTimeStr = format("%02d分%02d秒", minutes, seconds);
|
||||
|
||||
L_sq_DrawCode(DrawTimeStr, X + 306 - LenheartTextClass.GetStringLength(DrawTimeStr) / 2, Y + 5, sq_RGBA(255, 50, 50, 255), 0, 1);
|
||||
}
|
||||
//通关次数
|
||||
else if (InfoObj.ClearanceCount > 0) {
|
||||
L_sq_DrawCode((InfoObj.ClearanceCount - 1) + "/" + (InfoObj.ClearanceCountMax), X + 306 - LenheartTextClass.GetStringLength((InfoObj.ClearanceCount - 1) + "/" + (InfoObj.ClearanceCountMax)) / 2, Y + 5, sq_RGBA(250, 250, 181, 255), 0, 1);
|
||||
} else if (InfoObj.StkHasFlag) {
|
||||
L_sq_DrawImg("hud/fiendwarlstk.img", 0, X + 280, Y + 3);
|
||||
} else {
|
||||
L_sq_DrawImg("hud/fiendwarlstk.img", 1, X + 280, Y + 3);
|
||||
}
|
||||
|
||||
if (SelectState) {
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 13, X, Y);
|
||||
}
|
||||
|
||||
if (isInRect) {
|
||||
L_sq_DrawImg("hud/fiendwarl.img", 13, X, Y);
|
||||
}
|
||||
}
|
||||
|
||||
MousePos_X = 0;
|
||||
MousePos_Y = 0;
|
||||
//鼠标事件回调
|
||||
function OnMouseProc(Flag, gMousePos_X, gMousePos_Y) {
|
||||
this.MousePos_X = gMousePos_X;
|
||||
this.MousePos_Y = gMousePos_Y;
|
||||
LenheartNewUI_CommonUi.OnMouseProc(Flag, gMousePos_X, gMousePos_Y);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,227 @@
|
|||
/*
|
||||
文件名:Rindro_Fiendwar_PlayerInteractive.nut
|
||||
路径:Plugins/New_Fiendwar/Rindro_Fiendwar_PlayerInteractive.nut
|
||||
创建日期:2024-07-16 11:02
|
||||
文件用途:超时空攻坚队玩家交互按钮
|
||||
*/
|
||||
//角色交互按钮需要传递参数所以重写
|
||||
class Rindro_FiendwarInteractive_BaseButton extends LenheartNewUI_BaseButton {
|
||||
|
||||
OnShow = null;
|
||||
|
||||
constructor(X, Y, W, H, Path, Idx) {
|
||||
|
||||
LenheartNewUI_BaseButton.constructor(X, Y, W, H, Path, Idx);
|
||||
}
|
||||
|
||||
//鼠标左键弹起回调
|
||||
function OnMouseLbUp(MousePos_X, MousePos_Y) {
|
||||
Y--;
|
||||
if (isLBDown && OnClick) {
|
||||
OnClick();
|
||||
}
|
||||
isLBDown = false;
|
||||
local Each = LenheartNewUI_CreateWindow(Rindro_FiendwarPlayerInteractiveC, "超时空玩家交互", X, Y, 100, 21, 0);
|
||||
Each.Visible = false;
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
//不可用
|
||||
if (State == 8) {
|
||||
L_sq_DrawImg(Path, Idx + 3, X, Y + 1);
|
||||
} else {
|
||||
//按下
|
||||
if (isLBDown) {
|
||||
Y++;
|
||||
L_sq_DrawImg(Path, (Idx * 2) + 2, X, Y);
|
||||
}
|
||||
//悬停
|
||||
else if (isInRect) {
|
||||
L_sq_DrawImg(Path, (Idx * 2) + 1, X, Y);
|
||||
}
|
||||
//普通
|
||||
else {
|
||||
L_sq_DrawImg(Path, 0, X, Y);
|
||||
}
|
||||
}
|
||||
if (OnShow) OnShow(X, Y);
|
||||
}
|
||||
}
|
||||
|
||||
//角色交互类
|
||||
class Rindro_FiendwarPlayerInteractiveC extends LenheartNewUI_Windows {
|
||||
// DeBugMode = true;
|
||||
|
||||
//信息对象
|
||||
InfoObj = null;
|
||||
|
||||
//初始化Flag 初始化以后才显示
|
||||
InitInfoFlag = false;
|
||||
|
||||
//有多少个标签
|
||||
InitIndexFlag = 1;
|
||||
|
||||
//头像框颜色
|
||||
HandBoxColor = [
|
||||
0xff717272,
|
||||
0xff7b2a29,
|
||||
0xff874e0d,
|
||||
0xff8b8108,
|
||||
0xff658e2d,
|
||||
0xff0f5c8a,
|
||||
0xff27238f,
|
||||
0xff4e2491,
|
||||
0xff932586,
|
||||
]
|
||||
|
||||
//X Y 裁切开始X Y 裁切结束X Y
|
||||
OffsetArr = [
|
||||
//男鬼剑士
|
||||
[56, 112, 220, 222],
|
||||
//女格斗家
|
||||
[54, 103, 240, 278],
|
||||
//男神枪手
|
||||
[55, 130, 236, 246],
|
||||
//女魔法师
|
||||
[57, 88, 234, 291],
|
||||
//男圣职者
|
||||
[57, 124, 208, 190],
|
||||
//女神枪手
|
||||
[56, 119, 226, 209],
|
||||
//暗夜使者
|
||||
[56, 117, 225, 212],
|
||||
//男格斗家
|
||||
[56, 118, 233, 212],
|
||||
//男魔法师
|
||||
[54, 103, 236, 276],
|
||||
//黑暗武士
|
||||
[56, 112, 220, 222],
|
||||
//缔造者
|
||||
[57, 88, 234, 291],
|
||||
]
|
||||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
|
||||
}
|
||||
|
||||
//初始化信息
|
||||
function InitInfo() {
|
||||
Childrens = [];
|
||||
//还原标签数量
|
||||
InitIndexFlag = 1;
|
||||
//还原高度
|
||||
Height = 21;
|
||||
//还原可见性
|
||||
Visible = true;
|
||||
//置顶窗口
|
||||
ResetFocus();
|
||||
RegisterWidget();
|
||||
InitInfoFlag = true;
|
||||
}
|
||||
|
||||
function RegisterWidget() {
|
||||
|
||||
|
||||
//是团长才能委任 并且不是我自己 并且我们在同一个攻坚队
|
||||
if (RinDro_Fiendwar_Obj.IsCaptain && !("IsMyself" in InfoObj) && RinDro_Fiendwar_Obj.MyRaidTeamId == InfoObj.PartyId) {
|
||||
//委任团长按钮
|
||||
local GiveMasterButton = Rindro_FiendwarInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 0);
|
||||
GiveMasterButton.OnShow = function(X, Y) {
|
||||
L_sq_DrawImg("interface2/popup_menu/popup_icon_character.img", 11, X, Y + 2);
|
||||
L_sq_DrawCode("委任团长", X + 36, Y + 5, sq_RGBA(104, 213, 237, 255), 0, 1);
|
||||
}
|
||||
GiveMasterButton.OnClick = function() {
|
||||
|
||||
}.bindenv(this);
|
||||
AddChild(GiveMasterButton);
|
||||
InitIndexFlag++;
|
||||
Height += 21;
|
||||
}
|
||||
|
||||
//查看信息按钮
|
||||
local CheckInfoButton = Rindro_FiendwarInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 0);
|
||||
CheckInfoButton.OnShow = function(X, Y) {
|
||||
L_sq_DrawImg("interface2/popup_menu/popup_icon_character.img", 10, X, Y + 2);
|
||||
L_sq_DrawCode("查看信息", X + 36, Y + 5, sq_RGBA(104, 213, 237, 255), 0, 1);
|
||||
}
|
||||
CheckInfoButton.OnClick = function() {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
//obj.sq_PlaySound("CLICK_BUTTON1");
|
||||
L_sq_SendPackType(8);
|
||||
L_sq_SendPackWord(InfoObj.PlayerSession);
|
||||
L_sq_SendPackByte(3);
|
||||
L_sq_SendPack();
|
||||
getroottable().WindowsShowABFlag <- false; //让原生窗口置顶
|
||||
}.bindenv(this);
|
||||
AddChild(CheckInfoButton);
|
||||
InitIndexFlag++;
|
||||
Height += 21;
|
||||
|
||||
if (!("IsMyself" in InfoObj)) {
|
||||
//交易按钮
|
||||
local TransactionButton = Rindro_FiendwarInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 0);
|
||||
TransactionButton.OnShow = function(X, Y) {
|
||||
L_sq_DrawImg("interface2/popup_menu/popup_icon_character.img", 0, X, Y + 2);
|
||||
L_sq_DrawCode("交易", X + 46, Y + 5, sq_RGBA(104, 213, 237, 255), 0, 1);
|
||||
}
|
||||
TransactionButton.OnClick = function() {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
//obj.sq_PlaySound("CLICK_BUTTON1");
|
||||
L_sq_SendPackType(10);
|
||||
L_sq_SendPackWord(InfoObj.PlayerSession);
|
||||
L_sq_SendPackByte(1);
|
||||
L_sq_SendPackDWord(22053);
|
||||
L_sq_SendPack();
|
||||
getroottable().WindowsShowABFlag <- false; //让原生窗口置顶
|
||||
}.bindenv(this);
|
||||
AddChild(TransactionButton);
|
||||
InitIndexFlag++;
|
||||
Height += 21;
|
||||
|
||||
|
||||
if (RinDro_Fiendwar_Obj.IsCaptain && RinDro_Fiendwar_Obj.MyRaidTeamId == InfoObj.PartyId) {
|
||||
//攻坚队员强退按钮
|
||||
local KickMemberButton = Rindro_FiendwarInteractive_BaseButton(0, 0 + (InitIndexFlag * 21), 100, 21, "interface2/popup_menu/popup_back.img", 4);
|
||||
KickMemberButton.OnShow = function(X, Y) {
|
||||
L_sq_DrawImg("interface2/popup_menu/popup_icon_warning.img", 3, X, Y + 2);
|
||||
L_sq_DrawCode("攻坚队员强退", X + 24, Y + 5, sq_RGBA(255, 50, 50, 255), 0, 1);
|
||||
}
|
||||
KickMemberButton.OnClick = function() {
|
||||
local obj = sq_GetMyMasterCharacter();
|
||||
//obj.sq_PlaySound("CLICK_BUTTON1");
|
||||
local T = {
|
||||
op = 20063021,
|
||||
teamsId = InfoObj.PartyId,
|
||||
charCid = InfoObj.Cid
|
||||
}
|
||||
SendPackEx(T);
|
||||
}.bindenv(this);
|
||||
AddChild(KickMemberButton);
|
||||
InitIndexFlag++;
|
||||
Height += 21;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
if (!InitInfoFlag) return;
|
||||
L_sq_DrawImg("interface2/popup_menu/popup_back.img", 0, X, Y);
|
||||
//绘制角色名
|
||||
L_sq_DrawCode(InfoObj.Name, X + 61 - LenheartTextClass.GetStringLength(InfoObj.Name) / 2, Y + 4, sq_RGBA(169, 255, 171, 255), 0, 1);
|
||||
//绘制头像
|
||||
foreach(AvatarObj in InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[InfoObj.Job][0] - 40;
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[InfoObj.Job][1];
|
||||
setClip(AXpos + OffsetArr[InfoObj.Job][2], AYpos + OffsetArr[InfoObj.Job][3], AXpos + OffsetArr[InfoObj.Job][2] + 22, AYpos + OffsetArr[InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
|
||||
LenheartNewUI_Windows.Show(obj);
|
||||
}
|
||||
|
||||
function Proc(obj) {
|
||||
LenheartNewUI_Windows.SyncPos(X, Y);
|
||||
}
|
||||
}
|
||||
|
|
@ -4,9 +4,9 @@
|
|||
创建日期:2024-09-25 20:30
|
||||
文件用途:骑士马战
|
||||
*/
|
||||
dofile("sqr/Project/HorseGuessing/HorseGuessing_Guide.nut"); //骑士马战指引
|
||||
dofile("sqr/Project/HorseGuessing/HorseGuessing_KnightInfo.nut"); //骑士马战资料
|
||||
dofile("sqr/Project/HorseGuessing/HorseGuessing_PastRecord.nut"); //骑士马战过往战绩
|
||||
// dofile("sqr/Project/HorseGuessing/HorseGuessing_Guide.nut"); //骑士马战指引
|
||||
// dofile("sqr/Project/HorseGuessing/HorseGuessing_KnightInfo.nut"); //骑士马战资料
|
||||
// dofile("sqr/Project/HorseGuessing/HorseGuessing_PastRecord.nut"); //骑士马战过往战绩
|
||||
|
||||
class HorseGuessingBaseButton extends LenheartNewUI_BaseButton {
|
||||
//是否翻转
|
||||
|
|
|
|||
|
After Width: | Height: | Size: 626 KiB |
|
After Width: | Height: | Size: 258 KiB |
|
|
@ -75,7 +75,7 @@ class HudUiC extends LenheartNewUI_Windows {
|
|||
}
|
||||
|
||||
//技能栏
|
||||
for (local i = 0; i< 6; i++) {
|
||||
for (local i = 0; i< 7; i++) {
|
||||
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x14, 433 + (i * 31));
|
||||
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x30 + (i * 0x4)) + 0x18, 565);
|
||||
L_sq_WA(L_sq_RA(L_sq_RA(0x01ADE0CC) + 0x60 + (i * 0x4)) + 0x14, 433 + (i * 31));
|
||||
|
|
@ -568,6 +568,7 @@ class HudUiC extends LenheartNewUI_Windows {
|
|||
|
||||
//绘制主界面
|
||||
function DrawMain(obj) {
|
||||
|
||||
//绘制背景
|
||||
L_sq_DrawImg("interface2/hud/lenheartaddhud.img", 0, 347, 526);
|
||||
|
||||
|
|
@ -658,4 +659,5 @@ getroottable()["LenheartFuncTab"].rawset("HudUiFuncN", Lenheart_HudUi_Fun);
|
|||
// L_sq_Test(L_sq_RA(0x01AB7CDC), 0x3DB61400);
|
||||
// local Ret = L_sq_Test(L_sq_RA(0x01AB7CDC), 10);
|
||||
// local Ret = L_sq_Test(L_sq_RA(0x01A5FA88), 101020037);
|
||||
// print(format("%02x", Ret));
|
||||
// print(format("%02x", Ret));
|
||||
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ class RinDro_Luke extends Rindro_BaseToolClass {
|
|||
} else {
|
||||
//在卢克区域的 要转移回普通城镇
|
||||
if (L_sq_GetTownIndex() == BaseConfig.town_index) {
|
||||
L_sq_MoveTown(1, 1, 474, 249);
|
||||
L_sq_MoveTown(getroottable().rawin("RindroRaidNormalTown") ? getroottable().RindroRaidNormalTown : 2, getroottable().rawin("RindroRaidNormalArea") ? getroottable().RindroRaidNormalArea : 1, 474, 249);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -160,11 +160,12 @@ class RinDro_Luke extends Rindro_BaseToolClass {
|
|||
}
|
||||
//构造CID对应的装备数组方便绘制
|
||||
Portrait.rawset(MemberObj.CID, {
|
||||
EquVos = clone(MemberObj.equVos),
|
||||
EquVos = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null),
|
||||
Job = MemberObj.PlayerJob,
|
||||
TeamId = MemberObj.characNum,
|
||||
Name = MemberObj.PlayerName,
|
||||
});
|
||||
|
||||
local T = {
|
||||
PartyId = Jso.team.TeamId, //攻坚队ID
|
||||
TeamId = MemberObj.characNum, //小队编号
|
||||
|
|
@ -173,7 +174,7 @@ class RinDro_Luke extends Rindro_BaseToolClass {
|
|||
JobName = MemberObj.PlayerGrowTypeJob, //职业名
|
||||
Job = MemberObj.PlayerJob, //职业编号
|
||||
StkHasFlag = MemberObj.isPrepare, //是否拥有攻坚材料
|
||||
EquVos = MemberObj.equVos, //装备List 用于显示头像
|
||||
EquVos = Rindro_Draw_Character(MemberObj.PlayerJob, MemberObj.equVos, "rest.ani", null), //装备List 用于显示头像
|
||||
Captain = MemberObj.CaptainBool, //是否为攻坚队队长
|
||||
Cid = MemberObj.CID, //Cid
|
||||
OnlineState = MemberObj.onLineStart, //在线状态
|
||||
|
|
@ -335,7 +336,7 @@ class RinDro_Luke extends Rindro_BaseToolClass {
|
|||
PartyHallWindow_Object = LenheartNewUI_CreateWindow(Rindro_Luke_PartyHallC, "新卢克攻坚大厅窗口", ((getroottable().Rindro_Scr_Width - 478)).tointeger(), 40, 478, 434, 18);
|
||||
PartyFormationWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukePartyFormation, "卢克我的队伍编队窗口", 375, 190, 294, 192, 18);
|
||||
FightSituationWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukeFightSituationC, "卢克攻坚战况表", ((getroottable().Rindro_Scr_Width - 800) / 2).tointeger(), 8, 800, 600, 0);
|
||||
PartyWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukePartyInfoC, "卢克我的队伍窗口", 6, 15, 354, 566, 18);
|
||||
PartyWindow_Object = LenheartNewUI_CreateWindow(Rindro_LukePartyInfoC, "卢克我的队伍窗口", 6, 15, 354, 566 - 255, 18);
|
||||
RewardWindow_Object = LenheartNewUI_CreateWindow(Rindro_Luke_RewardC, "卢克翻牌奖励窗口", 0, 0, 0, 0, 0);
|
||||
LenheartNewUI_CreateWindow(Rindro_Luke_NotiC, "卢克攻坚队伍消息分发", 0, 0, 0, 0, 0);
|
||||
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
|
|||
|
||||
Visible = false;
|
||||
//调试模式
|
||||
DeBugMode = true;
|
||||
// DeBugMode = true;
|
||||
//透明度
|
||||
AlphaValue = 1.0;
|
||||
|
||||
|
|
@ -133,6 +133,7 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
|
|||
obj = sq_ObjectToSQRCharacter(obj);
|
||||
local mob = LukeRaid_getMonsterObject(obj, 664670);
|
||||
if (mob) {
|
||||
mob = sq_GetCNRDObjectToActiveObject(mob);
|
||||
local mobMaxhp = mob.getHpMax();
|
||||
local mobhp = mob.getHp();
|
||||
local newhp = mobhp - (mobMaxhp.tofloat() * (Jso.ReduceHp.tofloat() / 100.0)).tointeger();
|
||||
|
|
@ -143,7 +144,7 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
|
|||
|
||||
constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
|
||||
Childrens = [];
|
||||
Pack_Control.rawset(20084402, setLukeRaidBoss_DamageHp.bindenv(this));
|
||||
Pack_Control.rawset(20084042, setLukeRaidBoss_DamageHp.bindenv(this));
|
||||
//初始化判断孵化进入操作表
|
||||
MapIndexTable = {};
|
||||
MapIndexTable.rawset(33100, 7);
|
||||
|
|
@ -409,13 +410,9 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
|
|||
local YOffset = 9 + (index * 22);
|
||||
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[PartyMasterIcon.InfoObj.Job][0] - 17 + ((PosI % 10) * 24);
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 512 + ((PosI / 10) * 20);
|
||||
setClip(AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local AXpos = X + 26 + ((PosI % 10) * 24);
|
||||
local AYpos = Y + 513 + ((PosI / 10) * 20);
|
||||
PartyMasterIcon.InfoObj.EquVos.DrawFace(AXpos, AYpos);
|
||||
PosI++;
|
||||
}
|
||||
}
|
||||
|
|
@ -524,13 +521,9 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
|
|||
local YOffset = 9;
|
||||
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in CharacV.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[CharacV.Job][0] + DgnObj.X + ImgInfo[3] - 28;
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[CharacV.Job][1] + DgnObj.Y + ImgInfo[4] + 2;
|
||||
setClip(AXpos + OffsetArr[CharacV.Job][2], AYpos + OffsetArr[CharacV.Job][3], AXpos + OffsetArr[CharacV.Job][2] + 22, AYpos + OffsetArr[CharacV.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local AXpos = X + DgnObj.X + ImgInfo[3] + 16;
|
||||
local AYpos = Y + DgnObj.Y + ImgInfo[4] + 2;
|
||||
CharacV.EquVos.DrawFace(AXpos, AYpos);
|
||||
|
||||
//绘制队伍人数
|
||||
for (local z = 0; z< count; z++) {
|
||||
|
|
@ -740,29 +733,7 @@ class Rindro_LukeFightSituationC extends LenheartNewUI_Windows {
|
|||
}
|
||||
//判断自身地图相关事件
|
||||
function MapEventTest(obj) {
|
||||
if (sq_GetCurrentModuleType() != 3) return;
|
||||
local stage = sq_GetGlobaludpModuleStage();
|
||||
local MapIndex = sq_GetMapIndex(stage);
|
||||
if (MapIndexTable.rawin(MapIndex)) {
|
||||
local X = obj.getXPos();
|
||||
local Y = obj.getYPos();
|
||||
local Mark = false;
|
||||
if (MapIndex == 33103 && PosEvent(X, 737) && PosEvent(Y, 354)) Mark = true;
|
||||
if (MapIndex == 33100 && PosEvent(X, 369) && PosEvent(Y, 387)) Mark = true;
|
||||
if (MapIndex == 33116 && PosEvent(X, 365) && PosEvent(Y, 374)) Mark = true;
|
||||
if (MapIndex == 33119 && PosEvent(X, 838) && PosEvent(Y, 424)) Mark = true;
|
||||
|
||||
if (Mark == true && MapMoveMark == false) {
|
||||
local T = {
|
||||
op = 20084303,
|
||||
DunId = MapIndexTable[MapIndex]
|
||||
}
|
||||
SendPackEx(T);
|
||||
MapMoveMark = true;
|
||||
} else if (Mark == false) MapMoveMark = false;
|
||||
} else {
|
||||
MapMoveMark = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -87,18 +87,16 @@ class Rindro_Luke_NotiC extends LenheartNewUI_Windows {
|
|||
|
||||
if (Ct >= 200) {
|
||||
//绘制队长头像
|
||||
foreach(AvatarObj in PartyMasterIcon.InfoObj.EquVos) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[PartyMasterIcon.InfoObj.Job][0] - 9 + 150;
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[PartyMasterIcon.InfoObj.Job][1] + 184;
|
||||
setClip(AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2], AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3], AXpos + OffsetArr[PartyMasterIcon.InfoObj.Job][2] + 22, AYpos + OffsetArr[PartyMasterIcon.InfoObj.Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
local AXpos = X - 9 + 150 + 44;
|
||||
local AYpos = Y + 184 + 2;
|
||||
PartyMasterIcon.InfoObj.EquVos.DrawFace(AXpos, AYpos);
|
||||
}
|
||||
}
|
||||
|
||||
//绘制消息
|
||||
if (Ct >= 200) L_sq_DrawCode(Msg, X + 270 + LenheartTextClass.GetStringLength(Name), Y + 190, sq_RGBA(230, 200, 155, 255), 0, 1);
|
||||
|
||||
if (Ct >= 2000) Msg = null;
|
||||
}
|
||||
|
||||
function Show(obj) {
|
||||
|
|
|
|||
|
|
@ -205,13 +205,10 @@ class Rindro_LukeApplyJoinC extends LenheartNewUI_Windows {
|
|||
L_sq_DrawImg("hud/fiendwarl.img", 14, X + 8, Y + 40);
|
||||
//绘制角色头像
|
||||
if (AvatarArr) {
|
||||
foreach(AvatarObj in AvatarArr) {
|
||||
local AXpos = AvatarObj.F[0][2] + X + OffsetArr[Job][0] - 8;
|
||||
local AYpos = AvatarObj.F[0][3] + Y + OffsetArr[Job][1] + 40;
|
||||
setClip(AXpos + OffsetArr[Job][2], AYpos + OffsetArr[Job][3], AXpos + OffsetArr[Job][2] + 22, AYpos + OffsetArr[Job][3] + 18); //开始裁切
|
||||
L_sq_DrawImg("character/" + AvatarObj.B + ".img", AvatarObj.F[0][0], AXpos, AYpos);
|
||||
releaseClip(); //裁切结束
|
||||
}
|
||||
//绘制队长头像
|
||||
local AXpos = X + 42 - 8;
|
||||
local AYpos = Y + 1 + 40;
|
||||
AvatarArr.DrawFace(AXpos, AYpos);
|
||||
}
|
||||
//绘制角色等级
|
||||
L_sq_DrawCode(Level, X + 78 - LenheartTextClass.GetStringLength(Level) / 2, Y + 45, sq_RGBA(134, 120, 79, 255), 0, 1);
|
||||
|
|
|
|||