誉名录

This commit is contained in:
2026-02-02 13:30:28 +08:00
parent e8f9aa171b
commit 21d18deac6
6 changed files with 844 additions and 12 deletions

View File

@@ -188,7 +188,29 @@ class Rindro_BaseToolClass {
return ani;
}
//高级绘制文字(带换行)
function L_sq_DrawCode_ExRN(str, x, y, rgba, mb, jc) {
local strarr = [];
if (str.find("\\r\\n") == null) {
L_sq_DrawCode(str, x, y, rgba, mb, jc);
} else {
local Bpos = 0;
while (true) {
local Npos = str.find("\\r\\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 + 4;
}
for (local z = 0; z< strarr.len(); z++) {
L_sq_DrawCode(strarr[z], x, y + (z * 14), rgba, mb, jc);
}
}
}
//初始化根表成员
function InitClass(Name) {
@@ -294,21 +316,28 @@ class Rindro_BaseToolClass {
function GetRarityColor(rarity) {
switch (rarity) {
case 0:
return sq_RGBA(255, 255, 255, 255);
return 0xFFFFFFFF;
case 1:
return sq_RGBA(104, 213, 237, 255);
return 0xFFEDD568;
case 2:
return sq_RGBA(179, 107, 254, 255);
return 0xFFFF6BB3;
case 3:
return sq_RGBA(255, 0, 240, 255);
return 0xFFF000FF;
case 4:
return sq_RGBA(255, 177, 0, 255);
return 0xFF00B1FF;
case 5:
return sq_RGBA(255, 102, 102, 255);
return 0xFF6666FF;
case 6:
return sq_RGBA(255, 50, 50, 255);
return 0xFF0055FF;
case 7:
return 0xFF9314FF;
case 8:
return 0xFF1CBC0C;
case 9:
return 0xFFACFF08;
}
}
}
//获取文字绘制长度
class LenheartTextClass {

View File

@@ -101,6 +101,15 @@ class R_Utils {
return null;
}
//获取APC编号的文件路径
function GetApcPath(ApcIndex) {
local ApcPathAddress = L_Sq_CallFunc(0x1219E80, "int", FFI_THISCALL, ["int", "int"], 0x1D90B60, ApcIndex);
if (ApcPathAddress) {
return NativePointer(ApcPathAddress).readUnicodeString();
}
return null;
}
//获取Lst文件的返回Array
function GetLstArr(Path, Header) {
local Arr = [];
@@ -382,6 +391,31 @@ Rindro_Haker.LoadHook(0x7B64BA, ["int", "int", "bool"],
});
getroottable().WorldDrawVirtualCharacterCallBackFunc <- {};
Rindro_Haker.LoadHook(0x80CE30, ["int", "int", "int", "int", "int", "int", "int"],
function(args) {
local Layer = args[0];
local XPos = args[1];
local YPos = args[2];
local InfoAddress = NativePointer(Rindro_Haker.CpuContext.ecx).add(0x208).readInt();
local WorldId = NativePointer(InfoAddress).add(0x4).readUShort();
local NameAddress = NativePointer(InfoAddress).add(0x10).readInt();
local Name = NativePointer(NameAddress).readUnicodeString();
foreach(Func in WorldDrawVirtualCharacterCallBackFunc) {
Func(Layer, XPos, YPos, WorldId, Name);
}
// if (Layer == 0 && WorldId == 6)
//注意 这里的坐标如果出现负数 说明 在角色在屏幕外 不需要绘制 同理 超过 卷轴最大值也是 (不过性能影响不大直接绘制就行 避免称谓比角色大 突然显示)
// printf("绘制层级: " + Layer + " XPos: " + XPos + " YPos: " + YPos + " 角色名: " + Name + " 世界ID: " + WorldId);
return null;
},
function(args) {
return null;
});
// Rindro_Haker.LoadHook(0x7FFA80, ["int", "int", "int", "int", "int", "int", "int", "int", "int", "int", "int", "void"],
// function(args) {
// if(args[0] == 0xA){
@@ -413,5 +447,4 @@ Rindro_Haker.LoadHook(0x7B64BA, ["int", "int", "bool"],
// NativePointer(0x8266F5).writeShort(0x9090)
// NativePointer(0x78FD37).writeShort(0x9090)
// NativePointer(0x78FD3B).writeShort(0x9090)
// NativePointer(0x78FD3B).writeShort(0x9090)