using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("BearTamingMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("BearTamingMod")]
[assembly: AssemblyCopyright("Copyright © 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("54ea82ab-0379-48cd-b037-c202b4814509")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace BearTamingMod;
[BepInPlugin("com.mintmango.beartaming", "Bear Taming Mod", "2.3.1")]
public class BearTamingMod : BaseUnityPlugin
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static ConsoleEvent <>9__37_0;
public static ConsoleEvent <>9__37_1;
public static ConsoleEvent <>9__37_4;
public static ConsoleEvent <>9__37_5;
internal void <RegisterConsoleCommandsDirectly>b__37_0(ConsoleEventArgs args)
{
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)Player.m_localPlayer == (Object)null)
{
args.Context.AddString("Ошибка: игрок не найден!");
return;
}
try
{
Vector3 val = ((Component)Player.m_localPlayer).transform.position + ((Component)Player.m_localPlayer).transform.forward * 3f + Vector3.up;
GameObject prefab = ZNetScene.instance.GetPrefab("Bjorn");
if ((Object)(object)prefab != (Object)null)
{
GameObject bear = Object.Instantiate<GameObject>(prefab, val, Quaternion.identity);
MakeBabyBear(bear);
args.Context.AddString("Медвежонок создан!");
}
else
{
args.Context.AddString("Ошибка: префаб медведя не найден!");
}
}
catch (Exception ex)
{
Debug.LogError((object)$"Ошибка создания медвежонка: {ex}");
args.Context.AddString("Ошибка: " + ex.Message);
}
}
internal void <RegisterConsoleCommandsDirectly>b__37_1(ConsoleEventArgs args)
{
List<MonsterAI> list = FindAllBears();
int num = 0;
int num2 = 0;
int num3 = 0;
int num4 = 0;
int num5 = 0;
int num6 = 0;
foreach (MonsterAI item in list)
{
if ((Object)(object)item == (Object)null)
{
continue;
}
num++;
bool flag = IsBearTamed(item);
bool flag2 = IsBabyBear(((Component)item).gameObject);
if (flag)
{
num2++;
if (flag2)
{
num3++;
num5++;
}
else if (BearBreedingSystem.CanBreed(item))
{
num6++;
}
}
else
{
num4++;
}
}
args.Context.AddString($"Всего: {num}, Приручено: {num2}, Диких: {num4}");
args.Context.AddString($"Медвежат: {num3} (растут: {num5})");
args.Context.AddString($"Взрослых готовых к размножению: {num6}");
int num7 = 1;
foreach (MonsterAI item2 in list)
{
if ((Object)(object)item2 != (Object)null && IsBabyBear(((Component)item2).gameObject))
{
ZNetView component = ((Component)item2).GetComponent<ZNetView>();
if ((Object)(object)component != (Object)null && component.IsValid())
{
float @float = component.GetZDO().GetFloat("ageInDays", 0f);
float float2 = component.GetZDO().GetFloat("currentSize", 0.5f);
float float3 = component.GetZDO().GetFloat("growthProgress", 0f);
long @long = component.GetZDO().GetLong("bornTime", 0L);
double num8 = (((Object)(object)ZNet.instance != (Object)null) ? ZNet.instance.GetTimeSeconds() : 0.0);
double num9 = ((@long > 0) ? ((num8 - (double)@long) / 1800.0) : 0.0);
double num10 = Math.Max(0.0, (double)GrowthDays.Value - num9);
float num11 = float3 * 100f;
args.Context.AddString($"Медвежонок {num7}: {num9:F2}/{GrowthDays.Value} дн. ({num11:F1}%) Размер: {float2:F2}");
num7++;
}
}
}
if (num3 == 0)
{
args.Context.AddString("Нет растущих медвежат");
}
}
internal void <RegisterConsoleCommandsDirectly>b__37_4(ConsoleEventArgs args)
{
BearBreedingSystem.UpdateBreeding();
args.Context.AddString("Система размножения обновлена!");
}
internal void <RegisterConsoleCommandsDirectly>b__37_5(ConsoleEventArgs args)
{
args.Context.AddString($"Система инициализирована: {_isInitialized}");
args.Context.AddString($"ZNet доступен: {(Object)(object)ZNet.instance != (Object)null}");
args.Context.AddString($"Серверный режим: {(Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer()}");
List<MonsterAI> list = FindAllBears();
args.Context.AddString($"Всего медведей в мире: {list.Count}");
int num = 0;
foreach (MonsterAI item in list)
{
if ((Object)(object)item != (Object)null && IsBabyBear(((Component)item).gameObject))
{
num++;
ZNetView component = ((Component)item).GetComponent<ZNetView>();
if ((Object)(object)component != (Object)null && component.IsValid())
{
double num2 = (((Object)(object)ZNet.instance != (Object)null) ? ZNet.instance.GetTimeSeconds() : 0.0);
long @long = component.GetZDO().GetLong("bornTime", 0L);
float num3 = ((@long > 0) ? ((float)((num2 - (double)@long) / 1800.0)) : 0f);
float @float = component.GetZDO().GetFloat("currentSize", 0.5f);
float float2 = component.GetZDO().GetFloat("growthProgress", 0f);
args.Context.AddString($"Медвежонок: возраст {num3:F2} дн., размер {@float:F2}, прогресс {float2:P0}");
}
}
}
args.Context.AddString($"Активных медвежат: {num}");
}
}
[CompilerGenerated]
private sealed class <BreedingUpdateRoutine>d__26 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public BearTamingMod <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <BreedingUpdateRoutine>d__26(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
break;
case 1:
<>1__state = -1;
if (_isInitialized && (Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer())
{
BearBreedingSystem.UpdateBreeding();
}
break;
}
<>2__current = (object)new WaitForSeconds(60f);
<>1__state = 1;
return true;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <GrowthUpdateRoutine>d__25 : IEnumerator<object>, IDisposable, IEnumerator
{
private int <>1__state;
private object <>2__current;
public BearTamingMod <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <GrowthUpdateRoutine>d__25(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
break;
case 1:
<>1__state = -1;
if (_isInitialized && (Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer())
{
<>4__this.UpdateAllBearGrowth();
}
break;
}
<>2__current = (object)new WaitForSeconds(30f);
<>1__state = 1;
return true;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
private readonly Harmony _harmony = new Harmony("com.mintmango.beartaming");
public static ConfigEntry<float> TameTime;
public static ConfigEntry<float> FedDuration;
public static ConfigEntry<string> ConsumableItems;
public static ConfigEntry<float> GrowthDays;
public static ConfigEntry<float> BreedChance;
public static ConfigEntry<float> BreedCooldownDays;
private static bool _isInitialized;
private Coroutine _growthCoroutine;
private Coroutine _breedingCoroutine;
public const string ZDO_BABY = "isBaby";
public const string ZDO_BORN_TIME = "bornTime";
public const string ZDO_AGE_DAYS = "ageInDays";
public const string ZDO_CURRENT_SIZE = "currentSize";
public const string ZDO_GROWTH_COMPLETE = "growthComplete";
public const string ZDO_GROWTH_PROGRESS = "growthProgress";
public const string ZDO_NO_DROP = "noDrop";
public const string ZDO_LAST_BREED_TIME = "lastBreedTime";
public static BearTamingMod Instance { get; private set; }
private void Awake()
{
Instance = this;
TameTime = ((BaseUnityPlugin)this).Config.Bind<float>("General", "TameTime", 1200f, "Время приручения медведя в секундах");
FedDuration = ((BaseUnityPlugin)this).Config.Bind<float>("General", "FedDuration", 400f, "Время сытости медведя в секундах");
ConsumableItems = ((BaseUnityPlugin)this).Config.Bind<string>("General", "ConsumableItems", "Honey", "Предметы для приручения (через точку с запятой)");
GrowthDays = ((BaseUnityPlugin)this).Config.Bind<float>("Growth", "GrowthDays", 5f, "Количество игровых суток для роста медвежонка");
BreedChance = ((BaseUnityPlugin)this).Config.Bind<float>("Breeding", "BreedChance", 0.3f, "Шанс размножения при встрече (0-1)");
BreedCooldownDays = ((BaseUnityPlugin)this).Config.Bind<float>("Breeding", "BreedCooldownDays", 2f, "Количество дней между возможностями размножения");
RegisterConsoleCommandsDirectly();
try
{
_harmony.PatchAll(typeof(ZNetScenePatches));
_harmony.PatchAll(typeof(CharacterHoverPatches));
_harmony.PatchAll(typeof(TameablePatches));
_harmony.PatchAll(typeof(CharacterStatePatches));
_harmony.PatchAll(typeof(PlayerPatches));
_harmony.PatchAll(typeof(ZNetPatches));
_harmony.PatchAll(typeof(CharacterDeathPatches));
((BaseUnityPlugin)this).Logger.LogInfo((object)"Bear Taming Mod v2.3.1 loaded successfully!");
}
catch (Exception arg)
{
((BaseUnityPlugin)this).Logger.LogError((object)$"Harmony patching completed with errors: {arg}");
}
}
private void Start()
{
_growthCoroutine = ((MonoBehaviour)this).StartCoroutine(GrowthUpdateRoutine());
_breedingCoroutine = ((MonoBehaviour)this).StartCoroutine(BreedingUpdateRoutine());
}
private void OnDestroy()
{
Harmony harmony = _harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
if (_growthCoroutine != null)
{
((MonoBehaviour)this).StopCoroutine(_growthCoroutine);
}
if (_breedingCoroutine != null)
{
((MonoBehaviour)this).StopCoroutine(_breedingCoroutine);
}
}
[IteratorStateMachine(typeof(<GrowthUpdateRoutine>d__25))]
private IEnumerator GrowthUpdateRoutine()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <GrowthUpdateRoutine>d__25(0)
{
<>4__this = this
};
}
[IteratorStateMachine(typeof(<BreedingUpdateRoutine>d__26))]
private IEnumerator BreedingUpdateRoutine()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <BreedingUpdateRoutine>d__26(0)
{
<>4__this = this
};
}
public void UpdateAllBearGrowth()
{
if ((Object)(object)ZNet.instance == (Object)null || !ZNet.instance.IsServer())
{
return;
}
try
{
double timeSeconds = ZNet.instance.GetTimeSeconds();
List<MonsterAI> list = FindAllBears();
int num = 0;
foreach (MonsterAI item in list)
{
if ((Object)(object)item == (Object)null)
{
continue;
}
try
{
if (UpdateSingleBearGrowth(((Component)item).gameObject, timeSeconds))
{
num++;
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка роста медведя " + ((Object)((Component)item).gameObject).name + ": " + ex.Message));
}
}
if (num > 0)
{
Debug.Log((object)$"BearTamingMod: Обновлен рост {num} медведей");
}
}
catch (Exception ex2)
{
Debug.LogError((object)("Ошибка в системе роста: " + ex2.Message));
}
}
private bool UpdateSingleBearGrowth(GameObject bear, double currentTime)
{
ZNetView component = bear.GetComponent<ZNetView>();
if ((Object)(object)component == (Object)null || !component.IsValid())
{
return false;
}
bool @bool = component.GetZDO().GetBool("isBaby", false);
bool bool2 = component.GetZDO().GetBool("growthComplete", false);
if (!@bool || bool2)
{
return false;
}
long num = component.GetZDO().GetLong("bornTime", 0L);
if (num == 0)
{
num = (long)currentTime;
component.GetZDO().Set("bornTime", num);
Debug.Log((object)$"BearTamingMod: Установлено время рождения медвежонка: {currentTime}");
}
double num2 = currentTime - (double)num;
double num3 = num2 / 1800.0;
component.GetZDO().Set("ageInDays", (float)num3);
float num4 = Mathf.Clamp01((float)num3 / GrowthDays.Value);
float num5 = CalculateGrowthCurve(num4);
float num6 = Mathf.Lerp(0.5f, 1f, num5);
float @float = component.GetZDO().GetFloat("currentSize", 0.5f);
if (Mathf.Abs(num6 - @float) > 0.001f)
{
component.GetZDO().Set("currentSize", num6);
UpdateBearSizeImmediate(bear, num6);
float num7 = (num6 - 0.5f) / 0.5f;
component.GetZDO().Set("growthProgress", num7);
Debug.Log((object)$"BearTamingMod: Медвежонок растет: возраст {num3:F2}/{GrowthDays.Value} дней, размер {num6:F2}, прогресс {num7:P0}");
if (num4 >= 0.999f)
{
CompleteBearGrowth(bear, component);
}
return true;
}
return false;
}
public void RestoreBearState(GameObject bear)
{
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)bear == (Object)null)
{
return;
}
ZNetView component = bear.GetComponent<ZNetView>();
if ((Object)(object)component == (Object)null || !component.IsValid())
{
return;
}
bool @bool = component.GetZDO().GetBool("isBaby", false);
bool bool2 = component.GetZDO().GetBool("growthComplete", false);
bool bool3 = component.GetZDO().GetBool("noDrop", false);
if (@bool && !bool2)
{
float @float = component.GetZDO().GetFloat("currentSize", 0.5f);
UpdateBearSizeImmediate(bear, @float);
if (bool3)
{
DisableBabyBearDrops(bear);
}
Debug.Log((object)$"BearTamingMod: Состояние медвежонка восстановлено. Размер: {@float:F2}");
}
else if (bool2)
{
bear.transform.localScale = Vector3.one;
RestoreAdultBearDrops(bear);
}
}
public void UpdateBearSizeImmediate(GameObject bear, float newSize)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)bear == (Object)null)
{
return;
}
try
{
bear.transform.localScale = Vector3.one * newSize;
Character component = bear.GetComponent<Character>();
if ((Object)(object)component != (Object)null)
{
component.SetMaxHealth(component.GetMaxHealth());
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка обновления размера медвежонка: " + ex.Message));
}
}
private void CompleteBearGrowth(GameObject bear, ZNetView znetView)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
try
{
bear.transform.localScale = Vector3.one;
znetView.GetZDO().Set("isBaby", false);
znetView.GetZDO().Set("currentSize", 1f);
znetView.GetZDO().Set("growthComplete", true);
znetView.GetZDO().Set("growthProgress", 1f);
znetView.GetZDO().Set("noDrop", false);
RestoreAdultBearDrops(bear);
Debug.Log((object)"BearTamingMod: Медвежонок полностью вырос во взрослого медведя!");
Player localPlayer = Player.m_localPlayer;
if ((Object)(object)localPlayer != (Object)null)
{
((Character)localPlayer).Message((MessageType)2, "Медвежонок вырос во взрослого медведя!", 0, (Sprite)null);
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка завершения роста: " + ex.Message));
}
}
public void RestoreAdultBearDrops(GameObject bear)
{
try
{
CharacterDrop component = bear.GetComponent<CharacterDrop>();
if (!((Object)(object)component != (Object)null))
{
return;
}
GameObject prefab = ZNetScene.instance.GetPrefab("Bjorn");
if ((Object)(object)prefab != (Object)null)
{
CharacterDrop component2 = prefab.GetComponent<CharacterDrop>();
if ((Object)(object)component2 != (Object)null && component2.m_drops != null)
{
component.m_drops = new List<Drop>(component2.m_drops);
Debug.Log((object)"BearTamingMod: Дроп восстановлен для взрослого медведя");
}
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка восстановления дропа для взрослого медведя: " + ex.Message));
}
}
public void DisableBabyBearDrops(GameObject bear)
{
try
{
CharacterDrop component = bear.GetComponent<CharacterDrop>();
if ((Object)(object)component != (Object)null)
{
component.m_drops = new List<Drop>();
Debug.Log((object)"BearTamingMod: Дроп отключен для медвежонка");
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка отключения дропа для медвежонка: " + ex.Message));
}
}
private float CalculateGrowthCurve(float progress)
{
return progress * progress * (3f - 2f * progress);
}
public static void InitializeSystem()
{
if (!_isInitialized)
{
_isInitialized = true;
if ((Object)(object)Instance != (Object)null)
{
Instance.RestoreAllBabyBears();
}
Debug.Log((object)"BearTamingMod: Система роста инициализирована");
}
}
private void RestoreAllBabyBears()
{
try
{
List<MonsterAI> list = FindAllBears();
int num = 0;
foreach (MonsterAI item in list)
{
if ((Object)(object)item != (Object)null && (Object)(object)((Component)item).gameObject != (Object)null)
{
RestoreBearState(((Component)item).gameObject);
num++;
}
}
Debug.Log((object)$"BearTamingMod: Восстановлено состояние {num} медведей");
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка восстановления медведей: " + ex.Message));
}
}
private void RegisterConsoleCommandsDirectly()
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Expected O, but got Unknown
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Expected O, but got Unknown
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Expected O, but got Unknown
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: Expected O, but got Unknown
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Expected O, but got Unknown
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Expected O, but got Unknown
try
{
object obj = <>c.<>9__37_0;
if (obj == null)
{
ConsoleEvent val = delegate(ConsoleEventArgs args)
{
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)Player.m_localPlayer == (Object)null)
{
args.Context.AddString("Ошибка: игрок не найден!");
return;
}
try
{
Vector3 val5 = ((Component)Player.m_localPlayer).transform.position + ((Component)Player.m_localPlayer).transform.forward * 3f + Vector3.up;
GameObject prefab = ZNetScene.instance.GetPrefab("Bjorn");
if ((Object)(object)prefab != (Object)null)
{
GameObject bear = Object.Instantiate<GameObject>(prefab, val5, Quaternion.identity);
MakeBabyBear(bear);
args.Context.AddString("Медвежонок создан!");
}
else
{
args.Context.AddString("Ошибка: префаб медведя не найден!");
}
}
catch (Exception ex2)
{
Debug.LogError((object)$"Ошибка создания медвежонка: {ex2}");
args.Context.AddString("Ошибка: " + ex2.Message);
}
};
<>c.<>9__37_0 = val;
obj = (object)val;
}
new ConsoleCommand("spawnbabybear", "Создает медвежонка", (ConsoleEvent)obj, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);
object obj2 = <>c.<>9__37_1;
if (obj2 == null)
{
ConsoleEvent val2 = delegate(ConsoleEventArgs args)
{
List<MonsterAI> list3 = FindAllBears();
int num5 = 0;
int num6 = 0;
int num7 = 0;
int num8 = 0;
int num9 = 0;
int num10 = 0;
foreach (MonsterAI item in list3)
{
if (!((Object)(object)item == (Object)null))
{
num5++;
bool flag = IsBearTamed(item);
bool flag2 = IsBabyBear(((Component)item).gameObject);
if (flag)
{
num6++;
if (flag2)
{
num7++;
num9++;
}
else if (BearBreedingSystem.CanBreed(item))
{
num10++;
}
}
else
{
num8++;
}
}
}
args.Context.AddString($"Всего: {num5}, Приручено: {num6}, Диких: {num8}");
args.Context.AddString($"Медвежат: {num7} (растут: {num9})");
args.Context.AddString($"Взрослых готовых к размножению: {num10}");
int num11 = 1;
foreach (MonsterAI item2 in list3)
{
if ((Object)(object)item2 != (Object)null && IsBabyBear(((Component)item2).gameObject))
{
ZNetView component3 = ((Component)item2).GetComponent<ZNetView>();
if ((Object)(object)component3 != (Object)null && component3.IsValid())
{
float float3 = component3.GetZDO().GetFloat("ageInDays", 0f);
float float4 = component3.GetZDO().GetFloat("currentSize", 0.5f);
float float5 = component3.GetZDO().GetFloat("growthProgress", 0f);
long long2 = component3.GetZDO().GetLong("bornTime", 0L);
double num12 = (((Object)(object)ZNet.instance != (Object)null) ? ZNet.instance.GetTimeSeconds() : 0.0);
double num13 = ((long2 > 0) ? ((num12 - (double)long2) / 1800.0) : 0.0);
double num14 = Math.Max(0.0, (double)GrowthDays.Value - num13);
float num15 = float5 * 100f;
args.Context.AddString($"Медвежонок {num11}: {num13:F2}/{GrowthDays.Value} дн. ({num15:F1}%) Размер: {float4:F2}");
num11++;
}
}
}
if (num7 == 0)
{
args.Context.AddString("Нет растущих медвежат");
}
};
<>c.<>9__37_1 = val2;
obj2 = (object)val2;
}
new ConsoleCommand("bearinfo", "Информация о медведях", (ConsoleEvent)obj2, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);
new ConsoleCommand("forcegrow", "Мгновенно вырастить всех медвежат", (ConsoleEvent)delegate(ConsoleEventArgs args)
{
int num4 = 0;
List<MonsterAI> list2 = FindAllBears();
foreach (MonsterAI item3 in list2)
{
if (!((Object)(object)item3 == (Object)null))
{
try
{
if (IsBabyBear(((Component)item3).gameObject))
{
ZNetView component2 = ((Component)item3).GetComponent<ZNetView>();
if ((Object)(object)component2 != (Object)null && component2.IsValid())
{
CompleteBearGrowth(((Component)item3).gameObject, component2);
num4++;
}
}
}
catch (Exception ex)
{
Debug.LogError((object)("Error growing baby bear: " + ex.Message));
}
}
}
args.Context.AddString($"Мгновенно выращено {num4} медвежат!");
}, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);
new ConsoleCommand("beargrowthupdate", "Принудительно обновить систему роста", (ConsoleEvent)delegate(ConsoleEventArgs args)
{
UpdateAllBearGrowth();
args.Context.AddString("Система роста обновлена!");
}, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);
object obj3 = <>c.<>9__37_4;
if (obj3 == null)
{
ConsoleEvent val3 = delegate(ConsoleEventArgs args)
{
BearBreedingSystem.UpdateBreeding();
args.Context.AddString("Система размножения обновлена!");
};
<>c.<>9__37_4 = val3;
obj3 = (object)val3;
}
new ConsoleCommand("bearbreedingupdate", "Принудительно обновить систему размножения", (ConsoleEvent)obj3, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);
object obj4 = <>c.<>9__37_5;
if (obj4 == null)
{
ConsoleEvent val4 = delegate(ConsoleEventArgs args)
{
args.Context.AddString($"Система инициализирована: {_isInitialized}");
args.Context.AddString($"ZNet доступен: {(Object)(object)ZNet.instance != (Object)null}");
args.Context.AddString($"Серверный режим: {(Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer()}");
List<MonsterAI> list = FindAllBears();
args.Context.AddString($"Всего медведей в мире: {list.Count}");
int num = 0;
foreach (MonsterAI item4 in list)
{
if ((Object)(object)item4 != (Object)null && IsBabyBear(((Component)item4).gameObject))
{
num++;
ZNetView component = ((Component)item4).GetComponent<ZNetView>();
if ((Object)(object)component != (Object)null && component.IsValid())
{
double num2 = (((Object)(object)ZNet.instance != (Object)null) ? ZNet.instance.GetTimeSeconds() : 0.0);
long @long = component.GetZDO().GetLong("bornTime", 0L);
float num3 = ((@long > 0) ? ((float)((num2 - (double)@long) / 1800.0)) : 0f);
float @float = component.GetZDO().GetFloat("currentSize", 0.5f);
float float2 = component.GetZDO().GetFloat("growthProgress", 0f);
args.Context.AddString($"Медвежонок: возраст {num3:F2} дн., размер {@float:F2}, прогресс {float2:P0}");
}
}
}
args.Context.AddString($"Активных медвежат: {num}");
};
<>c.<>9__37_5 = val4;
obj4 = (object)val4;
}
new ConsoleCommand("beardiagnostic", "Диагностика системы роста", (ConsoleEvent)obj4, false, false, false, false, false, (ConsoleOptionsFetcher)null, false, false, false);
((BaseUnityPlugin)this).Logger.LogInfo((object)"BearTamingMod: Консольные команды успешно зарегистрированы!");
}
catch (Exception arg)
{
((BaseUnityPlugin)this).Logger.LogError((object)$"Ошибка регистрации команд: {arg}");
}
}
public static bool IsBearTamed(MonsterAI bear)
{
if ((Object)(object)bear == (Object)null)
{
return false;
}
try
{
if (GetPrivateField<bool>(bear, "m_tamed"))
{
return true;
}
ZNetView component = ((Component)bear).GetComponent<ZNetView>();
if ((Object)(object)component != (Object)null && component.IsValid())
{
return component.GetZDO().GetBool("tamed", false);
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка проверки приручения: " + ex.Message));
}
return false;
}
public static bool IsBabyBear(GameObject bear)
{
if ((Object)(object)bear == (Object)null)
{
return false;
}
ZNetView component = bear.GetComponent<ZNetView>();
if ((Object)(object)component != (Object)null && component.IsValid())
{
bool @bool = component.GetZDO().GetBool("isBaby", false);
bool bool2 = component.GetZDO().GetBool("growthComplete", false);
return @bool && !bool2;
}
return false;
}
public static T GetPrivateField<T>(object obj, string fieldName)
{
if (obj == null)
{
return default(T);
}
FieldInfo field = obj.GetType().GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic);
return (field != null) ? ((T)field.GetValue(obj)) : default(T);
}
public static void SetPrivateField(object obj, string fieldName, object value)
{
if (obj != null)
{
FieldInfo field = obj.GetType().GetField(fieldName, BindingFlags.Instance | BindingFlags.NonPublic);
if (field != null && value != null && field.FieldType == value.GetType())
{
field.SetValue(obj, value);
}
}
}
public static List<MonsterAI> FindAllBears()
{
List<MonsterAI> list = new List<MonsterAI>();
MonsterAI[] array = Object.FindObjectsByType<MonsterAI>((FindObjectsSortMode)0);
MonsterAI[] array2 = array;
foreach (MonsterAI val in array2)
{
if ((Object)(object)val != (Object)null && (Object)(object)((Component)val).gameObject != (Object)null)
{
string text = ((Object)((Component)val).gameObject).name.ToLower();
if (text.Contains("bear") || text.Contains("bjorn"))
{
list.Add(val);
}
}
}
return list;
}
public static void MakeBabyBear(GameObject bear)
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)bear == (Object)null)
{
return;
}
try
{
double num = (((Object)(object)ZNet.instance != (Object)null) ? ZNet.instance.GetTimeSeconds() : 0.0);
bear.transform.localScale = Vector3.one * 0.5f;
Character component = bear.GetComponent<Character>();
if ((Object)(object)component != (Object)null)
{
component.SetTamed(true);
component.SetLevel(1);
Instance.DisableBabyBearDrops(bear);
}
MonsterAI component2 = bear.GetComponent<MonsterAI>();
if ((Object)(object)component2 != (Object)null)
{
SetPrivateField(component2, "m_tamed", true);
SetPrivateField(component2, "m_tamable", true);
SetPrivateField(component2, "m_commandable", true);
SetPrivateField(component2, "m_tameTimer", TameTime.Value);
}
Tameable component3 = bear.GetComponent<Tameable>();
if ((Object)(object)component3 != (Object)null)
{
SetPrivateField(component3, "m_tamed", true);
SetPrivateField(component3, "m_timeSinceFeeding", 0f);
}
ZNetView component4 = bear.GetComponent<ZNetView>();
if ((Object)(object)component4 != (Object)null && component4.IsValid())
{
component4.GetZDO().Set("tamed", true);
component4.GetZDO().Set("isBaby", true);
component4.GetZDO().Set("bornTime", (long)num);
component4.GetZDO().Set("ageInDays", 0f);
component4.GetZDO().Set("currentSize", 0.5f);
component4.GetZDO().Set("growthComplete", false);
component4.GetZDO().Set("growthProgress", 0f);
component4.GetZDO().Set("noDrop", true);
}
Debug.Log((object)$"BearTamingMod: Прирученный медвежонок создан! Время рождения: {num}");
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка создания медвежонка: " + ex.Message));
}
}
}
[HarmonyPatch(typeof(Player))]
public static class PlayerPatches
{
[HarmonyPatch("OnSpawned")]
[HarmonyPostfix]
private static void OnPlayerSpawned(Player __instance)
{
if ((Object)(object)__instance == (Object)(object)Player.m_localPlayer)
{
BearTamingMod.InitializeSystem();
Debug.Log((object)"BearTamingMod: Игрок заспавнен, система роста активирована");
if ((Object)(object)BearTamingMod.Instance != (Object)null)
{
BearTamingMod.Instance.UpdateAllBearGrowth();
}
}
}
}
[HarmonyPatch(typeof(ZNet))]
public static class ZNetPatches
{
[HarmonyPatch("OnWorldLoad")]
[HarmonyPostfix]
private static void OnWorldLoad(ZNet __instance)
{
if (__instance.IsServer())
{
BearTamingMod.InitializeSystem();
Debug.Log((object)"BearTamingMod: Мир загружен, запущено восстановление медвежат");
}
}
}
[HarmonyPatch(typeof(Tameable))]
public static class TameablePatches
{
[HarmonyPatch("GetHoverText")]
[HarmonyPostfix]
private static void OnHoverText(Tameable __instance, ref string __result)
{
if ((Object)(object)BearTamingMod.Instance != (Object)null && (Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer())
{
BearTamingMod.Instance.UpdateAllBearGrowth();
}
if (!((Object)(object)__instance != (Object)null))
{
return;
}
string text = ((Object)((Component)__instance).gameObject).name.ToLower();
if (!text.Contains("bear") && !text.Contains("bjorn"))
{
return;
}
bool privateField = BearTamingMod.GetPrivateField<bool>(__instance, "m_tamed");
if (privateField && BearTamingMod.IsBabyBear(((Component)__instance).gameObject))
{
ZNetView component = ((Component)__instance).GetComponent<ZNetView>();
if ((Object)(object)component != (Object)null && component.IsValid())
{
float @float = component.GetZDO().GetFloat("currentSize", 0.5f);
float float2 = component.GetZDO().GetFloat("ageInDays", 0f);
long @long = component.GetZDO().GetLong("bornTime", 0L);
float float3 = component.GetZDO().GetFloat("growthProgress", 0f);
double num = (((Object)(object)ZNet.instance != (Object)null) ? ZNet.instance.GetTimeSeconds() : 0.0);
double num2 = ((@long > 0) ? ((num - (double)@long) / 1800.0) : 0.0);
double num3 = Math.Max(0.0, (double)BearTamingMod.GrowthDays.Value - num2);
float num4 = float3 * 100f;
__result += $"\n(Растет: {num4:F1}%, {num3:F1} дн. осталось)";
__result += $"\n(Размер: {@float:F2}, возраст: {num2:F2} дн.)";
}
}
else if (privateField && !BearTamingMod.IsBabyBear(((Component)__instance).gameObject))
{
MonsterAI component2 = ((Component)__instance).GetComponent<MonsterAI>();
if ((Object)(object)component2 != (Object)null && BearBreedingSystem.CanBreed(component2))
{
__result += "\n(Готов к размножению)";
}
}
}
[HarmonyPatch("Interact")]
[HarmonyPrefix]
private static bool HandlePetCommand(Tameable __instance, Humanoid user, bool hold, bool alt)
{
if (hold || alt)
{
return true;
}
string text = ((Object)((Component)__instance).gameObject).name.ToLower();
if (!text.Contains("bear") && !text.Contains("bjorn"))
{
return true;
}
try
{
if (BearTamingMod.GetPrivateField<bool>(__instance, "m_tamed"))
{
MonsterAI component = ((Component)__instance).GetComponent<MonsterAI>();
if ((Object)(object)component != (Object)null)
{
bool privateField = BearTamingMod.GetPrivateField<bool>(component, "m_follow");
BearTamingMod.SetPrivateField(component, "m_follow", !privateField);
if (!privateField)
{
((Character)user).Message((MessageType)2, "$hud_animal_follow", 0, (Sprite)null);
}
else
{
((Character)user).Message((MessageType)2, "$hud_animal_stay", 0, (Sprite)null);
}
return false;
}
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка обработки команды приласкать: " + ex.Message));
}
return true;
}
}
[HarmonyPatch(typeof(ZNetScene))]
public static class ZNetScenePatches
{
private static bool _prefabsInitialized;
[HarmonyPatch("Awake")]
[HarmonyPostfix]
private static void SetupBearPrefab(ZNetScene __instance)
{
if (_prefabsInitialized)
{
return;
}
try
{
GameObject prefab = __instance.GetPrefab("Bjorn");
if ((Object)(object)prefab == (Object)null)
{
Debug.LogError((object)"BearTamingMod: Префаб медведя не найден!");
return;
}
SetupBearTameable(prefab);
_prefabsInitialized = true;
Debug.Log((object)"BearTamingMod: Настройка префаба медведя завершена!");
}
catch (Exception arg)
{
Debug.LogError((object)$"Ошибка настройка префаба медведя: {arg}");
}
}
private static void SetupBearTameable(GameObject bearPrefab)
{
Tameable val = bearPrefab.GetComponent<Tameable>();
if ((Object)(object)val == (Object)null)
{
val = bearPrefab.AddComponent<Tameable>();
}
val.m_tamingTime = BearTamingMod.TameTime.Value;
val.m_fedDuration = BearTamingMod.FedDuration.Value;
val.m_commandable = true;
MonsterAI component = bearPrefab.GetComponent<MonsterAI>();
if ((Object)(object)component != (Object)null)
{
SetupConsumableItems(component);
}
}
private static void SetupConsumableItems(MonsterAI bearAI)
{
if (bearAI.m_consumeItems != null)
{
bearAI.m_consumeItems.Clear();
}
string[] array = BearTamingMod.ConsumableItems.Value.Split(new char[1] { ';' });
string[] array2 = array;
foreach (string text in array2)
{
string text2 = text.Trim();
if (!string.IsNullOrEmpty(text2))
{
AddConsumableItem(bearAI, text2);
}
}
if (bearAI.m_consumeItems == null || bearAI.m_consumeItems.Count == 0)
{
AddConsumableItem(bearAI, "Honey");
}
}
private static void AddConsumableItem(MonsterAI bearAI, string itemName)
{
GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemName);
if (!((Object)(object)itemPrefab != (Object)null))
{
return;
}
ItemDrop component = itemPrefab.GetComponent<ItemDrop>();
if ((Object)(object)component != (Object)null)
{
if (bearAI.m_consumeItems == null)
{
bearAI.m_consumeItems = new List<ItemDrop>();
}
bearAI.m_consumeItems.Add(component);
Debug.Log((object)("BearTamingMod: Добавлен предмет для приручения: " + itemName));
}
}
}
[HarmonyPatch(typeof(Character))]
public static class CharacterHoverPatches
{
[HarmonyPatch("GetHoverName")]
[HarmonyPostfix]
private static void ModifyBearHoverName(Character __instance, ref string __result)
{
if ((Object)(object)__instance == (Object)null)
{
return;
}
string text = ((Object)((Component)__instance).gameObject).name.ToLower();
if (!text.Contains("bear") && !text.Contains("bjorn"))
{
return;
}
try
{
MonsterAI component = ((Component)__instance).GetComponent<MonsterAI>();
if (!((Object)(object)component == (Object)null))
{
bool flag = BearTamingMod.IsBearTamed(component);
if (BearTamingMod.IsBabyBear(((Component)__instance).gameObject))
{
__result = "Медвежонок";
}
else
{
__result = "Медведь";
}
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка изменения имени медведя: " + ex.Message));
}
}
}
[HarmonyPatch(typeof(Character))]
public static class CharacterStatePatches
{
[HarmonyPatch("Start")]
[HarmonyPostfix]
private static void RestoreBearState(Character __instance)
{
if ((Object)(object)__instance == (Object)null || (Object)(object)((Component)__instance).gameObject == (Object)null)
{
return;
}
string text = ((Object)((Component)__instance).gameObject).name.ToLower();
if (!text.Contains("bear") && !text.Contains("bjorn"))
{
return;
}
try
{
BearTamingMod.Instance.RestoreBearState(((Component)__instance).gameObject);
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка восстановления состояния медведя: " + ex.Message));
}
}
}
[HarmonyPatch(typeof(Character))]
public static class CharacterDeathPatches
{
[HarmonyPatch("OnDeath")]
[HarmonyPrefix]
private static void OnDeathPrefix(Character __instance)
{
if ((Object)(object)__instance == (Object)null)
{
return;
}
string text = ((Object)((Component)__instance).gameObject).name.ToLower();
if (!text.Contains("bear") && !text.Contains("bjorn"))
{
return;
}
try
{
if (BearTamingMod.IsBabyBear(((Component)__instance).gameObject))
{
BearTamingMod.Instance.DisableBabyBearDrops(((Component)__instance).gameObject);
Debug.Log((object)"BearTamingMod: Дроп отключен для убитого медвежонка");
}
else
{
BearTamingMod.Instance.RestoreAdultBearDrops(((Component)__instance).gameObject);
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка обработки смерти медведя: " + ex.Message));
}
}
}
public static class BearBreedingSystem
{
public static Dictionary<GameObject, long> _lastBreedTimes = new Dictionary<GameObject, long>();
private const float MIN_BREED_DISTANCE = 3f;
private const float MAX_BREED_DISTANCE = 10f;
private const float REQUIRED_FULLNESS = 0.7f;
public static void UpdateBreeding()
{
try
{
List<MonsterAI> list = BearTamingMod.FindAllBears();
List<MonsterAI> list2 = new List<MonsterAI>();
foreach (MonsterAI item in list)
{
if (!((Object)(object)item == (Object)null) && BearTamingMod.IsBearTamed(item) && !BearTamingMod.IsBabyBear(((Component)item).gameObject) && CanBreed(item))
{
list2.Add(item);
}
}
if (list2.Count < 2)
{
return;
}
for (int i = 0; i < list2.Count; i++)
{
for (int j = i + 1; j < list2.Count; j++)
{
if (CheckBreedingPair(list2[i], list2[j]))
{
return;
}
}
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка в системе размножения: " + ex.Message));
}
}
private static bool CheckBreedingPair(MonsterAI bear1, MonsterAI bear2)
{
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)bear1 == (Object)null || (Object)(object)bear2 == (Object)null)
{
return false;
}
if (!CanBearBreedNow(bear1) || !CanBearBreedNow(bear2))
{
return false;
}
float num = Vector3.Distance(((Component)bear1).transform.position, ((Component)bear2).transform.position);
if (num < 3f || num > 10f)
{
return false;
}
if (Random.Range(0f, 1f) > BearTamingMod.BreedChance.Value)
{
return false;
}
Debug.Log((object)"BearTamingMod: Успешная проверка размножения - создаем медвежонка");
SpawnBabyBear(bear1, bear2);
SetBreedCooldown(bear1);
SetBreedCooldown(bear2);
return true;
}
public static bool CanBearBreedNow(MonsterAI bear)
{
if ((Object)(object)bear == (Object)null)
{
return false;
}
if (_lastBreedTimes.ContainsKey(((Component)bear).gameObject))
{
long num = _lastBreedTimes[((Component)bear).gameObject];
long num2 = (long)ZNet.instance.GetTimeSeconds();
long num3 = (long)(BearTamingMod.BreedCooldownDays.Value * 1800f);
long num4 = num2 - num;
if (num4 < num3)
{
return false;
}
}
return true;
}
private static void SetBreedCooldown(MonsterAI bear)
{
if ((Object)(object)bear != (Object)null)
{
long num = (long)ZNet.instance.GetTimeSeconds();
_lastBreedTimes[((Component)bear).gameObject] = num;
ZNetView component = ((Component)bear).GetComponent<ZNetView>();
if ((Object)(object)component != (Object)null && component.IsValid())
{
component.GetZDO().Set("lastBreedTime", num);
}
}
}
public static bool CanBreed(MonsterAI bear)
{
if ((Object)(object)bear == (Object)null)
{
return false;
}
Tameable component = ((Component)bear).GetComponent<Tameable>();
if ((Object)(object)component != (Object)null)
{
float privateField = BearTamingMod.GetPrivateField<float>(component, "m_timeSinceFeeding");
if (privateField > component.m_fedDuration * 0.7f)
{
return false;
}
}
if (BearTamingMod.IsBabyBear(((Component)bear).gameObject))
{
return false;
}
return true;
}
private static void SpawnBabyBear(MonsterAI parent1, MonsterAI parent2)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
try
{
Vector3 val = (((Component)parent1).transform.position + ((Component)parent2).transform.position) / 2f;
val += Vector3.up * 0.5f + Random.insideUnitSphere * 1f;
GameObject prefab = ZNetScene.instance.GetPrefab("Bjorn");
if ((Object)(object)prefab != (Object)null)
{
GameObject bear = Object.Instantiate<GameObject>(prefab, val, Quaternion.identity);
BearTamingMod.MakeBabyBear(bear);
Player localPlayer = Player.m_localPlayer;
if ((Object)(object)localPlayer != (Object)null)
{
((Character)localPlayer).Message((MessageType)2, "Медведи произвели потомство!", 0, (Sprite)null);
}
Debug.Log((object)"BearTamingMod: Новый прирученный медвежонок появился через размножение!");
}
else
{
Debug.LogError((object)"BearTamingMod: Не удалось найти префаб медведя для размножения");
}
}
catch (Exception ex)
{
Debug.LogError((object)("Ошибка создания медвежонка: " + ex.Message));
}
}
}