401 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			401 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(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));
 | |
| 
 | |
|         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));
 | |
|     }
 | |
| 
 | |
|     //重选角色回调
 | |
|     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); |