106 lines
3.3 KiB
Plaintext
106 lines
3.3 KiB
Plaintext
/*
|
|
文件名:MonsterEx.nut
|
|
路径:Project/MonsterEx/MonsterEx.nut
|
|
创建日期:2025-02-07 11:46
|
|
文件用途:怪物扩展
|
|
*/
|
|
Rindro_Monster_Ex_Name_Map <- {};
|
|
|
|
function L_Rindro_MonsterEXControl_Face(ObjectAddress, Xpos, Ypos) {
|
|
|
|
if (getroottable().rawin("MonsterFaceImage")) {
|
|
local ret = MonsterFaceImage(L_Sq_ObjectAddressToSqrObject(ObjectAddress, "IRDMonster", 0));
|
|
if (ret) {
|
|
L_sq_DrawImg(ret.img, ret.index, Xpos, Ypos);
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
function L_Rindro_MonsterEXControl_Race(ObjectAddress, Xpos, Ypos) {
|
|
local v4 = L_sq_RA(ObjectAddress + 88);
|
|
local Count = (L_sq_RA(ObjectAddress + 92) - v4) >> 2;
|
|
local RaceArr = [];
|
|
for (local i = 0; i< Count; i++) {
|
|
RaceArr.append(L_sq_RA(v4 + 4 * i));
|
|
}
|
|
//调用种族拓展
|
|
local Monobj = L_Sq_ObjectAddressToSqrObject(L_sq_RA(ObjectAddress + 0x8), "IRDMonster", 0)
|
|
if (getroottable().rawin("MonsterCategory")) {
|
|
local Ret = MonsterCategory(Monobj, RaceArr, Xpos, Ypos);
|
|
if (Ret) RaceArr = Ret;
|
|
}
|
|
local XposBuffer = Xpos;
|
|
foreach(Pos, Index in RaceArr) {
|
|
if (Pos > 0) XposBuffer += 33;
|
|
L_sq_DrawImg("common/etc/category.img", Index, XposBuffer, Ypos);
|
|
}
|
|
|
|
if (!Monobj.isDead() && Rindro_Monster_Ex_Name_Map.rawin(sq_GetObjectId(Monobj))) {
|
|
local Color = sq_RGBA(255, 255, 255, 255);
|
|
if(sq_GetMonsterRank(Monobj) == 1) Color = sq_RGBA(179, 107, 255, 255);
|
|
if(sq_GetMonsterRank(Monobj) == 3 || sq_GetMonsterRank(Monobj) == 5) Color = sq_RGBA(255, 0, 240 255);
|
|
L_sq_DrawCode("Lv" + sq_GetMonsterLevel(Monobj) + " " + Rindro_Monster_Ex_Name_Map[sq_GetObjectId(Monobj)], XposBuffer + (RaceArr.len() > 0 ? 33 : 0) + 2, Ypos + 3, Color, 0, 1);
|
|
return -5000;
|
|
}
|
|
return XposBuffer + (RaceArr.len() > 0 ? 33 : 0);
|
|
}
|
|
|
|
|
|
//获取怪物等级
|
|
function sq_GetMonsterLevel(Object) {
|
|
return L_Sq_GetObjectDeInfo(L_Sq_GetObjectAddress(Object), 0x1A4C, true);
|
|
}
|
|
//设置怪物等级
|
|
function sq_SetMonsterLevel(Object, Level) {
|
|
L_Sq_SetObjectDeInfo(L_Sq_GetObjectAddress(Object), 0x1A4C, true, Level);
|
|
}
|
|
//获取怪物名字
|
|
function sq_GetMonsterName(Object) {
|
|
return L_Sq_GetObjectName(Object);
|
|
}
|
|
//设置怪物名字
|
|
function sq_SetMonsterName(Object, Name) {
|
|
L_Sq_DeleteObjectName(Object);
|
|
Rindro_Monster_Ex_Name_Map.rawset(sq_GetObjectId(Object), Name);
|
|
}
|
|
//获取怪物阶级
|
|
function sq_GetMonsterRank(Object) {
|
|
if (sq_IsNamed(Object)) return 4;
|
|
switch (L_sq_RA(L_Sq_GetObjectAddress(Object) + 0x3658)) {
|
|
case 0:
|
|
case 4:
|
|
case 5:
|
|
return 0;
|
|
case 1:
|
|
case 6:
|
|
return 1;
|
|
case 2:
|
|
case 7:
|
|
return 3;
|
|
case 3:
|
|
case 8:
|
|
return 5;
|
|
}
|
|
return -1;
|
|
}
|
|
//设置怪物阶级
|
|
function sq_SetMonsterRank(Object, Type) {
|
|
L_sq_WA(L_Sq_GetObjectAddress(Object) + 0x3658, Type);
|
|
}
|
|
|
|
|
|
|
|
//怪物头像回调 返回空 或者不返回则为不修改 返回 {img,index} 则为修改
|
|
function MonsterFaceImage(obj) {
|
|
|
|
}
|
|
|
|
//怪物种族回调 返回空 或者不返回则为不修改 返回修改后的RaceArr数组 则为修改
|
|
function MonsterCategory(obj, RaceArr, Xpos, Ypos) {
|
|
for (local i = 0; i< 14; i++) {
|
|
RaceArr.append(i + 1);
|
|
}
|
|
return RaceArr;
|
|
} |