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; | ||
|  | } |