132 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			132 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /*
 | |
| 文件名:TransformEqu.nut
 | |
| 路径:Project/OddsPlugins/TransformEqu.nut
 | |
| 创建日期:2025-01-17	21:03
 | |
| 文件用途:变换装备
 | |
| */
 | |
| class TransformEquC extends LenheartNewUI_Windows {
 | |
|     //调试模式
 | |
|     // DeBugMode = true;
 | |
| 
 | |
|     //不是窗口
 | |
|     // NoWindow = true;
 | |
| 
 | |
|     //是否可见
 | |
|     // Visible = false;
 | |
| 
 | |
|     //属性记录表
 | |
|     Attributes = null;
 | |
|     //播报内容数组
 | |
|     BroadcastContent = null;
 | |
|     //是否需要绘制
 | |
|     DrawFlag = false;
 | |
| 
 | |
|     constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) {
 | |
|         Childrens = [];
 | |
|         Attributes = array(7, null);
 | |
|         BroadcastContent = {};
 | |
|         //注册控件
 | |
|         RegisterWidget();
 | |
| 
 | |
|         LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH);
 | |
| 
 | |
|         RetrieveAndRecordAttributes(1);
 | |
| 
 | |
|         Pack_Control.rawset(20072602, RetrieveAndRecordAttributes.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 RetrieveAndRecordAttributes(Chunk) {
 | |
|         //记录四维 力量 智力 体力 精神
 | |
|         local AttributesBuffer = [];
 | |
|         AttributesBuffer.append(L_sq_GetCharacterAttribute(0x2364));
 | |
|         AttributesBuffer.append(L_sq_GetCharacterAttribute(0x2394));
 | |
|         AttributesBuffer.append(L_sq_GetCharacterAttribute(0x237c));
 | |
|         AttributesBuffer.append(L_sq_GetCharacterAttribute(0x23ac));
 | |
| 
 | |
|         local ObjectAddress = L_sq_RA(0x1AB7CDC);
 | |
|         local Wg = (MemoryTool.DecodeMemoryData(ObjectAddress + 0x1E54) * (AttributesBuffer[0].tofloat() * 0.004 + 1)).tointeger() + MemoryTool.DecodeMemoryData(ObjectAddress + 0x1EB4);
 | |
|         AttributesBuffer.append(Wg);
 | |
|         local Mg = (MemoryTool.DecodeMemoryData(ObjectAddress + 0x1E84) * (AttributesBuffer[1].tofloat() * 0.004 + 1)).tointeger() + MemoryTool.DecodeMemoryData(ObjectAddress + 0x1ED8);
 | |
|         AttributesBuffer.append(Mg);
 | |
|         local Dl = MemoryTool.DecodeMemoryData(ObjectAddress + 0x22C8) + MemoryTool.DecodeMemoryData(ObjectAddress + 0x22F8);
 | |
|         AttributesBuffer.append(Dl);
 | |
| 
 | |
|         for (local i = 0; i< AttributesBuffer.len(); i++) {
 | |
|             if (AttributesBuffer[i] != Attributes[i]) {
 | |
|                 if (Attributes[i] != null) {
 | |
|                     BroadcastContent.rawset(i, AttributesBuffer[i] - Attributes[i]);
 | |
|                     DrawFlag = Clock();
 | |
|                 }
 | |
|                 Attributes[i] = AttributesBuffer[i];
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     //绘制主界面
 | |
|     function DrawMain(obj) {
 | |
| 
 | |
|         if (DrawFlag) {
 | |
|             if (sq_GetCurrentModuleType() == 3) {
 | |
|                 local Xpos = sq_GetScreenXPos(obj) - 45;
 | |
|                 local Ypos = sq_GetScreenYPos(obj) - 128;
 | |
| 
 | |
|                 setClip(Xpos, Ypos - 40, Xpos + 150, Ypos + 80); //开始裁切
 | |
|                 local Time = Clock() - DrawFlag;
 | |
|                 local pos = 0;
 | |
|                 foreach(Index, Value in BroadcastContent) {
 | |
|                     local RealAtt = "";
 | |
|                     if (Index == 0) RealAtt = "力量";
 | |
|                     if (Index == 1) RealAtt = "智力";
 | |
|                     if (Index == 2) RealAtt = "体力";
 | |
|                     if (Index == 3) RealAtt = "精神";
 | |
|                     if (Index == 4) RealAtt = "物理攻击力";
 | |
|                     if (Index == 5) RealAtt = "魔法攻击力";
 | |
|                     if (Index == 6) RealAtt = "独立攻击力";
 | |
|                     local Color = [65, 255, 78];
 | |
|                     if (Value< 0) Color = [255, 50, 50];
 | |
|                     local Ap = 250 - ((BroadcastContent.len() - pos) * Time * 0.05).tointeger();
 | |
|                     if (Ap< 0) Ap = 0;
 | |
|                     L_sq_DrawCode(RealAtt + " " + (Value > 0 ? "+ " : "- ") + (abs(Value)), Xpos, Ypos + (pos * 16) - (Time * 0.05), sq_RGBA(Color[0], Color[1], Color[2], Ap), 0, 1);
 | |
|                     pos++;
 | |
|                 }
 | |
|                 releaseClip(); //裁切结束
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function Show(obj) {
 | |
|         DrawMain(obj);
 | |
|         LenheartNewUI_Windows.Show(obj);
 | |
| 
 | |
|     }
 | |
| 
 | |
|     //逻辑入口
 | |
|     function Proc(obj) {
 | |
|         LenheartNewUI_Windows.SyncPos(X, Y);
 | |
|     }
 | |
| 
 | |
| }
 | |
| getroottable().rawdelete("TransformEqu_Obj");
 | |
| 
 | |
| function Lenheart_TransformEqu_Fun(obj) {
 | |
|     local RootTab = getroottable();
 | |
|     if (!RootTab.rawin("TransformEqu_Obj")) {
 | |
|         RootTab.rawset("TransformEqu_Obj", true);
 | |
|         LenheartNewUI_CreateWindow(TransformEquC, "变换装备飘小字", 0, 0, 0, 0, 0);
 | |
|     }
 | |
| }
 | |
| 
 | |
| getroottable()["LenheartFuncTab"].rawset("TransformEquFuncN", Lenheart_TransformEqu_Fun); |