92 lines
3.2 KiB
C#
92 lines
3.2 KiB
C#
using HarmonyLib;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using System.Reflection.Emit;
|
|
using System.Reflection;
|
|
using DunGenPlus.Managers;
|
|
using ScarletMansion.GamePatch.Components;
|
|
using ScarletMansion.Configs;
|
|
|
|
namespace ScarletMansion.GamePatch {
|
|
|
|
public class LoadAssetsIntoLevelPatch {
|
|
|
|
public static void AddItemsLocal(RoundManager roundManager){
|
|
if (DunGenPlus.API.IsDevDebugModeActive()) return;
|
|
|
|
foreach(var item in Assets.scrapItems){
|
|
if (item.SpawnsOnMap) {
|
|
var config = item.GetConfigScrapItemEntry();
|
|
if (config.enabled && config.spawnWeight > 0 && !config.spawnOnAllMoons) {
|
|
var entry = item.GetItemRarity();
|
|
ScrapItemManager.AddItem(entry);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void AddItemsGlobal(RoundManager roundManager){
|
|
if (DunGenPlus.API.IsDevDebugModeActive()) return;
|
|
|
|
foreach(var item in Assets.scrapItems){
|
|
if (item.SpawnsOnMap) {
|
|
var config = item.GetConfigScrapItemEntry();
|
|
if (config.enabled && config.spawnWeight > 0 && config.spawnOnAllMoons) {
|
|
var entry = item.GetItemRarity();
|
|
ScrapItemManager.AddItem(entry);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public static void AddEnemiesLocal(RoundManager roundManager) {
|
|
if (DunGenPlus.API.IsDevDebugModeActive()) return;
|
|
|
|
var currentEnemies = roundManager.currentLevel.Enemies;
|
|
|
|
void AddEnemy(Assets.Enemy enemy, string sourceEnemyName, string targetEnemyName, ConfigSpawnableEnemy enemyConfig) {
|
|
const int minBaseWeight = 10;
|
|
|
|
if (!enemyConfig.enabled) {
|
|
Plugin.logger.LogDebug($"{sourceEnemyName} is disabled. Not loading onto moon.");
|
|
return;
|
|
}
|
|
|
|
if (enemy != null) {
|
|
var target = currentEnemies
|
|
.Where(c => c.enemyType.name.ToLowerInvariant() == targetEnemyName)
|
|
.FirstOrDefault();
|
|
|
|
if (target == null){
|
|
Plugin.logger.LogDebug($"No enemy {targetEnemyName} in level, using default rarity of {minBaseWeight}.");
|
|
|
|
var entry = enemy.GetItemEntry(enemyConfig.spawnWeightBase + minBaseWeight);
|
|
EnemyManager.AddEnemy(entry);
|
|
|
|
} else {
|
|
Plugin.logger.LogError($"{sourceEnemyName}: {enemyConfig.spawnWeightStealPercentage}");
|
|
var entryRarity = Mathf.RoundToInt(target.rarity * enemyConfig.spawnWeightStealPercentage);
|
|
|
|
var prevEntry = new SpawnableEnemyWithRarity();
|
|
prevEntry.enemyType = target.enemyType;
|
|
prevEntry.rarity = target.rarity - entryRarity;
|
|
|
|
var newEntry = enemy.GetItemEntry(enemyConfig.spawnWeightBase + entryRarity);
|
|
|
|
EnemyManager.AddEnemy(newEntry);
|
|
EnemyManager.AddEnemy(prevEntry);
|
|
}
|
|
} else {
|
|
Plugin.logger.LogError($"Failed to load custom enemy {sourceEnemyName} as their reference is missing");
|
|
}
|
|
}
|
|
|
|
AddEnemy(Assets.knight, "knight", "springman", ConfigMain.Instance.knightEnemyValue);
|
|
AddEnemy(Assets.maid, "maid", "butler", ConfigMain.Instance.maidEnemyValue);
|
|
|
|
ScarletBedroom.CreateRandomEnemyList(currentEnemies);
|
|
}
|
|
|
|
}
|
|
}
|