134 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
		
		
			
		
	
	
			134 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
|  | /* | ||
|  | 文件名:DamagePerSecond.nut | ||
|  | 路径:Project/DamagePerSecond/DamagePerSecond.nut | ||
|  | 创建日期:2024-08-31	10:32 | ||
|  | 文件用途:秒伤统计 | ||
|  | */ | ||
|  | 
 | ||
|  | class DamagePerSecondC extends LenheartNewUI_Windows { | ||
|  |     //调试模式 | ||
|  |     // DeBugMode = true; | ||
|  | 
 | ||
|  |     //不是窗口 | ||
|  |     NoWindow = true; | ||
|  | 
 | ||
|  |     //是否可见 | ||
|  |     // Visible = false; | ||
|  | 
 | ||
|  |     //伤害统计集合 | ||
|  |     DamagePerSecondList = null; | ||
|  | 
 | ||
|  |     //总伤害统计 | ||
|  |     TotalDamage = longlong(0); | ||
|  | 
 | ||
|  |     function Sq_PushDamageData(ObjAddress, MySelfAddress, Value) { | ||
|  |         local Object = null; | ||
|  |         //我自己的伤害 | ||
|  |         if (ObjAddress == 0 || ObjAddress == MySelfAddress) { | ||
|  |             Object = MySelfAddress; | ||
|  |         } else { | ||
|  |             //先判断是否是角色 | ||
|  |             if (L_Sq_GetObjectIsCharacter(ObjAddress)) { | ||
|  |                 Object = ObjAddress; | ||
|  |             } | ||
|  |         } | ||
|  | 
 | ||
|  |         if (Object) { | ||
|  |             if (DamagePerSecondList.rawin(Object)) { | ||
|  |                 //如果存在就相加 | ||
|  |                 DamagePerSecondList[Object].Damage = DamagePerSecondList[Object].Damage + longlong(Value); | ||
|  |             } else { | ||
|  |                 //不存在就创建 | ||
|  |                 DamagePerSecondList.rawset(Object, { | ||
|  |                     Damage = longlong(Value), | ||
|  |                     Name = L_Sq_GetObjectNameByAddress(Object) | ||
|  |                 }); | ||
|  |             } | ||
|  |             TotalDamage += longlong(Value); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH) { | ||
|  |         Childrens = []; | ||
|  |         DamagePerSecondList = {}; | ||
|  | 
 | ||
|  |         //注册控件 | ||
|  |         RegisterWidget(); | ||
|  | 
 | ||
|  |         LenheartNewUI_Windows.constructor(gObjectId, gX, gY, gWidth, gHeight, gTitleH); | ||
|  |         PushDamageFontFuncTab.rawset("DamagePerSecondCFunc", Sq_PushDamageData.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 DrawDamageBar(Pos, DamageObj) { | ||
|  |         local Rate = DamageObj.Damage / TotalDamage; | ||
|  |         local DamageStr = DamageObj.Damage.GetFormat("%0.2f"); | ||
|  |         local ShowStr = DamageStr + ", " + format("%.2f", Rate.tofloat() * 100) + "%"; | ||
|  | 
 | ||
|  |         //绘制底 | ||
|  |         L_sq_DrawImg("hud/dps.img", 3, X + 8, Y + 20 + (Pos * 22)); | ||
|  | 
 | ||
|  |         setClip(X + 8, Y + 20 + (Pos * 22), X + 8 + (160.0 * Rate.tofloat()).tointeger(), Y + 20 + (Pos * 22) + 18); | ||
|  |         L_sq_DrawImg("hud/dps.img", 4 + (Pos % 4), X + 8, Y + 20 + (Pos * 22)); | ||
|  |         releaseClip(); //裁切结束 | ||
|  | 
 | ||
|  |         L_sq_DrawCode(DamageObj.Name, X + 12, Y + 23 + (Pos * 22), sq_RGBA(230, 200, 155, 255), 0, 1); | ||
|  |         L_sq_DrawCode(ShowStr, X + 168 - LenheartTextClass.GetStringLength(ShowStr), Y + 23 + (Pos * 22), sq_RGBA(230, 200, 155, 255), 0, 1); | ||
|  |     } | ||
|  | 
 | ||
|  |     //绘制主界面 | ||
|  |     function DrawMain(obj) { | ||
|  |         if (DamagePerSecondList.len() == 0) return; | ||
|  |         L_sq_DrawImg("hud/dps.img", 0, X, Y); | ||
|  |         for (local i = 0; i<(DamagePerSecondList.len() - 1); i++) { | ||
|  |             L_sq_DrawImg("hud/dps.img", 2, X, Y + 41 + (22 * i)); | ||
|  |         } | ||
|  |         L_sq_DrawImg("hud/dps.img", 1, X, Y + 41 + (22 * (DamagePerSecondList.len() - 1))); | ||
|  | 
 | ||
|  |         local i = 0; | ||
|  |         foreach(Object, DamageObj in DamagePerSecondList) { | ||
|  |             DrawDamageBar(i, DamageObj); | ||
|  |             i++; | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  |     function Show(obj) { | ||
|  |         DrawMain(obj); | ||
|  |         LenheartNewUI_Windows.Show(obj); | ||
|  | 
 | ||
|  |     } | ||
|  | 
 | ||
|  |     //逻辑入口 | ||
|  |     function Proc(obj) { | ||
|  |         LenheartNewUI_Windows.SyncPos(X, Y); | ||
|  | 
 | ||
|  |         Height = 41 + (22 * (DamagePerSecondList.len() - 1)) + 7; | ||
|  |         TitleH = Height; | ||
|  | 
 | ||
|  |         if (sq_GetCurrentModuleType() == 1 || sq_GetCurrentModuleType() == 2) { | ||
|  |             DamagePerSecondList = {}; | ||
|  |             TotalDamage = longlong(0); | ||
|  |         } | ||
|  |     } | ||
|  | 
 | ||
|  | } | ||
|  | getroottable().rawdelete("DamagePerSecond_Obj"); | ||
|  | 
 | ||
|  | function Lenheart_DamagePerSecond_Fun(obj) { | ||
|  |     local RootTab = getroottable(); | ||
|  |     if (!RootTab.rawin("DamagePerSecond_Obj")) { | ||
|  |         RootTab.rawset("DamagePerSecond_Obj", true); | ||
|  |         LenheartNewUI_CreateWindow(DamagePerSecondC, "秒伤统计窗口", 0, 160, 178, 150, 28); | ||
|  |     } | ||
|  | } | ||
|  | 
 | ||
|  | getroottable()["LenheartFuncTab"].rawset("DamagePerSecondFuncN", Lenheart_DamagePerSecond_Fun); |