399 lines
15 KiB
Plaintext
399 lines
15 KiB
Plaintext
/*
|
|
文件名:MarrySystem.nut
|
|
路径:Project/MarrySystem/MarrySystem.nut
|
|
创建日期:2024-10-01 00:01
|
|
文件用途:结婚系统
|
|
*/
|
|
|
|
dofile("sqr/Project/MarrySystem/MarrySystem_Request.nut");
|
|
dofile("sqr/Project/MarrySystem/MarrySystem_Response.nut");
|
|
dofile("sqr/Project/MarrySystem/MarrySystem_Preparation.nut");
|
|
dofile("sqr/Project/MarrySystem/MarrySystem_OpenAuditoriumList.nut");
|
|
dofile("sqr/Project/MarrySystem/MarrySystem_ActionAni.nut");
|
|
dofile("sqr/Project/MarrySystem/MarrySystem_Room.nut");
|
|
|
|
class MarrySystemC extends Rindro_BaseToolClass {
|
|
//调试模式
|
|
// DeBugMode = true;
|
|
|
|
//不是窗口
|
|
// NoWindow = true;
|
|
|
|
//是否可见
|
|
// Visible = false;
|
|
|
|
//包头
|
|
OP = 20078000;
|
|
//配置
|
|
Config = null;
|
|
|
|
//结婚状态
|
|
MarryState = 0;
|
|
|
|
//申请订婚窗口
|
|
RequestWindow = null;
|
|
//答复窗口
|
|
ResponseWindow = null;
|
|
//准备婚礼窗口
|
|
PreparationWindow = null;
|
|
//礼堂列表窗口
|
|
OpenAuditoriumList = null;
|
|
//婚礼演出脚本对象
|
|
MarriageScript = null;
|
|
|
|
//我的结婚时间
|
|
MyMarryTime = null;
|
|
MyMarryTimeFlag = null;
|
|
|
|
//婚房逻辑
|
|
MarrySystemRoomObject = null;
|
|
|
|
//请求配置
|
|
function GetConfig() {
|
|
SendPackEx({
|
|
op = OP + 777
|
|
});
|
|
}
|
|
|
|
function GetConfigCallBack(Chunk) {
|
|
local Jso = Json.Decode(Chunk);
|
|
Config = {};
|
|
Config.Town <- Jso.town;
|
|
Config.Area <- Jso.area;
|
|
}
|
|
|
|
|
|
//查看自己是否有结婚
|
|
function CheckMarryState() {
|
|
SendPackEx({
|
|
op = OP + 9
|
|
});
|
|
}
|
|
|
|
function CheckMarryStateCallBack(Chunk) {
|
|
local Jso = Json.Decode(Chunk);
|
|
MarryState = Jso.Flag;
|
|
InitNpcEachButton();
|
|
}
|
|
|
|
//收到结婚请求
|
|
function RequestMarryCallBack(Chunk) {
|
|
local Jso = Json.Decode(Chunk);
|
|
ResponseWindow.applicantName = Jso.applicantName;
|
|
ResponseWindow.applicantCid = Jso.applicantCid;
|
|
ResponseWindow.applicantUid = Jso.applicantUid;
|
|
ResponseWindow.Visible = true;
|
|
ResponseWindow.ResetFocus();
|
|
}
|
|
|
|
//打开准备婚礼窗口
|
|
function OpenPreparationWindowCallBack(Chunk) {
|
|
local Jso = Json.Decode(Chunk);
|
|
PreparationWindow.Name1 = Jso.MyName;
|
|
PreparationWindow.Name2 = Jso.TargetName;
|
|
PreparationWindow.Visible = true;
|
|
PreparationWindow.ResetFocus();
|
|
}
|
|
|
|
//打开礼堂列表窗口
|
|
function OpenAuditoriumListWindowCallBack(Chunk) {
|
|
local Jso = Json.Decode(Chunk);
|
|
|
|
OpenAuditoriumList.List = Jso.info;
|
|
OpenAuditoriumList.Visible = true;
|
|
OpenAuditoriumList.ResetFocus();
|
|
}
|
|
|
|
//进入礼堂信息包
|
|
function OnEnterAuditoriumInfoCallBack(Chunk) {
|
|
local Jso = Json.Decode(Chunk);
|
|
MyMarryTime = Jso.time;
|
|
MyMarryTimeFlag = Clock();
|
|
}
|
|
|
|
//结婚动画包
|
|
function ActionCallBack(Chunk) {
|
|
local Jso = Json.Decode(Chunk);
|
|
MarriageScript.Init(Jso.info);
|
|
}
|
|
|
|
constructor() {
|
|
|
|
RequestWindow = MarrySystem_RequestC("结婚系统_申请订婚窗口", ((getroottable().Rindro_Scr_Width - 329) / 2).tointeger(), 180, 329, 166, 16);
|
|
ResponseWindow = MarrySystem_ResponseC("结婚系统_订婚答复窗口", ((getroottable().Rindro_Scr_Width - 329) / 2).tointeger(), 180, 329, 166, 16);
|
|
PreparationWindow = MarrySystem_PreparationC("结婚系统_准备婚礼窗口", ((getroottable().Rindro_Scr_Width - 256) / 2).tointeger(), 100, 260, 374, 28);
|
|
OpenAuditoriumList = MarrySystem_OpenAuditoriumListC("结婚系统_礼堂列表窗口", ((getroottable().Rindro_Scr_Width - 474) / 2).tointeger(), 100, 474, 354, 28);
|
|
MarriageScript = MarrySystem_ActionAniC();
|
|
MarrySystemRoomObject = MarrySystem_Room();
|
|
|
|
OnSetCharacter_Control.MarrySystem <- OnSetCharacter.bindenv(this);
|
|
Pack_Control.rawset(OP + 10, CheckMarryStateCallBack.bindenv(this));
|
|
Pack_Control.rawset(OP + 4, RequestMarryCallBack.bindenv(this));
|
|
Pack_Control.rawset(OP + 12, OpenPreparationWindowCallBack.bindenv(this));
|
|
Pack_Control.rawset(OP + 20, OpenAuditoriumListWindowCallBack.bindenv(this));
|
|
Pack_Control.rawset(OP + 22, OnEnterAuditoriumInfoCallBack.bindenv(this));
|
|
Pack_Control.rawset(OP + 34, ActionCallBack.bindenv(this));
|
|
Pack_Control.rawset(OP + 778, GetConfigCallBack.bindenv(this));
|
|
|
|
|
|
GetConfig();
|
|
CheckMarryState();
|
|
}
|
|
|
|
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);
|
|
|
|
|
|
}
|
|
|
|
|
|
//注册NPC按钮
|
|
function InitNpcEachButton() {
|
|
local EachManager = getroottable()["L_Each_Obj"];
|
|
//先清空注册
|
|
EachManager.RemoveEachForNpc(20013);
|
|
|
|
//没结婚注册申请结婚按钮
|
|
if (MarryState == 0) {
|
|
EachManager.AddEachForNpc(20013, 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 = 10;
|
|
ApplyEngagementButton.Str = "申请结婚";
|
|
ApplyEngagementButton.OnClick = function(Button) {
|
|
Button.Parent.CloseAllEach();
|
|
Button.Parent.CloseWindow();
|
|
RequestWindow.Visible = true;
|
|
RequestWindow.ResetFocus();
|
|
}.bindenv(this);
|
|
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
|
|
SThis.AddChild(ApplyEngagementButton);
|
|
}.bindenv(this));
|
|
}
|
|
//已订婚 未结婚
|
|
else if (MarryState == 1) {
|
|
EachManager.AddEachForNpc(20013, 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 = 12;
|
|
ApplyEngagementButton.Str = "退婚";
|
|
ApplyEngagementButton.OnClick = function(Button) {
|
|
Button.Parent.CloseAllEach();
|
|
Button.Parent.CloseWindow();
|
|
local T = {
|
|
op = OP + 7,
|
|
}
|
|
SendPackEx(T);
|
|
}.bindenv(this);
|
|
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
|
|
SThis.AddChild(ApplyEngagementButton);
|
|
|
|
//关闭按钮
|
|
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 = 11;
|
|
ApplyEngagementButton.Str = "举办婚礼";
|
|
ApplyEngagementButton.OnClick = function(Button) {
|
|
Button.Parent.CloseAllEach();
|
|
Button.Parent.CloseWindow();
|
|
local T = {
|
|
op = OP + 11,
|
|
}
|
|
SendPackEx(T);
|
|
}.bindenv(this);
|
|
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
|
|
SThis.AddChild(ApplyEngagementButton);
|
|
}.bindenv(this));
|
|
}
|
|
//等待举行婚礼
|
|
else if (MarryState == 2) {
|
|
EachManager.AddEachForNpc(20013, 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 = 13;
|
|
ApplyEngagementButton.Str = "进入礼堂";
|
|
ApplyEngagementButton.OnClick = function(Button) {
|
|
Button.Parent.CloseAllEach();
|
|
Button.Parent.CloseWindow();
|
|
local T = {
|
|
op = OP + 15,
|
|
room = -1
|
|
}
|
|
SendPackEx(T);
|
|
}.bindenv(this);
|
|
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
|
|
SThis.AddChild(ApplyEngagementButton);
|
|
}.bindenv(this));
|
|
EachManager.AddEachForNpc(20014, 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 = 14;
|
|
ApplyEngagementButton.Str = "离开礼堂";
|
|
ApplyEngagementButton.OnClick = function(Button) {
|
|
Button.Parent.CloseAllEach();
|
|
Button.Parent.CloseWindow();
|
|
local T = {
|
|
op = OP + 17
|
|
}
|
|
SendPackEx(T);
|
|
}.bindenv(this);
|
|
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
|
|
SThis.AddChild(ApplyEngagementButton);
|
|
}.bindenv(this));
|
|
}
|
|
|
|
//无论如何都添加礼堂列表
|
|
EachManager.AddEachForNpc(20013, 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 = 23;
|
|
ApplyEngagementButton.Str = "礼堂列表";
|
|
ApplyEngagementButton.OnClick = function(Button) {
|
|
Button.Parent.CloseAllEach();
|
|
Button.Parent.CloseWindow();
|
|
local T = {
|
|
op = OP + 19,
|
|
}
|
|
SendPackEx(T);
|
|
}.bindenv(this);
|
|
ApplyEngagementButton.SetCallBackFunc(function(Button) {})
|
|
SThis.AddChild(ApplyEngagementButton);
|
|
}.bindenv(this));
|
|
}
|
|
|
|
//重选角色回调
|
|
function OnSetCharacter() {
|
|
CheckMarryState();
|
|
}
|
|
|
|
|
|
|
|
//逻辑入口
|
|
function Proc(obj) {
|
|
// print(getroottable().Camera_Pos);
|
|
|
|
//判断在礼堂房间
|
|
if (Config && L_sq_GetTownIndex() == Config.Town && L_sq_GetRegionIndex() == Config.Area) {
|
|
if (MyMarryTimeFlag && MyMarryTime) {
|
|
L_sq_DrawImg("map/church/chn_church_count_number.img", 0, 720 - getroottable().Camera_Pos.X, 72 - getroottable().Camera_Pos.Y);
|
|
DrawMarryTime(obj, MyMarryTime - ((Clock() / 1000) - (MyMarryTimeFlag / 1000)));
|
|
}
|
|
}
|
|
|
|
MarriageScript.Show(obj);
|
|
}
|
|
|
|
|
|
|
|
TimeFlag = Clock();
|
|
|
|
//攻坚时间
|
|
function DrawMarryTime(obj, RealTime) {
|
|
local X = 720 - getroottable().Camera_Pos.X;
|
|
local Y = 114 - getroottable().Camera_Pos.Y;
|
|
|
|
local seconds = RealTime;
|
|
local minutes = seconds / 60;
|
|
|
|
seconds %= 60;
|
|
if (seconds< 0 && minutes< 0) return;
|
|
seconds = format("%02d", seconds).slice(-2);
|
|
minutes = format("%02d", minutes).slice(-2);
|
|
|
|
local X1 = -15;
|
|
local X2 = X1 + 18;
|
|
|
|
local Offset = 0;
|
|
Offset += 46;
|
|
L_sq_DrawImg("map/church/chn_church_count_number.img", minutes.slice(0, 1).tointeger() + 1, X + X1 + Offset, Y + 28);
|
|
L_sq_DrawImg("map/church/chn_church_count_number.img", minutes.slice(1).tointeger() + 1, X + X2 + Offset, Y + 28);
|
|
Offset += 46;
|
|
L_sq_DrawImg("map/church/chn_church_count_number.img", seconds.slice(0, 1).tointeger() + 1, X + X1 + Offset, Y + 28);
|
|
L_sq_DrawImg("map/church/chn_church_count_number.img", seconds.slice(1).tointeger() + 1, X + X2 + Offset, Y + 28);
|
|
}
|
|
|
|
}
|
|
getroottable().rawdelete("MarrySystem_Obj");
|
|
|
|
|
|
// local ReadPath = L_sq_P2I(Memory.allocUtf8String("equipment/equipment.lst").C_Object);
|
|
// local Reader = Memory.alloc(409600);
|
|
// 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);
|
|
|
|
|
|
// L_Sq_CallFunc(0x112A9F0, "int", FFI_THISCALL, ["int", "int", "int", "int","int", "int", "int"], L_sq_RA(0x1A5FAE4), AniPath, pATH2, 1,0,0,0);
|
|
|
|
// local ItemObject = L_sq_GetItem(601500069);
|
|
// print(format("%02x", ItemObject));
|
|
|
|
// local ThisC = L_Sq_CallFunc(0x11A5990, "int", FFI_THISCALL, ["int"], 508);
|
|
// print(format("%02x", ThisC));
|
|
// local AniPath = L_sq_P2I(Memory.allocUtf8String("character/swordman/animation/attack1.ani").C_Object);
|
|
//TTTAni <- L_Sq_CallFunc(0x108F8B0, "int", FFI_THISCALL, ["int", "int", "int", "int"], ThisC, AniPath, 1, 0);
|
|
|
|
// local AniPath = L_sq_P2I(Memory.allocUtf8String("character/swordman/animation/attack1.ani").C_Object);
|
|
// TTTAni <- L_Sq_CallFunc(0x112A9F0, "int", FFI_THISCALL, ["int", "int", "int", "int", "int", "int", "int"], 0x19dc64, AniPath, 1695745, 1, 0, 0, 0);
|
|
|
|
|
|
// Rindro_Haker.LoadHook(0x65de50, ["int", "int"],
|
|
// function(args) {
|
|
// // print(format("%02x", args[0]));
|
|
// // local AniPath = NativePointer(L_sq_I2P(args[0])).readUnicodeString();
|
|
// print(format("%02x", args[0]));
|
|
// // print(args[2]);
|
|
// return null;
|
|
// },
|
|
// function(args) {
|
|
// // print(666);
|
|
// // print(format("%02x", args.pop()));
|
|
// // TTTAni <- args.pop();
|
|
// return null;
|
|
// });
|
|
|
|
|
|
|
|
// local ItemObject = R_Utils.GetEquPath(601500069);
|
|
// print(NativePointer(L_sq_I2P(ItemObject)).readUnicodeString());
|
|
|
|
|
|
|
|
|
|
function Lenheart_MarrySystem_Fun(obj) {
|
|
local RootTab = getroottable();
|
|
if (!RootTab.rawin("MarrySystem_Obj")) {
|
|
RootTab.rawset("MarrySystem_Obj", MarrySystemC());
|
|
} else {
|
|
RootTab["MarrySystem_Obj"].Proc(obj);
|
|
}
|
|
|
|
// if (TTTAni) {
|
|
// print(format("%02x", TTTAni));
|
|
// L_Sq_CallFunc(0x1091890, "char", FFI_THISCALL, ["int"], TTTAni);
|
|
// L_Sq_CallFunc(0x108B770, "int", FFI_THISCALL, ["int", "int", "int", "int", "int", "int"], TTTAni, L_sq_RA(0x1B45B94), 200, 200, 0, 0);
|
|
// }
|
|
|
|
}
|
|
|
|
getroottable()["LenheartFuncTab"].rawset("MarrySystemFuncN", Lenheart_MarrySystem_Fun);
|
|
|
|
// local asos = R_Utils.GetCharacByEqu(0, 0, [601550071, 601560067, 601570062, 601520061, 601500069, 601510068, 601530060, 601540069, 601580026, 101010035]);
|
|
|
|
// local asos = sq_CreateAICharacter(900);
|
|
// asos.setCurrentPos(sq_getMyCharacter().getXPos() + 100, sq_getMyCharacter().getYPos(), 0);
|
|
// sq_AddObject(sq_getMyCharacter(), asos, OBJECTTYPE_VIRTUALCHARACTER, false);
|
|
|
|
// local ItemObject = L_sq_GetItem(27675);
|
|
// // local ItemObject = L_sq_GetItem(27582);
|
|
// L_Sq_CallFunc(0x8265A0, "void", FFI_THISCALL, ["int","int","int"], L_Sq_GetObjectAddress(asos),ItemObject,0xFFFFFFFF); |