(1.6.7) EventSystem EpicLoot Reward + AutoDoor Fix
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
using HarmonyLib;
|
||||
using Splatform;
|
||||
using BepInEx.Bootstrap;
|
||||
using EpicLoot;
|
||||
using HarmonyLib;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
@@ -28,6 +29,15 @@ namespace MxValheim.EventSystem
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(RandEventSystem), nameof(RandEventSystem.Awake))]
|
||||
public static class EventRadiusPatch
|
||||
{
|
||||
static void Postfix(RandEventSystem __instance)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
[HarmonyPatch(typeof(RandEventSystem), nameof(RandEventSystem.StartRandomEvent))]
|
||||
public static class DebugRaidFrequency
|
||||
{
|
||||
@@ -45,8 +55,17 @@ namespace MxValheim.EventSystem
|
||||
{
|
||||
static void Prefix(RandEventSystem __instance)
|
||||
{
|
||||
__instance.m_eventIntervalMin = 10f;
|
||||
__instance.m_eventChance = 100f;
|
||||
if (MxValheimMod.Config_DebugRandomEventInterval.Value)
|
||||
{
|
||||
__instance.m_eventIntervalMin = 10f;
|
||||
__instance.m_eventChance = 100f;
|
||||
}
|
||||
RandomEvent activeEvent = RandEventSystem.instance.GetActiveEvent();
|
||||
if (activeEvent != null)
|
||||
{
|
||||
activeEvent.m_eventRange = 200f;
|
||||
activeEvent.m_duration = 10f;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -63,7 +82,6 @@ namespace MxValheim.EventSystem
|
||||
ZPackage pkg = new ZPackage();
|
||||
pkg.Write(currentRaid.m_name);
|
||||
pkg.Write($"{currentRaid.m_pos}");
|
||||
Debug.Log($"RPC_SetEvent: {currentRaid.m_pos}");
|
||||
kill = Watcher.eventKill;
|
||||
ZRoutedRpc.instance.InvokeRoutedRPC(0, "RPC_ServerRemoveEvent", pkg);
|
||||
|
||||
@@ -88,6 +106,12 @@ namespace MxValheim.EventSystem
|
||||
{
|
||||
Reward.GiveItemRandom(Reward.GetRewardPrefab(Profiles.serverLevel, "metal"), rand.Next(5, 20));
|
||||
}
|
||||
if (Chainloader.PluginInfos.ContainsKey("randyknapp.mods.epicloot"))
|
||||
{
|
||||
Reward.GiveEpicLootLowMats();
|
||||
Reward.GiveEpicLootEssence();
|
||||
Reward.GiveEpicLootRune();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -113,7 +137,7 @@ namespace MxValheim.EventSystem
|
||||
if (RandEventSystem.instance != null && RandEventSystem.instance.GetActiveEvent() != null)
|
||||
{
|
||||
__instance.m_eventName.text = "";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
using System;
|
||||
using EpicLoot;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using System.Threading.Tasks;
|
||||
using UnityEngine;
|
||||
@@ -34,9 +36,9 @@ namespace MxValheim.EventSystem
|
||||
string[] metalList = { "CopperOre", "TinOre", "IronScrap", "SilverOre", "BlackMetalScrap", "FlametalOreNew" };
|
||||
|
||||
System.Random rng = new System.Random();
|
||||
int foodTier = rng.Next(1, foodList.Length);
|
||||
int healTier = rng.Next(1, healList.Length);
|
||||
int metalTier = rng.Next(1, metalList.Length);
|
||||
int foodTier = rng.Next(0, foodList.Length - 1);
|
||||
int healTier = rng.Next(0, healList.Length - 1);
|
||||
int metalTier = rng.Next(0, metalList.Length - 1);
|
||||
|
||||
if (type == "food") return foodList[foodTier];
|
||||
if (type == "heal") return healList[healTier];
|
||||
@@ -44,6 +46,85 @@ namespace MxValheim.EventSystem
|
||||
return "Wood";
|
||||
}
|
||||
|
||||
public static void GiveEpicLootLowMats()
|
||||
{
|
||||
System.Random rand = new System.Random();
|
||||
|
||||
int qty = rand.Next(5,10);
|
||||
|
||||
string[] rarity = { "Magic", "Rare", "Epic", "Legendary", "Mythic" };
|
||||
string[] type = { "Dust", "Shard", "Fragment" };
|
||||
|
||||
string itemName = $"{type[rand.Next(0, type.Length - 1)]}{rarity[rand.Next(0, rarity.Length - 1)]}";
|
||||
|
||||
Player player = Player.m_localPlayer;
|
||||
if (player == null) return;
|
||||
|
||||
GameObject prefab = ObjectDB.instance.GetItemPrefab(itemName);
|
||||
if (prefab != null)
|
||||
{
|
||||
player.GetInventory().AddItem(itemName, qty, 1, 0, 0, "");
|
||||
|
||||
player.Message(MessageHud.MessageType.TopLeft, $"Received {qty}x {itemName}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"Item {itemName} not found in ObjectDB!");
|
||||
}
|
||||
}
|
||||
|
||||
public static void GiveEpicLootEssence()
|
||||
{
|
||||
System.Random rand = new System.Random();
|
||||
|
||||
int qty = rand.Next(1, 5);
|
||||
|
||||
string[] rarity = { "Magic", "Rare", "Epic", "Legendary", "Mythic" };
|
||||
|
||||
string itemName = $"Essence{rarity[rand.Next(0, rarity.Length - 1)]}";
|
||||
|
||||
Player player = Player.m_localPlayer;
|
||||
if (player == null) return;
|
||||
|
||||
GameObject prefab = ObjectDB.instance.GetItemPrefab(itemName);
|
||||
if (prefab != null)
|
||||
{
|
||||
player.GetInventory().AddItem(itemName, qty, 1, 0, 0, "");
|
||||
|
||||
player.Message(MessageHud.MessageType.TopLeft, $"Received {qty}x {itemName}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"Item {itemName} not found in ObjectDB!");
|
||||
}
|
||||
}
|
||||
|
||||
public static void GiveEpicLootRune()
|
||||
{
|
||||
System.Random rand = new System.Random();
|
||||
|
||||
int qty = 1;
|
||||
|
||||
string[] rarity = { "Magic", "Rare", "Epic" };
|
||||
|
||||
string itemName = $"Runestone{rarity[rand.Next(0, rarity.Length - 1)]}";
|
||||
|
||||
Player player = Player.m_localPlayer;
|
||||
if (player == null) return;
|
||||
|
||||
GameObject prefab = ObjectDB.instance.GetItemPrefab(itemName);
|
||||
if (prefab != null)
|
||||
{
|
||||
player.GetInventory().AddItem(itemName, qty, 1, 0, 0, "");
|
||||
|
||||
player.Message(MessageHud.MessageType.TopLeft, $"Received {qty}x {itemName}");
|
||||
}
|
||||
else
|
||||
{
|
||||
Debug.LogWarning($"Item {itemName} not found in ObjectDB!");
|
||||
}
|
||||
}
|
||||
|
||||
public static void GiveItemRandom(string itemName, int qty)
|
||||
{
|
||||
System.Random rng = new System.Random();
|
||||
|
||||
@@ -7,7 +7,6 @@ using MxValheim.KillFeed;
|
||||
using MxValheim.Patch;
|
||||
using MxValheim.Patch.HUD;
|
||||
using Newtonsoft.Json;
|
||||
using Splatform;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
@@ -34,16 +33,10 @@ public class MxValheimMod : BaseUnityPlugin
|
||||
|
||||
private const string ModGUID = "ovh.mxdev.mxvalheim";
|
||||
private const string ModName = "MxValheim";
|
||||
private const string ModVersion = "1.6.6";
|
||||
private const string ModVersion = "1.6.7";
|
||||
|
||||
public static ConfigEntry<bool> Config_Locked;
|
||||
public static ConfigEntry<int> Config_OreMultiplier;
|
||||
public static ConfigEntry<float> Config_rangeMultiplier;
|
||||
public static ConfigEntry<bool> Config_DebugRandomEventInterval;
|
||||
public static ConfigEntry<float> Config_bowDrawSpeedBonusPerLevel;
|
||||
public static ConfigEntry<bool> Config_rainDamage;
|
||||
public static ConfigEntry<float> Config_boatSpeed;
|
||||
public static ConfigEntry<bool> Config_autoDoorCloseEnabled;
|
||||
public static ConfigEntry<float> Config_autoDoorClose;
|
||||
|
||||
public static string modPath = Path.Combine(Paths.PluginPath, "MxValheim");
|
||||
public static string internalConfigsPath = Path.Combine(modPath, "Configs");
|
||||
@@ -93,6 +86,8 @@ public class MxValheimMod : BaseUnityPlugin
|
||||
public static float _uniqueTimer = 60.0f;
|
||||
public static string eventName;
|
||||
|
||||
public static float eventTimer = 0f;
|
||||
|
||||
public class ActiveEventData
|
||||
{
|
||||
public string Name;
|
||||
@@ -113,19 +108,14 @@ public class MxValheimMod : BaseUnityPlugin
|
||||
{
|
||||
Instance = this;
|
||||
|
||||
Config_OreMultiplier = Config.Bind("General", "OreMultiplier", 3, "How many items should drop for every 1 ore/scrap found.");
|
||||
Config_rangeMultiplier = Config.Bind("General", "CraftingRangeMultiplier", 2.0f, "Multiplier for the workbench build/crafting range. Default is 2x.");
|
||||
Config_DebugRandomEventInterval = Config.Bind("Debug", "DebugRandomEventInterval", false, "Event are triggered really often, to debug my EventSystem logic.");
|
||||
Config_bowDrawSpeedBonusPerLevel = Config.Bind("General", "BowDrawSpeedBonusPercentPerLevel", 1.0f, "Shorten the bow draw speed by this percent for every bow upgrade level.");
|
||||
Config_rainDamage = Config.Bind("General", "RainDamage", true, "Set to true to stop rain damage, false to return to vanilla behavior.");
|
||||
Config_boatSpeed = Config.Bind("General", "BoatSpeedMultiplier", 2.0f, "Your boat/raft will move without wind at a speed multiplied by this value.");
|
||||
Config_autoDoorCloseEnabled = Config.Bind("General", "AutoDoorCloseEnabled", true, "Your doors will auto close if enabled. See AutoDoorCloseTimer for the desired time.");
|
||||
Config_autoDoorClose = Config.Bind("General", "AutoDoorCloseTimer", 5.0f, "Your doors will auto close after the specified timer duration.");
|
||||
|
||||
LoadLocalization();
|
||||
LoadJsonConfig();
|
||||
LoadDoorConfig();
|
||||
|
||||
_doorTimer = MxValheimMod.Config_autoDoorClose.Value;
|
||||
_doorTimer = 2;
|
||||
|
||||
//PrefabManager.OnVanillaPrefabsAvailable += InitCustomEnemies;
|
||||
|
||||
@@ -184,10 +174,13 @@ public class MxValheimMod : BaseUnityPlugin
|
||||
ZRoutedRpc.instance.Register<string, string, string, string, int>("RPC_MxKillMsg",
|
||||
new RoutedMethod<string, string, string, string, int>.Method(kfp.OnReceiveKillMsg));
|
||||
|
||||
ZRoutedRpc.instance.Register<ZPackage>("RPC_ServerAddDoorToQueue", Watcher.RegisterEvent);
|
||||
|
||||
ZRoutedRpc.instance.Register<ZPackage>("RPC_ServerRegisterEvent", Watcher.RegisterEvent);
|
||||
ZRoutedRpc.instance.Register<ZPackage>("RPC_ServerGetEventKill", Watcher.GetEventKill);
|
||||
ZRoutedRpc.instance.Register<ZPackage>("RPC_ServerSetEventKill", Watcher.SetEventKill);
|
||||
ZRoutedRpc.instance.Register<ZPackage>("RPC_ServerRemoveEvent", Watcher.RemoveEvent);
|
||||
|
||||
ZRoutedRpc.instance.Register<int>("RPC_ServerRegisterEventKill", Profiles.ServerSetLevel);
|
||||
ZRoutedRpc.instance.Register<string, string>("RPC_ServerCreateUser", Profiles.ServerReceiveCreateUser);
|
||||
ZRoutedRpc.instance.Register<string>("RPC_RequestProfile", Profiles.ServerHandleProfileRequest);
|
||||
@@ -261,7 +254,7 @@ public class MxValheimMod : BaseUnityPlugin
|
||||
if (_doorTimer <= 0)
|
||||
{
|
||||
dpatch.CloseNextDoor(_doorQueueDoor.Dequeue(), _doorQueueNview.Dequeue(), _doorQueueName.Dequeue());
|
||||
_doorTimer = MxValheimMod.Config_autoDoorClose.Value;
|
||||
_doorTimer = 2;
|
||||
}
|
||||
}
|
||||
// Door Logic
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||
<RootNamespace>MxValheim</RootNamespace>
|
||||
<AssemblyName>MxValheim</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion>
|
||||
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
|
||||
<LangVersion>12.0</LangVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<Deterministic>true</Deterministic>
|
||||
@@ -52,6 +52,9 @@
|
||||
<Reference Include="BepInEx">
|
||||
<HintPath>E:\SteamLibrary\steamapps\common\Valheim\BepInEx\core\BepInEx.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="EpicLoot">
|
||||
<HintPath>E:\SteamLibrary\steamapps\common\Valheim\BepInEx\plugins\EpicLoot\EpicLoot.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="gui_framework">
|
||||
<HintPath>E:\SteamLibrary\steamapps\common\Valheim\Valheim_Data\Managed\gui_framework.dll</HintPath>
|
||||
</Reference>
|
||||
|
||||
@@ -17,7 +17,7 @@ namespace MxValheim.Patch
|
||||
if (rangeField.FieldExists())
|
||||
{
|
||||
float currentRange = rangeField.GetValue<float>();
|
||||
rangeField.SetValue(currentRange * MxValheimMod.Config_rangeMultiplier.Value);
|
||||
rangeField.SetValue(currentRange * 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ namespace MxValheim.Patch
|
||||
[HarmonyPatch(typeof(Door), nameof(Door.Interact))]
|
||||
public static class DoorTracker
|
||||
{
|
||||
static void Postfix(Door __instance, Humanoid character, bool hold, bool alt, ZNetView ___m_nview)
|
||||
static void Postfix(Door __instance)
|
||||
{
|
||||
ZNetView nview = __instance.GetComponent<ZNetView>();
|
||||
if (nview != null && nview.IsValid())
|
||||
@@ -32,36 +32,42 @@ namespace MxValheim.Patch
|
||||
if (MxValheimMod.CachedConfig?.ignoreList != null)
|
||||
if (MxValheimMod.CachedConfig.ignoreList.Contains(prefabName)) return;
|
||||
|
||||
if (hold || alt || ___m_nview == null || !___m_nview.IsValid()) return;
|
||||
nview.ClaimOwnership();
|
||||
|
||||
// Get state: 0 is closed
|
||||
int state = ___m_nview.GetZDO().GetInt("state");
|
||||
int state = nview.GetZDO().GetInt("state");
|
||||
|
||||
if (state == 0) return;
|
||||
if (state == 0) return;
|
||||
|
||||
ZPackage pkg = new ZPackage();
|
||||
pkg.Write(nview);
|
||||
pkg.Write(__instance);
|
||||
pkg.Write(prefabName);
|
||||
|
||||
lock (_doorQueueNview)
|
||||
{
|
||||
Debug.Log($"AutoDoor:Door.Interact Adding \"{prefabName}\" to queue.");
|
||||
Debug.Log($"AutoDoor: Adding \"{prefabName}\" to queue.");
|
||||
_doorQueueNview.Enqueue(nview);
|
||||
_doorQueueDoor.Enqueue(__instance);
|
||||
_doorQueueName.Enqueue(prefabName);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void CloseNextDoor(Door door, ZNetView nview, string doorName)
|
||||
{
|
||||
if (door != null && nview != null && nview.IsValid())
|
||||
{
|
||||
nview.ClaimOwnership();
|
||||
if (nview.GetZDO().GetInt("state") != 0)
|
||||
{
|
||||
Debug.Log($"AutoDoor:CloseNextDoor Closing door \"{doorName}\".");
|
||||
Debug.Log($"AutoDoor: Closing door \"{doorName}\".");
|
||||
ZDO zd0 = nview.GetZDO();
|
||||
zd0.Set("state", 0);
|
||||
} else
|
||||
{
|
||||
Debug.Log($"AutoDoor:CloseNextDoor Door \"{doorName}\" was already closed.");
|
||||
Debug.Log($"AutoDoor: Door \"{doorName}\" was already closed.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,8 +10,6 @@ namespace MxValheim.Patch
|
||||
{
|
||||
static void Postfix(WearNTear __instance, ref bool __result)
|
||||
{
|
||||
if (!MxValheimMod.Config_rainDamage.Value) return;
|
||||
|
||||
__result = true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user