diff options
author | chai <215380520@qq.com> | 2024-05-20 22:35:55 +0800 |
---|---|---|
committer | chai <215380520@qq.com> | 2024-05-20 22:35:55 +0800 |
commit | 1cefa46d7cbff46fc14c44ab36b4976047b98c70 (patch) | |
tree | 49c376cfd996749de8ec2b8e08456ec46cfc2b3b /Valheim_v202102 | |
parent | db64ca2ebcfc2239702ba53e3497b44cd14d8c27 (diff) |
*rename
Diffstat (limited to 'Valheim_v202102')
282 files changed, 0 insertions, 71342 deletions
diff --git a/Valheim_v202102/.gitignore b/Valheim_v202102/.gitignore deleted file mode 100644 index 223208c..0000000 --- a/Valheim_v202102/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -~*.* -*.log -Dump -Valheim/MelonLoader/ -Valheim/Mods/ -Game/
\ No newline at end of file diff --git a/Valheim_v202102/Doc/作弊.txt b/Valheim_v202102/Doc/作弊.txt deleted file mode 100644 index 3daed88..0000000 --- a/Valheim_v202102/Doc/作弊.txt +++ /dev/null @@ -1,10 +0,0 @@ -https://valheim.fandom.com/wiki/Item_IDs -https://valheim.fandom.com/wiki/Armor -https://www.dexerto.com/gaming/valheim-cheats-all-codes-console-commands-how-enter-them-1696329/ -https://www.rockpapershotgun.com/valheim-cheats-spawn-item-list-console-commands-creative-mode#valheim-spawn-item-codes - -https://commands.gg/valheim/items - -老版本输入imacheater而不是devcommands - - diff --git a/Valheim_v202102/Doc/分析.xlsx b/Valheim_v202102/Doc/分析.xlsx Binary files differdeleted file mode 100644 index d5e5b83..0000000 --- a/Valheim_v202102/Doc/分析.xlsx +++ /dev/null diff --git a/Valheim_v202102/Doc/分析/地形生成.xlsx b/Valheim_v202102/Doc/分析/地形生成.xlsx Binary files differdeleted file mode 100644 index 10237e2..0000000 --- a/Valheim_v202102/Doc/分析/地形生成.xlsx +++ /dev/null diff --git a/Valheim_v202102/Doc/反编译和mod.txt b/Valheim_v202102/Doc/反编译和mod.txt deleted file mode 100644 index 229f382..0000000 --- a/Valheim_v202102/Doc/反编译和mod.txt +++ /dev/null @@ -1,9 +0,0 @@ -https://www.youtube.com/watch?v=XPFvHo1UCTE&ab_channel=SBToonz - -https://github.com/Valheim-Modding/Wiki/wiki/Valheim-Unity-Project-Guide - -https://github.com/heinermann/ValheimExportHelper - -https://www.youtube.com/watch?v=_61pLVH2qPk&ab_channel=BetterCoder - -https://www.youtube.com/watch?v=OanlUYSZkZA&ab_channel=Azumatt
\ No newline at end of file diff --git a/Valheim_v202102/Doc/说明.txt b/Valheim_v202102/Doc/说明.txt deleted file mode 100644 index dda2762..0000000 --- a/Valheim_v202102/Doc/说明.txt +++ /dev/null @@ -1 +0,0 @@ -knowhow
\ No newline at end of file diff --git a/Valheim_v202102/Valheim/assembly_valheim/.gitignore b/Valheim_v202102/Valheim/assembly_valheim/.gitignore deleted file mode 100644 index a4da27a..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/.gitignore +++ /dev/null @@ -1,399 +0,0 @@ -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. -## -## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore - -# User-specific files -*.rsuser -*.suo -*.user -*.userosscache -*.sln.docstates - -# User-specific files (MonoDevelop/Xamarin Studio) -*.userprefs - -# Mono auto generated files -mono_crash.* - -# Build results -[Dd]ebug/ -[Dd]ebugPublic/ -[Rr]elease/ -[Rr]eleases/ -x64/ -x86/ -[Ww][Ii][Nn]32/ -[Aa][Rr][Mm]/ -[Aa][Rr][Mm]64/ -bld/ -[Bb]in/ -[Oo]bj/ -[Ll]og/ -[Ll]ogs/ - -# Visual Studio 2015/2017 cache/options directory -.vs/ -# Uncomment if you have tasks that create the project's static files in wwwroot -#wwwroot/ - -# Visual Studio 2017 auto generated files -Generated\ Files/ - -# MSTest test Results -[Tt]est[Rr]esult*/ -[Bb]uild[Ll]og.* - -# NUnit -*.VisualState.xml -TestResult.xml -nunit-*.xml - -# Build Results of an ATL Project -[Dd]ebugPS/ -[Rr]eleasePS/ -dlldata.c - -# Benchmark Results -BenchmarkDotNet.Artifacts/ - -# .NET Core -project.lock.json -project.fragment.lock.json -artifacts/ - -# ASP.NET Scaffolding -ScaffoldingReadMe.txt - -# StyleCop -StyleCopReport.xml - -# Files built by Visual Studio -*_i.c -*_p.c -*_h.h -*.ilk -*.meta -*.obj -*.iobj -*.pch -*.pdb -*.ipdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.tmp_proj -*_wpftmp.csproj -*.log -*.tlog -*.vspscc -*.vssscc -.builds -*.pidb -*.svclog -*.scc - -# Chutzpah Test files -_Chutzpah* - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opendb -*.opensdf -*.sdf -*.cachefile -*.VC.db -*.VC.VC.opendb - -# Visual Studio profiler -*.psess -*.vsp -*.vspx -*.sap - -# Visual Studio Trace Files -*.e2e - -# TFS 2012 Local Workspace -$tf/ - -# Guidance Automation Toolkit -*.gpState - -# ReSharper is a .NET coding add-in -_ReSharper*/ -*.[Rr]e[Ss]harper -*.DotSettings.user - -# TeamCity is a build add-in -_TeamCity* - -# DotCover is a Code Coverage Tool -*.dotCover - -# AxoCover is a Code Coverage Tool -.axoCover/* -!.axoCover/settings.json - -# Coverlet is a free, cross platform Code Coverage Tool -coverage*.json -coverage*.xml -coverage*.info - -# Visual Studio code coverage results -*.coverage -*.coveragexml - -# NCrunch -_NCrunch_* -.*crunch*.local.xml -nCrunchTemp_* - -# MightyMoose -*.mm.* -AutoTest.Net/ - -# Web workbench (sass) -.sass-cache/ - -# Installshield output folder -[Ee]xpress/ - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish/ - -# Publish Web Output -*.[Pp]ublish.xml -*.azurePubxml -# Note: Comment the next line if you want to checkin your web deploy settings, -# but database connection strings (with potential passwords) will be unencrypted -*.pubxml -*.publishproj - -# Microsoft Azure Web App publish settings. Comment the next line if you want to -# checkin your Azure Web App publish settings, but sensitive information contained -# in these scripts will be unencrypted -PublishScripts/ - -# NuGet Packages -*.nupkg -# NuGet Symbol Packages -*.snupkg -# The packages folder can be ignored because of Package Restore -**/[Pp]ackages/* -# except build/, which is used as an MSBuild target. -!**/[Pp]ackages/build/ -# Uncomment if necessary however generally it will be regenerated when needed -#!**/[Pp]ackages/repositories.config -# NuGet v3's project.json files produces more ignorable files -*.nuget.props -*.nuget.targets - -# Microsoft Azure Build Output -csx/ -*.build.csdef - -# Microsoft Azure Emulator -ecf/ -rcf/ - -# Windows Store app package directories and files -AppPackages/ -BundleArtifacts/ -Package.StoreAssociation.xml -_pkginfo.txt -*.appx -*.appxbundle -*.appxupload - -# Visual Studio cache files -# files ending in .cache can be ignored -*.[Cc]ache -# but keep track of directories ending in .cache -!?*.[Cc]ache/ - -# Others -ClientBin/ -~$* -*~ -*.dbmdl -*.dbproj.schemaview -*.jfm -*.pfx -*.publishsettings -orleans.codegen.cs - -# Including strong name files can present a security risk -# (https://github.com/github/gitignore/pull/2483#issue-259490424) -#*.snk - -# Since there are multiple workflows, uncomment next line to ignore bower_components -# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) -#bower_components/ - -# RIA/Silverlight projects -Generated_Code/ - -# Backup & report files from converting an old project file -# to a newer Visual Studio version. Backup files are not needed, -# because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML -UpgradeLog*.htm -ServiceFabricBackup/ -*.rptproj.bak - -# SQL Server files -*.mdf -*.ldf -*.ndf - -# Business Intelligence projects -*.rdl.data -*.bim.layout -*.bim_*.settings -*.rptproj.rsuser -*- [Bb]ackup.rdl -*- [Bb]ackup ([0-9]).rdl -*- [Bb]ackup ([0-9][0-9]).rdl - -# Microsoft Fakes -FakesAssemblies/ - -# GhostDoc plugin setting file -*.GhostDoc.xml - -# Node.js Tools for Visual Studio -.ntvs_analysis.dat -node_modules/ - -# Visual Studio 6 build log -*.plg - -# Visual Studio 6 workspace options file -*.opt - -# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) -*.vbw - -# Visual Studio 6 auto-generated project file (contains which files were open etc.) -*.vbp - -# Visual Studio 6 workspace and project file (working project files containing files to include in project) -*.dsw -*.dsp - -# Visual Studio 6 technical files -*.ncb -*.aps - -# Visual Studio LightSwitch build output -**/*.HTMLClient/GeneratedArtifacts -**/*.DesktopClient/GeneratedArtifacts -**/*.DesktopClient/ModelManifest.xml -**/*.Server/GeneratedArtifacts -**/*.Server/ModelManifest.xml -_Pvt_Extensions - -# Paket dependency manager -.paket/paket.exe -paket-files/ - -# FAKE - F# Make -.fake/ - -# CodeRush personal settings -.cr/personal - -# Python Tools for Visual Studio (PTVS) -__pycache__/ -*.pyc - -# Cake - Uncomment if you are using it -# tools/** -# !tools/packages.config - -# Tabs Studio -*.tss - -# Telerik's JustMock configuration file -*.jmconfig - -# BizTalk build output -*.btp.cs -*.btm.cs -*.odx.cs -*.xsd.cs - -# OpenCover UI analysis results -OpenCover/ - -# Azure Stream Analytics local run output -ASALocalRun/ - -# MSBuild Binary and Structured Log -*.binlog - -# NVidia Nsight GPU debugger configuration file -*.nvuser - -# MFractors (Xamarin productivity tool) working folder -.mfractor/ - -# Local History for Visual Studio -.localhistory/ - -# Visual Studio History (VSHistory) files -.vshistory/ - -# BeatPulse healthcheck temp database -healthchecksdb - -# Backup folder for Package Reference Convert tool in Visual Studio 2017 -MigrationBackup/ - -# Ionide (cross platform F# VS Code tools) working folder -.ionide/ - -# Fody - auto-generated XML schema -FodyWeavers.xsd - -# VS Code files for those working on multiple tools -.vscode/* -!.vscode/settings.json -!.vscode/tasks.json -!.vscode/launch.json -!.vscode/extensions.json -*.code-workspace - -# Local History for Visual Studio Code -.history/ - -# Windows Installer files from build outputs -*.cab -*.msi -*.msix -*.msm -*.msp - -# JetBrains Rider -*.sln.iml -.vs diff --git a/Valheim_v202102/Valheim/assembly_valheim/AnimalAI.cs b/Valheim_v202102/Valheim/assembly_valheim/AnimalAI.cs deleted file mode 100644 index 8f747b4..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/AnimalAI.cs +++ /dev/null @@ -1,80 +0,0 @@ -using UnityEngine; - -public class AnimalAI : BaseAI -{ - private const float m_updateTargetFarRange = 32f; - - private const float m_updateTargetIntervalNear = 2f; - - private const float m_updateTargetIntervalFar = 10f; - - public float m_timeToSafe = 4f; - - private Character m_target; - - private float m_inDangerTimer; - - private float m_updateTargetTimer; - - protected override void Awake() - { - base.Awake(); - m_updateTargetTimer = Random.Range(0f, 2f); - } - - protected override void OnDamaged(float damage, Character attacker) - { - base.OnDamaged(damage, attacker); - SetAlerted(alert: true); - } - - protected override void UpdateAI(float dt) - { - base.UpdateAI(dt); - if (!m_nview.IsOwner() || (m_afraidOfFire && AvoidFire(dt, null, superAfraid: true))) - { - return; - } - m_updateTargetTimer -= dt; - if (m_updateTargetTimer <= 0f) - { - m_updateTargetTimer = (Character.IsCharacterInRange(base.transform.position, 32f) ? 2f : 10f); - Character character = FindEnemy(); - if ((bool)character) - { - m_target = character; - } - } - if ((bool)m_target && !m_target.IsDead() && CanSenseTarget(m_target)) - { - SetAlerted(alert: true); - } - if (IsAlerted()) - { - m_inDangerTimer += dt; - if (m_inDangerTimer > m_timeToSafe) - { - m_target = null; - SetAlerted(alert: false); - } - } - if ((bool)m_target) - { - Flee(dt, m_target.transform.position); - m_target.OnTargeted(sensed: false, alerted: false); - } - else - { - IdleMovement(dt); - } - } - - protected override void SetAlerted(bool alert) - { - if (alert) - { - m_inDangerTimer = 0f; - } - base.SetAlerted(alert); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/AnimationEffect.cs b/Valheim_v202102/Valheim/assembly_valheim/AnimationEffect.cs deleted file mode 100644 index f77f3b2..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/AnimationEffect.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class AnimationEffect : MonoBehaviour -{ - public Transform m_effectRoot; - - private Animator m_animator; - - private List<GameObject> m_attachments; - - private int m_attachStateHash; - - private void Start() - { - m_animator = GetComponent<Animator>(); - } - - public void Effect(AnimationEvent e) - { - string stringParameter = e.stringParameter; - GameObject original = e.objectReferenceParameter as GameObject; - Transform transform = null; - if (stringParameter.Length > 0) - { - transform = Utils.FindChild(base.transform, stringParameter); - } - if (transform == null) - { - transform = (m_effectRoot ? m_effectRoot : base.transform); - } - Object.Instantiate(original, transform.position, transform.rotation); - } - - public void Attach(AnimationEvent e) - { - string stringParameter = e.stringParameter; - GameObject original = e.objectReferenceParameter as GameObject; - Transform transform = Utils.FindChild(base.transform, stringParameter); - if (transform == null) - { - ZLog.LogWarning("Failed to find attach joint " + stringParameter); - return; - } - ClearAttachment(transform); - GameObject gameObject = Object.Instantiate(original, transform.position, transform.rotation); - gameObject.transform.SetParent(transform, worldPositionStays: true); - if (m_attachments == null) - { - m_attachments = new List<GameObject>(); - } - m_attachments.Add(gameObject); - m_attachStateHash = e.animatorStateInfo.fullPathHash; - CancelInvoke("UpdateAttachments"); - InvokeRepeating("UpdateAttachments", 0.1f, 0.1f); - } - - private void ClearAttachment(Transform parent) - { - if (m_attachments == null) - { - return; - } - foreach (GameObject attachment in m_attachments) - { - if ((bool)attachment && attachment.transform.parent == parent) - { - m_attachments.Remove(attachment); - Object.Destroy(attachment); - break; - } - } - } - - public void RemoveAttachments() - { - if (m_attachments == null) - { - return; - } - foreach (GameObject attachment in m_attachments) - { - Object.Destroy(attachment); - } - m_attachments.Clear(); - } - - private void UpdateAttachments() - { - if (m_attachments != null && m_attachments.Count > 0) - { - if (m_attachStateHash != m_animator.GetCurrentAnimatorStateInfo(0).fullPathHash && m_attachStateHash != m_animator.GetNextAnimatorStateInfo(0).fullPathHash) - { - RemoveAttachments(); - } - } - else - { - CancelInvoke("UpdateAttachments"); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Aoe.cs b/Valheim_v202102/Valheim/assembly_valheim/Aoe.cs deleted file mode 100644 index 4f657e9..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Aoe.cs +++ /dev/null @@ -1,331 +0,0 @@ -using System.Collections.Generic; -using System.Text; -using UnityEngine; - -public class Aoe : MonoBehaviour, IProjectile -{ - [Header("Attack (overridden by item )")] - public bool m_useAttackSettings = true; - - public HitData.DamageTypes m_damage; - - public bool m_dodgeable; - - public bool m_blockable; - - public int m_toolTier; - - public float m_attackForce; - - public float m_backstabBonus = 4f; - - public string m_statusEffect = ""; - - [Header("Attack (other)")] - public HitData.DamageTypes m_damagePerLevel; - - public bool m_attackForceForward; - - [Header("Damage self")] - public float m_damageSelf; - - [Header("Ignore targets")] - public bool m_hitOwner; - - public bool m_hitSame; - - public bool m_hitFriendly = true; - - public bool m_hitEnemy = true; - - public bool m_hitCharacters = true; - - public bool m_hitProps = true; - - [Header("Other")] - public Skills.SkillType m_skill; - - public bool m_useTriggers; - - public bool m_triggerEnterOnly; - - public float m_radius = 4f; - - public float m_ttl = 4f; - - public float m_hitInterval = 1f; - - public EffectList m_hitEffects = new EffectList(); - - public bool m_attachToCaster; - - private ZNetView m_nview; - - private Character m_owner; - - private List<GameObject> m_hitList = new List<GameObject>(); - - private float m_hitTimer; - - private Vector3 m_offset = Vector3.zero; - - private Quaternion m_localRot = Quaternion.identity; - - private int m_level; - - private int m_rayMask; - - private void Awake() - { - m_nview = GetComponentInParent<ZNetView>(); - m_rayMask = 0; - if (m_hitCharacters) - { - m_rayMask |= LayerMask.GetMask("character", "character_net", "character_ghost"); - } - if (m_hitProps) - { - m_rayMask |= LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "hitbox", "character_noenv", "vehicle"); - } - } - - public HitData.DamageTypes GetDamage() - { - return GetDamage(m_level); - } - - public HitData.DamageTypes GetDamage(int itemQuality) - { - if (itemQuality <= 1) - { - return m_damage; - } - HitData.DamageTypes damage = m_damage; - damage.Add(m_damagePerLevel, itemQuality - 1); - return damage; - } - - public string GetTooltipString(int itemQuality) - { - StringBuilder stringBuilder = new StringBuilder(256); - stringBuilder.Append("AOE"); - stringBuilder.Append(GetDamage(itemQuality).GetTooltipString()); - stringBuilder.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", m_attackForce); - stringBuilder.AppendFormat("\n$item_backstab: <color=orange>{0}x</color>", m_backstabBonus); - return stringBuilder.ToString(); - } - - private void Start() - { - if ((!(m_nview != null) || (m_nview.IsValid() && m_nview.IsOwner())) && !m_useTriggers && m_hitInterval <= 0f) - { - CheckHits(); - } - } - - private void FixedUpdate() - { - if (m_nview != null && (!m_nview.IsValid() || !m_nview.IsOwner())) - { - return; - } - if (m_hitInterval > 0f) - { - m_hitTimer -= Time.fixedDeltaTime; - if (m_hitTimer <= 0f) - { - m_hitTimer = m_hitInterval; - if (m_useTriggers) - { - m_hitList.Clear(); - } - else - { - CheckHits(); - } - } - } - if (m_owner != null && m_attachToCaster) - { - base.transform.position = m_owner.transform.TransformPoint(m_offset); - base.transform.rotation = m_owner.transform.rotation * m_localRot; - } - if (m_ttl > 0f) - { - m_ttl -= Time.fixedDeltaTime; - if (m_ttl <= 0f) - { - ZNetScene.instance.Destroy(base.gameObject); - } - } - } - - private void CheckHits() - { - m_hitList.Clear(); - Collider[] array = Physics.OverlapSphere(base.transform.position, m_radius, m_rayMask); - bool flag = false; - Collider[] array2 = array; - foreach (Collider collider in array2) - { - if (OnHit(collider, collider.transform.position)) - { - flag = true; - } - } - if (flag && (bool)m_owner && m_owner.IsPlayer() && m_skill != 0) - { - m_owner.RaiseSkill(m_skill); - } - } - - public void Setup(Character owner, Vector3 velocity, float hitNoise, HitData hitData, ItemDrop.ItemData item) - { - m_owner = owner; - if (item != null) - { - m_level = item.m_quality; - } - if (m_attachToCaster && owner != null) - { - m_offset = owner.transform.InverseTransformPoint(base.transform.position); - m_localRot = Quaternion.Inverse(owner.transform.rotation) * base.transform.rotation; - } - if (hitData != null && m_useAttackSettings) - { - m_damage = hitData.m_damage; - m_blockable = hitData.m_blockable; - m_dodgeable = hitData.m_dodgeable; - m_attackForce = hitData.m_pushForce; - m_backstabBonus = hitData.m_backstabBonus; - m_statusEffect = hitData.m_statusEffect; - m_toolTier = hitData.m_toolTier; - } - } - - private void OnTriggerEnter(Collider collider) - { - if (m_triggerEnterOnly) - { - if (!m_useTriggers) - { - ZLog.LogWarning("AOE got OnTriggerStay but trigger damage is disabled in " + base.gameObject.name); - } - else if (!(m_nview != null) || (m_nview.IsValid() && m_nview.IsOwner())) - { - OnHit(collider, collider.transform.position); - } - } - } - - private void OnTriggerStay(Collider collider) - { - if (!m_triggerEnterOnly) - { - if (!m_useTriggers) - { - ZLog.LogWarning("AOE got OnTriggerStay but trigger damage is disabled in " + base.gameObject.name); - } - else if (!(m_nview != null) || (m_nview.IsValid() && m_nview.IsOwner())) - { - OnHit(collider, collider.transform.position); - } - } - } - - private bool OnHit(Collider collider, Vector3 hitPoint) - { - GameObject gameObject = Projectile.FindHitObject(collider); - if (m_hitList.Contains(gameObject)) - { - return false; - } - m_hitList.Add(gameObject); - float num = 1f; - if ((bool)m_owner && m_owner.IsPlayer() && m_skill != 0) - { - num = m_owner.GetRandomSkillFactor(m_skill); - } - bool result = false; - IDestructible component = gameObject.GetComponent<IDestructible>(); - if (component != null) - { - Character character = component as Character; - if ((bool)character) - { - if (m_nview == null && !character.IsOwner()) - { - return false; - } - if (m_owner != null) - { - if (!m_hitOwner && character == m_owner) - { - return false; - } - if (!m_hitSame && character.m_name == m_owner.m_name) - { - return false; - } - bool flag = BaseAI.IsEnemy(m_owner, character); - if (!m_hitFriendly && !flag) - { - return false; - } - if (!m_hitEnemy && flag) - { - return false; - } - } - if (!m_hitCharacters) - { - return false; - } - if (m_dodgeable && character.IsDodgeInvincible()) - { - return false; - } - } - else if (!m_hitProps) - { - return false; - } - Vector3 dir = (m_attackForceForward ? base.transform.forward : (hitPoint - base.transform.position).normalized); - HitData hitData = new HitData(); - hitData.m_hitCollider = collider; - hitData.m_damage = GetDamage(); - hitData.m_pushForce = m_attackForce * num; - hitData.m_backstabBonus = m_backstabBonus; - hitData.m_point = hitPoint; - hitData.m_dir = dir; - hitData.m_statusEffect = m_statusEffect; - hitData.m_dodgeable = m_dodgeable; - hitData.m_blockable = m_blockable; - hitData.m_toolTier = m_toolTier; - hitData.SetAttacker(m_owner); - hitData.m_damage.Modify(num); - component.Damage(hitData); - if (m_damageSelf > 0f) - { - IDestructible componentInParent = GetComponentInParent<IDestructible>(); - if (componentInParent != null) - { - HitData hitData2 = new HitData(); - hitData2.m_damage.m_damage = m_damageSelf; - hitData2.m_point = base.transform.position; - hitData2.m_blockable = false; - hitData2.m_dodgeable = false; - componentInParent.Damage(hitData2); - } - } - result = true; - } - m_hitEffects.Create(hitPoint, Quaternion.identity); - return result; - } - - private void OnDrawGizmos() - { - _ = m_useTriggers; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Attack.cs b/Valheim_v202102/Valheim/assembly_valheim/Attack.cs deleted file mode 100644 index fe7c100..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Attack.cs +++ /dev/null @@ -1,988 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Serialization; - -[Serializable] -public class Attack -{ - private class HitPoint - { - public GameObject go; - - public Vector3 avgPoint = Vector3.zero; - - public int count; - - public Vector3 firstPoint; - - public Collider collider; - - public Vector3 closestPoint; - - public float closestDistance = 999999f; - } - - public enum AttackType - { - Horizontal, - Vertical, - Projectile, - None, - Area, - TriggerProjectile - } - - public enum HitPointType - { - Closest, - Average, - First - } - - [Header("Common")] - public AttackType m_attackType; - - public string m_attackAnimation = ""; - - public int m_attackRandomAnimations; - - public int m_attackChainLevels; - - public bool m_consumeItem; - - public bool m_hitTerrain = true; - - public float m_attackStamina = 20f; - - public float m_speedFactor = 0.2f; - - public float m_speedFactorRotation = 0.2f; - - public float m_attackStartNoise = 10f; - - public float m_attackHitNoise = 30f; - - public float m_damageMultiplier = 1f; - - public float m_forceMultiplier = 1f; - - public float m_staggerMultiplier = 1f; - - [Header("Misc")] - public string m_attackOriginJoint = ""; - - public float m_attackRange = 1.5f; - - public float m_attackHeight = 0.6f; - - public float m_attackOffset; - - public GameObject m_spawnOnTrigger; - - [Header("Melee/AOE")] - public float m_attackAngle = 90f; - - public float m_attackRayWidth; - - public float m_maxYAngle; - - public bool m_lowerDamagePerHit = true; - - public HitPointType m_hitPointtype; - - public bool m_hitThroughWalls; - - public bool m_multiHit = true; - - public float m_lastChainDamageMultiplier = 2f; - - [BitMask(typeof(DestructibleType))] - public DestructibleType m_resetChainIfHit; - - [Header("Melee special-skill")] - public Skills.SkillType m_specialHitSkill; - - [BitMask(typeof(DestructibleType))] - public DestructibleType m_specialHitType; - - [Header("Projectile")] - public GameObject m_attackProjectile; - - public float m_projectileVel = 10f; - - public float m_projectileVelMin = 2f; - - public float m_projectileAccuracy = 10f; - - public float m_projectileAccuracyMin = 20f; - - public bool m_useCharacterFacing; - - public bool m_useCharacterFacingYAim; - - [FormerlySerializedAs("m_useCharacterFacingAngle")] - public float m_launchAngle; - - public int m_projectiles = 1; - - public int m_projectileBursts = 1; - - public float m_burstInterval; - - public bool m_destroyPreviousProjectile; - - [Header("Attack-Effects")] - public EffectList m_hitEffect = new EffectList(); - - public EffectList m_hitTerrainEffect = new EffectList(); - - public EffectList m_startEffect = new EffectList(); - - public EffectList m_triggerEffect = new EffectList(); - - public EffectList m_trailStartEffect = new EffectList(); - - protected static int m_attackMask; - - protected static int m_attackMaskTerrain; - - private Humanoid m_character; - - private BaseAI m_baseAI; - - private Rigidbody m_body; - - private ZSyncAnimation m_zanim; - - private CharacterAnimEvent m_animEvent; - - [NonSerialized] - private ItemDrop.ItemData m_weapon; - - private VisEquipment m_visEquipment; - - private float m_attackDrawPercentage; - - private const float m_freezeFrameDuration = 0.15f; - - private const float m_chainAttackMaxTime = 0.2f; - - private int m_nextAttackChainLevel; - - private int m_currentAttackCainLevel; - - private bool m_wasInAttack; - - private float m_time; - - private bool m_projectileAttackStarted; - - private float m_projectileFireTimer = -1f; - - private int m_projectileBurstsFired; - - [NonSerialized] - private ItemDrop.ItemData m_ammoItem; - - public bool StartDraw(Humanoid character, ItemDrop.ItemData weapon) - { - if (!HaveAmmo(character, weapon)) - { - return false; - } - EquipAmmoItem(character, weapon); - return true; - } - - public bool Start(Humanoid character, Rigidbody body, ZSyncAnimation zanim, CharacterAnimEvent animEvent, VisEquipment visEquipment, ItemDrop.ItemData weapon, Attack previousAttack, float timeSinceLastAttack, float attackDrawPercentage) - { - if (m_attackAnimation == "") - { - return false; - } - m_character = character; - m_baseAI = m_character.GetComponent<BaseAI>(); - m_body = body; - m_zanim = zanim; - m_animEvent = animEvent; - m_visEquipment = visEquipment; - m_weapon = weapon; - m_attackDrawPercentage = attackDrawPercentage; - if (m_attackMask == 0) - { - m_attackMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "piece_nonsolid", "character", "character_net", "character_ghost", "hitbox", "character_noenv", "vehicle"); - m_attackMaskTerrain = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "piece_nonsolid", "terrain", "character", "character_net", "character_ghost", "hitbox", "character_noenv", "vehicle"); - } - float staminaUsage = GetStaminaUsage(); - if (staminaUsage > 0f && !character.HaveStamina(staminaUsage + 0.1f)) - { - if (character.IsPlayer()) - { - Hud.instance.StaminaBarNoStaminaFlash(); - } - return false; - } - if (!HaveAmmo(character, m_weapon)) - { - return false; - } - EquipAmmoItem(character, m_weapon); - if (m_attackChainLevels > 1) - { - if (previousAttack != null && previousAttack.m_attackAnimation == m_attackAnimation) - { - m_currentAttackCainLevel = previousAttack.m_nextAttackChainLevel; - } - if (m_currentAttackCainLevel >= m_attackChainLevels || timeSinceLastAttack > 0.2f) - { - m_currentAttackCainLevel = 0; - } - m_zanim.SetTrigger(m_attackAnimation + m_currentAttackCainLevel); - } - else if (m_attackRandomAnimations >= 2) - { - int num = UnityEngine.Random.Range(0, m_attackRandomAnimations); - m_zanim.SetTrigger(m_attackAnimation + num); - } - else - { - m_zanim.SetTrigger(m_attackAnimation); - } - if (character.IsPlayer() && m_attackType != AttackType.None && m_currentAttackCainLevel == 0) - { - if (ZInput.IsMouseActive() || m_attackType == AttackType.Projectile) - { - character.transform.rotation = character.GetLookYaw(); - m_body.rotation = character.transform.rotation; - } - else if (ZInput.IsGamepadActive() && !character.IsBlocking() && character.GetMoveDir().magnitude > 0.3f) - { - character.transform.rotation = Quaternion.LookRotation(character.GetMoveDir()); - m_body.rotation = character.transform.rotation; - } - } - weapon.m_lastAttackTime = Time.time; - m_animEvent.ResetChain(); - return true; - } - - private float GetStaminaUsage() - { - if (m_attackStamina <= 0f) - { - return 0f; - } - float attackStamina = m_attackStamina; - float skillFactor = m_character.GetSkillFactor(m_weapon.m_shared.m_skillType); - return attackStamina - attackStamina * 0.33f * skillFactor; - } - - public void Update(float dt) - { - m_time += dt; - if (m_character.InAttack()) - { - if (!m_wasInAttack) - { - m_character.UseStamina(GetStaminaUsage()); - Transform attackOrigin = GetAttackOrigin(); - m_weapon.m_shared.m_startEffect.Create(attackOrigin.position, m_character.transform.rotation, attackOrigin); - m_startEffect.Create(attackOrigin.position, m_character.transform.rotation, attackOrigin); - m_character.AddNoise(m_attackStartNoise); - m_nextAttackChainLevel = m_currentAttackCainLevel + 1; - if (m_nextAttackChainLevel >= m_attackChainLevels) - { - m_nextAttackChainLevel = 0; - } - } - m_wasInAttack = true; - } - else if (m_wasInAttack) - { - OnAttackDone(); - m_wasInAttack = false; - } - UpdateProjectile(dt); - } - - private void OnAttackDone() - { - if ((bool)m_visEquipment) - { - m_visEquipment.SetWeaponTrails(enabled: false); - } - } - - public void Stop() - { - if (m_wasInAttack) - { - OnAttackDone(); - m_wasInAttack = false; - } - } - - public void OnAttackTrigger() - { - if (UseAmmo()) - { - switch (m_attackType) - { - case AttackType.Horizontal: - case AttackType.Vertical: - DoMeleeAttack(); - break; - case AttackType.Area: - DoAreaAttack(); - break; - case AttackType.Projectile: - ProjectileAttackTriggered(); - break; - case AttackType.None: - DoNonAttack(); - break; - } - if (m_consumeItem) - { - ConsumeItem(); - } - } - } - - private void ConsumeItem() - { - if (m_weapon.m_shared.m_maxStackSize > 1 && m_weapon.m_stack > 1) - { - m_weapon.m_stack--; - return; - } - m_character.UnequipItem(m_weapon, triggerEquipEffects: false); - m_character.GetInventory().RemoveItem(m_weapon); - } - - private static bool EquipAmmoItem(Humanoid character, ItemDrop.ItemData weapon) - { - if (!string.IsNullOrEmpty(weapon.m_shared.m_ammoType)) - { - ItemDrop.ItemData ammoItem = character.GetAmmoItem(); - if (ammoItem != null && character.GetInventory().ContainsItem(ammoItem) && ammoItem.m_shared.m_ammoType == weapon.m_shared.m_ammoType) - { - return true; - } - ItemDrop.ItemData ammoItem2 = character.GetInventory().GetAmmoItem(weapon.m_shared.m_ammoType); - if (ammoItem2.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Ammo) - { - return character.EquipItem(ammoItem2); - } - } - return true; - } - - private static bool HaveAmmo(Humanoid character, ItemDrop.ItemData weapon) - { - if (!string.IsNullOrEmpty(weapon.m_shared.m_ammoType)) - { - ItemDrop.ItemData itemData = character.GetAmmoItem(); - if (itemData != null && (!character.GetInventory().ContainsItem(itemData) || itemData.m_shared.m_ammoType != weapon.m_shared.m_ammoType)) - { - itemData = null; - } - if (itemData == null) - { - itemData = character.GetInventory().GetAmmoItem(weapon.m_shared.m_ammoType); - } - if (itemData == null) - { - character.Message(MessageHud.MessageType.Center, "$msg_outof " + weapon.m_shared.m_ammoType); - return false; - } - if (itemData.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Consumable) - { - return character.CanConsumeItem(itemData); - } - return true; - } - return true; - } - - private bool UseAmmo() - { - m_ammoItem = null; - ItemDrop.ItemData itemData = null; - if (!string.IsNullOrEmpty(m_weapon.m_shared.m_ammoType)) - { - itemData = m_character.GetAmmoItem(); - if (itemData != null && (!m_character.GetInventory().ContainsItem(itemData) || itemData.m_shared.m_ammoType != m_weapon.m_shared.m_ammoType)) - { - itemData = null; - } - if (itemData == null) - { - itemData = m_character.GetInventory().GetAmmoItem(m_weapon.m_shared.m_ammoType); - } - if (itemData == null) - { - m_character.Message(MessageHud.MessageType.Center, "$msg_outof " + m_weapon.m_shared.m_ammoType); - return false; - } - if (itemData.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Consumable) - { - bool num = m_character.ConsumeItem(m_character.GetInventory(), itemData); - if (num) - { - m_ammoItem = itemData; - } - return num; - } - m_character.GetInventory().RemoveItem(itemData, 1); - m_ammoItem = itemData; - return true; - } - return true; - } - - private void ProjectileAttackTriggered() - { - GetProjectileSpawnPoint(out var spawnPoint, out var aimDir); - m_weapon.m_shared.m_triggerEffect.Create(spawnPoint, Quaternion.LookRotation(aimDir)); - m_triggerEffect.Create(spawnPoint, Quaternion.LookRotation(aimDir)); - if (m_weapon.m_shared.m_useDurability && m_character.IsPlayer()) - { - m_weapon.m_durability -= m_weapon.m_shared.m_useDurabilityDrain; - } - if (m_projectileBursts == 1) - { - FireProjectileBurst(); - } - else - { - m_projectileAttackStarted = true; - } - } - - private void UpdateProjectile(float dt) - { - if (m_projectileAttackStarted && m_projectileBurstsFired < m_projectileBursts) - { - m_projectileFireTimer -= dt; - if (m_projectileFireTimer <= 0f) - { - m_projectileFireTimer = m_burstInterval; - FireProjectileBurst(); - m_projectileBurstsFired++; - } - } - } - - private Transform GetAttackOrigin() - { - if (m_attackOriginJoint.Length > 0) - { - return Utils.FindChild(m_character.GetVisual().transform, m_attackOriginJoint); - } - return m_character.transform; - } - - private void GetProjectileSpawnPoint(out Vector3 spawnPoint, out Vector3 aimDir) - { - Transform attackOrigin = GetAttackOrigin(); - Transform transform = m_character.transform; - spawnPoint = attackOrigin.position + transform.up * m_attackHeight + transform.forward * m_attackRange + transform.right * m_attackOffset; - aimDir = m_character.GetAimDir(spawnPoint); - if ((bool)m_baseAI) - { - Character targetCreature = m_baseAI.GetTargetCreature(); - if ((bool)targetCreature) - { - Vector3 normalized = (targetCreature.GetCenterPoint() - spawnPoint).normalized; - aimDir = Vector3.RotateTowards(m_character.transform.forward, normalized, (float)Math.PI / 2f, 1f); - } - } - } - - private void FireProjectileBurst() - { - ItemDrop.ItemData ammoItem = m_ammoItem; - GameObject attackProjectile = m_attackProjectile; - float num = m_projectileVel; - float num2 = m_projectileVelMin; - float num3 = m_projectileAccuracy; - float num4 = m_projectileAccuracyMin; - float num5 = m_attackHitNoise; - if (ammoItem != null && (bool)ammoItem.m_shared.m_attack.m_attackProjectile) - { - attackProjectile = ammoItem.m_shared.m_attack.m_attackProjectile; - num += ammoItem.m_shared.m_attack.m_projectileVel; - num2 += ammoItem.m_shared.m_attack.m_projectileVelMin; - num3 += ammoItem.m_shared.m_attack.m_projectileAccuracy; - num4 += ammoItem.m_shared.m_attack.m_projectileAccuracyMin; - num5 += ammoItem.m_shared.m_attack.m_attackHitNoise; - } - float num6 = m_character.GetRandomSkillFactor(m_weapon.m_shared.m_skillType); - if (m_weapon.m_shared.m_holdDurationMin > 0f) - { - num3 = Mathf.Lerp(num4, num3, Mathf.Pow(m_attackDrawPercentage, 0.5f)); - num6 *= m_attackDrawPercentage; - num = Mathf.Lerp(num2, num, m_attackDrawPercentage); - } - GetProjectileSpawnPoint(out var spawnPoint, out var aimDir); - Transform transform = m_character.transform; - if (m_useCharacterFacing) - { - Vector3 forward = Vector3.forward; - if (m_useCharacterFacingYAim) - { - forward.y = aimDir.y; - } - aimDir = transform.TransformDirection(forward); - } - if (m_launchAngle != 0f) - { - Vector3 axis = Vector3.Cross(Vector3.up, aimDir); - aimDir = Quaternion.AngleAxis(m_launchAngle, axis) * aimDir; - } - for (int i = 0; i < m_projectiles; i++) - { - if (m_destroyPreviousProjectile && (bool)m_weapon.m_lastProjectile) - { - ZNetScene.instance.Destroy(m_weapon.m_lastProjectile); - m_weapon.m_lastProjectile = null; - } - Vector3 vector = aimDir; - Vector3 axis2 = Vector3.Cross(vector, Vector3.up); - Quaternion quaternion = Quaternion.AngleAxis(UnityEngine.Random.Range(0f - num3, num3), Vector3.up); - vector = Quaternion.AngleAxis(UnityEngine.Random.Range(0f - num3, num3), axis2) * vector; - vector = quaternion * vector; - GameObject gameObject = UnityEngine.Object.Instantiate(attackProjectile, spawnPoint, Quaternion.LookRotation(vector)); - HitData hitData = new HitData(); - hitData.m_toolTier = m_weapon.m_shared.m_toolTier; - hitData.m_pushForce = m_weapon.m_shared.m_attackForce * m_forceMultiplier; - hitData.m_backstabBonus = m_weapon.m_shared.m_backstabBonus; - hitData.m_staggerMultiplier = m_staggerMultiplier; - hitData.m_damage.Add(m_weapon.GetDamage()); - hitData.m_statusEffect = (m_weapon.m_shared.m_attackStatusEffect ? m_weapon.m_shared.m_attackStatusEffect.name : ""); - hitData.m_blockable = m_weapon.m_shared.m_blockable; - hitData.m_dodgeable = m_weapon.m_shared.m_dodgeable; - hitData.m_skill = m_weapon.m_shared.m_skillType; - hitData.SetAttacker(m_character); - if (ammoItem != null) - { - hitData.m_damage.Add(ammoItem.GetDamage()); - hitData.m_pushForce += ammoItem.m_shared.m_attackForce; - if (ammoItem.m_shared.m_attackStatusEffect != null) - { - hitData.m_statusEffect = ammoItem.m_shared.m_attackStatusEffect.name; - } - if (!ammoItem.m_shared.m_blockable) - { - hitData.m_blockable = false; - } - if (!ammoItem.m_shared.m_dodgeable) - { - hitData.m_dodgeable = false; - } - } - hitData.m_pushForce *= num6; - hitData.m_damage.Modify(m_damageMultiplier); - hitData.m_damage.Modify(num6); - hitData.m_damage.Modify(GetLevelDamageFactor()); - m_character.GetSEMan().ModifyAttack(m_weapon.m_shared.m_skillType, ref hitData); - gameObject.GetComponent<IProjectile>()?.Setup(m_character, vector * num, num5, hitData, m_weapon); - m_weapon.m_lastProjectile = gameObject; - } - } - - private void DoNonAttack() - { - if (m_weapon.m_shared.m_useDurability && m_character.IsPlayer()) - { - m_weapon.m_durability -= m_weapon.m_shared.m_useDurabilityDrain; - } - Transform attackOrigin = GetAttackOrigin(); - m_weapon.m_shared.m_triggerEffect.Create(attackOrigin.position, m_character.transform.rotation, attackOrigin); - m_triggerEffect.Create(attackOrigin.position, m_character.transform.rotation, attackOrigin); - if ((bool)m_weapon.m_shared.m_consumeStatusEffect) - { - m_character.GetSEMan().AddStatusEffect(m_weapon.m_shared.m_consumeStatusEffect, resetTime: true); - } - m_character.AddNoise(m_attackHitNoise); - } - - private float GetLevelDamageFactor() - { - return 1f + (float)Mathf.Max(0, m_character.GetLevel() - 1) * 0.5f; - } - - private void DoAreaAttack() - { - Transform transform = m_character.transform; - Transform attackOrigin = GetAttackOrigin(); - Vector3 vector = attackOrigin.position + Vector3.up * m_attackHeight + transform.forward * m_attackRange + transform.right * m_attackOffset; - m_weapon.m_shared.m_triggerEffect.Create(vector, transform.rotation, attackOrigin); - m_triggerEffect.Create(vector, transform.rotation, attackOrigin); - Vector3 vector2 = vector - transform.position; - vector2.y = 0f; - vector2.Normalize(); - int num = 0; - Vector3 zero = Vector3.zero; - bool flag = false; - bool flag2 = false; - float randomSkillFactor = m_character.GetRandomSkillFactor(m_weapon.m_shared.m_skillType); - int layerMask = (m_hitTerrain ? m_attackMaskTerrain : m_attackMask); - Collider[] array = Physics.OverlapSphere(vector, m_attackRayWidth, layerMask, QueryTriggerInteraction.UseGlobal); - HashSet<GameObject> hashSet = new HashSet<GameObject>(); - Collider[] array2 = array; - foreach (Collider collider in array2) - { - if (collider.gameObject == m_character.gameObject) - { - continue; - } - GameObject gameObject = Projectile.FindHitObject(collider); - if (gameObject == m_character.gameObject || hashSet.Contains(gameObject)) - { - continue; - } - hashSet.Add(gameObject); - Vector3 vector3 = ((!(collider is MeshCollider)) ? collider.ClosestPoint(vector) : collider.ClosestPointOnBounds(vector)); - IDestructible component = gameObject.GetComponent<IDestructible>(); - if (component != null) - { - Vector3 vector4 = vector3 - vector; - vector4.y = 0f; - float num2 = Vector3.Dot(vector2, vector4); - if (num2 < 0f) - { - vector4 += vector2 * (0f - num2); - } - vector4.Normalize(); - HitData hitData = new HitData(); - hitData.m_toolTier = m_weapon.m_shared.m_toolTier; - hitData.m_statusEffect = (m_weapon.m_shared.m_attackStatusEffect ? m_weapon.m_shared.m_attackStatusEffect.name : ""); - hitData.m_pushForce = m_weapon.m_shared.m_attackForce * randomSkillFactor * m_forceMultiplier; - hitData.m_backstabBonus = m_weapon.m_shared.m_backstabBonus; - hitData.m_staggerMultiplier = m_staggerMultiplier; - hitData.m_dodgeable = m_weapon.m_shared.m_dodgeable; - hitData.m_blockable = m_weapon.m_shared.m_blockable; - hitData.m_skill = m_weapon.m_shared.m_skillType; - hitData.m_damage.Add(m_weapon.GetDamage()); - hitData.m_point = vector3; - hitData.m_dir = vector4; - hitData.m_hitCollider = collider; - hitData.SetAttacker(m_character); - hitData.m_damage.Modify(m_damageMultiplier); - hitData.m_damage.Modify(randomSkillFactor); - hitData.m_damage.Modify(GetLevelDamageFactor()); - if (m_attackChainLevels > 1 && m_currentAttackCainLevel == m_attackChainLevels - 1 && m_lastChainDamageMultiplier > 1f) - { - hitData.m_damage.Modify(m_lastChainDamageMultiplier); - hitData.m_pushForce *= 1.2f; - } - m_character.GetSEMan().ModifyAttack(m_weapon.m_shared.m_skillType, ref hitData); - Character character = component as Character; - if ((bool)character) - { - if ((!m_character.IsPlayer() && !BaseAI.IsEnemy(m_character, character)) || (hitData.m_dodgeable && character.IsDodgeInvincible())) - { - continue; - } - flag2 = true; - } - component.Damage(hitData); - flag = true; - } - num++; - zero += vector3; - } - if (num > 0) - { - zero /= (float)num; - m_weapon.m_shared.m_hitEffect.Create(zero, Quaternion.identity); - m_hitEffect.Create(zero, Quaternion.identity); - if (m_weapon.m_shared.m_useDurability && m_character.IsPlayer()) - { - m_weapon.m_durability -= 1f; - } - m_character.AddNoise(m_attackHitNoise); - if (flag) - { - m_character.RaiseSkill(m_weapon.m_shared.m_skillType, flag2 ? 1.5f : 1f); - } - } - if ((bool)m_spawnOnTrigger) - { - UnityEngine.Object.Instantiate(m_spawnOnTrigger, vector, Quaternion.identity).GetComponent<IProjectile>()?.Setup(m_character, m_character.transform.forward, -1f, null, null); - } - } - - private void GetMeleeAttackDir(out Transform originJoint, out Vector3 attackDir) - { - originJoint = GetAttackOrigin(); - Vector3 forward = m_character.transform.forward; - Vector3 aimDir = m_character.GetAimDir(originJoint.position); - aimDir.x = forward.x; - aimDir.z = forward.z; - aimDir.Normalize(); - attackDir = Vector3.RotateTowards(m_character.transform.forward, aimDir, (float)Math.PI / 180f * m_maxYAngle, 10f); - } - - private void AddHitPoint(List<HitPoint> list, GameObject go, Collider collider, Vector3 point, float distance) - { - HitPoint hitPoint = null; - for (int num = list.Count - 1; num >= 0; num--) - { - if (list[num].go == go) - { - hitPoint = list[num]; - break; - } - } - if (hitPoint == null) - { - hitPoint = new HitPoint(); - hitPoint.go = go; - hitPoint.collider = collider; - hitPoint.firstPoint = point; - list.Add(hitPoint); - } - hitPoint.avgPoint += point; - hitPoint.count++; - if (distance < hitPoint.closestDistance) - { - hitPoint.closestPoint = point; - hitPoint.closestDistance = distance; - } - } - - private void DoMeleeAttack() - { - GetMeleeAttackDir(out var originJoint, out var attackDir); - Vector3 vector = m_character.transform.InverseTransformDirection(attackDir); - Quaternion quaternion = Quaternion.LookRotation(attackDir, Vector3.up); - m_weapon.m_shared.m_triggerEffect.Create(originJoint.position, quaternion, originJoint); - m_triggerEffect.Create(originJoint.position, quaternion, originJoint); - Vector3 vector2 = originJoint.position + Vector3.up * m_attackHeight + m_character.transform.right * m_attackOffset; - float num = m_attackAngle / 2f; - float num2 = 4f; - float attackRange = m_attackRange; - List<HitPoint> list = new List<HitPoint>(); - HashSet<Skills.SkillType> hashSet = new HashSet<Skills.SkillType>(); - int layerMask = (m_hitTerrain ? m_attackMaskTerrain : m_attackMask); - for (float num3 = 0f - num; num3 <= num; num3 += num2) - { - Quaternion quaternion2 = Quaternion.identity; - if (m_attackType == AttackType.Horizontal) - { - quaternion2 = Quaternion.Euler(0f, 0f - num3, 0f); - } - else if (m_attackType == AttackType.Vertical) - { - quaternion2 = Quaternion.Euler(num3, 0f, 0f); - } - Vector3 vector3 = m_character.transform.TransformDirection(quaternion2 * vector); - Debug.DrawLine(vector2, vector2 + vector3 * attackRange); - RaycastHit[] array = ((!(m_attackRayWidth > 0f)) ? Physics.RaycastAll(vector2, vector3, attackRange, layerMask, QueryTriggerInteraction.Ignore) : Physics.SphereCastAll(vector2, m_attackRayWidth, vector3, Mathf.Max(0f, attackRange - m_attackRayWidth), layerMask, QueryTriggerInteraction.Ignore)); - Array.Sort(array, (RaycastHit x, RaycastHit y) => x.distance.CompareTo(y.distance)); - RaycastHit[] array2 = array; - for (int i = 0; i < array2.Length; i++) - { - RaycastHit raycastHit = array2[i]; - if (raycastHit.collider.gameObject == m_character.gameObject) - { - continue; - } - Vector3 vector4 = raycastHit.point; - if (raycastHit.distance < float.Epsilon) - { - vector4 = ((!(raycastHit.collider is MeshCollider)) ? raycastHit.collider.ClosestPoint(vector2) : (vector2 + vector3 * attackRange)); - } - if (m_attackAngle < 180f && Vector3.Dot(vector4 - vector2, attackDir) <= 0f) - { - continue; - } - GameObject gameObject = Projectile.FindHitObject(raycastHit.collider); - if (gameObject == m_character.gameObject) - { - continue; - } - Vagon component = gameObject.GetComponent<Vagon>(); - if ((bool)component && component.IsAttached(m_character)) - { - continue; - } - Character component2 = gameObject.GetComponent<Character>(); - if (!(component2 != null) || ((m_character.IsPlayer() || BaseAI.IsEnemy(m_character, component2)) && (!m_weapon.m_shared.m_dodgeable || !component2.IsDodgeInvincible()))) - { - AddHitPoint(list, gameObject, raycastHit.collider, vector4, raycastHit.distance); - if (!m_hitThroughWalls) - { - break; - } - } - } - } - int num4 = 0; - Vector3 zero = Vector3.zero; - bool flag = false; - bool flag2 = false; - foreach (HitPoint item in list) - { - GameObject go = item.go; - Vector3 vector5 = item.avgPoint / item.count; - Vector3 vector6 = vector5; - switch (m_hitPointtype) - { - case HitPointType.Average: - vector6 = vector5; - break; - case HitPointType.First: - vector6 = item.firstPoint; - break; - case HitPointType.Closest: - vector6 = item.closestPoint; - break; - } - num4++; - zero += vector5; - m_weapon.m_shared.m_hitEffect.Create(vector6, Quaternion.identity); - m_hitEffect.Create(vector6, Quaternion.identity); - IDestructible component3 = go.GetComponent<IDestructible>(); - if (component3 != null) - { - DestructibleType destructibleType = component3.GetDestructibleType(); - Skills.SkillType skillType = m_weapon.m_shared.m_skillType; - if (m_specialHitSkill != 0 && (destructibleType & m_specialHitType) != 0) - { - skillType = m_specialHitSkill; - } - float num5 = m_character.GetRandomSkillFactor(skillType); - if (m_lowerDamagePerHit && list.Count > 1) - { - num5 /= (float)list.Count * 0.75f; - } - HitData hitData = new HitData(); - hitData.m_toolTier = m_weapon.m_shared.m_toolTier; - hitData.m_statusEffect = (m_weapon.m_shared.m_attackStatusEffect ? m_weapon.m_shared.m_attackStatusEffect.name : ""); - hitData.m_pushForce = m_weapon.m_shared.m_attackForce * num5 * m_forceMultiplier; - hitData.m_backstabBonus = m_weapon.m_shared.m_backstabBonus; - hitData.m_staggerMultiplier = m_staggerMultiplier; - hitData.m_dodgeable = m_weapon.m_shared.m_dodgeable; - hitData.m_blockable = m_weapon.m_shared.m_blockable; - hitData.m_skill = skillType; - hitData.m_damage = m_weapon.GetDamage(); - hitData.m_point = vector6; - hitData.m_dir = (vector6 - vector2).normalized; - hitData.m_hitCollider = item.collider; - hitData.SetAttacker(m_character); - hitData.m_damage.Modify(m_damageMultiplier); - hitData.m_damage.Modify(num5); - hitData.m_damage.Modify(GetLevelDamageFactor()); - if (m_attackChainLevels > 1 && m_currentAttackCainLevel == m_attackChainLevels - 1) - { - hitData.m_damage.Modify(2f); - hitData.m_pushForce *= 1.2f; - } - m_character.GetSEMan().ModifyAttack(skillType, ref hitData); - if (component3 is Character) - { - flag2 = true; - } - component3.Damage(hitData); - if ((destructibleType & m_resetChainIfHit) != 0) - { - m_nextAttackChainLevel = 0; - } - hashSet.Add(skillType); - if (!m_multiHit) - { - break; - } - } - if (go.GetComponent<Heightmap>() != null && !flag) - { - flag = true; - m_weapon.m_shared.m_hitTerrainEffect.Create(vector5, quaternion); - m_hitTerrainEffect.Create(vector5, quaternion); - if ((bool)m_weapon.m_shared.m_spawnOnHitTerrain) - { - SpawnOnHitTerrain(vector5, m_weapon.m_shared.m_spawnOnHitTerrain); - } - if (!m_multiHit) - { - break; - } - } - } - if (num4 > 0) - { - zero /= (float)num4; - if (m_weapon.m_shared.m_useDurability && m_character.IsPlayer()) - { - m_weapon.m_durability -= m_weapon.m_shared.m_useDurabilityDrain; - } - m_character.AddNoise(m_attackHitNoise); - m_animEvent.FreezeFrame(0.15f); - if ((bool)m_weapon.m_shared.m_spawnOnHit) - { - UnityEngine.Object.Instantiate(m_weapon.m_shared.m_spawnOnHit, zero, quaternion).GetComponent<IProjectile>()?.Setup(m_character, Vector3.zero, m_attackHitNoise, null, m_weapon); - } - foreach (Skills.SkillType item2 in hashSet) - { - m_character.RaiseSkill(item2, flag2 ? 1.5f : 1f); - } - } - if ((bool)m_spawnOnTrigger) - { - UnityEngine.Object.Instantiate(m_spawnOnTrigger, vector2, Quaternion.identity).GetComponent<IProjectile>()?.Setup(m_character, m_character.transform.forward, -1f, null, m_weapon); - } - } - - private void SpawnOnHitTerrain(Vector3 hitPoint, GameObject prefab) - { - TerrainModifier componentInChildren = prefab.GetComponentInChildren<TerrainModifier>(); - if (!componentInChildren || (PrivateArea.CheckAccess(hitPoint, componentInChildren.GetRadius()) && !Location.IsInsideNoBuildLocation(hitPoint))) - { - TerrainModifier.SetTriggerOnPlaced(trigger: true); - GameObject gameObject = UnityEngine.Object.Instantiate(prefab, hitPoint, Quaternion.LookRotation(m_character.transform.forward)); - TerrainModifier.SetTriggerOnPlaced(trigger: false); - gameObject.GetComponent<IProjectile>()?.Setup(m_character, Vector3.zero, m_attackHitNoise, null, m_weapon); - } - } - - public Attack Clone() - { - return MemberwiseClone() as Attack; - } - - public ItemDrop.ItemData GetWeapon() - { - return m_weapon; - } - - public bool CanStartChainAttack() - { - if (m_nextAttackChainLevel > 0) - { - return m_animEvent.CanChain(); - } - return false; - } - - public void OnTrailStart() - { - if (m_attackType == AttackType.Projectile) - { - Transform attackOrigin = GetAttackOrigin(); - m_weapon.m_shared.m_trailStartEffect.Create(attackOrigin.position, m_character.transform.rotation); - m_trailStartEffect.Create(attackOrigin.position, m_character.transform.rotation); - } - else - { - GetMeleeAttackDir(out var originJoint, out var attackDir); - Quaternion rot = Quaternion.LookRotation(attackDir, Vector3.up); - m_weapon.m_shared.m_trailStartEffect.Create(originJoint.position, rot); - m_trailStartEffect.Create(originJoint.position, rot); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/AudioMan.cs b/Valheim_v202102/Valheim/assembly_valheim/AudioMan.cs deleted file mode 100644 index 3c4d300..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/AudioMan.cs +++ /dev/null @@ -1,496 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Audio; -using UnityEngine.Rendering; - -public class AudioMan : MonoBehaviour -{ - [Serializable] - public class BiomeAmbients - { - public string m_name = ""; - - [BitMask(typeof(Heightmap.Biome))] - public Heightmap.Biome m_biome; - - public List<AudioClip> m_randomAmbientClips = new List<AudioClip>(); - - public List<AudioClip> m_randomAmbientClipsDay = new List<AudioClip>(); - - public List<AudioClip> m_randomAmbientClipsNight = new List<AudioClip>(); - } - - private enum Snapshot - { - Default, - Menu, - Indoor - } - - private static AudioMan m_instance; - - [Header("Mixers")] - public AudioMixerGroup m_ambientMixer; - - public AudioMixer m_masterMixer; - - public float m_snapshotTransitionTime = 2f; - - [Header("Wind")] - public AudioClip m_windAudio; - - public float m_windMinVol; - - public float m_windMaxVol = 1f; - - public float m_windMinPitch = 0.5f; - - public float m_windMaxPitch = 1.5f; - - public float m_windVariation = 0.2f; - - public float m_windIntensityPower = 1.5f; - - [Header("Ocean")] - public AudioClip m_oceanAudio; - - public float m_oceanVolumeMax = 1f; - - public float m_oceanVolumeMin = 1f; - - public float m_oceanFadeSpeed = 0.1f; - - public float m_oceanMoveSpeed = 0.1f; - - public float m_oceanDepthTreshold = 10f; - - [Header("Random ambients")] - public float m_ambientFadeTime = 2f; - - public float m_randomAmbientInterval = 5f; - - public float m_randomAmbientChance = 0.5f; - - public float m_randomMinPitch = 0.9f; - - public float m_randomMaxPitch = 1.1f; - - public float m_randomMinVol = 0.2f; - - public float m_randomMaxVol = 0.4f; - - public float m_randomPan = 0.2f; - - public float m_randomFadeIn = 0.2f; - - public float m_randomFadeOut = 2f; - - public float m_randomMinDistance = 5f; - - public float m_randomMaxDistance = 20f; - - public List<BiomeAmbients> m_randomAmbients = new List<BiomeAmbients>(); - - public GameObject m_randomAmbientPrefab; - - private AudioSource m_oceanAmbientSource; - - private AudioSource m_ambientLoopSource; - - private AudioSource m_windLoopSource; - - private AudioClip m_queuedAmbientLoop; - - private float m_queuedAmbientVol; - - private float m_ambientVol; - - private float m_randomAmbientTimer; - - private bool m_stopAmbientLoop; - - private bool m_indoor; - - private float m_oceanUpdateTimer; - - private bool m_haveOcean; - - private Vector3 m_avgOceanPoint = Vector3.zero; - - private Snapshot m_currentSnapshot; - - public static AudioMan instance => m_instance; - - private void Awake() - { - if (m_instance != null) - { - ZLog.Log("Audioman already exist, destroying self"); - UnityEngine.Object.DestroyImmediate(base.gameObject); - return; - } - m_instance = this; - UnityEngine.Object.DontDestroyOnLoad(base.gameObject); - GameObject gameObject = new GameObject("ocean_ambient_loop"); - gameObject.transform.SetParent(base.transform); - m_oceanAmbientSource = gameObject.AddComponent<AudioSource>(); - m_oceanAmbientSource.loop = true; - m_oceanAmbientSource.spatialBlend = 0.75f; - m_oceanAmbientSource.outputAudioMixerGroup = m_ambientMixer; - m_oceanAmbientSource.maxDistance = 128f; - m_oceanAmbientSource.minDistance = 40f; - m_oceanAmbientSource.spread = 90f; - m_oceanAmbientSource.rolloffMode = AudioRolloffMode.Linear; - m_oceanAmbientSource.clip = m_oceanAudio; - m_oceanAmbientSource.bypassReverbZones = true; - m_oceanAmbientSource.dopplerLevel = 0f; - m_oceanAmbientSource.volume = 0f; - m_oceanAmbientSource.Play(); - GameObject gameObject2 = new GameObject("ambient_loop"); - gameObject2.transform.SetParent(base.transform); - m_ambientLoopSource = gameObject2.AddComponent<AudioSource>(); - m_ambientLoopSource.loop = true; - m_ambientLoopSource.spatialBlend = 0f; - m_ambientLoopSource.outputAudioMixerGroup = m_ambientMixer; - m_ambientLoopSource.bypassReverbZones = true; - m_ambientLoopSource.volume = 0f; - GameObject gameObject3 = new GameObject("wind_loop"); - gameObject3.transform.SetParent(base.transform); - m_windLoopSource = gameObject3.AddComponent<AudioSource>(); - m_windLoopSource.loop = true; - m_windLoopSource.spatialBlend = 0f; - m_windLoopSource.outputAudioMixerGroup = m_ambientMixer; - m_windLoopSource.bypassReverbZones = true; - m_windLoopSource.clip = m_windAudio; - m_windLoopSource.volume = 0f; - m_windLoopSource.Play(); - if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null) - { - AudioListener.volume = 0f; - return; - } - AudioListener.volume = PlayerPrefs.GetFloat("MasterVolume", AudioListener.volume); - SetSFXVolume(PlayerPrefs.GetFloat("SfxVolume", GetSFXVolume())); - } - - private void OnDestroy() - { - if (m_instance == this) - { - m_instance = null; - } - } - - private void Update() - { - float deltaTime = Time.deltaTime; - UpdateAmbientLoop(deltaTime); - UpdateRandomAmbient(deltaTime); - UpdateSnapshots(deltaTime); - } - - private void FixedUpdate() - { - float fixedDeltaTime = Time.fixedDeltaTime; - UpdateOceanAmbiance(fixedDeltaTime); - UpdateWindAmbience(fixedDeltaTime); - } - - public static float GetSFXVolume() - { - if (m_instance == null) - { - return 1f; - } - m_instance.m_masterMixer.GetFloat("SfxVol", out var value); - return Mathf.Pow(10f, value / 20f); - } - - public static void SetSFXVolume(float vol) - { - if (!(m_instance == null)) - { - float value = Mathf.Log(Mathf.Clamp(vol, 0.001f, 1f)) * 10f; - m_instance.m_masterMixer.SetFloat("SfxVol", value); - } - } - - private void UpdateRandomAmbient(float dt) - { - if (InMenu()) - { - return; - } - m_randomAmbientTimer += dt; - if (!(m_randomAmbientTimer > m_randomAmbientInterval)) - { - return; - } - m_randomAmbientTimer = 0f; - if (UnityEngine.Random.value <= m_randomAmbientChance) - { - AudioClip audioClip = SelectRandomAmbientClip(); - if ((bool)audioClip) - { - Vector3 randomAmbiencePoint = GetRandomAmbiencePoint(); - GameObject obj = UnityEngine.Object.Instantiate(m_randomAmbientPrefab, randomAmbiencePoint, Quaternion.identity, base.transform); - obj.GetComponent<AudioSource>().pitch = UnityEngine.Random.Range(m_randomMinPitch, m_randomMaxPitch); - ZSFX component = obj.GetComponent<ZSFX>(); - component.m_audioClips = new AudioClip[1] { audioClip }; - component.Play(); - component.FadeOut(); - } - } - } - - private Vector3 GetRandomAmbiencePoint() - { - Vector3 vector = Vector3.zero; - Camera mainCamera = Utils.GetMainCamera(); - if ((bool)Player.m_localPlayer) - { - vector = Player.m_localPlayer.transform.position; - } - else if ((bool)mainCamera) - { - vector = mainCamera.transform.position; - } - float f = UnityEngine.Random.value * (float)Math.PI * 2f; - float num = UnityEngine.Random.Range(m_randomMinDistance, m_randomMaxDistance); - return vector + new Vector3(Mathf.Sin(f) * num, 0f, Mathf.Cos(f) * num); - } - - private AudioClip SelectRandomAmbientClip() - { - if (EnvMan.instance == null) - { - return null; - } - EnvSetup currentEnvironment = EnvMan.instance.GetCurrentEnvironment(); - BiomeAmbients biomeAmbients = null; - biomeAmbients = ((currentEnvironment == null || string.IsNullOrEmpty(currentEnvironment.m_ambientList)) ? GetBiomeAmbients(EnvMan.instance.GetCurrentBiome()) : GetAmbients(currentEnvironment.m_ambientList)); - if (biomeAmbients == null) - { - return null; - } - List<AudioClip> list = new List<AudioClip>(biomeAmbients.m_randomAmbientClips); - List<AudioClip> collection = (EnvMan.instance.IsDaylight() ? biomeAmbients.m_randomAmbientClipsDay : biomeAmbients.m_randomAmbientClipsNight); - list.AddRange(collection); - if (list.Count == 0) - { - return null; - } - return list[UnityEngine.Random.Range(0, list.Count)]; - } - - private void UpdateAmbientLoop(float dt) - { - if (EnvMan.instance == null) - { - m_ambientLoopSource.Stop(); - } - else if ((bool)m_queuedAmbientLoop || m_stopAmbientLoop) - { - if (!m_ambientLoopSource.isPlaying || m_ambientLoopSource.volume <= 0f) - { - m_ambientLoopSource.Stop(); - m_stopAmbientLoop = false; - if ((bool)m_queuedAmbientLoop) - { - m_ambientLoopSource.clip = m_queuedAmbientLoop; - m_ambientLoopSource.volume = 0f; - m_ambientLoopSource.Play(); - m_ambientVol = m_queuedAmbientVol; - m_queuedAmbientLoop = null; - } - } - else - { - m_ambientLoopSource.volume = Mathf.MoveTowards(m_ambientLoopSource.volume, 0f, dt / m_ambientFadeTime); - } - } - else if (m_ambientLoopSource.isPlaying) - { - m_ambientLoopSource.volume = Mathf.MoveTowards(m_ambientLoopSource.volume, m_ambientVol, dt / m_ambientFadeTime); - } - } - - public void SetIndoor(bool indoor) - { - m_indoor = indoor; - } - - private bool InMenu() - { - if (!(FejdStartup.instance != null) && !Menu.IsVisible() && (!Game.instance || !Game.instance.WaitingForRespawn())) - { - return TextViewer.IsShowingIntro(); - } - return true; - } - - private void UpdateSnapshots(float dt) - { - if (InMenu()) - { - SetSnapshot(Snapshot.Menu); - } - else if (m_indoor) - { - SetSnapshot(Snapshot.Indoor); - } - else - { - SetSnapshot(Snapshot.Default); - } - } - - private void SetSnapshot(Snapshot snapshot) - { - if (m_currentSnapshot != snapshot) - { - m_currentSnapshot = snapshot; - switch (snapshot) - { - case Snapshot.Default: - m_masterMixer.FindSnapshot("Default").TransitionTo(m_snapshotTransitionTime); - break; - case Snapshot.Indoor: - m_masterMixer.FindSnapshot("Indoor").TransitionTo(m_snapshotTransitionTime); - break; - case Snapshot.Menu: - m_masterMixer.FindSnapshot("Menu").TransitionTo(m_snapshotTransitionTime); - break; - } - } - } - - public void StopAmbientLoop() - { - m_queuedAmbientLoop = null; - m_stopAmbientLoop = true; - } - - public void QueueAmbientLoop(AudioClip clip, float vol) - { - if ((!(m_queuedAmbientLoop == clip) || m_queuedAmbientVol != vol) && (!(m_queuedAmbientLoop == null) || !(m_ambientLoopSource.clip == clip) || m_ambientVol != vol)) - { - m_queuedAmbientLoop = clip; - m_queuedAmbientVol = vol; - m_stopAmbientLoop = false; - } - } - - private void UpdateWindAmbience(float dt) - { - if (ZoneSystem.instance == null) - { - m_windLoopSource.volume = 0f; - return; - } - float windIntensity = EnvMan.instance.GetWindIntensity(); - windIntensity = Mathf.Pow(windIntensity, m_windIntensityPower); - windIntensity += windIntensity * Mathf.Sin(Time.time) * Mathf.Sin(Time.time * 1.54323f) * Mathf.Sin(Time.time * 2.31237f) * m_windVariation; - m_windLoopSource.volume = Mathf.Lerp(m_windMinVol, m_windMaxVol, windIntensity); - m_windLoopSource.pitch = Mathf.Lerp(m_windMinPitch, m_windMaxPitch, windIntensity); - } - - private void UpdateOceanAmbiance(float dt) - { - if (ZoneSystem.instance == null) - { - m_oceanAmbientSource.volume = 0f; - return; - } - m_oceanUpdateTimer += dt; - if (m_oceanUpdateTimer > 2f) - { - m_oceanUpdateTimer = 0f; - m_haveOcean = FindAverageOceanPoint(out m_avgOceanPoint); - } - if (m_haveOcean) - { - float windIntensity = EnvMan.instance.GetWindIntensity(); - float target = Mathf.Lerp(m_oceanVolumeMin, m_oceanVolumeMax, windIntensity); - m_oceanAmbientSource.volume = Mathf.MoveTowards(m_oceanAmbientSource.volume, target, m_oceanFadeSpeed * dt); - m_oceanAmbientSource.transform.position = Vector3.Lerp(m_oceanAmbientSource.transform.position, m_avgOceanPoint, m_oceanMoveSpeed); - } - else - { - m_oceanAmbientSource.volume = Mathf.MoveTowards(m_oceanAmbientSource.volume, 0f, m_oceanFadeSpeed * dt); - } - } - - private bool FindAverageOceanPoint(out Vector3 point) - { - Camera mainCamera = Utils.GetMainCamera(); - if (mainCamera == null) - { - point = Vector3.zero; - return false; - } - Vector3 zero = Vector3.zero; - int num = 0; - Vector3 position = mainCamera.transform.position; - Vector2i zone = ZoneSystem.instance.GetZone(position); - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - Vector2i id = zone; - id.x += j; - id.y += i; - Vector3 zonePos = ZoneSystem.instance.GetZonePos(id); - if (IsOceanZone(zonePos)) - { - num++; - zero += zonePos; - } - } - } - if (num > 0) - { - zero /= (float)num; - point = zero; - point.y = ZoneSystem.instance.m_waterLevel; - return true; - } - point = Vector3.zero; - return false; - } - - private bool IsOceanZone(Vector3 centerPos) - { - float groundHeight = ZoneSystem.instance.GetGroundHeight(centerPos); - if (ZoneSystem.instance.m_waterLevel - groundHeight > m_oceanDepthTreshold) - { - return true; - } - return false; - } - - private BiomeAmbients GetAmbients(string name) - { - foreach (BiomeAmbients randomAmbient in m_randomAmbients) - { - if (randomAmbient.m_name == name) - { - return randomAmbient; - } - } - return null; - } - - private BiomeAmbients GetBiomeAmbients(Heightmap.Biome biome) - { - foreach (BiomeAmbients randomAmbient in m_randomAmbients) - { - if ((randomAmbient.m_biome & biome) != 0) - { - return randomAmbient; - } - } - return null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/AutoJumpLedge.cs b/Valheim_v202102/Valheim/assembly_valheim/AutoJumpLedge.cs deleted file mode 100644 index d39ae81..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/AutoJumpLedge.cs +++ /dev/null @@ -1,19 +0,0 @@ -using UnityEngine; - -public class AutoJumpLedge : MonoBehaviour -{ - public bool m_forwardOnly = true; - - public float m_upVel = 1f; - - public float m_forwardVel = 1f; - - private void OnTriggerStay(Collider collider) - { - Character component = collider.GetComponent<Character>(); - if ((bool)component) - { - component.OnAutoJump(base.transform.forward, m_upVel, m_forwardVel); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/BaseAI.cs b/Valheim_v202102/Valheim/assembly_valheim/BaseAI.cs deleted file mode 100644 index ea33b4d..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/BaseAI.cs +++ /dev/null @@ -1,1459 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class BaseAI : MonoBehaviour -{ - private float m_lastMoveToWaterUpdate; - - private bool m_haveWaterPosition; - - private Vector3 m_moveToWaterPosition = Vector3.zero; - - private float m_fleeTargetUpdateTime; - - private Vector3 m_fleeTarget = Vector3.zero; - - private float m_nearFireTime; - - private EffectArea m_nearFireArea; - - private float aroundPointUpdateTime; - - private Vector3 arroundPointTarget = Vector3.zero; - - private const bool m_debugDraw = false; - - public float m_viewRange = 50f; - - public float m_viewAngle = 90f; - - public float m_hearRange = 9999f; - - private const float m_interiorMaxHearRange = 8f; - - private const float m_despawnDistance = 80f; - - private const float m_regenAllHPTime = 3600f; - - public EffectList m_alertedEffects = new EffectList(); - - public EffectList m_idleSound = new EffectList(); - - public float m_idleSoundInterval = 5f; - - public float m_idleSoundChance = 0.5f; - - public Pathfinding.AgentType m_pathAgentType = Pathfinding.AgentType.Humanoid; - - public float m_moveMinAngle = 10f; - - public bool m_smoothMovement = true; - - public bool m_serpentMovement; - - public float m_serpentTurnRadius = 20f; - - public float m_jumpInterval; - - [Header("Random circle")] - public float m_randomCircleInterval = 2f; - - [Header("Random movement")] - public float m_randomMoveInterval = 5f; - - public float m_randomMoveRange = 4f; - - [Header("Fly behaviour")] - public bool m_randomFly; - - public float m_chanceToTakeoff = 1f; - - public float m_chanceToLand = 1f; - - public float m_groundDuration = 10f; - - public float m_airDuration = 10f; - - public float m_maxLandAltitude = 5f; - - public float m_flyAltitudeMin = 3f; - - public float m_flyAltitudeMax = 10f; - - public float m_takeoffTime = 5f; - - [Header("Other")] - public bool m_avoidFire; - - public bool m_afraidOfFire; - - public bool m_avoidWater = true; - - public string m_spawnMessage = ""; - - public string m_deathMessage = ""; - - private bool m_patrol; - - private Vector3 m_patrolPoint = Vector3.zero; - - private float m_patrolPointUpdateTime; - - protected ZNetView m_nview; - - protected Character m_character; - - protected ZSyncAnimation m_animator; - - protected Rigidbody m_body; - - private float m_updateTimer; - - private int m_solidRayMask; - - private int m_viewBlockMask; - - private int m_monsterTargetRayMask; - - private Vector3 m_randomMoveTarget = Vector3.zero; - - private float m_randomMoveUpdateTimer; - - private float m_jumpTimer; - - private float m_randomFlyTimer; - - private float m_regenTimer; - - protected bool m_alerted; - - protected bool m_huntPlayer; - - protected Vector3 m_spawnPoint = Vector3.zero; - - private const float m_getOfOfCornerMaxAngle = 20f; - - private float m_getOutOfCornerTimer; - - private float m_getOutOfCornerAngle; - - private Vector3 m_lastPosition = Vector3.zero; - - private float m_stuckTimer; - - protected float m_timeSinceHurt = 99999f; - - private Vector3 m_havePathTarget = new Vector3(-999999f, -999999f, -999999f); - - private Vector3 m_havePathFrom = new Vector3(-999999f, -999999f, -999999f); - - private float m_lastHavePathTime; - - private bool m_lastHavePathResult; - - private Vector3 m_lastFindPathTarget = new Vector3(-999999f, -999999f, -999999f); - - private float m_lastFindPathTime; - - private bool m_lastFindPathResult; - - private List<Vector3> m_path = new List<Vector3>(); - - private static RaycastHit[] m_tempRaycastHits = new RaycastHit[128]; - - private static List<BaseAI> m_instances = new List<BaseAI>(); - - private static int worldTimeHash = "lastWorldTime".GetStableHashCode(); - - private static int spawnTimeHash = "spawntime".GetStableHashCode(); - - protected virtual void Awake() - { - m_instances.Add(this); - m_nview = GetComponent<ZNetView>(); - m_character = GetComponent<Character>(); - m_animator = GetComponent<ZSyncAnimation>(); - m_body = GetComponent<Rigidbody>(); - m_solidRayMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "terrain", "vehicle"); - m_viewBlockMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "terrain", "viewblock", "vehicle"); - m_monsterTargetRayMask = LayerMask.GetMask("piece", "piece_nonsolid", "Default", "static_solid", "Default_small", "vehicle"); - Character character = m_character; - character.m_onDamaged = (Action<float, Character>)Delegate.Combine(character.m_onDamaged, new Action<float, Character>(OnDamaged)); - Character character2 = m_character; - character2.m_onDeath = (Action)Delegate.Combine(character2.m_onDeath, new Action(OnDeath)); - if (m_nview.IsOwner() && m_nview.GetZDO().GetLong(spawnTimeHash, 0L) == 0L) - { - m_nview.GetZDO().Set(spawnTimeHash, ZNet.instance.GetTime().Ticks); - if (!string.IsNullOrEmpty(m_spawnMessage)) - { - MessageHud.instance.MessageAll(MessageHud.MessageType.Center, m_spawnMessage); - } - } - m_randomMoveUpdateTimer = UnityEngine.Random.Range(0f, m_randomMoveInterval); - m_nview.Register("Alert", RPC_Alert); - m_huntPlayer = m_nview.GetZDO().GetBool("huntplayer", m_huntPlayer); - m_spawnPoint = m_nview.GetZDO().GetVec3("spawnpoint", base.transform.position); - if (m_nview.IsOwner()) - { - m_nview.GetZDO().Set("spawnpoint", m_spawnPoint); - } - InvokeRepeating("DoIdleSound", m_idleSoundInterval, m_idleSoundInterval); - } - - private void OnDestroy() - { - m_instances.Remove(this); - } - - public void SetPatrolPoint() - { - SetPatrolPoint(base.transform.position); - } - - public void SetPatrolPoint(Vector3 point) - { - m_patrol = true; - m_patrolPoint = point; - m_nview.GetZDO().Set("patrolPoint", point); - m_nview.GetZDO().Set("patrol", value: true); - } - - public void ResetPatrolPoint() - { - m_patrol = false; - m_nview.GetZDO().Set("patrol", value: false); - } - - public bool GetPatrolPoint(out Vector3 point) - { - if (Time.time - m_patrolPointUpdateTime > 1f) - { - m_patrolPointUpdateTime = Time.time; - m_patrol = m_nview.GetZDO().GetBool("patrol"); - if (m_patrol) - { - m_patrolPoint = m_nview.GetZDO().GetVec3("patrolPoint", m_patrolPoint); - } - } - point = m_patrolPoint; - return m_patrol; - } - - private void FixedUpdate() - { - if (m_nview.IsValid()) - { - m_updateTimer += Time.fixedDeltaTime; - if (m_updateTimer >= 0.05f) - { - UpdateAI(0.05f); - m_updateTimer -= 0.05f; - } - } - } - - protected virtual void UpdateAI(float dt) - { - if (m_nview.IsOwner()) - { - UpdateTakeoffLanding(dt); - if (m_jumpInterval > 0f) - { - m_jumpTimer += dt; - } - if (m_randomMoveUpdateTimer > 0f) - { - m_randomMoveUpdateTimer -= dt; - } - UpdateRegeneration(dt); - m_timeSinceHurt += dt; - } - else - { - m_alerted = m_nview.GetZDO().GetBool("alert"); - } - } - - private void UpdateRegeneration(float dt) - { - m_regenTimer += dt; - if (m_regenTimer > 1f) - { - m_regenTimer = 0f; - float num = m_character.GetMaxHealth() / 3600f; - float worldTimeDelta = GetWorldTimeDelta(); - m_character.Heal(num * worldTimeDelta, showText: false); - } - } - - public bool IsTakingOff() - { - if (m_randomFly && m_character.IsFlying() && m_randomFlyTimer < m_takeoffTime) - { - return true; - } - return false; - } - - public void UpdateTakeoffLanding(float dt) - { - if (!m_randomFly) - { - return; - } - m_randomFlyTimer += dt; - if (m_character.InAttack() || m_character.IsStaggering()) - { - return; - } - if (m_character.IsFlying()) - { - if (m_randomFlyTimer > m_airDuration && GetAltitude() < m_maxLandAltitude) - { - m_randomFlyTimer = 0f; - if (UnityEngine.Random.value <= m_chanceToLand) - { - m_character.m_flying = false; - m_animator.SetTrigger("fly_land"); - } - } - } - else if (m_randomFlyTimer > m_groundDuration) - { - m_randomFlyTimer = 0f; - if (UnityEngine.Random.value <= m_chanceToTakeoff) - { - m_character.m_flying = true; - m_character.m_jumpEffects.Create(m_character.transform.position, Quaternion.identity); - m_animator.SetTrigger("fly_takeoff"); - } - } - } - - private float GetWorldTimeDelta() - { - DateTime time = ZNet.instance.GetTime(); - long @long = m_nview.GetZDO().GetLong(worldTimeHash, 0L); - if (@long == 0L) - { - m_nview.GetZDO().Set(worldTimeHash, time.Ticks); - return 0f; - } - DateTime dateTime = new DateTime(@long); - TimeSpan timeSpan = time - dateTime; - m_nview.GetZDO().Set(worldTimeHash, time.Ticks); - return (float)timeSpan.TotalSeconds; - } - - public TimeSpan GetTimeSinceSpawned() - { - long num = m_nview.GetZDO().GetLong("spawntime", 0L); - if (num == 0L) - { - num = ZNet.instance.GetTime().Ticks; - m_nview.GetZDO().Set("spawntime", num); - } - DateTime dateTime = new DateTime(num); - return ZNet.instance.GetTime() - dateTime; - } - - private void DoIdleSound() - { - if (!IsSleeping() && !(UnityEngine.Random.value > m_idleSoundChance)) - { - m_idleSound.Create(base.transform.position, Quaternion.identity); - } - } - - protected void Follow(GameObject go, float dt) - { - float num = Vector3.Distance(go.transform.position, base.transform.position); - bool run = num > 10f; - if (num < 3f) - { - StopMoving(); - } - else - { - MoveTo(dt, go.transform.position, 0f, run); - } - } - - protected void MoveToWater(float dt, float maxRange) - { - float num = (m_haveWaterPosition ? 2f : 0.5f); - if (Time.time - m_lastMoveToWaterUpdate > num) - { - m_lastMoveToWaterUpdate = Time.time; - Vector3 moveToWaterPosition = base.transform.position; - for (int i = 0; i < 10; i++) - { - Vector3 vector = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f) * Vector3.forward * UnityEngine.Random.Range(4f, maxRange); - Vector3 vector2 = base.transform.position + vector; - vector2.y = ZoneSystem.instance.GetSolidHeight(vector2); - if (vector2.y < moveToWaterPosition.y) - { - moveToWaterPosition = vector2; - } - } - if (moveToWaterPosition.y < ZoneSystem.instance.m_waterLevel) - { - m_moveToWaterPosition = moveToWaterPosition; - m_haveWaterPosition = true; - } - else - { - m_haveWaterPosition = false; - } - } - if (m_haveWaterPosition) - { - MoveTowards(m_moveToWaterPosition - base.transform.position, run: true); - } - } - - protected void MoveAwayAndDespawn(float dt, bool run) - { - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, 40f); - if (closestPlayer != null) - { - Vector3 normalized = (closestPlayer.transform.position - base.transform.position).normalized; - MoveTo(dt, base.transform.position - normalized * 5f, 0f, run); - } - else - { - m_nview.Destroy(); - } - } - - protected void IdleMovement(float dt) - { - Vector3 centerPoint = (m_character.IsTamed() ? base.transform.position : m_spawnPoint); - if (GetPatrolPoint(out var point)) - { - centerPoint = point; - } - RandomMovement(dt, centerPoint); - } - - protected void RandomMovement(float dt, Vector3 centerPoint) - { - if (m_randomMoveUpdateTimer <= 0f) - { - if (Utils.DistanceXZ(centerPoint, base.transform.position) > m_randomMoveRange * 2f) - { - Vector3 vector = centerPoint - base.transform.position; - vector.y = 0f; - vector.Normalize(); - vector = Quaternion.Euler(0f, UnityEngine.Random.Range(-30, 30), 0f) * vector; - m_randomMoveTarget = base.transform.position + vector * m_randomMoveRange * 2f; - } - else - { - Vector3 vector2 = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f) * base.transform.forward * UnityEngine.Random.Range(m_randomMoveRange * 0.7f, m_randomMoveRange); - m_randomMoveTarget = centerPoint + vector2; - } - if (m_character.IsFlying() && ZoneSystem.instance.GetSolidHeight(m_randomMoveTarget, out var height)) - { - if (height < ZoneSystem.instance.m_waterLevel) - { - height = ZoneSystem.instance.m_waterLevel; - } - m_randomMoveTarget.y = height + UnityEngine.Random.Range(m_flyAltitudeMin, m_flyAltitudeMax); - } - if (!IsValidRandomMovePoint(m_randomMoveTarget)) - { - return; - } - m_randomMoveUpdateTimer = UnityEngine.Random.Range(m_randomMoveInterval, m_randomMoveInterval + m_randomMoveInterval / 2f); - if (m_avoidWater && m_character.IsSwiming()) - { - m_randomMoveUpdateTimer /= 4f; - } - } - bool flag = IsAlerted() || Utils.DistanceXZ(base.transform.position, centerPoint) > m_randomMoveRange * 2f; - if (MoveTo(dt, m_randomMoveTarget, 0f, flag) && flag) - { - m_randomMoveUpdateTimer = 0f; - } - } - - protected void Flee(float dt, Vector3 from) - { - float time = Time.time; - if (time - m_fleeTargetUpdateTime > 2f) - { - m_fleeTargetUpdateTime = time; - Vector3 vector = -(from - base.transform.position); - vector.y = 0f; - vector.Normalize(); - bool flag = false; - for (int i = 0; i < 4; i++) - { - m_fleeTarget = base.transform.position + Quaternion.Euler(0f, UnityEngine.Random.Range(-45f, 45f), 0f) * vector * 25f; - if (HavePath(m_fleeTarget) && (!m_avoidWater || m_character.IsSwiming() || !(ZoneSystem.instance.GetSolidHeight(m_fleeTarget) < ZoneSystem.instance.m_waterLevel))) - { - flag = true; - break; - } - } - if (!flag) - { - m_fleeTarget = base.transform.position + Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f) * Vector3.forward * 25f; - } - } - MoveTo(dt, m_fleeTarget, 0f, IsAlerted()); - } - - protected bool AvoidFire(float dt, Character moveToTarget, bool superAfraid) - { - if (superAfraid) - { - EffectArea effectArea = EffectArea.IsPointInsideArea(base.transform.position, EffectArea.Type.Fire, 3f); - if ((bool)effectArea) - { - m_nearFireTime = Time.time; - m_nearFireArea = effectArea; - } - if (Time.time - m_nearFireTime < 6f && (bool)m_nearFireArea) - { - SetAlerted(alert: true); - Flee(dt, m_nearFireArea.transform.position); - return true; - } - } - else - { - EffectArea effectArea2 = EffectArea.IsPointInsideArea(base.transform.position, EffectArea.Type.Fire, 3f); - if ((bool)effectArea2) - { - if (moveToTarget != null && (bool)EffectArea.IsPointInsideArea(moveToTarget.transform.position, EffectArea.Type.Fire)) - { - RandomMovementArroundPoint(dt, effectArea2.transform.position, effectArea2.GetRadius() + 3f + 1f, IsAlerted()); - return true; - } - RandomMovementArroundPoint(dt, effectArea2.transform.position, (effectArea2.GetRadius() + 3f) * 1.5f, IsAlerted()); - return true; - } - } - return false; - } - - protected void RandomMovementArroundPoint(float dt, Vector3 point, float distance, bool run) - { - float time = Time.time; - if (time - aroundPointUpdateTime > m_randomCircleInterval) - { - aroundPointUpdateTime = time; - Vector3 vector = base.transform.position - point; - vector.y = 0f; - vector.Normalize(); - float num = ((!(Vector3.Distance(base.transform.position, point) < distance / 2f)) ? ((float)(((double)UnityEngine.Random.value > 0.5) ? 40 : (-40))) : ((float)(((double)UnityEngine.Random.value > 0.5) ? 90 : (-90)))); - Vector3 vector2 = Quaternion.Euler(0f, num, 0f) * vector; - arroundPointTarget = point + vector2 * distance; - if (Vector3.Dot(base.transform.forward, arroundPointTarget - base.transform.position) < 0f) - { - vector2 = Quaternion.Euler(0f, 0f - num, 0f) * vector; - arroundPointTarget = point + vector2 * distance; - if (m_serpentMovement && Vector3.Distance(point, base.transform.position) > distance / 2f && Vector3.Dot(base.transform.forward, arroundPointTarget - base.transform.position) < 0f) - { - arroundPointTarget = point - vector2 * distance; - } - } - if (m_character.IsFlying()) - { - arroundPointTarget.y += UnityEngine.Random.Range(m_flyAltitudeMin, m_flyAltitudeMax); - } - } - if (MoveTo(dt, arroundPointTarget, 0f, run)) - { - if (run) - { - aroundPointUpdateTime = 0f; - } - if (!m_serpentMovement && !run) - { - LookAt(point); - } - } - } - - private bool GetSolidHeight(Vector3 p, out float height, float maxYDistance) - { - if (Physics.Raycast(p + Vector3.up * maxYDistance, Vector3.down, out var hitInfo, maxYDistance * 2f, m_solidRayMask)) - { - height = hitInfo.point.y; - return true; - } - height = 0f; - return false; - } - - protected bool IsValidRandomMovePoint(Vector3 point) - { - if (m_character.IsFlying()) - { - return true; - } - if (m_avoidWater && GetSolidHeight(point, out var height, 50f)) - { - if (m_character.IsSwiming()) - { - if (GetSolidHeight(base.transform.position, out var height2, 50f) && height < height2) - { - return false; - } - } - else if (height < ZoneSystem.instance.m_waterLevel) - { - return false; - } - } - if ((m_afraidOfFire || m_avoidFire) && (bool)EffectArea.IsPointInsideArea(point, EffectArea.Type.Fire)) - { - return false; - } - return true; - } - - protected virtual void OnDamaged(float damage, Character attacker) - { - m_timeSinceHurt = 0f; - } - - protected virtual void OnDeath() - { - if (!string.IsNullOrEmpty(m_deathMessage)) - { - MessageHud.instance.MessageAll(MessageHud.MessageType.Center, m_deathMessage); - } - } - - public bool CanSenseTarget(Character target) - { - if (CanHearTarget(target)) - { - return true; - } - if (CanSeeTarget(target)) - { - return true; - } - return false; - } - - public bool CanHearTarget(Character target) - { - if (target.IsPlayer()) - { - Player player = target as Player; - if (player.InDebugFlyMode() || player.InGhostMode()) - { - return false; - } - } - float num = Vector3.Distance(target.transform.position, base.transform.position); - float num2 = m_hearRange; - if (m_character.InInterior()) - { - num2 = Mathf.Min(8f, num2); - } - if (num > num2) - { - return false; - } - if (num < target.GetNoiseRange()) - { - return true; - } - return false; - } - - public bool CanSeeTarget(Character target) - { - if (target.IsPlayer()) - { - Player player = target as Player; - if (player.InDebugFlyMode() || player.InGhostMode()) - { - return false; - } - } - float num = Vector3.Distance(target.transform.position, base.transform.position); - if (num > m_viewRange) - { - return false; - } - float factor = 1f - num / m_viewRange; - float stealthFactor = target.GetStealthFactor(); - float num2 = m_viewRange * stealthFactor; - if (num > num2) - { - target.OnStealthSuccess(m_character, factor); - return false; - } - if (!IsAlerted() && Vector3.Angle(target.transform.position - m_character.transform.position, base.transform.forward) > m_viewAngle) - { - target.OnStealthSuccess(m_character, factor); - return false; - } - Vector3 vector = (target.IsCrouching() ? target.GetCenterPoint() : target.m_eye.position) - m_character.m_eye.position; - if (Physics.Raycast(m_character.m_eye.position, vector.normalized, vector.magnitude, m_viewBlockMask)) - { - target.OnStealthSuccess(m_character, factor); - return false; - } - return true; - } - - public bool CanSeeTarget(StaticTarget target) - { - Vector3 center = target.GetCenter(); - if (Vector3.Distance(center, base.transform.position) > m_viewRange) - { - return false; - } - Vector3 rhs = center - m_character.m_eye.position; - if (!IsAlerted() && Vector3.Dot(base.transform.forward, rhs) < 0f) - { - return false; - } - List<Collider> allColliders = target.GetAllColliders(); - int num = Physics.RaycastNonAlloc(m_character.m_eye.position, rhs.normalized, m_tempRaycastHits, rhs.magnitude, m_viewBlockMask); - for (int i = 0; i < num; i++) - { - RaycastHit raycastHit = m_tempRaycastHits[i]; - if (!allColliders.Contains(raycastHit.collider)) - { - return false; - } - } - return true; - } - - protected void MoveTowardsSwoop(Vector3 dir, bool run, float distance) - { - dir = dir.normalized; - float num = Mathf.Clamp01(Vector3.Dot(dir, m_character.transform.forward)); - num *= num; - float num2 = Mathf.Clamp01(distance / m_serpentTurnRadius); - float num3 = 1f - (1f - num2) * (1f - num); - num3 = num3 * 0.9f + 0.1f; - Vector3 moveDir = base.transform.forward * num3; - LookTowards(dir); - m_character.SetMoveDir(moveDir); - m_character.SetRun(run); - } - - protected void MoveTowards(Vector3 dir, bool run) - { - dir = dir.normalized; - LookTowards(dir); - if (m_smoothMovement) - { - float num = Vector3.Angle(dir, base.transform.forward); - float num2 = 1f - Mathf.Clamp01(num / m_moveMinAngle); - Vector3 moveDir = base.transform.forward * num2; - moveDir.y = dir.y; - m_character.SetMoveDir(moveDir); - m_character.SetRun(run); - if (m_jumpInterval > 0f && m_jumpTimer >= m_jumpInterval) - { - m_jumpTimer = 0f; - m_character.Jump(); - } - } - else if (IsLookingTowards(dir, m_moveMinAngle)) - { - m_character.SetMoveDir(dir); - m_character.SetRun(run); - if (m_jumpInterval > 0f && m_jumpTimer >= m_jumpInterval) - { - m_jumpTimer = 0f; - m_character.Jump(); - } - } - else - { - StopMoving(); - } - } - - protected void LookAt(Vector3 point) - { - Vector3 vector = point - m_character.m_eye.position; - if (!(Utils.LengthXZ(vector) < 0.01f)) - { - vector.Normalize(); - LookTowards(vector); - } - } - - protected void LookTowards(Vector3 dir) - { - m_character.SetLookDir(dir); - } - - protected bool IsLookingAt(Vector3 point, float minAngle) - { - return IsLookingTowards((point - base.transform.position).normalized, minAngle); - } - - protected bool IsLookingTowards(Vector3 dir, float minAngle) - { - dir.y = 0f; - Vector3 forward = base.transform.forward; - forward.y = 0f; - return Vector3.Angle(dir, forward) < minAngle; - } - - protected void StopMoving() - { - m_character.SetMoveDir(Vector3.zero); - } - - protected bool HavePath(Vector3 target) - { - if (m_character.IsFlying()) - { - return true; - } - float time = Time.time; - float num = time - m_lastHavePathTime; - Vector3 position = base.transform.position; - if (Vector3.Distance(position, m_havePathFrom) > 2f || Vector3.Distance(target, m_havePathTarget) > 1f || num > 5f) - { - m_havePathFrom = position; - m_havePathTarget = target; - m_lastHavePathTime = time; - m_lastHavePathResult = Pathfinding.instance.HavePath(position, target, m_pathAgentType); - } - return m_lastHavePathResult; - } - - protected bool FindPath(Vector3 target) - { - float time = Time.time; - float num = time - m_lastFindPathTime; - if (num < 1f) - { - return m_lastFindPathResult; - } - if (Vector3.Distance(target, m_lastFindPathTarget) < 1f && num < 5f) - { - return m_lastFindPathResult; - } - m_lastFindPathTarget = target; - m_lastFindPathTime = time; - m_lastFindPathResult = Pathfinding.instance.GetPath(base.transform.position, target, m_path, m_pathAgentType); - return m_lastFindPathResult; - } - - protected bool FoundPath() - { - return m_lastFindPathResult; - } - - protected bool MoveTo(float dt, Vector3 point, float dist, bool run) - { - if (m_character.m_flying) - { - dist = Mathf.Max(dist, 1f); - if (ZoneSystem.instance.GetSolidHeight(point, out var height)) - { - point.y = Mathf.Max(point.y, height + m_flyAltitudeMin); - } - return MoveAndAvoid(dt, point, dist, run); - } - float num = (run ? 1f : 0.5f); - if (m_serpentMovement) - { - num = 3f; - } - if (Utils.DistanceXZ(point, base.transform.position) < Mathf.Max(dist, num)) - { - StopMoving(); - return true; - } - if (!FindPath(point)) - { - StopMoving(); - return true; - } - if (m_path.Count == 0) - { - StopMoving(); - return true; - } - Vector3 vector = m_path[0]; - if (Utils.DistanceXZ(vector, base.transform.position) < num) - { - m_path.RemoveAt(0); - if (m_path.Count == 0) - { - StopMoving(); - return true; - } - } - else if (m_serpentMovement) - { - float distance = Vector3.Distance(vector, base.transform.position); - Vector3 normalized = (vector - base.transform.position).normalized; - MoveTowardsSwoop(normalized, run, distance); - } - else - { - Vector3 normalized2 = (vector - base.transform.position).normalized; - MoveTowards(normalized2, run); - } - return false; - } - - protected bool MoveAndAvoid(float dt, Vector3 point, float dist, bool run) - { - Vector3 vector = point - base.transform.position; - if (m_character.IsFlying()) - { - if (vector.magnitude < dist) - { - StopMoving(); - return true; - } - } - else - { - vector.y = 0f; - if (vector.magnitude < dist) - { - StopMoving(); - return true; - } - } - vector.Normalize(); - float radius = m_character.GetRadius(); - float num = radius + 1f; - if (!m_character.InAttack()) - { - m_getOutOfCornerTimer -= dt; - if (m_getOutOfCornerTimer > 0f) - { - Vector3 dir = Quaternion.Euler(0f, m_getOutOfCornerAngle, 0f) * -vector; - MoveTowards(dir, run); - return false; - } - m_stuckTimer += Time.fixedDeltaTime; - if (m_stuckTimer > 1.5f) - { - if (Vector3.Distance(base.transform.position, m_lastPosition) < 0.2f) - { - m_getOutOfCornerTimer = 4f; - m_getOutOfCornerAngle = UnityEngine.Random.Range(-20f, 20f); - m_stuckTimer = 0f; - return false; - } - m_stuckTimer = 0f; - m_lastPosition = base.transform.position; - } - } - if (CanMove(vector, radius, num)) - { - MoveTowards(vector, run); - } - else - { - Vector3 forward = base.transform.forward; - if (m_character.IsFlying()) - { - forward.y = 0.2f; - forward.Normalize(); - } - Vector3 vector2 = base.transform.right * radius * 0.75f; - float num2 = num * 1.5f; - Vector3 centerPoint = m_character.GetCenterPoint(); - float num3 = Raycast(centerPoint - vector2, forward, num2, 0.1f); - float num4 = Raycast(centerPoint + vector2, forward, num2, 0.1f); - if (num3 >= num2 && num4 >= num2) - { - MoveTowards(forward, run); - } - else - { - Vector3 dir2 = Quaternion.Euler(0f, -20f, 0f) * forward; - Vector3 dir3 = Quaternion.Euler(0f, 20f, 0f) * forward; - if (num3 > num4) - { - MoveTowards(dir2, run); - } - else - { - MoveTowards(dir3, run); - } - } - } - return false; - } - - private bool CanMove(Vector3 dir, float checkRadius, float distance) - { - Vector3 centerPoint = m_character.GetCenterPoint(); - Vector3 right = base.transform.right; - if (Raycast(centerPoint, dir, distance, 0.1f) < distance) - { - return false; - } - if (Raycast(centerPoint - right * (checkRadius - 0.1f), dir, distance, 0.1f) < distance) - { - return false; - } - if (Raycast(centerPoint + right * (checkRadius - 0.1f), dir, distance, 0.1f) < distance) - { - return false; - } - return true; - } - - public float Raycast(Vector3 p, Vector3 dir, float distance, float radius) - { - if (radius == 0f) - { - if (Physics.Raycast(p, dir, out var hitInfo, distance, m_solidRayMask)) - { - return hitInfo.distance; - } - return distance; - } - if (Physics.SphereCast(p, radius, dir, out var hitInfo2, distance, m_solidRayMask)) - { - return hitInfo2.distance; - } - return distance; - } - - public bool IsEnemey(Character other) - { - return IsEnemy(m_character, other); - } - - public static bool IsEnemy(Character a, Character b) - { - if (a == b) - { - return false; - } - Character.Faction faction = a.GetFaction(); - Character.Faction faction2 = b.GetFaction(); - if (faction == faction2) - { - return false; - } - bool flag = a.IsTamed(); - bool flag2 = b.IsTamed(); - if (flag || flag2) - { - if ((flag && flag2) || (flag && faction2 == Character.Faction.Players) || (flag2 && faction == Character.Faction.Players)) - { - return false; - } - return true; - } - switch (faction) - { - case Character.Faction.AnimalsVeg: - return true; - case Character.Faction.Players: - return true; - case Character.Faction.ForestMonsters: - if (faction2 != Character.Faction.AnimalsVeg) - { - return faction2 != Character.Faction.Boss; - } - return false; - case Character.Faction.Undead: - if (faction2 != Character.Faction.Demon) - { - return faction2 != Character.Faction.Boss; - } - return false; - case Character.Faction.Demon: - if (faction2 != Character.Faction.Undead) - { - return faction2 != Character.Faction.Boss; - } - return false; - case Character.Faction.MountainMonsters: - return faction2 != Character.Faction.Boss; - case Character.Faction.SeaMonsters: - return faction2 != Character.Faction.Boss; - case Character.Faction.PlainsMonsters: - return faction2 != Character.Faction.Boss; - case Character.Faction.Boss: - return faction2 == Character.Faction.Players; - default: - return false; - } - } - - protected StaticTarget FindRandomStaticTarget(float maxDistance, bool priorityTargetsOnly) - { - float radius = m_character.GetRadius(); - Collider[] array = Physics.OverlapSphere(base.transform.position, radius + maxDistance, m_monsterTargetRayMask); - if (array.Length == 0) - { - return null; - } - List<StaticTarget> list = new List<StaticTarget>(); - Collider[] array2 = array; - for (int i = 0; i < array2.Length; i++) - { - StaticTarget componentInParent = array2[i].GetComponentInParent<StaticTarget>(); - if (componentInParent == null || !componentInParent.IsValidMonsterTarget()) - { - continue; - } - if (priorityTargetsOnly) - { - if (!componentInParent.m_primaryTarget) - { - continue; - } - } - else if (!componentInParent.m_randomTarget) - { - continue; - } - if (CanSeeTarget(componentInParent)) - { - list.Add(componentInParent); - } - } - if (list.Count == 0) - { - return null; - } - return list[UnityEngine.Random.Range(0, list.Count)]; - } - - protected StaticTarget FindClosestStaticPriorityTarget(float maxDistance) - { - float num = Mathf.Min(maxDistance, m_viewRange); - Collider[] array = Physics.OverlapSphere(base.transform.position, num, m_monsterTargetRayMask); - if (array.Length == 0) - { - return null; - } - StaticTarget result = null; - float num2 = num; - Collider[] array2 = array; - for (int i = 0; i < array2.Length; i++) - { - StaticTarget componentInParent = array2[i].GetComponentInParent<StaticTarget>(); - if (!(componentInParent == null) && componentInParent.IsValidMonsterTarget() && componentInParent.m_primaryTarget) - { - float num3 = Vector3.Distance(base.transform.position, componentInParent.GetCenter()); - if (num3 < num2 && CanSeeTarget(componentInParent)) - { - result = componentInParent; - num2 = num3; - } - } - } - return result; - } - - protected void HaveFriendsInRange(float range, out Character hurtFriend, out Character friend) - { - List<Character> allCharacters = Character.GetAllCharacters(); - friend = HaveFriendInRange(allCharacters, range); - hurtFriend = HaveHurtFriendInRange(allCharacters, range); - } - - private Character HaveFriendInRange(List<Character> characters, float range) - { - foreach (Character character in characters) - { - if (!(character == m_character) && !IsEnemy(m_character, character) && !(Vector3.Distance(character.transform.position, base.transform.position) > range)) - { - return character; - } - } - return null; - } - - protected Character HaveFriendInRange(float range) - { - List<Character> allCharacters = Character.GetAllCharacters(); - return HaveFriendInRange(allCharacters, range); - } - - private Character HaveHurtFriendInRange(List<Character> characters, float range) - { - foreach (Character character in characters) - { - if (!IsEnemy(m_character, character) && !(Vector3.Distance(character.transform.position, base.transform.position) > range) && character.GetHealth() < character.GetMaxHealth()) - { - return character; - } - } - return null; - } - - protected Character HaveHurtFriendInRange(float range) - { - List<Character> allCharacters = Character.GetAllCharacters(); - return HaveHurtFriendInRange(allCharacters, range); - } - - protected Character FindEnemy() - { - List<Character> allCharacters = Character.GetAllCharacters(); - Character character = null; - float num = 99999f; - foreach (Character item in allCharacters) - { - if (!IsEnemy(m_character, item) || item.IsDead()) - { - continue; - } - BaseAI baseAI = item.GetBaseAI(); - if ((!(baseAI != null) || !baseAI.IsSleeping()) && CanSenseTarget(item)) - { - float num2 = Vector3.Distance(item.transform.position, base.transform.position); - if (num2 < num || character == null) - { - character = item; - num = num2; - } - } - } - if (character == null && HuntPlayer()) - { - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, 200f); - if ((bool)closestPlayer && (closestPlayer.InDebugFlyMode() || closestPlayer.InGhostMode())) - { - return null; - } - return closestPlayer; - } - return character; - } - - public void SetHuntPlayer(bool hunt) - { - if (m_huntPlayer != hunt) - { - m_huntPlayer = hunt; - if (m_nview.IsOwner()) - { - m_nview.GetZDO().Set("huntplayer", m_huntPlayer); - } - } - } - - public virtual bool HuntPlayer() - { - return m_huntPlayer; - } - - protected bool HaveAlertedCreatureInRange(float range) - { - foreach (BaseAI instance in m_instances) - { - if (Vector3.Distance(base.transform.position, instance.transform.position) < range && instance.IsAlerted()) - { - return true; - } - } - return false; - } - - public static void AlertAllInRange(Vector3 center, float range, Character attacker) - { - foreach (BaseAI instance in m_instances) - { - if ((!attacker || instance.IsEnemey(attacker)) && Vector3.Distance(instance.transform.position, center) < range) - { - instance.Alert(); - } - } - } - - public void Alert() - { - if (m_nview.IsValid() && !IsAlerted()) - { - if (m_nview.IsOwner()) - { - SetAlerted(alert: true); - } - else - { - m_nview.InvokeRPC("Alert"); - } - } - } - - private void RPC_Alert(long sender) - { - if (m_nview.IsOwner()) - { - SetAlerted(alert: true); - } - } - - protected virtual void SetAlerted(bool alert) - { - if (m_alerted != alert) - { - m_alerted = alert; - m_animator.SetBool("alert", m_alerted); - if (m_nview.IsOwner()) - { - m_nview.GetZDO().Set("alert", m_alerted); - } - if (m_alerted) - { - m_alertedEffects.Create(base.transform.position, Quaternion.identity); - } - } - } - - public static bool InStealthRange(Character me) - { - bool result = false; - foreach (BaseAI allInstance in GetAllInstances()) - { - if (!IsEnemy(me, allInstance.m_character)) - { - continue; - } - float num = Vector3.Distance(me.transform.position, allInstance.transform.position); - if (num < allInstance.m_viewRange || num < 10f) - { - if (allInstance.IsAlerted()) - { - return false; - } - result = true; - } - } - return result; - } - - public static Character FindClosestEnemy(Character me, Vector3 point, float maxDistance) - { - Character character = null; - float num = maxDistance; - foreach (Character allCharacter in Character.GetAllCharacters()) - { - if (IsEnemy(me, allCharacter)) - { - float num2 = Vector3.Distance(allCharacter.transform.position, point); - if (character == null || num2 < num) - { - character = allCharacter; - num = num2; - } - } - } - return character; - } - - public static Character FindRandomEnemy(Character me, Vector3 point, float maxDistance) - { - List<Character> list = new List<Character>(); - foreach (Character allCharacter in Character.GetAllCharacters()) - { - if (IsEnemy(me, allCharacter) && Vector3.Distance(allCharacter.transform.position, point) < maxDistance) - { - list.Add(allCharacter); - } - } - if (list.Count == 0) - { - return null; - } - return list[UnityEngine.Random.Range(0, list.Count)]; - } - - public bool IsAlerted() - { - return m_alerted; - } - - protected float GetAltitude() - { - float groundHeight = ZoneSystem.instance.GetGroundHeight(m_character.transform.position); - return m_character.transform.position.y - groundHeight; - } - - public static List<BaseAI> GetAllInstances() - { - return m_instances; - } - - protected virtual void OnDrawGizmosSelected() - { - if (m_lastFindPathResult) - { - Gizmos.color = Color.yellow; - for (int i = 0; i < m_path.Count - 1; i++) - { - Vector3 vector = m_path[i]; - Gizmos.DrawLine(to: m_path[i + 1] + Vector3.up * 0.1f, from: vector + Vector3.up * 0.1f); - } - Gizmos.color = Color.cyan; - foreach (Vector3 item in m_path) - { - Gizmos.DrawSphere(item + Vector3.up * 0.1f, 0.1f); - } - Gizmos.color = Color.green; - Gizmos.DrawLine(base.transform.position, m_lastFindPathTarget); - Gizmos.DrawSphere(m_lastFindPathTarget, 0.2f); - } - else - { - Gizmos.color = Color.red; - Gizmos.DrawLine(base.transform.position, m_lastFindPathTarget); - Gizmos.DrawSphere(m_lastFindPathTarget, 0.2f); - } - } - - public virtual bool IsSleeping() - { - return false; - } - - public bool HasZDOOwner() - { - if (!m_nview.IsValid()) - { - return false; - } - return m_nview.GetZDO().HasOwner(); - } - - public static bool CanUseAttack(Character character, ItemDrop.ItemData item) - { - bool flag = character.IsFlying(); - bool flag2 = character.IsSwiming(); - if (item.m_shared.m_aiWhenFlying && flag) - { - return true; - } - if (item.m_shared.m_aiWhenWalking && !flag && !flag2) - { - return true; - } - if (item.m_shared.m_aiWhenSwiming && flag2) - { - return true; - } - return false; - } - - public virtual Character GetTargetCreature() - { - return null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Beacon.cs b/Valheim_v202102/Valheim/assembly_valheim/Beacon.cs deleted file mode 100644 index 8dd7cba..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Beacon.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class Beacon : MonoBehaviour -{ - public float m_range = 20f; - - private static List<Beacon> m_instances = new List<Beacon>(); - - private void Awake() - { - m_instances.Add(this); - } - - private void OnDestroy() - { - m_instances.Remove(this); - } - - public static Beacon FindClosestBeaconInRange(Vector3 point) - { - Beacon beacon = null; - float num = 999999f; - foreach (Beacon instance in m_instances) - { - float num2 = Vector3.Distance(point, instance.transform.position); - if (num2 < instance.m_range && (beacon == null || num2 < num)) - { - beacon = instance; - num = num2; - } - } - return beacon; - } - - public static void FindBeaconsInRange(Vector3 point, List<Beacon> becons) - { - foreach (Beacon instance in m_instances) - { - if (Vector3.Distance(point, instance.transform.position) < instance.m_range) - { - becons.Add(instance); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Bed.cs b/Valheim_v202102/Valheim/assembly_valheim/Bed.cs deleted file mode 100644 index 2af71df..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Bed.cs +++ /dev/null @@ -1,201 +0,0 @@ -using UnityEngine; - -public class Bed : MonoBehaviour, Hoverable, Interactable -{ - public Transform m_spawnPoint; - - public float m_monsterCheckRadius = 20f; - - private ZNetView m_nview; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_nview.GetZDO() != null) - { - m_nview.Register<long, string>("SetOwner", RPC_SetOwner); - } - } - - public string GetHoverText() - { - string ownerName = GetOwnerName(); - if (ownerName == "") - { - return Localization.instance.Localize("$piece_bed_unclaimed\n[<color=yellow><b>$KEY_Use</b></color>] $piece_bed_claim"); - } - string text = ownerName + "'s $piece_bed"; - if (IsMine()) - { - if (IsCurrent()) - { - return Localization.instance.Localize(text + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_bed_sleep"); - } - return Localization.instance.Localize(text + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_bed_setspawn"); - } - return Localization.instance.Localize(text); - } - - public string GetHoverName() - { - return Localization.instance.Localize("$piece_bed"); - } - - public bool Interact(Humanoid human, bool repeat) - { - if (repeat) - { - return false; - } - long playerID = Game.instance.GetPlayerProfile().GetPlayerID(); - long owner = GetOwner(); - Player human2 = human as Player; - if (owner == 0L) - { - ZLog.Log("Has no creator"); - if (!CheckExposure(human2)) - { - return false; - } - SetOwner(playerID, Game.instance.GetPlayerProfile().GetName()); - Game.instance.GetPlayerProfile().SetCustomSpawnPoint(GetSpawnPoint()); - human.Message(MessageHud.MessageType.Center, "$msg_spawnpointset"); - } - else if (IsMine()) - { - ZLog.Log("Is mine"); - if (IsCurrent()) - { - ZLog.Log("is current spawnpoint"); - if (!EnvMan.instance.IsAfternoon() && !EnvMan.instance.IsNight()) - { - human.Message(MessageHud.MessageType.Center, "$msg_cantsleep"); - return false; - } - if (!CheckEnemies(human2)) - { - return false; - } - if (!CheckExposure(human2)) - { - return false; - } - if (!CheckFire(human2)) - { - return false; - } - if (!CheckWet(human2)) - { - return false; - } - human.AttachStart(m_spawnPoint, hideWeapons: true, isBed: true, "attach_bed", new Vector3(0f, 0.5f, 0f)); - return false; - } - ZLog.Log("Not current spawn point"); - if (!CheckExposure(human2)) - { - return false; - } - Game.instance.GetPlayerProfile().SetCustomSpawnPoint(GetSpawnPoint()); - human.Message(MessageHud.MessageType.Center, "$msg_spawnpointset"); - } - return false; - } - - private bool CheckWet(Player human) - { - if (human.GetSEMan().HaveStatusEffect("Wet")) - { - human.Message(MessageHud.MessageType.Center, "$msg_bedwet"); - return false; - } - return true; - } - - private bool CheckEnemies(Player human) - { - if (human.IsSensed()) - { - human.Message(MessageHud.MessageType.Center, "$msg_bedenemiesnearby"); - return false; - } - return true; - } - - private bool CheckExposure(Player human) - { - Cover.GetCoverForPoint(GetSpawnPoint(), out var coverPercentage, out var underRoof); - if (!underRoof) - { - human.Message(MessageHud.MessageType.Center, "$msg_bedneedroof"); - return false; - } - if (coverPercentage < 0.8f) - { - human.Message(MessageHud.MessageType.Center, "$msg_bedtooexposed"); - return false; - } - ZLog.Log("exporeusre check " + coverPercentage + " " + underRoof.ToString()); - return true; - } - - private bool CheckFire(Player human) - { - if (!EffectArea.IsPointInsideArea(base.transform.position, EffectArea.Type.Heat)) - { - human.Message(MessageHud.MessageType.Center, "$msg_bednofire"); - return false; - } - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public bool IsCurrent() - { - if (!IsMine()) - { - return false; - } - return Vector3.Distance(GetSpawnPoint(), Game.instance.GetPlayerProfile().GetCustomSpawnPoint()) < 1f; - } - - public Vector3 GetSpawnPoint() - { - return m_spawnPoint.position; - } - - private bool IsMine() - { - long playerID = Game.instance.GetPlayerProfile().GetPlayerID(); - long owner = GetOwner(); - return playerID == owner; - } - - private void SetOwner(long uid, string name) - { - m_nview.InvokeRPC("SetOwner", uid, name); - } - - private void RPC_SetOwner(long sender, long uid, string name) - { - if (m_nview.IsOwner()) - { - m_nview.GetZDO().Set("owner", uid); - m_nview.GetZDO().Set("ownerName", name); - } - } - - private long GetOwner() - { - return m_nview.GetZDO().GetLong("owner", 0L); - } - - private string GetOwnerName() - { - return m_nview.GetZDO().GetString("ownerName"); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Beehive.cs b/Valheim_v202102/Valheim/assembly_valheim/Beehive.cs deleted file mode 100644 index 0e92ae1..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Beehive.cs +++ /dev/null @@ -1,186 +0,0 @@ -using System; -using UnityEngine; - -public class Beehive : MonoBehaviour, Hoverable, Interactable -{ - public string m_name = ""; - - public Transform m_coverPoint; - - public Transform m_spawnPoint; - - public GameObject m_beeEffect; - - public float m_maxCover = 0.25f; - - [BitMask(typeof(Heightmap.Biome))] - public Heightmap.Biome m_biome; - - public float m_secPerUnit = 10f; - - public int m_maxHoney = 4; - - public ItemDrop m_honeyItem; - - public EffectList m_spawnEffect = new EffectList(); - - private ZNetView m_nview; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_nview.GetZDO() != null) - { - if (m_nview.IsOwner() && m_nview.GetZDO().GetLong("lastTime", 0L) == 0L) - { - m_nview.GetZDO().Set("lastTime", ZNet.instance.GetTime().Ticks); - } - m_nview.Register("Extract", RPC_Extract); - InvokeRepeating("UpdateBees", 0f, 10f); - } - } - - public string GetHoverText() - { - if (!PrivateArea.CheckAccess(base.transform.position, 0f, flash: false)) - { - return Localization.instance.Localize(m_name + "\n$piece_noaccess"); - } - int honeyLevel = GetHoneyLevel(); - if (honeyLevel > 0) - { - return Localization.instance.Localize(m_name + " ( " + m_honeyItem.m_itemData.m_shared.m_name + " x " + honeyLevel + " )\n[<color=yellow><b>$KEY_Use</b></color>] $piece_beehive_extract"); - } - return Localization.instance.Localize(m_name + " ( $piece_container_empty )\n[<color=yellow><b>$KEY_Use</b></color>] $piece_beehive_check"); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid character, bool repeat) - { - if (repeat) - { - return false; - } - if (!PrivateArea.CheckAccess(base.transform.position)) - { - return true; - } - if (GetHoneyLevel() > 0) - { - Extract(); - } - else - { - if (!CheckBiome()) - { - character.Message(MessageHud.MessageType.Center, "$piece_beehive_area"); - return true; - } - if (!HaveFreeSpace()) - { - character.Message(MessageHud.MessageType.Center, "$piece_beehive_freespace"); - return true; - } - if (!EnvMan.instance.IsDaylight()) - { - character.Message(MessageHud.MessageType.Center, "$piece_beehive_sleep"); - return true; - } - character.Message(MessageHud.MessageType.Center, "$piece_beehive_happy"); - } - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private void Extract() - { - m_nview.InvokeRPC("Extract"); - } - - private void RPC_Extract(long caller) - { - int honeyLevel = GetHoneyLevel(); - if (honeyLevel > 0) - { - m_spawnEffect.Create(m_spawnPoint.position, Quaternion.identity); - for (int i = 0; i < honeyLevel; i++) - { - Vector2 vector = UnityEngine.Random.insideUnitCircle * 0.5f; - Vector3 position = m_spawnPoint.position + new Vector3(vector.x, 0.25f * (float)i, vector.y); - UnityEngine.Object.Instantiate(m_honeyItem, position, Quaternion.identity); - } - ResetLevel(); - } - } - - private float GetTimeSinceLastUpdate() - { - DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("lastTime", ZNet.instance.GetTime().Ticks)); - DateTime time = ZNet.instance.GetTime(); - TimeSpan timeSpan = time - dateTime; - m_nview.GetZDO().Set("lastTime", time.Ticks); - double num = timeSpan.TotalSeconds; - if (num < 0.0) - { - num = 0.0; - } - return (float)num; - } - - private void ResetLevel() - { - m_nview.GetZDO().Set("level", 0); - } - - private void IncreseLevel(int i) - { - int honeyLevel = GetHoneyLevel(); - honeyLevel += i; - honeyLevel = Mathf.Clamp(honeyLevel, 0, m_maxHoney); - m_nview.GetZDO().Set("level", honeyLevel); - } - - private int GetHoneyLevel() - { - return m_nview.GetZDO().GetInt("level"); - } - - private void UpdateBees() - { - bool flag = CheckBiome() && HaveFreeSpace(); - bool active = flag && EnvMan.instance.IsDaylight(); - m_beeEffect.SetActive(active); - if (m_nview.IsOwner() && flag) - { - float timeSinceLastUpdate = GetTimeSinceLastUpdate(); - float @float = m_nview.GetZDO().GetFloat("product"); - @float += timeSinceLastUpdate; - if (@float > m_secPerUnit) - { - int i = (int)(@float / m_secPerUnit); - IncreseLevel(i); - @float = 0f; - } - m_nview.GetZDO().Set("product", @float); - } - } - - private bool HaveFreeSpace() - { - Cover.GetCoverForPoint(m_coverPoint.position, out var coverPercentage, out var _); - return coverPercentage < m_maxCover; - } - - private bool CheckBiome() - { - return (Heightmap.FindBiome(base.transform.position) & m_biome) != 0; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Billboard.cs b/Valheim_v202102/Valheim/assembly_valheim/Billboard.cs deleted file mode 100644 index 108afa6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Billboard.cs +++ /dev/null @@ -1,37 +0,0 @@ -using UnityEngine; - -public class Billboard : MonoBehaviour -{ - public bool m_vertical = true; - - public bool m_invert; - - private Vector3 m_normal; - - private void Awake() - { - m_normal = base.transform.up; - } - - private void LateUpdate() - { - Camera mainCamera = Utils.GetMainCamera(); - if (!(mainCamera == null)) - { - Vector3 vector = mainCamera.transform.position; - if (m_invert) - { - vector = base.transform.position - (vector - base.transform.position); - } - if (m_vertical) - { - vector.y = base.transform.position.y; - base.transform.LookAt(vector, m_normal); - } - else - { - base.transform.LookAt(vector); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/BiomeEnvSetup.cs b/Valheim_v202102/Valheim/assembly_valheim/BiomeEnvSetup.cs deleted file mode 100644 index 4ff8e60..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/BiomeEnvSetup.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine.Serialization; - -[Serializable] -public class BiomeEnvSetup -{ - public string m_name = ""; - - public Heightmap.Biome m_biome = Heightmap.Biome.Meadows; - - public List<EnvEntry> m_environments = new List<EnvEntry>(); - - public string m_musicMorning = "morning"; - - public string m_musicEvening = "evening"; - - [FormerlySerializedAs("m_musicRandomDay")] - public string m_musicDay = ""; - - [FormerlySerializedAs("m_musicRandomNight")] - public string m_musicNight = ""; -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/BossStone.cs b/Valheim_v202102/Valheim/assembly_valheim/BossStone.cs deleted file mode 100644 index 67aa52f..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/BossStone.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System.Collections; -using UnityEngine; - -public class BossStone : MonoBehaviour -{ - public ItemStand m_itemStand; - - public GameObject m_activeEffect; - - public EffectList m_activateStep1 = new EffectList(); - - public EffectList m_activateStep2 = new EffectList(); - - public EffectList m_activateStep3 = new EffectList(); - - public string m_completedMessage = ""; - - public MeshRenderer m_mesh; - - public int m_emissiveMaterialIndex; - - public Color m_activeEmissiveColor = Color.white; - - private bool m_active; - - private ZNetView m_nview; - - private void Start() - { - if (m_mesh.material.HasProperty("_EmissionColor")) - { - m_mesh.materials[m_emissiveMaterialIndex].SetColor("_EmissionColor", Color.black); - } - if ((bool)m_activeEffect) - { - m_activeEffect.SetActive(value: false); - } - SetActivated(m_itemStand.HaveAttachment(), triggerEffect: false); - InvokeRepeating("UpdateVisual", 1f, 1f); - } - - private void UpdateVisual() - { - SetActivated(m_itemStand.HaveAttachment(), triggerEffect: true); - } - - private void SetActivated(bool active, bool triggerEffect) - { - if (active == m_active) - { - return; - } - m_active = active; - if (triggerEffect && active) - { - Invoke("DelayedAttachEffects_Step1", 1f); - Invoke("DelayedAttachEffects_Step2", 5f); - Invoke("DelayedAttachEffects_Step3", 11f); - return; - } - if ((bool)m_activeEffect) - { - m_activeEffect.SetActive(active); - } - StopCoroutine("FadeEmission"); - StartCoroutine("FadeEmission"); - } - - private void DelayedAttachEffects_Step1() - { - m_activateStep1.Create(m_itemStand.transform.position, base.transform.rotation); - } - - private void DelayedAttachEffects_Step2() - { - m_activateStep2.Create(base.transform.position, base.transform.rotation); - } - - private void DelayedAttachEffects_Step3() - { - if ((bool)m_activeEffect) - { - m_activeEffect.SetActive(value: true); - } - m_activateStep3.Create(base.transform.position, base.transform.rotation); - StopCoroutine("FadeEmission"); - StartCoroutine("FadeEmission"); - Player.MessageAllInRange(base.transform.position, 20f, MessageHud.MessageType.Center, m_completedMessage); - } - - private IEnumerator FadeEmission() - { - if ((bool)m_mesh && m_mesh.materials[m_emissiveMaterialIndex].HasProperty("_EmissionColor")) - { - Color startColor = m_mesh.materials[m_emissiveMaterialIndex].GetColor("_EmissionColor"); - Color targetColor = (m_active ? m_activeEmissiveColor : Color.black); - for (float t = 0f; t < 1f; t += Time.deltaTime) - { - Color value = Color.Lerp(startColor, targetColor, t / 1f); - m_mesh.materials[m_emissiveMaterialIndex].SetColor("_EmissionColor", value); - yield return null; - } - } - ZLog.Log("Done fading color"); - } - - public bool IsActivated() - { - return m_active; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/CamShaker.cs b/Valheim_v202102/Valheim/assembly_valheim/CamShaker.cs deleted file mode 100644 index 4d661c5..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/CamShaker.cs +++ /dev/null @@ -1,65 +0,0 @@ -using System.Collections; -using UnityEngine; - -public class CamShaker : MonoBehaviour -{ - public float m_strength = 1f; - - public float m_range = 50f; - - public float m_delay; - - public bool m_continous; - - public float m_continousDuration; - - public bool m_localOnly; - - private void Start() - { - if (m_continous) - { - StartCoroutine("TriggerContinous"); - } - else if (m_delay <= 0f) - { - Trigger(); - } - else - { - Invoke("Trigger", m_delay); - } - } - - private IEnumerator TriggerContinous() - { - float t = 0f; - while (true) - { - Trigger(); - t += Time.deltaTime; - if (m_continousDuration > 0f && t > m_continousDuration) - { - break; - } - yield return null; - } - } - - private void Trigger() - { - if (!GameCamera.instance) - { - return; - } - if (m_localOnly) - { - ZNetView component = GetComponent<ZNetView>(); - if ((bool)component && !component.IsOwner()) - { - return; - } - } - GameCamera.instance.AddShake(base.transform.position, m_range, m_strength, m_continous); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/CameraEffects.cs b/Valheim_v202102/Valheim/assembly_valheim/CameraEffects.cs deleted file mode 100644 index 7aa1f95..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/CameraEffects.cs +++ /dev/null @@ -1,127 +0,0 @@ -using UnityEngine; -using UnityEngine.PostProcessing; -using UnityStandardAssets.ImageEffects; - -public class CameraEffects : MonoBehaviour -{ - private static CameraEffects m_instance; - - public bool m_forceDof; - - public LayerMask m_dofRayMask; - - public bool m_dofAutoFocus; - - public float m_dofMinDistance = 50f; - - public float m_dofMinDistanceShip = 50f; - - public float m_dofMaxDistance = 3000f; - - private PostProcessingBehaviour m_postProcessing; - - private DepthOfField m_dof; - - public static CameraEffects instance => m_instance; - - private void Awake() - { - m_instance = this; - m_postProcessing = GetComponent<PostProcessingBehaviour>(); - m_dof = GetComponent<DepthOfField>(); - ApplySettings(); - } - - private void OnDestroy() - { - if (m_instance == this) - { - m_instance = null; - } - } - - public void ApplySettings() - { - SetDof(PlayerPrefs.GetInt("DOF", 1) == 1); - SetBloom(PlayerPrefs.GetInt("Bloom", 1) == 1); - SetSSAO(PlayerPrefs.GetInt("SSAO", 1) == 1); - SetSunShafts(PlayerPrefs.GetInt("SunShafts", 1) == 1); - SetAntiAliasing(PlayerPrefs.GetInt("AntiAliasing", 1) == 1); - SetCA(PlayerPrefs.GetInt("ChromaticAberration", 1) == 1); - SetMotionBlur(PlayerPrefs.GetInt("MotionBlur", 1) == 1); - } - - public void SetSunShafts(bool enabled) - { - SunShafts component = GetComponent<SunShafts>(); - if (component != null) - { - component.enabled = enabled; - } - } - - private void SetBloom(bool enabled) - { - m_postProcessing.profile.bloom.enabled = enabled; - } - - private void SetSSAO(bool enabled) - { - m_postProcessing.profile.ambientOcclusion.enabled = enabled; - } - - private void SetMotionBlur(bool enabled) - { - m_postProcessing.profile.motionBlur.enabled = enabled; - } - - private void SetAntiAliasing(bool enabled) - { - m_postProcessing.profile.antialiasing.enabled = enabled; - } - - private void SetCA(bool enabled) - { - m_postProcessing.profile.chromaticAberration.enabled = enabled; - } - - private void SetDof(bool enabled) - { - m_dof.enabled = enabled || m_forceDof; - } - - private void LateUpdate() - { - UpdateDOF(); - } - - private bool ControllingShip() - { - if (Player.m_localPlayer == null || Player.m_localPlayer.GetControlledShip() != null) - { - return true; - } - return false; - } - - private void UpdateDOF() - { - if (m_dof.enabled && m_dofAutoFocus) - { - float num = m_dofMaxDistance; - if (Physics.Raycast(base.transform.position, base.transform.forward, out var hitInfo, m_dofMaxDistance, m_dofRayMask)) - { - num = hitInfo.distance; - } - if (ControllingShip() && num < m_dofMinDistanceShip) - { - num = m_dofMinDistanceShip; - } - if (num < m_dofMinDistance) - { - num = m_dofMinDistance; - } - m_dof.focalLength = Mathf.Lerp(m_dof.focalLength, num, 0.2f); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Chair.cs b/Valheim_v202102/Valheim/assembly_valheim/Chair.cs deleted file mode 100644 index 09c5277..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Chair.cs +++ /dev/null @@ -1,73 +0,0 @@ -using UnityEngine; - -public class Chair : MonoBehaviour, Hoverable, Interactable -{ - public string m_name = "Chair"; - - public float m_useDistance = 2f; - - public Transform m_attachPoint; - - public Vector3 m_detachOffset = new Vector3(0f, 0.5f, 0f); - - public string m_attachAnimation = "attach_chair"; - - private const float m_minSitDelay = 2f; - - private static float m_lastSitTime; - - public string GetHoverText() - { - if (Time.time - m_lastSitTime < 2f) - { - return ""; - } - if (!InUseDistance(Player.m_localPlayer)) - { - return Localization.instance.Localize("<color=grey>$piece_toofar</color>"); - } - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_use"); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid human, bool hold) - { - if (hold) - { - return false; - } - Player player = human as Player; - if (!InUseDistance(player)) - { - return false; - } - if (Time.time - m_lastSitTime < 2f) - { - return false; - } - if ((bool)player) - { - if (player.IsEncumbered()) - { - return false; - } - player.AttachStart(m_attachPoint, hideWeapons: false, isBed: false, m_attachAnimation, m_detachOffset); - m_lastSitTime = Time.time; - } - return false; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private bool InUseDistance(Humanoid human) - { - return Vector3.Distance(human.transform.position, m_attachPoint.position) < m_useDistance; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ChangeLog.cs b/Valheim_v202102/Valheim/assembly_valheim/ChangeLog.cs deleted file mode 100644 index ff4874f..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ChangeLog.cs +++ /dev/null @@ -1,15 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -public class ChangeLog : MonoBehaviour -{ - public Text m_textField; - - public TextAsset m_changeLog; - - private void Start() - { - string text = m_changeLog.text; - m_textField.text = text; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Character.cs b/Valheim_v202102/Valheim/assembly_valheim/Character.cs deleted file mode 100644 index 7807218..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Character.cs +++ /dev/null @@ -1,2567 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Character : MonoBehaviour, IDestructible, Hoverable, IWaterInteractable -{ - public enum Faction - { - Players, - AnimalsVeg, - ForestMonsters, - Undead, - Demon, - MountainMonsters, - SeaMonsters, - PlainsMonsters, - Boss - } - - public enum GroundTiltType - { - None, - Pitch, - Full, - PitchRaycast, - FullRaycast - } - - private float m_underWorldCheckTimer; - - private Collider m_lowestContactCollider; - - private bool m_groundContact; - - private Vector3 m_groundContactPoint = Vector3.zero; - - private Vector3 m_groundContactNormal = Vector3.zero; - - public Action<float, Character> m_onDamaged; - - public Action m_onDeath; - - public Action<int> m_onLevelSet; - - public Action<Vector3> m_onLand; - - [Header("Character")] - public string m_name = ""; - - public Faction m_faction = Faction.AnimalsVeg; - - public bool m_boss; - - public string m_bossEvent = ""; - - public string m_defeatSetGlobalKey = ""; - - [Header("Movement & Physics")] - public float m_crouchSpeed = 2f; - - public float m_walkSpeed = 5f; - - public float m_speed = 10f; - - public float m_turnSpeed = 300f; - - public float m_runSpeed = 20f; - - public float m_runTurnSpeed = 300f; - - public float m_flySlowSpeed = 5f; - - public float m_flyFastSpeed = 12f; - - public float m_flyTurnSpeed = 12f; - - public float m_acceleration = 1f; - - public float m_jumpForce = 10f; - - public float m_jumpForceForward; - - public float m_jumpForceTiredFactor = 0.7f; - - public float m_airControl = 0.1f; - - private const float m_slopeStaminaDrain = 10f; - - public const float m_minSlideDegreesPlayer = 38f; - - public const float m_minSlideDegreesMonster = 90f; - - private const float m_rootMotionMultiplier = 55f; - - private const float m_continousPushForce = 10f; - - private const float m_pushForcedissipation = 100f; - - private const float m_maxMoveForce = 20f; - - public bool m_canSwim = true; - - public float m_swimDepth = 2f; - - public float m_swimSpeed = 2f; - - public float m_swimTurnSpeed = 100f; - - public float m_swimAcceleration = 0.05f; - - public GroundTiltType m_groundTilt; - - public bool m_flying; - - public float m_jumpStaminaUsage = 10f; - - [Header("Bodyparts")] - public Transform m_eye; - - protected Transform m_head; - - [Header("Effects")] - public EffectList m_hitEffects = new EffectList(); - - public EffectList m_critHitEffects = new EffectList(); - - public EffectList m_backstabHitEffects = new EffectList(); - - public EffectList m_deathEffects = new EffectList(); - - public EffectList m_waterEffects = new EffectList(); - - public EffectList m_slideEffects = new EffectList(); - - public EffectList m_jumpEffects = new EffectList(); - - [Header("Health & Damage")] - public bool m_tolerateWater = true; - - public bool m_tolerateFire; - - public bool m_tolerateSmoke = true; - - public float m_health = 10f; - - public HitData.DamageModifiers m_damageModifiers; - - public bool m_staggerWhenBlocked = true; - - public float m_staggerDamageFactor; - - private const float m_staggerResetTime = 3f; - - private float m_staggerDamage; - - private float m_staggerTimer; - - private float m_backstabTime = -99999f; - - private const float m_backstabResetTime = 300f; - - private GameObject[] m_waterEffects_instances; - - private GameObject[] m_slideEffects_instances; - - protected Vector3 m_moveDir = Vector3.zero; - - protected Vector3 m_lookDir = Vector3.forward; - - protected Quaternion m_lookYaw = Quaternion.identity; - - protected bool m_run; - - protected bool m_walk; - - protected bool m_attack; - - protected bool m_attackDraw; - - protected bool m_secondaryAttack; - - protected bool m_blocking; - - protected GameObject m_visual; - - protected LODGroup m_lodGroup; - - protected Rigidbody m_body; - - protected CapsuleCollider m_collider; - - protected ZNetView m_nview; - - protected ZSyncAnimation m_zanim; - - protected Animator m_animator; - - protected CharacterAnimEvent m_animEvent; - - protected BaseAI m_baseAI; - - private const float m_maxFallHeight = 20f; - - private const float m_minFallHeight = 4f; - - private const float m_maxFallDamage = 100f; - - private const float m_staggerDamageBonus = 2f; - - private const float m_baseVisualRange = 30f; - - private const float m_autoJumpInterval = 0.5f; - - private float m_jumpTimer; - - private float m_lastAutoJumpTime; - - private float m_lastGroundTouch; - - private Vector3 m_lastGroundNormal = Vector3.up; - - private Vector3 m_lastGroundPoint = Vector3.up; - - private Collider m_lastGroundCollider; - - private Rigidbody m_lastGroundBody; - - private Vector3 m_lastAttachPos = Vector3.zero; - - private Rigidbody m_lastAttachBody; - - protected float m_maxAirAltitude = -10000f; - - private float m_waterLevel = -10000f; - - private float m_swimTimer = 999f; - - protected SEMan m_seman; - - private float m_noiseRange; - - private float m_syncNoiseTimer; - - private bool m_tamed; - - private float m_lastTamedCheck; - - private int m_level = 1; - - private Vector3 m_currentVel = Vector3.zero; - - private float m_currentTurnVel; - - private float m_currentTurnVelChange; - - private Vector3 m_groundTiltNormal = Vector3.up; - - protected Vector3 m_pushForce = Vector3.zero; - - private Vector3 m_rootMotion = Vector3.zero; - - private static int forward_speed = 0; - - private static int sideway_speed = 0; - - private static int turn_speed = 0; - - private static int inWater = 0; - - private static int onGround = 0; - - private static int encumbered = 0; - - private static int flying = 0; - - private float m_slippage; - - protected bool m_wallRunning; - - protected bool m_sliding; - - protected bool m_running; - - private Vector3 m_originalLocalRef; - - private bool m_lodVisible = true; - - private static int m_smokeRayMask = 0; - - private float m_smokeCheckTimer; - - private static bool m_dpsDebugEnabled = false; - - private static List<KeyValuePair<float, float>> m_enemyDamage = new List<KeyValuePair<float, float>>(); - - private static List<KeyValuePair<float, float>> m_playerDamage = new List<KeyValuePair<float, float>>(); - - private static List<Character> m_characters = new List<Character>(); - - protected static int m_characterLayer = 0; - - protected static int m_characterNetLayer = 0; - - protected static int m_characterGhostLayer = 0; - - protected static int m_animatorTagFreeze = Animator.StringToHash("freeze"); - - protected static int m_animatorTagStagger = Animator.StringToHash("stagger"); - - protected static int m_animatorTagSitting = Animator.StringToHash("sitting"); - - protected virtual void Awake() - { - m_characters.Add(this); - m_collider = GetComponent<CapsuleCollider>(); - m_body = GetComponent<Rigidbody>(); - m_zanim = GetComponent<ZSyncAnimation>(); - m_nview = GetComponent<ZNetView>(); - m_animator = GetComponentInChildren<Animator>(); - m_animEvent = m_animator.GetComponent<CharacterAnimEvent>(); - m_baseAI = GetComponent<BaseAI>(); - m_animator.logWarnings = false; - m_visual = base.transform.Find("Visual").gameObject; - m_lodGroup = m_visual.GetComponent<LODGroup>(); - m_head = m_animator.GetBoneTransform(HumanBodyBones.Head); - m_body.maxDepenetrationVelocity = 2f; - if (m_smokeRayMask == 0) - { - m_smokeRayMask = LayerMask.GetMask("smoke"); - m_characterLayer = LayerMask.NameToLayer("character"); - m_characterNetLayer = LayerMask.NameToLayer("character_net"); - m_characterGhostLayer = LayerMask.NameToLayer("character_ghost"); - } - if (forward_speed == 0) - { - forward_speed = ZSyncAnimation.GetHash("forward_speed"); - sideway_speed = ZSyncAnimation.GetHash("sideway_speed"); - turn_speed = ZSyncAnimation.GetHash("turn_speed"); - inWater = ZSyncAnimation.GetHash("inWater"); - onGround = ZSyncAnimation.GetHash("onGround"); - encumbered = ZSyncAnimation.GetHash("encumbered"); - flying = ZSyncAnimation.GetHash("flying"); - } - if ((bool)m_lodGroup) - { - m_originalLocalRef = m_lodGroup.localReferencePoint; - } - m_seman = new SEMan(this, m_nview); - if (m_nview.GetZDO() == null) - { - return; - } - if (!IsPlayer()) - { - if (m_nview.IsOwner() && GetHealth() == GetMaxHealth()) - { - SetupMaxHealth(); - } - m_tamed = m_nview.GetZDO().GetBool("tamed", m_tamed); - m_level = m_nview.GetZDO().GetInt("level", 1); - } - m_nview.Register<HitData>("Damage", RPC_Damage); - m_nview.Register<float, bool>("Heal", RPC_Heal); - m_nview.Register<float>("AddNoise", RPC_AddNoise); - m_nview.Register<Vector3>("Stagger", RPC_Stagger); - m_nview.Register("ResetCloth", RPC_ResetCloth); - m_nview.Register<bool>("SetTamed", RPC_SetTamed); - } - - private void SetupMaxHealth() - { - int level = GetLevel(); - float difficultyHealthScale = Game.instance.GetDifficultyHealthScale(base.transform.position); - SetMaxHealth(m_health * difficultyHealthScale * (float)level); - } - - protected virtual void Start() - { - m_nview.GetZDO(); - } - - public virtual void OnDestroy() - { - m_seman.OnDestroy(); - m_characters.Remove(this); - } - - public void SetLevel(int level) - { - if (level >= 1) - { - m_level = level; - m_nview.GetZDO().Set("level", level); - SetupMaxHealth(); - if (m_onLevelSet != null) - { - m_onLevelSet(m_level); - } - } - } - - public int GetLevel() - { - return m_level; - } - - public virtual bool IsPlayer() - { - return false; - } - - public Faction GetFaction() - { - return m_faction; - } - - protected virtual void FixedUpdate() - { - if (m_nview.IsValid()) - { - float fixedDeltaTime = Time.fixedDeltaTime; - UpdateLayer(); - UpdateContinousEffects(); - UpdateWater(fixedDeltaTime); - UpdateGroundTilt(fixedDeltaTime); - SetVisible(m_nview.HasOwner()); - if (m_nview.IsOwner()) - { - UpdateGroundContact(fixedDeltaTime); - UpdateNoise(fixedDeltaTime); - m_seman.Update(fixedDeltaTime); - UpdateStagger(fixedDeltaTime); - UpdatePushback(fixedDeltaTime); - UpdateMotion(fixedDeltaTime); - UpdateSmoke(fixedDeltaTime); - UnderWorldCheck(fixedDeltaTime); - SyncVelocity(); - CheckDeath(); - } - } - } - - private void UpdateLayer() - { - if (m_collider.gameObject.layer == m_characterLayer || m_collider.gameObject.layer == m_characterNetLayer) - { - if (m_nview.IsOwner()) - { - m_collider.gameObject.layer = (IsAttached() ? m_characterNetLayer : m_characterLayer); - } - else - { - m_collider.gameObject.layer = m_characterNetLayer; - } - } - } - - private void UnderWorldCheck(float dt) - { - if (IsDead()) - { - return; - } - m_underWorldCheckTimer += dt; - if (m_underWorldCheckTimer > 5f || IsPlayer()) - { - m_underWorldCheckTimer = 0f; - float groundHeight = ZoneSystem.instance.GetGroundHeight(base.transform.position); - if (base.transform.position.y < groundHeight - 1f) - { - Vector3 position = base.transform.position; - position.y = groundHeight + 0.5f; - base.transform.position = position; - m_body.position = position; - m_body.velocity = Vector3.zero; - } - } - } - - private void UpdateSmoke(float dt) - { - if (m_tolerateSmoke) - { - return; - } - m_smokeCheckTimer += dt; - if (m_smokeCheckTimer > 2f) - { - m_smokeCheckTimer = 0f; - if (Physics.CheckSphere(GetTopPoint() + Vector3.up * 0.1f, 0.5f, m_smokeRayMask)) - { - m_seman.AddStatusEffect("Smoked", resetTime: true); - } - else - { - m_seman.RemoveStatusEffect("Smoked", quiet: true); - } - } - } - - private void UpdateContinousEffects() - { - SetupContinousEffect(base.transform.position, m_sliding, m_slideEffects, ref m_slideEffects_instances); - Vector3 position = base.transform.position; - position.y = m_waterLevel + 0.05f; - SetupContinousEffect(position, InWater(), m_waterEffects, ref m_waterEffects_instances); - } - - private void SetupContinousEffect(Vector3 point, bool enabled, EffectList effects, ref GameObject[] instances) - { - if (!effects.HasEffects()) - { - return; - } - if (enabled) - { - if (instances == null) - { - instances = effects.Create(point, Quaternion.identity, base.transform); - return; - } - GameObject[] array = instances; - foreach (GameObject gameObject in array) - { - if ((bool)gameObject) - { - gameObject.transform.position = point; - } - } - } - else - { - if (instances == null) - { - return; - } - GameObject[] array = instances; - foreach (GameObject gameObject2 in array) - { - if ((bool)gameObject2) - { - ParticleSystem[] componentsInChildren = gameObject2.GetComponentsInChildren<ParticleSystem>(); - foreach (ParticleSystem obj in componentsInChildren) - { - ParticleSystem.EmissionModule emission = obj.emission; - emission.enabled = false; - obj.Stop(); - } - CamShaker componentInChildren = gameObject2.GetComponentInChildren<CamShaker>(); - if ((bool)componentInChildren) - { - UnityEngine.Object.Destroy(componentInChildren); - } - ZSFX componentInChildren2 = gameObject2.GetComponentInChildren<ZSFX>(); - if ((bool)componentInChildren2) - { - componentInChildren2.FadeOut(); - } - TimedDestruction component = gameObject2.GetComponent<TimedDestruction>(); - if ((bool)component) - { - component.Trigger(); - } - else - { - UnityEngine.Object.Destroy(gameObject2); - } - } - } - instances = null; - } - } - - protected virtual void OnSwiming(Vector3 targetVel, float dt) - { - } - - protected virtual void OnSneaking(float dt) - { - } - - protected virtual void OnJump() - { - } - - protected virtual bool TakeInput() - { - return true; - } - - private float GetSlideAngle() - { - if (!IsPlayer()) - { - return 90f; - } - return 38f; - } - - private void ApplySlide(float dt, ref Vector3 currentVel, Vector3 bodyVel, bool running) - { - bool flag = CanWallRun(); - float num = Mathf.Acos(Mathf.Clamp01(m_lastGroundNormal.y)) * 57.29578f; - Vector3 lastGroundNormal = m_lastGroundNormal; - lastGroundNormal.y = 0f; - lastGroundNormal.Normalize(); - _ = m_body.velocity; - Vector3 vector = Vector3.Cross(rhs: Vector3.Cross(m_lastGroundNormal, Vector3.up), lhs: m_lastGroundNormal); - bool flag2 = currentVel.magnitude > 0.1f; - if (num > GetSlideAngle()) - { - if (running && flag && flag2) - { - UseStamina(10f * dt); - m_slippage = 0f; - m_wallRunning = true; - } - else - { - m_slippage = Mathf.MoveTowards(m_slippage, 1f, 1f * dt); - } - Vector3 b = vector * 5f; - currentVel = Vector3.Lerp(currentVel, b, m_slippage); - m_sliding = m_slippage > 0.5f; - } - else - { - m_slippage = 0f; - } - } - - private void UpdateMotion(float dt) - { - UpdateBodyFriction(); - m_sliding = false; - m_wallRunning = false; - m_running = false; - if (IsDead()) - { - return; - } - if (IsDebugFlying()) - { - UpdateDebugFly(dt); - return; - } - if (InIntro()) - { - m_maxAirAltitude = base.transform.position.y; - m_body.velocity = Vector3.zero; - m_body.angularVelocity = Vector3.zero; - } - if (!InWaterSwimDepth() && !IsOnGround()) - { - float y = base.transform.position.y; - m_maxAirAltitude = Mathf.Max(m_maxAirAltitude, y); - } - if (IsSwiming()) - { - UpdateSwiming(dt); - } - else if (m_flying) - { - UpdateFlying(dt); - } - else - { - UpdateWalking(dt); - } - m_lastGroundTouch += Time.fixedDeltaTime; - m_jumpTimer += Time.fixedDeltaTime; - } - - private void UpdateDebugFly(float dt) - { - float num = (m_run ? 50 : 20); - Vector3 b = m_moveDir * num; - if (TakeInput()) - { - if (ZInput.GetButton("Jump")) - { - b.y = num; - } - else if (Input.GetKey(KeyCode.LeftControl)) - { - b.y = 0f - num; - } - } - m_currentVel = Vector3.Lerp(m_currentVel, b, 0.5f); - m_body.velocity = m_currentVel; - m_body.useGravity = false; - m_lastGroundTouch = 0f; - m_maxAirAltitude = base.transform.position.y; - m_body.rotation = Quaternion.RotateTowards(base.transform.rotation, m_lookYaw, m_turnSpeed * dt); - m_body.angularVelocity = Vector3.zero; - UpdateEyeRotation(); - } - - private void UpdateSwiming(float dt) - { - bool flag = IsOnGround(); - if (Mathf.Max(0f, m_maxAirAltitude - base.transform.position.y) > 0.5f && m_onLand != null) - { - m_onLand(new Vector3(base.transform.position.x, m_waterLevel, base.transform.position.z)); - } - m_maxAirAltitude = base.transform.position.y; - float speed = m_swimSpeed * GetAttackSpeedFactorMovement(); - if (InMinorAction()) - { - speed = 0f; - } - m_seman.ApplyStatusEffectSpeedMods(ref speed); - Vector3 vector = m_moveDir * speed; - if (vector.magnitude > 0f && IsOnGround()) - { - vector = Vector3.ProjectOnPlane(vector, m_lastGroundNormal).normalized * vector.magnitude; - } - if (IsPlayer()) - { - m_currentVel = Vector3.Lerp(m_currentVel, vector, m_swimAcceleration); - } - else - { - float magnitude = vector.magnitude; - float magnitude2 = m_currentVel.magnitude; - if (magnitude > magnitude2) - { - magnitude = Mathf.MoveTowards(magnitude2, magnitude, m_swimAcceleration); - vector = vector.normalized * magnitude; - } - m_currentVel = Vector3.Lerp(m_currentVel, vector, 0.5f); - } - if (vector.magnitude > 0.1f) - { - AddNoise(15f); - } - AddPushbackForce(ref m_currentVel); - Vector3 force = m_currentVel - m_body.velocity; - force.y = 0f; - if (force.magnitude > 20f) - { - force = force.normalized * 20f; - } - m_body.AddForce(force, ForceMode.VelocityChange); - float num = m_waterLevel - m_swimDepth; - if (base.transform.position.y < num) - { - float t = Mathf.Clamp01((num - base.transform.position.y) / 2f); - float target = Mathf.Lerp(0f, 10f, t); - Vector3 velocity = m_body.velocity; - velocity.y = Mathf.MoveTowards(velocity.y, target, 50f * dt); - m_body.velocity = velocity; - } - else - { - float t2 = Mathf.Clamp01((0f - (num - base.transform.position.y)) / 1f); - float num2 = Mathf.Lerp(0f, 10f, t2); - Vector3 velocity2 = m_body.velocity; - velocity2.y = Mathf.MoveTowards(velocity2.y, 0f - num2, 30f * dt); - m_body.velocity = velocity2; - } - float target2 = 0f; - if (m_moveDir.magnitude > 0.1f || AlwaysRotateCamera()) - { - float speed2 = m_swimTurnSpeed; - m_seman.ApplyStatusEffectSpeedMods(ref speed2); - target2 = UpdateRotation(speed2, dt); - } - m_body.angularVelocity = Vector3.zero; - UpdateEyeRotation(); - m_body.useGravity = true; - float num3 = Vector3.Dot(m_currentVel, base.transform.forward); - float value = Vector3.Dot(m_currentVel, base.transform.right); - float num4 = Vector3.Dot(m_body.velocity, base.transform.forward); - m_currentTurnVel = Mathf.SmoothDamp(m_currentTurnVel, target2, ref m_currentTurnVelChange, 0.5f, 99f); - m_zanim.SetFloat(forward_speed, IsPlayer() ? num3 : num4); - m_zanim.SetFloat(sideway_speed, value); - m_zanim.SetFloat(turn_speed, m_currentTurnVel); - m_zanim.SetBool(inWater, !flag); - m_zanim.SetBool(onGround, value: false); - m_zanim.SetBool(encumbered, value: false); - m_zanim.SetBool(flying, value: false); - if (!flag) - { - OnSwiming(vector, dt); - } - } - - private void UpdateFlying(float dt) - { - float num = (m_run ? m_flyFastSpeed : m_flySlowSpeed) * GetAttackSpeedFactorMovement(); - Vector3 b = (CanMove() ? (m_moveDir * num) : Vector3.zero); - m_currentVel = Vector3.Lerp(m_currentVel, b, m_acceleration); - m_maxAirAltitude = base.transform.position.y; - ApplyRootMotion(ref m_currentVel); - AddPushbackForce(ref m_currentVel); - Vector3 force = m_currentVel - m_body.velocity; - if (force.magnitude > 20f) - { - force = force.normalized * 20f; - } - m_body.AddForce(force, ForceMode.VelocityChange); - float target = 0f; - if ((m_moveDir.magnitude > 0.1f || AlwaysRotateCamera()) && !InDodge() && CanMove()) - { - float speed = m_flyTurnSpeed; - m_seman.ApplyStatusEffectSpeedMods(ref speed); - target = UpdateRotation(speed, dt); - } - m_body.angularVelocity = Vector3.zero; - UpdateEyeRotation(); - m_body.useGravity = false; - float num2 = Vector3.Dot(m_currentVel, base.transform.forward); - float value = Vector3.Dot(m_currentVel, base.transform.right); - float num3 = Vector3.Dot(m_body.velocity, base.transform.forward); - m_currentTurnVel = Mathf.SmoothDamp(m_currentTurnVel, target, ref m_currentTurnVelChange, 0.5f, 99f); - m_zanim.SetFloat(forward_speed, IsPlayer() ? num2 : num3); - m_zanim.SetFloat(sideway_speed, value); - m_zanim.SetFloat(turn_speed, m_currentTurnVel); - m_zanim.SetBool(inWater, value: false); - m_zanim.SetBool(onGround, value: false); - m_zanim.SetBool(encumbered, value: false); - m_zanim.SetBool(flying, value: true); - } - - private void UpdateWalking(float dt) - { - Vector3 moveDir = m_moveDir; - bool flag = IsCrouching(); - m_running = CheckRun(moveDir, dt); - float num = m_speed * GetJogSpeedFactor(); - if ((m_walk || InMinorAction()) && !flag) - { - num = m_walkSpeed; - } - else if (m_running) - { - bool num2 = InWaterDepth() > 0.4f; - float num3 = m_runSpeed * GetRunSpeedFactor(); - num = (num2 ? Mathf.Lerp(num, num3, 0.33f) : num3); - if (IsPlayer() && moveDir.magnitude > 0f) - { - moveDir.Normalize(); - } - } - else if (flag || IsEncumbered()) - { - num = m_crouchSpeed; - } - num *= GetAttackSpeedFactorMovement(); - m_seman.ApplyStatusEffectSpeedMods(ref num); - Vector3 vector = (CanMove() ? (moveDir * num) : Vector3.zero); - if (vector.magnitude > 0f && IsOnGround()) - { - vector = Vector3.ProjectOnPlane(vector, m_lastGroundNormal).normalized * vector.magnitude; - } - float magnitude = vector.magnitude; - float magnitude2 = m_currentVel.magnitude; - if (magnitude > magnitude2) - { - magnitude = Mathf.MoveTowards(magnitude2, magnitude, m_acceleration); - vector = vector.normalized * magnitude; - } - else if (IsPlayer()) - { - magnitude = Mathf.MoveTowards(magnitude2, magnitude, m_acceleration * 2f); - vector = ((vector.magnitude > 0f) ? (vector.normalized * magnitude) : (m_currentVel.normalized * magnitude)); - } - m_currentVel = Vector3.Lerp(m_currentVel, vector, 0.5f); - Vector3 velocity = m_body.velocity; - Vector3 vel = m_currentVel; - vel.y = velocity.y; - if (IsOnGround() && m_lastAttachBody == null) - { - ApplySlide(dt, ref vel, velocity, m_running); - } - ApplyRootMotion(ref vel); - AddPushbackForce(ref vel); - ApplyGroundForce(ref vel, vector); - Vector3 vector2 = vel - velocity; - if (!IsOnGround()) - { - if (vector.magnitude > 0.1f) - { - vector2 *= m_airControl; - } - else - { - vector2 = Vector3.zero; - } - } - if (IsAttached()) - { - vector2 = Vector3.zero; - } - if (IsSneaking()) - { - OnSneaking(dt); - } - if (vector2.magnitude > 20f) - { - vector2 = vector2.normalized * 20f; - } - if (vector2.magnitude > 0.01f) - { - m_body.AddForce(vector2, ForceMode.VelocityChange); - } - if ((bool)m_lastGroundBody && m_lastGroundBody.gameObject.layer != base.gameObject.layer && m_lastGroundBody.mass > m_body.mass) - { - float num4 = m_body.mass / m_lastGroundBody.mass; - m_lastGroundBody.AddForceAtPosition(-vector2 * num4, base.transform.position, ForceMode.VelocityChange); - } - float target = 0f; - if ((moveDir.magnitude > 0.1f || AlwaysRotateCamera()) && !InDodge() && CanMove()) - { - float speed = (m_run ? m_runTurnSpeed : m_turnSpeed); - m_seman.ApplyStatusEffectSpeedMods(ref speed); - target = UpdateRotation(speed, dt); - } - UpdateEyeRotation(); - m_body.useGravity = true; - float num5 = Vector3.Dot(m_currentVel, Vector3.ProjectOnPlane(base.transform.forward, m_lastGroundNormal).normalized); - float value = Vector3.Dot(m_currentVel, Vector3.ProjectOnPlane(base.transform.right, m_lastGroundNormal).normalized); - float num6 = Vector3.Dot(m_body.velocity, base.transform.forward); - m_currentTurnVel = Mathf.SmoothDamp(m_currentTurnVel, target, ref m_currentTurnVelChange, 0.5f, 99f); - m_zanim.SetFloat(forward_speed, IsPlayer() ? num5 : num6); - m_zanim.SetFloat(sideway_speed, value); - m_zanim.SetFloat(turn_speed, m_currentTurnVel); - m_zanim.SetBool(inWater, value: false); - m_zanim.SetBool(onGround, IsOnGround()); - m_zanim.SetBool(encumbered, IsEncumbered()); - m_zanim.SetBool(flying, value: false); - if (m_currentVel.magnitude > 0.1f) - { - if (m_running) - { - AddNoise(30f); - } - else if (!flag) - { - AddNoise(15f); - } - } - } - - public bool IsSneaking() - { - if (IsCrouching() && m_currentVel.magnitude > 0.1f) - { - return IsOnGround(); - } - return false; - } - - private float GetSlopeAngle() - { - if (!IsOnGround()) - { - return 0f; - } - float num = Vector3.SignedAngle(base.transform.forward, m_lastGroundNormal, base.transform.right); - return 0f - (90f - (0f - num)); - } - - protected void AddPushbackForce(ref Vector3 velocity) - { - if (m_pushForce != Vector3.zero) - { - Vector3 normalized = m_pushForce.normalized; - float num = Vector3.Dot(normalized, velocity); - if (num < 10f) - { - velocity += normalized * (10f - num); - } - if (IsSwiming() || m_flying) - { - velocity *= 0.5f; - } - } - } - - private void ApplyPushback(HitData hit) - { - if (hit.m_pushForce != 0f) - { - float num = Mathf.Min(40f, hit.m_pushForce / m_body.mass * 5f); - Vector3 pushForce = hit.m_dir * num; - pushForce.y = 0f; - if (m_pushForce.magnitude < pushForce.magnitude) - { - m_pushForce = pushForce; - } - } - } - - private void UpdatePushback(float dt) - { - m_pushForce = Vector3.MoveTowards(m_pushForce, Vector3.zero, 100f * dt); - } - - private void ApplyGroundForce(ref Vector3 vel, Vector3 targetVel) - { - Vector3 vector = Vector3.zero; - if (IsOnGround() && (bool)m_lastGroundBody) - { - vector = m_lastGroundBody.GetPointVelocity(base.transform.position); - vector.y = 0f; - } - Ship standingOnShip = GetStandingOnShip(); - if (standingOnShip != null) - { - if (targetVel.magnitude > 0.01f) - { - m_lastAttachBody = null; - } - else if (m_lastAttachBody != m_lastGroundBody) - { - m_lastAttachBody = m_lastGroundBody; - m_lastAttachPos = m_lastAttachBody.transform.InverseTransformPoint(m_body.position); - } - if ((bool)m_lastAttachBody) - { - Vector3 vector2 = m_lastAttachBody.transform.TransformPoint(m_lastAttachPos); - Vector3 vector3 = vector2 - m_body.position; - if (vector3.magnitude < 4f) - { - Vector3 position = vector2; - position.y = m_body.position.y; - if (standingOnShip.IsOwner()) - { - vector3.y = 0f; - vector += vector3 * 10f; - } - else - { - m_body.position = position; - } - } - else - { - m_lastAttachBody = null; - } - } - } - else - { - m_lastAttachBody = null; - } - vel += vector; - } - - private float UpdateRotation(float turnSpeed, float dt) - { - Quaternion quaternion = (AlwaysRotateCamera() ? m_lookYaw : Quaternion.LookRotation(m_moveDir)); - float yawDeltaAngle = Utils.GetYawDeltaAngle(base.transform.rotation, quaternion); - float num = 1f; - if (!IsPlayer()) - { - num = Mathf.Clamp01(Mathf.Abs(yawDeltaAngle) / 90f); - num = Mathf.Pow(num, 0.5f); - } - float num2 = turnSpeed * GetAttackSpeedFactorRotation() * num; - Quaternion rotation = Quaternion.RotateTowards(base.transform.rotation, quaternion, num2 * dt); - if (Mathf.Abs(yawDeltaAngle) > 0.001f) - { - base.transform.rotation = rotation; - } - return num2 * Mathf.Sign(yawDeltaAngle) * ((float)Math.PI / 180f); - } - - private void UpdateGroundTilt(float dt) - { - if (m_visual == null) - { - return; - } - if (m_nview.IsOwner()) - { - if (m_groundTilt != 0) - { - if (!IsFlying() && IsOnGround()) - { - Vector3 vector = m_lastGroundNormal; - if (m_groundTilt == GroundTiltType.PitchRaycast || m_groundTilt == GroundTiltType.FullRaycast) - { - Vector3 p = base.transform.position + base.transform.forward * m_collider.radius; - Vector3 p2 = base.transform.position - base.transform.forward * m_collider.radius; - ZoneSystem.instance.GetSolidHeight(p, out var _, out var normal); - ZoneSystem.instance.GetSolidHeight(p2, out var _, out var normal2); - vector = (vector + normal + normal2).normalized; - } - Vector3 target = base.transform.InverseTransformVector(vector); - target = Vector3.RotateTowards(Vector3.up, target, 0.87266463f, 1f); - m_groundTiltNormal = Vector3.Lerp(m_groundTiltNormal, target, 0.05f); - Vector3 vector3; - if (m_groundTilt == GroundTiltType.Pitch || m_groundTilt == GroundTiltType.PitchRaycast) - { - Vector3 vector2 = Vector3.Project(m_groundTiltNormal, Vector3.right); - vector3 = m_groundTiltNormal - vector2; - } - else - { - vector3 = m_groundTiltNormal; - } - Vector3 forward = Vector3.Cross(vector3, Vector3.left); - m_visual.transform.localRotation = Quaternion.LookRotation(forward, vector3); - } - else - { - m_visual.transform.localRotation = Quaternion.RotateTowards(m_visual.transform.localRotation, Quaternion.identity, dt * 200f); - } - m_nview.GetZDO().Set("tiltrot", m_visual.transform.localRotation); - } - else if (CanWallRun()) - { - if (m_wallRunning) - { - Vector3 vector4 = Vector3.Lerp(Vector3.up, m_lastGroundNormal, 0.65f); - Vector3 forward2 = Vector3.ProjectOnPlane(base.transform.forward, vector4); - forward2.Normalize(); - Quaternion to = Quaternion.LookRotation(forward2, vector4); - m_visual.transform.rotation = Quaternion.RotateTowards(m_visual.transform.rotation, to, 30f * dt); - } - else - { - m_visual.transform.localRotation = Quaternion.RotateTowards(m_visual.transform.localRotation, Quaternion.identity, 100f * dt); - } - m_nview.GetZDO().Set("tiltrot", m_visual.transform.localRotation); - } - } - else if (m_groundTilt != 0 || CanWallRun()) - { - Quaternion quaternion = m_nview.GetZDO().GetQuaternion("tiltrot", Quaternion.identity); - m_visual.transform.localRotation = quaternion; - } - } - - public bool IsWallRunning() - { - return m_wallRunning; - } - - private bool IsOnSnow() - { - return false; - } - - public void Heal(float hp, bool showText = true) - { - if (!(hp <= 0f)) - { - if (m_nview.IsOwner()) - { - RPC_Heal(0L, hp, showText); - return; - } - m_nview.InvokeRPC("Heal", hp, showText); - } - } - - private void RPC_Heal(long sender, float hp, bool showText) - { - if (!m_nview.IsOwner()) - { - return; - } - float health = GetHealth(); - if (health <= 0f || IsDead()) - { - return; - } - float num = Mathf.Min(health + hp, GetMaxHealth()); - if (num > health) - { - SetHealth(num); - if (showText) - { - Vector3 topPoint = GetTopPoint(); - DamageText.instance.ShowText(DamageText.TextType.Heal, topPoint, hp, IsPlayer()); - } - } - } - - public Vector3 GetTopPoint() - { - Vector3 center = m_collider.bounds.center; - center.y = m_collider.bounds.max.y; - return center; - } - - public float GetRadius() - { - return m_collider.radius; - } - - public Vector3 GetHeadPoint() - { - return m_head.position; - } - - public Vector3 GetEyePoint() - { - return m_eye.position; - } - - public Vector3 GetCenterPoint() - { - return m_collider.bounds.center; - } - - public DestructibleType GetDestructibleType() - { - return DestructibleType.Character; - } - - public void Damage(HitData hit) - { - if (m_nview.IsValid()) - { - m_nview.InvokeRPC("Damage", hit); - } - } - - private void RPC_Damage(long sender, HitData hit) - { - if (IsDebugFlying() || !m_nview.IsOwner() || GetHealth() <= 0f || IsDead() || IsTeleporting() || InCutscene() || (hit.m_dodgeable && IsDodgeInvincible())) - { - return; - } - Character attacker = hit.GetAttacker(); - if ((hit.HaveAttacker() && attacker == null) || (IsPlayer() && !IsPVPEnabled() && attacker != null && attacker.IsPlayer())) - { - return; - } - if (attacker != null && !attacker.IsPlayer()) - { - float difficultyDamageScale = Game.instance.GetDifficultyDamageScale(base.transform.position); - hit.ApplyModifier(difficultyDamageScale); - } - m_seman.OnDamaged(hit, attacker); - if (m_baseAI != null && !m_baseAI.IsAlerted() && hit.m_backstabBonus > 1f && Time.time - m_backstabTime > 300f) - { - m_backstabTime = Time.time; - hit.ApplyModifier(hit.m_backstabBonus); - m_backstabHitEffects.Create(hit.m_point, Quaternion.identity, base.transform); - } - if (IsStaggering() && !IsPlayer()) - { - hit.ApplyModifier(2f); - m_critHitEffects.Create(hit.m_point, Quaternion.identity, base.transform); - } - if (hit.m_blockable && IsBlocking()) - { - BlockAttack(hit, attacker); - } - ApplyPushback(hit); - if (!string.IsNullOrEmpty(hit.m_statusEffect)) - { - StatusEffect statusEffect = m_seman.GetStatusEffect(hit.m_statusEffect); - if (statusEffect == null) - { - statusEffect = m_seman.AddStatusEffect(hit.m_statusEffect); - } - if (statusEffect != null && attacker != null) - { - statusEffect.SetAttacker(attacker); - } - } - HitData.DamageModifiers damageModifiers = GetDamageModifiers(); - hit.ApplyResistance(damageModifiers, out var significantModifier); - if (IsPlayer()) - { - float bodyArmor = GetBodyArmor(); - hit.ApplyArmor(bodyArmor); - DamageArmorDurability(hit); - } - float poison = hit.m_damage.m_poison; - float fire = hit.m_damage.m_fire; - float spirit = hit.m_damage.m_spirit; - hit.m_damage.m_poison = 0f; - hit.m_damage.m_fire = 0f; - hit.m_damage.m_spirit = 0f; - ApplyDamage(hit, showDamageText: true, triggerEffects: true, significantModifier); - AddFireDamage(fire); - AddSpiritDamage(spirit); - AddPoisonDamage(poison); - AddFrostDamage(hit.m_damage.m_frost); - AddLightningDamage(hit.m_damage.m_lightning); - } - - protected HitData.DamageModifier GetDamageModifier(HitData.DamageType damageType) - { - return GetDamageModifiers().GetModifier(damageType); - } - - protected HitData.DamageModifiers GetDamageModifiers() - { - HitData.DamageModifiers mods = m_damageModifiers.Clone(); - ApplyArmorDamageMods(ref mods); - m_seman.ApplyDamageMods(ref mods); - return mods; - } - - public void ApplyDamage(HitData hit, bool showDamageText, bool triggerEffects, HitData.DamageModifier mod = HitData.DamageModifier.Normal) - { - if (IsDebugFlying() || IsDead() || IsTeleporting() || InCutscene()) - { - return; - } - float totalDamage = hit.GetTotalDamage(); - if (showDamageText && (totalDamage > 0f || !IsPlayer())) - { - DamageText.instance.ShowText(mod, hit.m_point, totalDamage, IsPlayer()); - } - if (!(totalDamage <= 0f)) - { - if (!InGodMode() && !InGhostMode()) - { - float health = GetHealth(); - health -= totalDamage; - SetHealth(health); - } - AddStaggerDamage(totalDamage * hit.m_staggerMultiplier, hit.m_dir); - if (triggerEffects && totalDamage > 2f) - { - DoDamageCameraShake(hit); - m_hitEffects.Create(hit.m_point, Quaternion.identity, base.transform); - } - OnDamaged(hit); - if (m_onDamaged != null) - { - m_onDamaged(totalDamage, hit.GetAttacker()); - } - if (m_dpsDebugEnabled) - { - AddDPS(totalDamage, this); - } - } - } - - protected virtual void DoDamageCameraShake(HitData hit) - { - } - - protected virtual void DamageArmorDurability(HitData hit) - { - } - - private void AddFireDamage(float damage) - { - if (!(damage <= 0f)) - { - SE_Burning sE_Burning = m_seman.GetStatusEffect("Burning") as SE_Burning; - if (sE_Burning == null) - { - sE_Burning = m_seman.AddStatusEffect("Burning") as SE_Burning; - } - sE_Burning.AddFireDamage(damage); - } - } - - private void AddSpiritDamage(float damage) - { - if (!(damage <= 0f)) - { - SE_Burning sE_Burning = m_seman.GetStatusEffect("Spirit") as SE_Burning; - if (sE_Burning == null) - { - sE_Burning = m_seman.AddStatusEffect("Spirit") as SE_Burning; - } - sE_Burning.AddSpiritDamage(damage); - } - } - - private void AddPoisonDamage(float damage) - { - if (!(damage <= 0f)) - { - SE_Poison sE_Poison = m_seman.GetStatusEffect("Poison") as SE_Poison; - if (sE_Poison == null) - { - sE_Poison = m_seman.AddStatusEffect("Poison") as SE_Poison; - } - sE_Poison.AddDamage(damage); - } - } - - private void AddFrostDamage(float damage) - { - if (!(damage <= 0f)) - { - SE_Frost sE_Frost = m_seman.GetStatusEffect("Frost") as SE_Frost; - if (sE_Frost == null) - { - sE_Frost = m_seman.AddStatusEffect("Frost") as SE_Frost; - } - sE_Frost.AddDamage(damage); - } - } - - private void AddLightningDamage(float damage) - { - if (!(damage <= 0f)) - { - m_seman.AddStatusEffect("Lightning", resetTime: true); - } - } - - private void AddStaggerDamage(float damage, Vector3 forceDirection) - { - if (!(m_staggerDamageFactor <= 0f) || IsPlayer()) - { - m_staggerDamage += damage; - m_staggerTimer = 0f; - float maxHealth = GetMaxHealth(); - float num = (IsPlayer() ? (maxHealth / 2f) : (maxHealth * m_staggerDamageFactor)); - if (m_staggerDamage >= num) - { - m_staggerDamage = 0f; - Stagger(forceDirection); - } - } - } - - private static void AddDPS(float damage, Character me) - { - if (me == Player.m_localPlayer) - { - CalculateDPS("To-you ", m_playerDamage, damage); - } - else - { - CalculateDPS("To-others ", m_enemyDamage, damage); - } - } - - private static void CalculateDPS(string name, List<KeyValuePair<float, float>> damages, float damage) - { - float time = Time.time; - if (damages.Count > 0 && Time.time - damages[damages.Count - 1].Key > 5f) - { - damages.Clear(); - } - damages.Add(new KeyValuePair<float, float>(time, damage)); - float num = Time.time - damages[0].Key; - if (num < 0.01f) - { - return; - } - float num2 = 0f; - foreach (KeyValuePair<float, float> damage2 in damages) - { - num2 += damage2.Value; - } - float num3 = num2 / num; - string text = "DPS " + name + " (" + damages.Count + " attacks): " + num3.ToString("0.0"); - ZLog.Log(text); - MessageHud.instance.ShowMessage(MessageHud.MessageType.Center, text); - } - - private void UpdateStagger(float dt) - { - if (!(m_staggerDamageFactor <= 0f) || IsPlayer()) - { - m_staggerTimer += dt; - if (m_staggerTimer > 3f) - { - m_staggerDamage = 0f; - } - } - } - - public void Stagger(Vector3 forceDirection) - { - if (m_nview.IsOwner()) - { - RPC_Stagger(0L, forceDirection); - return; - } - m_nview.InvokeRPC("Stagger", forceDirection); - } - - private void RPC_Stagger(long sender, Vector3 forceDirection) - { - if (!IsStaggering()) - { - if (forceDirection.magnitude > 0.01f) - { - forceDirection.y = 0f; - base.transform.rotation = Quaternion.LookRotation(-forceDirection); - } - m_zanim.SetTrigger("stagger"); - } - } - - protected virtual void ApplyArmorDamageMods(ref HitData.DamageModifiers mods) - { - } - - public virtual float GetBodyArmor() - { - return 0f; - } - - protected virtual bool BlockAttack(HitData hit, Character attacker) - { - return false; - } - - protected virtual void OnDamaged(HitData hit) - { - } - - private void OnCollisionStay(Collision collision) - { - if (!m_nview.IsValid() || !m_nview.IsOwner() || m_jumpTimer < 0.1f) - { - return; - } - ContactPoint[] contacts = collision.contacts; - for (int i = 0; i < contacts.Length; i++) - { - ContactPoint contactPoint = contacts[i]; - float num = contactPoint.point.y - base.transform.position.y; - if (!(contactPoint.normal.y > 0.1f) || !(num < m_collider.radius)) - { - continue; - } - if (contactPoint.normal.y > m_groundContactNormal.y || !m_groundContact) - { - m_groundContact = true; - m_groundContactNormal = contactPoint.normal; - m_groundContactPoint = contactPoint.point; - m_lowestContactCollider = collision.collider; - continue; - } - Vector3 groundContactNormal = Vector3.Normalize(m_groundContactNormal + contactPoint.normal); - if (groundContactNormal.y > m_groundContactNormal.y) - { - m_groundContactNormal = groundContactNormal; - m_groundContactPoint = (m_groundContactPoint + contactPoint.point) * 0.5f; - } - } - } - - private void UpdateGroundContact(float dt) - { - if (!m_groundContact) - { - return; - } - m_lastGroundCollider = m_lowestContactCollider; - m_lastGroundNormal = m_groundContactNormal; - m_lastGroundPoint = m_groundContactPoint; - m_lastGroundBody = (m_lastGroundCollider ? m_lastGroundCollider.attachedRigidbody : null); - if (!IsPlayer() && m_lastGroundBody != null && m_lastGroundBody.gameObject.layer == base.gameObject.layer) - { - m_lastGroundCollider = null; - m_lastGroundBody = null; - } - float num = Mathf.Max(0f, m_maxAirAltitude - base.transform.position.y); - if (num > 0.8f) - { - if (m_onLand != null) - { - Vector3 lastGroundPoint = m_lastGroundPoint; - if (InWater()) - { - lastGroundPoint.y = m_waterLevel; - } - m_onLand(m_lastGroundPoint); - } - ResetCloth(); - } - if (IsPlayer() && num > 4f) - { - HitData hitData = new HitData(); - hitData.m_damage.m_damage = Mathf.Clamp01((num - 4f) / 16f) * 100f; - hitData.m_point = m_lastGroundPoint; - hitData.m_dir = m_lastGroundNormal; - Damage(hitData); - } - ResetGroundContact(); - m_lastGroundTouch = 0f; - m_maxAirAltitude = base.transform.position.y; - } - - private void ResetGroundContact() - { - m_lowestContactCollider = null; - m_groundContact = false; - m_groundContactNormal = Vector3.zero; - m_groundContactPoint = Vector3.zero; - } - - public Ship GetStandingOnShip() - { - if (!IsOnGround()) - { - return null; - } - if ((bool)m_lastGroundBody) - { - return m_lastGroundBody.GetComponent<Ship>(); - } - return null; - } - - public bool IsOnGround() - { - if (!(m_lastGroundTouch < 0.2f)) - { - return m_body.IsSleeping(); - } - return true; - } - - private void CheckDeath() - { - if (!IsDead() && GetHealth() <= 0f) - { - OnDeath(); - if (m_onDeath != null) - { - m_onDeath(); - } - } - } - - protected virtual void OnRagdollCreated(Ragdoll ragdoll) - { - } - - protected virtual void OnDeath() - { - GameObject[] array = m_deathEffects.Create(base.transform.position, base.transform.rotation, base.transform); - for (int i = 0; i < array.Length; i++) - { - Ragdoll component = array[i].GetComponent<Ragdoll>(); - if ((bool)component) - { - CharacterDrop component2 = GetComponent<CharacterDrop>(); - LevelEffects componentInChildren = GetComponentInChildren<LevelEffects>(); - Vector3 velocity = m_body.velocity; - if (m_pushForce.magnitude * 0.5f > velocity.magnitude) - { - velocity = m_pushForce * 0.5f; - } - float hue = 0f; - float saturation = 0f; - float value = 0f; - if ((bool)componentInChildren) - { - componentInChildren.GetColorChanges(out hue, out saturation, out value); - } - component.Setup(velocity, hue, saturation, value, component2); - OnRagdollCreated(component); - if ((bool)component2) - { - component2.SetDropsEnabled(enabled: false); - } - } - } - if (!string.IsNullOrEmpty(m_defeatSetGlobalKey)) - { - ZoneSystem.instance.SetGlobalKey(m_defeatSetGlobalKey); - } - ZNetScene.instance.Destroy(base.gameObject); - GoogleAnalyticsV4.instance.LogEvent("Game", "Killed", m_name, 0L); - } - - public float GetHealth() - { - return m_nview.GetZDO()?.GetFloat("health", GetMaxHealth()) ?? GetMaxHealth(); - } - - public void SetHealth(float health) - { - ZDO zDO = m_nview.GetZDO(); - if (zDO != null && m_nview.IsOwner()) - { - if (health < 0f) - { - health = 0f; - } - zDO.Set("health", health); - } - } - - public float GetHealthPercentage() - { - return GetHealth() / GetMaxHealth(); - } - - public virtual bool IsDead() - { - return false; - } - - public void SetMaxHealth(float health) - { - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("max_health", health); - } - if (GetHealth() > health) - { - SetHealth(health); - } - } - - public float GetMaxHealth() - { - if (m_nview.GetZDO() != null) - { - return m_nview.GetZDO().GetFloat("max_health", m_health); - } - return m_health; - } - - public virtual float GetMaxStamina() - { - return 0f; - } - - public virtual float GetStaminaPercentage() - { - return 1f; - } - - public bool IsBoss() - { - return m_boss; - } - - public void SetLookDir(Vector3 dir) - { - if (dir.magnitude <= Mathf.Epsilon) - { - dir = base.transform.forward; - } - else - { - dir.Normalize(); - } - m_lookDir = dir; - dir.y = 0f; - m_lookYaw = Quaternion.LookRotation(dir); - } - - public Vector3 GetLookDir() - { - return m_eye.forward; - } - - public virtual void OnAttackTrigger() - { - } - - public virtual void OnStopMoving() - { - } - - public virtual void OnWeaponTrailStart() - { - } - - public void SetMoveDir(Vector3 dir) - { - m_moveDir = dir; - } - - public void SetRun(bool run) - { - m_run = run; - } - - public void SetWalk(bool walk) - { - m_walk = walk; - } - - public bool GetWalk() - { - return m_walk; - } - - protected virtual void UpdateEyeRotation() - { - m_eye.rotation = Quaternion.LookRotation(m_lookDir); - } - - public void OnAutoJump(Vector3 dir, float upVel, float forwardVel) - { - if (m_nview.IsValid() && m_nview.IsOwner() && IsOnGround() && !IsDead() && !InAttack() && !InDodge() && !IsKnockedBack() && !(Time.time - m_lastAutoJumpTime < 0.5f)) - { - m_lastAutoJumpTime = Time.time; - if (!(Vector3.Dot(m_moveDir, dir) < 0.5f)) - { - Vector3 zero = Vector3.zero; - zero.y = upVel; - zero += dir * forwardVel; - m_body.velocity = zero; - m_lastGroundTouch = 1f; - m_jumpTimer = 0f; - m_jumpEffects.Create(base.transform.position, base.transform.rotation, base.transform); - SetCrouch(crouch: false); - UpdateBodyFriction(); - } - } - } - - public void Jump() - { - if (!IsOnGround() || IsDead() || InAttack() || IsEncumbered() || InDodge() || IsKnockedBack()) - { - return; - } - bool flag = false; - if (!HaveStamina(m_jumpStaminaUsage)) - { - if (IsPlayer()) - { - Hud.instance.StaminaBarNoStaminaFlash(); - } - flag = true; - } - float num = 0f; - Skills skills = GetSkills(); - if (skills != null) - { - num = skills.GetSkillFactor(Skills.SkillType.Jump); - if (!flag) - { - RaiseSkill(Skills.SkillType.Jump); - } - } - Vector3 velocity = m_body.velocity; - Mathf.Acos(Mathf.Clamp01(m_lastGroundNormal.y)); - Vector3 normalized = (m_lastGroundNormal + Vector3.up).normalized; - float num2 = 1f + num * 0.4f; - float num3 = m_jumpForce * num2; - float num4 = Vector3.Dot(normalized, velocity); - if (num4 < num3) - { - velocity += normalized * (num3 - num4); - } - velocity += m_moveDir * m_jumpForceForward * num2; - if (flag) - { - velocity *= m_jumpForceTiredFactor; - } - m_body.WakeUp(); - m_body.velocity = velocity; - ResetGroundContact(); - m_lastGroundTouch = 1f; - m_jumpTimer = 0f; - m_zanim.SetTrigger("jump"); - AddNoise(30f); - m_jumpEffects.Create(base.transform.position, base.transform.rotation, base.transform); - OnJump(); - SetCrouch(crouch: false); - UpdateBodyFriction(); - } - - private void UpdateBodyFriction() - { - m_collider.material.frictionCombine = PhysicMaterialCombine.Multiply; - if (IsDead()) - { - m_collider.material.staticFriction = 1f; - m_collider.material.dynamicFriction = 1f; - m_collider.material.frictionCombine = PhysicMaterialCombine.Maximum; - } - else if (IsSwiming()) - { - m_collider.material.staticFriction = 0.2f; - m_collider.material.dynamicFriction = 0.2f; - } - else if (!IsOnGround()) - { - m_collider.material.staticFriction = 0f; - m_collider.material.dynamicFriction = 0f; - } - else if (IsFlying()) - { - m_collider.material.staticFriction = 0f; - m_collider.material.dynamicFriction = 0f; - } - else if (m_moveDir.magnitude < 0.1f) - { - m_collider.material.staticFriction = 0.8f * (1f - m_slippage); - m_collider.material.dynamicFriction = 0.8f * (1f - m_slippage); - m_collider.material.frictionCombine = PhysicMaterialCombine.Maximum; - } - else - { - m_collider.material.staticFriction = 0.4f * (1f - m_slippage); - m_collider.material.dynamicFriction = 0.4f * (1f - m_slippage); - } - } - - public virtual bool StartAttack(Character target, bool charge) - { - return false; - } - - public virtual void OnNearFire(Vector3 point) - { - } - - public ZDOID GetZDOID() - { - if (m_nview.IsValid()) - { - return m_nview.GetZDO().m_uid; - } - return ZDOID.None; - } - - public bool IsOwner() - { - if (m_nview.IsValid()) - { - return m_nview.IsOwner(); - } - return false; - } - - public long GetOwner() - { - if (m_nview.IsValid()) - { - return m_nview.GetZDO().m_owner; - } - return 0L; - } - - public virtual bool UseMeleeCamera() - { - return false; - } - - public virtual bool AlwaysRotateCamera() - { - return true; - } - - public void SetInWater(float depth) - { - m_waterLevel = depth; - } - - public virtual bool IsPVPEnabled() - { - return false; - } - - public virtual bool InIntro() - { - return false; - } - - public virtual bool InCutscene() - { - return false; - } - - public virtual bool IsCrouching() - { - return false; - } - - public virtual bool InBed() - { - return false; - } - - public virtual bool IsAttached() - { - return false; - } - - protected virtual void SetCrouch(bool crouch) - { - } - - public virtual void AttachStart(Transform attachPoint, bool hideWeapons, bool isBed, string attachAnimation, Vector3 detachOffset) - { - } - - public virtual void AttachStop() - { - } - - private void UpdateWater(float dt) - { - m_swimTimer += dt; - if (InWaterSwimDepth()) - { - if (m_nview.IsOwner()) - { - m_seman.AddStatusEffect("Wet", resetTime: true); - } - if (m_canSwim) - { - m_swimTimer = 0f; - } - } - } - - public bool IsSwiming() - { - return m_swimTimer < 0.5f; - } - - public bool InWaterSwimDepth() - { - return InWaterDepth() > Mathf.Max(0f, m_swimDepth - 0.4f); - } - - private float InWaterDepth() - { - if (GetStandingOnShip() != null) - { - return 0f; - } - return Mathf.Max(0f, m_waterLevel - base.transform.position.y); - } - - public bool InWater() - { - return InWaterDepth() > 0f; - } - - protected virtual bool CheckRun(Vector3 moveDir, float dt) - { - if (!m_run) - { - return false; - } - if (moveDir.magnitude < 0.1f) - { - return false; - } - if (IsCrouching() || IsEncumbered()) - { - return false; - } - if (InDodge()) - { - return false; - } - return true; - } - - public bool IsRunning() - { - return m_running; - } - - public virtual bool InPlaceMode() - { - return false; - } - - public virtual bool HaveStamina(float amount = 0f) - { - return true; - } - - public virtual void AddStamina(float v) - { - } - - public virtual void UseStamina(float stamina) - { - } - - public bool IsStaggering() - { - return m_animator.GetCurrentAnimatorStateInfo(0).tagHash == m_animatorTagStagger; - } - - public virtual bool CanMove() - { - AnimatorStateInfo animatorStateInfo = (m_animator.IsInTransition(0) ? m_animator.GetNextAnimatorStateInfo(0) : m_animator.GetCurrentAnimatorStateInfo(0)); - if (animatorStateInfo.tagHash == m_animatorTagFreeze || animatorStateInfo.tagHash == m_animatorTagStagger || animatorStateInfo.tagHash == m_animatorTagSitting) - { - return false; - } - return true; - } - - public virtual bool IsEncumbered() - { - return false; - } - - public virtual bool IsTeleporting() - { - return false; - } - - private bool CanWallRun() - { - return IsPlayer(); - } - - public void ShowPickupMessage(ItemDrop.ItemData item, int amount) - { - Message(MessageHud.MessageType.TopLeft, "$msg_added " + item.m_shared.m_name, amount, item.GetIcon()); - } - - public void ShowRemovedMessage(ItemDrop.ItemData item, int amount) - { - Message(MessageHud.MessageType.TopLeft, "$msg_removed " + item.m_shared.m_name, amount, item.GetIcon()); - } - - public virtual void Message(MessageHud.MessageType type, string msg, int amount = 0, Sprite icon = null) - { - } - - public CapsuleCollider GetCollider() - { - return m_collider; - } - - public virtual void OnStealthSuccess(Character character, float factor) - { - } - - public virtual float GetStealthFactor() - { - return 1f; - } - - private void UpdateNoise(float dt) - { - m_noiseRange = Mathf.Max(0f, m_noiseRange - dt * 4f); - m_syncNoiseTimer += dt; - if (m_syncNoiseTimer > 0.5f) - { - m_syncNoiseTimer = 0f; - m_nview.GetZDO().Set("noise", m_noiseRange); - } - } - - public void AddNoise(float range) - { - if (m_nview.IsValid()) - { - if (m_nview.IsOwner()) - { - RPC_AddNoise(0L, range); - return; - } - m_nview.InvokeRPC("AddNoise", range); - } - } - - private void RPC_AddNoise(long sender, float range) - { - if (m_nview.IsOwner() && range > m_noiseRange) - { - m_noiseRange = range; - m_seman.ModifyNoise(m_noiseRange, ref m_noiseRange); - } - } - - public float GetNoiseRange() - { - if (!m_nview.IsValid()) - { - return 0f; - } - if (m_nview.IsOwner()) - { - return m_noiseRange; - } - return m_nview.GetZDO().GetFloat("noise"); - } - - public virtual bool InGodMode() - { - return false; - } - - public virtual bool InGhostMode() - { - return false; - } - - public virtual bool IsDebugFlying() - { - return false; - } - - public virtual string GetHoverText() - { - Tameable component = GetComponent<Tameable>(); - if ((bool)component) - { - return component.GetHoverText(); - } - return ""; - } - - public virtual string GetHoverName() - { - return Localization.instance.Localize(m_name); - } - - public virtual bool IsHoldingAttack() - { - return false; - } - - public virtual bool InAttack() - { - return false; - } - - protected virtual void StopEmote() - { - } - - public virtual bool InMinorAction() - { - return false; - } - - public virtual bool InDodge() - { - return false; - } - - public virtual bool IsDodgeInvincible() - { - return false; - } - - public virtual bool InEmote() - { - return false; - } - - public virtual bool IsBlocking() - { - return false; - } - - public bool IsFlying() - { - return m_flying; - } - - public bool IsKnockedBack() - { - return m_pushForce != Vector3.zero; - } - - private void OnDrawGizmosSelected() - { - if (m_nview != null && m_nview.GetZDO() != null) - { - float @float = m_nview.GetZDO().GetFloat("noise"); - Gizmos.DrawWireSphere(base.transform.position, @float); - } - Gizmos.color = Color.blue; - Gizmos.DrawWireCube(base.transform.position + Vector3.up * m_swimDepth, new Vector3(1f, 0.05f, 1f)); - if (IsOnGround()) - { - Gizmos.color = Color.green; - Gizmos.DrawLine(m_lastGroundPoint, m_lastGroundPoint + m_lastGroundNormal); - } - } - - public virtual bool TeleportTo(Vector3 pos, Quaternion rot, bool distantTeleport) - { - return false; - } - - private void SyncVelocity() - { - m_nview.GetZDO().Set("BodyVelocity", m_body.velocity); - } - - public Vector3 GetVelocity() - { - if (!m_nview.IsValid()) - { - return Vector3.zero; - } - if (m_nview.IsOwner()) - { - return m_body.velocity; - } - return m_nview.GetZDO().GetVec3("BodyVelocity", Vector3.zero); - } - - public void AddRootMotion(Vector3 vel) - { - if (InDodge() || InAttack() || InEmote()) - { - m_rootMotion += vel; - } - } - - private void ApplyRootMotion(ref Vector3 vel) - { - Vector3 vector = m_rootMotion * 55f; - if (vector.magnitude > vel.magnitude) - { - vel = vector; - } - m_rootMotion = Vector3.zero; - } - - public static void GetCharactersInRange(Vector3 point, float radius, List<Character> characters) - { - foreach (Character character in m_characters) - { - if (Vector3.Distance(character.transform.position, point) < radius) - { - characters.Add(character); - } - } - } - - public static List<Character> GetAllCharacters() - { - return m_characters; - } - - public static bool IsCharacterInRange(Vector3 point, float range) - { - foreach (Character character in m_characters) - { - if (Vector3.Distance(character.transform.position, point) < range) - { - return true; - } - } - return false; - } - - public virtual void OnTargeted(bool sensed, bool alerted) - { - } - - public GameObject GetVisual() - { - return m_visual; - } - - protected void UpdateLodgroup() - { - if (!(m_lodGroup == null)) - { - Renderer[] componentsInChildren = m_visual.GetComponentsInChildren<Renderer>(); - LOD[] lODs = m_lodGroup.GetLODs(); - lODs[0].renderers = componentsInChildren; - m_lodGroup.SetLODs(lODs); - } - } - - public virtual float GetEquipmentMovementModifier() - { - return 0f; - } - - protected virtual float GetJogSpeedFactor() - { - return 1f; - } - - protected virtual float GetRunSpeedFactor() - { - return 1f; - } - - protected virtual float GetAttackSpeedFactorMovement() - { - return 1f; - } - - protected virtual float GetAttackSpeedFactorRotation() - { - return 1f; - } - - public virtual void RaiseSkill(Skills.SkillType skill, float value = 1f) - { - } - - public virtual Skills GetSkills() - { - return null; - } - - public virtual float GetSkillFactor(Skills.SkillType skill) - { - return 0f; - } - - public virtual float GetRandomSkillFactor(Skills.SkillType skill) - { - return UnityEngine.Random.Range(0.75f, 1f); - } - - public bool IsMonsterFaction() - { - if (IsTamed()) - { - return false; - } - if (m_faction != Faction.ForestMonsters && m_faction != Faction.Undead && m_faction != Faction.Demon && m_faction != Faction.PlainsMonsters && m_faction != Faction.MountainMonsters) - { - return m_faction == Faction.SeaMonsters; - } - return true; - } - - public Transform GetTransform() - { - if (this == null) - { - return null; - } - return base.transform; - } - - public Collider GetLastGroundCollider() - { - return m_lastGroundCollider; - } - - public Vector3 GetLastGroundNormal() - { - return m_groundContactNormal; - } - - public void ResetCloth() - { - m_nview.InvokeRPC(ZNetView.Everybody, "ResetCloth"); - } - - private void RPC_ResetCloth(long sender) - { - Cloth[] componentsInChildren = GetComponentsInChildren<Cloth>(); - foreach (Cloth cloth in componentsInChildren) - { - if (cloth.enabled) - { - cloth.enabled = false; - cloth.enabled = true; - } - } - } - - public virtual bool GetRelativePosition(out ZDOID parent, out Vector3 relativePos, out Vector3 relativeVel) - { - relativeVel = Vector3.zero; - if (IsOnGround() && (bool)m_lastGroundBody) - { - ZNetView component = m_lastGroundBody.GetComponent<ZNetView>(); - if ((bool)component && component.IsValid()) - { - parent = component.GetZDO().m_uid; - relativePos = component.transform.InverseTransformPoint(base.transform.position); - relativeVel = component.transform.InverseTransformVector(m_body.velocity - m_lastGroundBody.velocity); - return true; - } - } - parent = ZDOID.None; - relativePos = Vector3.zero; - return false; - } - - public Quaternion GetLookYaw() - { - return m_lookYaw; - } - - public Vector3 GetMoveDir() - { - return m_moveDir; - } - - public BaseAI GetBaseAI() - { - return m_baseAI; - } - - public float GetMass() - { - return m_body.mass; - } - - protected void SetVisible(bool visible) - { - if (!(m_lodGroup == null) && m_lodVisible != visible) - { - m_lodVisible = visible; - if (m_lodVisible) - { - m_lodGroup.localReferencePoint = m_originalLocalRef; - } - else - { - m_lodGroup.localReferencePoint = new Vector3(999999f, 999999f, 999999f); - } - } - } - - public void SetTamed(bool tamed) - { - if (m_nview.IsValid() && m_tamed != tamed) - { - m_nview.InvokeRPC("SetTamed", tamed); - } - } - - private void RPC_SetTamed(long sender, bool tamed) - { - if (m_nview.IsOwner() && m_tamed != tamed) - { - m_tamed = tamed; - m_nview.GetZDO().Set("tamed", m_tamed); - } - } - - public bool IsTamed() - { - if (!m_nview.IsValid()) - { - return false; - } - if (!m_nview.IsOwner() && Time.time - m_lastTamedCheck > 1f) - { - m_lastTamedCheck = Time.time; - m_tamed = m_nview.GetZDO().GetBool("tamed", m_tamed); - } - return m_tamed; - } - - public SEMan GetSEMan() - { - return m_seman; - } - - public bool InInterior() - { - return base.transform.position.y > 3000f; - } - - public static void SetDPSDebug(bool enabled) - { - m_dpsDebugEnabled = enabled; - } - - public static bool IsDPSDebugEnabled() - { - return m_dpsDebugEnabled; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/CharacterAnimEvent.cs b/Valheim_v202102/Valheim/assembly_valheim/CharacterAnimEvent.cs deleted file mode 100644 index 8f0db87..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/CharacterAnimEvent.cs +++ /dev/null @@ -1,525 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class CharacterAnimEvent : MonoBehaviour -{ - [Serializable] - public class Foot - { - public Transform m_transform; - - public AvatarIKGoal m_ikHandle; - - public float m_footDownMax = 0.4f; - - public float m_footOffset = 0.1f; - - public float m_footStepHeight = 1f; - - public float m_stabalizeDistance; - - [NonSerialized] - public float m_ikWeight; - - [NonSerialized] - public Vector3 m_plantPosition = Vector3.zero; - - [NonSerialized] - public Vector3 m_plantNormal = Vector3.up; - - [NonSerialized] - public bool m_isPlanted; - - public Foot(Transform t, AvatarIKGoal handle) - { - m_transform = t; - m_ikHandle = handle; - m_ikWeight = 0f; - } - } - - [Header("Foot IK")] - public bool m_footIK; - - public float m_footDownMax = 0.4f; - - public float m_footOffset = 0.1f; - - public float m_footStepHeight = 1f; - - public float m_stabalizeDistance; - - public bool m_useFeetValues; - - public Foot[] m_feets = new Foot[0]; - - [Header("Head/eye rotation")] - public bool m_headRotation = true; - - public Transform[] m_eyes; - - public float m_lookWeight = 0.5f; - - public float m_bodyLookWeight = 0.1f; - - public float m_headLookWeight = 1f; - - public float m_eyeLookWeight; - - public float m_lookClamp = 0.5f; - - private const float m_headRotationSmoothness = 0.1f; - - public Transform m_lookAt; - - [Header("Player Female hack")] - public bool m_femaleHack; - - public Transform m_leftShoulder; - - public Transform m_rightShoulder; - - public float m_femaleOffset = 0.0004f; - - public float m_maleOffset = 0.0007651657f; - - private Character m_character; - - private Animator m_animator; - - private ZNetView m_nview; - - private MonsterAI m_monsterAI; - - private VisEquipment m_visEquipment; - - private FootStep m_footStep; - - private int m_chainID; - - private float m_pauseTimer; - - private float m_pauseSpeed = 1f; - - private float m_sendTimer; - - private Vector3 m_headLookDir; - - private float m_lookAtWeight; - - private Transform m_head; - - private bool m_chain; - - private static int m_ikGroundMask; - - private void Awake() - { - m_character = GetComponentInParent<Character>(); - m_nview = m_character.GetComponent<ZNetView>(); - m_animator = GetComponent<Animator>(); - m_monsterAI = m_character.GetComponent<MonsterAI>(); - m_visEquipment = m_character.GetComponent<VisEquipment>(); - m_footStep = m_character.GetComponent<FootStep>(); - m_head = m_animator.GetBoneTransform(HumanBodyBones.Head); - m_chainID = Animator.StringToHash("chain"); - m_headLookDir = m_character.transform.forward; - if (m_ikGroundMask == 0) - { - m_ikGroundMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "terrain", "vehicle"); - } - } - - private void OnAnimatorMove() - { - if (m_nview.IsValid() && m_nview.IsOwner()) - { - m_character.AddRootMotion(m_animator.deltaPosition); - } - } - - private void FixedUpdate() - { - if (m_character == null || !m_nview.IsValid()) - { - return; - } - if (!m_character.InAttack() && !m_character.InMinorAction() && !m_character.InEmote() && m_character.CanMove()) - { - m_animator.speed = 1f; - } - if (m_pauseTimer > 0f) - { - m_pauseTimer -= Time.fixedDeltaTime; - if (m_pauseTimer <= 0f) - { - m_animator.speed = m_pauseSpeed; - } - } - } - - public bool CanChain() - { - return m_chain; - } - - public void FreezeFrame(float delay) - { - if (delay <= 0f) - { - return; - } - if (m_pauseTimer > 0f) - { - m_pauseTimer = delay; - return; - } - m_pauseTimer = delay; - m_pauseSpeed = m_animator.speed; - m_animator.speed = 0.0001f; - if (m_pauseSpeed <= 0.01f) - { - m_pauseSpeed = 1f; - } - } - - public void Speed(float speedScale) - { - m_animator.speed = speedScale; - } - - public void Chain() - { - m_chain = true; - } - - public void ResetChain() - { - m_chain = false; - } - - public void FootStep(AnimationEvent e) - { - if (!((double)e.animatorClipInfo.weight < 0.33) && (bool)m_footStep) - { - if (e.stringParameter.Length > 0) - { - m_footStep.OnFoot(e.stringParameter); - } - else - { - m_footStep.OnFoot(); - } - } - } - - public void Hit() - { - m_character.OnAttackTrigger(); - } - - public void OnAttackTrigger() - { - m_character.OnAttackTrigger(); - } - - public void Stop(AnimationEvent e) - { - m_character.OnStopMoving(); - } - - public void DodgeMortal() - { - Player player = m_character as Player; - if ((bool)player) - { - player.OnDodgeMortal(); - } - } - - public void TrailOn() - { - if ((bool)m_visEquipment) - { - m_visEquipment.SetWeaponTrails(enabled: true); - } - m_character.OnWeaponTrailStart(); - } - - public void TrailOff() - { - if ((bool)m_visEquipment) - { - m_visEquipment.SetWeaponTrails(enabled: false); - } - } - - public void GPower() - { - Player player = m_character as Player; - if ((bool)player) - { - player.ActivateGuardianPower(); - } - } - - private void OnAnimatorIK(int layerIndex) - { - if (m_nview.IsValid()) - { - UpdateLookat(); - UpdateFootIK(); - } - } - - private void LateUpdate() - { - UpdateHeadRotation(Time.deltaTime); - if (m_femaleHack) - { - _ = m_character; - float num = ((m_visEquipment.GetModelIndex() == 1) ? m_femaleOffset : m_maleOffset); - Vector3 localPosition = m_leftShoulder.localPosition; - localPosition.x = 0f - num; - m_leftShoulder.localPosition = localPosition; - Vector3 localPosition2 = m_rightShoulder.localPosition; - localPosition2.x = num; - m_rightShoulder.localPosition = localPosition2; - } - } - - private void UpdateLookat() - { - if (m_headRotation && (bool)m_head) - { - float target = m_lookWeight; - if (m_headLookDir != Vector3.zero) - { - m_animator.SetLookAtPosition(m_head.position + m_headLookDir * 10f); - } - if (m_character.InAttack() || (!m_character.IsPlayer() && !m_character.CanMove())) - { - target = 0f; - } - m_lookAtWeight = Mathf.MoveTowards(m_lookAtWeight, target, Time.deltaTime); - float bodyWeight = (m_character.IsAttached() ? 0f : m_bodyLookWeight); - m_animator.SetLookAtWeight(m_lookAtWeight, bodyWeight, m_headLookWeight, m_eyeLookWeight, m_lookClamp); - } - } - - private void UpdateFootIK() - { - if (!m_footIK) - { - return; - } - Camera mainCamera = Utils.GetMainCamera(); - if (mainCamera == null || Vector3.Distance(base.transform.position, mainCamera.transform.position) > 64f) - { - return; - } - if ((m_character.IsFlying() && !m_character.IsOnGround()) || (m_character.IsSwiming() && !m_character.IsOnGround())) - { - for (int i = 0; i < m_feets.Length; i++) - { - Foot foot = m_feets[i]; - m_animator.SetIKPositionWeight(foot.m_ikHandle, 0f); - m_animator.SetIKRotationWeight(foot.m_ikHandle, 0f); - } - return; - } - float deltaTime = Time.deltaTime; - for (int j = 0; j < m_feets.Length; j++) - { - Foot foot2 = m_feets[j]; - Vector3 position = foot2.m_transform.position; - AvatarIKGoal ikHandle = foot2.m_ikHandle; - float num = (m_useFeetValues ? foot2.m_footDownMax : m_footDownMax); - float num2 = (m_useFeetValues ? foot2.m_footOffset : m_footOffset); - float num3 = (m_useFeetValues ? foot2.m_footStepHeight : m_footStepHeight); - float num4 = (m_useFeetValues ? foot2.m_stabalizeDistance : m_stabalizeDistance); - float target = 1f - Mathf.Clamp01(base.transform.InverseTransformPoint(position - base.transform.up * num2).y / num); - foot2.m_ikWeight = Mathf.MoveTowards(foot2.m_ikWeight, target, deltaTime * 10f); - m_animator.SetIKPositionWeight(ikHandle, foot2.m_ikWeight); - m_animator.SetIKRotationWeight(ikHandle, foot2.m_ikWeight * 0.5f); - if (!(foot2.m_ikWeight > 0f)) - { - continue; - } - if (Physics.Raycast(position + Vector3.up * num3, Vector3.down, out var hitInfo, num3 * 4f, m_ikGroundMask)) - { - Vector3 vector = hitInfo.point + Vector3.up * num2; - Vector3 normal = hitInfo.normal; - if (num4 > 0f) - { - if (foot2.m_ikWeight >= 1f) - { - if (!foot2.m_isPlanted) - { - foot2.m_plantPosition = vector; - foot2.m_plantNormal = normal; - foot2.m_isPlanted = true; - } - else if (Vector3.Distance(foot2.m_plantPosition, vector) > num4) - { - foot2.m_isPlanted = false; - } - else - { - vector = foot2.m_plantPosition; - normal = foot2.m_plantNormal; - } - } - else - { - foot2.m_isPlanted = false; - } - } - m_animator.SetIKPosition(ikHandle, vector); - Quaternion goalRotation = Quaternion.LookRotation(Vector3.Cross(m_animator.GetIKRotation(ikHandle) * Vector3.right, hitInfo.normal), hitInfo.normal); - m_animator.SetIKRotation(ikHandle, goalRotation); - } - else - { - foot2.m_ikWeight = Mathf.MoveTowards(foot2.m_ikWeight, 0f, deltaTime * 4f); - m_animator.SetIKPositionWeight(ikHandle, foot2.m_ikWeight); - m_animator.SetIKRotationWeight(ikHandle, foot2.m_ikWeight * 0.5f); - } - } - } - - private void UpdateHeadRotation(float dt) - { - if (m_nview == null || !m_nview.IsValid() || !m_headRotation || !m_head) - { - return; - } - Vector3 lookFromPos = GetLookFromPos(); - Vector3 vector = Vector3.zero; - if (m_nview.IsOwner()) - { - if (m_monsterAI != null) - { - Character targetCreature = m_monsterAI.GetTargetCreature(); - if (targetCreature != null) - { - vector = targetCreature.GetEyePoint(); - } - } - else - { - vector = lookFromPos + m_character.GetLookDir() * 100f; - } - if (m_lookAt != null) - { - vector = m_lookAt.position; - } - m_sendTimer += Time.deltaTime; - if (m_sendTimer > 0.2f) - { - m_sendTimer = 0f; - m_nview.GetZDO().Set("LookTarget", vector); - } - } - else - { - vector = m_nview.GetZDO().GetVec3("LookTarget", Vector3.zero); - } - if (vector != Vector3.zero) - { - Vector3 b = Vector3.Normalize(vector - lookFromPos); - m_headLookDir = Vector3.Lerp(m_headLookDir, b, 0.1f); - } - else - { - m_headLookDir = m_character.transform.forward; - } - } - - private Vector3 GetLookFromPos() - { - if (m_eyes != null && m_eyes.Length != 0) - { - Vector3 zero = Vector3.zero; - Transform[] eyes = m_eyes; - foreach (Transform transform in eyes) - { - zero += transform.position; - } - return zero / m_eyes.Length; - } - return m_head.position; - } - - public void FindJoints() - { - ZLog.Log("Finding joints"); - List<Transform> list = new List<Transform>(); - Transform transform = Utils.FindChild(base.transform, "LeftEye"); - Transform transform2 = Utils.FindChild(base.transform, "RightEye"); - if ((bool)transform) - { - list.Add(transform); - } - if ((bool)transform2) - { - list.Add(transform2); - } - m_eyes = list.ToArray(); - Transform transform3 = Utils.FindChild(base.transform, "LeftFootFront"); - Transform transform4 = Utils.FindChild(base.transform, "RightFootFront"); - Transform transform5 = Utils.FindChild(base.transform, "LeftFoot"); - if (transform5 == null) - { - transform5 = Utils.FindChild(base.transform, "LeftFootBack"); - } - if (transform5 == null) - { - transform5 = Utils.FindChild(base.transform, "l_foot"); - } - if (transform5 == null) - { - transform5 = Utils.FindChild(base.transform, "Foot.l"); - } - if (transform5 == null) - { - transform5 = Utils.FindChild(base.transform, "foot.l"); - } - Transform transform6 = Utils.FindChild(base.transform, "RightFoot"); - if (transform6 == null) - { - transform6 = Utils.FindChild(base.transform, "RightFootBack"); - } - if (transform6 == null) - { - transform6 = Utils.FindChild(base.transform, "r_foot"); - } - if (transform6 == null) - { - transform6 = Utils.FindChild(base.transform, "Foot.r"); - } - if (transform6 == null) - { - transform6 = Utils.FindChild(base.transform, "foot.r"); - } - List<Foot> list2 = new List<Foot>(); - if ((bool)transform3) - { - list2.Add(new Foot(transform3, AvatarIKGoal.LeftHand)); - } - if ((bool)transform4) - { - list2.Add(new Foot(transform4, AvatarIKGoal.RightHand)); - } - if ((bool)transform5) - { - list2.Add(new Foot(transform5, AvatarIKGoal.LeftFoot)); - } - if ((bool)transform6) - { - list2.Add(new Foot(transform6, AvatarIKGoal.RightFoot)); - } - m_feets = list2.ToArray(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/CharacterDrop.cs b/Valheim_v202102/Valheim/assembly_valheim/CharacterDrop.cs deleted file mode 100644 index 89dfc87..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/CharacterDrop.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -[RequireComponent(typeof(Character))] -public class CharacterDrop : MonoBehaviour -{ - [Serializable] - public class Drop - { - public GameObject m_prefab; - - public int m_amountMin = 1; - - public int m_amountMax = 1; - - public float m_chance = 1f; - - public bool m_onePerPlayer; - - public bool m_levelMultiplier = true; - } - - public Vector3 m_spawnOffset = Vector3.zero; - - public List<Drop> m_drops = new List<Drop>(); - - private const float m_dropArea = 0.5f; - - private const float m_vel = 5f; - - private bool m_dropsEnabled = true; - - private Character m_character; - - private void Start() - { - m_character = GetComponent<Character>(); - if ((bool)m_character) - { - Character character = m_character; - character.m_onDeath = (Action)Delegate.Combine(character.m_onDeath, new Action(OnDeath)); - } - } - - public void SetDropsEnabled(bool enabled) - { - m_dropsEnabled = enabled; - } - - private void OnDeath() - { - if (m_dropsEnabled) - { - List<KeyValuePair<GameObject, int>> drops = GenerateDropList(); - Vector3 centerPos = m_character.GetCenterPoint() + base.transform.TransformVector(m_spawnOffset); - DropItems(drops, centerPos, 0.5f); - } - } - - public List<KeyValuePair<GameObject, int>> GenerateDropList() - { - List<KeyValuePair<GameObject, int>> list = new List<KeyValuePair<GameObject, int>>(); - int num = ((!m_character) ? 1 : Mathf.Max(1, (int)Mathf.Pow(2f, m_character.GetLevel() - 1))); - foreach (Drop drop in m_drops) - { - if (drop.m_prefab == null) - { - continue; - } - float num2 = drop.m_chance; - if (drop.m_levelMultiplier) - { - num2 *= (float)num; - } - if (UnityEngine.Random.value <= num2) - { - int num3 = UnityEngine.Random.Range(drop.m_amountMin, drop.m_amountMax); - if (drop.m_levelMultiplier) - { - num3 *= num; - } - if (drop.m_onePerPlayer) - { - num3 = ZNet.instance.GetNrOfPlayers(); - } - if (num3 > 0) - { - list.Add(new KeyValuePair<GameObject, int>(drop.m_prefab, num3)); - } - } - } - return list; - } - - public static void DropItems(List<KeyValuePair<GameObject, int>> drops, Vector3 centerPos, float dropArea) - { - foreach (KeyValuePair<GameObject, int> drop in drops) - { - for (int i = 0; i < drop.Value; i++) - { - Quaternion rotation = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f); - Vector3 vector = UnityEngine.Random.insideUnitSphere * dropArea; - GameObject gameObject = UnityEngine.Object.Instantiate(drop.Key, centerPos + vector, rotation); - Rigidbody component = gameObject.GetComponent<Rigidbody>(); - if ((bool)component) - { - Vector3 insideUnitSphere = UnityEngine.Random.insideUnitSphere; - if (insideUnitSphere.y < 0f) - { - insideUnitSphere.y = 0f - insideUnitSphere.y; - } - component.AddForce(insideUnitSphere * 5f, ForceMode.VelocityChange); - } - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/CharacterTimedDestruction.cs b/Valheim_v202102/Valheim/assembly_valheim/CharacterTimedDestruction.cs deleted file mode 100644 index f4382e2..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/CharacterTimedDestruction.cs +++ /dev/null @@ -1,48 +0,0 @@ -using UnityEngine; - -public class CharacterTimedDestruction : MonoBehaviour -{ - public float m_timeoutMin = 1f; - - public float m_timeoutMax = 1f; - - public bool m_triggerOnAwake; - - private ZNetView m_nview; - - private Character m_character; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_triggerOnAwake) - { - Trigger(); - } - } - - public void Trigger() - { - InvokeRepeating("DestroyNow", Random.Range(m_timeoutMin, m_timeoutMax), 1f); - } - - public void Trigger(float timeout) - { - InvokeRepeating("DestroyNow", timeout, 1f); - } - - private void DestroyNow() - { - if (m_nview.IsValid() && m_nview.IsOwner()) - { - GetComponent<Character>().ApplyDamage(new HitData - { - m_damage = - { - m_damage = 99999f - }, - m_point = base.transform.position - }, showDamageText: false, triggerEffects: true); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Chat.cs b/Valheim_v202102/Valheim/assembly_valheim/Chat.cs deleted file mode 100644 index 4646819..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Chat.cs +++ /dev/null @@ -1,568 +0,0 @@ -using System.Collections.Generic; -using System.Text; -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.UI; - -public class Chat : MonoBehaviour -{ - public class WorldTextInstance - { - public long m_talkerID; - - public GameObject m_go; - - public Vector3 m_position; - - public float m_timer; - - public GameObject m_gui; - - public Text m_textField; - - public string m_name = ""; - - public Talker.Type m_type; - - public string m_text = ""; - } - - public class NpcText - { - public GameObject m_go; - - public Vector3 m_offset = Vector3.zero; - - public float m_cullDistance = 20f; - - public GameObject m_gui; - - public Animator m_animator; - - public Text m_textField; - - public Text m_topicField; - - public float m_ttl; - - public bool m_timeout; - - public void SetVisible(bool visible) - { - m_animator.SetBool("visible", visible); - } - - public bool IsVisible() - { - if (m_animator.GetCurrentAnimatorStateInfo(0).IsTag("visible")) - { - return true; - } - return m_animator.GetBool("visible"); - } - } - - private static Chat m_instance; - - public RectTransform m_chatWindow; - - public Text m_output; - - public InputField m_input; - - public float m_hideDelay = 10f; - - public float m_worldTextTTL = 5f; - - public GameObject m_worldTextBase; - - public GameObject m_npcTextBase; - - public GameObject m_npcTextBaseLarge; - - private List<WorldTextInstance> m_worldTexts = new List<WorldTextInstance>(); - - private List<NpcText> m_npcTexts = new List<NpcText>(); - - private float m_hideTimer = 9999f; - - private bool m_wasFocused; - - private const int m_maxBufferLength = 15; - - private List<string> m_chatBuffer = new List<string>(); - - public static Chat instance => m_instance; - - private void Awake() - { - m_instance = this; - ZRoutedRpc.instance.Register<Vector3, int, string, string>("ChatMessage", RPC_ChatMessage); - AddString(Localization.instance.Localize("/w [text] - $chat_whisper")); - AddString(Localization.instance.Localize("/s [text] - $chat_shout")); - AddString(Localization.instance.Localize("/killme - $chat_kill")); - AddString(Localization.instance.Localize("/resetspawn - $chat_resetspawn")); - AddString(Localization.instance.Localize("/[emote]")); - AddString(Localization.instance.Localize("Emotes: sit,wave,challenge,cheer,nonono,thumbsup,point")); - AddString(""); - m_input.gameObject.SetActive(value: false); - m_worldTextBase.SetActive(value: false); - } - - public bool HasFocus() - { - if (m_chatWindow.gameObject.activeInHierarchy) - { - return m_input.isFocused; - } - return false; - } - - public bool IsChatDialogWindowVisible() - { - return m_chatWindow.gameObject.activeSelf; - } - - private void Update() - { - m_hideTimer += Time.deltaTime; - m_chatWindow.gameObject.SetActive(m_hideTimer < m_hideDelay); - if (!m_wasFocused) - { - if (Input.GetKeyDown(KeyCode.Return) && Player.m_localPlayer != null && !Console.IsVisible() && !TextInput.IsVisible() && !Minimap.InTextInput() && !Menu.IsVisible()) - { - m_hideTimer = 0f; - m_chatWindow.gameObject.SetActive(value: true); - m_input.gameObject.SetActive(value: true); - m_input.ActivateInputField(); - } - } - else if (m_wasFocused) - { - m_hideTimer = 0f; - if (Input.GetKeyDown(KeyCode.Return)) - { - if (!string.IsNullOrEmpty(m_input.text)) - { - InputText(); - m_input.text = ""; - } - EventSystem.current.SetSelectedGameObject(null); - m_input.gameObject.SetActive(value: false); - } - } - m_wasFocused = m_input.isFocused; - } - - private void LateUpdate() - { - UpdateWorldTexts(Time.deltaTime); - UpdateNpcTexts(Time.deltaTime); - } - - private void UpdateChat() - { - StringBuilder stringBuilder = new StringBuilder(); - foreach (string item in m_chatBuffer) - { - stringBuilder.Append(item); - stringBuilder.Append("\n"); - } - m_output.text = stringBuilder.ToString(); - } - - public void OnNewChatMessage(GameObject go, long senderID, Vector3 pos, Talker.Type type, string user, string text) - { - text = text.Replace('<', ' '); - text = text.Replace('>', ' '); - AddString(user, text, type); - AddInworldText(go, senderID, pos, type, user, text); - } - - private void UpdateWorldTexts(float dt) - { - WorldTextInstance worldTextInstance = null; - Camera mainCamera = Utils.GetMainCamera(); - if (mainCamera == null) - { - return; - } - foreach (WorldTextInstance worldText in m_worldTexts) - { - worldText.m_timer += dt; - if (worldText.m_timer > m_worldTextTTL && worldTextInstance == null) - { - worldTextInstance = worldText; - } - worldText.m_position.y += dt * 0.15f; - Vector3 zero = Vector3.zero; - if ((bool)worldText.m_go) - { - Character component = worldText.m_go.GetComponent<Character>(); - zero = ((!component) ? (worldText.m_go.transform.position + Vector3.up * 0.3f) : (component.GetHeadPoint() + Vector3.up * 0.3f)); - } - else - { - zero = worldText.m_position + Vector3.up * 0.3f; - } - Vector3 position = mainCamera.WorldToScreenPoint(zero); - if (position.x < 0f || position.x > (float)Screen.width || position.y < 0f || position.y > (float)Screen.height || position.z < 0f) - { - Vector3 vector = zero - mainCamera.transform.position; - bool flag = Vector3.Dot(mainCamera.transform.right, vector) < 0f; - Vector3 vector2 = vector; - vector2.y = 0f; - float magnitude = vector2.magnitude; - float y = vector.y; - Vector3 forward = mainCamera.transform.forward; - forward.y = 0f; - forward.Normalize(); - forward *= magnitude; - Vector3 vector3 = forward + Vector3.up * y; - position = mainCamera.WorldToScreenPoint(mainCamera.transform.position + vector3); - position.x = ((!flag) ? Screen.width : 0); - } - RectTransform rectTransform = worldText.m_gui.transform as RectTransform; - position.x = Mathf.Clamp(position.x, rectTransform.rect.width / 2f, (float)Screen.width - rectTransform.rect.width / 2f); - position.y = Mathf.Clamp(position.y, rectTransform.rect.height / 2f, (float)Screen.height - rectTransform.rect.height); - position.z = Mathf.Min(position.z, 100f); - worldText.m_gui.transform.position = position; - } - if (worldTextInstance != null) - { - Object.Destroy(worldTextInstance.m_gui); - m_worldTexts.Remove(worldTextInstance); - } - } - - private void AddInworldText(GameObject go, long senderID, Vector3 position, Talker.Type type, string user, string text) - { - WorldTextInstance worldTextInstance = FindExistingWorldText(senderID); - if (worldTextInstance == null) - { - worldTextInstance = new WorldTextInstance(); - worldTextInstance.m_talkerID = senderID; - worldTextInstance.m_gui = Object.Instantiate(m_worldTextBase, base.transform); - worldTextInstance.m_gui.gameObject.SetActive(value: true); - worldTextInstance.m_textField = worldTextInstance.m_gui.transform.Find("Text").GetComponent<Text>(); - m_worldTexts.Add(worldTextInstance); - } - worldTextInstance.m_name = user; - worldTextInstance.m_type = type; - worldTextInstance.m_go = go; - worldTextInstance.m_position = position; - Color color; - switch (type) - { - case Talker.Type.Shout: - color = Color.yellow; - text = text.ToUpper(); - break; - case Talker.Type.Whisper: - color = new Color(1f, 1f, 1f, 0.75f); - text = text.ToLowerInvariant(); - break; - case Talker.Type.Ping: - color = new Color(0.6f, 0.7f, 1f, 1f); - text = "PING"; - break; - default: - color = Color.white; - break; - } - worldTextInstance.m_textField.color = color; - worldTextInstance.m_textField.GetComponent<Outline>().enabled = type != Talker.Type.Whisper; - worldTextInstance.m_timer = 0f; - worldTextInstance.m_text = text; - UpdateWorldTextField(worldTextInstance); - } - - private void UpdateWorldTextField(WorldTextInstance wt) - { - string text = ""; - if (wt.m_type == Talker.Type.Shout || wt.m_type == Talker.Type.Ping) - { - text = wt.m_name + ": "; - } - text += wt.m_text; - wt.m_textField.text = text; - } - - private WorldTextInstance FindExistingWorldText(long senderID) - { - foreach (WorldTextInstance worldText in m_worldTexts) - { - if (worldText.m_talkerID == senderID) - { - return worldText; - } - } - return null; - } - - private void AddString(string user, string text, Talker.Type type) - { - Color white = Color.white; - switch (type) - { - case Talker.Type.Shout: - white = Color.yellow; - text = text.ToUpper(); - break; - case Talker.Type.Whisper: - white = new Color(1f, 1f, 1f, 0.75f); - text = text.ToLowerInvariant(); - break; - default: - white = Color.white; - break; - } - string text2 = "<color=orange>" + user + "</color>: <color=#" + ColorUtility.ToHtmlStringRGBA(white) + ">" + text + "</color>"; - AddString(text2); - } - - private void AddString(string text) - { - m_chatBuffer.Add(text); - while (m_chatBuffer.Count > 15) - { - m_chatBuffer.RemoveAt(0); - } - UpdateChat(); - } - - private void InputText() - { - string text = m_input.text; - if (text == "/resetspawn") - { - Game.instance.GetPlayerProfile()?.ClearCustomSpawnPoint(); - AddString("Reseting spawn point"); - return; - } - if (text == "/killme") - { - HitData hitData = new HitData(); - hitData.m_damage.m_damage = 99999f; - Player.m_localPlayer.Damage(hitData); - SendText(Talker.Type.Normal, "I am off to valhalla"); - return; - } - Talker.Type type = Talker.Type.Normal; - if (text.StartsWith("/s ") || text.StartsWith("/S ")) - { - type = Talker.Type.Shout; - text = text.Substring(3); - } - if (text.StartsWith("/w ") || text.StartsWith("/W ")) - { - type = Talker.Type.Whisper; - text = text.Substring(3); - } - if (text.StartsWith("/wave")) - { - Player.m_localPlayer.StartEmote("wave"); - } - else if (text.StartsWith("/sit")) - { - Player.m_localPlayer.StartEmote("sit", oneshot: false); - } - else if (text.StartsWith("/challenge")) - { - Player.m_localPlayer.StartEmote("challenge"); - } - else if (text.StartsWith("/cheer")) - { - Player.m_localPlayer.StartEmote("cheer"); - } - else if (text.StartsWith("/nonono")) - { - Player.m_localPlayer.StartEmote("nonono"); - } - else if (text.StartsWith("/thumbsup")) - { - Player.m_localPlayer.StartEmote("thumbsup"); - } - else if (text.StartsWith("/point")) - { - Player.m_localPlayer.FaceLookDirection(); - Player.m_localPlayer.StartEmote("point"); - } - else - { - SendText(type, text); - } - } - - private void RPC_ChatMessage(long sender, Vector3 position, int type, string name, string text) - { - OnNewChatMessage(null, sender, position, (Talker.Type)type, name, text); - } - - public void SendText(Talker.Type type, string text) - { - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - if (type == Talker.Type.Shout) - { - ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "ChatMessage", localPlayer.GetHeadPoint(), 2, localPlayer.GetPlayerName(), text); - } - else - { - localPlayer.GetComponent<Talker>().Say(type, text); - } - } - } - - public void SendPing(Vector3 position) - { - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - Vector3 vector = position; - vector.y = localPlayer.transform.position.y; - ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "ChatMessage", vector, 3, localPlayer.GetPlayerName(), ""); - } - } - - public void GetShoutWorldTexts(List<WorldTextInstance> texts) - { - foreach (WorldTextInstance worldText in m_worldTexts) - { - if (worldText.m_type == Talker.Type.Shout) - { - texts.Add(worldText); - } - } - } - - public void GetPingWorldTexts(List<WorldTextInstance> texts) - { - foreach (WorldTextInstance worldText in m_worldTexts) - { - if (worldText.m_type == Talker.Type.Ping) - { - texts.Add(worldText); - } - } - } - - private void UpdateNpcTexts(float dt) - { - NpcText npcText = null; - Camera mainCamera = Utils.GetMainCamera(); - foreach (NpcText npcText2 in m_npcTexts) - { - if (!npcText2.m_go) - { - npcText2.m_gui.SetActive(value: false); - if (npcText == null) - { - npcText = npcText2; - } - continue; - } - if (npcText2.m_timeout) - { - npcText2.m_ttl -= dt; - if (npcText2.m_ttl <= 0f) - { - npcText2.SetVisible(visible: false); - if (!npcText2.IsVisible()) - { - npcText = npcText2; - } - continue; - } - } - Vector3 vector = npcText2.m_go.transform.position + npcText2.m_offset; - Vector3 position = mainCamera.WorldToScreenPoint(vector); - if (position.x < 0f || position.x > (float)Screen.width || position.y < 0f || position.y > (float)Screen.height || position.z < 0f) - { - npcText2.SetVisible(visible: false); - } - else - { - npcText2.SetVisible(visible: true); - RectTransform rectTransform = npcText2.m_gui.transform as RectTransform; - position.x = Mathf.Clamp(position.x, rectTransform.rect.width / 2f, (float)Screen.width - rectTransform.rect.width / 2f); - position.y = Mathf.Clamp(position.y, rectTransform.rect.height / 2f, (float)Screen.height - rectTransform.rect.height); - npcText2.m_gui.transform.position = position; - } - if (Vector3.Distance(mainCamera.transform.position, vector) > npcText2.m_cullDistance) - { - npcText2.SetVisible(visible: false); - if (npcText == null && !npcText2.IsVisible()) - { - npcText = npcText2; - } - } - } - if (npcText != null) - { - ClearNpcText(npcText); - } - } - - public void SetNpcText(GameObject talker, Vector3 offset, float cullDistance, float ttl, string topic, string text, bool large) - { - NpcText npcText = FindNpcText(talker); - if (npcText != null) - { - ClearNpcText(npcText); - } - npcText = new NpcText(); - npcText.m_go = talker; - npcText.m_gui = Object.Instantiate(large ? m_npcTextBaseLarge : m_npcTextBase, base.transform); - npcText.m_gui.SetActive(value: true); - npcText.m_animator = npcText.m_gui.GetComponent<Animator>(); - npcText.m_topicField = npcText.m_gui.transform.Find("Topic").GetComponent<Text>(); - npcText.m_textField = npcText.m_gui.transform.Find("Text").GetComponent<Text>(); - npcText.m_ttl = ttl; - npcText.m_timeout = ttl > 0f; - npcText.m_offset = offset; - npcText.m_cullDistance = cullDistance; - if (topic.Length > 0) - { - npcText.m_textField.text = "<color=orange>" + Localization.instance.Localize(topic) + "</color>\n" + Localization.instance.Localize(text); - } - else - { - npcText.m_textField.text = Localization.instance.Localize(text); - } - m_npcTexts.Add(npcText); - } - - public bool IsDialogVisible(GameObject talker) - { - return FindNpcText(talker)?.IsVisible() ?? false; - } - - public void ClearNpcText(GameObject talker) - { - NpcText npcText = FindNpcText(talker); - if (npcText != null) - { - ClearNpcText(npcText); - } - } - - private void ClearNpcText(NpcText npcText) - { - Object.Destroy(npcText.m_gui); - m_npcTexts.Remove(npcText); - } - - private NpcText FindNpcText(GameObject go) - { - foreach (NpcText npcText in m_npcTexts) - { - if (npcText.m_go == go) - { - return npcText; - } - } - return null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/CircleProjector.cs b/Valheim_v202102/Valheim/assembly_valheim/CircleProjector.cs deleted file mode 100644 index a60fab6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/CircleProjector.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class CircleProjector : MonoBehaviour -{ - public float m_radius = 5f; - - public int m_nrOfSegments = 20; - - public GameObject m_prefab; - - public LayerMask m_mask; - - private List<GameObject> m_segments = new List<GameObject>(); - - private void Start() - { - CreateSegments(); - } - - private void Update() - { - CreateSegments(); - float num = (float)Math.PI * 2f / (float)m_segments.Count; - for (int i = 0; i < m_segments.Count; i++) - { - float f = (float)i * num + Time.time * 0.1f; - Vector3 vector = base.transform.position + new Vector3(Mathf.Sin(f) * m_radius, 0f, Mathf.Cos(f) * m_radius); - GameObject obj = m_segments[i]; - if (Physics.Raycast(vector + Vector3.up * 500f, Vector3.down, out var hitInfo, 1000f, m_mask.value)) - { - vector.y = hitInfo.point.y; - } - obj.transform.position = vector; - } - for (int j = 0; j < m_segments.Count; j++) - { - GameObject obj2 = m_segments[j]; - GameObject gameObject = ((j == 0) ? m_segments[m_segments.Count - 1] : m_segments[j - 1]); - Vector3 normalized = (((j == m_segments.Count - 1) ? m_segments[0] : m_segments[j + 1]).transform.position - gameObject.transform.position).normalized; - obj2.transform.rotation = Quaternion.LookRotation(normalized, Vector3.up); - } - } - - private void CreateSegments() - { - if (m_segments.Count == m_nrOfSegments) - { - return; - } - foreach (GameObject segment in m_segments) - { - UnityEngine.Object.Destroy(segment); - } - m_segments.Clear(); - for (int i = 0; i < m_nrOfSegments; i++) - { - GameObject item = UnityEngine.Object.Instantiate(m_prefab, base.transform.position, Quaternion.identity, base.transform); - m_segments.Add(item); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ClutterSystem.cs b/Valheim_v202102/Valheim/assembly_valheim/ClutterSystem.cs deleted file mode 100644 index b08e638..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ClutterSystem.cs +++ /dev/null @@ -1,472 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; - -public class ClutterSystem : MonoBehaviour -{ - [Serializable] - public class Clutter - { - public string m_name = ""; - - public bool m_enabled = true; - - [BitMask(typeof(Heightmap.Biome))] - public Heightmap.Biome m_biome; - - public bool m_instanced; - - public GameObject m_prefab; - - public int m_amount = 80; - - public bool m_onUncleared = true; - - public bool m_onCleared; - - public float m_scaleMin = 1f; - - public float m_scaleMax = 1f; - - public float m_maxTilt = 18f; - - public float m_maxAlt = 1000f; - - public float m_minAlt = 27f; - - public bool m_snapToWater; - - public bool m_terrainTilt; - - public float m_randomOffset; - - [Header("Ocean depth ")] - public float m_minOceanDepth; - - public float m_maxOceanDepth; - - [Header("Forest fractal 0-1 inside forest")] - public bool m_inForest; - - public float m_forestTresholdMin; - - public float m_forestTresholdMax = 1f; - - [Header("Fractal placement (m_fractalScale > 0 == enabled) ")] - public float m_fractalScale; - - public float m_fractalOffset; - - public float m_fractalTresholdMin = 0.5f; - - public float m_fractalTresholdMax = 1f; - } - - private class PatchData - { - public Vector3 center; - - public List<GameObject> m_objects = new List<GameObject>(); - - public float m_timer; - - public bool m_reset; - } - - public enum Quality - { - Off, - Med, - High - } - - private static ClutterSystem m_instance; - - private int m_placeRayMask; - - public List<Clutter> m_clutter = new List<Clutter>(); - - public float m_grassPatchSize = 8f; - - public float m_distance = 40f; - - public float m_waterLevel = 27f; - - public float m_playerPushFade = 0.05f; - - public float m_amountScale = 1f; - - public bool m_menuHack; - - private Dictionary<Vector2Int, PatchData> m_patches = new Dictionary<Vector2Int, PatchData>(); - - private Stack<PatchData> m_freePatches = new Stack<PatchData>(); - - private GameObject m_grassRoot; - - private Vector3 m_oldPlayerPos = Vector3.zero; - - private List<Vector2Int> m_tempToRemove = new List<Vector2Int>(); - - private List<KeyValuePair<Vector2Int, PatchData>> m_tempToRemovePair = new List<KeyValuePair<Vector2Int, PatchData>>(); - - private Quality m_quality = Quality.High; - - private bool m_forceRebuild; - - public static ClutterSystem instance => m_instance; - - private void Awake() - { - m_instance = this; - if (SystemInfo.graphicsDeviceType != GraphicsDeviceType.Null) - { - ApplySettings(); - m_placeRayMask = LayerMask.GetMask("terrain"); - m_grassRoot = new GameObject("grassroot"); - m_grassRoot.transform.SetParent(base.transform); - } - } - - public void ApplySettings() - { - Quality @int = (Quality)PlayerPrefs.GetInt("ClutterQuality", 2); - if (m_quality != @int) - { - m_quality = @int; - ClearAll(); - } - } - - private void LateUpdate() - { - Camera mainCamera = Utils.GetMainCamera(); - if (mainCamera == null) - { - return; - } - Vector3 center = ((!GameCamera.InFreeFly() && (bool)Player.m_localPlayer) ? Player.m_localPlayer.transform.position : mainCamera.transform.position); - if (m_forceRebuild) - { - if (IsHeightmapReady()) - { - m_forceRebuild = false; - UpdateGrass(Time.deltaTime, rebuildAll: true, center); - } - } - else if (IsHeightmapReady()) - { - UpdateGrass(Time.deltaTime, rebuildAll: false, center); - } - Player localPlayer = Player.m_localPlayer; - if (localPlayer != null) - { - m_oldPlayerPos = Vector3.Lerp(m_oldPlayerPos, localPlayer.transform.position, m_playerPushFade); - Shader.SetGlobalVector("_PlayerPosition", localPlayer.transform.position); - Shader.SetGlobalVector("_PlayerOldPosition", m_oldPlayerPos); - } - else - { - Shader.SetGlobalVector("_PlayerPosition", new Vector3(999999f, 999999f, 999999f)); - Shader.SetGlobalVector("_PlayerOldPosition", new Vector3(999999f, 999999f, 999999f)); - } - } - - public Vector2Int GetVegPatch(Vector3 point) - { - int x = Mathf.FloorToInt((point.x + m_grassPatchSize / 2f) / m_grassPatchSize); - int y = Mathf.FloorToInt((point.z + m_grassPatchSize / 2f) / m_grassPatchSize); - return new Vector2Int(x, y); - } - - public Vector3 GetVegPatchCenter(Vector2Int p) - { - return new Vector3((float)p.x * m_grassPatchSize, 0f, (float)p.y * m_grassPatchSize); - } - - private bool IsHeightmapReady() - { - Camera mainCamera = Utils.GetMainCamera(); - if (!mainCamera) - { - return false; - } - if (Heightmap.HaveQueuedRebuild(mainCamera.transform.position, m_distance)) - { - return false; - } - return true; - } - - private void UpdateGrass(float dt, bool rebuildAll, Vector3 center) - { - if (m_quality != 0) - { - GeneratePatches(rebuildAll, center); - TimeoutPatches(dt); - } - } - - private void GeneratePatches(bool rebuildAll, Vector3 center) - { - bool generated = false; - Vector2Int vegPatch = GetVegPatch(center); - GeneratePatch(center, vegPatch, ref generated, rebuildAll); - int num = Mathf.CeilToInt((m_distance - m_grassPatchSize / 2f) / m_grassPatchSize); - for (int i = 1; i <= num; i++) - { - for (int j = vegPatch.x - i; j <= vegPatch.x + i; j++) - { - GeneratePatch(center, new Vector2Int(j, vegPatch.y - i), ref generated, rebuildAll); - GeneratePatch(center, new Vector2Int(j, vegPatch.y + i), ref generated, rebuildAll); - } - for (int k = vegPatch.y - i + 1; k <= vegPatch.y + i - 1; k++) - { - GeneratePatch(center, new Vector2Int(vegPatch.x - i, k), ref generated, rebuildAll); - GeneratePatch(center, new Vector2Int(vegPatch.x + i, k), ref generated, rebuildAll); - } - } - } - - private void GeneratePatch(Vector3 camPos, Vector2Int p, ref bool generated, bool rebuildAll) - { - if (Utils.DistanceXZ(GetVegPatchCenter(p), camPos) > m_distance) - { - return; - } - if (m_patches.TryGetValue(p, out var value) && !value.m_reset) - { - value.m_timer = 0f; - } - else - { - if (!rebuildAll && generated && !m_menuHack) - { - return; - } - PatchData patchData = GenerateVegPatch(p, m_grassPatchSize); - if (patchData == null) - { - return; - } - if (m_patches.TryGetValue(p, out var value2)) - { - foreach (GameObject @object in value2.m_objects) - { - UnityEngine.Object.Destroy(@object); - } - FreePatch(value2); - m_patches.Remove(p); - } - m_patches.Add(p, patchData); - generated = true; - } - } - - private void TimeoutPatches(float dt) - { - m_tempToRemovePair.Clear(); - foreach (KeyValuePair<Vector2Int, PatchData> patch in m_patches) - { - patch.Value.m_timer += dt; - if (patch.Value.m_timer >= 2f) - { - m_tempToRemovePair.Add(patch); - } - } - foreach (KeyValuePair<Vector2Int, PatchData> item in m_tempToRemovePair) - { - foreach (GameObject @object in item.Value.m_objects) - { - UnityEngine.Object.Destroy(@object); - } - m_patches.Remove(item.Key); - FreePatch(item.Value); - } - } - - private void ClearAll() - { - foreach (KeyValuePair<Vector2Int, PatchData> patch in m_patches) - { - foreach (GameObject @object in patch.Value.m_objects) - { - UnityEngine.Object.Destroy(@object); - } - FreePatch(patch.Value); - } - m_patches.Clear(); - m_forceRebuild = true; - } - - public void ResetGrass(Vector3 center, float radius) - { - float num = m_grassPatchSize / 2f; - foreach (KeyValuePair<Vector2Int, PatchData> patch in m_patches) - { - Vector3 center2 = patch.Value.center; - if (!(center2.x + num < center.x - radius) && !(center2.x - num > center.x + radius) && !(center2.z + num < center.z - radius) && !(center2.z - num > center.z + radius)) - { - patch.Value.m_reset = true; - m_forceRebuild = true; - } - } - } - - public bool GetGroundInfo(Vector3 p, out Vector3 point, out Vector3 normal, out Heightmap hmap, out Heightmap.Biome biome) - { - if (Physics.Raycast(p + Vector3.up * 500f, Vector3.down, out var hitInfo, 1000f, m_placeRayMask)) - { - point = hitInfo.point; - normal = hitInfo.normal; - hmap = hitInfo.collider.GetComponent<Heightmap>(); - biome = hmap.GetBiome(point); - return true; - } - point = p; - normal = Vector3.up; - hmap = null; - biome = Heightmap.Biome.Meadows; - return false; - } - - private Heightmap.Biome GetPatchBiomes(Vector3 center, float halfSize) - { - Heightmap.Biome biome = Heightmap.FindBiomeClutter(new Vector3(center.x - halfSize, 0f, center.z - halfSize)); - Heightmap.Biome biome2 = Heightmap.FindBiomeClutter(new Vector3(center.x + halfSize, 0f, center.z - halfSize)); - Heightmap.Biome biome3 = Heightmap.FindBiomeClutter(new Vector3(center.x - halfSize, 0f, center.z + halfSize)); - Heightmap.Biome biome4 = Heightmap.FindBiomeClutter(new Vector3(center.x + halfSize, 0f, center.z + halfSize)); - if (biome == Heightmap.Biome.None || biome2 == Heightmap.Biome.None || biome3 == Heightmap.Biome.None || biome4 == Heightmap.Biome.None) - { - return Heightmap.Biome.None; - } - return biome | biome2 | biome3 | biome4; - } - - private PatchData GenerateVegPatch(Vector2Int patchID, float size) - { - Vector3 vegPatchCenter = GetVegPatchCenter(patchID); - float num = size / 2f; - Heightmap.Biome patchBiomes = GetPatchBiomes(vegPatchCenter, num); - if (patchBiomes == Heightmap.Biome.None) - { - return null; - } - _ = Time.realtimeSinceStartup; - UnityEngine.Random.State state = UnityEngine.Random.state; - PatchData patchData = AllocatePatch(); - patchData.center = vegPatchCenter; - for (int i = 0; i < m_clutter.Count; i++) - { - Clutter clutter = m_clutter[i]; - if (!clutter.m_enabled || (patchBiomes & clutter.m_biome) == 0) - { - continue; - } - InstanceRenderer instanceRenderer = null; - UnityEngine.Random.InitState(patchID.x * (patchID.y * 1374) + i * 9321); - Vector3 vector = new Vector3(clutter.m_fractalOffset, 0f, 0f); - float num2 = Mathf.Cos((float)Math.PI / 180f * clutter.m_maxTilt); - int num3 = ((m_quality == Quality.High) ? clutter.m_amount : (clutter.m_amount / 2)); - num3 = (int)((float)num3 * m_amountScale); - for (int j = 0; j < num3; j++) - { - Vector3 vector2 = new Vector3(UnityEngine.Random.Range(vegPatchCenter.x - num, vegPatchCenter.x + num), 0f, UnityEngine.Random.Range(vegPatchCenter.z - num, vegPatchCenter.z + num)); - float num4 = UnityEngine.Random.Range(0, 360); - if (clutter.m_inForest) - { - float forestFactor = WorldGenerator.GetForestFactor(vector2); - if (forestFactor < clutter.m_forestTresholdMin || forestFactor > clutter.m_forestTresholdMax) - { - continue; - } - } - if (clutter.m_fractalScale > 0f) - { - float num5 = Utils.Fbm(vector2 * 0.01f * clutter.m_fractalScale + vector, 3, 1.6f, 0.7f); - if (num5 < clutter.m_fractalTresholdMin || num5 > clutter.m_fractalTresholdMax) - { - continue; - } - } - if (!GetGroundInfo(vector2, out var point, out var normal, out var hmap, out var biome) || (clutter.m_biome & biome) == 0) - { - continue; - } - float num6 = point.y - m_waterLevel; - if (num6 < clutter.m_minAlt || num6 > clutter.m_maxAlt || normal.y < num2) - { - continue; - } - if (clutter.m_minOceanDepth != clutter.m_maxOceanDepth) - { - float oceanDepth = hmap.GetOceanDepth(vector2); - if (oceanDepth < clutter.m_minOceanDepth || oceanDepth > clutter.m_maxOceanDepth) - { - continue; - } - } - if (!clutter.m_onCleared || !clutter.m_onUncleared) - { - bool flag = hmap.IsCleared(point); - if ((clutter.m_onCleared && !flag) || (clutter.m_onUncleared && flag)) - { - continue; - } - } - vector2 = point; - if (clutter.m_snapToWater) - { - vector2.y = m_waterLevel; - } - if (clutter.m_randomOffset != 0f) - { - vector2.y += UnityEngine.Random.Range(0f - clutter.m_randomOffset, clutter.m_randomOffset); - } - Quaternion identity = Quaternion.identity; - identity = ((!clutter.m_terrainTilt) ? Quaternion.Euler(0f, num4, 0f) : Quaternion.AngleAxis(num4, normal)); - if (clutter.m_instanced) - { - if (instanceRenderer == null) - { - GameObject gameObject = UnityEngine.Object.Instantiate(clutter.m_prefab, vegPatchCenter, Quaternion.identity, m_grassRoot.transform); - instanceRenderer = gameObject.GetComponent<InstanceRenderer>(); - if (instanceRenderer.m_lodMaxDistance > m_distance - m_grassPatchSize / 2f) - { - instanceRenderer.m_lodMaxDistance = m_distance - m_grassPatchSize / 2f; - } - patchData.m_objects.Add(gameObject); - } - float scale = UnityEngine.Random.Range(clutter.m_scaleMin, clutter.m_scaleMax); - instanceRenderer.AddInstance(vector2, identity, scale); - } - else - { - GameObject item = UnityEngine.Object.Instantiate(clutter.m_prefab, vector2, identity, m_grassRoot.transform); - patchData.m_objects.Add(item); - } - } - } - UnityEngine.Random.state = state; - return patchData; - } - - private PatchData AllocatePatch() - { - if (m_freePatches.Count > 0) - { - return m_freePatches.Pop(); - } - return new PatchData(); - } - - private void FreePatch(PatchData patch) - { - patch.center = Vector3.zero; - patch.m_objects.Clear(); - patch.m_timer = 0f; - patch.m_reset = false; - m_freePatches.Push(patch); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ConnectPanel.cs b/Valheim_v202102/Valheim/assembly_valheim/ConnectPanel.cs deleted file mode 100644 index cd973c6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ConnectPanel.cs +++ /dev/null @@ -1,215 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class ConnectPanel : MonoBehaviour -{ - private static ConnectPanel m_instance; - - public Transform m_root; - - public Text m_serverField; - - public Text m_worldField; - - public Text m_statusField; - - public Text m_connections; - - public RectTransform m_playerList; - - public Scrollbar m_playerListScroll; - - public GameObject m_playerElement; - - public InputField m_hostName; - - public InputField m_hostPort; - - public Button m_connectButton; - - public Text m_myPort; - - public Text m_myUID; - - public Text m_knownHosts; - - public Text m_nrOfConnections; - - public Text m_pendingConnections; - - public Toggle m_autoConnect; - - public Text m_zdos; - - public Text m_zdosPool; - - public Text m_zdosSent; - - public Text m_zdosRecv; - - public Text m_zdosInstances; - - public Text m_activePeers; - - public Text m_ntp; - - public Text m_upnp; - - public Text m_dataSent; - - public Text m_dataRecv; - - public Text m_clientSendQueue; - - public Text m_fps; - - public Text m_frameTime; - - private float m_playerListBaseSize; - - private List<GameObject> m_playerListElements = new List<GameObject>(); - - private int m_frameSamples; - - private float m_frameTimer; - - public static ConnectPanel instance => m_instance; - - private void Start() - { - m_instance = this; - m_root.gameObject.SetActive(value: false); - m_playerListBaseSize = m_playerList.rect.height; - } - - public static bool IsVisible() - { - if ((bool)m_instance) - { - return m_instance.m_root.gameObject.activeSelf; - } - return false; - } - - private void Update() - { - if (Input.GetKeyDown(KeyCode.F2)) - { - m_root.gameObject.SetActive(!m_root.gameObject.activeSelf); - } - if (!m_root.gameObject.activeInHierarchy) - { - return; - } - if (!ZNet.instance.IsServer() && ZNet.GetConnectionStatus() == ZNet.ConnectionStatus.Connected) - { - m_serverField.gameObject.SetActive(value: true); - m_serverField.text = ZNet.GetServerString(); - } - else - { - m_serverField.gameObject.SetActive(value: false); - } - m_worldField.text = ZNet.instance.GetWorldName(); - UpdateFps(); - m_myPort.gameObject.SetActive(ZNet.instance.IsServer()); - m_myPort.text = ZNet.instance.GetHostPort().ToString(); - m_myUID.text = ZNet.instance.GetUID().ToString(); - if (ZDOMan.instance != null) - { - m_zdos.text = ZDOMan.instance.NrOfObjects().ToString(); - ZDOMan.instance.GetAverageStats(out var sentZdos, out var recvZdos); - m_zdosSent.text = sentZdos.ToString("0.0"); - m_zdosRecv.text = recvZdos.ToString("0.0"); - m_activePeers.text = ZNet.instance.GetNrOfPlayers().ToString(); - } - m_zdosPool.text = ZDOPool.GetPoolActive() + " / " + ZDOPool.GetPoolSize() + " / " + ZDOPool.GetPoolTotal(); - if ((bool)ZNetScene.instance) - { - m_zdosInstances.text = ZNetScene.instance.NrOfInstances().ToString(); - } - if (ZNtp.instance != null) - { - m_ntp.text = (ZNtp.instance.GetStatus() ? "OK" : "fail"); - } - if (ZNet.instance != null && ZNet.instance.GetZNat() != null) - { - m_upnp.text = (ZNet.instance.GetZNat().GetStatus() ? "OK" : "fail"); - } - ZNet.instance.GetNetStats(out var totalSent, out var totalRecv); - m_dataSent.text = totalSent / 1024 + "kb/s"; - m_dataRecv.text = totalRecv / 1024 + "kb/s"; - m_clientSendQueue.text = ZDOMan.instance.GetClientChangeQueue().ToString(); - m_nrOfConnections.text = ZNet.instance.GetPeerConnections().ToString(); - string text = ""; - foreach (ZNetPeer connectedPeer in ZNet.instance.GetConnectedPeers()) - { - text = ((!connectedPeer.IsReady()) ? (text + connectedPeer.m_socket.GetEndPointString() + " connecting \n") : (text + connectedPeer.m_socket.GetEndPointString() + " UID: " + connectedPeer.m_uid + "\n")); - } - m_connections.text = text; - List<ZNet.PlayerInfo> playerList = ZNet.instance.GetPlayerList(); - float num = 16f; - if (playerList.Count != m_playerListElements.Count) - { - foreach (GameObject playerListElement in m_playerListElements) - { - Object.Destroy(playerListElement); - } - m_playerListElements.Clear(); - for (int i = 0; i < playerList.Count; i++) - { - GameObject gameObject = Object.Instantiate(m_playerElement, m_playerList); - (gameObject.transform as RectTransform).anchoredPosition = new Vector2(0f, (float)i * (0f - num)); - m_playerListElements.Add(gameObject); - } - float b = (float)playerList.Count * num; - b = Mathf.Max(m_playerListBaseSize, b); - m_playerList.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, b); - m_playerListScroll.value = 1f; - } - for (int j = 0; j < playerList.Count; j++) - { - ZNet.PlayerInfo playerInfo = playerList[j]; - Text component = m_playerListElements[j].transform.Find("name").GetComponent<Text>(); - Text component2 = m_playerListElements[j].transform.Find("hostname").GetComponent<Text>(); - Button component3 = m_playerListElements[j].transform.Find("KickButton").GetComponent<Button>(); - component.text = playerInfo.m_name; - component2.text = playerInfo.m_host; - component3.gameObject.SetActive(value: false); - } - m_connectButton.interactable = ValidHost(); - } - - private void UpdateFps() - { - m_frameTimer += Time.deltaTime; - m_frameSamples++; - if (m_frameTimer > 1f) - { - float num = m_frameTimer / (float)m_frameSamples; - m_fps.text = (1f / num).ToString("0.0"); - m_frameTime.text = "( " + (num * 1000f).ToString("00.0") + "ms )"; - m_frameSamples = 0; - m_frameTimer = 0f; - } - } - - private bool ValidHost() - { - int num = 0; - try - { - num = int.Parse(m_hostPort.text); - } - catch - { - return false; - } - if (string.IsNullOrEmpty(m_hostName.text) || num == 0) - { - return false; - } - return true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Console.cs b/Valheim_v202102/Valheim/assembly_valheim/Console.cs deleted file mode 100644 index f2310db..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Console.cs +++ /dev/null @@ -1,654 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Text; -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.UI; - -public class Console : MonoBehaviour -{ - private static Console m_instance; - - public RectTransform m_chatWindow; - - public Text m_output; - - public InputField m_input; - - private const int m_maxBufferLength = 30; - - private List<string> m_chatBuffer = new List<string>(); - - private bool m_cheat; - - private string m_lastEntry = ""; - - public static Console instance => m_instance; - - private void Awake() - { - m_instance = this; - AddString("Valheim " + Version.GetVersionString()); - AddString(""); - AddString("type \"help\" - for commands"); - AddString(""); - m_chatWindow.gameObject.SetActive(value: false); - } - - private void Update() - { - if ((bool)ZNet.instance && ZNet.instance.InPasswordDialog()) - { - m_chatWindow.gameObject.SetActive(value: false); - return; - } - if (Input.GetKeyDown(KeyCode.F5) || (IsVisible() && Input.GetKeyDown(KeyCode.Escape))) - { - m_chatWindow.gameObject.SetActive(!m_chatWindow.gameObject.activeSelf); - } - if (!m_chatWindow.gameObject.activeInHierarchy) - { - return; - } - if (Input.GetKeyDown(KeyCode.UpArrow)) - { - m_input.text = m_lastEntry; - m_input.caretPosition = m_input.text.Length; - } - if (Input.GetKeyDown(KeyCode.DownArrow)) - { - m_input.text = ""; - } - m_input.gameObject.SetActive(value: true); - m_input.ActivateInputField(); - if (Input.GetKeyDown(KeyCode.Return)) - { - if (!string.IsNullOrEmpty(m_input.text)) - { - InputText(); - m_lastEntry = m_input.text; - m_input.text = ""; - } - EventSystem.current.SetSelectedGameObject(null); - m_input.gameObject.SetActive(value: false); - } - } - - public static bool IsVisible() - { - if ((bool)m_instance) - { - return m_instance.m_chatWindow.gameObject.activeInHierarchy; - } - return false; - } - - public void Print(string text) - { - AddString(text); - } - - private void AddString(string text) - { - m_chatBuffer.Add(text); - while (m_chatBuffer.Count > 30) - { - m_chatBuffer.RemoveAt(0); - } - UpdateChat(); - } - - private void UpdateChat() - { - StringBuilder stringBuilder = new StringBuilder(); - foreach (string item in m_chatBuffer) - { - stringBuilder.Append(item); - stringBuilder.Append("\n"); - } - m_output.text = stringBuilder.ToString(); - } - - private void InputText() - { - string text = m_input.text; - AddString(text); - string[] array = text.Split(' '); - if (text.StartsWith("help")) - { - AddString("kick [name/ip/userID] - kick user"); - AddString("ban [name/ip/userID] - ban user"); - AddString("unban [ip/userID] - unban user"); - AddString("banned - list banned users"); - AddString("ping - ping server"); - AddString("lodbias - set distance lod bias"); - AddString("info - print system info"); - if (IsCheatsEnabled()) - { - AddString("genloc - regenerate all locations."); - AddString("debugmode - fly mode"); - AddString("spawn [amount] [level] - spawn something"); - AddString("pos - print current player position"); - AddString("goto [x,z]- teleport"); - AddString("exploremap - explore entire map"); - AddString("resetmap - reset map exploration"); - AddString("killall - kill nearby enemies"); - AddString("tame - tame all nearby tameable creatures"); - AddString("hair"); - AddString("beard"); - AddString("location - spawn location"); - AddString("raiseskill [skill] [amount]"); - AddString("resetskill [skill]"); - AddString("freefly - freefly photo mode"); - AddString("ffsmooth - freefly smoothness"); - AddString("tod -1 OR [0-1]"); - AddString("env [env]"); - AddString("resetenv"); - AddString("wind [angle] [intensity]"); - AddString("resetwind"); - AddString("god"); - AddString("event [name] - start event"); - AddString("stopevent - stop current event"); - AddString("randomevent"); - AddString("save - force saving of world"); - AddString("resetcharacter - reset character data"); - AddString("removedrops - remove all item-drops in area"); - AddString("setkey [name]"); - AddString("resetkeys [name]"); - AddString("listkeys"); - AddString("players [nr] - force diffuculty scale ( 0 = reset)"); - AddString("dpsdebug - toggle dps debug print"); - } - } - if (text.StartsWith("imacheater")) - { - m_cheat = !m_cheat; - AddString("Cheats: " + m_cheat); - GoogleAnalyticsV4.instance.LogEvent("Cheat", "CheatsEnabled", m_cheat.ToString(), 0L); - return; - } - if (array[0] == "hidebetatext" && (bool)Hud.instance) - { - Hud.instance.ToggleBetaTextVisible(); - } - if (array[0] == "ping") - { - if ((bool)Game.instance) - { - Game.instance.Ping(); - } - return; - } - if (array[0] == "dpsdebug") - { - Character.SetDPSDebug(!Character.IsDPSDebugEnabled()); - AddString("DPS debug " + Character.IsDPSDebugEnabled()); - } - if (array[0] == "lodbias") - { - float result; - if (array.Length == 1) - { - Print("Lod bias:" + QualitySettings.lodBias); - } - else if (float.TryParse(array[1], NumberStyles.Float, CultureInfo.InvariantCulture, out result)) - { - Print("Setting lod bias:" + result); - QualitySettings.lodBias = result; - } - return; - } - if (array[0] == "info") - { - Print("Render threading mode:" + SystemInfo.renderingThreadingMode); - long totalMemory = GC.GetTotalMemory(forceFullCollection: false); - Print("Total allocated mem: " + (totalMemory / 1048576).ToString("0") + "mb"); - } - if (array[0] == "gc") - { - long totalMemory2 = GC.GetTotalMemory(forceFullCollection: false); - GC.Collect(); - long totalMemory3 = GC.GetTotalMemory(forceFullCollection: true); - long num = totalMemory3 - totalMemory2; - Print("GC collect, Delta: " + (num / 1048576).ToString("0") + "mb Total left:" + (totalMemory3 / 1048576).ToString("0") + "mb"); - } - if (array[0] == "fov") - { - Camera mainCamera = Utils.GetMainCamera(); - if ((bool)mainCamera) - { - float result2; - if (array.Length == 1) - { - Print("Fov:" + mainCamera.fieldOfView); - } - else if (float.TryParse(array[1], NumberStyles.Float, CultureInfo.InvariantCulture, out result2) && result2 > 5f) - { - Print("Setting fov to " + result2); - Camera[] componentsInChildren = mainCamera.GetComponentsInChildren<Camera>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - componentsInChildren[i].fieldOfView = result2; - } - } - } - } - if ((bool)ZNet.instance) - { - if (text.StartsWith("kick ")) - { - string user = text.Substring(5); - ZNet.instance.Kick(user); - return; - } - if (text.StartsWith("ban ")) - { - string user2 = text.Substring(4); - ZNet.instance.Ban(user2); - return; - } - if (text.StartsWith("unban ")) - { - string user3 = text.Substring(6); - ZNet.instance.Unban(user3); - return; - } - if (text.StartsWith("banned")) - { - ZNet.instance.PrintBanned(); - return; - } - } - if (!ZNet.instance || !ZNet.instance.IsServer() || !Player.m_localPlayer) - { - return; - } - if (array[0] == "save") - { - if ((bool)ZNet.instance) - { - ZNet.instance.Save(); - } - } - else - { - if (!IsCheatsEnabled()) - { - return; - } - if (array[0] == "genloc") - { - ZoneSystem.instance.GenerateLocations(); - return; - } - if (array[0] == "players" && array.Length >= 2) - { - if (int.TryParse(array[1], out var result3)) - { - Game.instance.SetForcePlayerDifficulty(result3); - Print("Setting players to " + result3); - } - return; - } - if (array[0] == "setkey") - { - if (array.Length >= 2) - { - ZoneSystem.instance.SetGlobalKey(array[1]); - Print("Setting global key " + array[1]); - } - else - { - Print("Syntax: setkey [key]"); - } - } - if (array[0] == "resetkeys") - { - ZoneSystem.instance.ResetGlobalKeys(); - Print("Global keys cleared"); - } - if (array[0] == "listkeys") - { - List<string> globalKeys = ZoneSystem.instance.GetGlobalKeys(); - Print("Keys " + globalKeys.Count); - foreach (string item in globalKeys) - { - Print(item); - } - } - if (array[0] == "debugmode") - { - Player.m_debugMode = !Player.m_debugMode; - Print("Debugmode " + Player.m_debugMode); - } - if (array[0] == "raiseskill") - { - if (array.Length > 2) - { - string text2 = array[1]; - int num2 = int.Parse(array[2]); - Player.m_localPlayer.GetSkills().CheatRaiseSkill(text2, num2); - } - else - { - Print("Syntax: raiseskill [skill] [amount]"); - } - return; - } - if (array[0] == "resetskill") - { - if (array.Length > 1) - { - string text3 = array[1]; - Player.m_localPlayer.GetSkills().CheatResetSkill(text3); - } - else - { - Print("Syntax: resetskill [skill]"); - } - return; - } - if (text == "sleep") - { - EnvMan.instance.SkipToMorning(); - return; - } - if (array[0] == "skiptime") - { - double timeSeconds = ZNet.instance.GetTimeSeconds(); - float num3 = 240f; - if (array.Length > 1) - { - num3 = float.Parse(array[1]); - } - timeSeconds += (double)num3; - ZNet.instance.SetNetTime(timeSeconds); - Print("Skipping " + num3.ToString("0") + "s , Day:" + EnvMan.instance.GetDay(timeSeconds)); - return; - } - if (text == "resetcharacter") - { - AddString("Reseting character"); - Player.m_localPlayer.ResetCharacter(); - return; - } - if (array[0] == "randomevent") - { - RandEventSystem.instance.StartRandomEvent(); - } - if (text.StartsWith("event ")) - { - if (array.Length > 1) - { - string text4 = text.Substring(6); - if (!RandEventSystem.instance.HaveEvent(text4)) - { - Print("Random event not found:" + text4); - } - else - { - RandEventSystem.instance.SetRandomEventByName(text4, Player.m_localPlayer.transform.position); - } - } - return; - } - if (array[0] == "stopevent") - { - RandEventSystem.instance.ResetRandomEvent(); - return; - } - if (text.StartsWith("removedrops")) - { - AddString("Removing item drops"); - ItemDrop[] array2 = UnityEngine.Object.FindObjectsOfType<ItemDrop>(); - for (int i = 0; i < array2.Length; i++) - { - ZNetView component = array2[i].GetComponent<ZNetView>(); - if ((bool)component) - { - component.Destroy(); - } - } - } - if (text.StartsWith("freefly")) - { - Print("Toggling free fly camera"); - GameCamera.instance.ToggleFreeFly(); - return; - } - if (array[0] == "ffsmooth") - { - if (array.Length <= 1) - { - Print(GameCamera.instance.GetFreeFlySmoothness().ToString()); - return; - } - if (!float.TryParse(array[1], NumberStyles.Float, CultureInfo.InvariantCulture, out var result4)) - { - Print("syntax error"); - return; - } - Print("Setting free fly camera smoothing:" + result4); - GameCamera.instance.SetFreeFlySmoothness(result4); - return; - } - if (text.StartsWith("location ")) - { - if (array.Length <= 1) - { - return; - } - string text5 = text.Substring(9); - Vector3 pos = Player.m_localPlayer.transform.position + Player.m_localPlayer.transform.forward * 10f; - ZoneSystem.instance.TestSpawnLocation(text5, pos); - } - if (array[0] == "spawn") - { - if (array.Length <= 1) - { - return; - } - string text6 = array[1]; - int num4 = ((array.Length < 3) ? 1 : int.Parse(array[2])); - int num5 = ((array.Length < 4) ? 1 : int.Parse(array[3])); - GameObject prefab = ZNetScene.instance.GetPrefab(text6); - if (!prefab) - { - Player.m_localPlayer.Message(MessageHud.MessageType.TopLeft, "Missing object " + text6); - return; - } - DateTime now = DateTime.Now; - if (num4 == 1) - { - Player.m_localPlayer.Message(MessageHud.MessageType.TopLeft, "Spawning object " + text6); - Character component2 = UnityEngine.Object.Instantiate(prefab, Player.m_localPlayer.transform.position + Player.m_localPlayer.transform.forward * 2f + Vector3.up, Quaternion.identity).GetComponent<Character>(); - if ((bool)component2 && num5 > 1) - { - component2.SetLevel(num5); - } - } - else - { - for (int j = 0; j < num4; j++) - { - Vector3 vector = UnityEngine.Random.insideUnitSphere * 0.5f; - Player.m_localPlayer.Message(MessageHud.MessageType.TopLeft, "Spawning object " + text6); - Character component3 = UnityEngine.Object.Instantiate(prefab, Player.m_localPlayer.transform.position + Player.m_localPlayer.transform.forward * 2f + Vector3.up + vector, Quaternion.identity).GetComponent<Character>(); - if ((bool)component3 && num5 > 1) - { - component3.SetLevel(num5); - } - } - } - ZLog.Log("Spawn time :" + (DateTime.Now - now).TotalMilliseconds + " ms"); - GoogleAnalyticsV4.instance.LogEvent("Cheat", "Spawn", text6, num4); - return; - } - if (array[0] == "pos") - { - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - AddString("Player position (X,Y,Z):" + localPlayer.transform.position.ToString("F0")); - } - } - if (text.StartsWith("goto ")) - { - string text7 = text.Substring(5); - char[] separator = new char[2] { ',', ' ' }; - string[] array3 = text7.Split(separator); - if (array3.Length < 2) - { - AddString("Syntax /goto x,y"); - return; - } - try - { - float x = float.Parse(array3[0]); - float z = float.Parse(array3[1]); - Player localPlayer2 = Player.m_localPlayer; - if ((bool)localPlayer2) - { - Vector3 pos2 = new Vector3(x, localPlayer2.transform.position.y, z); - localPlayer2.TeleportTo(pos2, localPlayer2.transform.rotation, distantTeleport: true); - } - } - catch (Exception ex) - { - ZLog.Log("parse error:" + ex.ToString() + " " + text7); - } - GoogleAnalyticsV4.instance.LogEvent("Cheat", "Goto", "", 0L); - return; - } - if (text.StartsWith("exploremap")) - { - Minimap.instance.ExploreAll(); - return; - } - if (text.StartsWith("resetmap")) - { - Minimap.instance.Reset(); - return; - } - if (text.StartsWith("puke") && (bool)Player.m_localPlayer) - { - Player.m_localPlayer.ClearFood(); - } - if (text.StartsWith("tame")) - { - Tameable.TameAllInArea(Player.m_localPlayer.transform.position, 20f); - } - if (text.StartsWith("killall")) - { - foreach (Character allCharacter in Character.GetAllCharacters()) - { - if (!allCharacter.IsPlayer()) - { - HitData hitData = new HitData(); - hitData.m_damage.m_damage = 1E+10f; - allCharacter.Damage(hitData); - } - } - return; - } - if (text.StartsWith("heal")) - { - Player.m_localPlayer.Heal(Player.m_localPlayer.GetMaxHealth()); - return; - } - if (text.StartsWith("god")) - { - Player.m_localPlayer.SetGodMode(!Player.m_localPlayer.InGodMode()); - Print("God mode:" + Player.m_localPlayer.InGodMode()); - GoogleAnalyticsV4.instance.LogEvent("Cheat", "God", Player.m_localPlayer.InGodMode().ToString(), 0L); - } - if (text.StartsWith("ghost")) - { - Player.m_localPlayer.SetGhostMode(!Player.m_localPlayer.InGhostMode()); - Print("Ghost mode:" + Player.m_localPlayer.InGhostMode()); - GoogleAnalyticsV4.instance.LogEvent("Cheat", "Ghost", Player.m_localPlayer.InGhostMode().ToString(), 0L); - } - if (text.StartsWith("beard")) - { - string beard = ((text.Length >= 6) ? text.Substring(6) : ""); - if ((bool)Player.m_localPlayer) - { - Player.m_localPlayer.SetBeard(beard); - } - return; - } - if (text.StartsWith("hair")) - { - string hair = ((text.Length >= 5) ? text.Substring(5) : ""); - if ((bool)Player.m_localPlayer) - { - Player.m_localPlayer.SetHair(hair); - } - return; - } - if (text.StartsWith("model ")) - { - string s = text.Substring(6); - if ((bool)Player.m_localPlayer && int.TryParse(s, out var result5)) - { - Player.m_localPlayer.SetPlayerModel(result5); - } - return; - } - if (text.StartsWith("tod ")) - { - if (!float.TryParse(text.Substring(4), NumberStyles.Float, CultureInfo.InvariantCulture, out var result6)) - { - return; - } - Print("Setting time of day:" + result6); - if (result6 < 0f) - { - EnvMan.instance.m_debugTimeOfDay = false; - } - else - { - EnvMan.instance.m_debugTimeOfDay = true; - EnvMan.instance.m_debugTime = Mathf.Clamp01(result6); - } - } - if (array[0] == "env" && array.Length > 1) - { - string text8 = text.Substring(4); - Print("Setting debug enviornment:" + text8); - EnvMan.instance.m_debugEnv = text8; - return; - } - if (text.StartsWith("resetenv")) - { - Print("Reseting debug enviornment"); - EnvMan.instance.m_debugEnv = ""; - return; - } - if (array[0] == "wind" && array.Length == 3) - { - float angle = float.Parse(array[1]); - float intensity = float.Parse(array[2]); - EnvMan.instance.SetDebugWind(angle, intensity); - } - if (array[0] == "resetwind") - { - EnvMan.instance.ResetDebugWind(); - } - } - } - - public bool IsCheatsEnabled() - { - if (m_cheat) - { - if ((bool)ZNet.instance) - { - return ZNet.instance.IsServer(); - } - return false; - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Container.cs b/Valheim_v202102/Valheim/assembly_valheim/Container.cs deleted file mode 100644 index 54b8214..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Container.cs +++ /dev/null @@ -1,417 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Container : MonoBehaviour, Hoverable, Interactable -{ - public enum PrivacySetting - { - Private, - Group, - Public - } - - private float m_lastTakeAllTime; - - public Action m_onTakeAllSuccess; - - public string m_name = "Container"; - - public Sprite m_bkg; - - public int m_width = 3; - - public int m_height = 2; - - public PrivacySetting m_privacy = PrivacySetting.Public; - - public bool m_checkGuardStone; - - public bool m_autoDestroyEmpty; - - public DropTable m_defaultItems = new DropTable(); - - public GameObject m_open; - - public GameObject m_closed; - - public EffectList m_openEffects = new EffectList(); - - public EffectList m_closeEffects = new EffectList(); - - public ZNetView m_rootObjectOverride; - - public Vagon m_wagon; - - public GameObject m_destroyedLootPrefab; - - private Inventory m_inventory; - - private ZNetView m_nview; - - private Piece m_piece; - - private bool m_inUse; - - private bool m_loading; - - private uint m_lastRevision; - - private string m_lastDataString = ""; - - private void Awake() - { - m_nview = (m_rootObjectOverride ? m_rootObjectOverride.GetComponent<ZNetView>() : GetComponent<ZNetView>()); - if (m_nview.GetZDO() != null) - { - m_inventory = new Inventory(m_name, m_bkg, m_width, m_height); - Inventory inventory = m_inventory; - inventory.m_onChanged = (Action)Delegate.Combine(inventory.m_onChanged, new Action(OnContainerChanged)); - m_piece = GetComponent<Piece>(); - if ((bool)m_nview) - { - m_nview.Register<long>("RequestOpen", RPC_RequestOpen); - m_nview.Register<bool>("OpenRespons", RPC_OpenRespons); - m_nview.Register<long>("RequestTakeAll", RPC_RequestTakeAll); - m_nview.Register<bool>("TakeAllRespons", RPC_TakeAllRespons); - } - WearNTear wearNTear = (m_rootObjectOverride ? m_rootObjectOverride.GetComponent<WearNTear>() : GetComponent<WearNTear>()); - if ((bool)wearNTear) - { - wearNTear.m_onDestroyed = (Action)Delegate.Combine(wearNTear.m_onDestroyed, new Action(OnDestroyed)); - } - Destructible destructible = (m_rootObjectOverride ? m_rootObjectOverride.GetComponent<Destructible>() : GetComponent<Destructible>()); - if ((bool)destructible) - { - destructible.m_onDestroyed = (Action)Delegate.Combine(destructible.m_onDestroyed, new Action(OnDestroyed)); - } - if (m_nview.IsOwner() && !m_nview.GetZDO().GetBool("addedDefaultItems")) - { - AddDefaultItems(); - m_nview.GetZDO().Set("addedDefaultItems", value: true); - } - InvokeRepeating("CheckForChanges", 0f, 1f); - } - } - - private void AddDefaultItems() - { - foreach (ItemDrop.ItemData dropListItem in m_defaultItems.GetDropListItems()) - { - m_inventory.AddItem(dropListItem); - } - } - - private void DropAllItems(GameObject lootContainerPrefab) - { - while (m_inventory.NrOfItems() > 0) - { - Vector3 position = base.transform.position + UnityEngine.Random.insideUnitSphere * 1f; - UnityEngine.Object.Instantiate(lootContainerPrefab, position, UnityEngine.Random.rotation).GetComponent<Container>().GetInventory() - .MoveAll(m_inventory); - } - } - - private void DropAllItems() - { - List<ItemDrop.ItemData> allItems = m_inventory.GetAllItems(); - int num = 1; - foreach (ItemDrop.ItemData item in allItems) - { - Vector3 position = base.transform.position + Vector3.up * 0.5f + UnityEngine.Random.insideUnitSphere * 0.3f; - Quaternion rotation = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f); - ItemDrop.DropItem(item, 0, position, rotation); - num++; - } - m_inventory.RemoveAll(); - Save(); - } - - private void OnDestroyed() - { - if (m_nview.IsOwner()) - { - if ((bool)m_destroyedLootPrefab) - { - DropAllItems(m_destroyedLootPrefab); - } - else - { - DropAllItems(); - } - } - } - - private void CheckForChanges() - { - if (m_nview.IsValid()) - { - Load(); - UpdateUseVisual(); - if (m_autoDestroyEmpty && m_nview.IsOwner() && !IsInUse() && m_inventory.NrOfItems() == 0) - { - m_nview.Destroy(); - } - } - } - - private void UpdateUseVisual() - { - bool flag; - if (m_nview.IsOwner()) - { - flag = m_inUse; - m_nview.GetZDO().Set("InUse", m_inUse ? 1 : 0); - } - else - { - flag = m_nview.GetZDO().GetInt("InUse") == 1; - } - if ((bool)m_open) - { - m_open.SetActive(flag); - } - if ((bool)m_closed) - { - m_closed.SetActive(!flag); - } - } - - public string GetHoverText() - { - if (m_checkGuardStone && !PrivateArea.CheckAccess(base.transform.position, 0f, flash: false)) - { - return Localization.instance.Localize(m_name + "\n$piece_noaccess"); - } - string text = ((m_inventory.NrOfItems() != 0) ? m_name : (m_name + " ( $piece_container_empty )")); - text += "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_container_open"; - return Localization.instance.Localize(text); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - if (m_checkGuardStone && !PrivateArea.CheckAccess(base.transform.position)) - { - return true; - } - long playerID = Game.instance.GetPlayerProfile().GetPlayerID(); - if (!CheckAccess(playerID)) - { - character.Message(MessageHud.MessageType.Center, "$msg_cantopen"); - return true; - } - m_nview.InvokeRPC("RequestOpen", playerID); - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public bool CanBeRemoved() - { - if (m_privacy == PrivacySetting.Private && GetInventory().NrOfItems() > 0) - { - return false; - } - return true; - } - - private bool CheckAccess(long playerID) - { - switch (m_privacy) - { - case PrivacySetting.Public: - return true; - case PrivacySetting.Private: - if (m_piece.GetCreator() == playerID) - { - return true; - } - return false; - case PrivacySetting.Group: - return false; - default: - return false; - } - } - - public bool IsOwner() - { - return m_nview.IsOwner(); - } - - public bool IsInUse() - { - return m_inUse; - } - - public void SetInUse(bool inUse) - { - if (m_nview.IsOwner() && m_inUse != inUse) - { - m_inUse = inUse; - UpdateUseVisual(); - if (inUse) - { - m_openEffects.Create(base.transform.position, base.transform.rotation); - } - else - { - m_closeEffects.Create(base.transform.position, base.transform.rotation); - } - } - } - - public Inventory GetInventory() - { - return m_inventory; - } - - private void RPC_RequestOpen(long uid, long playerID) - { - ZLog.Log("Player " + uid + " wants to open " + base.gameObject.name + " im: " + ZDOMan.instance.GetMyID()); - if (!m_nview.IsOwner()) - { - ZLog.Log(" but im not the owner"); - } - else if ((IsInUse() || ((bool)m_wagon && m_wagon.InUse())) && uid != ZNet.instance.GetUID()) - { - ZLog.Log(" in use"); - m_nview.InvokeRPC(uid, "OpenRespons", false); - } - else if (!CheckAccess(playerID)) - { - ZLog.Log(" not yours"); - m_nview.InvokeRPC(uid, "OpenRespons", false); - } - else - { - ZDOMan.instance.ForceSendZDO(uid, m_nview.GetZDO().m_uid); - m_nview.GetZDO().SetOwner(uid); - m_nview.InvokeRPC(uid, "OpenRespons", true); - } - } - - private void RPC_OpenRespons(long uid, bool granted) - { - if ((bool)Player.m_localPlayer) - { - if (granted) - { - InventoryGui.instance.Show(this); - } - else - { - Player.m_localPlayer.Message(MessageHud.MessageType.Center, "$msg_inuse"); - } - } - } - - public bool TakeAll(Humanoid character) - { - if (m_checkGuardStone && !PrivateArea.CheckAccess(base.transform.position)) - { - return false; - } - long playerID = Game.instance.GetPlayerProfile().GetPlayerID(); - if (!CheckAccess(playerID)) - { - character.Message(MessageHud.MessageType.Center, "$msg_cantopen"); - return false; - } - m_nview.InvokeRPC("RequestTakeAll", playerID); - return true; - } - - private void RPC_RequestTakeAll(long uid, long playerID) - { - ZLog.Log("Player " + uid + " wants to takeall from " + base.gameObject.name + " im: " + ZDOMan.instance.GetMyID()); - if (!m_nview.IsOwner()) - { - ZLog.Log(" but im not the owner"); - } - else if ((IsInUse() || ((bool)m_wagon && m_wagon.InUse())) && uid != ZNet.instance.GetUID()) - { - ZLog.Log(" in use"); - m_nview.InvokeRPC(uid, "TakeAllRespons", false); - } - else if (!CheckAccess(playerID)) - { - ZLog.Log(" not yours"); - m_nview.InvokeRPC(uid, "TakeAllRespons", false); - } - else if (!(Time.time - m_lastTakeAllTime < 2f)) - { - m_lastTakeAllTime = Time.time; - m_nview.InvokeRPC(uid, "TakeAllRespons", true); - } - } - - private void RPC_TakeAllRespons(long uid, bool granted) - { - if (!Player.m_localPlayer) - { - return; - } - if (granted) - { - m_nview.ClaimOwnership(); - ZDOMan.instance.ForceSendZDO(uid, m_nview.GetZDO().m_uid); - Player.m_localPlayer.GetInventory().MoveAll(m_inventory); - if (m_onTakeAllSuccess != null) - { - m_onTakeAllSuccess(); - } - } - else - { - Player.m_localPlayer.Message(MessageHud.MessageType.Center, "$msg_inuse"); - } - } - - private void OnContainerChanged() - { - if (!m_loading && IsOwner()) - { - Save(); - } - } - - private void Save() - { - ZPackage zPackage = new ZPackage(); - m_inventory.Save(zPackage); - string @base = zPackage.GetBase64(); - m_nview.GetZDO().Set("items", @base); - m_lastRevision = m_nview.GetZDO().m_dataRevision; - m_lastDataString = @base; - } - - private void Load() - { - if (m_nview.GetZDO().m_dataRevision != m_lastRevision) - { - string @string = m_nview.GetZDO().GetString("items"); - if (!string.IsNullOrEmpty(@string) && !(@string == m_lastDataString)) - { - ZPackage pkg = new ZPackage(@string); - m_loading = true; - m_inventory.Load(pkg); - m_loading = false; - m_lastRevision = m_nview.GetZDO().m_dataRevision; - m_lastDataString = @string; - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/CookingStation.cs b/Valheim_v202102/Valheim/assembly_valheim/CookingStation.cs deleted file mode 100644 index 24fa4b0..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/CookingStation.cs +++ /dev/null @@ -1,363 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; - -public class CookingStation : MonoBehaviour, Interactable, Hoverable -{ - [Serializable] - public class ItemConversion - { - public ItemDrop m_from; - - public ItemDrop m_to; - - public float m_cookTime = 10f; - } - - private const float cookDelta = 1f; - - public EffectList m_addEffect = new EffectList(); - - public EffectList m_doneEffect = new EffectList(); - - public EffectList m_overcookedEffect = new EffectList(); - - public EffectList m_pickEffector = new EffectList(); - - public float m_spawnOffset = 0.5f; - - public float m_spawnForce = 5f; - - public ItemDrop m_overCookedItem; - - public List<ItemConversion> m_conversion = new List<ItemConversion>(); - - public Transform[] m_slots; - - public string m_name = ""; - - private ZNetView m_nview; - - private ParticleSystem[] m_ps; - - private AudioSource[] m_as; - - private void Awake() - { - m_nview = base.gameObject.GetComponent<ZNetView>(); - if (m_nview.GetZDO() != null) - { - m_ps = new ParticleSystem[m_slots.Length]; - m_as = new AudioSource[m_slots.Length]; - for (int i = 0; i < m_slots.Length; i++) - { - m_ps[i] = m_slots[i].GetComponentInChildren<ParticleSystem>(); - m_as[i] = m_slots[i].GetComponentInChildren<AudioSource>(); - } - m_nview.Register("RemoveDoneItem", RPC_RemoveDoneItem); - m_nview.Register<string>("AddItem", RPC_AddItem); - m_nview.Register<int, string>("SetSlotVisual", RPC_SetSlotVisual); - InvokeRepeating("UpdateCooking", 0f, 1f); - } - } - - private void UpdateCooking() - { - if (!m_nview.IsValid()) - { - return; - } - if (m_nview.IsOwner() && IsFireLit()) - { - for (int i = 0; i < m_slots.Length; i++) - { - GetSlot(i, out var itemName, out var cookedTime); - if (!(itemName != "") || !(itemName != m_overCookedItem.name)) - { - continue; - } - ItemConversion itemConversion = GetItemConversion(itemName); - if (itemName == null) - { - SetSlot(i, "", 0f); - continue; - } - cookedTime += 1f; - if (cookedTime > itemConversion.m_cookTime * 2f) - { - m_overcookedEffect.Create(m_slots[i].position, Quaternion.identity); - SetSlot(i, m_overCookedItem.name, cookedTime); - } - else if (cookedTime > itemConversion.m_cookTime && itemName == itemConversion.m_from.name) - { - m_doneEffect.Create(m_slots[i].position, Quaternion.identity); - SetSlot(i, itemConversion.m_to.name, cookedTime); - } - else - { - SetSlot(i, itemName, cookedTime); - } - } - } - UpdateVisual(); - } - - private void UpdateVisual() - { - for (int i = 0; i < m_slots.Length; i++) - { - GetSlot(i, out var itemName, out var _); - SetSlotVisual(i, itemName); - } - } - - private void RPC_SetSlotVisual(long sender, int slot, string item) - { - SetSlotVisual(slot, item); - } - - private void SetSlotVisual(int i, string item) - { - if (item == "") - { - ParticleSystem.EmissionModule emission = m_ps[i].emission; - emission.enabled = false; - m_as[i].mute = true; - if (m_slots[i].childCount > 0) - { - UnityEngine.Object.Destroy(m_slots[i].GetChild(0).gameObject); - } - return; - } - ParticleSystem.EmissionModule emission2 = m_ps[i].emission; - emission2.enabled = true; - m_as[i].mute = false; - if (m_slots[i].childCount == 0 || m_slots[i].GetChild(0).name != item) - { - if (m_slots[i].childCount > 0) - { - UnityEngine.Object.Destroy(m_slots[i].GetChild(0).gameObject); - } - Transform obj = ObjectDB.instance.GetItemPrefab(item).transform.Find("attach"); - Transform transform = m_slots[i]; - GameObject obj2 = UnityEngine.Object.Instantiate(obj.gameObject, transform.position, transform.rotation, transform); - obj2.name = item; - Renderer[] componentsInChildren = obj2.GetComponentsInChildren<Renderer>(); - for (int j = 0; j < componentsInChildren.Length; j++) - { - componentsInChildren[j].shadowCastingMode = ShadowCastingMode.Off; - } - } - } - - private void RPC_RemoveDoneItem(long sender) - { - for (int i = 0; i < m_slots.Length; i++) - { - GetSlot(i, out var itemName, out var _); - if (itemName != "" && IsItemDone(itemName)) - { - SpawnItem(itemName); - SetSlot(i, "", 0f); - m_nview.InvokeRPC(ZNetView.Everybody, "SetSlotVisual", i, ""); - break; - } - } - } - - private bool HaveDoneItem() - { - for (int i = 0; i < m_slots.Length; i++) - { - GetSlot(i, out var itemName, out var _); - if (itemName != "" && IsItemDone(itemName)) - { - return true; - } - } - return false; - } - - private bool IsItemDone(string itemName) - { - if (itemName == m_overCookedItem.name) - { - return true; - } - ItemConversion itemConversion = GetItemConversion(itemName); - if (itemConversion == null) - { - return false; - } - if (itemName == itemConversion.m_to.name) - { - return true; - } - return false; - } - - private void SpawnItem(string name) - { - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(name); - Vector3 vector = base.transform.position + Vector3.up * m_spawnOffset; - Quaternion rotation = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f); - UnityEngine.Object.Instantiate(itemPrefab, vector, rotation).GetComponent<Rigidbody>().velocity = Vector3.up * m_spawnForce; - m_pickEffector.Create(vector, Quaternion.identity); - } - - public string GetHoverText() - { - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_cstand_cook\n[<color=yellow><b>1-8</b></color>] $piece_cstand_cook"); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid user, bool hold) - { - if (hold) - { - return false; - } - if (HaveDoneItem()) - { - m_nview.InvokeRPC("RemoveDoneItem"); - return true; - } - ItemDrop.ItemData itemData = FindCookableItem(user.GetInventory()); - if (itemData == null) - { - user.Message(MessageHud.MessageType.Center, "$msg_nocookitems"); - return false; - } - UseItem(user, itemData); - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - if (!IsFireLit()) - { - user.Message(MessageHud.MessageType.Center, "$msg_needfire"); - return false; - } - if (GetFreeSlot() == -1) - { - user.Message(MessageHud.MessageType.Center, "$msg_nocookroom"); - return false; - } - return CookItem(user.GetInventory(), item); - } - - private bool IsFireLit() - { - if ((bool)EffectArea.IsPointInsideArea(base.transform.position, EffectArea.Type.Burning, 0.25f)) - { - return true; - } - return false; - } - - private ItemDrop.ItemData FindCookableItem(Inventory inventory) - { - foreach (ItemConversion item2 in m_conversion) - { - ItemDrop.ItemData item = inventory.GetItem(item2.m_from.m_itemData.m_shared.m_name); - if (item != null) - { - return item; - } - } - return null; - } - - private bool CookItem(Inventory inventory, ItemDrop.ItemData item) - { - string text = item.m_dropPrefab.name; - if (!m_nview.HasOwner()) - { - m_nview.ClaimOwnership(); - } - if (!IsItemAllowed(item)) - { - return false; - } - if (GetFreeSlot() == -1) - { - return false; - } - inventory.RemoveOneItem(item); - m_nview.InvokeRPC("AddItem", text); - return true; - } - - private void RPC_AddItem(long sender, string itemName) - { - if (IsItemAllowed(itemName)) - { - int freeSlot = GetFreeSlot(); - if (freeSlot != -1) - { - SetSlot(freeSlot, itemName, 0f); - m_nview.InvokeRPC(ZNetView.Everybody, "SetSlotVisual", freeSlot, itemName); - m_addEffect.Create(m_slots[freeSlot].position, Quaternion.identity); - } - } - } - - private void SetSlot(int slot, string itemName, float cookedTime) - { - m_nview.GetZDO().Set("slot" + slot, itemName); - m_nview.GetZDO().Set("slot" + slot, cookedTime); - } - - private void GetSlot(int slot, out string itemName, out float cookedTime) - { - itemName = m_nview.GetZDO().GetString("slot" + slot); - cookedTime = m_nview.GetZDO().GetFloat("slot" + slot); - } - - private int GetFreeSlot() - { - for (int i = 0; i < m_slots.Length; i++) - { - if (m_nview.GetZDO().GetString("slot" + i) == "") - { - return i; - } - } - return -1; - } - - private bool IsItemAllowed(ItemDrop.ItemData item) - { - return IsItemAllowed(item.m_dropPrefab.name); - } - - private bool IsItemAllowed(string itemName) - { - foreach (ItemConversion item in m_conversion) - { - if (item.m_from.gameObject.name == itemName) - { - return true; - } - } - return false; - } - - private ItemConversion GetItemConversion(string itemName) - { - foreach (ItemConversion item in m_conversion) - { - if (item.m_from.gameObject.name == itemName || item.m_to.gameObject.name == itemName) - { - return item; - } - } - return null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Corpse.cs b/Valheim_v202102/Valheim/assembly_valheim/Corpse.cs deleted file mode 100644 index 995e11a..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Corpse.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class Corpse : MonoBehaviour -{ - private static float m_updateDt = 2f; - - public float m_emptyDespawnDelaySec = 10f; - - public float m_DespawnDelayMin = 20f; - - private float m_emptyTimer; - - private Container m_container; - - private ZNetView m_nview; - - private SkinnedMeshRenderer m_model; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_container = GetComponent<Container>(); - m_model = GetComponentInChildren<SkinnedMeshRenderer>(); - if (m_nview.IsOwner() && m_nview.GetZDO().GetLong("timeOfDeath", 0L) == 0L) - { - m_nview.GetZDO().Set("timeOfDeath", ZNet.instance.GetTime().Ticks); - } - InvokeRepeating("UpdateDespawn", m_updateDt, m_updateDt); - } - - public void SetEquipedItems(List<ItemDrop.ItemData> items) - { - foreach (ItemDrop.ItemData item in items) - { - if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Chest) - { - m_nview.GetZDO().Set("ChestItem", item.m_shared.m_name); - } - if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Legs) - { - m_nview.GetZDO().Set("LegItem", item.m_shared.m_name); - } - } - } - - private void UpdateDespawn() - { - if (!m_nview.IsOwner() || m_container.IsInUse()) - { - return; - } - if (m_container.GetInventory().NrOfItems() <= 0) - { - m_emptyTimer += m_updateDt; - if (m_emptyTimer >= m_emptyDespawnDelaySec) - { - ZLog.Log("Despawning looted corpse"); - m_nview.Destroy(); - } - } - else - { - m_emptyTimer = 0f; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/CraftingStation.cs b/Valheim_v202102/Valheim/assembly_valheim/CraftingStation.cs deleted file mode 100644 index aef3ad6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/CraftingStation.cs +++ /dev/null @@ -1,317 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class CraftingStation : MonoBehaviour, Hoverable, Interactable -{ - public string m_name = ""; - - public Sprite m_icon; - - public float m_discoverRange = 4f; - - public float m_rangeBuild = 10f; - - public bool m_craftRequireRoof = true; - - public bool m_craftRequireFire = true; - - public Transform m_roofCheckPoint; - - public Transform m_connectionPoint; - - public bool m_showBasicRecipies; - - public float m_useDistance = 2f; - - public int m_useAnimation; - - public GameObject m_areaMarker; - - public GameObject m_inUseObject; - - public GameObject m_haveFireObject; - - public EffectList m_craftItemEffects = new EffectList(); - - public EffectList m_craftItemDoneEffects = new EffectList(); - - public EffectList m_repairItemDoneEffects = new EffectList(); - - private const float m_updateExtensionInterval = 2f; - - private float m_updateExtensionTimer; - - private float m_useTimer = 10f; - - private bool m_haveFire; - - private ZNetView m_nview; - - private List<StationExtension> m_attachedExtensions = new List<StationExtension>(); - - private static List<CraftingStation> m_allStations = new List<CraftingStation>(); - - private static int m_triggerMask = 0; - - private void Start() - { - m_nview = GetComponent<ZNetView>(); - if (!m_nview || m_nview.GetZDO() != null) - { - m_allStations.Add(this); - if ((bool)m_areaMarker) - { - m_areaMarker.SetActive(value: false); - } - if (m_craftRequireFire) - { - InvokeRepeating("CheckFire", 1f, 1f); - } - } - } - - private void OnDestroy() - { - m_allStations.Remove(this); - } - - public bool Interact(Humanoid user, bool repeat) - { - if (repeat) - { - return false; - } - if (user == Player.m_localPlayer) - { - if (!InUseDistance(user)) - { - return false; - } - Player player = user as Player; - if (CheckUsable(player, showMessage: true)) - { - player.SetCraftingStation(this); - InventoryGui.instance.Show(null); - return false; - } - } - return false; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public bool CheckUsable(Player player, bool showMessage) - { - if (m_craftRequireRoof) - { - Cover.GetCoverForPoint(m_roofCheckPoint.position, out var coverPercentage, out var underRoof); - if (!underRoof) - { - if (showMessage) - { - player.Message(MessageHud.MessageType.Center, "$msg_stationneedroof"); - } - return false; - } - if (coverPercentage < 0.7f) - { - if (showMessage) - { - player.Message(MessageHud.MessageType.Center, "$msg_stationtooexposed"); - } - return false; - } - } - if (m_craftRequireFire && !m_haveFire) - { - if (showMessage) - { - player.Message(MessageHud.MessageType.Center, "$msg_needfire"); - } - return false; - } - return true; - } - - public string GetHoverText() - { - if (!InUseDistance(Player.m_localPlayer)) - { - return Localization.instance.Localize("<color=grey>$piece_toofar</color>"); - } - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_use "); - } - - public string GetHoverName() - { - return m_name; - } - - public void ShowAreaMarker() - { - if ((bool)m_areaMarker) - { - m_areaMarker.SetActive(value: true); - CancelInvoke("HideMarker"); - Invoke("HideMarker", 0.5f); - PokeInUse(); - } - } - - private void HideMarker() - { - m_areaMarker.SetActive(value: false); - } - - public static void UpdateKnownStationsInRange(Player player) - { - Vector3 position = player.transform.position; - foreach (CraftingStation allStation in m_allStations) - { - if (Vector3.Distance(allStation.transform.position, position) < allStation.m_discoverRange) - { - player.AddKnownStation(allStation); - } - } - } - - private void FixedUpdate() - { - if (!(m_nview == null) && m_nview.IsValid()) - { - m_useTimer += Time.fixedDeltaTime; - m_updateExtensionTimer += Time.fixedDeltaTime; - if ((bool)m_inUseObject) - { - m_inUseObject.SetActive(m_useTimer < 1f); - } - } - } - - private void CheckFire() - { - m_haveFire = EffectArea.IsPointInsideArea(base.transform.position, EffectArea.Type.Burning, 0.25f); - if ((bool)m_haveFireObject) - { - m_haveFireObject.SetActive(m_haveFire); - } - } - - public void PokeInUse() - { - m_useTimer = 0f; - TriggerExtensionEffects(); - } - - public static CraftingStation GetCraftingStation(Vector3 point) - { - if (m_triggerMask == 0) - { - m_triggerMask = LayerMask.GetMask("character_trigger"); - } - Collider[] array = Physics.OverlapSphere(point, 0.1f, m_triggerMask, QueryTriggerInteraction.Collide); - foreach (Collider collider in array) - { - if (collider.gameObject.CompareTag("StationUseArea")) - { - CraftingStation componentInParent = collider.GetComponentInParent<CraftingStation>(); - if (componentInParent != null) - { - return componentInParent; - } - } - } - return null; - } - - public static CraftingStation HaveBuildStationInRange(string name, Vector3 point) - { - foreach (CraftingStation allStation in m_allStations) - { - if (!(allStation.m_name != name)) - { - float rangeBuild = allStation.m_rangeBuild; - if (Vector3.Distance(allStation.transform.position, point) < rangeBuild) - { - return allStation; - } - } - } - return null; - } - - public static void FindStationsInRange(string name, Vector3 point, float range, List<CraftingStation> stations) - { - foreach (CraftingStation allStation in m_allStations) - { - if (!(allStation.m_name != name) && Vector3.Distance(allStation.transform.position, point) < range) - { - stations.Add(allStation); - } - } - } - - public static CraftingStation FindClosestStationInRange(string name, Vector3 point, float range) - { - CraftingStation craftingStation = null; - float num = 99999f; - foreach (CraftingStation allStation in m_allStations) - { - if (!(allStation.m_name != name)) - { - float num2 = Vector3.Distance(allStation.transform.position, point); - if (num2 < range && (num2 < num || craftingStation == null)) - { - craftingStation = allStation; - num = num2; - } - } - } - return craftingStation; - } - - private List<StationExtension> GetExtensions() - { - if (m_updateExtensionTimer > 2f) - { - m_updateExtensionTimer = 0f; - m_attachedExtensions.Clear(); - StationExtension.FindExtensions(this, base.transform.position, m_attachedExtensions); - } - return m_attachedExtensions; - } - - private void TriggerExtensionEffects() - { - Vector3 connectionEffectPoint = GetConnectionEffectPoint(); - foreach (StationExtension extension in GetExtensions()) - { - if ((bool)extension) - { - extension.StartConnectionEffect(connectionEffectPoint); - } - } - } - - public Vector3 GetConnectionEffectPoint() - { - if ((bool)m_connectionPoint) - { - return m_connectionPoint.position; - } - return base.transform.position; - } - - public int GetLevel() - { - return 1 + GetExtensions().Count; - } - - public bool InUseDistance(Humanoid human) - { - return Vector3.Distance(human.transform.position, base.transform.position) < m_useDistance; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/CreatureSpawner.cs b/Valheim_v202102/Valheim/assembly_valheim/CreatureSpawner.cs deleted file mode 100644 index 5cc99f5..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/CreatureSpawner.cs +++ /dev/null @@ -1,160 +0,0 @@ -using System; -using UnityEngine; - -public class CreatureSpawner : MonoBehaviour -{ - private const float m_radius = 0.75f; - - public GameObject m_creaturePrefab; - - [Header("Level")] - public int m_maxLevel = 1; - - public int m_minLevel = 1; - - public float m_levelupChance = 15f; - - [Header("Spawn settings")] - public float m_respawnTimeMinuts = 20f; - - public float m_triggerDistance = 60f; - - public float m_triggerNoise; - - public bool m_spawnAtNight = true; - - public bool m_spawnAtDay = true; - - public bool m_requireSpawnArea; - - public bool m_spawnInPlayerBase; - - public bool m_setPatrolSpawnPoint; - - public EffectList m_spawnEffects = new EffectList(); - - private ZNetView m_nview; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_nview.GetZDO() != null) - { - InvokeRepeating("UpdateSpawner", UnityEngine.Random.Range(3f, 5f), 5f); - } - } - - private void UpdateSpawner() - { - if (!m_nview.IsOwner()) - { - return; - } - ZDOID zDOID = m_nview.GetZDO().GetZDOID("spawn_id"); - if (m_respawnTimeMinuts <= 0f && !zDOID.IsNone()) - { - return; - } - if (!zDOID.IsNone() && ZDOMan.instance.GetZDO(zDOID) != null) - { - m_nview.GetZDO().Set("alive_time", ZNet.instance.GetTime().Ticks); - return; - } - if (m_respawnTimeMinuts > 0f) - { - DateTime time = ZNet.instance.GetTime(); - DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("alive_time", 0L)); - if ((time - dateTime).TotalMinutes < (double)m_respawnTimeMinuts) - { - return; - } - } - if ((!m_spawnAtDay && EnvMan.instance.IsDay()) || (!m_spawnAtNight && EnvMan.instance.IsNight())) - { - return; - } - _ = m_requireSpawnArea; - if (!m_spawnInPlayerBase && (bool)EffectArea.IsPointInsideArea(base.transform.position, EffectArea.Type.PlayerBase)) - { - return; - } - if (m_triggerNoise > 0f) - { - if (!Player.IsPlayerInRange(base.transform.position, m_triggerDistance, m_triggerNoise)) - { - return; - } - } - else if (!Player.IsPlayerInRange(base.transform.position, m_triggerDistance)) - { - return; - } - Spawn(); - } - - private bool HasSpawned() - { - if (m_nview == null || m_nview.GetZDO() == null) - { - return false; - } - return !m_nview.GetZDO().GetZDOID("spawn_id").IsNone(); - } - - private ZNetView Spawn() - { - Vector3 position = base.transform.position; - if (ZoneSystem.instance.FindFloor(position, out var height)) - { - position.y = height + 0.25f; - } - Quaternion rotation = Quaternion.Euler(0f, UnityEngine.Random.Range(0f, 360f), 0f); - GameObject gameObject = UnityEngine.Object.Instantiate(m_creaturePrefab, position, rotation); - ZNetView component = gameObject.GetComponent<ZNetView>(); - BaseAI component2 = gameObject.GetComponent<BaseAI>(); - if (component2 != null && m_setPatrolSpawnPoint) - { - component2.SetPatrolPoint(); - } - if (m_maxLevel > 1) - { - Character component3 = gameObject.GetComponent<Character>(); - if ((bool)component3) - { - int i; - for (i = m_minLevel; i < m_maxLevel; i++) - { - if (!(UnityEngine.Random.Range(0f, 100f) <= m_levelupChance)) - { - break; - } - } - if (i > 1) - { - component3.SetLevel(i); - } - } - } - component.GetZDO().SetPGWVersion(m_nview.GetZDO().GetPGWVersion()); - m_nview.GetZDO().Set("spawn_id", component.GetZDO().m_uid); - m_nview.GetZDO().Set("alive_time", ZNet.instance.GetTime().Ticks); - SpawnEffect(gameObject); - return component; - } - - private void SpawnEffect(GameObject spawnedObject) - { - Character component = spawnedObject.GetComponent<Character>(); - Vector3 pos = (component ? component.GetCenterPoint() : (base.transform.position + Vector3.up * 0.75f)); - m_spawnEffects.Create(pos, Quaternion.identity); - } - - private float GetRadius() - { - return 0.75f; - } - - private void OnDrawGizmos() - { - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/DLCMan.cs b/Valheim_v202102/Valheim/assembly_valheim/DLCMan.cs deleted file mode 100644 index b4375ec..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/DLCMan.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System; -using System.Collections.Generic; -using Steamworks; -using UnityEngine; - -public class DLCMan : MonoBehaviour -{ - [Serializable] - public class DLCInfo - { - public string m_name = "DLC"; - - public uint[] m_steamAPPID = new uint[0]; - - [NonSerialized] - public bool m_installed; - } - - private static DLCMan m_instance; - - public List<DLCInfo> m_dlcs = new List<DLCInfo>(); - - public static DLCMan instance => m_instance; - - private void Awake() - { - m_instance = this; - CheckDLCsSTEAM(); - } - - private void OnDestroy() - { - if (m_instance == this) - { - m_instance = null; - } - } - - public bool IsDLCInstalled(string name) - { - if (name.Length == 0) - { - return true; - } - foreach (DLCInfo dlc in m_dlcs) - { - if (dlc.m_name == name) - { - return dlc.m_installed; - } - } - ZLog.LogWarning("DLC " + name + " not registered in DLCMan"); - return false; - } - - private void CheckDLCsSTEAM() - { - if (!SteamManager.Initialized) - { - ZLog.Log("Steam not initialized"); - return; - } - ZLog.Log("Checking for installed DLCs"); - foreach (DLCInfo dlc in m_dlcs) - { - dlc.m_installed = IsDLCInstalled(dlc); - ZLog.Log("DLC:" + dlc.m_name + " installed:" + dlc.m_installed); - } - } - - private bool IsDLCInstalled(DLCInfo dlc) - { - uint[] steamAPPID = dlc.m_steamAPPID; - foreach (uint id in steamAPPID) - { - if (IsDLCInstalled(id)) - { - return true; - } - } - return false; - } - - private bool IsDLCInstalled(uint id) - { - AppId_t appId_t = new AppId_t(id); - int dLCCount = SteamApps.GetDLCCount(); - for (int i = 0; i < dLCCount; i++) - { - if (SteamApps.BGetDLCDataByIndex(i, out var pAppID, out var _, out var _, 200) && appId_t == pAppID) - { - ZLog.Log("DLC installed:" + id); - return SteamApps.BIsDlcInstalled(pAppID); - } - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/DamageText.cs b/Valheim_v202102/Valheim/assembly_valheim/DamageText.cs deleted file mode 100644 index bdca3fb..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/DamageText.cs +++ /dev/null @@ -1,181 +0,0 @@ -using System.Collections.Generic; -using System.Globalization; -using UnityEngine; -using UnityEngine.UI; - -public class DamageText : MonoBehaviour -{ - public enum TextType - { - Normal, - Resistant, - Weak, - Immune, - Heal, - TooHard, - Blocked - } - - private class WorldTextInstance - { - public Vector3 m_worldPos; - - public GameObject m_gui; - - public float m_timer; - - public Text m_textField; - } - - private static DamageText m_instance; - - public float m_textDuration = 1.5f; - - public float m_maxTextDistance = 30f; - - public int m_largeFontSize = 16; - - public int m_smallFontSize = 8; - - public float m_smallFontDistance = 10f; - - public GameObject m_worldTextBase; - - private List<WorldTextInstance> m_worldTexts = new List<WorldTextInstance>(); - - public static DamageText instance => m_instance; - - private void Awake() - { - m_instance = this; - ZRoutedRpc.instance.Register<ZPackage>("DamageText", RPC_DamageText); - } - - private void LateUpdate() - { - UpdateWorldTexts(Time.deltaTime); - } - - private void UpdateWorldTexts(float dt) - { - WorldTextInstance worldTextInstance = null; - Camera mainCamera = Utils.GetMainCamera(); - foreach (WorldTextInstance worldText in m_worldTexts) - { - worldText.m_timer += dt; - if (worldText.m_timer > m_textDuration && worldTextInstance == null) - { - worldTextInstance = worldText; - } - worldText.m_worldPos.y += dt; - float f = Mathf.Clamp01(worldText.m_timer / m_textDuration); - Color color = worldText.m_textField.color; - color.a = 1f - Mathf.Pow(f, 3f); - worldText.m_textField.color = color; - Vector3 position = mainCamera.WorldToScreenPoint(worldText.m_worldPos); - if (position.x < 0f || position.x > (float)Screen.width || position.y < 0f || position.y > (float)Screen.height || position.z < 0f) - { - worldText.m_gui.SetActive(value: false); - continue; - } - worldText.m_gui.SetActive(value: true); - worldText.m_gui.transform.position = position; - } - if (worldTextInstance != null) - { - Object.Destroy(worldTextInstance.m_gui); - m_worldTexts.Remove(worldTextInstance); - } - } - - private void AddInworldText(TextType type, Vector3 pos, float distance, float dmg, bool mySelf) - { - WorldTextInstance worldTextInstance = new WorldTextInstance(); - worldTextInstance.m_worldPos = pos; - worldTextInstance.m_gui = Object.Instantiate(m_worldTextBase, base.transform); - worldTextInstance.m_textField = worldTextInstance.m_gui.GetComponent<Text>(); - m_worldTexts.Add(worldTextInstance); - Color color = ((type == TextType.Heal) ? new Color(0.5f, 1f, 0.5f, 0.7f) : (mySelf ? ((dmg != 0f) ? new Color(1f, 0f, 0f, 1f) : new Color(0.5f, 0.5f, 0.5f, 1f)) : (type switch - { - TextType.Normal => new Color(1f, 1f, 1f, 1f), - TextType.Resistant => new Color(0.6f, 0.6f, 0.6f, 1f), - TextType.Weak => new Color(1f, 1f, 0f, 1f), - TextType.Immune => new Color(0.6f, 0.6f, 0.6f, 1f), - TextType.TooHard => new Color(0.8f, 0.7f, 0.7f, 1f), - _ => Color.white, - }))); - worldTextInstance.m_textField.color = color; - if (distance > m_smallFontDistance) - { - worldTextInstance.m_textField.fontSize = m_smallFontSize; - } - else - { - worldTextInstance.m_textField.fontSize = m_largeFontSize; - } - string text = type switch - { - TextType.TooHard => Localization.instance.Localize("$msg_toohard"), - TextType.Heal => "+" + dmg.ToString("0.#", CultureInfo.InvariantCulture), - TextType.Blocked => Localization.instance.Localize("$msg_blocked: ") + dmg.ToString("0.#", CultureInfo.InvariantCulture), - _ => dmg.ToString("0.#", CultureInfo.InvariantCulture), - }; - worldTextInstance.m_textField.text = text; - worldTextInstance.m_timer = 0f; - } - - public void ShowText(HitData.DamageModifier type, Vector3 pos, float dmg, bool player = false) - { - TextType type2 = TextType.Normal; - switch (type) - { - case HitData.DamageModifier.Normal: - type2 = TextType.Normal; - break; - case HitData.DamageModifier.Immune: - type2 = TextType.Immune; - break; - case HitData.DamageModifier.Resistant: - type2 = TextType.Resistant; - break; - case HitData.DamageModifier.VeryResistant: - type2 = TextType.Resistant; - break; - case HitData.DamageModifier.Weak: - type2 = TextType.Weak; - break; - case HitData.DamageModifier.VeryWeak: - type2 = TextType.Weak; - break; - } - ShowText(type2, pos, dmg, player); - } - - public void ShowText(TextType type, Vector3 pos, float dmg, bool player = false) - { - ZPackage zPackage = new ZPackage(); - zPackage.Write((int)type); - zPackage.Write(pos); - zPackage.Write(dmg); - zPackage.Write(player); - ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "DamageText", zPackage); - } - - private void RPC_DamageText(long sender, ZPackage pkg) - { - Camera mainCamera = Utils.GetMainCamera(); - if ((bool)mainCamera && !Hud.IsUserHidden()) - { - TextType type = (TextType)pkg.ReadInt(); - Vector3 vector = pkg.ReadVector3(); - float dmg = pkg.ReadSingle(); - bool flag = pkg.ReadBool(); - float num = Vector3.Distance(mainCamera.transform.position, vector); - if (!(num > m_maxTextDistance)) - { - bool mySelf = flag && sender == ZNet.instance.GetUID(); - AddInworldText(type, vector, num, dmg, mySelf); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/DepthCamera.cs b/Valheim_v202102/Valheim/assembly_valheim/DepthCamera.cs deleted file mode 100644 index 9790a6c..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/DepthCamera.cs +++ /dev/null @@ -1,39 +0,0 @@ -using UnityEngine; - -public class DepthCamera : MonoBehaviour -{ - public Shader m_depthShader; - - public float m_offset = 50f; - - public RenderTexture m_texture; - - public float m_updateInterval = 1f; - - private Camera m_camera; - - private void Start() - { - m_camera = GetComponent<Camera>(); - InvokeRepeating("RenderDepth", m_updateInterval, m_updateInterval); - } - - private void RenderDepth() - { - Camera mainCamera = Utils.GetMainCamera(); - if (!(mainCamera == null)) - { - Vector3 position = (Player.m_localPlayer ? Player.m_localPlayer.transform.position : mainCamera.transform.position) + Vector3.up * m_offset; - position.x = Mathf.Round(position.x); - position.y = Mathf.Round(position.y); - position.z = Mathf.Round(position.z); - base.transform.position = position; - float lodBias = QualitySettings.lodBias; - QualitySettings.lodBias = 10f; - m_camera.RenderWithShader(m_depthShader, "RenderType"); - QualitySettings.lodBias = lodBias; - Shader.SetGlobalTexture("_SkyAlphaTexture", m_texture); - Shader.SetGlobalVector("_SkyAlphaPosition", base.transform.position); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Destructible.cs b/Valheim_v202102/Valheim/assembly_valheim/Destructible.cs deleted file mode 100644 index e6b56a9..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Destructible.cs +++ /dev/null @@ -1,213 +0,0 @@ -using System; -using UnityEngine; - -public class Destructible : MonoBehaviour, IDestructible -{ - public Action m_onDestroyed; - - public Action m_onDamaged; - - [Header("Destruction")] - public DestructibleType m_destructibleType = DestructibleType.Default; - - public float m_health = 1f; - - public HitData.DamageModifiers m_damages; - - public float m_minDamageTreshold; - - public int m_minToolTier; - - public float m_hitNoise; - - public float m_destroyNoise; - - public float m_ttl; - - public GameObject m_spawnWhenDestroyed; - - [Header("Effects")] - public EffectList m_destroyedEffect = new EffectList(); - - public EffectList m_hitEffect = new EffectList(); - - public bool m_autoCreateFragments; - - private ZNetView m_nview; - - private Rigidbody m_body; - - private bool m_firstFrame = true; - - private bool m_destroyed; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_body = GetComponent<Rigidbody>(); - if ((bool)m_nview && m_nview.GetZDO() != null) - { - m_nview.Register<HitData>("Damage", RPC_Damage); - if (m_autoCreateFragments) - { - m_nview.Register("CreateFragments", RPC_CreateFragments); - } - if (m_ttl > 0f) - { - InvokeRepeating("DestroyNow", m_ttl, 1f); - } - } - } - - private void Start() - { - m_firstFrame = false; - } - - public GameObject GetParentObject() - { - return null; - } - - public DestructibleType GetDestructibleType() - { - return m_destructibleType; - } - - public void Damage(HitData hit) - { - if (!m_firstFrame && m_nview.IsValid()) - { - m_nview.InvokeRPC("Damage", hit); - } - } - - private void RPC_Damage(long sender, HitData hit) - { - if (!m_nview.IsValid() || !m_nview.IsOwner() || m_destroyed) - { - return; - } - float @float = m_nview.GetZDO().GetFloat("health", m_health); - hit.ApplyResistance(m_damages, out var significantModifier); - float totalDamage = hit.GetTotalDamage(); - if ((bool)m_body) - { - m_body.AddForceAtPosition(hit.m_dir * hit.m_pushForce, hit.m_point, ForceMode.Impulse); - } - if (hit.m_toolTier < m_minToolTier) - { - DamageText.instance.ShowText(DamageText.TextType.TooHard, hit.m_point, 0f); - return; - } - DamageText.instance.ShowText(significantModifier, hit.m_point, totalDamage); - if (totalDamage <= 0f) - { - return; - } - @float -= totalDamage; - m_nview.GetZDO().Set("health", @float); - m_hitEffect.Create(hit.m_point, Quaternion.identity, base.transform); - if (m_onDamaged != null) - { - m_onDamaged(); - } - if (m_hitNoise > 0f) - { - Player closestPlayer = Player.GetClosestPlayer(hit.m_point, 10f); - if ((bool)closestPlayer) - { - closestPlayer.AddNoise(m_hitNoise); - } - } - if (@float <= 0f) - { - Destroy(); - } - } - - private void DestroyNow() - { - if (m_nview.IsValid() && m_nview.IsOwner()) - { - Destroy(); - } - } - - public void Destroy() - { - CreateDestructionEffects(); - if (m_destroyNoise > 0f) - { - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, 10f); - if ((bool)closestPlayer) - { - closestPlayer.AddNoise(m_destroyNoise); - } - } - if ((bool)m_spawnWhenDestroyed) - { - ZNetView component = UnityEngine.Object.Instantiate(m_spawnWhenDestroyed, base.transform.position, base.transform.rotation).GetComponent<ZNetView>(); - component.SetLocalScale(base.transform.localScale); - component.GetZDO().SetPGWVersion(m_nview.GetZDO().GetPGWVersion()); - } - if (m_onDestroyed != null) - { - m_onDestroyed(); - } - ZNetScene.instance.Destroy(base.gameObject); - m_destroyed = true; - } - - private void CreateDestructionEffects() - { - m_destroyedEffect.Create(base.transform.position, base.transform.rotation, base.transform); - if (m_autoCreateFragments) - { - m_nview.InvokeRPC(ZNetView.Everybody, "CreateFragments"); - } - } - - private void RPC_CreateFragments(long peer) - { - CreateFragments(base.gameObject); - } - - public static void CreateFragments(GameObject rootObject, bool visibleOnly = true) - { - MeshRenderer[] componentsInChildren = rootObject.GetComponentsInChildren<MeshRenderer>(includeInactive: true); - int layer = LayerMask.NameToLayer("effect"); - MeshRenderer[] array = componentsInChildren; - foreach (MeshRenderer meshRenderer in array) - { - if (!meshRenderer.gameObject.activeInHierarchy || (visibleOnly && !meshRenderer.isVisible)) - { - continue; - } - MeshFilter component = meshRenderer.gameObject.GetComponent<MeshFilter>(); - if (!(component == null)) - { - if (component.sharedMesh == null) - { - ZLog.Log("Meshfilter missing mesh " + component.gameObject.name); - continue; - } - ZLog.Log("Creating fragment " + meshRenderer.gameObject.name); - GameObject obj = new GameObject(); - obj.layer = layer; - obj.transform.position = component.gameObject.transform.position; - obj.transform.rotation = component.gameObject.transform.rotation; - obj.transform.localScale = component.gameObject.transform.lossyScale * 0.9f; - obj.AddComponent<MeshFilter>().sharedMesh = component.sharedMesh; - MeshRenderer meshRenderer2 = obj.AddComponent<MeshRenderer>(); - meshRenderer2.sharedMaterials = meshRenderer.sharedMaterials; - meshRenderer2.material.SetFloat("_RippleDistance", 0f); - meshRenderer2.material.SetFloat("_ValueNoise", 0f); - Rigidbody rigidbody = obj.AddComponent<Rigidbody>(); - obj.AddComponent<BoxCollider>(); - rigidbody.AddForce(UnityEngine.Random.onUnitSphere * 2f, ForceMode.VelocityChange); - obj.AddComponent<TimedDestruction>().Trigger(UnityEngine.Random.Range(2, 4)); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/DestructibleType.cs b/Valheim_v202102/Valheim/assembly_valheim/DestructibleType.cs deleted file mode 100644 index 8060cd9..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/DestructibleType.cs +++ /dev/null @@ -1,7 +0,0 @@ -public enum DestructibleType -{ - None = 0, - Default = 1, - Tree = 2, - Character = 4 -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/DistantFogEmitter.cs b/Valheim_v202102/Valheim/assembly_valheim/DistantFogEmitter.cs deleted file mode 100644 index fb42650..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/DistantFogEmitter.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using UnityEngine; - -public class DistantFogEmitter : MonoBehaviour -{ - public float m_interval = 1f; - - public float m_minRadius = 100f; - - public float m_maxRadius = 500f; - - public float m_mountainSpawnChance = 1f; - - public float m_landSpawnChance = 0.5f; - - public float m_waterSpawnChance = 0.25f; - - public float m_mountainLimit = 120f; - - public float m_emitStep = 10f; - - public int m_emitPerStep = 10; - - public int m_particles = 100; - - public float m_placeOffset = 1f; - - public ParticleSystem[] m_psystems; - - public bool m_skipWater; - - private float m_placeTimer; - - private bool m_emit = true; - - private Vector3 m_lastPosition = Vector3.zero; - - public void SetEmit(bool emit) - { - m_emit = emit; - } - - private void Update() - { - if (!m_emit || WorldGenerator.instance == null) - { - return; - } - m_placeTimer += Time.deltaTime; - if (m_placeTimer > m_interval) - { - m_placeTimer = 0f; - int num = Mathf.Max(0, m_particles - TotalNrOfParticles()); - num /= 4; - for (int i = 0; i < num; i++) - { - PlaceOne(); - } - } - } - - private int TotalNrOfParticles() - { - int num = 0; - ParticleSystem[] psystems = m_psystems; - foreach (ParticleSystem particleSystem in psystems) - { - num += particleSystem.particleCount; - } - return num; - } - - private void PlaceOne() - { - if (GetRandomPoint(base.transform.position, out var p)) - { - ParticleSystem.EmitParams emitParams = default(ParticleSystem.EmitParams); - emitParams.position = p + Vector3.up * m_placeOffset; - m_psystems[UnityEngine.Random.Range(0, m_psystems.Length)].Emit(emitParams, 1); - } - } - - private bool GetRandomPoint(Vector3 center, out Vector3 p) - { - float f = UnityEngine.Random.value * (float)Math.PI * 2f; - float num = Mathf.Sqrt(UnityEngine.Random.value) * (m_maxRadius - m_minRadius) + m_minRadius; - p = center + new Vector3(Mathf.Sin(f) * num, 0f, Mathf.Cos(f) * num); - p.y = WorldGenerator.instance.GetHeight(p.x, p.z); - if (p.y < ZoneSystem.instance.m_waterLevel) - { - if (m_skipWater) - { - return false; - } - if (UnityEngine.Random.value > m_waterSpawnChance) - { - return false; - } - p.y = ZoneSystem.instance.m_waterLevel; - } - else if (p.y > m_mountainLimit) - { - if (UnityEngine.Random.value > m_mountainSpawnChance) - { - return false; - } - } - else if (UnityEngine.Random.value > m_landSpawnChance) - { - return false; - } - return true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Door.cs b/Valheim_v202102/Valheim/assembly_valheim/Door.cs deleted file mode 100644 index e9ac2b9..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Door.cs +++ /dev/null @@ -1,166 +0,0 @@ -using UnityEngine; - -public class Door : MonoBehaviour, Hoverable, Interactable -{ - public string m_name = "door"; - - public GameObject m_doorObject; - - public ItemDrop m_keyItem; - - public EffectList m_openEffects = new EffectList(); - - public EffectList m_closeEffects = new EffectList(); - - public EffectList m_lockedEffects = new EffectList(); - - private ZNetView m_nview; - - private Animator m_animator; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_nview.GetZDO() != null) - { - m_animator = GetComponent<Animator>(); - if ((bool)m_nview) - { - m_nview.Register<bool>("UseDoor", RPC_UseDoor); - } - InvokeRepeating("UpdateState", 0f, 0.2f); - } - } - - private void UpdateState() - { - if (m_nview.IsValid()) - { - int @int = m_nview.GetZDO().GetInt("state"); - SetState(@int); - } - } - - private void SetState(int state) - { - if (m_animator.GetInteger("state") != state) - { - if (state != 0) - { - m_openEffects.Create(base.transform.position, base.transform.rotation); - } - else - { - m_closeEffects.Create(base.transform.position, base.transform.rotation); - } - m_animator.SetInteger("state", state); - } - } - - private bool CanInteract() - { - if (m_keyItem != null && m_nview.GetZDO().GetInt("state") != 0) - { - return false; - } - if (!m_animator.GetCurrentAnimatorStateInfo(0).IsTag("open")) - { - return m_animator.GetCurrentAnimatorStateInfo(0).IsTag("closed"); - } - return true; - } - - public string GetHoverText() - { - if (!m_nview.IsValid()) - { - return ""; - } - if (!PrivateArea.CheckAccess(base.transform.position, 0f, flash: false)) - { - return Localization.instance.Localize(m_name + "\n$piece_noaccess"); - } - if (CanInteract()) - { - if (m_nview.GetZDO().GetInt("state") != 0) - { - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_door_close"); - } - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_door_open"); - } - return Localization.instance.Localize(m_name); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - if (!CanInteract()) - { - return false; - } - if (!PrivateArea.CheckAccess(base.transform.position)) - { - return true; - } - if (m_keyItem != null) - { - if (!HaveKey(character)) - { - m_lockedEffects.Create(base.transform.position, base.transform.rotation); - character.Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_door_needkey", m_keyItem.m_itemData.m_shared.m_name)); - return true; - } - character.Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_door_usingkey", m_keyItem.m_itemData.m_shared.m_name)); - } - Vector3 normalized = (character.transform.position - base.transform.position).normalized; - bool flag = Vector3.Dot(base.transform.forward, normalized) < 0f; - m_nview.InvokeRPC("UseDoor", flag); - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private bool HaveKey(Humanoid player) - { - if (m_keyItem == null) - { - return true; - } - return player.GetInventory().HaveItem(m_keyItem.m_itemData.m_shared.m_name); - } - - private void RPC_UseDoor(long uid, bool forward) - { - if (!CanInteract()) - { - return; - } - if (m_nview.GetZDO().GetInt("state") == 0) - { - if (forward) - { - m_nview.GetZDO().Set("state", 1); - } - else - { - m_nview.GetZDO().Set("state", -1); - } - } - else - { - m_nview.GetZDO().Set("state", 0); - } - UpdateState(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/DreamTexts.cs b/Valheim_v202102/Valheim/assembly_valheim/DreamTexts.cs deleted file mode 100644 index 4c2b44d..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/DreamTexts.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class DreamTexts : MonoBehaviour -{ - [Serializable] - public class DreamText - { - public string m_text = "Fluffy sheep"; - - public float m_chanceToDream = 0.1f; - - public List<string> m_trueKeys = new List<string>(); - - public List<string> m_falseKeys = new List<string>(); - } - - public List<DreamText> m_texts = new List<DreamText>(); - - public DreamText GetRandomDreamText() - { - List<DreamText> list = new List<DreamText>(); - foreach (DreamText text in m_texts) - { - if (HaveGlobalKeys(text)) - { - list.Add(text); - } - } - if (list.Count == 0) - { - return null; - } - DreamText dreamText = list[UnityEngine.Random.Range(0, list.Count)]; - if (UnityEngine.Random.value <= dreamText.m_chanceToDream) - { - return dreamText; - } - return null; - } - - private bool HaveGlobalKeys(DreamText dream) - { - foreach (string trueKey in dream.m_trueKeys) - { - if (!ZoneSystem.instance.GetGlobalKey(trueKey)) - { - return false; - } - } - foreach (string falseKey in dream.m_falseKeys) - { - if (ZoneSystem.instance.GetGlobalKey(falseKey)) - { - return false; - } - } - return true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/DropOnDestroyed.cs b/Valheim_v202102/Valheim/assembly_valheim/DropOnDestroyed.cs deleted file mode 100644 index 99df9bd..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/DropOnDestroyed.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class DropOnDestroyed : MonoBehaviour -{ - [Header("Drops")] - public DropTable m_dropWhenDestroyed = new DropTable(); - - public float m_spawnYOffset = 0.5f; - - public float m_spawnYStep = 0.3f; - - private void Awake() - { - IDestructible component = GetComponent<IDestructible>(); - Destructible destructible = component as Destructible; - if ((bool)destructible) - { - destructible.m_onDestroyed = (Action)Delegate.Combine(destructible.m_onDestroyed, new Action(OnDestroyed)); - } - WearNTear wearNTear = component as WearNTear; - if ((bool)wearNTear) - { - wearNTear.m_onDestroyed = (Action)Delegate.Combine(wearNTear.m_onDestroyed, new Action(OnDestroyed)); - } - } - - private void OnDestroyed() - { - float groundHeight = ZoneSystem.instance.GetGroundHeight(base.transform.position); - Vector3 position = base.transform.position; - if (position.y < groundHeight) - { - position.y = groundHeight + 0.1f; - } - List<GameObject> dropList = m_dropWhenDestroyed.GetDropList(); - for (int i = 0; i < dropList.Count; i++) - { - Vector2 vector = UnityEngine.Random.insideUnitCircle * 0.5f; - Vector3 position2 = position + Vector3.up * m_spawnYOffset + new Vector3(vector.x, m_spawnYStep * (float)i, vector.y); - Quaternion rotation = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f); - UnityEngine.Object.Instantiate(dropList[i], position2, rotation); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/DropTable.cs b/Valheim_v202102/Valheim/assembly_valheim/DropTable.cs deleted file mode 100644 index b50151a..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/DropTable.cs +++ /dev/null @@ -1,152 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -[Serializable] -public class DropTable -{ - [Serializable] - public struct DropData - { - public GameObject m_item; - - public int m_stackMin; - - public int m_stackMax; - - public float m_weight; - } - - public List<DropData> m_drops = new List<DropData>(); - - public int m_dropMin = 1; - - public int m_dropMax = 1; - - [Range(0f, 1f)] - public float m_dropChance = 1f; - - public bool m_oneOfEach; - - public DropTable Clone() - { - return MemberwiseClone() as DropTable; - } - - public List<ItemDrop.ItemData> GetDropListItems() - { - List<ItemDrop.ItemData> list = new List<ItemDrop.ItemData>(); - if (m_drops.Count == 0) - { - return list; - } - if (UnityEngine.Random.value > m_dropChance) - { - return list; - } - List<DropData> list2 = new List<DropData>(m_drops); - float num = 0f; - foreach (DropData item in list2) - { - num += item.m_weight; - } - int num2 = UnityEngine.Random.Range(m_dropMin, m_dropMax + 1); - for (int i = 0; i < num2; i++) - { - float num3 = UnityEngine.Random.Range(0f, num); - bool flag = false; - float num4 = 0f; - foreach (DropData item2 in list2) - { - num4 += item2.m_weight; - if (num3 <= num4) - { - flag = true; - AddItemToList(list, item2); - if (m_oneOfEach) - { - list2.Remove(item2); - num -= item2.m_weight; - } - break; - } - } - if (!flag && list2.Count > 0) - { - AddItemToList(list, list2[0]); - } - } - return list; - } - - private void AddItemToList(List<ItemDrop.ItemData> toDrop, DropData data) - { - ItemDrop.ItemData itemData = data.m_item.GetComponent<ItemDrop>().m_itemData; - ItemDrop.ItemData itemData2 = itemData.Clone(); - itemData2.m_dropPrefab = data.m_item; - int min = Mathf.Max(1, data.m_stackMin); - int num = Mathf.Min(itemData.m_shared.m_maxStackSize, data.m_stackMax); - itemData2.m_stack = UnityEngine.Random.Range(min, num + 1); - toDrop.Add(itemData2); - } - - public List<GameObject> GetDropList() - { - int amount = UnityEngine.Random.Range(m_dropMin, m_dropMax + 1); - return GetDropList(amount); - } - - private List<GameObject> GetDropList(int amount) - { - List<GameObject> list = new List<GameObject>(); - if (m_drops.Count == 0) - { - return list; - } - if (UnityEngine.Random.value > m_dropChance) - { - return list; - } - List<DropData> list2 = new List<DropData>(m_drops); - float num = 0f; - foreach (DropData item in list2) - { - num += item.m_weight; - } - for (int i = 0; i < amount; i++) - { - float num2 = UnityEngine.Random.Range(0f, num); - bool flag = false; - float num3 = 0f; - foreach (DropData item2 in list2) - { - num3 += item2.m_weight; - if (num2 <= num3) - { - flag = true; - int num4 = UnityEngine.Random.Range(item2.m_stackMin, item2.m_stackMax); - for (int j = 0; j < num4; j++) - { - list.Add(item2.m_item); - } - if (m_oneOfEach) - { - list2.Remove(item2); - num -= item2.m_weight; - } - break; - } - } - if (!flag && list2.Count > 0) - { - list.Add(list2[0].m_item); - } - } - return list; - } - - public bool IsEmpty() - { - return m_drops.Count == 0; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/DungeonDB.cs b/Valheim_v202102/Valheim/assembly_valheim/DungeonDB.cs deleted file mode 100644 index d6a7d35..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/DungeonDB.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.SceneManagement; - -public class DungeonDB : MonoBehaviour -{ - public class RoomData - { - public Room m_room; - - [NonSerialized] - public List<ZNetView> m_netViews = new List<ZNetView>(); - - [NonSerialized] - public List<RandomSpawn> m_randomSpawns = new List<RandomSpawn>(); - } - - private static DungeonDB m_instance; - - private List<RoomData> m_rooms = new List<RoomData>(); - - private Dictionary<int, RoomData> m_roomByHash = new Dictionary<int, RoomData>(); - - private bool m_error; - - public static DungeonDB instance => m_instance; - - private void Awake() - { - m_instance = this; - SceneManager.LoadScene("rooms", LoadSceneMode.Additive); - ZLog.Log("DungeonDB Awake " + Time.frameCount); - } - - public bool SkipSaving() - { - return m_error; - } - - private void Start() - { - ZLog.Log("DungeonDB Start " + Time.frameCount); - m_rooms = SetupRooms(); - GenerateHashList(); - } - - public static List<RoomData> GetRooms() - { - return m_instance.m_rooms; - } - - private static List<RoomData> SetupRooms() - { - GameObject[] array = Resources.FindObjectsOfTypeAll<GameObject>(); - GameObject gameObject = null; - GameObject[] array2 = array; - foreach (GameObject gameObject2 in array2) - { - if (gameObject2.name == "_Rooms") - { - gameObject = gameObject2; - break; - } - } - if (gameObject == null || ((bool)m_instance && gameObject.activeSelf)) - { - if ((bool)m_instance) - { - m_instance.m_error = true; - } - ZLog.LogError("Rooms are fucked, missing _Rooms or its enabled"); - } - List<RoomData> list = new List<RoomData>(); - for (int j = 0; j < gameObject.transform.childCount; j++) - { - Room component = gameObject.transform.GetChild(j).GetComponent<Room>(); - RoomData roomData = new RoomData(); - roomData.m_room = component; - ZoneSystem.PrepareNetViews(component.gameObject, roomData.m_netViews); - ZoneSystem.PrepareRandomSpawns(component.gameObject, roomData.m_randomSpawns); - list.Add(roomData); - } - return list; - } - - public RoomData GetRoom(int hash) - { - if (m_roomByHash.TryGetValue(hash, out var value)) - { - return value; - } - return null; - } - - private void GenerateHashList() - { - m_roomByHash.Clear(); - foreach (RoomData room in m_rooms) - { - int stableHashCode = room.m_room.gameObject.name.GetStableHashCode(); - m_roomByHash.Add(stableHashCode, room); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/DungeonGenerator.cs b/Valheim_v202102/Valheim/assembly_valheim/DungeonGenerator.cs deleted file mode 100644 index f7a73aa..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/DungeonGenerator.cs +++ /dev/null @@ -1,787 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; - -public class DungeonGenerator : MonoBehaviour -{ - [Serializable] - public class DoorDef - { - public GameObject m_prefab; - - public string m_connectionType = ""; - } - - public enum Algorithm - { - Dungeon, - CampGrid, - CampRadial - } - - public Algorithm m_algorithm; - - public int m_maxRooms = 3; - - public int m_minRooms = 20; - - public int m_minRequiredRooms; - - public List<string> m_requiredRooms = new List<string>(); - - [BitMask(typeof(Room.Theme))] - public Room.Theme m_themes = Room.Theme.Crypt; - - [Header("Dungeon")] - public List<DoorDef> m_doorTypes = new List<DoorDef>(); - - [Range(0f, 1f)] - public float m_doorChance = 0.5f; - - [Header("Camp")] - public float m_maxTilt = 10f; - - public float m_tileWidth = 8f; - - public int m_gridSize = 4; - - public float m_spawnChance = 1f; - - [Header("Camp radial")] - public float m_campRadiusMin = 15f; - - public float m_campRadiusMax = 30f; - - public float m_minAltitude = 1f; - - public int m_perimeterSections; - - public float m_perimeterBuffer = 2f; - - [Header("Misc")] - public Vector3 m_zoneCenter = new Vector3(0f, 0f, 0f); - - public Vector3 m_zoneSize = new Vector3(64f, 64f, 64f); - - private static List<Room> m_placedRooms = new List<Room>(); - - private static List<RoomConnection> m_openConnections = new List<RoomConnection>(); - - private static List<RoomConnection> m_doorConnections = new List<RoomConnection>(); - - private static List<DungeonDB.RoomData> m_availableRooms = new List<DungeonDB.RoomData>(); - - private static List<DungeonDB.RoomData> m_tempRooms = new List<DungeonDB.RoomData>(); - - private BoxCollider m_colliderA; - - private BoxCollider m_colliderB; - - private ZNetView m_nview; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - Load(); - } - - public void Clear() - { - while (base.transform.childCount > 0) - { - UnityEngine.Object.DestroyImmediate(base.transform.GetChild(0).gameObject); - } - } - - public void Generate(ZoneSystem.SpawnMode mode) - { - int seed = WorldGenerator.instance.GetSeed(); - Vector2i zone = ZoneSystem.instance.GetZone(base.transform.position); - int seed2 = seed + zone.x * 4271 + zone.y * 9187; - Generate(seed2, mode); - } - - public void Generate(int seed, ZoneSystem.SpawnMode mode) - { - DateTime now = DateTime.Now; - Clear(); - SetupColliders(); - SetupAvailableRooms(); - if ((bool)ZoneSystem.instance) - { - Vector2i zone = ZoneSystem.instance.GetZone(base.transform.position); - m_zoneCenter = ZoneSystem.instance.GetZonePos(zone); - m_zoneCenter.y = base.transform.position.y; - } - ZLog.Log("Available rooms:" + m_availableRooms.Count); - ZLog.Log("To place:" + m_maxRooms); - m_placedRooms.Clear(); - m_openConnections.Clear(); - m_doorConnections.Clear(); - UnityEngine.Random.State state = UnityEngine.Random.state; - UnityEngine.Random.InitState(seed); - GenerateRooms(mode); - Save(); - ZLog.Log("Placed " + m_placedRooms.Count + " rooms"); - UnityEngine.Random.state = state; - SnapToGround.SnappAll(); - if (mode == ZoneSystem.SpawnMode.Ghost) - { - foreach (Room placedRoom in m_placedRooms) - { - UnityEngine.Object.DestroyImmediate(placedRoom.gameObject); - } - } - m_placedRooms.Clear(); - m_openConnections.Clear(); - m_doorConnections.Clear(); - UnityEngine.Object.DestroyImmediate(m_colliderA); - UnityEngine.Object.DestroyImmediate(m_colliderB); - _ = DateTime.Now - now; - } - - private void GenerateRooms(ZoneSystem.SpawnMode mode) - { - switch (m_algorithm) - { - case Algorithm.Dungeon: - GenerateDungeon(mode); - break; - case Algorithm.CampGrid: - GenerateCampGrid(mode); - break; - case Algorithm.CampRadial: - GenerateCampRadial(mode); - break; - } - } - - private void GenerateDungeon(ZoneSystem.SpawnMode mode) - { - PlaceStartRoom(mode); - PlaceRooms(mode); - PlaceEndCaps(mode); - PlaceDoors(mode); - } - - private void GenerateCampGrid(ZoneSystem.SpawnMode mode) - { - float num = Mathf.Cos((float)Math.PI / 180f * m_maxTilt); - Vector3 vector = base.transform.position + new Vector3((float)(-m_gridSize) * m_tileWidth * 0.5f, 0f, (float)(-m_gridSize) * m_tileWidth * 0.5f); - for (int i = 0; i < m_gridSize; i++) - { - for (int j = 0; j < m_gridSize; j++) - { - if (UnityEngine.Random.value > m_spawnChance) - { - continue; - } - Vector3 p = vector + new Vector3((float)j * m_tileWidth, 0f, (float)i * m_tileWidth); - DungeonDB.RoomData randomWeightedRoom = GetRandomWeightedRoom(perimeterRoom: false); - if (randomWeightedRoom == null) - { - continue; - } - if ((bool)ZoneSystem.instance) - { - ZoneSystem.instance.GetGroundData(ref p, out var normal, out var _, out var _, out var _); - if (normal.y < num) - { - continue; - } - } - Quaternion rot = Quaternion.Euler(0f, (float)UnityEngine.Random.Range(0, 16) * 22.5f, 0f); - PlaceRoom(randomWeightedRoom, p, rot, null, mode); - } - } - } - - private void GenerateCampRadial(ZoneSystem.SpawnMode mode) - { - float num = UnityEngine.Random.Range(m_campRadiusMin, m_campRadiusMax); - float num2 = Mathf.Cos((float)Math.PI / 180f * m_maxTilt); - int num3 = UnityEngine.Random.Range(m_minRooms, m_maxRooms); - int num4 = num3 * 20; - int num5 = 0; - for (int i = 0; i < num4; i++) - { - Vector3 p = base.transform.position + Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f) * Vector3.forward * UnityEngine.Random.Range(0f, num - m_perimeterBuffer); - DungeonDB.RoomData randomWeightedRoom = GetRandomWeightedRoom(perimeterRoom: false); - if (randomWeightedRoom == null) - { - continue; - } - if ((bool)ZoneSystem.instance) - { - ZoneSystem.instance.GetGroundData(ref p, out var normal, out var _, out var _, out var _); - if (normal.y < num2 || p.y - ZoneSystem.instance.m_waterLevel < m_minAltitude) - { - continue; - } - } - Quaternion campRoomRotation = GetCampRoomRotation(randomWeightedRoom, p); - if (!TestCollision(randomWeightedRoom.m_room, p, campRoomRotation)) - { - PlaceRoom(randomWeightedRoom, p, campRoomRotation, null, mode); - num5++; - if (num5 >= num3) - { - break; - } - } - } - if (m_perimeterSections > 0) - { - PlaceWall(num, m_perimeterSections, mode); - } - } - - private Quaternion GetCampRoomRotation(DungeonDB.RoomData room, Vector3 pos) - { - if (room.m_room.m_faceCenter) - { - Vector3 vector = base.transform.position - pos; - vector.y = 0f; - if (vector == Vector3.zero) - { - vector = Vector3.forward; - } - vector.Normalize(); - float y = Mathf.Round(Utils.YawFromDirection(vector) / 22.5f) * 22.5f; - return Quaternion.Euler(0f, y, 0f); - } - return Quaternion.Euler(0f, (float)UnityEngine.Random.Range(0, 16) * 22.5f, 0f); - } - - private void PlaceWall(float radius, int sections, ZoneSystem.SpawnMode mode) - { - float num = Mathf.Cos((float)Math.PI / 180f * m_maxTilt); - int num2 = 0; - int num3 = sections * 20; - for (int i = 0; i < num3; i++) - { - DungeonDB.RoomData randomWeightedRoom = GetRandomWeightedRoom(perimeterRoom: true); - if (randomWeightedRoom == null) - { - continue; - } - Vector3 p = base.transform.position + Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f) * Vector3.forward * radius; - Quaternion campRoomRotation = GetCampRoomRotation(randomWeightedRoom, p); - if ((bool)ZoneSystem.instance) - { - ZoneSystem.instance.GetGroundData(ref p, out var normal, out var _, out var _, out var _); - if (normal.y < num || p.y - ZoneSystem.instance.m_waterLevel < m_minAltitude) - { - continue; - } - } - if (!TestCollision(randomWeightedRoom.m_room, p, campRoomRotation)) - { - PlaceRoom(randomWeightedRoom, p, campRoomRotation, null, mode); - num2++; - if (num2 >= sections) - { - break; - } - } - } - } - - private void Save() - { - if (!(m_nview == null)) - { - ZDO zDO = m_nview.GetZDO(); - zDO.Set("rooms", m_placedRooms.Count); - for (int i = 0; i < m_placedRooms.Count; i++) - { - Room room = m_placedRooms[i]; - string text = "room" + i; - zDO.Set(text, room.GetHash()); - zDO.Set(text + "_pos", room.transform.position); - zDO.Set(text + "_rot", room.transform.rotation); - } - } - } - - private void Load() - { - if (m_nview == null) - { - return; - } - DateTime now = DateTime.Now; - ZLog.Log("Loading dungeon"); - ZDO zDO = m_nview.GetZDO(); - int @int = zDO.GetInt("rooms"); - for (int i = 0; i < @int; i++) - { - string text = "room" + i; - int int2 = zDO.GetInt(text); - Vector3 vec = zDO.GetVec3(text + "_pos", Vector3.zero); - Quaternion quaternion = zDO.GetQuaternion(text + "_rot", Quaternion.identity); - DungeonDB.RoomData room = DungeonDB.instance.GetRoom(int2); - if (room == null) - { - ZLog.LogWarning("Missing room:" + int2); - } - else - { - PlaceRoom(room, vec, quaternion, null, ZoneSystem.SpawnMode.Client); - } - } - ZLog.Log("Dungeon loaded " + @int); - ZLog.Log("Dungeon load time " + (DateTime.Now - now).TotalMilliseconds + " ms"); - } - - private void SetupAvailableRooms() - { - m_availableRooms.Clear(); - foreach (DungeonDB.RoomData room in DungeonDB.GetRooms()) - { - if ((room.m_room.m_theme & m_themes) != 0 && room.m_room.m_enabled) - { - m_availableRooms.Add(room); - } - } - } - - private DoorDef FindDoorType(string type) - { - List<DoorDef> list = new List<DoorDef>(); - foreach (DoorDef doorType in m_doorTypes) - { - if (doorType.m_connectionType == type) - { - list.Add(doorType); - } - } - if (list.Count == 0) - { - return null; - } - return list[UnityEngine.Random.Range(0, list.Count)]; - } - - private void PlaceDoors(ZoneSystem.SpawnMode mode) - { - int num = 0; - foreach (RoomConnection doorConnection in m_doorConnections) - { - if (UnityEngine.Random.value > m_doorChance) - { - continue; - } - DoorDef doorDef = FindDoorType(doorConnection.m_type); - if (doorDef == null) - { - ZLog.Log("No door type for connection:" + doorConnection.m_type); - continue; - } - GameObject obj = UnityEngine.Object.Instantiate(doorDef.m_prefab, doorConnection.transform.position, doorConnection.transform.rotation); - if (mode == ZoneSystem.SpawnMode.Ghost) - { - UnityEngine.Object.Destroy(obj); - } - num++; - } - ZLog.Log("placed " + num + " doors"); - } - - private void PlaceEndCaps(ZoneSystem.SpawnMode mode) - { - for (int i = 0; i < m_openConnections.Count; i++) - { - RoomConnection roomConnection = m_openConnections[i]; - bool flag = false; - for (int j = 0; j < m_openConnections.Count; j++) - { - if (j != i && roomConnection.TestContact(m_openConnections[j])) - { - flag = true; - break; - } - } - if (flag) - { - ZLog.Log("cyclic detected , cool"); - continue; - } - FindEndCaps(roomConnection, m_tempRooms); - IOrderedEnumerable<DungeonDB.RoomData> orderedEnumerable = m_tempRooms.OrderByDescending((DungeonDB.RoomData item) => item.m_room.m_endCapPrio); - bool flag2 = false; - foreach (DungeonDB.RoomData item in orderedEnumerable) - { - if (PlaceRoom(roomConnection, item, mode)) - { - flag2 = true; - break; - } - } - if (!flag2) - { - ZLog.LogWarning("Failed to place end cap " + roomConnection.name + " " + roomConnection.transform.parent.gameObject.name); - } - } - } - - private void FindEndCaps(RoomConnection connection, List<DungeonDB.RoomData> rooms) - { - rooms.Clear(); - foreach (DungeonDB.RoomData availableRoom in m_availableRooms) - { - if (availableRoom.m_room.m_endCap && availableRoom.m_room.HaveConnection(connection)) - { - rooms.Add(availableRoom); - } - } - rooms.Shuffle(); - } - - private DungeonDB.RoomData FindEndCap(RoomConnection connection) - { - m_tempRooms.Clear(); - foreach (DungeonDB.RoomData availableRoom in m_availableRooms) - { - if (availableRoom.m_room.m_endCap && availableRoom.m_room.HaveConnection(connection)) - { - m_tempRooms.Add(availableRoom); - } - } - if (m_tempRooms.Count == 0) - { - return null; - } - return m_tempRooms[UnityEngine.Random.Range(0, m_tempRooms.Count)]; - } - - private void PlaceRooms(ZoneSystem.SpawnMode mode) - { - for (int i = 0; i < m_maxRooms; i++) - { - PlaceOneRoom(mode); - if (CheckRequiredRooms() && m_placedRooms.Count > m_minRooms) - { - ZLog.Log("All required rooms have been placed, stopping generation"); - break; - } - } - } - - private void PlaceStartRoom(ZoneSystem.SpawnMode mode) - { - DungeonDB.RoomData roomData = FindStartRoom(); - RoomConnection entrance = roomData.m_room.GetEntrance(); - Quaternion rotation = base.transform.rotation; - CalculateRoomPosRot(entrance, base.transform.position, rotation, out var pos, out var rot); - PlaceRoom(roomData, pos, rot, entrance, mode); - } - - private bool PlaceOneRoom(ZoneSystem.SpawnMode mode) - { - RoomConnection openConnection = GetOpenConnection(); - if (openConnection == null) - { - return false; - } - for (int i = 0; i < 10; i++) - { - DungeonDB.RoomData randomRoom = GetRandomRoom(openConnection); - if (randomRoom == null) - { - break; - } - if (PlaceRoom(openConnection, randomRoom, mode)) - { - return true; - } - } - return false; - } - - private void CalculateRoomPosRot(RoomConnection roomCon, Vector3 exitPos, Quaternion exitRot, out Vector3 pos, out Quaternion rot) - { - Quaternion quaternion = Quaternion.Inverse(roomCon.transform.localRotation); - rot = exitRot * quaternion; - Vector3 localPosition = roomCon.transform.localPosition; - pos = exitPos - rot * localPosition; - } - - private bool PlaceRoom(RoomConnection connection, DungeonDB.RoomData roomData, ZoneSystem.SpawnMode mode) - { - Room room = roomData.m_room; - Quaternion rotation = connection.transform.rotation; - rotation *= Quaternion.Euler(0f, 180f, 0f); - RoomConnection connection2 = room.GetConnection(connection); - CalculateRoomPosRot(connection2, connection.transform.position, rotation, out var pos, out var rot); - if (room.m_size.x != 0 && room.m_size.z != 0 && TestCollision(room, pos, rot)) - { - return false; - } - PlaceRoom(roomData, pos, rot, connection, mode); - if (!room.m_endCap) - { - if (connection.m_allowDoor) - { - m_doorConnections.Add(connection); - } - m_openConnections.Remove(connection); - } - return true; - } - - private void PlaceRoom(DungeonDB.RoomData room, Vector3 pos, Quaternion rot, RoomConnection fromConnection, ZoneSystem.SpawnMode mode) - { - int seed = (int)pos.x * 4271 + (int)pos.y * 9187 + (int)pos.z * 2134; - UnityEngine.Random.State state = UnityEngine.Random.state; - UnityEngine.Random.InitState(seed); - if (mode == ZoneSystem.SpawnMode.Full || mode == ZoneSystem.SpawnMode.Ghost) - { - foreach (ZNetView netView in room.m_netViews) - { - netView.gameObject.SetActive(value: true); - } - foreach (RandomSpawn randomSpawn in room.m_randomSpawns) - { - randomSpawn.Randomize(); - } - Vector3 position = room.m_room.transform.position; - Quaternion quaternion = Quaternion.Inverse(room.m_room.transform.rotation); - foreach (ZNetView netView2 in room.m_netViews) - { - if (netView2.gameObject.activeSelf) - { - Vector3 vector = quaternion * (netView2.gameObject.transform.position - position); - Vector3 position2 = pos + rot * vector; - Quaternion quaternion2 = quaternion * netView2.gameObject.transform.rotation; - Quaternion rotation = rot * quaternion2; - GameObject gameObject = UnityEngine.Object.Instantiate(netView2.gameObject, position2, rotation); - ZNetView component = gameObject.GetComponent<ZNetView>(); - if (component.GetZDO() != null) - { - component.GetZDO().SetPGWVersion(ZoneSystem.instance.m_pgwVersion); - } - if (mode == ZoneSystem.SpawnMode.Ghost) - { - UnityEngine.Object.Destroy(gameObject); - } - } - } - } - else - { - foreach (RandomSpawn randomSpawn2 in room.m_randomSpawns) - { - randomSpawn2.Randomize(); - } - } - foreach (ZNetView netView3 in room.m_netViews) - { - netView3.gameObject.SetActive(value: false); - } - Room component2 = UnityEngine.Object.Instantiate(room.m_room.gameObject, pos, rot, base.transform).GetComponent<Room>(); - component2.gameObject.name = room.m_room.gameObject.name; - if (mode != ZoneSystem.SpawnMode.Client) - { - component2.m_placeOrder = (fromConnection ? (fromConnection.m_placeOrder + 1) : 0); - m_placedRooms.Add(component2); - AddOpenConnections(component2, fromConnection); - } - UnityEngine.Random.state = state; - } - - private void AddOpenConnections(Room newRoom, RoomConnection skipConnection) - { - RoomConnection[] connections = newRoom.GetConnections(); - if (skipConnection != null) - { - RoomConnection[] array = connections; - foreach (RoomConnection roomConnection in array) - { - if (!roomConnection.m_entrance && !(Vector3.Distance(roomConnection.transform.position, skipConnection.transform.position) < 0.1f)) - { - roomConnection.m_placeOrder = newRoom.m_placeOrder; - m_openConnections.Add(roomConnection); - } - } - } - else - { - RoomConnection[] array = connections; - for (int i = 0; i < array.Length; i++) - { - array[i].m_placeOrder = newRoom.m_placeOrder; - } - m_openConnections.AddRange(connections); - } - } - - private void SetupColliders() - { - if (!(m_colliderA != null)) - { - BoxCollider[] componentsInChildren = base.gameObject.GetComponentsInChildren<BoxCollider>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - UnityEngine.Object.DestroyImmediate(componentsInChildren[i]); - } - m_colliderA = base.gameObject.AddComponent<BoxCollider>(); - m_colliderB = base.gameObject.AddComponent<BoxCollider>(); - } - } - - public void Derp() - { - } - - private bool IsInsideDungeon(Room room, Vector3 pos, Quaternion rot) - { - Bounds bounds = new Bounds(m_zoneCenter, m_zoneSize); - Vector3 vector = room.m_size; - vector *= 0.5f; - if (!bounds.Contains(pos + rot * new Vector3(vector.x, vector.y, 0f - vector.z))) - { - return false; - } - if (!bounds.Contains(pos + rot * new Vector3(0f - vector.x, vector.y, 0f - vector.z))) - { - return false; - } - if (!bounds.Contains(pos + rot * new Vector3(vector.x, vector.y, vector.z))) - { - return false; - } - if (!bounds.Contains(pos + rot * new Vector3(0f - vector.x, vector.y, vector.z))) - { - return false; - } - if (!bounds.Contains(pos + rot * new Vector3(vector.x, 0f - vector.y, 0f - vector.z))) - { - return false; - } - if (!bounds.Contains(pos + rot * new Vector3(0f - vector.x, 0f - vector.y, 0f - vector.z))) - { - return false; - } - if (!bounds.Contains(pos + rot * new Vector3(vector.x, 0f - vector.y, vector.z))) - { - return false; - } - if (!bounds.Contains(pos + rot * new Vector3(0f - vector.x, 0f - vector.y, vector.z))) - { - return false; - } - return true; - } - - private bool TestCollision(Room room, Vector3 pos, Quaternion rot) - { - if (!IsInsideDungeon(room, pos, rot)) - { - return true; - } - m_colliderA.size = new Vector3((float)room.m_size.x - 0.1f, (float)room.m_size.y - 0.1f, (float)room.m_size.z - 0.1f); - foreach (Room placedRoom in m_placedRooms) - { - m_colliderB.size = placedRoom.m_size; - if (Physics.ComputePenetration(m_colliderA, pos, rot, m_colliderB, placedRoom.transform.position, placedRoom.transform.rotation, out var _, out var _)) - { - return true; - } - } - return false; - } - - private DungeonDB.RoomData GetRandomWeightedRoom(bool perimeterRoom) - { - m_tempRooms.Clear(); - float num = 0f; - foreach (DungeonDB.RoomData availableRoom in m_availableRooms) - { - if (!availableRoom.m_room.m_entrance && !availableRoom.m_room.m_endCap && availableRoom.m_room.m_perimeter == perimeterRoom) - { - num += availableRoom.m_room.m_weight; - m_tempRooms.Add(availableRoom); - } - } - if (m_tempRooms.Count == 0) - { - return null; - } - float num2 = UnityEngine.Random.Range(0f, num); - float num3 = 0f; - foreach (DungeonDB.RoomData tempRoom in m_tempRooms) - { - num3 += tempRoom.m_room.m_weight; - if (num2 <= num3) - { - return tempRoom; - } - } - return m_tempRooms[0]; - } - - private DungeonDB.RoomData GetRandomRoom(RoomConnection connection) - { - m_tempRooms.Clear(); - foreach (DungeonDB.RoomData availableRoom in m_availableRooms) - { - if (!availableRoom.m_room.m_entrance && !availableRoom.m_room.m_endCap && (!connection || (availableRoom.m_room.HaveConnection(connection) && connection.m_placeOrder >= availableRoom.m_room.m_minPlaceOrder))) - { - m_tempRooms.Add(availableRoom); - } - } - if (m_tempRooms.Count == 0) - { - return null; - } - return m_tempRooms[UnityEngine.Random.Range(0, m_tempRooms.Count)]; - } - - private RoomConnection GetOpenConnection() - { - if (m_openConnections.Count == 0) - { - return null; - } - return m_openConnections[UnityEngine.Random.Range(0, m_openConnections.Count)]; - } - - private DungeonDB.RoomData FindStartRoom() - { - m_tempRooms.Clear(); - foreach (DungeonDB.RoomData availableRoom in m_availableRooms) - { - if (availableRoom.m_room.m_entrance) - { - m_tempRooms.Add(availableRoom); - } - } - return m_tempRooms[UnityEngine.Random.Range(0, m_tempRooms.Count)]; - } - - private bool CheckRequiredRooms() - { - if (m_minRequiredRooms == 0 || m_requiredRooms.Count == 0) - { - return false; - } - int num = 0; - foreach (Room placedRoom in m_placedRooms) - { - if (m_requiredRooms.Contains(placedRoom.gameObject.name)) - { - num++; - } - } - return num >= m_minRequiredRooms; - } - - private void OnDrawGizmos() - { - Gizmos.color = new Color(0f, 1.5f, 0f, 0.5f); - Gizmos.DrawWireCube(m_zoneCenter, new Vector3(m_zoneSize.x, m_zoneSize.y, m_zoneSize.z)); - Gizmos.matrix = Matrix4x4.identity; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/EffectArea.cs b/Valheim_v202102/Valheim/assembly_valheim/EffectArea.cs deleted file mode 100644 index 0fbedb1..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/EffectArea.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class EffectArea : MonoBehaviour -{ - public enum Type - { - Heat = 1, - Fire = 2, - PlayerBase = 4, - Burning = 8, - Teleport = 16, - NoMonsters = 32, - None = 999 - } - - [BitMask(typeof(Type))] - public Type m_type = Type.None; - - public string m_statusEffect = ""; - - private Collider m_collider; - - private static int m_characterMask = 0; - - private static List<EffectArea> m_allAreas = new List<EffectArea>(); - - private static Collider[] m_tempColliders = new Collider[128]; - - private void Awake() - { - if (m_characterMask == 0) - { - m_characterMask = LayerMask.GetMask("character_trigger"); - } - m_collider = GetComponent<Collider>(); - m_allAreas.Add(this); - } - - private void OnDestroy() - { - m_allAreas.Remove(this); - } - - private void OnTriggerStay(Collider collider) - { - if (ZNet.instance == null) - { - return; - } - Character component = collider.GetComponent<Character>(); - if ((bool)component && component.IsOwner()) - { - if (!string.IsNullOrEmpty(m_statusEffect)) - { - component.GetSEMan().AddStatusEffect(m_statusEffect, resetTime: true); - } - if ((m_type & Type.Heat) != 0) - { - component.OnNearFire(base.transform.position); - } - } - } - - public float GetRadius() - { - SphereCollider sphereCollider = m_collider as SphereCollider; - if (sphereCollider != null) - { - return sphereCollider.radius; - } - return m_collider.bounds.size.magnitude; - } - - public static EffectArea IsPointInsideArea(Vector3 p, Type type, float radius = 0f) - { - int num = Physics.OverlapSphereNonAlloc(p, radius, m_tempColliders, m_characterMask); - for (int i = 0; i < num; i++) - { - EffectArea component = m_tempColliders[i].GetComponent<EffectArea>(); - if ((bool)component && (component.m_type & type) != 0) - { - return component; - } - } - return null; - } - - public static int GetBaseValue(Vector3 p, float radius) - { - int num = 0; - int num2 = Physics.OverlapSphereNonAlloc(p, radius, m_tempColliders, m_characterMask); - for (int i = 0; i < num2; i++) - { - EffectArea component = m_tempColliders[i].GetComponent<EffectArea>(); - if ((bool)component && (component.m_type & Type.PlayerBase) != 0) - { - num++; - } - } - return num; - } - - public static List<EffectArea> GetAllAreas() - { - return m_allAreas; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/EffectFade.cs b/Valheim_v202102/Valheim/assembly_valheim/EffectFade.cs deleted file mode 100644 index cefd3a0..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/EffectFade.cs +++ /dev/null @@ -1,66 +0,0 @@ -using UnityEngine; - -public class EffectFade : MonoBehaviour -{ - public float m_fadeDuration = 1f; - - private ParticleSystem[] m_particles; - - private Light m_light; - - private AudioSource m_audioSource; - - private float m_baseVolume; - - private float m_lightBaseIntensity; - - private bool m_active = true; - - private float m_intensity; - - private void Awake() - { - m_particles = base.gameObject.GetComponentsInChildren<ParticleSystem>(); - m_light = base.gameObject.GetComponentInChildren<Light>(); - m_audioSource = base.gameObject.GetComponentInChildren<AudioSource>(); - if ((bool)m_light) - { - m_lightBaseIntensity = m_light.intensity; - m_light.intensity = 0f; - } - if ((bool)m_audioSource) - { - m_baseVolume = m_audioSource.volume; - m_audioSource.volume = 0f; - } - SetActive(active: false); - } - - private void Update() - { - m_intensity = Mathf.MoveTowards(m_intensity, m_active ? 1f : 0f, Time.deltaTime / m_fadeDuration); - if ((bool)m_light) - { - m_light.intensity = m_intensity * m_lightBaseIntensity; - m_light.enabled = m_light.intensity > 0f; - } - if ((bool)m_audioSource) - { - m_audioSource.volume = m_intensity * m_baseVolume; - } - } - - public void SetActive(bool active) - { - if (m_active != active) - { - m_active = active; - ParticleSystem[] particles = m_particles; - for (int i = 0; i < particles.Length; i++) - { - ParticleSystem.EmissionModule emission = particles[i].emission; - emission.enabled = active; - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/EffectList.cs b/Valheim_v202102/Valheim/assembly_valheim/EffectList.cs deleted file mode 100644 index 61350b6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/EffectList.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -[Serializable] -public class EffectList -{ - [Serializable] - public class EffectData - { - public GameObject m_prefab; - - public bool m_enabled = true; - - public bool m_attach; - - public bool m_inheritParentRotation; - - public bool m_inheritParentScale; - - public bool m_randomRotation; - - public bool m_scale; - } - - public EffectData[] m_effectPrefabs = new EffectData[0]; - - public GameObject[] Create(Vector3 pos, Quaternion rot, Transform parent = null, float scale = 1f) - { - List<GameObject> list = new List<GameObject>(); - for (int i = 0; i < m_effectPrefabs.Length; i++) - { - EffectData effectData = m_effectPrefabs[i]; - if (!effectData.m_enabled) - { - continue; - } - if ((bool)parent && m_effectPrefabs[i].m_inheritParentRotation) - { - rot = parent.rotation; - } - if (effectData.m_randomRotation) - { - rot = UnityEngine.Random.rotation; - } - GameObject gameObject = UnityEngine.Object.Instantiate(effectData.m_prefab, pos, rot); - if (effectData.m_scale) - { - if ((bool)parent && m_effectPrefabs[i].m_inheritParentScale) - { - Vector3 localScale = parent.localScale * scale; - gameObject.transform.localScale = localScale; - } - else - { - gameObject.transform.localScale = new Vector3(scale, scale, scale); - } - } - else if ((bool)parent && m_effectPrefabs[i].m_inheritParentScale) - { - gameObject.transform.localScale = parent.localScale; - } - if (effectData.m_attach && parent != null) - { - gameObject.transform.SetParent(parent); - } - list.Add(gameObject); - } - return list.ToArray(); - } - - public bool HasEffects() - { - if (m_effectPrefabs == null || m_effectPrefabs.Length == 0) - { - return false; - } - EffectData[] effectPrefabs = m_effectPrefabs; - for (int i = 0; i < effectPrefabs.Length; i++) - { - if (effectPrefabs[i].m_enabled) - { - return true; - } - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/EmitterRotation.cs b/Valheim_v202102/Valheim/assembly_valheim/EmitterRotation.cs deleted file mode 100644 index 41fe5e5..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/EmitterRotation.cs +++ /dev/null @@ -1,37 +0,0 @@ -using UnityEngine; - -public class EmitterRotation : MonoBehaviour -{ - public float m_maxSpeed = 10f; - - public float m_rotSpeed = 90f; - - private Vector3 m_lastPos; - - private ParticleSystem m_ps; - - private void Start() - { - m_lastPos = base.transform.position; - m_ps = GetComponentInChildren<ParticleSystem>(); - } - - private void Update() - { - if (m_ps.emission.enabled) - { - Vector3 position = base.transform.position; - Vector3 vector = position - m_lastPos; - m_lastPos = position; - float t = Mathf.Clamp01(vector.magnitude / Time.deltaTime / m_maxSpeed); - if (vector == Vector3.zero) - { - vector = Vector3.up; - } - Quaternion a = Quaternion.LookRotation(Vector3.up); - Quaternion b = Quaternion.LookRotation(vector); - Quaternion to = Quaternion.Lerp(a, b, t); - base.transform.rotation = Quaternion.RotateTowards(base.transform.rotation, to, Time.deltaTime * m_rotSpeed); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/EnemyHud.cs b/Valheim_v202102/Valheim/assembly_valheim/EnemyHud.cs deleted file mode 100644 index 3c4802a..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/EnemyHud.cs +++ /dev/null @@ -1,216 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class EnemyHud : MonoBehaviour -{ - private class HudData - { - public Character m_character; - - public BaseAI m_ai; - - public GameObject m_gui; - - public GameObject m_healthRoot; - - public RectTransform m_level2; - - public RectTransform m_level3; - - public GuiBar m_healthFast; - - public GuiBar m_healthSlow; - - public Text m_name; - - public float m_hoverTimer = 99999f; - } - - private static EnemyHud m_instance; - - public GameObject m_hudRoot; - - public GameObject m_baseHud; - - public GameObject m_baseHudBoss; - - public GameObject m_baseHudPlayer; - - public float m_maxShowDistance = 10f; - - public float m_maxShowDistanceBoss = 100f; - - public float m_hoverShowDuration = 60f; - - private Vector3 m_refPoint = Vector3.zero; - - private Dictionary<Character, HudData> m_huds = new Dictionary<Character, HudData>(); - - public static EnemyHud instance => m_instance; - - private void Awake() - { - m_instance = this; - m_baseHud.SetActive(value: false); - m_baseHudBoss.SetActive(value: false); - m_baseHudPlayer.SetActive(value: false); - } - - private void OnDestroy() - { - m_instance = null; - } - - private void LateUpdate() - { - m_hudRoot.SetActive(!Hud.IsUserHidden()); - Player localPlayer = Player.m_localPlayer; - if (localPlayer != null) - { - m_refPoint = localPlayer.transform.position; - } - foreach (Character allCharacter in Character.GetAllCharacters()) - { - if (!(allCharacter == localPlayer) && TestShow(allCharacter)) - { - ShowHud(allCharacter); - } - } - UpdateHuds(localPlayer, Time.deltaTime); - } - - private bool TestShow(Character c) - { - float num = Vector3.SqrMagnitude(c.transform.position - m_refPoint); - if (c.IsBoss() && num < m_maxShowDistanceBoss * m_maxShowDistanceBoss) - { - if (num < m_maxShowDistanceBoss * m_maxShowDistanceBoss && c.GetComponent<BaseAI>().IsAlerted()) - { - return true; - } - } - else if (num < m_maxShowDistance * m_maxShowDistance) - { - if (c.IsPlayer() && c.IsCrouching()) - { - return false; - } - return true; - } - return false; - } - - private void ShowHud(Character c) - { - if (!m_huds.TryGetValue(c, out var value)) - { - GameObject original = (c.IsPlayer() ? m_baseHudPlayer : ((!c.IsBoss()) ? m_baseHud : m_baseHudBoss)); - value = new HudData(); - value.m_character = c; - value.m_ai = c.GetComponent<BaseAI>(); - value.m_gui = Object.Instantiate(original, m_hudRoot.transform); - value.m_gui.SetActive(value: true); - value.m_healthRoot = value.m_gui.transform.Find("Health").gameObject; - value.m_healthFast = value.m_healthRoot.transform.Find("health_fast").GetComponent<GuiBar>(); - value.m_healthSlow = value.m_healthRoot.transform.Find("health_slow").GetComponent<GuiBar>(); - value.m_level2 = value.m_gui.transform.Find("level_2") as RectTransform; - value.m_level3 = value.m_gui.transform.Find("level_3") as RectTransform; - value.m_name = value.m_gui.transform.Find("Name").GetComponent<Text>(); - value.m_name.text = Localization.instance.Localize(c.GetHoverName()); - m_huds.Add(c, value); - } - } - - private void UpdateHuds(Player player, float dt) - { - Camera mainCamera = Utils.GetMainCamera(); - if (!mainCamera) - { - return; - } - Character character = (player ? player.GetHoverCreature() : null); - Character character2 = null; - foreach (KeyValuePair<Character, HudData> hud in m_huds) - { - HudData value = hud.Value; - if (!value.m_character || !TestShow(value.m_character)) - { - if (character2 == null) - { - character2 = value.m_character; - Object.Destroy(value.m_gui); - } - continue; - } - if (value.m_character == character) - { - value.m_hoverTimer = 0f; - } - value.m_hoverTimer += dt; - float healthPercentage = value.m_character.GetHealthPercentage(); - if (value.m_character.IsPlayer() || value.m_character.IsBoss() || value.m_hoverTimer < m_hoverShowDuration) - { - value.m_gui.SetActive(value: true); - int level = value.m_character.GetLevel(); - if ((bool)value.m_level2) - { - value.m_level2.gameObject.SetActive(level == 2); - } - if ((bool)value.m_level3) - { - value.m_level3.gameObject.SetActive(level == 3); - } - } - else - { - value.m_gui.SetActive(value: false); - } - value.m_healthSlow.SetValue(healthPercentage); - value.m_healthFast.SetValue(healthPercentage); - if (!value.m_character.IsBoss() && value.m_gui.activeSelf) - { - Vector3 zero = Vector3.zero; - zero = ((!value.m_character.IsPlayer()) ? value.m_character.GetTopPoint() : (value.m_character.GetHeadPoint() + Vector3.up * 0.3f)); - Vector3 position = mainCamera.WorldToScreenPoint(zero); - if (position.x < 0f || position.x > (float)Screen.width || position.y < 0f || position.y > (float)Screen.height || position.z > 0f) - { - value.m_gui.transform.position = position; - value.m_gui.SetActive(value: true); - } - else - { - value.m_gui.SetActive(value: false); - } - } - } - if (character2 != null) - { - m_huds.Remove(character2); - } - } - - public bool ShowingBossHud() - { - foreach (KeyValuePair<Character, HudData> hud in m_huds) - { - if ((bool)hud.Value.m_character && hud.Value.m_character.IsBoss()) - { - return true; - } - } - return false; - } - - public Character GetActiveBoss() - { - foreach (KeyValuePair<Character, HudData> hud in m_huds) - { - if ((bool)hud.Value.m_character && hud.Value.m_character.IsBoss()) - { - return hud.Value.m_character; - } - } - return null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/EnvEntry.cs b/Valheim_v202102/Valheim/assembly_valheim/EnvEntry.cs deleted file mode 100644 index e21e0fe..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/EnvEntry.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -[Serializable] -public class EnvEntry -{ - public string m_environment = ""; - - public float m_weight = 1f; - - [NonSerialized] - public EnvSetup m_env; -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/EnvMan.cs b/Valheim_v202102/Valheim/assembly_valheim/EnvMan.cs deleted file mode 100644 index 7119264..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/EnvMan.cs +++ /dev/null @@ -1,987 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; -using UnityStandardAssets.ImageEffects; - -public class EnvMan : MonoBehaviour -{ - private static EnvMan m_instance; - - public Light m_dirLight; - - public bool m_debugTimeOfDay; - - [Range(0f, 1f)] - public float m_debugTime = 0.5f; - - public string m_debugEnv = ""; - - public bool m_debugWind; - - [Range(0f, 360f)] - public float m_debugWindAngle; - - [Range(0f, 1f)] - public float m_debugWindIntensity = 1f; - - private const float m_morningL = 0.15f; - - public float m_sunHorizonTransitionH = 0.08f; - - public float m_sunHorizonTransitionL = 0.02f; - - public long m_dayLengthSec = 1200L; - - public float m_transitionDuration = 2f; - - public long m_environmentDuration = 20L; - - public long m_windPeriodDuration = 10L; - - public float m_windTransitionDuration = 5f; - - public List<EnvSetup> m_environments = new List<EnvSetup>(); - - public List<BiomeEnvSetup> m_biomes = new List<BiomeEnvSetup>(); - - public string m_introEnvironment = "ThunderStorm"; - - public float m_edgeOfWorldWidth = 500f; - - [Header("Music")] - public float m_randomMusicIntervalMin = 60f; - - public float m_randomMusicIntervalMax = 200f; - - [Header("Other")] - public MeshRenderer m_clouds; - - public MeshRenderer m_rainClouds; - - public MeshRenderer m_rainCloudsDownside; - - public float m_wetTransitionDuration = 15f; - - private bool m_skipTime; - - private double m_skipToTime; - - private double m_timeSkipSpeed = 1.0; - - private const double m_timeSkipDuration = 12.0; - - private double m_totalSeconds; - - private float m_smoothDayFraction; - - private Color m_sunFogColor = Color.white; - - private GameObject[] m_currentPSystems; - - private GameObject m_currentEnvObject; - - private Vector4 m_windDir1 = new Vector4(0f, 0f, -1f, 0f); - - private Vector4 m_windDir2 = new Vector4(0f, 0f, -1f, 0f); - - private Vector4 m_wind = new Vector4(0f, 0f, -1f, 0f); - - private float m_windTransitionTimer = -1f; - - private Vector3 m_cloudOffset = Vector3.zero; - - private string m_forceEnv = ""; - - private EnvSetup m_currentEnv; - - private EnvSetup m_prevEnv; - - private EnvSetup m_nextEnv; - - private string m_ambientMusic; - - private float m_ambientMusicTimer; - - private Heightmap m_cachedHeightmap; - - private Heightmap.Biome m_currentBiome; - - private long m_environmentPeriod; - - private float m_transitionTimer; - - private bool m_firstEnv = true; - - private int _NetRefPos = Shader.PropertyToID("_NetRefPos"); - - private int _SkyboxSunDir = Shader.PropertyToID("_SkyboxSunDir"); - - private int _SunDir = Shader.PropertyToID("_SunDir"); - - private int _SunFogColor = Shader.PropertyToID("_SunFogColor"); - - private int _Wet = Shader.PropertyToID("_Wet"); - - private int _SunColor = Shader.PropertyToID("_SunColor"); - - private int _AmbientColor = Shader.PropertyToID("_AmbientColor"); - - private int _GlobalWind1 = Shader.PropertyToID("_GlobalWind1"); - - private int _GlobalWind2 = Shader.PropertyToID("_GlobalWind2"); - - private int _GlobalWindAlpha = Shader.PropertyToID("_GlobalWindAlpha"); - - private int _CloudOffset = Shader.PropertyToID("_CloudOffset"); - - private int _GlobalWindForce = Shader.PropertyToID("_GlobalWindForce"); - - private int _Rain = Shader.PropertyToID("_Rain"); - - public static EnvMan instance => m_instance; - - private void Awake() - { - m_instance = this; - foreach (EnvSetup environment in m_environments) - { - SetParticleArrayEnabled(environment.m_psystems, enabled: false); - if ((bool)environment.m_envObject) - { - environment.m_envObject.SetActive(value: false); - } - } - foreach (BiomeEnvSetup biome in m_biomes) - { - foreach (EnvEntry environment2 in biome.m_environments) - { - environment2.m_env = GetEnv(environment2.m_environment); - } - } - m_currentEnv = GetDefaultEnv(); - } - - private void OnDestroy() - { - m_instance = null; - } - - private void SetParticleArrayEnabled(GameObject[] psystems, bool enabled) - { - foreach (GameObject gameObject in psystems) - { - ParticleSystem[] componentsInChildren = gameObject.GetComponentsInChildren<ParticleSystem>(); - for (int j = 0; j < componentsInChildren.Length; j++) - { - ParticleSystem.EmissionModule emission = componentsInChildren[j].emission; - emission.enabled = enabled; - } - MistEmitter componentInChildren = gameObject.GetComponentInChildren<MistEmitter>(); - if ((bool)componentInChildren) - { - componentInChildren.enabled = enabled; - } - } - } - - private float RescaleDayFraction(float fraction) - { - if (fraction >= 0.15f && fraction <= 0.85f) - { - float num = (fraction - 0.15f) / 0.7f; - fraction = 0.25f + num * 0.5f; - } - else if (fraction < 0.5f) - { - fraction = fraction / 0.15f * 0.25f; - } - else - { - float num2 = (fraction - 0.85f) / 0.15f; - fraction = 0.75f + num2 * 0.25f; - } - return fraction; - } - - private void Update() - { - Vector3 windForce = instance.GetWindForce(); - m_cloudOffset += windForce * Time.deltaTime * 0.01f; - Shader.SetGlobalVector(_CloudOffset, m_cloudOffset); - Shader.SetGlobalVector(_NetRefPos, ZNet.instance.GetReferencePosition()); - } - - private void FixedUpdate() - { - UpdateTimeSkip(Time.fixedDeltaTime); - m_totalSeconds = ZNet.instance.GetTimeSeconds(); - long num = (long)m_totalSeconds; - double num2 = m_totalSeconds * 1000.0; - long num3 = m_dayLengthSec * 1000; - float fraction = Mathf.Clamp01((float)(num2 % (double)num3 / 1000.0) / (float)m_dayLengthSec); - fraction = RescaleDayFraction(fraction); - float smoothDayFraction = m_smoothDayFraction; - float t = Mathf.LerpAngle(m_smoothDayFraction * 360f, fraction * 360f, 0.01f); - m_smoothDayFraction = Mathf.Repeat(t, 360f) / 360f; - if (m_debugTimeOfDay) - { - m_smoothDayFraction = m_debugTime; - } - float num4 = Mathf.Pow(Mathf.Max(1f - Mathf.Clamp01(m_smoothDayFraction / 0.25f), Mathf.Clamp01((m_smoothDayFraction - 0.75f) / 0.25f)), 0.5f); - float num5 = Mathf.Pow(Mathf.Clamp01(1f - Mathf.Abs(m_smoothDayFraction - 0.5f) / 0.25f), 0.5f); - float num6 = Mathf.Min(Mathf.Clamp01(1f - (m_smoothDayFraction - 0.26f) / (0f - m_sunHorizonTransitionL)), Mathf.Clamp01(1f - (m_smoothDayFraction - 0.26f) / m_sunHorizonTransitionH)); - float num7 = Mathf.Min(Mathf.Clamp01(1f - (m_smoothDayFraction - 0.74f) / (0f - m_sunHorizonTransitionH)), Mathf.Clamp01(1f - (m_smoothDayFraction - 0.74f) / m_sunHorizonTransitionL)); - float num8 = 1f / (num4 + num5 + num6 + num7); - num4 *= num8; - num5 *= num8; - num6 *= num8; - num7 *= num8; - Heightmap.Biome biome = GetBiome(); - UpdateTriggers(smoothDayFraction, m_smoothDayFraction, biome, Time.fixedDeltaTime); - UpdateEnvironment(num, biome); - InterpolateEnvironment(Time.fixedDeltaTime); - UpdateWind(num, Time.fixedDeltaTime); - if (!string.IsNullOrEmpty(m_forceEnv)) - { - EnvSetup env = GetEnv(m_forceEnv); - if (env != null) - { - SetEnv(env, num5, num4, num6, num7, Time.fixedDeltaTime); - } - } - else - { - SetEnv(m_currentEnv, num5, num4, num6, num7, Time.fixedDeltaTime); - } - } - - private int GetCurrentDay() - { - return (int)(m_totalSeconds / (double)m_dayLengthSec); - } - - private void UpdateTriggers(float oldDayFraction, float newDayFraction, Heightmap.Biome biome, float dt) - { - if (Player.m_localPlayer == null || biome == Heightmap.Biome.None) - { - return; - } - EnvSetup currentEnvironment = GetCurrentEnvironment(); - if (currentEnvironment != null) - { - UpdateAmbientMusic(biome, currentEnvironment, dt); - if (oldDayFraction > 0.2f && oldDayFraction < 0.25f && newDayFraction > 0.25f && newDayFraction < 0.3f) - { - OnMorning(biome, currentEnvironment); - } - if (oldDayFraction > 0.7f && oldDayFraction < 0.75f && newDayFraction > 0.75f && newDayFraction < 0.8f) - { - OnEvening(biome, currentEnvironment); - } - } - } - - private void UpdateAmbientMusic(Heightmap.Biome biome, EnvSetup currentEnv, float dt) - { - m_ambientMusicTimer += dt; - if (!(m_ambientMusicTimer > 2f)) - { - return; - } - m_ambientMusicTimer = 0f; - m_ambientMusic = null; - BiomeEnvSetup biomeEnvSetup = GetBiomeEnvSetup(biome); - if (IsDay()) - { - if (currentEnv.m_musicDay.Length > 0) - { - m_ambientMusic = currentEnv.m_musicDay; - } - else if (biomeEnvSetup.m_musicDay.Length > 0) - { - m_ambientMusic = biomeEnvSetup.m_musicDay; - } - } - else if (currentEnv.m_musicNight.Length > 0) - { - m_ambientMusic = currentEnv.m_musicNight; - } - else if (biomeEnvSetup.m_musicNight.Length > 0) - { - m_ambientMusic = biomeEnvSetup.m_musicNight; - } - } - - public string GetAmbientMusic() - { - return m_ambientMusic; - } - - private void OnMorning(Heightmap.Biome biome, EnvSetup currentEnv) - { - string text = "morning"; - if (currentEnv.m_musicMorning.Length > 0) - { - text = currentEnv.m_musicMorning; - } - else - { - BiomeEnvSetup biomeEnvSetup = GetBiomeEnvSetup(biome); - if (biomeEnvSetup.m_musicMorning.Length > 0) - { - text = biomeEnvSetup.m_musicMorning; - } - } - MusicMan.instance.TriggerMusic(text); - Player.m_localPlayer.Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_newday", GetCurrentDay().ToString())); - } - - private void OnEvening(Heightmap.Biome biome, EnvSetup currentEnv) - { - string text = "evening"; - if (currentEnv.m_musicEvening.Length > 0) - { - text = currentEnv.m_musicEvening; - } - else - { - BiomeEnvSetup biomeEnvSetup = GetBiomeEnvSetup(biome); - if (biomeEnvSetup.m_musicEvening.Length > 0) - { - text = biomeEnvSetup.m_musicEvening; - } - } - MusicMan.instance.TriggerMusic(text); - } - - public void SetForceEnvironment(string env) - { - if (!(m_forceEnv == env)) - { - ZLog.Log("Setting forced environment " + env); - m_forceEnv = env; - FixedUpdate(); - if ((bool)ReflectionUpdate.instance) - { - ReflectionUpdate.instance.UpdateReflection(); - } - } - } - - private EnvSetup SelectWeightedEnvironment(List<EnvEntry> environments) - { - float num = 0f; - foreach (EnvEntry environment in environments) - { - num += environment.m_weight; - } - float num2 = UnityEngine.Random.Range(0f, num); - float num3 = 0f; - foreach (EnvEntry environment2 in environments) - { - num3 += environment2.m_weight; - if (num3 >= num2) - { - return environment2.m_env; - } - } - return environments[environments.Count - 1].m_env; - } - - private string GetEnvironmentOverride() - { - if (!string.IsNullOrEmpty(m_debugEnv)) - { - return m_debugEnv; - } - if (Player.m_localPlayer != null && Player.m_localPlayer.InIntro()) - { - return m_introEnvironment; - } - string envOverride = RandEventSystem.instance.GetEnvOverride(); - if (!string.IsNullOrEmpty(envOverride)) - { - return envOverride; - } - string environment = EnvZone.GetEnvironment(); - if (!string.IsNullOrEmpty(environment)) - { - return environment; - } - return null; - } - - private void UpdateEnvironment(long sec, Heightmap.Biome biome) - { - string environmentOverride = GetEnvironmentOverride(); - if (!string.IsNullOrEmpty(environmentOverride)) - { - m_environmentPeriod = -1L; - m_currentBiome = GetBiome(); - QueueEnvironment(environmentOverride); - return; - } - long num = sec / m_environmentDuration; - if (m_environmentPeriod != num || m_currentBiome != biome) - { - m_environmentPeriod = num; - m_currentBiome = biome; - UnityEngine.Random.State state = UnityEngine.Random.state; - UnityEngine.Random.InitState((int)num); - List<EnvEntry> availableEnvironments = GetAvailableEnvironments(biome); - if (availableEnvironments != null && availableEnvironments.Count > 0) - { - EnvSetup env = SelectWeightedEnvironment(availableEnvironments); - QueueEnvironment(env); - } - UnityEngine.Random.state = state; - } - } - - private BiomeEnvSetup GetBiomeEnvSetup(Heightmap.Biome biome) - { - foreach (BiomeEnvSetup biome2 in m_biomes) - { - if (biome2.m_biome == biome) - { - return biome2; - } - } - return null; - } - - private List<EnvEntry> GetAvailableEnvironments(Heightmap.Biome biome) - { - return GetBiomeEnvSetup(biome)?.m_environments; - } - - private Heightmap.Biome GetBiome() - { - Camera mainCamera = Utils.GetMainCamera(); - if (mainCamera == null) - { - return Heightmap.Biome.None; - } - Vector3 position = mainCamera.transform.position; - if (m_cachedHeightmap == null || !m_cachedHeightmap.IsPointInside(position)) - { - m_cachedHeightmap = Heightmap.FindHeightmap(position); - } - if ((bool)m_cachedHeightmap) - { - return m_cachedHeightmap.GetBiome(position); - } - return Heightmap.Biome.None; - } - - private void InterpolateEnvironment(float dt) - { - if (m_nextEnv != null) - { - m_transitionTimer += dt; - float num = Mathf.Clamp01(m_transitionTimer / m_transitionDuration); - m_currentEnv = InterpolateEnvironment(m_prevEnv, m_nextEnv, num); - if (num >= 1f) - { - m_currentEnv = m_nextEnv; - m_prevEnv = null; - m_nextEnv = null; - } - } - } - - private void QueueEnvironment(string name) - { - if (!(m_currentEnv.m_name == name) && (m_nextEnv == null || !(m_nextEnv.m_name == name))) - { - EnvSetup env = GetEnv(name); - if (env != null) - { - QueueEnvironment(env); - } - } - } - - private void QueueEnvironment(EnvSetup env) - { - if (m_firstEnv) - { - m_firstEnv = false; - m_currentEnv = env; - } - else - { - m_prevEnv = m_currentEnv.Clone(); - m_nextEnv = env; - m_transitionTimer = 0f; - } - } - - private EnvSetup InterpolateEnvironment(EnvSetup a, EnvSetup b, float i) - { - EnvSetup envSetup = a.Clone(); - envSetup.m_name = b.m_name; - if (i >= 0.5f) - { - envSetup.m_isFreezingAtNight = b.m_isFreezingAtNight; - envSetup.m_isFreezing = b.m_isFreezing; - envSetup.m_isCold = b.m_isCold; - envSetup.m_isColdAtNight = b.m_isColdAtNight; - envSetup.m_isColdAtNight = b.m_isColdAtNight; - } - envSetup.m_ambColorDay = Color.Lerp(a.m_ambColorDay, b.m_ambColorDay, i); - envSetup.m_ambColorNight = Color.Lerp(a.m_ambColorNight, b.m_ambColorNight, i); - envSetup.m_fogColorDay = Color.Lerp(a.m_fogColorDay, b.m_fogColorDay, i); - envSetup.m_fogColorEvening = Color.Lerp(a.m_fogColorEvening, b.m_fogColorEvening, i); - envSetup.m_fogColorMorning = Color.Lerp(a.m_fogColorMorning, b.m_fogColorMorning, i); - envSetup.m_fogColorNight = Color.Lerp(a.m_fogColorNight, b.m_fogColorNight, i); - envSetup.m_fogColorSunDay = Color.Lerp(a.m_fogColorSunDay, b.m_fogColorSunDay, i); - envSetup.m_fogColorSunEvening = Color.Lerp(a.m_fogColorSunEvening, b.m_fogColorSunEvening, i); - envSetup.m_fogColorSunMorning = Color.Lerp(a.m_fogColorSunMorning, b.m_fogColorSunMorning, i); - envSetup.m_fogColorSunNight = Color.Lerp(a.m_fogColorSunNight, b.m_fogColorSunNight, i); - envSetup.m_fogDensityDay = Mathf.Lerp(a.m_fogDensityDay, b.m_fogDensityDay, i); - envSetup.m_fogDensityEvening = Mathf.Lerp(a.m_fogDensityEvening, b.m_fogDensityEvening, i); - envSetup.m_fogDensityMorning = Mathf.Lerp(a.m_fogDensityMorning, b.m_fogDensityMorning, i); - envSetup.m_fogDensityNight = Mathf.Lerp(a.m_fogDensityNight, b.m_fogDensityNight, i); - envSetup.m_sunColorDay = Color.Lerp(a.m_sunColorDay, b.m_sunColorDay, i); - envSetup.m_sunColorEvening = Color.Lerp(a.m_sunColorEvening, b.m_sunColorEvening, i); - envSetup.m_sunColorMorning = Color.Lerp(a.m_sunColorMorning, b.m_sunColorMorning, i); - envSetup.m_sunColorNight = Color.Lerp(a.m_sunColorNight, b.m_sunColorNight, i); - envSetup.m_lightIntensityDay = Mathf.Lerp(a.m_lightIntensityDay, b.m_lightIntensityDay, i); - envSetup.m_lightIntensityNight = Mathf.Lerp(a.m_lightIntensityNight, b.m_lightIntensityNight, i); - envSetup.m_sunAngle = Mathf.Lerp(a.m_sunAngle, b.m_sunAngle, i); - envSetup.m_windMin = Mathf.Lerp(a.m_windMin, b.m_windMin, i); - envSetup.m_windMax = Mathf.Lerp(a.m_windMax, b.m_windMax, i); - envSetup.m_rainCloudAlpha = Mathf.Lerp(a.m_rainCloudAlpha, b.m_rainCloudAlpha, i); - envSetup.m_ambientLoop = ((i > 0.75f) ? b.m_ambientLoop : a.m_ambientLoop); - envSetup.m_ambientVol = ((i > 0.75f) ? b.m_ambientVol : a.m_ambientVol); - envSetup.m_musicEvening = b.m_musicEvening; - envSetup.m_musicMorning = b.m_musicMorning; - envSetup.m_musicDay = b.m_musicDay; - envSetup.m_musicNight = b.m_musicNight; - return envSetup; - } - - private void SetEnv(EnvSetup env, float dayInt, float nightInt, float morningInt, float eveningInt, float dt) - { - Camera mainCamera = Utils.GetMainCamera(); - if (mainCamera == null) - { - return; - } - m_dirLight.transform.rotation = Quaternion.Euler(-90f + env.m_sunAngle, 0f, 0f) * Quaternion.Euler(0f, -90f, 0f) * Quaternion.Euler(-90f + 360f * m_smoothDayFraction, 0f, 0f); - Vector3 vector = -m_dirLight.transform.forward; - m_dirLight.intensity = env.m_lightIntensityDay * dayInt; - m_dirLight.intensity += env.m_lightIntensityNight * nightInt; - if (nightInt > 0f) - { - m_dirLight.transform.rotation = m_dirLight.transform.rotation * Quaternion.Euler(180f, 0f, 0f); - } - m_dirLight.transform.position = mainCamera.transform.position - m_dirLight.transform.forward * 3000f; - m_dirLight.color = new Color(0f, 0f, 0f, 0f); - m_dirLight.color += env.m_sunColorNight * nightInt; - if (dayInt > 0f) - { - m_dirLight.color += env.m_sunColorDay * dayInt; - m_dirLight.color += env.m_sunColorMorning * morningInt; - m_dirLight.color += env.m_sunColorEvening * eveningInt; - } - RenderSettings.fogColor = new Color(0f, 0f, 0f, 0f); - RenderSettings.fogColor += env.m_fogColorNight * nightInt; - RenderSettings.fogColor += env.m_fogColorDay * dayInt; - RenderSettings.fogColor += env.m_fogColorMorning * morningInt; - RenderSettings.fogColor += env.m_fogColorEvening * eveningInt; - m_sunFogColor = new Color(0f, 0f, 0f, 0f); - m_sunFogColor += env.m_fogColorSunNight * nightInt; - if (dayInt > 0f) - { - m_sunFogColor += env.m_fogColorSunDay * dayInt; - m_sunFogColor += env.m_fogColorSunMorning * morningInt; - m_sunFogColor += env.m_fogColorSunEvening * eveningInt; - } - m_sunFogColor = Color.Lerp(RenderSettings.fogColor, m_sunFogColor, Mathf.Clamp01(Mathf.Max(nightInt, dayInt) * 3f)); - RenderSettings.fogDensity = 0f; - RenderSettings.fogDensity += env.m_fogDensityNight * nightInt; - RenderSettings.fogDensity += env.m_fogDensityDay * dayInt; - RenderSettings.fogDensity += env.m_fogDensityMorning * morningInt; - RenderSettings.fogDensity += env.m_fogDensityEvening * eveningInt; - RenderSettings.ambientMode = AmbientMode.Flat; - RenderSettings.ambientLight = Color.Lerp(env.m_ambColorNight, env.m_ambColorDay, dayInt); - SunShafts component = mainCamera.GetComponent<SunShafts>(); - if ((bool)component) - { - component.sunColor = m_dirLight.color; - } - if (env.m_envObject != m_currentEnvObject) - { - if ((bool)m_currentEnvObject) - { - m_currentEnvObject.SetActive(value: false); - m_currentEnvObject = null; - } - if ((bool)env.m_envObject) - { - m_currentEnvObject = env.m_envObject; - m_currentEnvObject.SetActive(value: true); - } - } - if (env.m_psystems != m_currentPSystems) - { - if (m_currentPSystems != null) - { - SetParticleArrayEnabled(m_currentPSystems, enabled: false); - m_currentPSystems = null; - } - if (env.m_psystems != null && (!env.m_psystemsOutsideOnly || ((bool)Player.m_localPlayer && !Player.m_localPlayer.InShelter()))) - { - SetParticleArrayEnabled(env.m_psystems, enabled: true); - m_currentPSystems = env.m_psystems; - } - } - m_clouds.material.SetFloat(_Rain, env.m_rainCloudAlpha); - if ((bool)env.m_ambientLoop) - { - AudioMan.instance.QueueAmbientLoop(env.m_ambientLoop, env.m_ambientVol); - } - else - { - AudioMan.instance.StopAmbientLoop(); - } - Shader.SetGlobalVector(_SkyboxSunDir, vector); - Shader.SetGlobalVector(_SkyboxSunDir, vector); - Shader.SetGlobalVector(_SunDir, -m_dirLight.transform.forward); - Shader.SetGlobalColor(_SunFogColor, m_sunFogColor); - Shader.SetGlobalColor(_SunColor, m_dirLight.color * m_dirLight.intensity); - Shader.SetGlobalColor(_AmbientColor, RenderSettings.ambientLight); - float globalFloat = Shader.GetGlobalFloat(_Wet); - globalFloat = Mathf.MoveTowards(globalFloat, env.m_isWet ? 1f : 0f, dt / m_wetTransitionDuration); - Shader.SetGlobalFloat(_Wet, globalFloat); - } - - private float GetDayFraction() - { - return m_smoothDayFraction; - } - - public int GetDay(double time) - { - return (int)(time / (double)m_dayLengthSec); - } - - public double GetMorningStartSec(int day) - { - return (float)(day * m_dayLengthSec) + (float)m_dayLengthSec * 0.15f; - } - - private void UpdateTimeSkip(float dt) - { - if (ZNet.instance.IsServer() && m_skipTime) - { - double timeSeconds = ZNet.instance.GetTimeSeconds(); - timeSeconds += (double)dt * m_timeSkipSpeed; - if (timeSeconds >= m_skipToTime) - { - timeSeconds = m_skipToTime; - m_skipTime = false; - } - ZNet.instance.SetNetTime(timeSeconds); - } - } - - public bool IsTimeSkipping() - { - return m_skipTime; - } - - public void SkipToMorning() - { - double timeSeconds = ZNet.instance.GetTimeSeconds(); - double time = timeSeconds - (double)((float)m_dayLengthSec * 0.15f); - int day = GetDay(time); - double morningStartSec = GetMorningStartSec(day + 1); - m_skipTime = true; - m_skipToTime = morningStartSec; - double num = morningStartSec - timeSeconds; - m_timeSkipSpeed = num / 12.0; - ZLog.Log("Time " + timeSeconds + ", day:" + day + " nextm:" + morningStartSec + " skipspeed:" + m_timeSkipSpeed); - } - - public bool IsDay() - { - float dayFraction = GetDayFraction(); - if (dayFraction >= 0.25f) - { - return dayFraction <= 0.75f; - } - return false; - } - - public bool IsAfternoon() - { - float dayFraction = GetDayFraction(); - if (dayFraction >= 0.5f) - { - return dayFraction <= 0.75f; - } - return false; - } - - public bool IsNight() - { - float dayFraction = GetDayFraction(); - if (!(dayFraction <= 0.25f)) - { - return dayFraction >= 0.75f; - } - return true; - } - - public bool IsDaylight() - { - EnvSetup currentEnvironment = GetCurrentEnvironment(); - if (currentEnvironment != null && currentEnvironment.m_alwaysDark) - { - return false; - } - return IsDay(); - } - - public Heightmap.Biome GetCurrentBiome() - { - return m_currentBiome; - } - - public bool IsEnvironment(string name) - { - return GetCurrentEnvironment().m_name == name; - } - - public bool IsEnvironment(List<string> names) - { - EnvSetup currentEnvironment = GetCurrentEnvironment(); - return names.Contains(currentEnvironment.m_name); - } - - public EnvSetup GetCurrentEnvironment() - { - if (!string.IsNullOrEmpty(m_forceEnv)) - { - EnvSetup env = GetEnv(m_forceEnv); - if (env != null) - { - return env; - } - } - return m_currentEnv; - } - - public bool IsFreezing() - { - EnvSetup currentEnvironment = GetCurrentEnvironment(); - if (currentEnvironment == null) - { - return false; - } - if (currentEnvironment.m_isFreezing) - { - return true; - } - if (currentEnvironment.m_isFreezingAtNight && !IsDay()) - { - return true; - } - return false; - } - - public bool IsCold() - { - EnvSetup currentEnvironment = GetCurrentEnvironment(); - if (currentEnvironment == null) - { - return false; - } - if (currentEnvironment.m_isCold) - { - return true; - } - if (currentEnvironment.m_isColdAtNight && !IsDay()) - { - return true; - } - return false; - } - - public bool IsWet() - { - return GetCurrentEnvironment()?.m_isWet ?? false; - } - - public Color GetSunFogColor() - { - return m_sunFogColor; - } - - public Vector3 GetSunDirection() - { - return m_dirLight.transform.forward; - } - - private EnvSetup GetEnv(string name) - { - foreach (EnvSetup environment in m_environments) - { - if (environment.m_name == name) - { - return environment; - } - } - return null; - } - - private EnvSetup GetDefaultEnv() - { - foreach (EnvSetup environment in m_environments) - { - if (environment.m_default) - { - return environment; - } - } - return null; - } - - public void SetDebugWind(float angle, float intensity) - { - m_debugWind = true; - m_debugWindAngle = angle; - m_debugWindIntensity = Mathf.Clamp01(intensity); - } - - public void ResetDebugWind() - { - m_debugWind = false; - } - - public Vector3 GetWindForce() - { - return GetWindDir() * m_wind.w; - } - - public Vector3 GetWindDir() - { - return new Vector3(m_wind.x, m_wind.y, m_wind.z); - } - - public float GetWindIntensity() - { - return m_wind.w; - } - - private void UpdateWind(long timeSec, float dt) - { - if (m_debugWind) - { - float f = (float)Math.PI / 180f * m_debugWindAngle; - Vector3 dir = new Vector3(Mathf.Sin(f), 0f, Mathf.Cos(f)); - SetTargetWind(dir, m_debugWindIntensity); - } - else - { - EnvSetup currentEnvironment = GetCurrentEnvironment(); - if (currentEnvironment != null) - { - UnityEngine.Random.State state = UnityEngine.Random.state; - float angle = 0f; - float intensity = 0.5f; - AddWindOctave(timeSec, 1, ref angle, ref intensity); - AddWindOctave(timeSec, 2, ref angle, ref intensity); - AddWindOctave(timeSec, 4, ref angle, ref intensity); - AddWindOctave(timeSec, 8, ref angle, ref intensity); - UnityEngine.Random.state = state; - Vector3 dir2 = new Vector3(Mathf.Sin(angle), 0f, Mathf.Cos(angle)); - intensity = Mathf.Lerp(currentEnvironment.m_windMin, currentEnvironment.m_windMax, intensity); - if ((bool)Player.m_localPlayer) - { - float magnitude = Player.m_localPlayer.transform.position.magnitude; - if (magnitude > 10500f - m_edgeOfWorldWidth) - { - float num = Utils.LerpStep(10500f - m_edgeOfWorldWidth, 10500f, magnitude); - num = 1f - Mathf.Pow(1f - num, 2f); - dir2 = Player.m_localPlayer.transform.position.normalized; - intensity = Mathf.Lerp(intensity, 1f, num); - } - else - { - Ship localShip = Ship.GetLocalShip(); - if ((bool)localShip && localShip.IsWindControllActive()) - { - dir2 = localShip.transform.forward; - } - } - } - SetTargetWind(dir2, intensity); - } - } - UpdateWindTransition(dt); - } - - private void AddWindOctave(long timeSec, int octave, ref float angle, ref float intensity) - { - UnityEngine.Random.InitState((int)(timeSec / (m_windPeriodDuration / octave))); - angle += UnityEngine.Random.value * ((float)Math.PI * 2f / (float)octave); - intensity += 0f - 0.5f / (float)octave + UnityEngine.Random.value / (float)octave; - } - - private void SetTargetWind(Vector3 dir, float intensity) - { - if (!(m_windTransitionTimer >= 0f)) - { - intensity = Mathf.Clamp(intensity, 0.05f, 1f); - if (!Mathf.Approximately(dir.x, m_windDir1.x) || !Mathf.Approximately(dir.y, m_windDir1.y) || !Mathf.Approximately(dir.z, m_windDir1.z) || !Mathf.Approximately(intensity, m_windDir1.w)) - { - m_windTransitionTimer = 0f; - m_windDir2 = new Vector4(dir.x, dir.y, dir.z, intensity); - } - } - } - - private void UpdateWindTransition(float dt) - { - if (m_windTransitionTimer >= 0f) - { - m_windTransitionTimer += dt; - float num = Mathf.Clamp01(m_windTransitionTimer / m_windTransitionDuration); - Shader.SetGlobalVector(_GlobalWind1, m_windDir1); - Shader.SetGlobalVector(_GlobalWind2, m_windDir2); - Shader.SetGlobalFloat(_GlobalWindAlpha, num); - m_wind = Vector4.Lerp(m_windDir1, m_windDir2, num); - if (num >= 1f) - { - m_windDir1 = m_windDir2; - m_windTransitionTimer = -1f; - } - } - else - { - Shader.SetGlobalVector(_GlobalWind1, m_windDir1); - Shader.SetGlobalFloat(_GlobalWindAlpha, 0f); - m_wind = m_windDir1; - } - Shader.SetGlobalVector(_GlobalWindForce, GetWindForce()); - } - - public void GetWindData(out Vector4 wind1, out Vector4 wind2, out float alpha) - { - wind1 = m_windDir1; - wind2 = m_windDir2; - if (m_windTransitionTimer >= 0f) - { - alpha = Mathf.Clamp01(m_windTransitionTimer / m_windTransitionDuration); - } - else - { - alpha = 0f; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/EnvSetup.cs b/Valheim_v202102/Valheim/assembly_valheim/EnvSetup.cs deleted file mode 100644 index deb01ad..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/EnvSetup.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.Serialization; - -[Serializable] -public class EnvSetup -{ - public string m_name = ""; - - public bool m_default; - - [Header("Gameplay")] - public bool m_isWet; - - public bool m_isFreezing; - - public bool m_isFreezingAtNight; - - public bool m_isCold; - - public bool m_isColdAtNight = true; - - public bool m_alwaysDark; - - [Header("Ambience")] - public Color m_ambColorNight = Color.white; - - public Color m_ambColorDay = Color.white; - - [Header("Fog-ambient")] - public Color m_fogColorNight = Color.white; - - public Color m_fogColorMorning = Color.white; - - public Color m_fogColorDay = Color.white; - - public Color m_fogColorEvening = Color.white; - - [Header("Fog-sun")] - public Color m_fogColorSunNight = Color.white; - - public Color m_fogColorSunMorning = Color.white; - - public Color m_fogColorSunDay = Color.white; - - public Color m_fogColorSunEvening = Color.white; - - [Header("Fog-distance")] - public float m_fogDensityNight = 0.01f; - - public float m_fogDensityMorning = 0.01f; - - public float m_fogDensityDay = 0.01f; - - public float m_fogDensityEvening = 0.01f; - - [Header("Sun")] - public Color m_sunColorNight = Color.white; - - public Color m_sunColorMorning = Color.white; - - public Color m_sunColorDay = Color.white; - - public Color m_sunColorEvening = Color.white; - - public float m_lightIntensityDay = 1.2f; - - public float m_lightIntensityNight; - - public float m_sunAngle = 60f; - - [Header("Wind")] - public float m_windMin; - - public float m_windMax = 1f; - - [Header("Effects")] - public GameObject m_envObject; - - public GameObject[] m_psystems; - - public bool m_psystemsOutsideOnly; - - public float m_rainCloudAlpha; - - [Header("Audio")] - public AudioClip m_ambientLoop; - - public float m_ambientVol = 0.3f; - - public string m_ambientList = ""; - - [Header("Music overrides")] - public string m_musicMorning = ""; - - public string m_musicEvening = ""; - - [FormerlySerializedAs("m_musicRandomDay")] - public string m_musicDay = ""; - - [FormerlySerializedAs("m_musicRandomNight")] - public string m_musicNight = ""; - - public EnvSetup Clone() - { - return MemberwiseClone() as EnvSetup; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/EnvZone.cs b/Valheim_v202102/Valheim/assembly_valheim/EnvZone.cs deleted file mode 100644 index 210d6e5..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/EnvZone.cs +++ /dev/null @@ -1,49 +0,0 @@ -using UnityEngine; - -public class EnvZone : MonoBehaviour -{ - public string m_environment = ""; - - public bool m_force = true; - - private static EnvZone m_triggered; - - private void OnTriggerStay(Collider collider) - { - Player component = collider.GetComponent<Player>(); - if (!(component == null) && !(Player.m_localPlayer != component)) - { - if (m_force) - { - EnvMan.instance.SetForceEnvironment(m_environment); - } - m_triggered = this; - } - } - - private void OnTriggerExit(Collider collider) - { - if (m_triggered != this) - { - return; - } - Player component = collider.GetComponent<Player>(); - if (!(component == null) && !(Player.m_localPlayer != component)) - { - if (m_force) - { - EnvMan.instance.SetForceEnvironment(""); - } - m_triggered = null; - } - } - - public static string GetEnvironment() - { - if ((bool)m_triggered && !m_triggered.m_force) - { - return m_triggered.m_environment; - } - return null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/EventZone.cs b/Valheim_v202102/Valheim/assembly_valheim/EventZone.cs deleted file mode 100644 index 3601944..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/EventZone.cs +++ /dev/null @@ -1,38 +0,0 @@ -using UnityEngine; - -public class EventZone : MonoBehaviour -{ - public string m_event = ""; - - private static EventZone m_triggered; - - private void OnTriggerStay(Collider collider) - { - Player component = collider.GetComponent<Player>(); - if (!(component == null) && !(Player.m_localPlayer != component)) - { - m_triggered = this; - } - } - - private void OnTriggerExit(Collider collider) - { - if (!(m_triggered != this)) - { - Player component = collider.GetComponent<Player>(); - if (!(component == null) && !(Player.m_localPlayer != component)) - { - m_triggered = null; - } - } - } - - public static string GetEvent() - { - if ((bool)m_triggered && m_triggered.m_event.Length > 0) - { - return m_triggered.m_event; - } - return null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Feedback.cs b/Valheim_v202102/Valheim/assembly_valheim/Feedback.cs deleted file mode 100644 index 05a7db3..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Feedback.cs +++ /dev/null @@ -1,91 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -public class Feedback : MonoBehaviour -{ - private static Feedback m_instance; - - public Text m_subject; - - public Text m_text; - - public Button m_sendButton; - - public Toggle m_catBug; - - public Toggle m_catFeedback; - - public Toggle m_catIdea; - - private void Awake() - { - m_instance = this; - } - - private void OnDestroy() - { - if (m_instance == this) - { - m_instance = null; - } - } - - public static bool IsVisible() - { - return m_instance != null; - } - - private void LateUpdate() - { - m_sendButton.interactable = IsValid(); - if (IsVisible() && (Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("JoyMenu"))) - { - OnBack(); - } - } - - private bool IsValid() - { - if (m_subject.text.Length == 0) - { - return false; - } - if (m_text.text.Length == 0) - { - return false; - } - return true; - } - - public void OnBack() - { - Object.Destroy(base.gameObject); - } - - public void OnSend() - { - if (IsValid()) - { - string category = GetCategory(); - GoogleAnalyticsV4.instance.LogEvent("Feedback_" + category, m_subject.text, m_text.text, 0L); - Object.Destroy(base.gameObject); - } - } - - private string GetCategory() - { - if (m_catBug.isOn) - { - return "Bug"; - } - if (m_catFeedback.isOn) - { - return "Feedback"; - } - if (m_catIdea.isOn) - { - return "Idea"; - } - return ""; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/FejdStartup.cs b/Valheim_v202102/Valheim/assembly_valheim/FejdStartup.cs deleted file mode 100644 index 3de4355..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/FejdStartup.cs +++ /dev/null @@ -1,1393 +0,0 @@ -using System; -using System.Collections.Generic; -using Steamworks; -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.SceneManagement; -using UnityEngine.UI; - -public class FejdStartup : MonoBehaviour -{ - private Vector3 camSpeed = Vector3.zero; - - private Vector3 camRotSpeed = Vector3.zero; - - private static FejdStartup m_instance; - - [Header("Start")] - public Animator m_menuAnimator; - - public GameObject m_worldVersionPanel; - - public GameObject m_playerVersionPanel; - - public GameObject m_newGameVersionPanel; - - public GameObject m_connectionFailedPanel; - - public Text m_connectionFailedError; - - public Text m_newVersionName; - - public GameObject m_loading; - - public Text m_versionLabel; - - public GameObject m_mainMenu; - - public GameObject m_ndaPanel; - - public GameObject m_betaText; - - public GameObject m_characterSelectScreen; - - public GameObject m_selectCharacterPanel; - - public GameObject m_newCharacterPanel; - - public GameObject m_creditsPanel; - - public GameObject m_startGamePanel; - - public GameObject m_createWorldPanel; - - [Header("Camera")] - public GameObject m_mainCamera; - - public Transform m_cameraMarkerStart; - - public Transform m_cameraMarkerMain; - - public Transform m_cameraMarkerCharacter; - - public Transform m_cameraMarkerCredits; - - public Transform m_cameraMarkerGame; - - public float m_cameraMoveSpeed = 1.5f; - - public float m_cameraMoveSpeedStart = 1.5f; - - [Header("Join")] - public GameObject m_serverListPanel; - - public Toggle m_publicServerToggle; - - public Toggle m_openServerToggle; - - public InputField m_serverPassword; - - public RectTransform m_serverListRoot; - - public GameObject m_serverListElement; - - public ScrollRectEnsureVisible m_serverListEnsureVisible; - - public float m_serverListElementStep = 28f; - - public Text m_serverCount; - - public Button m_serverRefreshButton; - - public InputField m_filterInputField; - - public Text m_passwordError; - - public Button m_manualIPButton; - - public GameObject m_joinIPPanel; - - public Button m_joinIPJoinButton; - - public InputField m_joinIPAddress; - - public Button m_joinGameButton; - - public Toggle m_friendFilterSwitch; - - public Toggle m_publicFilterSwitch; - - public int m_minimumPasswordLength = 5; - - public float m_characterRotateSpeed = 4f; - - public float m_characterRotateSpeedGamepad = 200f; - - public int m_joinHostPort = 2456; - - public int m_serverPlayerLimit = 10; - - [Header("World")] - public GameObject m_worldListPanel; - - public RectTransform m_worldListRoot; - - public GameObject m_worldListElement; - - public ScrollRectEnsureVisible m_worldListEnsureVisible; - - public float m_worldListElementStep = 28f; - - public InputField m_newWorldName; - - public InputField m_newWorldSeed; - - public Button m_newWorldDone; - - public Button m_worldStart; - - public Button m_worldRemove; - - public GameObject m_removeWorldDialog; - - public Text m_removeWorldName; - - public GameObject m_removeCharacterDialog; - - public Text m_removeCharacterName; - - [Header("Character selectoin")] - public Button m_csStartButton; - - public Button m_csNewBigButton; - - public Button m_csNewButton; - - public Button m_csRemoveButton; - - public Button m_csLeftButton; - - public Button m_csRightButton; - - public Button m_csNewCharacterDone; - - public GameObject m_newCharacterError; - - public Text m_csName; - - public InputField m_csNewCharacterName; - - [Header("Misc")] - public Transform m_characterPreviewPoint; - - public GameObject m_playerPrefab; - - public GameObject m_gameMainPrefab; - - public GameObject m_settingsPrefab; - - public GameObject m_consolePrefab; - - public GameObject m_feedbackPrefab; - - public GameObject m_changeEffectPrefab; - - private string m_downloadUrl = ""; - - [TextArea] - public string m_versionXmlUrl = "https://dl.dropboxusercontent.com/s/5ibm05oelbqt8zq/fejdversion.xml?dl=0"; - - private World m_world; - - private MasterClient.ServerData m_joinServer; - - private MasterClient.ServerData m_queuedJoinServer; - - private float m_serverListBaseSize; - - private float m_worldListBaseSize; - - private List<PlayerProfile> m_profiles; - - private int m_profileIndex; - - private string m_tempRemoveCharacterName = ""; - - private int m_tempRemoveCharacterIndex = -1; - - private List<GameObject> m_serverListElements = new List<GameObject>(); - - private List<MasterClient.ServerData> m_serverList = new List<MasterClient.ServerData>(); - - private int m_serverListRevision = -1; - - private List<GameObject> m_worldListElements = new List<GameObject>(); - - private List<World> m_worlds; - - private GameObject m_playerInstance; - - private static bool m_firstStartup = true; - - public static FejdStartup instance => m_instance; - - private void Awake() - { - m_instance = this; - QualitySettings.maxQueuedFrames = 1; - Settings.ApplyStartupSettings(); - WorldGenerator.Initialize(World.GetMenuWorld()); - if (!Console.instance) - { - UnityEngine.Object.Instantiate(m_consolePrefab); - } - m_mainCamera.transform.position = m_cameraMarkerMain.transform.position; - m_mainCamera.transform.rotation = m_cameraMarkerMain.transform.rotation; - ZLog.Log("Render threading mode:" + SystemInfo.renderingThreadingMode); - GoogleAnalyticsV4.instance.StartSession(); - GoogleAnalyticsV4.instance.LogEvent("Game", "Version", Version.GetVersionString(), 0L); - GoogleAnalyticsV4.instance.LogEvent("Game", "SteamID", SteamManager.APP_ID.ToString(), 0L); - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "StartMenu", 0L); - InitializeSteam(); - } - - private void OnDestroy() - { - m_instance = null; - } - - private void Start() - { - Application.targetFrameRate = 60; - SetupGui(); - SetupObjectDB(); - ZInput.Initialize(); - MusicMan.instance.Reset(); - MusicMan.instance.TriggerMusic("menu"); - ShowConnectError(); - ZSteamMatchmaking.Initialize(); - QueueServerListUpdate(); - InvokeRepeating("UpdateServerList", 0.5f, 0.5f); - if (m_firstStartup) - { - HandleStartupJoin(); - } - m_menuAnimator.SetBool("FirstStartup", m_firstStartup); - m_firstStartup = false; - string @string = PlayerPrefs.GetString("profile"); - if (@string.Length > 0) - { - SetSelectedProfile(@string); - return; - } - m_profiles = PlayerProfile.GetAllPlayerProfiles(); - if (m_profiles.Count > 0) - { - SetSelectedProfile(m_profiles[0].GetFilename()); - } - else - { - UpdateCharacterList(); - } - } - - private void SetupGui() - { - HideAll(); - m_mainMenu.SetActive(value: true); - if (SteamManager.APP_ID == 1223920) - { - m_betaText.SetActive(value: true); - if (!Debug.isDebugBuild && !AcceptedNDA()) - { - m_ndaPanel.SetActive(value: true); - m_mainMenu.SetActive(value: false); - } - } - m_manualIPButton.gameObject.SetActive(value: false); - m_serverListBaseSize = m_serverListRoot.rect.height; - m_worldListBaseSize = m_worldListRoot.rect.height; - m_versionLabel.text = "version " + Version.GetVersionString(); - Localization.instance.Localize(base.transform); - } - - private void HideAll() - { - m_worldVersionPanel.SetActive(value: false); - m_playerVersionPanel.SetActive(value: false); - m_newGameVersionPanel.SetActive(value: false); - m_loading.SetActive(value: false); - m_characterSelectScreen.SetActive(value: false); - m_creditsPanel.SetActive(value: false); - m_startGamePanel.SetActive(value: false); - m_joinIPPanel.SetActive(value: false); - m_createWorldPanel.SetActive(value: false); - m_mainMenu.SetActive(value: false); - m_ndaPanel.SetActive(value: false); - m_betaText.SetActive(value: false); - } - - private bool InitializeSteam() - { - if (SteamManager.Initialize()) - { - string personaName = SteamFriends.GetPersonaName(); - ZLog.Log("Steam initialized, persona:" + personaName); - return true; - } - ZLog.LogError("Steam is not initialized"); - Application.Quit(); - return false; - } - - private void HandleStartupJoin() - { - string[] commandLineArgs = Environment.GetCommandLineArgs(); - for (int i = 0; i < commandLineArgs.Length; i++) - { - string text = commandLineArgs[i]; - ZLog.Log("ARG " + i + " " + text); - if (text == "+connect" && i < commandLineArgs.Length - 1) - { - string text2 = commandLineArgs[i + 1]; - ZLog.Log("JOIN " + text2); - ZSteamMatchmaking.instance.QueueServerJoin(text2); - } - else if (text == "+connect_lobby" && i < commandLineArgs.Length - 1) - { - string s = commandLineArgs[i + 1]; - CSteamID lobbyID = new CSteamID(ulong.Parse(s)); - ZSteamMatchmaking.instance.QueueLobbyJoin(lobbyID); - } - } - } - - private bool ParseServerArguments() - { - string[] commandLineArgs = Environment.GetCommandLineArgs(); - bool flag = true; - bool openServer = true; - string text = "Dedicated"; - string password = ""; - string text2 = ""; - int serverPort = 2456; - for (int i = 0; i < commandLineArgs.Length; i++) - { - switch (commandLineArgs[i]) - { - case "-world": - { - string text3 = commandLineArgs[i + 1]; - if (text3 != "") - { - text = text3; - } - i++; - break; - } - case "-name": - { - string text4 = commandLineArgs[i + 1]; - if (text4 != "") - { - text2 = text4; - } - i++; - break; - } - case "-port": - { - string text5 = commandLineArgs[i + 1]; - if (text5 != "") - { - serverPort = int.Parse(text5); - } - i++; - break; - } - case "-password": - password = commandLineArgs[i + 1]; - i++; - break; - case "-public": - flag = ((commandLineArgs[i + 1] == "1") ? true : false); - break; - } - } - if (text2 == "") - { - text2 = text; - } - World createWorld = World.GetCreateWorld(text); - if (flag && !IsPublicPasswordValid(password, createWorld)) - { - string publicPasswordError = GetPublicPasswordError(password, createWorld); - ZLog.LogError("Error bad password:" + publicPasswordError); - Application.Quit(); - return false; - } - ZNet.SetServer(server: true, openServer, flag, text2, password, createWorld); - ZNet.SetServerHost("", 0); - SteamManager.SetServerPort(serverPort); - return true; - } - - private void SetupObjectDB() - { - ObjectDB objectDB = base.gameObject.AddComponent<ObjectDB>(); - ObjectDB component = m_gameMainPrefab.GetComponent<ObjectDB>(); - objectDB.CopyOtherDB(component); - } - - private void ShowConnectError() - { - ZNet.ConnectionStatus connectionStatus = ZNet.GetConnectionStatus(); - if (connectionStatus != ZNet.ConnectionStatus.Connected && connectionStatus != ZNet.ConnectionStatus.Connecting && connectionStatus != 0) - { - m_connectionFailedPanel.SetActive(value: true); - switch (connectionStatus) - { - case ZNet.ConnectionStatus.ErrorVersion: - m_connectionFailedError.text = Localization.instance.Localize("$error_incompatibleversion"); - break; - case ZNet.ConnectionStatus.ErrorConnectFailed: - m_connectionFailedError.text = Localization.instance.Localize("$error_failedconnect"); - break; - case ZNet.ConnectionStatus.ErrorDisconnected: - m_connectionFailedError.text = Localization.instance.Localize("$error_disconnected"); - break; - case ZNet.ConnectionStatus.ErrorPassword: - m_connectionFailedError.text = Localization.instance.Localize("$error_password"); - break; - case ZNet.ConnectionStatus.ErrorAlreadyConnected: - m_connectionFailedError.text = Localization.instance.Localize("$error_alreadyconnected"); - break; - case ZNet.ConnectionStatus.ErrorBanned: - m_connectionFailedError.text = Localization.instance.Localize("$error_banned"); - break; - case ZNet.ConnectionStatus.ErrorFull: - m_connectionFailedError.text = Localization.instance.Localize("$error_serverfull"); - break; - } - } - } - - public void OnNewVersionButtonDownload() - { - Application.OpenURL(m_downloadUrl); - Application.Quit(); - } - - public void OnNewVersionButtonContinue() - { - m_newGameVersionPanel.SetActive(value: false); - } - - public void OnStartGame() - { - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "StartGame", 0L); - m_mainMenu.SetActive(value: false); - ShowCharacterSelection(); - } - - private void ShowStartGame() - { - m_mainMenu.SetActive(value: false); - m_startGamePanel.SetActive(value: true); - m_createWorldPanel.SetActive(value: false); - } - - public void OnSelectWorldTab() - { - UpdateWorldList(centerSelection: true); - if (m_world == null) - { - string @string = PlayerPrefs.GetString("world"); - if (@string.Length > 0) - { - m_world = FindWorld(@string); - } - if (m_world == null) - { - m_world = ((m_worlds.Count > 0) ? m_worlds[0] : null); - } - if (m_world != null) - { - UpdateWorldList(centerSelection: true); - } - } - } - - private World FindWorld(string name) - { - foreach (World world in m_worlds) - { - if (world.m_name == name) - { - return world; - } - } - return null; - } - - private void UpdateWorldList(bool centerSelection) - { - m_worlds = World.GetWorldList(); - foreach (GameObject worldListElement in m_worldListElements) - { - UnityEngine.Object.Destroy(worldListElement); - } - m_worldListElements.Clear(); - float b = (float)m_worlds.Count * m_worldListElementStep; - b = Mathf.Max(m_worldListBaseSize, b); - m_worldListRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, b); - for (int i = 0; i < m_worlds.Count; i++) - { - World world = m_worlds[i]; - GameObject gameObject = UnityEngine.Object.Instantiate(m_worldListElement, m_worldListRoot); - gameObject.SetActive(value: true); - (gameObject.transform as RectTransform).anchoredPosition = new Vector2(0f, (float)i * (0f - m_worldListElementStep)); - gameObject.GetComponent<Button>().onClick.AddListener(OnSelectWorld); - Text component = gameObject.transform.Find("seed").GetComponent<Text>(); - component.text = "Seed:" + world.m_seedName; - gameObject.transform.Find("name").GetComponent<Text>().text = world.m_name; - if (world.m_loadError) - { - component.text = " [LOAD ERROR]"; - } - else if (world.m_versionError) - { - component.text = " [BAD VERSION]"; - } - RectTransform rectTransform = gameObject.transform.Find("selected") as RectTransform; - bool flag = m_world != null && world.m_name == m_world.m_name; - rectTransform.gameObject.SetActive(flag); - if (flag && centerSelection) - { - m_worldListEnsureVisible.CenterOnItem(rectTransform); - } - m_worldListElements.Add(gameObject); - } - } - - public void OnWorldRemove() - { - if (m_world != null) - { - m_removeWorldName.text = m_world.m_name; - m_removeWorldDialog.SetActive(value: true); - } - } - - public void OnButtonRemoveWorldYes() - { - World.RemoveWorld(m_world.m_name); - m_world = null; - SetSelectedWorld(0, centerSelection: true); - m_removeWorldDialog.SetActive(value: false); - } - - public void OnButtonRemoveWorldNo() - { - m_removeWorldDialog.SetActive(value: false); - } - - private void OnSelectWorld() - { - GameObject currentSelectedGameObject = EventSystem.current.currentSelectedGameObject; - int index = FindSelectedWorld(currentSelectedGameObject); - SetSelectedWorld(index, centerSelection: false); - } - - private void SetSelectedWorld(int index, bool centerSelection) - { - if (m_worlds.Count != 0) - { - index = Mathf.Clamp(index, 0, m_worlds.Count - 1); - m_world = m_worlds[index]; - UpdateWorldList(centerSelection); - } - } - - private int GetSelectedWorld() - { - if (m_world == null) - { - return -1; - } - for (int i = 0; i < m_worlds.Count; i++) - { - if (m_worlds[i].m_name == m_world.m_name) - { - return i; - } - } - return -1; - } - - private int FindSelectedWorld(GameObject button) - { - for (int i = 0; i < m_worldListElements.Count; i++) - { - if (m_worldListElements[i] == button) - { - return i; - } - } - return -1; - } - - public void OnWorldNew() - { - m_createWorldPanel.SetActive(value: true); - m_newWorldName.text = ""; - m_newWorldSeed.text = World.GenerateSeed(); - } - - public void OnNewWorldDone() - { - string text = m_newWorldName.text; - string text2 = m_newWorldSeed.text; - if (!World.HaveWorld(text)) - { - m_world = new World(text, text2); - m_world.SaveWorldMetaData(); - UpdateWorldList(centerSelection: true); - ShowStartGame(); - GoogleAnalyticsV4.instance.LogEvent("Menu", "NewWorld", text, 0L); - } - } - - public void OnNewWorldBack() - { - ShowStartGame(); - } - - public void OnWorldStart() - { - if (m_world != null && !m_world.m_versionError && !m_world.m_loadError) - { - PlayerPrefs.SetString("world", m_world.m_name); - bool isOn = m_publicServerToggle.isOn; - bool isOn2 = m_openServerToggle.isOn; - string text = m_serverPassword.text; - ZNet.SetServer(server: true, isOn2, isOn, m_world.m_name, text, m_world); - ZNet.SetServerHost("", 0); - string eventLabel = "open:" + isOn2 + ",public:" + isOn; - GoogleAnalyticsV4.instance.LogEvent("Menu", "WorldStart", eventLabel, 0L); - TransitionToMainScene(); - } - } - - private void ShowCharacterSelection() - { - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "CharacterSelection", 0L); - ZLog.Log("show character selection"); - m_characterSelectScreen.SetActive(value: true); - m_selectCharacterPanel.SetActive(value: true); - m_newCharacterPanel.SetActive(value: false); - } - - public void OnJoinGame() - { - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "JoinGame", 0L); - HideAll(); - ShowCharacterSelection(); - } - - public void OnServerFilterChanged() - { - ZSteamMatchmaking.instance.SetNameFilter(m_filterInputField.text); - ZSteamMatchmaking.instance.SetFriendFilter(m_friendFilterSwitch.isOn); - PlayerPrefs.SetInt("publicfilter", m_publicFilterSwitch.isOn ? 1 : 0); - QueueServerListUpdate(); - } - - public void QueueServerListUpdate() - { - ZLog.DevLog("Queue serverlist"); - CancelInvoke("RequestServerList"); - Invoke("RequestServerList", 0.5f); - m_serverRefreshButton.interactable = false; - } - - private void RequestServerList() - { - ZLog.DevLog("Request serverlist"); - ZSteamMatchmaking.instance.RequestServerlist(); - } - - private void UpdateServerList() - { - if (m_serverListRevision == ZSteamMatchmaking.instance.GetServerListRevision()) - { - return; - } - m_serverListRevision = ZSteamMatchmaking.instance.GetServerListRevision(); - m_serverList.Clear(); - ZSteamMatchmaking.instance.GetServers(m_serverList); - m_serverList.Sort((MasterClient.ServerData a, MasterClient.ServerData b) => a.m_name.CompareTo(b.m_name)); - if (!m_serverList.Contains(m_joinServer)) - { - ZLog.Log("Serverlist does not contain selected server, clearing"); - if (m_serverList.Count > 0) - { - m_joinServer = m_serverList[0]; - } - else - { - m_joinServer = null; - } - } - UpdateServerListGui(centerSelection: true); - } - - private void UpdateServerListGui(bool centerSelection) - { - m_serverCount.text = m_serverListElements.Count.ToString(); - m_serverRefreshButton.interactable = true; - if (m_serverList.Count != m_serverListElements.Count) - { - foreach (GameObject serverListElement in m_serverListElements) - { - UnityEngine.Object.Destroy(serverListElement); - } - m_serverListElements.Clear(); - float b = (float)m_serverList.Count * m_serverListElementStep; - b = Mathf.Max(m_serverListBaseSize, b); - m_serverListRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, b); - for (int i = 0; i < m_serverList.Count; i++) - { - GameObject gameObject = UnityEngine.Object.Instantiate(m_serverListElement, m_serverListRoot); - gameObject.SetActive(value: true); - (gameObject.transform as RectTransform).anchoredPosition = new Vector2(0f, (float)i * (0f - m_serverListElementStep)); - gameObject.GetComponent<Button>().onClick.AddListener(OnSelectedServer); - m_serverListElements.Add(gameObject); - } - } - for (int j = 0; j < m_serverList.Count; j++) - { - MasterClient.ServerData serverData = m_serverList[j]; - GameObject gameObject2 = m_serverListElements[j]; - gameObject2.GetComponentInChildren<Text>().text = j + ". " + serverData.m_name; - UITooltip componentInChildren = gameObject2.GetComponentInChildren<UITooltip>(); - if (!string.IsNullOrEmpty(serverData.m_host)) - { - componentInChildren.m_text = serverData.m_host + ":" + serverData.m_port; - } - else - { - componentInChildren.m_text = serverData.m_steamHostID.ToString(); - } - gameObject2.transform.Find("version").GetComponent<Text>().text = serverData.m_version; - gameObject2.transform.Find("players").GetComponent<Text>().text = "Players:" + serverData.m_players + " / " + m_serverPlayerLimit; - gameObject2.transform.Find("Private").gameObject.SetActive(serverData.m_password); - Transform transform = gameObject2.transform.Find("selected"); - bool flag = m_joinServer != null && m_joinServer.Equals(serverData); - transform.gameObject.SetActive(flag); - if (centerSelection && flag) - { - m_serverListEnsureVisible.CenterOnItem(transform as RectTransform); - } - } - } - - private void OnSelectedServer() - { - GameObject currentSelectedGameObject = EventSystem.current.currentSelectedGameObject; - int index = FindSelectedServer(currentSelectedGameObject); - m_joinServer = m_serverList[index]; - UpdateServerListGui(centerSelection: false); - } - - private void SetSelectedServer(int index, bool centerSelection) - { - if (m_serverList.Count != 0) - { - index = Mathf.Clamp(index, 0, m_serverList.Count - 1); - m_joinServer = m_serverList[index]; - UpdateServerListGui(centerSelection); - } - } - - private int GetSelectedServer() - { - if (m_joinServer == null) - { - return -1; - } - for (int i = 0; i < m_serverList.Count; i++) - { - if (m_joinServer.Equals(m_serverList[i])) - { - return i; - } - } - return -1; - } - - private int FindSelectedServer(GameObject button) - { - for (int i = 0; i < m_serverListElements.Count; i++) - { - if (m_serverListElements[i] == button) - { - return i; - } - } - return -1; - } - - public void OnJoinStart() - { - JoinServer(); - } - - private void JoinServer() - { - ZNet.SetServer(server: false, openServer: false, publicServer: false, "", "", null); - ZNet.SetServerHost(m_joinServer.m_steamHostID); - GoogleAnalyticsV4.instance.LogEvent("Menu", "JoinServer", "", 0L); - TransitionToMainScene(); - } - - public void OnJoinIPOpen() - { - m_joinIPPanel.SetActive(value: true); - } - - public void OnJoinIPConnect() - { - m_joinIPPanel.SetActive(value: true); - string[] array = m_joinIPAddress.text.Split(':'); - if (array.Length != 0) - { - string text = array[0]; - int port = m_joinHostPort; - if (array.Length > 1 && int.TryParse(array[1], out var result)) - { - port = result; - } - if (text.Length != 0) - { - m_joinServer = new MasterClient.ServerData(); - m_joinServer.m_host = text; - m_joinServer.m_port = port; - JoinServer(); - } - } - } - - public void OnJoinIPBack() - { - m_joinIPPanel.SetActive(value: false); - } - - public void OnServerListTab() - { - bool publicFilter = PlayerPrefs.GetInt("publicfilter", 0) == 1; - SetPublicFilter(publicFilter); - QueueServerListUpdate(); - UpdateServerListGui(centerSelection: true); - m_filterInputField.ActivateInputField(); - } - - private void SetPublicFilter(bool enabled) - { - m_friendFilterSwitch.isOn = !enabled; - m_publicFilterSwitch.isOn = enabled; - } - - public void OnStartGameBack() - { - m_startGamePanel.SetActive(value: false); - ShowCharacterSelection(); - } - - public void OnCredits() - { - m_creditsPanel.SetActive(value: true); - m_mainMenu.SetActive(value: false); - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "Credits", 0L); - } - - public void OnCreditsBack() - { - m_mainMenu.SetActive(value: true); - m_creditsPanel.SetActive(value: false); - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "StartMenu", 0L); - } - - public void OnSelelectCharacterBack() - { - m_characterSelectScreen.SetActive(value: false); - m_mainMenu.SetActive(value: true); - m_queuedJoinServer = null; - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "StartMenu", 0L); - } - - public void OnAbort() - { - Application.Quit(); - } - - public void OnWorldVersionYes() - { - m_worldVersionPanel.SetActive(value: false); - } - - public void OnPlayerVersionOk() - { - m_playerVersionPanel.SetActive(value: false); - } - - private void FixedUpdate() - { - ZInput.FixedUpdate(Time.fixedDeltaTime); - } - - private void UpdateCursor() - { - Cursor.lockState = CursorLockMode.None; - Cursor.visible = ZInput.IsMouseActive(); - } - - private void Update() - { - ZInput.Update(Time.deltaTime); - UpdateCursor(); - UpdateGamepad(); - CheckPendingSteamJoinRequest(); - if (MasterClient.instance != null) - { - MasterClient.instance.Update(Time.deltaTime); - } - if (ZBroastcast.instance != null) - { - ZBroastcast.instance.Update(Time.deltaTime); - } - UpdateCharacterRotation(Time.deltaTime); - UpdateCamera(Time.deltaTime); - if (m_newCharacterPanel.activeInHierarchy) - { - m_csNewCharacterDone.interactable = m_csNewCharacterName.text.Length >= 3; - } - if (m_serverListPanel.activeInHierarchy) - { - m_joinGameButton.interactable = m_joinServer != null; - } - if (m_createWorldPanel.activeInHierarchy) - { - m_newWorldDone.interactable = m_newWorldName.text.Length >= 5; - } - if (m_startGamePanel.activeInHierarchy) - { - m_worldStart.interactable = CanStartServer(); - m_worldRemove.interactable = m_world != null; - UpdatePasswordError(); - } - if (m_joinIPPanel.activeInHierarchy) - { - m_joinIPJoinButton.interactable = m_joinIPAddress.text.Length > 0; - } - if (m_startGamePanel.activeInHierarchy) - { - m_publicServerToggle.interactable = m_openServerToggle.isOn; - m_serverPassword.interactable = m_openServerToggle.isOn; - } - } - - private void LateUpdate() - { - if (Input.GetKeyDown(KeyCode.F11)) - { - GameCamera.ScreenShot(); - } - } - - private void UpdateGamepad() - { - if (!ZInput.IsGamepadActive()) - { - return; - } - if (m_worldListPanel.activeInHierarchy) - { - if (ZInput.GetButtonDown("JoyLStickDown")) - { - SetSelectedWorld(GetSelectedWorld() + 1, centerSelection: true); - } - if (ZInput.GetButtonDown("JoyLStickUp")) - { - SetSelectedWorld(GetSelectedWorld() - 1, centerSelection: true); - } - } - else if (m_serverListPanel.activeInHierarchy) - { - if (ZInput.GetButtonDown("JoyLStickDown")) - { - SetSelectedServer(GetSelectedServer() + 1, centerSelection: true); - } - if (ZInput.GetButtonDown("JoyLStickUp")) - { - SetSelectedServer(GetSelectedServer() - 1, centerSelection: true); - } - } - } - - private void CheckPendingSteamJoinRequest() - { - if (ZSteamMatchmaking.instance != null) - { - CSteamID joinUserID = ZSteamMatchmaking.instance.GetJoinUserID(); - if (joinUserID != CSteamID.Nil) - { - m_queuedJoinServer = new MasterClient.ServerData(); - m_queuedJoinServer.m_steamHostID = (ulong)joinUserID; - OnJoinGame(); - } - } - } - - private void UpdateCharacterRotation(float dt) - { - if (!(m_playerInstance == null) && m_characterSelectScreen.activeInHierarchy) - { - if (Input.GetMouseButton(0) && !EventSystem.current.IsPointerOverGameObject()) - { - float axis = Input.GetAxis("Mouse X"); - m_playerInstance.transform.Rotate(0f, (0f - axis) * m_characterRotateSpeed, 0f); - } - float joyRightStickX = ZInput.GetJoyRightStickX(); - if (joyRightStickX != 0f) - { - m_playerInstance.transform.Rotate(0f, (0f - joyRightStickX) * m_characterRotateSpeedGamepad * dt, 0f); - } - } - } - - private void UpdatePasswordError() - { - string text = ""; - if (m_publicServerToggle.isOn) - { - text = GetPublicPasswordError(m_serverPassword.text, m_world); - } - m_passwordError.text = text; - } - - private string GetPublicPasswordError(string password, World world) - { - if (password.Length < m_minimumPasswordLength) - { - return Localization.instance.Localize("$menu_passwordshort"); - } - if (world != null && (world.m_name.Contains(password) || world.m_seedName.Contains(password))) - { - return Localization.instance.Localize("$menu_passwordinvalid"); - } - return ""; - } - - private bool IsPublicPasswordValid(string password, World world) - { - if (password.Length < m_minimumPasswordLength) - { - return false; - } - if (world.m_name.Contains(password)) - { - return false; - } - if (world.m_seedName.Contains(password)) - { - return false; - } - return true; - } - - private bool CanStartServer() - { - if (m_world == null || m_world.m_loadError || m_world.m_versionError) - { - return false; - } - if (m_publicServerToggle.isOn && !IsPublicPasswordValid(m_serverPassword.text, m_world)) - { - return false; - } - return true; - } - - private void UpdateCamera(float dt) - { - Transform transform = m_cameraMarkerMain; - if (m_characterSelectScreen.activeSelf) - { - transform = m_cameraMarkerCharacter; - } - else if (m_creditsPanel.activeSelf) - { - transform = m_cameraMarkerCredits; - } - else if (m_startGamePanel.activeSelf || m_joinIPPanel.activeSelf) - { - transform = m_cameraMarkerGame; - } - m_mainCamera.transform.position = Vector3.SmoothDamp(m_mainCamera.transform.position, transform.position, ref camSpeed, 1.5f, 1000f, dt); - Vector3 forward = Vector3.SmoothDamp(m_mainCamera.transform.forward, transform.forward, ref camRotSpeed, 1.5f, 1000f, dt); - forward.Normalize(); - m_mainCamera.transform.rotation = Quaternion.LookRotation(forward); - } - - private void UpdateCharacterList() - { - if (m_profiles == null) - { - m_profiles = PlayerProfile.GetAllPlayerProfiles(); - } - if (m_profileIndex >= m_profiles.Count) - { - m_profileIndex = m_profiles.Count - 1; - } - m_csRemoveButton.gameObject.SetActive(m_profiles.Count > 0); - m_csStartButton.gameObject.SetActive(m_profiles.Count > 0); - m_csNewButton.gameObject.SetActive(m_profiles.Count > 0); - m_csNewBigButton.gameObject.SetActive(m_profiles.Count == 0); - m_csLeftButton.interactable = m_profileIndex > 0; - m_csRightButton.interactable = m_profileIndex < m_profiles.Count - 1; - if (m_profileIndex >= 0 && m_profileIndex < m_profiles.Count) - { - PlayerProfile playerProfile = m_profiles[m_profileIndex]; - m_csName.text = playerProfile.GetName(); - m_csName.gameObject.SetActive(value: true); - SetupCharacterPreview(playerProfile); - } - else - { - m_csName.gameObject.SetActive(value: false); - ClearCharacterPreview(); - } - } - - private void SetSelectedProfile(string filename) - { - if (m_profiles == null) - { - m_profiles = PlayerProfile.GetAllPlayerProfiles(); - } - m_profileIndex = 0; - for (int i = 0; i < m_profiles.Count; i++) - { - if (m_profiles[i].GetFilename() == filename) - { - m_profileIndex = i; - break; - } - } - UpdateCharacterList(); - } - - public void OnNewCharacterDone() - { - string text = m_csNewCharacterName.text; - string text2 = text.ToLower(); - if (PlayerProfile.HaveProfile(text2)) - { - m_newCharacterError.SetActive(value: true); - return; - } - Player component = m_playerInstance.GetComponent<Player>(); - component.GiveDefaultItems(); - PlayerProfile playerProfile = new PlayerProfile(text2); - playerProfile.SetName(text); - playerProfile.SavePlayerData(component); - playerProfile.Save(); - m_selectCharacterPanel.SetActive(value: true); - m_newCharacterPanel.SetActive(value: false); - m_profiles = null; - SetSelectedProfile(text2); - GoogleAnalyticsV4.instance.LogEvent("Menu", "NewCharacter", text, 0L); - } - - public void OnNewCharacterCancel() - { - m_selectCharacterPanel.SetActive(value: true); - m_newCharacterPanel.SetActive(value: false); - UpdateCharacterList(); - } - - public void OnCharacterNew() - { - m_newCharacterPanel.SetActive(value: true); - m_selectCharacterPanel.SetActive(value: false); - m_csNewCharacterName.text = ""; - m_newCharacterError.SetActive(value: false); - SetupCharacterPreview(null); - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "CreateCharacter", 0L); - } - - public void OnCharacterRemove() - { - if (m_profileIndex >= 0 && m_profileIndex < m_profiles.Count) - { - PlayerProfile playerProfile = m_profiles[m_profileIndex]; - m_removeCharacterName.text = playerProfile.GetName(); - m_tempRemoveCharacterName = playerProfile.GetFilename(); - m_tempRemoveCharacterIndex = m_profileIndex; - m_removeCharacterDialog.SetActive(value: true); - } - } - - public void OnButtonRemoveCharacterYes() - { - ZLog.Log("Remove character"); - PlayerProfile.RemoveProfile(m_tempRemoveCharacterName); - m_profiles.RemoveAt(m_tempRemoveCharacterIndex); - UpdateCharacterList(); - m_removeCharacterDialog.SetActive(value: false); - } - - public void OnButtonRemoveCharacterNo() - { - m_removeCharacterDialog.SetActive(value: false); - } - - public void OnCharacterLeft() - { - if (m_profileIndex > 0) - { - m_profileIndex--; - } - UpdateCharacterList(); - } - - public void OnCharacterRight() - { - if (m_profileIndex < m_profiles.Count - 1) - { - m_profileIndex++; - } - UpdateCharacterList(); - } - - public void OnCharacterStart() - { - ZLog.Log("OnCharacterStart"); - if (m_profileIndex < 0 || m_profileIndex >= m_profiles.Count) - { - return; - } - PlayerProfile playerProfile = m_profiles[m_profileIndex]; - PlayerPrefs.SetString("profile", playerProfile.GetFilename()); - Game.SetProfile(playerProfile.GetFilename()); - m_characterSelectScreen.SetActive(value: false); - if (m_queuedJoinServer != null) - { - m_joinServer = m_queuedJoinServer; - m_queuedJoinServer = null; - JoinServer(); - return; - } - ShowStartGame(); - if (m_worlds.Count == 0) - { - OnWorldNew(); - } - } - - private void TransitionToMainScene() - { - m_menuAnimator.SetTrigger("FadeOut"); - Invoke("LoadMainScene", 1.5f); - } - - private void LoadMainScene() - { - m_loading.SetActive(value: true); - SceneManager.LoadScene("main"); - } - - public void OnButtonSettings() - { - UnityEngine.Object.Instantiate(m_settingsPrefab, base.transform); - } - - public void OnButtonFeedback() - { - UnityEngine.Object.Instantiate(m_feedbackPrefab, base.transform); - } - - public void OnButtonTwitter() - { - Application.OpenURL("https://twitter.com/valheimgame"); - } - - public void OnButtonWebPage() - { - Application.OpenURL("http://valheimgame.com/"); - } - - public void OnButtonDiscord() - { - Application.OpenURL("https://discord.gg/44qXMJH"); - } - - public void OnButtonFacebook() - { - Application.OpenURL("https://www.facebook.com/valheimgame/"); - } - - public void OnButtonShowLog() - { - Application.OpenURL(Application.persistentDataPath + "/"); - } - - private bool AcceptedNDA() - { - return PlayerPrefs.GetInt("accepted_nda", 0) == 1; - } - - public void OnButtonNDAAccept() - { - PlayerPrefs.SetInt("accepted_nda", 1); - m_ndaPanel.SetActive(value: false); - m_mainMenu.SetActive(value: true); - } - - public void OnButtonNDADecline() - { - Application.Quit(); - } - - public void OnConnectionFailedOk() - { - m_connectionFailedPanel.SetActive(value: false); - } - - public Player GetPreviewPlayer() - { - if (m_playerInstance != null) - { - return m_playerInstance.GetComponent<Player>(); - } - return null; - } - - private void ClearCharacterPreview() - { - if ((bool)m_playerInstance) - { - UnityEngine.Object.Instantiate(m_changeEffectPrefab, m_characterPreviewPoint.position, m_characterPreviewPoint.rotation); - UnityEngine.Object.Destroy(m_playerInstance); - m_playerInstance = null; - } - } - - private void SetupCharacterPreview(PlayerProfile profile) - { - ClearCharacterPreview(); - ZNetView.m_forceDisableInit = true; - GameObject gameObject = UnityEngine.Object.Instantiate(m_playerPrefab, m_characterPreviewPoint.position, m_characterPreviewPoint.rotation); - ZNetView.m_forceDisableInit = false; - UnityEngine.Object.Destroy(gameObject.GetComponent<Rigidbody>()); - Animator[] componentsInChildren = gameObject.GetComponentsInChildren<Animator>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - componentsInChildren[i].updateMode = AnimatorUpdateMode.Normal; - } - Player component = gameObject.GetComponent<Player>(); - profile?.LoadPlayerData(component); - m_playerInstance = gameObject; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Fermenter.cs b/Valheim_v202102/Valheim/assembly_valheim/Fermenter.cs deleted file mode 100644 index d4a1dde..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Fermenter.cs +++ /dev/null @@ -1,342 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Fermenter : MonoBehaviour, Hoverable, Interactable -{ - [Serializable] - public class ItemConversion - { - public ItemDrop m_from; - - public ItemDrop m_to; - - public int m_producedItems = 4; - } - - private enum Status - { - Empty, - Fermenting, - Exposed, - Ready - } - - private const float updateDT = 2f; - - public string m_name = "Fermentation barrel"; - - public float m_fermentationDuration = 2400f; - - public GameObject m_fermentingObject; - - public GameObject m_readyObject; - - public GameObject m_topObject; - - public EffectList m_addedEffects = new EffectList(); - - public EffectList m_tapEffects = new EffectList(); - - public EffectList m_spawnEffects = new EffectList(); - - public Switch m_addSwitch; - - public Switch m_tapSwitch; - - public float m_tapDelay = 1.5f; - - public Transform m_outputPoint; - - public Transform m_roofCheckPoint; - - public List<ItemConversion> m_conversion = new List<ItemConversion>(); - - private ZNetView m_nview; - - private float m_updateCoverTimer; - - private bool m_exposed; - - private string m_delayedTapItem = ""; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_fermentingObject.SetActive(value: false); - m_readyObject.SetActive(value: false); - m_topObject.SetActive(value: true); - if (!(m_nview == null) && m_nview.GetZDO() != null) - { - m_nview.Register<string>("AddItem", RPC_AddItem); - m_nview.Register("Tap", RPC_Tap); - InvokeRepeating("UpdateVis", 2f, 2f); - } - } - - public string GetHoverName() - { - return m_name; - } - - public string GetHoverText() - { - if (!PrivateArea.CheckAccess(base.transform.position, 0f, flash: false)) - { - return Localization.instance.Localize(m_name + "\n$piece_noaccess"); - } - switch (GetStatus()) - { - case Status.Ready: - { - string contentName2 = GetContentName(); - return Localization.instance.Localize(m_name + " ( " + contentName2 + ", $piece_fermenter_ready )\n[<color=yellow><b>$KEY_Use</b></color>] $piece_fermenter_tap"); - } - case Status.Fermenting: - { - string contentName = GetContentName(); - if (m_exposed) - { - return Localization.instance.Localize(m_name + " ( " + contentName + ", $piece_fermenter_exposed )"); - } - return Localization.instance.Localize(m_name + " ( " + contentName + ", $piece_fermenter_fermenting )"); - } - case Status.Empty: - return Localization.instance.Localize(m_name + " ( $piece_container_empty )\n[<color=yellow><b>$KEY_Use</b></color>] $piece_fermenter_add"); - default: - return m_name; - } - } - - public bool Interact(Humanoid user, bool hold) - { - if (hold) - { - return false; - } - if (!PrivateArea.CheckAccess(base.transform.position)) - { - return true; - } - switch (GetStatus()) - { - case Status.Empty: - { - ItemDrop.ItemData itemData = FindCookableItem(user.GetInventory()); - if (itemData == null) - { - user.Message(MessageHud.MessageType.Center, "$msg_noprocessableitems"); - return true; - } - AddItem(user, itemData); - break; - } - case Status.Ready: - m_nview.InvokeRPC("Tap"); - break; - } - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - if (!PrivateArea.CheckAccess(base.transform.position)) - { - return false; - } - return AddItem(user, item); - } - - private void UpdateVis() - { - UpdateCover(2f); - switch (GetStatus()) - { - case Status.Empty: - m_fermentingObject.SetActive(value: false); - m_readyObject.SetActive(value: false); - m_topObject.SetActive(value: false); - break; - case Status.Fermenting: - m_readyObject.SetActive(value: false); - m_topObject.SetActive(value: true); - m_fermentingObject.SetActive(!m_exposed); - break; - case Status.Ready: - m_fermentingObject.SetActive(value: false); - m_readyObject.SetActive(value: true); - m_topObject.SetActive(value: true); - break; - case Status.Exposed: - break; - } - } - - private Status GetStatus() - { - if (string.IsNullOrEmpty(GetContent())) - { - return Status.Empty; - } - if (GetFermentationTime() > (double)m_fermentationDuration) - { - return Status.Ready; - } - return Status.Fermenting; - } - - private bool AddItem(Humanoid user, ItemDrop.ItemData item) - { - if (GetStatus() != 0) - { - return false; - } - if (!IsItemAllowed(item)) - { - return false; - } - if (!user.GetInventory().RemoveOneItem(item)) - { - return false; - } - m_nview.InvokeRPC("AddItem", item.m_dropPrefab.name); - return true; - } - - private void RPC_AddItem(long sender, string name) - { - if (m_nview.IsOwner() && GetStatus() == Status.Empty) - { - if (!IsItemAllowed(name)) - { - ZLog.DevLog("Item not allowed"); - return; - } - m_addedEffects.Create(base.transform.position, base.transform.rotation); - m_nview.GetZDO().Set("Content", name); - m_nview.GetZDO().Set("StartTime", ZNet.instance.GetTime().Ticks); - } - } - - private void RPC_Tap(long sender) - { - if (m_nview.IsOwner() && GetStatus() == Status.Ready) - { - m_delayedTapItem = GetContent(); - Invoke("DelayedTap", m_tapDelay); - m_tapEffects.Create(base.transform.position, base.transform.rotation); - m_nview.GetZDO().Set("Content", ""); - m_nview.GetZDO().Set("StartTime", 0); - } - } - - private void DelayedTap() - { - m_spawnEffects.Create(m_outputPoint.transform.position, Quaternion.identity); - ItemConversion itemConversion = GetItemConversion(m_delayedTapItem); - if (itemConversion != null) - { - float num = 0.3f; - for (int i = 0; i < itemConversion.m_producedItems; i++) - { - Vector3 position = m_outputPoint.position + Vector3.up * num; - UnityEngine.Object.Instantiate(itemConversion.m_to, position, Quaternion.identity); - } - } - } - - private void ResetFermentationTimer() - { - if (GetStatus() == Status.Fermenting) - { - m_nview.GetZDO().Set("StartTime", ZNet.instance.GetTime().Ticks); - } - } - - private double GetFermentationTime() - { - DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("StartTime", 0L)); - if (dateTime.Ticks == 0L) - { - return -1.0; - } - return (ZNet.instance.GetTime() - dateTime).TotalSeconds; - } - - private string GetContentName() - { - string content = GetContent(); - if (string.IsNullOrEmpty(content)) - { - return ""; - } - ItemConversion itemConversion = GetItemConversion(content); - if (itemConversion == null) - { - return "Invalid"; - } - return itemConversion.m_from.m_itemData.m_shared.m_name; - } - - private string GetContent() - { - return m_nview.GetZDO().GetString("Content"); - } - - private void UpdateCover(float dt) - { - m_updateCoverTimer += dt; - if (m_updateCoverTimer > 10f) - { - m_updateCoverTimer = 0f; - Cover.GetCoverForPoint(m_roofCheckPoint.position, out var coverPercentage, out var underRoof); - m_exposed = !underRoof || coverPercentage < 0.7f; - if (m_exposed && m_nview.IsOwner()) - { - ResetFermentationTimer(); - } - } - } - - private bool IsItemAllowed(ItemDrop.ItemData item) - { - return IsItemAllowed(item.m_dropPrefab.name); - } - - private bool IsItemAllowed(string itemName) - { - foreach (ItemConversion item in m_conversion) - { - if (item.m_from.gameObject.name == itemName) - { - return true; - } - } - return false; - } - - private ItemDrop.ItemData FindCookableItem(Inventory inventory) - { - foreach (ItemConversion item2 in m_conversion) - { - ItemDrop.ItemData item = inventory.GetItem(item2.m_from.m_itemData.m_shared.m_name); - if (item != null) - { - return item; - } - } - return null; - } - - private ItemConversion GetItemConversion(string itemName) - { - foreach (ItemConversion item in m_conversion) - { - if (item.m_from.gameObject.name == itemName) - { - return item; - } - } - return null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Fireplace.cs b/Valheim_v202102/Valheim/assembly_valheim/Fireplace.cs deleted file mode 100644 index 6cc6478..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Fireplace.cs +++ /dev/null @@ -1,307 +0,0 @@ -using System; -using UnityEngine; - -public class Fireplace : MonoBehaviour, Hoverable, Interactable -{ - private ZNetView m_nview; - - private Piece m_piece; - - [Header("Fire")] - public string m_name = "Fire"; - - public float m_startFuel = 3f; - - public float m_maxFuel = 10f; - - public float m_secPerFuel = 3f; - - public float m_checkTerrainOffset = 0.2f; - - public float m_coverCheckOffset = 0.5f; - - private const float m_minimumOpenSpace = 0.5f; - - public GameObject m_enabledObject; - - public GameObject m_enabledObjectLow; - - public GameObject m_enabledObjectHigh; - - public GameObject m_playerBaseObject; - - public ItemDrop m_fuelItem; - - public SmokeSpawner m_smokeSpawner; - - public EffectList m_fuelAddedEffects = new EffectList(); - - [Header("Fireworks")] - public ItemDrop m_fireworkItem; - - public int m_fireworkItems = 2; - - public GameObject m_fireworks; - - private bool m_blocked; - - private bool m_wet; - - private static int m_solidRayMask; - - public void Awake() - { - m_nview = base.gameObject.GetComponent<ZNetView>(); - m_piece = base.gameObject.GetComponent<Piece>(); - if (m_nview.GetZDO() == null) - { - return; - } - if (m_solidRayMask == 0) - { - m_solidRayMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "terrain"); - } - if (m_nview.IsOwner() && m_nview.GetZDO().GetFloat("fuel", -1f) == -1f) - { - m_nview.GetZDO().Set("fuel", m_startFuel); - if (m_startFuel > 0f) - { - m_fuelAddedEffects.Create(base.transform.position, base.transform.rotation); - } - } - m_nview.Register("AddFuel", RPC_AddFuel); - InvokeRepeating("UpdateFireplace", 0f, 2f); - InvokeRepeating("CheckEnv", 4f, 4f); - } - - private void Start() - { - if ((bool)m_playerBaseObject && (bool)m_piece) - { - m_playerBaseObject.SetActive(m_piece.IsPlacedByPlayer()); - } - } - - private double GetTimeSinceLastUpdate() - { - DateTime time = ZNet.instance.GetTime(); - DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("lastTime", time.Ticks)); - TimeSpan timeSpan = time - dateTime; - m_nview.GetZDO().Set("lastTime", time.Ticks); - double num = timeSpan.TotalSeconds; - if (num < 0.0) - { - num = 0.0; - } - return num; - } - - private void UpdateFireplace() - { - if (!m_nview.IsValid()) - { - return; - } - if (m_nview.IsOwner()) - { - float @float = m_nview.GetZDO().GetFloat("fuel"); - double timeSinceLastUpdate = GetTimeSinceLastUpdate(); - if (IsBurning()) - { - float num = (float)(timeSinceLastUpdate / (double)m_secPerFuel); - @float -= num; - if (@float <= 0f) - { - @float = 0f; - } - m_nview.GetZDO().Set("fuel", @float); - } - } - UpdateState(); - } - - private void CheckEnv() - { - CheckUnderTerrain(); - if (m_enabledObjectLow != null && m_enabledObjectHigh != null) - { - CheckWet(); - } - } - - private void CheckUnderTerrain() - { - m_blocked = false; - RaycastHit hitInfo; - if (Heightmap.GetHeight(base.transform.position, out var height) && height > base.transform.position.y + m_checkTerrainOffset) - { - m_blocked = true; - } - else if (Physics.Raycast(base.transform.position + Vector3.up * m_coverCheckOffset, Vector3.up, out hitInfo, 0.5f, m_solidRayMask)) - { - m_blocked = true; - } - else if ((bool)m_smokeSpawner && m_smokeSpawner.IsBlocked()) - { - m_blocked = true; - } - } - - private void CheckWet() - { - Cover.GetCoverForPoint(base.transform.position + Vector3.up * m_coverCheckOffset, out var coverPercentage, out var underRoof); - m_wet = false; - if (EnvMan.instance.GetWindIntensity() >= 0.8f && coverPercentage < 0.7f) - { - m_wet = true; - } - if (EnvMan.instance.IsWet() && !underRoof) - { - m_wet = true; - } - } - - private void UpdateState() - { - if (IsBurning()) - { - m_enabledObject.SetActive(value: true); - if ((bool)m_enabledObjectHigh && (bool)m_enabledObjectLow) - { - m_enabledObjectHigh.SetActive(!m_wet); - m_enabledObjectLow.SetActive(m_wet); - } - } - else - { - m_enabledObject.SetActive(value: false); - if ((bool)m_enabledObjectHigh && (bool)m_enabledObjectLow) - { - m_enabledObjectLow.SetActive(value: false); - m_enabledObjectHigh.SetActive(value: false); - } - } - } - - public string GetHoverText() - { - float @float = m_nview.GetZDO().GetFloat("fuel"); - return Localization.instance.Localize(m_name + " ( $piece_fire_fuel " + Mathf.Ceil(@float) + "/" + (int)m_maxFuel + " )\n[<color=yellow><b>$KEY_Use</b></color>] $piece_use " + m_fuelItem.m_itemData.m_shared.m_name + "\n[<color=yellow><b>1-8</b></color>] $piece_useitem"); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid user, bool hold) - { - if (hold) - { - return false; - } - if (!m_nview.HasOwner()) - { - m_nview.ClaimOwnership(); - } - Inventory inventory = user.GetInventory(); - if (inventory != null) - { - if (inventory.HaveItem(m_fuelItem.m_itemData.m_shared.m_name)) - { - if ((float)Mathf.CeilToInt(m_nview.GetZDO().GetFloat("fuel")) >= m_maxFuel) - { - user.Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_cantaddmore", m_fuelItem.m_itemData.m_shared.m_name)); - return false; - } - user.Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_fireadding", m_fuelItem.m_itemData.m_shared.m_name)); - inventory.RemoveItem(m_fuelItem.m_itemData.m_shared.m_name, 1); - m_nview.InvokeRPC("AddFuel"); - return true; - } - user.Message(MessageHud.MessageType.Center, "$msg_outof " + m_fuelItem.m_itemData.m_shared.m_name); - return false; - } - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - if (item.m_shared.m_name == m_fuelItem.m_itemData.m_shared.m_name) - { - if ((float)Mathf.CeilToInt(m_nview.GetZDO().GetFloat("fuel")) >= m_maxFuel) - { - user.Message(MessageHud.MessageType.Center, "$msg_cantaddmore " + item.m_shared.m_name); - return true; - } - Inventory inventory = user.GetInventory(); - user.Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_fireadding", item.m_shared.m_name)); - inventory.RemoveItem(item, 1); - m_nview.InvokeRPC("AddFuel"); - return true; - } - if (m_fireworkItem != null && item.m_shared.m_name == m_fireworkItem.m_itemData.m_shared.m_name) - { - if (!IsBurning()) - { - user.Message(MessageHud.MessageType.Center, "$msg_firenotburning"); - return true; - } - if (user.GetInventory().CountItems(m_fireworkItem.m_itemData.m_shared.m_name) < m_fireworkItems) - { - user.Message(MessageHud.MessageType.Center, "$msg_toofew " + m_fireworkItem.m_itemData.m_shared.m_name); - return true; - } - user.GetInventory().RemoveItem(item.m_shared.m_name, m_fireworkItems); - user.Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_throwinfire", item.m_shared.m_name)); - ZNetScene.instance.SpawnObject(base.transform.position, Quaternion.identity, m_fireworks); - m_fuelAddedEffects.Create(base.transform.position, base.transform.rotation); - return true; - } - return false; - } - - private void RPC_AddFuel(long sender) - { - if (m_nview.IsOwner()) - { - float @float = m_nview.GetZDO().GetFloat("fuel"); - if (!((float)Mathf.CeilToInt(@float) >= m_maxFuel)) - { - @float = Mathf.Clamp(@float, 0f, m_maxFuel); - @float += 1f; - @float = Mathf.Clamp(@float, 0f, m_maxFuel); - m_nview.GetZDO().Set("fuel", @float); - m_fuelAddedEffects.Create(base.transform.position, base.transform.rotation); - UpdateState(); - } - } - } - - public bool CanBeRemoved() - { - return !IsBurning(); - } - - public bool IsBurning() - { - if (m_blocked) - { - return false; - } - float waterLevel = WaterVolume.GetWaterLevel(m_enabledObject.transform.position); - if (m_enabledObject.transform.position.y < waterLevel) - { - return false; - } - return m_nview.GetZDO().GetFloat("fuel") > 0f; - } - - private void OnDrawGizmosSelected() - { - Gizmos.color = Color.white; - Gizmos.DrawWireSphere(base.transform.position + Vector3.up * m_coverCheckOffset, 0.5f); - Gizmos.color = Color.yellow; - Gizmos.DrawWireCube(base.transform.position + Vector3.up * m_checkTerrainOffset, new Vector3(1f, 0.01f, 1f)); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Fish.cs b/Valheim_v202102/Valheim/assembly_valheim/Fish.cs deleted file mode 100644 index 8c88937..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Fish.cs +++ /dev/null @@ -1,373 +0,0 @@ -using UnityEngine; - -public class Fish : MonoBehaviour, IWaterInteractable, Hoverable, Interactable -{ - public string m_name = "Fish"; - - public float m_swimRange = 20f; - - public float m_minDepth = 1f; - - public float m_maxDepth = 4f; - - public float m_speed = 10f; - - public float m_acceleration = 5f; - - public float m_turnRate = 10f; - - public float m_wpDurationMin = 4f; - - public float m_wpDurationMax = 4f; - - public float m_avoidSpeedScale = 2f; - - public float m_avoidRange = 5f; - - public float m_height = 0.2f; - - public float m_eatDuration = 4f; - - public float m_hookForce = 4f; - - public float m_staminaUse = 1f; - - public float m_baseHookChance = 0.5f; - - public GameObject m_pickupItem; - - public int m_pickupItemStackSize = 1; - - private Vector3 m_spawnPoint; - - private Vector3 m_waypoint; - - private FishingFloat m_waypointFF; - - private bool m_haveWaypoint; - - private float m_swimTimer; - - private float m_lastNibbleTime; - - private float m_inWater = -10000f; - - private float m_pickupTime; - - private ZNetView m_nview; - - private Rigidbody m_body; - - private void Start() - { - m_nview = GetComponent<ZNetView>(); - m_body = GetComponent<Rigidbody>(); - m_spawnPoint = m_nview.GetZDO().GetVec3("spawnpoint", base.transform.position); - if (m_nview.IsOwner()) - { - m_nview.GetZDO().Set("spawnpoint", m_spawnPoint); - } - if (m_nview.IsOwner()) - { - RandomizeWaypoint(canHook: true); - } - if ((bool)m_nview && m_nview.IsValid()) - { - m_nview.Register("RequestPickup", RPC_RequestPickup); - m_nview.Register("Pickup", RPC_Pickup); - } - } - - public bool IsOwner() - { - if ((bool)m_nview && m_nview.IsValid()) - { - return m_nview.IsOwner(); - } - return false; - } - - public string GetHoverText() - { - string text = m_name; - if (IsOutOfWater()) - { - text += "\n[<color=yellow><b>$KEY_Use</b></color>] $inventory_pickup"; - } - return Localization.instance.Localize(text); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid character, bool repeat) - { - if (repeat) - { - return false; - } - if (!IsOutOfWater()) - { - return false; - } - if (Pickup(character)) - { - return true; - } - return false; - } - - public bool Pickup(Humanoid character) - { - if (!character.GetInventory().CanAddItem(m_pickupItem, m_pickupItemStackSize)) - { - character.Message(MessageHud.MessageType.Center, "$msg_noroom"); - return false; - } - m_nview.InvokeRPC("RequestPickup"); - return true; - } - - private void RPC_RequestPickup(long uid) - { - if (Time.time - m_pickupTime > 2f) - { - m_pickupTime = Time.time; - m_nview.InvokeRPC(uid, "Pickup"); - } - } - - private void RPC_Pickup(long uid) - { - if ((bool)Player.m_localPlayer && Player.m_localPlayer.PickupPrefab(m_pickupItem, m_pickupItemStackSize) != null) - { - m_nview.ClaimOwnership(); - m_nview.Destroy(); - } - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public void SetInWater(float waterLevel) - { - m_inWater = waterLevel; - } - - public Transform GetTransform() - { - if (this == null) - { - return null; - } - return base.transform; - } - - private bool IsOutOfWater() - { - return m_inWater < base.transform.position.y - m_height; - } - - private void FixedUpdate() - { - if (!m_nview.IsValid()) - { - return; - } - float fixedDeltaTime = Time.fixedDeltaTime; - if (!m_nview.IsOwner()) - { - return; - } - FishingFloat fishingFloat = FishingFloat.FindFloat(this); - if ((bool)fishingFloat) - { - Utils.Pull(m_body, fishingFloat.transform.position, 1f, m_hookForce, 1f, 0.5f); - } - if (m_inWater <= -10000f || m_inWater < base.transform.position.y + m_height) - { - m_body.useGravity = true; - if (IsOutOfWater()) - { - return; - } - } - m_body.useGravity = false; - bool flag = false; - Player playerNoiseRange = Player.GetPlayerNoiseRange(base.transform.position); - if ((bool)playerNoiseRange) - { - if (Vector3.Distance(base.transform.position, playerNoiseRange.transform.position) > m_avoidRange / 2f) - { - Vector3 normalized = (base.transform.position - playerNoiseRange.transform.position).normalized; - SwimDirection(normalized, fast: true, avoidLand: true, fixedDeltaTime); - return; - } - flag = true; - if (m_swimTimer > 0.5f) - { - m_swimTimer = 0.5f; - } - } - m_swimTimer -= fixedDeltaTime; - if (m_swimTimer <= 0f) - { - RandomizeWaypoint(!flag); - } - if (m_haveWaypoint) - { - if ((bool)m_waypointFF) - { - m_waypoint = m_waypointFF.transform.position + Vector3.down; - } - if (Vector3.Distance(m_waypoint, base.transform.position) < 0.2f) - { - if (!m_waypointFF) - { - m_haveWaypoint = false; - return; - } - if (Time.time - m_lastNibbleTime > 1f) - { - m_lastNibbleTime = Time.time; - m_waypointFF.Nibble(this); - } - } - Vector3 dir = Vector3.Normalize(m_waypoint - base.transform.position); - SwimDirection(dir, flag, avoidLand: false, fixedDeltaTime); - } - else - { - Stop(fixedDeltaTime); - } - } - - private void Stop(float dt) - { - if (!(m_inWater < base.transform.position.y + m_height)) - { - Vector3 forward = base.transform.forward; - forward.y = 0f; - forward.Normalize(); - Quaternion to = Quaternion.LookRotation(forward, Vector3.up); - Quaternion rot = Quaternion.RotateTowards(m_body.rotation, to, m_turnRate * dt); - m_body.MoveRotation(rot); - Vector3 force = -m_body.velocity * m_acceleration; - m_body.AddForce(force, ForceMode.VelocityChange); - } - } - - private void SwimDirection(Vector3 dir, bool fast, bool avoidLand, float dt) - { - Vector3 forward = dir; - forward.y = 0f; - forward.Normalize(); - float num = m_turnRate; - if (fast) - { - num *= m_avoidSpeedScale; - } - Quaternion to = Quaternion.LookRotation(forward, Vector3.up); - Quaternion rotation = Quaternion.RotateTowards(base.transform.rotation, to, num * dt); - m_body.rotation = rotation; - float num2 = m_speed; - if (fast) - { - num2 *= m_avoidSpeedScale; - } - if (avoidLand && GetPointDepth(base.transform.position + base.transform.forward) < m_minDepth) - { - num2 = 0f; - } - if (fast && Vector3.Dot(dir, base.transform.forward) < 0f) - { - num2 = 0f; - } - Vector3 forward2 = base.transform.forward; - forward2.y = dir.y; - Vector3 vector = forward2 * num2 - m_body.velocity; - if (m_inWater < base.transform.position.y + m_height && vector.y > 0f) - { - vector.y = 0f; - } - m_body.AddForce(vector * m_acceleration, ForceMode.VelocityChange); - } - - private FishingFloat FindFloat() - { - foreach (FishingFloat allInstance in FishingFloat.GetAllInstances()) - { - if (!(Vector3.Distance(base.transform.position, allInstance.transform.position) > allInstance.m_range) && allInstance.IsInWater() && !(allInstance.GetCatch() != null)) - { - float baseHookChance = m_baseHookChance; - if (Random.value < baseHookChance) - { - return allInstance; - } - } - } - return null; - } - - private void RandomizeWaypoint(bool canHook) - { - Vector2 vector = Random.insideUnitCircle * m_swimRange; - m_waypoint = m_spawnPoint + new Vector3(vector.x, 0f, vector.y); - m_waypointFF = null; - if (canHook) - { - FishingFloat fishingFloat = FindFloat(); - if ((bool)fishingFloat) - { - m_waypointFF = fishingFloat; - m_waypoint = fishingFloat.transform.position + Vector3.down; - } - } - float pointDepth = GetPointDepth(m_waypoint); - if (!(pointDepth < m_minDepth)) - { - Vector3 p = (m_waypoint + base.transform.position) * 0.5f; - if (!(GetPointDepth(p) < m_minDepth)) - { - float max = Mathf.Min(m_maxDepth, pointDepth - m_height); - float waterLevel = WaterVolume.GetWaterLevel(m_waypoint); - m_waypoint.y = waterLevel - Random.Range(m_minDepth, max); - m_haveWaypoint = true; - m_swimTimer = Random.Range(m_wpDurationMin, m_wpDurationMax); - } - } - } - - private float GetPointDepth(Vector3 p) - { - if (ZoneSystem.instance.GetSolidHeight(p, out var height)) - { - return ZoneSystem.instance.m_waterLevel - height; - } - return 0f; - } - - private bool DangerNearby() - { - if (Player.GetPlayerNoiseRange(base.transform.position) != null) - { - return true; - } - return false; - } - - public ZDOID GetZDOID() - { - return m_nview.GetZDO().m_uid; - } - - private void OnDrawGizmosSelected() - { - Gizmos.color = Color.blue; - Gizmos.DrawWireCube(base.transform.position + Vector3.up * m_height, new Vector3(1f, 0.02f, 1f)); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/FishingFloat.cs b/Valheim_v202102/Valheim/assembly_valheim/FishingFloat.cs deleted file mode 100644 index 735f68b..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/FishingFloat.cs +++ /dev/null @@ -1,313 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class FishingFloat : MonoBehaviour, IProjectile -{ - public float m_maxDistance = 30f; - - public float m_moveForce = 10f; - - public float m_pullLineSpeed = 1f; - - public float m_pullStaminaUse = 10f; - - public float m_hookedStaminaPerSec = 1f; - - public float m_breakDistance = 4f; - - public float m_range = 10f; - - public float m_nibbleForce = 10f; - - public EffectList m_nibbleEffect = new EffectList(); - - public EffectList m_lineBreakEffect = new EffectList(); - - public float m_maxLineSlack = 0.3f; - - public LineConnect m_rodLine; - - public LineConnect m_hookLine; - - private ZNetView m_nview; - - private Rigidbody m_body; - - private Floating m_floating; - - private float m_lineLength; - - private float m_msgTime; - - private Fish m_nibbler; - - private float m_nibbleTime; - - private static List<FishingFloat> m_allInstances = new List<FishingFloat>(); - - public string GetTooltipString(int itemQuality) - { - return ""; - } - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_body = GetComponent<Rigidbody>(); - m_floating = GetComponent<Floating>(); - m_nview.Register<ZDOID>("Nibble", RPC_Nibble); - } - - private void OnDestroy() - { - m_allInstances.Remove(this); - } - - public void Setup(Character owner, Vector3 velocity, float hitNoise, HitData hitData, ItemDrop.ItemData item) - { - FishingFloat fishingFloat = FindFloat(owner); - if ((bool)fishingFloat) - { - ZNetScene.instance.Destroy(fishingFloat.gameObject); - } - ZDOID zDOID = owner.GetZDOID(); - m_nview.GetZDO().Set("RodOwner", zDOID); - m_allInstances.Add(this); - Transform rodTop = GetRodTop(owner); - if (rodTop == null) - { - ZLog.LogWarning("Failed to find fishing rod top"); - return; - } - m_rodLine.SetPeer(owner.GetZDOID()); - m_lineLength = Vector3.Distance(rodTop.position, base.transform.position); - owner.Message(MessageHud.MessageType.Center, m_lineLength.ToString("0m")); - } - - public Character GetOwner() - { - if (!m_nview.IsValid()) - { - return null; - } - ZDOID zDOID = m_nview.GetZDO().GetZDOID("RodOwner"); - GameObject gameObject = ZNetScene.instance.FindInstance(zDOID); - if (gameObject == null) - { - return null; - } - return gameObject.GetComponent<Character>(); - } - - private Transform GetRodTop(Character owner) - { - Transform transform = Utils.FindChild(owner.transform, "_RodTop"); - if (transform == null) - { - ZLog.LogWarning("Failed to find fishing rod top"); - return null; - } - return transform; - } - - private void FixedUpdate() - { - if (!m_nview.IsOwner()) - { - return; - } - float fixedDeltaTime = Time.fixedDeltaTime; - Character owner = GetOwner(); - if (!owner) - { - ZLog.LogWarning("Fishing rod not found, destroying fishing float"); - m_nview.Destroy(); - return; - } - Transform rodTop = GetRodTop(owner); - if (!rodTop) - { - ZLog.LogWarning("Fishing rod not found, destroying fishing float"); - m_nview.Destroy(); - return; - } - if (owner.InAttack() || owner.IsHoldingAttack()) - { - m_nview.Destroy(); - return; - } - float magnitude = (rodTop.transform.position - base.transform.position).magnitude; - Fish fish = GetCatch(); - if (!owner.HaveStamina() && fish != null) - { - SetCatch(null); - fish = null; - Message("$msg_fishing_lost", prioritized: true); - } - if ((bool)fish) - { - owner.UseStamina(m_hookedStaminaPerSec * fixedDeltaTime); - } - if (!fish && Utils.LengthXZ(m_body.velocity) > 2f) - { - TryToHook(); - } - if (owner.IsBlocking() && owner.HaveStamina()) - { - float num = m_pullStaminaUse; - if (fish != null) - { - num += fish.m_staminaUse; - } - owner.UseStamina(num * fixedDeltaTime); - if (m_lineLength > magnitude - 0.2f) - { - float lineLength = m_lineLength; - m_lineLength -= fixedDeltaTime * m_pullLineSpeed; - TryToHook(); - if ((int)m_lineLength != (int)lineLength) - { - Message(m_lineLength.ToString("0m")); - } - } - if (m_lineLength <= 0.5f) - { - if ((bool)fish) - { - if (fish.Pickup(owner as Humanoid)) - { - Message("$msg_fishing_catched " + fish.GetHoverName(), prioritized: true); - SetCatch(null); - } - } - else - { - m_nview.Destroy(); - } - return; - } - } - m_rodLine.m_slack = (1f - Utils.LerpStep(m_lineLength / 2f, m_lineLength, magnitude)) * m_maxLineSlack; - if (magnitude - m_lineLength > m_breakDistance || magnitude > m_maxDistance) - { - Message("$msg_fishing_linebroke", prioritized: true); - m_nview.Destroy(); - m_lineBreakEffect.Create(base.transform.position, Quaternion.identity); - return; - } - if ((bool)fish) - { - Utils.Pull(m_body, fish.transform.position, 0.5f, m_moveForce, 0.5f, 0.3f); - } - Utils.Pull(m_body, rodTop.transform.position, m_lineLength, m_moveForce, 1f, 0.3f); - } - - private void TryToHook() - { - if (m_nibbler != null && Time.time - m_nibbleTime < 0.5f && GetCatch() == null) - { - Message("$msg_fishing_hooked", prioritized: true); - SetCatch(m_nibbler); - m_nibbler = null; - } - } - - private void SetCatch(Fish fish) - { - if ((bool)fish) - { - m_nview.GetZDO().Set("CatchID", fish.GetZDOID()); - m_hookLine.SetPeer(fish.GetZDOID()); - } - else - { - m_nview.GetZDO().Set("CatchID", ZDOID.None); - m_hookLine.SetPeer(ZDOID.None); - } - } - - public Fish GetCatch() - { - if (!m_nview.IsValid()) - { - return null; - } - ZDOID zDOID = m_nview.GetZDO().GetZDOID("CatchID"); - if (!zDOID.IsNone()) - { - GameObject gameObject = ZNetScene.instance.FindInstance(zDOID); - if ((bool)gameObject) - { - return gameObject.GetComponent<Fish>(); - } - } - return null; - } - - public bool IsInWater() - { - return m_floating.IsInWater(); - } - - public void Nibble(Fish fish) - { - m_nview.InvokeRPC("Nibble", fish.GetZDOID()); - } - - public void RPC_Nibble(long sender, ZDOID fishID) - { - if (!(Time.time - m_nibbleTime < 1f) && !(GetCatch() != null)) - { - m_nibbleEffect.Create(base.transform.position, Quaternion.identity, base.transform); - m_body.AddForce(Vector3.down * m_nibbleForce, ForceMode.VelocityChange); - GameObject gameObject = ZNetScene.instance.FindInstance(fishID); - if ((bool)gameObject) - { - m_nibbler = gameObject.GetComponent<Fish>(); - m_nibbleTime = Time.time; - } - } - } - - public static List<FishingFloat> GetAllInstances() - { - return m_allInstances; - } - - private static FishingFloat FindFloat(Character owner) - { - foreach (FishingFloat allInstance in m_allInstances) - { - if (owner == allInstance.GetOwner()) - { - return allInstance; - } - } - return null; - } - - public static FishingFloat FindFloat(Fish fish) - { - foreach (FishingFloat allInstance in m_allInstances) - { - if (allInstance.GetCatch() == fish) - { - return allInstance; - } - } - return null; - } - - private void Message(string msg, bool prioritized = false) - { - if (prioritized || !(Time.time - m_msgTime < 1f)) - { - m_msgTime = Time.time; - Character owner = GetOwner(); - if ((bool)owner) - { - owner.Message(MessageHud.MessageType.Center, Localization.instance.Localize(msg)); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Floating.cs b/Valheim_v202102/Valheim/assembly_valheim/Floating.cs deleted file mode 100644 index de3b5ff..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Floating.cs +++ /dev/null @@ -1,174 +0,0 @@ -using UnityEngine; - -public class Floating : MonoBehaviour, IWaterInteractable -{ - public float m_waterLevelOffset; - - public float m_forceDistance = 1f; - - public float m_force = 0.5f; - - public float m_balanceForceFraction = 0.02f; - - public float m_damping = 0.05f; - - private static float m_minImpactEffectVelocity = 0.5f; - - public EffectList m_impactEffects = new EffectList(); - - public GameObject m_surfaceEffects; - - private float m_inWater = -10000f; - - private bool m_beenInWater; - - private bool m_wasInWater = true; - - private Rigidbody m_body; - - private Collider m_collider; - - private ZNetView m_nview; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_body = GetComponent<Rigidbody>(); - m_collider = GetComponentInChildren<Collider>(); - SetSurfaceEffect(enabled: false); - InvokeRepeating("TerrainCheck", Random.Range(10f, 30f), 30f); - } - - public Transform GetTransform() - { - if (this == null) - { - return null; - } - return base.transform; - } - - public bool IsOwner() - { - if (m_nview.IsValid()) - { - return m_nview.IsOwner(); - } - return false; - } - - private void TerrainCheck() - { - if (!m_nview.IsValid() || !m_nview.IsOwner()) - { - return; - } - float groundHeight = ZoneSystem.instance.GetGroundHeight(base.transform.position); - if (base.transform.position.y - groundHeight < -1f) - { - Vector3 position = base.transform.position; - position.y = groundHeight + 1f; - base.transform.position = position; - Rigidbody component = GetComponent<Rigidbody>(); - if ((bool)component) - { - component.velocity = Vector3.zero; - } - ZLog.Log("Moved up item " + base.gameObject.name); - } - } - - private void FixedUpdate() - { - if (!m_nview.IsValid() || !m_nview.IsOwner()) - { - return; - } - if (!IsInWater()) - { - SetSurfaceEffect(enabled: false); - return; - } - UpdateImpactEffect(); - float floatDepth = GetFloatDepth(); - if (floatDepth > 0f) - { - SetSurfaceEffect(enabled: false); - return; - } - SetSurfaceEffect(enabled: true); - Vector3 position = m_collider.ClosestPoint(base.transform.position + Vector3.down * 1000f); - Vector3 worldCenterOfMass = m_body.worldCenterOfMass; - float num = Mathf.Clamp01(Mathf.Abs(floatDepth) / m_forceDistance); - Vector3 vector = Vector3.up * m_force * num * (Time.fixedDeltaTime * 50f); - m_body.WakeUp(); - m_body.AddForceAtPosition(vector * m_balanceForceFraction, position, ForceMode.VelocityChange); - m_body.AddForceAtPosition(vector, worldCenterOfMass, ForceMode.VelocityChange); - m_body.velocity -= m_body.velocity * m_damping * num; - m_body.angularVelocity -= m_body.angularVelocity * m_damping * num; - } - - public bool IsInWater() - { - return m_inWater > -10000f; - } - - private void SetSurfaceEffect(bool enabled) - { - if (m_surfaceEffects != null) - { - m_surfaceEffects.SetActive(enabled); - } - } - - private void UpdateImpactEffect() - { - if (m_body.IsSleeping() || !m_impactEffects.HasEffects()) - { - return; - } - Vector3 vector = m_collider.ClosestPoint(base.transform.position + Vector3.down * 1000f); - if (vector.y < m_inWater) - { - if (!m_wasInWater) - { - m_wasInWater = true; - Vector3 pos = vector; - pos.y = m_inWater; - if (m_body.GetPointVelocity(vector).magnitude > m_minImpactEffectVelocity) - { - m_impactEffects.Create(pos, Quaternion.identity); - } - } - } - else - { - m_wasInWater = false; - } - } - - private float GetFloatDepth() - { - return m_body.worldCenterOfMass.y - m_inWater - m_waterLevelOffset; - } - - public void SetInWater(float waterLevel) - { - m_inWater = waterLevel; - if (!m_beenInWater && waterLevel > -10000f && GetFloatDepth() < 0f) - { - m_beenInWater = true; - } - } - - public bool BeenInWater() - { - return m_beenInWater; - } - - private void OnDrawGizmosSelected() - { - Gizmos.color = Color.blue; - Gizmos.DrawWireCube(base.transform.position + Vector3.down * m_waterLevelOffset, new Vector3(1f, 0.05f, 1f)); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/FollowPlayer.cs b/Valheim_v202102/Valheim/assembly_valheim/FollowPlayer.cs deleted file mode 100644 index d5c2992..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/FollowPlayer.cs +++ /dev/null @@ -1,37 +0,0 @@ -using UnityEngine; - -public class FollowPlayer : MonoBehaviour -{ - public enum Type - { - Player, - Camera - } - - public Type m_follow = Type.Camera; - - public bool m_lockYPos; - - public bool m_followCameraInFreefly; - - public float m_maxYPos = 1000000f; - - private void LateUpdate() - { - Camera mainCamera = Utils.GetMainCamera(); - if (!(Player.m_localPlayer == null) && !(mainCamera == null)) - { - Vector3 zero = Vector3.zero; - zero = ((m_follow != Type.Camera && !GameCamera.InFreeFly()) ? Player.m_localPlayer.transform.position : mainCamera.transform.position); - if (m_lockYPos) - { - zero.y = base.transform.position.y; - } - if (zero.y > m_maxYPos) - { - zero.y = m_maxYPos; - } - base.transform.position = zero; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/FootStep.cs b/Valheim_v202102/Valheim/assembly_valheim/FootStep.cs deleted file mode 100644 index 711bd91..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/FootStep.cs +++ /dev/null @@ -1,401 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class FootStep : MonoBehaviour -{ - public enum MotionType - { - Walk = 1, - Run = 2, - Sneak = 4, - Climbing = 8, - Swiming = 0x10, - Land = 0x20 - } - - public enum GroundMaterial - { - None = 0, - Default = 1, - Water = 2, - Stone = 4, - Wood = 8, - Snow = 0x10, - Mud = 0x20, - Grass = 0x40, - GenericGround = 0x80, - Metal = 0x100 - } - - [Serializable] - public class StepEffect - { - public string m_name = ""; - - [BitMask(typeof(MotionType))] - public MotionType m_motionType = MotionType.Walk; - - [BitMask(typeof(GroundMaterial))] - public GroundMaterial m_material = GroundMaterial.Default; - - public GameObject[] m_effectPrefabs = new GameObject[0]; - } - - private static Queue<GameObject> m_stepInstances = new Queue<GameObject>(); - - private const int m_maxFootstepInstances = 30; - - public float m_footstepCullDistance = 20f; - - public List<StepEffect> m_effects = new List<StepEffect>(); - - public Transform[] m_feet = new Transform[0]; - - private static int m_footstepID = 0; - - private static int m_forwardSpeedID = 0; - - private static int m_sidewaySpeedID = 0; - - private float m_footstep; - - private float m_footstepTimer; - - private const float m_minFootstepInterval = 0.2f; - - private int m_pieceLayer; - - private Animator m_animator; - - private Character m_character; - - private ZNetView m_nview; - - private void Start() - { - m_animator = GetComponentInChildren<Animator>(); - m_character = GetComponent<Character>(); - m_nview = GetComponent<ZNetView>(); - if (m_footstepID == 0) - { - m_footstepID = Animator.StringToHash("footstep"); - m_forwardSpeedID = Animator.StringToHash("forward_speed"); - m_sidewaySpeedID = Animator.StringToHash("sideway_speed"); - } - m_footstep = m_animator.GetFloat(m_footstepID); - if (m_pieceLayer == 0) - { - m_pieceLayer = LayerMask.NameToLayer("piece"); - } - Character character = m_character; - character.m_onLand = (Action<Vector3>)Delegate.Combine(character.m_onLand, new Action<Vector3>(OnLand)); - if (m_nview.IsValid()) - { - m_nview.Register<int, Vector3>("Step", RPC_Step); - } - } - - private void Update() - { - if (m_nview.IsValid() && m_nview.IsOwner()) - { - UpdateFootstep(Time.deltaTime); - } - } - - private void UpdateFootstep(float dt) - { - if (m_feet.Length == 0) - { - return; - } - Camera mainCamera = Utils.GetMainCamera(); - if (!(mainCamera == null) && !(Vector3.Distance(base.transform.position, mainCamera.transform.position) > m_footstepCullDistance)) - { - m_footstepTimer += dt; - float @float = m_animator.GetFloat(m_footstepID); - if (Mathf.Sign(@float) != Mathf.Sign(m_footstep) && Mathf.Max(Mathf.Abs(m_animator.GetFloat(m_forwardSpeedID)), Mathf.Abs(m_animator.GetFloat(m_sidewaySpeedID))) > 0.2f && m_footstepTimer > 0.2f) - { - m_footstepTimer = 0f; - OnFoot(); - } - m_footstep = @float; - } - } - - private Transform FindActiveFoot() - { - Transform transform = null; - float num = 9999f; - Vector3 forward = base.transform.forward; - Transform[] feet = m_feet; - foreach (Transform transform2 in feet) - { - Vector3 rhs = transform2.position - base.transform.position; - float num2 = Vector3.Dot(forward, rhs); - if (num2 > num || transform == null) - { - transform = transform2; - num = num2; - } - } - return transform; - } - - private Transform FindFoot(string name) - { - Transform[] feet = m_feet; - foreach (Transform transform in feet) - { - if (transform.gameObject.name == name) - { - return transform; - } - } - return null; - } - - public void OnFoot() - { - Transform transform = FindActiveFoot(); - if (!(transform == null)) - { - OnFoot(transform); - } - } - - public void OnFoot(string name) - { - Transform transform = FindFoot(name); - if (transform == null) - { - ZLog.LogWarning("FAiled to find foot:" + name); - } - else - { - OnFoot(transform); - } - } - - private void OnLand(Vector3 point) - { - if (m_nview.IsValid()) - { - GroundMaterial groundMaterial = GetGroundMaterial(m_character, point); - int num = FindBestStepEffect(groundMaterial, MotionType.Land); - if (num != -1) - { - m_nview.InvokeRPC(ZNetView.Everybody, "Step", num, point); - } - } - } - - private void OnFoot(Transform foot) - { - if (m_nview.IsValid()) - { - Vector3 vector = ((foot != null) ? foot.position : base.transform.position); - MotionType motionType = GetMotionType(m_character); - GroundMaterial groundMaterial = GetGroundMaterial(m_character, vector); - int num = FindBestStepEffect(groundMaterial, motionType); - if (num != -1) - { - m_nview.InvokeRPC(ZNetView.Everybody, "Step", num, vector); - } - } - } - - private static void PurgeOldEffects() - { - while (m_stepInstances.Count > 30) - { - GameObject gameObject = m_stepInstances.Dequeue(); - if ((bool)gameObject) - { - UnityEngine.Object.Destroy(gameObject); - } - } - } - - private void DoEffect(StepEffect effect, Vector3 point) - { - GameObject[] effectPrefabs = effect.m_effectPrefabs; - foreach (GameObject gameObject in effectPrefabs) - { - GameObject gameObject2 = UnityEngine.Object.Instantiate(gameObject, point, base.transform.rotation); - m_stepInstances.Enqueue(gameObject2); - if (gameObject2.GetComponent<ZNetView>() != null) - { - ZLog.LogWarning("Foot step effect " + effect.m_name + " prefab " + gameObject.name + " in " + m_character.gameObject.name + " should not contain a ZNetView component"); - } - } - PurgeOldEffects(); - } - - private void RPC_Step(long sender, int effectIndex, Vector3 point) - { - StepEffect effect = m_effects[effectIndex]; - DoEffect(effect, point); - } - - private MotionType GetMotionType(Character character) - { - if (m_character.IsSwiming()) - { - return MotionType.Swiming; - } - if (m_character.IsWallRunning()) - { - return MotionType.Climbing; - } - if (m_character.IsRunning()) - { - return MotionType.Run; - } - if (m_character.IsSneaking()) - { - return MotionType.Sneak; - } - return MotionType.Walk; - } - - private GroundMaterial GetGroundMaterial(Character character, Vector3 point) - { - if (character.InWater()) - { - return GroundMaterial.Water; - } - if (!character.IsOnGround()) - { - return GroundMaterial.None; - } - float num = Mathf.Acos(Mathf.Clamp01(character.GetLastGroundNormal().y)) * 57.29578f; - Collider lastGroundCollider = character.GetLastGroundCollider(); - if ((bool)lastGroundCollider) - { - Heightmap component = lastGroundCollider.GetComponent<Heightmap>(); - if (component != null) - { - switch (component.GetBiome(point)) - { - case Heightmap.Biome.Mountain: - case Heightmap.Biome.DeepNorth: - if (num < 40f && !component.IsCleared(point)) - { - return GroundMaterial.Snow; - } - break; - case Heightmap.Biome.Swamp: - if (num < 40f) - { - return GroundMaterial.Mud; - } - break; - case Heightmap.Biome.Meadows: - case Heightmap.Biome.BlackForest: - if (num < 25f) - { - return GroundMaterial.Grass; - } - break; - } - return GroundMaterial.GenericGround; - } - if (lastGroundCollider.gameObject.layer == m_pieceLayer) - { - WearNTear componentInParent = lastGroundCollider.GetComponentInParent<WearNTear>(); - if ((bool)componentInParent) - { - switch (componentInParent.m_materialType) - { - case WearNTear.MaterialType.Wood: - return GroundMaterial.Wood; - case WearNTear.MaterialType.Stone: - return GroundMaterial.Stone; - case WearNTear.MaterialType.HardWood: - return GroundMaterial.Wood; - case WearNTear.MaterialType.Iron: - return GroundMaterial.Metal; - } - } - } - } - return GroundMaterial.Default; - } - - public void FindJoints() - { - ZLog.Log("Finding joints"); - Transform transform = Utils.FindChild(base.transform, "LeftFootFront"); - Transform transform2 = Utils.FindChild(base.transform, "RightFootFront"); - Transform transform3 = Utils.FindChild(base.transform, "LeftFoot"); - if (transform3 == null) - { - transform3 = Utils.FindChild(base.transform, "LeftFootBack"); - } - if (transform3 == null) - { - transform3 = Utils.FindChild(base.transform, "l_foot"); - } - if (transform3 == null) - { - transform3 = Utils.FindChild(base.transform, "Foot.l"); - } - if (transform3 == null) - { - transform3 = Utils.FindChild(base.transform, "foot.l"); - } - Transform transform4 = Utils.FindChild(base.transform, "RightFoot"); - if (transform4 == null) - { - transform4 = Utils.FindChild(base.transform, "RightFootBack"); - } - if (transform4 == null) - { - transform4 = Utils.FindChild(base.transform, "r_foot"); - } - if (transform4 == null) - { - transform4 = Utils.FindChild(base.transform, "Foot.r"); - } - if (transform4 == null) - { - transform4 = Utils.FindChild(base.transform, "foot.r"); - } - List<Transform> list = new List<Transform>(); - if ((bool)transform) - { - list.Add(transform); - } - if ((bool)transform2) - { - list.Add(transform2); - } - if ((bool)transform3) - { - list.Add(transform3); - } - if ((bool)transform4) - { - list.Add(transform4); - } - m_feet = list.ToArray(); - } - - private int FindBestStepEffect(GroundMaterial material, MotionType motion) - { - StepEffect stepEffect = null; - int result = -1; - for (int i = 0; i < m_effects.Count; i++) - { - StepEffect stepEffect2 = m_effects[i]; - if (((stepEffect2.m_material & material) != 0 || (stepEffect == null && (stepEffect2.m_material & GroundMaterial.Default) != 0)) && (stepEffect2.m_motionType & motion) != 0) - { - stepEffect = stepEffect2; - result = i; - } - } - return result; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Game.cs b/Valheim_v202102/Valheim/assembly_valheim/Game.cs deleted file mode 100644 index ce6806a..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Game.cs +++ /dev/null @@ -1,575 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Assertions; -using UnityEngine.SceneManagement; - -public class Game : MonoBehaviour -{ - private List<ZDO> m_tempPortalList = new List<ZDO>(); - - private static Game m_instance; - - public GameObject m_playerPrefab; - - public GameObject m_portalPrefab; - - public GameObject m_consolePrefab; - - public string m_StartLocation = "StartTemple"; - - private static string m_profileFilename; - - private PlayerProfile m_playerProfile; - - private bool m_requestRespawn; - - private float m_respawnWait; - - private const float m_respawnLoadDuration = 8f; - - private bool m_haveSpawned; - - private bool m_firstSpawn = true; - - private bool m_loggedOut; - - private Vector3 m_randomStartPoint = Vector3.zero; - - private UnityEngine.Random.State m_spawnRandomState; - - private bool m_sleeping; - - private const float m_collectResourcesInterval = 600f; - - private float m_saveTimer; - - private const float m_saveInterval = 1800f; - - private const float m_difficultyScaleRange = 200f; - - private const float m_damageScalePerPlayer = 0.08f; - - private const float m_healthScalePerPlayer = 0.4f; - - private int m_forcePlayers; - - public static Game instance => m_instance; - - private void Awake() - { - m_instance = this; - Assert.raiseExceptions = true; - ZInput.Initialize(); - if (!Console.instance) - { - UnityEngine.Object.Instantiate(m_consolePrefab); - } - if (string.IsNullOrEmpty(m_profileFilename)) - { - m_playerProfile = new PlayerProfile("Developer"); - m_playerProfile.SetName("Odev"); - m_playerProfile.Load(); - } - else - { - ZLog.Log("Loading player profile " + m_profileFilename); - m_playerProfile = new PlayerProfile(m_profileFilename); - m_playerProfile.Load(); - } - InvokeRepeating("CollectResources", 600f, 600f); - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "InGame", 0L); - GoogleAnalyticsV4.instance.LogEvent("Game", "InputMode", ZInput.IsGamepadActive() ? "Gamepad" : "MK", 0L); - } - - private void OnDestroy() - { - m_instance = null; - } - - private void Start() - { - Application.targetFrameRate = -1; - ZRoutedRpc.instance.Register("SleepStart", SleepStart); - ZRoutedRpc.instance.Register("SleepStop", SleepStop); - ZRoutedRpc.instance.Register<float>("Ping", RPC_Ping); - ZRoutedRpc.instance.Register<float>("Pong", RPC_Pong); - ZRoutedRpc.instance.Register<string, int, Vector3>("DiscoverLocationRespons", RPC_DiscoverLocationRespons); - if (ZNet.instance.IsServer()) - { - ZRoutedRpc.instance.Register<string, Vector3, string, int>("DiscoverClosestLocation", RPC_DiscoverClosestLocation); - StartCoroutine("ConnectPortals"); - InvokeRepeating("UpdateSleeping", 2f, 2f); - } - } - - private void ServerLog() - { - int peerConnections = ZNet.instance.GetPeerConnections(); - int num = ZDOMan.instance.NrOfObjects(); - int sentZDOs = ZDOMan.instance.GetSentZDOs(); - int recvZDOs = ZDOMan.instance.GetRecvZDOs(); - ZLog.Log(" Connections " + peerConnections + " ZDOS:" + num + " sent:" + sentZDOs + " recv:" + recvZDOs); - } - - private void CollectResources() - { - Resources.UnloadUnusedAssets(); - } - - public void Logout() - { - if (!m_loggedOut) - { - m_loggedOut = true; - Shutdown(); - SceneManager.LoadScene("start"); - } - } - - public bool IsLoggingOut() - { - return m_loggedOut; - } - - private void OnApplicationQuit() - { - ZLog.Log("Game - OnApplicationQuit"); - Shutdown(); - } - - private void Shutdown() - { - SavePlayerProfile(setLogoutPoint: true); - ZNetScene.instance.Shutdown(); - ZNet.instance.Shutdown(); - } - - private void SavePlayerProfile(bool setLogoutPoint) - { - if ((bool)Player.m_localPlayer) - { - m_playerProfile.SavePlayerData(Player.m_localPlayer); - Minimap.instance.SaveMapData(); - if (setLogoutPoint) - { - m_playerProfile.SaveLogoutPoint(); - } - } - m_playerProfile.Save(); - } - - private Player SpawnPlayer(Vector3 spawnPoint) - { - ZLog.DevLog("Spawning player:" + Time.frameCount); - Player component = UnityEngine.Object.Instantiate(m_playerPrefab, spawnPoint, Quaternion.identity).GetComponent<Player>(); - component.SetLocalPlayer(); - m_playerProfile.LoadPlayerData(component); - ZNet.instance.SetCharacterID(component.GetZDOID()); - component.OnSpawned(); - return component; - } - - private Bed FindBedNearby(Vector3 point, float maxDistance) - { - Bed[] array = UnityEngine.Object.FindObjectsOfType<Bed>(); - foreach (Bed bed in array) - { - if (bed.IsCurrent()) - { - return bed; - } - } - return null; - } - - private bool FindSpawnPoint(out Vector3 point, out bool usedLogoutPoint, float dt) - { - m_respawnWait += dt; - usedLogoutPoint = false; - if (m_playerProfile.HaveLogoutPoint()) - { - Vector3 logoutPoint = m_playerProfile.GetLogoutPoint(); - ZNet.instance.SetReferencePosition(logoutPoint); - if (m_respawnWait > 8f && ZNetScene.instance.IsAreaReady(logoutPoint)) - { - if (!ZoneSystem.instance.GetGroundHeight(logoutPoint, out var height)) - { - ZLog.Log("Invalid spawn point, no ground " + logoutPoint); - m_respawnWait = 0f; - m_playerProfile.ClearLoguoutPoint(); - point = Vector3.zero; - return false; - } - m_playerProfile.ClearLoguoutPoint(); - point = logoutPoint; - if (point.y < height) - { - point.y = height; - } - point.y += 0.25f; - usedLogoutPoint = true; - ZLog.Log("Spawned after " + m_respawnWait); - return true; - } - point = Vector3.zero; - return false; - } - if (m_playerProfile.HaveCustomSpawnPoint()) - { - Vector3 customSpawnPoint = m_playerProfile.GetCustomSpawnPoint(); - ZNet.instance.SetReferencePosition(customSpawnPoint); - if (m_respawnWait > 8f && ZNetScene.instance.IsAreaReady(customSpawnPoint)) - { - Bed bed = FindBedNearby(customSpawnPoint, 5f); - if (bed != null) - { - ZLog.Log("Found bed at custom spawn point"); - point = bed.GetSpawnPoint(); - return true; - } - ZLog.Log("Failed to find bed at custom spawn point, using original"); - m_playerProfile.ClearCustomSpawnPoint(); - m_respawnWait = 0f; - point = Vector3.zero; - return false; - } - point = Vector3.zero; - return false; - } - if (ZoneSystem.instance.GetLocationIcon(m_StartLocation, out var pos)) - { - point = pos + Vector3.up * 2f; - ZNet.instance.SetReferencePosition(point); - return ZNetScene.instance.IsAreaReady(point); - } - ZNet.instance.SetReferencePosition(Vector3.zero); - point = Vector3.zero; - return false; - } - - private static Vector3 GetPointOnCircle(float distance, float angle) - { - return new Vector3(Mathf.Sin(angle) * distance, 0f, Mathf.Cos(angle) * distance); - } - - public void RequestRespawn(float delay) - { - CancelInvoke("_RequestRespawn"); - Invoke("_RequestRespawn", delay); - } - - private void _RequestRespawn() - { - ZLog.Log("Starting respawn"); - if ((bool)Player.m_localPlayer) - { - m_playerProfile.SavePlayerData(Player.m_localPlayer); - } - if ((bool)Player.m_localPlayer) - { - ZNetScene.instance.Destroy(Player.m_localPlayer.gameObject); - ZNet.instance.SetCharacterID(ZDOID.None); - } - m_respawnWait = 0f; - m_requestRespawn = true; - MusicMan.instance.TriggerMusic("respawn"); - } - - private void Update() - { - ZInput.Update(Time.deltaTime); - UpdateSaving(Time.deltaTime); - } - - private void FixedUpdate() - { - if (!m_haveSpawned && ZNet.GetConnectionStatus() == ZNet.ConnectionStatus.Connected) - { - m_haveSpawned = true; - RequestRespawn(0f); - } - ZInput.FixedUpdate(Time.fixedDeltaTime); - if (ZNet.GetConnectionStatus() != ZNet.ConnectionStatus.Connecting && ZNet.GetConnectionStatus() != ZNet.ConnectionStatus.Connected) - { - ZLog.Log("Lost connection to server:" + ZNet.GetConnectionStatus()); - Logout(); - } - else - { - UpdateRespawn(Time.fixedDeltaTime); - } - } - - private void UpdateSaving(float dt) - { - m_saveTimer += dt; - if (m_saveTimer > 1800f) - { - m_saveTimer = 0f; - SavePlayerProfile(setLogoutPoint: false); - if ((bool)ZNet.instance) - { - ZNet.instance.Save(); - } - } - } - - private void UpdateRespawn(float dt) - { - if (m_requestRespawn && FindSpawnPoint(out var point, out var usedLogoutPoint, dt)) - { - if (!usedLogoutPoint) - { - m_playerProfile.SetHomePoint(point); - } - SpawnPlayer(point); - m_requestRespawn = false; - if (m_firstSpawn) - { - m_firstSpawn = false; - Chat.instance.SendText(Talker.Type.Shout, "I have arrived!"); - } - GC.Collect(); - } - } - - public bool WaitingForRespawn() - { - return m_requestRespawn; - } - - public PlayerProfile GetPlayerProfile() - { - return m_playerProfile; - } - - public static void SetProfile(string filename) - { - m_profileFilename = filename; - } - - private IEnumerator ConnectPortals() - { - while (true) - { - m_tempPortalList.Clear(); - int index = 0; - bool done; - do - { - done = ZDOMan.instance.GetAllZDOsWithPrefabIterative(m_portalPrefab.name, m_tempPortalList, ref index); - yield return null; - } - while (!done); - foreach (ZDO tempPortal in m_tempPortalList) - { - ZDOID zDOID = tempPortal.GetZDOID("target"); - string @string = tempPortal.GetString("tag"); - if (!zDOID.IsNone()) - { - ZDO zDO = ZDOMan.instance.GetZDO(zDOID); - if (zDO == null || zDO.GetString("tag") != @string) - { - tempPortal.SetOwner(ZDOMan.instance.GetMyID()); - tempPortal.Set("target", ZDOID.None); - ZDOMan.instance.ForceSendZDO(tempPortal.m_uid); - } - } - } - foreach (ZDO tempPortal2 in m_tempPortalList) - { - string string2 = tempPortal2.GetString("tag"); - if (tempPortal2.GetZDOID("target").IsNone()) - { - ZDO zDO2 = FindRandomUnconnectedPortal(m_tempPortalList, tempPortal2, string2); - if (zDO2 != null) - { - tempPortal2.SetOwner(ZDOMan.instance.GetMyID()); - zDO2.SetOwner(ZDOMan.instance.GetMyID()); - tempPortal2.Set("target", zDO2.m_uid); - zDO2.Set("target", tempPortal2.m_uid); - ZDOMan.instance.ForceSendZDO(tempPortal2.m_uid); - ZDOMan.instance.ForceSendZDO(zDO2.m_uid); - } - } - } - yield return new WaitForSeconds(5f); - } - } - - private ZDO FindRandomUnconnectedPortal(List<ZDO> portals, ZDO skip, string tag) - { - List<ZDO> list = new List<ZDO>(); - foreach (ZDO portal in portals) - { - if (portal != skip && portal.GetZDOID("target").IsNone() && !(portal.GetString("tag") != tag)) - { - list.Add(portal); - } - } - if (list.Count == 0) - { - return null; - } - return list[UnityEngine.Random.Range(0, list.Count)]; - } - - private ZDO FindClosestUnconnectedPortal(List<ZDO> portals, ZDO skip, Vector3 refPos) - { - ZDO zDO = null; - float num = 99999f; - foreach (ZDO portal in portals) - { - if (portal != skip && portal.GetZDOID("target").IsNone()) - { - float num2 = Vector3.Distance(refPos, portal.GetPosition()); - if (zDO == null || num2 < num) - { - zDO = portal; - num = num2; - } - } - } - return zDO; - } - - private void UpdateSleeping() - { - if (!ZNet.instance.IsServer()) - { - return; - } - if (m_sleeping) - { - if (!EnvMan.instance.IsTimeSkipping()) - { - m_sleeping = false; - ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "SleepStop"); - } - } - else if (!EnvMan.instance.IsTimeSkipping() && (EnvMan.instance.IsAfternoon() || EnvMan.instance.IsNight()) && EverybodyIsTryingToSleep()) - { - EnvMan.instance.SkipToMorning(); - m_sleeping = true; - ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "SleepStart"); - } - } - - private bool EverybodyIsTryingToSleep() - { - List<ZDO> allCharacterZDOS = ZNet.instance.GetAllCharacterZDOS(); - if (allCharacterZDOS.Count == 0) - { - return false; - } - foreach (ZDO item in allCharacterZDOS) - { - if (!item.GetBool("inBed")) - { - return false; - } - } - return true; - } - - private void SleepStart(long sender) - { - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - localPlayer.SetSleeping(sleep: true); - } - } - - private void SleepStop(long sender) - { - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - localPlayer.SetSleeping(sleep: false); - localPlayer.AttachStop(); - } - } - - public void DiscoverClosestLocation(string name, Vector3 point, string pinName, int pinType) - { - ZLog.Log("DiscoverClosestLocation"); - ZRoutedRpc.instance.InvokeRoutedRPC("DiscoverClosestLocation", name, point, pinName, pinType); - } - - private void RPC_DiscoverClosestLocation(long sender, string name, Vector3 point, string pinName, int pinType) - { - if (ZoneSystem.instance.FindClosestLocation(name, point, out var closest)) - { - ZLog.Log("Found location of type " + name); - ZRoutedRpc.instance.InvokeRoutedRPC(sender, "DiscoverLocationRespons", pinName, pinType, closest.m_position); - } - else - { - ZLog.LogWarning("Failed to find location of type " + name); - } - } - - private void RPC_DiscoverLocationRespons(long sender, string pinName, int pinType, Vector3 pos) - { - Minimap.instance.DiscoverLocation(pos, (Minimap.PinType)pinType, pinName); - } - - public void Ping() - { - if ((bool)Console.instance) - { - Console.instance.Print("Ping sent to server"); - } - ZRoutedRpc.instance.InvokeRoutedRPC("Ping", Time.time); - } - - private void RPC_Ping(long sender, float time) - { - ZRoutedRpc.instance.InvokeRoutedRPC(sender, "Pong", time); - } - - private void RPC_Pong(long sender, float time) - { - float num = Time.time - time; - string text = "Got ping reply from server: " + (int)(num * 1000f) + " ms"; - ZLog.Log(text); - if ((bool)Console.instance) - { - Console.instance.Print(text); - } - } - - public void SetForcePlayerDifficulty(int players) - { - m_forcePlayers = players; - } - - private int GetPlayerDifficulty(Vector3 pos) - { - if (m_forcePlayers > 0) - { - return m_forcePlayers; - } - int num = Player.GetPlayersInRangeXZ(pos, 200f); - if (num < 1) - { - num = 1; - } - return num; - } - - public float GetDifficultyDamageScale(Vector3 pos) - { - int playerDifficulty = GetPlayerDifficulty(pos); - return 1f + (float)(playerDifficulty - 1) * 0.08f; - } - - public float GetDifficultyHealthScale(Vector3 pos) - { - int playerDifficulty = GetPlayerDifficulty(pos); - return 1f + (float)(playerDifficulty - 1) * 0.4f; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/GameCamera.cs b/Valheim_v202102/Valheim/assembly_valheim/GameCamera.cs deleted file mode 100644 index 82f2d5e..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/GameCamera.cs +++ /dev/null @@ -1,663 +0,0 @@ -using System; -using System.IO; -using UnityEngine; - -public class GameCamera : MonoBehaviour -{ - private Vector3 m_playerPos = Vector3.zero; - - private Vector3 m_currentBaseOffset = Vector3.zero; - - private Vector3 m_offsetBaseVel = Vector3.zero; - - private Vector3 m_playerVel = Vector3.zero; - - public Vector3 m_3rdOffset = Vector3.zero; - - public Vector3 m_3rdCombatOffset = Vector3.zero; - - public Vector3 m_fpsOffset = Vector3.zero; - - public float m_flyingDistance = 15f; - - public LayerMask m_blockCameraMask; - - public float m_minDistance; - - public float m_maxDistance = 6f; - - public float m_maxDistanceBoat = 6f; - - public float m_raycastWidth = 0.35f; - - public bool m_smoothYTilt; - - public float m_zoomSens = 10f; - - public float m_inventoryOffset = 0.1f; - - public float m_nearClipPlaneMin = 0.1f; - - public float m_nearClipPlaneMax = 0.5f; - - public float m_fov = 65f; - - public float m_freeFlyMinFov = 5f; - - public float m_freeFlyMaxFov = 120f; - - public float m_tiltSmoothnessShipMin = 0.1f; - - public float m_tiltSmoothnessShipMax = 0.5f; - - public float m_shakeFreq = 10f; - - public float m_shakeMovement = 1f; - - public float m_smoothness = 0.1f; - - public float m_minWaterDistance = 0.3f; - - public Camera m_skyCamera; - - private float m_distance = 4f; - - private bool m_freeFly; - - private float m_shakeIntensity; - - private float m_shakeTimer; - - private bool m_cameraShakeEnabled = true; - - private bool m_mouseCapture; - - private Quaternion m_freeFlyRef = Quaternion.identity; - - private float m_freeFlyYaw; - - private float m_freeFlyPitch; - - private float m_freeFlySpeed = 20f; - - private float m_freeFlySmooth; - - private Vector3 m_freeFlySavedVel = Vector3.zero; - - private Transform m_freeFlyTarget; - - private Vector3 m_freeFlyTargetOffset = Vector3.zero; - - private Transform m_freeFlyLockon; - - private Vector3 m_freeFlyLockonOffset = Vector3.zero; - - private Vector3 m_freeFlyVel = Vector3.zero; - - private Vector3 m_freeFlyAcc = Vector3.zero; - - private Vector3 m_freeFlyTurnVel = Vector3.zero; - - private bool m_shipCameraTilt = true; - - private Vector3 m_smoothedCameraUp = Vector3.up; - - private Vector3 m_smoothedCameraUpVel = Vector3.zero; - - private AudioListener m_listner; - - private Camera m_camera; - - private bool m_waterClipping; - - private static GameCamera m_instance; - - public static GameCamera instance => m_instance; - - private void Awake() - { - m_instance = this; - m_camera = GetComponent<Camera>(); - m_listner = GetComponentInChildren<AudioListener>(); - m_camera.depthTextureMode = DepthTextureMode.DepthNormals; - ApplySettings(); - if (!Application.isEditor) - { - m_mouseCapture = true; - } - } - - private void OnDestroy() - { - if (m_instance == this) - { - m_instance = null; - } - } - - public void ApplySettings() - { - m_cameraShakeEnabled = PlayerPrefs.GetInt("CameraShake", 1) == 1; - m_shipCameraTilt = PlayerPrefs.GetInt("ShipCameraTilt", 1) == 1; - } - - private void LateUpdate() - { - float deltaTime = Time.deltaTime; - if (Input.GetKeyDown(KeyCode.F11) || (m_freeFly && Input.GetKeyDown(KeyCode.Mouse1))) - { - ScreenShot(); - } - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - UpdateBaseOffset(localPlayer, deltaTime); - } - UpdateMouseCapture(); - UpdateCamera(deltaTime); - UpdateListner(); - } - - private void UpdateMouseCapture() - { - if (Input.GetKey(KeyCode.LeftControl) && Input.GetKeyDown(KeyCode.F1)) - { - m_mouseCapture = !m_mouseCapture; - } - if (m_mouseCapture && !InventoryGui.IsVisible() && !Menu.IsVisible() && !Minimap.IsOpen() && !StoreGui.IsVisible() && !Hud.IsPieceSelectionVisible()) - { - Cursor.lockState = CursorLockMode.Locked; - Cursor.visible = false; - } - else - { - Cursor.lockState = CursorLockMode.None; - Cursor.visible = ZInput.IsMouseActive(); - } - } - - public static void ScreenShot() - { - DateTime now = DateTime.Now; - Directory.CreateDirectory(Application.persistentDataPath + "/screenshots"); - string text = now.Hour.ToString("00") + now.Minute.ToString("00") + now.Second.ToString("00"); - string text2 = now.ToString("yyyy-MM-dd"); - string text3 = Application.persistentDataPath + "/screenshots/screenshot_" + text2 + "_" + text + ".png"; - if (!File.Exists(text3)) - { - ScreenCapture.CaptureScreenshot(text3); - ZLog.Log("Screenshot saved:" + text3); - } - } - - private void UpdateListner() - { - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer && !m_freeFly) - { - m_listner.transform.position = localPlayer.m_eye.position; - } - else - { - m_listner.transform.localPosition = Vector3.zero; - } - } - - private void UpdateCamera(float dt) - { - if (m_freeFly) - { - UpdateFreeFly(dt); - UpdateCameraShake(dt); - return; - } - m_camera.fieldOfView = m_fov; - m_skyCamera.fieldOfView = m_fov; - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - if ((!Chat.instance || !Chat.instance.HasFocus()) && !Console.IsVisible() && !InventoryGui.IsVisible() && !StoreGui.IsVisible() && !Menu.IsVisible() && !Minimap.IsOpen() && !localPlayer.InCutscene() && !localPlayer.InPlaceMode()) - { - float minDistance = m_minDistance; - float axis = Input.GetAxis("Mouse ScrollWheel"); - m_distance -= axis * m_zoomSens; - float max = ((localPlayer.GetControlledShip() != null) ? m_maxDistanceBoat : m_maxDistance); - m_distance = Mathf.Clamp(m_distance, minDistance, max); - } - if (localPlayer.IsDead() && (bool)localPlayer.GetRagdoll()) - { - Vector3 averageBodyPosition = localPlayer.GetRagdoll().GetAverageBodyPosition(); - base.transform.LookAt(averageBodyPosition); - } - else - { - GetCameraPosition(dt, out var pos, out var rot); - base.transform.position = pos; - base.transform.rotation = rot; - } - UpdateCameraShake(dt); - } - } - - private void GetCameraPosition(float dt, out Vector3 pos, out Quaternion rot) - { - Player localPlayer = Player.m_localPlayer; - if (localPlayer == null) - { - pos = base.transform.position; - rot = base.transform.rotation; - return; - } - Vector3 vector = GetOffsetedEyePos(); - float num = m_distance; - if (localPlayer.InIntro()) - { - vector = localPlayer.transform.position; - num = m_flyingDistance; - } - Vector3 vector2 = -localPlayer.m_eye.transform.forward; - if (m_smoothYTilt && !localPlayer.InIntro()) - { - num = Mathf.Lerp(num, 1.5f, Utils.SmoothStep(0f, -0.5f, vector2.y)); - } - Vector3 end = vector + vector2 * num; - CollideRay2(localPlayer.m_eye.position, vector, ref end); - UpdateNearClipping(vector, end, dt); - float waterLevel = WaterVolume.GetWaterLevel(end); - if (end.y < waterLevel + m_minWaterDistance) - { - end.y = waterLevel + m_minWaterDistance; - m_waterClipping = true; - } - else - { - m_waterClipping = false; - } - pos = end; - rot = localPlayer.m_eye.transform.rotation; - if (m_shipCameraTilt) - { - ApplyCameraTilt(localPlayer, dt, ref rot); - } - } - - private void ApplyCameraTilt(Player player, float dt, ref Quaternion rot) - { - if (!player.InIntro()) - { - Ship standingOnShip = player.GetStandingOnShip(); - float f = Mathf.Clamp01((m_distance - m_minDistance) / (m_maxDistanceBoat - m_minDistance)); - f = Mathf.Pow(f, 2f); - float smoothTime = Mathf.Lerp(m_tiltSmoothnessShipMin, m_tiltSmoothnessShipMax, f); - Vector3 up = Vector3.up; - if (standingOnShip != null) - { - up = standingOnShip.transform.up; - } - else if (player.IsAttached()) - { - up = player.GetVisual().transform.up; - } - Vector3 forward = player.m_eye.transform.forward; - Vector3 target = Vector3.Lerp(up, Vector3.up, f * 0.5f); - m_smoothedCameraUp = Vector3.SmoothDamp(m_smoothedCameraUp, target, ref m_smoothedCameraUpVel, smoothTime, 99f, dt); - rot = Quaternion.LookRotation(forward, m_smoothedCameraUp); - } - } - - private void UpdateNearClipping(Vector3 eyePos, Vector3 camPos, float dt) - { - float num = m_nearClipPlaneMax; - Vector3 normalized = (camPos - eyePos).normalized; - if (m_waterClipping || Physics.CheckSphere(camPos - normalized * m_nearClipPlaneMax, m_nearClipPlaneMax, m_blockCameraMask)) - { - num = m_nearClipPlaneMin; - } - if (m_camera.nearClipPlane != num) - { - m_camera.nearClipPlane = num; - } - } - - private void CollideRay2(Vector3 eyePos, Vector3 offsetedEyePos, ref Vector3 end) - { - if (RayTestPoint(eyePos, offsetedEyePos, (end - offsetedEyePos).normalized, Vector3.Distance(eyePos, end), out var distance)) - { - float t = Utils.LerpStep(0.5f, 2f, distance); - Vector3 a = eyePos + (end - eyePos).normalized * distance; - Vector3 b = offsetedEyePos + (end - offsetedEyePos).normalized * distance; - end = Vector3.Lerp(a, b, t); - } - } - - private bool RayTestPoint(Vector3 point, Vector3 offsetedPoint, Vector3 dir, float maxDist, out float distance) - { - bool result = false; - distance = maxDist; - if (Physics.SphereCast(offsetedPoint, m_raycastWidth, dir, out var hitInfo, maxDist, m_blockCameraMask)) - { - distance = hitInfo.distance; - result = true; - } - _ = offsetedPoint + dir * distance; - if (Physics.SphereCast(point, m_raycastWidth, dir, out hitInfo, maxDist, m_blockCameraMask)) - { - if (hitInfo.distance < distance) - { - distance = hitInfo.distance; - } - result = true; - } - if (Physics.Raycast(point, dir, out hitInfo, maxDist, m_blockCameraMask)) - { - float num = hitInfo.distance - m_nearClipPlaneMin; - if (num < distance) - { - distance = num; - } - result = true; - } - return result; - } - - private bool RayTestPoint(Vector3 point, Vector3 dir, float maxDist, out Vector3 hitPoint) - { - if (Physics.SphereCast(point, 0.2f, dir, out var hitInfo, maxDist, m_blockCameraMask)) - { - hitPoint = point + dir * hitInfo.distance; - return true; - } - if (Physics.Raycast(point, dir, out hitInfo, maxDist, m_blockCameraMask)) - { - hitPoint = point + dir * (hitInfo.distance - 0.05f); - return true; - } - hitPoint = Vector3.zero; - return false; - } - - private void UpdateFreeFly(float dt) - { - if (Console.IsVisible()) - { - return; - } - Vector2 zero = Vector2.zero; - zero.x = Input.GetAxis("Mouse X"); - zero.y = Input.GetAxis("Mouse Y"); - zero.x += ZInput.GetJoyRightStickX() * 110f * dt; - zero.y += (0f - ZInput.GetJoyRightStickY()) * 110f * dt; - m_freeFlyYaw += zero.x; - m_freeFlyPitch -= zero.y; - if (Input.GetAxis("Mouse ScrollWheel") < 0f) - { - m_freeFlySpeed *= 0.8f; - } - if (Input.GetAxis("Mouse ScrollWheel") > 0f) - { - m_freeFlySpeed *= 1.2f; - } - if (Input.GetAxis("Mouse ScrollWheel") > 0f) - { - m_freeFlySpeed *= 1.2f; - } - if (ZInput.GetButton("JoyTabLeft")) - { - m_camera.fieldOfView = Mathf.Max(m_freeFlyMinFov, m_camera.fieldOfView - dt * 20f); - } - if (ZInput.GetButton("JoyTabRight")) - { - m_camera.fieldOfView = Mathf.Min(m_freeFlyMaxFov, m_camera.fieldOfView + dt * 20f); - } - m_skyCamera.fieldOfView = m_camera.fieldOfView; - if (ZInput.GetButton("JoyButtonY")) - { - m_freeFlySpeed += m_freeFlySpeed * 0.1f * dt * 10f; - } - if (ZInput.GetButton("JoyButtonX")) - { - m_freeFlySpeed -= m_freeFlySpeed * 0.1f * dt * 10f; - } - m_freeFlySpeed = Mathf.Clamp(m_freeFlySpeed, 1f, 1000f); - if (ZInput.GetButtonDown("JoyLStick") || ZInput.GetButtonDown("SecondAttack")) - { - if ((bool)m_freeFlyLockon) - { - m_freeFlyLockon = null; - } - else - { - int mask = LayerMask.GetMask("Default", "static_solid", "terrain", "vehicle", "character", "piece", "character_net", "viewblock"); - if (Physics.Raycast(base.transform.position, base.transform.forward, out var hitInfo, 10000f, mask)) - { - m_freeFlyLockon = hitInfo.collider.transform; - m_freeFlyLockonOffset = m_freeFlyLockon.InverseTransformPoint(base.transform.position); - } - } - } - Vector3 vector = Vector3.zero; - if (ZInput.GetButton("Left")) - { - vector -= Vector3.right; - } - if (ZInput.GetButton("Right")) - { - vector += Vector3.right; - } - if (ZInput.GetButton("Forward")) - { - vector += Vector3.forward; - } - if (ZInput.GetButton("Backward")) - { - vector -= Vector3.forward; - } - if (ZInput.GetButton("Jump")) - { - vector += Vector3.up; - } - if (ZInput.GetButton("Crouch")) - { - vector -= Vector3.up; - } - vector += Vector3.up * ZInput.GetJoyRTrigger(); - vector -= Vector3.up * ZInput.GetJoyLTrigger(); - vector += Vector3.right * ZInput.GetJoyLeftStickX(); - vector += -Vector3.forward * ZInput.GetJoyLeftStickY(); - if (ZInput.GetButtonDown("JoyButtonB") || ZInput.GetButtonDown("Block")) - { - m_freeFlySavedVel = vector; - } - float magnitude = m_freeFlySavedVel.magnitude; - if (magnitude > 0.001f) - { - vector += m_freeFlySavedVel; - if (vector.magnitude > magnitude) - { - vector = vector.normalized * magnitude; - } - } - if (vector.magnitude > 1f) - { - vector.Normalize(); - } - vector = base.transform.TransformVector(vector); - vector *= m_freeFlySpeed; - if (m_freeFlySmooth <= 0f) - { - m_freeFlyVel = vector; - } - else - { - m_freeFlyVel = Vector3.SmoothDamp(m_freeFlyVel, vector, ref m_freeFlyAcc, m_freeFlySmooth, 99f, dt); - } - if ((bool)m_freeFlyLockon) - { - m_freeFlyLockonOffset += m_freeFlyLockon.InverseTransformVector(m_freeFlyVel * dt); - base.transform.position = m_freeFlyLockon.TransformPoint(m_freeFlyLockonOffset); - } - else - { - base.transform.position = base.transform.position + m_freeFlyVel * dt; - } - Quaternion quaternion = Quaternion.Euler(0f, m_freeFlyYaw, 0f) * Quaternion.Euler(m_freeFlyPitch, 0f, 0f); - if ((bool)m_freeFlyLockon) - { - quaternion = m_freeFlyLockon.rotation * quaternion; - } - if (ZInput.GetButtonDown("JoyRStick") || ZInput.GetButtonDown("Attack")) - { - if ((bool)m_freeFlyTarget) - { - m_freeFlyTarget = null; - } - else - { - int mask2 = LayerMask.GetMask("Default", "static_solid", "terrain", "vehicle", "character", "piece", "character_net", "viewblock"); - if (Physics.Raycast(base.transform.position, base.transform.forward, out var hitInfo2, 10000f, mask2)) - { - m_freeFlyTarget = hitInfo2.collider.transform; - m_freeFlyTargetOffset = m_freeFlyTarget.InverseTransformPoint(hitInfo2.point); - } - } - } - if ((bool)m_freeFlyTarget) - { - quaternion = Quaternion.LookRotation((m_freeFlyTarget.TransformPoint(m_freeFlyTargetOffset) - base.transform.position).normalized, Vector3.up); - } - if (m_freeFlySmooth <= 0f) - { - base.transform.rotation = quaternion; - return; - } - Quaternion rotation = Utils.SmoothDamp(base.transform.rotation, quaternion, ref m_freeFlyRef, m_freeFlySmooth, 9999f, dt); - base.transform.rotation = rotation; - } - - private void UpdateCameraShake(float dt) - { - m_shakeIntensity -= dt; - if (m_shakeIntensity <= 0f) - { - m_shakeIntensity = 0f; - return; - } - float num = m_shakeIntensity * m_shakeIntensity * m_shakeIntensity; - m_shakeTimer += dt * Mathf.Clamp01(m_shakeIntensity) * m_shakeFreq; - Quaternion quaternion = Quaternion.Euler(Mathf.Sin(m_shakeTimer) * num * m_shakeMovement, Mathf.Cos(m_shakeTimer * 0.9f) * num * m_shakeMovement, 0f); - base.transform.rotation = base.transform.rotation * quaternion; - } - - public void AddShake(Vector3 point, float range, float strength, bool continous) - { - if (!m_cameraShakeEnabled) - { - return; - } - float num = Vector3.Distance(point, base.transform.position); - if (num > range) - { - return; - } - num = Mathf.Max(1f, num); - float num2 = 1f - num / range; - float num3 = strength * num2; - if (!(num3 < m_shakeIntensity)) - { - m_shakeIntensity = num3; - if (continous) - { - m_shakeTimer = Time.time * Mathf.Clamp01(strength) * m_shakeFreq; - } - else - { - m_shakeTimer = Time.time * Mathf.Clamp01(m_shakeIntensity) * m_shakeFreq; - } - } - } - - private float RayTest(Vector3 point, Vector3 dir, float maxDist) - { - if (Physics.SphereCast(point, 0.2f, dir, out var hitInfo, maxDist, m_blockCameraMask)) - { - return hitInfo.distance; - } - return maxDist; - } - - private Vector3 GetCameraBaseOffset(Player player) - { - if (player.InBed()) - { - return player.GetHeadPoint() - player.transform.position; - } - if (player.IsAttached() || player.IsSitting()) - { - return player.GetHeadPoint() + Vector3.up * 0.3f - player.transform.position; - } - return player.m_eye.transform.position - player.transform.position; - } - - private void UpdateBaseOffset(Player player, float dt) - { - Vector3 cameraBaseOffset = GetCameraBaseOffset(player); - m_currentBaseOffset = Vector3.SmoothDamp(m_currentBaseOffset, cameraBaseOffset, ref m_offsetBaseVel, 0.5f, 999f, dt); - if (Vector3.Distance(m_playerPos, player.transform.position) > 20f) - { - m_playerPos = player.transform.position; - } - m_playerPos = Vector3.SmoothDamp(m_playerPos, player.transform.position, ref m_playerVel, m_smoothness, 999f, dt); - } - - private Vector3 GetOffsetedEyePos() - { - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - if (localPlayer.GetStandingOnShip() != null || localPlayer.IsAttached()) - { - return localPlayer.transform.position + m_currentBaseOffset + GetCameraOffset(localPlayer); - } - return m_playerPos + m_currentBaseOffset + GetCameraOffset(localPlayer); - } - return base.transform.position; - } - - private Vector3 GetCameraOffset(Player player) - { - if (m_distance <= 0f) - { - return player.m_eye.transform.TransformVector(m_fpsOffset); - } - if (player.InBed()) - { - return Vector3.zero; - } - Vector3 vector = (player.UseMeleeCamera() ? m_3rdCombatOffset : m_3rdOffset); - return player.m_eye.transform.TransformVector(vector); - } - - public void ToggleFreeFly() - { - m_freeFly = !m_freeFly; - } - - public void SetFreeFlySmoothness(float smooth) - { - m_freeFlySmooth = Mathf.Clamp(smooth, 0f, 1f); - } - - public float GetFreeFlySmoothness() - { - return m_freeFlySmooth; - } - - public static bool InFreeFly() - { - if ((bool)m_instance) - { - return m_instance.m_freeFly; - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Gibber.cs b/Valheim_v202102/Valheim/assembly_valheim/Gibber.cs deleted file mode 100644 index 1f1c196..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Gibber.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using UnityEngine; - -public class Gibber : MonoBehaviour -{ - [Serializable] - public class GibbData - { - public GameObject m_object; - - public float m_chanceToSpawn = 1f; - } - - public EffectList m_punchEffector = new EffectList(); - - public GameObject m_gibHitEffect; - - public GameObject m_gibDestroyEffect; - - public float m_gibHitDestroyChance; - - public GibbData[] m_gibbs = new GibbData[0]; - - public float m_minVel = 10f; - - public float m_maxVel = 20f; - - public float m_maxRotVel = 20f; - - public float m_impactDirectionMix = 0.5f; - - public float m_timeout = 5f; - - private bool m_done; - - private ZNetView m_nview; - - private void Start() - { - m_nview = GetComponent<ZNetView>(); - if (!m_done) - { - Explode(base.transform.position, Vector3.zero); - } - } - - public void Setup(Vector3 hitPoint, Vector3 hitDirection) - { - Explode(hitPoint, hitDirection); - } - - private void DestroyAll() - { - if ((bool)m_nview) - { - if (m_nview.GetZDO().m_owner == 0L) - { - m_nview.ClaimOwnership(); - } - if (m_nview.IsOwner()) - { - ZNetScene.instance.Destroy(base.gameObject); - } - } - else - { - UnityEngine.Object.Destroy(base.gameObject); - } - } - - private void CreateBodies() - { - MeshRenderer[] componentsInChildren = base.gameObject.GetComponentsInChildren<MeshRenderer>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - GameObject gameObject = componentsInChildren[i].gameObject; - if (!gameObject.GetComponent<Rigidbody>()) - { - gameObject.AddComponent<BoxCollider>(); - gameObject.AddComponent<Rigidbody>(); - } - } - } - - private void Explode(Vector3 hitPoint, Vector3 hitDirection) - { - m_done = true; - InvokeRepeating("DestroyAll", m_timeout, 1f); - Vector3 position = base.transform.position; - float t = (((double)hitDirection.magnitude > 0.01) ? m_impactDirectionMix : 0f); - CreateBodies(); - Rigidbody[] componentsInChildren = base.gameObject.GetComponentsInChildren<Rigidbody>(); - foreach (Rigidbody obj in componentsInChildren) - { - float num = UnityEngine.Random.Range(m_minVel, m_maxVel); - Vector3 vector = Vector3.Lerp(Vector3.Normalize(obj.worldCenterOfMass - position), hitDirection, t); - obj.velocity = vector * num; - obj.angularVelocity = new Vector3(UnityEngine.Random.Range(0f - m_maxRotVel, m_maxRotVel), UnityEngine.Random.Range(0f - m_maxRotVel, m_maxRotVel), UnityEngine.Random.Range(0f - m_maxRotVel, m_maxRotVel)); - } - GibbData[] gibbs = m_gibbs; - foreach (GibbData gibbData in gibbs) - { - if ((bool)gibbData.m_object && gibbData.m_chanceToSpawn < 1f && UnityEngine.Random.value > gibbData.m_chanceToSpawn) - { - UnityEngine.Object.Destroy(gibbData.m_object); - } - } - if ((double)hitDirection.magnitude > 0.01) - { - Quaternion rot = Quaternion.LookRotation(hitDirection); - m_punchEffector.Create(hitPoint, rot); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/GlobalWind.cs b/Valheim_v202102/Valheim/assembly_valheim/GlobalWind.cs deleted file mode 100644 index c0d50a6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/GlobalWind.cs +++ /dev/null @@ -1,98 +0,0 @@ -using UnityEngine; - -public class GlobalWind : MonoBehaviour -{ - public float m_multiplier = 1f; - - public bool m_smoothUpdate; - - public bool m_alignToWindDirection; - - [Header("Particles")] - public bool m_particleVelocity = true; - - public bool m_particleForce; - - public bool m_particleEmission; - - public int m_particleEmissionMin; - - public int m_particleEmissionMax = 1; - - [Header("Cloth")] - public float m_clothRandomAccelerationFactor = 0.5f; - - public bool m_checkPlayerShelter; - - private ParticleSystem m_ps; - - private Cloth m_cloth; - - private Player m_player; - - private void Start() - { - if (!(EnvMan.instance == null)) - { - m_ps = GetComponent<ParticleSystem>(); - m_cloth = GetComponent<Cloth>(); - if (m_checkPlayerShelter) - { - m_player = GetComponentInParent<Player>(); - } - if (m_smoothUpdate) - { - InvokeRepeating("UpdateWind", 0f, 0.01f); - return; - } - InvokeRepeating("UpdateWind", Random.Range(1.5f, 2.5f), 2f); - UpdateWind(); - } - } - - private void UpdateWind() - { - if (m_alignToWindDirection) - { - Vector3 windDir = EnvMan.instance.GetWindDir(); - base.transform.rotation = Quaternion.LookRotation(windDir, Vector3.up); - } - if ((bool)m_ps) - { - if (!m_ps.emission.enabled) - { - return; - } - Vector3 windForce = EnvMan.instance.GetWindForce(); - if (m_particleVelocity) - { - ParticleSystem.VelocityOverLifetimeModule velocityOverLifetime = m_ps.velocityOverLifetime; - velocityOverLifetime.space = ParticleSystemSimulationSpace.World; - velocityOverLifetime.x = windForce.x * m_multiplier; - velocityOverLifetime.z = windForce.z * m_multiplier; - } - if (m_particleForce) - { - ParticleSystem.ForceOverLifetimeModule forceOverLifetime = m_ps.forceOverLifetime; - forceOverLifetime.space = ParticleSystemSimulationSpace.World; - forceOverLifetime.x = windForce.x * m_multiplier; - forceOverLifetime.z = windForce.z * m_multiplier; - } - if (m_particleEmission) - { - ParticleSystem.EmissionModule emission = m_ps.emission; - emission.rateOverTimeMultiplier = Mathf.Lerp(m_particleEmissionMin, m_particleEmissionMax, EnvMan.instance.GetWindIntensity()); - } - } - if ((bool)m_cloth) - { - Vector3 vector = EnvMan.instance.GetWindForce(); - if (m_checkPlayerShelter && m_player != null && m_player.InShelter()) - { - vector = Vector3.zero; - } - m_cloth.externalAcceleration = vector * m_multiplier; - m_cloth.randomAcceleration = vector * m_multiplier * m_clothRandomAccelerationFactor; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Growup.cs b/Valheim_v202102/Valheim/assembly_valheim/Growup.cs deleted file mode 100644 index b04c2bf..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Growup.cs +++ /dev/null @@ -1,34 +0,0 @@ -using UnityEngine; - -public class Growup : MonoBehaviour -{ - public float m_growTime = 60f; - - public GameObject m_grownPrefab; - - private BaseAI m_baseAI; - - private ZNetView m_nview; - - private void Start() - { - m_baseAI = GetComponent<BaseAI>(); - m_nview = GetComponent<ZNetView>(); - InvokeRepeating("GrowUpdate", Random.Range(10f, 15f), 10f); - } - - private void GrowUpdate() - { - if (m_nview.IsValid() && m_nview.IsOwner() && m_baseAI.GetTimeSinceSpawned().TotalSeconds > (double)m_growTime) - { - Character component = GetComponent<Character>(); - Character component2 = Object.Instantiate(m_grownPrefab, base.transform.position, base.transform.rotation).GetComponent<Character>(); - if ((bool)component && (bool)component2) - { - component2.SetTamed(component.IsTamed()); - component2.SetLevel(component.GetLevel()); - } - m_nview.Destroy(); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/GuidePoint.cs b/Valheim_v202102/Valheim/assembly_valheim/GuidePoint.cs deleted file mode 100644 index 23ec869..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/GuidePoint.cs +++ /dev/null @@ -1,28 +0,0 @@ -using UnityEngine; - -public class GuidePoint : MonoBehaviour -{ - public Raven.RavenText m_text = new Raven.RavenText(); - - public GameObject m_ravenPrefab; - - private void Start() - { - if (!Raven.IsInstantiated()) - { - Object.Instantiate(m_ravenPrefab, new Vector3(0f, 0f, 0f), Quaternion.identity); - } - m_text.m_static = true; - m_text.m_guidePoint = this; - Raven.RegisterStaticText(m_text); - } - - private void OnDestroy() - { - Raven.UnregisterStaticText(m_text); - } - - private void OnDrawGizmos() - { - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Heightmap.cs b/Valheim_v202102/Valheim/assembly_valheim/Heightmap.cs deleted file mode 100644 index b498b19..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Heightmap.cs +++ /dev/null @@ -1,1111 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -[ExecuteInEditMode] -public class Heightmap : MonoBehaviour -{ - public enum Biome - { - None = 0, - Meadows = 1, - Swamp = 2, - Mountain = 4, - BlackForest = 8, - Plains = 16, - AshLands = 32, - DeepNorth = 64, - Ocean = 256, - Mistlands = 512, - BiomesMax = 513 - } - - public enum BiomeArea - { - Edge = 1, - Median, - Everything - } - - private static float[] tempBiomeWeights = new float[513]; - - private static List<Heightmap> tempHmaps = new List<Heightmap>(); - - public int m_width = 32; - - public float m_scale = 1f; - - public Material m_material; - - private const float m_levelMaxDelta = 8f; - - private const float m_smoothMaxDelta = 1f; - - public bool m_isDistantLod; - - public bool m_distantLodEditorHax; - - private List<float> m_heights = new List<float>(); - - private HeightmapBuilder.HMBuildData m_buildData; - - private Texture2D m_clearedMask; - - private Material m_materialInstance; - - private MeshCollider m_collider; - - private float[] m_oceanDepth = new float[4]; - - private Biome[] m_cornerBiomes = new Biome[4] - { - Biome.Meadows, - Biome.Meadows, - Biome.Meadows, - Biome.Meadows - }; - - private Bounds m_bounds; - - private BoundingSphere m_boundingSphere; - - private Mesh m_collisionMesh; - - private Mesh m_renderMesh; - - private bool m_dirty; - - private static List<Heightmap> m_heightmaps = new List<Heightmap>(); - - private static List<Vector3> m_tempVertises = new List<Vector3>(); - - private static List<Vector2> m_tempUVs = new List<Vector2>(); - - private static List<int> m_tempIndices = new List<int>(); - - private static List<Color32> m_tempColors = new List<Color32>(); - - private void Awake() - { - if (!m_isDistantLod) - { - m_heightmaps.Add(this); - } - m_collider = GetComponent<MeshCollider>(); - } - - private void OnDestroy() - { - if (!m_isDistantLod) - { - m_heightmaps.Remove(this); - } - if ((bool)m_materialInstance) - { - Object.DestroyImmediate(m_materialInstance); - } - } - - private void OnEnable() - { - if (!m_isDistantLod || !Application.isPlaying || m_distantLodEditorHax) - { - Regenerate(); - } - } - - private void Update() - { - Render(); - } - - private void Render() - { - if (IsVisible()) - { - if (m_dirty) - { - m_dirty = false; - m_materialInstance.SetTexture("_ClearedMaskTex", m_clearedMask); - RebuildRenderMesh(); - } - if ((bool)m_renderMesh) - { - Matrix4x4 matrix = Matrix4x4.TRS(base.transform.position, Quaternion.identity, Vector3.one); - Graphics.DrawMesh(m_renderMesh, matrix, m_materialInstance, base.gameObject.layer); - } - } - } - - private bool IsVisible() - { - if (!Utils.InsideMainCamera(m_boundingSphere)) - { - return false; - } - if (!Utils.InsideMainCamera(m_bounds)) - { - return false; - } - return true; - } - - public static void ForceGenerateAll() - { - foreach (Heightmap heightmap in m_heightmaps) - { - if (heightmap.HaveQueuedRebuild()) - { - ZLog.Log("Force generaeting hmap " + heightmap.transform.position); - heightmap.Regenerate(); - } - } - } - - public void Poke(bool delayed) - { - if (delayed) - { - if (HaveQueuedRebuild()) - { - CancelInvoke("Regenerate"); - } - InvokeRepeating("Regenerate", 0.1f, 0f); - } - else - { - Regenerate(); - } - } - - public bool HaveQueuedRebuild() - { - return IsInvoking("Regenerate"); - } - - public void Regenerate() - { - if (HaveQueuedRebuild()) - { - CancelInvoke("Regenerate"); - } - Generate(); - RebuildCollisionMesh(); - UpdateCornerDepths(); - m_dirty = true; - } - - private void UpdateCornerDepths() - { - float num = (ZoneSystem.instance ? ZoneSystem.instance.m_waterLevel : 30f); - m_oceanDepth[0] = GetHeight(0, m_width); - m_oceanDepth[1] = GetHeight(m_width, m_width); - m_oceanDepth[2] = GetHeight(m_width, 0); - m_oceanDepth[3] = GetHeight(0, 0); - m_oceanDepth[0] = Mathf.Max(0f, num - m_oceanDepth[0]); - m_oceanDepth[1] = Mathf.Max(0f, num - m_oceanDepth[1]); - m_oceanDepth[2] = Mathf.Max(0f, num - m_oceanDepth[2]); - m_oceanDepth[3] = Mathf.Max(0f, num - m_oceanDepth[3]); - m_materialInstance.SetFloatArray("_depth", m_oceanDepth); - } - - public float[] GetOceanDepth() - { - return m_oceanDepth; - } - - public static float GetOceanDepthAll(Vector3 worldPos) - { - Heightmap heightmap = FindHeightmap(worldPos); - if ((bool)heightmap) - { - return heightmap.GetOceanDepth(worldPos); - } - return 0f; - } - - public float GetOceanDepth(Vector3 worldPos) - { - WorldToVertex(worldPos, out var x, out var y); - float t = (float)x / (float)m_width; - float t2 = (float)y / (float)m_width; - float a = Mathf.Lerp(m_oceanDepth[3], m_oceanDepth[2], t); - float b = Mathf.Lerp(m_oceanDepth[0], m_oceanDepth[1], t); - return Mathf.Lerp(a, b, t2); - } - - private void Initialize() - { - int num = m_width + 1; - int num2 = num * num; - if (m_heights.Count != num2) - { - m_heights.Clear(); - for (int i = 0; i < num2; i++) - { - m_heights.Add(0f); - } - m_clearedMask = new Texture2D(m_width, m_width); - m_clearedMask.wrapMode = TextureWrapMode.Clamp; - m_materialInstance = new Material(m_material); - m_materialInstance.SetTexture("_ClearedMaskTex", m_clearedMask); - } - } - - private void Generate() - { - Initialize(); - int num = m_width + 1; - int num2 = num * num; - Vector3 position = base.transform.position; - if (m_buildData == null || m_buildData.m_baseHeights.Count != num2 || m_buildData.m_center != position || m_buildData.m_scale != m_scale || m_buildData.m_worldGen != WorldGenerator.instance) - { - m_buildData = HeightmapBuilder.instance.RequestTerrainSync(position, m_width, m_scale, m_isDistantLod, WorldGenerator.instance); - m_cornerBiomes = m_buildData.m_cornerBiomes; - } - for (int i = 0; i < num2; i++) - { - m_heights[i] = m_buildData.m_baseHeights[i]; - } - Color[] pixels = new Color[m_clearedMask.width * m_clearedMask.height]; - m_clearedMask.SetPixels(pixels); - ApplyModifiers(); - } - - private float Distance(float x, float y, float rx, float ry) - { - float num = x - rx; - float num2 = y - ry; - float num3 = Mathf.Sqrt(num * num + num2 * num2); - float num4 = 1.414f - num3; - return num4 * num4 * num4; - } - - public List<Biome> GetBiomes() - { - List<Biome> list = new List<Biome>(); - Biome[] cornerBiomes = m_cornerBiomes; - foreach (Biome item in cornerBiomes) - { - if (!list.Contains(item)) - { - list.Add(item); - } - } - return list; - } - - public bool HaveBiome(Biome biome) - { - if ((m_cornerBiomes[0] & biome) == 0 && (m_cornerBiomes[1] & biome) == 0 && (m_cornerBiomes[2] & biome) == 0) - { - return (m_cornerBiomes[3] & biome) != 0; - } - return true; - } - - public Biome GetBiome(Vector3 point) - { - if (m_isDistantLod) - { - return WorldGenerator.instance.GetBiome(point.x, point.z); - } - if (m_cornerBiomes[0] == m_cornerBiomes[1] && m_cornerBiomes[0] == m_cornerBiomes[2] && m_cornerBiomes[0] == m_cornerBiomes[3]) - { - return m_cornerBiomes[0]; - } - float x = point.x; - float y = point.z; - WorldToNormalizedHM(point, out x, out y); - for (int i = 1; i < tempBiomeWeights.Length; i++) - { - tempBiomeWeights[i] = 0f; - } - tempBiomeWeights[(int)m_cornerBiomes[0]] += Distance(x, y, 0f, 0f); - tempBiomeWeights[(int)m_cornerBiomes[1]] += Distance(x, y, 1f, 0f); - tempBiomeWeights[(int)m_cornerBiomes[2]] += Distance(x, y, 0f, 1f); - tempBiomeWeights[(int)m_cornerBiomes[3]] += Distance(x, y, 1f, 1f); - int result = 0; - float num = -99999f; - for (int j = 1; j < tempBiomeWeights.Length; j++) - { - if (tempBiomeWeights[j] > num) - { - result = j; - num = tempBiomeWeights[j]; - } - } - return (Biome)result; - } - - public BiomeArea GetBiomeArea() - { - if (IsBiomeEdge()) - { - return BiomeArea.Edge; - } - return BiomeArea.Median; - } - - public bool IsBiomeEdge() - { - if (m_cornerBiomes[0] == m_cornerBiomes[1] && m_cornerBiomes[0] == m_cornerBiomes[2] && m_cornerBiomes[0] == m_cornerBiomes[3]) - { - return false; - } - return true; - } - - private void ApplyModifiers() - { - List<TerrainModifier> allInstances = TerrainModifier.GetAllInstances(); - float[] array = null; - float[] levelOnly = null; - foreach (TerrainModifier item in allInstances) - { - if (item.enabled && TerrainVSModifier(item)) - { - if (item.m_playerModifiction && array == null) - { - array = m_heights.ToArray(); - levelOnly = m_heights.ToArray(); - } - ApplyModifier(item, array, levelOnly); - } - } - m_clearedMask.Apply(); - } - - private void ApplyModifier(TerrainModifier modifier, float[] baseHeights, float[] levelOnly) - { - if (modifier.m_level) - { - LevelTerrain(modifier.transform.position + Vector3.up * modifier.m_levelOffset, modifier.m_levelRadius, modifier.m_square, baseHeights, levelOnly, modifier.m_playerModifiction); - } - if (modifier.m_smooth) - { - SmoothTerrain2(modifier.transform.position + Vector3.up * modifier.m_levelOffset, modifier.m_smoothRadius, modifier.m_square, levelOnly, modifier.m_smoothPower, modifier.m_playerModifiction); - } - if (modifier.m_paintCleared) - { - PaintCleared(modifier.transform.position, modifier.m_paintRadius, modifier.m_paintType, modifier.m_paintHeightCheck, apply: false); - } - } - - public bool TerrainVSModifier(TerrainModifier modifier) - { - Vector3 position = modifier.transform.position; - float num = modifier.GetRadius() + 4f; - Vector3 position2 = base.transform.position; - float num2 = (float)m_width * m_scale * 0.5f; - if (position.x + num < position2.x - num2) - { - return false; - } - if (position.x - num > position2.x + num2) - { - return false; - } - if (position.z + num < position2.z - num2) - { - return false; - } - if (position.z - num > position2.z + num2) - { - return false; - } - return true; - } - - private Vector3 CalcNormal2(List<Vector3> vertises, int x, int y) - { - int num = m_width + 1; - Vector3 vector = vertises[y * num + x]; - Vector3 rhs; - if (x != m_width) - { - rhs = ((x != 0) ? (vertises[y * num + x + 1] - vertises[y * num + x - 1]) : (vertises[y * num + x + 1] - vector)); - } - else - { - Vector3 vector2 = vertises[y * num + x - 1]; - rhs = vector - vector2; - } - Vector3 lhs; - if (y != m_width) - { - lhs = ((y != 0) ? (vertises[(y + 1) * num + x] - vertises[(y - 1) * num + x]) : (CalcVertex(x, y + 1) - vector)); - } - else - { - Vector3 vector3 = CalcVertex(x, y - 1); - lhs = vector - vector3; - } - Vector3 result = Vector3.Cross(lhs, rhs); - result.Normalize(); - return result; - } - - private Vector3 CalcNormal(int x, int y) - { - Vector3 vector = CalcVertex(x, y); - Vector3 rhs; - if (x == m_width) - { - Vector3 vector2 = CalcVertex(x - 1, y); - rhs = vector - vector2; - } - else - { - rhs = CalcVertex(x + 1, y) - vector; - } - Vector3 lhs; - if (y == m_width) - { - Vector3 vector3 = CalcVertex(x, y - 1); - lhs = vector - vector3; - } - else - { - lhs = CalcVertex(x, y + 1) - vector; - } - return Vector3.Cross(lhs, rhs).normalized; - } - - private Vector3 CalcVertex(int x, int y) - { - int num = m_width + 1; - return new Vector3((float)m_width * m_scale * -0.5f, 0f, (float)m_width * m_scale * -0.5f) + new Vector3(y: m_heights[y * num + x], x: (float)x * m_scale, z: (float)y * m_scale); - } - - private Color GetBiomeColor(float ix, float iy) - { - if (m_cornerBiomes[0] == m_cornerBiomes[1] && m_cornerBiomes[0] == m_cornerBiomes[2] && m_cornerBiomes[0] == m_cornerBiomes[3]) - { - return GetBiomeColor(m_cornerBiomes[0]); - } - Color32 biomeColor = GetBiomeColor(m_cornerBiomes[0]); - Color32 biomeColor2 = GetBiomeColor(m_cornerBiomes[1]); - Color32 biomeColor3 = GetBiomeColor(m_cornerBiomes[2]); - Color32 biomeColor4 = GetBiomeColor(m_cornerBiomes[3]); - Color32 a = Color32.Lerp(biomeColor, biomeColor2, ix); - Color32 b = Color32.Lerp(biomeColor3, biomeColor4, ix); - return Color32.Lerp(a, b, iy); - } - - public static Color32 GetBiomeColor(Biome biome) - { - return biome switch - { - Biome.Swamp => new Color32(byte.MaxValue, 0, 0, 0), - Biome.Mountain => new Color32(0, byte.MaxValue, 0, 0), - Biome.BlackForest => new Color32(0, 0, byte.MaxValue, 0), - Biome.Plains => new Color32(0, 0, 0, byte.MaxValue), - Biome.AshLands => new Color32(byte.MaxValue, 0, 0, byte.MaxValue), - Biome.DeepNorth => new Color32(0, byte.MaxValue, 0, 0), - Biome.Mistlands => new Color32(0, 0, byte.MaxValue, byte.MaxValue), - _ => new Color32(0, 0, 0, 0), - }; - } - - private void RebuildCollisionMesh() - { - if (m_collisionMesh == null) - { - m_collisionMesh = new Mesh(); - } - int num = m_width + 1; - float num2 = -999999f; - float num3 = 999999f; - m_tempVertises.Clear(); - for (int i = 0; i < num; i++) - { - for (int j = 0; j < num; j++) - { - Vector3 item = CalcVertex(j, i); - m_tempVertises.Add(item); - if (item.y > num2) - { - num2 = item.y; - } - if (item.y < num3) - { - num3 = item.y; - } - } - } - m_collisionMesh.SetVertices(m_tempVertises); - int num4 = (num - 1) * (num - 1) * 6; - if (m_collisionMesh.GetIndexCount(0) != num4) - { - m_tempIndices.Clear(); - for (int k = 0; k < num - 1; k++) - { - for (int l = 0; l < num - 1; l++) - { - int item2 = k * num + l; - int item3 = k * num + l + 1; - int item4 = (k + 1) * num + l + 1; - int item5 = (k + 1) * num + l; - m_tempIndices.Add(item2); - m_tempIndices.Add(item5); - m_tempIndices.Add(item3); - m_tempIndices.Add(item3); - m_tempIndices.Add(item5); - m_tempIndices.Add(item4); - } - } - m_collisionMesh.SetIndices(m_tempIndices.ToArray(), MeshTopology.Triangles, 0); - } - if ((bool)m_collider) - { - m_collider.sharedMesh = m_collisionMesh; - } - float num5 = (float)m_width * m_scale * 0.5f; - m_bounds.SetMinMax(base.transform.position + new Vector3(0f - num5, num3, 0f - num5), base.transform.position + new Vector3(num5, num2, num5)); - m_boundingSphere.position = m_bounds.center; - m_boundingSphere.radius = Vector3.Distance(m_boundingSphere.position, m_bounds.max); - } - - private void RebuildRenderMesh() - { - if (m_renderMesh == null) - { - m_renderMesh = new Mesh(); - } - WorldGenerator instance = WorldGenerator.instance; - int num = m_width + 1; - Vector3 vector = base.transform.position + new Vector3((float)m_width * m_scale * -0.5f, 0f, (float)m_width * m_scale * -0.5f); - m_tempVertises.Clear(); - m_tempUVs.Clear(); - m_tempIndices.Clear(); - m_tempColors.Clear(); - for (int i = 0; i < num; i++) - { - float iy = Mathf.SmoothStep(0f, 1f, (float)i / (float)m_width); - for (int j = 0; j < num; j++) - { - float ix = Mathf.SmoothStep(0f, 1f, (float)j / (float)m_width); - m_tempUVs.Add(new Vector2((float)j / (float)m_width, (float)i / (float)m_width)); - if (m_isDistantLod) - { - float wx = vector.x + (float)j * m_scale; - float wy = vector.z + (float)i * m_scale; - Biome biome = instance.GetBiome(wx, wy); - m_tempColors.Add(GetBiomeColor(biome)); - } - else - { - m_tempColors.Add(GetBiomeColor(ix, iy)); - } - } - } - m_collisionMesh.GetVertices(m_tempVertises); - m_collisionMesh.GetIndices(m_tempIndices, 0); - m_renderMesh.Clear(); - m_renderMesh.SetVertices(m_tempVertises); - m_renderMesh.SetColors(m_tempColors); - m_renderMesh.SetUVs(0, m_tempUVs); - m_renderMesh.SetIndices(m_tempIndices.ToArray(), MeshTopology.Triangles, 0, calculateBounds: true); - m_renderMesh.RecalculateNormals(); - m_renderMesh.RecalculateTangents(); - } - - private void SmoothTerrain2(Vector3 worldPos, float radius, bool square, float[] levelOnlyHeights, float power, bool playerModifiction) - { - WorldToVertex(worldPos, out var x, out var y); - float b = worldPos.y - base.transform.position.y; - float num = radius / m_scale; - int num2 = Mathf.CeilToInt(num); - Vector2 a = new Vector2(x, y); - int num3 = m_width + 1; - for (int i = y - num2; i <= y + num2; i++) - { - for (int j = x - num2; j <= x + num2; j++) - { - float num4 = Vector2.Distance(a, new Vector2(j, i)); - if (num4 > num) - { - continue; - } - float num5 = num4 / num; - if (j >= 0 && i >= 0 && j < num3 && i < num3) - { - num5 = ((power != 3f) ? Mathf.Pow(num5, power) : (num5 * num5 * num5)); - float height = GetHeight(j, i); - float t = 1f - num5; - float num6 = Mathf.Lerp(height, b, t); - if (playerModifiction) - { - float num7 = levelOnlyHeights[i * num3 + j]; - num6 = Mathf.Clamp(num6, num7 - 1f, num7 + 1f); - } - SetHeight(j, i, num6); - } - } - } - } - - private bool AtMaxWorldLevelDepth(Vector3 worldPos) - { - GetWorldHeight(worldPos, out var height); - GetWorldBaseHeight(worldPos, out var height2); - return Mathf.Max(0f - (height - height2), 0f) >= 7.95f; - } - - private bool GetWorldBaseHeight(Vector3 worldPos, out float height) - { - WorldToVertex(worldPos, out var x, out var y); - int num = m_width + 1; - if (x < 0 || y < 0 || x >= num || y >= num) - { - height = 0f; - return false; - } - height = m_buildData.m_baseHeights[y * num + x] + base.transform.position.y; - return true; - } - - private bool GetWorldHeight(Vector3 worldPos, out float height) - { - WorldToVertex(worldPos, out var x, out var y); - int num = m_width + 1; - if (x < 0 || y < 0 || x >= num || y >= num) - { - height = 0f; - return false; - } - height = m_heights[y * num + x] + base.transform.position.y; - return true; - } - - private bool GetAverageWorldHeight(Vector3 worldPos, float radius, out float height) - { - WorldToVertex(worldPos, out var x, out var y); - float num = radius / m_scale; - int num2 = Mathf.CeilToInt(num); - Vector2 a = new Vector2(x, y); - int num3 = m_width + 1; - float num4 = 0f; - int num5 = 0; - for (int i = y - num2; i <= y + num2; i++) - { - for (int j = x - num2; j <= x + num2; j++) - { - if (!(Vector2.Distance(a, new Vector2(j, i)) > num) && j >= 0 && i >= 0 && j < num3 && i < num3) - { - num4 += GetHeight(j, i); - num5++; - } - } - } - if (num5 == 0) - { - height = 0f; - return false; - } - height = num4 / (float)num5 + base.transform.position.y; - return true; - } - - private bool GetMinWorldHeight(Vector3 worldPos, float radius, out float height) - { - WorldToVertex(worldPos, out var x, out var y); - float num = radius / m_scale; - int num2 = Mathf.CeilToInt(num); - Vector2 a = new Vector2(x, y); - int num3 = m_width + 1; - height = 99999f; - for (int i = y - num2; i <= y + num2; i++) - { - for (int j = x - num2; j <= x + num2; j++) - { - if (!(Vector2.Distance(a, new Vector2(j, i)) > num) && j >= 0 && i >= 0 && j < num3 && i < num3) - { - float height2 = GetHeight(j, i); - if (height2 < height) - { - height = height2; - } - } - } - } - return height != 99999f; - } - - private bool GetMaxWorldHeight(Vector3 worldPos, float radius, out float height) - { - WorldToVertex(worldPos, out var x, out var y); - float num = radius / m_scale; - int num2 = Mathf.CeilToInt(num); - Vector2 a = new Vector2(x, y); - int num3 = m_width + 1; - height = -99999f; - for (int i = y - num2; i <= y + num2; i++) - { - for (int j = x - num2; j <= x + num2; j++) - { - if (!(Vector2.Distance(a, new Vector2(j, i)) > num) && j >= 0 && i >= 0 && j < num3 && i < num3) - { - float height2 = GetHeight(j, i); - if (height2 > height) - { - height = height2; - } - } - } - } - return height != -99999f; - } - - public static bool AtMaxLevelDepth(Vector3 worldPos) - { - Heightmap heightmap = FindHeightmap(worldPos); - if ((bool)heightmap) - { - return heightmap.AtMaxWorldLevelDepth(worldPos); - } - return false; - } - - public static bool GetHeight(Vector3 worldPos, out float height) - { - Heightmap heightmap = FindHeightmap(worldPos); - if ((bool)heightmap && heightmap.GetWorldHeight(worldPos, out height)) - { - return true; - } - height = 0f; - return false; - } - - public static bool GetAverageHeight(Vector3 worldPos, float radius, out float height) - { - List<Heightmap> list = new List<Heightmap>(); - FindHeightmap(worldPos, radius, list); - float num = 0f; - int num2 = 0; - foreach (Heightmap item in list) - { - if (item.GetAverageWorldHeight(worldPos, radius, out var height2)) - { - num += height2; - num2++; - } - } - if (num2 > 0) - { - height = num / (float)num2; - return true; - } - height = 0f; - return false; - } - - private void SmoothTerrain(Vector3 worldPos, float radius, bool square, float intensity) - { - WorldToVertex(worldPos, out var x, out var y); - float num = radius / m_scale; - int num2 = Mathf.CeilToInt(num); - Vector2 a = new Vector2(x, y); - List<KeyValuePair<Vector2i, float>> list = new List<KeyValuePair<Vector2i, float>>(); - for (int i = y - num2; i <= y + num2; i++) - { - for (int j = x - num2; j <= x + num2; j++) - { - if ((square || !(Vector2.Distance(a, new Vector2(j, i)) > num)) && j != 0 && i != 0 && j != m_width && i != m_width) - { - list.Add(new KeyValuePair<Vector2i, float>(new Vector2i(j, i), GetAvgHeight(j, i, 1))); - } - } - } - foreach (KeyValuePair<Vector2i, float> item in list) - { - float h = Mathf.Lerp(GetHeight(item.Key.x, item.Key.y), item.Value, intensity); - SetHeight(item.Key.x, item.Key.y, h); - } - } - - private float GetAvgHeight(int cx, int cy, int w) - { - int num = m_width + 1; - float num2 = 0f; - int num3 = 0; - for (int i = cy - w; i <= cy + w; i++) - { - for (int j = cx - w; j <= cx + w; j++) - { - if (j >= 0 && i >= 0 && j < num && i < num) - { - num2 += GetHeight(j, i); - num3++; - } - } - } - if (num3 == 0) - { - return 0f; - } - return num2 / (float)num3; - } - - private float GroundHeight(Vector3 point) - { - Ray ray = new Ray(point + Vector3.up * 100f, Vector3.down); - if (m_collider.Raycast(ray, out var hitInfo, 300f)) - { - return hitInfo.point.y; - } - return -10000f; - } - - private void FindObjectsToMove(Vector3 worldPos, float area, List<Rigidbody> objects) - { - if (m_collider == null) - { - return; - } - Collider[] array = Physics.OverlapBox(worldPos, new Vector3(area / 2f, 500f, area / 2f)); - foreach (Collider collider in array) - { - if (!(collider == m_collider) && (bool)collider.attachedRigidbody) - { - Rigidbody attachedRigidbody = collider.attachedRigidbody; - ZNetView component = attachedRigidbody.GetComponent<ZNetView>(); - if (!component || component.IsOwner()) - { - objects.Add(attachedRigidbody); - } - } - } - } - - private void PaintCleared(Vector3 worldPos, float radius, TerrainModifier.PaintType paintType, bool heightCheck, bool apply) - { - worldPos.x -= 0.5f; - worldPos.z -= 0.5f; - float num = worldPos.y - base.transform.position.y; - WorldToVertex(worldPos, out var x, out var y); - float num2 = radius / m_scale; - int num3 = Mathf.CeilToInt(num2); - Vector2 a = new Vector2(x, y); - for (int i = y - num3; i <= y + num3; i++) - { - for (int j = x - num3; j <= x + num3; j++) - { - float num4 = Vector2.Distance(a, new Vector2(j, i)); - if (j >= 0 && i >= 0 && j < m_clearedMask.width && i < m_clearedMask.height && (!heightCheck || !(GetHeight(j, i) > num))) - { - float f = 1f - Mathf.Clamp01(num4 / num2); - f = Mathf.Pow(f, 0.1f); - Color color = m_clearedMask.GetPixel(j, i); - switch (paintType) - { - case TerrainModifier.PaintType.Dirt: - color = Color.Lerp(color, Color.red, f); - break; - case TerrainModifier.PaintType.Cultivate: - color = Color.Lerp(color, Color.green, f); - break; - case TerrainModifier.PaintType.Paved: - color = Color.Lerp(color, Color.blue, f); - break; - case TerrainModifier.PaintType.Reset: - color = Color.Lerp(color, Color.black, f); - break; - } - m_clearedMask.SetPixel(j, i, color); - } - } - } - if (apply) - { - m_clearedMask.Apply(); - } - } - - public bool IsCleared(Vector3 worldPos) - { - worldPos.x -= 0.5f; - worldPos.z -= 0.5f; - WorldToVertex(worldPos, out var x, out var y); - Color pixel = m_clearedMask.GetPixel(x, y); - if (!(pixel.r > 0.5f) && !(pixel.g > 0.5f)) - { - return pixel.b > 0.5f; - } - return true; - } - - public bool IsCultivated(Vector3 worldPos) - { - WorldToVertex(worldPos, out var x, out var y); - return m_clearedMask.GetPixel(x, y).g > 0.5f; - } - - private void WorldToVertex(Vector3 worldPos, out int x, out int y) - { - Vector3 vector = worldPos - base.transform.position; - x = Mathf.FloorToInt(vector.x / m_scale + 0.5f) + m_width / 2; - y = Mathf.FloorToInt(vector.z / m_scale + 0.5f) + m_width / 2; - } - - private void WorldToNormalizedHM(Vector3 worldPos, out float x, out float y) - { - float num = (float)m_width * m_scale; - Vector3 vector = worldPos - base.transform.position; - x = vector.x / num + 0.5f; - y = vector.z / num + 0.5f; - } - - private void LevelTerrain(Vector3 worldPos, float radius, bool square, float[] baseHeights, float[] levelOnly, bool playerModifiction) - { - WorldToVertex(worldPos, out var x, out var y); - Vector3 vector = worldPos - base.transform.position; - float num = radius / m_scale; - int num2 = Mathf.CeilToInt(num); - int num3 = m_width + 1; - Vector2 a = new Vector2(x, y); - for (int i = y - num2; i <= y + num2; i++) - { - for (int j = x - num2; j <= x + num2; j++) - { - if ((square || !(Vector2.Distance(a, new Vector2(j, i)) > num)) && j >= 0 && i >= 0 && j < num3 && i < num3) - { - float num4 = vector.y; - if (playerModifiction) - { - float num5 = baseHeights[i * num3 + j]; - num4 = (levelOnly[i * num3 + j] = Mathf.Clamp(num4, num5 - 8f, num5 + 8f)); - } - SetHeight(j, i, num4); - } - } - } - } - - private float GetHeight(int x, int y) - { - int num = m_width + 1; - if (x < 0 || y < 0 || x >= num || y >= num) - { - return 0f; - } - return m_heights[y * num + x]; - } - - private float GetBaseHeight(int x, int y) - { - int num = m_width + 1; - if (x < 0 || y < 0 || x >= num || y >= num) - { - return 0f; - } - return m_buildData.m_baseHeights[y * num + x]; - } - - private void SetHeight(int x, int y, float h) - { - int num = m_width + 1; - if (x >= 0 && y >= 0 && x < num && y < num) - { - m_heights[y * num + x] = h; - } - } - - public bool IsPointInside(Vector3 point, float radius = 0f) - { - float num = (float)m_width * m_scale * 0.5f; - Vector3 position = base.transform.position; - if (point.x + radius >= position.x - num && point.x - radius <= position.x + num && point.z + radius >= position.z - num && point.z - radius <= position.z + num) - { - return true; - } - return false; - } - - public static List<Heightmap> GetAllHeightmaps() - { - return m_heightmaps; - } - - public static Heightmap FindHeightmap(Vector3 point) - { - foreach (Heightmap heightmap in m_heightmaps) - { - if (heightmap.IsPointInside(point)) - { - return heightmap; - } - } - return null; - } - - public static void FindHeightmap(Vector3 point, float radius, List<Heightmap> heightmaps) - { - foreach (Heightmap heightmap in m_heightmaps) - { - if (heightmap.IsPointInside(point, radius)) - { - heightmaps.Add(heightmap); - } - } - } - - public static Biome FindBiome(Vector3 point) - { - Heightmap heightmap = FindHeightmap(point); - if ((bool)heightmap) - { - return heightmap.GetBiome(point); - } - return Biome.None; - } - - public static bool HaveQueuedRebuild(Vector3 point, float radius) - { - tempHmaps.Clear(); - FindHeightmap(point, radius, tempHmaps); - foreach (Heightmap tempHmap in tempHmaps) - { - if (tempHmap.HaveQueuedRebuild()) - { - return true; - } - } - return false; - } - - public static Biome FindBiomeClutter(Vector3 point) - { - if ((bool)ZoneSystem.instance && !ZoneSystem.instance.IsZoneLoaded(point)) - { - return Biome.None; - } - Heightmap heightmap = FindHeightmap(point); - if ((bool)heightmap) - { - return heightmap.GetBiome(point); - } - return Biome.None; - } - - public void Clear() - { - m_heights.Clear(); - m_clearedMask = null; - m_materialInstance = null; - m_buildData = null; - if ((bool)m_collisionMesh) - { - m_collisionMesh.Clear(); - } - if ((bool)m_renderMesh) - { - m_renderMesh.Clear(); - } - if ((bool)m_collider) - { - m_collider.sharedMesh = null; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/HeightmapBuilder.cs b/Valheim_v202102/Valheim/assembly_valheim/HeightmapBuilder.cs deleted file mode 100644 index 6fab0cc..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/HeightmapBuilder.cs +++ /dev/null @@ -1,273 +0,0 @@ -using System.Collections.Generic; -using System.Diagnostics; -using System.Threading; -using UnityEngine; - -public class HeightmapBuilder -{ - public class HMBuildData - { - public Vector3 m_center; - - public int m_width; - - public float m_scale; - - public bool m_distantLod; - - public bool m_menu; - - public WorldGenerator m_worldGen; - - public Heightmap.Biome[] m_cornerBiomes; - - public List<float> m_baseHeights; - - public HMBuildData(Vector3 center, int width, float scale, bool distantLod, WorldGenerator worldGen) - { - m_center = center; - m_width = width; - m_scale = scale; - m_distantLod = distantLod; - m_worldGen = worldGen; - } - - public bool IsEqual(Vector3 center, int width, float scale, bool distantLod, WorldGenerator worldGen) - { - if (m_center == center && m_width == width && m_scale == scale && m_distantLod == distantLod) - { - return m_worldGen == worldGen; - } - return false; - } - } - - private static HeightmapBuilder m_instance; - - private const int m_maxReadyQueue = 16; - - private List<HMBuildData> m_toBuild = new List<HMBuildData>(); - - private List<HMBuildData> m_ready = new List<HMBuildData>(); - - private Thread m_builder; - - private Mutex m_lock = new Mutex(); - - private bool m_stop; - - public static HeightmapBuilder instance - { - get - { - if (m_instance == null) - { - m_instance = new HeightmapBuilder(); - } - return m_instance; - } - } - - public HeightmapBuilder() - { - m_instance = this; - m_builder = new Thread(BuildThread); - m_builder.Start(); - } - - public void Dispose() - { - if (m_builder != null) - { - ZLog.Log("Stoping build thread"); - m_lock.WaitOne(); - m_stop = true; - m_builder.Abort(); - m_lock.ReleaseMutex(); - m_builder = null; - } - if (m_lock != null) - { - m_lock.Close(); - m_lock = null; - } - } - - private void BuildThread() - { - ZLog.Log("Builder started"); - while (!m_stop) - { - m_lock.WaitOne(); - bool num = m_toBuild.Count > 0; - m_lock.ReleaseMutex(); - if (num) - { - m_lock.WaitOne(); - HMBuildData hMBuildData = m_toBuild[0]; - m_lock.ReleaseMutex(); - new Stopwatch().Start(); - Build(hMBuildData); - m_lock.WaitOne(); - m_toBuild.Remove(hMBuildData); - m_ready.Add(hMBuildData); - while (m_ready.Count > 16) - { - m_ready.RemoveAt(0); - } - m_lock.ReleaseMutex(); - } - Thread.Sleep(10); - } - } - - private void Build(HMBuildData data) - { - int num = data.m_width + 1; - int num2 = num * num; - Vector3 vector = data.m_center + new Vector3((float)data.m_width * data.m_scale * -0.5f, 0f, (float)data.m_width * data.m_scale * -0.5f); - WorldGenerator worldGen = data.m_worldGen; - data.m_cornerBiomes = new Heightmap.Biome[4]; - data.m_cornerBiomes[0] = worldGen.GetBiome(vector.x, vector.z); - data.m_cornerBiomes[1] = worldGen.GetBiome(vector.x + (float)data.m_width * data.m_scale, vector.z); - data.m_cornerBiomes[2] = worldGen.GetBiome(vector.x, vector.z + (float)data.m_width * data.m_scale); - data.m_cornerBiomes[3] = worldGen.GetBiome(vector.x + (float)data.m_width * data.m_scale, vector.z + (float)data.m_width * data.m_scale); - Heightmap.Biome biome = data.m_cornerBiomes[0]; - Heightmap.Biome biome2 = data.m_cornerBiomes[1]; - Heightmap.Biome biome3 = data.m_cornerBiomes[2]; - Heightmap.Biome biome4 = data.m_cornerBiomes[3]; - data.m_baseHeights = new List<float>(num * num); - for (int i = 0; i < num2; i++) - { - data.m_baseHeights.Add(0f); - } - for (int j = 0; j < num; j++) - { - float wy = vector.z + (float)j * data.m_scale; - float t = Mathf.SmoothStep(0f, 1f, (float)j / (float)data.m_width); - for (int k = 0; k < num; k++) - { - float wx = vector.x + (float)k * data.m_scale; - float t2 = Mathf.SmoothStep(0f, 1f, (float)k / (float)data.m_width); - float num3 = 0f; - if (data.m_distantLod) - { - Heightmap.Biome biome5 = worldGen.GetBiome(wx, wy); - num3 = worldGen.GetBiomeHeight(biome5, wx, wy); - } - else if (biome3 == biome && biome2 == biome && biome4 == biome) - { - num3 = worldGen.GetBiomeHeight(biome, wx, wy); - } - else - { - float biomeHeight = worldGen.GetBiomeHeight(biome, wx, wy); - float biomeHeight2 = worldGen.GetBiomeHeight(biome2, wx, wy); - float biomeHeight3 = worldGen.GetBiomeHeight(biome3, wx, wy); - float biomeHeight4 = worldGen.GetBiomeHeight(biome4, wx, wy); - float a = Mathf.Lerp(biomeHeight, biomeHeight2, t2); - float b = Mathf.Lerp(biomeHeight3, biomeHeight4, t2); - num3 = Mathf.Lerp(a, b, t); - } - data.m_baseHeights[j * num + k] = num3; - } - } - if (!data.m_distantLod) - { - return; - } - for (int l = 0; l < 4; l++) - { - List<float> list = new List<float>(data.m_baseHeights); - for (int m = 1; m < num - 1; m++) - { - for (int n = 1; n < num - 1; n++) - { - float num4 = list[m * num + n]; - float num5 = list[(m - 1) * num + n]; - float num6 = list[(m + 1) * num + n]; - float num7 = list[m * num + n - 1]; - float num8 = list[m * num + n + 1]; - if (Mathf.Abs(num4 - num5) > 10f) - { - num4 = (num4 + num5) * 0.5f; - } - if (Mathf.Abs(num4 - num6) > 10f) - { - num4 = (num4 + num6) * 0.5f; - } - if (Mathf.Abs(num4 - num7) > 10f) - { - num4 = (num4 + num7) * 0.5f; - } - if (Mathf.Abs(num4 - num8) > 10f) - { - num4 = (num4 + num8) * 0.5f; - } - data.m_baseHeights[m * num + n] = num4; - } - } - } - } - - public HMBuildData RequestTerrainSync(Vector3 center, int width, float scale, bool distantLod, WorldGenerator worldGen) - { - HMBuildData hMBuildData; - do - { - hMBuildData = RequestTerrain(center, width, scale, distantLod, worldGen); - } - while (hMBuildData == null); - return hMBuildData; - } - - public HMBuildData RequestTerrain(Vector3 center, int width, float scale, bool distantLod, WorldGenerator worldGen) - { - m_lock.WaitOne(); - for (int i = 0; i < m_ready.Count; i++) - { - HMBuildData hMBuildData = m_ready[i]; - if (hMBuildData.IsEqual(center, width, scale, distantLod, worldGen)) - { - m_ready.RemoveAt(i); - m_lock.ReleaseMutex(); - return hMBuildData; - } - } - for (int j = 0; j < m_toBuild.Count; j++) - { - if (m_toBuild[j].IsEqual(center, width, scale, distantLod, worldGen)) - { - m_lock.ReleaseMutex(); - return null; - } - } - m_toBuild.Add(new HMBuildData(center, width, scale, distantLod, worldGen)); - m_lock.ReleaseMutex(); - return null; - } - - public bool IsTerrainReady(Vector3 center, int width, float scale, bool distantLod, WorldGenerator worldGen) - { - m_lock.WaitOne(); - for (int i = 0; i < m_ready.Count; i++) - { - if (m_ready[i].IsEqual(center, width, scale, distantLod, worldGen)) - { - m_lock.ReleaseMutex(); - return true; - } - } - for (int j = 0; j < m_toBuild.Count; j++) - { - if (m_toBuild[j].IsEqual(center, width, scale, distantLod, worldGen)) - { - m_lock.ReleaseMutex(); - return false; - } - } - m_toBuild.Add(new HMBuildData(center, width, scale, distantLod, worldGen)); - m_lock.ReleaseMutex(); - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/HitArea.cs b/Valheim_v202102/Valheim/assembly_valheim/HitArea.cs deleted file mode 100644 index 3e89592..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/HitArea.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using UnityEngine; - -public class HitArea : MonoBehaviour, IDestructible -{ - public Action<HitData, HitArea> m_onHit; - - public float m_health = 1f; - - [NonSerialized] - public GameObject m_parentObject; - - public DestructibleType GetDestructibleType() - { - return DestructibleType.Default; - } - - public void Damage(HitData hit) - { - if (m_onHit != null) - { - m_onHit(hit, this); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/HitData.cs b/Valheim_v202102/Valheim/assembly_valheim/HitData.cs deleted file mode 100644 index fc6a332..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/HitData.cs +++ /dev/null @@ -1,625 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class HitData -{ - [Flags] - public enum DamageType - { - Blunt = 1, - Slash = 2, - Pierce = 4, - Chop = 8, - Pickaxe = 0x10, - Fire = 0x20, - Frost = 0x40, - Lightning = 0x80, - Poison = 0x100, - Spirit = 0x200, - Physical = 0x1F, - Elemental = 0xE0 - } - - public enum DamageModifier - { - Normal, - Resistant, - Weak, - Immune, - Ignore, - VeryResistant, - VeryWeak - } - - [Serializable] - public struct DamageModPair - { - public DamageType m_type; - - public DamageModifier m_modifier; - } - - [Serializable] - public struct DamageModifiers - { - public DamageModifier m_blunt; - - public DamageModifier m_slash; - - public DamageModifier m_pierce; - - public DamageModifier m_chop; - - public DamageModifier m_pickaxe; - - public DamageModifier m_fire; - - public DamageModifier m_frost; - - public DamageModifier m_lightning; - - public DamageModifier m_poison; - - public DamageModifier m_spirit; - - public DamageModifiers Clone() - { - return (DamageModifiers)MemberwiseClone(); - } - - public void Apply(List<DamageModPair> modifiers) - { - foreach (DamageModPair modifier in modifiers) - { - switch (modifier.m_type) - { - case DamageType.Blunt: - ApplyIfBetter(ref m_blunt, modifier.m_modifier); - break; - case DamageType.Slash: - ApplyIfBetter(ref m_slash, modifier.m_modifier); - break; - case DamageType.Pierce: - ApplyIfBetter(ref m_pierce, modifier.m_modifier); - break; - case DamageType.Chop: - ApplyIfBetter(ref m_chop, modifier.m_modifier); - break; - case DamageType.Pickaxe: - ApplyIfBetter(ref m_pickaxe, modifier.m_modifier); - break; - case DamageType.Fire: - ApplyIfBetter(ref m_fire, modifier.m_modifier); - break; - case DamageType.Frost: - ApplyIfBetter(ref m_frost, modifier.m_modifier); - break; - case DamageType.Lightning: - ApplyIfBetter(ref m_lightning, modifier.m_modifier); - break; - case DamageType.Poison: - ApplyIfBetter(ref m_poison, modifier.m_modifier); - break; - case DamageType.Spirit: - ApplyIfBetter(ref m_spirit, modifier.m_modifier); - break; - } - } - } - - public DamageModifier GetModifier(DamageType type) - { - return type switch - { - DamageType.Blunt => m_blunt, - DamageType.Slash => m_slash, - DamageType.Pierce => m_pierce, - DamageType.Chop => m_chop, - DamageType.Pickaxe => m_pickaxe, - DamageType.Fire => m_fire, - DamageType.Frost => m_frost, - DamageType.Lightning => m_lightning, - DamageType.Poison => m_poison, - DamageType.Spirit => m_spirit, - _ => DamageModifier.Normal, - }; - } - - private void ApplyIfBetter(ref DamageModifier original, DamageModifier mod) - { - if (ShouldOverride(original, mod)) - { - original = mod; - } - } - - private bool ShouldOverride(DamageModifier a, DamageModifier b) - { - if (a == DamageModifier.Ignore) - { - return false; - } - if (b == DamageModifier.Immune) - { - return true; - } - if (a == DamageModifier.VeryResistant && b == DamageModifier.Resistant) - { - return false; - } - if (a == DamageModifier.VeryWeak && b == DamageModifier.Weak) - { - return false; - } - return true; - } - - public void Print() - { - ZLog.Log("m_blunt " + m_blunt); - ZLog.Log("m_slash " + m_slash); - ZLog.Log("m_pierce " + m_pierce); - ZLog.Log("m_chop " + m_chop); - ZLog.Log("m_pickaxe " + m_pickaxe); - ZLog.Log("m_fire " + m_fire); - ZLog.Log("m_frost " + m_frost); - ZLog.Log("m_lightning " + m_lightning); - ZLog.Log("m_poison " + m_poison); - ZLog.Log("m_spirit " + m_spirit); - } - } - - [Serializable] - public struct DamageTypes - { - public float m_damage; - - public float m_blunt; - - public float m_slash; - - public float m_pierce; - - public float m_chop; - - public float m_pickaxe; - - public float m_fire; - - public float m_frost; - - public float m_lightning; - - public float m_poison; - - public float m_spirit; - - public bool HaveDamage() - { - if (!(m_damage > 0f) && !(m_blunt > 0f) && !(m_slash > 0f) && !(m_pierce > 0f) && !(m_chop > 0f) && !(m_pickaxe > 0f) && !(m_fire > 0f) && !(m_frost > 0f) && !(m_lightning > 0f) && !(m_poison > 0f)) - { - return m_spirit > 0f; - } - return true; - } - - public float GetTotalPhysicalDamage() - { - return m_blunt + m_slash + m_pierce; - } - - public float GetTotalElementalDamage() - { - return m_fire + m_frost + m_lightning; - } - - public float GetTotalDamage() - { - return m_damage + m_blunt + m_slash + m_pierce + m_chop + m_pickaxe + m_fire + m_frost + m_lightning + m_poison + m_spirit; - } - - public DamageTypes Clone() - { - return (DamageTypes)MemberwiseClone(); - } - - public void Add(DamageTypes other, int multiplier = 1) - { - m_damage += other.m_damage * (float)multiplier; - m_blunt += other.m_blunt * (float)multiplier; - m_slash += other.m_slash * (float)multiplier; - m_pierce += other.m_pierce * (float)multiplier; - m_chop += other.m_chop * (float)multiplier; - m_pickaxe += other.m_pickaxe * (float)multiplier; - m_fire += other.m_fire * (float)multiplier; - m_frost += other.m_frost * (float)multiplier; - m_lightning += other.m_lightning * (float)multiplier; - m_poison += other.m_poison * (float)multiplier; - m_spirit += other.m_spirit * (float)multiplier; - } - - public void Modify(float multiplier) - { - m_damage *= multiplier; - m_blunt *= multiplier; - m_slash *= multiplier; - m_pierce *= multiplier; - m_chop *= multiplier; - m_pickaxe *= multiplier; - m_fire *= multiplier; - m_frost *= multiplier; - m_lightning *= multiplier; - m_poison *= multiplier; - m_spirit *= multiplier; - } - - private float ApplyArmor(float dmg, float ac) - { - float result = Mathf.Clamp01(dmg / (ac * 4f)) * dmg; - if (ac < dmg / 2f) - { - result = dmg - ac; - } - return result; - } - - public void ApplyArmor(float ac) - { - if (!(ac <= 0f)) - { - float num = m_blunt + m_chop + m_pickaxe + m_slash + m_pierce + m_fire + m_frost + m_lightning + m_spirit; - if (!(num <= 0f)) - { - float num2 = ApplyArmor(num, ac) / num; - m_blunt *= num2; - m_chop *= num2; - m_pickaxe *= num2; - m_slash *= num2; - m_pierce *= num2; - m_fire *= num2; - m_frost *= num2; - m_lightning *= num2; - m_spirit *= num2; - } - } - } - - private string DamageRange(float damage, float minFactor, float maxFactor) - { - int num = Mathf.RoundToInt(damage * minFactor); - int num2 = Mathf.RoundToInt(damage * maxFactor); - return "<color=orange>" + Mathf.RoundToInt(damage) + "</color> <color=yellow>(" + num.ToString() + "-" + num2.ToString() + ") </color>"; - } - - public string GetTooltipString(Skills.SkillType skillType = Skills.SkillType.None) - { - if (Player.m_localPlayer == null) - { - return ""; - } - Player.m_localPlayer.GetSkills().GetRandomSkillRange(out var min, out var max, skillType); - string text = ""; - if (m_damage != 0f) - { - text = text + "\n$inventory_damage: " + DamageRange(m_damage, min, max); - } - if (m_blunt != 0f) - { - text = text + "\n$inventory_blunt: " + DamageRange(m_blunt, min, max); - } - if (m_slash != 0f) - { - text = text + "\n$inventory_slash: " + DamageRange(m_slash, min, max); - } - if (m_pierce != 0f) - { - text = text + "\n$inventory_pierce: " + DamageRange(m_pierce, min, max); - } - if (m_fire != 0f) - { - text = text + "\n$inventory_fire: " + DamageRange(m_fire, min, max); - } - if (m_frost != 0f) - { - text = text + "\n$inventory_frost: " + DamageRange(m_frost, min, max); - } - if (m_lightning != 0f) - { - text = text + "\n$inventory_lightning: " + DamageRange(m_lightning, min, max); - } - if (m_poison != 0f) - { - text = text + "\n$inventory_poison: " + DamageRange(m_poison, min, max); - } - if (m_spirit != 0f) - { - text = text + "\n$inventory_spirit: " + DamageRange(m_spirit, min, max); - } - return text; - } - - public string GetTooltipString() - { - string text = ""; - if (m_damage != 0f) - { - text = text + "\n$inventory_damage: <color=yellow>" + m_damage + "</color>"; - } - if (m_blunt != 0f) - { - text = text + "\n$inventory_blunt: <color=yellow>" + m_blunt + "</color>"; - } - if (m_slash != 0f) - { - text = text + "\n$inventory_slash: <color=yellow>" + m_slash + "</color>"; - } - if (m_pierce != 0f) - { - text = text + "\n$inventory_pierce: <color=yellow>" + m_pierce + "</color>"; - } - if (m_fire != 0f) - { - text = text + "\n$inventory_fire: <color=yellow>" + m_fire + "</color>"; - } - if (m_frost != 0f) - { - text = text + "\n$inventory_frost: <color=yellow>" + m_frost + "</color>"; - } - if (m_lightning != 0f) - { - text = text + "\n$inventory_lightning: <color=yellow>" + m_frost + "</color>"; - } - if (m_poison != 0f) - { - text = text + "\n$inventory_poison: <color=yellow>" + m_poison + "</color>"; - } - if (m_spirit != 0f) - { - text = text + "\n$inventory_spirit: <color=yellow>" + m_spirit + "</color>"; - } - return text; - } - } - - public DamageTypes m_damage; - - public int m_toolTier; - - public bool m_dodgeable; - - public bool m_blockable; - - public float m_pushForce; - - public float m_backstabBonus = 1f; - - public float m_staggerMultiplier = 1f; - - public Vector3 m_point = Vector3.zero; - - public Vector3 m_dir = Vector3.zero; - - public string m_statusEffect = ""; - - public ZDOID m_attacker = ZDOID.None; - - public Skills.SkillType m_skill; - - public Collider m_hitCollider; - - public void Serialize(ref ZPackage pkg) - { - pkg.Write(m_damage.m_damage); - pkg.Write(m_damage.m_blunt); - pkg.Write(m_damage.m_slash); - pkg.Write(m_damage.m_pierce); - pkg.Write(m_damage.m_chop); - pkg.Write(m_damage.m_pickaxe); - pkg.Write(m_damage.m_fire); - pkg.Write(m_damage.m_frost); - pkg.Write(m_damage.m_lightning); - pkg.Write(m_damage.m_poison); - pkg.Write(m_damage.m_spirit); - pkg.Write(m_toolTier); - pkg.Write(m_pushForce); - pkg.Write(m_backstabBonus); - pkg.Write(m_staggerMultiplier); - pkg.Write(m_dodgeable); - pkg.Write(m_blockable); - pkg.Write(m_point); - pkg.Write(m_dir); - pkg.Write(m_statusEffect); - pkg.Write(m_attacker); - pkg.Write((int)m_skill); - } - - public void Deserialize(ref ZPackage pkg) - { - m_damage.m_damage = pkg.ReadSingle(); - m_damage.m_blunt = pkg.ReadSingle(); - m_damage.m_slash = pkg.ReadSingle(); - m_damage.m_pierce = pkg.ReadSingle(); - m_damage.m_chop = pkg.ReadSingle(); - m_damage.m_pickaxe = pkg.ReadSingle(); - m_damage.m_fire = pkg.ReadSingle(); - m_damage.m_frost = pkg.ReadSingle(); - m_damage.m_lightning = pkg.ReadSingle(); - m_damage.m_poison = pkg.ReadSingle(); - m_damage.m_spirit = pkg.ReadSingle(); - m_toolTier = pkg.ReadInt(); - m_pushForce = pkg.ReadSingle(); - m_backstabBonus = pkg.ReadSingle(); - m_staggerMultiplier = pkg.ReadSingle(); - m_dodgeable = pkg.ReadBool(); - m_blockable = pkg.ReadBool(); - m_point = pkg.ReadVector3(); - m_dir = pkg.ReadVector3(); - m_statusEffect = pkg.ReadString(); - m_attacker = pkg.ReadZDOID(); - m_skill = (Skills.SkillType)pkg.ReadInt(); - } - - public float GetTotalPhysicalDamage() - { - return m_damage.GetTotalPhysicalDamage(); - } - - public float GetTotalElementalDamage() - { - return m_damage.GetTotalElementalDamage(); - } - - public float GetTotalDamage() - { - return m_damage.GetTotalDamage(); - } - - private float ApplyModifier(float baseDamage, DamageModifier mod, ref float normalDmg, ref float resistantDmg, ref float weakDmg, ref float immuneDmg) - { - if (mod == DamageModifier.Ignore) - { - return 0f; - } - float num = baseDamage; - switch (mod) - { - case DamageModifier.Resistant: - num /= 2f; - resistantDmg += baseDamage; - break; - case DamageModifier.VeryResistant: - num /= 4f; - resistantDmg += baseDamage; - break; - case DamageModifier.Weak: - num *= 1.5f; - weakDmg += baseDamage; - break; - case DamageModifier.VeryWeak: - num *= 2f; - weakDmg += baseDamage; - break; - case DamageModifier.Immune: - num = 0f; - immuneDmg += baseDamage; - break; - default: - normalDmg += baseDamage; - break; - } - return num; - } - - public void ApplyResistance(DamageModifiers modifiers, out DamageModifier significantModifier) - { - float normalDmg = m_damage.m_damage; - float resistantDmg = 0f; - float weakDmg = 0f; - float immuneDmg = 0f; - m_damage.m_blunt = ApplyModifier(m_damage.m_blunt, modifiers.m_blunt, ref normalDmg, ref resistantDmg, ref weakDmg, ref immuneDmg); - m_damage.m_slash = ApplyModifier(m_damage.m_slash, modifiers.m_slash, ref normalDmg, ref resistantDmg, ref weakDmg, ref immuneDmg); - m_damage.m_pierce = ApplyModifier(m_damage.m_pierce, modifiers.m_pierce, ref normalDmg, ref resistantDmg, ref weakDmg, ref immuneDmg); - m_damage.m_chop = ApplyModifier(m_damage.m_chop, modifiers.m_chop, ref normalDmg, ref resistantDmg, ref weakDmg, ref immuneDmg); - m_damage.m_pickaxe = ApplyModifier(m_damage.m_pickaxe, modifiers.m_pickaxe, ref normalDmg, ref resistantDmg, ref weakDmg, ref immuneDmg); - m_damage.m_fire = ApplyModifier(m_damage.m_fire, modifiers.m_fire, ref normalDmg, ref resistantDmg, ref weakDmg, ref immuneDmg); - m_damage.m_frost = ApplyModifier(m_damage.m_frost, modifiers.m_frost, ref normalDmg, ref resistantDmg, ref weakDmg, ref immuneDmg); - m_damage.m_lightning = ApplyModifier(m_damage.m_lightning, modifiers.m_lightning, ref normalDmg, ref resistantDmg, ref weakDmg, ref immuneDmg); - m_damage.m_poison = ApplyModifier(m_damage.m_poison, modifiers.m_poison, ref normalDmg, ref resistantDmg, ref weakDmg, ref immuneDmg); - m_damage.m_spirit = ApplyModifier(m_damage.m_spirit, modifiers.m_spirit, ref normalDmg, ref resistantDmg, ref weakDmg, ref immuneDmg); - significantModifier = DamageModifier.Immune; - if (immuneDmg >= resistantDmg && immuneDmg >= weakDmg && immuneDmg >= normalDmg) - { - significantModifier = DamageModifier.Immune; - } - if (normalDmg >= resistantDmg && normalDmg >= weakDmg && normalDmg >= immuneDmg) - { - significantModifier = DamageModifier.Normal; - } - if (resistantDmg >= weakDmg && resistantDmg >= immuneDmg && resistantDmg >= normalDmg) - { - significantModifier = DamageModifier.Resistant; - } - if (weakDmg >= resistantDmg && weakDmg >= immuneDmg && weakDmg >= normalDmg) - { - significantModifier = DamageModifier.Weak; - } - } - - public void ApplyArmor(float ac) - { - m_damage.ApplyArmor(ac); - } - - public void ApplyModifier(float multiplier) - { - m_damage.m_blunt *= multiplier; - m_damage.m_slash *= multiplier; - m_damage.m_pierce *= multiplier; - m_damage.m_chop *= multiplier; - m_damage.m_pickaxe *= multiplier; - m_damage.m_fire *= multiplier; - m_damage.m_frost *= multiplier; - m_damage.m_lightning *= multiplier; - m_damage.m_poison *= multiplier; - m_damage.m_spirit *= multiplier; - } - - public float GetTotalBlockableDamage() - { - return m_damage.m_blunt + m_damage.m_slash + m_damage.m_pierce + m_damage.m_fire + m_damage.m_frost + m_damage.m_lightning + m_damage.m_poison + m_damage.m_spirit; - } - - public void BlockDamage(float damage) - { - float totalBlockableDamage = GetTotalBlockableDamage(); - float num = Mathf.Max(0f, totalBlockableDamage - damage); - if (!(totalBlockableDamage <= 0f)) - { - float num2 = num / totalBlockableDamage; - m_damage.m_blunt *= num2; - m_damage.m_slash *= num2; - m_damage.m_pierce *= num2; - m_damage.m_fire *= num2; - m_damage.m_frost *= num2; - m_damage.m_lightning *= num2; - m_damage.m_poison *= num2; - m_damage.m_spirit *= num2; - } - } - - public bool HaveAttacker() - { - return !m_attacker.IsNone(); - } - - public Character GetAttacker() - { - if (m_attacker.IsNone()) - { - return null; - } - if (ZNetScene.instance == null) - { - return null; - } - GameObject gameObject = ZNetScene.instance.FindInstance(m_attacker); - if (gameObject == null) - { - return null; - } - return gameObject.GetComponent<Character>(); - } - - public void SetAttacker(Character attacker) - { - if ((bool)attacker) - { - m_attacker = attacker.GetZDOID(); - } - else - { - m_attacker = ZDOID.None; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/HotkeyBar.cs b/Valheim_v202102/Valheim/assembly_valheim/HotkeyBar.cs deleted file mode 100644 index c884d08..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/HotkeyBar.cs +++ /dev/null @@ -1,156 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class HotkeyBar : MonoBehaviour -{ - private class ElementData - { - public bool m_used; - - public GameObject m_go; - - public Image m_icon; - - public GuiBar m_durability; - - public Text m_amount; - - public GameObject m_equiped; - - public GameObject m_queued; - - public GameObject m_selection; - } - - public GameObject m_elementPrefab; - - public float m_elementSpace = 70f; - - private int m_selected; - - private List<ElementData> m_elements = new List<ElementData>(); - - private List<ItemDrop.ItemData> m_items = new List<ItemDrop.ItemData>(); - - private void Update() - { - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer && !InventoryGui.IsVisible() && !Menu.IsVisible() && !GameCamera.InFreeFly()) - { - if (ZInput.GetButtonDown("JoyDPadLeft")) - { - m_selected = Mathf.Max(0, m_selected - 1); - } - if (ZInput.GetButtonDown("JoyDPadRight")) - { - m_selected = Mathf.Min(m_elements.Count - 1, m_selected + 1); - } - if (ZInput.GetButtonDown("JoyDPadUp")) - { - localPlayer.UseHotbarItem(m_selected + 1); - } - } - if (m_selected > m_elements.Count - 1) - { - m_selected = Mathf.Max(0, m_elements.Count - 1); - } - UpdateIcons(localPlayer); - } - - private void UpdateIcons(Player player) - { - if (!player || player.IsDead()) - { - foreach (ElementData element in m_elements) - { - Object.Destroy(element.m_go); - } - m_elements.Clear(); - return; - } - player.GetInventory().GetBoundItems(m_items); - m_items.Sort((ItemDrop.ItemData x, ItemDrop.ItemData y) => x.m_gridPos.x.CompareTo(y.m_gridPos.x)); - int num = 0; - foreach (ItemDrop.ItemData item in m_items) - { - if (item.m_gridPos.x + 1 > num) - { - num = item.m_gridPos.x + 1; - } - } - if (m_elements.Count != num) - { - foreach (ElementData element2 in m_elements) - { - Object.Destroy(element2.m_go); - } - m_elements.Clear(); - for (int i = 0; i < num; i++) - { - ElementData elementData = new ElementData(); - elementData.m_go = Object.Instantiate(m_elementPrefab, base.transform); - elementData.m_go.transform.localPosition = new Vector3((float)i * m_elementSpace, 0f, 0f); - elementData.m_go.transform.Find("binding").GetComponent<Text>().text = (i + 1).ToString(); - elementData.m_icon = elementData.m_go.transform.transform.Find("icon").GetComponent<Image>(); - elementData.m_durability = elementData.m_go.transform.Find("durability").GetComponent<GuiBar>(); - elementData.m_amount = elementData.m_go.transform.Find("amount").GetComponent<Text>(); - elementData.m_equiped = elementData.m_go.transform.Find("equiped").gameObject; - elementData.m_queued = elementData.m_go.transform.Find("queued").gameObject; - elementData.m_selection = elementData.m_go.transform.Find("selected").gameObject; - m_elements.Add(elementData); - } - } - foreach (ElementData element3 in m_elements) - { - element3.m_used = false; - } - bool flag = ZInput.IsGamepadActive(); - for (int j = 0; j < m_items.Count; j++) - { - ItemDrop.ItemData itemData = m_items[j]; - ElementData elementData2 = m_elements[itemData.m_gridPos.x]; - elementData2.m_used = true; - elementData2.m_icon.gameObject.SetActive(value: true); - elementData2.m_icon.sprite = itemData.GetIcon(); - elementData2.m_durability.gameObject.SetActive(itemData.m_shared.m_useDurability); - if (itemData.m_shared.m_useDurability) - { - if (itemData.m_durability <= 0f) - { - elementData2.m_durability.SetValue(1f); - elementData2.m_durability.SetColor((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : new Color(0f, 0f, 0f, 0f)); - } - else - { - elementData2.m_durability.SetValue(itemData.GetDurabilityPercentage()); - elementData2.m_durability.ResetColor(); - } - } - elementData2.m_equiped.SetActive(itemData.m_equiped); - elementData2.m_queued.SetActive(player.IsItemQueued(itemData)); - if (itemData.m_shared.m_maxStackSize > 1) - { - elementData2.m_amount.gameObject.SetActive(value: true); - elementData2.m_amount.text = itemData.m_stack + "/" + itemData.m_shared.m_maxStackSize; - } - else - { - elementData2.m_amount.gameObject.SetActive(value: false); - } - } - for (int k = 0; k < m_elements.Count; k++) - { - ElementData elementData3 = m_elements[k]; - elementData3.m_selection.SetActive(flag && k == m_selected); - if (!elementData3.m_used) - { - elementData3.m_icon.gameObject.SetActive(value: false); - elementData3.m_durability.gameObject.SetActive(value: false); - elementData3.m_equiped.SetActive(value: false); - elementData3.m_queued.SetActive(value: false); - elementData3.m_amount.gameObject.SetActive(value: false); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/HoverText.cs b/Valheim_v202102/Valheim/assembly_valheim/HoverText.cs deleted file mode 100644 index 5cf4f59..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/HoverText.cs +++ /dev/null @@ -1,16 +0,0 @@ -using UnityEngine; - -public class HoverText : MonoBehaviour, Hoverable -{ - public string m_text = ""; - - public string GetHoverText() - { - return Localization.instance.Localize(m_text); - } - - public string GetHoverName() - { - return Localization.instance.Localize(m_text); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Hoverable.cs b/Valheim_v202102/Valheim/assembly_valheim/Hoverable.cs deleted file mode 100644 index a340096..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Hoverable.cs +++ /dev/null @@ -1,6 +0,0 @@ -public interface Hoverable -{ - string GetHoverText(); - - string GetHoverName(); -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Hud.cs b/Valheim_v202102/Valheim/assembly_valheim/Hud.cs deleted file mode 100644 index facecda..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Hud.cs +++ /dev/null @@ -1,1171 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class Hud : MonoBehaviour -{ - private class PieceIconData - { - public GameObject m_go; - - public Image m_icon; - - public GameObject m_marker; - - public GameObject m_upgrade; - - public UITooltip m_tooltip; - } - - private static Hud m_instance; - - public GameObject m_rootObject; - - public Text m_buildSelection; - - public Text m_pieceDescription; - - public Image m_buildIcon; - - public GameObject m_buildHud; - - public GameObject m_saveIcon; - - public GameObject m_badConnectionIcon; - - public GameObject m_betaText; - - [Header("Piece")] - public GameObject[] m_requirementItems = new GameObject[0]; - - public GameObject[] m_pieceCategoryTabs = new GameObject[0]; - - public GameObject m_pieceSelectionWindow; - - public GameObject m_pieceCategoryRoot; - - public RectTransform m_pieceListRoot; - - public RectTransform m_pieceListMask; - - public GameObject m_pieceIconPrefab; - - public UIInputHandler m_closePieceSelectionButton; - - public EffectList m_selectItemEffect = new EffectList(); - - public float m_pieceIconSpacing = 64f; - - private float m_pieceBarPosX; - - private float m_pieceBarTargetPosX; - - private Piece.PieceCategory m_lastPieceCategory = Piece.PieceCategory.Max; - - [Header("Health")] - public RectTransform m_healthBarRoot; - - public RectTransform m_healthPanel; - - private const float m_healthPanelBuffer = 56f; - - private const float m_healthPanelMinSize = 138f; - - public Animator m_healthAnimator; - - public GuiBar m_healthBarFast; - - public GuiBar m_healthBarSlow; - - public Text m_healthText; - - public Text m_healthMaxText; - - [Header("Food")] - public Image[] m_foodBars; - - public Image[] m_foodIcons; - - public RectTransform m_foodBarRoot; - - public RectTransform m_foodBaseBar; - - public Image m_foodIcon; - - public Color m_foodColorHungry = Color.white; - - public Color m_foodColorFull = Color.white; - - public Text m_foodText; - - [Header("Action bar")] - public GameObject m_actionBarRoot; - - public GuiBar m_actionProgress; - - public Text m_actionName; - - [Header("Guardian power")] - public RectTransform m_gpRoot; - - public Text m_gpName; - - public Text m_gpCooldown; - - public Image m_gpIcon; - - [Header("Stamina")] - public GameObject m_staminaBar; - - public GuiBar m_staminaBarFast; - - public GuiBar m_staminaBarSlow; - - public Animator m_staminaAnimator; - - private float m_staminaBarBorderBuffer = 16f; - - public RectTransform m_staminaBar2Root; - - public GuiBar m_staminaBar2Fast; - - public GuiBar m_staminaBar2Slow; - - [Header("Loading")] - public CanvasGroup m_loadingScreen; - - public GameObject m_loadingProgress; - - public GameObject m_sleepingProgress; - - public GameObject m_teleportingProgress; - - public Image m_loadingImage; - - public Text m_loadingTip; - - public bool m_useRandomImages = true; - - public string m_loadingImagePath = "/loadingscreens/"; - - public int m_loadingImages = 2; - - public List<string> m_loadingTips = new List<string>(); - - [Header("Crosshair")] - public Image m_crosshair; - - public Image m_crosshairBow; - - public Text m_hoverName; - - public RectTransform m_pieceHealthRoot; - - public GuiBar m_pieceHealthBar; - - public Image m_damageScreen; - - [Header("Target")] - public GameObject m_targetedAlert; - - public GameObject m_targeted; - - public GameObject m_hidden; - - public GuiBar m_stealthBar; - - [Header("Status effect")] - public RectTransform m_statusEffectListRoot; - - public RectTransform m_statusEffectTemplate; - - public float m_statusEffectSpacing = 55f; - - private List<RectTransform> m_statusEffects = new List<RectTransform>(); - - [Header("Ship hud")] - public GameObject m_shipHudRoot; - - public GameObject m_shipControlsRoot; - - public GameObject m_rudderLeft; - - public GameObject m_rudderRight; - - public GameObject m_rudderSlow; - - public GameObject m_rudderForward; - - public GameObject m_rudderFastForward; - - public GameObject m_rudderBackward; - - public GameObject m_halfSail; - - public GameObject m_fullSail; - - public GameObject m_rudder; - - public RectTransform m_shipWindIndicatorRoot; - - public Image m_shipWindIcon; - - public RectTransform m_shipWindIconRoot; - - public Image m_shipRudderIndicator; - - public Image m_shipRudderIcon; - - [Header("Event")] - public GameObject m_eventBar; - - public Text m_eventName; - - private bool m_userHidden; - - private CraftingStation m_currentCraftingStation; - - private List<string> m_buildCategoryNames = new List<string>(); - - private List<StatusEffect> m_tempStatusEffects = new List<StatusEffect>(); - - private List<PieceIconData> m_pieceIcons = new List<PieceIconData>(); - - private int m_pieceIconUpdateIndex; - - private bool m_haveSetupLoadScreen; - - private int m_closePieceSelection; - - private Piece m_hoveredPiece; - - public static Hud instance => m_instance; - - private void OnDestroy() - { - m_instance = null; - } - - private void Awake() - { - m_instance = this; - m_pieceSelectionWindow.SetActive(value: false); - m_loadingScreen.gameObject.SetActive(value: false); - m_statusEffectTemplate.gameObject.SetActive(value: false); - m_eventBar.SetActive(value: false); - m_gpRoot.gameObject.SetActive(value: false); - m_betaText.SetActive(value: false); - UIInputHandler closePieceSelectionButton = m_closePieceSelectionButton; - closePieceSelectionButton.m_onLeftClick = (Action<UIInputHandler>)Delegate.Combine(closePieceSelectionButton.m_onLeftClick, new Action<UIInputHandler>(OnClosePieceSelection)); - UIInputHandler closePieceSelectionButton2 = m_closePieceSelectionButton; - closePieceSelectionButton2.m_onRightClick = (Action<UIInputHandler>)Delegate.Combine(closePieceSelectionButton2.m_onRightClick, new Action<UIInputHandler>(OnClosePieceSelection)); - if (SteamManager.APP_ID == 1223920) - { - m_betaText.SetActive(value: true); - } - GameObject[] pieceCategoryTabs = m_pieceCategoryTabs; - foreach (GameObject gameObject in pieceCategoryTabs) - { - m_buildCategoryNames.Add(gameObject.transform.Find("Text").GetComponent<Text>().text); - UIInputHandler component = gameObject.GetComponent<UIInputHandler>(); - component.m_onLeftDown = (Action<UIInputHandler>)Delegate.Combine(component.m_onLeftDown, new Action<UIInputHandler>(OnLeftClickCategory)); - } - } - - private void SetVisible(bool visible) - { - if (visible != IsVisible()) - { - if (visible) - { - m_rootObject.transform.localPosition = new Vector3(0f, 0f, 0f); - } - else - { - m_rootObject.transform.localPosition = new Vector3(10000f, 0f, 0f); - } - } - } - - private bool IsVisible() - { - return m_rootObject.transform.localPosition.x < 1000f; - } - - private void Update() - { - m_saveIcon.SetActive(ZNet.instance != null && ZNet.instance.IsSaving()); - m_badConnectionIcon.SetActive(ZNet.instance != null && ZNet.instance.HasBadConnection() && Mathf.Sin(Time.time * 10f) > 0f); - Player localPlayer = Player.m_localPlayer; - UpdateDamageFlash(Time.deltaTime); - if ((bool)localPlayer) - { - if (Input.GetKeyDown(KeyCode.F3) && Input.GetKey(KeyCode.LeftControl)) - { - m_userHidden = !m_userHidden; - } - SetVisible(!m_userHidden && !localPlayer.InCutscene()); - UpdateBuild(localPlayer, forceUpdateAllBuildStatuses: false); - m_tempStatusEffects.Clear(); - localPlayer.GetSEMan().GetHUDStatusEffects(m_tempStatusEffects); - UpdateStatusEffects(m_tempStatusEffects); - UpdateGuardianPower(localPlayer); - float attackDrawPercentage = localPlayer.GetAttackDrawPercentage(); - UpdateFood(localPlayer); - UpdateHealth(localPlayer); - UpdateStamina(localPlayer); - UpdateStealth(localPlayer, attackDrawPercentage); - UpdateCrosshair(localPlayer, attackDrawPercentage); - UpdateEvent(localPlayer); - UpdateActionProgress(localPlayer); - } - } - - private void LateUpdate() - { - UpdateBlackScreen(Player.m_localPlayer, Time.deltaTime); - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - UpdateShipHud(localPlayer, Time.deltaTime); - } - } - - private float GetFadeDuration(Player player) - { - if (player != null) - { - if (player.IsDead()) - { - return 9.5f; - } - if (player.IsSleeping()) - { - return 3f; - } - } - return 1f; - } - - private void UpdateBlackScreen(Player player, float dt) - { - if (player == null || player.IsDead() || player.IsTeleporting() || Game.instance.IsLoggingOut() || player.IsSleeping()) - { - m_loadingScreen.gameObject.SetActive(value: true); - float alpha = m_loadingScreen.alpha; - float fadeDuration = GetFadeDuration(player); - alpha = Mathf.MoveTowards(alpha, 1f, dt / fadeDuration); - if (Game.instance.IsLoggingOut()) - { - alpha = 1f; - } - m_loadingScreen.alpha = alpha; - if (player != null && player.IsSleeping()) - { - m_sleepingProgress.SetActive(value: true); - m_loadingProgress.SetActive(value: false); - m_teleportingProgress.SetActive(value: false); - } - else if (player != null && player.ShowTeleportAnimation()) - { - m_loadingProgress.SetActive(value: false); - m_sleepingProgress.SetActive(value: false); - m_teleportingProgress.SetActive(value: true); - } - else if ((bool)Game.instance && Game.instance.WaitingForRespawn()) - { - if (!m_haveSetupLoadScreen) - { - m_haveSetupLoadScreen = true; - if (m_useRandomImages) - { - int num = UnityEngine.Random.Range(0, m_loadingImages); - string text = m_loadingImagePath + "loading" + num; - ZLog.Log("Loading image:" + text); - m_loadingImage.sprite = Resources.Load<Sprite>(text); - } - string text2 = m_loadingTips[UnityEngine.Random.Range(0, m_loadingTips.Count)]; - ZLog.Log("tip:" + text2); - m_loadingTip.text = Localization.instance.Localize(text2); - } - m_loadingProgress.SetActive(value: true); - m_sleepingProgress.SetActive(value: false); - m_teleportingProgress.SetActive(value: false); - } - else - { - m_loadingProgress.SetActive(value: false); - m_sleepingProgress.SetActive(value: false); - m_teleportingProgress.SetActive(value: false); - } - } - else - { - m_haveSetupLoadScreen = false; - float fadeDuration2 = GetFadeDuration(player); - float alpha2 = m_loadingScreen.alpha; - alpha2 = Mathf.MoveTowards(alpha2, 0f, dt / fadeDuration2); - m_loadingScreen.alpha = alpha2; - if (m_loadingScreen.alpha <= 0f) - { - m_loadingScreen.gameObject.SetActive(value: false); - } - } - } - - private void UpdateShipHud(Player player, float dt) - { - Ship controlledShip = player.GetControlledShip(); - if (controlledShip == null) - { - m_shipHudRoot.gameObject.SetActive(value: false); - return; - } - Ship.Speed speedSetting = controlledShip.GetSpeedSetting(); - float rudder = controlledShip.GetRudder(); - float rudderValue = controlledShip.GetRudderValue(); - m_shipHudRoot.SetActive(value: true); - m_rudderSlow.SetActive(speedSetting == Ship.Speed.Slow); - m_rudderForward.SetActive(speedSetting == Ship.Speed.Half); - m_rudderFastForward.SetActive(speedSetting == Ship.Speed.Full); - m_rudderBackward.SetActive(speedSetting == Ship.Speed.Back); - m_rudderLeft.SetActive(value: false); - m_rudderRight.SetActive(value: false); - m_fullSail.SetActive(speedSetting == Ship.Speed.Full); - m_halfSail.SetActive(speedSetting == Ship.Speed.Half); - GameObject rudder2 = m_rudder; - int active; - switch (speedSetting) - { - case Ship.Speed.Stop: - active = ((Mathf.Abs(rudderValue) > 0.2f) ? 1 : 0); - break; - default: - active = 0; - break; - case Ship.Speed.Back: - case Ship.Speed.Slow: - active = 1; - break; - } - rudder2.SetActive((byte)active != 0); - if ((rudder > 0f && rudderValue < 1f) || (rudder < 0f && rudderValue > -1f)) - { - m_shipRudderIcon.transform.Rotate(new Vector3(0f, 0f, 200f * (0f - rudder) * dt)); - } - if (Mathf.Abs(rudderValue) < 0.02f) - { - m_shipRudderIndicator.gameObject.SetActive(value: false); - } - else - { - m_shipRudderIndicator.gameObject.SetActive(value: true); - if (rudderValue > 0f) - { - m_shipRudderIndicator.fillClockwise = true; - m_shipRudderIndicator.fillAmount = rudderValue * 0.25f; - } - else - { - m_shipRudderIndicator.fillClockwise = false; - m_shipRudderIndicator.fillAmount = (0f - rudderValue) * 0.25f; - } - } - float shipYawAngle = controlledShip.GetShipYawAngle(); - m_shipWindIndicatorRoot.localRotation = Quaternion.Euler(0f, 0f, shipYawAngle); - float windAngle = controlledShip.GetWindAngle(); - m_shipWindIconRoot.localRotation = Quaternion.Euler(0f, 0f, windAngle); - float windAngleFactor = controlledShip.GetWindAngleFactor(); - m_shipWindIcon.color = Color.Lerp(new Color(0.2f, 0.2f, 0.2f, 1f), Color.white, windAngleFactor); - Camera mainCamera = Utils.GetMainCamera(); - if (!(mainCamera == null)) - { - m_shipControlsRoot.transform.position = mainCamera.WorldToScreenPoint(controlledShip.m_controlGuiPos.position); - } - } - - private void UpdateActionProgress(Player player) - { - player.GetActionProgress(out var text, out var progress); - if (!string.IsNullOrEmpty(text)) - { - m_actionBarRoot.SetActive(value: true); - m_actionProgress.SetValue(progress); - m_actionName.text = Localization.instance.Localize(text); - } - else - { - m_actionBarRoot.SetActive(value: false); - } - } - - private void UpdateCrosshair(Player player, float bowDrawPercentage) - { - GameObject hoverObject = player.GetHoverObject(); - Hoverable hoverable = (hoverObject ? hoverObject.GetComponentInParent<Hoverable>() : null); - if (hoverable != null && !TextViewer.instance.IsVisible()) - { - m_hoverName.text = hoverable.GetHoverText(); - m_crosshair.color = ((m_hoverName.text.Length > 0) ? Color.yellow : new Color(1f, 1f, 1f, 0.5f)); - } - else - { - m_crosshair.color = new Color(1f, 1f, 1f, 0.5f); - m_hoverName.text = ""; - } - Piece hoveringPiece = player.GetHoveringPiece(); - if ((bool)hoveringPiece) - { - WearNTear component = hoveringPiece.GetComponent<WearNTear>(); - if ((bool)component) - { - m_pieceHealthRoot.gameObject.SetActive(value: true); - m_pieceHealthBar.SetValue(component.GetHealthPercentage()); - } - else - { - m_pieceHealthRoot.gameObject.SetActive(value: false); - } - } - else - { - m_pieceHealthRoot.gameObject.SetActive(value: false); - } - if (bowDrawPercentage > 0f) - { - float num = Mathf.Lerp(1f, 0.15f, bowDrawPercentage); - m_crosshairBow.gameObject.SetActive(value: true); - m_crosshairBow.transform.localScale = new Vector3(num, num, num); - m_crosshairBow.color = Color.Lerp(new Color(1f, 1f, 1f, 0f), Color.yellow, bowDrawPercentage); - } - else - { - m_crosshairBow.gameObject.SetActive(value: false); - } - } - - private void FixedUpdate() - { - UpdatePieceBar(Time.fixedDeltaTime); - } - - private void UpdateStealth(Player player, float bowDrawPercentage) - { - float stealthFactor = player.GetStealthFactor(); - if ((player.IsCrouching() || stealthFactor < 1f) && bowDrawPercentage == 0f) - { - if (player.IsSensed()) - { - m_targetedAlert.SetActive(value: true); - m_targeted.SetActive(value: false); - m_hidden.SetActive(value: false); - } - else if (player.IsTargeted()) - { - m_targetedAlert.SetActive(value: false); - m_targeted.SetActive(value: true); - m_hidden.SetActive(value: false); - } - else - { - m_targetedAlert.SetActive(value: false); - m_targeted.SetActive(value: false); - m_hidden.SetActive(value: true); - } - m_stealthBar.gameObject.SetActive(value: true); - m_stealthBar.SetValue(stealthFactor); - } - else - { - m_targetedAlert.SetActive(value: false); - m_hidden.SetActive(value: false); - m_targeted.SetActive(value: false); - m_stealthBar.gameObject.SetActive(value: false); - } - } - - private void SetHealthBarSize(float size) - { - size = Mathf.Ceil(size); - float size2 = Mathf.Max(size + 56f, 138f); - m_healthPanel.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size2); - m_healthBarRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size); - m_healthBarSlow.SetWidth(size); - m_healthBarFast.SetWidth(size); - } - - private void SetStaminaBarSize(float size) - { - m_staminaBar2Root.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size + m_staminaBarBorderBuffer); - m_staminaBar2Slow.SetWidth(size); - m_staminaBar2Fast.SetWidth(size); - } - - private void UpdateFood(Player player) - { - List<Player.Food> foods = player.GetFoods(); - float num = player.GetBaseFoodHP() / 25f * 32f; - m_foodBaseBar.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, num); - float num2 = num; - for (int i = 0; i < m_foodBars.Length; i++) - { - Image image = m_foodBars[i]; - Image image2 = m_foodIcons[i]; - if (i < foods.Count) - { - image.gameObject.SetActive(value: true); - Player.Food food = foods[i]; - float num3 = food.m_health / 25f * 32f; - image.color = food.m_item.m_shared.m_foodColor; - image.rectTransform.anchoredPosition = new Vector2(num2, 0f); - image.rectTransform.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, Mathf.Ceil(num3)); - num2 += num3; - image2.gameObject.SetActive(value: true); - image2.sprite = food.m_item.GetIcon(); - if (food.CanEatAgain()) - { - image2.color = new Color(1f, 1f, 1f, 0.6f + Mathf.Sin(Time.time * 10f) * 0.4f); - } - else - { - image2.color = Color.white; - } - } - else - { - image.gameObject.SetActive(value: false); - image2.gameObject.SetActive(value: false); - } - } - float size = Mathf.Ceil(player.GetMaxHealth() / 25f * 32f); - m_foodBarRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size); - } - - private void UpdateHealth(Player player) - { - float maxHealth = player.GetMaxHealth(); - SetHealthBarSize(maxHealth / 25f * 32f); - float health = player.GetHealth(); - m_healthBarFast.SetMaxValue(maxHealth); - m_healthBarFast.SetValue(health); - m_healthBarSlow.SetMaxValue(maxHealth); - m_healthBarSlow.SetValue(health); - string text = Mathf.CeilToInt(player.GetHealth()).ToString(); - string text2 = Mathf.CeilToInt(player.GetMaxHealth()).ToString(); - m_healthText.text = text.ToString(); - m_healthMaxText.text = text2.ToString(); - } - - private void UpdateStamina(Player player) - { - float stamina = player.GetStamina(); - float maxStamina = player.GetMaxStamina(); - m_staminaBar.SetActive(value: false); - m_staminaAnimator.SetBool("Visible", stamina < maxStamina); - SetStaminaBarSize(player.GetMaxStamina() / 25f * 32f); - RectTransform rectTransform = m_staminaBar2Root.transform as RectTransform; - if (m_buildHud.activeSelf || m_shipHudRoot.activeSelf) - { - rectTransform.anchoredPosition = new Vector2(0f, 190f); - } - else - { - rectTransform.anchoredPosition = new Vector2(0f, 130f); - } - m_staminaBar2Slow.SetValue(stamina / maxStamina); - m_staminaBar2Fast.SetValue(stamina / maxStamina); - } - - public void DamageFlash() - { - Color color = m_damageScreen.color; - color.a = 1f; - m_damageScreen.color = color; - m_damageScreen.gameObject.SetActive(value: true); - } - - private void UpdateDamageFlash(float dt) - { - Color color = m_damageScreen.color; - color.a = Mathf.MoveTowards(color.a, 0f, dt * 4f); - m_damageScreen.color = color; - if (color.a <= 0f) - { - m_damageScreen.gameObject.SetActive(value: false); - } - } - - private void UpdatePieceList(Player player, Vector2Int selectedNr, Piece.PieceCategory category, bool updateAllBuildStatuses) - { - List<Piece> buildPieces = player.GetBuildPieces(); - int num = 10; - int num2 = 5; - if (buildPieces.Count <= 1) - { - num = 1; - num2 = 1; - } - if (m_pieceIcons.Count != num * num2) - { - foreach (PieceIconData pieceIcon in m_pieceIcons) - { - UnityEngine.Object.Destroy(pieceIcon.m_go); - } - m_pieceIcons.Clear(); - for (int i = 0; i < num2; i++) - { - for (int j = 0; j < num; j++) - { - GameObject gameObject = UnityEngine.Object.Instantiate(m_pieceIconPrefab, m_pieceListRoot); - (gameObject.transform as RectTransform).anchoredPosition = new Vector2((float)j * m_pieceIconSpacing, (float)(-i) * m_pieceIconSpacing); - PieceIconData pieceIconData = new PieceIconData(); - pieceIconData.m_go = gameObject; - pieceIconData.m_tooltip = gameObject.GetComponent<UITooltip>(); - pieceIconData.m_icon = gameObject.transform.Find("icon").GetComponent<Image>(); - pieceIconData.m_marker = gameObject.transform.Find("selected").gameObject; - pieceIconData.m_upgrade = gameObject.transform.Find("upgrade").gameObject; - pieceIconData.m_icon.color = new Color(1f, 0f, 1f, 0f); - UIInputHandler component = gameObject.GetComponent<UIInputHandler>(); - component.m_onLeftDown = (Action<UIInputHandler>)Delegate.Combine(component.m_onLeftDown, new Action<UIInputHandler>(OnLeftClickPiece)); - component.m_onRightDown = (Action<UIInputHandler>)Delegate.Combine(component.m_onRightDown, new Action<UIInputHandler>(OnRightClickPiece)); - component.m_onPointerEnter = (Action<UIInputHandler>)Delegate.Combine(component.m_onPointerEnter, new Action<UIInputHandler>(OnHoverPiece)); - component.m_onPointerExit = (Action<UIInputHandler>)Delegate.Combine(component.m_onPointerExit, new Action<UIInputHandler>(OnHoverPieceExit)); - m_pieceIcons.Add(pieceIconData); - } - } - } - for (int k = 0; k < num2; k++) - { - for (int l = 0; l < num; l++) - { - int num3 = k * num + l; - PieceIconData pieceIconData2 = m_pieceIcons[num3]; - pieceIconData2.m_marker.SetActive(new Vector2Int(l, k) == selectedNr); - if (num3 < buildPieces.Count) - { - Piece piece = buildPieces[num3]; - pieceIconData2.m_icon.sprite = piece.m_icon; - pieceIconData2.m_icon.enabled = true; - pieceIconData2.m_tooltip.m_text = piece.m_name; - pieceIconData2.m_upgrade.SetActive(piece.m_isUpgrade); - } - else - { - pieceIconData2.m_icon.enabled = false; - pieceIconData2.m_tooltip.m_text = ""; - pieceIconData2.m_upgrade.SetActive(value: false); - } - } - } - UpdatePieceBuildStatus(buildPieces, player); - if (updateAllBuildStatuses) - { - UpdatePieceBuildStatusAll(buildPieces, player); - } - if (m_lastPieceCategory != category) - { - m_lastPieceCategory = category; - m_pieceBarPosX = m_pieceBarTargetPosX; - UpdatePieceBuildStatusAll(buildPieces, player); - } - } - - private void OnLeftClickCategory(UIInputHandler ih) - { - for (int i = 0; i < m_pieceCategoryTabs.Length; i++) - { - if (m_pieceCategoryTabs[i] == ih.gameObject) - { - Player.m_localPlayer.SetBuildCategory(i); - break; - } - } - } - - private void OnLeftClickPiece(UIInputHandler ih) - { - SelectPiece(ih); - HidePieceSelection(); - } - - private void OnRightClickPiece(UIInputHandler ih) - { - if (IsQuickPieceSelectEnabled()) - { - SelectPiece(ih); - HidePieceSelection(); - } - } - - private void OnHoverPiece(UIInputHandler ih) - { - Vector2Int selectedGrid = GetSelectedGrid(ih); - if (selectedGrid.x != -1) - { - m_hoveredPiece = Player.m_localPlayer.GetPiece(selectedGrid); - } - } - - private void OnHoverPieceExit(UIInputHandler ih) - { - m_hoveredPiece = null; - } - - public bool IsQuickPieceSelectEnabled() - { - return PlayerPrefs.GetInt("QuickPieceSelect", 0) == 1; - } - - private Vector2Int GetSelectedGrid(UIInputHandler ih) - { - int num = 10; - int num2 = 5; - for (int i = 0; i < num2; i++) - { - for (int j = 0; j < num; j++) - { - int index = i * num + j; - if (m_pieceIcons[index].m_go == ih.gameObject) - { - return new Vector2Int(j, i); - } - } - } - return new Vector2Int(-1, -1); - } - - private void SelectPiece(UIInputHandler ih) - { - Vector2Int selectedGrid = GetSelectedGrid(ih); - if (selectedGrid.x != -1) - { - Player.m_localPlayer.SetSelectedPiece(selectedGrid); - m_selectItemEffect.Create(base.transform.position, Quaternion.identity); - } - } - - private void UpdatePieceBuildStatus(List<Piece> pieces, Player player) - { - if (m_pieceIcons.Count != 0) - { - if (m_pieceIconUpdateIndex >= m_pieceIcons.Count) - { - m_pieceIconUpdateIndex = 0; - } - PieceIconData pieceIconData = m_pieceIcons[m_pieceIconUpdateIndex]; - if (m_pieceIconUpdateIndex < pieces.Count) - { - Piece piece = pieces[m_pieceIconUpdateIndex]; - bool flag = player.HaveRequirements(piece, Player.RequirementMode.CanBuild); - pieceIconData.m_icon.color = (flag ? new Color(1f, 1f, 1f, 1f) : new Color(1f, 0f, 1f, 0f)); - } - m_pieceIconUpdateIndex++; - } - } - - private void UpdatePieceBuildStatusAll(List<Piece> pieces, Player player) - { - for (int i = 0; i < m_pieceIcons.Count; i++) - { - PieceIconData pieceIconData = m_pieceIcons[i]; - if (i < pieces.Count) - { - Piece piece = pieces[i]; - bool flag = player.HaveRequirements(piece, Player.RequirementMode.CanBuild); - pieceIconData.m_icon.color = (flag ? new Color(1f, 1f, 1f, 1f) : new Color(1f, 0f, 1f, 0f)); - } - else - { - pieceIconData.m_icon.color = Color.white; - } - } - m_pieceIconUpdateIndex = 0; - } - - private void UpdatePieceBar(float dt) - { - m_pieceBarPosX = Mathf.Lerp(m_pieceBarPosX, m_pieceBarTargetPosX, 0.1f); - Vector3 vector = m_pieceListRoot.anchoredPosition; - vector.x = Mathf.Round(m_pieceBarPosX); - } - - public void TogglePieceSelection() - { - m_hoveredPiece = null; - if (m_pieceSelectionWindow.activeSelf) - { - m_pieceSelectionWindow.SetActive(value: false); - return; - } - m_pieceSelectionWindow.SetActive(value: true); - UpdateBuild(Player.m_localPlayer, forceUpdateAllBuildStatuses: true); - } - - private void OnClosePieceSelection(UIInputHandler ih) - { - HidePieceSelection(); - } - - public static void HidePieceSelection() - { - if (!(m_instance == null)) - { - m_instance.m_closePieceSelection = 2; - } - } - - public static bool IsPieceSelectionVisible() - { - if (m_instance == null) - { - return false; - } - if (m_instance.m_buildHud.activeSelf) - { - return m_instance.m_pieceSelectionWindow.activeSelf; - } - return false; - } - - private void UpdateBuild(Player player, bool forceUpdateAllBuildStatuses) - { - if (player.InPlaceMode()) - { - if (m_closePieceSelection > 0) - { - m_closePieceSelection--; - if (m_closePieceSelection <= 0 && m_pieceSelectionWindow.activeSelf) - { - m_pieceSelectionWindow.SetActive(value: false); - } - } - player.GetBuildSelection(out var go, out var id, out var _, out var category, out var useCategory); - m_buildHud.SetActive(value: true); - if (m_pieceSelectionWindow.activeSelf) - { - UpdatePieceList(player, id, category, forceUpdateAllBuildStatuses); - m_pieceCategoryRoot.SetActive(useCategory); - if (useCategory) - { - for (int i = 0; i < m_pieceCategoryTabs.Length; i++) - { - GameObject gameObject = m_pieceCategoryTabs[i]; - Transform transform = gameObject.transform.Find("Selected"); - string text = m_buildCategoryNames[i] + " [<color=yellow>" + player.GetAvailableBuildPiecesInCategory((Piece.PieceCategory)i) + "</color>]"; - if (i == (int)category) - { - transform.gameObject.SetActive(value: true); - transform.GetComponentInChildren<Text>().text = text; - } - else - { - transform.gameObject.SetActive(value: false); - gameObject.GetComponentInChildren<Text>().text = text; - } - } - } - } - if ((bool)m_hoveredPiece && (ZInput.IsGamepadActive() || !player.IsPieceAvailable(m_hoveredPiece))) - { - m_hoveredPiece = null; - } - if ((bool)m_hoveredPiece) - { - SetupPieceInfo(m_hoveredPiece); - } - else - { - SetupPieceInfo(go); - } - } - else - { - m_buildHud.SetActive(value: false); - m_pieceSelectionWindow.SetActive(value: false); - } - } - - private void SetupPieceInfo(Piece piece) - { - if (piece == null) - { - m_buildSelection.text = Localization.instance.Localize("$hud_nothingtobuild"); - m_pieceDescription.text = ""; - m_buildIcon.enabled = false; - for (int i = 0; i < m_requirementItems.Length; i++) - { - m_requirementItems[i].SetActive(value: false); - } - return; - } - Player localPlayer = Player.m_localPlayer; - m_buildSelection.text = Localization.instance.Localize(piece.m_name); - m_pieceDescription.text = Localization.instance.Localize(piece.m_description); - m_buildIcon.enabled = true; - m_buildIcon.sprite = piece.m_icon; - for (int j = 0; j < m_requirementItems.Length; j++) - { - if (j < piece.m_resources.Length) - { - Piece.Requirement req = piece.m_resources[j]; - m_requirementItems[j].SetActive(value: true); - InventoryGui.SetupRequirement(m_requirementItems[j].transform, req, localPlayer, craft: false, 0); - } - else - { - m_requirementItems[j].SetActive(value: false); - } - } - if ((bool)piece.m_craftingStation) - { - CraftingStation craftingStation = CraftingStation.HaveBuildStationInRange(piece.m_craftingStation.m_name, localPlayer.transform.position); - GameObject obj = m_requirementItems[piece.m_resources.Length]; - obj.SetActive(value: true); - Image component = obj.transform.Find("res_icon").GetComponent<Image>(); - Text component2 = obj.transform.Find("res_name").GetComponent<Text>(); - Text component3 = obj.transform.Find("res_amount").GetComponent<Text>(); - UITooltip component4 = obj.GetComponent<UITooltip>(); - component.sprite = piece.m_craftingStation.m_icon; - component2.text = Localization.instance.Localize(piece.m_craftingStation.m_name); - component4.m_text = piece.m_craftingStation.m_name; - if (craftingStation != null) - { - craftingStation.ShowAreaMarker(); - component.color = Color.white; - component3.text = ""; - component3.color = Color.white; - } - else - { - component.color = Color.gray; - component3.text = "None"; - component3.color = ((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : Color.white); - } - } - } - - private void UpdateGuardianPower(Player player) - { - player.GetGuardianPowerHUD(out var se, out var cooldown); - if ((bool)se) - { - m_gpRoot.gameObject.SetActive(value: true); - m_gpIcon.sprite = se.m_icon; - m_gpIcon.color = ((cooldown <= 0f) ? Color.white : new Color(1f, 0f, 1f, 0f)); - m_gpName.text = Localization.instance.Localize(se.m_name); - if (cooldown > 0f) - { - m_gpCooldown.text = StatusEffect.GetTimeString(cooldown); - } - else - { - m_gpCooldown.text = Localization.instance.Localize("$hud_ready"); - } - } - else - { - m_gpRoot.gameObject.SetActive(value: false); - } - } - - private void UpdateStatusEffects(List<StatusEffect> statusEffects) - { - if (m_statusEffects.Count != statusEffects.Count) - { - foreach (RectTransform statusEffect2 in m_statusEffects) - { - UnityEngine.Object.Destroy(statusEffect2.gameObject); - } - m_statusEffects.Clear(); - for (int i = 0; i < statusEffects.Count; i++) - { - RectTransform rectTransform = UnityEngine.Object.Instantiate(m_statusEffectTemplate, m_statusEffectListRoot); - rectTransform.gameObject.SetActive(value: true); - rectTransform.anchoredPosition = new Vector3(-4f - (float)i * m_statusEffectSpacing, 0f, 0f); - m_statusEffects.Add(rectTransform); - } - } - for (int j = 0; j < statusEffects.Count; j++) - { - StatusEffect statusEffect = statusEffects[j]; - RectTransform rectTransform2 = m_statusEffects[j]; - Image component = rectTransform2.Find("Icon").GetComponent<Image>(); - component.sprite = statusEffect.m_icon; - if (statusEffect.m_flashIcon) - { - component.color = ((Mathf.Sin(Time.time * 10f) > 0f) ? new Color(1f, 0.5f, 0.5f, 1f) : Color.white); - } - else - { - component.color = Color.white; - } - rectTransform2.Find("Cooldown").gameObject.SetActive(statusEffect.m_cooldownIcon); - rectTransform2.GetComponentInChildren<Text>().text = Localization.instance.Localize(statusEffect.m_name); - Text component2 = rectTransform2.Find("TimeText").GetComponent<Text>(); - string iconText = statusEffect.GetIconText(); - if (!string.IsNullOrEmpty(iconText)) - { - component2.gameObject.SetActive(value: true); - component2.text = iconText; - } - else - { - component2.gameObject.SetActive(value: false); - } - if (statusEffect.m_isNew) - { - statusEffect.m_isNew = false; - rectTransform2.GetComponentInChildren<Animator>().SetTrigger("flash"); - } - } - } - - private void UpdateEvent(Player player) - { - RandomEvent activeEvent = RandEventSystem.instance.GetActiveEvent(); - if (activeEvent != null && !EnemyHud.instance.ShowingBossHud() && activeEvent.GetTime() > 3f) - { - m_eventBar.SetActive(value: true); - m_eventName.text = Localization.instance.Localize(activeEvent.GetHudText()); - } - else - { - m_eventBar.SetActive(value: false); - } - } - - public void ToggleBetaTextVisible() - { - m_betaText.SetActive(!m_betaText.activeSelf); - } - - public void FlashHealthBar() - { - m_healthAnimator.SetTrigger("Flash"); - } - - public void StaminaBarUppgradeFlash() - { - m_staminaAnimator.SetBool("Visible", value: true); - m_staminaAnimator.SetTrigger("Flash"); - } - - public void StaminaBarNoStaminaFlash() - { - if (!m_staminaAnimator.GetCurrentAnimatorStateInfo(0).IsTag("nostamina")) - { - m_staminaAnimator.SetBool("Visible", value: true); - m_staminaAnimator.SetTrigger("NoStamina"); - } - } - - public static bool IsUserHidden() - { - if ((bool)m_instance) - { - return m_instance.m_userHidden; - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Humanoid.cs b/Valheim_v202102/Valheim/assembly_valheim/Humanoid.cs deleted file mode 100644 index 501fe2b..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Humanoid.cs +++ /dev/null @@ -1,1550 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Humanoid : Character -{ - [Serializable] - public class ItemSet - { - public string m_name = ""; - - public GameObject[] m_items = new GameObject[0]; - } - - private static List<ItemDrop.ItemData> optimalWeapons = new List<ItemDrop.ItemData>(); - - private static List<ItemDrop.ItemData> outofRangeWeapons = new List<ItemDrop.ItemData>(); - - private static List<ItemDrop.ItemData> allWeapons = new List<ItemDrop.ItemData>(); - - [Header("Humanoid")] - public float m_equipStaminaDrain = 10f; - - public float m_blockStaminaDrain = 25f; - - [Header("Default items")] - public GameObject[] m_defaultItems; - - public GameObject[] m_randomWeapon; - - public GameObject[] m_randomArmor; - - public GameObject[] m_randomShield; - - public ItemSet[] m_randomSets; - - public ItemDrop m_unarmedWeapon; - - [Header("Effects")] - public EffectList m_pickupEffects = new EffectList(); - - public EffectList m_dropEffects = new EffectList(); - - public EffectList m_consumeItemEffects = new EffectList(); - - public EffectList m_equipEffects = new EffectList(); - - public EffectList m_perfectBlockEffect = new EffectList(); - - protected Inventory m_inventory = new Inventory("Inventory", null, 8, 4); - - protected ItemDrop.ItemData m_rightItem; - - protected ItemDrop.ItemData m_leftItem; - - protected ItemDrop.ItemData m_chestItem; - - protected ItemDrop.ItemData m_legItem; - - protected ItemDrop.ItemData m_ammoItem; - - protected ItemDrop.ItemData m_helmetItem; - - protected ItemDrop.ItemData m_shoulderItem; - - protected ItemDrop.ItemData m_utilityItem; - - protected string m_beardItem = ""; - - protected string m_hairItem = ""; - - private int m_lastEquipEffectFrame; - - protected ItemDrop.ItemData m_hiddenLeftItem; - - protected ItemDrop.ItemData m_hiddenRightItem; - - protected Attack m_currentAttack; - - protected Attack m_previousAttack; - - private float m_timeSinceLastAttack; - - private bool m_internalBlockingState; - - private float m_blockTimer = 9999f; - - private const float m_perfectBlockInterval = 0.25f; - - protected float m_attackDrawTime; - - protected float m_lastCombatTimer = 999f; - - protected VisEquipment m_visEquipment; - - private static int statef = 0; - - private static int statei = 0; - - private static int blocking = 0; - - private static int isBlockingHash = 0; - - private HashSet<StatusEffect> m_eqipmentStatusEffects = new HashSet<StatusEffect>(); - - protected static int m_animatorTagAttack = Animator.StringToHash("attack"); - - protected override void Awake() - { - base.Awake(); - m_visEquipment = GetComponent<VisEquipment>(); - if (statef == 0) - { - statef = ZSyncAnimation.GetHash("statef"); - statei = ZSyncAnimation.GetHash("statei"); - blocking = ZSyncAnimation.GetHash("blocking"); - } - if (isBlockingHash == 0) - { - isBlockingHash = "IsBlocking".GetStableHashCode(); - } - } - - protected override void Start() - { - base.Start(); - if (!IsPlayer()) - { - GiveDefaultItems(); - } - } - - public void GiveDefaultItems() - { - GameObject[] defaultItems = m_defaultItems; - foreach (GameObject prefab in defaultItems) - { - GiveDefaultItem(prefab); - } - if (m_randomWeapon.Length == 0 && m_randomArmor.Length == 0 && m_randomShield.Length == 0 && m_randomSets.Length == 0) - { - return; - } - UnityEngine.Random.State state = UnityEngine.Random.state; - UnityEngine.Random.InitState(m_nview.GetZDO().m_uid.GetHashCode()); - if (m_randomShield.Length != 0) - { - GameObject gameObject = m_randomShield[UnityEngine.Random.Range(0, m_randomShield.Length)]; - if ((bool)gameObject) - { - GiveDefaultItem(gameObject); - } - } - if (m_randomWeapon.Length != 0) - { - GameObject gameObject2 = m_randomWeapon[UnityEngine.Random.Range(0, m_randomWeapon.Length)]; - if ((bool)gameObject2) - { - GiveDefaultItem(gameObject2); - } - } - if (m_randomArmor.Length != 0) - { - GameObject gameObject3 = m_randomArmor[UnityEngine.Random.Range(0, m_randomArmor.Length)]; - if ((bool)gameObject3) - { - GiveDefaultItem(gameObject3); - } - } - if (m_randomSets.Length != 0) - { - defaultItems = m_randomSets[UnityEngine.Random.Range(0, m_randomSets.Length)].m_items; - foreach (GameObject prefab2 in defaultItems) - { - GiveDefaultItem(prefab2); - } - } - UnityEngine.Random.state = state; - } - - private void GiveDefaultItem(GameObject prefab) - { - ItemDrop.ItemData itemData = PickupPrefab(prefab); - if (itemData != null && !itemData.IsWeapon()) - { - EquipItem(itemData, triggerEquipEffects: false); - } - } - - protected override void FixedUpdate() - { - if (m_nview.IsValid()) - { - if (m_nview == null || m_nview.IsOwner()) - { - UpdateAttack(Time.fixedDeltaTime); - UpdateEquipment(Time.fixedDeltaTime); - UpdateBlock(Time.fixedDeltaTime); - } - base.FixedUpdate(); - } - } - - public override bool InAttack() - { - if (m_animator.IsInTransition(0)) - { - if (m_animator.GetCurrentAnimatorStateInfo(0).tagHash == m_animatorTagAttack) - { - return true; - } - if (m_animator.GetNextAnimatorStateInfo(0).tagHash == m_animatorTagAttack) - { - return true; - } - return false; - } - if (m_animator.GetCurrentAnimatorStateInfo(0).tagHash == m_animatorTagAttack) - { - return true; - } - return false; - } - - public override bool StartAttack(Character target, bool secondaryAttack) - { - AbortEquipQueue(); - if ((InAttack() && !HaveQueuedChain()) || InDodge() || !CanMove() || IsKnockedBack() || IsStaggering() || InMinorAction()) - { - return false; - } - ItemDrop.ItemData currentWeapon = GetCurrentWeapon(); - if (currentWeapon == null) - { - return false; - } - if (m_currentAttack != null) - { - m_currentAttack.Stop(); - m_previousAttack = m_currentAttack; - m_currentAttack = null; - } - Attack attack; - if (secondaryAttack) - { - if (!currentWeapon.HaveSecondaryAttack()) - { - return false; - } - attack = currentWeapon.m_shared.m_secondaryAttack.Clone(); - } - else - { - if (!currentWeapon.HavePrimaryAttack()) - { - return false; - } - attack = currentWeapon.m_shared.m_attack.Clone(); - } - if (attack.Start(this, m_body, m_zanim, m_animEvent, m_visEquipment, currentWeapon, m_previousAttack, m_timeSinceLastAttack, GetAttackDrawPercentage())) - { - m_currentAttack = attack; - m_lastCombatTimer = 0f; - return true; - } - return false; - } - - public float GetAttackDrawPercentage() - { - ItemDrop.ItemData currentWeapon = GetCurrentWeapon(); - if (currentWeapon != null && currentWeapon.m_shared.m_holdDurationMin > 0f && m_attackDrawTime > 0f) - { - float skillFactor = GetSkillFactor(currentWeapon.m_shared.m_skillType); - float num = currentWeapon.m_shared.m_holdDurationMin * (1f - skillFactor); - if (!(num > 0f)) - { - return 1f; - } - return Mathf.Clamp01(m_attackDrawTime / num); - } - return 0f; - } - - private void UpdateEquipment(float dt) - { - if (IsPlayer()) - { - if (IsSwiming() && !IsOnGround()) - { - HideHandItems(); - } - if (m_rightItem != null && m_rightItem.m_shared.m_useDurability) - { - DrainEquipedItemDurability(m_rightItem, dt); - } - if (m_leftItem != null && m_leftItem.m_shared.m_useDurability) - { - DrainEquipedItemDurability(m_leftItem, dt); - } - if (m_chestItem != null && m_chestItem.m_shared.m_useDurability) - { - DrainEquipedItemDurability(m_chestItem, dt); - } - if (m_legItem != null && m_legItem.m_shared.m_useDurability) - { - DrainEquipedItemDurability(m_legItem, dt); - } - if (m_helmetItem != null && m_helmetItem.m_shared.m_useDurability) - { - DrainEquipedItemDurability(m_helmetItem, dt); - } - if (m_shoulderItem != null && m_shoulderItem.m_shared.m_useDurability) - { - DrainEquipedItemDurability(m_shoulderItem, dt); - } - if (m_utilityItem != null && m_utilityItem.m_shared.m_useDurability) - { - DrainEquipedItemDurability(m_utilityItem, dt); - } - } - } - - private void DrainEquipedItemDurability(ItemDrop.ItemData item, float dt) - { - item.m_durability -= item.m_shared.m_durabilityDrain * dt; - if (item.m_durability <= 0f) - { - Message(MessageHud.MessageType.TopLeft, Localization.instance.Localize("$msg_broke", item.m_shared.m_name), 0, item.GetIcon()); - UnequipItem(item, triggerEquipEffects: false); - if (item.m_shared.m_destroyBroken) - { - m_inventory.RemoveItem(item); - } - } - } - - protected override void OnDamaged(HitData hit) - { - SetCrouch(crouch: false); - } - - protected override void DamageArmorDurability(HitData hit) - { - List<ItemDrop.ItemData> list = new List<ItemDrop.ItemData>(); - if (m_chestItem != null) - { - list.Add(m_chestItem); - } - if (m_legItem != null) - { - list.Add(m_legItem); - } - if (m_helmetItem != null) - { - list.Add(m_helmetItem); - } - if (m_shoulderItem != null) - { - list.Add(m_shoulderItem); - } - if (list.Count != 0) - { - float num = hit.GetTotalPhysicalDamage() + hit.GetTotalElementalDamage(); - if (!(num <= 0f)) - { - int index = UnityEngine.Random.Range(0, list.Count); - ItemDrop.ItemData itemData = list[index]; - itemData.m_durability = Mathf.Max(0f, itemData.m_durability - num); - } - } - } - - public ItemDrop.ItemData GetCurrentWeapon() - { - if (m_rightItem != null && m_rightItem.IsWeapon()) - { - return m_rightItem; - } - if (m_leftItem != null && m_leftItem.IsWeapon() && m_leftItem.m_shared.m_itemType != ItemDrop.ItemData.ItemType.Torch) - { - return m_leftItem; - } - if ((bool)m_unarmedWeapon) - { - return m_unarmedWeapon.m_itemData; - } - return null; - } - - protected ItemDrop.ItemData GetCurrentBlocker() - { - if (m_leftItem != null) - { - return m_leftItem; - } - return GetCurrentWeapon(); - } - - private void UpdateAttack(float dt) - { - m_lastCombatTimer += dt; - if (GetCurrentWeapon() != null && m_currentAttack != null) - { - m_currentAttack.Update(dt); - } - if (InAttack()) - { - m_timeSinceLastAttack = 0f; - } - else - { - m_timeSinceLastAttack += dt; - } - } - - protected override float GetAttackSpeedFactorMovement() - { - if (InAttack() && m_currentAttack != null) - { - if (!IsFlying() && !IsOnGround()) - { - return 1f; - } - return m_currentAttack.m_speedFactor; - } - return 1f; - } - - protected override float GetAttackSpeedFactorRotation() - { - if (InAttack() && m_currentAttack != null) - { - return m_currentAttack.m_speedFactorRotation; - } - return 1f; - } - - protected virtual bool HaveQueuedChain() - { - return false; - } - - public override void OnWeaponTrailStart() - { - if (m_nview.IsValid() && m_nview.IsOwner() && GetCurrentWeapon() != null && m_currentAttack != null) - { - m_currentAttack.OnTrailStart(); - } - } - - public override void OnAttackTrigger() - { - if (m_nview.IsValid() && m_nview.IsOwner() && GetCurrentWeapon() != null && m_currentAttack != null) - { - m_currentAttack.OnAttackTrigger(); - } - } - - public override void OnStopMoving() - { - if (m_nview.IsValid() && m_nview.IsOwner() && InAttack() && GetCurrentWeapon() != null && m_currentAttack != null) - { - m_currentAttack.m_speedFactorRotation = 0f; - m_currentAttack.m_speedFactorRotation = 0f; - } - } - - public virtual Vector3 GetAimDir(Vector3 fromPoint) - { - return GetLookDir(); - } - - public ItemDrop.ItemData PickupPrefab(GameObject prefab, int stackSize = 0) - { - ZNetView.m_forceDisableInit = true; - GameObject gameObject = UnityEngine.Object.Instantiate(prefab); - ZNetView.m_forceDisableInit = false; - if (stackSize > 0) - { - ItemDrop component = gameObject.GetComponent<ItemDrop>(); - component.m_itemData.m_stack = Mathf.Clamp(stackSize, 1, component.m_itemData.m_shared.m_maxStackSize); - } - if (Pickup(gameObject)) - { - return gameObject.GetComponent<ItemDrop>().m_itemData; - } - UnityEngine.Object.Destroy(gameObject); - return null; - } - - public virtual bool HaveUniqueKey(string name) - { - return false; - } - - public virtual void AddUniqueKey(string name) - { - } - - public bool Pickup(GameObject go) - { - ItemDrop component = go.GetComponent<ItemDrop>(); - if (component == null) - { - return false; - } - if (!component.CanPickup()) - { - return false; - } - if (m_inventory.ContainsItem(component.m_itemData)) - { - return false; - } - if (component.m_itemData.m_shared.m_questItem && HaveUniqueKey(component.m_itemData.m_shared.m_name)) - { - Message(MessageHud.MessageType.Center, "$msg_cantpickup"); - return false; - } - bool flag = m_inventory.AddItem(component.m_itemData); - if (m_nview.GetZDO() == null) - { - UnityEngine.Object.Destroy(go); - return true; - } - if (!flag) - { - Message(MessageHud.MessageType.Center, "$msg_noroom"); - return false; - } - if (component.m_itemData.m_shared.m_questItem) - { - AddUniqueKey(component.m_itemData.m_shared.m_name); - } - ZNetScene.instance.Destroy(go); - if (flag && IsPlayer() && m_rightItem == null && m_hiddenRightItem == null && component.m_itemData.IsWeapon()) - { - EquipItem(component.m_itemData); - } - m_pickupEffects.Create(base.transform.position, Quaternion.identity); - if (IsPlayer()) - { - ShowPickupMessage(component.m_itemData, component.m_itemData.m_stack); - } - return flag; - } - - public void EquipBestWeapon(Character targetCreature, StaticTarget targetStatic, Character hurtFriend, Character friend) - { - List<ItemDrop.ItemData> allItems = m_inventory.GetAllItems(); - if (allItems.Count == 0 || InAttack()) - { - return; - } - float num = 0f; - if ((bool)targetCreature) - { - float radius = targetCreature.GetRadius(); - num = Vector3.Distance(targetCreature.transform.position, base.transform.position) - radius; - } - else if ((bool)targetStatic) - { - num = Vector3.Distance(targetStatic.transform.position, base.transform.position); - } - float time = Time.time; - IsFlying(); - IsSwiming(); - optimalWeapons.Clear(); - outofRangeWeapons.Clear(); - allWeapons.Clear(); - foreach (ItemDrop.ItemData item in allItems) - { - if (!item.IsWeapon() || !BaseAI.CanUseAttack(this, item)) - { - continue; - } - if (item.m_shared.m_aiTargetType == ItemDrop.ItemData.AiTarget.Enemy) - { - if (num < item.m_shared.m_aiAttackRangeMin) - { - continue; - } - allWeapons.Add(item); - if ((targetCreature == null && targetStatic == null) || time - item.m_lastAttackTime < item.m_shared.m_aiAttackInterval) - { - continue; - } - if (num > item.m_shared.m_aiAttackRange) - { - outofRangeWeapons.Add(item); - continue; - } - if (item.m_shared.m_aiPrioritized) - { - EquipItem(item); - return; - } - optimalWeapons.Add(item); - } - else if (item.m_shared.m_aiTargetType == ItemDrop.ItemData.AiTarget.FriendHurt) - { - if (!(hurtFriend == null) && !(time - item.m_lastAttackTime < item.m_shared.m_aiAttackInterval)) - { - if (item.m_shared.m_aiPrioritized) - { - EquipItem(item); - return; - } - optimalWeapons.Add(item); - } - } - else if (item.m_shared.m_aiTargetType == ItemDrop.ItemData.AiTarget.Friend && !(friend == null) && !(time - item.m_lastAttackTime < item.m_shared.m_aiAttackInterval)) - { - if (item.m_shared.m_aiPrioritized) - { - EquipItem(item); - return; - } - optimalWeapons.Add(item); - } - } - if (optimalWeapons.Count > 0) - { - EquipItem(optimalWeapons[UnityEngine.Random.Range(0, optimalWeapons.Count)]); - return; - } - if (outofRangeWeapons.Count > 0) - { - EquipItem(outofRangeWeapons[UnityEngine.Random.Range(0, outofRangeWeapons.Count)]); - return; - } - if (allWeapons.Count > 0) - { - EquipItem(allWeapons[UnityEngine.Random.Range(0, allWeapons.Count)]); - return; - } - ItemDrop.ItemData currentWeapon = GetCurrentWeapon(); - if (currentWeapon != null) - { - UnequipItem(currentWeapon, triggerEquipEffects: false); - } - } - - public bool DropItem(Inventory inventory, ItemDrop.ItemData item, int amount) - { - if (item.m_shared.m_questItem) - { - Message(MessageHud.MessageType.Center, "$msg_cantdrop"); - return false; - } - RemoveFromEquipQueue(item); - UnequipItem(item, triggerEquipEffects: false); - if (m_hiddenLeftItem == item) - { - m_hiddenLeftItem = null; - SetupVisEquipment(m_visEquipment, isRagdoll: false); - } - if (m_hiddenRightItem == item) - { - m_hiddenRightItem = null; - SetupVisEquipment(m_visEquipment, isRagdoll: false); - } - if (amount == item.m_stack) - { - ZLog.Log("drop all " + amount + " " + item.m_stack); - if (!inventory.RemoveItem(item)) - { - ZLog.Log("Was not removed"); - return false; - } - } - else - { - ZLog.Log("drop some " + amount + " " + item.m_stack); - inventory.RemoveItem(item, amount); - } - ItemDrop itemDrop = ItemDrop.DropItem(item, amount, base.transform.position + base.transform.forward + base.transform.up, base.transform.rotation); - if (IsPlayer()) - { - itemDrop.OnPlayerDrop(); - } - itemDrop.GetComponent<Rigidbody>().velocity = (base.transform.forward + Vector3.up) * 5f; - m_zanim.SetTrigger("interact"); - m_dropEffects.Create(base.transform.position, Quaternion.identity); - Message(MessageHud.MessageType.TopLeft, "$msg_dropped " + itemDrop.m_itemData.m_shared.m_name, itemDrop.m_itemData.m_stack, itemDrop.m_itemData.GetIcon()); - return true; - } - - protected virtual void SetPlaceMode(PieceTable buildPieces) - { - } - - public Inventory GetInventory() - { - return m_inventory; - } - - public void UseItem(Inventory inventory, ItemDrop.ItemData item, bool fromInventoryGui) - { - if (inventory == null) - { - inventory = m_inventory; - } - if (!inventory.ContainsItem(item)) - { - return; - } - GameObject hoverObject = GetHoverObject(); - Hoverable hoverable = (hoverObject ? hoverObject.GetComponentInParent<Hoverable>() : null); - if (hoverable != null && !fromInventoryGui) - { - Interactable componentInParent = hoverObject.GetComponentInParent<Interactable>(); - if (componentInParent != null && componentInParent.UseItem(this, item)) - { - return; - } - } - if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Consumable) - { - if (ConsumeItem(inventory, item)) - { - m_consumeItemEffects.Create(Player.m_localPlayer.transform.position, Quaternion.identity); - m_zanim.SetTrigger("eat"); - } - } - else if ((inventory != m_inventory || !ToggleEquiped(item)) && !fromInventoryGui) - { - if (hoverable != null) - { - Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_cantuseon", item.m_shared.m_name, hoverable.GetHoverName())); - } - else - { - Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_useonwhat", item.m_shared.m_name)); - } - } - } - - public virtual void AbortEquipQueue() - { - } - - public virtual void RemoveFromEquipQueue(ItemDrop.ItemData item) - { - } - - protected virtual bool ToggleEquiped(ItemDrop.ItemData item) - { - if (item.IsEquipable()) - { - if (InAttack()) - { - return true; - } - if (IsItemEquiped(item)) - { - UnequipItem(item); - } - else - { - EquipItem(item); - } - return true; - } - return false; - } - - public virtual bool CanConsumeItem(ItemDrop.ItemData item) - { - if (item.m_shared.m_itemType != ItemDrop.ItemData.ItemType.Consumable) - { - return false; - } - return true; - } - - public virtual bool ConsumeItem(Inventory inventory, ItemDrop.ItemData item) - { - CanConsumeItem(item); - return false; - } - - public bool EquipItem(ItemDrop.ItemData item, bool triggerEquipEffects = true) - { - if (IsItemEquiped(item)) - { - return false; - } - if (!m_inventory.ContainsItem(item)) - { - return false; - } - if (InAttack() || InDodge()) - { - return false; - } - if (IsPlayer() && !IsDead() && IsSwiming() && !IsOnGround()) - { - return false; - } - if (item.m_shared.m_useDurability && item.m_durability <= 0f) - { - return false; - } - if (item.m_shared.m_dlc.Length > 0 && !DLCMan.instance.IsDLCInstalled(item.m_shared.m_dlc)) - { - Message(MessageHud.MessageType.Center, "$msg_dlcrequired"); - return false; - } - if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Tool) - { - UnequipItem(m_rightItem, triggerEquipEffects); - UnequipItem(m_leftItem, triggerEquipEffects); - m_rightItem = item; - m_hiddenRightItem = null; - m_hiddenLeftItem = null; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Torch) - { - if (m_rightItem != null && m_leftItem == null && m_rightItem.m_shared.m_itemType == ItemDrop.ItemData.ItemType.OneHandedWeapon) - { - m_leftItem = item; - } - else - { - UnequipItem(m_rightItem, triggerEquipEffects); - if (m_leftItem != null && m_leftItem.m_shared.m_itemType != ItemDrop.ItemData.ItemType.Shield) - { - UnequipItem(m_leftItem, triggerEquipEffects); - } - m_rightItem = item; - } - m_hiddenRightItem = null; - m_hiddenLeftItem = null; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.OneHandedWeapon) - { - if (m_rightItem != null && m_rightItem.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Torch && m_leftItem == null) - { - ItemDrop.ItemData rightItem = m_rightItem; - UnequipItem(m_rightItem, triggerEquipEffects); - m_leftItem = rightItem; - m_leftItem.m_equiped = true; - } - UnequipItem(m_rightItem, triggerEquipEffects); - if (m_leftItem != null && m_leftItem.m_shared.m_itemType != ItemDrop.ItemData.ItemType.Shield && m_leftItem.m_shared.m_itemType != ItemDrop.ItemData.ItemType.Torch) - { - UnequipItem(m_leftItem, triggerEquipEffects); - } - m_rightItem = item; - m_hiddenRightItem = null; - m_hiddenLeftItem = null; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Shield) - { - UnequipItem(m_leftItem, triggerEquipEffects); - if (m_rightItem != null && m_rightItem.m_shared.m_itemType != ItemDrop.ItemData.ItemType.OneHandedWeapon && m_rightItem.m_shared.m_itemType != ItemDrop.ItemData.ItemType.Torch) - { - UnequipItem(m_rightItem, triggerEquipEffects); - } - m_leftItem = item; - m_hiddenRightItem = null; - m_hiddenLeftItem = null; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Bow) - { - UnequipItem(m_leftItem, triggerEquipEffects); - UnequipItem(m_rightItem, triggerEquipEffects); - m_leftItem = item; - m_hiddenRightItem = null; - m_hiddenLeftItem = null; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.TwoHandedWeapon) - { - UnequipItem(m_leftItem, triggerEquipEffects); - UnequipItem(m_rightItem, triggerEquipEffects); - m_rightItem = item; - m_hiddenRightItem = null; - m_hiddenLeftItem = null; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Chest) - { - UnequipItem(m_chestItem, triggerEquipEffects); - m_chestItem = item; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Legs) - { - UnequipItem(m_legItem, triggerEquipEffects); - m_legItem = item; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Ammo) - { - UnequipItem(m_ammoItem, triggerEquipEffects); - m_ammoItem = item; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Helmet) - { - UnequipItem(m_helmetItem, triggerEquipEffects); - m_helmetItem = item; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Shoulder) - { - UnequipItem(m_shoulderItem, triggerEquipEffects); - m_shoulderItem = item; - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Utility) - { - UnequipItem(m_utilityItem, triggerEquipEffects); - m_utilityItem = item; - } - if (IsItemEquiped(item)) - { - item.m_equiped = true; - } - SetupEquipment(); - if (triggerEquipEffects) - { - TriggerEquipEffect(item); - } - return true; - } - - public void UnequipItem(ItemDrop.ItemData item, bool triggerEquipEffects = true) - { - if (item == null) - { - return; - } - if (m_hiddenLeftItem == item) - { - m_hiddenLeftItem = null; - SetupVisEquipment(m_visEquipment, isRagdoll: false); - } - if (m_hiddenRightItem == item) - { - m_hiddenRightItem = null; - SetupVisEquipment(m_visEquipment, isRagdoll: false); - } - if (!IsItemEquiped(item)) - { - return; - } - if (item.IsWeapon()) - { - if (m_currentAttack != null && m_currentAttack.GetWeapon() == item) - { - m_currentAttack.Stop(); - m_previousAttack = m_currentAttack; - m_currentAttack = null; - } - if (!string.IsNullOrEmpty(item.m_shared.m_holdAnimationState)) - { - m_zanim.SetBool(item.m_shared.m_holdAnimationState, value: false); - } - m_attackDrawTime = 0f; - } - if (m_rightItem == item) - { - m_rightItem = null; - } - else if (m_leftItem == item) - { - m_leftItem = null; - } - else if (m_chestItem == item) - { - m_chestItem = null; - } - else if (m_legItem == item) - { - m_legItem = null; - } - else if (m_ammoItem == item) - { - m_ammoItem = null; - } - else if (m_helmetItem == item) - { - m_helmetItem = null; - } - else if (m_shoulderItem == item) - { - m_shoulderItem = null; - } - else if (m_utilityItem == item) - { - m_utilityItem = null; - } - item.m_equiped = false; - SetupEquipment(); - if (triggerEquipEffects) - { - TriggerEquipEffect(item); - } - } - - private void TriggerEquipEffect(ItemDrop.ItemData item) - { - if (m_nview.GetZDO() != null && Time.frameCount != m_lastEquipEffectFrame) - { - m_lastEquipEffectFrame = Time.frameCount; - m_equipEffects.Create(base.transform.position, Quaternion.identity); - } - } - - public void UnequipAllItems() - { - if (m_rightItem != null) - { - UnequipItem(m_rightItem, triggerEquipEffects: false); - } - if (m_leftItem != null) - { - UnequipItem(m_leftItem, triggerEquipEffects: false); - } - if (m_chestItem != null) - { - UnequipItem(m_chestItem, triggerEquipEffects: false); - } - if (m_legItem != null) - { - UnequipItem(m_legItem, triggerEquipEffects: false); - } - if (m_helmetItem != null) - { - UnequipItem(m_helmetItem, triggerEquipEffects: false); - } - if (m_ammoItem != null) - { - UnequipItem(m_ammoItem, triggerEquipEffects: false); - } - if (m_shoulderItem != null) - { - UnequipItem(m_shoulderItem, triggerEquipEffects: false); - } - if (m_utilityItem != null) - { - UnequipItem(m_utilityItem, triggerEquipEffects: false); - } - } - - protected override void OnRagdollCreated(Ragdoll ragdoll) - { - VisEquipment component = ragdoll.GetComponent<VisEquipment>(); - if ((bool)component) - { - SetupVisEquipment(component, isRagdoll: true); - } - } - - protected virtual void SetupVisEquipment(VisEquipment visEq, bool isRagdoll) - { - if (!isRagdoll) - { - visEq.SetLeftItem((m_leftItem != null) ? m_leftItem.m_dropPrefab.name : "", (m_leftItem != null) ? m_leftItem.m_variant : 0); - visEq.SetRightItem((m_rightItem != null) ? m_rightItem.m_dropPrefab.name : ""); - if (IsPlayer()) - { - visEq.SetLeftBackItem((m_hiddenLeftItem != null) ? m_hiddenLeftItem.m_dropPrefab.name : "", (m_hiddenLeftItem != null) ? m_hiddenLeftItem.m_variant : 0); - visEq.SetRightBackItem((m_hiddenRightItem != null) ? m_hiddenRightItem.m_dropPrefab.name : ""); - } - } - visEq.SetChestItem((m_chestItem != null) ? m_chestItem.m_dropPrefab.name : ""); - visEq.SetLegItem((m_legItem != null) ? m_legItem.m_dropPrefab.name : ""); - visEq.SetHelmetItem((m_helmetItem != null) ? m_helmetItem.m_dropPrefab.name : ""); - visEq.SetShoulderItem((m_shoulderItem != null) ? m_shoulderItem.m_dropPrefab.name : "", (m_shoulderItem != null) ? m_shoulderItem.m_variant : 0); - visEq.SetUtilityItem((m_utilityItem != null) ? m_utilityItem.m_dropPrefab.name : ""); - if (IsPlayer()) - { - visEq.SetBeardItem(m_beardItem); - visEq.SetHairItem(m_hairItem); - } - } - - private void SetupEquipment() - { - if ((bool)m_visEquipment && (m_nview.GetZDO() == null || m_nview.IsOwner())) - { - SetupVisEquipment(m_visEquipment, isRagdoll: false); - } - if (m_nview.GetZDO() != null) - { - UpdateEquipmentStatusEffects(); - if (m_rightItem != null && (bool)m_rightItem.m_shared.m_buildPieces) - { - SetPlaceMode(m_rightItem.m_shared.m_buildPieces); - } - else - { - SetPlaceMode(null); - } - SetupAnimationState(); - } - } - - private void SetupAnimationState() - { - if (m_leftItem != null) - { - if (m_leftItem.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Torch) - { - SetAnimationState(ItemDrop.ItemData.AnimationState.LeftTorch); - } - else - { - SetAnimationState(m_leftItem.m_shared.m_animationState); - } - } - else if (m_rightItem != null) - { - SetAnimationState(m_rightItem.m_shared.m_animationState); - } - else if (m_unarmedWeapon != null) - { - SetAnimationState(m_unarmedWeapon.m_itemData.m_shared.m_animationState); - } - } - - private void SetAnimationState(ItemDrop.ItemData.AnimationState state) - { - m_zanim.SetFloat(statef, (float)state); - m_zanim.SetInt(statei, (int)state); - } - - public bool IsSitting() - { - return m_animator.GetCurrentAnimatorStateInfo(0).tagHash == Character.m_animatorTagSitting; - } - - private void UpdateEquipmentStatusEffects() - { - HashSet<StatusEffect> hashSet = new HashSet<StatusEffect>(); - if (m_leftItem != null && (bool)m_leftItem.m_shared.m_equipStatusEffect) - { - hashSet.Add(m_leftItem.m_shared.m_equipStatusEffect); - } - if (m_rightItem != null && (bool)m_rightItem.m_shared.m_equipStatusEffect) - { - hashSet.Add(m_rightItem.m_shared.m_equipStatusEffect); - } - if (m_chestItem != null && (bool)m_chestItem.m_shared.m_equipStatusEffect) - { - hashSet.Add(m_chestItem.m_shared.m_equipStatusEffect); - } - if (m_legItem != null && (bool)m_legItem.m_shared.m_equipStatusEffect) - { - hashSet.Add(m_legItem.m_shared.m_equipStatusEffect); - } - if (m_helmetItem != null && (bool)m_helmetItem.m_shared.m_equipStatusEffect) - { - hashSet.Add(m_helmetItem.m_shared.m_equipStatusEffect); - } - if (m_shoulderItem != null && (bool)m_shoulderItem.m_shared.m_equipStatusEffect) - { - hashSet.Add(m_shoulderItem.m_shared.m_equipStatusEffect); - } - if (m_utilityItem != null && (bool)m_utilityItem.m_shared.m_equipStatusEffect) - { - hashSet.Add(m_utilityItem.m_shared.m_equipStatusEffect); - } - if (HaveSetEffect(m_leftItem)) - { - hashSet.Add(m_leftItem.m_shared.m_setStatusEffect); - } - if (HaveSetEffect(m_rightItem)) - { - hashSet.Add(m_rightItem.m_shared.m_setStatusEffect); - } - if (HaveSetEffect(m_chestItem)) - { - hashSet.Add(m_chestItem.m_shared.m_setStatusEffect); - } - if (HaveSetEffect(m_legItem)) - { - hashSet.Add(m_legItem.m_shared.m_setStatusEffect); - } - if (HaveSetEffect(m_helmetItem)) - { - hashSet.Add(m_helmetItem.m_shared.m_setStatusEffect); - } - if (HaveSetEffect(m_shoulderItem)) - { - hashSet.Add(m_shoulderItem.m_shared.m_setStatusEffect); - } - if (HaveSetEffect(m_utilityItem)) - { - hashSet.Add(m_utilityItem.m_shared.m_setStatusEffect); - } - foreach (StatusEffect eqipmentStatusEffect in m_eqipmentStatusEffects) - { - if (!hashSet.Contains(eqipmentStatusEffect)) - { - m_seman.RemoveStatusEffect(eqipmentStatusEffect.name); - } - } - foreach (StatusEffect item in hashSet) - { - if (!m_eqipmentStatusEffects.Contains(item)) - { - m_seman.AddStatusEffect(item); - } - } - m_eqipmentStatusEffects.Clear(); - m_eqipmentStatusEffects.UnionWith(hashSet); - } - - private bool HaveSetEffect(ItemDrop.ItemData item) - { - if (item == null) - { - return false; - } - if (item.m_shared.m_setStatusEffect == null || item.m_shared.m_setName.Length == 0 || item.m_shared.m_setSize <= 1) - { - return false; - } - if (GetSetCount(item.m_shared.m_setName) >= item.m_shared.m_setSize) - { - return true; - } - return false; - } - - private int GetSetCount(string setName) - { - int num = 0; - if (m_leftItem != null && m_leftItem.m_shared.m_setName == setName) - { - num++; - } - if (m_rightItem != null && m_rightItem.m_shared.m_setName == setName) - { - num++; - } - if (m_chestItem != null && m_chestItem.m_shared.m_setName == setName) - { - num++; - } - if (m_legItem != null && m_legItem.m_shared.m_setName == setName) - { - num++; - } - if (m_helmetItem != null && m_helmetItem.m_shared.m_setName == setName) - { - num++; - } - if (m_shoulderItem != null && m_shoulderItem.m_shared.m_setName == setName) - { - num++; - } - if (m_utilityItem != null && m_utilityItem.m_shared.m_setName == setName) - { - num++; - } - return num; - } - - public void SetBeard(string name) - { - m_beardItem = name; - SetupEquipment(); - } - - public string GetBeard() - { - return m_beardItem; - } - - public void SetHair(string hair) - { - m_hairItem = hair; - SetupEquipment(); - } - - public string GetHair() - { - return m_hairItem; - } - - public bool IsItemEquiped(ItemDrop.ItemData item) - { - if (m_rightItem == item) - { - return true; - } - if (m_leftItem == item) - { - return true; - } - if (m_chestItem == item) - { - return true; - } - if (m_legItem == item) - { - return true; - } - if (m_ammoItem == item) - { - return true; - } - if (m_helmetItem == item) - { - return true; - } - if (m_shoulderItem == item) - { - return true; - } - if (m_utilityItem == item) - { - return true; - } - return false; - } - - public ItemDrop.ItemData GetRightItem() - { - return m_rightItem; - } - - public ItemDrop.ItemData GetLeftItem() - { - return m_leftItem; - } - - protected override bool CheckRun(Vector3 moveDir, float dt) - { - if (IsHoldingAttack()) - { - return false; - } - if (IsBlocking()) - { - return false; - } - return base.CheckRun(moveDir, dt); - } - - public override bool IsHoldingAttack() - { - ItemDrop.ItemData currentWeapon = GetCurrentWeapon(); - if (currentWeapon != null && currentWeapon.m_shared.m_holdDurationMin > 0f && m_attackDrawTime > 0f) - { - return true; - } - return false; - } - - protected override bool BlockAttack(HitData hit, Character attacker) - { - if (Vector3.Dot(hit.m_dir, base.transform.forward) > 0f) - { - return false; - } - ItemDrop.ItemData currentBlocker = GetCurrentBlocker(); - if (currentBlocker == null) - { - return false; - } - bool flag = currentBlocker.m_shared.m_timedBlockBonus > 1f && m_blockTimer != -1f && m_blockTimer < 0.25f; - float skillFactor = GetSkillFactor(Skills.SkillType.Blocking); - float num = currentBlocker.GetBlockPower(skillFactor); - if (flag) - { - num *= currentBlocker.m_shared.m_timedBlockBonus; - } - float totalBlockableDamage = hit.GetTotalBlockableDamage(); - float num2 = Mathf.Min(totalBlockableDamage, num); - float num3 = Mathf.Clamp01(num2 / num); - float stamina = m_blockStaminaDrain * num3; - UseStamina(stamina); - bool num4 = HaveStamina(); - bool flag2 = num4 && num >= totalBlockableDamage; - if (num4) - { - hit.m_statusEffect = ""; - hit.BlockDamage(num2); - DamageText.instance.ShowText(DamageText.TextType.Blocked, hit.m_point + Vector3.up * 0.5f, num2); - } - if (!num4 || !flag2) - { - Stagger(hit.m_dir); - } - if (currentBlocker.m_shared.m_useDurability) - { - float num5 = currentBlocker.m_shared.m_useDurabilityDrain * num3; - currentBlocker.m_durability -= num5; - } - RaiseSkill(Skills.SkillType.Blocking, flag ? 2f : 1f); - currentBlocker.m_shared.m_blockEffect.Create(hit.m_point, Quaternion.identity); - if ((bool)attacker && flag && flag2) - { - m_perfectBlockEffect.Create(hit.m_point, Quaternion.identity); - if (attacker.m_staggerWhenBlocked) - { - attacker.Stagger(-hit.m_dir); - } - } - if (flag2) - { - float num6 = Mathf.Clamp01(num3 * 0.5f); - hit.m_pushForce *= num6; - if ((bool)attacker && flag) - { - HitData hitData = new HitData(); - hitData.m_pushForce = currentBlocker.GetDeflectionForce() * (1f - num6); - hitData.m_dir = attacker.transform.position - base.transform.position; - hitData.m_dir.y = 0f; - hitData.m_dir.Normalize(); - attacker.Damage(hitData); - } - } - return true; - } - - public override bool IsBlocking() - { - if (m_nview.IsValid() && !m_nview.IsOwner()) - { - return m_nview.GetZDO().GetBool(isBlockingHash); - } - if (m_blocking && !InAttack() && !InDodge() && !InPlaceMode() && !IsEncumbered()) - { - return !InMinorAction(); - } - return false; - } - - private void UpdateBlock(float dt) - { - if (IsBlocking()) - { - if (!m_internalBlockingState) - { - m_internalBlockingState = true; - m_nview.GetZDO().Set(isBlockingHash, value: true); - m_zanim.SetBool(blocking, value: true); - } - if (m_blockTimer < 0f) - { - m_blockTimer = 0f; - } - else - { - m_blockTimer += dt; - } - } - else - { - if (m_internalBlockingState) - { - m_internalBlockingState = false; - m_nview.GetZDO().Set(isBlockingHash, value: false); - m_zanim.SetBool(blocking, value: false); - } - m_blockTimer = -1f; - } - } - - public void HideHandItems() - { - if (m_leftItem != null || m_rightItem != null) - { - ItemDrop.ItemData leftItem = m_leftItem; - ItemDrop.ItemData rightItem = m_rightItem; - UnequipItem(m_leftItem); - UnequipItem(m_rightItem); - m_hiddenLeftItem = leftItem; - m_hiddenRightItem = rightItem; - SetupVisEquipment(m_visEquipment, isRagdoll: false); - m_zanim.SetTrigger("equip_hip"); - } - } - - public void ShowHandItems() - { - ItemDrop.ItemData hiddenLeftItem = m_hiddenLeftItem; - ItemDrop.ItemData hiddenRightItem = m_hiddenRightItem; - if (hiddenLeftItem != null || hiddenRightItem != null) - { - m_hiddenLeftItem = null; - m_hiddenRightItem = null; - if (hiddenLeftItem != null) - { - EquipItem(hiddenLeftItem); - } - if (hiddenRightItem != null) - { - EquipItem(hiddenRightItem); - } - m_zanim.SetTrigger("equip_hip"); - } - } - - public ItemDrop.ItemData GetAmmoItem() - { - return m_ammoItem; - } - - public virtual GameObject GetHoverObject() - { - return null; - } - - public bool IsTeleportable() - { - return m_inventory.IsTeleportable(); - } - - public override bool UseMeleeCamera() - { - return GetCurrentWeapon()?.m_shared.m_centerCamera ?? false; - } - - public float GetEquipmentWeight() - { - float num = 0f; - if (m_rightItem != null) - { - num += m_rightItem.m_shared.m_weight; - } - if (m_leftItem != null) - { - num += m_leftItem.m_shared.m_weight; - } - if (m_chestItem != null) - { - num += m_chestItem.m_shared.m_weight; - } - if (m_legItem != null) - { - num += m_legItem.m_shared.m_weight; - } - if (m_helmetItem != null) - { - num += m_helmetItem.m_shared.m_weight; - } - if (m_shoulderItem != null) - { - num += m_shoulderItem.m_shared.m_weight; - } - if (m_utilityItem != null) - { - num += m_utilityItem.m_shared.m_weight; - } - return num; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/IDestructible.cs b/Valheim_v202102/Valheim/assembly_valheim/IDestructible.cs deleted file mode 100644 index 6d82fb1..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/IDestructible.cs +++ /dev/null @@ -1,6 +0,0 @@ -public interface IDestructible -{ - void Damage(HitData hit); - - DestructibleType GetDestructibleType(); -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/IEquipmentVisual.cs b/Valheim_v202102/Valheim/assembly_valheim/IEquipmentVisual.cs deleted file mode 100644 index 7d4b4c2..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/IEquipmentVisual.cs +++ /dev/null @@ -1,4 +0,0 @@ -internal interface IEquipmentVisual -{ - void Setup(int style); -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/IProjectile.cs b/Valheim_v202102/Valheim/assembly_valheim/IProjectile.cs deleted file mode 100644 index 81f27cf..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/IProjectile.cs +++ /dev/null @@ -1,8 +0,0 @@ -using UnityEngine; - -public interface IProjectile -{ - void Setup(Character owner, Vector3 velocity, float hitNoise, HitData hitData, ItemDrop.ItemData item); - - string GetTooltipString(int itemQuality); -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ISocket.cs b/Valheim_v202102/Valheim/assembly_valheim/ISocket.cs deleted file mode 100644 index f6ca9b7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ISocket.cs +++ /dev/null @@ -1,30 +0,0 @@ -public interface ISocket -{ - bool IsConnected(); - - void Send(ZPackage pkg); - - ZPackage Recv(); - - bool IsSending(); - - bool IsHost(); - - void Dispose(); - - bool GotNewData(); - - void Close(); - - string GetEndPointString(); - - void GetAndResetStats(out int totalSent, out int totalRecv); - - ISocket Accept(); - - int GetHostPort(); - - bool Flush(); - - string GetHostName(); -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/IWaterInteractable.cs b/Valheim_v202102/Valheim/assembly_valheim/IWaterInteractable.cs deleted file mode 100644 index 02008ce..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/IWaterInteractable.cs +++ /dev/null @@ -1,10 +0,0 @@ -using UnityEngine; - -public interface IWaterInteractable -{ - bool IsOwner(); - - void SetInWater(float waterLevel); - - Transform GetTransform(); -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ImpactEffect.cs b/Valheim_v202102/Valheim/assembly_valheim/ImpactEffect.cs deleted file mode 100644 index 4beca90..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ImpactEffect.cs +++ /dev/null @@ -1,159 +0,0 @@ -using UnityEngine; - -public class ImpactEffect : MonoBehaviour -{ - public EffectList m_hitEffect = new EffectList(); - - public EffectList m_destroyEffect = new EffectList(); - - public float m_hitDestroyChance; - - public float m_minVelocity; - - public float m_maxVelocity; - - public bool m_damageToSelf; - - public bool m_damagePlayers = true; - - public bool m_damageFish; - - public int m_toolTier; - - public HitData.DamageTypes m_damages; - - public LayerMask m_triggerMask; - - public float m_interval = 0.5f; - - private bool m_firstHit = true; - - private bool m_hitEffectEnabled = true; - - private ZNetView m_nview; - - private Rigidbody m_body; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_body = GetComponent<Rigidbody>(); - if (m_maxVelocity < m_minVelocity) - { - m_maxVelocity = m_minVelocity; - } - } - - public void OnCollisionEnter(Collision info) - { - if (!m_nview.IsValid() || ((bool)m_nview && !m_nview.IsOwner()) || info.contacts.Length == 0 || !m_hitEffectEnabled || (m_triggerMask.value & (1 << info.collider.gameObject.layer)) == 0) - { - return; - } - float magnitude = info.relativeVelocity.magnitude; - if (magnitude < m_minVelocity) - { - return; - } - ContactPoint contactPoint = info.contacts[0]; - Vector3 point = contactPoint.point; - Vector3 pointVelocity = m_body.GetPointVelocity(point); - m_hitEffectEnabled = false; - Invoke("ResetHitTimer", m_interval); - if (m_damages.HaveDamage()) - { - GameObject gameObject = Projectile.FindHitObject(contactPoint.otherCollider); - float num = (num = Utils.LerpStep(m_minVelocity, m_maxVelocity, magnitude)); - IDestructible component = gameObject.GetComponent<IDestructible>(); - if (component != null) - { - Character character = component as Character; - if ((bool)character) - { - if (!m_damagePlayers && character.IsPlayer()) - { - return; - } - float num2 = Vector3.Dot(-info.relativeVelocity.normalized, pointVelocity); - if (num2 < m_minVelocity) - { - return; - } - ZLog.Log("Rel vel " + num2); - num = Utils.LerpStep(m_minVelocity, m_maxVelocity, num2); - if (character.GetSEMan().HaveStatusAttribute(StatusEffect.StatusAttribute.DoubleImpactDamage)) - { - num *= 2f; - } - } - if (!m_damageFish && (bool)gameObject.GetComponent<Fish>()) - { - return; - } - HitData hitData = new HitData(); - hitData.m_point = point; - hitData.m_dir = pointVelocity.normalized; - hitData.m_hitCollider = info.collider; - hitData.m_toolTier = m_toolTier; - hitData.m_damage = m_damages.Clone(); - hitData.m_damage.Modify(num); - component.Damage(hitData); - } - if (m_damageToSelf) - { - IDestructible component2 = GetComponent<IDestructible>(); - if (component2 != null) - { - HitData hitData2 = new HitData(); - hitData2.m_point = point; - hitData2.m_dir = -pointVelocity.normalized; - hitData2.m_toolTier = m_toolTier; - hitData2.m_damage = m_damages.Clone(); - hitData2.m_damage.Modify(num); - component2.Damage(hitData2); - } - } - } - Vector3 rhs = Vector3.Cross(-Vector3.Normalize(info.relativeVelocity), contactPoint.normal); - Vector3 vector = Vector3.Cross(contactPoint.normal, rhs); - Quaternion rot = Quaternion.identity; - if (vector != Vector3.zero && contactPoint.normal != Vector3.zero) - { - rot = Quaternion.LookRotation(vector, contactPoint.normal); - } - m_hitEffect.Create(point, rot); - if (m_firstHit && m_hitDestroyChance > 0f && Random.value <= m_hitDestroyChance) - { - m_destroyEffect.Create(point, rot); - GameObject obj = base.gameObject; - if ((bool)base.transform.parent) - { - Animator componentInParent = base.transform.GetComponentInParent<Animator>(); - if ((bool)componentInParent) - { - obj = componentInParent.gameObject; - } - } - Object.Destroy(obj); - } - m_firstHit = false; - } - - private Vector3 GetAVGPos(ContactPoint[] points) - { - ZLog.Log("Pooints " + points.Length); - Vector3 zero = Vector3.zero; - for (int i = 0; i < points.Length; i++) - { - ContactPoint contactPoint = points[i]; - ZLog.Log("P " + contactPoint.otherCollider.gameObject.name); - zero += contactPoint.point; - } - return zero; - } - - private void ResetHitTimer() - { - m_hitEffectEnabled = true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/InputFieldSubmit.cs b/Valheim_v202102/Valheim/assembly_valheim/InputFieldSubmit.cs deleted file mode 100644 index 1a8ac47..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/InputFieldSubmit.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.UI; - -public class InputFieldSubmit : MonoBehaviour -{ - public Action<string> m_onSubmit; - - private InputField m_field; - - private void Awake() - { - m_field = GetComponent<InputField>(); - } - - private void Update() - { - if (m_field.text != "" && Input.GetKey(KeyCode.Return)) - { - m_onSubmit(m_field.text); - m_field.text = ""; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/InstanceRenderer.cs b/Valheim_v202102/Valheim/assembly_valheim/InstanceRenderer.cs deleted file mode 100644 index 3ced0a9..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/InstanceRenderer.cs +++ /dev/null @@ -1,176 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Rendering; - -public class InstanceRenderer : MonoBehaviour -{ - public Mesh m_mesh; - - public Material m_material; - - public Vector3 m_scale = Vector3.one; - - public bool m_frustumCull = true; - - private bool m_dirtyBounds = true; - - private BoundingSphere m_bounds; - - public bool m_useLod; - - public bool m_useXZLodDistance = true; - - public float m_lodMinDistance = 5f; - - public float m_lodMaxDistance = 20f; - - public ShadowCastingMode m_shadowCasting; - - private float m_lodCount; - - private Matrix4x4[] m_instances = new Matrix4x4[1024]; - - private int m_instanceCount; - - private bool m_firstFrame = true; - - private void Update() - { - Camera mainCamera = Utils.GetMainCamera(); - if (m_instanceCount == 0 || mainCamera == null) - { - return; - } - if (m_frustumCull) - { - if (m_dirtyBounds) - { - UpdateBounds(); - } - if (!Utils.InsideMainCamera(m_bounds)) - { - return; - } - } - if (m_useLod) - { - float num = (m_useXZLodDistance ? Utils.DistanceXZ(mainCamera.transform.position, base.transform.position) : Vector3.Distance(mainCamera.transform.position, base.transform.position)); - int num2 = (int)((1f - Utils.LerpStep(m_lodMinDistance, m_lodMaxDistance, num)) * (float)m_instanceCount); - float maxDelta = Time.deltaTime * (float)m_instanceCount; - m_lodCount = Mathf.MoveTowards(m_lodCount, num2, maxDelta); - if (m_firstFrame) - { - if (num < m_lodMinDistance) - { - m_lodCount = num2; - } - m_firstFrame = false; - } - m_lodCount = Mathf.Min(m_lodCount, m_instanceCount); - int num3 = (int)m_lodCount; - if (num3 > 0) - { - Graphics.DrawMeshInstanced(m_mesh, 0, m_material, m_instances, num3, null, m_shadowCasting); - } - } - else - { - Graphics.DrawMeshInstanced(m_mesh, 0, m_material, m_instances, m_instanceCount, null, m_shadowCasting); - } - } - - private void UpdateBounds() - { - m_dirtyBounds = false; - Vector3 vector = new Vector3(9999999f, 9999999f, 9999999f); - Vector3 vector2 = new Vector3(-9999999f, -9999999f, -9999999f); - float magnitude = m_mesh.bounds.extents.magnitude; - for (int i = 0; i < m_instanceCount; i++) - { - Matrix4x4 matrix4x = m_instances[i]; - Vector3 vector3 = new Vector3(matrix4x[0, 3], matrix4x[1, 3], matrix4x[2, 3]); - Vector3 lossyScale = matrix4x.lossyScale; - float num = Mathf.Max(Mathf.Max(lossyScale.x, lossyScale.y), lossyScale.z); - Vector3 vector4 = new Vector3(num * magnitude, num * magnitude, num * magnitude); - vector2 = Vector3.Max(vector2, vector3 + vector4); - vector = Vector3.Min(vector, vector3 - vector4); - } - m_bounds.position = (vector2 + vector) * 0.5f; - m_bounds.radius = Vector3.Distance(vector2, m_bounds.position); - } - - public void AddInstance(Vector3 pos, Quaternion rot, float scale) - { - Matrix4x4 m = Matrix4x4.TRS(pos, rot, m_scale * scale); - AddInstance(m); - } - - public void AddInstance(Vector3 pos, Quaternion rot) - { - Matrix4x4 m = Matrix4x4.TRS(pos, rot, m_scale); - AddInstance(m); - } - - public void AddInstance(Matrix4x4 m) - { - if (m_instanceCount < 1023) - { - m_instances[m_instanceCount] = m; - m_instanceCount++; - m_dirtyBounds = true; - } - } - - public void Clear() - { - m_instanceCount = 0; - m_dirtyBounds = true; - } - - public void SetInstance(int index, Vector3 pos, Quaternion rot, float scale) - { - Matrix4x4 matrix4x = Matrix4x4.TRS(pos, rot, m_scale * scale); - m_instances[index] = matrix4x; - m_dirtyBounds = true; - } - - private void Resize(int instances) - { - m_instanceCount = instances; - m_dirtyBounds = true; - } - - public void SetInstances(List<Transform> transforms, bool faceCamera = false) - { - Resize(transforms.Count); - for (int i = 0; i < transforms.Count; i++) - { - Transform transform = transforms[i]; - m_instances[i] = Matrix4x4.TRS(transform.position, transform.rotation, transform.lossyScale); - } - m_dirtyBounds = true; - } - - public void SetInstancesBillboard(List<Vector4> points) - { - Camera mainCamera = Utils.GetMainCamera(); - if (!(mainCamera == null)) - { - Vector3 forward = -mainCamera.transform.forward; - Resize(points.Count); - for (int i = 0; i < points.Count; i++) - { - Vector4 vector = points[i]; - Vector3 pos = new Vector3(vector.x, vector.y, vector.z); - float w = vector.w; - Quaternion q = Quaternion.LookRotation(forward); - m_instances[i] = Matrix4x4.TRS(pos, q, w * m_scale); - } - m_dirtyBounds = true; - } - } - - private void OnDrawGizmosSelected() - { - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/InstantiatePrefab.cs b/Valheim_v202102/Valheim/assembly_valheim/InstantiatePrefab.cs deleted file mode 100644 index eb2c331..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/InstantiatePrefab.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UnityEngine; - -public class InstantiatePrefab : MonoBehaviour -{ - public GameObject m_prefab; - - public bool m_attach = true; - - public bool m_moveToTop; - - private void Awake() - { - if (m_attach) - { - Object.Instantiate(m_prefab, base.transform).transform.SetAsFirstSibling(); - } - else - { - Object.Instantiate(m_prefab); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Interactable.cs b/Valheim_v202102/Valheim/assembly_valheim/Interactable.cs deleted file mode 100644 index 6d603a0..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Interactable.cs +++ /dev/null @@ -1,6 +0,0 @@ -public interface Interactable -{ - bool Interact(Humanoid user, bool hold); - - bool UseItem(Humanoid user, ItemDrop.ItemData item); -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Interpolate.cs b/Valheim_v202102/Valheim/assembly_valheim/Interpolate.cs deleted file mode 100644 index d393f29..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Interpolate.cs +++ /dev/null @@ -1,456 +0,0 @@ -using System; -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class Interpolate -{ - public enum EaseType - { - Linear, - EaseInQuad, - EaseOutQuad, - EaseInOutQuad, - EaseInCubic, - EaseOutCubic, - EaseInOutCubic, - EaseInQuart, - EaseOutQuart, - EaseInOutQuart, - EaseInQuint, - EaseOutQuint, - EaseInOutQuint, - EaseInSine, - EaseOutSine, - EaseInOutSine, - EaseInExpo, - EaseOutExpo, - EaseInOutExpo, - EaseInCirc, - EaseOutCirc, - EaseInOutCirc - } - - public delegate Vector3 ToVector3<T>(T v); - - public delegate float Function(float a, float b, float c, float d); - - private static Vector3 Identity(Vector3 v) - { - return v; - } - - private static Vector3 TransformDotPosition(Transform t) - { - return t.position; - } - - private static IEnumerable<float> NewTimer(float duration) - { - float elapsedTime = 0f; - while (elapsedTime < duration) - { - yield return elapsedTime; - elapsedTime += Time.deltaTime; - if (elapsedTime >= duration) - { - yield return elapsedTime; - } - } - } - - private static IEnumerable<float> NewCounter(int start, int end, int step) - { - for (int i = start; i <= end; i += step) - { - yield return i; - } - } - - public static IEnumerator NewEase(Function ease, Vector3 start, Vector3 end, float duration) - { - IEnumerable<float> driver = NewTimer(duration); - return NewEase(ease, start, end, duration, driver); - } - - public static IEnumerator NewEase(Function ease, Vector3 start, Vector3 end, int slices) - { - IEnumerable<float> driver = NewCounter(0, slices + 1, 1); - return NewEase(ease, start, end, slices + 1, driver); - } - - private static IEnumerator NewEase(Function ease, Vector3 start, Vector3 end, float total, IEnumerable<float> driver) - { - Vector3 distance = end - start; - foreach (float item in driver) - { - yield return Ease(ease, start, distance, item, total); - } - } - - private static Vector3 Ease(Function ease, Vector3 start, Vector3 distance, float elapsedTime, float duration) - { - start.x = ease(start.x, distance.x, elapsedTime, duration); - start.y = ease(start.y, distance.y, elapsedTime, duration); - start.z = ease(start.z, distance.z, elapsedTime, duration); - return start; - } - - public static Function Ease(EaseType type) - { - Function result = null; - switch (type) - { - case EaseType.Linear: - result = Linear; - break; - case EaseType.EaseInQuad: - result = EaseInQuad; - break; - case EaseType.EaseOutQuad: - result = EaseOutQuad; - break; - case EaseType.EaseInOutQuad: - result = EaseInOutQuad; - break; - case EaseType.EaseInCubic: - result = EaseInCubic; - break; - case EaseType.EaseOutCubic: - result = EaseOutCubic; - break; - case EaseType.EaseInOutCubic: - result = EaseInOutCubic; - break; - case EaseType.EaseInQuart: - result = EaseInQuart; - break; - case EaseType.EaseOutQuart: - result = EaseOutQuart; - break; - case EaseType.EaseInOutQuart: - result = EaseInOutQuart; - break; - case EaseType.EaseInQuint: - result = EaseInQuint; - break; - case EaseType.EaseOutQuint: - result = EaseOutQuint; - break; - case EaseType.EaseInOutQuint: - result = EaseInOutQuint; - break; - case EaseType.EaseInSine: - result = EaseInSine; - break; - case EaseType.EaseOutSine: - result = EaseOutSine; - break; - case EaseType.EaseInOutSine: - result = EaseInOutSine; - break; - case EaseType.EaseInExpo: - result = EaseInExpo; - break; - case EaseType.EaseOutExpo: - result = EaseOutExpo; - break; - case EaseType.EaseInOutExpo: - result = EaseInOutExpo; - break; - case EaseType.EaseInCirc: - result = EaseInCirc; - break; - case EaseType.EaseOutCirc: - result = EaseOutCirc; - break; - case EaseType.EaseInOutCirc: - result = EaseInOutCirc; - break; - } - return result; - } - - public static IEnumerable<Vector3> NewBezier(Function ease, Transform[] nodes, float duration) - { - IEnumerable<float> steps = NewTimer(duration); - return NewBezier<Transform>(ease, nodes, TransformDotPosition, duration, steps); - } - - public static IEnumerable<Vector3> NewBezier(Function ease, Transform[] nodes, int slices) - { - IEnumerable<float> steps = NewCounter(0, slices + 1, 1); - return NewBezier<Transform>(ease, nodes, TransformDotPosition, slices + 1, steps); - } - - public static IEnumerable<Vector3> NewBezier(Function ease, Vector3[] points, float duration) - { - IEnumerable<float> steps = NewTimer(duration); - return NewBezier<Vector3>(ease, points, Identity, duration, steps); - } - - public static IEnumerable<Vector3> NewBezier(Function ease, Vector3[] points, int slices) - { - IEnumerable<float> steps = NewCounter(0, slices + 1, 1); - return NewBezier<Vector3>(ease, points, Identity, slices + 1, steps); - } - - private static IEnumerable<Vector3> NewBezier<T>(Function ease, IList nodes, ToVector3<T> toVector3, float maxStep, IEnumerable<float> steps) - { - if (nodes.Count < 2) - { - yield break; - } - Vector3[] points = new Vector3[nodes.Count]; - foreach (float step in steps) - { - for (int i = 0; i < nodes.Count; i++) - { - points[i] = toVector3((T)nodes[i]); - } - yield return Bezier(ease, points, step, maxStep); - } - } - - private static Vector3 Bezier(Function ease, Vector3[] points, float elapsedTime, float duration) - { - for (int num = points.Length - 1; num > 0; num--) - { - for (int i = 0; i < num; i++) - { - points[i].x = ease(points[i].x, points[i + 1].x - points[i].x, elapsedTime, duration); - points[i].y = ease(points[i].y, points[i + 1].y - points[i].y, elapsedTime, duration); - points[i].z = ease(points[i].z, points[i + 1].z - points[i].z, elapsedTime, duration); - } - } - return points[0]; - } - - public static IEnumerable<Vector3> NewCatmullRom(Transform[] nodes, int slices, bool loop) - { - return NewCatmullRom<Transform>(nodes, TransformDotPosition, slices, loop); - } - - public static IEnumerable<Vector3> NewCatmullRom(Vector3[] points, int slices, bool loop) - { - return NewCatmullRom<Vector3>(points, Identity, slices, loop); - } - - private static IEnumerable<Vector3> NewCatmullRom<T>(IList nodes, ToVector3<T> toVector3, int slices, bool loop) - { - if (nodes.Count < 2) - { - yield break; - } - yield return toVector3((T)nodes[0]); - int last = nodes.Count - 1; - for (int current = 0; loop || current < last; current++) - { - if (loop && current > last) - { - current = 0; - } - int previous = ((current != 0) ? (current - 1) : (loop ? last : current)); - int start = current; - int end = ((current != last) ? (current + 1) : ((!loop) ? current : 0)); - int next = ((end != last) ? (end + 1) : ((!loop) ? end : 0)); - int stepCount = slices + 1; - for (int step = 1; step <= stepCount; step++) - { - yield return CatmullRom(toVector3((T)nodes[previous]), toVector3((T)nodes[start]), toVector3((T)nodes[end]), toVector3((T)nodes[next]), step, stepCount); - } - } - } - - private static Vector3 CatmullRom(Vector3 previous, Vector3 start, Vector3 end, Vector3 next, float elapsedTime, float duration) - { - float num = elapsedTime / duration; - float num2 = num * num; - float num3 = num2 * num; - return previous * (-0.5f * num3 + num2 - 0.5f * num) + start * (1.5f * num3 + -2.5f * num2 + 1f) + end * (-1.5f * num3 + 2f * num2 + 0.5f * num) + next * (0.5f * num3 - 0.5f * num2); - } - - private static float Linear(float start, float distance, float elapsedTime, float duration) - { - if (elapsedTime > duration) - { - elapsedTime = duration; - } - return distance * (elapsedTime / duration) + start; - } - - private static float EaseInQuad(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 1f : (elapsedTime / duration)); - return distance * elapsedTime * elapsedTime + start; - } - - private static float EaseOutQuad(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 1f : (elapsedTime / duration)); - return (0f - distance) * elapsedTime * (elapsedTime - 2f) + start; - } - - private static float EaseInOutQuad(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 2f : (elapsedTime / (duration / 2f))); - if (elapsedTime < 1f) - { - return distance / 2f * elapsedTime * elapsedTime + start; - } - elapsedTime -= 1f; - return (0f - distance) / 2f * (elapsedTime * (elapsedTime - 2f) - 1f) + start; - } - - private static float EaseInCubic(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 1f : (elapsedTime / duration)); - return distance * elapsedTime * elapsedTime * elapsedTime + start; - } - - private static float EaseOutCubic(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 1f : (elapsedTime / duration)); - elapsedTime -= 1f; - return distance * (elapsedTime * elapsedTime * elapsedTime + 1f) + start; - } - - private static float EaseInOutCubic(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 2f : (elapsedTime / (duration / 2f))); - if (elapsedTime < 1f) - { - return distance / 2f * elapsedTime * elapsedTime * elapsedTime + start; - } - elapsedTime -= 2f; - return distance / 2f * (elapsedTime * elapsedTime * elapsedTime + 2f) + start; - } - - private static float EaseInQuart(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 1f : (elapsedTime / duration)); - return distance * elapsedTime * elapsedTime * elapsedTime * elapsedTime + start; - } - - private static float EaseOutQuart(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 1f : (elapsedTime / duration)); - elapsedTime -= 1f; - return (0f - distance) * (elapsedTime * elapsedTime * elapsedTime * elapsedTime - 1f) + start; - } - - private static float EaseInOutQuart(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 2f : (elapsedTime / (duration / 2f))); - if (elapsedTime < 1f) - { - return distance / 2f * elapsedTime * elapsedTime * elapsedTime * elapsedTime + start; - } - elapsedTime -= 2f; - return (0f - distance) / 2f * (elapsedTime * elapsedTime * elapsedTime * elapsedTime - 2f) + start; - } - - private static float EaseInQuint(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 1f : (elapsedTime / duration)); - return distance * elapsedTime * elapsedTime * elapsedTime * elapsedTime * elapsedTime + start; - } - - private static float EaseOutQuint(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 1f : (elapsedTime / duration)); - elapsedTime -= 1f; - return distance * (elapsedTime * elapsedTime * elapsedTime * elapsedTime * elapsedTime + 1f) + start; - } - - private static float EaseInOutQuint(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 2f : (elapsedTime / (duration / 2f))); - if (elapsedTime < 1f) - { - return distance / 2f * elapsedTime * elapsedTime * elapsedTime * elapsedTime * elapsedTime + start; - } - elapsedTime -= 2f; - return distance / 2f * (elapsedTime * elapsedTime * elapsedTime * elapsedTime * elapsedTime + 2f) + start; - } - - private static float EaseInSine(float start, float distance, float elapsedTime, float duration) - { - if (elapsedTime > duration) - { - elapsedTime = duration; - } - return (0f - distance) * Mathf.Cos(elapsedTime / duration * ((float)Math.PI / 2f)) + distance + start; - } - - private static float EaseOutSine(float start, float distance, float elapsedTime, float duration) - { - if (elapsedTime > duration) - { - elapsedTime = duration; - } - return distance * Mathf.Sin(elapsedTime / duration * ((float)Math.PI / 2f)) + start; - } - - private static float EaseInOutSine(float start, float distance, float elapsedTime, float duration) - { - if (elapsedTime > duration) - { - elapsedTime = duration; - } - return (0f - distance) / 2f * (Mathf.Cos((float)Math.PI * elapsedTime / duration) - 1f) + start; - } - - private static float EaseInExpo(float start, float distance, float elapsedTime, float duration) - { - if (elapsedTime > duration) - { - elapsedTime = duration; - } - return distance * Mathf.Pow(2f, 10f * (elapsedTime / duration - 1f)) + start; - } - - private static float EaseOutExpo(float start, float distance, float elapsedTime, float duration) - { - if (elapsedTime > duration) - { - elapsedTime = duration; - } - return distance * (0f - Mathf.Pow(2f, -10f * elapsedTime / duration) + 1f) + start; - } - - private static float EaseInOutExpo(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 2f : (elapsedTime / (duration / 2f))); - if (elapsedTime < 1f) - { - return distance / 2f * Mathf.Pow(2f, 10f * (elapsedTime - 1f)) + start; - } - elapsedTime -= 1f; - return distance / 2f * (0f - Mathf.Pow(2f, -10f * elapsedTime) + 2f) + start; - } - - private static float EaseInCirc(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 1f : (elapsedTime / duration)); - return (0f - distance) * (Mathf.Sqrt(1f - elapsedTime * elapsedTime) - 1f) + start; - } - - private static float EaseOutCirc(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 1f : (elapsedTime / duration)); - elapsedTime -= 1f; - return distance * Mathf.Sqrt(1f - elapsedTime * elapsedTime) + start; - } - - private static float EaseInOutCirc(float start, float distance, float elapsedTime, float duration) - { - elapsedTime = ((elapsedTime > duration) ? 2f : (elapsedTime / (duration / 2f))); - if (elapsedTime < 1f) - { - return (0f - distance) / 2f * (Mathf.Sqrt(1f - elapsedTime * elapsedTime) - 1f) + start; - } - elapsedTime -= 2f; - return distance / 2f * (Mathf.Sqrt(1f - elapsedTime * elapsedTime) + 1f) + start; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Inventory.cs b/Valheim_v202102/Valheim/assembly_valheim/Inventory.cs deleted file mode 100644 index f31d5d5..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Inventory.cs +++ /dev/null @@ -1,755 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Inventory -{ - private int currentVersion = 103; - - public Action m_onChanged; - - private string m_name = ""; - - private Sprite m_bkg; - - private List<ItemDrop.ItemData> m_inventory = new List<ItemDrop.ItemData>(); - - private int m_width = 4; - - private int m_height = 4; - - private float m_totalWeight; - - public Inventory(string name, Sprite bkg, int w, int h) - { - m_bkg = bkg; - m_name = name; - m_width = w; - m_height = h; - } - - private bool AddItem(ItemDrop.ItemData item, int amount, int x, int y) - { - amount = Mathf.Min(amount, item.m_stack); - if (x < 0 || y < 0 || x >= m_width || y >= m_height) - { - return false; - } - bool flag = false; - ItemDrop.ItemData itemAt = GetItemAt(x, y); - if (itemAt != null) - { - if (itemAt.m_shared.m_name != item.m_shared.m_name || (itemAt.m_shared.m_maxQuality > 1 && itemAt.m_quality != item.m_quality)) - { - return false; - } - int num = itemAt.m_shared.m_maxStackSize - itemAt.m_stack; - if (num <= 0) - { - return false; - } - int num2 = Mathf.Min(num, amount); - itemAt.m_stack += num2; - item.m_stack -= num2; - flag = num2 == amount; - ZLog.Log("Added to stack" + itemAt.m_stack + " " + item.m_stack); - } - else - { - ItemDrop.ItemData itemData = item.Clone(); - itemData.m_stack = amount; - itemData.m_gridPos = new Vector2i(x, y); - m_inventory.Add(itemData); - item.m_stack -= amount; - flag = true; - } - Changed(); - return flag; - } - - public bool CanAddItem(GameObject prefab, int stack = -1) - { - ItemDrop component = prefab.GetComponent<ItemDrop>(); - if (component == null) - { - return false; - } - return CanAddItem(component.m_itemData, stack); - } - - public bool CanAddItem(ItemDrop.ItemData item, int stack = -1) - { - if (HaveEmptySlot()) - { - return true; - } - if (stack <= 0) - { - stack = item.m_stack; - } - return FindFreeStackSpace(item.m_shared.m_name) >= stack; - } - - public bool AddItem(ItemDrop.ItemData item) - { - bool result = true; - if (item.m_shared.m_maxStackSize > 1) - { - for (int i = 0; i < item.m_stack; i++) - { - ItemDrop.ItemData itemData = FindFreeStackItem(item.m_shared.m_name, item.m_quality); - if (itemData != null) - { - itemData.m_stack++; - continue; - } - int stack = item.m_stack - i; - item.m_stack = stack; - Vector2i gridPos = FindEmptySlot(TopFirst(item)); - if (gridPos.x >= 0) - { - item.m_gridPos = gridPos; - m_inventory.Add(item); - } - else - { - result = false; - } - break; - } - } - else - { - Vector2i gridPos2 = FindEmptySlot(TopFirst(item)); - if (gridPos2.x >= 0) - { - item.m_gridPos = gridPos2; - m_inventory.Add(item); - } - else - { - result = false; - } - } - Changed(); - return result; - } - - private bool TopFirst(ItemDrop.ItemData item) - { - if (item.IsWeapon()) - { - return true; - } - if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Tool || item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Shield || item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Utility) - { - return true; - } - return false; - } - - public void MoveAll(Inventory fromInventory) - { - List<ItemDrop.ItemData> list = new List<ItemDrop.ItemData>(fromInventory.GetAllItems()); - List<ItemDrop.ItemData> list2 = new List<ItemDrop.ItemData>(); - foreach (ItemDrop.ItemData item in list) - { - if (AddItem(item, item.m_stack, item.m_gridPos.x, item.m_gridPos.y)) - { - fromInventory.RemoveItem(item); - } - else - { - list2.Add(item); - } - } - foreach (ItemDrop.ItemData item2 in list2) - { - if (AddItem(item2)) - { - fromInventory.RemoveItem(item2); - continue; - } - break; - } - Changed(); - fromInventory.Changed(); - } - - public void MoveItemToThis(Inventory fromInventory, ItemDrop.ItemData item) - { - if (AddItem(item)) - { - fromInventory.RemoveItem(item); - } - Changed(); - fromInventory.Changed(); - } - - public bool MoveItemToThis(Inventory fromInventory, ItemDrop.ItemData item, int amount, int x, int y) - { - bool result = AddItem(item, amount, x, y); - if (item.m_stack == 0) - { - fromInventory.RemoveItem(item); - return result; - } - fromInventory.Changed(); - return result; - } - - public bool RemoveItem(int index) - { - if (index < 0 || index >= m_inventory.Count) - { - return false; - } - m_inventory.RemoveAt(index); - Changed(); - return true; - } - - public bool ContainsItem(ItemDrop.ItemData item) - { - return m_inventory.Contains(item); - } - - public bool RemoveOneItem(ItemDrop.ItemData item) - { - if (!m_inventory.Contains(item)) - { - return false; - } - if (item.m_stack > 1) - { - item.m_stack--; - Changed(); - } - else - { - m_inventory.Remove(item); - Changed(); - } - return true; - } - - public bool RemoveItem(ItemDrop.ItemData item) - { - if (!m_inventory.Contains(item)) - { - ZLog.Log("Item is not in this container"); - return false; - } - m_inventory.Remove(item); - Changed(); - return true; - } - - public bool RemoveItem(ItemDrop.ItemData item, int amount) - { - amount = Mathf.Min(item.m_stack, amount); - if (amount == item.m_stack) - { - return RemoveItem(item); - } - if (!m_inventory.Contains(item)) - { - return false; - } - item.m_stack -= amount; - Changed(); - return true; - } - - public void RemoveItem(string name, int amount) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_name == name) - { - int num = Mathf.Min(item.m_stack, amount); - item.m_stack -= num; - amount -= num; - if (amount <= 0) - { - break; - } - } - } - m_inventory.RemoveAll((ItemDrop.ItemData x) => x.m_stack <= 0); - Changed(); - } - - public bool HaveItem(string name) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_name == name) - { - return true; - } - } - return false; - } - - public void GetAllPieceTables(List<PieceTable> tables) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_buildPieces != null && !tables.Contains(item.m_shared.m_buildPieces)) - { - tables.Add(item.m_shared.m_buildPieces); - } - } - } - - public int CountItems(string name) - { - int num = 0; - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_name == name) - { - num += item.m_stack; - } - } - return num; - } - - public ItemDrop.ItemData GetItem(int index) - { - return m_inventory[index]; - } - - public ItemDrop.ItemData GetItem(string name) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_name == name) - { - return item; - } - } - return null; - } - - public ItemDrop.ItemData GetAmmoItem(string ammoName) - { - int num = 0; - ItemDrop.ItemData itemData = null; - foreach (ItemDrop.ItemData item in m_inventory) - { - if ((item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Ammo || item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Consumable) && item.m_shared.m_ammoType == ammoName) - { - int num2 = item.m_gridPos.y * m_width + item.m_gridPos.x; - if (num2 < num || itemData == null) - { - num = num2; - itemData = item; - } - } - } - return itemData; - } - - private int FindFreeStackSpace(string name) - { - int num = 0; - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_name == name && item.m_stack < item.m_shared.m_maxStackSize) - { - num += item.m_shared.m_maxStackSize - item.m_stack; - } - } - return num; - } - - private ItemDrop.ItemData FindFreeStackItem(string name, int quality) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_name == name && item.m_quality == quality && item.m_stack < item.m_shared.m_maxStackSize) - { - return item; - } - } - return null; - } - - public int NrOfItems() - { - return m_inventory.Count; - } - - public float SlotsUsedPercentage() - { - return (float)m_inventory.Count / (float)(m_width * m_height) * 100f; - } - - public void Print() - { - for (int i = 0; i < m_inventory.Count; i++) - { - ItemDrop.ItemData itemData = m_inventory[i]; - ZLog.Log(i.ToString() + ": " + itemData.m_shared.m_name + " " + itemData.m_stack + " / " + itemData.m_shared.m_maxStackSize); - } - } - - public int GetEmptySlots() - { - return m_height * m_width - m_inventory.Count; - } - - public bool HaveEmptySlot() - { - return m_inventory.Count < m_width * m_height; - } - - private Vector2i FindEmptySlot(bool topFirst) - { - if (topFirst) - { - for (int i = 0; i < m_height; i++) - { - for (int j = 0; j < m_width; j++) - { - if (GetItemAt(j, i) == null) - { - return new Vector2i(j, i); - } - } - } - } - else - { - for (int num = m_height - 1; num >= 0; num--) - { - for (int k = 0; k < m_width; k++) - { - if (GetItemAt(k, num) == null) - { - return new Vector2i(k, num); - } - } - } - } - return new Vector2i(-1, -1); - } - - public ItemDrop.ItemData GetOtherItemAt(int x, int y, ItemDrop.ItemData oldItem) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item != oldItem && item.m_gridPos.x == x && item.m_gridPos.y == y) - { - return item; - } - } - return null; - } - - public ItemDrop.ItemData GetItemAt(int x, int y) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_gridPos.x == x && item.m_gridPos.y == y) - { - return item; - } - } - return null; - } - - public List<ItemDrop.ItemData> GetEquipedtems() - { - List<ItemDrop.ItemData> list = new List<ItemDrop.ItemData>(); - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_equiped) - { - list.Add(item); - } - } - return list; - } - - public void GetWornItems(List<ItemDrop.ItemData> worn) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_useDurability && item.m_durability < item.GetMaxDurability()) - { - worn.Add(item); - } - } - } - - public void GetValuableItems(List<ItemDrop.ItemData> items) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_value > 0) - { - items.Add(item); - } - } - } - - public List<ItemDrop.ItemData> GetAllItems() - { - return m_inventory; - } - - public void GetAllItems(string name, List<ItemDrop.ItemData> items) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_name == name) - { - items.Add(item); - } - } - } - - public void GetAllItems(ItemDrop.ItemData.ItemType type, List<ItemDrop.ItemData> items) - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_shared.m_itemType == type) - { - items.Add(item); - } - } - } - - public int GetWidth() - { - return m_width; - } - - public int GetHeight() - { - return m_height; - } - - public string GetName() - { - return m_name; - } - - public Sprite GetBkg() - { - return m_bkg; - } - - public void Save(ZPackage pkg) - { - pkg.Write(currentVersion); - pkg.Write(m_inventory.Count); - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_dropPrefab == null) - { - ZLog.Log("Item missing prefab " + item.m_shared.m_name); - pkg.Write(""); - } - else - { - pkg.Write(item.m_dropPrefab.name); - } - pkg.Write(item.m_stack); - pkg.Write(item.m_durability); - pkg.Write(item.m_gridPos); - pkg.Write(item.m_equiped); - pkg.Write(item.m_quality); - pkg.Write(item.m_variant); - pkg.Write(item.m_crafterID); - pkg.Write(item.m_crafterName); - } - } - - public void Load(ZPackage pkg) - { - int num = pkg.ReadInt(); - int num2 = pkg.ReadInt(); - m_inventory.Clear(); - for (int i = 0; i < num2; i++) - { - string text = pkg.ReadString(); - int stack = pkg.ReadInt(); - float durability = pkg.ReadSingle(); - Vector2i pos = pkg.ReadVector2i(); - bool equiped = pkg.ReadBool(); - int quality = 1; - if (num >= 101) - { - quality = pkg.ReadInt(); - } - int variant = 0; - if (num >= 102) - { - variant = pkg.ReadInt(); - } - long crafterID = 0L; - string crafterName = ""; - if (num >= 103) - { - crafterID = pkg.ReadLong(); - crafterName = pkg.ReadString(); - } - if (text != "") - { - AddItem(text, stack, durability, pos, equiped, quality, variant, crafterID, crafterName); - } - } - Changed(); - } - - public ItemDrop.ItemData AddItem(string name, int stack, int quality, int variant, long crafterID, string crafterName) - { - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(name); - if (itemPrefab == null) - { - ZLog.Log("Failed to find item prefab " + name); - return null; - } - ItemDrop component = itemPrefab.GetComponent<ItemDrop>(); - if (component == null) - { - ZLog.Log("Invalid item " + name); - return null; - } - if (FindEmptySlot(TopFirst(component.m_itemData)).x == -1) - { - return null; - } - ItemDrop.ItemData result = null; - int num = stack; - while (num > 0) - { - ZNetView.m_forceDisableInit = true; - GameObject gameObject = UnityEngine.Object.Instantiate(itemPrefab); - ZNetView.m_forceDisableInit = false; - ItemDrop component2 = gameObject.GetComponent<ItemDrop>(); - if (component2 == null) - { - ZLog.Log("Missing itemdrop in " + name); - UnityEngine.Object.Destroy(gameObject); - return null; - } - int num2 = Mathf.Min(num, component2.m_itemData.m_shared.m_maxStackSize); - num -= num2; - component2.m_itemData.m_stack = num2; - component2.m_itemData.m_quality = quality; - component2.m_itemData.m_variant = variant; - component2.m_itemData.m_durability = component2.m_itemData.GetMaxDurability(); - component2.m_itemData.m_crafterID = crafterID; - component2.m_itemData.m_crafterName = crafterName; - AddItem(component2.m_itemData); - result = component2.m_itemData; - UnityEngine.Object.Destroy(gameObject); - } - return result; - } - - private bool AddItem(string name, int stack, float durability, Vector2i pos, bool equiped, int quality, int variant, long crafterID, string crafterName) - { - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(name); - if (itemPrefab == null) - { - ZLog.Log("Failed to find item prefab " + name); - return false; - } - ZNetView.m_forceDisableInit = true; - GameObject gameObject = UnityEngine.Object.Instantiate(itemPrefab); - ZNetView.m_forceDisableInit = false; - ItemDrop component = gameObject.GetComponent<ItemDrop>(); - if (component == null) - { - ZLog.Log("Missing itemdrop in " + name); - UnityEngine.Object.Destroy(gameObject); - return false; - } - component.m_itemData.m_stack = Mathf.Min(stack, component.m_itemData.m_shared.m_maxStackSize); - component.m_itemData.m_durability = durability; - component.m_itemData.m_equiped = equiped; - component.m_itemData.m_quality = quality; - component.m_itemData.m_variant = variant; - component.m_itemData.m_crafterID = crafterID; - component.m_itemData.m_crafterName = crafterName; - AddItem(component.m_itemData, component.m_itemData.m_stack, pos.x, pos.y); - UnityEngine.Object.Destroy(gameObject); - return true; - } - - public void MoveInventoryToGrave(Inventory original) - { - m_inventory.Clear(); - m_width = original.m_width; - m_height = original.m_height; - foreach (ItemDrop.ItemData item in original.m_inventory) - { - if (!item.m_shared.m_questItem && !item.m_equiped) - { - m_inventory.Add(item); - } - } - original.m_inventory.RemoveAll((ItemDrop.ItemData x) => !x.m_shared.m_questItem && !x.m_equiped); - original.Changed(); - Changed(); - } - - private void Changed() - { - UpdateTotalWeight(); - if (m_onChanged != null) - { - m_onChanged(); - } - } - - public void RemoveAll() - { - m_inventory.Clear(); - Changed(); - } - - private void UpdateTotalWeight() - { - m_totalWeight = 0f; - foreach (ItemDrop.ItemData item in m_inventory) - { - m_totalWeight += item.GetWeight(); - } - } - - public float GetTotalWeight() - { - return m_totalWeight; - } - - public void GetBoundItems(List<ItemDrop.ItemData> bound) - { - bound.Clear(); - foreach (ItemDrop.ItemData item in m_inventory) - { - if (item.m_gridPos.y == 0) - { - bound.Add(item); - } - } - } - - public bool IsTeleportable() - { - foreach (ItemDrop.ItemData item in m_inventory) - { - if (!item.m_shared.m_teleportable) - { - return false; - } - } - return true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/InventoryGrid.cs b/Valheim_v202102/Valheim/assembly_valheim/InventoryGrid.cs deleted file mode 100644 index 1cec964..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/InventoryGrid.cs +++ /dev/null @@ -1,378 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class InventoryGrid : MonoBehaviour -{ - private class Element - { - public Vector2i m_pos; - - public GameObject m_go; - - public Image m_icon; - - public Text m_amount; - - public Text m_quality; - - public Image m_equiped; - - public Image m_queued; - - public GameObject m_selected; - - public Image m_noteleport; - - public UITooltip m_tooltip; - - public GuiBar m_durability; - - public bool m_used; - } - - public enum Modifier - { - Select, - Split, - Move - } - - public Action<InventoryGrid, ItemDrop.ItemData, Vector2i, Modifier> m_onSelected; - - public Action<InventoryGrid, ItemDrop.ItemData, Vector2i> m_onRightClick; - - public GameObject m_elementPrefab; - - public RectTransform m_gridRoot; - - public Scrollbar m_scrollbar; - - public UIGroupHandler m_uiGroup; - - public float m_elementSpace = 10f; - - private int m_width = 4; - - private int m_height = 4; - - private Vector2i m_selected = new Vector2i(0, 0); - - private Inventory m_inventory; - - private List<Element> m_elements = new List<Element>(); - - protected void Awake() - { - } - - public void ResetView() - { - RectTransform rectTransform = base.transform as RectTransform; - if (m_gridRoot.rect.height > rectTransform.rect.height) - { - m_gridRoot.pivot = new Vector2(m_gridRoot.pivot.x, 1f); - } - else - { - m_gridRoot.pivot = new Vector2(m_gridRoot.pivot.x, 0.5f); - } - m_gridRoot.anchoredPosition = new Vector2(0f, 0f); - } - - public void UpdateInventory(Inventory inventory, Player player, ItemDrop.ItemData dragItem) - { - m_inventory = inventory; - UpdateGamepad(); - UpdateGui(player, dragItem); - } - - private void UpdateGamepad() - { - if (!m_uiGroup.IsActive()) - { - return; - } - if (ZInput.GetButtonDown("JoyDPadLeft") || ZInput.GetButtonDown("JoyLStickLeft")) - { - m_selected.x = Mathf.Max(0, m_selected.x - 1); - } - if (ZInput.GetButtonDown("JoyDPadRight") || ZInput.GetButtonDown("JoyLStickRight")) - { - m_selected.x = Mathf.Min(m_width - 1, m_selected.x + 1); - } - if (ZInput.GetButtonDown("JoyDPadUp") || ZInput.GetButtonDown("JoyLStickUp")) - { - m_selected.y = Mathf.Max(0, m_selected.y - 1); - } - if (ZInput.GetButtonDown("JoyDPadDown") || ZInput.GetButtonDown("JoyLStickDown")) - { - m_selected.y = Mathf.Min(m_width - 1, m_selected.y + 1); - } - if (ZInput.GetButtonDown("JoyButtonA")) - { - Modifier arg = Modifier.Select; - if (ZInput.GetButton("JoyLTrigger")) - { - arg = Modifier.Split; - } - if (ZInput.GetButton("JoyRTrigger")) - { - arg = Modifier.Move; - } - ItemDrop.ItemData gamepadSelectedItem = GetGamepadSelectedItem(); - m_onSelected(this, gamepadSelectedItem, m_selected, arg); - } - if (ZInput.GetButtonDown("JoyButtonX")) - { - ItemDrop.ItemData gamepadSelectedItem2 = GetGamepadSelectedItem(); - m_onRightClick(this, gamepadSelectedItem2, m_selected); - } - } - - private void UpdateGui(Player player, ItemDrop.ItemData dragItem) - { - RectTransform rectTransform = base.transform as RectTransform; - int width = m_inventory.GetWidth(); - int height = m_inventory.GetHeight(); - if (m_selected.x >= width - 1) - { - m_selected.x = width - 1; - } - if (m_selected.y >= height - 1) - { - m_selected.y = height - 1; - } - if (m_width != width || m_height != height) - { - m_width = width; - m_height = height; - foreach (Element element3 in m_elements) - { - UnityEngine.Object.Destroy(element3.m_go); - } - m_elements.Clear(); - Vector2 widgetSize = GetWidgetSize(); - Vector2 vector = new Vector2(rectTransform.rect.width / 2f, 0f) - new Vector2(widgetSize.x, 0f) * 0.5f; - for (int i = 0; i < height; i++) - { - for (int j = 0; j < width; j++) - { - Vector2 vector2 = new Vector3((float)j * m_elementSpace, (float)i * (0f - m_elementSpace)); - GameObject gameObject = UnityEngine.Object.Instantiate(m_elementPrefab, m_gridRoot); - (gameObject.transform as RectTransform).anchoredPosition = vector + vector2; - UIInputHandler componentInChildren = gameObject.GetComponentInChildren<UIInputHandler>(); - componentInChildren.m_onRightDown = (Action<UIInputHandler>)Delegate.Combine(componentInChildren.m_onRightDown, new Action<UIInputHandler>(OnRightClick)); - componentInChildren.m_onLeftDown = (Action<UIInputHandler>)Delegate.Combine(componentInChildren.m_onLeftDown, new Action<UIInputHandler>(OnLeftClick)); - Text component = gameObject.transform.Find("binding").GetComponent<Text>(); - if ((bool)player && i == 0) - { - component.text = (j + 1).ToString(); - } - else - { - component.enabled = false; - } - Element element = new Element(); - element.m_pos = new Vector2i(j, i); - element.m_go = gameObject; - element.m_icon = gameObject.transform.Find("icon").GetComponent<Image>(); - element.m_amount = gameObject.transform.Find("amount").GetComponent<Text>(); - element.m_quality = gameObject.transform.Find("quality").GetComponent<Text>(); - element.m_equiped = gameObject.transform.Find("equiped").GetComponent<Image>(); - element.m_queued = gameObject.transform.Find("queued").GetComponent<Image>(); - element.m_noteleport = gameObject.transform.Find("noteleport").GetComponent<Image>(); - element.m_selected = gameObject.transform.Find("selected").gameObject; - element.m_tooltip = gameObject.GetComponent<UITooltip>(); - element.m_durability = gameObject.transform.Find("durability").GetComponent<GuiBar>(); - m_elements.Add(element); - } - } - } - foreach (Element element4 in m_elements) - { - element4.m_used = false; - } - bool flag = m_uiGroup.IsActive() && ZInput.IsGamepadActive(); - foreach (ItemDrop.ItemData allItem in m_inventory.GetAllItems()) - { - Element element2 = GetElement(allItem.m_gridPos.x, allItem.m_gridPos.y, width); - element2.m_used = true; - element2.m_icon.enabled = true; - element2.m_icon.sprite = allItem.GetIcon(); - element2.m_icon.color = ((allItem == dragItem) ? Color.grey : Color.white); - element2.m_durability.gameObject.SetActive(allItem.m_shared.m_useDurability); - if (allItem.m_shared.m_useDurability) - { - if (allItem.m_durability <= 0f) - { - element2.m_durability.SetValue(1f); - element2.m_durability.SetColor((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : new Color(0f, 0f, 0f, 0f)); - } - else - { - element2.m_durability.SetValue(allItem.GetDurabilityPercentage()); - element2.m_durability.ResetColor(); - } - } - element2.m_equiped.enabled = (bool)player && allItem.m_equiped; - element2.m_queued.enabled = (bool)player && player.IsItemQueued(allItem); - element2.m_noteleport.enabled = !allItem.m_shared.m_teleportable; - if (dragItem == null) - { - CreateItemTooltip(allItem, element2.m_tooltip); - } - element2.m_quality.enabled = allItem.m_shared.m_maxQuality > 1; - if (allItem.m_shared.m_maxQuality > 1) - { - element2.m_quality.text = allItem.m_quality.ToString(); - } - element2.m_amount.enabled = allItem.m_shared.m_maxStackSize > 1; - if (allItem.m_shared.m_maxStackSize > 1) - { - element2.m_amount.text = allItem.m_stack + "/" + allItem.m_shared.m_maxStackSize; - } - } - foreach (Element element5 in m_elements) - { - element5.m_selected.SetActive(flag && element5.m_pos == m_selected); - if (!element5.m_used) - { - element5.m_durability.gameObject.SetActive(value: false); - element5.m_icon.enabled = false; - element5.m_amount.enabled = false; - element5.m_quality.enabled = false; - element5.m_equiped.enabled = false; - element5.m_queued.enabled = false; - element5.m_noteleport.enabled = false; - element5.m_tooltip.m_text = ""; - element5.m_tooltip.m_topic = ""; - } - } - float size = (float)height * m_elementSpace; - m_gridRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size); - } - - private void CreateItemTooltip(ItemDrop.ItemData item, UITooltip tooltip) - { - tooltip.Set(item.m_shared.m_name, item.GetTooltip()); - } - - public Vector2 GetWidgetSize() - { - return new Vector2((float)m_width * m_elementSpace, (float)m_height * m_elementSpace); - } - - private void OnRightClick(UIInputHandler element) - { - GameObject go = element.gameObject; - Vector2i buttonPos = GetButtonPos(go); - ItemDrop.ItemData itemAt = m_inventory.GetItemAt(buttonPos.x, buttonPos.y); - if (m_onRightClick != null) - { - m_onRightClick(this, itemAt, buttonPos); - } - } - - private void OnLeftClick(UIInputHandler clickHandler) - { - GameObject go = clickHandler.gameObject; - Vector2i buttonPos = GetButtonPos(go); - ItemDrop.ItemData itemAt = m_inventory.GetItemAt(buttonPos.x, buttonPos.y); - Modifier arg = Modifier.Select; - if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift)) - { - arg = Modifier.Split; - } - if (Input.GetKey(KeyCode.LeftControl) || Input.GetKey(KeyCode.RightControl)) - { - arg = Modifier.Move; - } - if (m_onSelected != null) - { - m_onSelected(this, itemAt, buttonPos, arg); - } - } - - private Element GetElement(int x, int y, int width) - { - int index = y * width + x; - return m_elements[index]; - } - - private Vector2i GetButtonPos(GameObject go) - { - for (int i = 0; i < m_elements.Count; i++) - { - if (m_elements[i].m_go == go) - { - int num = i / m_width; - return new Vector2i(i - num * m_width, num); - } - } - return new Vector2i(-1, -1); - } - - public bool DropItem(Inventory fromInventory, ItemDrop.ItemData item, int amount, Vector2i pos) - { - ItemDrop.ItemData itemAt = m_inventory.GetItemAt(pos.x, pos.y); - if (itemAt == item) - { - return true; - } - if (itemAt != null && (itemAt.m_shared.m_name != item.m_shared.m_name || (item.m_shared.m_maxQuality > 1 && itemAt.m_quality != item.m_quality) || itemAt.m_shared.m_maxStackSize == 1) && item.m_stack == amount) - { - fromInventory.RemoveItem(item); - fromInventory.MoveItemToThis(m_inventory, itemAt, itemAt.m_stack, item.m_gridPos.x, item.m_gridPos.y); - m_inventory.MoveItemToThis(fromInventory, item, amount, pos.x, pos.y); - return true; - } - return m_inventory.MoveItemToThis(fromInventory, item, amount, pos.x, pos.y); - } - - public ItemDrop.ItemData GetItem(Vector2i cursorPosition) - { - foreach (Element element in m_elements) - { - if (RectTransformUtility.RectangleContainsScreenPoint(element.m_go.transform as RectTransform, cursorPosition.ToVector2())) - { - Vector2i buttonPos = GetButtonPos(element.m_go); - return m_inventory.GetItemAt(buttonPos.x, buttonPos.y); - } - } - return null; - } - - public Inventory GetInventory() - { - return m_inventory; - } - - public void SetSelection(Vector2i pos) - { - m_selected = pos; - } - - public ItemDrop.ItemData GetGamepadSelectedItem() - { - if (!m_uiGroup.IsActive()) - { - return null; - } - return m_inventory.GetItemAt(m_selected.x, m_selected.y); - } - - public RectTransform GetGamepadSelectedElement() - { - if (!m_uiGroup.IsActive()) - { - return null; - } - if (m_selected.x < 0 || m_selected.x >= m_width || m_selected.y < 0 || m_selected.y >= m_height) - { - return null; - } - return GetElement(m_selected.x, m_selected.y, m_width).m_go.transform as RectTransform; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/InventoryGui.cs b/Valheim_v202102/Valheim/assembly_valheim/InventoryGui.cs deleted file mode 100644 index c9e63e3..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/InventoryGui.cs +++ /dev/null @@ -1,1535 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class InventoryGui : MonoBehaviour -{ - private List<ItemDrop.ItemData> m_tempItemList = new List<ItemDrop.ItemData>(); - - private List<ItemDrop.ItemData> m_tempWornItems = new List<ItemDrop.ItemData>(); - - private static InventoryGui m_instance; - - [Header("Gamepad")] - public UIGroupHandler m_inventoryGroup; - - public UIGroupHandler[] m_uiGroups = new UIGroupHandler[0]; - - private int m_activeGroup = 1; - - [Header("Other")] - public Transform m_inventoryRoot; - - public RectTransform m_player; - - public RectTransform m_container; - - public GameObject m_dragItemPrefab; - - public Text m_containerName; - - public Button m_dropButton; - - public Button m_takeAllButton; - - public float m_autoCloseDistance = 4f; - - [Header("Crafting dialog")] - public Button m_tabCraft; - - public Button m_tabUpgrade; - - public GameObject m_recipeElementPrefab; - - public RectTransform m_recipeListRoot; - - public Scrollbar m_recipeListScroll; - - public float m_recipeListSpace = 30f; - - public float m_craftDuration = 2f; - - public Text m_craftingStationName; - - public Image m_craftingStationIcon; - - public RectTransform m_craftingStationLevelRoot; - - public Text m_craftingStationLevel; - - public Text m_recipeName; - - public Text m_recipeDecription; - - public Image m_recipeIcon; - - public GameObject[] m_recipeRequirementList = new GameObject[0]; - - public Button m_variantButton; - - public Button m_craftButton; - - public Button m_craftCancelButton; - - public Transform m_craftProgressPanel; - - public GuiBar m_craftProgressBar; - - [Header("Repair")] - public Button m_repairButton; - - public Transform m_repairPanel; - - public Image m_repairButtonGlow; - - public Transform m_repairPanelSelection; - - [Header("Upgrade")] - public Image m_upgradeItemIcon; - - public GuiBar m_upgradeItemDurability; - - public Text m_upgradeItemName; - - public Text m_upgradeItemQuality; - - public GameObject m_upgradeItemQualityArrow; - - public Text m_upgradeItemNextQuality; - - public Text m_upgradeItemIndex; - - public Text m_itemCraftType; - - public RectTransform m_qualityPanel; - - public Button m_qualityLevelDown; - - public Button m_qualityLevelUp; - - public Text m_qualityLevel; - - public Image m_minStationLevelIcon; - - private Color m_minStationLevelBasecolor; - - public Text m_minStationLevelText; - - public ScrollRectEnsureVisible m_recipeEnsureVisible; - - [Header("Variants dialog")] - public VariantDialog m_variantDialog; - - [Header("Skills dialog")] - public SkillsDialog m_skillsDialog; - - [Header("Texts dialog")] - public TextsDialog m_textsDialog; - - [Header("Split dialog")] - public Transform m_splitPanel; - - public Slider m_splitSlider; - - public Text m_splitAmount; - - public Button m_splitCancelButton; - - public Button m_splitOkButton; - - public Image m_splitIcon; - - public Text m_splitIconName; - - [Header("Character stats")] - public Transform m_infoPanel; - - public Text m_playerName; - - public Text m_armor; - - public Text m_weight; - - public Text m_containerWeight; - - public Toggle m_pvp; - - [Header("Trophies")] - public GameObject m_trophiesPanel; - - public RectTransform m_trophieListRoot; - - public float m_trophieListSpace = 30f; - - public GameObject m_trophieElementPrefab; - - public Scrollbar m_trophyListScroll; - - [Header("Effects")] - public EffectList m_moveItemEffects = new EffectList(); - - public EffectList m_craftItemEffects = new EffectList(); - - public EffectList m_craftItemDoneEffects = new EffectList(); - - public EffectList m_openInventoryEffects = new EffectList(); - - public EffectList m_closeInventoryEffects = new EffectList(); - - private InventoryGrid m_playerGrid; - - private InventoryGrid m_containerGrid; - - private Animator m_animator; - - private Container m_currentContainer; - - private bool m_firstContainerUpdate = true; - - private KeyValuePair<Recipe, ItemDrop.ItemData> m_selectedRecipe; - - private List<ItemDrop.ItemData> m_upgradeItems = new List<ItemDrop.ItemData>(); - - private int m_selectedVariant; - - private Recipe m_craftRecipe; - - private ItemDrop.ItemData m_craftUpgradeItem; - - private int m_craftVariant; - - private List<GameObject> m_recipeList = new List<GameObject>(); - - private List<KeyValuePair<Recipe, ItemDrop.ItemData>> m_availableRecipes = new List<KeyValuePair<Recipe, ItemDrop.ItemData>>(); - - private GameObject m_dragGo; - - private ItemDrop.ItemData m_dragItem; - - private Inventory m_dragInventory; - - private int m_dragAmount = 1; - - private ItemDrop.ItemData m_splitItem; - - private Inventory m_splitInventory; - - private float m_craftTimer = -1f; - - private float m_recipeListBaseSize; - - private int m_hiddenFrames = 9999; - - private List<GameObject> m_trophyList = new List<GameObject>(); - - private float m_trophieListBaseSize; - - public static InventoryGui instance => m_instance; - - private void Awake() - { - m_instance = this; - m_animator = GetComponent<Animator>(); - m_inventoryRoot.gameObject.SetActive(value: true); - m_container.gameObject.SetActive(value: false); - m_splitPanel.gameObject.SetActive(value: false); - m_trophiesPanel.SetActive(value: false); - m_variantDialog.gameObject.SetActive(value: false); - m_skillsDialog.gameObject.SetActive(value: false); - m_textsDialog.gameObject.SetActive(value: false); - m_playerGrid = m_player.GetComponentInChildren<InventoryGrid>(); - m_containerGrid = m_container.GetComponentInChildren<InventoryGrid>(); - InventoryGrid playerGrid = m_playerGrid; - playerGrid.m_onSelected = (Action<InventoryGrid, ItemDrop.ItemData, Vector2i, InventoryGrid.Modifier>)Delegate.Combine(playerGrid.m_onSelected, new Action<InventoryGrid, ItemDrop.ItemData, Vector2i, InventoryGrid.Modifier>(OnSelectedItem)); - InventoryGrid playerGrid2 = m_playerGrid; - playerGrid2.m_onRightClick = (Action<InventoryGrid, ItemDrop.ItemData, Vector2i>)Delegate.Combine(playerGrid2.m_onRightClick, new Action<InventoryGrid, ItemDrop.ItemData, Vector2i>(OnRightClickItem)); - InventoryGrid containerGrid = m_containerGrid; - containerGrid.m_onSelected = (Action<InventoryGrid, ItemDrop.ItemData, Vector2i, InventoryGrid.Modifier>)Delegate.Combine(containerGrid.m_onSelected, new Action<InventoryGrid, ItemDrop.ItemData, Vector2i, InventoryGrid.Modifier>(OnSelectedItem)); - InventoryGrid containerGrid2 = m_containerGrid; - containerGrid2.m_onRightClick = (Action<InventoryGrid, ItemDrop.ItemData, Vector2i>)Delegate.Combine(containerGrid2.m_onRightClick, new Action<InventoryGrid, ItemDrop.ItemData, Vector2i>(OnRightClickItem)); - m_craftButton.onClick.AddListener(OnCraftPressed); - m_craftCancelButton.onClick.AddListener(OnCraftCancelPressed); - m_dropButton.onClick.AddListener(OnDropOutside); - m_takeAllButton.onClick.AddListener(OnTakeAll); - m_repairButton.onClick.AddListener(OnRepairPressed); - m_splitSlider.onValueChanged.AddListener(OnSplitSliderChanged); - m_splitCancelButton.onClick.AddListener(OnSplitCancel); - m_splitOkButton.onClick.AddListener(OnSplitOk); - VariantDialog variantDialog = m_variantDialog; - variantDialog.m_selected = (Action<int>)Delegate.Combine(variantDialog.m_selected, new Action<int>(OnVariantSelected)); - m_recipeListBaseSize = m_recipeListRoot.rect.height; - m_trophieListBaseSize = m_trophieListRoot.rect.height; - m_minStationLevelBasecolor = m_minStationLevelText.color; - m_tabCraft.interactable = false; - m_tabUpgrade.interactable = true; - } - - private void OnDestroy() - { - m_instance = null; - } - - private void Update() - { - bool @bool = m_animator.GetBool("visible"); - if (!@bool) - { - m_hiddenFrames++; - } - Player localPlayer = Player.m_localPlayer; - if (localPlayer == null || localPlayer.IsDead() || localPlayer.InCutscene()) - { - Hide(); - return; - } - if (m_craftTimer < 0f && (Chat.instance == null || !Chat.instance.HasFocus()) && !Console.IsVisible() && !Menu.IsVisible() && (bool)TextViewer.instance && !TextViewer.instance.IsVisible() && !localPlayer.InCutscene() && !GameCamera.InFreeFly() && !Minimap.IsOpen()) - { - if (m_trophiesPanel.activeSelf && (ZInput.GetButtonDown("JoyButtonB") || Input.GetKeyDown(KeyCode.Escape))) - { - m_trophiesPanel.SetActive(value: false); - } - else if (m_skillsDialog.gameObject.activeSelf && (ZInput.GetButtonDown("JoyButtonB") || Input.GetKeyDown(KeyCode.Escape))) - { - m_skillsDialog.gameObject.SetActive(value: false); - } - else if (m_textsDialog.gameObject.activeSelf && (ZInput.GetButtonDown("JoyButtonB") || Input.GetKeyDown(KeyCode.Escape))) - { - m_textsDialog.gameObject.SetActive(value: false); - } - else if (@bool) - { - if (ZInput.GetButtonDown("Inventory") || ZInput.GetButtonDown("JoyButtonB") || ZInput.GetButtonDown("JoyButtonY") || Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("Use")) - { - ZInput.ResetButtonStatus("Inventory"); - ZInput.ResetButtonStatus("JoyButtonB"); - ZInput.ResetButtonStatus("JoyButtonY"); - ZInput.ResetButtonStatus("Use"); - Hide(); - } - } - else if (ZInput.GetButtonDown("Inventory") || ZInput.GetButtonDown("JoyButtonY")) - { - ZInput.ResetButtonStatus("Inventory"); - ZInput.ResetButtonStatus("JoyButtonY"); - localPlayer.ShowTutorial("inventory", force: true); - Show(null); - } - } - if (@bool) - { - m_hiddenFrames = 0; - UpdateGamepad(); - UpdateInventory(localPlayer); - UpdateContainer(localPlayer); - UpdateItemDrag(); - UpdateCharacterStats(localPlayer); - UpdateInventoryWeight(localPlayer); - UpdateContainerWeight(); - UpdateRecipe(localPlayer, Time.deltaTime); - UpdateRepair(); - } - } - - private void UpdateGamepad() - { - if (m_inventoryGroup.IsActive()) - { - if (ZInput.GetButtonDown("JoyTabLeft")) - { - SetActiveGroup(m_activeGroup - 1); - } - if (ZInput.GetButtonDown("JoyTabRight")) - { - SetActiveGroup(m_activeGroup + 1); - } - if (m_activeGroup == 0 && !IsContainerOpen()) - { - SetActiveGroup(1); - } - if (m_activeGroup == 3) - { - UpdateRecipeGamepadInput(); - } - } - } - - private void SetActiveGroup(int index) - { - index = Mathf.Clamp(index, 0, m_uiGroups.Length - 1); - m_activeGroup = index; - for (int i = 0; i < m_uiGroups.Length; i++) - { - m_uiGroups[i].SetActive(i == m_activeGroup); - } - } - - private void UpdateCharacterStats(Player player) - { - PlayerProfile playerProfile = Game.instance.GetPlayerProfile(); - m_playerName.text = playerProfile.GetName(); - float bodyArmor = player.GetBodyArmor(); - m_armor.text = bodyArmor.ToString(); - m_pvp.interactable = player.CanSwitchPVP(); - player.SetPVP(m_pvp.isOn); - } - - private void UpdateInventoryWeight(Player player) - { - int num = Mathf.CeilToInt(player.GetInventory().GetTotalWeight()); - int num2 = Mathf.CeilToInt(player.GetMaxCarryWeight()); - if (num > num2) - { - if (Mathf.Sin(Time.time * 10f) > 0f) - { - m_weight.text = "<color=red>" + num + "</color>/" + num2; - } - else - { - m_weight.text = num + "/" + num2; - } - } - else - { - m_weight.text = num + "/" + num2; - } - } - - private void UpdateContainerWeight() - { - if (!(m_currentContainer == null)) - { - int num = Mathf.CeilToInt(m_currentContainer.GetInventory().GetTotalWeight()); - m_containerWeight.text = num.ToString(); - } - } - - private void UpdateInventory(Player player) - { - Inventory inventory = player.GetInventory(); - m_playerGrid.UpdateInventory(inventory, player, m_dragItem); - } - - private void UpdateContainer(Player player) - { - if (!m_animator.GetBool("visible")) - { - return; - } - if ((bool)m_currentContainer && m_currentContainer.IsOwner()) - { - m_currentContainer.SetInUse(inUse: true); - m_container.gameObject.SetActive(value: true); - m_containerGrid.UpdateInventory(m_currentContainer.GetInventory(), null, m_dragItem); - m_containerName.text = Localization.instance.Localize(m_currentContainer.GetInventory().GetName()); - if (m_firstContainerUpdate) - { - m_containerGrid.ResetView(); - m_firstContainerUpdate = false; - } - if (Vector3.Distance(m_currentContainer.transform.position, player.transform.position) > m_autoCloseDistance) - { - CloseContainer(); - } - } - else - { - m_container.gameObject.SetActive(value: false); - } - } - - private RectTransform GetSelectedGamepadElement() - { - RectTransform gamepadSelectedElement = m_playerGrid.GetGamepadSelectedElement(); - if ((bool)gamepadSelectedElement) - { - return gamepadSelectedElement; - } - if (m_container.gameObject.activeSelf) - { - return m_containerGrid.GetGamepadSelectedElement(); - } - return null; - } - - private void UpdateItemDrag() - { - if (!m_dragGo) - { - return; - } - if (ZInput.IsGamepadActive() && !ZInput.IsMouseActive()) - { - RectTransform selectedGamepadElement = GetSelectedGamepadElement(); - if ((bool)selectedGamepadElement) - { - Vector3[] array = new Vector3[4]; - selectedGamepadElement.GetWorldCorners(array); - m_dragGo.transform.position = array[2] + new Vector3(0f, 32f, 0f); - } - else - { - m_dragGo.transform.position = new Vector3(-99999f, 0f, 0f); - } - } - else - { - m_dragGo.transform.position = Input.mousePosition; - } - Image component = m_dragGo.transform.Find("icon").GetComponent<Image>(); - Text component2 = m_dragGo.transform.Find("name").GetComponent<Text>(); - Text component3 = m_dragGo.transform.Find("amount").GetComponent<Text>(); - component.sprite = m_dragItem.GetIcon(); - component2.text = m_dragItem.m_shared.m_name; - component3.text = ((m_dragAmount > 1) ? m_dragAmount.ToString() : ""); - if (Input.GetMouseButton(1)) - { - SetupDragItem(null, null, 1); - } - } - - private void OnTakeAll() - { - if ((bool)m_currentContainer) - { - SetupDragItem(null, null, 1); - Inventory inventory = m_currentContainer.GetInventory(); - Player.m_localPlayer.GetInventory().MoveAll(inventory); - } - } - - private void OnDropOutside() - { - if ((bool)m_dragGo) - { - ZLog.Log("Drop item " + m_dragItem.m_shared.m_name); - if (!m_dragInventory.ContainsItem(m_dragItem)) - { - SetupDragItem(null, null, 1); - } - else if (Player.m_localPlayer.DropItem(m_dragInventory, m_dragItem, m_dragAmount)) - { - m_moveItemEffects.Create(base.transform.position, Quaternion.identity); - SetupDragItem(null, null, 1); - UpdateCraftingPanel(); - } - } - } - - private void OnRightClickItem(InventoryGrid grid, ItemDrop.ItemData item, Vector2i pos) - { - if (item != null && (bool)Player.m_localPlayer) - { - Player.m_localPlayer.UseItem(grid.GetInventory(), item, fromInventoryGui: true); - } - } - - private void OnSelectedItem(InventoryGrid grid, ItemDrop.ItemData item, Vector2i pos, InventoryGrid.Modifier mod) - { - Player localPlayer = Player.m_localPlayer; - if ((bool)m_dragGo) - { - m_moveItemEffects.Create(base.transform.position, Quaternion.identity); - bool flag = localPlayer.IsItemEquiped(m_dragItem); - bool flag2 = item != null && localPlayer.IsItemEquiped(item); - Vector2i gridPos = m_dragItem.m_gridPos; - if ((m_dragItem.m_shared.m_questItem || (item != null && item.m_shared.m_questItem)) && m_dragInventory != grid.GetInventory()) - { - return; - } - if (!m_dragInventory.ContainsItem(m_dragItem)) - { - SetupDragItem(null, null, 1); - return; - } - localPlayer.RemoveFromEquipQueue(item); - localPlayer.RemoveFromEquipQueue(m_dragItem); - localPlayer.UnequipItem(m_dragItem, triggerEquipEffects: false); - localPlayer.UnequipItem(item, triggerEquipEffects: false); - bool num = grid.DropItem(m_dragInventory, m_dragItem, m_dragAmount, pos); - if (m_dragItem.m_stack < m_dragAmount) - { - m_dragAmount = m_dragItem.m_stack; - } - if (flag) - { - ItemDrop.ItemData itemAt = grid.GetInventory().GetItemAt(pos.x, pos.y); - if (itemAt != null) - { - localPlayer.EquipItem(itemAt, triggerEquipEffects: false); - } - if (localPlayer.GetInventory().ContainsItem(m_dragItem)) - { - localPlayer.EquipItem(m_dragItem, triggerEquipEffects: false); - } - } - if (flag2) - { - ItemDrop.ItemData itemAt2 = m_dragInventory.GetItemAt(gridPos.x, gridPos.y); - if (itemAt2 != null) - { - localPlayer.EquipItem(itemAt2, triggerEquipEffects: false); - } - if (localPlayer.GetInventory().ContainsItem(item)) - { - localPlayer.EquipItem(item, triggerEquipEffects: false); - } - } - if (num) - { - SetupDragItem(null, null, 1); - UpdateCraftingPanel(); - } - } - else - { - if (item == null) - { - return; - } - switch (mod) - { - case InventoryGrid.Modifier.Move: - if (item.m_shared.m_questItem) - { - return; - } - if (m_currentContainer != null) - { - localPlayer.RemoveFromEquipQueue(item); - localPlayer.UnequipItem(item); - if (grid.GetInventory() == m_currentContainer.GetInventory()) - { - localPlayer.GetInventory().MoveItemToThis(grid.GetInventory(), item); - } - else - { - m_currentContainer.GetInventory().MoveItemToThis(localPlayer.GetInventory(), item); - } - m_moveItemEffects.Create(base.transform.position, Quaternion.identity); - } - else if (Player.m_localPlayer.DropItem(localPlayer.GetInventory(), item, item.m_stack)) - { - m_moveItemEffects.Create(base.transform.position, Quaternion.identity); - } - return; - case InventoryGrid.Modifier.Split: - if (item.m_stack > 1) - { - ShowSplitDialog(item, grid.GetInventory()); - return; - } - break; - } - SetupDragItem(item, grid.GetInventory(), item.m_stack); - } - } - - public static bool IsVisible() - { - if ((bool)m_instance) - { - return m_instance.m_hiddenFrames <= 1; - } - return false; - } - - public bool IsContainerOpen() - { - return m_currentContainer != null; - } - - public void Show(Container container) - { - Hud.HidePieceSelection(); - m_animator.SetBool("visible", value: true); - SetActiveGroup(1); - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - SetupCrafting(); - } - m_currentContainer = container; - m_hiddenFrames = 0; - if ((bool)localPlayer) - { - m_openInventoryEffects.Create(localPlayer.transform.position, Quaternion.identity); - } - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "Inventory", 0L); - } - - public void Hide() - { - if (m_animator.GetBool("visible")) - { - m_craftTimer = -1f; - m_animator.SetBool("visible", value: false); - m_trophiesPanel.SetActive(value: false); - m_variantDialog.gameObject.SetActive(value: false); - m_skillsDialog.gameObject.SetActive(value: false); - m_textsDialog.gameObject.SetActive(value: false); - m_splitPanel.gameObject.SetActive(value: false); - SetupDragItem(null, null, 1); - if ((bool)m_currentContainer) - { - m_currentContainer.SetInUse(inUse: false); - m_currentContainer = null; - } - if ((bool)Player.m_localPlayer) - { - m_closeInventoryEffects.Create(Player.m_localPlayer.transform.position, Quaternion.identity); - } - GoogleAnalyticsV4.instance.LogEvent("Screen", "Exit", "Inventory", 0L); - } - } - - private void CloseContainer() - { - if (m_dragInventory != null && m_dragInventory != Player.m_localPlayer.GetInventory()) - { - SetupDragItem(null, null, 1); - } - if ((bool)m_currentContainer) - { - m_currentContainer.SetInUse(inUse: false); - m_currentContainer = null; - } - m_splitPanel.gameObject.SetActive(value: false); - m_firstContainerUpdate = true; - m_container.gameObject.SetActive(value: false); - } - - private void SetupCrafting() - { - UpdateCraftingPanel(focusView: true); - } - - private void UpdateCraftingPanel(bool focusView = false) - { - Player localPlayer = Player.m_localPlayer; - if (!localPlayer.GetCurrentCraftingStation() && !localPlayer.NoCostCheat()) - { - m_tabCraft.interactable = false; - m_tabUpgrade.interactable = true; - m_tabUpgrade.gameObject.SetActive(value: false); - } - else - { - m_tabUpgrade.gameObject.SetActive(value: true); - } - List<Recipe> available = new List<Recipe>(); - localPlayer.GetAvailableRecipes(ref available); - UpdateRecipeList(available); - if (m_availableRecipes.Count > 0) - { - if (m_selectedRecipe.Key != null) - { - int selectedRecipeIndex = GetSelectedRecipeIndex(); - SetRecipe(selectedRecipeIndex, focusView); - } - else - { - SetRecipe(0, focusView); - } - } - else - { - SetRecipe(-1, focusView); - } - } - - private void UpdateRecipeList(List<Recipe> recipes) - { - Player localPlayer = Player.m_localPlayer; - m_availableRecipes.Clear(); - foreach (GameObject recipe3 in m_recipeList) - { - UnityEngine.Object.Destroy(recipe3); - } - m_recipeList.Clear(); - if (InCraftTab()) - { - bool[] array = new bool[recipes.Count]; - for (int i = 0; i < recipes.Count; i++) - { - Recipe recipe = recipes[i]; - array[i] = localPlayer.HaveRequirements(recipe, discover: false, 1); - } - for (int j = 0; j < recipes.Count; j++) - { - if (array[j]) - { - AddRecipeToList(localPlayer, recipes[j], null, canCraft: true); - } - } - for (int k = 0; k < recipes.Count; k++) - { - if (!array[k]) - { - AddRecipeToList(localPlayer, recipes[k], null, canCraft: false); - } - } - } - else - { - List<KeyValuePair<Recipe, ItemDrop.ItemData>> list = new List<KeyValuePair<Recipe, ItemDrop.ItemData>>(); - List<KeyValuePair<Recipe, ItemDrop.ItemData>> list2 = new List<KeyValuePair<Recipe, ItemDrop.ItemData>>(); - for (int l = 0; l < recipes.Count; l++) - { - Recipe recipe2 = recipes[l]; - if (recipe2.m_item.m_itemData.m_shared.m_maxQuality <= 1) - { - continue; - } - m_tempItemList.Clear(); - localPlayer.GetInventory().GetAllItems(recipe2.m_item.m_itemData.m_shared.m_name, m_tempItemList); - foreach (ItemDrop.ItemData tempItem in m_tempItemList) - { - if (tempItem.m_quality < tempItem.m_shared.m_maxQuality && localPlayer.HaveRequirements(recipe2, discover: false, tempItem.m_quality + 1)) - { - list.Add(new KeyValuePair<Recipe, ItemDrop.ItemData>(recipe2, tempItem)); - } - else - { - list2.Add(new KeyValuePair<Recipe, ItemDrop.ItemData>(recipe2, tempItem)); - } - } - } - foreach (KeyValuePair<Recipe, ItemDrop.ItemData> item in list) - { - AddRecipeToList(localPlayer, item.Key, item.Value, canCraft: true); - } - foreach (KeyValuePair<Recipe, ItemDrop.ItemData> item2 in list2) - { - AddRecipeToList(localPlayer, item2.Key, item2.Value, canCraft: false); - } - } - float b = (float)m_recipeList.Count * m_recipeListSpace; - b = Mathf.Max(m_recipeListBaseSize, b); - m_recipeListRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, b); - } - - private void AddRecipeToList(Player player, Recipe recipe, ItemDrop.ItemData item, bool canCraft) - { - int count = m_recipeList.Count; - GameObject element = UnityEngine.Object.Instantiate(m_recipeElementPrefab, m_recipeListRoot); - element.SetActive(value: true); - (element.transform as RectTransform).anchoredPosition = new Vector2(0f, (float)count * (0f - m_recipeListSpace)); - Image component = element.transform.Find("icon").GetComponent<Image>(); - component.sprite = recipe.m_item.m_itemData.GetIcon(); - component.color = (canCraft ? Color.white : new Color(1f, 0f, 1f, 0f)); - Text component2 = element.transform.Find("name").GetComponent<Text>(); - string text = Localization.instance.Localize(recipe.m_item.m_itemData.m_shared.m_name); - if (recipe.m_amount > 1) - { - text = text + " x" + recipe.m_amount; - } - component2.text = text; - component2.color = (canCraft ? Color.white : new Color(0.66f, 0.66f, 0.66f, 1f)); - GuiBar component3 = element.transform.Find("Durability").GetComponent<GuiBar>(); - if (item != null && item.m_shared.m_useDurability && item.m_durability < item.GetMaxDurability()) - { - component3.gameObject.SetActive(value: true); - component3.SetValue(item.GetDurabilityPercentage()); - } - else - { - component3.gameObject.SetActive(value: false); - } - Text component4 = element.transform.Find("QualityLevel").GetComponent<Text>(); - if (item != null) - { - component4.gameObject.SetActive(value: true); - component4.text = item.m_quality.ToString(); - } - else - { - component4.gameObject.SetActive(value: false); - } - element.GetComponent<Button>().onClick.AddListener(delegate - { - OnSelectedRecipe(element); - }); - m_recipeList.Add(element); - m_availableRecipes.Add(new KeyValuePair<Recipe, ItemDrop.ItemData>(recipe, item)); - } - - private void OnSelectedRecipe(GameObject button) - { - int index = FindSelectedRecipe(button); - SetRecipe(index, center: false); - } - - private void UpdateRecipeGamepadInput() - { - if (m_availableRecipes.Count > 0) - { - if (ZInput.GetButtonDown("JoyLStickDown")) - { - SetRecipe(Mathf.Min(m_availableRecipes.Count - 1, GetSelectedRecipeIndex() + 1), center: true); - } - if (ZInput.GetButtonDown("JoyLStickUp")) - { - SetRecipe(Mathf.Max(0, GetSelectedRecipeIndex() - 1), center: true); - } - } - } - - private int GetSelectedRecipeIndex() - { - int result = 0; - for (int i = 0; i < m_availableRecipes.Count; i++) - { - if (m_availableRecipes[i].Key == m_selectedRecipe.Key && m_availableRecipes[i].Value == m_selectedRecipe.Value) - { - result = i; - } - } - return result; - } - - private void SetRecipe(int index, bool center) - { - ZLog.Log("Setting selected recipe " + index); - for (int i = 0; i < m_recipeList.Count; i++) - { - bool active = i == index; - m_recipeList[i].transform.Find("selected").gameObject.SetActive(active); - } - if (center && index >= 0) - { - m_recipeEnsureVisible.CenterOnItem(m_recipeList[index].transform as RectTransform); - } - if (index < 0) - { - m_selectedRecipe = new KeyValuePair<Recipe, ItemDrop.ItemData>(null, null); - m_selectedVariant = 0; - return; - } - KeyValuePair<Recipe, ItemDrop.ItemData> selectedRecipe = m_availableRecipes[index]; - if (selectedRecipe.Key != m_selectedRecipe.Key || selectedRecipe.Value != m_selectedRecipe.Value) - { - m_selectedRecipe = selectedRecipe; - m_selectedVariant = 0; - } - } - - private void UpdateRecipe(Player player, float dt) - { - CraftingStation currentCraftingStation = player.GetCurrentCraftingStation(); - if ((bool)currentCraftingStation) - { - m_craftingStationName.text = Localization.instance.Localize(currentCraftingStation.m_name); - m_craftingStationIcon.gameObject.SetActive(value: true); - m_craftingStationIcon.sprite = currentCraftingStation.m_icon; - int level = currentCraftingStation.GetLevel(); - m_craftingStationLevel.text = level.ToString(); - m_craftingStationLevelRoot.gameObject.SetActive(value: true); - } - else - { - m_craftingStationName.text = Localization.instance.Localize("$hud_crafting"); - m_craftingStationIcon.gameObject.SetActive(value: false); - m_craftingStationLevelRoot.gameObject.SetActive(value: false); - } - if ((bool)m_selectedRecipe.Key) - { - m_recipeIcon.enabled = true; - m_recipeName.enabled = true; - m_recipeDecription.enabled = true; - ItemDrop.ItemData value = m_selectedRecipe.Value; - int num = ((value == null) ? 1 : (value.m_quality + 1)); - bool flag = num <= m_selectedRecipe.Key.m_item.m_itemData.m_shared.m_maxQuality; - int num2 = value?.m_variant ?? m_selectedVariant; - m_recipeIcon.sprite = m_selectedRecipe.Key.m_item.m_itemData.m_shared.m_icons[num2]; - string text = Localization.instance.Localize(m_selectedRecipe.Key.m_item.m_itemData.m_shared.m_name); - if (m_selectedRecipe.Key.m_amount > 1) - { - text = text + " x" + m_selectedRecipe.Key.m_amount; - } - m_recipeName.text = text; - m_recipeDecription.text = Localization.instance.Localize(ItemDrop.ItemData.GetTooltip(m_selectedRecipe.Key.m_item.m_itemData, num, crafting: true)); - if (value != null) - { - m_itemCraftType.gameObject.SetActive(value: true); - if (value.m_quality >= value.m_shared.m_maxQuality) - { - m_itemCraftType.text = Localization.instance.Localize("$inventory_maxquality"); - } - else - { - string text2 = Localization.instance.Localize(value.m_shared.m_name); - m_itemCraftType.text = Localization.instance.Localize("$inventory_upgrade", text2, (value.m_quality + 1).ToString()); - } - } - else - { - m_itemCraftType.gameObject.SetActive(value: false); - } - m_variantButton.gameObject.SetActive(m_selectedRecipe.Key.m_item.m_itemData.m_shared.m_variants > 1 && m_selectedRecipe.Value == null); - SetupRequirementList(num, player, flag); - int requiredStationLevel = m_selectedRecipe.Key.GetRequiredStationLevel(num); - CraftingStation requiredStation = m_selectedRecipe.Key.GetRequiredStation(num); - if (requiredStation != null && flag) - { - m_minStationLevelIcon.gameObject.SetActive(value: true); - m_minStationLevelText.text = requiredStationLevel.ToString(); - if (currentCraftingStation == null || currentCraftingStation.GetLevel() < requiredStationLevel) - { - m_minStationLevelText.color = ((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : m_minStationLevelBasecolor); - } - else - { - m_minStationLevelText.color = m_minStationLevelBasecolor; - } - } - else - { - m_minStationLevelIcon.gameObject.SetActive(value: false); - } - bool flag2 = player.HaveRequirements(m_selectedRecipe.Key, discover: false, num); - bool flag3 = m_selectedRecipe.Value != null || player.GetInventory().HaveEmptySlot(); - bool flag4 = !requiredStation || ((bool)currentCraftingStation && currentCraftingStation.CheckUsable(player, showMessage: false)); - m_craftButton.interactable = ((flag2 && flag4) || player.NoCostCheat()) && flag3 && flag; - Text componentInChildren = m_craftButton.GetComponentInChildren<Text>(); - if (num > 1) - { - componentInChildren.text = Localization.instance.Localize("$inventory_upgradebutton"); - } - else - { - componentInChildren.text = Localization.instance.Localize("$inventory_craftbutton"); - } - UITooltip component = m_craftButton.GetComponent<UITooltip>(); - if (!flag3) - { - component.m_text = Localization.instance.Localize("$inventory_full"); - } - else if (!flag2) - { - component.m_text = Localization.instance.Localize("$msg_missingrequirement"); - } - else if (!flag4) - { - component.m_text = Localization.instance.Localize("$msg_missingstation"); - } - else - { - component.m_text = ""; - } - } - else - { - m_recipeIcon.enabled = false; - m_recipeName.enabled = false; - m_recipeDecription.enabled = false; - m_qualityPanel.gameObject.SetActive(value: false); - m_minStationLevelIcon.gameObject.SetActive(value: false); - m_craftButton.GetComponent<UITooltip>().m_text = ""; - m_variantButton.gameObject.SetActive(value: false); - m_itemCraftType.gameObject.SetActive(value: false); - for (int i = 0; i < m_recipeRequirementList.Length; i++) - { - HideRequirement(m_recipeRequirementList[i].transform); - } - m_craftButton.interactable = false; - } - if (m_craftTimer < 0f) - { - m_craftProgressPanel.gameObject.SetActive(value: false); - m_craftButton.gameObject.SetActive(value: true); - return; - } - m_craftButton.gameObject.SetActive(value: false); - m_craftProgressPanel.gameObject.SetActive(value: true); - m_craftProgressBar.SetMaxValue(m_craftDuration); - m_craftProgressBar.SetValue(m_craftTimer); - m_craftTimer += dt; - if (m_craftTimer >= m_craftDuration) - { - DoCrafting(player); - m_craftTimer = -1f; - } - } - - private void SetupRequirementList(int quality, Player player, bool allowedQuality) - { - int i = 0; - if (allowedQuality) - { - Piece.Requirement[] resources = m_selectedRecipe.Key.m_resources; - foreach (Piece.Requirement req in resources) - { - if (SetupRequirement(m_recipeRequirementList[i].transform, req, player, craft: true, quality)) - { - i++; - } - } - } - for (; i < m_recipeRequirementList.Length; i++) - { - HideRequirement(m_recipeRequirementList[i].transform); - } - } - - private void SetupUpgradeItem(Recipe recipe, ItemDrop.ItemData item) - { - if (item == null) - { - m_upgradeItemIcon.sprite = recipe.m_item.m_itemData.m_shared.m_icons[m_selectedVariant]; - m_upgradeItemName.text = Localization.instance.Localize(recipe.m_item.m_itemData.m_shared.m_name); - m_upgradeItemNextQuality.text = ((recipe.m_item.m_itemData.m_shared.m_maxQuality > 1) ? "1" : ""); - m_itemCraftType.text = Localization.instance.Localize("$inventory_new"); - m_upgradeItemDurability.gameObject.SetActive(recipe.m_item.m_itemData.m_shared.m_useDurability); - if (recipe.m_item.m_itemData.m_shared.m_useDurability) - { - m_upgradeItemDurability.SetValue(1f); - } - return; - } - m_upgradeItemIcon.sprite = item.GetIcon(); - m_upgradeItemName.text = Localization.instance.Localize(item.m_shared.m_name); - m_upgradeItemNextQuality.text = item.m_quality.ToString(); - m_upgradeItemDurability.gameObject.SetActive(item.m_shared.m_useDurability); - if (item.m_shared.m_useDurability) - { - m_upgradeItemDurability.SetValue(item.GetDurabilityPercentage()); - } - if (item.m_quality >= item.m_shared.m_maxQuality) - { - m_itemCraftType.text = Localization.instance.Localize("$inventory_maxquality"); - } - else - { - m_itemCraftType.text = Localization.instance.Localize("$inventory_upgrade"); - } - } - - public static bool SetupRequirement(Transform elementRoot, Piece.Requirement req, Player player, bool craft, int quality) - { - Image component = elementRoot.transform.Find("res_icon").GetComponent<Image>(); - Text component2 = elementRoot.transform.Find("res_name").GetComponent<Text>(); - Text component3 = elementRoot.transform.Find("res_amount").GetComponent<Text>(); - UITooltip component4 = elementRoot.GetComponent<UITooltip>(); - if (req.m_resItem != null) - { - component.gameObject.SetActive(value: true); - component2.gameObject.SetActive(value: true); - component3.gameObject.SetActive(value: true); - component.sprite = req.m_resItem.m_itemData.GetIcon(); - component.color = Color.white; - component4.m_text = Localization.instance.Localize(req.m_resItem.m_itemData.m_shared.m_name); - component2.text = Localization.instance.Localize(req.m_resItem.m_itemData.m_shared.m_name); - int num = player.GetInventory().CountItems(req.m_resItem.m_itemData.m_shared.m_name); - int amount = req.GetAmount(quality); - if (amount <= 0) - { - HideRequirement(elementRoot); - return false; - } - component3.text = amount.ToString(); - if (num < amount) - { - component3.color = ((Mathf.Sin(Time.time * 10f) > 0f) ? Color.red : Color.white); - } - else - { - component3.color = Color.white; - } - } - return true; - } - - public static void HideRequirement(Transform elementRoot) - { - Image component = elementRoot.transform.Find("res_icon").GetComponent<Image>(); - Text component2 = elementRoot.transform.Find("res_name").GetComponent<Text>(); - Text component3 = elementRoot.transform.Find("res_amount").GetComponent<Text>(); - elementRoot.GetComponent<UITooltip>().m_text = ""; - component.gameObject.SetActive(value: false); - component2.gameObject.SetActive(value: false); - component3.gameObject.SetActive(value: false); - } - - private void DoCrafting(Player player) - { - if (m_craftRecipe == null) - { - return; - } - int num = ((m_craftUpgradeItem == null) ? 1 : (m_craftUpgradeItem.m_quality + 1)); - if (num > m_craftRecipe.m_item.m_itemData.m_shared.m_maxQuality || (!player.HaveRequirements(m_craftRecipe, discover: false, num) && !player.NoCostCheat()) || (m_craftUpgradeItem != null && !player.GetInventory().ContainsItem(m_craftUpgradeItem)) || (m_craftUpgradeItem == null && !player.GetInventory().HaveEmptySlot())) - { - return; - } - if (m_craftRecipe.m_item.m_itemData.m_shared.m_dlc.Length > 0 && !DLCMan.instance.IsDLCInstalled(m_craftRecipe.m_item.m_itemData.m_shared.m_dlc)) - { - player.Message(MessageHud.MessageType.Center, "$msg_dlcrequired"); - return; - } - int variant = m_craftVariant; - if (m_craftUpgradeItem != null) - { - variant = m_craftUpgradeItem.m_variant; - player.UnequipItem(m_craftUpgradeItem); - player.GetInventory().RemoveItem(m_craftUpgradeItem); - } - long playerID = player.GetPlayerID(); - string playerName = player.GetPlayerName(); - if (player.GetInventory().AddItem(m_craftRecipe.m_item.gameObject.name, m_craftRecipe.m_amount, num, variant, playerID, playerName) != null) - { - if (!player.NoCostCheat()) - { - player.ConsumeResources(m_craftRecipe.m_resources, num); - } - UpdateCraftingPanel(); - } - CraftingStation currentCraftingStation = Player.m_localPlayer.GetCurrentCraftingStation(); - if ((bool)currentCraftingStation) - { - currentCraftingStation.m_craftItemDoneEffects.Create(player.transform.position, Quaternion.identity); - } - else - { - m_craftItemDoneEffects.Create(player.transform.position, Quaternion.identity); - } - Game.instance.GetPlayerProfile().m_playerStats.m_crafts++; - GoogleAnalyticsV4.instance.LogEvent("Game", "Crafted", m_craftRecipe.m_item.m_itemData.m_shared.m_name, num); - } - - private int FindSelectedRecipe(GameObject button) - { - for (int i = 0; i < m_recipeList.Count; i++) - { - if (m_recipeList[i] == button) - { - return i; - } - } - return -1; - } - - private void OnCraftCancelPressed() - { - if (m_craftTimer >= 0f) - { - m_craftTimer = -1f; - } - } - - private void OnCraftPressed() - { - if (!m_selectedRecipe.Key) - { - return; - } - m_craftRecipe = m_selectedRecipe.Key; - m_craftUpgradeItem = m_selectedRecipe.Value; - m_craftVariant = m_selectedVariant; - m_craftTimer = 0f; - if ((bool)m_craftRecipe.m_craftingStation) - { - CraftingStation currentCraftingStation = Player.m_localPlayer.GetCurrentCraftingStation(); - if ((bool)currentCraftingStation) - { - currentCraftingStation.m_craftItemEffects.Create(Player.m_localPlayer.transform.position, Quaternion.identity); - } - } - else - { - m_craftItemEffects.Create(Player.m_localPlayer.transform.position, Quaternion.identity); - } - } - - private void OnRepairPressed() - { - RepairOneItem(); - UpdateRepair(); - } - - private void UpdateRepair() - { - if (Player.m_localPlayer.GetCurrentCraftingStation() == null && !Player.m_localPlayer.NoCostCheat()) - { - m_repairPanel.gameObject.SetActive(value: false); - m_repairPanelSelection.gameObject.SetActive(value: false); - m_repairButton.gameObject.SetActive(value: false); - return; - } - m_repairButton.gameObject.SetActive(value: true); - m_repairPanel.gameObject.SetActive(value: true); - m_repairPanelSelection.gameObject.SetActive(value: true); - if (HaveRepairableItems()) - { - m_repairButton.interactable = true; - m_repairButtonGlow.gameObject.SetActive(value: true); - Color color = m_repairButtonGlow.color; - color.a = 0.5f + Mathf.Sin(Time.time * 5f) * 0.5f; - m_repairButtonGlow.color = color; - } - else - { - m_repairButton.interactable = false; - m_repairButtonGlow.gameObject.SetActive(value: false); - } - } - - private void RepairOneItem() - { - if (Player.m_localPlayer == null) - { - return; - } - CraftingStation currentCraftingStation = Player.m_localPlayer.GetCurrentCraftingStation(); - if ((currentCraftingStation == null && !Player.m_localPlayer.NoCostCheat()) || ((bool)currentCraftingStation && !currentCraftingStation.CheckUsable(Player.m_localPlayer, showMessage: false))) - { - return; - } - m_tempWornItems.Clear(); - Player.m_localPlayer.GetInventory().GetWornItems(m_tempWornItems); - foreach (ItemDrop.ItemData tempWornItem in m_tempWornItems) - { - if (CanRepair(tempWornItem)) - { - tempWornItem.m_durability = tempWornItem.GetMaxDurability(); - if ((bool)currentCraftingStation) - { - currentCraftingStation.m_repairItemDoneEffects.Create(currentCraftingStation.transform.position, Quaternion.identity); - } - Player.m_localPlayer.Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_repaired", tempWornItem.m_shared.m_name)); - return; - } - } - Player.m_localPlayer.Message(MessageHud.MessageType.Center, "No more item to repair"); - } - - private bool HaveRepairableItems() - { - if (Player.m_localPlayer == null) - { - return false; - } - CraftingStation currentCraftingStation = Player.m_localPlayer.GetCurrentCraftingStation(); - if (currentCraftingStation == null && !Player.m_localPlayer.NoCostCheat()) - { - return false; - } - if ((bool)currentCraftingStation && !currentCraftingStation.CheckUsable(Player.m_localPlayer, showMessage: false)) - { - return false; - } - m_tempWornItems.Clear(); - Player.m_localPlayer.GetInventory().GetWornItems(m_tempWornItems); - foreach (ItemDrop.ItemData tempWornItem in m_tempWornItems) - { - if (CanRepair(tempWornItem)) - { - return true; - } - } - return false; - } - - private bool CanRepair(ItemDrop.ItemData item) - { - if (Player.m_localPlayer == null) - { - return false; - } - if (!item.m_shared.m_canBeReparied) - { - return false; - } - if (Player.m_localPlayer.NoCostCheat()) - { - return true; - } - CraftingStation currentCraftingStation = Player.m_localPlayer.GetCurrentCraftingStation(); - if (currentCraftingStation == null) - { - return false; - } - Recipe recipe = ObjectDB.instance.GetRecipe(item); - if (recipe == null) - { - return false; - } - if (recipe.m_craftingStation == null && recipe.m_repairStation == null) - { - return false; - } - if ((recipe.m_repairStation != null && recipe.m_repairStation.m_name == currentCraftingStation.m_name) || (recipe.m_craftingStation != null && recipe.m_craftingStation.m_name == currentCraftingStation.m_name)) - { - if (currentCraftingStation.GetLevel() < recipe.m_minStationLevel) - { - return false; - } - return true; - } - return false; - } - - private void SetupDragItem(ItemDrop.ItemData item, Inventory inventory, int amount) - { - if ((bool)m_dragGo) - { - UnityEngine.Object.Destroy(m_dragGo); - m_dragGo = null; - m_dragItem = null; - m_dragInventory = null; - m_dragAmount = 0; - } - if (item != null) - { - m_dragGo = UnityEngine.Object.Instantiate(m_dragItemPrefab, base.transform); - m_dragItem = item; - m_dragInventory = inventory; - m_dragAmount = amount; - m_moveItemEffects.Create(base.transform.position, Quaternion.identity); - UITooltip.HideTooltip(); - } - } - - private void ShowSplitDialog(ItemDrop.ItemData item, Inventory fromIventory) - { - m_splitSlider.minValue = 1f; - m_splitSlider.maxValue = item.m_stack; - m_splitSlider.value = Mathf.CeilToInt((float)item.m_stack / 2f); - m_splitIcon.sprite = item.GetIcon(); - m_splitIconName.text = Localization.instance.Localize(item.m_shared.m_name); - m_splitPanel.gameObject.SetActive(value: true); - m_splitItem = item; - m_splitInventory = fromIventory; - OnSplitSliderChanged(m_splitSlider.value); - } - - private void OnSplitSliderChanged(float value) - { - m_splitAmount.text = (int)value + "/" + (int)m_splitSlider.maxValue; - } - - private void OnSplitCancel() - { - m_splitItem = null; - m_splitInventory = null; - m_splitPanel.gameObject.SetActive(value: false); - } - - private void OnSplitOk() - { - SetupDragItem(m_splitItem, m_splitInventory, (int)m_splitSlider.value); - m_splitItem = null; - m_splitInventory = null; - m_splitPanel.gameObject.SetActive(value: false); - } - - public void OnOpenSkills() - { - if ((bool)Player.m_localPlayer) - { - m_skillsDialog.Setup(Player.m_localPlayer); - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "Skills", 0L); - } - } - - public void OnOpenTexts() - { - if ((bool)Player.m_localPlayer) - { - m_textsDialog.Setup(Player.m_localPlayer); - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "Texts", 0L); - } - } - - public void OnOpenTrophies() - { - m_trophiesPanel.SetActive(value: true); - UpdateTrophyList(); - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "Trophies", 0L); - } - - public void OnCloseTrophies() - { - m_trophiesPanel.SetActive(value: false); - } - - private void UpdateTrophyList() - { - if (Player.m_localPlayer == null) - { - return; - } - foreach (GameObject trophy in m_trophyList) - { - UnityEngine.Object.Destroy(trophy); - } - m_trophyList.Clear(); - List<string> trophies = Player.m_localPlayer.GetTrophies(); - float num = 0f; - for (int i = 0; i < trophies.Count; i++) - { - string text = trophies[i]; - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(text); - if (itemPrefab == null) - { - ZLog.LogWarning("Missing trophy prefab:" + text); - continue; - } - ItemDrop component = itemPrefab.GetComponent<ItemDrop>(); - GameObject gameObject = UnityEngine.Object.Instantiate(m_trophieElementPrefab, m_trophieListRoot); - gameObject.SetActive(value: true); - RectTransform rectTransform = gameObject.transform as RectTransform; - rectTransform.anchoredPosition = new Vector2((float)component.m_itemData.m_shared.m_trophyPos.x * m_trophieListSpace, (float)component.m_itemData.m_shared.m_trophyPos.y * (0f - m_trophieListSpace)); - num = Mathf.Min(num, rectTransform.anchoredPosition.y - m_trophieListSpace); - string text2 = Localization.instance.Localize(component.m_itemData.m_shared.m_name); - if (text2.EndsWith(" trophy")) - { - text2 = text2.Remove(text2.Length - 7); - } - rectTransform.Find("icon_bkg/icon").GetComponent<Image>().sprite = component.m_itemData.GetIcon(); - rectTransform.Find("name").GetComponent<Text>().text = text2; - rectTransform.Find("description").GetComponent<Text>().text = Localization.instance.Localize(component.m_itemData.m_shared.m_name + "_lore"); - m_trophyList.Add(gameObject); - } - ZLog.Log("SIZE " + num); - float size = Mathf.Max(m_trophieListBaseSize, 0f - num); - m_trophieListRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size); - m_trophyListScroll.value = 1f; - } - - public void OnShowVariantSelection() - { - m_variantDialog.Setup(m_selectedRecipe.Key.m_item.m_itemData); - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "VariantSelection", 0L); - } - - private void OnVariantSelected(int index) - { - ZLog.Log("Item variant selected " + index); - m_selectedVariant = index; - } - - public bool InUpradeTab() - { - return !m_tabUpgrade.interactable; - } - - public bool InCraftTab() - { - return !m_tabCraft.interactable; - } - - public void OnTabCraftPressed() - { - m_tabCraft.interactable = false; - m_tabUpgrade.interactable = true; - UpdateCraftingPanel(); - } - - public void OnTabUpgradePressed() - { - m_tabCraft.interactable = true; - m_tabUpgrade.interactable = false; - UpdateCraftingPanel(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ItemDrop.cs b/Valheim_v202102/Valheim/assembly_valheim/ItemDrop.cs deleted file mode 100644 index 55e21cb..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ItemDrop.cs +++ /dev/null @@ -1,970 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using UnityEngine; - -public class ItemDrop : MonoBehaviour, Hoverable, Interactable -{ - [Serializable] - public class ItemData - { - public enum ItemType - { - None = 0, - Material = 1, - Consumable = 2, - OneHandedWeapon = 3, - Bow = 4, - Shield = 5, - Helmet = 6, - Chest = 7, - Ammo = 9, - Customization = 10, - Legs = 11, - Hands = 12, - Trophie = 13, - TwoHandedWeapon = 14, - Torch = 15, - Misc = 16, - Shoulder = 17, - Utility = 18, - Tool = 19, - Attach_Atgeir = 20 - } - - public enum AnimationState - { - Unarmed, - OneHanded, - TwoHandedClub, - Bow, - Shield, - Torch, - LeftTorch, - Atgeir, - TwoHandedAxe, - FishingRod - } - - public enum AiTarget - { - Enemy, - FriendHurt, - Friend - } - - [Serializable] - public class SharedData - { - public string m_name = ""; - - public string m_dlc = ""; - - public ItemType m_itemType = ItemType.Misc; - - public Sprite[] m_icons = new Sprite[0]; - - public ItemType m_attachOverride; - - [TextArea] - public string m_description = ""; - - public int m_maxStackSize = 1; - - public int m_maxQuality = 1; - - public float m_weight = 1f; - - public int m_value; - - public bool m_teleportable = true; - - public bool m_questItem; - - public float m_equipDuration = 1f; - - public int m_variants; - - public Vector2Int m_trophyPos = Vector2Int.zero; - - public PieceTable m_buildPieces; - - public bool m_centerCamera; - - public string m_setName = ""; - - public int m_setSize; - - public StatusEffect m_setStatusEffect; - - public StatusEffect m_equipStatusEffect; - - public float m_movementModifier; - - [Header("Food settings")] - public float m_food; - - public float m_foodStamina; - - public float m_foodBurnTime; - - public float m_foodRegen; - - public Color m_foodColor = Color.white; - - [Header("Armor settings")] - public Material m_armorMaterial; - - public bool m_helmetHideHair = true; - - public float m_armor = 10f; - - public float m_armorPerLevel = 1f; - - public List<HitData.DamageModPair> m_damageModifiers = new List<HitData.DamageModPair>(); - - [Header("Shield settings")] - public float m_blockPower = 10f; - - public float m_blockPowerPerLevel; - - public float m_deflectionForce; - - public float m_deflectionForcePerLevel; - - public float m_timedBlockBonus = 1.5f; - - [Header("Weapon")] - public AnimationState m_animationState = AnimationState.OneHanded; - - public Skills.SkillType m_skillType = Skills.SkillType.Swords; - - public int m_toolTier; - - public HitData.DamageTypes m_damages; - - public HitData.DamageTypes m_damagesPerLevel; - - public float m_attackForce = 30f; - - public float m_backstabBonus = 4f; - - public bool m_dodgeable; - - public bool m_blockable; - - public StatusEffect m_attackStatusEffect; - - public GameObject m_spawnOnHit; - - public GameObject m_spawnOnHitTerrain; - - [Header("Attacks")] - public Attack m_attack; - - public Attack m_secondaryAttack; - - [Header("Durability")] - public bool m_useDurability; - - public bool m_destroyBroken = true; - - public bool m_canBeReparied = true; - - public float m_maxDurability = 100f; - - public float m_durabilityPerLevel = 50f; - - public float m_useDurabilityDrain = 1f; - - public float m_durabilityDrain; - - [Header("Hold")] - public float m_holdDurationMin; - - public float m_holdStaminaDrain; - - public string m_holdAnimationState = ""; - - [Header("Ammo")] - public string m_ammoType = ""; - - [Header("AI")] - public float m_aiAttackRange = 2f; - - public float m_aiAttackRangeMin; - - public float m_aiAttackInterval = 2f; - - public float m_aiAttackMaxAngle = 5f; - - public bool m_aiWhenFlying = true; - - public bool m_aiWhenWalking = true; - - public bool m_aiWhenSwiming = true; - - public bool m_aiPrioritized; - - public AiTarget m_aiTargetType; - - [Header("Effects")] - public EffectList m_hitEffect = new EffectList(); - - public EffectList m_hitTerrainEffect = new EffectList(); - - public EffectList m_blockEffect = new EffectList(); - - public EffectList m_startEffect = new EffectList(); - - public EffectList m_holdStartEffect = new EffectList(); - - public EffectList m_triggerEffect = new EffectList(); - - public EffectList m_trailStartEffect = new EffectList(); - - [Header("Consumable")] - public StatusEffect m_consumeStatusEffect; - } - - public int m_stack = 1; - - public float m_durability = 100f; - - public int m_quality = 1; - - public int m_variant; - - public SharedData m_shared; - - [NonSerialized] - public long m_crafterID; - - [NonSerialized] - public string m_crafterName = ""; - - [NonSerialized] - public Vector2i m_gridPos = Vector2i.zero; - - [NonSerialized] - public bool m_equiped; - - [NonSerialized] - public GameObject m_dropPrefab; - - [NonSerialized] - public float m_lastAttackTime; - - [NonSerialized] - public GameObject m_lastProjectile; - - public ItemData Clone() - { - return MemberwiseClone() as ItemData; - } - - public bool IsEquipable() - { - if (m_shared.m_itemType != ItemType.Tool && m_shared.m_itemType != ItemType.OneHandedWeapon && m_shared.m_itemType != ItemType.TwoHandedWeapon && m_shared.m_itemType != ItemType.Bow && m_shared.m_itemType != ItemType.Shield && m_shared.m_itemType != ItemType.Helmet && m_shared.m_itemType != ItemType.Chest && m_shared.m_itemType != ItemType.Legs && m_shared.m_itemType != ItemType.Shoulder && m_shared.m_itemType != ItemType.Ammo && m_shared.m_itemType != ItemType.Torch) - { - return m_shared.m_itemType == ItemType.Utility; - } - return true; - } - - public bool IsWeapon() - { - if (m_shared.m_itemType != ItemType.OneHandedWeapon && m_shared.m_itemType != ItemType.Bow && m_shared.m_itemType != ItemType.TwoHandedWeapon) - { - return m_shared.m_itemType == ItemType.Torch; - } - return true; - } - - public bool HavePrimaryAttack() - { - return !string.IsNullOrEmpty(m_shared.m_attack.m_attackAnimation); - } - - public bool HaveSecondaryAttack() - { - return !string.IsNullOrEmpty(m_shared.m_secondaryAttack.m_attackAnimation); - } - - public float GetArmor() - { - return GetArmor(m_quality); - } - - public float GetArmor(int quality) - { - return m_shared.m_armor + (float)Mathf.Max(0, quality - 1) * m_shared.m_armorPerLevel; - } - - public int GetValue() - { - return m_shared.m_value * m_stack; - } - - public float GetWeight() - { - return m_shared.m_weight * (float)m_stack; - } - - public HitData.DamageTypes GetDamage() - { - return GetDamage(m_quality); - } - - public float GetDurabilityPercentage() - { - float maxDurability = GetMaxDurability(); - if (maxDurability == 0f) - { - return 1f; - } - return Mathf.Clamp01(m_durability / maxDurability); - } - - public float GetMaxDurability() - { - return GetMaxDurability(m_quality); - } - - public float GetMaxDurability(int quality) - { - return m_shared.m_maxDurability + (float)Mathf.Max(0, quality - 1) * m_shared.m_durabilityPerLevel; - } - - public HitData.DamageTypes GetDamage(int quality) - { - HitData.DamageTypes damages = m_shared.m_damages; - if (quality > 1) - { - damages.Add(m_shared.m_damagesPerLevel, quality - 1); - } - return damages; - } - - public float GetBaseBlockPower() - { - return GetBaseBlockPower(m_quality); - } - - public float GetBaseBlockPower(int quality) - { - return m_shared.m_blockPower + (float)Mathf.Max(0, quality - 1) * m_shared.m_blockPowerPerLevel; - } - - public float GetBlockPower(float skillFactor) - { - return GetBlockPower(m_quality, skillFactor); - } - - public float GetBlockPower(int quality, float skillFactor) - { - float baseBlockPower = GetBaseBlockPower(quality); - return baseBlockPower + baseBlockPower * skillFactor * 0.5f; - } - - public float GetBlockPowerTooltip(int quality) - { - if (Player.m_localPlayer == null) - { - return 0f; - } - float skillFactor = Player.m_localPlayer.GetSkillFactor(Skills.SkillType.Blocking); - return GetBlockPower(quality, skillFactor); - } - - public float GetDeflectionForce() - { - return GetDeflectionForce(m_quality); - } - - public float GetDeflectionForce(int quality) - { - return m_shared.m_deflectionForce + (float)Mathf.Max(0, quality - 1) * m_shared.m_deflectionForcePerLevel; - } - - public string GetTooltip() - { - return GetTooltip(this, m_quality, crafting: false); - } - - public Sprite GetIcon() - { - return m_shared.m_icons[m_variant]; - } - - private static void AddHandedTip(ItemData item, StringBuilder text) - { - switch (item.m_shared.m_itemType) - { - case ItemType.OneHandedWeapon: - case ItemType.Shield: - case ItemType.Torch: - text.Append("\n$item_onehanded"); - break; - case ItemType.Bow: - case ItemType.TwoHandedWeapon: - case ItemType.Tool: - text.Append("\n$item_twohanded"); - break; - } - } - - public static string GetTooltip(ItemData item, int qualityLevel, bool crafting) - { - Player localPlayer = Player.m_localPlayer; - StringBuilder stringBuilder = new StringBuilder(256); - stringBuilder.Append(item.m_shared.m_description); - stringBuilder.Append("\n\n"); - if (item.m_shared.m_dlc.Length > 0) - { - stringBuilder.Append("\n<color=aqua>$item_dlc</color>"); - } - AddHandedTip(item, stringBuilder); - if (item.m_crafterID != 0L) - { - stringBuilder.AppendFormat("\n$item_crafter: <color=orange>{0}</color>", item.m_crafterName); - } - if (!item.m_shared.m_teleportable) - { - stringBuilder.Append("\n<color=orange>$item_noteleport</color>"); - } - if (item.m_shared.m_value > 0) - { - stringBuilder.AppendFormat("\n$item_value: <color=orange>{0} ({1})</color>", item.GetValue(), item.m_shared.m_value); - } - stringBuilder.AppendFormat("\n$item_weight: <color=orange>{0}</color>", item.GetWeight().ToString("0.0")); - if (item.m_shared.m_maxQuality > 1) - { - stringBuilder.AppendFormat("\n$item_quality: <color=orange>{0}</color>", qualityLevel); - } - if (item.m_shared.m_useDurability) - { - if (crafting) - { - float maxDurability = item.GetMaxDurability(qualityLevel); - stringBuilder.AppendFormat("\n$item_durability: <color=orange>{0}</color>", maxDurability); - } - else - { - float maxDurability2 = item.GetMaxDurability(qualityLevel); - float durability = item.m_durability; - stringBuilder.AppendFormat("\n$item_durability: <color=orange>{0}%</color> <color=yellow>({1}/{2})</color>", (item.GetDurabilityPercentage() * 100f).ToString("0"), durability.ToString("0"), maxDurability2.ToString("0")); - } - if (item.m_shared.m_canBeReparied) - { - Recipe recipe = ObjectDB.instance.GetRecipe(item); - if (recipe != null) - { - int minStationLevel = recipe.m_minStationLevel; - stringBuilder.AppendFormat("\n$item_repairlevel: <color=orange>{0}</color>", minStationLevel.ToString()); - } - } - } - switch (item.m_shared.m_itemType) - { - case ItemType.Ammo: - stringBuilder.Append(item.GetDamage(qualityLevel).GetTooltipString(item.m_shared.m_skillType)); - stringBuilder.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", item.m_shared.m_attackForce); - break; - case ItemType.OneHandedWeapon: - case ItemType.Bow: - case ItemType.TwoHandedWeapon: - case ItemType.Torch: - { - stringBuilder.Append(item.GetDamage(qualityLevel).GetTooltipString(item.m_shared.m_skillType)); - stringBuilder.AppendFormat("\n$item_blockpower: <color=orange>{0}</color> <color=yellow>({1})</color>", item.GetBaseBlockPower(qualityLevel), item.GetBlockPowerTooltip(qualityLevel).ToString("0")); - if (item.m_shared.m_timedBlockBonus > 1f) - { - stringBuilder.AppendFormat("\n$item_deflection: <color=orange>{0}</color>", item.GetDeflectionForce(qualityLevel)); - stringBuilder.AppendFormat("\n$item_parrybonus: <color=orange>{0}x</color>", item.m_shared.m_timedBlockBonus); - } - stringBuilder.AppendFormat("\n$item_knockback: <color=orange>{0}</color>", item.m_shared.m_attackForce); - stringBuilder.AppendFormat("\n$item_backstab: <color=orange>{0}x</color>", item.m_shared.m_backstabBonus); - string projectileTooltip = item.GetProjectileTooltip(qualityLevel); - if (projectileTooltip.Length > 0) - { - stringBuilder.Append("\n\n"); - stringBuilder.Append(projectileTooltip); - } - string statusEffectTooltip3 = item.GetStatusEffectTooltip(); - if (statusEffectTooltip3.Length > 0) - { - stringBuilder.Append("\n\n"); - stringBuilder.Append(statusEffectTooltip3); - } - break; - } - case ItemType.Helmet: - case ItemType.Chest: - case ItemType.Legs: - case ItemType.Shoulder: - { - stringBuilder.AppendFormat("\n$item_armor: <color=orange>{0}</color>", item.GetArmor(qualityLevel)); - string damageModifiersTooltipString = SE_Stats.GetDamageModifiersTooltipString(item.m_shared.m_damageModifiers); - if (damageModifiersTooltipString.Length > 0) - { - stringBuilder.Append(damageModifiersTooltipString); - } - string statusEffectTooltip2 = item.GetStatusEffectTooltip(); - if (statusEffectTooltip2.Length > 0) - { - stringBuilder.Append("\n\n"); - stringBuilder.Append(statusEffectTooltip2); - } - break; - } - case ItemType.Shield: - stringBuilder.AppendFormat("\n$item_blockpower: <color=orange>{0}</color> <color=yellow>({1})</color>", item.GetBaseBlockPower(qualityLevel), item.GetBlockPowerTooltip(qualityLevel).ToString("0")); - if (item.m_shared.m_timedBlockBonus > 1f) - { - stringBuilder.AppendFormat("\n$item_deflection: <color=orange>{0}</color>", item.GetDeflectionForce(qualityLevel)); - stringBuilder.AppendFormat("\n$item_parrybonus: <color=orange>{0}x</color>", item.m_shared.m_timedBlockBonus); - } - break; - case ItemType.Consumable: - { - if (item.m_shared.m_food > 0f) - { - stringBuilder.AppendFormat("\n$item_food_health: <color=orange>{0}</color>", item.m_shared.m_food); - stringBuilder.AppendFormat("\n$item_food_stamina: <color=orange>{0}</color>", item.m_shared.m_foodStamina); - stringBuilder.AppendFormat("\n$item_food_duration: <color=orange>{0}s</color>", item.m_shared.m_foodBurnTime); - stringBuilder.AppendFormat("\n$item_food_regen: <color=orange>{0} hp/tick</color>", item.m_shared.m_foodRegen); - } - string statusEffectTooltip = item.GetStatusEffectTooltip(); - if (statusEffectTooltip.Length > 0) - { - stringBuilder.Append("\n\n"); - stringBuilder.Append(statusEffectTooltip); - } - break; - } - } - if (item.m_shared.m_movementModifier != 0f && localPlayer != null) - { - float equipmentMovementModifier = localPlayer.GetEquipmentMovementModifier(); - stringBuilder.AppendFormat("\n$item_movement_modifier: <color=orange>{0}%</color> ($item_total:<color=yellow>{1}%</color>)", (item.m_shared.m_movementModifier * 100f).ToString("+0;-0"), (equipmentMovementModifier * 100f).ToString("+0;-0")); - } - string setStatusEffectTooltip = item.GetSetStatusEffectTooltip(); - if (setStatusEffectTooltip.Length > 0) - { - stringBuilder.AppendFormat("\n\n$item_seteffect (<color=orange>{0}</color> $item_parts):<color=orange>{1}</color>", item.m_shared.m_setSize, setStatusEffectTooltip); - } - return stringBuilder.ToString(); - } - - private string GetStatusEffectTooltip() - { - if ((bool)m_shared.m_attackStatusEffect) - { - return m_shared.m_attackStatusEffect.GetTooltipString(); - } - if ((bool)m_shared.m_consumeStatusEffect) - { - return m_shared.m_consumeStatusEffect.GetTooltipString(); - } - return ""; - } - - private string GetSetStatusEffectTooltip() - { - if ((bool)m_shared.m_setStatusEffect) - { - StatusEffect setStatusEffect = m_shared.m_setStatusEffect; - if (setStatusEffect != null) - { - return setStatusEffect.GetTooltipString(); - } - } - return ""; - } - - private string GetProjectileTooltip(int itemQuality) - { - string text = ""; - if ((bool)m_shared.m_attack.m_attackProjectile) - { - IProjectile component = m_shared.m_attack.m_attackProjectile.GetComponent<IProjectile>(); - if (component != null) - { - text += component.GetTooltipString(itemQuality); - } - } - if ((bool)m_shared.m_spawnOnHit) - { - IProjectile component2 = m_shared.m_spawnOnHit.GetComponent<IProjectile>(); - if (component2 != null) - { - text += component2.GetTooltipString(itemQuality); - } - } - return text; - } - } - - private static List<ItemDrop> m_instances = new List<ItemDrop>(); - - private int m_myIndex = -1; - - public bool m_autoPickup = true; - - public bool m_autoDestroy = true; - - public ItemData m_itemData = new ItemData(); - - private ZNetView m_nview; - - private Character m_pickupRequester; - - private float m_lastOwnerRequest; - - private float m_spawnTime; - - private const double m_autoDestroyTimeout = 3600.0; - - private const double m_autoPickupDelay = 0.5; - - private const float m_autoDespawnBaseMinAltitude = -2f; - - private const int m_autoStackTreshold = 200; - - private const float m_autoStackRange = 4f; - - private static int m_itemMask = 0; - - private bool m_haveAutoStacked; - - private void Awake() - { - m_myIndex = m_instances.Count; - m_instances.Add(this); - string prefabName = GetPrefabName(base.gameObject.name); - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(prefabName); - m_itemData.m_dropPrefab = itemPrefab; - if (Application.isEditor) - { - m_itemData.m_shared = itemPrefab.GetComponent<ItemDrop>().m_itemData.m_shared; - } - Rigidbody component = GetComponent<Rigidbody>(); - if ((bool)component) - { - component.maxDepenetrationVelocity = 1f; - } - m_spawnTime = Time.time; - m_nview = GetComponent<ZNetView>(); - if ((bool)m_nview && m_nview.IsValid()) - { - if (m_nview.IsOwner() && new DateTime(m_nview.GetZDO().GetLong("SpawnTime", 0L)).Ticks == 0L) - { - m_nview.GetZDO().Set("SpawnTime", ZNet.instance.GetTime().Ticks); - } - m_nview.Register("RequestOwn", RPC_RequestOwn); - Load(); - InvokeRepeating("SlowUpdate", UnityEngine.Random.Range(1f, 2f), 10f); - } - } - - private void OnDestroy() - { - m_instances[m_myIndex] = m_instances[m_instances.Count - 1]; - m_instances[m_myIndex].m_myIndex = m_myIndex; - m_instances.RemoveAt(m_instances.Count - 1); - } - - private void Start() - { - Save(); - base.gameObject.GetComponentInChildren<IEquipmentVisual>()?.Setup(m_itemData.m_variant); - } - - private double GetTimeSinceSpawned() - { - DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("SpawnTime", 0L)); - return (ZNet.instance.GetTime() - dateTime).TotalSeconds; - } - - private void SlowUpdate() - { - if (m_nview.IsValid() && m_nview.IsOwner()) - { - TerrainCheck(); - if (m_autoDestroy) - { - TimedDestruction(); - } - if (m_instances.Count > 200) - { - AutoStackItems(); - } - } - } - - private void TerrainCheck() - { - float groundHeight = ZoneSystem.instance.GetGroundHeight(base.transform.position); - if (base.transform.position.y - groundHeight < -0.5f) - { - Vector3 position = base.transform.position; - position.y = groundHeight + 0.5f; - base.transform.position = position; - Rigidbody component = GetComponent<Rigidbody>(); - if ((bool)component) - { - component.velocity = Vector3.zero; - } - } - } - - private void TimedDestruction() - { - if (!IsInsideBase() && !Player.IsPlayerInRange(base.transform.position, 25f) && !(GetTimeSinceSpawned() < 3600.0)) - { - m_nview.Destroy(); - } - } - - private bool IsInsideBase() - { - if (base.transform.position.y > ZoneSystem.instance.m_waterLevel + -2f && (bool)EffectArea.IsPointInsideArea(base.transform.position, EffectArea.Type.PlayerBase)) - { - return true; - } - return false; - } - - private void AutoStackItems() - { - if (m_itemData.m_shared.m_maxStackSize <= 1 || m_itemData.m_stack >= m_itemData.m_shared.m_maxStackSize || m_haveAutoStacked) - { - return; - } - m_haveAutoStacked = true; - if (m_itemMask == 0) - { - m_itemMask = LayerMask.GetMask("item"); - } - bool flag = false; - Collider[] array = Physics.OverlapSphere(base.transform.position, 4f, m_itemMask); - foreach (Collider collider in array) - { - if (!collider.attachedRigidbody) - { - continue; - } - ItemDrop component = collider.attachedRigidbody.GetComponent<ItemDrop>(); - if (!(component == null) && !(component == this) && !(component.m_nview == null) && component.m_nview.IsValid() && component.m_nview.IsOwner() && !(component.m_itemData.m_shared.m_name != m_itemData.m_shared.m_name) && component.m_itemData.m_quality == m_itemData.m_quality) - { - int num = m_itemData.m_shared.m_maxStackSize - m_itemData.m_stack; - if (num == 0) - { - break; - } - if (component.m_itemData.m_stack <= num) - { - m_itemData.m_stack += component.m_itemData.m_stack; - flag = true; - component.m_nview.Destroy(); - } - } - } - if (flag) - { - Save(); - } - } - - public string GetHoverText() - { - string text = m_itemData.m_shared.m_name; - if (m_itemData.m_quality > 1) - { - text = text + "[" + m_itemData.m_quality + "] "; - } - if (m_itemData.m_stack > 1) - { - text = text + " x" + m_itemData.m_stack; - } - return Localization.instance.Localize(text + "\n[<color=yellow><b>$KEY_Use</b></color>] $inventory_pickup"); - } - - public string GetHoverName() - { - return m_itemData.m_shared.m_name; - } - - private string GetPrefabName(string name) - { - char[] anyOf = new char[2] { '(', ' ' }; - int num = name.IndexOfAny(anyOf); - if (num >= 0) - { - return name.Substring(0, num); - } - return name; - } - - public bool Interact(Humanoid character, bool repeat) - { - if (repeat) - { - return false; - } - Pickup(character); - return true; - } - - public bool UseItem(Humanoid user, ItemData item) - { - return false; - } - - public void Pickup(Humanoid character) - { - if (m_nview.IsValid()) - { - if (CanPickup()) - { - Load(); - character.Pickup(base.gameObject); - Save(); - } - else - { - m_pickupRequester = character; - CancelInvoke("PickupUpdate"); - float num = 0.05f; - InvokeRepeating("PickupUpdate", num, num); - RequestOwn(); - } - } - } - - public void RequestOwn() - { - if (!(Time.time - m_lastOwnerRequest < 0.2f) && !m_nview.IsOwner()) - { - m_lastOwnerRequest = Time.time; - m_nview.InvokeRPC("RequestOwn"); - } - } - - public bool RemoveOne() - { - if (!CanPickup()) - { - RequestOwn(); - return false; - } - if (m_itemData.m_stack <= 1) - { - m_nview.Destroy(); - return true; - } - m_itemData.m_stack--; - Save(); - return true; - } - - public void OnPlayerDrop() - { - m_autoPickup = false; - } - - public bool CanPickup() - { - if (m_nview == null || !m_nview.IsValid()) - { - return true; - } - if ((double)(Time.time - m_spawnTime) < 0.5) - { - return false; - } - return m_nview.IsOwner(); - } - - private void RPC_RequestOwn(long uid) - { - ZLog.Log("Player " + uid + " wants to pickup " + base.gameObject.name + " im: " + ZDOMan.instance.GetMyID()); - if (!m_nview.IsOwner()) - { - ZLog.Log(" but im not the owner"); - } - else - { - m_nview.GetZDO().SetOwner(uid); - } - } - - private void PickupUpdate() - { - if (m_nview.IsValid()) - { - if (CanPickup()) - { - ZLog.Log("Im finally the owner"); - CancelInvoke("PickupUpdate"); - Load(); - (m_pickupRequester as Player).Pickup(base.gameObject); - Save(); - } - else - { - ZLog.Log("Im still nto the owner"); - } - } - } - - private void Save() - { - if (!(m_nview == null) && m_nview.IsValid() && m_nview.IsOwner()) - { - SaveToZDO(m_itemData, m_nview.GetZDO()); - } - } - - private void Load() - { - LoadFromZDO(m_itemData, m_nview.GetZDO()); - } - - public static void SaveToZDO(ItemData itemData, ZDO zdo) - { - zdo.Set("durability", itemData.m_durability); - zdo.Set("stack", itemData.m_stack); - zdo.Set("quality", itemData.m_quality); - zdo.Set("variant", itemData.m_variant); - zdo.Set("crafterID", itemData.m_crafterID); - zdo.Set("crafterName", itemData.m_crafterName); - } - - public static void LoadFromZDO(ItemData itemData, ZDO zdo) - { - itemData.m_durability = zdo.GetFloat("durability", itemData.m_durability); - itemData.m_stack = zdo.GetInt("stack", itemData.m_stack); - itemData.m_quality = zdo.GetInt("quality", itemData.m_quality); - itemData.m_variant = zdo.GetInt("variant", itemData.m_variant); - itemData.m_crafterID = zdo.GetLong("crafterID", itemData.m_crafterID); - itemData.m_crafterName = zdo.GetString("crafterName", itemData.m_crafterName); - } - - public static ItemDrop DropItem(ItemData item, int amount, Vector3 position, Quaternion rotation) - { - ItemDrop component = UnityEngine.Object.Instantiate(item.m_dropPrefab, position, rotation).GetComponent<ItemDrop>(); - component.m_itemData = item.Clone(); - if (amount > 0) - { - component.m_itemData.m_stack = amount; - } - component.Save(); - return component; - } - - private void OnDrawGizmos() - { - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ItemStand.cs b/Valheim_v202102/Valheim/assembly_valheim/ItemStand.cs deleted file mode 100644 index f068855..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ItemStand.cs +++ /dev/null @@ -1,392 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class ItemStand : MonoBehaviour, Interactable, Hoverable -{ - public ZNetView m_netViewOverride; - - public string m_name = ""; - - public Transform m_attachOther; - - public Transform m_dropSpawnPoint; - - public bool m_canBeRemoved = true; - - public bool m_autoAttach; - - public List<ItemDrop.ItemData.ItemType> m_supportedTypes = new List<ItemDrop.ItemData.ItemType>(); - - public List<ItemDrop> m_unsupportedItems = new List<ItemDrop>(); - - public List<ItemDrop> m_supportedItems = new List<ItemDrop>(); - - public EffectList m_effects = new EffectList(); - - public EffectList m_destroyEffects = new EffectList(); - - [Header("Guardian power")] - public float m_powerActivationDelay = 2f; - - public StatusEffect m_guardianPower; - - public EffectList m_activatePowerEffects = new EffectList(); - - public EffectList m_activatePowerEffectsPlayer = new EffectList(); - - private string m_visualName = ""; - - private int m_visualVariant; - - private GameObject m_visualItem; - - private string m_currentItemName = ""; - - private ItemDrop.ItemData m_queuedItem; - - private ZNetView m_nview; - - private void Awake() - { - m_nview = (m_netViewOverride ? m_netViewOverride : base.gameObject.GetComponent<ZNetView>()); - if (m_nview.GetZDO() != null) - { - WearNTear component = GetComponent<WearNTear>(); - if ((bool)component) - { - component.m_onDestroyed = (Action)Delegate.Combine(component.m_onDestroyed, new Action(OnDestroyed)); - } - m_nview.Register("DropItem", RPC_DropItem); - m_nview.Register("RequestOwn", RPC_RequestOwn); - m_nview.Register("DestroyAttachment", RPC_DestroyAttachment); - m_nview.Register<string, int>("SetVisualItem", RPC_SetVisualItem); - InvokeRepeating("UpdateVisual", 1f, 4f); - } - } - - private void OnDestroyed() - { - if (m_nview.IsOwner()) - { - DropItem(); - } - } - - public string GetHoverText() - { - if (!Player.m_localPlayer) - { - return ""; - } - if (HaveAttachment()) - { - if (!m_canBeRemoved) - { - if (m_guardianPower != null) - { - if (IsInvoking("DelayedPowerActivation")) - { - return ""; - } - if (IsGuardianPowerActive(Player.m_localPlayer)) - { - return ""; - } - string tooltipString = m_guardianPower.GetTooltipString(); - return Localization.instance.Localize("<color=orange>" + m_guardianPower.m_name + "</color>\n" + tooltipString + "\n\n[<color=yellow><b>$KEY_Use</b></color>] $guardianstone_hook_activate"); - } - return ""; - } - return Localization.instance.Localize(m_name + " ( " + m_currentItemName + " )\n[<color=yellow><b>$KEY_Use</b></color>] $piece_itemstand_take"); - } - if (m_autoAttach && m_supportedItems.Count == 1) - { - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_itemstand_attach"); - } - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>1-8</b></color>] $piece_itemstand_attach"); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid user, bool hold) - { - if (hold) - { - return false; - } - if (!HaveAttachment()) - { - if (m_autoAttach && m_supportedItems.Count == 1) - { - ItemDrop.ItemData item = user.GetInventory().GetItem(m_supportedItems[0].m_itemData.m_shared.m_name); - if (item != null) - { - UseItem(user, item); - return true; - } - user.Message(MessageHud.MessageType.Center, "$piece_itemstand_missingitem"); - return false; - } - } - else - { - if (m_canBeRemoved) - { - m_nview.InvokeRPC("DropItem"); - return true; - } - if (m_guardianPower != null) - { - if (IsInvoking("DelayedPowerActivation")) - { - return false; - } - if (IsGuardianPowerActive(user)) - { - return false; - } - user.Message(MessageHud.MessageType.Center, "$guardianstone_hook_power_activate "); - m_activatePowerEffects.Create(base.transform.position, base.transform.rotation); - m_activatePowerEffectsPlayer.Create(user.transform.position, Quaternion.identity, user.transform); - Invoke("DelayedPowerActivation", m_powerActivationDelay); - return true; - } - } - return false; - } - - private bool IsGuardianPowerActive(Humanoid user) - { - return (user as Player).GetGuardianPowerName() == m_guardianPower.name; - } - - private void DelayedPowerActivation() - { - Player localPlayer = Player.m_localPlayer; - if (!(localPlayer == null)) - { - localPlayer.SetGuardianPower(m_guardianPower.name); - } - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - if (HaveAttachment()) - { - return false; - } - if (!CanAttach(item)) - { - user.Message(MessageHud.MessageType.Center, "$piece_itemstand_cantattach"); - return true; - } - if (!m_nview.IsOwner()) - { - m_nview.InvokeRPC("RequestOwn"); - } - m_queuedItem = item; - CancelInvoke("UpdateAttach"); - InvokeRepeating("UpdateAttach", 0f, 0.1f); - return true; - } - - private void RPC_DropItem(long sender) - { - if (m_nview.IsOwner() && m_canBeRemoved) - { - DropItem(); - } - } - - public void DestroyAttachment() - { - m_nview.InvokeRPC("DestroyAttachment"); - } - - public void RPC_DestroyAttachment(long sender) - { - if (m_nview.IsOwner() && HaveAttachment()) - { - m_nview.GetZDO().Set("item", ""); - m_nview.InvokeRPC(ZNetView.Everybody, "SetVisualItem", "", 0); - m_destroyEffects.Create(m_dropSpawnPoint.position, Quaternion.identity); - } - } - - private void DropItem() - { - if (HaveAttachment()) - { - string @string = m_nview.GetZDO().GetString("item"); - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(@string); - if ((bool)itemPrefab) - { - GameObject obj = UnityEngine.Object.Instantiate(itemPrefab, m_dropSpawnPoint.position, m_dropSpawnPoint.rotation); - ItemDrop.LoadFromZDO(obj.GetComponent<ItemDrop>().m_itemData, m_nview.GetZDO()); - obj.GetComponent<Rigidbody>().velocity = Vector3.up * 4f; - m_effects.Create(m_dropSpawnPoint.position, Quaternion.identity); - } - m_nview.GetZDO().Set("item", ""); - m_nview.InvokeRPC(ZNetView.Everybody, "SetVisualItem", "", 0); - } - } - - private Transform GetAttach(ItemDrop.ItemData item) - { - return m_attachOther; - } - - private void UpdateAttach() - { - if (m_nview.IsOwner()) - { - CancelInvoke("UpdateAttach"); - Player localPlayer = Player.m_localPlayer; - if (m_queuedItem != null && localPlayer != null && localPlayer.GetInventory().ContainsItem(m_queuedItem) && !HaveAttachment()) - { - ItemDrop.ItemData itemData = m_queuedItem.Clone(); - itemData.m_stack = 1; - m_nview.GetZDO().Set("item", m_queuedItem.m_dropPrefab.name); - ItemDrop.SaveToZDO(itemData, m_nview.GetZDO()); - localPlayer.UnequipItem(m_queuedItem); - localPlayer.GetInventory().RemoveOneItem(m_queuedItem); - m_nview.InvokeRPC(ZNetView.Everybody, "SetVisualItem", itemData.m_dropPrefab.name, itemData.m_variant); - Transform attach = GetAttach(m_queuedItem); - m_effects.Create(attach.transform.position, Quaternion.identity); - } - m_queuedItem = null; - } - } - - private void RPC_RequestOwn(long sender) - { - if (m_nview.IsOwner()) - { - m_nview.GetZDO().SetOwner(sender); - } - } - - private void UpdateVisual() - { - string @string = m_nview.GetZDO().GetString("item"); - int @int = m_nview.GetZDO().GetInt("variant"); - SetVisualItem(@string, @int); - } - - private void RPC_SetVisualItem(long sender, string itemName, int variant) - { - SetVisualItem(itemName, variant); - } - - private void SetVisualItem(string itemName, int variant) - { - if (m_visualName == itemName && m_visualVariant == variant) - { - return; - } - m_visualName = itemName; - m_visualVariant = variant; - m_currentItemName = ""; - if (m_visualName == "") - { - UnityEngine.Object.Destroy(m_visualItem); - return; - } - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemName); - if (itemPrefab == null) - { - ZLog.LogWarning("Missing item prefab " + itemName); - return; - } - GameObject attachPrefab = GetAttachPrefab(itemPrefab); - if (attachPrefab == null) - { - ZLog.LogWarning("Failed to get attach prefab for item " + itemName); - return; - } - ItemDrop component = itemPrefab.GetComponent<ItemDrop>(); - m_currentItemName = component.m_itemData.m_shared.m_name; - Transform attach = GetAttach(component.m_itemData); - m_visualItem = UnityEngine.Object.Instantiate(attachPrefab, attach.position, attach.rotation, attach); - m_visualItem.transform.localPosition = attachPrefab.transform.localPosition; - m_visualItem.transform.localRotation = attachPrefab.transform.localRotation; - m_visualItem.GetComponentInChildren<IEquipmentVisual>()?.Setup(m_visualVariant); - } - - private GameObject GetAttachPrefab(GameObject item) - { - Transform transform = item.transform.Find("attach"); - if ((bool)transform) - { - return transform.gameObject; - } - return null; - } - - private bool CanAttach(ItemDrop.ItemData item) - { - if (GetAttachPrefab(item.m_dropPrefab) == null) - { - return false; - } - if (IsUnsupported(item)) - { - return false; - } - if (!IsSupported(item)) - { - return false; - } - return m_supportedTypes.Contains(item.m_shared.m_itemType); - } - - public bool IsUnsupported(ItemDrop.ItemData item) - { - foreach (ItemDrop unsupportedItem in m_unsupportedItems) - { - if (unsupportedItem.m_itemData.m_shared.m_name == item.m_shared.m_name) - { - return true; - } - } - return false; - } - - public bool IsSupported(ItemDrop.ItemData item) - { - if (m_supportedItems.Count == 0) - { - return true; - } - foreach (ItemDrop supportedItem in m_supportedItems) - { - if (supportedItem.m_itemData.m_shared.m_name == item.m_shared.m_name) - { - return true; - } - } - return false; - } - - public bool HaveAttachment() - { - if (!m_nview.IsValid()) - { - return false; - } - return m_nview.GetZDO().GetString("item") != ""; - } - - public string GetAttachedItem() - { - if (!m_nview.IsValid()) - { - return ""; - } - return m_nview.GetZDO().GetString("item"); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ItemStyle.cs b/Valheim_v202102/Valheim/assembly_valheim/ItemStyle.cs deleted file mode 100644 index eefa038..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ItemStyle.cs +++ /dev/null @@ -1,9 +0,0 @@ -using UnityEngine; - -public class ItemStyle : MonoBehaviour, IEquipmentVisual -{ - public void Setup(int style) - { - GetComponent<Renderer>().material.SetFloat("_Style", style); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/KeyHints.cs b/Valheim_v202102/Valheim/assembly_valheim/KeyHints.cs deleted file mode 100644 index 176f9fc..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/KeyHints.cs +++ /dev/null @@ -1,95 +0,0 @@ -using UnityEngine; - -public class KeyHints : MonoBehaviour -{ - private static KeyHints m_instance; - - [Header("Key hints")] - public GameObject m_buildHints; - - public GameObject m_combatHints; - - public GameObject m_primaryAttackGP; - - public GameObject m_primaryAttackKB; - - public GameObject m_secondaryAttackGP; - - public GameObject m_secondaryAttackKB; - - public GameObject m_bowDrawGP; - - public GameObject m_bowDrawKB; - - private bool m_keyHintsEnabled = true; - - public static KeyHints instance => m_instance; - - private void OnDestroy() - { - m_instance = null; - } - - private void Awake() - { - m_instance = this; - ApplySettings(); - } - - private void Start() - { - } - - public void ApplySettings() - { - m_keyHintsEnabled = PlayerPrefs.GetInt("KeyHints", 1) == 1; - } - - private void Update() - { - UpdateHints(); - } - - private void UpdateHints() - { - Player localPlayer = Player.m_localPlayer; - if (!m_keyHintsEnabled || localPlayer == null || localPlayer.IsDead() || Chat.instance.IsChatDialogWindowVisible()) - { - m_buildHints.SetActive(value: false); - m_combatHints.SetActive(value: false); - return; - } - _ = m_buildHints.activeSelf; - _ = m_buildHints.activeSelf; - ItemDrop.ItemData currentWeapon = localPlayer.GetCurrentWeapon(); - if (localPlayer.InPlaceMode()) - { - m_buildHints.SetActive(value: true); - m_combatHints.SetActive(value: false); - } - else if ((bool)localPlayer.GetShipControl()) - { - m_buildHints.SetActive(value: false); - m_combatHints.SetActive(value: false); - } - else if (currentWeapon != null && (currentWeapon != localPlayer.m_unarmedWeapon.m_itemData || localPlayer.IsTargeted())) - { - m_buildHints.SetActive(value: false); - m_combatHints.SetActive(value: true); - bool flag = currentWeapon.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Bow; - bool active = !flag && currentWeapon.HavePrimaryAttack(); - bool active2 = !flag && currentWeapon.HaveSecondaryAttack(); - m_bowDrawGP.SetActive(flag); - m_bowDrawKB.SetActive(flag); - m_primaryAttackGP.SetActive(active); - m_primaryAttackKB.SetActive(active); - m_secondaryAttackGP.SetActive(active2); - m_secondaryAttackKB.SetActive(active2); - } - else - { - m_buildHints.SetActive(value: false); - m_combatHints.SetActive(value: false); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Ladder.cs b/Valheim_v202102/Valheim/assembly_valheim/Ladder.cs deleted file mode 100644 index e139dde..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Ladder.cs +++ /dev/null @@ -1,50 +0,0 @@ -using UnityEngine; - -public class Ladder : MonoBehaviour, Interactable, Hoverable -{ - public Transform m_targetPos; - - public string m_name = "Ladder"; - - public float m_useDistance = 2f; - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - if (!InUseDistance(character)) - { - return false; - } - character.transform.position = m_targetPos.position; - character.transform.rotation = m_targetPos.rotation; - character.SetLookDir(m_targetPos.forward); - return false; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public string GetHoverText() - { - if (!InUseDistance(Player.m_localPlayer)) - { - return Localization.instance.Localize("<color=grey>$piece_toofar</color>"); - } - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_use"); - } - - public string GetHoverName() - { - return m_name; - } - - private bool InUseDistance(Humanoid human) - { - return Vector3.Distance(human.transform.position, base.transform.position) < m_useDistance; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Ledge.cs b/Valheim_v202102/Valheim/assembly_valheim/Ledge.cs deleted file mode 100644 index dd78829..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Ledge.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Ledge : MonoBehaviour -{ - public Collider m_collider; - - public TriggerTracker m_above; - - private void Awake() - { - if (GetComponent<ZNetView>().GetZDO() != null) - { - m_collider.enabled = true; - TriggerTracker above = m_above; - above.m_changed = (Action)Delegate.Combine(above.m_changed, new Action(Changed)); - } - } - - private void Changed() - { - List<Collider> colliders = m_above.GetColliders(); - if (colliders.Count == 0) - { - m_collider.enabled = true; - return; - } - bool flag = false; - foreach (Collider item in colliders) - { - if (item.transform.position.y > base.transform.position.y) - { - flag = true; - break; - } - } - m_collider.enabled = flag; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/LevelEffects.cs b/Valheim_v202102/Valheim/assembly_valheim/LevelEffects.cs deleted file mode 100644 index 9cb9333..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/LevelEffects.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class LevelEffects : MonoBehaviour -{ - [Serializable] - public class LevelSetup - { - public float m_scale = 1f; - - public float m_hue; - - public float m_saturation; - - public float m_value; - - public GameObject m_enableObject; - } - - public Renderer m_mainRender; - - public GameObject m_baseEnableObject; - - public List<LevelSetup> m_levelSetups = new List<LevelSetup>(); - - private static Dictionary<string, Material> m_materials = new Dictionary<string, Material>(); - - private Character m_character; - - private void Start() - { - m_character = GetComponentInParent<Character>(); - Character character = m_character; - character.m_onLevelSet = (Action<int>)Delegate.Combine(character.m_onLevelSet, new Action<int>(OnLevelSet)); - SetupLevelVisualization(m_character.GetLevel()); - } - - private void OnLevelSet(int level) - { - SetupLevelVisualization(level); - } - - private void SetupLevelVisualization(int level) - { - if (level <= 1 || m_levelSetups.Count < level - 1) - { - return; - } - LevelSetup levelSetup = m_levelSetups[level - 2]; - base.transform.localScale = new Vector3(levelSetup.m_scale, levelSetup.m_scale, levelSetup.m_scale); - if ((bool)m_mainRender) - { - string key = m_character.m_name + level; - if (m_materials.TryGetValue(key, out var value)) - { - Material[] sharedMaterials = m_mainRender.sharedMaterials; - sharedMaterials[0] = value; - m_mainRender.sharedMaterials = sharedMaterials; - } - else - { - Material[] sharedMaterials2 = m_mainRender.sharedMaterials; - sharedMaterials2[0] = new Material(sharedMaterials2[0]); - sharedMaterials2[0].SetFloat("_Hue", levelSetup.m_hue); - sharedMaterials2[0].SetFloat("_Saturation", levelSetup.m_saturation); - sharedMaterials2[0].SetFloat("_Value", levelSetup.m_value); - m_mainRender.sharedMaterials = sharedMaterials2; - m_materials[key] = sharedMaterials2[0]; - } - } - if ((bool)m_baseEnableObject) - { - m_baseEnableObject.SetActive(value: false); - } - if ((bool)levelSetup.m_enableObject) - { - levelSetup.m_enableObject.SetActive(value: true); - } - } - - public void GetColorChanges(out float hue, out float saturation, out float value) - { - int level = m_character.GetLevel(); - if (level > 1 && m_levelSetups.Count >= level - 1) - { - LevelSetup levelSetup = m_levelSetups[level - 2]; - hue = levelSetup.m_hue; - saturation = levelSetup.m_saturation; - value = levelSetup.m_value; - } - else - { - hue = 0f; - saturation = 0f; - value = 0f; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Leviathan.cs b/Valheim_v202102/Valheim/assembly_valheim/Leviathan.cs deleted file mode 100644 index 1a7a21c..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Leviathan.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using UnityEngine; - -public class Leviathan : MonoBehaviour -{ - public float m_waveScale = 0.5f; - - public float m_floatOffset; - - public float m_movementSpeed = 0.1f; - - public float m_maxSpeed = 1f; - - public MineRock m_mineRock; - - public float m_hitReactionChance = 0.25f; - - public int m_leaveDelay = 5; - - public EffectList m_reactionEffects = new EffectList(); - - public EffectList m_leaveEffects = new EffectList(); - - private Rigidbody m_body; - - private ZNetView m_nview; - - private ZSyncAnimation m_zanimator; - - private Animator m_animator; - - private bool m_left; - - private void Awake() - { - m_body = GetComponent<Rigidbody>(); - m_nview = GetComponent<ZNetView>(); - m_zanimator = GetComponent<ZSyncAnimation>(); - m_animator = GetComponentInChildren<Animator>(); - if ((bool)GetComponent<MineRock>()) - { - MineRock mineRock = m_mineRock; - mineRock.m_onHit = (Action)Delegate.Combine(mineRock.m_onHit, new Action(OnHit)); - } - } - - private void FixedUpdate() - { - if (m_nview.IsValid() && m_nview.IsOwner()) - { - float waterLevel = WaterVolume.GetWaterLevel(base.transform.position, m_waveScale); - if (waterLevel > -100f) - { - Vector3 position = m_body.position; - float num = Mathf.Clamp((waterLevel - (position.y + m_floatOffset)) * m_movementSpeed * Time.fixedDeltaTime, 0f - m_maxSpeed, m_maxSpeed); - position.y += num; - m_body.MovePosition(position); - } - else - { - Vector3 position2 = m_body.position; - position2.y = 0f; - m_body.MovePosition(Vector3.MoveTowards(m_body.position, position2, Time.deltaTime)); - } - if (m_animator.GetCurrentAnimatorStateInfo(0).IsTag("submerged")) - { - m_nview.Destroy(); - } - } - } - - private void OnHit() - { - if (UnityEngine.Random.value <= m_hitReactionChance && !m_left) - { - m_reactionEffects.Create(base.transform.position, base.transform.rotation); - m_zanimator.SetTrigger("shake"); - Invoke("Leave", m_leaveDelay); - } - } - - private void Leave() - { - if (m_nview.IsValid() && m_nview.IsOwner() && !m_left) - { - m_left = true; - m_leaveEffects.Create(base.transform.position, base.transform.rotation); - m_zanimator.SetTrigger("dive"); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/LightFlicker.cs b/Valheim_v202102/Valheim/assembly_valheim/LightFlicker.cs deleted file mode 100644 index c2b944c..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/LightFlicker.cs +++ /dev/null @@ -1,71 +0,0 @@ -using UnityEngine; - -public class LightFlicker : MonoBehaviour -{ - public float m_flickerIntensity = 0.1f; - - public float m_flickerSpeed = 10f; - - public float m_movement = 0.1f; - - public float m_ttl; - - public float m_fadeDuration = 0.2f; - - public float m_fadeInDuration; - - private Light m_light; - - private float m_baseIntensity = 1f; - - private Vector3 m_basePosition = Vector3.zero; - - private float m_time; - - private float m_flickerOffset; - - private void Awake() - { - m_light = GetComponent<Light>(); - m_baseIntensity = m_light.intensity; - m_basePosition = base.transform.localPosition; - m_flickerOffset = Random.Range(0f, 10f); - } - - private void OnEnable() - { - m_time = 0f; - if ((bool)m_light) - { - m_light.intensity = 0f; - } - } - - private void Update() - { - if (!m_light) - { - return; - } - m_time += Time.deltaTime; - float num = m_flickerOffset + Time.time * m_flickerSpeed; - float num2 = 1f + Mathf.Sin(num) * Mathf.Sin(num * 0.56436f) * Mathf.Cos(num * 0.758348f) * m_flickerIntensity; - if (m_fadeInDuration > 0f) - { - num2 *= Utils.LerpStep(0f, m_fadeInDuration, m_time); - } - if (m_ttl > 0f) - { - if (m_time > m_ttl) - { - Object.Destroy(base.gameObject); - return; - } - float l = m_ttl - m_fadeDuration; - num2 *= 1f - Utils.LerpStep(l, m_ttl, m_time); - } - m_light.intensity = m_baseIntensity * num2; - Vector3 vector = new Vector3(Mathf.Sin(num) * Mathf.Sin(num * 0.56436f), Mathf.Sin(num * 0.56436f) * Mathf.Sin(num * 0.688742f), Mathf.Cos(num * 0.758348f) * Mathf.Cos(num * 0.4563696f)) * m_movement; - base.transform.localPosition = m_basePosition + vector; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/LightLod.cs b/Valheim_v202102/Valheim/assembly_valheim/LightLod.cs deleted file mode 100644 index 9f8ab8f..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/LightLod.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System.Collections; -using UnityEngine; - -public class LightLod : MonoBehaviour -{ - public bool m_lightLod = true; - - public float m_lightDistance = 40f; - - public bool m_shadowLod = true; - - public float m_shadowDistance = 20f; - - private Light m_light; - - private float m_baseRange; - - private float m_baseShadowStrength; - - private void Awake() - { - m_light = GetComponent<Light>(); - m_baseRange = m_light.range; - m_baseShadowStrength = m_light.shadowStrength; - if (m_shadowLod && m_light.shadows == LightShadows.None) - { - m_shadowLod = false; - } - if (m_lightLod) - { - m_light.range = 0f; - m_light.enabled = false; - } - if (m_shadowLod) - { - m_light.shadowStrength = 0f; - m_light.shadows = LightShadows.None; - } - } - - private void OnEnable() - { - StartCoroutine("UpdateLoop"); - } - - private IEnumerator UpdateLoop() - { - while (true) - { - Camera mainCamera = Utils.GetMainCamera(); - if ((bool)mainCamera && (bool)m_light) - { - float distance = Vector3.Distance(mainCamera.transform.position, base.transform.position); - if (m_lightLod) - { - if (distance < m_lightDistance) - { - while ((bool)m_light && (m_light.range < m_baseRange || !m_light.enabled)) - { - m_light.enabled = true; - m_light.range = Mathf.Min(m_baseRange, m_light.range + Time.deltaTime * m_baseRange); - yield return null; - } - } - else - { - while ((bool)m_light && (m_light.range > 0f || m_light.enabled)) - { - m_light.range = Mathf.Max(0f, m_light.range - Time.deltaTime * m_baseRange); - if (m_light.range <= 0f) - { - m_light.enabled = false; - } - yield return null; - } - } - } - if (m_shadowLod) - { - if (distance < m_shadowDistance) - { - while ((bool)m_light && (m_light.shadowStrength < m_baseShadowStrength || m_light.shadows == LightShadows.None)) - { - m_light.shadows = LightShadows.Soft; - m_light.shadowStrength = Mathf.Min(m_baseShadowStrength, m_light.shadowStrength + Time.deltaTime * m_baseShadowStrength); - yield return null; - } - } - else - { - while ((bool)m_light && (m_light.shadowStrength > 0f || m_light.shadows != 0)) - { - m_light.shadowStrength = Mathf.Max(0f, m_light.shadowStrength - Time.deltaTime * m_baseShadowStrength); - if (m_light.shadowStrength <= 0f) - { - m_light.shadows = LightShadows.None; - } - yield return null; - } - } - } - } - yield return new WaitForSeconds(1f); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/LineAttach.cs b/Valheim_v202102/Valheim/assembly_valheim/LineAttach.cs deleted file mode 100644 index 3fcbc50..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/LineAttach.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -[ExecuteInEditMode] -public class LineAttach : MonoBehaviour -{ - public List<Transform> m_attachments = new List<Transform>(); - - private LineRenderer m_lineRenderer; - - private void Start() - { - m_lineRenderer = GetComponent<LineRenderer>(); - } - - private void LateUpdate() - { - for (int i = 0; i < m_attachments.Count; i++) - { - Transform transform = m_attachments[i]; - if ((bool)transform) - { - m_lineRenderer.SetPosition(i, base.transform.InverseTransformPoint(transform.position)); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/LineConnect.cs b/Valheim_v202102/Valheim/assembly_valheim/LineConnect.cs deleted file mode 100644 index e2f9298..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/LineConnect.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class LineConnect : MonoBehaviour -{ - public bool m_centerOfCharacter; - - public string m_childObject = ""; - - public bool m_hideIfNoConnection = true; - - public Vector3 m_noConnectionWorldOffset = new Vector3(0f, -1f, 0f); - - [Header("Dynamic slack")] - public bool m_dynamicSlack; - - public float m_slack = 0.5f; - - [Header("Thickness")] - public bool m_dynamicThickness = true; - - public float m_minDistance = 6f; - - public float m_maxDistance = 30f; - - public float m_minThickness = 0.2f; - - public float m_maxThickness = 0.8f; - - public float m_thicknessPower = 0.2f; - - public string m_netViewPrefix = ""; - - private LineRenderer m_lineRenderer; - - private ZNetView m_nview; - - private KeyValuePair<int, int> m_linePeerID; - - private void Awake() - { - m_lineRenderer = GetComponent<LineRenderer>(); - m_nview = GetComponentInParent<ZNetView>(); - m_linePeerID = ZDO.GetHashZDOID(m_netViewPrefix + "line_peer"); - } - - private void LateUpdate() - { - if (!m_nview.IsValid()) - { - m_lineRenderer.enabled = false; - return; - } - ZDOID zDOID = m_nview.GetZDO().GetZDOID(m_linePeerID); - GameObject gameObject = ZNetScene.instance.FindInstance(zDOID); - if ((bool)gameObject && !string.IsNullOrEmpty(m_childObject)) - { - Transform transform = Utils.FindChild(gameObject.transform, m_childObject); - if ((bool)transform) - { - gameObject = transform.gameObject; - } - } - if (gameObject != null) - { - Vector3 endpoint = gameObject.transform.position; - if (m_centerOfCharacter) - { - Character component = gameObject.GetComponent<Character>(); - if ((bool)component) - { - endpoint = component.GetCenterPoint(); - } - } - SetEndpoint(endpoint); - m_lineRenderer.enabled = true; - } - else if (m_hideIfNoConnection) - { - m_lineRenderer.enabled = false; - } - else - { - m_lineRenderer.enabled = true; - SetEndpoint(base.transform.position + m_noConnectionWorldOffset); - } - } - - private void SetEndpoint(Vector3 pos) - { - Vector3 vector = base.transform.InverseTransformPoint(pos); - Vector3 vector2 = base.transform.InverseTransformDirection(Vector3.down); - if (m_dynamicSlack) - { - Vector3 position = m_lineRenderer.GetPosition(0); - Vector3 b = vector; - float num = Vector3.Distance(position, b) / 2f; - for (int i = 1; i < m_lineRenderer.positionCount; i++) - { - float num2 = (float)i / (float)(m_lineRenderer.positionCount - 1); - float num3 = Mathf.Abs(0.5f - num2) * 2f; - num3 *= num3; - num3 = 1f - num3; - Vector3 position2 = Vector3.Lerp(position, b, num2); - position2 += vector2 * num * m_slack * num3; - m_lineRenderer.SetPosition(i, position2); - } - } - else - { - m_lineRenderer.SetPosition(1, vector); - } - if (m_dynamicThickness) - { - float v = Vector3.Distance(base.transform.position, pos); - float f = Utils.LerpStep(m_minDistance, m_maxDistance, v); - f = Mathf.Pow(f, m_thicknessPower); - m_lineRenderer.widthMultiplier = Mathf.Lerp(m_maxThickness, m_minThickness, f); - } - } - - public void SetPeer(ZNetView other) - { - if ((bool)other) - { - SetPeer(other.GetZDO().m_uid); - } - else - { - SetPeer(ZDOID.None); - } - } - - public void SetPeer(ZDOID zdoid) - { - if (m_nview.IsValid()) - { - m_nview.GetZDO().Set(m_linePeerID, zdoid); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Location.cs b/Valheim_v202102/Valheim/assembly_valheim/Location.cs deleted file mode 100644 index 1cb1b0c..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Location.cs +++ /dev/null @@ -1,118 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Serialization; - -public class Location : MonoBehaviour -{ - [FormerlySerializedAs("m_radius")] - public float m_exteriorRadius = 20f; - - public bool m_noBuild = true; - - public bool m_clearArea = true; - - [Header("Other")] - public bool m_applyRandomDamage; - - [Header("Interior")] - public bool m_hasInterior; - - public float m_interiorRadius = 20f; - - public string m_interiorEnvironment = ""; - - public GameObject m_interiorPrefab; - - private static List<Location> m_allLocations = new List<Location>(); - - private void Awake() - { - m_allLocations.Add(this); - if (m_hasInterior) - { - Vector3 zoneCenter = GetZoneCenter(); - GameObject obj = Object.Instantiate(position: new Vector3(zoneCenter.x, base.transform.position.y + 5000f, zoneCenter.z), original: m_interiorPrefab, rotation: Quaternion.identity, parent: base.transform); - obj.transform.localScale = new Vector3(ZoneSystem.instance.m_zoneSize, 500f, ZoneSystem.instance.m_zoneSize); - obj.GetComponent<EnvZone>().m_environment = m_interiorEnvironment; - } - } - - private Vector3 GetZoneCenter() - { - Vector2i zone = ZoneSystem.instance.GetZone(base.transform.position); - return ZoneSystem.instance.GetZonePos(zone); - } - - private void OnDestroy() - { - m_allLocations.Remove(this); - } - - private void OnDrawGizmos() - { - Gizmos.color = new Color(0.8f, 0.8f, 0.8f, 0.5f); - Gizmos.matrix = Matrix4x4.TRS(base.transform.position + new Vector3(0f, -0.01f, 0f), Quaternion.identity, new Vector3(1f, 0.001f, 1f)); - Gizmos.DrawSphere(Vector3.zero, m_exteriorRadius); - Gizmos.matrix = Matrix4x4.identity; - Utils.DrawGizmoCircle(base.transform.position, m_exteriorRadius, 32); - if (m_hasInterior) - { - Utils.DrawGizmoCircle(base.transform.position + new Vector3(0f, 5000f, 0f), m_interiorRadius, 32); - Utils.DrawGizmoCircle(base.transform.position, m_interiorRadius, 32); - Gizmos.matrix = Matrix4x4.TRS(base.transform.position + new Vector3(0f, 5000f, 0f), Quaternion.identity, new Vector3(1f, 0.001f, 1f)); - Gizmos.DrawSphere(Vector3.zero, m_interiorRadius); - Gizmos.matrix = Matrix4x4.identity; - } - } - - private float GetMaxRadius() - { - if (!m_hasInterior) - { - return m_exteriorRadius; - } - return Mathf.Max(m_exteriorRadius, m_interiorRadius); - } - - public bool IsInside(Vector3 point, float radius) - { - float maxRadius = GetMaxRadius(); - return Utils.DistanceXZ(base.transform.position, point) < maxRadius; - } - - public static bool IsInsideLocation(Vector3 point, float distance) - { - foreach (Location allLocation in m_allLocations) - { - if (allLocation.IsInside(point, distance)) - { - return true; - } - } - return false; - } - - public static Location GetLocation(Vector3 point) - { - foreach (Location allLocation in m_allLocations) - { - if (allLocation.IsInside(point, 0f)) - { - return allLocation; - } - } - return null; - } - - public static bool IsInsideNoBuildLocation(Vector3 point) - { - foreach (Location allLocation in m_allLocations) - { - if (allLocation.m_noBuild && allLocation.IsInside(point, 0f)) - { - return true; - } - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/LocationProxy.cs b/Valheim_v202102/Valheim/assembly_valheim/LocationProxy.cs deleted file mode 100644 index 2ff2833..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/LocationProxy.cs +++ /dev/null @@ -1,43 +0,0 @@ -using UnityEngine; - -public class LocationProxy : MonoBehaviour -{ - private GameObject m_instance; - - private ZNetView m_nview; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - SpawnLocation(); - } - - public void SetLocation(string location, int seed, bool spawnNow, int pgw) - { - int stableHashCode = location.GetStableHashCode(); - m_nview.GetZDO().Set("location", stableHashCode); - m_nview.GetZDO().Set("seed", seed); - m_nview.GetZDO().SetPGWVersion(pgw); - if (spawnNow) - { - SpawnLocation(); - } - } - - private bool SpawnLocation() - { - int @int = m_nview.GetZDO().GetInt("location"); - int int2 = m_nview.GetZDO().GetInt("seed"); - if (@int == 0) - { - return false; - } - m_instance = ZoneSystem.instance.SpawnProxyLocation(@int, int2, base.transform.position, base.transform.rotation); - if (m_instance == null) - { - return false; - } - m_instance.transform.SetParent(base.transform, worldPositionStays: true); - return true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/LodFadeInOut.cs b/Valheim_v202102/Valheim/assembly_valheim/LodFadeInOut.cs deleted file mode 100644 index ae4d2dd..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/LodFadeInOut.cs +++ /dev/null @@ -1,30 +0,0 @@ -using UnityEngine; - -public class LodFadeInOut : MonoBehaviour -{ - private Vector3 m_originalLocalRef; - - private LODGroup m_lodGroup; - - private const float m_minTriggerDistance = 20f; - - private void Awake() - { - Camera mainCamera = Utils.GetMainCamera(); - if (!(mainCamera == null) && Vector3.Distance(mainCamera.transform.position, base.transform.position) > 20f) - { - m_lodGroup = GetComponent<LODGroup>(); - if ((bool)m_lodGroup) - { - m_originalLocalRef = m_lodGroup.localReferencePoint; - m_lodGroup.localReferencePoint = new Vector3(999999f, 999999f, 999999f); - Invoke("FadeIn", Random.Range(0.1f, 0.3f)); - } - } - } - - private void FadeIn() - { - m_lodGroup.localReferencePoint = m_originalLocalRef; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/LootSpawner.cs b/Valheim_v202102/Valheim/assembly_valheim/LootSpawner.cs deleted file mode 100644 index 5488631..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/LootSpawner.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class LootSpawner : MonoBehaviour -{ - public DropTable m_items = new DropTable(); - - public EffectList m_spawnEffect = new EffectList(); - - public float m_respawnTimeMinuts = 10f; - - private const float m_triggerDistance = 20f; - - public bool m_spawnAtNight = true; - - public bool m_spawnAtDay = true; - - public bool m_spawnWhenEnemiesCleared; - - public float m_enemiesCheckRange = 30f; - - private ZNetView m_nview; - - private bool m_seenEnemies; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_nview.GetZDO() != null) - { - InvokeRepeating("UpdateSpawner", 10f, 2f); - } - } - - private void UpdateSpawner() - { - if (!m_nview.IsOwner() || (!m_spawnAtDay && EnvMan.instance.IsDay()) || (!m_spawnAtNight && EnvMan.instance.IsNight())) - { - return; - } - if (m_spawnWhenEnemiesCleared) - { - bool num = IsMonsterInRange(base.transform.position, m_enemiesCheckRange); - if (num && !m_seenEnemies) - { - m_seenEnemies = true; - } - if (num || !m_seenEnemies) - { - return; - } - } - long @long = m_nview.GetZDO().GetLong("spawn_time", 0L); - DateTime time = ZNet.instance.GetTime(); - DateTime dateTime = new DateTime(@long); - TimeSpan timeSpan = time - dateTime; - if ((!(m_respawnTimeMinuts <= 0f) || @long == 0L) && !(timeSpan.TotalMinutes < (double)m_respawnTimeMinuts) && Player.IsPlayerInRange(base.transform.position, 20f)) - { - List<GameObject> dropList = m_items.GetDropList(); - for (int i = 0; i < dropList.Count; i++) - { - Vector2 vector = UnityEngine.Random.insideUnitCircle * 0.3f; - Vector3 position = base.transform.position + new Vector3(vector.x, 0.3f * (float)i, vector.y); - Quaternion rotation = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f); - UnityEngine.Object.Instantiate(dropList[i], position, rotation); - } - m_spawnEffect.Create(base.transform.position, Quaternion.identity); - m_nview.GetZDO().Set("spawn_time", ZNet.instance.GetTime().Ticks); - m_seenEnemies = false; - } - } - - public static bool IsMonsterInRange(Vector3 point, float range) - { - foreach (Character allCharacter in Character.GetAllCharacters()) - { - if (allCharacter.IsMonsterFaction() && Vector3.Distance(allCharacter.transform.position, point) < range) - { - return true; - } - } - return false; - } - - private void OnDrawGizmos() - { - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MasterClient.cs b/Valheim_v202102/Valheim/assembly_valheim/MasterClient.cs deleted file mode 100644 index ce770bd..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MasterClient.cs +++ /dev/null @@ -1,291 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class MasterClient -{ - public class ServerData - { - public string m_name; - - public string m_host; - - public int m_port; - - public bool m_password; - - public bool m_upnp; - - public string m_version; - - public int m_players; - - public ulong m_steamHostID; - - public override bool Equals(object obj) - { - if (!(obj is ServerData serverData)) - { - return false; - } - if (serverData.m_name == m_name && serverData.m_host == m_host && serverData.m_port == m_port) - { - return serverData.m_steamHostID == m_steamHostID; - } - return false; - } - } - - private const int statVersion = 2; - - public Action<List<ServerData>> m_onServerList; - - private string m_msHost = "dvoid.noip.me"; - - private int m_msPort = 9983; - - private long m_sessionUID; - - private ZConnector2 m_connector; - - private ZSocket2 m_socket; - - private ZRpc m_rpc; - - private bool m_haveServerlist; - - private List<ServerData> m_servers = new List<ServerData>(); - - private ZPackage m_registerPkg; - - private float m_sendStatsTimer; - - private int m_serverListRevision; - - private string m_nameFilter = ""; - - private static MasterClient m_instance; - - public static MasterClient instance => m_instance; - - public static void Initialize() - { - if (m_instance == null) - { - m_instance = new MasterClient(); - } - } - - public MasterClient() - { - m_sessionUID = Utils.GenerateUID(); - } - - public void Dispose() - { - if (m_socket != null) - { - m_socket.Dispose(); - } - if (m_connector != null) - { - m_connector.Dispose(); - } - if (m_rpc != null) - { - m_rpc.Dispose(); - } - if (m_instance == this) - { - m_instance = null; - } - } - - public void Update(float dt) - { - if (m_rpc == null) - { - if (m_connector == null) - { - m_connector = new ZConnector2(m_msHost, m_msPort); - return; - } - if (m_connector.UpdateStatus(dt)) - { - m_socket = m_connector.Complete(); - if (m_socket != null) - { - m_rpc = new ZRpc(m_socket); - m_rpc.Register<ZPackage>("ServerList", RPC_ServerList); - if (m_registerPkg != null) - { - m_rpc.Invoke("RegisterServer2", m_registerPkg); - } - } - m_connector.Dispose(); - m_connector = null; - } - } - ZRpc rpc = m_rpc; - if (rpc != null) - { - rpc.Update(dt); - if (!rpc.IsConnected()) - { - m_rpc.Dispose(); - m_rpc = null; - } - } - if (m_rpc != null) - { - m_sendStatsTimer += dt; - if (m_sendStatsTimer > 60f) - { - m_sendStatsTimer = 0f; - SendStats(60f); - } - } - } - - private void SendStats(float duration) - { - ZPackage zPackage = new ZPackage(); - zPackage.Write(2); - zPackage.Write(m_sessionUID); - zPackage.Write(Time.time); - bool flag = Player.m_localPlayer != null; - zPackage.Write(flag ? duration : 0f); - bool flag2 = (bool)ZNet.instance && !ZNet.instance.IsServer(); - zPackage.Write(flag2 ? duration : 0f); - zPackage.Write(Version.GetVersionString()); - bool flag3 = (bool)ZNet.instance && ZNet.instance.IsServer(); - zPackage.Write(flag3); - if (flag3) - { - zPackage.Write(ZNet.instance.GetWorldUID()); - zPackage.Write(duration); - int num = ZNet.instance.GetPeerConnections(); - if (Player.m_localPlayer != null) - { - num++; - } - zPackage.Write(num); - bool data = ZNet.instance.GetZNat() != null && ZNet.instance.GetZNat().GetStatus(); - zPackage.Write(data); - } - PlayerProfile playerProfile = ((Game.instance != null) ? Game.instance.GetPlayerProfile() : null); - if (playerProfile != null) - { - zPackage.Write(data: true); - zPackage.Write(playerProfile.GetPlayerID()); - zPackage.Write(playerProfile.m_playerStats.m_kills); - zPackage.Write(playerProfile.m_playerStats.m_deaths); - zPackage.Write(playerProfile.m_playerStats.m_crafts); - zPackage.Write(playerProfile.m_playerStats.m_builds); - } - else - { - zPackage.Write(data: false); - } - m_rpc.Invoke("Stats", zPackage); - } - - public void RegisterServer(string name, string host, int port, bool password, bool upnp, long worldUID, string version) - { - m_registerPkg = new ZPackage(); - m_registerPkg.Write(1); - m_registerPkg.Write(name); - m_registerPkg.Write(host); - m_registerPkg.Write(port); - m_registerPkg.Write(password); - m_registerPkg.Write(upnp); - m_registerPkg.Write(worldUID); - m_registerPkg.Write(version); - if (m_rpc != null) - { - m_rpc.Invoke("RegisterServer2", m_registerPkg); - } - ZLog.Log("Registering server " + name + " " + host + ":" + port); - } - - public void UnregisterServer() - { - if (m_registerPkg != null) - { - if (m_rpc != null) - { - m_rpc.Invoke("UnregisterServer"); - } - m_registerPkg = null; - } - } - - public List<ServerData> GetServers() - { - return m_servers; - } - - public bool GetServers(List<ServerData> servers) - { - if (!m_haveServerlist) - { - return false; - } - servers.Clear(); - servers.AddRange(m_servers); - return true; - } - - public void RequestServerlist() - { - if (m_rpc != null) - { - m_rpc.Invoke("RequestServerlist2"); - } - } - - private void RPC_ServerList(ZRpc rpc, ZPackage pkg) - { - m_haveServerlist = true; - m_serverListRevision++; - pkg.ReadInt(); - int num = pkg.ReadInt(); - m_servers.Clear(); - for (int i = 0; i < num; i++) - { - ServerData serverData = new ServerData(); - serverData.m_name = pkg.ReadString(); - serverData.m_host = pkg.ReadString(); - serverData.m_port = pkg.ReadInt(); - serverData.m_password = pkg.ReadBool(); - serverData.m_upnp = pkg.ReadBool(); - pkg.ReadLong(); - serverData.m_version = pkg.ReadString(); - serverData.m_players = pkg.ReadInt(); - if (m_nameFilter.Length <= 0 || serverData.m_name.Contains(m_nameFilter)) - { - m_servers.Add(serverData); - } - } - if (m_onServerList != null) - { - m_onServerList(m_servers); - } - } - - public int GetServerListRevision() - { - return m_serverListRevision; - } - - public bool IsConnected() - { - return m_rpc != null; - } - - public void SetNameFilter(string filter) - { - m_nameFilter = filter; - ZLog.Log("filter is " + filter); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MeleeWeaponTrail.cs b/Valheim_v202102/Valheim/assembly_valheim/MeleeWeaponTrail.cs deleted file mode 100644 index 1b0f539..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MeleeWeaponTrail.cs +++ /dev/null @@ -1,344 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class MeleeWeaponTrail : MonoBehaviour -{ - [Serializable] - public class Point - { - public float timeCreated; - - public Vector3 basePosition; - - public Vector3 tipPosition; - } - - [SerializeField] - private bool _emit = true; - - private bool _use = true; - - [SerializeField] - private float _emitTime; - - [SerializeField] - private Material _material; - - [SerializeField] - private float _lifeTime = 1f; - - [SerializeField] - private Color[] _colors; - - [SerializeField] - private float[] _sizes; - - [SerializeField] - private float _minVertexDistance = 0.1f; - - [SerializeField] - private float _maxVertexDistance = 10f; - - private float _minVertexDistanceSqr; - - private float _maxVertexDistanceSqr; - - [SerializeField] - private float _maxAngle = 3f; - - [SerializeField] - private bool _autoDestruct; - - [SerializeField] - private int subdivisions = 4; - - [SerializeField] - private Transform _base; - - [SerializeField] - private Transform _tip; - - private List<Point> _points = new List<Point>(); - - private List<Point> _smoothedPoints = new List<Point>(); - - private GameObject _trailObject; - - private Mesh _trailMesh; - - private Vector3 _lastPosition; - - public bool Emit - { - set - { - _emit = value; - } - } - - public bool Use - { - set - { - _use = value; - } - } - - private void Start() - { - _lastPosition = base.transform.position; - _trailObject = new GameObject("Trail"); - _trailObject.transform.parent = null; - _trailObject.transform.position = Vector3.zero; - _trailObject.transform.rotation = Quaternion.identity; - _trailObject.transform.localScale = Vector3.one; - _trailObject.AddComponent(typeof(MeshFilter)); - _trailObject.AddComponent(typeof(MeshRenderer)); - _trailObject.GetComponent<Renderer>().material = _material; - _trailMesh = new Mesh(); - _trailMesh.name = base.name + "TrailMesh"; - _trailObject.GetComponent<MeshFilter>().mesh = _trailMesh; - _minVertexDistanceSqr = _minVertexDistance * _minVertexDistance; - _maxVertexDistanceSqr = _maxVertexDistance * _maxVertexDistance; - } - - private void OnDisable() - { - UnityEngine.Object.Destroy(_trailObject); - } - - private void FixedUpdate() - { - if (!_use) - { - return; - } - if (_emit && _emitTime != 0f) - { - _emitTime -= Time.fixedDeltaTime; - if (_emitTime == 0f) - { - _emitTime = -1f; - } - if (_emitTime < 0f) - { - _emit = false; - } - } - if (!_emit && _points.Count == 0 && _autoDestruct) - { - UnityEngine.Object.Destroy(_trailObject); - UnityEngine.Object.Destroy(base.gameObject); - } - if (Utils.GetMainCamera() == null) - { - return; - } - float sqrMagnitude = (_lastPosition - base.transform.position).sqrMagnitude; - if (_emit) - { - if (sqrMagnitude > _minVertexDistanceSqr) - { - bool flag = false; - if (_points.Count < 3) - { - flag = true; - } - else - { - Vector3 from = _points[_points.Count - 2].tipPosition - _points[_points.Count - 3].tipPosition; - Vector3 to = _points[_points.Count - 1].tipPosition - _points[_points.Count - 2].tipPosition; - if (Vector3.Angle(from, to) > _maxAngle || sqrMagnitude > _maxVertexDistanceSqr) - { - flag = true; - } - } - if (flag) - { - Point point = new Point(); - point.basePosition = _base.position; - point.tipPosition = _tip.position; - point.timeCreated = Time.time; - _points.Add(point); - _lastPosition = base.transform.position; - if (_points.Count == 1) - { - _smoothedPoints.Add(point); - } - else if (_points.Count > 1) - { - for (int i = 0; i < 1 + subdivisions; i++) - { - _smoothedPoints.Add(point); - } - } - if (_points.Count >= 4) - { - IEnumerable<Vector3> collection = Interpolate.NewCatmullRom(new Vector3[4] - { - _points[_points.Count - 4].tipPosition, - _points[_points.Count - 3].tipPosition, - _points[_points.Count - 2].tipPosition, - _points[_points.Count - 1].tipPosition - }, subdivisions, loop: false); - IEnumerable<Vector3> collection2 = Interpolate.NewCatmullRom(new Vector3[4] - { - _points[_points.Count - 4].basePosition, - _points[_points.Count - 3].basePosition, - _points[_points.Count - 2].basePosition, - _points[_points.Count - 1].basePosition - }, subdivisions, loop: false); - List<Vector3> list = new List<Vector3>(collection); - List<Vector3> list2 = new List<Vector3>(collection2); - float timeCreated = _points[_points.Count - 4].timeCreated; - float timeCreated2 = _points[_points.Count - 1].timeCreated; - for (int j = 0; j < list.Count; j++) - { - int num = _smoothedPoints.Count - (list.Count - j); - if (num > -1 && num < _smoothedPoints.Count) - { - Point point2 = new Point(); - point2.basePosition = list2[j]; - point2.tipPosition = list[j]; - point2.timeCreated = Mathf.Lerp(timeCreated, timeCreated2, (float)j / (float)list.Count); - _smoothedPoints[num] = point2; - } - } - } - } - else - { - _points[_points.Count - 1].basePosition = _base.position; - _points[_points.Count - 1].tipPosition = _tip.position; - _smoothedPoints[_smoothedPoints.Count - 1].basePosition = _base.position; - _smoothedPoints[_smoothedPoints.Count - 1].tipPosition = _tip.position; - } - } - else - { - if (_points.Count > 0) - { - _points[_points.Count - 1].basePosition = _base.position; - _points[_points.Count - 1].tipPosition = _tip.position; - } - if (_smoothedPoints.Count > 0) - { - _smoothedPoints[_smoothedPoints.Count - 1].basePosition = _base.position; - _smoothedPoints[_smoothedPoints.Count - 1].tipPosition = _tip.position; - } - } - } - RemoveOldPoints(_points); - if (_points.Count == 0) - { - _trailMesh.Clear(); - } - RemoveOldPoints(_smoothedPoints); - if (_smoothedPoints.Count == 0) - { - _trailMesh.Clear(); - } - List<Point> smoothedPoints = _smoothedPoints; - if (smoothedPoints.Count <= 1) - { - return; - } - Vector3[] array = new Vector3[smoothedPoints.Count * 2]; - Vector2[] array2 = new Vector2[smoothedPoints.Count * 2]; - int[] array3 = new int[(smoothedPoints.Count - 1) * 6]; - Color[] array4 = new Color[smoothedPoints.Count * 2]; - for (int k = 0; k < smoothedPoints.Count; k++) - { - Point point3 = smoothedPoints[k]; - float num2 = (Time.time - point3.timeCreated) / _lifeTime; - Color color = Color.Lerp(Color.white, Color.clear, num2); - if (_colors != null && _colors.Length != 0) - { - float num3 = num2 * (float)(_colors.Length - 1); - float num4 = Mathf.Floor(num3); - float num5 = Mathf.Clamp(Mathf.Ceil(num3), 1f, _colors.Length - 1); - float t = Mathf.InverseLerp(num4, num5, num3); - if (num4 >= (float)_colors.Length) - { - num4 = _colors.Length - 1; - } - if (num4 < 0f) - { - num4 = 0f; - } - if (num5 >= (float)_colors.Length) - { - num5 = _colors.Length - 1; - } - if (num5 < 0f) - { - num5 = 0f; - } - color = Color.Lerp(_colors[(int)num4], _colors[(int)num5], t); - } - float num6 = 0f; - if (_sizes != null && _sizes.Length != 0) - { - float num7 = num2 * (float)(_sizes.Length - 1); - float num8 = Mathf.Floor(num7); - float num9 = Mathf.Clamp(Mathf.Ceil(num7), 1f, _sizes.Length - 1); - float t2 = Mathf.InverseLerp(num8, num9, num7); - if (num8 >= (float)_sizes.Length) - { - num8 = _sizes.Length - 1; - } - if (num8 < 0f) - { - num8 = 0f; - } - if (num9 >= (float)_sizes.Length) - { - num9 = _sizes.Length - 1; - } - if (num9 < 0f) - { - num9 = 0f; - } - num6 = Mathf.Lerp(_sizes[(int)num8], _sizes[(int)num9], t2); - } - Vector3 vector = point3.tipPosition - point3.basePosition; - array[k * 2] = point3.basePosition - vector * (num6 * 0.5f); - array[k * 2 + 1] = point3.tipPosition + vector * (num6 * 0.5f); - array4[k * 2] = (array4[k * 2 + 1] = color); - float x = (float)k / (float)smoothedPoints.Count; - array2[k * 2] = new Vector2(x, 0f); - array2[k * 2 + 1] = new Vector2(x, 1f); - if (k > 0) - { - array3[(k - 1) * 6] = k * 2 - 2; - array3[(k - 1) * 6 + 1] = k * 2 - 1; - array3[(k - 1) * 6 + 2] = k * 2; - array3[(k - 1) * 6 + 3] = k * 2 + 1; - array3[(k - 1) * 6 + 4] = k * 2; - array3[(k - 1) * 6 + 5] = k * 2 - 1; - } - } - _trailMesh.Clear(); - _trailMesh.vertices = array; - _trailMesh.colors = array4; - _trailMesh.uv = array2; - _trailMesh.triangles = array3; - } - - private void RemoveOldPoints(List<Point> pointList) - { - List<Point> list = new List<Point>(); - foreach (Point point in pointList) - { - if (Time.time - point.timeCreated > _lifeTime) - { - list.Add(point); - } - } - foreach (Point item in list) - { - pointList.Remove(item); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Menu.cs b/Valheim_v202102/Valheim/assembly_valheim/Menu.cs deleted file mode 100644 index 0ab76a7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Menu.cs +++ /dev/null @@ -1,131 +0,0 @@ -using UnityEngine; - -public class Menu : MonoBehaviour -{ - private GameObject m_settingsInstance; - - private static Menu m_instance; - - public Transform m_root; - - public Transform m_menuDialog; - - public Transform m_quitDialog; - - public Transform m_logoutDialog; - - public GameObject m_settingsPrefab; - - public GameObject m_feedbackPrefab; - - private int m_hiddenFrames; - - public static Menu instance => m_instance; - - private void Start() - { - m_instance = this; - m_root.gameObject.SetActive(value: false); - } - - public static bool IsVisible() - { - if (m_instance == null) - { - return false; - } - return m_instance.m_hiddenFrames <= 2; - } - - private void Update() - { - if (Game.instance.IsLoggingOut()) - { - m_root.gameObject.SetActive(value: false); - return; - } - if (m_root.gameObject.activeSelf) - { - m_hiddenFrames = 0; - if ((Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("JoyMenu")) && !m_settingsInstance && !Feedback.IsVisible()) - { - if (m_quitDialog.gameObject.activeSelf) - { - OnQuitNo(); - } - else if (m_logoutDialog.gameObject.activeSelf) - { - OnLogoutNo(); - } - else - { - m_root.gameObject.SetActive(value: false); - } - } - return; - } - m_hiddenFrames++; - bool flag = !InventoryGui.IsVisible() && !Minimap.IsOpen() && !Console.IsVisible() && !TextInput.IsVisible() && !ZNet.instance.InPasswordDialog() && !StoreGui.IsVisible() && !Hud.IsPieceSelectionVisible(); - if ((Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("JoyMenu")) && flag) - { - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "Menu", 0L); - m_root.gameObject.SetActive(value: true); - m_menuDialog.gameObject.SetActive(value: true); - m_logoutDialog.gameObject.SetActive(value: false); - m_quitDialog.gameObject.SetActive(value: false); - } - } - - public void OnSettings() - { - GoogleAnalyticsV4.instance.LogEvent("Screen", "Enter", "Settings", 0L); - m_settingsInstance = Object.Instantiate(m_settingsPrefab, base.transform); - } - - public void OnQuit() - { - m_quitDialog.gameObject.SetActive(value: true); - m_menuDialog.gameObject.SetActive(value: false); - } - - public void OnQuitYes() - { - GoogleAnalyticsV4.instance.LogEvent("Game", "Quit", "", 0L); - Application.Quit(); - } - - public void OnQuitNo() - { - m_quitDialog.gameObject.SetActive(value: false); - m_menuDialog.gameObject.SetActive(value: true); - } - - public void OnLogout() - { - m_menuDialog.gameObject.SetActive(value: false); - m_logoutDialog.gameObject.SetActive(value: true); - } - - public void OnLogoutYes() - { - GoogleAnalyticsV4.instance.LogEvent("Game", "LogOut", "", 0L); - Game.instance.Logout(); - } - - public void OnLogoutNo() - { - m_logoutDialog.gameObject.SetActive(value: false); - m_menuDialog.gameObject.SetActive(value: true); - } - - public void OnClose() - { - GoogleAnalyticsV4.instance.LogEvent("Screen", "Exit", "Menu", 0L); - m_root.gameObject.SetActive(value: false); - } - - public void OnButtonFeedback() - { - Object.Instantiate(m_feedbackPrefab, base.transform); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MenuScene.cs b/Valheim_v202102/Valheim/assembly_valheim/MenuScene.cs deleted file mode 100644 index 6a14e0e..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MenuScene.cs +++ /dev/null @@ -1,41 +0,0 @@ -using UnityEngine; - -[ExecuteInEditMode] -public class MenuScene : MonoBehaviour -{ - public Light m_dirLight; - - public Color m_sunFogColor = Color.white; - - public Color m_fogColor = Color.white; - - public Color m_ambientLightColor = Color.white; - - public float m_fogDensity = 1f; - - public Vector3 m_windDir = Vector3.left; - - public float m_windIntensity = 0.5f; - - private void Awake() - { - Shader.SetGlobalFloat("_Wet", 0f); - } - - private void Update() - { - Shader.SetGlobalVector("_SkyboxSunDir", -m_dirLight.transform.forward); - Shader.SetGlobalVector("_SunDir", -m_dirLight.transform.forward); - Shader.SetGlobalColor("_SunFogColor", m_sunFogColor); - Shader.SetGlobalColor("_SunColor", m_dirLight.color * m_dirLight.intensity); - Shader.SetGlobalColor("_AmbientColor", RenderSettings.ambientLight); - RenderSettings.fogColor = m_fogColor; - RenderSettings.fogDensity = m_fogDensity; - RenderSettings.ambientLight = m_ambientLightColor; - Vector3 normalized = m_windDir.normalized; - Shader.SetGlobalVector("_GlobalWindForce", normalized * m_windIntensity); - Shader.SetGlobalVector("_GlobalWind1", new Vector4(normalized.x, normalized.y, normalized.z, m_windIntensity)); - Shader.SetGlobalVector("_GlobalWind2", Vector4.one); - Shader.SetGlobalFloat("_GlobalWindAlpha", 0f); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MenuShipMovement.cs b/Valheim_v202102/Valheim/assembly_valheim/MenuShipMovement.cs deleted file mode 100644 index 22ebd04..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MenuShipMovement.cs +++ /dev/null @@ -1,23 +0,0 @@ -using UnityEngine; - -public class MenuShipMovement : MonoBehaviour -{ - public float m_freq = 1f; - - public float m_xAngle = 5f; - - public float m_zAngle = 5f; - - private float m_time; - - private void Start() - { - m_time = Random.Range(0, 10); - } - - private void Update() - { - m_time += Time.deltaTime; - base.transform.rotation = Quaternion.Euler(Mathf.Sin(m_time * m_freq) * m_xAngle, 0f, Mathf.Sin(m_time * 1.5341234f * m_freq) * m_zAngle); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MessageHud.cs b/Valheim_v202102/Valheim/assembly_valheim/MessageHud.cs deleted file mode 100644 index 26ed8af..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MessageHud.cs +++ /dev/null @@ -1,305 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class MessageHud : MonoBehaviour -{ - public enum MessageType - { - TopLeft = 1, - Center - } - - private class UnlockMsg - { - public Sprite m_icon; - - public string m_topic; - - public string m_description; - } - - private class MsgData - { - public Sprite m_icon; - - public string m_text; - - public int m_amount; - } - - private class BiomeMessage - { - public string m_text; - - public bool m_playStinger; - } - - private MsgData currentMsg = new MsgData(); - - private static MessageHud m_instance; - - public Text m_messageText; - - public Image m_messageIcon; - - public Text m_messageCenterText; - - public GameObject m_unlockMsgPrefab; - - public int m_maxUnlockMsgSpace = 110; - - public int m_maxUnlockMessages = 4; - - public int m_maxLogMessages = 50; - - public GameObject m_biomeFoundPrefab; - - public GameObject m_biomeFoundStinger; - - private Queue<BiomeMessage> m_biomeFoundQueue = new Queue<BiomeMessage>(); - - private List<string> m_messageLog = new List<string>(); - - private List<GameObject> m_unlockMessages = new List<GameObject>(); - - private Queue<UnlockMsg> m_unlockMsgQueue = new Queue<UnlockMsg>(); - - private Queue<MsgData> m_msgQeue = new Queue<MsgData>(); - - private float m_msgQueueTimer = -1f; - - private GameObject m_biomeMsgInstance; - - public static MessageHud instance => m_instance; - - private void Awake() - { - m_instance = this; - } - - private void OnDestroy() - { - m_instance = null; - } - - private void Start() - { - m_messageText.canvasRenderer.SetAlpha(0f); - m_messageIcon.canvasRenderer.SetAlpha(0f); - m_messageCenterText.canvasRenderer.SetAlpha(0f); - for (int i = 0; i < m_maxUnlockMessages; i++) - { - m_unlockMessages.Add(null); - } - ZRoutedRpc.instance.Register<int, string>("ShowMessage", RPC_ShowMessage); - } - - private void Update() - { - if (Hud.IsUserHidden()) - { - HideAll(); - return; - } - UpdateUnlockMsg(Time.deltaTime); - UpdateMessage(Time.deltaTime); - UpdateBiomeFound(Time.deltaTime); - } - - private void HideAll() - { - for (int i = 0; i < m_maxUnlockMessages; i++) - { - if (m_unlockMessages[i] != null) - { - Object.Destroy(m_unlockMessages[i]); - m_unlockMessages[i] = null; - } - } - m_messageText.canvasRenderer.SetAlpha(0f); - m_messageIcon.canvasRenderer.SetAlpha(0f); - m_messageCenterText.canvasRenderer.SetAlpha(0f); - if ((bool)m_biomeMsgInstance) - { - Object.Destroy(m_biomeMsgInstance); - m_biomeMsgInstance = null; - } - } - - public void MessageAll(MessageType type, string text) - { - ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "ShowMessage", (int)type, text); - } - - private void RPC_ShowMessage(long sender, int type, string text) - { - ShowMessage((MessageType)type, text); - } - - public void ShowMessage(MessageType type, string text, int amount = 0, Sprite icon = null) - { - if (!Hud.IsUserHidden()) - { - text = Localization.instance.Localize(text); - switch (type) - { - case MessageType.TopLeft: - { - MsgData msgData = new MsgData(); - msgData.m_icon = icon; - msgData.m_text = text; - msgData.m_amount = amount; - m_msgQeue.Enqueue(msgData); - AddLog(text); - break; - } - case MessageType.Center: - m_messageCenterText.text = text; - m_messageCenterText.canvasRenderer.SetAlpha(1f); - m_messageCenterText.CrossFadeAlpha(0f, 4f, ignoreTimeScale: true); - break; - } - } - } - - private void UpdateMessage(float dt) - { - m_msgQueueTimer += dt; - if (m_msgQeue.Count <= 0) - { - return; - } - MsgData msgData = m_msgQeue.Peek(); - bool flag = m_msgQueueTimer < 4f && msgData.m_text == currentMsg.m_text && msgData.m_icon == currentMsg.m_icon; - if (m_msgQueueTimer >= 1f || flag) - { - MsgData msgData2 = m_msgQeue.Dequeue(); - m_messageText.text = msgData2.m_text; - if (flag) - { - msgData2.m_amount += currentMsg.m_amount; - } - if (msgData2.m_amount > 1) - { - Text messageText = m_messageText; - messageText.text = messageText.text + " x" + msgData2.m_amount; - } - m_messageText.canvasRenderer.SetAlpha(1f); - m_messageText.CrossFadeAlpha(0f, 4f, ignoreTimeScale: true); - if (msgData2.m_icon != null) - { - m_messageIcon.sprite = msgData2.m_icon; - m_messageIcon.canvasRenderer.SetAlpha(1f); - m_messageIcon.CrossFadeAlpha(0f, 4f, ignoreTimeScale: true); - } - else - { - m_messageIcon.canvasRenderer.SetAlpha(0f); - } - currentMsg = msgData2; - m_msgQueueTimer = 0f; - } - } - - private void UpdateBiomeFound(float dt) - { - if (m_biomeMsgInstance != null && m_biomeMsgInstance.GetComponentInChildren<Animator>().GetCurrentAnimatorStateInfo(0).IsTag("done")) - { - Object.Destroy(m_biomeMsgInstance); - m_biomeMsgInstance = null; - } - if (m_biomeFoundQueue.Count > 0 && m_biomeMsgInstance == null && m_msgQeue.Count == 0 && m_msgQueueTimer > 2f) - { - BiomeMessage biomeMessage = m_biomeFoundQueue.Dequeue(); - m_biomeMsgInstance = Object.Instantiate(m_biomeFoundPrefab, base.transform); - Text component = Utils.FindChild(m_biomeMsgInstance.transform, "Title").GetComponent<Text>(); - string text = Localization.instance.Localize(biomeMessage.m_text); - component.text = text; - if (biomeMessage.m_playStinger && (bool)m_biomeFoundStinger) - { - Object.Instantiate(m_biomeFoundStinger); - } - } - } - - public void ShowBiomeFoundMsg(string text, bool playStinger) - { - BiomeMessage biomeMessage = new BiomeMessage(); - biomeMessage.m_text = text; - biomeMessage.m_playStinger = playStinger; - m_biomeFoundQueue.Enqueue(biomeMessage); - } - - public void QueueUnlockMsg(Sprite icon, string topic, string description) - { - UnlockMsg unlockMsg = new UnlockMsg(); - unlockMsg.m_icon = icon; - unlockMsg.m_topic = Localization.instance.Localize(topic); - unlockMsg.m_description = Localization.instance.Localize(description); - m_unlockMsgQueue.Enqueue(unlockMsg); - AddLog(topic + ":" + description); - ZLog.Log("Queue unlock msg:" + topic + ":" + description); - } - - private int GetFreeUnlockMsgSlot() - { - for (int i = 0; i < m_unlockMessages.Count; i++) - { - if (m_unlockMessages[i] == null) - { - return i; - } - } - return -1; - } - - private void UpdateUnlockMsg(float dt) - { - for (int i = 0; i < m_unlockMessages.Count; i++) - { - GameObject gameObject = m_unlockMessages[i]; - if (!(gameObject == null) && gameObject.GetComponentInChildren<Animator>().GetCurrentAnimatorStateInfo(0).IsTag("done")) - { - Object.Destroy(gameObject); - m_unlockMessages[i] = null; - break; - } - } - if (m_unlockMsgQueue.Count > 0) - { - int freeUnlockMsgSlot = GetFreeUnlockMsgSlot(); - if (freeUnlockMsgSlot != -1) - { - Transform parent = base.transform; - GameObject gameObject2 = Object.Instantiate(m_unlockMsgPrefab, parent); - m_unlockMessages[freeUnlockMsgSlot] = gameObject2; - RectTransform obj = gameObject2.transform as RectTransform; - Vector3 vector = obj.anchoredPosition; - vector.y -= m_maxUnlockMsgSpace * freeUnlockMsgSlot; - obj.anchoredPosition = vector; - UnlockMsg unlockMsg = m_unlockMsgQueue.Dequeue(); - Image component = obj.Find("UnlockMessage/icon_bkg/UnlockIcon").GetComponent<Image>(); - Text component2 = obj.Find("UnlockMessage/UnlockTitle").GetComponent<Text>(); - Text component3 = obj.Find("UnlockMessage/UnlockDescription").GetComponent<Text>(); - component.sprite = unlockMsg.m_icon; - component2.text = unlockMsg.m_topic; - component3.text = unlockMsg.m_description; - } - } - } - - private void AddLog(string logText) - { - m_messageLog.Add(logText); - while (m_messageLog.Count > m_maxLogMessages) - { - m_messageLog.RemoveAt(0); - } - } - - public List<string> GetLog() - { - return m_messageLog; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MineRock.cs b/Valheim_v202102/Valheim/assembly_valheim/MineRock.cs deleted file mode 100644 index e177734..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MineRock.cs +++ /dev/null @@ -1,233 +0,0 @@ -using System; -using UnityEngine; - -public class MineRock : MonoBehaviour, IDestructible, Hoverable -{ - public string m_name = ""; - - public float m_health = 2f; - - public bool m_removeWhenDestroyed = true; - - public HitData.DamageModifiers m_damageModifiers; - - public int m_minToolTier; - - public GameObject m_areaRoot; - - public GameObject m_baseModel; - - public EffectList m_destroyedEffect = new EffectList(); - - public EffectList m_hitEffect = new EffectList(); - - public DropTable m_dropItems; - - public Action m_onHit; - - private Collider[] m_hitAreas; - - private MeshRenderer[][] m_areaMeshes; - - private ZNetView m_nview; - - private void Start() - { - m_hitAreas = ((m_areaRoot != null) ? m_areaRoot.GetComponentsInChildren<Collider>() : base.gameObject.GetComponentsInChildren<Collider>()); - if ((bool)m_baseModel) - { - m_areaMeshes = new MeshRenderer[m_hitAreas.Length][]; - for (int i = 0; i < m_hitAreas.Length; i++) - { - m_areaMeshes[i] = m_hitAreas[i].GetComponents<MeshRenderer>(); - } - } - m_nview = GetComponent<ZNetView>(); - if ((bool)m_nview && m_nview.GetZDO() != null) - { - m_nview.Register<HitData, int>("Hit", RPC_Hit); - m_nview.Register<int>("Hide", RPC_Hide); - } - InvokeRepeating("UpdateVisability", UnityEngine.Random.Range(1f, 2f), 10f); - } - - public string GetHoverText() - { - return Localization.instance.Localize(m_name); - } - - public string GetHoverName() - { - return m_name; - } - - private void UpdateVisability() - { - bool flag = false; - for (int i = 0; i < m_hitAreas.Length; i++) - { - Collider collider = m_hitAreas[i]; - if ((bool)collider) - { - string text = "Health" + i; - bool flag2 = m_nview.GetZDO().GetFloat(text, m_health) > 0f; - collider.gameObject.SetActive(flag2); - if (!flag2) - { - flag = true; - } - } - } - if (!m_baseModel) - { - return; - } - m_baseModel.SetActive(!flag); - MeshRenderer[][] areaMeshes = m_areaMeshes; - foreach (MeshRenderer[] array in areaMeshes) - { - for (int k = 0; k < array.Length; k++) - { - array[k].enabled = flag; - } - } - } - - public DestructibleType GetDestructibleType() - { - return DestructibleType.Default; - } - - public void Damage(HitData hit) - { - if (hit.m_hitCollider == null) - { - ZLog.Log("Minerock hit has no collider"); - return; - } - int areaIndex = GetAreaIndex(hit.m_hitCollider); - if (areaIndex == -1) - { - ZLog.Log("Invalid hit area on " + base.gameObject.name); - return; - } - ZLog.Log("Hit mine rock area " + areaIndex); - m_nview.InvokeRPC("Hit", hit, areaIndex); - } - - private void RPC_Hit(long sender, HitData hit, int hitAreaIndex) - { - if (!m_nview.IsOwner()) - { - return; - } - Collider hitArea = GetHitArea(hitAreaIndex); - if (hitArea == null) - { - ZLog.Log("Missing hit area " + hitAreaIndex); - return; - } - string text = "Health" + hitAreaIndex; - float @float = m_nview.GetZDO().GetFloat(text, m_health); - if (@float <= 0f) - { - ZLog.Log("Already destroyed"); - return; - } - hit.ApplyResistance(m_damageModifiers, out var significantModifier); - float totalDamage = hit.GetTotalDamage(); - if (hit.m_toolTier < m_minToolTier) - { - DamageText.instance.ShowText(DamageText.TextType.TooHard, hit.m_point, 0f); - return; - } - DamageText.instance.ShowText(significantModifier, hit.m_point, totalDamage); - if (totalDamage <= 0f) - { - return; - } - @float -= totalDamage; - m_nview.GetZDO().Set(text, @float); - m_hitEffect.Create(hit.m_point, Quaternion.identity); - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, 10f); - if ((bool)closestPlayer) - { - closestPlayer.AddNoise(100f); - } - if (m_onHit != null) - { - m_onHit(); - } - if (!(@float <= 0f)) - { - return; - } - m_destroyedEffect.Create(hitArea.bounds.center, Quaternion.identity); - m_nview.InvokeRPC(ZNetView.Everybody, "Hide", hitAreaIndex); - foreach (GameObject drop in m_dropItems.GetDropList()) - { - Vector3 position = hit.m_point - hit.m_dir * 0.2f + UnityEngine.Random.insideUnitSphere * 0.3f; - UnityEngine.Object.Instantiate(drop, position, Quaternion.identity); - } - if (m_removeWhenDestroyed && AllDestroyed()) - { - m_nview.Destroy(); - } - } - - private bool AllDestroyed() - { - for (int i = 0; i < m_hitAreas.Length; i++) - { - string text = "Health" + i; - if (m_nview.GetZDO().GetFloat(text, m_health) > 0f) - { - return false; - } - } - return true; - } - - private void RPC_Hide(long sender, int index) - { - Collider hitArea = GetHitArea(index); - if ((bool)hitArea) - { - hitArea.gameObject.SetActive(value: false); - } - if (!m_baseModel || !m_baseModel.activeSelf) - { - return; - } - m_baseModel.SetActive(value: false); - MeshRenderer[][] areaMeshes = m_areaMeshes; - foreach (MeshRenderer[] array in areaMeshes) - { - for (int j = 0; j < array.Length; j++) - { - array[j].enabled = true; - } - } - } - - private int GetAreaIndex(Collider area) - { - for (int i = 0; i < m_hitAreas.Length; i++) - { - if (m_hitAreas[i] == area) - { - return i; - } - } - return -1; - } - - private Collider GetHitArea(int index) - { - if (index < 0 || index >= m_hitAreas.Length) - { - return null; - } - return m_hitAreas[index]; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MineRock5.cs b/Valheim_v202102/Valheim/assembly_valheim/MineRock5.cs deleted file mode 100644 index c250c15..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MineRock5.cs +++ /dev/null @@ -1,472 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class MineRock5 : MonoBehaviour, IDestructible, Hoverable -{ - private struct BoundData - { - public Vector3 m_pos; - - public Quaternion m_rot; - - public Vector3 m_size; - } - - private class HitArea - { - public Collider m_collider; - - public MeshRenderer m_meshRenderer; - - public MeshFilter m_meshFilter; - - public StaticPhysics m_physics; - - public float m_health; - - public BoundData m_bound; - - public bool m_supported; - - public float m_baseScale; - } - - private static Mesh m_tempMeshA; - - private static Mesh m_tempMeshB; - - private static List<CombineInstance> m_tempInstancesA = new List<CombineInstance>(); - - private static List<CombineInstance> m_tempInstancesB = new List<CombineInstance>(); - - public string m_name = ""; - - public float m_health = 2f; - - public HitData.DamageModifiers m_damageModifiers; - - public int m_minToolTier; - - public bool m_supportCheck = true; - - public EffectList m_destroyedEffect = new EffectList(); - - public EffectList m_hitEffect = new EffectList(); - - public DropTable m_dropItems; - - private List<HitArea> m_hitAreas; - - private List<Renderer> m_extraRenderers; - - private bool m_haveSetupBounds; - - private ZNetView m_nview; - - private MeshFilter m_meshFilter; - - private MeshRenderer m_meshRenderer; - - private uint m_lastDataRevision; - - private const int m_supportIterations = 3; - - private static int m_rayMask = 0; - - private static int m_groundLayer = 0; - - private static Collider[] m_tempColliders = new Collider[128]; - - private void Start() - { - Collider[] componentsInChildren = base.gameObject.GetComponentsInChildren<Collider>(); - m_hitAreas = new List<HitArea>(componentsInChildren.Length); - m_extraRenderers = new List<Renderer>(); - foreach (Collider collider in componentsInChildren) - { - HitArea hitArea = new HitArea(); - hitArea.m_collider = collider; - hitArea.m_meshFilter = collider.GetComponent<MeshFilter>(); - hitArea.m_meshRenderer = collider.GetComponent<MeshRenderer>(); - hitArea.m_physics = collider.GetComponent<StaticPhysics>(); - hitArea.m_health = m_health; - hitArea.m_baseScale = hitArea.m_collider.transform.localScale.x; - for (int j = 0; j < collider.transform.childCount; j++) - { - Renderer[] componentsInChildren2 = collider.transform.GetChild(j).GetComponentsInChildren<Renderer>(); - m_extraRenderers.AddRange(componentsInChildren2); - } - m_hitAreas.Add(hitArea); - } - if (m_rayMask == 0) - { - m_rayMask = LayerMask.GetMask("piece", "Default", "static_solid", "Default_small", "terrain"); - } - if (m_groundLayer == 0) - { - m_groundLayer = LayerMask.NameToLayer("terrain"); - } - Material[] array = null; - foreach (HitArea hitArea2 in m_hitAreas) - { - if (array == null || hitArea2.m_meshRenderer.sharedMaterials.Length > array.Length) - { - array = hitArea2.m_meshRenderer.sharedMaterials; - } - } - m_meshFilter = base.gameObject.AddComponent<MeshFilter>(); - m_meshRenderer = base.gameObject.AddComponent<MeshRenderer>(); - m_meshRenderer.sharedMaterials = array; - m_meshFilter.mesh = new Mesh(); - m_nview = GetComponent<ZNetView>(); - if ((bool)m_nview && m_nview.GetZDO() != null) - { - m_nview.Register<HitData, int>("Damage", RPC_Damage); - m_nview.Register<int, float>("SetAreaHealth", RPC_SetAreaHealth); - } - CheckForUpdate(); - InvokeRepeating("CheckForUpdate", Random.Range(5f, 10f), 10f); - } - - private void CheckSupport() - { - if (!m_nview.IsValid() || !m_nview.IsOwner()) - { - return; - } - UpdateSupport(); - for (int i = 0; i < m_hitAreas.Count; i++) - { - HitArea hitArea = m_hitAreas[i]; - if (hitArea.m_health > 0f && !hitArea.m_supported) - { - HitData hitData = new HitData(); - hitData.m_damage.m_damage = m_health; - hitData.m_point = hitArea.m_collider.bounds.center; - DamageArea(i, hitData); - } - } - } - - private void CheckForUpdate() - { - if (m_nview.IsValid() && m_nview.GetZDO().m_dataRevision != m_lastDataRevision) - { - LoadHealth(); - UpdateMesh(); - } - } - - private void LoadHealth() - { - byte[] byteArray = m_nview.GetZDO().GetByteArray("health"); - if (byteArray != null) - { - ZPackage zPackage = new ZPackage(byteArray); - int num = zPackage.ReadInt(); - for (int i = 0; i < num; i++) - { - float health = zPackage.ReadSingle(); - HitArea hitArea = GetHitArea(i); - if (hitArea != null) - { - hitArea.m_health = health; - } - } - } - m_lastDataRevision = m_nview.GetZDO().m_dataRevision; - } - - private void SaveHealth() - { - ZPackage zPackage = new ZPackage(); - zPackage.Write(m_hitAreas.Count); - foreach (HitArea hitArea in m_hitAreas) - { - zPackage.Write(hitArea.m_health); - } - m_nview.GetZDO().Set("health", zPackage.GetArray()); - m_lastDataRevision = m_nview.GetZDO().m_dataRevision; - } - - private void UpdateMesh() - { - m_tempInstancesA.Clear(); - m_tempInstancesB.Clear(); - Material material = m_meshRenderer.sharedMaterials[0]; - Matrix4x4 inverse = base.transform.localToWorldMatrix.inverse; - for (int i = 0; i < m_hitAreas.Count; i++) - { - HitArea hitArea = m_hitAreas[i]; - if (hitArea.m_health > 0f) - { - CombineInstance item = default(CombineInstance); - item.mesh = hitArea.m_meshFilter.sharedMesh; - item.transform = inverse * hitArea.m_meshFilter.transform.localToWorldMatrix; - for (int j = 0; j < hitArea.m_meshFilter.sharedMesh.subMeshCount; j++) - { - item.subMeshIndex = j; - if (hitArea.m_meshRenderer.sharedMaterials[j] == material) - { - m_tempInstancesA.Add(item); - } - else - { - m_tempInstancesB.Add(item); - } - } - hitArea.m_meshRenderer.enabled = false; - hitArea.m_collider.gameObject.SetActive(value: true); - } - else - { - hitArea.m_collider.gameObject.SetActive(value: false); - } - } - if (m_tempMeshA == null) - { - m_tempMeshA = new Mesh(); - m_tempMeshB = new Mesh(); - } - m_tempMeshA.CombineMeshes(m_tempInstancesA.ToArray()); - m_tempMeshB.CombineMeshes(m_tempInstancesB.ToArray()); - CombineInstance combineInstance = default(CombineInstance); - combineInstance.mesh = m_tempMeshA; - CombineInstance combineInstance2 = default(CombineInstance); - combineInstance2.mesh = m_tempMeshB; - m_meshFilter.mesh.CombineMeshes(new CombineInstance[2] { combineInstance, combineInstance2 }, mergeSubMeshes: false, useMatrices: false); - m_meshRenderer.enabled = true; - Renderer[] array = new Renderer[m_extraRenderers.Count + 1]; - m_extraRenderers.CopyTo(0, array, 0, m_extraRenderers.Count); - array[array.Length - 1] = m_meshRenderer; - LODGroup component = base.gameObject.GetComponent<LODGroup>(); - LOD[] lODs = component.GetLODs(); - lODs[0].renderers = array; - component.SetLODs(lODs); - } - - public string GetHoverText() - { - return Localization.instance.Localize(m_name); - } - - public string GetHoverName() - { - return m_name; - } - - public DestructibleType GetDestructibleType() - { - return DestructibleType.Default; - } - - public void Damage(HitData hit) - { - if (m_nview == null || !m_nview.IsValid() || m_hitAreas == null) - { - return; - } - if (hit.m_hitCollider == null) - { - ZLog.Log("Minerock hit has no collider"); - return; - } - int areaIndex = GetAreaIndex(hit.m_hitCollider); - if (areaIndex == -1) - { - ZLog.Log("Invalid hit area on " + base.gameObject.name); - return; - } - m_nview.InvokeRPC("Damage", hit, areaIndex); - } - - private void RPC_Damage(long sender, HitData hit, int hitAreaIndex) - { - if (m_nview.IsValid() && m_nview.IsOwner() && DamageArea(hitAreaIndex, hit) && m_supportCheck) - { - CheckSupport(); - } - } - - private bool DamageArea(int hitAreaIndex, HitData hit) - { - ZLog.Log("hit mine rock " + hitAreaIndex); - HitArea hitArea = GetHitArea(hitAreaIndex); - if (hitArea == null) - { - ZLog.Log("Missing hit area " + hitAreaIndex); - return false; - } - LoadHealth(); - if (hitArea.m_health <= 0f) - { - ZLog.Log("Already destroyed"); - return false; - } - hit.ApplyResistance(m_damageModifiers, out var significantModifier); - float totalDamage = hit.GetTotalDamage(); - if (hit.m_toolTier < m_minToolTier) - { - DamageText.instance.ShowText(DamageText.TextType.TooHard, hit.m_point, 0f); - return false; - } - DamageText.instance.ShowText(significantModifier, hit.m_point, totalDamage); - if (totalDamage <= 0f) - { - return false; - } - hitArea.m_health -= totalDamage; - SaveHealth(); - m_hitEffect.Create(hit.m_point, Quaternion.identity); - Player closestPlayer = Player.GetClosestPlayer(hit.m_point, 10f); - if ((bool)closestPlayer) - { - closestPlayer.AddNoise(100f); - } - if (hitArea.m_health <= 0f) - { - m_nview.InvokeRPC(ZNetView.Everybody, "SetAreaHealth", hitAreaIndex, hitArea.m_health); - m_destroyedEffect.Create(hit.m_point, Quaternion.identity); - foreach (GameObject drop in m_dropItems.GetDropList()) - { - Vector3 position = hit.m_point + Random.insideUnitSphere * 0.3f; - Object.Instantiate(drop, position, Quaternion.identity); - } - if (AllDestroyed()) - { - m_nview.Destroy(); - } - return true; - } - return false; - } - - private bool AllDestroyed() - { - for (int i = 0; i < m_hitAreas.Count; i++) - { - if (m_hitAreas[i].m_health > 0f) - { - return false; - } - } - return true; - } - - private bool NonDestroyed() - { - for (int i = 0; i < m_hitAreas.Count; i++) - { - if (m_hitAreas[i].m_health <= 0f) - { - return false; - } - } - return true; - } - - private void RPC_SetAreaHealth(long sender, int index, float health) - { - HitArea hitArea = GetHitArea(index); - if (hitArea != null) - { - hitArea.m_health = health; - } - UpdateMesh(); - } - - private int GetAreaIndex(Collider area) - { - for (int i = 0; i < m_hitAreas.Count; i++) - { - if (m_hitAreas[i].m_collider == area) - { - return i; - } - } - return -1; - } - - private HitArea GetHitArea(int index) - { - if (index < 0 || index >= m_hitAreas.Count) - { - return null; - } - return m_hitAreas[index]; - } - - private void UpdateSupport() - { - float realtimeSinceStartup = Time.realtimeSinceStartup; - if (!m_haveSetupBounds) - { - SetupColliders(); - m_haveSetupBounds = true; - } - foreach (HitArea hitArea in m_hitAreas) - { - hitArea.m_supported = false; - } - Vector3 position = base.transform.position; - for (int i = 0; i < 3; i++) - { - foreach (HitArea hitArea2 in m_hitAreas) - { - if (hitArea2.m_supported) - { - continue; - } - int num = Physics.OverlapBoxNonAlloc(position + hitArea2.m_bound.m_pos, hitArea2.m_bound.m_size, m_tempColliders, hitArea2.m_bound.m_rot, m_rayMask); - for (int j = 0; j < num; j++) - { - Collider collider = m_tempColliders[j]; - if (!(collider == hitArea2.m_collider) && !(collider.attachedRigidbody != null) && !collider.isTrigger) - { - hitArea2.m_supported = hitArea2.m_supported || GetSupport(collider); - if (hitArea2.m_supported) - { - break; - } - } - } - } - } - ZLog.Log("Suport time " + (Time.realtimeSinceStartup - realtimeSinceStartup) * 1000f); - } - - private bool GetSupport(Collider c) - { - if (c.gameObject.layer == m_groundLayer) - { - return true; - } - IDestructible componentInParent = c.gameObject.GetComponentInParent<IDestructible>(); - if (componentInParent != null) - { - if (componentInParent == this) - { - foreach (HitArea hitArea in m_hitAreas) - { - if (hitArea.m_collider == c) - { - return hitArea.m_supported; - } - } - } - return c.transform.position.y < base.transform.position.y; - } - return true; - } - - private void SetupColliders() - { - Vector3 position = base.transform.position; - foreach (HitArea hitArea in m_hitAreas) - { - hitArea.m_bound.m_rot = Quaternion.identity; - hitArea.m_bound.m_pos = hitArea.m_collider.bounds.center - position; - hitArea.m_bound.m_size = hitArea.m_collider.bounds.size * 0.5f; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Minimap.cs b/Valheim_v202102/Valheim/assembly_valheim/Minimap.cs deleted file mode 100644 index 3b7cefe..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Minimap.cs +++ /dev/null @@ -1,1463 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.Rendering; -using UnityEngine.UI; - -public class Minimap : MonoBehaviour -{ - private enum MapMode - { - None, - Small, - Large - } - - public enum PinType - { - Icon0, - Icon1, - Icon2, - Icon3, - Death, - Bed, - Icon4, - Shout, - None, - Boss, - Player, - RandomEvent, - Ping, - EventArea - } - - public class PinData - { - public string m_name; - - public PinType m_type; - - public Sprite m_icon; - - public Vector3 m_pos; - - public bool m_save; - - public bool m_checked; - - public bool m_doubleSize; - - public bool m_animate; - - public float m_worldSize; - - public RectTransform m_uiElement; - - public GameObject m_checkedElement; - - public Text m_nameElement; - } - - [Serializable] - public struct SpriteData - { - public PinType m_name; - - public Sprite m_icon; - } - - [Serializable] - public struct LocationSpriteData - { - public string m_name; - - public Sprite m_icon; - } - - private Color forest = new Color(1f, 0f, 0f, 0f); - - private Color noForest = new Color(0f, 0f, 0f, 0f); - - private static int MAPVERSION = 3; - - private static Minimap m_instance; - - public GameObject m_smallRoot; - - public GameObject m_largeRoot; - - public RawImage m_mapImageSmall; - - public RawImage m_mapImageLarge; - - public RectTransform m_pinRootSmall; - - public RectTransform m_pinRootLarge; - - public Text m_biomeNameSmall; - - public Text m_biomeNameLarge; - - public RectTransform m_smallShipMarker; - - public RectTransform m_largeShipMarker; - - public RectTransform m_smallMarker; - - public RectTransform m_largeMarker; - - public RectTransform m_windMarker; - - public RectTransform m_gamepadCrosshair; - - public Toggle m_publicPosition; - - public Image m_selectedIcon0; - - public Image m_selectedIcon1; - - public Image m_selectedIcon2; - - public Image m_selectedIcon3; - - public Image m_selectedIcon4; - - public GameObject m_pinPrefab; - - public InputField m_nameInput; - - public int m_textureSize = 256; - - public float m_pixelSize = 64f; - - public float m_minZoom = 0.01f; - - public float m_maxZoom = 1f; - - public float m_showNamesZoom = 0.5f; - - public float m_exploreInterval = 2f; - - public float m_exploreRadius = 100f; - - public float m_removeRadius = 128f; - - public float m_pinSizeSmall = 32f; - - public float m_pinSizeLarge = 48f; - - public float m_clickDuration = 0.25f; - - public List<SpriteData> m_icons = new List<SpriteData>(); - - public List<LocationSpriteData> m_locationIcons = new List<LocationSpriteData>(); - - public Color m_meadowsColor = new Color(0.45f, 1f, 0.43f); - - public Color m_ashlandsColor = new Color(1f, 0.2f, 0.2f); - - public Color m_blackforestColor = new Color(0f, 0.7f, 0f); - - public Color m_deepnorthColor = new Color(1f, 1f, 1f); - - public Color m_heathColor = new Color(1f, 1f, 0.2f); - - public Color m_swampColor = new Color(0.6f, 0.5f, 0.5f); - - public Color m_mountainColor = new Color(1f, 1f, 1f); - - public Color m_mistlandsColor = new Color(0.5f, 0.5f, 0.5f); - - private PinData m_namePin; - - private PinType m_selectedType; - - private PinData m_deathPin; - - private PinData m_spawnPointPin; - - private Dictionary<Vector3, PinData> m_locationPins = new Dictionary<Vector3, PinData>(); - - private float m_updateLocationsTimer; - - private List<PinData> m_pingPins = new List<PinData>(); - - private List<PinData> m_shoutPins = new List<PinData>(); - - private List<Chat.WorldTextInstance> m_tempShouts = new List<Chat.WorldTextInstance>(); - - private List<PinData> m_playerPins = new List<PinData>(); - - private List<ZNet.PlayerInfo> m_tempPlayerInfo = new List<ZNet.PlayerInfo>(); - - private PinData m_randEventPin; - - private PinData m_randEventAreaPin; - - private float m_updateEventTime; - - private bool[] m_explored; - - private List<PinData> m_pins = new List<PinData>(); - - private Texture2D m_forestMaskTexture; - - private Texture2D m_mapTexture; - - private Texture2D m_heightTexture; - - private Texture2D m_fogTexture; - - private float m_largeZoom = 0.1f; - - private float m_smallZoom = 0.01f; - - private Heightmap.Biome m_biome; - - private MapMode m_mode = MapMode.Small; - - private float m_exploreTimer; - - private bool m_hasGenerated; - - private bool m_dragView = true; - - private Vector3 m_mapOffset = Vector3.zero; - - private float m_leftDownTime; - - private float m_leftClickTime; - - private Vector3 m_dragWorldPos = Vector3.zero; - - private bool m_wasFocused; - - public static Minimap instance => m_instance; - - private void Awake() - { - m_instance = this; - m_largeRoot.SetActive(value: false); - m_smallRoot.SetActive(value: true); - } - - private void OnDestroy() - { - m_instance = null; - } - - public static bool IsOpen() - { - if ((bool)m_instance) - { - return m_instance.m_largeRoot.activeSelf; - } - return false; - } - - public static bool InTextInput() - { - if ((bool)m_instance && m_instance.m_mode == MapMode.Large) - { - return m_instance.m_wasFocused; - } - return false; - } - - private void Start() - { - m_mapTexture = new Texture2D(m_textureSize, m_textureSize, TextureFormat.RGBA32, mipChain: false); - m_mapTexture.wrapMode = TextureWrapMode.Clamp; - m_forestMaskTexture = new Texture2D(m_textureSize, m_textureSize, TextureFormat.RGBA32, mipChain: false); - m_forestMaskTexture.wrapMode = TextureWrapMode.Clamp; - m_heightTexture = new Texture2D(m_textureSize, m_textureSize, TextureFormat.RFloat, mipChain: false); - m_heightTexture.wrapMode = TextureWrapMode.Clamp; - m_fogTexture = new Texture2D(m_textureSize, m_textureSize, TextureFormat.RGBA32, mipChain: false); - m_fogTexture.wrapMode = TextureWrapMode.Clamp; - m_explored = new bool[m_textureSize * m_textureSize]; - m_mapImageLarge.material = UnityEngine.Object.Instantiate(m_mapImageLarge.material); - m_mapImageSmall.material = UnityEngine.Object.Instantiate(m_mapImageSmall.material); - m_mapImageLarge.material.SetTexture("_MainTex", m_mapTexture); - m_mapImageLarge.material.SetTexture("_MaskTex", m_forestMaskTexture); - m_mapImageLarge.material.SetTexture("_HeightTex", m_heightTexture); - m_mapImageLarge.material.SetTexture("_FogTex", m_fogTexture); - m_mapImageSmall.material.SetTexture("_MainTex", m_mapTexture); - m_mapImageSmall.material.SetTexture("_MaskTex", m_forestMaskTexture); - m_mapImageSmall.material.SetTexture("_HeightTex", m_heightTexture); - m_mapImageSmall.material.SetTexture("_FogTex", m_fogTexture); - m_nameInput.gameObject.SetActive(value: false); - UIInputHandler component = m_mapImageLarge.GetComponent<UIInputHandler>(); - component.m_onRightClick = (Action<UIInputHandler>)Delegate.Combine(component.m_onRightClick, new Action<UIInputHandler>(OnMapRightClick)); - component.m_onMiddleClick = (Action<UIInputHandler>)Delegate.Combine(component.m_onMiddleClick, new Action<UIInputHandler>(OnMapMiddleClick)); - component.m_onLeftDown = (Action<UIInputHandler>)Delegate.Combine(component.m_onLeftDown, new Action<UIInputHandler>(OnMapLeftDown)); - component.m_onLeftUp = (Action<UIInputHandler>)Delegate.Combine(component.m_onLeftUp, new Action<UIInputHandler>(OnMapLeftUp)); - SelectIcon(PinType.Icon0); - Reset(); - } - - public void Reset() - { - Color32[] array = new Color32[m_textureSize * m_textureSize]; - for (int i = 0; i < array.Length; i++) - { - array[i] = new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue); - } - m_fogTexture.SetPixels32(array); - m_fogTexture.Apply(); - for (int j = 0; j < m_explored.Length; j++) - { - m_explored[j] = false; - } - } - - public void ForceRegen() - { - if (WorldGenerator.instance != null) - { - GenerateWorldMap(); - } - } - - private void Update() - { - if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null || Utils.GetMainCamera() == null) - { - return; - } - if (!m_hasGenerated) - { - if (WorldGenerator.instance == null) - { - return; - } - GenerateWorldMap(); - LoadMapData(); - m_hasGenerated = true; - } - Player localPlayer = Player.m_localPlayer; - if (localPlayer == null) - { - return; - } - float deltaTime = Time.deltaTime; - UpdateExplore(deltaTime, localPlayer); - if (localPlayer.IsDead()) - { - SetMapMode(MapMode.None); - return; - } - if (m_mode == MapMode.None) - { - SetMapMode(MapMode.Small); - } - bool flag = (Chat.instance == null || !Chat.instance.HasFocus()) && !Console.IsVisible() && !TextInput.IsVisible() && !Menu.IsVisible() && !InventoryGui.IsVisible(); - if (flag) - { - if (InTextInput()) - { - if (Input.GetKeyDown(KeyCode.Escape)) - { - m_namePin = null; - } - } - else if (ZInput.GetButtonDown("Map") || ZInput.GetButtonDown("JoyMap") || (m_mode == MapMode.Large && (Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("JoyButtonB")))) - { - switch (m_mode) - { - case MapMode.None: - SetMapMode(MapMode.Small); - break; - case MapMode.Small: - SetMapMode(MapMode.Large); - break; - case MapMode.Large: - SetMapMode(MapMode.Small); - break; - } - } - } - if (m_mode == MapMode.Large) - { - m_publicPosition.isOn = ZNet.instance.IsReferencePositionPublic(); - m_gamepadCrosshair.gameObject.SetActive(ZInput.IsGamepadActive()); - } - UpdateMap(localPlayer, deltaTime, flag); - UpdateDynamicPins(deltaTime); - UpdatePins(); - UpdateBiome(localPlayer); - UpdateNameInput(); - } - - private void ShowPinNameInput(PinData pin) - { - m_namePin = pin; - m_nameInput.text = ""; - } - - private void UpdateNameInput() - { - if (m_namePin == null) - { - m_wasFocused = false; - } - if (m_namePin != null && m_mode == MapMode.Large) - { - m_nameInput.gameObject.SetActive(value: true); - if (!m_nameInput.isFocused) - { - EventSystem.current.SetSelectedGameObject(m_nameInput.gameObject); - } - if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter)) - { - string text = m_nameInput.text; - text = text.Replace('$', ' '); - text = text.Replace('<', ' '); - text = text.Replace('>', ' '); - m_namePin.m_name = text; - m_namePin = null; - } - m_wasFocused = true; - } - else - { - m_nameInput.gameObject.SetActive(value: false); - } - } - - private void UpdateMap(Player player, float dt, bool takeInput) - { - if (takeInput) - { - if (m_mode == MapMode.Large) - { - float num = 0f; - num += Input.GetAxis("Mouse ScrollWheel") * m_largeZoom * 2f; - if (ZInput.GetButton("JoyButtonX")) - { - Vector3 viewCenterWorldPoint = GetViewCenterWorldPoint(); - Chat.instance.SendPing(viewCenterWorldPoint); - } - if (ZInput.GetButton("JoyLTrigger")) - { - num -= m_largeZoom * dt * 2f; - } - if (ZInput.GetButton("JoyRTrigger")) - { - num += m_largeZoom * dt * 2f; - } - if (ZInput.GetButtonDown("MapZoomOut") && !InTextInput()) - { - num -= m_largeZoom * 0.5f; - } - if (ZInput.GetButtonDown("MapZoomIn") && !InTextInput()) - { - num += m_largeZoom * 0.5f; - } - m_largeZoom = Mathf.Clamp(m_largeZoom - num, m_minZoom, m_maxZoom); - } - else - { - float num2 = 0f; - if (ZInput.GetButtonDown("MapZoomOut")) - { - num2 -= m_smallZoom * 0.5f; - } - if (ZInput.GetButtonDown("MapZoomIn")) - { - num2 += m_smallZoom * 0.5f; - } - m_smallZoom = Mathf.Clamp(m_smallZoom - num2, m_minZoom, m_maxZoom); - } - } - if (m_mode == MapMode.Large) - { - if (m_leftDownTime != 0f && m_leftDownTime > m_clickDuration && !m_dragView) - { - m_dragWorldPos = ScreenToWorldPoint(Input.mousePosition); - m_dragView = true; - m_namePin = null; - } - m_mapOffset.x += ZInput.GetJoyLeftStickX() * dt * 50000f * m_largeZoom; - m_mapOffset.z -= ZInput.GetJoyLeftStickY() * dt * 50000f * m_largeZoom; - if (m_dragView) - { - Vector3 vector = ScreenToWorldPoint(Input.mousePosition) - m_dragWorldPos; - m_mapOffset -= vector; - CenterMap(player.transform.position + m_mapOffset); - m_dragWorldPos = ScreenToWorldPoint(Input.mousePosition); - } - else - { - CenterMap(player.transform.position + m_mapOffset); - } - } - else - { - CenterMap(player.transform.position); - } - UpdateWindMarker(); - UpdatePlayerMarker(player, Utils.GetMainCamera().transform.rotation); - } - - private void SetMapMode(MapMode mode) - { - if (mode != m_mode) - { - m_mode = mode; - switch (mode) - { - case MapMode.None: - m_largeRoot.SetActive(value: false); - m_smallRoot.SetActive(value: false); - break; - case MapMode.Small: - m_largeRoot.SetActive(value: false); - m_smallRoot.SetActive(value: true); - break; - case MapMode.Large: - m_largeRoot.SetActive(value: true); - m_smallRoot.SetActive(value: false); - m_dragView = false; - m_mapOffset = Vector3.zero; - m_namePin = null; - break; - } - } - } - - private void CenterMap(Vector3 centerPoint) - { - WorldToMapPoint(centerPoint, out var mx, out var my); - Rect uvRect = m_mapImageSmall.uvRect; - uvRect.width = m_smallZoom; - uvRect.height = m_smallZoom; - uvRect.center = new Vector2(mx, my); - m_mapImageSmall.uvRect = uvRect; - RectTransform rectTransform = m_mapImageLarge.transform as RectTransform; - float num = rectTransform.rect.width / rectTransform.rect.height; - Rect uvRect2 = m_mapImageSmall.uvRect; - uvRect2.width = m_largeZoom * num; - uvRect2.height = m_largeZoom; - uvRect2.center = new Vector2(mx, my); - m_mapImageLarge.uvRect = uvRect2; - if (m_mode == MapMode.Large) - { - m_mapImageLarge.material.SetFloat("_zoom", m_largeZoom); - m_mapImageLarge.material.SetFloat("_pixelSize", 200f / m_largeZoom); - m_mapImageLarge.material.SetVector("_mapCenter", centerPoint); - } - else - { - m_mapImageSmall.material.SetFloat("_zoom", m_smallZoom); - m_mapImageSmall.material.SetFloat("_pixelSize", 200f / m_smallZoom); - m_mapImageSmall.material.SetVector("_mapCenter", centerPoint); - } - } - - private void UpdateDynamicPins(float dt) - { - UpdateProfilePins(); - UpdateShoutPins(); - UpdatePingPins(); - UpdatePlayerPins(dt); - UpdateLocationPins(dt); - UpdateEventPin(dt); - } - - private void UpdateProfilePins() - { - PlayerProfile playerProfile = Game.instance.GetPlayerProfile(); - if (playerProfile.HaveDeathPoint()) - { - if (m_deathPin == null) - { - m_deathPin = AddPin(playerProfile.GetDeathPoint(), PinType.Death, "", save: false, isChecked: false); - } - m_deathPin.m_pos = playerProfile.GetDeathPoint(); - } - else if (m_deathPin != null) - { - RemovePin(m_deathPin); - m_deathPin = null; - } - if (playerProfile.HaveCustomSpawnPoint()) - { - if (m_spawnPointPin == null) - { - m_spawnPointPin = AddPin(playerProfile.GetCustomSpawnPoint(), PinType.Bed, "", save: false, isChecked: false); - } - m_spawnPointPin.m_pos = playerProfile.GetCustomSpawnPoint(); - } - else if (m_spawnPointPin != null) - { - RemovePin(m_spawnPointPin); - m_spawnPointPin = null; - } - } - - private void UpdateEventPin(float dt) - { - if (Time.time - m_updateEventTime < 1f) - { - return; - } - m_updateEventTime = Time.time; - RandomEvent currentRandomEvent = RandEventSystem.instance.GetCurrentRandomEvent(); - if (currentRandomEvent != null) - { - if (m_randEventAreaPin == null) - { - m_randEventAreaPin = AddPin(currentRandomEvent.m_pos, PinType.EventArea, "", save: false, isChecked: false); - m_randEventAreaPin.m_worldSize = RandEventSystem.instance.m_randomEventRange * 2f; - m_randEventAreaPin.m_worldSize *= 0.9f; - } - if (m_randEventPin == null) - { - m_randEventPin = AddPin(currentRandomEvent.m_pos, PinType.RandomEvent, "", save: false, isChecked: false); - m_randEventPin.m_animate = true; - m_randEventPin.m_doubleSize = true; - } - m_randEventAreaPin.m_pos = currentRandomEvent.m_pos; - m_randEventPin.m_pos = currentRandomEvent.m_pos; - m_randEventPin.m_name = Localization.instance.Localize(currentRandomEvent.GetHudText()); - } - else - { - if (m_randEventPin != null) - { - RemovePin(m_randEventPin); - m_randEventPin = null; - } - if (m_randEventAreaPin != null) - { - RemovePin(m_randEventAreaPin); - m_randEventAreaPin = null; - } - } - } - - private void UpdateLocationPins(float dt) - { - m_updateLocationsTimer -= dt; - if (!(m_updateLocationsTimer <= 0f)) - { - return; - } - m_updateLocationsTimer = 5f; - Dictionary<Vector3, string> dictionary = new Dictionary<Vector3, string>(); - ZoneSystem.instance.GetLocationIcons(dictionary); - bool flag = false; - while (!flag) - { - flag = true; - foreach (KeyValuePair<Vector3, PinData> locationPin in m_locationPins) - { - if (!dictionary.ContainsKey(locationPin.Key)) - { - ZLog.DevLog("Minimap: Removing location " + locationPin.Value.m_name); - RemovePin(locationPin.Value); - m_locationPins.Remove(locationPin.Key); - flag = false; - break; - } - } - } - foreach (KeyValuePair<Vector3, string> item in dictionary) - { - if (!m_locationPins.ContainsKey(item.Key)) - { - Sprite locationIcon = GetLocationIcon(item.Value); - if ((bool)locationIcon) - { - PinData pinData = AddPin(item.Key, PinType.None, "", save: false, isChecked: false); - pinData.m_icon = locationIcon; - pinData.m_doubleSize = true; - m_locationPins.Add(item.Key, pinData); - ZLog.Log("Minimap: Adding unique location " + item.Key); - } - } - } - } - - private Sprite GetLocationIcon(string name) - { - foreach (LocationSpriteData locationIcon in m_locationIcons) - { - if (locationIcon.m_name == name) - { - return locationIcon.m_icon; - } - } - return null; - } - - private void UpdatePlayerPins(float dt) - { - m_tempPlayerInfo.Clear(); - ZNet.instance.GetOtherPublicPlayers(m_tempPlayerInfo); - if (m_playerPins.Count != m_tempPlayerInfo.Count) - { - foreach (PinData playerPin in m_playerPins) - { - RemovePin(playerPin); - } - m_playerPins.Clear(); - foreach (ZNet.PlayerInfo item2 in m_tempPlayerInfo) - { - _ = item2; - PinData item = AddPin(Vector3.zero, PinType.Player, "", save: false, isChecked: false); - m_playerPins.Add(item); - } - } - for (int i = 0; i < m_tempPlayerInfo.Count; i++) - { - PinData pinData = m_playerPins[i]; - ZNet.PlayerInfo playerInfo = m_tempPlayerInfo[i]; - if (pinData.m_name == playerInfo.m_name) - { - pinData.m_pos = Vector3.MoveTowards(pinData.m_pos, playerInfo.m_position, 200f * dt); - continue; - } - pinData.m_name = playerInfo.m_name; - pinData.m_pos = playerInfo.m_position; - } - } - - private void UpdatePingPins() - { - m_tempShouts.Clear(); - Chat.instance.GetPingWorldTexts(m_tempShouts); - if (m_pingPins.Count != m_tempShouts.Count) - { - foreach (PinData pingPin in m_pingPins) - { - RemovePin(pingPin); - } - m_pingPins.Clear(); - foreach (Chat.WorldTextInstance tempShout in m_tempShouts) - { - _ = tempShout; - PinData pinData = AddPin(Vector3.zero, PinType.Ping, "", save: false, isChecked: false); - pinData.m_doubleSize = true; - pinData.m_animate = true; - m_pingPins.Add(pinData); - } - } - for (int i = 0; i < m_tempShouts.Count; i++) - { - PinData pinData2 = m_pingPins[i]; - Chat.WorldTextInstance worldTextInstance = m_tempShouts[i]; - pinData2.m_pos = worldTextInstance.m_position; - pinData2.m_name = worldTextInstance.m_name + ": " + worldTextInstance.m_text; - } - } - - private void UpdateShoutPins() - { - m_tempShouts.Clear(); - Chat.instance.GetShoutWorldTexts(m_tempShouts); - if (m_shoutPins.Count != m_tempShouts.Count) - { - foreach (PinData shoutPin in m_shoutPins) - { - RemovePin(shoutPin); - } - m_shoutPins.Clear(); - foreach (Chat.WorldTextInstance tempShout in m_tempShouts) - { - _ = tempShout; - PinData pinData = AddPin(Vector3.zero, PinType.Shout, "", save: false, isChecked: false); - pinData.m_doubleSize = true; - pinData.m_animate = true; - m_shoutPins.Add(pinData); - } - } - for (int i = 0; i < m_tempShouts.Count; i++) - { - PinData pinData2 = m_shoutPins[i]; - Chat.WorldTextInstance worldTextInstance = m_tempShouts[i]; - pinData2.m_pos = worldTextInstance.m_position; - pinData2.m_name = worldTextInstance.m_name + ": " + worldTextInstance.m_text; - } - } - - private void UpdatePins() - { - RawImage rawImage = ((m_mode == MapMode.Large) ? m_mapImageLarge : m_mapImageSmall); - float num = ((m_mode == MapMode.Large) ? m_pinSizeLarge : m_pinSizeSmall); - RectTransform rectTransform = ((m_mode == MapMode.Large) ? m_pinRootLarge : m_pinRootSmall); - if (m_mode != MapMode.Large) - { - _ = m_smallZoom; - } - else - { - _ = m_largeZoom; - } - foreach (PinData pin in m_pins) - { - if (IsPointVisible(pin.m_pos, rawImage)) - { - if (pin.m_uiElement == null || pin.m_uiElement.parent != rectTransform) - { - if (pin.m_uiElement != null) - { - UnityEngine.Object.Destroy(pin.m_uiElement.gameObject); - } - GameObject gameObject = UnityEngine.Object.Instantiate(m_pinPrefab); - gameObject.GetComponent<Image>().sprite = pin.m_icon; - pin.m_uiElement = gameObject.transform as RectTransform; - pin.m_uiElement.SetParent(rectTransform); - float size = (pin.m_doubleSize ? (num * 2f) : num); - pin.m_uiElement.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, size); - pin.m_uiElement.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size); - pin.m_checkedElement = gameObject.transform.Find("Checked").gameObject; - pin.m_nameElement = gameObject.transform.Find("Name").GetComponent<Text>(); - } - WorldToMapPoint(pin.m_pos, out var mx, out var my); - Vector2 anchoredPosition = MapPointToLocalGuiPos(mx, my, rawImage); - pin.m_uiElement.anchoredPosition = anchoredPosition; - if (pin.m_animate) - { - float num2 = (pin.m_doubleSize ? (num * 2f) : num); - num2 *= 0.8f + Mathf.Sin(Time.time * 5f) * 0.2f; - pin.m_uiElement.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, num2); - pin.m_uiElement.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, num2); - } - if (pin.m_worldSize > 0f) - { - Vector2 size2 = new Vector2(pin.m_worldSize / m_pixelSize / (float)m_textureSize, pin.m_worldSize / m_pixelSize / (float)m_textureSize); - Vector2 vector = MapSizeToLocalGuiSize(size2, rawImage); - pin.m_uiElement.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, vector.x); - pin.m_uiElement.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, vector.y); - } - pin.m_checkedElement.SetActive(pin.m_checked); - if (pin.m_name.Length > 0 && m_mode == MapMode.Large && m_largeZoom < m_showNamesZoom) - { - pin.m_nameElement.gameObject.SetActive(value: true); - pin.m_nameElement.text = Localization.instance.Localize(pin.m_name); - } - else - { - pin.m_nameElement.gameObject.SetActive(value: false); - } - } - else if (pin.m_uiElement != null) - { - UnityEngine.Object.Destroy(pin.m_uiElement.gameObject); - pin.m_uiElement = null; - } - } - } - - private void UpdateWindMarker() - { - Quaternion quaternion = Quaternion.LookRotation(EnvMan.instance.GetWindDir()); - m_windMarker.rotation = Quaternion.Euler(0f, 0f, 0f - quaternion.eulerAngles.y); - } - - private void UpdatePlayerMarker(Player player, Quaternion playerRot) - { - Vector3 position = player.transform.position; - Vector3 eulerAngles = playerRot.eulerAngles; - m_smallMarker.rotation = Quaternion.Euler(0f, 0f, 0f - eulerAngles.y); - if (m_mode == MapMode.Large && IsPointVisible(position, m_mapImageLarge)) - { - m_largeMarker.gameObject.SetActive(value: true); - m_largeMarker.rotation = m_smallMarker.rotation; - WorldToMapPoint(position, out var mx, out var my); - Vector2 anchoredPosition = MapPointToLocalGuiPos(mx, my, m_mapImageLarge); - m_largeMarker.anchoredPosition = anchoredPosition; - } - else - { - m_largeMarker.gameObject.SetActive(value: false); - } - Ship controlledShip = player.GetControlledShip(); - if ((bool)controlledShip) - { - m_smallShipMarker.gameObject.SetActive(value: true); - Vector3 eulerAngles2 = controlledShip.transform.rotation.eulerAngles; - m_smallShipMarker.rotation = Quaternion.Euler(0f, 0f, 0f - eulerAngles2.y); - if (m_mode == MapMode.Large) - { - m_largeShipMarker.gameObject.SetActive(value: true); - Vector3 position2 = controlledShip.transform.position; - WorldToMapPoint(position2, out var mx2, out var my2); - Vector2 anchoredPosition2 = MapPointToLocalGuiPos(mx2, my2, m_mapImageLarge); - m_largeShipMarker.anchoredPosition = anchoredPosition2; - m_largeShipMarker.rotation = m_smallShipMarker.rotation; - } - } - else - { - m_smallShipMarker.gameObject.SetActive(value: false); - m_largeShipMarker.gameObject.SetActive(value: false); - } - } - - private Vector2 MapPointToLocalGuiPos(float mx, float my, RawImage img) - { - Vector2 result = default(Vector2); - result.x = (mx - img.uvRect.xMin) / img.uvRect.width; - result.y = (my - img.uvRect.yMin) / img.uvRect.height; - result.x *= img.rectTransform.rect.width; - result.y *= img.rectTransform.rect.height; - return result; - } - - private Vector2 MapSizeToLocalGuiSize(Vector2 size, RawImage img) - { - size.x /= img.uvRect.width; - size.y /= img.uvRect.height; - return new Vector2(size.x * img.rectTransform.rect.width, size.y * img.rectTransform.rect.height); - } - - private bool IsPointVisible(Vector3 p, RawImage map) - { - WorldToMapPoint(p, out var mx, out var my); - if (mx > map.uvRect.xMin && mx < map.uvRect.xMax && my > map.uvRect.yMin) - { - return my < map.uvRect.yMax; - } - return false; - } - - public void ExploreAll() - { - for (int i = 0; i < m_textureSize; i++) - { - for (int j = 0; j < m_textureSize; j++) - { - Explore(j, i); - } - } - m_fogTexture.Apply(); - } - - private void WorldToMapPoint(Vector3 p, out float mx, out float my) - { - int num = m_textureSize / 2; - mx = p.x / m_pixelSize + (float)num; - my = p.z / m_pixelSize + (float)num; - mx /= m_textureSize; - my /= m_textureSize; - } - - private Vector3 MapPointToWorld(float mx, float my) - { - int num = m_textureSize / 2; - mx *= (float)m_textureSize; - my *= (float)m_textureSize; - mx -= (float)num; - my -= (float)num; - mx *= m_pixelSize; - my *= m_pixelSize; - return new Vector3(mx, 0f, my); - } - - private void WorldToPixel(Vector3 p, out int px, out int py) - { - int num = m_textureSize / 2; - px = Mathf.RoundToInt(p.x / m_pixelSize + (float)num); - py = Mathf.RoundToInt(p.z / m_pixelSize + (float)num); - } - - private void UpdateExplore(float dt, Player player) - { - m_exploreTimer += Time.deltaTime; - if (m_exploreTimer > m_exploreInterval) - { - m_exploreTimer = 0f; - Explore(player.transform.position, m_exploreRadius); - } - } - - private void Explore(Vector3 p, float radius) - { - int num = (int)Mathf.Ceil(radius / m_pixelSize); - bool flag = false; - WorldToPixel(p, out var px, out var py); - for (int i = py - num; i <= py + num; i++) - { - for (int j = px - num; j <= px + num; j++) - { - if (j >= 0 && i >= 0 && j < m_textureSize && i < m_textureSize && !(new Vector2(j - px, i - py).magnitude > (float)num) && Explore(j, i)) - { - flag = true; - } - } - } - if (flag) - { - m_fogTexture.Apply(); - } - } - - private bool Explore(int x, int y) - { - if (m_explored[y * m_textureSize + x]) - { - return false; - } - m_fogTexture.SetPixel(x, y, new Color32(0, 0, 0, 0)); - m_explored[y * m_textureSize + x] = true; - return true; - } - - private bool IsExplored(Vector3 worldPos) - { - WorldToPixel(worldPos, out var px, out var py); - if (px < 0 || px >= m_textureSize || py < 0 || py >= m_textureSize) - { - return false; - } - return m_explored[py * m_textureSize + px]; - } - - private float GetHeight(int x, int y) - { - return m_heightTexture.GetPixel(x, y).r; - } - - private void GenerateWorldMap() - { - int num = m_textureSize / 2; - float num2 = m_pixelSize / 2f; - Color32[] array = new Color32[m_textureSize * m_textureSize]; - Color32[] array2 = new Color32[m_textureSize * m_textureSize]; - Color[] array3 = new Color[m_textureSize * m_textureSize]; - for (int i = 0; i < m_textureSize; i++) - { - for (int j = 0; j < m_textureSize; j++) - { - float wx = (float)(j - num) * m_pixelSize + num2; - float wy = (float)(i - num) * m_pixelSize + num2; - Heightmap.Biome biome = WorldGenerator.instance.GetBiome(wx, wy); - float biomeHeight = WorldGenerator.instance.GetBiomeHeight(biome, wx, wy); - array[i * m_textureSize + j] = GetPixelColor(biome); - array2[i * m_textureSize + j] = GetMaskColor(wx, wy, biomeHeight, biome); - array3[i * m_textureSize + j] = new Color(biomeHeight, 0f, 0f); - } - } - m_forestMaskTexture.SetPixels32(array2); - m_forestMaskTexture.Apply(); - m_mapTexture.SetPixels32(array); - m_mapTexture.Apply(); - m_heightTexture.SetPixels(array3); - m_heightTexture.Apply(); - } - - private Color GetMaskColor(float wx, float wy, float height, Heightmap.Biome biome) - { - if (height < ZoneSystem.instance.m_waterLevel) - { - return noForest; - } - switch (biome) - { - case Heightmap.Biome.Meadows: - if (!WorldGenerator.InForest(new Vector3(wx, 0f, wy))) - { - return noForest; - } - return forest; - case Heightmap.Biome.Plains: - if (!(WorldGenerator.GetForestFactor(new Vector3(wx, 0f, wy)) < 0.8f)) - { - return noForest; - } - return forest; - case Heightmap.Biome.BlackForest: - case Heightmap.Biome.Mistlands: - return forest; - default: - return noForest; - } - } - - private Color GetPixelColor(Heightmap.Biome biome) - { - return biome switch - { - Heightmap.Biome.Meadows => m_meadowsColor, - Heightmap.Biome.AshLands => m_ashlandsColor, - Heightmap.Biome.BlackForest => m_blackforestColor, - Heightmap.Biome.DeepNorth => m_deepnorthColor, - Heightmap.Biome.Plains => m_heathColor, - Heightmap.Biome.Swamp => m_swampColor, - Heightmap.Biome.Mountain => m_mountainColor, - Heightmap.Biome.Mistlands => m_mistlandsColor, - Heightmap.Biome.Ocean => Color.white, - _ => Color.white, - }; - } - - private void LoadMapData() - { - PlayerProfile playerProfile = Game.instance.GetPlayerProfile(); - if (playerProfile.GetMapData() != null) - { - SetMapData(playerProfile.GetMapData()); - } - } - - public void SaveMapData() - { - Game.instance.GetPlayerProfile().SetMapData(GetMapData()); - } - - private byte[] GetMapData() - { - ZPackage zPackage = new ZPackage(); - zPackage.Write(MAPVERSION); - zPackage.Write(m_textureSize); - for (int i = 0; i < m_explored.Length; i++) - { - zPackage.Write(m_explored[i]); - } - int num = 0; - foreach (PinData pin in m_pins) - { - if (pin.m_save) - { - num++; - } - } - zPackage.Write(num); - foreach (PinData pin2 in m_pins) - { - if (pin2.m_save) - { - zPackage.Write(pin2.m_name); - zPackage.Write(pin2.m_pos); - zPackage.Write((int)pin2.m_type); - zPackage.Write(pin2.m_checked); - } - } - return zPackage.GetArray(); - } - - private void SetMapData(byte[] data) - { - ZPackage zPackage = new ZPackage(data); - int num = zPackage.ReadInt(); - int num2 = zPackage.ReadInt(); - if (m_textureSize != num2) - { - ZLog.LogWarning(string.Concat("Missmatching mapsize ", m_mapTexture, " vs ", num2)); - return; - } - Reset(); - for (int i = 0; i < m_explored.Length; i++) - { - if (zPackage.ReadBool()) - { - int x = i % num2; - int y = i / num2; - Explore(x, y); - } - } - if (num >= 2) - { - int num3 = zPackage.ReadInt(); - ClearPins(); - for (int j = 0; j < num3; j++) - { - string text = zPackage.ReadString(); - Vector3 pos = zPackage.ReadVector3(); - PinType type = (PinType)zPackage.ReadInt(); - bool isChecked = num >= 3 && zPackage.ReadBool(); - AddPin(pos, type, text, save: true, isChecked); - } - } - m_fogTexture.Apply(); - } - - public bool RemovePin(Vector3 pos, float radius) - { - PinData closestPin = GetClosestPin(pos, radius); - if (closestPin != null) - { - RemovePin(closestPin); - return true; - } - return false; - } - - private PinData GetClosestPin(Vector3 pos, float radius) - { - PinData pinData = null; - float num = 999999f; - foreach (PinData pin in m_pins) - { - if (pin.m_save) - { - float num2 = Utils.DistanceXZ(pos, pin.m_pos); - if (num2 < radius && (num2 < num || pinData == null)) - { - pinData = pin; - num = num2; - } - } - } - return pinData; - } - - public void RemovePin(PinData pin) - { - if ((bool)pin.m_uiElement) - { - UnityEngine.Object.Destroy(pin.m_uiElement.gameObject); - } - m_pins.Remove(pin); - } - - public void ShowPointOnMap(Vector3 point) - { - if (!(Player.m_localPlayer == null)) - { - SetMapMode(MapMode.Large); - m_mapOffset = point - Player.m_localPlayer.transform.position; - } - } - - public bool DiscoverLocation(Vector3 pos, PinType type, string name) - { - if (Player.m_localPlayer == null) - { - return false; - } - if (HaveSimilarPin(pos, type, name, save: true)) - { - Player.m_localPlayer.Message(MessageHud.MessageType.Center, "$msg_pin_exist"); - ShowPointOnMap(pos); - return false; - } - Sprite sprite = GetSprite(type); - Player.m_localPlayer.Message(MessageHud.MessageType.TopLeft, "$msg_pin_added: " + name, 0, sprite); - AddPin(pos, type, name, save: true, isChecked: false); - ShowPointOnMap(pos); - return true; - } - - private bool HaveSimilarPin(Vector3 pos, PinType type, string name, bool save) - { - foreach (PinData pin in m_pins) - { - if (pin.m_name == name && pin.m_type == type && pin.m_save == save && Utils.DistanceXZ(pos, pin.m_pos) < 1f) - { - return true; - } - } - return false; - } - - public PinData AddPin(Vector3 pos, PinType type, string name, bool save, bool isChecked) - { - PinData pinData = new PinData(); - pinData.m_type = type; - pinData.m_name = name; - pinData.m_pos = pos; - pinData.m_icon = GetSprite(type); - pinData.m_save = save; - pinData.m_checked = isChecked; - m_pins.Add(pinData); - return pinData; - } - - private Sprite GetSprite(PinType type) - { - if (type == PinType.None) - { - return null; - } - return m_icons.Find((SpriteData x) => x.m_name == type).m_icon; - } - - private Vector3 GetViewCenterWorldPoint() - { - Rect uvRect = m_mapImageLarge.uvRect; - float mx = uvRect.xMin + 0.5f * uvRect.width; - float my = uvRect.yMin + 0.5f * uvRect.height; - return MapPointToWorld(mx, my); - } - - private Vector3 ScreenToWorldPoint(Vector3 mousePos) - { - Vector2 screenPoint = mousePos; - RectTransform rectTransform = m_mapImageLarge.transform as RectTransform; - if (RectTransformUtility.ScreenPointToLocalPointInRectangle(rectTransform, screenPoint, null, out var localPoint)) - { - Vector2 vector = Rect.PointToNormalized(rectTransform.rect, localPoint); - Rect uvRect = m_mapImageLarge.uvRect; - float mx = uvRect.xMin + vector.x * uvRect.width; - float my = uvRect.yMin + vector.y * uvRect.height; - return MapPointToWorld(mx, my); - } - return Vector3.zero; - } - - private void OnMapLeftDown(UIInputHandler handler) - { - if (Time.time - m_leftClickTime < 0.3f) - { - OnMapDblClick(); - m_leftClickTime = 0f; - m_leftDownTime = 0f; - } - else - { - m_leftClickTime = Time.time; - m_leftDownTime = Time.time; - } - } - - private void OnMapLeftUp(UIInputHandler handler) - { - if (m_leftDownTime != 0f) - { - if (Time.time - m_leftDownTime < m_clickDuration) - { - OnMapLeftClick(); - } - m_leftDownTime = 0f; - } - m_dragView = false; - } - - public void OnMapDblClick() - { - Vector3 pos = ScreenToWorldPoint(Input.mousePosition); - PinData pin = AddPin(pos, m_selectedType, "", save: true, isChecked: false); - ShowPinNameInput(pin); - } - - public void OnMapLeftClick() - { - ZLog.Log("Left click"); - Vector3 pos = ScreenToWorldPoint(Input.mousePosition); - PinData closestPin = GetClosestPin(pos, m_removeRadius * (m_largeZoom * 2f)); - if (closestPin != null) - { - closestPin.m_checked = !closestPin.m_checked; - } - } - - public void OnMapMiddleClick(UIInputHandler handler) - { - Vector3 position = ScreenToWorldPoint(Input.mousePosition); - Chat.instance.SendPing(position); - } - - public void OnMapRightClick(UIInputHandler handler) - { - ZLog.Log("Right click"); - Vector3 pos = ScreenToWorldPoint(Input.mousePosition); - RemovePin(pos, m_removeRadius * (m_largeZoom * 2f)); - m_namePin = null; - } - - public void OnPressedIcon0() - { - SelectIcon(PinType.Icon0); - } - - public void OnPressedIcon1() - { - SelectIcon(PinType.Icon1); - } - - public void OnPressedIcon2() - { - SelectIcon(PinType.Icon2); - } - - public void OnPressedIcon3() - { - SelectIcon(PinType.Icon3); - } - - public void OnPressedIcon4() - { - SelectIcon(PinType.Icon4); - } - - public void OnTogglePublicPosition() - { - ZNet.instance.SetPublicReferencePosition(m_publicPosition.isOn); - } - - private void SelectIcon(PinType type) - { - m_selectedType = type; - m_selectedIcon0.enabled = false; - m_selectedIcon1.enabled = false; - m_selectedIcon2.enabled = false; - m_selectedIcon3.enabled = false; - m_selectedIcon4.enabled = false; - switch (type) - { - case PinType.Icon0: - m_selectedIcon0.enabled = true; - break; - case PinType.Icon1: - m_selectedIcon1.enabled = true; - break; - case PinType.Icon2: - m_selectedIcon2.enabled = true; - break; - case PinType.Icon3: - m_selectedIcon3.enabled = true; - break; - case PinType.Icon4: - m_selectedIcon4.enabled = true; - break; - case PinType.Death: - case PinType.Bed: - break; - } - } - - private void ClearPins() - { - foreach (PinData pin in m_pins) - { - if (pin.m_uiElement != null) - { - UnityEngine.Object.Destroy(pin.m_uiElement); - } - } - m_pins.Clear(); - m_deathPin = null; - } - - private void UpdateBiome(Player player) - { - if (m_mode == MapMode.Large && ZInput.IsMouseActive()) - { - Vector3 vector = ScreenToWorldPoint(Input.mousePosition); - if (IsExplored(vector)) - { - Heightmap.Biome biome = WorldGenerator.instance.GetBiome(vector); - string text = Localization.instance.Localize("$biome_" + biome.ToString().ToLower()); - m_biomeNameLarge.text = text; - } - else - { - m_biomeNameLarge.text = ""; - } - return; - } - Heightmap.Biome currentBiome = player.GetCurrentBiome(); - if (currentBiome != m_biome) - { - m_biome = currentBiome; - string text2 = Localization.instance.Localize("$biome_" + currentBiome.ToString().ToLower()); - m_biomeNameSmall.text = text2; - m_biomeNameLarge.text = text2; - m_biomeNameSmall.GetComponent<Animator>().SetTrigger("pulse"); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MistEmitter.cs b/Valheim_v202102/Valheim/assembly_valheim/MistEmitter.cs deleted file mode 100644 index ba59986..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MistEmitter.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using UnityEngine; - -public class MistEmitter : MonoBehaviour -{ - public float m_interval = 1f; - - public float m_totalRadius = 30f; - - public float m_testRadius = 5f; - - public int m_rays = 10; - - public float m_placeOffset = 1f; - - public ParticleSystem m_psystem; - - private float m_placeTimer; - - private bool m_emit = true; - - public void SetEmit(bool emit) - { - m_emit = emit; - } - - private void Update() - { - if (m_emit) - { - m_placeTimer += Time.deltaTime; - if (m_placeTimer > m_interval) - { - m_placeTimer = 0f; - PlaceOne(); - } - } - } - - private void PlaceOne() - { - if (!GetRandomPoint(base.transform.position, m_totalRadius, out var p)) - { - return; - } - int num = 0; - float num2 = (float)Math.PI * 2f / (float)m_rays; - for (int i = 0; i < m_rays; i++) - { - float angle = (float)i * num2; - if ((double)GetPointOnEdge(p, angle, m_testRadius).y < (double)p.y - 0.1) - { - num++; - } - } - if (num <= m_rays / 4 && !EffectArea.IsPointInsideArea(p, EffectArea.Type.Fire, m_testRadius)) - { - ParticleSystem.EmitParams emitParams = default(ParticleSystem.EmitParams); - emitParams.position = p + Vector3.up * m_placeOffset; - m_psystem.Emit(emitParams, 1); - } - } - - private bool GetRandomPoint(Vector3 center, float radius, out Vector3 p) - { - float f = UnityEngine.Random.value * (float)Math.PI * 2f; - float num = UnityEngine.Random.Range(0f, radius); - p = center + new Vector3(Mathf.Sin(f) * num, 0f, Mathf.Cos(f) * num); - if (ZoneSystem.instance.GetGroundHeight(p, out var height)) - { - if (height < ZoneSystem.instance.m_waterLevel) - { - return false; - } - p.y = height; - return true; - } - return false; - } - - private Vector3 GetPointOnEdge(Vector3 center, float angle, float radius) - { - Vector3 vector = center + new Vector3(Mathf.Sin(angle) * radius, 0f, Mathf.Cos(angle) * radius); - vector.y = ZoneSystem.instance.GetGroundHeight(vector); - if (vector.y < ZoneSystem.instance.m_waterLevel) - { - vector.y = ZoneSystem.instance.m_waterLevel; - } - return vector; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MonsterAI.cs b/Valheim_v202102/Valheim/assembly_valheim/MonsterAI.cs deleted file mode 100644 index 1c72d80..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MonsterAI.cs +++ /dev/null @@ -1,744 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class MonsterAI : BaseAI -{ - public Action<ItemDrop> m_onConsumedItem; - - private const float m_giveUpTime = 15f; - - private const float m_bossGiveUpTime = 15f; - - private const float m_updateTargetFarRange = 32f; - - private const float m_updateTargetIntervalNear = 3f; - - private const float m_updateTargetIntervalFar = 10f; - - private const float m_updateWeaponInterval = 1f; - - [Header("Monster AI")] - public float m_alertRange = 9999f; - - private const float m_alertOthersRange = 10f; - - public bool m_fleeIfHurtWhenTargetCantBeReached = true; - - public bool m_fleeIfNotAlerted; - - public float m_fleeIfLowHealth; - - public bool m_circulateWhileCharging; - - public bool m_circulateWhileChargingFlying; - - public bool m_enableHuntPlayer; - - public bool m_attackPlayerObjects = true; - - public bool m_attackPlayerObjectsWhenAlerted = true; - - public float m_interceptTimeMax; - - public float m_interceptTimeMin; - - public float m_maxChaseDistance; - - public float m_minAttackInterval; - - [Header("Circle target")] - public float m_circleTargetInterval; - - public float m_circleTargetDuration = 5f; - - public float m_circleTargetDistance = 10f; - - [Header("Sleep")] - public bool m_sleeping; - - public bool m_noiseWakeup; - - public float m_noiseRangeScale = 1f; - - public float m_wakeupRange = 5f; - - public EffectList m_wakeupEffects = new EffectList(); - - [Header("Other")] - public bool m_avoidLand; - - [Header("Consume items")] - public List<ItemDrop> m_consumeItems; - - public float m_consumeRange = 2f; - - public float m_consumeSearchRange = 5f; - - public float m_consumeSearchInterval = 10f; - - public float m_consumeHeal; - - private ItemDrop m_consumeTarget; - - private float m_consumeSearchTimer; - - private static int m_itemMask; - - private string m_aiStatus = ""; - - private bool m_despawnInDay; - - private bool m_eventCreature; - - private Character m_targetCreature; - - private bool m_havePathToTarget; - - private Vector3 m_lastKnownTargetPos = Vector3.zero; - - private bool m_beenAtLastPos; - - private StaticTarget m_targetStatic; - - private float m_timeSinceAttacking; - - private float m_timeSinceSensedTargetCreature; - - private float m_updateTargetTimer; - - private float m_updateWeaponTimer; - - private float m_lastAttackTime = -1000f; - - private float m_interceptTime; - - private float m_pauseTimer; - - private bool m_goingHome; - - private float m_sleepTimer; - - private GameObject m_follow; - - private Tameable m_tamable; - - protected override void Awake() - { - base.Awake(); - m_tamable = GetComponent<Tameable>(); - m_despawnInDay = m_nview.GetZDO().GetBool("DespawnInDay", m_despawnInDay); - m_eventCreature = m_nview.GetZDO().GetBool("EventCreature", m_eventCreature); - m_animator.SetBool("sleeping", IsSleeping()); - m_interceptTime = UnityEngine.Random.Range(m_interceptTimeMin, m_interceptTimeMax); - m_pauseTimer = UnityEngine.Random.Range(0f, m_circleTargetInterval); - m_updateTargetTimer = UnityEngine.Random.Range(0f, 3f); - if (m_enableHuntPlayer) - { - SetHuntPlayer(hunt: true); - } - } - - private void Start() - { - if ((bool)m_nview && m_nview.IsValid() && m_nview.IsOwner()) - { - Humanoid humanoid = m_character as Humanoid; - if ((bool)humanoid) - { - humanoid.EquipBestWeapon(null, null, null, null); - } - } - } - - protected override void OnDamaged(float damage, Character attacker) - { - base.OnDamaged(damage, attacker); - SetAlerted(alert: true); - if (attacker != null && m_targetCreature == null && (!attacker.IsPlayer() || !m_character.IsTamed())) - { - m_targetCreature = attacker; - m_lastKnownTargetPos = attacker.transform.position; - m_beenAtLastPos = false; - m_havePathToTarget = HavePath(m_targetCreature.transform.position); - m_targetStatic = null; - } - } - - public void MakeTame() - { - m_character.SetTamed(tamed: true); - SetAlerted(alert: false); - m_targetCreature = null; - m_targetStatic = null; - } - - private void UpdateTarget(Humanoid humanoid, float dt, out bool canHearTarget, out bool canSeeTarget) - { - m_updateTargetTimer -= dt; - if (m_updateTargetTimer <= 0f && !m_character.InAttack()) - { - m_updateTargetTimer = (Character.IsCharacterInRange(base.transform.position, 32f) ? 3f : 10f); - Character character = FindEnemy(); - if ((bool)character) - { - m_targetCreature = character; - m_targetStatic = null; - } - if (m_targetCreature != null) - { - m_havePathToTarget = HavePath(m_targetCreature.transform.position); - } - if (!m_character.IsTamed() && (m_attackPlayerObjects || (m_attackPlayerObjectsWhenAlerted && IsAlerted())) && (m_targetCreature == null || ((bool)m_targetCreature && !m_havePathToTarget))) - { - StaticTarget staticTarget = FindClosestStaticPriorityTarget(99999f); - if ((bool)staticTarget) - { - m_targetStatic = staticTarget; - m_targetCreature = null; - } - if (m_targetStatic != null) - { - m_havePathToTarget = HavePath(m_targetStatic.transform.position); - } - if ((!staticTarget || ((bool)m_targetStatic && !m_havePathToTarget)) && IsAlerted()) - { - StaticTarget staticTarget2 = FindRandomStaticTarget(10f, priorityTargetsOnly: false); - if ((bool)staticTarget2) - { - m_targetStatic = staticTarget2; - m_targetCreature = null; - } - } - } - } - if ((bool)m_targetCreature && m_character.IsTamed()) - { - if (GetPatrolPoint(out var point)) - { - if (Vector3.Distance(m_targetCreature.transform.position, point) > m_alertRange) - { - m_targetCreature = null; - } - } - else if ((bool)m_follow && Vector3.Distance(m_targetCreature.transform.position, m_follow.transform.position) > m_alertRange) - { - m_targetCreature = null; - } - } - if ((bool)m_targetCreature && m_targetCreature.IsDead()) - { - m_targetCreature = null; - } - canHearTarget = false; - canSeeTarget = false; - if ((bool)m_targetCreature) - { - canHearTarget = CanHearTarget(m_targetCreature); - canSeeTarget = CanSeeTarget(m_targetCreature); - if (canSeeTarget | canHearTarget) - { - m_timeSinceSensedTargetCreature = 0f; - } - if (m_targetCreature.IsPlayer()) - { - m_targetCreature.OnTargeted(canSeeTarget | canHearTarget, IsAlerted()); - } - } - m_timeSinceSensedTargetCreature += dt; - if (IsAlerted() || m_targetCreature != null) - { - m_timeSinceAttacking += dt; - float num = (m_character.IsBoss() ? 15f : 15f); - float num2 = num * 2f; - float num3 = Vector3.Distance(m_spawnPoint, base.transform.position); - bool flag = HuntPlayer() && (bool)m_targetCreature && m_targetCreature.IsPlayer(); - if (m_timeSinceSensedTargetCreature > num || (!flag && (m_timeSinceAttacking > num2 || (m_maxChaseDistance > 0f && m_timeSinceSensedTargetCreature > 1f && num3 > m_maxChaseDistance)))) - { - SetAlerted(alert: false); - m_targetCreature = null; - m_targetStatic = null; - m_timeSinceAttacking = 0f; - m_updateTargetTimer = 5f; - } - } - } - - protected override void UpdateAI(float dt) - { - base.UpdateAI(dt); - if (!m_nview.IsOwner()) - { - return; - } - if (IsSleeping()) - { - UpdateSleep(dt); - return; - } - m_aiStatus = ""; - Humanoid humanoid = m_character as Humanoid; - UpdateTarget(humanoid, dt, out var canHearTarget, out var canSeeTarget); - if (m_avoidLand && !m_character.IsSwiming()) - { - m_aiStatus = "Move to water"; - MoveToWater(dt, 20f); - return; - } - if (((m_despawnInDay && EnvMan.instance.IsDay()) || (m_eventCreature && !RandEventSystem.HaveActiveEvent())) && (m_targetCreature == null || !canSeeTarget)) - { - MoveAwayAndDespawn(dt, run: true); - m_aiStatus = "Trying to despawn "; - return; - } - if (m_fleeIfNotAlerted && !HuntPlayer() && (bool)m_targetCreature && !IsAlerted() && Vector3.Distance(m_targetCreature.transform.position, base.transform.position) - m_targetCreature.GetRadius() > m_alertRange) - { - Flee(dt, m_targetCreature.transform.position); - m_aiStatus = "Avoiding conflict"; - return; - } - if (m_fleeIfLowHealth > 0f && m_character.GetHealthPercentage() < m_fleeIfLowHealth && m_timeSinceHurt < 20f && m_targetCreature != null) - { - Flee(dt, m_targetCreature.transform.position); - m_aiStatus = "Low health, flee"; - return; - } - if ((m_afraidOfFire || m_avoidFire) && AvoidFire(dt, m_targetCreature, m_afraidOfFire)) - { - if (m_afraidOfFire) - { - m_targetStatic = null; - m_targetCreature = null; - } - m_aiStatus = "Avoiding fire"; - return; - } - if (m_circleTargetInterval > 0f && (bool)m_targetCreature) - { - if ((bool)m_targetCreature) - { - m_pauseTimer += dt; - if (m_pauseTimer > m_circleTargetInterval) - { - if (m_pauseTimer > m_circleTargetInterval + m_circleTargetDuration) - { - m_pauseTimer = 0f; - } - RandomMovementArroundPoint(dt, m_targetCreature.transform.position, m_circleTargetDistance, IsAlerted()); - m_aiStatus = "Attack pause"; - return; - } - } - else - { - m_pauseTimer = 0f; - } - } - if (m_targetCreature != null) - { - if ((bool)EffectArea.IsPointInsideArea(m_targetCreature.transform.position, EffectArea.Type.NoMonsters)) - { - Flee(dt, m_targetCreature.transform.position); - m_aiStatus = "Avoid no-monster area"; - return; - } - } - else - { - EffectArea effectArea = EffectArea.IsPointInsideArea(base.transform.position, EffectArea.Type.NoMonsters, 15f); - if (effectArea != null) - { - Flee(dt, effectArea.transform.position); - m_aiStatus = "Avoid no-monster area"; - return; - } - } - if (m_fleeIfHurtWhenTargetCantBeReached && m_targetCreature != null && !m_havePathToTarget && m_timeSinceHurt < 20f) - { - m_aiStatus = "Hide from unreachable target"; - Flee(dt, m_targetCreature.transform.position); - return; - } - if ((!IsAlerted() || (m_targetStatic == null && m_targetCreature == null)) && UpdateConsumeItem(humanoid, dt)) - { - m_aiStatus = "Consume item"; - return; - } - ItemDrop.ItemData itemData = SelectBestAttack(humanoid, dt); - bool flag = itemData != null && Time.time - itemData.m_lastAttackTime > itemData.m_shared.m_aiAttackInterval && Time.time - m_lastAttackTime > m_minAttackInterval && !IsTakingOff(); - if ((m_character.IsFlying() ? m_circulateWhileChargingFlying : m_circulateWhileCharging) && (m_targetStatic != null || m_targetCreature != null) && itemData != null && !flag && !m_character.InAttack()) - { - m_aiStatus = "Move around target weapon ready:" + flag; - if (itemData != null) - { - m_aiStatus = m_aiStatus + " Weapon:" + itemData.m_shared.m_name; - } - Vector3 point = (m_targetCreature ? m_targetCreature.transform.position : m_targetStatic.transform.position); - RandomMovementArroundPoint(dt, point, m_randomMoveRange, IsAlerted()); - } - else if ((m_targetStatic == null && m_targetCreature == null) || itemData == null) - { - if ((bool)m_follow) - { - Follow(m_follow, dt); - m_aiStatus = "Follow"; - return; - } - m_aiStatus = string.Concat("Random movement (weapon: ", (itemData != null) ? itemData.m_shared.m_name : "none", ") (targetpiece: ", m_targetStatic, ") (target: ", m_targetCreature ? m_targetCreature.gameObject.name : "none", ")"); - IdleMovement(dt); - } - else if (itemData.m_shared.m_aiTargetType == ItemDrop.ItemData.AiTarget.Enemy) - { - if ((bool)m_targetStatic) - { - Vector3 vector = m_targetStatic.FindClosestPoint(base.transform.position); - if (Vector3.Distance(vector, base.transform.position) < itemData.m_shared.m_aiAttackRange && CanSeeTarget(m_targetStatic)) - { - LookAt(m_targetStatic.GetCenter()); - if (IsLookingAt(m_targetStatic.GetCenter(), itemData.m_shared.m_aiAttackMaxAngle) && flag) - { - m_aiStatus = "Attacking piece"; - DoAttack(null, isFriend: false); - } - else - { - StopMoving(); - } - } - else - { - m_aiStatus = "Move to static target"; - MoveTo(dt, vector, 0f, IsAlerted()); - } - } - else - { - if (!m_targetCreature) - { - return; - } - if (canHearTarget || canSeeTarget || (HuntPlayer() && m_targetCreature.IsPlayer())) - { - m_beenAtLastPos = false; - m_lastKnownTargetPos = m_targetCreature.transform.position; - float num = Vector3.Distance(m_lastKnownTargetPos, base.transform.position) - m_targetCreature.GetRadius(); - if ((canSeeTarget && num < m_alertRange) || HuntPlayer()) - { - SetAlerted(alert: true); - } - bool num2 = num < itemData.m_shared.m_aiAttackRange; - if (!num2 || !canSeeTarget || itemData.m_shared.m_aiAttackRangeMin < 0f) - { - m_aiStatus = "Move closer"; - Vector3 velocity = m_targetCreature.GetVelocity(); - Vector3 vector2 = velocity * m_interceptTime; - Vector3 lastKnownTargetPos = m_lastKnownTargetPos; - if (num > vector2.magnitude / 4f) - { - lastKnownTargetPos += velocity * m_interceptTime; - } - MoveTo(dt, lastKnownTargetPos, 0f, IsAlerted()); - } - else - { - StopMoving(); - } - if (num2 && canSeeTarget) - { - m_aiStatus = "In attack range"; - LookAt(m_targetCreature.GetTopPoint()); - if (flag && IsLookingAt(m_lastKnownTargetPos, itemData.m_shared.m_aiAttackMaxAngle)) - { - m_aiStatus = "Attacking creature"; - DoAttack(m_targetCreature, isFriend: false); - } - } - } - else - { - m_aiStatus = "Searching for target"; - if (m_beenAtLastPos) - { - RandomMovement(dt, m_lastKnownTargetPos); - } - else if (MoveTo(dt, m_lastKnownTargetPos, 0f, IsAlerted())) - { - m_beenAtLastPos = true; - } - } - } - } - else - { - if (itemData.m_shared.m_aiTargetType != ItemDrop.ItemData.AiTarget.FriendHurt && itemData.m_shared.m_aiTargetType != ItemDrop.ItemData.AiTarget.Friend) - { - return; - } - m_aiStatus = "Helping friend"; - Character character = ((itemData.m_shared.m_aiTargetType == ItemDrop.ItemData.AiTarget.FriendHurt) ? HaveHurtFriendInRange(m_viewRange) : HaveFriendInRange(m_viewRange)); - if ((bool)character) - { - if (Vector3.Distance(character.transform.position, base.transform.position) < itemData.m_shared.m_aiAttackRange) - { - if (flag) - { - StopMoving(); - LookAt(character.transform.position); - DoAttack(character, isFriend: true); - } - else - { - RandomMovement(dt, character.transform.position); - } - } - else - { - MoveTo(dt, character.transform.position, 0f, IsAlerted()); - } - } - else - { - RandomMovement(dt, base.transform.position); - } - } - } - - private bool UpdateConsumeItem(Humanoid humanoid, float dt) - { - if (m_consumeItems == null || m_consumeItems.Count == 0) - { - return false; - } - m_consumeSearchTimer += dt; - if (m_consumeSearchTimer > m_consumeSearchInterval) - { - m_consumeSearchTimer = 0f; - if ((bool)m_tamable && !m_tamable.IsHungry()) - { - return false; - } - m_consumeTarget = FindClosestConsumableItem(m_consumeSearchRange); - } - if ((bool)m_consumeTarget) - { - if (MoveTo(dt, m_consumeTarget.transform.position, m_consumeRange, run: false)) - { - LookAt(m_consumeTarget.transform.position); - if (IsLookingAt(m_consumeTarget.transform.position, 20f) && m_consumeTarget.RemoveOne()) - { - if (m_onConsumedItem != null) - { - m_onConsumedItem(m_consumeTarget); - } - humanoid.m_consumeItemEffects.Create(base.transform.position, Quaternion.identity); - m_animator.SetTrigger("consume"); - m_consumeTarget = null; - if (m_consumeHeal > 0f) - { - m_character.Heal(m_consumeHeal); - } - } - } - return true; - } - return false; - } - - private ItemDrop FindClosestConsumableItem(float maxRange) - { - if (m_itemMask == 0) - { - m_itemMask = LayerMask.GetMask("item"); - } - Collider[] array = Physics.OverlapSphere(base.transform.position, maxRange, m_itemMask); - ItemDrop itemDrop = null; - float num = 999999f; - Collider[] array2 = array; - foreach (Collider collider in array2) - { - if (!collider.attachedRigidbody) - { - continue; - } - ItemDrop component = collider.attachedRigidbody.GetComponent<ItemDrop>(); - if (!(component == null) && component.GetComponent<ZNetView>().IsValid() && CanConsume(component.m_itemData)) - { - float num2 = Vector3.Distance(component.transform.position, base.transform.position); - if (itemDrop == null || num2 < num) - { - itemDrop = component; - num = num2; - } - } - } - if ((bool)itemDrop && HavePath(itemDrop.transform.position)) - { - return itemDrop; - } - return null; - } - - private bool CanConsume(ItemDrop.ItemData item) - { - foreach (ItemDrop consumeItem in m_consumeItems) - { - if (consumeItem.m_itemData.m_shared.m_name == item.m_shared.m_name) - { - return true; - } - } - return false; - } - - private ItemDrop.ItemData SelectBestAttack(Humanoid humanoid, float dt) - { - if ((bool)m_targetCreature || (bool)m_targetStatic) - { - m_updateWeaponTimer -= dt; - if (m_updateWeaponTimer <= 0f && !m_character.InAttack()) - { - m_updateWeaponTimer = 1f; - HaveFriendsInRange(m_viewRange, out var hurtFriend, out var friend); - humanoid.EquipBestWeapon(m_targetCreature, m_targetStatic, hurtFriend, friend); - } - } - return humanoid.GetCurrentWeapon(); - } - - private bool DoAttack(Character target, bool isFriend) - { - ItemDrop.ItemData currentWeapon = (m_character as Humanoid).GetCurrentWeapon(); - if (currentWeapon != null) - { - if (!BaseAI.CanUseAttack(m_character, currentWeapon)) - { - return false; - } - bool num = m_character.StartAttack(target, charge: false); - if (num) - { - m_timeSinceAttacking = 0f; - m_lastAttackTime = Time.time; - } - return num; - } - return false; - } - - public void SetDespawnInDay(bool despawn) - { - m_despawnInDay = despawn; - m_nview.GetZDO().Set("DespawnInDay", despawn); - } - - public void SetEventCreature(bool despawn) - { - m_eventCreature = despawn; - m_nview.GetZDO().Set("EventCreature", despawn); - } - - public bool IsEventCreature() - { - return m_eventCreature; - } - - protected override void OnDrawGizmosSelected() - { - base.OnDrawGizmosSelected(); - } - - public override Character GetTargetCreature() - { - return m_targetCreature; - } - - private void UpdateSleep(float dt) - { - if (!IsSleeping()) - { - return; - } - m_sleepTimer += dt; - if (m_sleepTimer < 0.5f) - { - return; - } - if (HuntPlayer()) - { - Wakeup(); - return; - } - if (m_wakeupRange > 0f) - { - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, m_wakeupRange); - if ((bool)closestPlayer && !closestPlayer.InGhostMode() && !closestPlayer.IsDebugFlying()) - { - Wakeup(); - return; - } - } - if (m_noiseWakeup) - { - Player playerNoiseRange = Player.GetPlayerNoiseRange(base.transform.position, m_noiseRangeScale); - if ((bool)playerNoiseRange && !playerNoiseRange.InGhostMode() && !playerNoiseRange.IsDebugFlying()) - { - Wakeup(); - } - } - } - - private void Wakeup() - { - if (IsSleeping()) - { - m_animator.SetBool("sleeping", value: false); - m_nview.GetZDO().Set("sleeping", value: false); - m_wakeupEffects.Create(base.transform.position, base.transform.rotation); - } - } - - public override bool IsSleeping() - { - if (!m_nview.IsValid()) - { - return false; - } - return m_nview.GetZDO().GetBool("sleeping", m_sleeping); - } - - protected override void SetAlerted(bool alert) - { - if (alert) - { - m_timeSinceSensedTargetCreature = 0f; - } - base.SetAlerted(alert); - } - - public override bool HuntPlayer() - { - if (base.HuntPlayer()) - { - if (m_eventCreature && !RandEventSystem.InEvent()) - { - return false; - } - if (m_despawnInDay && EnvMan.instance.IsDay()) - { - return false; - } - return true; - } - return false; - } - - public GameObject GetFollowTarget() - { - return m_follow; - } - - public void SetFollowTarget(GameObject go) - { - m_follow = go; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MovementTest.cs b/Valheim_v202102/Valheim/assembly_valheim/MovementTest.cs deleted file mode 100644 index 4ac6ec2..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MovementTest.cs +++ /dev/null @@ -1,30 +0,0 @@ -using UnityEngine; - -public class MovementTest : MonoBehaviour -{ - public float m_speed = 10f; - - private float m_timer; - - private Rigidbody m_body; - - private Vector3 m_center; - - private Vector3 m_vel; - - private void Start() - { - m_body = GetComponent<Rigidbody>(); - m_center = base.transform.position; - } - - private void FixedUpdate() - { - m_timer += Time.fixedDeltaTime; - float num = 5f; - Vector3 vector = m_center + new Vector3(Mathf.Sin(m_timer * m_speed) * num, 0f, Mathf.Cos(m_timer * m_speed) * num); - m_vel = (vector - m_body.position) / Time.fixedDeltaTime; - m_body.position = vector; - m_body.velocity = m_vel; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/MusicMan.cs b/Valheim_v202102/Valheim/assembly_valheim/MusicMan.cs deleted file mode 100644 index e5735f4..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/MusicMan.cs +++ /dev/null @@ -1,473 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Audio; - -public class MusicMan : MonoBehaviour -{ - [Serializable] - public class NamedMusic - { - public string m_name = ""; - - public AudioClip[] m_clips; - - public float m_volume = 1f; - - public float m_fadeInTime = 3f; - - public bool m_alwaysFadeout; - - public bool m_loop; - - public bool m_resume; - - public bool m_enabled = true; - - public bool m_ambientMusic; - - [NonSerialized] - public int m_savedPlaybackPos; - - [NonSerialized] - public float m_lastPlayedTime; - } - - private string m_triggeredMusic = ""; - - private static MusicMan m_instance; - - public static float m_masterMusicVolume = 1f; - - public AudioMixerGroup m_musicMixer; - - public List<NamedMusic> m_music = new List<NamedMusic>(); - - [Header("Combat")] - public float m_combatMusicTimeout = 4f; - - [Header("Sailing")] - public float m_sailMusicShipSpeedThreshold = 3f; - - public float m_sailMusicMinSailTime = 20f; - - [Header("Ambient music")] - public float m_randomMusicIntervalMin = 300f; - - public float m_randomMusicIntervalMax = 500f; - - private NamedMusic m_queuedMusic; - - private NamedMusic m_currentMusic; - - private float m_musicVolume = 1f; - - private float m_musicFadeTime = 3f; - - private bool m_alwaysFadeout; - - private bool m_stopMusic; - - private string m_randomEventMusic; - - private float m_lastAmbientMusicTime; - - private float m_randomAmbientInterval; - - private string m_triggerMusic; - - private float m_combatTimer; - - private AudioSource m_musicSource; - - private float m_currentMusicVol; - - private float m_sailDuration; - - private float m_notSailDuration; - - public static MusicMan instance => m_instance; - - private void Awake() - { - if ((bool)m_instance) - { - return; - } - m_instance = this; - GameObject gameObject = new GameObject("music"); - gameObject.transform.SetParent(base.transform); - m_musicSource = gameObject.AddComponent<AudioSource>(); - m_musicSource.loop = true; - m_musicSource.spatialBlend = 0f; - m_musicSource.outputAudioMixerGroup = m_musicMixer; - m_musicSource.bypassReverbZones = true; - m_randomAmbientInterval = UnityEngine.Random.Range(m_randomMusicIntervalMin, m_randomMusicIntervalMax); - m_masterMusicVolume = PlayerPrefs.GetFloat("MusicVolume", 1f); - ApplySettings(); - foreach (NamedMusic item in m_music) - { - AudioClip[] clips = item.m_clips; - foreach (AudioClip audioClip in clips) - { - if (audioClip == null || !audioClip) - { - item.m_enabled = false; - ZLog.LogWarning("Missing audio clip in music " + item.m_name); - break; - } - } - } - } - - public void ApplySettings() - { - bool flag = PlayerPrefs.GetInt("ContinousMusic", 0) == 1; - foreach (NamedMusic item in m_music) - { - if (item.m_ambientMusic) - { - item.m_loop = flag; - if (!flag && GetCurrentMusic() == item.m_name && m_musicSource.loop) - { - StopMusic(); - } - } - } - } - - private void OnDestroy() - { - if (m_instance == this) - { - m_instance = null; - } - } - - private void Update() - { - if (!(m_instance != this)) - { - float deltaTime = Time.deltaTime; - UpdateCurrentMusic(deltaTime); - UpdateCombatMusic(deltaTime); - UpdateMusic(deltaTime); - } - } - - private void UpdateCurrentMusic(float dt) - { - string currentMusic = GetCurrentMusic(); - if (Game.instance != null) - { - if (Player.m_localPlayer == null) - { - StartMusic("respawn"); - return; - } - if (currentMusic == "respawn") - { - StopMusic(); - } - } - if ((bool)Player.m_localPlayer && Player.m_localPlayer.InIntro()) - { - StartMusic("intro"); - return; - } - if (currentMusic == "intro") - { - StopMusic(); - } - if (!HandleEventMusic(currentMusic) && !HandleSailingMusic(dt, currentMusic) && !HandleTriggerMusic(currentMusic)) - { - HandleEnvironmentMusic(dt, currentMusic); - } - } - - private bool HandleEnvironmentMusic(float dt, string currentMusic) - { - if (!EnvMan.instance) - { - return false; - } - NamedMusic environmentMusic = GetEnvironmentMusic(); - if (environmentMusic == null || (!environmentMusic.m_loop && environmentMusic.m_name != GetCurrentMusic())) - { - StopMusic(); - return true; - } - if (!environmentMusic.m_loop) - { - if (Time.time - m_lastAmbientMusicTime < m_randomAmbientInterval) - { - return false; - } - m_randomAmbientInterval = UnityEngine.Random.Range(m_randomMusicIntervalMin, m_randomMusicIntervalMax); - m_lastAmbientMusicTime = Time.time; - } - StartMusic(environmentMusic); - return true; - } - - private NamedMusic GetEnvironmentMusic() - { - string text = null; - text = ((!Player.m_localPlayer || !Player.m_localPlayer.IsSafeInHome()) ? EnvMan.instance.GetAmbientMusic() : "home"); - return FindMusic(text); - } - - private bool HandleTriggerMusic(string currentMusic) - { - if (m_triggerMusic != null) - { - StartMusic(m_triggerMusic); - m_triggeredMusic = m_triggerMusic; - m_triggerMusic = null; - return true; - } - if (m_triggeredMusic != null) - { - if (currentMusic == m_triggeredMusic) - { - return true; - } - m_triggeredMusic = null; - } - return false; - } - - private bool HandleEventMusic(string currentMusic) - { - if ((bool)RandEventSystem.instance) - { - string musicOverride = RandEventSystem.instance.GetMusicOverride(); - if (musicOverride != null) - { - StartMusic(musicOverride); - m_randomEventMusic = musicOverride; - return true; - } - if (currentMusic == m_randomEventMusic) - { - m_randomEventMusic = null; - StopMusic(); - } - } - return false; - } - - private bool HandleCombatMusic(string currentMusic) - { - if (InCombat()) - { - StartMusic("combat"); - return true; - } - if (currentMusic == "combat") - { - StopMusic(); - } - return false; - } - - private bool HandleSailingMusic(float dt, string currentMusic) - { - if (IsSailing()) - { - m_notSailDuration = 0f; - m_sailDuration += dt; - if (m_sailDuration > m_sailMusicMinSailTime) - { - StartMusic("sailing"); - return true; - } - } - else - { - m_sailDuration = 0f; - m_notSailDuration += dt; - if (m_notSailDuration > m_sailMusicMinSailTime / 2f && currentMusic == "sailing") - { - StopMusic(); - } - } - return false; - } - - private bool IsSailing() - { - if (!Player.m_localPlayer) - { - return false; - } - Ship localShip = Ship.GetLocalShip(); - if ((bool)localShip && localShip.GetSpeed() > m_sailMusicShipSpeedThreshold) - { - return true; - } - return false; - } - - private void UpdateMusic(float dt) - { - if (m_queuedMusic != null || m_stopMusic) - { - if (!m_musicSource.isPlaying || m_currentMusicVol <= 0f) - { - if (m_musicSource.isPlaying && m_currentMusic != null && m_currentMusic.m_loop && m_currentMusic.m_resume) - { - m_currentMusic.m_lastPlayedTime = Time.time; - m_currentMusic.m_savedPlaybackPos = m_musicSource.timeSamples; - ZLog.Log("Stoped music " + m_currentMusic.m_name + " at " + m_currentMusic.m_savedPlaybackPos); - } - m_musicSource.Stop(); - m_stopMusic = false; - m_currentMusic = null; - if (m_queuedMusic != null) - { - m_musicSource.clip = m_queuedMusic.m_clips[UnityEngine.Random.Range(0, m_queuedMusic.m_clips.Length)]; - m_musicSource.loop = m_queuedMusic.m_loop; - m_musicSource.volume = 0f; - m_musicSource.timeSamples = 0; - m_musicSource.Play(); - if (m_queuedMusic.m_loop && m_queuedMusic.m_resume && Time.time - m_queuedMusic.m_lastPlayedTime < m_musicSource.clip.length * 2f) - { - m_musicSource.timeSamples = m_queuedMusic.m_savedPlaybackPos; - ZLog.Log("Resumed music " + m_queuedMusic.m_name + " at " + m_queuedMusic.m_savedPlaybackPos); - } - m_currentMusicVol = 0f; - m_musicVolume = m_queuedMusic.m_volume; - m_musicFadeTime = m_queuedMusic.m_fadeInTime; - m_alwaysFadeout = m_queuedMusic.m_alwaysFadeout; - m_currentMusic = m_queuedMusic; - m_queuedMusic = null; - } - } - else - { - float num = ((m_queuedMusic != null) ? Mathf.Min(m_queuedMusic.m_fadeInTime, m_musicFadeTime) : m_musicFadeTime); - m_currentMusicVol = Mathf.MoveTowards(m_currentMusicVol, 0f, dt / num); - m_musicSource.volume = Utils.SmoothStep(0f, 1f, m_currentMusicVol) * m_musicVolume * m_masterMusicVolume; - } - } - else if (m_musicSource.isPlaying) - { - float num2 = m_musicSource.clip.length - m_musicSource.time; - if (m_alwaysFadeout && !m_musicSource.loop && num2 < m_musicFadeTime) - { - m_currentMusicVol = Mathf.MoveTowards(m_currentMusicVol, 0f, dt / m_musicFadeTime); - m_musicSource.volume = Utils.SmoothStep(0f, 1f, m_currentMusicVol) * m_musicVolume * m_masterMusicVolume; - } - else - { - m_currentMusicVol = Mathf.MoveTowards(m_currentMusicVol, 1f, dt / m_musicFadeTime); - m_musicSource.volume = Utils.SmoothStep(0f, 1f, m_currentMusicVol) * m_musicVolume * m_masterMusicVolume; - } - } - else if (m_currentMusic != null && !m_musicSource.isPlaying) - { - m_currentMusic = null; - } - } - - private void UpdateCombatMusic(float dt) - { - if (m_combatTimer > 0f) - { - m_combatTimer -= Time.deltaTime; - } - } - - public void ResetCombatTimer() - { - m_combatTimer = m_combatMusicTimeout; - } - - private bool InCombat() - { - return m_combatTimer > 0f; - } - - public void TriggerMusic(string name) - { - m_triggerMusic = name; - } - - private void StartMusic(string name) - { - if (!(GetCurrentMusic() == name)) - { - NamedMusic music = FindMusic(name); - StartMusic(music); - } - } - - private void StartMusic(NamedMusic music) - { - if (music == null || !(GetCurrentMusic() == music.m_name)) - { - if (music != null) - { - m_queuedMusic = music; - m_stopMusic = false; - } - else - { - StopMusic(); - } - } - } - - private NamedMusic FindMusic(string name) - { - if (name == null || name.Length == 0) - { - return null; - } - foreach (NamedMusic item in m_music) - { - if (item.m_name == name && item.m_enabled && item.m_clips.Length != 0 && (bool)item.m_clips[0]) - { - return item; - } - } - return null; - } - - public bool IsPlaying() - { - return m_musicSource.isPlaying; - } - - private string GetCurrentMusic() - { - if (m_stopMusic) - { - return ""; - } - if (m_queuedMusic != null) - { - return m_queuedMusic.m_name; - } - if (m_currentMusic != null) - { - return m_currentMusic.m_name; - } - return ""; - } - - private void StopMusic() - { - m_queuedMusic = null; - m_stopMusic = true; - } - - public void Reset() - { - StopMusic(); - m_combatTimer = 0f; - m_randomEventMusic = null; - m_triggerMusic = null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/NavmeshTest.cs b/Valheim_v202102/Valheim/assembly_valheim/NavmeshTest.cs deleted file mode 100644 index c0b4a0c..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/NavmeshTest.cs +++ /dev/null @@ -1,62 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class NavmeshTest : MonoBehaviour -{ - public Transform m_target; - - public Pathfinding.AgentType m_agentType = Pathfinding.AgentType.Humanoid; - - public bool m_cleanPath = true; - - private List<Vector3> m_path = new List<Vector3>(); - - private bool m_havePath; - - private void Awake() - { - } - - private void Update() - { - if (Pathfinding.instance.GetPath(base.transform.position, m_target.position, m_path, m_agentType, requireFullPath: false, m_cleanPath)) - { - m_havePath = true; - } - else - { - m_havePath = false; - } - } - - private void OnDrawGizmos() - { - if (m_target == null) - { - return; - } - if (m_havePath) - { - Gizmos.color = Color.yellow; - for (int i = 0; i < m_path.Count - 1; i++) - { - Vector3 vector = m_path[i]; - Gizmos.DrawLine(to: m_path[i + 1] + Vector3.up * 0.2f, from: vector + Vector3.up * 0.2f); - } - foreach (Vector3 item in m_path) - { - Gizmos.DrawSphere(item + Vector3.up * 0.2f, 0.1f); - } - Gizmos.color = Color.green; - Gizmos.DrawSphere(base.transform.position, 0.3f); - Gizmos.DrawSphere(m_target.position, 0.3f); - } - else - { - Gizmos.color = Color.red; - Gizmos.DrawLine(base.transform.position + Vector3.up * 0.2f, m_target.position + Vector3.up * 0.2f); - Gizmos.DrawSphere(base.transform.position, 0.3f); - Gizmos.DrawSphere(m_target.position, 0.3f); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ObjectDB.cs b/Valheim_v202102/Valheim/assembly_valheim/ObjectDB.cs deleted file mode 100644 index 46c0f5c..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ObjectDB.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class ObjectDB : MonoBehaviour -{ - private static ObjectDB m_instance; - - public List<StatusEffect> m_StatusEffects = new List<StatusEffect>(); - - public List<GameObject> m_items = new List<GameObject>(); - - public List<Recipe> m_recipes = new List<Recipe>(); - - private Dictionary<int, GameObject> m_itemByHash = new Dictionary<int, GameObject>(); - - public static ObjectDB instance => m_instance; - - private void Awake() - { - m_instance = this; - UpdateItemHashes(); - } - - public void CopyOtherDB(ObjectDB other) - { - m_items = other.m_items; - m_recipes = other.m_recipes; - m_StatusEffects = other.m_StatusEffects; - UpdateItemHashes(); - } - - private void UpdateItemHashes() - { - m_itemByHash.Clear(); - foreach (GameObject item in m_items) - { - m_itemByHash.Add(item.name.GetStableHashCode(), item); - } - } - - public StatusEffect GetStatusEffect(string name) - { - foreach (StatusEffect statusEffect in m_StatusEffects) - { - if (statusEffect.name == name) - { - return statusEffect; - } - } - return null; - } - - public GameObject GetItemPrefab(string name) - { - foreach (GameObject item in m_items) - { - if (item.name == name) - { - return item; - } - } - return null; - } - - public GameObject GetItemPrefab(int hash) - { - if (m_itemByHash.TryGetValue(hash, out var value)) - { - return value; - } - return null; - } - - public int GetPrefabHash(GameObject prefab) - { - return prefab.name.GetStableHashCode(); - } - - public List<ItemDrop> GetAllItems(ItemDrop.ItemData.ItemType type, string startWith) - { - List<ItemDrop> list = new List<ItemDrop>(); - foreach (GameObject item in m_items) - { - ItemDrop component = item.GetComponent<ItemDrop>(); - if (component.m_itemData.m_shared.m_itemType == type && component.gameObject.name.StartsWith(startWith)) - { - list.Add(component); - } - } - return list; - } - - public Recipe GetRecipe(ItemDrop.ItemData item) - { - foreach (Recipe recipe in m_recipes) - { - if (!(recipe.m_item == null) && recipe.m_item.m_itemData.m_shared.m_name == item.m_shared.m_name) - { - return recipe; - } - } - return null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Odin.cs b/Valheim_v202102/Valheim/assembly_valheim/Odin.cs deleted file mode 100644 index 7a82e11..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Odin.cs +++ /dev/null @@ -1,55 +0,0 @@ -using UnityEngine; - -public class Odin : MonoBehaviour -{ - public float m_despawnCloseDistance = 20f; - - public float m_despawnFarDistance = 50f; - - public EffectList m_despawn = new EffectList(); - - public float m_ttl = 300f; - - private float m_time; - - private ZNetView m_nview; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - } - - private void Update() - { - if (!m_nview.IsOwner()) - { - return; - } - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, m_despawnFarDistance); - if (closestPlayer == null) - { - m_despawn.Create(base.transform.position, base.transform.rotation); - m_nview.Destroy(); - ZLog.Log("No player in range, despawning"); - return; - } - Vector3 forward = closestPlayer.transform.position - base.transform.position; - forward.y = 0f; - forward.Normalize(); - base.transform.rotation = Quaternion.LookRotation(forward); - if (Vector3.Distance(closestPlayer.transform.position, base.transform.position) < m_despawnCloseDistance) - { - m_despawn.Create(base.transform.position, base.transform.rotation); - m_nview.Destroy(); - ZLog.Log("Player go too close,despawning"); - return; - } - m_time += Time.deltaTime; - if (m_time > m_ttl) - { - m_despawn.Create(base.transform.position, base.transform.rotation); - m_nview.Destroy(); - ZLog.Log("timeout " + m_time + " , despawning"); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/OfferingBowl.cs b/Valheim_v202102/Valheim/assembly_valheim/OfferingBowl.cs deleted file mode 100644 index 8f361b3..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/OfferingBowl.cs +++ /dev/null @@ -1,213 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class OfferingBowl : MonoBehaviour, Hoverable, Interactable -{ - public string m_name = "Ancient bowl"; - - public string m_useItemText = "Burn item"; - - public ItemDrop m_bossItem; - - public int m_bossItems = 1; - - public GameObject m_bossPrefab; - - public ItemDrop m_itemPrefab; - - public Transform m_itemSpawnPoint; - - public string m_setGlobalKey = ""; - - [Header("Boss")] - public float m_spawnBossDelay = 5f; - - public float m_spawnBossMaxDistance = 40f; - - public float m_spawnBossMaxYDistance = 9999f; - - public float m_spawnOffset = 1f; - - [Header("Use itemstands")] - public bool m_useItemStands; - - public string m_itemStandPrefix = ""; - - public float m_itemstandMaxRange = 20f; - - [Header("Effects")] - public EffectList m_fuelAddedEffects = new EffectList(); - - public EffectList m_spawnBossStartEffects = new EffectList(); - - public EffectList m_spawnBossDoneffects = new EffectList(); - - private Vector3 m_bossSpawnPoint; - - private void Awake() - { - } - - public string GetHoverText() - { - if (m_useItemStands) - { - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] ") + Localization.instance.Localize(m_useItemText); - } - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>1-8</b></color>] " + m_useItemText); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid user, bool hold) - { - if (hold) - { - return false; - } - if (IsBossSpawnQueued()) - { - return false; - } - if (m_useItemStands) - { - List<ItemStand> list = FindItemStands(); - foreach (ItemStand item in list) - { - if (!item.HaveAttachment()) - { - user.Message(MessageHud.MessageType.Center, "$msg_incompleteoffering"); - return false; - } - } - if (SpawnBoss(base.transform.position)) - { - user.Message(MessageHud.MessageType.Center, "$msg_offerdone"); - foreach (ItemStand item2 in list) - { - item2.DestroyAttachment(); - } - if ((bool)m_itemSpawnPoint) - { - m_fuelAddedEffects.Create(m_itemSpawnPoint.position, base.transform.rotation); - } - } - return true; - } - return false; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - if (m_useItemStands) - { - return false; - } - if (IsBossSpawnQueued()) - { - return true; - } - if (m_bossItem != null) - { - if (item.m_shared.m_name == m_bossItem.m_itemData.m_shared.m_name) - { - int num = user.GetInventory().CountItems(m_bossItem.m_itemData.m_shared.m_name); - if (num < m_bossItems) - { - user.Message(MessageHud.MessageType.Center, "$msg_incompleteoffering: " + m_bossItem.m_itemData.m_shared.m_name + " " + num + " / " + m_bossItems); - return true; - } - if (m_bossPrefab != null) - { - if (SpawnBoss(base.transform.position)) - { - user.GetInventory().RemoveItem(item.m_shared.m_name, m_bossItems); - user.ShowRemovedMessage(m_bossItem.m_itemData, m_bossItems); - user.Message(MessageHud.MessageType.Center, "$msg_offerdone"); - if ((bool)m_itemSpawnPoint) - { - m_fuelAddedEffects.Create(m_itemSpawnPoint.position, base.transform.rotation); - } - } - } - else if (m_itemPrefab != null && SpawnItem(m_itemPrefab, user as Player)) - { - user.GetInventory().RemoveItem(item.m_shared.m_name, m_bossItems); - user.ShowRemovedMessage(m_bossItem.m_itemData, m_bossItems); - user.Message(MessageHud.MessageType.Center, "$msg_offerdone"); - m_fuelAddedEffects.Create(m_itemSpawnPoint.position, base.transform.rotation); - } - if (!string.IsNullOrEmpty(m_setGlobalKey)) - { - ZoneSystem.instance.SetGlobalKey(m_setGlobalKey); - } - return true; - } - user.Message(MessageHud.MessageType.Center, "$msg_offerwrong"); - return true; - } - return false; - } - - private bool SpawnItem(ItemDrop item, Player player) - { - if (item.m_itemData.m_shared.m_questItem && player.HaveUniqueKey(item.m_itemData.m_shared.m_name)) - { - player.Message(MessageHud.MessageType.Center, "$msg_cantoffer"); - return false; - } - Object.Instantiate(item, m_itemSpawnPoint.position, Quaternion.identity); - return true; - } - - private bool SpawnBoss(Vector3 point) - { - for (int i = 0; i < 100; i++) - { - Vector2 vector = Random.insideUnitCircle * m_spawnBossMaxDistance; - Vector3 vector2 = point + new Vector3(vector.x, 0f, vector.y); - float solidHeight = ZoneSystem.instance.GetSolidHeight(vector2); - if (!(solidHeight < 0f) && !(Mathf.Abs(solidHeight - base.transform.position.y) > m_spawnBossMaxYDistance)) - { - vector2.y = solidHeight + m_spawnOffset; - m_spawnBossStartEffects.Create(vector2, Quaternion.identity); - m_bossSpawnPoint = vector2; - Invoke("DelayedSpawnBoss", m_spawnBossDelay); - return true; - } - } - return false; - } - - private bool IsBossSpawnQueued() - { - return IsInvoking("DelayedSpawnBoss"); - } - - private void DelayedSpawnBoss() - { - BaseAI component = Object.Instantiate(m_bossPrefab, m_bossSpawnPoint, Quaternion.identity).GetComponent<BaseAI>(); - if (component != null) - { - component.SetPatrolPoint(); - } - m_spawnBossDoneffects.Create(m_bossSpawnPoint, Quaternion.identity); - } - - private List<ItemStand> FindItemStands() - { - List<ItemStand> list = new List<ItemStand>(); - ItemStand[] array = Object.FindObjectsOfType<ItemStand>(); - foreach (ItemStand itemStand in array) - { - if (!(Vector3.Distance(base.transform.position, itemStand.transform.position) > m_itemstandMaxRange) && itemStand.gameObject.name.StartsWith(m_itemStandPrefix)) - { - list.Add(itemStand); - } - } - return list; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ParticleDecal.cs b/Valheim_v202102/Valheim/assembly_valheim/ParticleDecal.cs deleted file mode 100644 index f9bf10e..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ParticleDecal.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -[ExecuteInEditMode] -public class ParticleDecal : MonoBehaviour -{ - public ParticleSystem m_decalSystem; - - [Range(0f, 100f)] - public float m_chance = 100f; - - private ParticleSystem part; - - private List<ParticleCollisionEvent> collisionEvents = new List<ParticleCollisionEvent>(); - - private void Awake() - { - part = GetComponent<ParticleSystem>(); - collisionEvents = new List<ParticleCollisionEvent>(); - } - - private void OnParticleCollision(GameObject other) - { - if (!(m_chance < 100f) || !(Random.Range(0f, 100f) > m_chance)) - { - int num = part.GetCollisionEvents(other, collisionEvents); - for (int i = 0; i < num; i++) - { - ParticleCollisionEvent particleCollisionEvent = collisionEvents[i]; - Vector3 eulerAngles = Quaternion.LookRotation(particleCollisionEvent.normal).eulerAngles; - eulerAngles.x = 0f - eulerAngles.x + 180f; - eulerAngles.y = 0f - eulerAngles.y; - eulerAngles.z = Random.Range(0, 360); - ParticleSystem.EmitParams emitParams = default(ParticleSystem.EmitParams); - emitParams.position = particleCollisionEvent.intersection; - emitParams.rotation3D = eulerAngles; - emitParams.velocity = -particleCollisionEvent.normal * 0.001f; - m_decalSystem.Emit(emitParams, 1); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Pathfinding.cs b/Valheim_v202102/Valheim/assembly_valheim/Pathfinding.cs deleted file mode 100644 index 8db3b1b..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Pathfinding.cs +++ /dev/null @@ -1,754 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.AI; - -public class Pathfinding : MonoBehaviour -{ - private class NavMeshTile - { - public Vector3Int m_tile; - - public Vector3 m_center; - - public float m_pokeTime = -1000f; - - public float m_buildTime = -1000f; - - public NavMeshData m_data; - - public NavMeshDataInstance m_instance; - - public List<KeyValuePair<Vector3, NavMeshLinkInstance>> m_links1 = new List<KeyValuePair<Vector3, NavMeshLinkInstance>>(); - - public List<KeyValuePair<Vector3, NavMeshLinkInstance>> m_links2 = new List<KeyValuePair<Vector3, NavMeshLinkInstance>>(); - } - - public enum AgentType - { - Humanoid = 1, - TrollSize, - HugeSize, - HorseSize, - HumanoidNoSwim, - HumanoidAvoidWater, - Fish, - Wolf, - BigFish, - GoblinBruteSize, - HumanoidBigNoSwim - } - - public enum AreaType - { - Default, - NotWalkable, - Jump, - Water - } - - private class AgentSettings - { - public AgentType m_agentType; - - public NavMeshBuildSettings m_build; - - public bool m_canWalk = true; - - public bool m_avoidWater; - - public bool m_canSwim = true; - - public float m_swimDepth; - - public int m_areaMask = -1; - - public AgentSettings(AgentType type) - { - m_agentType = type; - m_build = NavMesh.CreateSettings(); - } - } - - private List<Vector3> tempPath = new List<Vector3>(); - - private List<Vector3> optPath = new List<Vector3>(); - - private List<Vector3> tempStitchPoints = new List<Vector3>(); - - private RaycastHit[] tempHitArray = new RaycastHit[255]; - - private static Pathfinding m_instance; - - public LayerMask m_layers; - - public LayerMask m_waterLayers; - - private Dictionary<Vector3Int, NavMeshTile> m_tiles = new Dictionary<Vector3Int, NavMeshTile>(); - - public float m_tileSize = 32f; - - public float m_defaultCost = 1f; - - public float m_waterCost = 4f; - - public float m_linkCost = 10f; - - public float m_linkWidth = 1f; - - public float m_updateInterval = 5f; - - public float m_tileTimeout = 30f; - - private const float m_tileHeight = 6000f; - - private const float m_tileY = 2500f; - - private float m_updatePathfindingTimer; - - private Queue<Vector3Int> m_queuedAreas = new Queue<Vector3Int>(); - - private Queue<NavMeshLinkInstance> m_linkRemoveQueue = new Queue<NavMeshLinkInstance>(); - - private Queue<NavMeshDataInstance> m_tileRemoveQueue = new Queue<NavMeshDataInstance>(); - - private Vector3Int m_cachedTileID = new Vector3Int(-9999999, -9999999, -9999999); - - private NavMeshTile m_cachedTile; - - private List<AgentSettings> m_agentSettings = new List<AgentSettings>(); - - private AsyncOperation m_buildOperation; - - private NavMeshTile m_buildTile; - - private List<KeyValuePair<NavMeshTile, NavMeshTile>> m_edgeBuildQueue = new List<KeyValuePair<NavMeshTile, NavMeshTile>>(); - - private NavMeshPath m_path; - - public static Pathfinding instance => m_instance; - - private void Awake() - { - m_instance = this; - SetupAgents(); - m_path = new NavMeshPath(); - } - - private void ClearAgentSettings() - { - List<NavMeshBuildSettings> list = new List<NavMeshBuildSettings>(); - for (int i = 0; i < NavMesh.GetSettingsCount(); i++) - { - list.Add(NavMesh.GetSettingsByIndex(i)); - } - ZLog.Log("Build settings:" + list.Count); - foreach (NavMeshBuildSettings item in list) - { - if (item.agentTypeID != 0) - { - ZLog.Log("Removing " + item.agentTypeID); - NavMesh.RemoveSettings(item.agentTypeID); - } - } - } - - private void OnDestroy() - { - foreach (NavMeshTile value in m_tiles.Values) - { - ClearLinks(value); - if ((bool)value.m_data) - { - NavMesh.RemoveNavMeshData(value.m_instance); - } - } - m_tiles.Clear(); - DestroyAllLinks(); - } - - private AgentSettings AddAgent(AgentType type, AgentSettings copy = null) - { - while ((int)(type + 1) > m_agentSettings.Count) - { - m_agentSettings.Add(null); - } - AgentSettings agentSettings = new AgentSettings(type); - if (copy != null) - { - agentSettings.m_build.agentHeight = copy.m_build.agentHeight; - agentSettings.m_build.agentClimb = copy.m_build.agentClimb; - agentSettings.m_build.agentRadius = copy.m_build.agentRadius; - agentSettings.m_build.agentSlope = copy.m_build.agentSlope; - } - m_agentSettings[(int)type] = agentSettings; - return agentSettings; - } - - private void SetupAgents() - { - ClearAgentSettings(); - AgentSettings agentSettings = AddAgent(AgentType.Humanoid); - agentSettings.m_build.agentHeight = 1.8f; - agentSettings.m_build.agentClimb = 0.3f; - agentSettings.m_build.agentRadius = 0.4f; - agentSettings.m_build.agentSlope = 85f; - AddAgent(AgentType.Wolf, agentSettings).m_build.agentSlope = 85f; - AddAgent(AgentType.HumanoidNoSwim, agentSettings).m_canSwim = false; - AgentSettings agentSettings2 = AddAgent(AgentType.HumanoidBigNoSwim); - agentSettings2.m_build.agentHeight = 2.5f; - agentSettings2.m_build.agentClimb = 0.3f; - agentSettings2.m_build.agentRadius = 0.5f; - agentSettings2.m_build.agentSlope = 85f; - agentSettings2.m_canSwim = false; - AddAgent(AgentType.HumanoidAvoidWater, agentSettings).m_avoidWater = true; - AgentSettings agentSettings3 = AddAgent(AgentType.TrollSize); - agentSettings3.m_build.agentHeight = 7f; - agentSettings3.m_build.agentClimb = 0.7f; - agentSettings3.m_build.agentRadius = 1f; - agentSettings3.m_build.agentSlope = 85f; - AgentSettings agentSettings4 = AddAgent(AgentType.GoblinBruteSize); - agentSettings4.m_build.agentHeight = 3.5f; - agentSettings4.m_build.agentClimb = 0.3f; - agentSettings4.m_build.agentRadius = 0.8f; - agentSettings4.m_build.agentSlope = 85f; - AgentSettings agentSettings5 = AddAgent(AgentType.HugeSize); - agentSettings5.m_build.agentHeight = 10f; - agentSettings5.m_build.agentClimb = 1.2f; - agentSettings5.m_build.agentRadius = 2f; - agentSettings5.m_build.agentSlope = 85f; - AgentSettings agentSettings6 = AddAgent(AgentType.HorseSize); - agentSettings6.m_build.agentHeight = 2.5f; - agentSettings6.m_build.agentClimb = 0.3f; - agentSettings6.m_build.agentRadius = 0.8f; - agentSettings6.m_build.agentSlope = 85f; - AgentSettings agentSettings7 = AddAgent(AgentType.Fish); - agentSettings7.m_build.agentHeight = 0.5f; - agentSettings7.m_build.agentClimb = 1f; - agentSettings7.m_build.agentRadius = 0.5f; - agentSettings7.m_build.agentSlope = 90f; - agentSettings7.m_canSwim = true; - agentSettings7.m_canWalk = false; - agentSettings7.m_swimDepth = 0.4f; - agentSettings7.m_areaMask = 12; - AgentSettings agentSettings8 = AddAgent(AgentType.BigFish); - agentSettings8.m_build.agentHeight = 1.5f; - agentSettings8.m_build.agentClimb = 1f; - agentSettings8.m_build.agentRadius = 1f; - agentSettings8.m_build.agentSlope = 90f; - agentSettings8.m_canSwim = true; - agentSettings8.m_canWalk = false; - agentSettings8.m_swimDepth = 1.5f; - agentSettings8.m_areaMask = 12; - NavMesh.SetAreaCost(0, m_defaultCost); - NavMesh.SetAreaCost(3, m_waterCost); - } - - private AgentSettings GetSettings(AgentType agentType) - { - return m_agentSettings[(int)agentType]; - } - - private int GetAgentID(AgentType agentType) - { - return GetSettings(agentType).m_build.agentTypeID; - } - - private void Update() - { - if (!IsBuilding()) - { - m_updatePathfindingTimer += Time.deltaTime; - if (m_updatePathfindingTimer > 0.1f) - { - m_updatePathfindingTimer = 0f; - UpdatePathfinding(); - } - if (!IsBuilding()) - { - DestroyQueuedNavmeshData(); - } - } - } - - private void DestroyAllLinks() - { - while (m_linkRemoveQueue.Count > 0 || m_tileRemoveQueue.Count > 0) - { - DestroyQueuedNavmeshData(); - } - } - - private void DestroyQueuedNavmeshData() - { - if (m_linkRemoveQueue.Count > 0) - { - int num = Mathf.Min(m_linkRemoveQueue.Count, 25); - for (int i = 0; i < num; i++) - { - NavMesh.RemoveLink(m_linkRemoveQueue.Dequeue()); - } - } - else if (m_tileRemoveQueue.Count > 0) - { - NavMesh.RemoveNavMeshData(m_tileRemoveQueue.Dequeue()); - } - } - - private void UpdatePathfinding() - { - Buildtiles(); - TimeoutTiles(); - } - - public bool HavePath(Vector3 from, Vector3 to, AgentType agentType) - { - return GetPath(from, to, null, agentType, requireFullPath: true, cleanup: false); - } - - public bool FindValidPoint(out Vector3 point, Vector3 center, float range, AgentType agentType) - { - PokePoint(center, agentType); - AgentSettings settings = GetSettings(agentType); - NavMeshQueryFilter filter = default(NavMeshQueryFilter); - filter.agentTypeID = (int)settings.m_agentType; - filter.areaMask = settings.m_areaMask; - if (NavMesh.SamplePosition(center, out var hit, range, filter)) - { - point = hit.position; - return true; - } - point = center; - return false; - } - - public bool GetPath(Vector3 from, Vector3 to, List<Vector3> path, AgentType agentType, bool requireFullPath = false, bool cleanup = true) - { - path?.Clear(); - PokeArea(from, agentType); - PokeArea(to, agentType); - AgentSettings settings = GetSettings(agentType); - if (!SnapToNavMesh(ref from, settings)) - { - return false; - } - if (!SnapToNavMesh(ref to, settings)) - { - return false; - } - NavMeshQueryFilter filter = default(NavMeshQueryFilter); - filter.agentTypeID = settings.m_build.agentTypeID; - filter.areaMask = settings.m_areaMask; - if (NavMesh.CalculatePath(from, to, filter, m_path)) - { - if (m_path.status == NavMeshPathStatus.PathPartial && requireFullPath) - { - return false; - } - if (path != null) - { - path.AddRange(m_path.corners); - if (cleanup) - { - CleanPath(path, settings); - } - } - return true; - } - return false; - } - - private void CleanPath(List<Vector3> basePath, AgentSettings settings) - { - if (basePath.Count <= 2) - { - return; - } - NavMeshQueryFilter filter = default(NavMeshQueryFilter); - filter.agentTypeID = settings.m_build.agentTypeID; - filter.areaMask = settings.m_areaMask; - int num = 0; - optPath.Clear(); - optPath.Add(basePath[num]); - do - { - num = FindNextNode(basePath, filter, num); - optPath.Add(basePath[num]); - } - while (num < basePath.Count - 1); - tempPath.Clear(); - tempPath.Add(optPath[0]); - for (int i = 1; i < optPath.Count - 1; i++) - { - Vector3 vector = optPath[i - 1]; - Vector3 vector2 = optPath[i]; - Vector3 vector3 = optPath[i + 1]; - Vector3 normalized = (vector3 - vector2).normalized; - Vector3 normalized2 = (vector2 - vector).normalized; - Vector3 vector4 = vector2 - (normalized + normalized2).normalized * Vector3.Distance(vector2, vector) * 0.33f; - vector4.y = (vector2.y + vector.y) * 0.5f; - Vector3 normalized3 = (vector4 - vector2).normalized; - if (!NavMesh.Raycast(vector2 + normalized3 * 0.1f, vector4, out var hit, filter) && !NavMesh.Raycast(vector4, vector, out hit, filter)) - { - tempPath.Add(vector4); - } - tempPath.Add(vector2); - Vector3 vector5 = vector2 + (normalized + normalized2).normalized * Vector3.Distance(vector2, vector3) * 0.33f; - vector5.y = (vector2.y + vector3.y) * 0.5f; - Vector3 normalized4 = (vector5 - vector2).normalized; - if (!NavMesh.Raycast(vector2 + normalized4 * 0.1f, vector5, out hit, filter) && !NavMesh.Raycast(vector5, vector3, out hit, filter)) - { - tempPath.Add(vector5); - } - } - tempPath.Add(optPath[optPath.Count - 1]); - basePath.Clear(); - basePath.AddRange(tempPath); - } - - private int FindNextNode(List<Vector3> path, NavMeshQueryFilter filter, int start) - { - for (int i = start + 2; i < path.Count; i++) - { - if (NavMesh.Raycast(path[start], path[i], out var _, filter)) - { - return i - 1; - } - } - return path.Count - 1; - } - - private bool SnapToNavMesh(ref Vector3 point, AgentSettings settings) - { - if ((bool)ZoneSystem.instance) - { - if (ZoneSystem.instance.GetGroundHeight(point, out var height) && point.y < height) - { - point.y = height; - } - if (settings.m_canSwim) - { - point.y = Mathf.Max(ZoneSystem.instance.m_waterLevel - settings.m_swimDepth, point.y); - } - } - NavMeshQueryFilter filter = default(NavMeshQueryFilter); - filter.agentTypeID = settings.m_build.agentTypeID; - filter.areaMask = settings.m_areaMask; - if (NavMesh.SamplePosition(point, out var hit, 1.5f, filter)) - { - point = hit.position; - return true; - } - if (NavMesh.SamplePosition(point, out hit, 10f, filter)) - { - point = hit.position; - return true; - } - if (NavMesh.SamplePosition(point, out hit, 20f, filter)) - { - point = hit.position; - return true; - } - return false; - } - - private void TimeoutTiles() - { - float realtimeSinceStartup = Time.realtimeSinceStartup; - foreach (KeyValuePair<Vector3Int, NavMeshTile> tile in m_tiles) - { - if (realtimeSinceStartup - tile.Value.m_pokeTime > m_tileTimeout) - { - ClearLinks(tile.Value); - if (tile.Value.m_instance.valid) - { - m_tileRemoveQueue.Enqueue(tile.Value.m_instance); - } - m_tiles.Remove(tile.Key); - break; - } - } - } - - private void PokeArea(Vector3 point, AgentType agentType) - { - Vector3Int tile = GetTile(point, agentType); - PokeTile(tile); - for (int i = -1; i <= 1; i++) - { - for (int j = -1; j <= 1; j++) - { - if (j != 0 || i != 0) - { - Vector3Int tileID = new Vector3Int(tile.x + j, tile.y + i, tile.z); - PokeTile(tileID); - } - } - } - } - - private void PokePoint(Vector3 point, AgentType agentType) - { - Vector3Int tile = GetTile(point, agentType); - PokeTile(tile); - } - - private void PokeTile(Vector3Int tileID) - { - GetNavTile(tileID).m_pokeTime = Time.realtimeSinceStartup; - } - - private void Buildtiles() - { - if (UpdateAsyncBuild()) - { - return; - } - NavMeshTile navMeshTile = null; - float num = 0f; - foreach (NavMeshTile value in m_tiles.Values) - { - float num2 = value.m_pokeTime - value.m_buildTime; - if (num2 > m_updateInterval && (navMeshTile == null || num2 > num)) - { - navMeshTile = value; - num = num2; - } - } - if (navMeshTile != null) - { - BuildTile(navMeshTile); - navMeshTile.m_buildTime = Time.realtimeSinceStartup; - } - } - - private void BuildTile(NavMeshTile tile) - { - _ = DateTime.Now; - List<NavMeshBuildSource> list = new List<NavMeshBuildSource>(); - List<NavMeshBuildMarkup> markups = new List<NavMeshBuildMarkup>(); - AgentType z = (AgentType)tile.m_tile.z; - AgentSettings settings = GetSettings(z); - Bounds includedWorldBounds = new Bounds(tile.m_center, new Vector3(m_tileSize, 6000f, m_tileSize)); - Bounds localBounds = new Bounds(Vector3.zero, new Vector3(m_tileSize, 6000f, m_tileSize)); - int defaultArea = ((!settings.m_canWalk) ? 1 : 0); - NavMeshBuilder.CollectSources(includedWorldBounds, m_layers.value, NavMeshCollectGeometry.PhysicsColliders, defaultArea, markups, list); - if (settings.m_avoidWater) - { - List<NavMeshBuildSource> list2 = new List<NavMeshBuildSource>(); - NavMeshBuilder.CollectSources(includedWorldBounds, m_waterLayers.value, NavMeshCollectGeometry.PhysicsColliders, 1, markups, list2); - foreach (NavMeshBuildSource item in list2) - { - NavMeshBuildSource current = item; - current.transform *= Matrix4x4.Translate(Vector3.down * 0.2f); - list.Add(current); - } - } - else if (settings.m_canSwim) - { - List<NavMeshBuildSource> list3 = new List<NavMeshBuildSource>(); - NavMeshBuilder.CollectSources(includedWorldBounds, m_waterLayers.value, NavMeshCollectGeometry.PhysicsColliders, 3, markups, list3); - if (settings.m_swimDepth != 0f) - { - foreach (NavMeshBuildSource item2 in list3) - { - NavMeshBuildSource current2 = item2; - current2.transform *= Matrix4x4.Translate(Vector3.down * settings.m_swimDepth); - list.Add(current2); - } - } - else - { - list.AddRange(list3); - } - } - if (tile.m_data == null) - { - tile.m_data = new NavMeshData(); - tile.m_data.position = tile.m_center; - } - m_buildOperation = NavMeshBuilder.UpdateNavMeshDataAsync(tile.m_data, settings.m_build, list, localBounds); - m_buildTile = tile; - } - - private bool IsBuilding() - { - if (m_buildOperation != null) - { - return !m_buildOperation.isDone; - } - return false; - } - - private bool UpdateAsyncBuild() - { - if (m_buildOperation == null) - { - return false; - } - if (!m_buildOperation.isDone) - { - return true; - } - if (!m_buildTile.m_instance.valid) - { - m_buildTile.m_instance = NavMesh.AddNavMeshData(m_buildTile.m_data); - } - RebuildLinks(m_buildTile); - m_buildOperation = null; - m_buildTile = null; - return true; - } - - private void ClearLinks(NavMeshTile tile) - { - ClearLinks(tile.m_links1); - ClearLinks(tile.m_links2); - } - - private void ClearLinks(List<KeyValuePair<Vector3, NavMeshLinkInstance>> links) - { - foreach (KeyValuePair<Vector3, NavMeshLinkInstance> link in links) - { - m_linkRemoveQueue.Enqueue(link.Value); - } - links.Clear(); - } - - private void RebuildLinks(NavMeshTile tile) - { - AgentType z = (AgentType)tile.m_tile.z; - AgentSettings settings = GetSettings(z); - float num = m_tileSize / 2f; - ConnectAlongEdge(tile.m_links1, tile.m_center + new Vector3(num, 0f, num), tile.m_center + new Vector3(num, 0f, 0f - num), m_linkWidth, settings); - ConnectAlongEdge(tile.m_links2, tile.m_center + new Vector3(0f - num, 0f, num), tile.m_center + new Vector3(num, 0f, num), m_linkWidth, settings); - } - - private void ConnectAlongEdge(List<KeyValuePair<Vector3, NavMeshLinkInstance>> links, Vector3 p0, Vector3 p1, float step, AgentSettings settings) - { - Vector3 normalized = (p1 - p0).normalized; - Vector3 vector = Vector3.Cross(Vector3.up, normalized); - float num = Vector3.Distance(p0, p1); - bool canSwim = settings.m_canSwim; - tempStitchPoints.Clear(); - for (float num2 = step / 2f; num2 <= num; num2 += step) - { - Vector3 p2 = p0 + normalized * num2; - FindGround(p2, canSwim, tempStitchPoints, settings); - } - if (CompareLinks(tempStitchPoints, links)) - { - return; - } - ClearLinks(links); - foreach (Vector3 tempStitchPoint in tempStitchPoints) - { - NavMeshLinkData link = default(NavMeshLinkData); - link.startPosition = tempStitchPoint - vector * 0.1f; - link.endPosition = tempStitchPoint + vector * 0.1f; - link.width = step; - link.costModifier = m_linkCost; - link.bidirectional = true; - link.agentTypeID = settings.m_build.agentTypeID; - link.area = 2; - NavMeshLinkInstance value = NavMesh.AddLink(link); - if (value.valid) - { - links.Add(new KeyValuePair<Vector3, NavMeshLinkInstance>(tempStitchPoint, value)); - } - } - } - - private bool CompareLinks(List<Vector3> tempStitchPoints, List<KeyValuePair<Vector3, NavMeshLinkInstance>> links) - { - if (tempStitchPoints.Count != links.Count) - { - return false; - } - for (int i = 0; i < tempStitchPoints.Count; i++) - { - if (tempStitchPoints[i] != links[i].Key) - { - return false; - } - } - return true; - } - - private bool SnapToNearestGround(Vector3 p, out Vector3 pos, float range) - { - if (Physics.Raycast(p + Vector3.up, Vector3.down, out var hitInfo, range + 1f, m_layers.value | m_waterLayers.value)) - { - pos = hitInfo.point; - return true; - } - if (Physics.Raycast(p + Vector3.up * range, Vector3.down, out hitInfo, range, m_layers.value | m_waterLayers.value)) - { - pos = hitInfo.point; - return true; - } - pos = p; - return false; - } - - private void FindGround(Vector3 p, bool testWater, List<Vector3> hits, AgentSettings settings) - { - p.y = 6000f; - int layerMask = (testWater ? (m_layers.value | m_waterLayers.value) : m_layers.value); - float agentHeight = settings.m_build.agentHeight; - float y = p.y; - int num = Physics.RaycastNonAlloc(p, Vector3.down, tempHitArray, 10000f, layerMask); - for (int i = 0; i < num; i++) - { - Vector3 point = tempHitArray[i].point; - if (!(Mathf.Abs(point.y - y) < agentHeight)) - { - y = point.y; - if (((1 << tempHitArray[i].collider.gameObject.layer) & (int)m_waterLayers) != 0) - { - point.y -= settings.m_swimDepth; - } - hits.Add(point); - } - } - } - - private NavMeshTile GetNavTile(Vector3 point, AgentType agent) - { - Vector3Int tile = GetTile(point, agent); - return GetNavTile(tile); - } - - private NavMeshTile GetNavTile(Vector3Int tile) - { - if (tile == m_cachedTileID) - { - return m_cachedTile; - } - if (m_tiles.TryGetValue(tile, out var value)) - { - m_cachedTileID = tile; - m_cachedTile = value; - return value; - } - value = new NavMeshTile(); - value.m_tile = tile; - value.m_center = GetTilePos(tile); - m_tiles.Add(tile, value); - m_cachedTileID = tile; - m_cachedTile = value; - return value; - } - - private Vector3Int GetTile(Vector3 point, AgentType agent) - { - int x = Mathf.FloorToInt((point.x + m_tileSize / 2f) / m_tileSize); - int y = Mathf.FloorToInt((point.z + m_tileSize / 2f) / m_tileSize); - return new Vector3Int(x, y, (int)agent); - } - - public Vector3 GetTilePos(Vector3Int id) - { - return new Vector3((float)id.x * m_tileSize, 2500f, (float)id.y * m_tileSize); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Pickable.cs b/Valheim_v202102/Valheim/assembly_valheim/Pickable.cs deleted file mode 100644 index 23d83db..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Pickable.cs +++ /dev/null @@ -1,146 +0,0 @@ -using System; -using UnityEngine; - -public class Pickable : MonoBehaviour, Hoverable, Interactable -{ - public GameObject m_hideWhenPicked; - - public GameObject m_itemPrefab; - - public int m_amount = 1; - - public DropTable m_extraDrops = new DropTable(); - - public string m_overrideName = ""; - - public int m_respawnTimeMinutes; - - public float m_spawnOffset = 0.5f; - - public EffectList m_pickEffector = new EffectList(); - - public bool m_pickEffectAtSpawnPoint; - - public bool m_useInteractAnimation; - - private ZNetView m_nview; - - private bool m_picked; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - ZDO zDO = m_nview.GetZDO(); - if (zDO != null) - { - m_nview.Register<bool>("SetPicked", RPC_SetPicked); - m_picked = zDO.GetBool("picked"); - SetPicked(m_picked); - if (m_respawnTimeMinutes > 0) - { - InvokeRepeating("UpdateRespawn", UnityEngine.Random.Range(1f, 5f), 60f); - } - } - } - - public string GetHoverText() - { - if (m_picked) - { - return ""; - } - return Localization.instance.Localize(GetHoverName() + "\n[<color=yellow><b>$KEY_Use</b></color>] $inventory_pickup"); - } - - public string GetHoverName() - { - if (!string.IsNullOrEmpty(m_overrideName)) - { - return m_overrideName; - } - return m_itemPrefab.GetComponent<ItemDrop>().m_itemData.m_shared.m_name; - } - - private void UpdateRespawn() - { - if (m_nview.IsValid() && m_nview.IsOwner() && m_picked) - { - long @long = m_nview.GetZDO().GetLong("picked_time", 0L); - DateTime dateTime = new DateTime(@long); - if ((ZNet.instance.GetTime() - dateTime).TotalMinutes > (double)m_respawnTimeMinutes) - { - m_nview.InvokeRPC(ZNetView.Everybody, "SetPicked", false); - } - } - } - - private void RPC_SetPicked(long sender, bool picked) - { - SetPicked(picked); - } - - private void SetPicked(bool picked) - { - m_picked = picked; - if ((bool)m_hideWhenPicked) - { - m_hideWhenPicked.SetActive(!picked); - } - if (!m_nview.IsOwner()) - { - return; - } - if (m_respawnTimeMinutes > 0 || m_hideWhenPicked != null) - { - m_nview.GetZDO().Set("picked", m_picked); - if (picked && m_respawnTimeMinutes > 0) - { - DateTime time = ZNet.instance.GetTime(); - m_nview.GetZDO().Set("picked_time", time.Ticks); - } - } - else if (picked) - { - m_nview.Destroy(); - } - } - - public bool Interact(Humanoid character, bool repeat) - { - if (m_picked) - { - return false; - } - Vector3 pos = (m_pickEffectAtSpawnPoint ? (base.transform.position + Vector3.up * m_spawnOffset) : base.transform.position); - m_pickEffector.Create(pos, Quaternion.identity); - int num = 0; - for (int i = 0; i < m_amount; i++) - { - Drop(m_itemPrefab, num++, 1); - } - if (!m_extraDrops.IsEmpty()) - { - foreach (ItemDrop.ItemData dropListItem in m_extraDrops.GetDropListItems()) - { - Drop(dropListItem.m_dropPrefab, num++, dropListItem.m_stack); - } - } - m_nview.InvokeRPC(ZNetView.Everybody, "SetPicked", true); - return m_useInteractAnimation; - } - - private void Drop(GameObject prefab, int offset, int stack) - { - Vector2 vector = UnityEngine.Random.insideUnitCircle * 0.2f; - Vector3 position = base.transform.position + Vector3.up * m_spawnOffset + new Vector3(vector.x, 0.5f * (float)offset, vector.y); - Quaternion rotation = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f); - GameObject obj = UnityEngine.Object.Instantiate(prefab, position, rotation); - obj.GetComponent<ItemDrop>().m_itemData.m_stack = stack; - obj.GetComponent<Rigidbody>().velocity = Vector3.up * 4f; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/PickableItem.cs b/Valheim_v202102/Valheim/assembly_valheim/PickableItem.cs deleted file mode 100644 index 10d4fdd..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/PickableItem.cs +++ /dev/null @@ -1,194 +0,0 @@ -using System; -using UnityEngine; - -public class PickableItem : MonoBehaviour, Hoverable, Interactable -{ - [Serializable] - public struct RandomItem - { - public ItemDrop m_itemPrefab; - - public int m_stackMin; - - public int m_stackMax; - } - - public ItemDrop m_itemPrefab; - - public int m_stack; - - public RandomItem[] m_randomItemPrefabs = new RandomItem[0]; - - public EffectList m_pickEffector = new EffectList(); - - private ZNetView m_nview; - - private GameObject m_instance; - - private bool m_picked; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_nview.GetZDO() != null) - { - SetupRandomPrefab(); - m_nview.Register("Pick", RPC_Pick); - SetupItem(enabled: true); - } - } - - private void SetupRandomPrefab() - { - if (!(m_itemPrefab == null) || m_randomItemPrefabs.Length == 0) - { - return; - } - int @int = m_nview.GetZDO().GetInt("itemPrefab"); - if (@int == 0) - { - if (m_nview.IsOwner()) - { - RandomItem randomItem = m_randomItemPrefabs[UnityEngine.Random.Range(0, m_randomItemPrefabs.Length)]; - m_itemPrefab = randomItem.m_itemPrefab; - m_stack = UnityEngine.Random.Range(randomItem.m_stackMin, randomItem.m_stackMax + 1); - int prefabHash = ObjectDB.instance.GetPrefabHash(m_itemPrefab.gameObject); - m_nview.GetZDO().Set("itemPrefab", prefabHash); - m_nview.GetZDO().Set("itemStack", m_stack); - } - return; - } - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(@int); - if (itemPrefab == null) - { - ZLog.LogError("Failed to find saved prefab " + @int + " in PickableItem " + base.gameObject.name); - } - else - { - m_itemPrefab = itemPrefab.GetComponent<ItemDrop>(); - m_stack = m_nview.GetZDO().GetInt("itemStack"); - } - } - - public string GetHoverText() - { - if (m_picked) - { - return ""; - } - return Localization.instance.Localize(GetHoverName() + "\n[<color=yellow><b>$KEY_Use</b></color>] $inventory_pickup"); - } - - public string GetHoverName() - { - if ((bool)m_itemPrefab) - { - int stackSize = GetStackSize(); - if (stackSize > 1) - { - return m_itemPrefab.m_itemData.m_shared.m_name + " x " + stackSize; - } - return m_itemPrefab.m_itemData.m_shared.m_name; - } - return "None"; - } - - public bool Interact(Humanoid character, bool repeat) - { - if (!m_nview.IsValid()) - { - return false; - } - m_nview.InvokeRPC("Pick"); - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private void RPC_Pick(long sender) - { - if (m_nview.IsOwner() && !m_picked) - { - m_picked = true; - m_pickEffector.Create(base.transform.position, Quaternion.identity); - Drop(); - m_nview.Destroy(); - } - } - - private void Drop() - { - Vector3 position = base.transform.position + Vector3.up * 0.2f; - GameObject obj = UnityEngine.Object.Instantiate(m_itemPrefab.gameObject, position, base.transform.rotation); - obj.GetComponent<ItemDrop>().m_itemData.m_stack = GetStackSize(); - obj.GetComponent<Rigidbody>().velocity = Vector3.up * 4f; - } - - private int GetStackSize() - { - return Mathf.Clamp((m_stack > 0) ? m_stack : m_itemPrefab.m_itemData.m_stack, 1, m_itemPrefab.m_itemData.m_shared.m_maxStackSize); - } - - private GameObject GetAttachPrefab() - { - Transform transform = m_itemPrefab.transform.Find("attach"); - if ((bool)transform) - { - return transform.gameObject; - } - return null; - } - - private void SetupItem(bool enabled) - { - if (!enabled) - { - if ((bool)m_instance) - { - UnityEngine.Object.Destroy(m_instance); - m_instance = null; - } - } - else if (!m_instance && !(m_itemPrefab == null)) - { - GameObject attachPrefab = GetAttachPrefab(); - if (attachPrefab == null) - { - ZLog.LogWarning("Failed to get attach prefab for item " + m_itemPrefab.name); - return; - } - m_instance = UnityEngine.Object.Instantiate(attachPrefab, base.transform.position, base.transform.rotation, base.transform); - m_instance.transform.localPosition = attachPrefab.transform.localPosition; - m_instance.transform.localRotation = attachPrefab.transform.localRotation; - } - } - - private bool DrawPrefabMesh(ItemDrop prefab) - { - if (prefab == null) - { - return false; - } - bool result = false; - Gizmos.color = Color.yellow; - MeshFilter[] componentsInChildren = prefab.gameObject.GetComponentsInChildren<MeshFilter>(); - foreach (MeshFilter meshFilter in componentsInChildren) - { - if ((bool)meshFilter && (bool)meshFilter.sharedMesh) - { - Vector3 position = prefab.transform.position; - Quaternion quaternion = Quaternion.Inverse(prefab.transform.rotation); - Vector3 vector = meshFilter.transform.position - position; - Vector3 position2 = base.transform.position + base.transform.rotation * vector; - Quaternion quaternion2 = quaternion * meshFilter.transform.rotation; - Quaternion rotation = base.transform.rotation * quaternion2; - Gizmos.DrawMesh(meshFilter.sharedMesh, position2, rotation, meshFilter.transform.lossyScale); - result = true; - } - } - return result; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Piece.cs b/Valheim_v202102/Valheim/assembly_valheim/Piece.cs deleted file mode 100644 index 1ba0993..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Piece.cs +++ /dev/null @@ -1,332 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Piece : StaticTarget -{ - public enum PieceCategory - { - Misc = 0, - Crafting = 1, - Building = 2, - Furniture = 3, - Max = 4, - All = 100 - } - - public enum ComfortGroup - { - None, - Fire, - Bed, - Banner, - Chair - } - - [Serializable] - public class Requirement - { - [Header("Resource")] - public ItemDrop m_resItem; - - public int m_amount = 1; - - [Header("Item")] - public int m_amountPerLevel = 1; - - [Header("Piece")] - public bool m_recover = true; - - public int GetAmount(int qualityLevel) - { - if (qualityLevel <= 1) - { - return m_amount; - } - return (qualityLevel - 1) * m_amountPerLevel; - } - } - - private static int pieceRayMask = 0; - - private static Collider[] pieceColliders = new Collider[2000]; - - [Header("Basic stuffs")] - public Sprite m_icon; - - public string m_name = ""; - - public string m_description = ""; - - public bool m_enabled = true; - - public PieceCategory m_category; - - public bool m_isUpgrade; - - [Header("Comfort")] - public int m_comfort; - - public ComfortGroup m_comfortGroup; - - [Header("Placement rules")] - public bool m_groundPiece; - - public bool m_allowAltGroundPlacement; - - public bool m_groundOnly; - - public bool m_cultivatedGroundOnly; - - public bool m_waterPiece; - - public bool m_clipGround; - - public bool m_clipEverything; - - public bool m_noInWater; - - public bool m_notOnWood; - - public bool m_notOnTiltingSurface; - - public bool m_inCeilingOnly; - - public bool m_notOnFloor; - - public bool m_noClipping; - - public bool m_onlyInTeleportArea; - - public bool m_allowedInDungeons; - - public float m_spaceRequirement; - - public bool m_repairPiece; - - public bool m_canBeRemoved = true; - - [BitMask(typeof(Heightmap.Biome))] - public Heightmap.Biome m_onlyInBiome; - - [Header("Effects")] - public EffectList m_placeEffect = new EffectList(); - - [Header("Requirements")] - public string m_dlc = ""; - - public CraftingStation m_craftingStation; - - public Requirement[] m_resources = new Requirement[0]; - - public GameObject m_destroyedLootPrefab; - - private ZNetView m_nview; - - private List<KeyValuePair<Renderer, Material[]>> m_invalidPlacementMaterials; - - private long m_creator; - - private int m_myListIndex = -1; - - private static List<Piece> m_allPieces = new List<Piece>(); - - private static int m_creatorHash = 0; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_allPieces.Add(this); - m_myListIndex = m_allPieces.Count - 1; - if ((bool)m_nview && m_nview.IsValid()) - { - if (m_creatorHash == 0) - { - m_creatorHash = "creator".GetStableHashCode(); - } - m_creator = m_nview.GetZDO().GetLong(m_creatorHash, 0L); - } - } - - private void OnDestroy() - { - if (m_myListIndex >= 0) - { - m_allPieces[m_myListIndex] = m_allPieces[m_allPieces.Count - 1]; - m_allPieces[m_myListIndex].m_myListIndex = m_myListIndex; - m_allPieces.RemoveAt(m_allPieces.Count - 1); - m_myListIndex = -1; - } - } - - public bool CanBeRemoved() - { - Container componentInChildren = GetComponentInChildren<Container>(); - if (componentInChildren != null) - { - return componentInChildren.CanBeRemoved(); - } - Ship componentInChildren2 = GetComponentInChildren<Ship>(); - if (componentInChildren2 != null) - { - return componentInChildren2.CanBeRemoved(); - } - return true; - } - - public void DropResources() - { - Container container = null; - Requirement[] resources = m_resources; - foreach (Requirement requirement in resources) - { - if (requirement.m_resItem == null || !requirement.m_recover) - { - continue; - } - GameObject gameObject = requirement.m_resItem.gameObject; - int num = requirement.m_amount; - if (!IsPlacedByPlayer()) - { - num = Mathf.Max(1, num / 3); - } - if ((bool)m_destroyedLootPrefab) - { - while (num > 0) - { - ItemDrop.ItemData itemData = gameObject.GetComponent<ItemDrop>().m_itemData.Clone(); - itemData.m_dropPrefab = gameObject; - itemData.m_stack = Mathf.Min(num, itemData.m_shared.m_maxStackSize); - num -= itemData.m_stack; - if (container == null || !container.GetInventory().HaveEmptySlot()) - { - container = UnityEngine.Object.Instantiate(m_destroyedLootPrefab, base.transform.position + Vector3.up, Quaternion.identity).GetComponent<Container>(); - } - container.GetInventory().AddItem(itemData); - } - } - else - { - while (num > 0) - { - ItemDrop component = UnityEngine.Object.Instantiate(gameObject, base.transform.position + Vector3.up, Quaternion.identity).GetComponent<ItemDrop>(); - component.m_itemData.m_stack = Mathf.Min(num, component.m_itemData.m_shared.m_maxStackSize); - num -= component.m_itemData.m_stack; - } - } - } - } - - public override bool IsValidMonsterTarget() - { - return IsPlacedByPlayer(); - } - - public void SetCreator(long uid) - { - if (m_nview.IsOwner() && GetCreator() == 0L) - { - m_creator = uid; - m_nview.GetZDO().Set(m_creatorHash, uid); - } - } - - public long GetCreator() - { - return m_creator; - } - - public bool IsCreator() - { - long creator = GetCreator(); - long playerID = Game.instance.GetPlayerProfile().GetPlayerID(); - return creator == playerID; - } - - public bool IsPlacedByPlayer() - { - return GetCreator() != 0; - } - - public void SetInvalidPlacementHeightlight(bool enabled) - { - if ((enabled && m_invalidPlacementMaterials != null) || (!enabled && m_invalidPlacementMaterials == null)) - { - return; - } - Renderer[] componentsInChildren = GetComponentsInChildren<Renderer>(); - if (enabled) - { - m_invalidPlacementMaterials = new List<KeyValuePair<Renderer, Material[]>>(); - Renderer[] array = componentsInChildren; - foreach (Renderer renderer in array) - { - Material[] sharedMaterials = renderer.sharedMaterials; - m_invalidPlacementMaterials.Add(new KeyValuePair<Renderer, Material[]>(renderer, sharedMaterials)); - } - array = componentsInChildren; - for (int i = 0; i < array.Length; i++) - { - Material[] materials = array[i].materials; - foreach (Material material in materials) - { - if (material.HasProperty("_EmissionColor")) - { - material.SetColor("_EmissionColor", Color.red * 0.7f); - } - material.color = Color.red; - } - } - return; - } - foreach (KeyValuePair<Renderer, Material[]> invalidPlacementMaterial in m_invalidPlacementMaterials) - { - if ((bool)invalidPlacementMaterial.Key) - { - invalidPlacementMaterial.Key.materials = invalidPlacementMaterial.Value; - } - } - m_invalidPlacementMaterials = null; - } - - public static void GetSnapPoints(Vector3 point, float radius, List<Transform> points, List<Piece> pieces) - { - if (pieceRayMask == 0) - { - pieceRayMask = LayerMask.GetMask("piece", "piece_nonsolid"); - } - int num = Physics.OverlapSphereNonAlloc(point, radius, pieceColliders, pieceRayMask); - for (int i = 0; i < num; i++) - { - Piece componentInParent = pieceColliders[i].GetComponentInParent<Piece>(); - if (componentInParent != null) - { - componentInParent.GetSnapPoints(points); - pieces.Add(componentInParent); - } - } - } - - public static void GetAllPiecesInRadius(Vector3 p, float radius, List<Piece> pieces) - { - foreach (Piece allPiece in m_allPieces) - { - if (Vector3.Distance(p, allPiece.transform.position) < radius) - { - pieces.Add(allPiece); - } - } - } - - public void GetSnapPoints(List<Transform> points) - { - for (int i = 0; i < base.transform.childCount; i++) - { - Transform child = base.transform.GetChild(i); - if (child.CompareTag("snappoint")) - { - points.Add(child); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/PieceTable.cs b/Valheim_v202102/Valheim/assembly_valheim/PieceTable.cs deleted file mode 100644 index 17944e2..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/PieceTable.cs +++ /dev/null @@ -1,224 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class PieceTable : MonoBehaviour -{ - public const int m_gridWidth = 10; - - public const int m_gridHeight = 5; - - public List<GameObject> m_pieces = new List<GameObject>(); - - public bool m_useCategories = true; - - public bool m_canRemovePieces = true; - - [NonSerialized] - private List<List<Piece>> m_availablePieces = new List<List<Piece>>(); - - [NonSerialized] - public Piece.PieceCategory m_selectedCategory; - - [NonSerialized] - public Vector2Int[] m_selectedPiece = new Vector2Int[5]; - - public void UpdateAvailable(HashSet<string> knownRecipies, Player player, bool hideUnavailable, bool noPlacementCost) - { - if (m_availablePieces.Count == 0) - { - for (int i = 0; i < 4; i++) - { - m_availablePieces.Add(new List<Piece>()); - } - } - foreach (List<Piece> availablePiece in m_availablePieces) - { - availablePiece.Clear(); - } - foreach (GameObject piece in m_pieces) - { - Piece component = piece.GetComponent<Piece>(); - if (!noPlacementCost && (!knownRecipies.Contains(component.m_name) || !component.m_enabled || (hideUnavailable && !player.HaveRequirements(component, Player.RequirementMode.CanAlmostBuild)))) - { - continue; - } - if (component.m_category == Piece.PieceCategory.All) - { - for (int j = 0; j < 4; j++) - { - m_availablePieces[j].Add(component); - } - } - else - { - m_availablePieces[(int)component.m_category].Add(component); - } - } - } - - public GameObject GetSelectedPrefab() - { - Piece selectedPiece = GetSelectedPiece(); - if ((bool)selectedPiece) - { - return selectedPiece.gameObject; - } - return null; - } - - public Piece GetPiece(int category, Vector2Int p) - { - if (m_availablePieces[category].Count == 0) - { - return null; - } - int num = p.y * 10 + p.x; - if (num < 0 || num >= m_availablePieces[category].Count) - { - return null; - } - return m_availablePieces[category][num]; - } - - public Piece GetPiece(Vector2Int p) - { - return GetPiece((int)m_selectedCategory, p); - } - - public bool IsPieceAvailable(Piece piece) - { - foreach (Piece item in m_availablePieces[(int)m_selectedCategory]) - { - if (item == piece) - { - return true; - } - } - return false; - } - - public Piece GetSelectedPiece() - { - Vector2Int selectedIndex = GetSelectedIndex(); - return GetPiece((int)m_selectedCategory, selectedIndex); - } - - public int GetAvailablePiecesInCategory(Piece.PieceCategory cat) - { - return m_availablePieces[(int)cat].Count; - } - - public List<Piece> GetPiecesInSelectedCategory() - { - return m_availablePieces[(int)m_selectedCategory]; - } - - public int GetAvailablePiecesInSelectedCategory() - { - return GetAvailablePiecesInCategory(m_selectedCategory); - } - - public Vector2Int GetSelectedIndex() - { - return m_selectedPiece[(int)m_selectedCategory]; - } - - public void SetSelected(Vector2Int p) - { - m_selectedPiece[(int)m_selectedCategory] = p; - } - - public void LeftPiece() - { - if (m_availablePieces[(int)m_selectedCategory].Count > 1) - { - Vector2Int vector2Int = m_selectedPiece[(int)m_selectedCategory]; - int x = vector2Int.x - 1; - vector2Int.x = x; - if (vector2Int.x < 0) - { - vector2Int.x = 9; - } - m_selectedPiece[(int)m_selectedCategory] = vector2Int; - } - } - - public void RightPiece() - { - if (m_availablePieces[(int)m_selectedCategory].Count > 1) - { - Vector2Int vector2Int = m_selectedPiece[(int)m_selectedCategory]; - int x = vector2Int.x + 1; - vector2Int.x = x; - if (vector2Int.x >= 10) - { - vector2Int.x = 0; - } - m_selectedPiece[(int)m_selectedCategory] = vector2Int; - } - } - - public void DownPiece() - { - if (m_availablePieces[(int)m_selectedCategory].Count > 1) - { - Vector2Int vector2Int = m_selectedPiece[(int)m_selectedCategory]; - int y = vector2Int.y + 1; - vector2Int.y = y; - if (vector2Int.y >= 5) - { - vector2Int.y = 0; - } - m_selectedPiece[(int)m_selectedCategory] = vector2Int; - } - } - - public void UpPiece() - { - if (m_availablePieces[(int)m_selectedCategory].Count > 1) - { - Vector2Int vector2Int = m_selectedPiece[(int)m_selectedCategory]; - int y = vector2Int.y - 1; - vector2Int.y = y; - if (vector2Int.y < 0) - { - vector2Int.y = 4; - } - m_selectedPiece[(int)m_selectedCategory] = vector2Int; - } - } - - public void NextCategory() - { - if (m_useCategories) - { - m_selectedCategory++; - if (m_selectedCategory == Piece.PieceCategory.Max) - { - m_selectedCategory = Piece.PieceCategory.Misc; - } - } - } - - public void PrevCategory() - { - if (m_useCategories) - { - m_selectedCategory--; - if (m_selectedCategory < Piece.PieceCategory.Misc) - { - m_selectedCategory = Piece.PieceCategory.Furniture; - } - } - } - - public void SetCategory(int index) - { - if (m_useCategories) - { - m_selectedCategory = (Piece.PieceCategory)index; - m_selectedCategory = (Piece.PieceCategory)Mathf.Clamp((int)m_selectedCategory, 0, 3); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Plant.cs b/Valheim_v202102/Valheim/assembly_valheim/Plant.cs deleted file mode 100644 index bc11954..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Plant.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System; -using UnityEngine; - -public class Plant : SlowUpdate, Hoverable -{ - private enum Status - { - Healthy, - NoSun, - NoSpace, - WrongBiome, - NotCultivated - } - - public string m_name = "Plant"; - - public float m_growTime = 10f; - - public float m_growTimeMax = 2000f; - - public GameObject[] m_grownPrefabs = new GameObject[0]; - - public float m_minScale = 1f; - - public float m_maxScale = 1f; - - public float m_growRadius = 1f; - - public bool m_needCultivatedGround; - - public bool m_destroyIfCantGrow; - - [SerializeField] - private GameObject m_healthy; - - [SerializeField] - private GameObject m_unhealthy; - - [SerializeField] - private GameObject m_healthyGrown; - - [SerializeField] - private GameObject m_unhealthyGrown; - - [BitMask(typeof(Heightmap.Biome))] - public Heightmap.Biome m_biome; - - public EffectList m_growEffect = new EffectList(); - - private Status m_status; - - private ZNetView m_nview; - - private float m_updateTime; - - private float m_spawnTime; - - private static int m_spaceMask; - - private static int m_roofMask; - - public override void Awake() - { - base.Awake(); - m_nview = base.gameObject.GetComponent<ZNetView>(); - if (m_nview.GetZDO() != null) - { - if (m_nview.IsOwner() && m_nview.GetZDO().GetLong("plantTime", 0L) == 0L) - { - m_nview.GetZDO().Set("plantTime", ZNet.instance.GetTime().Ticks); - } - m_spawnTime = Time.time; - } - } - - public string GetHoverText() - { - return m_status switch - { - Status.Healthy => Localization.instance.Localize(m_name + " ( $piece_plant_healthy )"), - Status.NoSpace => Localization.instance.Localize(m_name + " ( $piece_plant_nospace )"), - Status.NoSun => Localization.instance.Localize(m_name + " ( $piece_plant_nosun )"), - Status.WrongBiome => Localization.instance.Localize(m_name + " ( $piece_plant_wrongbiome )"), - Status.NotCultivated => Localization.instance.Localize(m_name + " ( $piece_plant_notcultivated )"), - _ => "", - }; - } - - public string GetHoverName() - { - return Localization.instance.Localize(m_name); - } - - private double TimeSincePlanted() - { - DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("plantTime", ZNet.instance.GetTime().Ticks)); - return (ZNet.instance.GetTime() - dateTime).TotalSeconds; - } - - public override void SUpdate() - { - if (m_nview.IsValid() && !(Time.time - m_updateTime < 10f)) - { - m_updateTime = Time.time; - double num = TimeSincePlanted(); - UpdateHealth(num); - float growTime = GetGrowTime(); - if ((bool)m_healthyGrown) - { - bool flag = num > (double)(growTime * 0.5f); - m_healthy.SetActive(!flag && m_status == Status.Healthy); - m_unhealthy.SetActive(!flag && m_status != Status.Healthy); - m_healthyGrown.SetActive(flag && m_status == Status.Healthy); - m_unhealthyGrown.SetActive(flag && m_status != Status.Healthy); - } - else - { - m_healthy.SetActive(m_status == Status.Healthy); - m_unhealthy.SetActive(m_status != Status.Healthy); - } - if (m_nview.IsOwner() && Time.time - m_spawnTime > 10f && num > (double)growTime) - { - Grow(); - } - } - } - - private float GetGrowTime() - { - UnityEngine.Random.State state = UnityEngine.Random.state; - UnityEngine.Random.InitState((int)(m_nview.GetZDO().m_uid.id + m_nview.GetZDO().m_uid.userID)); - float value = UnityEngine.Random.value; - UnityEngine.Random.state = state; - return Mathf.Lerp(m_growTime, m_growTimeMax, value); - } - - private void Grow() - { - if (m_status != 0) - { - if (m_destroyIfCantGrow) - { - Destroy(); - } - return; - } - GameObject original = m_grownPrefabs[UnityEngine.Random.Range(0, m_grownPrefabs.Length)]; - Quaternion quaternion = Quaternion.Euler(0f, UnityEngine.Random.Range(0f, 360f), 0f); - GameObject obj = UnityEngine.Object.Instantiate(original, base.transform.position, quaternion); - ZNetView component = obj.GetComponent<ZNetView>(); - float num = UnityEngine.Random.Range(m_minScale, m_maxScale); - component.SetLocalScale(new Vector3(num, num, num)); - TreeBase component2 = obj.GetComponent<TreeBase>(); - if ((bool)component2) - { - component2.Grow(); - } - m_nview.Destroy(); - m_growEffect.Create(base.transform.position, quaternion, null, num); - } - - private void UpdateHealth(double timeSincePlanted) - { - if (timeSincePlanted < 10.0) - { - m_status = Status.Healthy; - return; - } - Heightmap heightmap = Heightmap.FindHeightmap(base.transform.position); - if ((bool)heightmap) - { - if ((heightmap.GetBiome(base.transform.position) & m_biome) == 0) - { - m_status = Status.WrongBiome; - return; - } - if (m_needCultivatedGround && !heightmap.IsCultivated(base.transform.position)) - { - m_status = Status.NotCultivated; - return; - } - } - if (HaveRoof()) - { - m_status = Status.NoSun; - } - else if (!HaveGrowSpace()) - { - m_status = Status.NoSpace; - } - else - { - m_status = Status.Healthy; - } - } - - private void Destroy() - { - IDestructible component = GetComponent<IDestructible>(); - if (component != null) - { - HitData hitData = new HitData(); - hitData.m_damage.m_damage = 9999f; - component.Damage(hitData); - } - } - - private bool HaveRoof() - { - if (m_roofMask == 0) - { - m_roofMask = LayerMask.GetMask("Default", "static_solid", "piece"); - } - if (Physics.Raycast(base.transform.position, Vector3.up, 100f, m_roofMask)) - { - return true; - } - return false; - } - - private bool HaveGrowSpace() - { - if (m_spaceMask == 0) - { - m_spaceMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "piece_nonsolid"); - } - Collider[] array = Physics.OverlapSphere(base.transform.position, m_growRadius, m_spaceMask); - for (int i = 0; i < array.Length; i++) - { - Plant component = array[i].GetComponent<Plant>(); - if (!component || (!(component == this) && component.GetStatus() == Status.Healthy)) - { - return false; - } - } - return true; - } - - private Status GetStatus() - { - return m_status; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Player.cs b/Valheim_v202102/Valheim/assembly_valheim/Player.cs deleted file mode 100644 index da847cc..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Player.cs +++ /dev/null @@ -1,4732 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; -using UnityEngine.Rendering; - -public class Player : Humanoid -{ - public enum RequirementMode - { - CanBuild, - IsKnown, - CanAlmostBuild - } - - public class Food - { - public string m_name = ""; - - public ItemDrop.ItemData m_item; - - public float m_health; - - public float m_stamina; - - public bool CanEatAgain() - { - return m_health < m_item.m_shared.m_food / 2f; - } - } - - public class EquipQueueData - { - public ItemDrop.ItemData m_item; - - public bool m_equip = true; - - public float m_time; - - public float m_duration; - } - - private enum PlacementStatus - { - Valid, - Invalid, - BlockedbyPlayer, - NoBuildZone, - PrivateZone, - MoreSpace, - NoTeleportArea, - ExtensionMissingStation, - WrongBiome, - NeedCultivated, - NotInDungeon - } - - private float m_rotatePieceTimer; - - private float m_baseValueUpdatetimer; - - private const int dataVersion = 24; - - private float m_equipQueuePause; - - public static Player m_localPlayer = null; - - private static List<Player> m_players = new List<Player>(); - - public static bool m_debugMode = false; - - [Header("Player")] - public float m_maxPlaceDistance = 5f; - - public float m_maxInteractDistance = 5f; - - public float m_scrollSens = 4f; - - public float m_staminaRegen = 5f; - - public float m_staminaRegenTimeMultiplier = 1f; - - public float m_staminaRegenDelay = 1f; - - public float m_runStaminaDrain = 10f; - - public float m_sneakStaminaDrain = 5f; - - public float m_swimStaminaDrainMinSkill = 5f; - - public float m_swimStaminaDrainMaxSkill = 2f; - - public float m_dodgeStaminaUsage = 10f; - - public float m_weightStaminaFactor = 0.1f; - - public float m_autoPickupRange = 2f; - - public float m_maxCarryWeight = 300f; - - public float m_encumberedStaminaDrain = 10f; - - public float m_hardDeathCooldown = 10f; - - public float m_baseCameraShake = 4f; - - public EffectList m_spawnEffects = new EffectList(); - - public EffectList m_removeEffects = new EffectList(); - - public EffectList m_dodgeEffects = new EffectList(); - - public EffectList m_autopickupEffects = new EffectList(); - - public EffectList m_skillLevelupEffects = new EffectList(); - - public EffectList m_equipStartEffects = new EffectList(); - - public GameObject m_placeMarker; - - public GameObject m_tombstone; - - public GameObject m_valkyrie; - - public Sprite m_textIcon; - - private Skills m_skills; - - private PieceTable m_buildPieces; - - private bool m_noPlacementCost; - - private bool m_hideUnavailable; - - private HashSet<string> m_knownRecipes = new HashSet<string>(); - - private Dictionary<string, int> m_knownStations = new Dictionary<string, int>(); - - private HashSet<string> m_knownMaterial = new HashSet<string>(); - - private HashSet<string> m_shownTutorials = new HashSet<string>(); - - private HashSet<string> m_uniques = new HashSet<string>(); - - private HashSet<string> m_trophies = new HashSet<string>(); - - private HashSet<Heightmap.Biome> m_knownBiome = new HashSet<Heightmap.Biome>(); - - private Dictionary<string, string> m_knownTexts = new Dictionary<string, string>(); - - private float m_stationDiscoverTimer; - - private bool m_debugFly; - - private bool m_godMode; - - private bool m_ghostMode; - - private float m_lookPitch; - - private const float m_baseHP = 25f; - - private const float m_baseStamina = 75f; - - private const int m_maxFoods = 3; - - private const float m_foodDrainPerSec = 0.1f; - - private float m_foodUpdateTimer; - - private float m_foodRegenTimer; - - private List<Food> m_foods = new List<Food>(); - - private float m_stamina = 100f; - - private float m_maxStamina = 100f; - - private float m_staminaRegenTimer; - - private string m_guardianPower = ""; - - private float m_guardianPowerCooldown; - - private StatusEffect m_guardianSE; - - private GameObject m_placementMarkerInstance; - - private GameObject m_placementGhost; - - private PlacementStatus m_placementStatus = PlacementStatus.Invalid; - - private int m_placeRotation; - - private int m_placeRayMask; - - private int m_placeGroundRayMask; - - private int m_placeWaterRayMask; - - private int m_removeRayMask; - - private int m_interactMask; - - private int m_autoPickupMask; - - private List<EquipQueueData> m_equipQueue = new List<EquipQueueData>(); - - private GameObject m_hovering; - - private Character m_hoveringCreature; - - private float m_lastHoverInteractTime; - - private bool m_pvp; - - private float m_updateCoverTimer; - - private float m_coverPercentage; - - private bool m_underRoof = true; - - private float m_nearFireTimer; - - private bool m_isLoading; - - private float m_queuedAttackTimer; - - private float m_queuedSecondAttackTimer; - - private float m_queuedDodgeTimer; - - private Vector3 m_queuedDodgeDir = Vector3.zero; - - private bool m_inDodge; - - private bool m_dodgeInvincible; - - private CraftingStation m_currentStation; - - private Ragdoll m_ragdoll; - - private Piece m_hoveringPiece; - - private string m_emoteState = ""; - - private int m_emoteID; - - private bool m_intro; - - private bool m_firstSpawn = true; - - private bool m_crouchToggled; - - private bool m_autoRun; - - private bool m_safeInHome; - - private ShipControlls m_shipControl; - - private bool m_attached; - - private string m_attachAnimation = ""; - - private bool m_sleeping; - - private Transform m_attachPoint; - - private Vector3 m_detachOffset = Vector3.zero; - - private int m_modelIndex; - - private Vector3 m_skinColor = Vector3.one; - - private Vector3 m_hairColor = Vector3.one; - - private bool m_teleporting; - - private bool m_distantTeleport; - - private float m_teleportTimer; - - private float m_teleportCooldown; - - private Vector3 m_teleportFromPos; - - private Quaternion m_teleportFromRot; - - private Vector3 m_teleportTargetPos; - - private Quaternion m_teleportTargetRot; - - private Heightmap.Biome m_currentBiome; - - private float m_biomeTimer; - - private int m_baseValue; - - private int m_comfortLevel; - - private float m_drownDamageTimer; - - private float m_timeSinceTargeted; - - private float m_timeSinceSensed; - - private float m_stealthFactorUpdateTimer; - - private float m_stealthFactor; - - private float m_stealthFactorTarget; - - private Vector3 m_lastStealthPosition = Vector3.zero; - - private float m_wakeupTimer = -1f; - - private float m_timeSinceDeath = 999999f; - - private float m_runSkillImproveTimer; - - private float m_swimSkillImproveTimer; - - private float m_sneakSkillImproveTimer; - - private float m_equipmentMovementModifier; - - private static int crouching = 0; - - protected static int m_attackMask = 0; - - protected static int m_animatorTagDodge = Animator.StringToHash("dodge"); - - protected static int m_animatorTagCutscene = Animator.StringToHash("cutscene"); - - protected static int m_animatorTagCrouch = Animator.StringToHash("crouch"); - - protected static int m_animatorTagMinorAction = Animator.StringToHash("minoraction"); - - protected static int m_animatorTagEmote = Animator.StringToHash("emote"); - - private List<PieceTable> m_tempOwnedPieceTables = new List<PieceTable>(); - - private List<Transform> m_tempSnapPoints1 = new List<Transform>(); - - private List<Transform> m_tempSnapPoints2 = new List<Transform>(); - - private List<Piece> m_tempPieces = new List<Piece>(); - - protected override void Awake() - { - base.Awake(); - m_players.Add(this); - m_skills = GetComponent<Skills>(); - SetupAwake(); - if (m_nview.GetZDO() == null) - { - return; - } - m_placeRayMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "piece_nonsolid", "terrain", "vehicle"); - m_placeWaterRayMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "piece_nonsolid", "terrain", "Water", "vehicle"); - m_removeRayMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "piece_nonsolid", "terrain", "vehicle"); - m_interactMask = LayerMask.GetMask("item", "piece", "piece_nonsolid", "Default", "static_solid", "Default_small", "character", "character_net", "terrain", "vehicle"); - m_autoPickupMask = LayerMask.GetMask("item"); - Inventory inventory = m_inventory; - inventory.m_onChanged = (Action)Delegate.Combine(inventory.m_onChanged, new Action(OnInventoryChanged)); - if (m_attackMask == 0) - { - m_attackMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "piece_nonsolid", "terrain", "character", "character_net", "character_ghost", "hitbox", "character_noenv", "vehicle"); - } - if (crouching == 0) - { - crouching = ZSyncAnimation.GetHash("crouching"); - } - m_nview.Register("OnDeath", RPC_OnDeath); - if (m_nview.IsOwner()) - { - m_nview.Register<int, string, int>("Message", RPC_Message); - m_nview.Register<bool, bool>("OnTargeted", RPC_OnTargeted); - m_nview.Register<float>("UseStamina", RPC_UseStamina); - if ((bool)MusicMan.instance) - { - MusicMan.instance.TriggerMusic("Wakeup"); - } - UpdateKnownRecipesList(); - UpdateAvailablePiecesList(); - SetupPlacementGhost(); - } - } - - public void SetLocalPlayer() - { - if (!(m_localPlayer == this)) - { - m_localPlayer = this; - ZNet.instance.SetReferencePosition(base.transform.position); - EnvMan.instance.SetForceEnvironment(""); - } - } - - public void SetPlayerID(long playerID, string name) - { - if (m_nview.GetZDO() != null && GetPlayerID() == 0L) - { - m_nview.GetZDO().Set("playerID", playerID); - m_nview.GetZDO().Set("playerName", name); - } - } - - public long GetPlayerID() - { - if (m_nview.IsValid()) - { - return m_nview.GetZDO().GetLong("playerID", 0L); - } - return 0L; - } - - public string GetPlayerName() - { - if (m_nview.IsValid()) - { - return m_nview.GetZDO().GetString("playerName", "..."); - } - return ""; - } - - public override string GetHoverText() - { - return ""; - } - - public override string GetHoverName() - { - return GetPlayerName(); - } - - protected override void Start() - { - base.Start(); - m_nview.GetZDO(); - } - - public override void OnDestroy() - { - ZDO zDO = m_nview.GetZDO(); - if (zDO != null && ZNet.instance != null) - { - ZLog.LogWarning(string.Concat("Player destroyed sec:", zDO.GetSector(), " pos:", base.transform.position, " zdopos:", zDO.GetPosition(), " ref ", ZNet.instance.GetReferencePosition())); - } - if ((bool)m_placementGhost) - { - UnityEngine.Object.Destroy(m_placementGhost); - m_placementGhost = null; - } - base.OnDestroy(); - m_players.Remove(this); - if (m_localPlayer == this) - { - ZLog.LogWarning("Local player destroyed"); - m_localPlayer = null; - } - } - - protected override void FixedUpdate() - { - base.FixedUpdate(); - float fixedDeltaTime = Time.fixedDeltaTime; - UpdateAwake(fixedDeltaTime); - if (m_nview.GetZDO() == null) - { - return; - } - UpdateTargeted(fixedDeltaTime); - if (!m_nview.IsOwner()) - { - return; - } - if (m_localPlayer != this) - { - ZLog.Log("Destroying old local player"); - ZNetScene.instance.Destroy(base.gameObject); - } - else if (!IsDead()) - { - UpdateEquipQueue(fixedDeltaTime); - PlayerAttackInput(fixedDeltaTime); - UpdateAttach(); - UpdateShipControl(fixedDeltaTime); - UpdateCrouch(fixedDeltaTime); - UpdateDodge(fixedDeltaTime); - UpdateCover(fixedDeltaTime); - UpdateStations(fixedDeltaTime); - UpdateGuardianPower(fixedDeltaTime); - UpdateBaseValue(fixedDeltaTime); - UpdateStats(fixedDeltaTime); - UpdateTeleport(fixedDeltaTime); - AutoPickup(fixedDeltaTime); - EdgeOfWorldKill(fixedDeltaTime); - UpdateBiome(fixedDeltaTime); - UpdateStealth(fixedDeltaTime); - if ((bool)GameCamera.instance && Vector3.Distance(GameCamera.instance.transform.position, base.transform.position) < 2f) - { - SetVisible(visible: false); - } - AudioMan.instance.SetIndoor(InShelter()); - } - } - - private void Update() - { - if (!m_nview.IsValid() || !m_nview.IsOwner()) - { - return; - } - bool flag = TakeInput(); - UpdateHover(); - if (flag) - { - if (m_debugMode && Console.instance.IsCheatsEnabled()) - { - if (Input.GetKeyDown(KeyCode.Z)) - { - m_debugFly = !m_debugFly; - m_nview.GetZDO().Set("DebugFly", m_debugFly); - Message(MessageHud.MessageType.TopLeft, "Debug fly:" + m_debugFly); - } - if (Input.GetKeyDown(KeyCode.B)) - { - m_noPlacementCost = !m_noPlacementCost; - Message(MessageHud.MessageType.TopLeft, "No placement cost:" + m_noPlacementCost); - UpdateAvailablePiecesList(); - } - if (Input.GetKeyDown(KeyCode.K)) - { - int num = 0; - foreach (Character allCharacter in Character.GetAllCharacters()) - { - if (!allCharacter.IsPlayer()) - { - HitData hitData = new HitData(); - hitData.m_damage.m_damage = 99999f; - allCharacter.Damage(hitData); - num++; - } - } - Message(MessageHud.MessageType.TopLeft, "Killing all the monsters:" + num); - } - } - if (ZInput.GetButtonDown("Use") || ZInput.GetButtonDown("JoyUse")) - { - if ((bool)m_hovering) - { - Interact(m_hovering, hold: false); - } - else if ((bool)m_shipControl) - { - StopShipControl(); - } - } - else if ((ZInput.GetButton("Use") || ZInput.GetButton("JoyUse")) && (bool)m_hovering) - { - Interact(m_hovering, hold: true); - } - if (ZInput.GetButtonDown("Hide") || ZInput.GetButtonDown("JoyHide")) - { - if (GetRightItem() != null || GetLeftItem() != null) - { - if (!InAttack()) - { - HideHandItems(); - } - } - else if (!IsSwiming() || IsOnGround()) - { - ShowHandItems(); - } - } - if (ZInput.GetButtonDown("ToggleWalk")) - { - SetWalk(!GetWalk()); - if (GetWalk()) - { - Message(MessageHud.MessageType.TopLeft, "$msg_walk 1"); - } - else - { - Message(MessageHud.MessageType.TopLeft, "$msg_walk 0"); - } - } - if (ZInput.GetButtonDown("Sit") || (!InPlaceMode() && ZInput.GetButtonDown("JoySit"))) - { - if (InEmote() && IsSitting()) - { - StopEmote(); - } - else - { - StartEmote("sit", oneshot: false); - } - } - if (ZInput.GetButtonDown("GPower") || ZInput.GetButtonDown("JoyGPower")) - { - StartGuardianPower(); - } - if (Input.GetKeyDown(KeyCode.Alpha1)) - { - UseHotbarItem(1); - } - if (Input.GetKeyDown(KeyCode.Alpha2)) - { - UseHotbarItem(2); - } - if (Input.GetKeyDown(KeyCode.Alpha3)) - { - UseHotbarItem(3); - } - if (Input.GetKeyDown(KeyCode.Alpha4)) - { - UseHotbarItem(4); - } - if (Input.GetKeyDown(KeyCode.Alpha5)) - { - UseHotbarItem(5); - } - if (Input.GetKeyDown(KeyCode.Alpha6)) - { - UseHotbarItem(6); - } - if (Input.GetKeyDown(KeyCode.Alpha7)) - { - UseHotbarItem(7); - } - if (Input.GetKeyDown(KeyCode.Alpha8)) - { - UseHotbarItem(8); - } - } - UpdatePlacement(flag, Time.deltaTime); - } - - private void UpdatePlacement(bool takeInput, float dt) - { - UpdateWearNTearHover(); - if (InPlaceMode()) - { - if (!takeInput) - { - return; - } - UpdateBuildGuiInput(); - if (Hud.IsPieceSelectionVisible()) - { - return; - } - ItemDrop.ItemData rightItem = GetRightItem(); - if ((ZInput.GetButtonDown("Remove") || ZInput.GetButtonDown("JoyRemove")) && rightItem.m_shared.m_buildPieces.m_canRemovePieces) - { - if (HaveStamina(rightItem.m_shared.m_attack.m_attackStamina)) - { - if (RemovePiece()) - { - AddNoise(50f); - UseStamina(rightItem.m_shared.m_attack.m_attackStamina); - if (rightItem.m_shared.m_useDurability) - { - rightItem.m_durability -= rightItem.m_shared.m_useDurabilityDrain; - } - } - } - else - { - Hud.instance.StaminaBarNoStaminaFlash(); - } - } - if (ZInput.GetButtonDown("Attack") || ZInput.GetButtonDown("JoyPlace")) - { - Piece selectedPiece = m_buildPieces.GetSelectedPiece(); - if (selectedPiece != null) - { - if (HaveStamina(rightItem.m_shared.m_attack.m_attackStamina)) - { - if (selectedPiece.m_repairPiece) - { - Repair(rightItem, selectedPiece); - } - else if (m_placementGhost != null) - { - if (m_noPlacementCost || HaveRequirements(selectedPiece, RequirementMode.CanBuild)) - { - if (PlacePiece(selectedPiece)) - { - ConsumeResources(selectedPiece.m_resources, 0); - UseStamina(rightItem.m_shared.m_attack.m_attackStamina); - if (rightItem.m_shared.m_useDurability) - { - rightItem.m_durability -= rightItem.m_shared.m_useDurabilityDrain; - } - } - } - else - { - Message(MessageHud.MessageType.Center, "$msg_missingrequirement"); - } - } - } - else - { - Hud.instance.StaminaBarNoStaminaFlash(); - } - } - } - if (Input.GetAxis("Mouse ScrollWheel") < 0f) - { - m_placeRotation--; - } - if (Input.GetAxis("Mouse ScrollWheel") > 0f) - { - m_placeRotation++; - } - float joyRightStickX = ZInput.GetJoyRightStickX(); - if (ZInput.GetButton("JoyRotate") && Mathf.Abs(joyRightStickX) > 0.5f) - { - if (m_rotatePieceTimer == 0f) - { - if (joyRightStickX < 0f) - { - m_placeRotation++; - } - else - { - m_placeRotation--; - } - } - else if (m_rotatePieceTimer > 0.25f) - { - if (joyRightStickX < 0f) - { - m_placeRotation++; - } - else - { - m_placeRotation--; - } - m_rotatePieceTimer = 0.17f; - } - m_rotatePieceTimer += dt; - } - else - { - m_rotatePieceTimer = 0f; - } - } - else if ((bool)m_placementGhost) - { - m_placementGhost.SetActive(value: false); - } - } - - private void UpdateBuildGuiInput() - { - if (Hud.instance.IsQuickPieceSelectEnabled()) - { - if (!Hud.IsPieceSelectionVisible() && ZInput.GetButtonDown("BuildMenu")) - { - Hud.instance.TogglePieceSelection(); - } - } - else if (ZInput.GetButtonDown("BuildMenu")) - { - Hud.instance.TogglePieceSelection(); - } - if (ZInput.GetButtonDown("JoyUse")) - { - Hud.instance.TogglePieceSelection(); - } - if (Hud.IsPieceSelectionVisible()) - { - if (Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("JoyButtonB")) - { - Hud.HidePieceSelection(); - } - if (ZInput.GetButtonDown("JoyTabLeft") || ZInput.GetButtonDown("BuildPrev") || Input.GetAxis("Mouse ScrollWheel") > 0f) - { - m_buildPieces.PrevCategory(); - UpdateAvailablePiecesList(); - } - if (ZInput.GetButtonDown("JoyTabRight") || ZInput.GetButtonDown("BuildNext") || Input.GetAxis("Mouse ScrollWheel") < 0f) - { - m_buildPieces.NextCategory(); - UpdateAvailablePiecesList(); - } - if (ZInput.GetButtonDown("JoyLStickLeft")) - { - m_buildPieces.LeftPiece(); - SetupPlacementGhost(); - } - if (ZInput.GetButtonDown("JoyLStickRight")) - { - m_buildPieces.RightPiece(); - SetupPlacementGhost(); - } - if (ZInput.GetButtonDown("JoyLStickUp")) - { - m_buildPieces.UpPiece(); - SetupPlacementGhost(); - } - if (ZInput.GetButtonDown("JoyLStickDown")) - { - m_buildPieces.DownPiece(); - SetupPlacementGhost(); - } - } - } - - public void SetSelectedPiece(Vector2Int p) - { - if ((bool)m_buildPieces && m_buildPieces.GetSelectedIndex() != p) - { - m_buildPieces.SetSelected(p); - SetupPlacementGhost(); - } - } - - public Piece GetPiece(Vector2Int p) - { - if ((bool)m_buildPieces) - { - return m_buildPieces.GetPiece(p); - } - return null; - } - - public bool IsPieceAvailable(Piece piece) - { - if ((bool)m_buildPieces) - { - return m_buildPieces.IsPieceAvailable(piece); - } - return false; - } - - public Piece GetSelectedPiece() - { - if ((bool)m_buildPieces) - { - return m_buildPieces.GetSelectedPiece(); - } - return null; - } - - private void LateUpdate() - { - if (m_nview.IsValid()) - { - UpdateEmote(); - if (m_nview.IsOwner()) - { - ZNet.instance.SetReferencePosition(base.transform.position); - UpdatePlacementGhost(flashGuardStone: false); - } - } - } - - private void SetupAwake() - { - if (m_nview.GetZDO() == null) - { - m_animator.SetBool("wakeup", value: false); - return; - } - bool @bool = m_nview.GetZDO().GetBool("wakeup", defaultValue: true); - m_animator.SetBool("wakeup", @bool); - if (@bool) - { - m_wakeupTimer = 0f; - } - } - - private void UpdateAwake(float dt) - { - if (!(m_wakeupTimer >= 0f)) - { - return; - } - m_wakeupTimer += dt; - if (m_wakeupTimer > 1f) - { - m_wakeupTimer = -1f; - m_animator.SetBool("wakeup", value: false); - if (m_nview.IsOwner()) - { - m_nview.GetZDO().Set("wakeup", value: false); - } - } - } - - private void EdgeOfWorldKill(float dt) - { - if (!IsDead()) - { - float magnitude = base.transform.position.magnitude; - float num = 10420f; - if (magnitude > num && (IsSwiming() || base.transform.position.y < ZoneSystem.instance.m_waterLevel)) - { - Vector3 vector = Vector3.Normalize(base.transform.position); - float num2 = Utils.LerpStep(num, 10500f, magnitude) * 10f; - m_body.MovePosition(m_body.position + vector * num2 * dt); - } - if (magnitude > num && base.transform.position.y < ZoneSystem.instance.m_waterLevel - 40f) - { - HitData hitData = new HitData(); - hitData.m_damage.m_damage = 99999f; - Damage(hitData); - } - } - } - - private void AutoPickup(float dt) - { - if (IsTeleporting()) - { - return; - } - Vector3 vector = base.transform.position + Vector3.up; - Collider[] array = Physics.OverlapSphere(vector, m_autoPickupRange, m_autoPickupMask); - foreach (Collider collider in array) - { - if (!collider.attachedRigidbody) - { - continue; - } - ItemDrop component = collider.attachedRigidbody.GetComponent<ItemDrop>(); - if (component == null || !component.m_autoPickup || HaveUniqueKey(component.m_itemData.m_shared.m_name) || !component.GetComponent<ZNetView>().IsValid()) - { - continue; - } - if (!component.CanPickup()) - { - component.RequestOwn(); - } - else - { - if (!m_inventory.CanAddItem(component.m_itemData) || component.m_itemData.GetWeight() + m_inventory.GetTotalWeight() > GetMaxCarryWeight()) - { - continue; - } - float num = Vector3.Distance(component.transform.position, vector); - if (!(num > m_autoPickupRange)) - { - if (num < 0.3f) - { - Pickup(component.gameObject); - continue; - } - Vector3 vector2 = Vector3.Normalize(vector - component.transform.position); - float num2 = 15f; - component.transform.position = component.transform.position + vector2 * num2 * dt; - } - } - } - } - - private void PlayerAttackInput(float dt) - { - if (InPlaceMode()) - { - return; - } - ItemDrop.ItemData currentWeapon = GetCurrentWeapon(); - if (currentWeapon != null && currentWeapon.m_shared.m_holdDurationMin > 0f) - { - if (m_blocking || InMinorAction()) - { - m_attackDrawTime = -1f; - if (!string.IsNullOrEmpty(currentWeapon.m_shared.m_holdAnimationState)) - { - m_zanim.SetBool(currentWeapon.m_shared.m_holdAnimationState, value: false); - } - return; - } - bool flag = currentWeapon.m_shared.m_holdStaminaDrain <= 0f || HaveStamina(); - if (m_attackDrawTime < 0f) - { - if (!m_attackDraw) - { - m_attackDrawTime = 0f; - } - } - else if (m_attackDraw && flag && m_attackDrawTime >= 0f) - { - if (m_attackDrawTime == 0f) - { - if (!currentWeapon.m_shared.m_attack.StartDraw(this, currentWeapon)) - { - m_attackDrawTime = -1f; - return; - } - currentWeapon.m_shared.m_holdStartEffect.Create(base.transform.position, Quaternion.identity, base.transform); - } - m_attackDrawTime += Time.fixedDeltaTime; - if (!string.IsNullOrEmpty(currentWeapon.m_shared.m_holdAnimationState)) - { - m_zanim.SetBool(currentWeapon.m_shared.m_holdAnimationState, value: true); - } - UseStamina(currentWeapon.m_shared.m_holdStaminaDrain * dt); - } - else if (m_attackDrawTime > 0f) - { - if (flag) - { - StartAttack(null, secondaryAttack: false); - } - if (!string.IsNullOrEmpty(currentWeapon.m_shared.m_holdAnimationState)) - { - m_zanim.SetBool(currentWeapon.m_shared.m_holdAnimationState, value: false); - } - m_attackDrawTime = 0f; - } - } - else - { - if (m_attack) - { - m_queuedAttackTimer = 0.5f; - m_queuedSecondAttackTimer = 0f; - } - if (m_secondaryAttack) - { - m_queuedSecondAttackTimer = 0.5f; - m_queuedAttackTimer = 0f; - } - m_queuedAttackTimer -= Time.fixedDeltaTime; - m_queuedSecondAttackTimer -= Time.fixedDeltaTime; - if (m_queuedAttackTimer > 0f && StartAttack(null, secondaryAttack: false)) - { - m_queuedAttackTimer = 0f; - } - if (m_queuedSecondAttackTimer > 0f && StartAttack(null, secondaryAttack: true)) - { - m_queuedSecondAttackTimer = 0f; - } - } - } - - protected override bool HaveQueuedChain() - { - if (m_queuedAttackTimer > 0f && GetCurrentWeapon() != null && m_currentAttack != null) - { - return m_currentAttack.CanStartChainAttack(); - } - return false; - } - - private void UpdateBaseValue(float dt) - { - m_baseValueUpdatetimer += dt; - if (m_baseValueUpdatetimer > 2f) - { - m_baseValueUpdatetimer = 0f; - m_baseValue = EffectArea.GetBaseValue(base.transform.position, 20f); - m_nview.GetZDO().Set("baseValue", m_baseValue); - m_comfortLevel = SE_Rested.CalculateComfortLevel(this); - } - } - - public int GetComfortLevel() - { - return m_comfortLevel; - } - - public int GetBaseValue() - { - if (!m_nview.IsValid()) - { - return 0; - } - if (m_nview.IsOwner()) - { - return m_baseValue; - } - return m_nview.GetZDO().GetInt("baseValue"); - } - - public bool IsSafeInHome() - { - return m_safeInHome; - } - - private void UpdateBiome(float dt) - { - if (InIntro()) - { - return; - } - m_biomeTimer += dt; - if (m_biomeTimer > 1f) - { - m_biomeTimer = 0f; - Heightmap.Biome biome = Heightmap.FindBiome(base.transform.position); - if (m_currentBiome != biome) - { - m_currentBiome = biome; - AddKnownBiome(biome); - } - } - } - - public Heightmap.Biome GetCurrentBiome() - { - return m_currentBiome; - } - - public override void RaiseSkill(Skills.SkillType skill, float value = 1f) - { - float multiplier = 1f; - m_seman.ModifyRaiseSkill(skill, ref multiplier); - value *= multiplier; - m_skills.RaiseSkill(skill, value); - } - - private void UpdateStats(float dt) - { - if (InIntro() || IsTeleporting()) - { - return; - } - m_timeSinceDeath += dt; - UpdateMovementModifier(); - UpdateFood(dt, forceUpdate: false); - bool flag = IsEncumbered(); - float maxStamina = GetMaxStamina(); - float num = 1f; - if (IsBlocking()) - { - num *= 0.8f; - } - if ((IsSwiming() && !IsOnGround()) || InAttack() || InDodge() || m_wallRunning || flag) - { - num = 0f; - } - float num2 = (m_staminaRegen + (1f - m_stamina / maxStamina) * m_staminaRegen * m_staminaRegenTimeMultiplier) * num; - float staminaMultiplier = 1f; - m_seman.ModifyStaminaRegen(ref staminaMultiplier); - num2 *= staminaMultiplier; - m_staminaRegenTimer -= dt; - if (m_stamina < maxStamina && m_staminaRegenTimer <= 0f) - { - m_stamina = Mathf.Min(maxStamina, m_stamina + num2 * dt); - } - m_nview.GetZDO().Set("stamina", m_stamina); - if (flag) - { - if (m_moveDir.magnitude > 0.1f) - { - UseStamina(m_encumberedStaminaDrain * dt); - } - m_seman.AddStatusEffect("Encumbered"); - ShowTutorial("encumbered"); - } - else - { - m_seman.RemoveStatusEffect("Encumbered"); - } - if (!HardDeath()) - { - m_seman.AddStatusEffect("SoftDeath"); - } - else - { - m_seman.RemoveStatusEffect("SoftDeath"); - } - UpdateEnvStatusEffects(dt); - } - - private void UpdateEnvStatusEffects(float dt) - { - m_nearFireTimer += dt; - HitData.DamageModifiers damageModifiers = GetDamageModifiers(); - bool flag = m_nearFireTimer < 0.25f; - bool flag2 = m_seman.HaveStatusEffect("Burning"); - bool flag3 = InShelter(); - HitData.DamageModifier modifier = damageModifiers.GetModifier(HitData.DamageType.Frost); - bool flag4 = EnvMan.instance.IsFreezing(); - bool num = EnvMan.instance.IsCold(); - bool flag5 = EnvMan.instance.IsWet(); - bool flag6 = IsSensed(); - bool flag7 = m_seman.HaveStatusEffect("Wet"); - bool flag8 = IsSitting(); - bool flag9 = flag4 && !flag && !flag3; - bool flag10 = (num && !flag) || (flag4 && flag && !flag3) || (flag4 && !flag && flag3); - if (modifier == HitData.DamageModifier.Resistant || modifier == HitData.DamageModifier.VeryResistant) - { - flag9 = false; - flag10 = false; - } - if (flag5 && !m_underRoof) - { - m_seman.AddStatusEffect("Wet", resetTime: true); - } - if (flag3) - { - m_seman.AddStatusEffect("Shelter"); - } - else - { - m_seman.RemoveStatusEffect("Shelter"); - } - if (flag) - { - m_seman.AddStatusEffect("CampFire"); - } - else - { - m_seman.RemoveStatusEffect("CampFire"); - } - bool flag11 = !flag6 && (flag8 || flag3) && !flag10 && !flag9 && !flag7 && !flag2 && flag; - if (flag11) - { - m_seman.AddStatusEffect("Resting"); - } - else - { - m_seman.RemoveStatusEffect("Resting"); - } - m_safeInHome = flag11 && flag3; - if (flag9) - { - if (!m_seman.RemoveStatusEffect("Cold", quiet: true)) - { - m_seman.AddStatusEffect("Freezing"); - } - } - else if (flag10) - { - if (!m_seman.RemoveStatusEffect("Freezing", quiet: true) && (bool)m_seman.AddStatusEffect("Cold")) - { - ShowTutorial("cold"); - } - } - else - { - m_seman.RemoveStatusEffect("Cold"); - m_seman.RemoveStatusEffect("Freezing"); - } - } - - private bool CanEat(ItemDrop.ItemData item, bool showMessages) - { - foreach (Food food in m_foods) - { - if (food.m_item.m_shared.m_name == item.m_shared.m_name) - { - if (food.CanEatAgain()) - { - return true; - } - Message(MessageHud.MessageType.Center, Localization.instance.Localize("$msg_nomore", item.m_shared.m_name)); - return false; - } - } - foreach (Food food2 in m_foods) - { - if (food2.CanEatAgain()) - { - return true; - } - } - if (m_foods.Count >= 3) - { - Message(MessageHud.MessageType.Center, "$msg_isfull"); - return false; - } - return true; - } - - private Food GetMostDepletedFood() - { - Food food = null; - foreach (Food food2 in m_foods) - { - if (food2.CanEatAgain() && (food == null || food2.m_health < food.m_health)) - { - food = food2; - } - } - return food; - } - - public void ClearFood() - { - m_foods.Clear(); - } - - private bool EatFood(ItemDrop.ItemData item) - { - if (!CanEat(item, showMessages: false)) - { - return false; - } - foreach (Food food2 in m_foods) - { - if (food2.m_item.m_shared.m_name == item.m_shared.m_name) - { - if (food2.CanEatAgain()) - { - food2.m_health = item.m_shared.m_food; - food2.m_stamina = item.m_shared.m_foodStamina; - UpdateFood(0f, forceUpdate: true); - return true; - } - return false; - } - } - if (m_foods.Count < 3) - { - Food food = new Food(); - food.m_name = item.m_dropPrefab.name; - food.m_item = item; - food.m_health = item.m_shared.m_food; - food.m_stamina = item.m_shared.m_foodStamina; - m_foods.Add(food); - UpdateFood(0f, forceUpdate: true); - return true; - } - Food mostDepletedFood = GetMostDepletedFood(); - if (mostDepletedFood != null) - { - mostDepletedFood.m_name = item.m_dropPrefab.name; - mostDepletedFood.m_item = item; - mostDepletedFood.m_health = item.m_shared.m_food; - mostDepletedFood.m_stamina = item.m_shared.m_foodStamina; - return true; - } - return false; - } - - private void UpdateFood(float dt, bool forceUpdate) - { - m_foodUpdateTimer += dt; - if (m_foodUpdateTimer >= 1f || forceUpdate) - { - m_foodUpdateTimer = 0f; - foreach (Food food in m_foods) - { - food.m_health -= food.m_item.m_shared.m_food / food.m_item.m_shared.m_foodBurnTime; - food.m_stamina -= food.m_item.m_shared.m_foodStamina / food.m_item.m_shared.m_foodBurnTime; - if (food.m_health < 0f) - { - food.m_health = 0f; - } - if (food.m_stamina < 0f) - { - food.m_stamina = 0f; - } - if (food.m_health <= 0f) - { - Message(MessageHud.MessageType.Center, "$msg_food_done"); - m_foods.Remove(food); - break; - } - } - GetTotalFoodValue(out var hp, out var stamina); - SetMaxHealth(hp, flashBar: true); - SetMaxStamina(stamina, flashBar: true); - } - if (forceUpdate) - { - return; - } - m_foodRegenTimer += dt; - if (!(m_foodRegenTimer >= 10f)) - { - return; - } - m_foodRegenTimer = 0f; - float num = 0f; - foreach (Food food2 in m_foods) - { - num += food2.m_item.m_shared.m_foodRegen; - } - if (num > 0f) - { - float regenMultiplier = 1f; - m_seman.ModifyHealthRegen(ref regenMultiplier); - num *= regenMultiplier; - Heal(num); - } - } - - private void GetTotalFoodValue(out float hp, out float stamina) - { - hp = 25f; - stamina = 75f; - foreach (Food food in m_foods) - { - hp += food.m_health; - stamina += food.m_stamina; - } - } - - public float GetBaseFoodHP() - { - return 25f; - } - - public List<Food> GetFoods() - { - return m_foods; - } - - public void OnSpawned() - { - m_spawnEffects.Create(base.transform.position, Quaternion.identity); - if (m_firstSpawn) - { - if (m_valkyrie != null) - { - UnityEngine.Object.Instantiate(m_valkyrie, base.transform.position, Quaternion.identity); - } - m_firstSpawn = false; - } - } - - protected override bool CheckRun(Vector3 moveDir, float dt) - { - if (!base.CheckRun(moveDir, dt)) - { - return false; - } - bool flag = HaveStamina(); - float skillFactor = m_skills.GetSkillFactor(Skills.SkillType.Run); - float num = Mathf.Lerp(1f, 0.5f, skillFactor); - float drain = m_runStaminaDrain * num; - m_seman.ModifyRunStaminaDrain(drain, ref drain); - UseStamina(dt * drain); - if (HaveStamina()) - { - m_runSkillImproveTimer += dt; - if (m_runSkillImproveTimer > 1f) - { - m_runSkillImproveTimer = 0f; - RaiseSkill(Skills.SkillType.Run); - } - AbortEquipQueue(); - return true; - } - if (flag) - { - Hud.instance.StaminaBarNoStaminaFlash(); - } - return false; - } - - private void UpdateMovementModifier() - { - m_equipmentMovementModifier = 0f; - if (m_rightItem != null) - { - m_equipmentMovementModifier += m_rightItem.m_shared.m_movementModifier; - } - if (m_leftItem != null) - { - m_equipmentMovementModifier += m_leftItem.m_shared.m_movementModifier; - } - if (m_chestItem != null) - { - m_equipmentMovementModifier += m_chestItem.m_shared.m_movementModifier; - } - if (m_legItem != null) - { - m_equipmentMovementModifier += m_legItem.m_shared.m_movementModifier; - } - if (m_helmetItem != null) - { - m_equipmentMovementModifier += m_helmetItem.m_shared.m_movementModifier; - } - if (m_shoulderItem != null) - { - m_equipmentMovementModifier += m_shoulderItem.m_shared.m_movementModifier; - } - if (m_utilityItem != null) - { - m_equipmentMovementModifier += m_utilityItem.m_shared.m_movementModifier; - } - } - - public void OnSkillLevelup(Skills.SkillType skill, float level) - { - m_skillLevelupEffects.Create(m_head.position, m_head.rotation, m_head); - } - - protected override void OnJump() - { - AbortEquipQueue(); - float staminaUse = m_jumpStaminaUsage - m_jumpStaminaUsage * m_equipmentMovementModifier; - m_seman.ModifyJumpStaminaUsage(staminaUse, ref staminaUse); - UseStamina(staminaUse); - } - - protected override void OnSwiming(Vector3 targetVel, float dt) - { - base.OnSwiming(targetVel, dt); - if (targetVel.magnitude > 0.1f) - { - float skillFactor = m_skills.GetSkillFactor(Skills.SkillType.Swim); - float num = Mathf.Lerp(m_swimStaminaDrainMinSkill, m_swimStaminaDrainMaxSkill, skillFactor); - UseStamina(dt * num); - m_swimSkillImproveTimer += dt; - if (m_swimSkillImproveTimer > 1f) - { - m_swimSkillImproveTimer = 0f; - RaiseSkill(Skills.SkillType.Swim); - } - } - if (!HaveStamina()) - { - m_drownDamageTimer += dt; - if (m_drownDamageTimer > 1f) - { - m_drownDamageTimer = 0f; - float damage = Mathf.Ceil(GetMaxHealth() / 20f); - HitData hitData = new HitData(); - hitData.m_damage.m_damage = damage; - hitData.m_point = GetCenterPoint(); - hitData.m_dir = Vector3.down; - hitData.m_pushForce = 10f; - Damage(hitData); - } - } - } - - protected override bool TakeInput() - { - bool result = (!Chat.instance || !Chat.instance.HasFocus()) && !Console.IsVisible() && !TextInput.IsVisible() && !StoreGui.IsVisible() && !InventoryGui.IsVisible() && !Menu.IsVisible() && (!TextViewer.instance || !TextViewer.instance.IsVisible()) && !Minimap.IsOpen() && !GameCamera.InFreeFly(); - if (IsDead() || InCutscene() || IsTeleporting()) - { - result = false; - } - return result; - } - - public void UseHotbarItem(int index) - { - ItemDrop.ItemData itemAt = m_inventory.GetItemAt(index - 1, 0); - if (itemAt != null) - { - UseItem(null, itemAt, fromInventoryGui: false); - } - } - - public bool RequiredCraftingStation(Recipe recipe, int qualityLevel, bool checkLevel) - { - CraftingStation requiredStation = recipe.GetRequiredStation(qualityLevel); - if (requiredStation != null) - { - if (m_currentStation == null) - { - return false; - } - if (requiredStation.m_name != m_currentStation.m_name) - { - return false; - } - if (checkLevel) - { - int requiredStationLevel = recipe.GetRequiredStationLevel(qualityLevel); - if (m_currentStation.GetLevel() < requiredStationLevel) - { - return false; - } - } - } - else if (m_currentStation != null && !m_currentStation.m_showBasicRecipies) - { - return false; - } - return true; - } - - public bool HaveRequirements(Recipe recipe, bool discover, int qualityLevel) - { - if (discover) - { - if ((bool)recipe.m_craftingStation && !KnowStationLevel(recipe.m_craftingStation.m_name, recipe.m_minStationLevel)) - { - return false; - } - } - else if (!RequiredCraftingStation(recipe, qualityLevel, checkLevel: true)) - { - return false; - } - if (recipe.m_item.m_itemData.m_shared.m_dlc.Length > 0 && !DLCMan.instance.IsDLCInstalled(recipe.m_item.m_itemData.m_shared.m_dlc)) - { - return false; - } - if (!HaveRequirements(recipe.m_resources, discover, qualityLevel)) - { - return false; - } - return true; - } - - private bool HaveRequirements(Piece.Requirement[] resources, bool discover, int qualityLevel) - { - foreach (Piece.Requirement requirement in resources) - { - if (!requirement.m_resItem) - { - continue; - } - if (discover) - { - if (requirement.m_amount > 0 && !m_knownMaterial.Contains(requirement.m_resItem.m_itemData.m_shared.m_name)) - { - return false; - } - continue; - } - int amount = requirement.GetAmount(qualityLevel); - if (m_inventory.CountItems(requirement.m_resItem.m_itemData.m_shared.m_name) < amount) - { - return false; - } - } - return true; - } - - public bool HaveRequirements(Piece piece, RequirementMode mode) - { - if ((bool)piece.m_craftingStation) - { - if (mode == RequirementMode.IsKnown || mode == RequirementMode.CanAlmostBuild) - { - if (!m_knownStations.ContainsKey(piece.m_craftingStation.m_name)) - { - return false; - } - } - else if (!CraftingStation.HaveBuildStationInRange(piece.m_craftingStation.m_name, base.transform.position)) - { - return false; - } - } - if (piece.m_dlc.Length > 0 && !DLCMan.instance.IsDLCInstalled(piece.m_dlc)) - { - return false; - } - Piece.Requirement[] resources = piece.m_resources; - foreach (Piece.Requirement requirement in resources) - { - if (!requirement.m_resItem || requirement.m_amount <= 0) - { - continue; - } - switch (mode) - { - case RequirementMode.IsKnown: - if (!m_knownMaterial.Contains(requirement.m_resItem.m_itemData.m_shared.m_name)) - { - return false; - } - break; - case RequirementMode.CanAlmostBuild: - if (!m_inventory.HaveItem(requirement.m_resItem.m_itemData.m_shared.m_name)) - { - return false; - } - break; - case RequirementMode.CanBuild: - if (m_inventory.CountItems(requirement.m_resItem.m_itemData.m_shared.m_name) < requirement.m_amount) - { - return false; - } - break; - } - } - return true; - } - - public void SetCraftingStation(CraftingStation station) - { - if (!(m_currentStation == station)) - { - if ((bool)station) - { - AddKnownStation(station); - station.PokeInUse(); - } - m_currentStation = station; - HideHandItems(); - int value = (m_currentStation ? m_currentStation.m_useAnimation : 0); - m_zanim.SetInt("crafting", value); - } - } - - public CraftingStation GetCurrentCraftingStation() - { - return m_currentStation; - } - - public void ConsumeResources(Piece.Requirement[] requirements, int qualityLevel) - { - foreach (Piece.Requirement requirement in requirements) - { - if ((bool)requirement.m_resItem) - { - int amount = requirement.GetAmount(qualityLevel); - if (amount > 0) - { - m_inventory.RemoveItem(requirement.m_resItem.m_itemData.m_shared.m_name, amount); - } - } - } - } - - private void UpdateHover() - { - if (InPlaceMode() || IsDead() || m_shipControl != null) - { - m_hovering = null; - m_hoveringCreature = null; - } - else - { - FindHoverObject(out m_hovering, out m_hoveringCreature); - } - } - - private bool CheckCanRemovePiece(Piece piece) - { - if (!m_noPlacementCost && piece.m_craftingStation != null && !CraftingStation.HaveBuildStationInRange(piece.m_craftingStation.m_name, base.transform.position)) - { - Message(MessageHud.MessageType.Center, "$msg_missingstation"); - return false; - } - return true; - } - - private bool RemovePiece() - { - if (Physics.Raycast(GameCamera.instance.transform.position, GameCamera.instance.transform.forward, out var hitInfo, 50f, m_removeRayMask) && Vector3.Distance(hitInfo.point, m_eye.position) < m_maxPlaceDistance) - { - Piece piece = hitInfo.collider.GetComponentInParent<Piece>(); - if (piece == null && (bool)hitInfo.collider.GetComponent<Heightmap>()) - { - piece = TerrainModifier.FindClosestModifierPieceInRange(hitInfo.point, 2.5f); - } - if ((bool)piece) - { - if (!piece.m_canBeRemoved) - { - return false; - } - if (Location.IsInsideNoBuildLocation(piece.transform.position)) - { - Message(MessageHud.MessageType.Center, "$msg_nobuildzone"); - return false; - } - if (!PrivateArea.CheckAccess(piece.transform.position)) - { - Message(MessageHud.MessageType.Center, "$msg_privatezone"); - return false; - } - if (!CheckCanRemovePiece(piece)) - { - return false; - } - ZNetView component = piece.GetComponent<ZNetView>(); - if (component == null) - { - return false; - } - if (!piece.CanBeRemoved()) - { - Message(MessageHud.MessageType.Center, "$msg_cantremovenow"); - return false; - } - component.ClaimOwnership(); - WearNTear component2 = piece.GetComponent<WearNTear>(); - if ((bool)component2) - { - component2.Destroy(); - } - else - { - piece.DropResources(); - piece.m_placeEffect.Create(piece.transform.position, piece.transform.rotation, piece.gameObject.transform); - m_removeEffects.Create(piece.transform.position, Quaternion.identity); - ZNetScene.instance.Destroy(piece.gameObject); - } - ItemDrop.ItemData rightItem = GetRightItem(); - if (rightItem != null) - { - FaceLookDirection(); - m_zanim.SetTrigger(rightItem.m_shared.m_attack.m_attackAnimation); - } - return true; - } - } - return false; - } - - public void FaceLookDirection() - { - base.transform.rotation = GetLookYaw(); - } - - private bool PlacePiece(Piece piece) - { - UpdatePlacementGhost(flashGuardStone: true); - Vector3 position = m_placementGhost.transform.position; - Quaternion rotation = m_placementGhost.transform.rotation; - GameObject gameObject = piece.gameObject; - switch (m_placementStatus) - { - case PlacementStatus.NoBuildZone: - Message(MessageHud.MessageType.Center, "$msg_nobuildzone"); - return false; - case PlacementStatus.BlockedbyPlayer: - Message(MessageHud.MessageType.Center, "$msg_blocked"); - return false; - case PlacementStatus.PrivateZone: - Message(MessageHud.MessageType.Center, "$msg_privatezone"); - return false; - case PlacementStatus.MoreSpace: - Message(MessageHud.MessageType.Center, "$msg_needspace"); - return false; - case PlacementStatus.NoTeleportArea: - Message(MessageHud.MessageType.Center, "$msg_noteleportarea"); - return false; - case PlacementStatus.Invalid: - Message(MessageHud.MessageType.Center, "$msg_invalidplacement"); - return false; - case PlacementStatus.ExtensionMissingStation: - Message(MessageHud.MessageType.Center, "$msg_extensionmissingstation"); - return false; - case PlacementStatus.WrongBiome: - Message(MessageHud.MessageType.Center, "$msg_wrongbiome"); - return false; - case PlacementStatus.NeedCultivated: - Message(MessageHud.MessageType.Center, "$msg_needcultivated"); - return false; - case PlacementStatus.NotInDungeon: - Message(MessageHud.MessageType.Center, "$msg_notindungeon"); - return false; - default: - { - TerrainModifier.SetTriggerOnPlaced(trigger: true); - GameObject gameObject2 = UnityEngine.Object.Instantiate(gameObject, position, rotation); - TerrainModifier.SetTriggerOnPlaced(trigger: false); - CraftingStation componentInChildren = gameObject2.GetComponentInChildren<CraftingStation>(); - if ((bool)componentInChildren) - { - AddKnownStation(componentInChildren); - } - Piece component = gameObject2.GetComponent<Piece>(); - if ((bool)component) - { - component.SetCreator(GetPlayerID()); - } - PrivateArea component2 = gameObject2.GetComponent<PrivateArea>(); - if ((bool)component2) - { - component2.Setup(Game.instance.GetPlayerProfile().GetName()); - } - WearNTear component3 = gameObject2.GetComponent<WearNTear>(); - if ((bool)component3) - { - component3.OnPlaced(); - } - ItemDrop.ItemData rightItem = GetRightItem(); - if (rightItem != null) - { - FaceLookDirection(); - m_zanim.SetTrigger(rightItem.m_shared.m_attack.m_attackAnimation); - } - piece.m_placeEffect.Create(position, rotation, gameObject2.transform); - AddNoise(50f); - Game.instance.GetPlayerProfile().m_playerStats.m_builds++; - ZLog.Log("Placed " + gameObject.name); - GoogleAnalyticsV4.instance.LogEvent("Game", "PlacedPiece", gameObject.name, 0L); - return true; - } - } - } - - private void RemovePieces(Vector3 point, float range, string name, bool groundOnly) - { - Collider[] array = Physics.OverlapSphere(point, range + 3f); - Piece item = null; - float num = 0f; - List<Piece> list = new List<Piece>(); - Collider[] array2 = array; - for (int i = 0; i < array2.Length; i++) - { - Piece componentInParent = array2[i].GetComponentInParent<Piece>(); - if (!componentInParent || (!(componentInParent.m_name == name) && !(name == "")) || (groundOnly && !componentInParent.m_groundPiece) || !componentInParent.CanBeRemoved() || !PrivateArea.CheckAccess(componentInParent.transform.position) || componentInParent.gameObject == m_placementGhost) - { - continue; - } - float num2 = Utils.DistanceXZ(point, componentInParent.transform.position); - if (!(num2 > range)) - { - if (num2 > num) - { - num = num2; - item = componentInParent; - } - list.Add(componentInParent); - } - } - list.Remove(item); - foreach (Piece item2 in list) - { - ZNetView component = item2.GetComponent<ZNetView>(); - component.ClaimOwnership(); - component.Destroy(); - GoogleAnalyticsV4.instance.LogEvent("Game", "RemovedPiece", item2.gameObject.name, 0L); - } - } - - public override bool IsPlayer() - { - return true; - } - - public void GetBuildSelection(out Piece go, out Vector2Int id, out int total, out Piece.PieceCategory category, out bool useCategory) - { - category = m_buildPieces.m_selectedCategory; - useCategory = m_buildPieces.m_useCategories; - if (m_buildPieces.GetAvailablePiecesInSelectedCategory() == 0) - { - go = null; - id = Vector2Int.zero; - total = 0; - } - else - { - GameObject selectedPrefab = m_buildPieces.GetSelectedPrefab(); - go = (selectedPrefab ? selectedPrefab.GetComponent<Piece>() : null); - id = m_buildPieces.GetSelectedIndex(); - total = m_buildPieces.GetAvailablePiecesInSelectedCategory(); - } - } - - public List<Piece> GetBuildPieces() - { - if ((bool)m_buildPieces) - { - return m_buildPieces.GetPiecesInSelectedCategory(); - } - return null; - } - - public int GetAvailableBuildPiecesInCategory(Piece.PieceCategory cat) - { - if ((bool)m_buildPieces) - { - return m_buildPieces.GetAvailablePiecesInCategory(cat); - } - return 0; - } - - private void RPC_OnDeath(long sender) - { - m_visual.SetActive(value: false); - } - - private void CreateDeathEffects() - { - GameObject[] array = m_deathEffects.Create(base.transform.position, base.transform.rotation, base.transform); - for (int i = 0; i < array.Length; i++) - { - Ragdoll component = array[i].GetComponent<Ragdoll>(); - if ((bool)component) - { - Vector3 velocity = m_body.velocity; - if (m_pushForce.magnitude * 0.5f > velocity.magnitude) - { - velocity = m_pushForce * 0.5f; - } - component.Setup(velocity, 0f, 0f, 0f, null); - OnRagdollCreated(component); - m_ragdoll = component; - } - } - } - - public void UnequipDeathDropItems() - { - if (m_rightItem != null) - { - UnequipItem(m_rightItem, triggerEquipEffects: false); - } - if (m_leftItem != null) - { - UnequipItem(m_leftItem, triggerEquipEffects: false); - } - if (m_ammoItem != null) - { - UnequipItem(m_ammoItem, triggerEquipEffects: false); - } - if (m_utilityItem != null) - { - UnequipItem(m_utilityItem, triggerEquipEffects: false); - } - } - - private void CreateTombStone() - { - if (m_inventory.NrOfItems() != 0) - { - UnequipAllItems(); - GameObject obj = UnityEngine.Object.Instantiate(m_tombstone, GetCenterPoint(), base.transform.rotation); - obj.GetComponent<Container>().GetInventory().MoveInventoryToGrave(m_inventory); - TombStone component = obj.GetComponent<TombStone>(); - PlayerProfile playerProfile = Game.instance.GetPlayerProfile(); - component.Setup(playerProfile.GetName(), playerProfile.GetPlayerID()); - } - } - - private bool HardDeath() - { - return m_timeSinceDeath > m_hardDeathCooldown; - } - - protected override void OnDeath() - { - bool num = HardDeath(); - m_nview.GetZDO().Set("dead", value: true); - m_nview.InvokeRPC(ZNetView.Everybody, "OnDeath"); - Game.instance.GetPlayerProfile().m_playerStats.m_deaths++; - Game.instance.GetPlayerProfile().SetDeathPoint(base.transform.position); - CreateDeathEffects(); - CreateTombStone(); - m_foods.Clear(); - if (num) - { - m_skills.OnDeath(); - } - Game.instance.RequestRespawn(10f); - m_timeSinceDeath = 0f; - if (!num) - { - Message(MessageHud.MessageType.TopLeft, "$msg_softdeath"); - } - Message(MessageHud.MessageType.Center, "$msg_youdied"); - ShowTutorial("death"); - string eventLabel = "biome:" + GetCurrentBiome(); - GoogleAnalyticsV4.instance.LogEvent("Game", "Death", eventLabel, 0L); - } - - public void OnRespawn() - { - m_nview.GetZDO().Set("dead", value: false); - SetHealth(GetMaxHealth()); - } - - private void SetupPlacementGhost() - { - if ((bool)m_placementGhost) - { - UnityEngine.Object.Destroy(m_placementGhost); - m_placementGhost = null; - } - if (m_buildPieces == null) - { - return; - } - GameObject selectedPrefab = m_buildPieces.GetSelectedPrefab(); - if (selectedPrefab == null || selectedPrefab.GetComponent<Piece>().m_repairPiece) - { - return; - } - bool flag = false; - TerrainModifier componentInChildren = selectedPrefab.GetComponentInChildren<TerrainModifier>(); - if ((bool)componentInChildren) - { - flag = componentInChildren.enabled; - componentInChildren.enabled = false; - } - ZNetView.m_forceDisableInit = true; - m_placementGhost = UnityEngine.Object.Instantiate(selectedPrefab); - ZNetView.m_forceDisableInit = false; - m_placementGhost.name = selectedPrefab.name; - if ((bool)componentInChildren) - { - componentInChildren.enabled = flag; - } - Joint[] componentsInChildren = m_placementGhost.GetComponentsInChildren<Joint>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - UnityEngine.Object.Destroy(componentsInChildren[i]); - } - Rigidbody[] componentsInChildren2 = m_placementGhost.GetComponentsInChildren<Rigidbody>(); - for (int i = 0; i < componentsInChildren2.Length; i++) - { - UnityEngine.Object.Destroy(componentsInChildren2[i]); - } - Collider[] componentsInChildren3 = m_placementGhost.GetComponentsInChildren<Collider>(); - foreach (Collider collider in componentsInChildren3) - { - if (((1 << collider.gameObject.layer) & m_placeRayMask) == 0) - { - ZLog.Log("Disabling " + collider.gameObject.name + " " + LayerMask.LayerToName(collider.gameObject.layer)); - collider.enabled = false; - } - } - Transform[] componentsInChildren4 = m_placementGhost.GetComponentsInChildren<Transform>(); - int layer = LayerMask.NameToLayer("ghost"); - Transform[] array = componentsInChildren4; - for (int i = 0; i < array.Length; i++) - { - array[i].gameObject.layer = layer; - } - TerrainModifier[] componentsInChildren5 = m_placementGhost.GetComponentsInChildren<TerrainModifier>(); - for (int i = 0; i < componentsInChildren5.Length; i++) - { - UnityEngine.Object.Destroy(componentsInChildren5[i]); - } - GuidePoint[] componentsInChildren6 = m_placementGhost.GetComponentsInChildren<GuidePoint>(); - for (int i = 0; i < componentsInChildren6.Length; i++) - { - UnityEngine.Object.Destroy(componentsInChildren6[i]); - } - Light[] componentsInChildren7 = m_placementGhost.GetComponentsInChildren<Light>(); - for (int i = 0; i < componentsInChildren7.Length; i++) - { - UnityEngine.Object.Destroy(componentsInChildren7[i]); - } - AudioSource[] componentsInChildren8 = m_placementGhost.GetComponentsInChildren<AudioSource>(); - for (int i = 0; i < componentsInChildren8.Length; i++) - { - componentsInChildren8[i].enabled = false; - } - ZSFX[] componentsInChildren9 = m_placementGhost.GetComponentsInChildren<ZSFX>(); - for (int i = 0; i < componentsInChildren9.Length; i++) - { - componentsInChildren9[i].enabled = false; - } - Windmill componentInChildren2 = m_placementGhost.GetComponentInChildren<Windmill>(); - if ((bool)componentInChildren2) - { - componentInChildren2.enabled = false; - } - ParticleSystem[] componentsInChildren10 = m_placementGhost.GetComponentsInChildren<ParticleSystem>(); - for (int i = 0; i < componentsInChildren10.Length; i++) - { - componentsInChildren10[i].gameObject.SetActive(value: false); - } - Transform transform = m_placementGhost.transform.Find("_GhostOnly"); - if ((bool)transform) - { - transform.gameObject.SetActive(value: true); - } - m_placementGhost.transform.position = base.transform.position; - m_placementGhost.transform.localScale = selectedPrefab.transform.localScale; - MeshRenderer[] componentsInChildren11 = m_placementGhost.GetComponentsInChildren<MeshRenderer>(); - foreach (MeshRenderer meshRenderer in componentsInChildren11) - { - if (!(meshRenderer.sharedMaterial == null)) - { - Material[] sharedMaterials = meshRenderer.sharedMaterials; - for (int j = 0; j < sharedMaterials.Length; j++) - { - Material material = new Material(sharedMaterials[j]); - material.SetFloat("_RippleDistance", 0f); - material.SetFloat("_ValueNoise", 0f); - sharedMaterials[j] = material; - } - meshRenderer.sharedMaterials = sharedMaterials; - meshRenderer.shadowCastingMode = ShadowCastingMode.Off; - } - } - } - - private void SetPlacementGhostValid(bool valid) - { - m_placementGhost.GetComponent<Piece>().SetInvalidPlacementHeightlight(!valid); - } - - protected override void SetPlaceMode(PieceTable buildPieces) - { - base.SetPlaceMode(buildPieces); - m_buildPieces = buildPieces; - UpdateAvailablePiecesList(); - } - - public void SetBuildCategory(int index) - { - if (m_buildPieces != null) - { - m_buildPieces.SetCategory(index); - UpdateAvailablePiecesList(); - } - } - - public override bool InPlaceMode() - { - return m_buildPieces != null; - } - - private void Repair(ItemDrop.ItemData toolItem, Piece repairPiece) - { - if (!InPlaceMode()) - { - return; - } - Piece hoveringPiece = GetHoveringPiece(); - if (!hoveringPiece || !CheckCanRemovePiece(hoveringPiece) || !PrivateArea.CheckAccess(hoveringPiece.transform.position)) - { - return; - } - bool flag = false; - WearNTear component = hoveringPiece.GetComponent<WearNTear>(); - if ((bool)component && component.Repair()) - { - flag = true; - } - if (flag) - { - FaceLookDirection(); - m_zanim.SetTrigger(toolItem.m_shared.m_attack.m_attackAnimation); - hoveringPiece.m_placeEffect.Create(hoveringPiece.transform.position, hoveringPiece.transform.rotation); - Message(MessageHud.MessageType.TopLeft, Localization.instance.Localize("$msg_repaired", hoveringPiece.m_name)); - UseStamina(toolItem.m_shared.m_attack.m_attackStamina); - if (toolItem.m_shared.m_useDurability) - { - toolItem.m_durability -= toolItem.m_shared.m_useDurabilityDrain; - } - } - else - { - Message(MessageHud.MessageType.TopLeft, hoveringPiece.m_name + " $msg_doesnotneedrepair"); - } - } - - private void UpdateWearNTearHover() - { - if (!InPlaceMode()) - { - m_hoveringPiece = null; - return; - } - m_hoveringPiece = null; - if (!Physics.Raycast(GameCamera.instance.transform.position, GameCamera.instance.transform.forward, out var hitInfo, 50f, m_removeRayMask) || !(Vector3.Distance(m_eye.position, hitInfo.point) < m_maxPlaceDistance)) - { - return; - } - Piece piece = (m_hoveringPiece = hitInfo.collider.GetComponentInParent<Piece>()); - if ((bool)piece) - { - WearNTear component = piece.GetComponent<WearNTear>(); - if ((bool)component) - { - component.Highlight(); - } - } - } - - public Piece GetHoveringPiece() - { - if (InPlaceMode()) - { - return m_hoveringPiece; - } - return null; - } - - private void UpdatePlacementGhost(bool flashGuardStone) - { - if (m_placementGhost == null) - { - if ((bool)m_placementMarkerInstance) - { - m_placementMarkerInstance.SetActive(value: false); - } - return; - } - bool flag = ZInput.GetButton("AltPlace") || ZInput.GetButton("JoyAltPlace"); - Piece component = m_placementGhost.GetComponent<Piece>(); - bool water = component.m_waterPiece || component.m_noInWater; - if (PieceRayTest(out var point, out var normal, out var piece, out var heightmap, out var waterSurface, water)) - { - m_placementStatus = PlacementStatus.Valid; - if (m_placementMarkerInstance == null) - { - m_placementMarkerInstance = UnityEngine.Object.Instantiate(m_placeMarker, point, Quaternion.identity); - } - m_placementMarkerInstance.SetActive(value: true); - m_placementMarkerInstance.transform.position = point; - m_placementMarkerInstance.transform.rotation = Quaternion.LookRotation(normal); - if (component.m_groundOnly || component.m_groundPiece || component.m_cultivatedGroundOnly) - { - m_placementMarkerInstance.SetActive(value: false); - } - WearNTear wearNTear = ((piece != null) ? piece.GetComponent<WearNTear>() : null); - StationExtension component2 = component.GetComponent<StationExtension>(); - if (component2 != null) - { - CraftingStation craftingStation = component2.FindClosestStationInRange(point); - if ((bool)craftingStation) - { - component2.StartConnectionEffect(craftingStation); - } - else - { - component2.StopConnectionEffect(); - m_placementStatus = PlacementStatus.ExtensionMissingStation; - } - if (component2.OtherExtensionInRange(component.m_spaceRequirement)) - { - m_placementStatus = PlacementStatus.MoreSpace; - } - } - if ((bool)wearNTear && !wearNTear.m_supports) - { - m_placementStatus = PlacementStatus.Invalid; - } - if (component.m_waterPiece && waterSurface == null && !flag) - { - m_placementStatus = PlacementStatus.Invalid; - } - if (component.m_noInWater && waterSurface != null) - { - m_placementStatus = PlacementStatus.Invalid; - } - if (component.m_groundPiece && heightmap == null) - { - m_placementGhost.SetActive(value: false); - m_placementStatus = PlacementStatus.Invalid; - return; - } - if (component.m_groundOnly && heightmap == null) - { - m_placementStatus = PlacementStatus.Invalid; - } - if (component.m_cultivatedGroundOnly && (heightmap == null || !heightmap.IsCultivated(point))) - { - m_placementStatus = PlacementStatus.NeedCultivated; - } - if (component.m_notOnWood && (bool)piece && (bool)wearNTear && wearNTear.m_materialType == WearNTear.MaterialType.Wood) - { - m_placementStatus = PlacementStatus.Invalid; - } - if (component.m_notOnTiltingSurface && normal.y < 0.8f) - { - m_placementStatus = PlacementStatus.Invalid; - } - if (component.m_inCeilingOnly && normal.y > -0.5f) - { - m_placementStatus = PlacementStatus.Invalid; - } - if (component.m_notOnFloor && normal.y > 0.1f) - { - m_placementStatus = PlacementStatus.Invalid; - } - if (component.m_onlyInTeleportArea && !EffectArea.IsPointInsideArea(point, EffectArea.Type.Teleport)) - { - m_placementStatus = PlacementStatus.NoTeleportArea; - } - if (!component.m_allowedInDungeons && InInterior()) - { - m_placementStatus = PlacementStatus.NotInDungeon; - } - if ((bool)heightmap) - { - normal = Vector3.up; - } - m_placementGhost.SetActive(value: true); - Quaternion rotation = Quaternion.Euler(0f, 22.5f * (float)m_placeRotation, 0f); - if (((component.m_groundPiece || component.m_clipGround) && (bool)heightmap) || component.m_clipEverything) - { - if ((bool)m_buildPieces.GetSelectedPrefab().GetComponent<TerrainModifier>() && component.m_allowAltGroundPlacement && component.m_groundPiece && !ZInput.GetButton("AltPlace") && !ZInput.GetButton("JoyAltPlace")) - { - float groundHeight = ZoneSystem.instance.GetGroundHeight(base.transform.position); - point.y = groundHeight; - } - m_placementGhost.transform.position = point; - m_placementGhost.transform.rotation = rotation; - } - else - { - Collider[] componentsInChildren = m_placementGhost.GetComponentsInChildren<Collider>(); - if (componentsInChildren.Length != 0) - { - m_placementGhost.transform.position = point + normal * 50f; - m_placementGhost.transform.rotation = rotation; - Vector3 vector = Vector3.zero; - float num = 999999f; - Collider[] array = componentsInChildren; - foreach (Collider collider in array) - { - if (collider.isTrigger || !collider.enabled) - { - continue; - } - MeshCollider meshCollider = collider as MeshCollider; - if (!(meshCollider != null) || meshCollider.convex) - { - Vector3 vector2 = collider.ClosestPoint(point); - float num2 = Vector3.Distance(vector2, point); - if (num2 < num) - { - vector = vector2; - num = num2; - } - } - } - Vector3 vector3 = m_placementGhost.transform.position - vector; - if (component.m_waterPiece) - { - vector3.y = 3f; - } - m_placementGhost.transform.position = point + vector3; - m_placementGhost.transform.rotation = rotation; - } - } - if (!flag) - { - m_tempPieces.Clear(); - if (FindClosestSnapPoints(m_placementGhost.transform, 0.5f, out var a, out var b, m_tempPieces)) - { - _ = b.parent.position; - Vector3 vector4 = b.position - (a.position - m_placementGhost.transform.position); - if (!IsOverlapingOtherPiece(vector4, m_placementGhost.name, m_tempPieces)) - { - m_placementGhost.transform.position = vector4; - } - } - } - if (Location.IsInsideNoBuildLocation(m_placementGhost.transform.position)) - { - m_placementStatus = PlacementStatus.NoBuildZone; - } - float radius = (component.GetComponent<PrivateArea>() ? component.GetComponent<PrivateArea>().m_radius : 0f); - if (!PrivateArea.CheckAccess(m_placementGhost.transform.position, radius, flashGuardStone)) - { - m_placementStatus = PlacementStatus.PrivateZone; - } - if (CheckPlacementGhostVSPlayers()) - { - m_placementStatus = PlacementStatus.BlockedbyPlayer; - } - if (component.m_onlyInBiome != 0 && (Heightmap.FindBiome(m_placementGhost.transform.position) & component.m_onlyInBiome) == 0) - { - m_placementStatus = PlacementStatus.WrongBiome; - } - if (component.m_noClipping && TestGhostClipping(m_placementGhost, 0.2f)) - { - m_placementStatus = PlacementStatus.Invalid; - } - } - else - { - if ((bool)m_placementMarkerInstance) - { - m_placementMarkerInstance.SetActive(value: false); - } - m_placementGhost.SetActive(value: false); - m_placementStatus = PlacementStatus.Invalid; - } - SetPlacementGhostValid(m_placementStatus == PlacementStatus.Valid); - } - - private bool IsOverlapingOtherPiece(Vector3 p, string pieceName, List<Piece> pieces) - { - foreach (Piece tempPiece in m_tempPieces) - { - if (Vector3.Distance(p, tempPiece.transform.position) < 0.05f && tempPiece.gameObject.name.StartsWith(pieceName)) - { - return true; - } - } - return false; - } - - private bool FindClosestSnapPoints(Transform ghost, float maxSnapDistance, out Transform a, out Transform b, List<Piece> pieces) - { - m_tempSnapPoints1.Clear(); - ghost.GetComponent<Piece>().GetSnapPoints(m_tempSnapPoints1); - m_tempSnapPoints2.Clear(); - m_tempPieces.Clear(); - Piece.GetSnapPoints(ghost.transform.position, 10f, m_tempSnapPoints2, m_tempPieces); - float num = 9999999f; - a = null; - b = null; - foreach (Transform item in m_tempSnapPoints1) - { - if (FindClosestSnappoint(item.position, m_tempSnapPoints2, maxSnapDistance, out var closest, out var distance) && distance < num) - { - num = distance; - a = item; - b = closest; - } - } - return a != null; - } - - private bool FindClosestSnappoint(Vector3 p, List<Transform> snapPoints, float maxDistance, out Transform closest, out float distance) - { - closest = null; - distance = 999999f; - foreach (Transform snapPoint in snapPoints) - { - float num = Vector3.Distance(snapPoint.position, p); - if (!(num > maxDistance) && num < distance) - { - closest = snapPoint; - distance = num; - } - } - return closest != null; - } - - private bool TestGhostClipping(GameObject ghost, float maxPenetration) - { - Collider[] componentsInChildren = ghost.GetComponentsInChildren<Collider>(); - Collider[] array = Physics.OverlapSphere(ghost.transform.position, 10f, m_placeRayMask); - Collider[] array2 = componentsInChildren; - foreach (Collider collider in array2) - { - Collider[] array3 = array; - foreach (Collider collider2 in array3) - { - if (Physics.ComputePenetration(collider, collider.transform.position, collider.transform.rotation, collider2, collider2.transform.position, collider2.transform.rotation, out var _, out var distance) && distance > maxPenetration) - { - return true; - } - } - } - return false; - } - - private bool CheckPlacementGhostVSPlayers() - { - if (m_placementGhost == null) - { - return false; - } - List<Character> list = new List<Character>(); - Character.GetCharactersInRange(base.transform.position, 30f, list); - Collider[] componentsInChildren = m_placementGhost.GetComponentsInChildren<Collider>(); - foreach (Collider collider in componentsInChildren) - { - if (collider.isTrigger || !collider.enabled) - { - continue; - } - MeshCollider meshCollider = collider as MeshCollider; - if (meshCollider != null && !meshCollider.convex) - { - continue; - } - foreach (Character item in list) - { - CapsuleCollider collider2 = item.GetCollider(); - if (Physics.ComputePenetration(collider, collider.transform.position, collider.transform.rotation, collider2, collider2.transform.position, collider2.transform.rotation, out var _, out var _)) - { - return true; - } - } - } - return false; - } - - private bool PieceRayTest(out Vector3 point, out Vector3 normal, out Piece piece, out Heightmap heightmap, out Collider waterSurface, bool water) - { - int layerMask = m_placeRayMask; - if (water) - { - layerMask = m_placeWaterRayMask; - } - if (Physics.Raycast(GameCamera.instance.transform.position, GameCamera.instance.transform.forward, out var hitInfo, 50f, layerMask) && (bool)hitInfo.collider && !hitInfo.collider.attachedRigidbody && Vector3.Distance(m_eye.position, hitInfo.point) < m_maxPlaceDistance) - { - point = hitInfo.point; - normal = hitInfo.normal; - piece = hitInfo.collider.GetComponentInParent<Piece>(); - heightmap = hitInfo.collider.GetComponent<Heightmap>(); - if (hitInfo.collider.gameObject.layer == LayerMask.NameToLayer("Water")) - { - waterSurface = hitInfo.collider; - } - else - { - waterSurface = null; - } - return true; - } - point = Vector3.zero; - normal = Vector3.zero; - piece = null; - heightmap = null; - waterSurface = null; - return false; - } - - private void FindHoverObject(out GameObject hover, out Character hoverCreature) - { - hover = null; - hoverCreature = null; - RaycastHit[] array = Physics.RaycastAll(GameCamera.instance.transform.position, GameCamera.instance.transform.forward, 50f, m_interactMask); - Array.Sort(array, (RaycastHit x, RaycastHit y) => x.distance.CompareTo(y.distance)); - RaycastHit[] array2 = array; - for (int i = 0; i < array2.Length; i++) - { - RaycastHit raycastHit = array2[i]; - if ((bool)raycastHit.collider.attachedRigidbody && raycastHit.collider.attachedRigidbody.gameObject == base.gameObject) - { - continue; - } - if (hoverCreature == null) - { - Character character = (raycastHit.collider.attachedRigidbody ? raycastHit.collider.attachedRigidbody.GetComponent<Character>() : raycastHit.collider.GetComponent<Character>()); - if (character != null) - { - hoverCreature = character; - } - } - if (Vector3.Distance(m_eye.position, raycastHit.point) < m_maxInteractDistance) - { - if (raycastHit.collider.GetComponent<Hoverable>() != null) - { - hover = raycastHit.collider.gameObject; - } - else if ((bool)raycastHit.collider.attachedRigidbody) - { - hover = raycastHit.collider.attachedRigidbody.gameObject; - } - else - { - hover = raycastHit.collider.gameObject; - } - } - break; - } - } - - private void Interact(GameObject go, bool hold) - { - if (InAttack() || InDodge() || (hold && Time.time - m_lastHoverInteractTime < 0.2f)) - { - return; - } - Interactable componentInParent = go.GetComponentInParent<Interactable>(); - if (componentInParent != null) - { - m_lastHoverInteractTime = Time.time; - if (componentInParent.Interact(this, hold)) - { - Vector3 forward = go.transform.position - base.transform.position; - forward.y = 0f; - forward.Normalize(); - base.transform.rotation = Quaternion.LookRotation(forward); - m_zanim.SetTrigger("interact"); - } - } - } - - private void UpdateStations(float dt) - { - m_stationDiscoverTimer += dt; - if (m_stationDiscoverTimer > 1f) - { - m_stationDiscoverTimer = 0f; - CraftingStation.UpdateKnownStationsInRange(this); - } - if (!(m_currentStation != null)) - { - return; - } - if (!m_currentStation.InUseDistance(this)) - { - InventoryGui.instance.Hide(); - SetCraftingStation(null); - return; - } - if (!InventoryGui.IsVisible()) - { - SetCraftingStation(null); - return; - } - m_currentStation.PokeInUse(); - if ((bool)m_currentStation && !AlwaysRotateCamera()) - { - Vector3 normalized = (m_currentStation.transform.position - base.transform.position).normalized; - normalized.y = 0f; - normalized.Normalize(); - Quaternion to = Quaternion.LookRotation(normalized); - base.transform.rotation = Quaternion.RotateTowards(base.transform.rotation, to, m_turnSpeed * dt); - } - } - - private void UpdateCover(float dt) - { - m_updateCoverTimer += dt; - if (m_updateCoverTimer > 1f) - { - m_updateCoverTimer = 0f; - Cover.GetCoverForPoint(GetCenterPoint(), out m_coverPercentage, out m_underRoof); - } - } - - public Character GetHoverCreature() - { - return m_hoveringCreature; - } - - public override GameObject GetHoverObject() - { - return m_hovering; - } - - public override void OnNearFire(Vector3 point) - { - m_nearFireTimer = 0f; - } - - public bool InShelter() - { - if (m_coverPercentage >= 0.8f) - { - return m_underRoof; - } - return false; - } - - public float GetStamina() - { - return m_stamina; - } - - public override float GetMaxStamina() - { - return m_maxStamina; - } - - public override float GetStaminaPercentage() - { - return m_stamina / m_maxStamina; - } - - public void SetGodMode(bool godMode) - { - m_godMode = godMode; - } - - public override bool InGodMode() - { - return m_godMode; - } - - public void SetGhostMode(bool ghostmode) - { - m_ghostMode = ghostmode; - } - - public override bool InGhostMode() - { - return m_ghostMode; - } - - public override bool IsDebugFlying() - { - if (m_nview.IsOwner()) - { - return m_debugFly; - } - return m_nview.GetZDO().GetBool("DebugFly"); - } - - public override void AddStamina(float v) - { - m_stamina += v; - if (m_stamina > m_maxStamina) - { - m_stamina = m_maxStamina; - } - } - - public override void UseStamina(float v) - { - if (v != 0f && m_nview.IsValid()) - { - if (m_nview.IsOwner()) - { - RPC_UseStamina(0L, v); - return; - } - m_nview.InvokeRPC("UseStamina", v); - } - } - - private void RPC_UseStamina(long sender, float v) - { - if (v != 0f) - { - m_stamina -= v; - if (m_stamina < 0f) - { - m_stamina = 0f; - } - m_staminaRegenTimer = m_staminaRegenDelay; - } - } - - public override bool HaveStamina(float amount = 0f) - { - if (m_nview.IsValid() && !m_nview.IsOwner()) - { - return m_nview.GetZDO().GetFloat("stamina", m_maxStamina) > amount; - } - return m_stamina > amount; - } - - public void Save(ZPackage pkg) - { - pkg.Write(24); - pkg.Write(GetMaxHealth()); - pkg.Write(GetHealth()); - pkg.Write(GetMaxStamina()); - pkg.Write(m_firstSpawn); - pkg.Write(m_timeSinceDeath); - pkg.Write(m_guardianPower); - pkg.Write(m_guardianPowerCooldown); - m_inventory.Save(pkg); - pkg.Write(m_knownRecipes.Count); - foreach (string knownRecipe in m_knownRecipes) - { - pkg.Write(knownRecipe); - } - pkg.Write(m_knownStations.Count); - foreach (KeyValuePair<string, int> knownStation in m_knownStations) - { - pkg.Write(knownStation.Key); - pkg.Write(knownStation.Value); - } - pkg.Write(m_knownMaterial.Count); - foreach (string item in m_knownMaterial) - { - pkg.Write(item); - } - pkg.Write(m_shownTutorials.Count); - foreach (string shownTutorial in m_shownTutorials) - { - pkg.Write(shownTutorial); - } - pkg.Write(m_uniques.Count); - foreach (string unique in m_uniques) - { - pkg.Write(unique); - } - pkg.Write(m_trophies.Count); - foreach (string trophy in m_trophies) - { - pkg.Write(trophy); - } - pkg.Write(m_knownBiome.Count); - foreach (Heightmap.Biome item2 in m_knownBiome) - { - pkg.Write((int)item2); - } - pkg.Write(m_knownTexts.Count); - foreach (KeyValuePair<string, string> knownText in m_knownTexts) - { - pkg.Write(knownText.Key); - pkg.Write(knownText.Value); - } - pkg.Write(m_beardItem); - pkg.Write(m_hairItem); - pkg.Write(m_skinColor); - pkg.Write(m_hairColor); - pkg.Write(m_modelIndex); - pkg.Write(m_foods.Count); - foreach (Food food in m_foods) - { - pkg.Write(food.m_name); - pkg.Write(food.m_health); - pkg.Write(food.m_stamina); - } - m_skills.Save(pkg); - } - - public void Load(ZPackage pkg) - { - m_isLoading = true; - UnequipAllItems(); - int num = pkg.ReadInt(); - if (num >= 7) - { - SetMaxHealth(pkg.ReadSingle(), flashBar: false); - } - float num2 = pkg.ReadSingle(); - float maxHealth = GetMaxHealth(); - if (num2 <= 0f || num2 > maxHealth || float.IsNaN(num2)) - { - num2 = maxHealth; - } - SetHealth(num2); - if (num >= 10) - { - float stamina = pkg.ReadSingle(); - SetMaxStamina(stamina, flashBar: false); - m_stamina = stamina; - } - if (num >= 8) - { - m_firstSpawn = pkg.ReadBool(); - } - if (num >= 20) - { - m_timeSinceDeath = pkg.ReadSingle(); - } - if (num >= 23) - { - string guardianPower = pkg.ReadString(); - SetGuardianPower(guardianPower); - } - if (num >= 24) - { - m_guardianPowerCooldown = pkg.ReadSingle(); - } - if (num == 2) - { - pkg.ReadZDOID(); - } - m_inventory.Load(pkg); - int num3 = pkg.ReadInt(); - for (int i = 0; i < num3; i++) - { - string item = pkg.ReadString(); - m_knownRecipes.Add(item); - } - if (num < 15) - { - int num4 = pkg.ReadInt(); - for (int j = 0; j < num4; j++) - { - pkg.ReadString(); - } - } - else - { - int num5 = pkg.ReadInt(); - for (int k = 0; k < num5; k++) - { - string key = pkg.ReadString(); - int value = pkg.ReadInt(); - m_knownStations.Add(key, value); - } - } - int num6 = pkg.ReadInt(); - for (int l = 0; l < num6; l++) - { - string item2 = pkg.ReadString(); - m_knownMaterial.Add(item2); - } - if (num < 19 || num >= 21) - { - int num7 = pkg.ReadInt(); - for (int m = 0; m < num7; m++) - { - string item3 = pkg.ReadString(); - m_shownTutorials.Add(item3); - } - } - if (num >= 6) - { - int num8 = pkg.ReadInt(); - for (int n = 0; n < num8; n++) - { - string item4 = pkg.ReadString(); - m_uniques.Add(item4); - } - } - if (num >= 9) - { - int num9 = pkg.ReadInt(); - for (int num10 = 0; num10 < num9; num10++) - { - string item5 = pkg.ReadString(); - m_trophies.Add(item5); - } - } - if (num >= 18) - { - int num11 = pkg.ReadInt(); - for (int num12 = 0; num12 < num11; num12++) - { - Heightmap.Biome item6 = (Heightmap.Biome)pkg.ReadInt(); - m_knownBiome.Add(item6); - } - } - if (num >= 22) - { - int num13 = pkg.ReadInt(); - for (int num14 = 0; num14 < num13; num14++) - { - string key2 = pkg.ReadString(); - string value2 = pkg.ReadString(); - m_knownTexts.Add(key2, value2); - } - } - if (num >= 4) - { - string beard = pkg.ReadString(); - string hair = pkg.ReadString(); - SetBeard(beard); - SetHair(hair); - } - if (num >= 5) - { - Vector3 skinColor = pkg.ReadVector3(); - Vector3 hairColor = pkg.ReadVector3(); - SetSkinColor(skinColor); - SetHairColor(hairColor); - } - if (num >= 11) - { - int playerModel = pkg.ReadInt(); - SetPlayerModel(playerModel); - } - if (num >= 12) - { - m_foods.Clear(); - int num15 = pkg.ReadInt(); - for (int num16 = 0; num16 < num15; num16++) - { - if (num >= 14) - { - Food food = new Food(); - food.m_name = pkg.ReadString(); - food.m_health = pkg.ReadSingle(); - if (num >= 16) - { - food.m_stamina = pkg.ReadSingle(); - } - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(food.m_name); - if (itemPrefab == null) - { - ZLog.LogWarning("FAiled to find food item " + food.m_name); - continue; - } - food.m_item = itemPrefab.GetComponent<ItemDrop>().m_itemData; - m_foods.Add(food); - } - else - { - pkg.ReadString(); - pkg.ReadSingle(); - pkg.ReadSingle(); - pkg.ReadSingle(); - pkg.ReadSingle(); - pkg.ReadSingle(); - pkg.ReadSingle(); - if (num >= 13) - { - pkg.ReadSingle(); - } - } - } - } - if (num >= 17) - { - m_skills.Load(pkg); - } - m_isLoading = false; - UpdateAvailablePiecesList(); - EquipIventoryItems(); - } - - private void EquipIventoryItems() - { - foreach (ItemDrop.ItemData equipedtem in m_inventory.GetEquipedtems()) - { - if (!EquipItem(equipedtem, triggerEquipEffects: false)) - { - equipedtem.m_equiped = false; - } - } - } - - public override bool CanMove() - { - if (m_teleporting) - { - return false; - } - if (InCutscene()) - { - return false; - } - if (IsEncumbered() && !HaveStamina()) - { - return false; - } - return base.CanMove(); - } - - public override bool IsEncumbered() - { - return m_inventory.GetTotalWeight() > GetMaxCarryWeight(); - } - - public float GetMaxCarryWeight() - { - float limit = m_maxCarryWeight; - m_seman.ModifyMaxCarryWeight(limit, ref limit); - return limit; - } - - public override bool HaveUniqueKey(string name) - { - return m_uniques.Contains(name); - } - - public override void AddUniqueKey(string name) - { - if (!m_uniques.Contains(name)) - { - m_uniques.Add(name); - } - } - - public bool IsBiomeKnown(Heightmap.Biome biome) - { - return m_knownBiome.Contains(biome); - } - - public void AddKnownBiome(Heightmap.Biome biome) - { - if (!m_knownBiome.Contains(biome)) - { - m_knownBiome.Add(biome); - if (biome != Heightmap.Biome.Meadows && biome != 0) - { - string text = "$biome_" + biome.ToString().ToLower(); - MessageHud.instance.ShowBiomeFoundMsg(text, playStinger: true); - } - if (biome == Heightmap.Biome.BlackForest && !ZoneSystem.instance.GetGlobalKey("defeated_eikthyr")) - { - ShowTutorial("blackforest"); - } - GoogleAnalyticsV4.instance.LogEvent("Game", "BiomeFound", biome.ToString(), 0L); - } - } - - public bool IsRecipeKnown(string name) - { - return m_knownRecipes.Contains(name); - } - - public void AddKnownRecipe(Recipe recipe) - { - if (!m_knownRecipes.Contains(recipe.m_item.m_itemData.m_shared.m_name)) - { - m_knownRecipes.Add(recipe.m_item.m_itemData.m_shared.m_name); - MessageHud.instance.QueueUnlockMsg(recipe.m_item.m_itemData.GetIcon(), "$msg_newrecipe", recipe.m_item.m_itemData.m_shared.m_name); - GoogleAnalyticsV4.instance.LogEvent("Game", "RecipeFound", recipe.m_item.m_itemData.m_shared.m_name, 0L); - } - } - - public void AddKnownPiece(Piece piece) - { - if (!m_knownRecipes.Contains(piece.m_name)) - { - m_knownRecipes.Add(piece.m_name); - MessageHud.instance.QueueUnlockMsg(piece.m_icon, "$msg_newpiece", piece.m_name); - GoogleAnalyticsV4.instance.LogEvent("Game", "PieceFound", piece.m_name, 0L); - } - } - - public void AddKnownStation(CraftingStation station) - { - int level = station.GetLevel(); - if (m_knownStations.TryGetValue(station.m_name, out var value)) - { - if (value < level) - { - m_knownStations[station.m_name] = level; - MessageHud.instance.QueueUnlockMsg(station.m_icon, "$msg_newstation_level", station.m_name + " $msg_level " + level); - UpdateKnownRecipesList(); - } - } - else - { - m_knownStations.Add(station.m_name, level); - MessageHud.instance.QueueUnlockMsg(station.m_icon, "$msg_newstation", station.m_name); - GoogleAnalyticsV4.instance.LogEvent("Game", "StationFound", station.m_name, 0L); - UpdateKnownRecipesList(); - } - } - - private bool KnowStationLevel(string name, int level) - { - if (m_knownStations.TryGetValue(name, out var value)) - { - return value >= level; - } - return false; - } - - public void AddKnownText(string label, string text) - { - if (label.Length == 0) - { - ZLog.LogWarning("Text " + text + " Is missing label"); - } - else if (!m_knownTexts.ContainsKey(label)) - { - m_knownTexts.Add(label, text); - Message(MessageHud.MessageType.TopLeft, Localization.instance.Localize("$msg_newtext", label), 0, m_textIcon); - } - } - - public List<KeyValuePair<string, string>> GetKnownTexts() - { - return m_knownTexts.ToList(); - } - - public void AddKnownItem(ItemDrop.ItemData item) - { - if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Trophie) - { - AddTrophie(item); - } - if (!m_knownMaterial.Contains(item.m_shared.m_name)) - { - m_knownMaterial.Add(item.m_shared.m_name); - if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Material) - { - MessageHud.instance.QueueUnlockMsg(item.GetIcon(), "$msg_newmaterial", item.m_shared.m_name); - } - else if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Trophie) - { - MessageHud.instance.QueueUnlockMsg(item.GetIcon(), "$msg_newtrophy", item.m_shared.m_name); - } - else - { - MessageHud.instance.QueueUnlockMsg(item.GetIcon(), "$msg_newitem", item.m_shared.m_name); - } - GoogleAnalyticsV4.instance.LogEvent("Game", "ItemFound", item.m_shared.m_name, 0L); - UpdateKnownRecipesList(); - } - } - - private void AddTrophie(ItemDrop.ItemData item) - { - if (item.m_shared.m_itemType == ItemDrop.ItemData.ItemType.Trophie && !m_trophies.Contains(item.m_dropPrefab.name)) - { - m_trophies.Add(item.m_dropPrefab.name); - } - } - - public List<string> GetTrophies() - { - List<string> list = new List<string>(); - list.AddRange(m_trophies); - return list; - } - - private void UpdateKnownRecipesList() - { - if (Game.instance == null) - { - return; - } - foreach (Recipe recipe in ObjectDB.instance.m_recipes) - { - if (recipe.m_enabled && !m_knownRecipes.Contains(recipe.m_item.m_itemData.m_shared.m_name) && HaveRequirements(recipe, discover: true, 0)) - { - AddKnownRecipe(recipe); - } - } - m_tempOwnedPieceTables.Clear(); - m_inventory.GetAllPieceTables(m_tempOwnedPieceTables); - bool flag = false; - foreach (PieceTable tempOwnedPieceTable in m_tempOwnedPieceTables) - { - foreach (GameObject piece in tempOwnedPieceTable.m_pieces) - { - Piece component = piece.GetComponent<Piece>(); - if (component.m_enabled && !m_knownRecipes.Contains(component.m_name) && HaveRequirements(component, RequirementMode.IsKnown)) - { - AddKnownPiece(component); - flag = true; - } - } - } - if (flag) - { - UpdateAvailablePiecesList(); - } - } - - private void UpdateAvailablePiecesList() - { - if (m_buildPieces != null) - { - m_buildPieces.UpdateAvailable(m_knownRecipes, this, m_hideUnavailable, m_noPlacementCost); - } - SetupPlacementGhost(); - } - - public override void Message(MessageHud.MessageType type, string msg, int amount = 0, Sprite icon = null) - { - if (m_nview == null || !m_nview.IsValid()) - { - return; - } - if (m_nview.IsOwner()) - { - if ((bool)MessageHud.instance) - { - MessageHud.instance.ShowMessage(type, msg, amount, icon); - } - } - else - { - m_nview.InvokeRPC("Message", (int)type, msg, amount); - } - } - - private void RPC_Message(long sender, int type, string msg, int amount) - { - if (m_nview.IsOwner() && (bool)MessageHud.instance) - { - MessageHud.instance.ShowMessage((MessageHud.MessageType)type, msg, amount); - } - } - - public static Player GetPlayer(long playerID) - { - foreach (Player player in m_players) - { - if (player.GetPlayerID() == playerID) - { - return player; - } - } - return null; - } - - public static Player GetClosestPlayer(Vector3 point, float maxRange) - { - Player result = null; - float num = 999999f; - foreach (Player player in m_players) - { - float num2 = Vector3.Distance(player.transform.position, point); - if (num2 < num && num2 < maxRange) - { - num = num2; - result = player; - } - } - return result; - } - - public static bool IsPlayerInRange(Vector3 point, float range, long playerID) - { - foreach (Player player in m_players) - { - if (player.GetPlayerID() == playerID) - { - return Utils.DistanceXZ(player.transform.position, point) < range; - } - } - return false; - } - - public static void MessageAllInRange(Vector3 point, float range, MessageHud.MessageType type, string msg, Sprite icon = null) - { - foreach (Player player in m_players) - { - if (Vector3.Distance(player.transform.position, point) < range) - { - player.Message(type, msg, 0, icon); - } - } - } - - public static int GetPlayersInRangeXZ(Vector3 point, float range) - { - int num = 0; - foreach (Player player in m_players) - { - if (Utils.DistanceXZ(player.transform.position, point) < range) - { - num++; - } - } - return num; - } - - public static void GetPlayersInRange(Vector3 point, float range, List<Player> players) - { - foreach (Player player in m_players) - { - if (Vector3.Distance(player.transform.position, point) < range) - { - players.Add(player); - } - } - } - - public static bool IsPlayerInRange(Vector3 point, float range) - { - foreach (Player player in m_players) - { - if (Vector3.Distance(player.transform.position, point) < range) - { - return true; - } - } - return false; - } - - public static bool IsPlayerInRange(Vector3 point, float range, float minNoise) - { - foreach (Player player in m_players) - { - if (Vector3.Distance(player.transform.position, point) < range) - { - float noiseRange = player.GetNoiseRange(); - if (range <= noiseRange && noiseRange >= minNoise) - { - return true; - } - } - } - return false; - } - - public static Player GetPlayerNoiseRange(Vector3 point, float noiseRangeScale = 1f) - { - foreach (Player player in m_players) - { - float num = Vector3.Distance(player.transform.position, point); - float noiseRange = player.GetNoiseRange(); - if (num < noiseRange * noiseRangeScale) - { - return player; - } - } - return null; - } - - public static List<Player> GetAllPlayers() - { - return m_players; - } - - public static Player GetRandomPlayer() - { - if (m_players.Count == 0) - { - return null; - } - return m_players[UnityEngine.Random.Range(0, m_players.Count)]; - } - - public void GetAvailableRecipes(ref List<Recipe> available) - { - available.Clear(); - foreach (Recipe recipe in ObjectDB.instance.m_recipes) - { - if (recipe.m_enabled && (recipe.m_item.m_itemData.m_shared.m_dlc.Length <= 0 || DLCMan.instance.IsDLCInstalled(recipe.m_item.m_itemData.m_shared.m_dlc)) && (m_knownRecipes.Contains(recipe.m_item.m_itemData.m_shared.m_name) || m_noPlacementCost) && (RequiredCraftingStation(recipe, 1, checkLevel: false) || m_noPlacementCost)) - { - available.Add(recipe); - } - } - } - - private void OnInventoryChanged() - { - if (m_isLoading) - { - return; - } - foreach (ItemDrop.ItemData allItem in m_inventory.GetAllItems()) - { - AddKnownItem(allItem); - if (allItem.m_shared.m_name == "$item_hammer") - { - ShowTutorial("hammer"); - } - else if (allItem.m_shared.m_name == "$item_hoe") - { - ShowTutorial("hoe"); - } - else if (allItem.m_shared.m_name == "$item_pickaxe_antler") - { - ShowTutorial("pickaxe"); - } - if (allItem.m_shared.m_name == "$item_trophy_eikthyr") - { - ShowTutorial("boss_trophy"); - } - if (allItem.m_shared.m_name == "$item_wishbone") - { - ShowTutorial("wishbone"); - } - else if (allItem.m_shared.m_name == "$item_copperore" || allItem.m_shared.m_name == "$item_tinore") - { - ShowTutorial("ore"); - } - else if (allItem.m_shared.m_food > 0f) - { - ShowTutorial("food"); - } - } - UpdateKnownRecipesList(); - UpdateAvailablePiecesList(); - } - - public bool InDebugFlyMode() - { - return m_debugFly; - } - - public void ShowTutorial(string name, bool force = false) - { - if (!HaveSeenTutorial(name)) - { - Tutorial.instance.ShowText(name, force); - } - } - - public void SetSeenTutorial(string name) - { - if (name.Length != 0 && !m_shownTutorials.Contains(name)) - { - m_shownTutorials.Add(name); - } - } - - public bool HaveSeenTutorial(string name) - { - if (name.Length == 0) - { - return false; - } - return m_shownTutorials.Contains(name); - } - - public static bool IsSeenTutorialsCleared() - { - if ((bool)m_localPlayer) - { - return m_localPlayer.m_shownTutorials.Count == 0; - } - return true; - } - - public static void ResetSeenTutorials() - { - if ((bool)m_localPlayer) - { - m_localPlayer.m_shownTutorials.Clear(); - } - } - - public void SetMouseLook(Vector2 mouseLook) - { - m_lookYaw *= Quaternion.Euler(0f, mouseLook.x, 0f); - m_lookPitch = Mathf.Clamp(m_lookPitch - mouseLook.y, -89f, 89f); - UpdateEyeRotation(); - m_lookDir = m_eye.forward; - } - - protected override void UpdateEyeRotation() - { - m_eye.rotation = m_lookYaw * Quaternion.Euler(m_lookPitch, 0f, 0f); - } - - public Ragdoll GetRagdoll() - { - return m_ragdoll; - } - - public void OnDodgeMortal() - { - m_dodgeInvincible = false; - } - - private void UpdateDodge(float dt) - { - m_queuedDodgeTimer -= dt; - if (m_queuedDodgeTimer > 0f && IsOnGround() && !IsDead() && !InAttack() && !IsEncumbered() && !InDodge()) - { - float num = m_dodgeStaminaUsage - m_dodgeStaminaUsage * m_equipmentMovementModifier; - if (HaveStamina(num)) - { - AbortEquipQueue(); - m_queuedDodgeTimer = 0f; - m_dodgeInvincible = true; - base.transform.rotation = Quaternion.LookRotation(m_queuedDodgeDir); - m_body.rotation = base.transform.rotation; - m_zanim.SetTrigger("dodge"); - AddNoise(5f); - UseStamina(num); - m_dodgeEffects.Create(base.transform.position, Quaternion.identity, base.transform); - } - else - { - Hud.instance.StaminaBarNoStaminaFlash(); - } - } - AnimatorStateInfo currentAnimatorStateInfo = m_animator.GetCurrentAnimatorStateInfo(0); - AnimatorStateInfo nextAnimatorStateInfo = m_animator.GetNextAnimatorStateInfo(0); - bool flag = m_animator.IsInTransition(0); - bool flag2 = (currentAnimatorStateInfo.tagHash == m_animatorTagDodge && !flag) || (flag && nextAnimatorStateInfo.tagHash == m_animatorTagDodge); - bool value = flag2 && m_dodgeInvincible; - m_nview.GetZDO().Set("dodgeinv", value); - m_inDodge = flag2; - } - - public override bool IsDodgeInvincible() - { - if (!m_nview.IsValid()) - { - return false; - } - return m_nview.GetZDO().GetBool("dodgeinv"); - } - - public override bool InDodge() - { - if (!m_nview.IsValid() || !m_nview.IsOwner()) - { - return false; - } - return m_inDodge; - } - - public override bool IsDead() - { - return m_nview.GetZDO()?.GetBool("dead") ?? false; - } - - protected void Dodge(Vector3 dodgeDir) - { - m_queuedDodgeTimer = 0.5f; - m_queuedDodgeDir = dodgeDir; - } - - public override bool AlwaysRotateCamera() - { - if ((GetCurrentWeapon() != null && m_currentAttack != null && m_lastCombatTimer < 1f && m_currentAttack.m_attackType != Attack.AttackType.None && ZInput.IsMouseActive()) || IsHoldingAttack() || m_blocking) - { - return true; - } - if (InPlaceMode()) - { - Vector3 from = GetLookYaw() * Vector3.forward; - Vector3 forward = base.transform.forward; - if (Vector3.Angle(from, forward) > 90f) - { - return true; - } - } - return false; - } - - public override bool TeleportTo(Vector3 pos, Quaternion rot, bool distantTeleport) - { - if (IsTeleporting()) - { - return false; - } - if (m_teleportCooldown < 2f) - { - return false; - } - m_teleporting = true; - m_distantTeleport = distantTeleport; - m_teleportTimer = 0f; - m_teleportCooldown = 0f; - m_teleportFromPos = base.transform.position; - m_teleportFromRot = base.transform.rotation; - m_teleportTargetPos = pos; - m_teleportTargetRot = rot; - return true; - } - - private void UpdateTeleport(float dt) - { - if (!m_teleporting) - { - m_teleportCooldown += dt; - return; - } - m_teleportCooldown = 0f; - m_teleportTimer += dt; - if (!(m_teleportTimer > 2f)) - { - return; - } - Vector3 lookDir = m_teleportTargetRot * Vector3.forward; - base.transform.position = m_teleportTargetPos; - base.transform.rotation = m_teleportTargetRot; - m_body.velocity = Vector3.zero; - m_maxAirAltitude = base.transform.position.y; - SetLookDir(lookDir); - if ((!(m_teleportTimer > 8f) && m_distantTeleport) || !ZNetScene.instance.IsAreaReady(m_teleportTargetPos)) - { - return; - } - float height = 0f; - if (ZoneSystem.instance.FindFloor(m_teleportTargetPos, out height)) - { - m_teleportTimer = 0f; - m_teleporting = false; - ResetCloth(); - } - else if (m_teleportTimer > 15f || !m_distantTeleport) - { - if (m_distantTeleport) - { - Vector3 position = base.transform.position; - position.y = ZoneSystem.instance.GetSolidHeight(m_teleportTargetPos) + 0.5f; - base.transform.position = position; - } - else - { - base.transform.rotation = m_teleportFromRot; - base.transform.position = m_teleportFromPos; - m_maxAirAltitude = base.transform.position.y; - Message(MessageHud.MessageType.Center, "$msg_portal_blocked"); - } - m_teleportTimer = 0f; - m_teleporting = false; - ResetCloth(); - } - } - - public override bool IsTeleporting() - { - return m_teleporting; - } - - public bool ShowTeleportAnimation() - { - if (m_teleporting) - { - return m_distantTeleport; - } - return false; - } - - public void SetPlayerModel(int index) - { - if (m_modelIndex != index) - { - m_modelIndex = index; - m_visEquipment.SetModel(index); - } - } - - public int GetPlayerModel() - { - return m_modelIndex; - } - - public void SetSkinColor(Vector3 color) - { - if (!(color == m_skinColor)) - { - m_skinColor = color; - m_visEquipment.SetSkinColor(m_skinColor); - } - } - - public void SetHairColor(Vector3 color) - { - if (!(m_hairColor == color)) - { - m_hairColor = color; - m_visEquipment.SetHairColor(m_hairColor); - } - } - - protected override void SetupVisEquipment(VisEquipment visEq, bool isRagdoll) - { - base.SetupVisEquipment(visEq, isRagdoll); - visEq.SetModel(m_modelIndex); - visEq.SetSkinColor(m_skinColor); - visEq.SetHairColor(m_hairColor); - } - - public override bool CanConsumeItem(ItemDrop.ItemData item) - { - if (item.m_shared.m_itemType != ItemDrop.ItemData.ItemType.Consumable) - { - return false; - } - if (item.m_shared.m_food > 0f && !CanEat(item, showMessages: true)) - { - return false; - } - if ((bool)item.m_shared.m_consumeStatusEffect) - { - StatusEffect consumeStatusEffect = item.m_shared.m_consumeStatusEffect; - if (m_seman.HaveStatusEffect(item.m_shared.m_consumeStatusEffect.name) || m_seman.HaveStatusEffectCategory(consumeStatusEffect.m_category)) - { - Message(MessageHud.MessageType.Center, "$msg_cantconsume"); - return false; - } - } - return true; - } - - public override bool ConsumeItem(Inventory inventory, ItemDrop.ItemData item) - { - if (!CanConsumeItem(item)) - { - return false; - } - if ((bool)item.m_shared.m_consumeStatusEffect) - { - _ = item.m_shared.m_consumeStatusEffect; - m_seman.AddStatusEffect(item.m_shared.m_consumeStatusEffect, resetTime: true); - } - if (item.m_shared.m_food > 0f) - { - EatFood(item); - } - inventory.RemoveOneItem(item); - return true; - } - - public void SetIntro(bool intro) - { - if (m_intro != intro) - { - m_intro = intro; - m_zanim.SetBool("intro", intro); - } - } - - public override bool InIntro() - { - return m_intro; - } - - public override bool InCutscene() - { - if (m_animator.GetCurrentAnimatorStateInfo(0).tagHash == m_animatorTagCutscene) - { - return true; - } - if (InIntro()) - { - return true; - } - if (m_sleeping) - { - return true; - } - return base.InCutscene(); - } - - public void SetMaxStamina(float stamina, bool flashBar) - { - if (flashBar && Hud.instance != null && stamina > m_maxStamina) - { - Hud.instance.StaminaBarUppgradeFlash(); - } - m_maxStamina = stamina; - m_stamina = Mathf.Clamp(m_stamina, 0f, m_maxStamina); - } - - public void SetMaxHealth(float health, bool flashBar) - { - if (flashBar && Hud.instance != null && health > GetMaxHealth()) - { - Hud.instance.FlashHealthBar(); - } - SetMaxHealth(health); - } - - public override bool IsPVPEnabled() - { - if (!m_nview.IsValid()) - { - return false; - } - if (m_nview.IsOwner()) - { - return m_pvp; - } - return m_nview.GetZDO().GetBool("pvp"); - } - - public void SetPVP(bool enabled) - { - if (m_pvp != enabled) - { - m_pvp = enabled; - m_nview.GetZDO().Set("pvp", m_pvp); - if (m_pvp) - { - Message(MessageHud.MessageType.Center, "$msg_pvpon"); - } - else - { - Message(MessageHud.MessageType.Center, "$msg_pvpoff"); - } - } - } - - public bool CanSwitchPVP() - { - return m_lastCombatTimer > 10f; - } - - public bool NoCostCheat() - { - return m_noPlacementCost; - } - - public void StartEmote(string emote, bool oneshot = true) - { - if (CanMove() && !InAttack() && !IsHoldingAttack()) - { - SetCrouch(crouch: false); - int @int = m_nview.GetZDO().GetInt("emoteID"); - m_nview.GetZDO().Set("emoteID", @int + 1); - m_nview.GetZDO().Set("emote", emote); - m_nview.GetZDO().Set("emote_oneshot", oneshot); - } - } - - protected override void StopEmote() - { - if (m_nview.GetZDO().GetString("emote") != "") - { - int @int = m_nview.GetZDO().GetInt("emoteID"); - m_nview.GetZDO().Set("emoteID", @int + 1); - m_nview.GetZDO().Set("emote", ""); - } - } - - private void UpdateEmote() - { - if (m_nview.IsOwner() && InEmote() && m_moveDir != Vector3.zero) - { - StopEmote(); - } - int @int = m_nview.GetZDO().GetInt("emoteID"); - if (@int == m_emoteID) - { - return; - } - m_emoteID = @int; - if (!string.IsNullOrEmpty(m_emoteState)) - { - m_animator.SetBool("emote_" + m_emoteState, value: false); - } - m_emoteState = ""; - m_animator.SetTrigger("emote_stop"); - string @string = m_nview.GetZDO().GetString("emote"); - if (!string.IsNullOrEmpty(@string)) - { - bool @bool = m_nview.GetZDO().GetBool("emote_oneshot"); - m_animator.ResetTrigger("emote_stop"); - if (@bool) - { - m_animator.SetTrigger("emote_" + @string); - return; - } - m_emoteState = @string; - m_animator.SetBool("emote_" + @string, value: true); - } - } - - public override bool InEmote() - { - if (!string.IsNullOrEmpty(m_emoteState)) - { - return true; - } - return m_animator.GetCurrentAnimatorStateInfo(0).tagHash == m_animatorTagEmote; - } - - public override bool IsCrouching() - { - return m_animator.GetCurrentAnimatorStateInfo(0).tagHash == m_animatorTagCrouch; - } - - private void UpdateCrouch(float dt) - { - if (m_crouchToggled) - { - if (!HaveStamina() || IsSwiming() || InBed() || InPlaceMode() || m_run || IsBlocking() || IsFlying()) - { - SetCrouch(crouch: false); - } - bool flag = InAttack() || IsHoldingAttack(); - m_zanim.SetBool(crouching, m_crouchToggled && !flag); - } - else - { - m_zanim.SetBool(crouching, value: false); - } - } - - protected override void SetCrouch(bool crouch) - { - if (m_crouchToggled != crouch) - { - m_crouchToggled = crouch; - } - } - - public void SetGuardianPower(string name) - { - m_guardianPower = name; - m_guardianSE = ObjectDB.instance.GetStatusEffect(m_guardianPower); - } - - public string GetGuardianPowerName() - { - return m_guardianPower; - } - - public void GetGuardianPowerHUD(out StatusEffect se, out float cooldown) - { - se = m_guardianSE; - cooldown = m_guardianPowerCooldown; - } - - public bool StartGuardianPower() - { - if (m_guardianSE == null) - { - return false; - } - if ((InAttack() && !HaveQueuedChain()) || InDodge() || !CanMove() || IsKnockedBack() || IsStaggering() || InMinorAction()) - { - return false; - } - if (m_guardianPowerCooldown > 0f) - { - Message(MessageHud.MessageType.Center, "$hud_powernotready"); - return false; - } - m_zanim.SetTrigger("gpower"); - return true; - } - - public bool ActivateGuardianPower() - { - if (m_guardianPowerCooldown > 0f) - { - return false; - } - if (m_guardianSE == null) - { - return false; - } - List<Player> list = new List<Player>(); - GetPlayersInRange(base.transform.position, 10f, list); - foreach (Player item in list) - { - item.GetSEMan().AddStatusEffect(m_guardianSE.name, resetTime: true); - } - m_guardianPowerCooldown = m_guardianSE.m_cooldown; - return false; - } - - private void UpdateGuardianPower(float dt) - { - m_guardianPowerCooldown -= dt; - if (m_guardianPowerCooldown < 0f) - { - m_guardianPowerCooldown = 0f; - } - } - - public override void AttachStart(Transform attachPoint, bool hideWeapons, bool isBed, string attachAnimation, Vector3 detachOffset) - { - if (!m_attached) - { - m_attached = true; - m_attachPoint = attachPoint; - m_detachOffset = detachOffset; - m_attachAnimation = attachAnimation; - m_zanim.SetBool(attachAnimation, value: true); - m_nview.GetZDO().Set("inBed", isBed); - if (hideWeapons) - { - HideHandItems(); - } - ResetCloth(); - } - } - - private void UpdateAttach() - { - if (m_attached) - { - if (m_attachPoint != null) - { - base.transform.position = m_attachPoint.position; - base.transform.rotation = m_attachPoint.rotation; - Rigidbody componentInParent = m_attachPoint.GetComponentInParent<Rigidbody>(); - m_body.useGravity = false; - m_body.velocity = (componentInParent ? componentInParent.GetPointVelocity(base.transform.position) : Vector3.zero); - m_body.angularVelocity = Vector3.zero; - m_maxAirAltitude = base.transform.position.y; - } - else - { - AttachStop(); - } - } - } - - public override bool IsAttached() - { - return m_attached; - } - - public override bool InBed() - { - if (!m_nview.IsValid()) - { - return false; - } - return m_nview.GetZDO().GetBool("inBed"); - } - - public override void AttachStop() - { - if (!m_sleeping && m_attached) - { - if (m_attachPoint != null) - { - base.transform.position = m_attachPoint.TransformPoint(m_detachOffset); - } - m_body.useGravity = true; - m_attached = false; - m_attachPoint = null; - m_zanim.SetBool(m_attachAnimation, value: false); - m_nview.GetZDO().Set("inBed", value: false); - ResetCloth(); - } - } - - public void StartShipControl(ShipControlls shipControl) - { - m_shipControl = shipControl; - ZLog.Log("ship controlls set " + shipControl.GetShip().gameObject.name); - } - - public void StopShipControl() - { - if (m_shipControl != null) - { - if ((bool)m_shipControl) - { - m_shipControl.OnUseStop(this); - } - ZLog.Log("Stop ship controlls"); - m_shipControl = null; - } - } - - private void SetShipControl(ref Vector3 moveDir) - { - m_shipControl.GetShip().ApplyMovementControlls(moveDir); - moveDir = Vector3.zero; - } - - public Ship GetControlledShip() - { - if ((bool)m_shipControl) - { - return m_shipControl.GetShip(); - } - return null; - } - - public ShipControlls GetShipControl() - { - return m_shipControl; - } - - private void UpdateShipControl(float dt) - { - if ((bool)m_shipControl) - { - Vector3 forward = m_shipControl.GetShip().transform.forward; - forward.y = 0f; - forward.Normalize(); - Quaternion to = Quaternion.LookRotation(forward); - base.transform.rotation = Quaternion.RotateTowards(base.transform.rotation, to, 100f * dt); - if (Vector3.Distance(m_shipControl.transform.position, base.transform.position) > m_maxInteractDistance) - { - StopShipControl(); - } - } - } - - public bool IsSleeping() - { - return m_sleeping; - } - - public void SetSleeping(bool sleep) - { - if (m_sleeping != sleep) - { - m_sleeping = sleep; - if (!sleep) - { - Message(MessageHud.MessageType.Center, "$msg_goodmorning"); - m_seman.AddStatusEffect("Rested", resetTime: true); - } - } - } - - public void SetControls(Vector3 movedir, bool attack, bool attackHold, bool secondaryAttack, bool block, bool blockHold, bool jump, bool crouch, bool run, bool autoRun) - { - if ((movedir != Vector3.zero || attack || secondaryAttack || block || blockHold || jump || crouch) && GetControlledShip() == null) - { - StopEmote(); - AttachStop(); - } - if ((bool)m_shipControl) - { - SetShipControl(ref movedir); - if (jump) - { - StopShipControl(); - } - } - if (run) - { - m_walk = false; - } - if (!m_autoRun) - { - Vector3 lookDir = m_lookDir; - lookDir.y = 0f; - lookDir.Normalize(); - m_moveDir = movedir.z * lookDir + movedir.x * Vector3.Cross(Vector3.up, lookDir); - } - if (!m_autoRun && autoRun && !InPlaceMode()) - { - m_autoRun = true; - SetCrouch(crouch: false); - m_moveDir = m_lookDir; - m_moveDir.y = 0f; - m_moveDir.Normalize(); - } - else if (m_autoRun) - { - if (attack || jump || crouch || movedir != Vector3.zero || InPlaceMode() || attackHold) - { - m_autoRun = false; - } - else if (autoRun || blockHold) - { - m_moveDir = m_lookDir; - m_moveDir.y = 0f; - m_moveDir.Normalize(); - blockHold = false; - block = false; - } - } - m_attack = attack; - m_attackDraw = attackHold; - m_secondaryAttack = secondaryAttack; - m_blocking = blockHold; - m_run = run; - if (crouch) - { - SetCrouch(!m_crouchToggled); - } - if (!jump) - { - return; - } - if (m_blocking) - { - Vector3 dodgeDir = m_moveDir; - if (dodgeDir.magnitude < 0.1f) - { - dodgeDir = -m_lookDir; - dodgeDir.y = 0f; - dodgeDir.Normalize(); - } - Dodge(dodgeDir); - } - else if (IsCrouching() || m_crouchToggled) - { - Vector3 dodgeDir2 = m_moveDir; - if (dodgeDir2.magnitude < 0.1f) - { - dodgeDir2 = m_lookDir; - dodgeDir2.y = 0f; - dodgeDir2.Normalize(); - } - Dodge(dodgeDir2); - } - else - { - Jump(); - } - } - - private void UpdateTargeted(float dt) - { - m_timeSinceTargeted += dt; - m_timeSinceSensed += dt; - } - - public override void OnTargeted(bool sensed, bool alerted) - { - if (sensed) - { - if (m_timeSinceSensed > 0.5f) - { - m_timeSinceSensed = 0f; - m_nview.InvokeRPC("OnTargeted", sensed, alerted); - } - } - else if (m_timeSinceTargeted > 0.5f) - { - m_timeSinceTargeted = 0f; - m_nview.InvokeRPC("OnTargeted", sensed, alerted); - } - } - - private void RPC_OnTargeted(long sender, bool sensed, bool alerted) - { - m_timeSinceTargeted = 0f; - if (sensed) - { - m_timeSinceSensed = 0f; - } - if (alerted) - { - MusicMan.instance.ResetCombatTimer(); - } - } - - protected override void OnDamaged(HitData hit) - { - base.OnDamaged(hit); - Hud.instance.DamageFlash(); - } - - public bool IsTargeted() - { - return m_timeSinceTargeted < 1f; - } - - public bool IsSensed() - { - return m_timeSinceSensed < 1f; - } - - protected override void ApplyArmorDamageMods(ref HitData.DamageModifiers mods) - { - if (m_chestItem != null) - { - mods.Apply(m_chestItem.m_shared.m_damageModifiers); - } - if (m_legItem != null) - { - mods.Apply(m_legItem.m_shared.m_damageModifiers); - } - if (m_helmetItem != null) - { - mods.Apply(m_helmetItem.m_shared.m_damageModifiers); - } - if (m_shoulderItem != null) - { - mods.Apply(m_shoulderItem.m_shared.m_damageModifiers); - } - } - - public override float GetBodyArmor() - { - float num = 0f; - if (m_chestItem != null) - { - num += m_chestItem.GetArmor(); - } - if (m_legItem != null) - { - num += m_legItem.GetArmor(); - } - if (m_helmetItem != null) - { - num += m_helmetItem.GetArmor(); - } - if (m_shoulderItem != null) - { - num += m_shoulderItem.GetArmor(); - } - return num; - } - - protected override void OnSneaking(float dt) - { - float t = Mathf.Pow(m_skills.GetSkillFactor(Skills.SkillType.Sneak), 0.5f); - float num = Mathf.Lerp(1f, 0.25f, t); - UseStamina(dt * m_sneakStaminaDrain * num); - if (!HaveStamina()) - { - Hud.instance.StaminaBarNoStaminaFlash(); - } - m_sneakSkillImproveTimer += dt; - if (m_sneakSkillImproveTimer > 1f) - { - m_sneakSkillImproveTimer = 0f; - if (BaseAI.InStealthRange(this)) - { - RaiseSkill(Skills.SkillType.Sneak); - } - else - { - RaiseSkill(Skills.SkillType.Sneak, 0.1f); - } - } - } - - private void UpdateStealth(float dt) - { - m_stealthFactorUpdateTimer += dt; - if (m_stealthFactorUpdateTimer > 0.5f) - { - m_stealthFactorUpdateTimer = 0f; - m_stealthFactorTarget = 0f; - if (IsCrouching()) - { - m_lastStealthPosition = base.transform.position; - float skillFactor = m_skills.GetSkillFactor(Skills.SkillType.Sneak); - float lightFactor = StealthSystem.instance.GetLightFactor(GetCenterPoint()); - m_stealthFactorTarget = Mathf.Lerp(0.25f + lightFactor * 0.75f, lightFactor * 0.3f, skillFactor); - m_stealthFactorTarget = Mathf.Clamp01(m_stealthFactorTarget); - m_seman.ModifyStealth(m_stealthFactorTarget, ref m_stealthFactorTarget); - m_stealthFactorTarget = Mathf.Clamp01(m_stealthFactorTarget); - } - else - { - m_stealthFactorTarget = 1f; - } - } - m_stealthFactor = Mathf.MoveTowards(m_stealthFactor, m_stealthFactorTarget, dt / 4f); - m_nview.GetZDO().Set("Stealth", m_stealthFactor); - } - - public override float GetStealthFactor() - { - if (!m_nview.IsValid()) - { - return 0f; - } - if (m_nview.IsOwner()) - { - return m_stealthFactor; - } - return m_nview.GetZDO().GetFloat("Stealth"); - } - - public override bool InAttack() - { - if (m_animator.IsInTransition(0)) - { - if (m_animator.GetNextAnimatorStateInfo(0).tagHash == Humanoid.m_animatorTagAttack) - { - return true; - } - if (m_animator.GetNextAnimatorStateInfo(1).tagHash == Humanoid.m_animatorTagAttack) - { - return true; - } - return false; - } - if (m_animator.GetCurrentAnimatorStateInfo(0).tagHash == Humanoid.m_animatorTagAttack) - { - return true; - } - if (m_animator.GetCurrentAnimatorStateInfo(1).tagHash == Humanoid.m_animatorTagAttack) - { - return true; - } - return false; - } - - public override float GetEquipmentMovementModifier() - { - return m_equipmentMovementModifier; - } - - protected override float GetJogSpeedFactor() - { - return 1f + m_equipmentMovementModifier; - } - - protected override float GetRunSpeedFactor() - { - float skillFactor = m_skills.GetSkillFactor(Skills.SkillType.Run); - return (1f + skillFactor * 0.25f) * (1f + m_equipmentMovementModifier * 1.5f); - } - - public override bool InMinorAction() - { - return (m_animator.IsInTransition(1) ? m_animator.GetNextAnimatorStateInfo(1) : m_animator.GetCurrentAnimatorStateInfo(1)).tagHash == m_animatorTagMinorAction; - } - - public override bool GetRelativePosition(out ZDOID parent, out Vector3 relativePos, out Vector3 relativeVel) - { - if (m_attached && (bool)m_attachPoint) - { - ZNetView componentInParent = m_attachPoint.GetComponentInParent<ZNetView>(); - if ((bool)componentInParent && componentInParent.IsValid()) - { - parent = componentInParent.GetZDO().m_uid; - relativePos = componentInParent.transform.InverseTransformPoint(base.transform.position); - relativeVel = Vector3.zero; - return true; - } - } - return base.GetRelativePosition(out parent, out relativePos, out relativeVel); - } - - public override Skills GetSkills() - { - return m_skills; - } - - public override float GetRandomSkillFactor(Skills.SkillType skill) - { - return m_skills.GetRandomSkillFactor(skill); - } - - public override float GetSkillFactor(Skills.SkillType skill) - { - return m_skills.GetSkillFactor(skill); - } - - protected override void DoDamageCameraShake(HitData hit) - { - if ((bool)GameCamera.instance && hit.GetTotalPhysicalDamage() > 0f) - { - float num = Mathf.Clamp01(hit.GetTotalPhysicalDamage() / GetMaxHealth()); - GameCamera.instance.AddShake(base.transform.position, 50f, m_baseCameraShake * num, continous: false); - } - } - - protected override bool ToggleEquiped(ItemDrop.ItemData item) - { - if (item.IsEquipable()) - { - if (InAttack()) - { - return true; - } - if (item.m_shared.m_equipDuration <= 0f) - { - if (IsItemEquiped(item)) - { - UnequipItem(item); - } - else - { - EquipItem(item); - } - } - else if (IsItemEquiped(item)) - { - QueueUnequipItem(item); - } - else - { - QueueEquipItem(item); - } - return true; - } - return false; - } - - public void GetActionProgress(out string name, out float progress) - { - if (m_equipQueue.Count > 0) - { - EquipQueueData equipQueueData = m_equipQueue[0]; - if (equipQueueData.m_duration > 0.5f) - { - if (equipQueueData.m_equip) - { - name = "$hud_equipping " + equipQueueData.m_item.m_shared.m_name; - } - else - { - name = "$hud_unequipping " + equipQueueData.m_item.m_shared.m_name; - } - progress = Mathf.Clamp01(equipQueueData.m_time / equipQueueData.m_duration); - return; - } - } - name = null; - progress = 0f; - } - - private void UpdateEquipQueue(float dt) - { - if (m_equipQueuePause > 0f) - { - m_equipQueuePause -= dt; - m_zanim.SetBool("equipping", value: false); - return; - } - m_zanim.SetBool("equipping", m_equipQueue.Count > 0); - if (m_equipQueue.Count == 0) - { - return; - } - EquipQueueData equipQueueData = m_equipQueue[0]; - if (equipQueueData.m_time == 0f && equipQueueData.m_duration >= 1f) - { - m_equipStartEffects.Create(base.transform.position, Quaternion.identity); - } - equipQueueData.m_time += dt; - if (equipQueueData.m_time > equipQueueData.m_duration) - { - m_equipQueue.RemoveAt(0); - if (equipQueueData.m_equip) - { - EquipItem(equipQueueData.m_item); - } - else - { - UnequipItem(equipQueueData.m_item); - } - m_equipQueuePause = 0.3f; - } - } - - private void QueueEquipItem(ItemDrop.ItemData item) - { - if (item != null) - { - if (IsItemQueued(item)) - { - RemoveFromEquipQueue(item); - return; - } - EquipQueueData equipQueueData = new EquipQueueData(); - equipQueueData.m_item = item; - equipQueueData.m_equip = true; - equipQueueData.m_duration = item.m_shared.m_equipDuration; - m_equipQueue.Add(equipQueueData); - } - } - - private void QueueUnequipItem(ItemDrop.ItemData item) - { - if (item != null) - { - if (IsItemQueued(item)) - { - RemoveFromEquipQueue(item); - return; - } - EquipQueueData equipQueueData = new EquipQueueData(); - equipQueueData.m_item = item; - equipQueueData.m_equip = false; - equipQueueData.m_duration = item.m_shared.m_equipDuration; - m_equipQueue.Add(equipQueueData); - } - } - - public override void AbortEquipQueue() - { - m_equipQueue.Clear(); - } - - public override void RemoveFromEquipQueue(ItemDrop.ItemData item) - { - if (item == null) - { - return; - } - foreach (EquipQueueData item2 in m_equipQueue) - { - if (item2.m_item == item) - { - m_equipQueue.Remove(item2); - break; - } - } - } - - public bool IsItemQueued(ItemDrop.ItemData item) - { - if (item == null) - { - return false; - } - foreach (EquipQueueData item2 in m_equipQueue) - { - if (item2.m_item == item) - { - return true; - } - } - return false; - } - - public void ResetCharacter() - { - m_guardianPowerCooldown = 0f; - ResetSeenTutorials(); - m_knownRecipes.Clear(); - m_knownStations.Clear(); - m_knownMaterial.Clear(); - m_uniques.Clear(); - m_trophies.Clear(); - m_skills.Clear(); - m_knownBiome.Clear(); - m_knownTexts.Clear(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/PlayerController.cs b/Valheim_v202102/Valheim/assembly_valheim/PlayerController.cs deleted file mode 100644 index d589690..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/PlayerController.cs +++ /dev/null @@ -1,173 +0,0 @@ -using UnityEngine; - -public class PlayerController : MonoBehaviour -{ - private Player m_character; - - private ZNetView m_nview; - - public static float m_mouseSens = 1f; - - public static bool m_invertMouse = false; - - public float m_minDodgeTime = 0.2f; - - private bool m_attackWasPressed; - - private bool m_secondAttackWasPressed; - - private bool m_blockWasPressed; - - private bool m_lastJump; - - private bool m_lastCrouch; - - private void Awake() - { - m_character = GetComponent<Player>(); - m_nview = GetComponent<ZNetView>(); - if (m_nview.GetZDO() == null) - { - base.enabled = false; - return; - } - m_mouseSens = PlayerPrefs.GetFloat("MouseSensitivity", m_mouseSens); - m_invertMouse = PlayerPrefs.GetInt("InvertMouse", 0) == 1; - } - - private void FixedUpdate() - { - if ((bool)m_nview && !m_nview.IsOwner()) - { - return; - } - if (!TakeInput()) - { - m_character.SetControls(Vector3.zero, attack: false, attackHold: false, secondaryAttack: false, block: false, blockHold: false, jump: false, crouch: false, run: false, autoRun: false); - return; - } - bool flag = InInventoryEtc(); - Vector3 zero = Vector3.zero; - if (ZInput.GetButton("Forward")) - { - zero.z += 1f; - } - if (ZInput.GetButton("Backward")) - { - zero.z -= 1f; - } - if (ZInput.GetButton("Left")) - { - zero.x -= 1f; - } - if (ZInput.GetButton("Right")) - { - zero.x += 1f; - } - zero.x += ZInput.GetJoyLeftStickX(); - zero.z += 0f - ZInput.GetJoyLeftStickY(); - if (zero.magnitude > 1f) - { - zero.Normalize(); - } - bool flag2 = (ZInput.GetButton("Attack") || ZInput.GetButton("JoyAttack")) && !flag; - bool attackHold = flag2; - bool attack = flag2 && !m_attackWasPressed; - m_attackWasPressed = flag2; - bool flag3 = (ZInput.GetButton("SecondAttack") || ZInput.GetButton("JoySecondAttack")) && !flag; - bool secondaryAttack = flag3 && !m_secondAttackWasPressed; - m_secondAttackWasPressed = flag3; - bool flag4 = (ZInput.GetButton("Block") || ZInput.GetButton("JoyBlock")) && !flag; - bool blockHold = flag4; - bool block = flag4 && !m_blockWasPressed; - m_blockWasPressed = flag4; - bool button = ZInput.GetButton("Jump"); - bool jump = (button && !m_lastJump) || ZInput.GetButtonDown("JoyJump"); - m_lastJump = button; - bool flag5 = InventoryGui.IsVisible(); - bool flag6 = (ZInput.GetButton("Crouch") || ZInput.GetButton("JoyCrouch")) && !flag5; - bool crouch = flag6 && !m_lastCrouch; - m_lastCrouch = flag6; - bool run = ZInput.GetButton("Run") || ZInput.GetButton("JoyRun"); - bool button2 = ZInput.GetButton("AutoRun"); - m_character.SetControls(zero, attack, attackHold, secondaryAttack, block, blockHold, jump, crouch, run, button2); - } - - private static bool DetectTap(bool pressed, float dt, float minPressTime, bool run, ref float pressTimer, ref float releasedTimer, ref bool tapPressed) - { - bool result = false; - if (pressed) - { - if ((releasedTimer > 0f && releasedTimer < minPressTime) & tapPressed) - { - tapPressed = false; - result = true; - } - pressTimer += dt; - releasedTimer = 0f; - } - else - { - if (pressTimer > 0f) - { - tapPressed = pressTimer < minPressTime; - if (run & tapPressed) - { - tapPressed = false; - result = true; - } - } - releasedTimer += dt; - pressTimer = 0f; - } - return result; - } - - private bool TakeInput() - { - if (GameCamera.InFreeFly()) - { - return false; - } - if ((!Chat.instance || !Chat.instance.HasFocus()) && !Menu.IsVisible() && !Console.IsVisible() && !TextInput.IsVisible() && !Minimap.InTextInput() && (!ZInput.IsGamepadActive() || !Minimap.IsOpen()) && (!ZInput.IsGamepadActive() || !InventoryGui.IsVisible()) && (!ZInput.IsGamepadActive() || !StoreGui.IsVisible())) - { - if (ZInput.IsGamepadActive()) - { - return !Hud.IsPieceSelectionVisible(); - } - return true; - } - return false; - } - - private bool InInventoryEtc() - { - if (!InventoryGui.IsVisible() && !Minimap.IsOpen() && !StoreGui.IsVisible()) - { - return Hud.IsPieceSelectionVisible(); - } - return true; - } - - private void LateUpdate() - { - if (!TakeInput() || InInventoryEtc()) - { - m_character.SetMouseLook(Vector2.zero); - return; - } - Vector2 zero = Vector2.zero; - zero.x = Input.GetAxis("Mouse X") * m_mouseSens; - zero.y = Input.GetAxis("Mouse Y") * m_mouseSens; - if (!m_character.InPlaceMode() || !ZInput.GetButton("JoyRotate")) - { - zero.x += ZInput.GetJoyRightStickX() * 110f * Time.deltaTime; - zero.y += (0f - ZInput.GetJoyRightStickY()) * 110f * Time.deltaTime; - } - if (m_invertMouse) - { - zero.y *= -1f; - } - m_character.SetMouseLook(zero); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/PlayerCustomizaton.cs b/Valheim_v202102/Valheim/assembly_valheim/PlayerCustomizaton.cs deleted file mode 100644 index 6113453..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/PlayerCustomizaton.cs +++ /dev/null @@ -1,176 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class PlayerCustomizaton : MonoBehaviour -{ - public Color m_skinColor0 = Color.white; - - public Color m_skinColor1 = Color.white; - - public Color m_hairColor0 = Color.white; - - public Color m_hairColor1 = Color.white; - - public float m_hairMaxLevel = 1f; - - public float m_hairMinLevel = 0.1f; - - public Text m_selectedBeard; - - public Text m_selectedHair; - - public Slider m_skinHue; - - public Slider m_hairLevel; - - public Slider m_hairTone; - - public RectTransform m_beardPanel; - - public Toggle m_maleToggle; - - public Toggle m_femaleToggle; - - public ItemDrop m_noHair; - - public ItemDrop m_noBeard; - - private List<ItemDrop> m_beards; - - private List<ItemDrop> m_hairs; - - private void OnEnable() - { - m_maleToggle.isOn = true; - m_femaleToggle.isOn = false; - m_beardPanel.gameObject.SetActive(value: true); - m_beards = ObjectDB.instance.GetAllItems(ItemDrop.ItemData.ItemType.Customization, "Beard"); - m_hairs = ObjectDB.instance.GetAllItems(ItemDrop.ItemData.ItemType.Customization, "Hair"); - m_beards.Sort((ItemDrop x, ItemDrop y) => Localization.instance.Localize(x.m_itemData.m_shared.m_name).CompareTo(Localization.instance.Localize(y.m_itemData.m_shared.m_name))); - m_hairs.Sort((ItemDrop x, ItemDrop y) => Localization.instance.Localize(x.m_itemData.m_shared.m_name).CompareTo(Localization.instance.Localize(y.m_itemData.m_shared.m_name))); - m_beards.Remove(m_noBeard); - m_beards.Insert(0, m_noBeard); - m_hairs.Remove(m_noHair); - m_hairs.Insert(0, m_noHair); - } - - private void Update() - { - if (!(GetPlayer() == null)) - { - m_selectedHair.text = Localization.instance.Localize(GetHair()); - m_selectedBeard.text = Localization.instance.Localize(GetBeard()); - Color c = Color.Lerp(m_skinColor0, m_skinColor1, m_skinHue.value); - GetPlayer().SetSkinColor(Utils.ColorToVec3(c)); - Color c2 = Color.Lerp(m_hairColor0, m_hairColor1, m_hairTone.value) * Mathf.Lerp(m_hairMinLevel, m_hairMaxLevel, m_hairLevel.value); - GetPlayer().SetHairColor(Utils.ColorToVec3(c2)); - } - } - - private Player GetPlayer() - { - return GetComponentInParent<FejdStartup>().GetPreviewPlayer(); - } - - public void OnHairHueChange(float v) - { - } - - public void OnSkinHueChange(float v) - { - } - - public void SetPlayerModel(int index) - { - GetPlayer().SetPlayerModel(index); - if (index == 1) - { - ResetBeard(); - } - } - - public void OnHairLeft() - { - SetHair(GetHairIndex() - 1); - } - - public void OnHairRight() - { - SetHair(GetHairIndex() + 1); - } - - public void OnBeardLeft() - { - if (GetPlayer().GetPlayerModel() != 1) - { - SetBeard(GetBeardIndex() - 1); - } - } - - public void OnBeardRight() - { - if (GetPlayer().GetPlayerModel() != 1) - { - SetBeard(GetBeardIndex() + 1); - } - } - - private void ResetBeard() - { - GetPlayer().SetBeard(m_noBeard.gameObject.name); - } - - private void SetBeard(int index) - { - if (index >= 0 && index < m_beards.Count) - { - GetPlayer().SetBeard(m_beards[index].gameObject.name); - } - } - - private void SetHair(int index) - { - ZLog.Log("Set hair " + index); - if (index >= 0 && index < m_hairs.Count) - { - GetPlayer().SetHair(m_hairs[index].gameObject.name); - } - } - - private int GetBeardIndex() - { - string beard = GetPlayer().GetBeard(); - for (int i = 0; i < m_beards.Count; i++) - { - if (m_beards[i].gameObject.name == beard) - { - return i; - } - } - return 0; - } - - private int GetHairIndex() - { - string hair = GetPlayer().GetHair(); - for (int i = 0; i < m_hairs.Count; i++) - { - if (m_hairs[i].gameObject.name == hair) - { - return i; - } - } - return 0; - } - - private string GetHair() - { - return m_hairs[GetHairIndex()].m_itemData.m_shared.m_name; - } - - private string GetBeard() - { - return m_beards[GetBeardIndex()].m_itemData.m_shared.m_name; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/PlayerProfile.cs b/Valheim_v202102/Valheim/assembly_valheim/PlayerProfile.cs deleted file mode 100644 index 8ab7849..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/PlayerProfile.cs +++ /dev/null @@ -1,444 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using UnityEngine; - -public class PlayerProfile -{ - private class WorldPlayerData - { - public Vector3 m_spawnPoint = Vector3.zero; - - public bool m_haveCustomSpawnPoint; - - public Vector3 m_logoutPoint = Vector3.zero; - - public bool m_haveLogoutPoint; - - public Vector3 m_deathPoint = Vector3.zero; - - public bool m_haveDeathPoint; - - public Vector3 m_homePoint = Vector3.zero; - - public byte[] m_mapData; - } - - public class PlayerStats - { - public int m_kills; - - public int m_deaths; - - public int m_crafts; - - public int m_builds; - } - - private string m_filename = ""; - - private string m_playerName = ""; - - private long m_playerID; - - private string m_startSeed = ""; - - public static Vector3 m_originalSpawnPoint = new Vector3(-676f, 50f, 299f); - - private Dictionary<long, WorldPlayerData> m_worldData = new Dictionary<long, WorldPlayerData>(); - - public PlayerStats m_playerStats = new PlayerStats(); - - private byte[] m_playerData; - - public PlayerProfile(string filename = null) - { - m_filename = filename; - m_playerName = "Stranger"; - m_playerID = Utils.GenerateUID(); - } - - public bool Load() - { - if (m_filename == null) - { - return false; - } - return LoadPlayerFromDisk(); - } - - public bool Save() - { - if (m_filename == null) - { - return false; - } - return SavePlayerToDisk(); - } - - public bool HaveIncompatiblPlayerData() - { - if (m_filename == null) - { - return false; - } - ZPackage zPackage = LoadPlayerDataFromDisk(); - if (zPackage == null) - { - return false; - } - if (!Version.IsPlayerVersionCompatible(zPackage.ReadInt())) - { - ZLog.Log("Player data is not compatible, ignoring"); - return true; - } - return false; - } - - public void SavePlayerData(Player player) - { - ZPackage zPackage = new ZPackage(); - player.Save(zPackage); - m_playerData = zPackage.GetArray(); - } - - public void LoadPlayerData(Player player) - { - player.SetPlayerID(m_playerID, m_playerName); - if (m_playerData != null) - { - ZPackage pkg = new ZPackage(m_playerData); - player.Load(pkg); - } - else - { - player.GiveDefaultItems(); - } - } - - public void SaveLogoutPoint() - { - if ((bool)Player.m_localPlayer && !Player.m_localPlayer.IsDead() && !Player.m_localPlayer.InIntro()) - { - SetLogoutPoint(Player.m_localPlayer.transform.position); - } - } - - private bool SavePlayerToDisk() - { - Directory.CreateDirectory(Application.persistentDataPath + "/characters"); - string text = Application.persistentDataPath + "/characters/" + m_filename + ".fch"; - string text2 = Application.persistentDataPath + "/characters/" + m_filename + ".fch.old"; - string text3 = Application.persistentDataPath + "/characters/" + m_filename + ".fch.new"; - ZPackage zPackage = new ZPackage(); - zPackage.Write(Version.m_playerVersion); - zPackage.Write(m_playerStats.m_kills); - zPackage.Write(m_playerStats.m_deaths); - zPackage.Write(m_playerStats.m_crafts); - zPackage.Write(m_playerStats.m_builds); - zPackage.Write(m_worldData.Count); - foreach (KeyValuePair<long, WorldPlayerData> worldDatum in m_worldData) - { - zPackage.Write(worldDatum.Key); - zPackage.Write(worldDatum.Value.m_haveCustomSpawnPoint); - zPackage.Write(worldDatum.Value.m_spawnPoint); - zPackage.Write(worldDatum.Value.m_haveLogoutPoint); - zPackage.Write(worldDatum.Value.m_logoutPoint); - zPackage.Write(worldDatum.Value.m_haveDeathPoint); - zPackage.Write(worldDatum.Value.m_deathPoint); - zPackage.Write(worldDatum.Value.m_homePoint); - zPackage.Write(worldDatum.Value.m_mapData != null); - if (worldDatum.Value.m_mapData != null) - { - zPackage.Write(worldDatum.Value.m_mapData); - } - } - zPackage.Write(m_playerName); - zPackage.Write(m_playerID); - zPackage.Write(m_startSeed); - if (m_playerData != null) - { - zPackage.Write(data: true); - zPackage.Write(m_playerData); - } - else - { - zPackage.Write(data: false); - } - byte[] array = zPackage.GenerateHash(); - FileStream fileStream = File.Create(text3); - BinaryWriter binaryWriter = new BinaryWriter(fileStream); - byte[] array2 = zPackage.GetArray(); - binaryWriter.Write(array2.Length); - binaryWriter.Write(array2); - binaryWriter.Write(array.Length); - binaryWriter.Write(array); - fileStream.Dispose(); - if (File.Exists(text)) - { - if (File.Exists(text2)) - { - File.Delete(text2); - } - File.Move(text, text2); - } - File.Move(text3, text); - return true; - } - - private bool LoadPlayerFromDisk() - { - try - { - ZPackage zPackage = LoadPlayerDataFromDisk(); - if (zPackage == null) - { - ZLog.LogWarning("No player data"); - return false; - } - int num = zPackage.ReadInt(); - if (!Version.IsPlayerVersionCompatible(num)) - { - ZLog.Log("Player data is not compatible, ignoring"); - return false; - } - if (num >= 28) - { - m_playerStats.m_kills = zPackage.ReadInt(); - m_playerStats.m_deaths = zPackage.ReadInt(); - m_playerStats.m_crafts = zPackage.ReadInt(); - m_playerStats.m_builds = zPackage.ReadInt(); - } - m_worldData.Clear(); - int num2 = zPackage.ReadInt(); - for (int i = 0; i < num2; i++) - { - long key = zPackage.ReadLong(); - WorldPlayerData worldPlayerData = new WorldPlayerData(); - worldPlayerData.m_haveCustomSpawnPoint = zPackage.ReadBool(); - worldPlayerData.m_spawnPoint = zPackage.ReadVector3(); - worldPlayerData.m_haveLogoutPoint = zPackage.ReadBool(); - worldPlayerData.m_logoutPoint = zPackage.ReadVector3(); - if (num >= 30) - { - worldPlayerData.m_haveDeathPoint = zPackage.ReadBool(); - worldPlayerData.m_deathPoint = zPackage.ReadVector3(); - } - worldPlayerData.m_homePoint = zPackage.ReadVector3(); - if (num >= 29 && zPackage.ReadBool()) - { - worldPlayerData.m_mapData = zPackage.ReadByteArray(); - } - m_worldData.Add(key, worldPlayerData); - } - m_playerName = zPackage.ReadString(); - m_playerID = zPackage.ReadLong(); - m_startSeed = zPackage.ReadString(); - if (zPackage.ReadBool()) - { - m_playerData = zPackage.ReadByteArray(); - } - else - { - m_playerData = null; - } - } - catch (Exception ex) - { - ZLog.LogWarning("Exception while loading player profile:" + m_filename + " , " + ex.ToString()); - } - return true; - } - - private ZPackage LoadPlayerDataFromDisk() - { - string text = Application.persistentDataPath + "/characters/" + m_filename + ".fch"; - FileStream fileStream; - try - { - fileStream = File.OpenRead(text); - } - catch - { - ZLog.Log(" failed to load " + text); - return null; - } - byte[] data; - try - { - BinaryReader binaryReader = new BinaryReader(fileStream); - int num = binaryReader.ReadInt32(); - data = binaryReader.ReadBytes(num); - int num2 = binaryReader.ReadInt32(); - binaryReader.ReadBytes(num2); - ZLog.Log("Data size:" + num + " hash size:" + num2); - } - catch - { - ZLog.LogError(" error loading player.dat"); - fileStream.Dispose(); - return null; - } - fileStream.Dispose(); - return new ZPackage(data); - } - - public void SetLogoutPoint(Vector3 point) - { - GetWorldData(ZNet.instance.GetWorldUID()).m_haveLogoutPoint = true; - GetWorldData(ZNet.instance.GetWorldUID()).m_logoutPoint = point; - } - - public void SetDeathPoint(Vector3 point) - { - GetWorldData(ZNet.instance.GetWorldUID()).m_haveDeathPoint = true; - GetWorldData(ZNet.instance.GetWorldUID()).m_deathPoint = point; - } - - public void SetMapData(byte[] data) - { - long worldUID = ZNet.instance.GetWorldUID(); - if (worldUID != 0L) - { - GetWorldData(worldUID).m_mapData = data; - } - } - - public byte[] GetMapData() - { - return GetWorldData(ZNet.instance.GetWorldUID()).m_mapData; - } - - public void ClearLoguoutPoint() - { - GetWorldData(ZNet.instance.GetWorldUID()).m_haveLogoutPoint = false; - } - - public bool HaveLogoutPoint() - { - return GetWorldData(ZNet.instance.GetWorldUID()).m_haveLogoutPoint; - } - - public Vector3 GetLogoutPoint() - { - return GetWorldData(ZNet.instance.GetWorldUID()).m_logoutPoint; - } - - public bool HaveDeathPoint() - { - return GetWorldData(ZNet.instance.GetWorldUID()).m_haveDeathPoint; - } - - public Vector3 GetDeathPoint() - { - return GetWorldData(ZNet.instance.GetWorldUID()).m_deathPoint; - } - - public void SetCustomSpawnPoint(Vector3 point) - { - GetWorldData(ZNet.instance.GetWorldUID()).m_haveCustomSpawnPoint = true; - GetWorldData(ZNet.instance.GetWorldUID()).m_spawnPoint = point; - } - - public Vector3 GetCustomSpawnPoint() - { - return GetWorldData(ZNet.instance.GetWorldUID()).m_spawnPoint; - } - - public bool HaveCustomSpawnPoint() - { - return GetWorldData(ZNet.instance.GetWorldUID()).m_haveCustomSpawnPoint; - } - - public void ClearCustomSpawnPoint() - { - GetWorldData(ZNet.instance.GetWorldUID()).m_haveCustomSpawnPoint = false; - } - - public void SetHomePoint(Vector3 point) - { - GetWorldData(ZNet.instance.GetWorldUID()).m_homePoint = point; - } - - public Vector3 GetHomePoint() - { - return GetWorldData(ZNet.instance.GetWorldUID()).m_homePoint; - } - - public void SetName(string name) - { - m_playerName = name; - } - - public string GetName() - { - return m_playerName; - } - - public long GetPlayerID() - { - return m_playerID; - } - - public static List<PlayerProfile> GetAllPlayerProfiles() - { - string[] array; - try - { - array = Directory.GetFiles(Application.persistentDataPath + "/characters", "*.fch"); - } - catch - { - array = new string[0]; - } - List<PlayerProfile> list = new List<PlayerProfile>(); - string[] array2 = array; - for (int i = 0; i < array2.Length; i++) - { - string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(array2[i]); - ZLog.Log("loading " + fileNameWithoutExtension); - PlayerProfile playerProfile = new PlayerProfile(fileNameWithoutExtension); - if (!playerProfile.Load()) - { - ZLog.Log("Failed to load " + fileNameWithoutExtension); - } - else - { - list.Add(playerProfile); - } - } - return list; - } - - public static void RemoveProfile(string name) - { - try - { - File.Delete(Application.persistentDataPath + "/characters/" + name + ".fch"); - } - catch - { - } - } - - public static bool HaveProfile(string name) - { - return File.Exists(Application.persistentDataPath + "/characters/" + name + ".fch"); - } - - public string GetFilename() - { - return m_filename; - } - - private WorldPlayerData GetWorldData(long worldUID) - { - if (m_worldData.TryGetValue(worldUID, out var value)) - { - return value; - } - value = new WorldPlayerData(); - m_worldData.Add(worldUID, value); - return value; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/PointGenerator.cs b/Valheim_v202102/Valheim/assembly_valheim/PointGenerator.cs deleted file mode 100644 index ef338e7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/PointGenerator.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class PointGenerator -{ - private int m_amount; - - private float m_gridSize = 8f; - - private Vector2Int m_currentCenterGrid = new Vector2Int(99999, 99999); - - private int m_currentGridWith; - - private List<Vector3> m_points = new List<Vector3>(); - - public PointGenerator(int amount, float gridSize) - { - m_amount = amount; - m_gridSize = gridSize; - } - - public void Update(Vector3 center, float radius, List<Vector3> newPoints, List<Vector3> removedPoints) - { - Vector2Int grid = GetGrid(center); - if (m_currentCenterGrid == grid) - { - newPoints.Clear(); - removedPoints.Clear(); - return; - } - int num = Mathf.CeilToInt(radius / m_gridSize); - if (m_currentCenterGrid != grid || m_currentGridWith != num) - { - RegeneratePoints(grid, num); - } - } - - private void RegeneratePoints(Vector2Int centerGrid, int gridWith) - { - m_currentCenterGrid = centerGrid; - Random.State state = Random.state; - m_points.Clear(); - for (int i = centerGrid.y - gridWith; i <= centerGrid.y + gridWith; i++) - { - for (int j = centerGrid.x - gridWith; j <= centerGrid.x + gridWith; j++) - { - Random.InitState(j + i * 100); - Vector3 gridPos = GetGridPos(new Vector2Int(j, i)); - for (int k = 0; k < m_amount; k++) - { - Vector3 item = new Vector3(Random.Range(gridPos.x - m_gridSize, gridPos.x + m_gridSize), Random.Range(gridPos.z - m_gridSize, gridPos.z + m_gridSize)); - m_points.Add(item); - } - } - } - Random.state = state; - } - - public Vector2Int GetGrid(Vector3 point) - { - int x = Mathf.FloorToInt((point.x + m_gridSize / 2f) / m_gridSize); - int y = Mathf.FloorToInt((point.z + m_gridSize / 2f) / m_gridSize); - return new Vector2Int(x, y); - } - - public Vector3 GetGridPos(Vector2Int grid) - { - return new Vector3((float)grid.x * m_gridSize, 0f, (float)grid.y * m_gridSize); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/PrivateArea.cs b/Valheim_v202102/Valheim/assembly_valheim/PrivateArea.cs deleted file mode 100644 index 448f69c..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/PrivateArea.cs +++ /dev/null @@ -1,546 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using UnityEngine; - -public class PrivateArea : MonoBehaviour, Hoverable, Interactable -{ - public string m_name = "Guard stone"; - - public float m_radius = 10f; - - public float m_updateConnectionsInterval = 5f; - - public GameObject m_enabledEffect; - - public CircleProjector m_areaMarker; - - public EffectList m_flashEffect = new EffectList(); - - public EffectList m_activateEffect = new EffectList(); - - public EffectList m_deactivateEffect = new EffectList(); - - public EffectList m_addPermittedEffect = new EffectList(); - - public EffectList m_removedPermittedEffect = new EffectList(); - - public GameObject m_connectEffect; - - public GameObject m_inRangeEffect; - - public MeshRenderer m_model; - - private ZNetView m_nview; - - private Piece m_piece; - - private bool m_flashAvailable = true; - - private bool m_tempChecked; - - private List<GameObject> m_connectionInstances = new List<GameObject>(); - - private float m_connectionUpdateTime = -1000f; - - private List<PrivateArea> m_connectedAreas = new List<PrivateArea>(); - - private static List<PrivateArea> m_allAreas = new List<PrivateArea>(); - - private void Awake() - { - if ((bool)m_areaMarker) - { - m_areaMarker.m_radius = m_radius; - } - m_nview = GetComponent<ZNetView>(); - if (m_nview.IsValid()) - { - WearNTear component = GetComponent<WearNTear>(); - component.m_onDamaged = (Action)Delegate.Combine(component.m_onDamaged, new Action(OnDamaged)); - m_piece = GetComponent<Piece>(); - if ((bool)m_areaMarker) - { - m_areaMarker.gameObject.SetActive(value: false); - } - if ((bool)m_inRangeEffect) - { - m_inRangeEffect.SetActive(value: false); - } - m_allAreas.Add(this); - InvokeRepeating("UpdateStatus", 0f, 1f); - m_nview.Register<long>("ToggleEnabled", RPC_ToggleEnabled); - m_nview.Register<long, string>("TogglePermitted", RPC_TogglePermitted); - m_nview.Register("FlashShield", RPC_FlashShield); - } - } - - private void OnDestroy() - { - m_allAreas.Remove(this); - } - - private void UpdateStatus() - { - bool flag = IsEnabled(); - m_enabledEffect.SetActive(flag); - m_flashAvailable = true; - Material[] materials = m_model.materials; - foreach (Material material in materials) - { - if (flag) - { - material.EnableKeyword("_EMISSION"); - } - else - { - material.DisableKeyword("_EMISSION"); - } - } - } - - public string GetHoverText() - { - if (!m_nview.IsValid()) - { - return ""; - } - if (Player.m_localPlayer == null) - { - return ""; - } - ShowAreaMarker(); - StringBuilder stringBuilder = new StringBuilder(256); - if (m_piece.IsCreator()) - { - if (IsEnabled()) - { - stringBuilder.Append(m_name + " ( $piece_guardstone_active )"); - stringBuilder.Append("\n$piece_guardstone_owner:" + GetCreatorName()); - stringBuilder.Append("\n[<color=yellow><b>$KEY_Use</b></color>] $piece_guardstone_deactivate"); - } - else - { - stringBuilder.Append(m_name + " ($piece_guardstone_inactive )"); - stringBuilder.Append("\n$piece_guardstone_owner:" + GetCreatorName()); - stringBuilder.Append("\n[<color=yellow><b>$KEY_Use</b></color>] $piece_guardstone_activate"); - } - } - else if (IsEnabled()) - { - stringBuilder.Append(m_name + " ( $piece_guardstone_active )"); - stringBuilder.Append("\n$piece_guardstone_owner:" + GetCreatorName()); - } - else - { - stringBuilder.Append(m_name + " ( $piece_guardstone_inactive )"); - stringBuilder.Append("\n$piece_guardstone_owner:" + GetCreatorName()); - if (IsPermitted(Player.m_localPlayer.GetPlayerID())) - { - stringBuilder.Append("\n[<color=yellow><b>$KEY_Use</b></color>] $piece_guardstone_remove"); - } - else - { - stringBuilder.Append("\n[<color=yellow><b>$KEY_Use</b></color>] $piece_guardstone_add"); - } - } - AddUserList(stringBuilder); - return Localization.instance.Localize(stringBuilder.ToString()); - } - - private void AddUserList(StringBuilder text) - { - List<KeyValuePair<long, string>> permittedPlayers = GetPermittedPlayers(); - text.Append("\n$piece_guardstone_additional: "); - for (int i = 0; i < permittedPlayers.Count; i++) - { - text.Append(permittedPlayers[i].Value); - if (i != permittedPlayers.Count - 1) - { - text.Append(", "); - } - } - } - - private void RemovePermitted(long playerID) - { - List<KeyValuePair<long, string>> permittedPlayers = GetPermittedPlayers(); - if (permittedPlayers.RemoveAll((KeyValuePair<long, string> x) => x.Key == playerID) > 0) - { - SetPermittedPlayers(permittedPlayers); - m_removedPermittedEffect.Create(base.transform.position, base.transform.rotation); - } - } - - private bool IsPermitted(long playerID) - { - foreach (KeyValuePair<long, string> permittedPlayer in GetPermittedPlayers()) - { - if (permittedPlayer.Key == playerID) - { - return true; - } - } - return false; - } - - private void AddPermitted(long playerID, string playerName) - { - List<KeyValuePair<long, string>> permittedPlayers = GetPermittedPlayers(); - foreach (KeyValuePair<long, string> item in permittedPlayers) - { - if (item.Key == playerID) - { - return; - } - } - permittedPlayers.Add(new KeyValuePair<long, string>(playerID, playerName)); - SetPermittedPlayers(permittedPlayers); - m_addPermittedEffect.Create(base.transform.position, base.transform.rotation); - } - - private void SetPermittedPlayers(List<KeyValuePair<long, string>> users) - { - m_nview.GetZDO().Set("permitted", users.Count); - for (int i = 0; i < users.Count; i++) - { - KeyValuePair<long, string> keyValuePair = users[i]; - m_nview.GetZDO().Set("pu_id" + i, keyValuePair.Key); - m_nview.GetZDO().Set("pu_name" + i, keyValuePair.Value); - } - } - - private List<KeyValuePair<long, string>> GetPermittedPlayers() - { - List<KeyValuePair<long, string>> list = new List<KeyValuePair<long, string>>(); - int @int = m_nview.GetZDO().GetInt("permitted"); - for (int i = 0; i < @int; i++) - { - long @long = m_nview.GetZDO().GetLong("pu_id" + i, 0L); - string @string = m_nview.GetZDO().GetString("pu_name" + i); - if (@long != 0L) - { - list.Add(new KeyValuePair<long, string>(@long, @string)); - } - } - return list; - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid human, bool hold) - { - if (hold) - { - return false; - } - Player player = human as Player; - if (m_piece.IsCreator()) - { - m_nview.InvokeRPC("ToggleEnabled", player.GetPlayerID()); - return true; - } - if (IsEnabled()) - { - return false; - } - m_nview.InvokeRPC("TogglePermitted", player.GetPlayerID(), player.GetPlayerName()); - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private void RPC_TogglePermitted(long uid, long playerID, string name) - { - if (m_nview.IsOwner() && !IsEnabled()) - { - if (IsPermitted(playerID)) - { - RemovePermitted(playerID); - } - else - { - AddPermitted(playerID, name); - } - } - } - - private void RPC_ToggleEnabled(long uid, long playerID) - { - ZLog.Log("Toggle enabled from " + playerID + " creator is " + m_piece.GetCreator()); - if (m_nview.IsOwner() && m_piece.GetCreator() == playerID) - { - SetEnabled(!IsEnabled()); - } - } - - public bool IsEnabled() - { - if (!m_nview.IsValid()) - { - return false; - } - return m_nview.GetZDO().GetBool("enabled"); - } - - private void SetEnabled(bool enabled) - { - m_nview.GetZDO().Set("enabled", enabled); - UpdateStatus(); - if (enabled) - { - m_activateEffect.Create(base.transform.position, base.transform.rotation); - } - else - { - m_deactivateEffect.Create(base.transform.position, base.transform.rotation); - } - } - - public void Setup(string name) - { - m_nview.GetZDO().Set("creatorName", name); - } - - public void PokeAllAreasInRange() - { - foreach (PrivateArea allArea in m_allAreas) - { - if (!(allArea == this) && IsInside(allArea.transform.position, 0f)) - { - allArea.StartInRangeEffect(); - } - } - } - - private void StartInRangeEffect() - { - m_inRangeEffect.SetActive(value: true); - CancelInvoke("StopInRangeEffect"); - Invoke("StopInRangeEffect", 0.2f); - } - - private void StopInRangeEffect() - { - m_inRangeEffect.SetActive(value: false); - } - - public void PokeConnectionEffects() - { - List<PrivateArea> connectedAreas = GetConnectedAreas(); - StartConnectionEffects(); - foreach (PrivateArea item in connectedAreas) - { - item.StartConnectionEffects(); - } - } - - private void StartConnectionEffects() - { - List<PrivateArea> list = new List<PrivateArea>(); - foreach (PrivateArea allArea in m_allAreas) - { - if (!(allArea == this) && IsInside(allArea.transform.position, 0f)) - { - list.Add(allArea); - } - } - Vector3 vector = base.transform.position + Vector3.up * 1.4f; - if (m_connectionInstances.Count != list.Count) - { - StopConnectionEffects(); - for (int i = 0; i < list.Count; i++) - { - GameObject item = UnityEngine.Object.Instantiate(m_connectEffect, vector, Quaternion.identity, base.transform); - m_connectionInstances.Add(item); - } - } - if (m_connectionInstances.Count != 0) - { - for (int j = 0; j < list.Count; j++) - { - Vector3 vector2 = list[j].transform.position + Vector3.up * 1.4f - vector; - Quaternion rotation = Quaternion.LookRotation(vector2.normalized); - GameObject obj = m_connectionInstances[j]; - obj.transform.position = vector; - obj.transform.rotation = rotation; - obj.transform.localScale = new Vector3(1f, 1f, vector2.magnitude); - } - CancelInvoke("StopConnectionEffects"); - Invoke("StopConnectionEffects", 0.3f); - } - } - - private void StopConnectionEffects() - { - foreach (GameObject connectionInstance in m_connectionInstances) - { - UnityEngine.Object.Destroy(connectionInstance); - } - m_connectionInstances.Clear(); - } - - private string GetCreatorName() - { - return m_nview.GetZDO().GetString("creatorName"); - } - - public static bool CheckInPrivateArea(Vector3 point, bool flash = false) - { - foreach (PrivateArea allArea in m_allAreas) - { - if (allArea.IsEnabled() && allArea.IsInside(point, 0f)) - { - if (flash) - { - allArea.FlashShield(flashConnected: false); - } - return true; - } - } - return false; - } - - public static bool CheckAccess(Vector3 point, float radius = 0f, bool flash = true) - { - bool flag = false; - List<PrivateArea> list = new List<PrivateArea>(); - foreach (PrivateArea allArea in m_allAreas) - { - if (allArea.IsEnabled() && allArea.IsInside(point, radius)) - { - if (allArea.HaveLocalAccess()) - { - flag = true; - } - else - { - list.Add(allArea); - } - } - } - if (!flag && list.Count > 0) - { - if (flash) - { - foreach (PrivateArea item in list) - { - item.FlashShield(flashConnected: false); - } - } - return false; - } - return true; - } - - private bool HaveLocalAccess() - { - if (m_piece.IsCreator()) - { - return true; - } - if (IsPermitted(Player.m_localPlayer.GetPlayerID())) - { - return true; - } - return false; - } - - private List<PrivateArea> GetConnectedAreas(bool forceUpdate = false) - { - if (Time.time - m_connectionUpdateTime > m_updateConnectionsInterval || forceUpdate) - { - GetAllConnectedAreas(m_connectedAreas); - m_connectionUpdateTime = Time.time; - } - return m_connectedAreas; - } - - private void GetAllConnectedAreas(List<PrivateArea> areas) - { - Queue<PrivateArea> queue = new Queue<PrivateArea>(); - queue.Enqueue(this); - foreach (PrivateArea allArea in m_allAreas) - { - allArea.m_tempChecked = false; - } - m_tempChecked = true; - while (queue.Count > 0) - { - PrivateArea privateArea = queue.Dequeue(); - foreach (PrivateArea allArea2 in m_allAreas) - { - if (!allArea2.m_tempChecked && allArea2.IsEnabled() && allArea2.IsInside(privateArea.transform.position, 0f)) - { - allArea2.m_tempChecked = true; - queue.Enqueue(allArea2); - areas.Add(allArea2); - } - } - } - } - - private void FlashShield(bool flashConnected) - { - if (!m_flashAvailable) - { - return; - } - m_flashAvailable = false; - m_nview.InvokeRPC(ZNetView.Everybody, "FlashShield"); - if (!flashConnected) - { - return; - } - foreach (PrivateArea connectedArea in GetConnectedAreas()) - { - if (connectedArea.m_nview.IsValid()) - { - connectedArea.m_nview.InvokeRPC(ZNetView.Everybody, "FlashShield"); - } - } - } - - private void RPC_FlashShield(long uid) - { - m_flashEffect.Create(base.transform.position, Quaternion.identity); - } - - private bool IsInside(Vector3 point, float radius) - { - return Utils.DistanceXZ(base.transform.position, point) < m_radius + radius; - } - - public void ShowAreaMarker() - { - if ((bool)m_areaMarker) - { - m_areaMarker.gameObject.SetActive(value: true); - CancelInvoke("HideMarker"); - Invoke("HideMarker", 0.5f); - } - } - - private void HideMarker() - { - m_areaMarker.gameObject.SetActive(value: false); - } - - private void OnDamaged() - { - if (IsEnabled()) - { - FlashShield(flashConnected: false); - } - } - - private void OnDrawGizmosSelected() - { - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Procreation.cs b/Valheim_v202102/Valheim/assembly_valheim/Procreation.cs deleted file mode 100644 index 1ec5aa3..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Procreation.cs +++ /dev/null @@ -1,144 +0,0 @@ -using System; -using UnityEngine; - -public class Procreation : MonoBehaviour -{ - public float m_updateInterval = 10f; - - public float m_totalCheckRange = 10f; - - public int m_maxCreatures = 4; - - public float m_partnerCheckRange = 3f; - - public float m_pregnancyChance = 0.5f; - - public float m_pregnancyDuration = 10f; - - public int m_requiredLovePoints = 4; - - public GameObject m_offspring; - - public int m_minOffspringLevel; - - public float m_spawnOffset = 2f; - - public EffectList m_birthEffects = new EffectList(); - - public EffectList m_loveEffects = new EffectList(); - - private GameObject m_myPrefab; - - private GameObject m_offspringPrefab; - - private ZNetView m_nview; - - private BaseAI m_baseAI; - - private Character m_character; - - private Tameable m_tameable; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_baseAI = GetComponent<BaseAI>(); - m_character = GetComponent<Character>(); - m_tameable = GetComponent<Tameable>(); - InvokeRepeating("Procreate", UnityEngine.Random.Range(m_updateInterval, m_updateInterval + m_updateInterval * 0.5f), m_updateInterval); - } - - private void Procreate() - { - if (!m_nview.IsValid() || !m_nview.IsOwner() || !m_character.IsTamed()) - { - return; - } - if (m_offspringPrefab == null) - { - string prefabName = ZNetView.GetPrefabName(m_offspring); - m_offspringPrefab = ZNetScene.instance.GetPrefab(prefabName); - int prefab = m_nview.GetZDO().GetPrefab(); - m_myPrefab = ZNetScene.instance.GetPrefab(prefab); - } - if (IsPregnant()) - { - if (IsDue()) - { - ResetPregnancy(); - GameObject gameObject = UnityEngine.Object.Instantiate(m_offspringPrefab, base.transform.position - base.transform.forward * m_spawnOffset, Quaternion.LookRotation(-base.transform.forward, Vector3.up)); - Character component = gameObject.GetComponent<Character>(); - if ((bool)component) - { - component.SetTamed(m_character.IsTamed()); - component.SetLevel(Mathf.Max(m_minOffspringLevel, m_character.GetLevel())); - } - m_birthEffects.Create(gameObject.transform.position, Quaternion.identity); - } - } - else - { - if (UnityEngine.Random.value <= m_pregnancyChance || m_baseAI.IsAlerted() || m_tameable.IsHungry()) - { - return; - } - int nrOfInstances = SpawnSystem.GetNrOfInstances(m_myPrefab, base.transform.position, m_totalCheckRange); - int nrOfInstances2 = SpawnSystem.GetNrOfInstances(m_offspringPrefab, base.transform.position, m_totalCheckRange); - if (nrOfInstances + nrOfInstances2 < m_maxCreatures && SpawnSystem.GetNrOfInstances(m_myPrefab, base.transform.position, m_partnerCheckRange, eventCreaturesOnly: false, procreationOnly: true) >= 2) - { - m_loveEffects.Create(base.transform.position, Quaternion.identity); - int @int = m_nview.GetZDO().GetInt("lovePoints"); - @int++; - m_nview.GetZDO().Set("lovePoints", @int); - if (@int >= m_requiredLovePoints) - { - m_nview.GetZDO().Set("lovePoints", 0); - MakePregnant(); - } - } - } - } - - public bool ReadyForProcreation() - { - if (m_character.IsTamed() && !IsPregnant()) - { - return !m_tameable.IsHungry(); - } - return false; - } - - private void MakePregnant() - { - m_nview.GetZDO().Set("pregnant", ZNet.instance.GetTime().Ticks); - } - - private void ResetPregnancy() - { - m_nview.GetZDO().Set("pregnant", 0L); - } - - private bool IsDue() - { - long @long = m_nview.GetZDO().GetLong("pregnant", 0L); - if (@long == 0L) - { - return false; - } - DateTime dateTime = new DateTime(@long); - return (ZNet.instance.GetTime() - dateTime).TotalSeconds > (double)m_pregnancyDuration; - } - - public bool IsPregnant() - { - if (!m_nview.IsValid()) - { - return false; - } - if (m_nview.GetZDO().GetLong("pregnant", 0L) == 0L) - { - return false; - } - return true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Projectile.cs b/Valheim_v202102/Valheim/assembly_valheim/Projectile.cs deleted file mode 100644 index e2f8eac..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Projectile.cs +++ /dev/null @@ -1,375 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class Projectile : MonoBehaviour, IProjectile -{ - public HitData.DamageTypes m_damage; - - public float m_aoe; - - public bool m_dodgeable; - - public bool m_blockable; - - public float m_attackForce; - - public float m_backstabBonus = 4f; - - public string m_statusEffect = ""; - - public bool m_canHitWater; - - public float m_ttl = 4f; - - public float m_gravity; - - public float m_rayRadius; - - public float m_hitNoise = 50f; - - public bool m_stayAfterHitStatic; - - public GameObject m_hideOnHit; - - public bool m_stopEmittersOnHit = true; - - public EffectList m_hitEffects = new EffectList(); - - public EffectList m_hitWaterEffects = new EffectList(); - - [Header("Spawn on hit")] - public bool m_respawnItemOnHit; - - public GameObject m_spawnOnHit; - - [Range(0f, 1f)] - public float m_spawnOnHitChance = 1f; - - public bool m_showBreakMessage; - - public bool m_staticHitOnly; - - public bool m_groundHitOnly; - - public Vector3 m_spawnOffset = Vector3.zero; - - public bool m_spawnRandomRotation; - - public EffectList m_spawnOnHitEffects = new EffectList(); - - [Header("Rotate projectile")] - public float m_rotateVisual; - - public GameObject m_visual; - - private ZNetView m_nview; - - private Vector3 m_vel = Vector3.zero; - - private Character m_owner; - - private Skills.SkillType m_skill; - - private ItemDrop.ItemData m_spawnItem; - - private bool m_didHit; - - private static int m_rayMaskSolids; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_rayMaskSolids == 0) - { - m_rayMaskSolids = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "piece_nonsolid", "terrain", "character", "character_net", "character_ghost", "hitbox", "character_noenv", "vehicle"); - } - m_nview.Register("OnHit", RPC_OnHit); - } - - public string GetTooltipString(int itemQuality) - { - return ""; - } - - private void FixedUpdate() - { - if (!m_nview.IsValid()) - { - return; - } - UpdateRotation(Time.fixedDeltaTime); - if (!m_nview.IsOwner()) - { - return; - } - if (!m_didHit) - { - Vector3 position = base.transform.position; - m_vel += Vector3.down * m_gravity * Time.fixedDeltaTime; - base.transform.position += m_vel * Time.fixedDeltaTime; - if (m_rotateVisual == 0f) - { - base.transform.rotation = Quaternion.LookRotation(m_vel); - } - if (m_canHitWater) - { - float waterLevel = WaterVolume.GetWaterLevel(base.transform.position); - if (base.transform.position.y < waterLevel) - { - OnHit(null, base.transform.position, water: true); - } - } - if (!m_didHit) - { - Vector3 vector = base.transform.position - position; - RaycastHit[] array = Physics.SphereCastAll(position - vector, m_rayRadius, vector.normalized, vector.magnitude * 2f, m_rayMaskSolids); - for (int i = 0; i < array.Length; i++) - { - RaycastHit raycastHit = array[i]; - OnHit(raycastHit.collider, raycastHit.point, water: false); - if (m_didHit) - { - break; - } - } - } - } - if (m_ttl > 0f) - { - m_ttl -= Time.fixedDeltaTime; - if (m_ttl <= 0f) - { - ZNetScene.instance.Destroy(base.gameObject); - } - } - } - - public Vector3 GetVelocity() - { - if (!m_nview.IsValid() || !m_nview.IsOwner()) - { - return Vector3.zero; - } - if (m_didHit) - { - return Vector3.zero; - } - return m_vel; - } - - private void UpdateRotation(float dt) - { - if ((double)m_rotateVisual != 0.0 && !(m_visual == null)) - { - m_visual.transform.Rotate(new Vector3(m_rotateVisual * dt, 0f, 0f)); - } - } - - public void Setup(Character owner, Vector3 velocity, float hitNoise, HitData hitData, ItemDrop.ItemData item) - { - m_owner = owner; - m_vel = velocity; - if (hitNoise >= 0f) - { - m_hitNoise = hitNoise; - } - if (hitData != null) - { - m_damage = hitData.m_damage; - m_blockable = hitData.m_blockable; - m_dodgeable = hitData.m_dodgeable; - m_attackForce = hitData.m_pushForce; - m_backstabBonus = hitData.m_backstabBonus; - m_statusEffect = hitData.m_statusEffect; - m_skill = hitData.m_skill; - } - if (m_respawnItemOnHit) - { - m_spawnItem = item; - } - LineConnect component = GetComponent<LineConnect>(); - if ((bool)component) - { - component.SetPeer(owner.GetZDOID()); - } - } - - private void DoAOE(Vector3 hitPoint, ref bool hitCharacter, ref bool didDamage) - { - Collider[] array = Physics.OverlapSphere(hitPoint, m_aoe, m_rayMaskSolids, QueryTriggerInteraction.UseGlobal); - HashSet<GameObject> hashSet = new HashSet<GameObject>(); - Collider[] array2 = array; - foreach (Collider collider in array2) - { - GameObject gameObject = FindHitObject(collider); - IDestructible component = gameObject.GetComponent<IDestructible>(); - if (component != null && !hashSet.Contains(gameObject)) - { - hashSet.Add(gameObject); - if (IsValidTarget(component, ref hitCharacter)) - { - Vector3 vector = collider.ClosestPointOnBounds(hitPoint); - Vector3 vector2 = ((Vector3.Distance(vector, hitPoint) > 0.1f) ? (vector - hitPoint) : m_vel); - vector2.y = 0f; - vector2.Normalize(); - HitData hitData = new HitData(); - hitData.m_hitCollider = collider; - hitData.m_damage = m_damage; - hitData.m_pushForce = m_attackForce; - hitData.m_backstabBonus = m_backstabBonus; - hitData.m_point = vector; - hitData.m_dir = vector2.normalized; - hitData.m_statusEffect = m_statusEffect; - hitData.m_dodgeable = m_dodgeable; - hitData.m_blockable = m_blockable; - hitData.m_skill = m_skill; - hitData.SetAttacker(m_owner); - component.Damage(hitData); - didDamage = true; - } - } - } - } - - private bool IsValidTarget(IDestructible destr, ref bool hitCharacter) - { - Character character = destr as Character; - if ((bool)character) - { - if (character == m_owner) - { - return false; - } - if (m_owner != null && !m_owner.IsPlayer() && !BaseAI.IsEnemy(m_owner, character)) - { - return false; - } - if (m_dodgeable && character.IsDodgeInvincible()) - { - return false; - } - hitCharacter = true; - } - return true; - } - - private void OnHit(Collider collider, Vector3 hitPoint, bool water) - { - GameObject gameObject = (collider ? FindHitObject(collider) : null); - bool didDamage = false; - bool hitCharacter = false; - if (m_aoe > 0f) - { - DoAOE(hitPoint, ref hitCharacter, ref didDamage); - } - else - { - IDestructible destructible = (gameObject ? gameObject.GetComponent<IDestructible>() : null); - if (destructible != null) - { - if (!IsValidTarget(destructible, ref hitCharacter)) - { - return; - } - HitData hitData = new HitData(); - hitData.m_hitCollider = collider; - hitData.m_damage = m_damage; - hitData.m_pushForce = m_attackForce; - hitData.m_backstabBonus = m_backstabBonus; - hitData.m_point = hitPoint; - hitData.m_dir = base.transform.forward; - hitData.m_statusEffect = m_statusEffect; - hitData.m_dodgeable = m_dodgeable; - hitData.m_blockable = m_blockable; - hitData.m_skill = m_skill; - hitData.SetAttacker(m_owner); - destructible.Damage(hitData); - didDamage = true; - } - } - if (water) - { - m_hitWaterEffects.Create(hitPoint, Quaternion.identity); - } - else - { - m_hitEffects.Create(hitPoint, Quaternion.identity); - } - if (m_spawnOnHit != null || m_spawnItem != null) - { - SpawnOnHit(gameObject, collider); - } - if (m_hitNoise > 0f && m_owner != null) - { - BaseAI.AlertAllInRange(base.transform.position, m_hitNoise, m_owner); - } - if (m_owner != null && didDamage && m_owner.IsPlayer()) - { - (m_owner as Player).RaiseSkill(m_skill, hitCharacter ? 1f : 0.5f); - } - m_didHit = true; - base.transform.position = hitPoint; - m_nview.InvokeRPC("OnHit"); - if (!m_stayAfterHitStatic) - { - ZNetScene.instance.Destroy(base.gameObject); - } - else if ((bool)collider && collider.attachedRigidbody != null) - { - m_ttl = Mathf.Min(1f, m_ttl); - } - } - - private void RPC_OnHit(long sender) - { - if ((bool)m_hideOnHit) - { - m_hideOnHit.SetActive(value: false); - } - if (m_stopEmittersOnHit) - { - ParticleSystem[] componentsInChildren = GetComponentsInChildren<ParticleSystem>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - ParticleSystem.EmissionModule emission = componentsInChildren[i].emission; - emission.enabled = false; - } - } - } - - private void SpawnOnHit(GameObject go, Collider collider) - { - if ((!m_groundHitOnly || !(go.GetComponent<Heightmap>() == null)) && (!m_staticHitOnly || ((!collider || !(collider.attachedRigidbody != null)) && (!go || go.GetComponent<IDestructible>() == null))) && (!(m_spawnOnHitChance < 1f) || !(Random.value > m_spawnOnHitChance))) - { - Vector3 vector = base.transform.position + base.transform.TransformDirection(m_spawnOffset); - Quaternion rotation = base.transform.rotation; - if (m_spawnRandomRotation) - { - rotation = Quaternion.Euler(0f, Random.Range(0, 360), 0f); - } - if (m_spawnOnHit != null) - { - Object.Instantiate(m_spawnOnHit, vector, rotation).GetComponent<IProjectile>()?.Setup(m_owner, m_vel, m_hitNoise, null, null); - } - if (m_spawnItem != null) - { - ItemDrop.DropItem(m_spawnItem, 0, vector, base.transform.rotation); - } - m_spawnOnHitEffects.Create(vector, Quaternion.identity); - } - } - - public static GameObject FindHitObject(Collider collider) - { - IDestructible componentInParent = collider.gameObject.GetComponentInParent<IDestructible>(); - if (componentInParent != null) - { - return (componentInParent as MonoBehaviour).gameObject; - } - if ((bool)collider.attachedRigidbody) - { - return collider.attachedRigidbody.gameObject; - } - return collider.gameObject; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Properties/AssemblyInfo.cs b/Valheim_v202102/Valheim/assembly_valheim/Properties/AssemblyInfo.cs deleted file mode 100644 index bbd7eef..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,5 +0,0 @@ -using System.Diagnostics; -using System.Reflection; -using System.Runtime.CompilerServices; - -[assembly: AssemblyVersion("0.0.0.0")] diff --git a/Valheim_v202102/Valheim/assembly_valheim/Ragdoll.cs b/Valheim_v202102/Valheim/assembly_valheim/Ragdoll.cs deleted file mode 100644 index fd7b3a1..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Ragdoll.cs +++ /dev/null @@ -1,193 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Ragdoll : MonoBehaviour -{ - public float m_velMultiplier = 1f; - - public float m_ttl; - - public Renderer m_mainModel; - - public EffectList m_removeEffect = new EffectList(); - - public Action<Vector3> m_onDestroyed; - - public bool m_float; - - public float m_floatOffset = -0.1f; - - private const float m_floatForce = 20f; - - private const float m_damping = 0.05f; - - private ZNetView m_nview; - - private Rigidbody[] m_bodies; - - private const float m_dropOffset = 0.75f; - - private const float m_dropArea = 0.5f; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_bodies = GetComponentsInChildren<Rigidbody>(); - Invoke("RemoveInitVel", 2f); - if ((bool)m_mainModel) - { - float @float = m_nview.GetZDO().GetFloat("Hue"); - float float2 = m_nview.GetZDO().GetFloat("Saturation"); - float float3 = m_nview.GetZDO().GetFloat("Value"); - m_mainModel.material.SetFloat("_Hue", @float); - m_mainModel.material.SetFloat("_Saturation", float2); - m_mainModel.material.SetFloat("_Value", float3); - } - if (m_ttl > 0f) - { - Invoke("DestroyNow", m_ttl); - } - } - - public Vector3 GetAverageBodyPosition() - { - if (m_bodies.Length == 0) - { - return base.transform.position; - } - Vector3 zero = Vector3.zero; - Rigidbody[] bodies = m_bodies; - foreach (Rigidbody rigidbody in bodies) - { - zero += rigidbody.position; - } - return zero / m_bodies.Length; - } - - private void DestroyNow() - { - if (m_nview.GetZDO().m_owner == 0L) - { - m_nview.ClaimOwnership(); - } - if (m_nview.IsOwner()) - { - Vector3 averageBodyPosition = GetAverageBodyPosition(); - m_removeEffect.Create(averageBodyPosition, Quaternion.identity); - SpawnLoot(averageBodyPosition); - ZNetScene.instance.Destroy(base.gameObject); - } - } - - private void RemoveInitVel() - { - if (m_nview.IsOwner()) - { - m_nview.GetZDO().Set("InitVel", Vector3.zero); - } - } - - private void Start() - { - Vector3 vec = m_nview.GetZDO().GetVec3("InitVel", Vector3.zero); - if (vec != Vector3.zero) - { - vec.y = Mathf.Min(vec.y, 4f); - Rigidbody[] bodies = m_bodies; - for (int i = 0; i < bodies.Length; i++) - { - bodies[i].velocity = vec * UnityEngine.Random.value; - } - } - } - - public void Setup(Vector3 velocity, float hue, float saturation, float value, CharacterDrop characterDrop) - { - velocity.x *= m_velMultiplier; - velocity.z *= m_velMultiplier; - m_nview.GetZDO().Set("InitVel", velocity); - m_nview.GetZDO().Set("Hue", hue); - m_nview.GetZDO().Set("Saturation", saturation); - m_nview.GetZDO().Set("Value", value); - if ((bool)m_mainModel) - { - m_mainModel.material.SetFloat("_Hue", hue); - m_mainModel.material.SetFloat("_Saturation", saturation); - m_mainModel.material.SetFloat("_Value", value); - } - if ((bool)characterDrop) - { - SaveLootList(characterDrop); - } - } - - private void SaveLootList(CharacterDrop characterDrop) - { - List<KeyValuePair<GameObject, int>> list = characterDrop.GenerateDropList(); - if (list.Count > 0) - { - ZDO zDO = m_nview.GetZDO(); - zDO.Set("drops", list.Count); - for (int i = 0; i < list.Count; i++) - { - KeyValuePair<GameObject, int> keyValuePair = list[i]; - int prefabHash = ZNetScene.instance.GetPrefabHash(keyValuePair.Key); - zDO.Set("drop_hash" + i, prefabHash); - zDO.Set("drop_amount" + i, keyValuePair.Value); - } - } - } - - private void SpawnLoot(Vector3 center) - { - ZDO zDO = m_nview.GetZDO(); - int @int = zDO.GetInt("drops"); - if (@int <= 0) - { - return; - } - List<KeyValuePair<GameObject, int>> list = new List<KeyValuePair<GameObject, int>>(); - for (int i = 0; i < @int; i++) - { - int int2 = zDO.GetInt("drop_hash" + i); - int int3 = zDO.GetInt("drop_amount" + i); - GameObject prefab = ZNetScene.instance.GetPrefab(int2); - if (prefab == null) - { - ZLog.LogWarning("Ragdoll: Missing prefab:" + int2 + " when dropping loot"); - } - else - { - list.Add(new KeyValuePair<GameObject, int>(prefab, int3)); - } - } - CharacterDrop.DropItems(list, center + Vector3.up * 0.75f, 0.5f); - } - - private void FixedUpdate() - { - if (m_float) - { - UpdateFloating(Time.fixedDeltaTime); - } - } - - private void UpdateFloating(float dt) - { - Rigidbody[] bodies = m_bodies; - foreach (Rigidbody rigidbody in bodies) - { - Vector3 worldCenterOfMass = rigidbody.worldCenterOfMass; - worldCenterOfMass.y += m_floatOffset; - float waterLevel = WaterVolume.GetWaterLevel(worldCenterOfMass); - if (worldCenterOfMass.y < waterLevel) - { - float num = (waterLevel - worldCenterOfMass.y) / 0.5f; - Vector3 vector = Vector3.up * 20f * num; - rigidbody.AddForce(vector * dt, ForceMode.VelocityChange); - rigidbody.velocity -= rigidbody.velocity * 0.05f * num; - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RandEventSystem.cs b/Valheim_v202102/Valheim/assembly_valheim/RandEventSystem.cs deleted file mode 100644 index e048ba7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RandEventSystem.cs +++ /dev/null @@ -1,504 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using UnityEngine; - -public class RandEventSystem : MonoBehaviour -{ - private static RandEventSystem m_instance; - - public float m_eventIntervalMin = 1f; - - public float m_eventChance = 25f; - - public float m_randomEventRange = 200f; - - private float m_eventTimer; - - private float m_sendTimer; - - public List<RandomEvent> m_events = new List<RandomEvent>(); - - private RandomEvent m_randomEvent; - - private float m_forcedEventUpdateTimer; - - private RandomEvent m_forcedEvent; - - private RandomEvent m_activeEvent; - - private float m_tempSaveEventTimer; - - private string m_tempSaveRandomEvent; - - private float m_tempSaveRandomEventTime; - - private Vector3 m_tempSaveRandomEventPos; - - public static RandEventSystem instance => m_instance; - - private void Awake() - { - m_instance = this; - } - - private void OnDestroy() - { - m_instance = null; - } - - private void Start() - { - ZRoutedRpc.instance.Register<string, float, Vector3>("SetEvent", RPC_SetEvent); - } - - private void FixedUpdate() - { - float fixedDeltaTime = Time.fixedDeltaTime; - UpdateForcedEvents(fixedDeltaTime); - UpdateRandomEvent(fixedDeltaTime); - if (m_forcedEvent != null) - { - m_forcedEvent.Update(ZNet.instance.IsServer(), m_forcedEvent == m_activeEvent, playerInArea: true, fixedDeltaTime); - } - if (m_randomEvent != null && ZNet.instance.IsServer()) - { - bool playerInArea = IsAnyPlayerInEventArea(m_randomEvent); - if (m_randomEvent.Update(server: true, m_randomEvent == m_activeEvent, playerInArea, fixedDeltaTime)) - { - SetRandomEvent(null, Vector3.zero); - } - } - if (m_forcedEvent != null) - { - SetActiveEvent(m_forcedEvent); - } - else if (m_randomEvent != null && (bool)Player.m_localPlayer) - { - if (IsInsideRandomEventArea(m_randomEvent, Player.m_localPlayer.transform.position)) - { - SetActiveEvent(m_randomEvent); - } - else - { - SetActiveEvent(null); - } - } - else - { - SetActiveEvent(null); - } - } - - private bool IsInsideRandomEventArea(RandomEvent re, Vector3 position) - { - if (position.y > 3000f) - { - return false; - } - return Utils.DistanceXZ(position, re.m_pos) < m_randomEventRange; - } - - private void UpdateRandomEvent(float dt) - { - if (!ZNet.instance.IsServer()) - { - return; - } - m_eventTimer += dt; - if (m_eventTimer > m_eventIntervalMin * 60f) - { - m_eventTimer = 0f; - if (Random.Range(0f, 100f) <= m_eventChance) - { - StartRandomEvent(); - } - } - m_sendTimer += dt; - if (m_sendTimer > 2f) - { - m_sendTimer = 0f; - SendCurrentRandomEvent(); - } - } - - private void UpdateForcedEvents(float dt) - { - m_forcedEventUpdateTimer += dt; - if (m_forcedEventUpdateTimer > 2f) - { - m_forcedEventUpdateTimer = 0f; - string forcedEvent = GetForcedEvent(); - SetForcedEvent(forcedEvent); - } - } - - private void SetForcedEvent(string name) - { - if (m_forcedEvent != null && name != null && m_forcedEvent.m_name == name) - { - return; - } - if (m_forcedEvent != null) - { - if (m_forcedEvent == m_activeEvent) - { - SetActiveEvent(null, end: true); - } - m_forcedEvent.OnStop(); - m_forcedEvent = null; - } - RandomEvent @event = GetEvent(name); - if (@event != null) - { - m_forcedEvent = @event.Clone(); - m_forcedEvent.OnStart(); - } - } - - private string GetForcedEvent() - { - if (EnemyHud.instance != null) - { - Character activeBoss = EnemyHud.instance.GetActiveBoss(); - if (activeBoss != null && activeBoss.m_bossEvent.Length > 0) - { - return activeBoss.m_bossEvent; - } - string @event = EventZone.GetEvent(); - if (@event != null) - { - return @event; - } - } - return null; - } - - private void SendCurrentRandomEvent() - { - if (m_randomEvent != null) - { - ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "SetEvent", m_randomEvent.m_name, m_randomEvent.m_time, m_randomEvent.m_pos); - } - else - { - ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "SetEvent", "", 0f, Vector3.zero); - } - } - - private void RPC_SetEvent(long sender, string eventName, float time, Vector3 pos) - { - if (!ZNet.instance.IsServer()) - { - if (m_randomEvent == null || m_randomEvent.m_name != eventName) - { - SetRandomEventByName(eventName, pos); - } - if (m_randomEvent != null) - { - m_randomEvent.m_time = time; - m_randomEvent.m_pos = pos; - } - } - } - - public void StartRandomEvent() - { - if (!ZNet.instance.IsServer()) - { - return; - } - List<KeyValuePair<RandomEvent, Vector3>> possibleRandomEvents = GetPossibleRandomEvents(); - ZLog.Log("Possible events:" + possibleRandomEvents.Count); - if (possibleRandomEvents.Count == 0) - { - return; - } - foreach (KeyValuePair<RandomEvent, Vector3> item in possibleRandomEvents) - { - ZLog.DevLog("Event " + item.Key.m_name); - } - KeyValuePair<RandomEvent, Vector3> keyValuePair = possibleRandomEvents[Random.Range(0, possibleRandomEvents.Count)]; - SetRandomEvent(keyValuePair.Key, keyValuePair.Value); - } - - private RandomEvent GetEvent(string name) - { - if (string.IsNullOrEmpty(name)) - { - return null; - } - foreach (RandomEvent @event in m_events) - { - if (@event.m_name == name && @event.m_enabled) - { - return @event; - } - } - return null; - } - - public void SetRandomEventByName(string name, Vector3 pos) - { - RandomEvent @event = GetEvent(name); - SetRandomEvent(@event, pos); - } - - public void ResetRandomEvent() - { - SetRandomEvent(null, Vector3.zero); - } - - public bool HaveEvent(string name) - { - return GetEvent(name) != null; - } - - private void SetRandomEvent(RandomEvent ev, Vector3 pos) - { - if (m_randomEvent != null) - { - if (m_randomEvent == m_activeEvent) - { - SetActiveEvent(null, end: true); - } - m_randomEvent.OnStop(); - m_randomEvent = null; - } - if (ev != null) - { - m_randomEvent = ev.Clone(); - m_randomEvent.m_pos = pos; - m_randomEvent.OnStart(); - ZLog.Log("Random event set:" + ev.m_name); - if ((bool)Player.m_localPlayer) - { - Player.m_localPlayer.ShowTutorial("randomevent"); - } - } - if (ZNet.instance.IsServer()) - { - SendCurrentRandomEvent(); - } - } - - private bool IsAnyPlayerInEventArea(RandomEvent re) - { - foreach (ZDO allCharacterZDO in ZNet.instance.GetAllCharacterZDOS()) - { - if (IsInsideRandomEventArea(re, allCharacterZDO.GetPosition())) - { - return true; - } - } - return false; - } - - private List<KeyValuePair<RandomEvent, Vector3>> GetPossibleRandomEvents() - { - List<KeyValuePair<RandomEvent, Vector3>> list = new List<KeyValuePair<RandomEvent, Vector3>>(); - List<ZDO> allCharacterZDOS = ZNet.instance.GetAllCharacterZDOS(); - foreach (RandomEvent @event in m_events) - { - if (@event.m_enabled && @event.m_random && HaveGlobalKeys(@event)) - { - List<Vector3> validEventPoints = GetValidEventPoints(@event, allCharacterZDOS); - if (validEventPoints.Count != 0) - { - Vector3 value = validEventPoints[Random.Range(0, validEventPoints.Count)]; - list.Add(new KeyValuePair<RandomEvent, Vector3>(@event, value)); - } - } - } - return list; - } - - private List<Vector3> GetValidEventPoints(RandomEvent ev, List<ZDO> characters) - { - List<Vector3> list = new List<Vector3>(); - foreach (ZDO character in characters) - { - if (InValidBiome(ev, character) && CheckBase(ev, character) && !(character.GetPosition().y > 3000f)) - { - list.Add(character.GetPosition()); - } - } - return list; - } - - private bool InValidBiome(RandomEvent ev, ZDO zdo) - { - if (ev.m_biome == Heightmap.Biome.None) - { - return true; - } - Vector3 position = zdo.GetPosition(); - if ((WorldGenerator.instance.GetBiome(position) & ev.m_biome) != 0) - { - return true; - } - return false; - } - - private bool CheckBase(RandomEvent ev, ZDO zdo) - { - if (ev.m_nearBaseOnly && zdo.GetInt("baseValue") >= 3) - { - return true; - } - return false; - } - - private bool HaveGlobalKeys(RandomEvent ev) - { - foreach (string requiredGlobalKey in ev.m_requiredGlobalKeys) - { - if (!ZoneSystem.instance.GetGlobalKey(requiredGlobalKey)) - { - return false; - } - } - foreach (string notRequiredGlobalKey in ev.m_notRequiredGlobalKeys) - { - if (ZoneSystem.instance.GetGlobalKey(notRequiredGlobalKey)) - { - return false; - } - } - return true; - } - - public List<SpawnSystem.SpawnData> GetCurrentSpawners() - { - if (m_activeEvent != null) - { - return m_activeEvent.m_spawn; - } - return null; - } - - public string GetEnvOverride() - { - if (m_activeEvent != null && !string.IsNullOrEmpty(m_activeEvent.m_forceEnvironment) && m_activeEvent.InEventBiome()) - { - return m_activeEvent.m_forceEnvironment; - } - return null; - } - - public string GetMusicOverride() - { - if (m_activeEvent != null && !string.IsNullOrEmpty(m_activeEvent.m_forceMusic)) - { - return m_activeEvent.m_forceMusic; - } - return null; - } - - private void SetActiveEvent(RandomEvent ev, bool end = false) - { - if (ev != null && m_activeEvent != null && ev.m_name == m_activeEvent.m_name) - { - return; - } - if (m_activeEvent != null) - { - m_activeEvent.OnDeactivate(end); - m_activeEvent = null; - } - if (ev != null) - { - m_activeEvent = ev; - if (m_activeEvent != null) - { - m_activeEvent.OnActivate(); - } - } - } - - public static bool InEvent() - { - if (m_instance == null) - { - return false; - } - return m_instance.m_activeEvent != null; - } - - public static bool HaveActiveEvent() - { - if (m_instance == null) - { - return false; - } - if (m_instance.m_activeEvent != null) - { - return true; - } - if (m_instance.m_randomEvent == null) - { - return m_instance.m_activeEvent != null; - } - return true; - } - - public RandomEvent GetCurrentRandomEvent() - { - return m_randomEvent; - } - - public RandomEvent GetActiveEvent() - { - return m_activeEvent; - } - - public void PrepareSave() - { - m_tempSaveEventTimer = m_eventTimer; - if (m_randomEvent != null) - { - m_tempSaveRandomEvent = m_randomEvent.m_name; - m_tempSaveRandomEventTime = m_randomEvent.m_time; - m_tempSaveRandomEventPos = m_randomEvent.m_pos; - } - else - { - m_tempSaveRandomEvent = ""; - m_tempSaveRandomEventTime = 0f; - m_tempSaveRandomEventPos = Vector3.zero; - } - } - - public void SaveAsync(BinaryWriter writer) - { - writer.Write(m_tempSaveEventTimer); - writer.Write(m_tempSaveRandomEvent); - writer.Write(m_tempSaveRandomEventTime); - writer.Write(m_tempSaveRandomEventPos.x); - writer.Write(m_tempSaveRandomEventPos.y); - writer.Write(m_tempSaveRandomEventPos.z); - } - - public void Load(BinaryReader reader, int version) - { - m_eventTimer = reader.ReadSingle(); - if (version < 25) - { - return; - } - string value = reader.ReadString(); - float time = reader.ReadSingle(); - Vector3 pos = default(Vector3); - pos.x = reader.ReadSingle(); - pos.y = reader.ReadSingle(); - pos.z = reader.ReadSingle(); - if (!string.IsNullOrEmpty(value)) - { - SetRandomEventByName(value, pos); - if (m_randomEvent != null) - { - m_randomEvent.m_time = time; - m_randomEvent.m_pos = pos; - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RandomAnimation.cs b/Valheim_v202102/Valheim/assembly_valheim/RandomAnimation.cs deleted file mode 100644 index 4ed5f23..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RandomAnimation.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class RandomAnimation : MonoBehaviour -{ - [Serializable] - public class RandomValue - { - public string m_name; - - public int m_values; - - public float m_interval; - - public bool m_floatValue; - - public float m_floatTransition = 1f; - - [NonSerialized] - public float m_timer; - - [NonSerialized] - public int m_value; - - [NonSerialized] - public int[] m_hashValues; - } - - public List<RandomValue> m_values = new List<RandomValue>(); - - private Animator m_anim; - - private ZNetView m_nview; - - private void Start() - { - m_anim = GetComponentInChildren<Animator>(); - m_nview = GetComponent<ZNetView>(); - } - - private void FixedUpdate() - { - if (m_nview != null && !m_nview.IsValid()) - { - return; - } - float fixedDeltaTime = Time.fixedDeltaTime; - for (int i = 0; i < m_values.Count; i++) - { - RandomValue randomValue = m_values[i]; - if (m_nview == null || m_nview.IsOwner()) - { - randomValue.m_timer += fixedDeltaTime; - if (randomValue.m_timer > randomValue.m_interval) - { - randomValue.m_timer = 0f; - randomValue.m_value = UnityEngine.Random.Range(0, randomValue.m_values); - if ((bool)m_nview) - { - m_nview.GetZDO().Set("RA_" + randomValue.m_name, randomValue.m_value); - } - if (!randomValue.m_floatValue) - { - m_anim.SetInteger(randomValue.m_name, randomValue.m_value); - } - } - } - if ((bool)m_nview && !m_nview.IsOwner()) - { - int @int = m_nview.GetZDO().GetInt("RA_" + randomValue.m_name); - if (@int != randomValue.m_value) - { - randomValue.m_value = @int; - if (!randomValue.m_floatValue) - { - m_anim.SetInteger(randomValue.m_name, randomValue.m_value); - } - } - } - if (!randomValue.m_floatValue) - { - continue; - } - if (randomValue.m_hashValues == null || randomValue.m_hashValues.Length != randomValue.m_values) - { - randomValue.m_hashValues = new int[randomValue.m_values]; - for (int j = 0; j < randomValue.m_values; j++) - { - randomValue.m_hashValues[j] = Animator.StringToHash(randomValue.m_name + j); - } - } - for (int k = 0; k < randomValue.m_values; k++) - { - float @float = m_anim.GetFloat(randomValue.m_hashValues[k]); - @float = ((k != randomValue.m_value) ? Mathf.MoveTowards(@float, 0f, fixedDeltaTime / randomValue.m_floatTransition) : Mathf.MoveTowards(@float, 1f, fixedDeltaTime / randomValue.m_floatTransition)); - m_anim.SetFloat(randomValue.m_hashValues[k], @float); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RandomEvent.cs b/Valheim_v202102/Valheim/assembly_valheim/RandomEvent.cs deleted file mode 100644 index 8e6df2d..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RandomEvent.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -[Serializable] -public class RandomEvent -{ - public string m_name = ""; - - public bool m_enabled = true; - - public bool m_random = true; - - public float m_duration = 60f; - - public bool m_nearBaseOnly = true; - - public bool m_pauseIfNoPlayerInArea = true; - - [BitMask(typeof(Heightmap.Biome))] - public Heightmap.Biome m_biome; - - [Header("( Keys required to be TRUE )")] - public List<string> m_requiredGlobalKeys = new List<string>(); - - [Header("( Keys required to be FALSE )")] - public List<string> m_notRequiredGlobalKeys = new List<string>(); - - [Space(20f)] - public string m_startMessage = ""; - - public string m_endMessage = ""; - - public string m_forceMusic = ""; - - public string m_forceEnvironment = ""; - - public List<SpawnSystem.SpawnData> m_spawn = new List<SpawnSystem.SpawnData>(); - - private bool m_firstActivation = true; - - private bool m_active; - - [NonSerialized] - public float m_time; - - [NonSerialized] - public Vector3 m_pos = Vector3.zero; - - public RandomEvent Clone() - { - RandomEvent randomEvent = MemberwiseClone() as RandomEvent; - randomEvent.m_spawn = new List<SpawnSystem.SpawnData>(); - foreach (SpawnSystem.SpawnData item in m_spawn) - { - randomEvent.m_spawn.Add(item.Clone()); - } - return randomEvent; - } - - public bool Update(bool server, bool active, bool playerInArea, float dt) - { - if (m_pauseIfNoPlayerInArea && !playerInArea) - { - return false; - } - m_time += dt; - if (m_duration > 0f && m_time > m_duration) - { - return true; - } - return false; - } - - public void OnActivate() - { - m_active = true; - if (m_firstActivation) - { - m_firstActivation = false; - if (m_startMessage != "") - { - MessageHud.instance.ShowMessage(MessageHud.MessageType.Center, m_startMessage); - } - } - } - - public void OnDeactivate(bool end) - { - m_active = false; - if (end && m_endMessage != "") - { - MessageHud.instance.ShowMessage(MessageHud.MessageType.Center, m_endMessage); - } - } - - public string GetHudText() - { - return m_startMessage; - } - - public void OnStart() - { - } - - public void OnStop() - { - } - - public bool InEventBiome() - { - return (EnvMan.instance.GetCurrentBiome() & m_biome) != 0; - } - - public float GetTime() - { - return m_time; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RandomFlyingBird.cs b/Valheim_v202102/Valheim/assembly_valheim/RandomFlyingBird.cs deleted file mode 100644 index a47db33..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RandomFlyingBird.cs +++ /dev/null @@ -1,273 +0,0 @@ -using System; -using UnityEngine; - -public class RandomFlyingBird : MonoBehaviour -{ - public float m_flyRange = 20f; - - public float m_minAlt = 5f; - - public float m_maxAlt = 20f; - - public float m_speed = 10f; - - public float m_turnRate = 10f; - - public float m_wpDuration = 4f; - - public float m_flapDuration = 2f; - - public float m_sailDuration = 4f; - - public float m_landChance = 0.5f; - - public float m_landDuration = 2f; - - public float m_avoidDangerDistance = 4f; - - public bool m_noRandomFlightAtNight = true; - - public float m_randomNoiseIntervalMin = 3f; - - public float m_randomNoiseIntervalMax = 6f; - - public bool m_noNoiseAtNight = true; - - public EffectList m_randomNoise = new EffectList(); - - public GameObject m_flyingModel; - - public GameObject m_landedModel; - - private Vector3 m_spawnPoint; - - private Vector3 m_waypoint; - - private bool m_groundwp; - - private float m_flyTimer; - - private float m_modeTimer; - - private float m_randomNoiseTimer; - - private ZSyncAnimation m_anim; - - private bool m_flapping = true; - - private float m_landedTimer; - - private static int flapping; - - private ZNetView m_nview; - - protected LODGroup m_lodGroup; - - private Vector3 m_originalLocalRef; - - private bool m_lodVisible = true; - - private void Start() - { - m_nview = GetComponent<ZNetView>(); - m_anim = GetComponentInChildren<ZSyncAnimation>(); - m_lodGroup = GetComponent<LODGroup>(); - m_landedModel.SetActive(value: true); - m_flyingModel.SetActive(value: true); - if (flapping == 0) - { - flapping = ZSyncAnimation.GetHash("flapping"); - } - m_spawnPoint = m_nview.GetZDO().GetVec3("spawnpoint", base.transform.position); - if (m_nview.IsOwner()) - { - m_nview.GetZDO().Set("spawnpoint", m_spawnPoint); - } - m_randomNoiseTimer = UnityEngine.Random.Range(m_randomNoiseIntervalMin, m_randomNoiseIntervalMax); - if (m_nview.IsOwner()) - { - RandomizeWaypoint(ground: false); - } - if ((bool)m_lodGroup) - { - m_originalLocalRef = m_lodGroup.localReferencePoint; - } - } - - private void FixedUpdate() - { - if (!m_nview.IsValid()) - { - return; - } - float fixedDeltaTime = Time.fixedDeltaTime; - bool flag = EnvMan.instance.IsDaylight(); - m_randomNoiseTimer -= fixedDeltaTime; - if (m_randomNoiseTimer <= 0f) - { - if (flag || !m_noNoiseAtNight) - { - m_randomNoise.Create(base.transform.position, Quaternion.identity, base.transform); - } - m_randomNoiseTimer = UnityEngine.Random.Range(m_randomNoiseIntervalMin, m_randomNoiseIntervalMax); - } - bool @bool = m_nview.GetZDO().GetBool("landed"); - m_landedModel.SetActive(@bool); - m_flyingModel.SetActive(!@bool); - SetVisible(m_nview.HasOwner()); - if (!m_nview.IsOwner()) - { - return; - } - m_flyTimer += fixedDeltaTime; - m_modeTimer += fixedDeltaTime; - if (@bool) - { - Vector3 forward = base.transform.forward; - forward.y = 0f; - forward.Normalize(); - base.transform.rotation = Quaternion.LookRotation(forward, Vector3.up); - m_landedTimer += fixedDeltaTime; - if (((flag || !m_noRandomFlightAtNight) && m_landedTimer > m_landDuration) || DangerNearby(base.transform.position)) - { - m_nview.GetZDO().Set("landed", value: false); - RandomizeWaypoint(ground: false); - } - return; - } - if (m_flapping) - { - if (m_modeTimer > m_flapDuration) - { - m_modeTimer = 0f; - m_flapping = false; - } - } - else if (m_modeTimer > m_sailDuration) - { - m_flapping = true; - m_modeTimer = 0f; - } - m_anim.SetBool(flapping, m_flapping); - Vector3 vector = Vector3.Normalize(m_waypoint - base.transform.position); - float num = (m_groundwp ? (m_turnRate * 4f) : m_turnRate); - Vector3 vector2 = Vector3.RotateTowards(base.transform.forward, vector, num * ((float)Math.PI / 180f) * fixedDeltaTime, 1f); - float num2 = Vector3.SignedAngle(base.transform.forward, vector, Vector3.up); - Vector3 vector3 = Vector3.Cross(vector2, Vector3.up); - Vector3 up = Vector3.up; - if (num2 > 0f) - { - up += -vector3 * 1.5f * Utils.LerpStep(0f, 45f, num2); - } - else - { - up += vector3 * 1.5f * Utils.LerpStep(0f, 45f, 0f - num2); - } - float num3 = m_speed; - bool flag2 = false; - if (m_groundwp) - { - float num4 = Vector3.Distance(base.transform.position, m_waypoint); - if (num4 < 5f) - { - num3 *= Mathf.Clamp(num4 / 5f, 0.2f, 1f); - vector2.y = 0f; - vector2.Normalize(); - up = Vector3.up; - flag2 = true; - } - if (num4 < 0.2f) - { - base.transform.position = m_waypoint; - m_nview.GetZDO().Set("landed", value: true); - m_landedTimer = 0f; - m_flapping = true; - m_modeTimer = 0f; - } - } - else if (m_flyTimer >= m_wpDuration) - { - bool ground = UnityEngine.Random.value < m_landChance; - RandomizeWaypoint(ground); - } - Quaternion to = Quaternion.LookRotation(vector2, up.normalized); - base.transform.rotation = Quaternion.RotateTowards(base.transform.rotation, to, 200f * fixedDeltaTime); - if (flag2) - { - base.transform.position += vector * num3 * fixedDeltaTime; - } - else - { - base.transform.position += base.transform.forward * num3 * fixedDeltaTime; - } - } - - private void RandomizeWaypoint(bool ground) - { - m_flyTimer = 0f; - if (ground && FindLandingPoint(out var waypoint)) - { - m_waypoint = waypoint; - m_groundwp = true; - return; - } - Vector2 vector = UnityEngine.Random.insideUnitCircle * m_flyRange; - m_waypoint = m_spawnPoint + new Vector3(vector.x, 0f, vector.y); - if (ZoneSystem.instance.GetSolidHeight(m_waypoint, out var height)) - { - float num = ZoneSystem.instance.m_waterLevel + 2f; - if (height < num) - { - height = num; - } - m_waypoint.y = height + UnityEngine.Random.Range(m_minAlt, m_maxAlt); - } - m_groundwp = false; - } - - private bool FindLandingPoint(out Vector3 waypoint) - { - waypoint = new Vector3(0f, -999f, 0f); - bool result = false; - for (int i = 0; i < 10; i++) - { - Vector2 vector = UnityEngine.Random.insideUnitCircle * m_flyRange; - Vector3 vector2 = m_spawnPoint + new Vector3(vector.x, 0f, vector.y); - if (ZoneSystem.instance.GetSolidHeight(vector2, out var height) && height > ZoneSystem.instance.m_waterLevel && height > waypoint.y) - { - vector2.y = height; - if (!DangerNearby(vector2)) - { - waypoint = vector2; - result = true; - } - } - } - return result; - } - - private bool DangerNearby(Vector3 p) - { - if (Player.IsPlayerInRange(p, m_avoidDangerDistance)) - { - return true; - } - return false; - } - - private void SetVisible(bool visible) - { - if (!(m_lodGroup == null) && m_lodVisible != visible) - { - m_lodVisible = visible; - if (m_lodVisible) - { - m_lodGroup.localReferencePoint = m_originalLocalRef; - } - else - { - m_lodGroup.localReferencePoint = new Vector3(999999f, 999999f, 999999f); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RandomIdle.cs b/Valheim_v202102/Valheim/assembly_valheim/RandomIdle.cs deleted file mode 100644 index ca1f094..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RandomIdle.cs +++ /dev/null @@ -1,48 +0,0 @@ -using UnityEngine; - -public class RandomIdle : StateMachineBehaviour -{ - public int m_animations = 4; - - public string m_valueName = ""; - - public int m_alertedIdle = -1; - - private float m_last; - - private bool m_haveSetup; - - private BaseAI m_baseAI; - - public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) - { - int randomIdle = GetRandomIdle(animator); - animator.SetFloat(m_valueName, randomIdle); - m_last = stateInfo.normalizedTime % 1f; - } - - public override void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) - { - float num = stateInfo.normalizedTime % 1f; - if (num < m_last) - { - int randomIdle = GetRandomIdle(animator); - animator.SetFloat(m_valueName, randomIdle); - } - m_last = num; - } - - private int GetRandomIdle(Animator animator) - { - if (!m_haveSetup) - { - m_haveSetup = true; - m_baseAI = animator.GetComponentInParent<BaseAI>(); - } - if ((bool)m_baseAI && m_alertedIdle >= 0 && m_baseAI.IsAlerted()) - { - return m_alertedIdle; - } - return Random.Range(0, m_animations); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RandomMovement.cs b/Valheim_v202102/Valheim/assembly_valheim/RandomMovement.cs deleted file mode 100644 index 6f273d2..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RandomMovement.cs +++ /dev/null @@ -1,22 +0,0 @@ -using UnityEngine; - -public class RandomMovement : MonoBehaviour -{ - public float m_frequency = 10f; - - public float m_movement = 0.1f; - - private Vector3 m_basePosition = Vector3.zero; - - private void Start() - { - m_basePosition = base.transform.localPosition; - } - - private void Update() - { - float num = Time.time * m_frequency; - Vector3 vector = new Vector3(Mathf.Sin(num) * Mathf.Sin(num * 0.56436f), Mathf.Sin(num * 0.56436f) * Mathf.Sin(num * 0.688742f), Mathf.Cos(num * 0.758348f) * Mathf.Cos(num * 0.4563696f)) * m_movement; - base.transform.localPosition = m_basePosition + vector; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RandomSpawn.cs b/Valheim_v202102/Valheim/assembly_valheim/RandomSpawn.cs deleted file mode 100644 index 9038073..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RandomSpawn.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class RandomSpawn : MonoBehaviour -{ - public GameObject m_OffObject; - - [Range(0f, 100f)] - public float m_chanceToSpawn = 50f; - - private List<ZNetView> m_childNetViews; - - private ZNetView m_nview; - - public void Randomize() - { - bool spawned = Random.Range(0f, 100f) <= m_chanceToSpawn; - SetSpawned(spawned); - } - - public void Reset() - { - SetSpawned(doSpawn: true); - } - - private void SetSpawned(bool doSpawn) - { - if (!doSpawn) - { - base.gameObject.SetActive(value: false); - foreach (ZNetView childNetView in m_childNetViews) - { - childNetView.gameObject.SetActive(value: false); - } - } - else if (m_nview == null) - { - base.gameObject.SetActive(value: true); - } - if (m_OffObject != null) - { - m_OffObject.SetActive(!doSpawn); - } - } - - public void Prepare() - { - m_nview = GetComponent<ZNetView>(); - m_childNetViews = new List<ZNetView>(); - ZNetView[] componentsInChildren = base.gameObject.GetComponentsInChildren<ZNetView>(includeInactive: true); - foreach (ZNetView zNetView in componentsInChildren) - { - if (Utils.IsEnabledInheirarcy(zNetView.gameObject, base.gameObject)) - { - m_childNetViews.Add(zNetView); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RandomSpeak.cs b/Valheim_v202102/Valheim/assembly_valheim/RandomSpeak.cs deleted file mode 100644 index b879931..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RandomSpeak.cs +++ /dev/null @@ -1,45 +0,0 @@ -using UnityEngine; - -public class RandomSpeak : MonoBehaviour -{ - public float m_interval = 5f; - - public float m_chance = 0.5f; - - public float m_triggerDistance = 5f; - - public float m_cullDistance = 10f; - - public float m_ttl = 10f; - - public Vector3 m_offset = new Vector3(0f, 0f, 0f); - - public EffectList m_speakEffects = new EffectList(); - - public bool m_useLargeDialog; - - public bool m_onlyOnce; - - public string m_topic = ""; - - public string[] m_texts = new string[0]; - - private void Start() - { - InvokeRepeating("Speak", Random.Range(0f, m_interval), m_interval); - } - - private void Speak() - { - if (!(Random.value > m_chance) && m_texts.Length != 0 && !(Player.m_localPlayer == null) && !(Vector3.Distance(base.transform.position, Player.m_localPlayer.transform.position) > m_triggerDistance)) - { - m_speakEffects.Create(base.transform.position, base.transform.rotation); - string text = m_texts[Random.Range(0, m_texts.Length)]; - Chat.instance.SetNpcText(base.gameObject, m_offset, m_cullDistance, m_ttl, m_topic, text, m_useLargeDialog); - if (m_onlyOnce) - { - CancelInvoke("Speak"); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Raven.cs b/Valheim_v202102/Valheim/assembly_valheim/Raven.cs deleted file mode 100644 index 69335b7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Raven.cs +++ /dev/null @@ -1,563 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Raven : MonoBehaviour, Hoverable, Interactable, IDestructible -{ - [Serializable] - public class RavenText - { - public bool m_alwaysSpawn = true; - - public bool m_munin; - - public int m_priority; - - public string m_key = ""; - - public string m_topic = ""; - - public string m_label = ""; - - [TextArea] - public string m_text = ""; - - [NonSerialized] - public bool m_static; - - [NonSerialized] - public GuidePoint m_guidePoint; - } - - public GameObject m_visual; - - public GameObject m_exclamation; - - public string m_name = "Name"; - - public bool m_isMunin; - - public bool m_autoTalk = true; - - public float m_idleEffectIntervalMin = 10f; - - public float m_idleEffectIntervalMax = 20f; - - public float m_spawnDistance = 15f; - - public float m_despawnDistance = 20f; - - public float m_autoTalkDistance = 3f; - - public float m_enemyCheckDistance = 10f; - - public float m_rotateSpeed = 10f; - - public float m_minRotationAngle = 15f; - - public float m_dialogVisibleTime = 10f; - - public float m_longDialogVisibleTime = 10f; - - public float m_dontFlyDistance = 3f; - - public float m_textOffset = 1.5f; - - public float m_textCullDistance = 20f; - - public float m_randomTextInterval = 30f; - - public float m_randomTextIntervalImportant = 10f; - - public List<string> m_randomTextsImportant = new List<string>(); - - public List<string> m_randomTexts = new List<string>(); - - public EffectList m_idleEffect = new EffectList(); - - public EffectList m_despawnEffect = new EffectList(); - - private RavenText m_currentText; - - private GameObject m_groundObject; - - private Animator m_animator; - - private Collider m_collider; - - private bool m_hasTalked; - - private float m_randomTextTimer = 9999f; - - private float m_timeSinceTeleport = 9999f; - - private static List<RavenText> m_tempTexts = new List<RavenText>(); - - private static List<RavenText> m_staticTexts = new List<RavenText>(); - - private static Raven m_instance = null; - - public static bool IsInstantiated() - { - return m_instance != null; - } - - private void Awake() - { - base.transform.position = new Vector3(0f, 100000f, 0f); - m_instance = this; - m_animator = m_visual.GetComponentInChildren<Animator>(); - m_collider = GetComponent<Collider>(); - InvokeRepeating("IdleEffect", UnityEngine.Random.Range(m_idleEffectIntervalMin, m_idleEffectIntervalMax), UnityEngine.Random.Range(m_idleEffectIntervalMin, m_idleEffectIntervalMax)); - InvokeRepeating("CheckSpawn", 1f, 1f); - } - - private void OnDestroy() - { - if (m_instance == this) - { - m_instance = null; - } - } - - public string GetHoverText() - { - if (IsSpawned()) - { - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $raven_interact"); - } - return ""; - } - - public string GetHoverName() - { - return Localization.instance.Localize(m_name); - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - if (m_hasTalked && Chat.instance.IsDialogVisible(base.gameObject)) - { - Chat.instance.ClearNpcText(base.gameObject); - } - else - { - Talk(); - } - return false; - } - - private void Talk() - { - if ((bool)Player.m_localPlayer && m_currentText != null) - { - if (m_currentText.m_key.Length > 0) - { - Player.m_localPlayer.SetSeenTutorial(m_currentText.m_key); - GoogleAnalyticsV4.instance.LogEvent("Game", "Raven", m_currentText.m_key, 0L); - } - else - { - GoogleAnalyticsV4.instance.LogEvent("Game", "Raven", m_currentText.m_topic, 0L); - } - m_hasTalked = true; - if (m_currentText.m_label.Length > 0) - { - Player.m_localPlayer.AddKnownText(m_currentText.m_label, m_currentText.m_text); - } - Say(m_currentText.m_topic, m_currentText.m_text, showName: false, longTimeout: true, large: true); - } - } - - private void Say(string topic, string text, bool showName, bool longTimeout, bool large) - { - if (topic.Length > 0) - { - text = "<color=orange>" + topic + "</color>\n" + text; - } - Chat.instance.SetNpcText(base.gameObject, Vector3.up * m_textOffset, m_textCullDistance, longTimeout ? m_longDialogVisibleTime : m_dialogVisibleTime, showName ? m_name : "", text, large); - m_animator.SetTrigger("talk"); - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private void IdleEffect() - { - if (IsSpawned()) - { - m_idleEffect.Create(base.transform.position, base.transform.rotation); - CancelInvoke("IdleEffect"); - InvokeRepeating("IdleEffect", UnityEngine.Random.Range(m_idleEffectIntervalMin, m_idleEffectIntervalMax), UnityEngine.Random.Range(m_idleEffectIntervalMin, m_idleEffectIntervalMax)); - } - } - - private bool CanHide() - { - if (Player.m_localPlayer == null) - { - return true; - } - if (Chat.instance.IsDialogVisible(base.gameObject)) - { - return false; - } - return true; - } - - private void Update() - { - m_timeSinceTeleport += Time.deltaTime; - if (!IsAway() && !IsFlying() && (bool)Player.m_localPlayer) - { - Vector3 vector = Player.m_localPlayer.transform.position - base.transform.position; - vector.y = 0f; - vector.Normalize(); - float f = Vector3.SignedAngle(base.transform.forward, vector, Vector3.up); - if (Mathf.Abs(f) > m_minRotationAngle) - { - m_animator.SetFloat("anglevel", m_rotateSpeed * Mathf.Sign(f), 0.4f, Time.deltaTime); - base.transform.rotation = Quaternion.RotateTowards(base.transform.rotation, Quaternion.LookRotation(vector), Time.deltaTime * m_rotateSpeed); - } - else - { - m_animator.SetFloat("anglevel", 0f, 0.4f, Time.deltaTime); - } - } - if (IsSpawned()) - { - if (Player.m_localPlayer != null && !Chat.instance.IsDialogVisible(base.gameObject) && Vector3.Distance(Player.m_localPlayer.transform.position, base.transform.position) < m_autoTalkDistance) - { - m_randomTextTimer += Time.deltaTime; - float num = (m_hasTalked ? m_randomTextInterval : m_randomTextIntervalImportant); - if (m_randomTextTimer >= num) - { - m_randomTextTimer = 0f; - if (m_hasTalked) - { - Say("", m_randomTexts[UnityEngine.Random.Range(0, m_randomTexts.Count)], showName: false, longTimeout: false, large: false); - } - else - { - Say("", m_randomTextsImportant[UnityEngine.Random.Range(0, m_randomTextsImportant.Count)], showName: false, longTimeout: false, large: false); - } - } - } - if ((Player.m_localPlayer == null || Vector3.Distance(Player.m_localPlayer.transform.position, base.transform.position) > m_despawnDistance || EnemyNearby(base.transform.position) || RandEventSystem.InEvent() || m_currentText == null || m_groundObject == null || m_hasTalked) && CanHide()) - { - bool forceTeleport = GetBestText() != null || m_groundObject == null; - FlyAway(forceTeleport); - RestartSpawnCheck(3f); - } - m_exclamation.SetActive(!m_hasTalked); - } - else - { - m_exclamation.SetActive(value: false); - } - } - - private bool FindSpawnPoint(out Vector3 point, out GameObject landOn) - { - Vector3 position = Player.m_localPlayer.transform.position; - Vector3 forward = Utils.GetMainCamera().transform.forward; - forward.y = 0f; - forward.Normalize(); - point = new Vector3(0f, -999f, 0f); - landOn = null; - bool result = false; - for (int i = 0; i < 20; i++) - { - Vector3 vector = Quaternion.Euler(0f, UnityEngine.Random.Range(-30, 30), 0f) * forward; - Vector3 vector2 = position + vector * UnityEngine.Random.Range(m_spawnDistance - 5f, m_spawnDistance); - if (ZoneSystem.instance.GetSolidHeight(vector2, out var height, out var normal, out var go) && height > ZoneSystem.instance.m_waterLevel && height > point.y && height < 2000f && normal.y > 0.5f && Mathf.Abs(height - position.y) < 2f) - { - vector2.y = height; - point = vector2; - landOn = go; - result = true; - } - } - return result; - } - - private bool EnemyNearby(Vector3 point) - { - return LootSpawner.IsMonsterInRange(point, m_enemyCheckDistance); - } - - private bool InState(string name) - { - if (!m_animator.isInitialized) - { - return false; - } - if (m_animator.GetCurrentAnimatorStateInfo(0).IsTag(name)) - { - return true; - } - if (m_animator.GetNextAnimatorStateInfo(0).IsTag(name)) - { - return true; - } - return false; - } - - private RavenText GetBestText() - { - RavenText ravenText = GetTempText(); - RavenText closestStaticText = GetClosestStaticText(m_spawnDistance); - if (closestStaticText != null && (ravenText == null || closestStaticText.m_priority >= ravenText.m_priority)) - { - ravenText = closestStaticText; - } - return ravenText; - } - - private RavenText GetTempText() - { - foreach (RavenText tempText in m_tempTexts) - { - if (tempText.m_munin == m_isMunin) - { - return tempText; - } - } - return null; - } - - private RavenText GetClosestStaticText(float maxDistance) - { - if (Player.m_localPlayer == null) - { - return null; - } - RavenText ravenText = null; - float num = 9999f; - bool flag = false; - Vector3 position = Player.m_localPlayer.transform.position; - foreach (RavenText staticText in m_staticTexts) - { - if (staticText.m_munin != m_isMunin || !staticText.m_guidePoint) - { - continue; - } - float num2 = Vector3.Distance(position, staticText.m_guidePoint.transform.position); - if (!(num2 < maxDistance)) - { - continue; - } - bool flag2 = staticText.m_key.Length > 0 && Player.m_localPlayer.HaveSeenTutorial(staticText.m_key); - if (!staticText.m_alwaysSpawn && flag2) - { - continue; - } - if (ravenText == null) - { - ravenText = staticText; - num = num2; - flag = flag2; - } - else if (flag2 == flag) - { - if (staticText.m_priority == ravenText.m_priority || flag2) - { - if (num2 < num) - { - ravenText = staticText; - num = num2; - flag = flag2; - } - } - else if (staticText.m_priority > ravenText.m_priority) - { - ravenText = staticText; - num = num2; - flag = flag2; - } - } - else if (!flag2 && flag) - { - ravenText = staticText; - num = num2; - flag = flag2; - } - } - return ravenText; - } - - private void RemoveSeendTempTexts() - { - for (int i = 0; i < m_tempTexts.Count; i++) - { - if (Player.m_localPlayer.HaveSeenTutorial(m_tempTexts[i].m_key)) - { - m_tempTexts.RemoveAt(i); - break; - } - } - } - - private void FlyAway(bool forceTeleport = false) - { - Chat.instance.ClearNpcText(base.gameObject); - if (forceTeleport || IsUnderRoof()) - { - m_animator.SetTrigger("poff"); - m_timeSinceTeleport = 0f; - } - else - { - m_animator.SetTrigger("flyaway"); - } - } - - private void CheckSpawn() - { - if (!(Player.m_localPlayer == null)) - { - RemoveSeendTempTexts(); - RavenText bestText = GetBestText(); - if (IsSpawned() && CanHide() && bestText != null && bestText != m_currentText) - { - FlyAway(forceTeleport: true); - m_currentText = null; - } - if (IsAway() && bestText != null && !EnemyNearby(base.transform.position) && !RandEventSystem.InEvent()) - { - bool forceTeleport = m_timeSinceTeleport < 6f; - Spawn(bestText, forceTeleport); - } - } - } - - public DestructibleType GetDestructibleType() - { - return DestructibleType.Character; - } - - public void Damage(HitData hit) - { - if (IsSpawned()) - { - m_animator.SetTrigger("poff"); - RestartSpawnCheck(4f); - } - } - - private void RestartSpawnCheck(float delay) - { - CancelInvoke("CheckSpawn"); - InvokeRepeating("CheckSpawn", delay, 1f); - } - - private bool IsSpawned() - { - return InState("visible"); - } - - public bool IsAway() - { - return InState("away"); - } - - public bool IsFlying() - { - return InState("flying"); - } - - private void Spawn(RavenText text, bool forceTeleport) - { - if (Utils.GetMainCamera() == null) - { - return; - } - if (text.m_static) - { - m_groundObject = text.m_guidePoint.gameObject; - base.transform.position = text.m_guidePoint.transform.position; - } - else - { - if (!FindSpawnPoint(out var point, out var landOn)) - { - return; - } - base.transform.position = point; - m_groundObject = landOn; - } - m_currentText = text; - m_hasTalked = false; - m_randomTextTimer = 99999f; - if (m_currentText.m_key.Length > 0 && Player.m_localPlayer.HaveSeenTutorial(m_currentText.m_key)) - { - m_hasTalked = true; - } - Vector3 forward = Player.m_localPlayer.transform.position - base.transform.position; - forward.y = 0f; - forward.Normalize(); - base.transform.rotation = Quaternion.LookRotation(forward); - if (forceTeleport) - { - m_animator.SetTrigger("teleportin"); - } - else if (text.m_static) - { - if (IsUnderRoof()) - { - m_animator.SetTrigger("teleportin"); - } - else - { - m_animator.SetTrigger("flyin"); - } - } - else - { - m_animator.SetTrigger("flyin"); - } - } - - private bool IsUnderRoof() - { - return Physics.Raycast(base.transform.position + Vector3.up * 0.2f, Vector3.up, 20f, LayerMask.GetMask("Default", "static_solid", "piece")); - } - - public static void RegisterStaticText(RavenText text) - { - m_staticTexts.Add(text); - } - - public static void UnregisterStaticText(RavenText text) - { - m_staticTexts.Remove(text); - } - - public static void AddTempText(string key, string topic, string text, string label, bool munin) - { - if (key.Length > 0) - { - foreach (RavenText tempText in m_tempTexts) - { - if (tempText.m_key == key) - { - return; - } - } - } - RavenText ravenText = new RavenText(); - ravenText.m_key = key; - ravenText.m_topic = topic; - ravenText.m_label = label; - ravenText.m_text = text; - ravenText.m_static = false; - ravenText.m_munin = munin; - m_tempTexts.Add(ravenText); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Recipe.cs b/Valheim_v202102/Valheim/assembly_valheim/Recipe.cs deleted file mode 100644 index c3d2bc0..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Recipe.cs +++ /dev/null @@ -1,37 +0,0 @@ -using UnityEngine; - -public class Recipe : ScriptableObject -{ - public ItemDrop m_item; - - public int m_amount = 1; - - public bool m_enabled = true; - - [Header("Requirements")] - public CraftingStation m_craftingStation; - - public CraftingStation m_repairStation; - - public int m_minStationLevel = 1; - - public Piece.Requirement[] m_resources = new Piece.Requirement[0]; - - public int GetRequiredStationLevel(int quality) - { - return Mathf.Max(1, m_minStationLevel) + (quality - 1); - } - - public CraftingStation GetRequiredStation(int quality) - { - if ((bool)m_craftingStation) - { - return m_craftingStation; - } - if (quality > 1) - { - return m_repairStation; - } - return null; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ReflectionUpdate.cs b/Valheim_v202102/Valheim/assembly_valheim/ReflectionUpdate.cs deleted file mode 100644 index d88d045..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ReflectionUpdate.cs +++ /dev/null @@ -1,84 +0,0 @@ -using UnityEngine; - -public class ReflectionUpdate : MonoBehaviour -{ - private static ReflectionUpdate m_instance; - - public ReflectionProbe m_probe1; - - public ReflectionProbe m_probe2; - - public float m_interval = 3f; - - public float m_reflectionHeight = 5f; - - public float m_transitionDuration = 3f; - - public float m_power = 1f; - - private ReflectionProbe m_current; - - private int m_renderID; - - private float m_updateTimer; - - public static ReflectionUpdate instance => m_instance; - - private void Start() - { - m_instance = this; - m_current = m_probe1; - } - - private void OnDestroy() - { - m_instance = null; - } - - public void UpdateReflection() - { - Vector3 referencePosition = ZNet.instance.GetReferencePosition(); - referencePosition += Vector3.up * m_reflectionHeight; - m_current = ((m_current == m_probe1) ? m_probe2 : m_probe1); - m_current.transform.position = referencePosition; - m_renderID = m_current.RenderProbe(); - } - - private void Update() - { - float deltaTime = Time.deltaTime; - m_updateTimer += deltaTime; - if (m_updateTimer > m_interval) - { - m_updateTimer = 0f; - UpdateReflection(); - } - if (m_current.IsFinishedRendering(m_renderID)) - { - float f = Mathf.Clamp01(m_updateTimer / m_transitionDuration); - f = Mathf.Pow(f, m_power); - if (m_probe1 == m_current) - { - m_probe1.importance = 1; - m_probe2.importance = 0; - Vector3 size = m_probe1.size; - size.x = 2000f * f; - size.y = 1000f * f; - size.z = 2000f * f; - m_probe1.size = size; - m_probe2.size = new Vector3(2001f, 1001f, 2001f); - } - else - { - m_probe1.importance = 0; - m_probe2.importance = 1; - Vector3 size2 = m_probe2.size; - size2.x = 2000f * f; - size2.y = 1000f * f; - size2.z = 2000f * f; - m_probe2.size = size2; - m_probe1.size = new Vector3(2001f, 1001f, 2001f); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Room.cs b/Valheim_v202102/Valheim/assembly_valheim/Room.cs deleted file mode 100644 index 31dc7e6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Room.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Room : MonoBehaviour -{ - public enum Theme - { - Crypt = 1, - SunkenCrypt = 2, - Cave = 4, - ForestCrypt = 8, - GoblinCamp = 0x10, - MeadowsVillage = 0x20, - MeadowsFarm = 0x40 - } - - private static List<RoomConnection> tempConnections = new List<RoomConnection>(); - - public Vector3Int m_size = new Vector3Int(8, 4, 8); - - [BitMask(typeof(Theme))] - public Theme m_theme = Theme.Crypt; - - public bool m_enabled = true; - - public bool m_entrance; - - public bool m_endCap; - - public int m_endCapPrio; - - public int m_minPlaceOrder; - - public float m_weight = 1f; - - public bool m_faceCenter; - - public bool m_perimeter; - - [NonSerialized] - public int m_placeOrder; - - private RoomConnection[] m_roomConnections; - - private void OnDrawGizmos() - { - Gizmos.color = new Color(0.5f, 0.5f, 0.5f, 0.5f); - Gizmos.matrix = Matrix4x4.TRS(base.transform.position, base.transform.rotation, new Vector3(1f, 1f, 1f)); - Gizmos.DrawWireCube(Vector3.zero, new Vector3(m_size.x, m_size.y, m_size.z)); - Gizmos.matrix = Matrix4x4.identity; - } - - public int GetHash() - { - return ZNetView.GetPrefabName(base.gameObject).GetStableHashCode(); - } - - private void OnEnable() - { - m_roomConnections = null; - } - - public RoomConnection[] GetConnections() - { - if (m_roomConnections == null) - { - m_roomConnections = GetComponentsInChildren<RoomConnection>(includeInactive: false); - } - return m_roomConnections; - } - - public RoomConnection GetConnection(RoomConnection other) - { - RoomConnection[] connections = GetConnections(); - tempConnections.Clear(); - RoomConnection[] array = connections; - foreach (RoomConnection roomConnection in array) - { - if (roomConnection.m_type == other.m_type) - { - tempConnections.Add(roomConnection); - } - } - if (tempConnections.Count == 0) - { - return null; - } - return tempConnections[UnityEngine.Random.Range(0, tempConnections.Count)]; - } - - public RoomConnection GetEntrance() - { - RoomConnection[] connections = GetConnections(); - ZLog.Log("Connections " + connections.Length); - RoomConnection[] array = connections; - foreach (RoomConnection roomConnection in array) - { - if (roomConnection.m_entrance) - { - return roomConnection; - } - } - return null; - } - - public bool HaveConnection(RoomConnection other) - { - RoomConnection[] connections = GetConnections(); - for (int i = 0; i < connections.Length; i++) - { - if (connections[i].m_type == other.m_type) - { - return true; - } - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RoomConnection.cs b/Valheim_v202102/Valheim/assembly_valheim/RoomConnection.cs deleted file mode 100644 index 36d0285..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RoomConnection.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using UnityEngine; - -public class RoomConnection : MonoBehaviour -{ - public string m_type = ""; - - public bool m_entrance; - - public bool m_allowDoor = true; - - [NonSerialized] - public int m_placeOrder; - - private void OnDrawGizmos() - { - if (m_entrance) - { - Gizmos.color = Color.white; - } - else - { - Gizmos.color = new Color(1f, 1f, 0f, 1f); - } - Gizmos.matrix = Matrix4x4.TRS(base.transform.position, base.transform.rotation, new Vector3(1f, 1f, 1f)); - Gizmos.DrawCube(Vector3.zero, new Vector3(2f, 0.02f, 0.2f)); - Gizmos.DrawCube(new Vector3(0f, 0f, 0.35f), new Vector3(0.2f, 0.02f, 0.5f)); - Gizmos.matrix = Matrix4x4.identity; - } - - public bool TestContact(RoomConnection other) - { - return Vector3.Distance(base.transform.position, other.transform.position) < 0.1f; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RopeAttachment.cs b/Valheim_v202102/Valheim/assembly_valheim/RopeAttachment.cs deleted file mode 100644 index 893038a..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RopeAttachment.cs +++ /dev/null @@ -1,66 +0,0 @@ -using UnityEngine; - -public class RopeAttachment : MonoBehaviour, Interactable, Hoverable -{ - public string m_name = "Rope"; - - public string m_hoverText = "Pull"; - - public float m_pullDistance = 5f; - - public float m_pullForce = 1f; - - public float m_maxPullVel = 1f; - - private Rigidbody m_boatBody; - - private Character m_puller; - - private void Awake() - { - m_boatBody = GetComponentInParent<Rigidbody>(); - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - if ((bool)m_puller) - { - m_puller = null; - ZLog.Log("Detached rope"); - } - else - { - m_puller = character; - ZLog.Log("Attached rope"); - } - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public string GetHoverText() - { - return m_hoverText; - } - - public string GetHoverName() - { - return m_name; - } - - private void FixedUpdate() - { - if ((bool)m_puller && Vector3.Distance(m_puller.transform.position, base.transform.position) > m_pullDistance) - { - Vector3 position = ((m_puller.transform.position - base.transform.position).normalized * m_maxPullVel - m_boatBody.GetPointVelocity(base.transform.position)) * m_pullForce; - m_boatBody.AddForceAtPosition(base.transform.position, position); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RoutedMethod.cs b/Valheim_v202102/Valheim/assembly_valheim/RoutedMethod.cs deleted file mode 100644 index 1db0574..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RoutedMethod.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System; - -internal class RoutedMethod : RoutedMethodBase -{ - private Action<long> m_action; - - public RoutedMethod(Action<long> action) - { - m_action = action; - } - - public void Invoke(long rpc, ZPackage pkg) - { - m_action(rpc); - } -} -internal class RoutedMethod<T> : RoutedMethodBase -{ - private Action<long, T> m_action; - - public RoutedMethod(Action<long, T> action) - { - m_action = action; - } - - public void Invoke(long rpc, ZPackage pkg) - { - m_action.DynamicInvoke(ZNetView.Deserialize(rpc, m_action.Method.GetParameters(), pkg)); - } -} -internal class RoutedMethod<T, U> : RoutedMethodBase -{ - private Action<long, T, U> m_action; - - public RoutedMethod(Action<long, T, U> action) - { - m_action = action; - } - - public void Invoke(long rpc, ZPackage pkg) - { - m_action.DynamicInvoke(ZNetView.Deserialize(rpc, m_action.Method.GetParameters(), pkg)); - } -} -internal class RoutedMethod<T, U, V> : RoutedMethodBase -{ - private Action<long, T, U, V> m_action; - - public RoutedMethod(Action<long, T, U, V> action) - { - m_action = action; - } - - public void Invoke(long rpc, ZPackage pkg) - { - m_action.DynamicInvoke(ZNetView.Deserialize(rpc, m_action.Method.GetParameters(), pkg)); - } -} -public class RoutedMethod<T, U, V, B> : RoutedMethodBase -{ - public delegate void Method(long sender, T p0, U p1, V p2, B p3); - - private Method m_action; - - public RoutedMethod(Method action) - { - m_action = action; - } - - public void Invoke(long rpc, ZPackage pkg) - { - m_action.DynamicInvoke(ZNetView.Deserialize(rpc, m_action.Method.GetParameters(), pkg)); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RoutedMethodBase.cs b/Valheim_v202102/Valheim/assembly_valheim/RoutedMethodBase.cs deleted file mode 100644 index 1039b5d..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RoutedMethodBase.cs +++ /dev/null @@ -1,4 +0,0 @@ -internal interface RoutedMethodBase -{ - void Invoke(long rpc, ZPackage pkg); -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/RuneStone.cs b/Valheim_v202102/Valheim/assembly_valheim/RuneStone.cs deleted file mode 100644 index c245a30..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/RuneStone.cs +++ /dev/null @@ -1,83 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class RuneStone : MonoBehaviour, Hoverable, Interactable -{ - [Serializable] - public class RandomRuneText - { - public string m_topic = ""; - - public string m_label = ""; - - public string m_text = ""; - } - - public string m_name = "Rune stone"; - - public string m_topic = ""; - - public string m_label = ""; - - public string m_text = ""; - - public List<RandomRuneText> m_randomTexts; - - public string GetHoverText() - { - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_rune_read"); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - Player player = character as Player; - RandomRuneText randomText = GetRandomText(); - if (randomText != null) - { - if (randomText.m_label.Length > 0) - { - player.AddKnownText(randomText.m_label, randomText.m_text); - } - TextViewer.instance.ShowText(TextViewer.Style.Rune, randomText.m_topic, randomText.m_text, autoHide: true); - } - else - { - if (m_label.Length > 0) - { - player.AddKnownText(m_label, m_text); - } - TextViewer.instance.ShowText(TextViewer.Style.Rune, m_topic, m_text, autoHide: true); - } - return false; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private RandomRuneText GetRandomText() - { - if (m_randomTexts.Count == 0) - { - return null; - } - Vector3 position = base.transform.position; - int seed = (int)position.x * (int)position.z; - UnityEngine.Random.State state = UnityEngine.Random.state; - UnityEngine.Random.InitState(seed); - RandomRuneText result = m_randomTexts[UnityEngine.Random.Range(0, m_randomTexts.Count)]; - UnityEngine.Random.state = state; - return result; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SEMan.cs b/Valheim_v202102/Valheim/assembly_valheim/SEMan.cs deleted file mode 100644 index 6788e8b..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SEMan.cs +++ /dev/null @@ -1,321 +0,0 @@ -using System.Collections.Generic; - -public class SEMan -{ - protected List<StatusEffect> m_statusEffects = new List<StatusEffect>(); - - private List<StatusEffect> m_removeStatusEffects = new List<StatusEffect>(); - - private int m_statusEffectAttributes; - - private Character m_character; - - private ZNetView m_nview; - - public SEMan(Character character, ZNetView nview) - { - m_character = character; - m_nview = nview; - m_nview.Register<string, bool>("AddStatusEffect", RPC_AddStatusEffect); - } - - public void OnDestroy() - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.OnDestroy(); - } - m_statusEffects.Clear(); - } - - public void ApplyStatusEffectSpeedMods(ref float speed) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifySpeed(ref speed); - } - } - - public void ApplyDamageMods(ref HitData.DamageModifiers mods) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifyDamageMods(ref mods); - } - } - - public void Update(float dt) - { - m_statusEffectAttributes = 0; - int count = m_statusEffects.Count; - for (int i = 0; i < count; i++) - { - StatusEffect statusEffect = m_statusEffects[i]; - statusEffect.UpdateStatusEffect(dt); - if (statusEffect.IsDone()) - { - m_removeStatusEffects.Add(statusEffect); - } - else - { - m_statusEffectAttributes |= (int)statusEffect.m_attributes; - } - } - if (m_removeStatusEffects.Count > 0) - { - foreach (StatusEffect removeStatusEffect in m_removeStatusEffects) - { - removeStatusEffect.Stop(); - m_statusEffects.Remove(removeStatusEffect); - } - m_removeStatusEffects.Clear(); - } - m_nview.GetZDO().Set("seAttrib", m_statusEffectAttributes); - } - - public StatusEffect AddStatusEffect(string name, bool resetTime = false) - { - if (m_nview.IsOwner()) - { - return Internal_AddStatusEffect(name, resetTime); - } - m_nview.InvokeRPC("AddStatusEffect", name, resetTime); - return null; - } - - private void RPC_AddStatusEffect(long sender, string name, bool resetTime) - { - if (m_nview.IsOwner()) - { - Internal_AddStatusEffect(name, resetTime); - } - } - - private StatusEffect Internal_AddStatusEffect(string name, bool resetTime) - { - StatusEffect statusEffect = GetStatusEffect(name); - if ((bool)statusEffect) - { - if (resetTime) - { - statusEffect.ResetTime(); - } - return null; - } - StatusEffect statusEffect2 = ObjectDB.instance.GetStatusEffect(name); - if (statusEffect2 == null) - { - return null; - } - return AddStatusEffect(statusEffect2); - } - - public StatusEffect AddStatusEffect(StatusEffect statusEffect, bool resetTime = false) - { - StatusEffect statusEffect2 = GetStatusEffect(statusEffect.name); - if ((bool)statusEffect2) - { - if (resetTime) - { - statusEffect2.ResetTime(); - } - return null; - } - if (!statusEffect.CanAdd(m_character)) - { - return null; - } - StatusEffect statusEffect3 = statusEffect.Clone(); - m_statusEffects.Add(statusEffect3); - statusEffect3.Setup(m_character); - if (m_character.IsPlayer()) - { - GoogleAnalyticsV4.instance.LogEvent("Game", "StatusEffect", statusEffect.name, 0L); - } - return statusEffect3; - } - - public bool RemoveStatusEffect(StatusEffect se, bool quiet = false) - { - return RemoveStatusEffect(se.name, quiet); - } - - public bool RemoveStatusEffect(string name, bool quiet = false) - { - for (int i = 0; i < m_statusEffects.Count; i++) - { - StatusEffect statusEffect = m_statusEffects[i]; - if (statusEffect.name == name) - { - if (quiet) - { - statusEffect.m_stopMessage = ""; - } - statusEffect.Stop(); - m_statusEffects.Remove(statusEffect); - return true; - } - } - return false; - } - - public bool HaveStatusEffectCategory(string cat) - { - if (cat.Length == 0) - { - return false; - } - for (int i = 0; i < m_statusEffects.Count; i++) - { - StatusEffect statusEffect = m_statusEffects[i]; - if (statusEffect.m_category.Length > 0 && statusEffect.m_category == cat) - { - return true; - } - } - return false; - } - - public bool HaveStatusAttribute(StatusEffect.StatusAttribute value) - { - if (!m_nview.IsValid()) - { - return false; - } - if (m_nview.IsOwner()) - { - return ((uint)m_statusEffectAttributes & (uint)value) != 0; - } - return ((uint)m_nview.GetZDO().GetInt("seAttrib") & (uint)value) != 0; - } - - public bool HaveStatusEffect(string name) - { - for (int i = 0; i < m_statusEffects.Count; i++) - { - if (m_statusEffects[i].name == name) - { - return true; - } - } - return false; - } - - public List<StatusEffect> GetStatusEffects() - { - return m_statusEffects; - } - - public StatusEffect GetStatusEffect(string name) - { - for (int i = 0; i < m_statusEffects.Count; i++) - { - StatusEffect statusEffect = m_statusEffects[i]; - if (statusEffect.name == name) - { - return statusEffect; - } - } - return null; - } - - public void GetHUDStatusEffects(List<StatusEffect> effects) - { - for (int i = 0; i < m_statusEffects.Count; i++) - { - StatusEffect statusEffect = m_statusEffects[i]; - if ((bool)statusEffect.m_icon) - { - effects.Add(statusEffect); - } - } - } - - public void ModifyNoise(float baseNoise, ref float noise) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifyNoise(baseNoise, ref noise); - } - } - - public void ModifyRaiseSkill(Skills.SkillType skill, ref float multiplier) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifyRaiseSkill(skill, ref multiplier); - } - } - - public void ModifyStaminaRegen(ref float staminaMultiplier) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifyStaminaRegen(ref staminaMultiplier); - } - } - - public void ModifyHealthRegen(ref float regenMultiplier) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifyHealthRegen(ref regenMultiplier); - } - } - - public void ModifyMaxCarryWeight(float baseLimit, ref float limit) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifyMaxCarryWeight(baseLimit, ref limit); - } - } - - public void ModifyStealth(float baseStealth, ref float stealth) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifyStealth(baseStealth, ref stealth); - } - } - - public void ModifyAttack(Skills.SkillType skill, ref HitData hitData) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifyAttack(skill, ref hitData); - } - } - - public void ModifyRunStaminaDrain(float baseDrain, ref float drain) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifyRunStaminaDrain(baseDrain, ref drain); - } - if (drain < 0f) - { - drain = 0f; - } - } - - public void ModifyJumpStaminaUsage(float baseStaminaUse, ref float staminaUse) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.ModifyJumpStaminaUsage(baseStaminaUse, ref staminaUse); - } - if (staminaUse < 0f) - { - staminaUse = 0f; - } - } - - public void OnDamaged(HitData hit, Character attacker) - { - foreach (StatusEffect statusEffect in m_statusEffects) - { - statusEffect.OnDamaged(hit, attacker); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Burning.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Burning.cs deleted file mode 100644 index c49db65..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Burning.cs +++ /dev/null @@ -1,54 +0,0 @@ -using UnityEngine; - -public class SE_Burning : StatusEffect -{ - [Header("SE_Burning")] - public float m_damageInterval = 1f; - - private float m_timer; - - private float m_totalDamage; - - private HitData.DamageTypes m_damage; - - public override void Setup(Character character) - { - base.Setup(character); - } - - public override void UpdateStatusEffect(float dt) - { - base.UpdateStatusEffect(dt); - if (m_character.GetSEMan().HaveStatusEffect("Wet")) - { - m_time += dt * 5f; - } - m_timer -= dt; - if (m_timer <= 0f) - { - m_timer = m_damageInterval; - HitData hitData = new HitData(); - hitData.m_point = m_character.GetCenterPoint(); - hitData.m_damage = m_damage.Clone(); - m_character.ApplyDamage(hitData, showDamageText: true, triggerEffects: false); - } - } - - public void AddFireDamage(float damage) - { - m_totalDamage = Mathf.Max(m_totalDamage, damage); - int num = (int)(m_ttl / m_damageInterval); - float fire = m_totalDamage / (float)num; - m_damage.m_fire = fire; - ResetTime(); - } - - public void AddSpiritDamage(float damage) - { - m_totalDamage = Mathf.Max(m_totalDamage, damage); - int num = (int)(m_ttl / m_damageInterval); - float spirit = m_totalDamage / (float)num; - m_damage.m_spirit = spirit; - ResetTime(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Cozy.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Cozy.cs deleted file mode 100644 index 20ecf8c..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Cozy.cs +++ /dev/null @@ -1,34 +0,0 @@ -using UnityEngine; - -public class SE_Cozy : SE_Stats -{ - [Header("__SE_Cozy__")] - public float m_delay = 10f; - - public string m_statusEffect = ""; - - private int m_comfortLevel; - - private float m_updateTimer; - - public override void Setup(Character character) - { - base.Setup(character); - m_character.Message(MessageHud.MessageType.Center, "$se_resting_start"); - } - - public override void UpdateStatusEffect(float dt) - { - base.UpdateStatusEffect(dt); - if (m_time > m_delay) - { - m_character.GetSEMan().AddStatusEffect(m_statusEffect, resetTime: true); - } - } - - public override string GetIconText() - { - Player player = m_character as Player; - return Localization.instance.Localize("$se_rested_comfort:" + player.GetComfortLevel()); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Finder.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Finder.cs deleted file mode 100644 index d38cb25..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Finder.cs +++ /dev/null @@ -1,71 +0,0 @@ -using UnityEngine; - -public class SE_Finder : StatusEffect -{ - [Header("SE_Finder")] - public EffectList m_pingEffectNear = new EffectList(); - - public EffectList m_pingEffectMed = new EffectList(); - - public EffectList m_pingEffectFar = new EffectList(); - - public float m_closerTriggerDistance = 2f; - - public float m_furtherTriggerDistance = 4f; - - public float m_closeFrequency = 1f; - - public float m_distantFrequency = 5f; - - private float m_updateBeaconTimer; - - private float m_pingTimer; - - private Beacon m_beacon; - - private float m_lastDistance; - - public override void UpdateStatusEffect(float dt) - { - m_updateBeaconTimer += dt; - if (m_updateBeaconTimer > 1f) - { - m_updateBeaconTimer = 0f; - Beacon beacon = Beacon.FindClosestBeaconInRange(m_character.transform.position); - if (beacon != m_beacon) - { - m_beacon = beacon; - if ((bool)m_beacon) - { - m_lastDistance = Utils.DistanceXZ(m_character.transform.position, m_beacon.transform.position); - m_pingTimer = 0f; - } - } - } - if (!(m_beacon != null)) - { - return; - } - float num = Utils.DistanceXZ(m_character.transform.position, m_beacon.transform.position); - float num2 = Mathf.Clamp01(num / m_beacon.m_range); - float num3 = Mathf.Lerp(m_closeFrequency, m_distantFrequency, num2); - m_pingTimer += dt; - if (m_pingTimer > num3) - { - m_pingTimer = 0f; - if (num2 < 0.2f) - { - m_pingEffectNear.Create(m_character.transform.position, m_character.transform.rotation, m_character.transform); - } - else if (num2 < 0.6f) - { - m_pingEffectMed.Create(m_character.transform.position, m_character.transform.rotation, m_character.transform); - } - else - { - m_pingEffectFar.Create(m_character.transform.position, m_character.transform.rotation, m_character.transform); - } - m_lastDistance = num; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Frost.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Frost.cs deleted file mode 100644 index e988a7d..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Frost.cs +++ /dev/null @@ -1,36 +0,0 @@ -using UnityEngine; - -public class SE_Frost : StatusEffect -{ - [Header("SE_Frost")] - public float m_freezeTimeEnemy = 10f; - - public float m_freezeTimePlayer = 10f; - - public float m_minSpeedFactor = 0.1f; - - public override void UpdateStatusEffect(float dt) - { - base.UpdateStatusEffect(dt); - } - - public void AddDamage(float damage) - { - float num = (m_character.IsPlayer() ? m_freezeTimePlayer : m_freezeTimeEnemy); - float num2 = Mathf.Clamp01(damage / m_character.GetMaxHealth()) * num; - float num3 = m_ttl - m_time; - if (num2 > num3) - { - m_ttl = num2; - ResetTime(); - TriggerStartEffects(); - } - } - - public override void ModifySpeed(ref float speed) - { - float f = Mathf.Clamp01(m_time / m_ttl); - f = Mathf.Pow(f, 2f); - speed *= Mathf.Clamp(f, m_minSpeedFactor, 1f); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Harpooned.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Harpooned.cs deleted file mode 100644 index b145556..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Harpooned.cs +++ /dev/null @@ -1,128 +0,0 @@ -using UnityEngine; - -public class SE_Harpooned : StatusEffect -{ - [Header("SE_Harpooned")] - public float m_minForce = 2f; - - public float m_maxForce = 10f; - - public float m_minDistance = 6f; - - public float m_maxDistance = 30f; - - public float m_staminaDrain = 10f; - - public float m_staminaDrainInterval = 0.1f; - - public float m_maxMass = 50f; - - private bool m_broken; - - private Character m_attacker; - - private float m_drainStaminaTimer; - - public override void Setup(Character character) - { - base.Setup(character); - } - - public override void SetAttacker(Character attacker) - { - ZLog.Log("Setting attacker " + attacker.m_name); - m_attacker = attacker; - m_time = 0f; - if (Vector3.Distance(m_attacker.transform.position, m_character.transform.position) > m_maxDistance) - { - m_attacker.Message(MessageHud.MessageType.Center, "Target too far"); - m_broken = true; - return; - } - m_attacker.Message(MessageHud.MessageType.Center, m_character.m_name + " harpooned"); - GameObject[] startEffectInstances = m_startEffectInstances; - foreach (GameObject gameObject in startEffectInstances) - { - if ((bool)gameObject) - { - LineConnect component = gameObject.GetComponent<LineConnect>(); - if ((bool)component) - { - component.SetPeer(m_attacker.GetComponent<ZNetView>()); - } - } - } - } - - public override void UpdateStatusEffect(float dt) - { - base.UpdateStatusEffect(dt); - if (!m_attacker) - { - return; - } - Rigidbody component = m_character.GetComponent<Rigidbody>(); - if (!component) - { - return; - } - Vector3 vector = m_attacker.transform.position - m_character.transform.position; - Vector3 normalized = vector.normalized; - float radius = m_character.GetRadius(); - float magnitude = vector.magnitude; - float num = Mathf.Clamp01(Vector3.Dot(normalized, component.velocity)); - float t = Utils.LerpStep(m_minDistance, m_maxDistance, magnitude); - float num2 = Mathf.Lerp(m_minForce, m_maxForce, t); - float num3 = Mathf.Clamp01(m_maxMass / component.mass); - float num4 = num2 * num3; - if (magnitude - radius > m_minDistance && num < num4) - { - normalized.y = 0f; - normalized.Normalize(); - _ = (bool)m_character.GetStandingOnShip(); - if (!m_character.IsAttached()) - { - component.AddForce(normalized * num4, ForceMode.VelocityChange); - } - m_drainStaminaTimer += dt; - if (m_drainStaminaTimer > m_staminaDrainInterval) - { - m_drainStaminaTimer = 0f; - float num5 = 1f - Mathf.Clamp01(num / num2); - m_attacker.UseStamina(m_staminaDrain * num5); - } - } - if (magnitude > m_maxDistance) - { - m_broken = true; - m_attacker.Message(MessageHud.MessageType.Center, "Line broke"); - } - if (!m_attacker.HaveStamina()) - { - m_broken = true; - m_attacker.Message(MessageHud.MessageType.Center, m_character.m_name + " escaped"); - } - } - - public override bool IsDone() - { - if (base.IsDone()) - { - return true; - } - if (m_broken) - { - return true; - } - if (!m_attacker) - { - return true; - } - if (m_time > 2f && (m_attacker.IsBlocking() || m_attacker.InAttack())) - { - m_attacker.Message(MessageHud.MessageType.Center, m_character.m_name + " released"); - return true; - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_HealthUpgrade.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_HealthUpgrade.cs deleted file mode 100644 index a733ac9..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_HealthUpgrade.cs +++ /dev/null @@ -1,36 +0,0 @@ -using UnityEngine; - -public class SE_HealthUpgrade : StatusEffect -{ - [Header("Health")] - public float m_moreHealth; - - [Header("Stamina")] - public float m_moreStamina; - - public EffectList m_upgradeEffect = new EffectList(); - - public override void Setup(Character character) - { - base.Setup(character); - } - - public override void Stop() - { - base.Stop(); - Player player = m_character as Player; - if ((bool)player) - { - if (m_moreHealth > 0f) - { - player.SetMaxHealth(m_character.GetMaxHealth() + m_moreHealth, flashBar: true); - player.SetHealth(m_character.GetMaxHealth()); - } - if (m_moreStamina > 0f) - { - player.SetMaxStamina(m_character.GetMaxStamina() + m_moreStamina, flashBar: true); - } - m_upgradeEffect.Create(m_character.transform.position, Quaternion.identity); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Poison.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Poison.cs deleted file mode 100644 index 7da4506..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Poison.cs +++ /dev/null @@ -1,50 +0,0 @@ -using UnityEngine; - -public class SE_Poison : StatusEffect -{ - [Header("SE_Poison")] - public float m_damageInterval = 1f; - - public float m_baseTTL = 2f; - - public float m_TTLPerDamagePlayer = 2f; - - public float m_TTLPerDamage = 2f; - - public float m_TTLPower = 0.5f; - - private float m_timer; - - private float m_damageLeft; - - private float m_damagePerHit; - - public override void UpdateStatusEffect(float dt) - { - base.UpdateStatusEffect(dt); - m_timer -= dt; - if (m_timer <= 0f) - { - m_timer = m_damageInterval; - HitData hitData = new HitData(); - hitData.m_point = m_character.GetCenterPoint(); - hitData.m_damage.m_poison = m_damagePerHit; - m_damageLeft -= m_damagePerHit; - m_character.ApplyDamage(hitData, showDamageText: true, triggerEffects: false); - } - } - - public void AddDamage(float damage) - { - if (damage >= m_damageLeft) - { - m_damageLeft = damage; - float num = (m_character.IsPlayer() ? m_TTLPerDamagePlayer : m_TTLPerDamage); - m_ttl = m_baseTTL + Mathf.Pow(m_damageLeft * num, m_TTLPower); - int num2 = (int)(m_ttl / m_damageInterval); - m_damagePerHit = m_damageLeft / (float)num2; - ZLog.Log("Poison damage: " + m_damageLeft + " ttl:" + m_ttl + " hits:" + num2 + " dmg perhit:" + m_damagePerHit); - ResetTime(); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Rested.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Rested.cs deleted file mode 100644 index 8af611f..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Rested.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class SE_Rested : SE_Stats -{ - private static int ghostLayer = 0; - - private static List<Piece> m_tempPieces = new List<Piece>(); - - [Header("__SE_Rested__")] - public float m_baseTTL = 300f; - - public float m_TTLPerComfortLevel = 60f; - - private const float m_comfortRadius = 10f; - - private float m_timeSinceComfortUpdate; - - public override void Setup(Character character) - { - base.Setup(character); - UpdateTTL(); - Player player = m_character as Player; - m_character.Message(MessageHud.MessageType.Center, "$se_rested_start ($se_rested_comfort:" + player.GetComfortLevel() + ")"); - } - - public override void UpdateStatusEffect(float dt) - { - base.UpdateStatusEffect(dt); - m_timeSinceComfortUpdate -= dt; - } - - public override void ResetTime() - { - UpdateTTL(); - } - - private void UpdateTTL() - { - Player player = m_character as Player; - float num = m_baseTTL + (float)(player.GetComfortLevel() - 1) * m_TTLPerComfortLevel; - float num2 = m_ttl - m_time; - if (num > num2) - { - m_ttl = num; - m_time = 0f; - } - } - - private static int PieceComfortSort(Piece x, Piece y) - { - if (x.m_comfortGroup != y.m_comfortGroup) - { - return x.m_comfortGroup.CompareTo(y.m_comfortGroup); - } - if (x.m_comfort != y.m_comfort) - { - return x.m_comfort.CompareTo(y.m_comfort); - } - return y.m_name.CompareTo(x.m_name); - } - - public static int CalculateComfortLevel(Player player) - { - if (ghostLayer == 0) - { - ghostLayer = LayerMask.NameToLayer("ghost"); - } - List<Piece> nearbyPieces = GetNearbyPieces(player.transform.position); - nearbyPieces.Sort(PieceComfortSort); - int num = 1; - if (player.InShelter()) - { - num++; - for (int i = 0; i < nearbyPieces.Count; i++) - { - Piece piece = nearbyPieces[i]; - if (i > 0) - { - Piece piece2 = nearbyPieces[i - 1]; - if (piece2.gameObject.layer == ghostLayer || (piece.m_comfortGroup != 0 && piece.m_comfortGroup == piece2.m_comfortGroup) || piece.m_name == piece2.m_name) - { - continue; - } - } - num += piece.m_comfort; - } - } - return num; - } - - private static List<Piece> GetNearbyPieces(Vector3 point) - { - m_tempPieces.Clear(); - Piece.GetAllPiecesInRadius(point, 10f, m_tempPieces); - return m_tempPieces; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Shield.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Shield.cs deleted file mode 100644 index 0fd1124..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Shield.cs +++ /dev/null @@ -1,36 +0,0 @@ -using UnityEngine; - -public class SE_Shield : StatusEffect -{ - [Header("__SE_Shield__")] - public float m_absorbDamage = 100f; - - public EffectList m_breakEffects = new EffectList(); - - public EffectList m_hitEffects = new EffectList(); - - private float m_damage; - - public override void Setup(Character character) - { - base.Setup(character); - } - - public override bool IsDone() - { - if (m_damage > m_absorbDamage) - { - m_breakEffects.Create(m_character.GetCenterPoint(), m_character.transform.rotation, m_character.transform, m_character.GetRadius() * 2f); - return true; - } - return base.IsDone(); - } - - public override void OnDamaged(HitData hit, Character attacker) - { - float totalDamage = hit.GetTotalDamage(); - m_damage += totalDamage; - hit.ApplyModifier(0f); - m_hitEffects.Create(hit.m_point, Quaternion.identity); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Smoke.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Smoke.cs deleted file mode 100644 index bc47a88..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Smoke.cs +++ /dev/null @@ -1,34 +0,0 @@ -using UnityEngine; - -public class SE_Smoke : StatusEffect -{ - [Header("SE_Burning")] - public HitData.DamageTypes m_damage; - - public float m_damageInterval = 1f; - - private float m_timer; - - public override bool CanAdd(Character character) - { - if (character.m_tolerateSmoke) - { - return false; - } - return base.CanAdd(character); - } - - public override void UpdateStatusEffect(float dt) - { - base.UpdateStatusEffect(dt); - m_timer += dt; - if (m_timer > m_damageInterval) - { - m_timer = 0f; - HitData hitData = new HitData(); - hitData.m_point = m_character.GetCenterPoint(); - hitData.m_damage = m_damage; - m_character.ApplyDamage(hitData, showDamageText: true, triggerEffects: false); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Spawn.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Spawn.cs deleted file mode 100644 index 0a8ec6c..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Spawn.cs +++ /dev/null @@ -1,32 +0,0 @@ -using UnityEngine; - -public class SE_Spawn : StatusEffect -{ - [Header("__SE_Spawn__")] - public float m_delay = 10f; - - public GameObject m_prefab; - - public Vector3 m_spawnOffset = new Vector3(0f, 0f, 0f); - - public EffectList m_spawnEffect = new EffectList(); - - private bool m_spawned; - - public override void UpdateStatusEffect(float dt) - { - base.UpdateStatusEffect(dt); - if (!m_spawned && m_time > m_delay) - { - m_spawned = true; - Vector3 position = m_character.transform.TransformVector(m_spawnOffset); - GameObject gameObject = Object.Instantiate(m_prefab, position, Quaternion.identity); - Projectile component = gameObject.GetComponent<Projectile>(); - if ((bool)component) - { - component.Setup(m_character, Vector3.zero, -1f, null, null); - } - m_spawnEffect.Create(gameObject.transform.position, gameObject.transform.rotation); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Stats.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Stats.cs deleted file mode 100644 index 91aab87..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Stats.cs +++ /dev/null @@ -1,322 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class SE_Stats : StatusEffect -{ - [Header("__SE_Stats__")] - [Header("HP per tick")] - public float m_tickInterval; - - public float m_healthPerTickMinHealthPercentage; - - public float m_healthPerTick; - - [Header("Health over time")] - public float m_healthOverTime; - - public float m_healthOverTimeDuration; - - public float m_healthOverTimeInterval = 5f; - - [Header("Stamina")] - public float m_staminaOverTime; - - public float m_staminaOverTimeDuration; - - public float m_staminaDrainPerSec; - - public float m_runStaminaDrainModifier; - - public float m_jumpStaminaUseModifier; - - [Header("Regen modifiers")] - public float m_healthRegenMultiplier = 1f; - - public float m_staminaRegenMultiplier = 1f; - - [Header("Modify raise skill")] - public Skills.SkillType m_raiseSkill; - - public float m_raiseSkillModifier; - - [Header("Hit modifier")] - public List<HitData.DamageModPair> m_mods = new List<HitData.DamageModPair>(); - - [Header("Attack")] - public Skills.SkillType m_modifyAttackSkill; - - public float m_damageModifier = 1f; - - [Header("Sneak")] - public float m_noiseModifier; - - public float m_stealthModifier; - - [Header("Carry weight")] - public float m_addMaxCarryWeight; - - private float m_tickTimer; - - private float m_healthOverTimeTimer; - - private float m_healthOverTimeTicks; - - private float m_healthOverTimeTickHP; - - public override void Setup(Character character) - { - base.Setup(character); - if (m_healthOverTime > 0f && m_healthOverTimeInterval > 0f) - { - if (m_healthOverTimeDuration <= 0f) - { - m_healthOverTimeDuration = m_ttl; - } - m_healthOverTimeTicks = m_healthOverTimeDuration / m_healthOverTimeInterval; - m_healthOverTimeTickHP = m_healthOverTime / m_healthOverTimeTicks; - } - if (m_staminaOverTime > 0f && m_staminaOverTimeDuration <= 0f) - { - m_staminaOverTimeDuration = m_ttl; - } - } - - public override void UpdateStatusEffect(float dt) - { - base.UpdateStatusEffect(dt); - if (m_tickInterval > 0f) - { - m_tickTimer += dt; - if (m_tickTimer >= m_tickInterval) - { - m_tickTimer = 0f; - if (m_character.GetHealthPercentage() >= m_healthPerTickMinHealthPercentage) - { - if (m_healthPerTick > 0f) - { - m_character.Heal(m_healthPerTick); - } - else - { - HitData hitData = new HitData(); - hitData.m_damage.m_damage = 0f - m_healthPerTick; - hitData.m_point = m_character.GetTopPoint(); - m_character.Damage(hitData); - } - } - } - } - if (m_healthOverTimeTicks > 0f) - { - m_healthOverTimeTimer += dt; - if (m_healthOverTimeTimer > m_healthOverTimeInterval) - { - m_healthOverTimeTimer = 0f; - m_healthOverTimeTicks -= 1f; - m_character.Heal(m_healthOverTimeTickHP); - } - } - if (m_staminaOverTime != 0f && m_time <= m_staminaOverTimeDuration) - { - float num = m_staminaOverTimeDuration / dt; - m_character.AddStamina(m_staminaOverTime / num); - } - if (m_staminaDrainPerSec > 0f) - { - m_character.UseStamina(m_staminaDrainPerSec * dt); - } - } - - public override void ModifyHealthRegen(ref float regenMultiplier) - { - if (m_healthRegenMultiplier > 1f) - { - regenMultiplier += m_healthRegenMultiplier - 1f; - } - else - { - regenMultiplier *= m_healthRegenMultiplier; - } - } - - public override void ModifyStaminaRegen(ref float staminaRegen) - { - if (m_staminaRegenMultiplier > 1f) - { - staminaRegen += m_staminaRegenMultiplier - 1f; - } - else - { - staminaRegen *= m_staminaRegenMultiplier; - } - } - - public override void ModifyDamageMods(ref HitData.DamageModifiers modifiers) - { - modifiers.Apply(m_mods); - } - - public override void ModifyRaiseSkill(Skills.SkillType skill, ref float value) - { - if (m_raiseSkill != 0 && (m_raiseSkill == Skills.SkillType.All || m_raiseSkill == skill)) - { - value += m_raiseSkillModifier; - } - } - - public override void ModifyNoise(float baseNoise, ref float noise) - { - noise += baseNoise * m_noiseModifier; - } - - public override void ModifyStealth(float baseStealth, ref float stealth) - { - stealth += baseStealth * m_stealthModifier; - } - - public override void ModifyMaxCarryWeight(float baseLimit, ref float limit) - { - limit += m_addMaxCarryWeight; - if (limit < 0f) - { - limit = 0f; - } - } - - public override void ModifyAttack(Skills.SkillType skill, ref HitData hitData) - { - if (skill == m_modifyAttackSkill || m_modifyAttackSkill == Skills.SkillType.All) - { - hitData.m_damage.Modify(m_damageModifier); - } - } - - public override void ModifyRunStaminaDrain(float baseDrain, ref float drain) - { - drain += baseDrain * m_runStaminaDrainModifier; - } - - public override void ModifyJumpStaminaUsage(float baseStaminaUse, ref float staminaUse) - { - staminaUse += baseStaminaUse * m_jumpStaminaUseModifier; - } - - public override string GetTooltipString() - { - string text = ""; - if (m_tooltip.Length > 0) - { - text = text + m_tooltip + "\n"; - } - if (m_jumpStaminaUseModifier != 0f) - { - text = text + "$se_jumpstamina: " + (m_jumpStaminaUseModifier * 100f).ToString("+0;-0") + "%\n"; - } - if (m_runStaminaDrainModifier != 0f) - { - text = text + "$se_runstamina: " + (m_runStaminaDrainModifier * 100f).ToString("+0;-0") + "%\n"; - } - if (m_healthOverTime != 0f) - { - text = text + "$se_health: " + m_healthOverTime + "\n"; - } - if (m_staminaOverTime != 0f) - { - text = text + "$se_stamina: " + m_staminaOverTime + "\n"; - } - if (m_healthRegenMultiplier != 1f) - { - text = text + "$se_healthregen " + ((m_healthRegenMultiplier - 1f) * 100f).ToString("+0;-0") + "%\n"; - } - if (m_staminaRegenMultiplier != 1f) - { - text = text + "$se_staminaregen " + ((m_staminaRegenMultiplier - 1f) * 100f).ToString("+0;-0") + "%\n"; - } - if (m_addMaxCarryWeight != 0f) - { - text = text + "$se_max_carryweight " + m_addMaxCarryWeight.ToString("+0;-0") + "\n"; - } - if (m_mods.Count > 0) - { - text += GetDamageModifiersTooltipString(m_mods); - } - if (m_noiseModifier != 0f) - { - text = text + "$se_noisemod " + (m_noiseModifier * 100f).ToString("+0;-0") + "%\n"; - } - if (m_stealthModifier != 0f) - { - text = text + "$se_sneakmod " + ((0f - m_stealthModifier) * 100f).ToString("+0;-0") + "%\n"; - } - return text; - } - - public static string GetDamageModifiersTooltipString(List<HitData.DamageModPair> mods) - { - if (mods.Count == 0) - { - return ""; - } - string text = ""; - foreach (HitData.DamageModPair mod in mods) - { - if (mod.m_modifier != HitData.DamageModifier.Ignore && mod.m_modifier != 0) - { - switch (mod.m_modifier) - { - case HitData.DamageModifier.Immune: - text += "\n$inventory_dmgmod: <color=orange>$inventory_immune</color> VS "; - break; - case HitData.DamageModifier.Resistant: - text += "\n$inventory_dmgmod: <color=orange>$inventory_resistant</color> VS "; - break; - case HitData.DamageModifier.VeryResistant: - text += "\n$inventory_dmgmod: <color=orange>$inventory_veryresistant</color> VS "; - break; - case HitData.DamageModifier.Weak: - text += "\n$inventory_dmgmod: <color=orange>$inventory_weak</color> VS "; - break; - case HitData.DamageModifier.VeryWeak: - text += "\n$inventory_dmgmod: <color=orange>$inventory_veryweak</color> VS "; - break; - } - text += "<color=orange>"; - switch (mod.m_type) - { - case HitData.DamageType.Blunt: - text += "$inventory_blunt"; - break; - case HitData.DamageType.Slash: - text += "$inventory_slash"; - break; - case HitData.DamageType.Pierce: - text += "$inventory_pierce"; - break; - case HitData.DamageType.Chop: - text += "$inventory_chop"; - break; - case HitData.DamageType.Pickaxe: - text += "$inventory_pickaxe"; - break; - case HitData.DamageType.Fire: - text += "$inventory_fire"; - break; - case HitData.DamageType.Frost: - text += "$inventory_frost"; - break; - case HitData.DamageType.Lightning: - text += "$inventory_lightning"; - break; - case HitData.DamageType.Poison: - text += "$inventory_poison"; - break; - case HitData.DamageType.Spirit: - text += "$inventory_spirit"; - break; - } - text += "</color>"; - } - } - return text; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SE_Wet.cs b/Valheim_v202102/Valheim/assembly_valheim/SE_Wet.cs deleted file mode 100644 index a501d1b..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SE_Wet.cs +++ /dev/null @@ -1,41 +0,0 @@ -using UnityEngine; - -public class SE_Wet : SE_Stats -{ - [Header("__SE_Wet__")] - public float m_waterDamage; - - public float m_damageInterval = 0.5f; - - private float m_timer; - - public override void Setup(Character character) - { - base.Setup(character); - } - - public override void UpdateStatusEffect(float dt) - { - base.UpdateStatusEffect(dt); - if (!m_character.m_tolerateWater) - { - m_timer += dt; - if (m_timer > m_damageInterval) - { - m_timer = 0f; - HitData hitData = new HitData(); - hitData.m_point = m_character.transform.position; - hitData.m_damage.m_damage = m_waterDamage; - m_character.Damage(hitData); - } - } - if (m_character.GetSEMan().HaveStatusEffect("CampFire")) - { - m_time += dt * 10f; - } - if (m_character.GetSEMan().HaveStatusEffect("Burning")) - { - m_time += dt * 50f; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SceneLoader.cs b/Valheim_v202102/Valheim/assembly_valheim/SceneLoader.cs deleted file mode 100644 index c5f0faf..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SceneLoader.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections; -using UnityEngine; -using UnityEngine.SceneManagement; - -public class SceneLoader : MonoBehaviour -{ - public string m_scene = ""; - - private void Start() - { - StartCoroutine(LoadYourAsyncScene()); - } - - private IEnumerator LoadYourAsyncScene() - { - ZLog.Log("Starting to load scene:" + m_scene); - AsyncOperation asyncLoad = SceneManager.LoadSceneAsync(m_scene, LoadSceneMode.Single); - while (!asyncLoad.isDone) - { - yield return null; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ScrollRectEnsureVisible.cs b/Valheim_v202102/Valheim/assembly_valheim/ScrollRectEnsureVisible.cs deleted file mode 100644 index b0c807d..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ScrollRectEnsureVisible.cs +++ /dev/null @@ -1,93 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -[RequireComponent(typeof(ScrollRect))] -public class ScrollRectEnsureVisible : MonoBehaviour -{ - private RectTransform maskTransform; - - private ScrollRect mScrollRect; - - private RectTransform mScrollTransform; - - private RectTransform mContent; - - private bool mInitialized; - - private void Awake() - { - if (!mInitialized) - { - Initialize(); - } - } - - private void Initialize() - { - mScrollRect = GetComponent<ScrollRect>(); - mScrollTransform = mScrollRect.transform as RectTransform; - mContent = mScrollRect.content; - Reset(); - mInitialized = true; - } - - public void CenterOnItem(RectTransform target) - { - if (!mInitialized) - { - Initialize(); - } - Vector3 worldPointInWidget = GetWorldPointInWidget(mScrollTransform, GetWidgetWorldPoint(target)); - Vector3 vector = GetWorldPointInWidget(mScrollTransform, GetWidgetWorldPoint(maskTransform)) - worldPointInWidget; - vector.z = 0f; - if (!mScrollRect.horizontal) - { - vector.x = 0f; - } - if (!mScrollRect.vertical) - { - vector.y = 0f; - } - Vector2 vector2 = new Vector2(vector.x / (mContent.rect.size.x - mScrollTransform.rect.size.x), vector.y / (mContent.rect.size.y - mScrollTransform.rect.size.y)); - Vector2 normalizedPosition = mScrollRect.normalizedPosition - vector2; - if (mScrollRect.movementType != 0) - { - normalizedPosition.x = Mathf.Clamp01(normalizedPosition.x); - normalizedPosition.y = Mathf.Clamp01(normalizedPosition.y); - } - mScrollRect.normalizedPosition = normalizedPosition; - } - - private void Reset() - { - if (!(maskTransform == null)) - { - return; - } - Mask componentInChildren = GetComponentInChildren<Mask>(includeInactive: true); - if ((bool)componentInChildren) - { - maskTransform = componentInChildren.rectTransform; - } - if (maskTransform == null) - { - RectMask2D componentInChildren2 = GetComponentInChildren<RectMask2D>(includeInactive: true); - if ((bool)componentInChildren2) - { - maskTransform = componentInChildren2.rectTransform; - } - } - } - - private Vector3 GetWidgetWorldPoint(RectTransform target) - { - Vector3 vector = new Vector3((0.5f - target.pivot.x) * target.rect.size.x, (0.5f - target.pivot.y) * target.rect.size.y, 0f); - Vector3 position = target.localPosition + vector; - return target.parent.TransformPoint(position); - } - - private Vector3 GetWorldPointInWidget(RectTransform target, Vector3 worldPoint) - { - return target.InverseTransformPoint(worldPoint); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ServerCtrl.cs b/Valheim_v202102/Valheim/assembly_valheim/ServerCtrl.cs deleted file mode 100644 index 7ce8e7c..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ServerCtrl.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System.IO; -using UnityEngine; - -public class ServerCtrl -{ - private static ServerCtrl m_instance; - - private float m_checkTimer; - - public static ServerCtrl instance => m_instance; - - public static void Initialize() - { - if (m_instance == null) - { - m_instance = new ServerCtrl(); - } - } - - private ServerCtrl() - { - ClearExitFile(); - } - - public void Update(float dt) - { - CheckExit(dt); - } - - private void CheckExit(float dt) - { - m_checkTimer += dt; - if (m_checkTimer > 2f) - { - m_checkTimer = 0f; - if (File.Exists("server_exit.drp")) - { - Application.Quit(); - } - } - } - - private void ClearExitFile() - { - try - { - File.Delete("server_exit.drp"); - } - catch - { - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Settings.cs b/Valheim_v202102/Valheim/assembly_valheim/Settings.cs deleted file mode 100644 index 066f8f6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Settings.cs +++ /dev/null @@ -1,582 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.Audio; -using UnityEngine.EventSystems; -using UnityEngine.UI; - -public class Settings : MonoBehaviour -{ - [Serializable] - public class KeySetting - { - public string m_keyName = ""; - - public RectTransform m_keyTransform; - } - - private static Settings m_instance; - - [Header("Inout")] - public Slider m_sensitivitySlider; - - public Toggle m_invertMouse; - - public Toggle m_gamepadEnabled; - - public GameObject m_bindDialog; - - public List<KeySetting> m_keys = new List<KeySetting>(); - - [Header("Misc")] - public Toggle m_cameraShake; - - public Toggle m_shipCameraTilt; - - public Toggle m_quickPieceSelect; - - public Toggle m_showKeyHints; - - public Slider m_guiScaleSlider; - - public Text m_guiScaleText; - - public Text m_language; - - public Button m_resetTutorial; - - [Header("Audio")] - public Slider m_volumeSlider; - - public Slider m_sfxVolumeSlider; - - public Slider m_musicVolumeSlider; - - public Toggle m_continousMusic; - - public AudioMixer m_masterMixer; - - [Header("Graphics")] - public Toggle m_dofToggle; - - public Toggle m_vsyncToggle; - - public Toggle m_bloomToggle; - - public Toggle m_ssaoToggle; - - public Toggle m_sunshaftsToggle; - - public Toggle m_aaToggle; - - public Toggle m_caToggle; - - public Toggle m_motionblurToggle; - - public Toggle m_tesselationToggle; - - public Toggle m_softPartToggle; - - public Toggle m_fullscreenToggle; - - public Slider m_shadowQuality; - - public Text m_shadowQualityText; - - public Slider m_lod; - - public Text m_lodText; - - public Slider m_lights; - - public Text m_lightsText; - - public Slider m_vegetation; - - public Text m_vegetationText; - - public Text m_resButtonText; - - public GameObject m_resDialog; - - public GameObject m_resListElement; - - public RectTransform m_resListRoot; - - public Scrollbar m_resListScroll; - - public float m_resListSpace = 20f; - - public GameObject m_resSwitchDialog; - - public Text m_resSwitchCountdown; - - public int m_minResWidth = 1280; - - public int m_minResHeight = 720; - - private string m_languageKey = ""; - - private bool m_oldFullscreen; - - private Resolution m_oldRes; - - private Resolution m_selectedRes; - - private List<GameObject> m_resObjects = new List<GameObject>(); - - private List<Resolution> m_resolutions = new List<Resolution>(); - - private float m_resListBaseSize; - - private bool m_modeApplied; - - private float m_resCountdownTimer = 1f; - - public static Settings instance => m_instance; - - private void Awake() - { - m_instance = this; - m_bindDialog.SetActive(value: false); - m_resDialog.SetActive(value: false); - m_resSwitchDialog.SetActive(value: false); - m_resListBaseSize = m_resListRoot.rect.height; - LoadSettings(); - SetupKeys(); - } - - private void OnDestroy() - { - m_instance = null; - } - - private void Update() - { - if (m_bindDialog.activeSelf) - { - UpdateBinding(); - return; - } - UpdateResSwitch(Time.deltaTime); - AudioListener.volume = m_volumeSlider.value; - MusicMan.m_masterMusicVolume = m_musicVolumeSlider.value; - AudioMan.SetSFXVolume(m_sfxVolumeSlider.value); - SetQualityText(m_shadowQualityText, (int)m_shadowQuality.value); - SetQualityText(m_lodText, (int)m_lod.value); - SetQualityText(m_lightsText, (int)m_lights.value); - SetQualityText(m_vegetationText, (int)m_vegetation.value); - m_resButtonText.text = m_selectedRes.width + "x" + m_selectedRes.height + " " + m_selectedRes.refreshRate + "hz"; - m_guiScaleText.text = m_guiScaleSlider.value + "%"; - GuiScaler.SetScale(m_guiScaleSlider.value / 100f); - if (Input.GetKeyDown(KeyCode.Escape)) - { - OnBack(); - } - } - - private void SetQualityText(Text text, int level) - { - switch (level) - { - case 0: - text.text = Localization.instance.Localize("[$settings_low]"); - break; - case 1: - text.text = Localization.instance.Localize("[$settings_medium]"); - break; - case 2: - text.text = Localization.instance.Localize("[$settings_high]"); - break; - case 3: - text.text = Localization.instance.Localize("[$settings_veryhigh]"); - break; - } - } - - public void OnBack() - { - RevertMode(); - LoadSettings(); - UnityEngine.Object.Destroy(base.gameObject); - } - - public void OnOk() - { - SaveSettings(); - UnityEngine.Object.Destroy(base.gameObject); - } - - private void SaveSettings() - { - PlayerPrefs.SetFloat("MasterVolume", m_volumeSlider.value); - PlayerPrefs.SetFloat("MouseSensitivity", m_sensitivitySlider.value); - PlayerPrefs.SetFloat("MusicVolume", m_musicVolumeSlider.value); - PlayerPrefs.SetFloat("SfxVolume", m_sfxVolumeSlider.value); - PlayerPrefs.SetInt("ContinousMusic", m_continousMusic.isOn ? 1 : 0); - PlayerPrefs.SetInt("InvertMouse", m_invertMouse.isOn ? 1 : 0); - PlayerPrefs.SetFloat("GuiScale", m_guiScaleSlider.value / 100f); - PlayerPrefs.SetInt("CameraShake", m_cameraShake.isOn ? 1 : 0); - PlayerPrefs.SetInt("ShipCameraTilt", m_shipCameraTilt.isOn ? 1 : 0); - PlayerPrefs.SetInt("QuickPieceSelect", m_quickPieceSelect.isOn ? 1 : 0); - PlayerPrefs.SetInt("KeyHints", m_showKeyHints.isOn ? 1 : 0); - PlayerPrefs.SetInt("DOF", m_dofToggle.isOn ? 1 : 0); - PlayerPrefs.SetInt("VSync", m_vsyncToggle.isOn ? 1 : 0); - PlayerPrefs.SetInt("Bloom", m_bloomToggle.isOn ? 1 : 0); - PlayerPrefs.SetInt("SSAO", m_ssaoToggle.isOn ? 1 : 0); - PlayerPrefs.SetInt("SunShafts", m_sunshaftsToggle.isOn ? 1 : 0); - PlayerPrefs.SetInt("AntiAliasing", m_aaToggle.isOn ? 1 : 0); - PlayerPrefs.SetInt("ChromaticAberration", m_caToggle.isOn ? 1 : 0); - PlayerPrefs.SetInt("MotionBlur", m_motionblurToggle.isOn ? 1 : 0); - PlayerPrefs.SetInt("SoftPart", m_softPartToggle.isOn ? 1 : 0); - PlayerPrefs.SetInt("Tesselation", m_tesselationToggle.isOn ? 1 : 0); - PlayerPrefs.SetInt("ShadowQuality", (int)m_shadowQuality.value); - PlayerPrefs.SetInt("LodBias", (int)m_lod.value); - PlayerPrefs.SetInt("Lights", (int)m_lights.value); - PlayerPrefs.SetInt("ClutterQuality", (int)m_vegetation.value); - ZInput.SetGamepadEnabled(m_gamepadEnabled.isOn); - ZInput.instance.Save(); - if ((bool)GameCamera.instance) - { - GameCamera.instance.ApplySettings(); - } - if ((bool)CameraEffects.instance) - { - CameraEffects.instance.ApplySettings(); - } - if ((bool)ClutterSystem.instance) - { - ClutterSystem.instance.ApplySettings(); - } - if ((bool)MusicMan.instance) - { - MusicMan.instance.ApplySettings(); - } - if ((bool)GameCamera.instance) - { - GameCamera.instance.ApplySettings(); - } - if ((bool)KeyHints.instance) - { - KeyHints.instance.ApplySettings(); - } - ApplyQualitySettings(); - ApplyMode(); - PlayerController.m_mouseSens = m_sensitivitySlider.value; - PlayerController.m_invertMouse = m_invertMouse.isOn; - Localization.instance.SetLanguage(m_languageKey); - GuiScaler.LoadGuiScale(); - PlayerPrefs.Save(); - } - - public static void ApplyStartupSettings() - { - QualitySettings.vSyncCount = ((PlayerPrefs.GetInt("VSync", 0) == 1) ? 1 : 0); - ApplyQualitySettings(); - } - - private static void ApplyQualitySettings() - { - QualitySettings.softParticles = PlayerPrefs.GetInt("SoftPart", 1) == 1; - if (PlayerPrefs.GetInt("Tesselation", 1) == 1) - { - Shader.EnableKeyword("TESSELATION_ON"); - } - else - { - Shader.DisableKeyword("TESSELATION_ON"); - } - switch (PlayerPrefs.GetInt("LodBias", 2)) - { - case 0: - QualitySettings.lodBias = 1f; - break; - case 1: - QualitySettings.lodBias = 1.5f; - break; - case 2: - QualitySettings.lodBias = 2f; - break; - case 3: - QualitySettings.lodBias = 5f; - break; - } - switch (PlayerPrefs.GetInt("Lights", 2)) - { - case 0: - QualitySettings.pixelLightCount = 2; - break; - case 1: - QualitySettings.pixelLightCount = 4; - break; - case 2: - QualitySettings.pixelLightCount = 8; - break; - } - ApplyShadowQuality(); - } - - private static void ApplyShadowQuality() - { - switch (PlayerPrefs.GetInt("ShadowQuality", 2)) - { - case 0: - QualitySettings.shadowCascades = 2; - QualitySettings.shadowDistance = 80f; - QualitySettings.shadowResolution = ShadowResolution.Low; - break; - case 1: - QualitySettings.shadowCascades = 3; - QualitySettings.shadowDistance = 120f; - QualitySettings.shadowResolution = ShadowResolution.Medium; - break; - case 2: - QualitySettings.shadowCascades = 4; - QualitySettings.shadowDistance = 150f; - QualitySettings.shadowResolution = ShadowResolution.High; - break; - } - } - - private void LoadSettings() - { - ZInput.instance.Load(); - AudioListener.volume = PlayerPrefs.GetFloat("MasterVolume", AudioListener.volume); - MusicMan.m_masterMusicVolume = PlayerPrefs.GetFloat("MusicVolume", 1f); - AudioMan.SetSFXVolume(PlayerPrefs.GetFloat("SfxVolume", 1f)); - m_continousMusic.isOn = PlayerPrefs.GetInt("ContinousMusic", 0) == 1; - PlayerController.m_mouseSens = PlayerPrefs.GetFloat("MouseSensitivity", PlayerController.m_mouseSens); - PlayerController.m_invertMouse = PlayerPrefs.GetInt("InvertMouse", 0) == 1; - float @float = PlayerPrefs.GetFloat("GuiScale", 1f); - m_volumeSlider.value = AudioListener.volume; - m_sensitivitySlider.value = PlayerController.m_mouseSens; - m_sfxVolumeSlider.value = AudioMan.GetSFXVolume(); - m_musicVolumeSlider.value = MusicMan.m_masterMusicVolume; - m_guiScaleSlider.value = @float * 100f; - m_invertMouse.isOn = PlayerController.m_invertMouse; - m_gamepadEnabled.isOn = ZInput.IsGamepadEnabled(); - m_languageKey = Localization.instance.GetSelectedLanguage(); - m_language.text = Localization.instance.Localize("$language_" + m_languageKey.ToLower()); - m_cameraShake.isOn = PlayerPrefs.GetInt("CameraShake", 1) == 1; - m_shipCameraTilt.isOn = PlayerPrefs.GetInt("ShipCameraTilt", 1) == 1; - m_quickPieceSelect.isOn = PlayerPrefs.GetInt("QuickPieceSelect", 0) == 1; - m_showKeyHints.isOn = PlayerPrefs.GetInt("KeyHints", 1) == 1; - m_dofToggle.isOn = PlayerPrefs.GetInt("DOF", 1) == 1; - m_vsyncToggle.isOn = PlayerPrefs.GetInt("VSync", 0) == 1; - m_bloomToggle.isOn = PlayerPrefs.GetInt("Bloom", 1) == 1; - m_ssaoToggle.isOn = PlayerPrefs.GetInt("SSAO", 1) == 1; - m_sunshaftsToggle.isOn = PlayerPrefs.GetInt("SunShafts", 1) == 1; - m_aaToggle.isOn = PlayerPrefs.GetInt("AntiAliasing", 1) == 1; - m_caToggle.isOn = PlayerPrefs.GetInt("ChromaticAberration", 1) == 1; - m_motionblurToggle.isOn = PlayerPrefs.GetInt("MotionBlur", 1) == 1; - m_softPartToggle.isOn = PlayerPrefs.GetInt("SoftPart", 1) == 1; - m_tesselationToggle.isOn = PlayerPrefs.GetInt("Tesselation", 1) == 1; - m_shadowQuality.value = PlayerPrefs.GetInt("ShadowQuality", 2); - m_lod.value = PlayerPrefs.GetInt("LodBias", 2); - m_lights.value = PlayerPrefs.GetInt("Lights", 2); - m_vegetation.value = PlayerPrefs.GetInt("ClutterQuality", 2); - m_fullscreenToggle.isOn = Screen.fullScreen; - m_oldFullscreen = m_fullscreenToggle.isOn; - m_oldRes = Screen.currentResolution; - m_oldRes.width = Screen.width; - m_oldRes.height = Screen.height; - m_selectedRes = m_oldRes; - ZLog.Log("Current res " + Screen.currentResolution.width + "x" + Screen.currentResolution.height + " " + Screen.width + "x" + Screen.height); - } - - private void SetupKeys() - { - foreach (KeySetting key in m_keys) - { - key.m_keyTransform.GetComponentInChildren<Button>().onClick.AddListener(OnKeySet); - } - UpdateBindings(); - } - - private void UpdateBindings() - { - foreach (KeySetting key in m_keys) - { - key.m_keyTransform.GetComponentInChildren<Button>().GetComponentInChildren<Text>().text = Localization.instance.GetBoundKeyString(key.m_keyName); - } - } - - private void OnKeySet() - { - foreach (KeySetting key in m_keys) - { - if (key.m_keyTransform.GetComponentInChildren<Button>().gameObject == EventSystem.current.currentSelectedGameObject) - { - OpenBindDialog(key.m_keyName); - return; - } - } - ZLog.Log("NOT FOUND"); - } - - private void OpenBindDialog(string keyName) - { - ZLog.Log("BInding key " + keyName); - ZInput.instance.StartBindKey(keyName); - m_bindDialog.SetActive(value: true); - } - - private void UpdateBinding() - { - if (m_bindDialog.activeSelf && ZInput.instance.EndBindKey()) - { - m_bindDialog.SetActive(value: false); - UpdateBindings(); - } - } - - public void ResetBindings() - { - ZInput.instance.Reset(); - UpdateBindings(); - } - - public void OnLanguageLeft() - { - m_languageKey = Localization.instance.GetPrevLanguage(m_languageKey); - m_language.text = Localization.instance.Localize("$language_" + m_languageKey.ToLower()); - } - - public void OnLanguageRight() - { - m_languageKey = Localization.instance.GetNextLanguage(m_languageKey); - m_language.text = Localization.instance.Localize("$language_" + m_languageKey.ToLower()); - } - - public void OnShowResList() - { - m_resDialog.SetActive(value: true); - FillResList(); - } - - private void UpdateValidResolutions() - { - Resolution[] array = Screen.resolutions; - if (array.Length == 0) - { - array = new Resolution[1] { m_oldRes }; - } - m_resolutions.Clear(); - Resolution[] array2 = array; - for (int i = 0; i < array2.Length; i++) - { - Resolution item = array2[i]; - if ((item.width >= m_minResWidth && item.height >= m_minResHeight) || item.width == m_oldRes.width || item.height == m_oldRes.height) - { - m_resolutions.Add(item); - } - } - if (m_resolutions.Count == 0) - { - Resolution item2 = default(Resolution); - item2.width = 1280; - item2.height = 720; - item2.refreshRate = 60; - m_resolutions.Add(item2); - } - } - - private void FillResList() - { - foreach (GameObject resObject in m_resObjects) - { - UnityEngine.Object.Destroy(resObject); - } - m_resObjects.Clear(); - UpdateValidResolutions(); - float num = 0f; - foreach (Resolution resolution in m_resolutions) - { - GameObject gameObject = UnityEngine.Object.Instantiate(m_resListElement, m_resListRoot.transform); - gameObject.SetActive(value: true); - gameObject.GetComponentInChildren<Button>().onClick.AddListener(OnResClick); - (gameObject.transform as RectTransform).anchoredPosition = new Vector2(0f, num * (0f - m_resListSpace)); - gameObject.GetComponentInChildren<Text>().text = resolution.width + "x" + resolution.height + " " + resolution.refreshRate + "hz"; - m_resObjects.Add(gameObject); - num += 1f; - } - float size = Mathf.Max(m_resListBaseSize, num * m_resListSpace); - m_resListRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size); - m_resListScroll.value = 1f; - } - - public void OnResCancel() - { - m_resDialog.SetActive(value: false); - } - - private void OnResClick() - { - m_resDialog.SetActive(value: false); - GameObject currentSelectedGameObject = EventSystem.current.currentSelectedGameObject; - for (int i = 0; i < m_resObjects.Count; i++) - { - if (currentSelectedGameObject == m_resObjects[i]) - { - m_selectedRes = m_resolutions[i]; - break; - } - } - } - - public void OnApplyMode() - { - ApplyMode(); - ShowResSwitchCountdown(); - } - - private void ApplyMode() - { - if (Screen.width != m_selectedRes.width || Screen.height != m_selectedRes.height || m_fullscreenToggle.isOn != Screen.fullScreen) - { - Screen.SetResolution(m_selectedRes.width, m_selectedRes.height, m_fullscreenToggle.isOn); - m_modeApplied = true; - } - } - - private void RevertMode() - { - if (m_modeApplied) - { - m_modeApplied = false; - m_selectedRes = m_oldRes; - m_fullscreenToggle.isOn = m_oldFullscreen; - Screen.SetResolution(m_oldRes.width, m_oldRes.height, m_oldFullscreen); - } - } - - private void ShowResSwitchCountdown() - { - m_resSwitchDialog.SetActive(value: true); - m_resCountdownTimer = 5f; - } - - public void OnResSwitchOK() - { - m_resSwitchDialog.SetActive(value: false); - } - - private void UpdateResSwitch(float dt) - { - if (m_resSwitchDialog.activeSelf) - { - m_resCountdownTimer -= dt; - m_resSwitchCountdown.text = Mathf.CeilToInt(m_resCountdownTimer).ToString(); - if (m_resCountdownTimer <= 0f) - { - RevertMode(); - m_resSwitchDialog.SetActive(value: false); - } - } - } - - public void OnResetTutorial() - { - Player.ResetSeenTutorials(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Ship.cs b/Valheim_v202102/Valheim/assembly_valheim/Ship.cs deleted file mode 100644 index 7ad6482..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Ship.cs +++ /dev/null @@ -1,746 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Ship : MonoBehaviour -{ - public enum Speed - { - Stop, - Back, - Slow, - Half, - Full - } - - private bool m_forwardPressed; - - private bool m_backwardPressed; - - private float m_sendRudderTime; - - private Vector3 windChangeVelocity = Vector3.zero; - - private bool sailWasInPosition; - - [Header("Objects")] - public GameObject m_sailObject; - - public GameObject m_mastObject; - - public GameObject m_rudderObject; - - public ShipControlls m_shipControlls; - - public Transform m_controlGuiPos; - - [Header("Misc")] - public BoxCollider m_floatCollider; - - public float m_waterLevelOffset; - - public float m_forceDistance = 1f; - - public float m_force = 0.5f; - - public float m_damping = 0.05f; - - public float m_dampingSideway = 0.05f; - - public float m_dampingForward = 0.01f; - - public float m_angularDamping = 0.01f; - - public float m_disableLevel = -0.5f; - - public float m_sailForceOffset; - - public float m_sailForceFactor = 0.1f; - - public float m_rudderSpeed = 0.5f; - - public float m_stearForceOffset = -10f; - - public float m_stearForce = 0.5f; - - public float m_stearVelForceFactor = 0.1f; - - public float m_backwardForce = 50f; - - public float m_rudderRotationMax = 30f; - - public float m_rudderRotationSpeed = 30f; - - public float m_minWaterImpactForce = 2.5f; - - public float m_minWaterImpactInterval = 2f; - - public float m_waterImpactDamage = 10f; - - public float m_upsideDownDmgInterval = 1f; - - public float m_upsideDownDmg = 20f; - - public EffectList m_waterImpactEffect = new EffectList(); - - private Speed m_speed; - - private float m_rudder; - - private float m_rudderValue; - - private Vector3 m_sailForce = Vector3.zero; - - private List<Player> m_players = new List<Player>(); - - private static List<Ship> m_currentShips = new List<Ship>(); - - private Rigidbody m_body; - - private ZNetView m_nview; - - private Cloth m_sailCloth; - - private float m_lastDepth = -9999f; - - private float m_lastWaterImpactTime; - - private float m_upsideDownDmgTimer; - - private float m_rudderPaddleTimer; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_body = GetComponent<Rigidbody>(); - WearNTear component = GetComponent<WearNTear>(); - if ((bool)component) - { - component.m_onDestroyed = (Action)Delegate.Combine(component.m_onDestroyed, new Action(OnDestroyed)); - } - if (m_nview.GetZDO() == null) - { - base.enabled = false; - } - m_body.maxDepenetrationVelocity = 2f; - Heightmap.ForceGenerateAll(); - m_sailCloth = m_sailObject.GetComponentInChildren<Cloth>(); - } - - public bool CanBeRemoved() - { - return m_players.Count == 0; - } - - private void Start() - { - m_nview.Register("Stop", RPC_Stop); - m_nview.Register("Forward", RPC_Forward); - m_nview.Register("Backward", RPC_Backward); - m_nview.Register<float>("Rudder", RPC_Rudder); - InvokeRepeating("UpdateOwner", 2f, 2f); - } - - private void PrintStats() - { - if (m_players.Count != 0) - { - ZLog.Log("Vel:" + m_body.velocity.magnitude.ToString("0.0")); - } - } - - public void ApplyMovementControlls(Vector3 dir) - { - bool flag = (double)dir.z > 0.5; - bool flag2 = (double)dir.z < -0.5; - if (flag && !m_forwardPressed) - { - Forward(); - } - if (flag2 && !m_backwardPressed) - { - Backward(); - } - float fixedDeltaTime = Time.fixedDeltaTime; - float num = Mathf.Lerp(0.5f, 1f, Mathf.Abs(m_rudderValue)); - m_rudder = dir.x * num; - m_rudderValue += m_rudder * m_rudderSpeed * fixedDeltaTime; - m_rudderValue = Mathf.Clamp(m_rudderValue, -1f, 1f); - if (Time.time - m_sendRudderTime > 0.2f) - { - m_sendRudderTime = Time.time; - m_nview.InvokeRPC("Rudder", m_rudderValue); - } - m_forwardPressed = flag; - m_backwardPressed = flag2; - } - - public void Forward() - { - m_nview.InvokeRPC("Forward"); - } - - public void Backward() - { - m_nview.InvokeRPC("Backward"); - } - - public void Rudder(float rudder) - { - m_nview.Invoke("Rudder", rudder); - } - - private void RPC_Rudder(long sender, float value) - { - m_rudderValue = value; - } - - public void Stop() - { - m_nview.InvokeRPC("Stop"); - } - - private void RPC_Stop(long sender) - { - m_speed = Speed.Stop; - } - - private void RPC_Forward(long sender) - { - switch (m_speed) - { - case Speed.Stop: - m_speed = Speed.Slow; - break; - case Speed.Slow: - m_speed = Speed.Half; - break; - case Speed.Half: - m_speed = Speed.Full; - break; - case Speed.Back: - m_speed = Speed.Stop; - break; - case Speed.Full: - break; - } - } - - private void RPC_Backward(long sender) - { - switch (m_speed) - { - case Speed.Stop: - m_speed = Speed.Back; - break; - case Speed.Slow: - m_speed = Speed.Stop; - break; - case Speed.Half: - m_speed = Speed.Slow; - break; - case Speed.Full: - m_speed = Speed.Half; - break; - case Speed.Back: - break; - } - } - - private void FixedUpdate() - { - bool flag = HaveControllingPlayer(); - UpdateControlls(Time.fixedDeltaTime); - UpdateSail(Time.fixedDeltaTime); - UpdateRudder(Time.fixedDeltaTime, flag); - if ((bool)m_nview && !m_nview.IsOwner()) - { - return; - } - UpdateUpsideDmg(Time.fixedDeltaTime); - if (m_players.Count == 0) - { - m_speed = Speed.Stop; - m_rudderValue = 0f; - } - if (!flag && (m_speed == Speed.Slow || m_speed == Speed.Back)) - { - m_speed = Speed.Stop; - } - float waveFactor = 1f; - Vector3 worldCenterOfMass = m_body.worldCenterOfMass; - Vector3 vector = m_floatCollider.transform.position + m_floatCollider.transform.forward * m_floatCollider.size.z / 2f; - Vector3 vector2 = m_floatCollider.transform.position - m_floatCollider.transform.forward * m_floatCollider.size.z / 2f; - Vector3 vector3 = m_floatCollider.transform.position - m_floatCollider.transform.right * m_floatCollider.size.x / 2f; - Vector3 vector4 = m_floatCollider.transform.position + m_floatCollider.transform.right * m_floatCollider.size.x / 2f; - float waterLevel = WaterVolume.GetWaterLevel(worldCenterOfMass, waveFactor); - float waterLevel2 = WaterVolume.GetWaterLevel(vector3, waveFactor); - float waterLevel3 = WaterVolume.GetWaterLevel(vector4, waveFactor); - float waterLevel4 = WaterVolume.GetWaterLevel(vector, waveFactor); - float waterLevel5 = WaterVolume.GetWaterLevel(vector2, waveFactor); - float num = (waterLevel + waterLevel2 + waterLevel3 + waterLevel4 + waterLevel5) / 5f; - float num2 = worldCenterOfMass.y - num - m_waterLevelOffset; - if (!(num2 > m_disableLevel)) - { - m_body.WakeUp(); - UpdateWaterForce(num2, Time.fixedDeltaTime); - Vector3 vector5 = new Vector3(vector3.x, waterLevel2, vector3.z); - Vector3 vector6 = new Vector3(vector4.x, waterLevel3, vector4.z); - Vector3 vector7 = new Vector3(vector.x, waterLevel4, vector.z); - Vector3 vector8 = new Vector3(vector2.x, waterLevel5, vector2.z); - float fixedDeltaTime = Time.fixedDeltaTime; - float num3 = fixedDeltaTime * 50f; - float num4 = Mathf.Clamp01(Mathf.Abs(num2) / m_forceDistance); - Vector3 vector9 = Vector3.up * m_force * num4; - m_body.AddForceAtPosition(vector9 * num3, worldCenterOfMass, ForceMode.VelocityChange); - float num5 = Vector3.Dot(m_body.velocity, base.transform.forward); - float num6 = Vector3.Dot(m_body.velocity, base.transform.right); - Vector3 velocity = m_body.velocity; - velocity.y -= velocity.y * velocity.y * Mathf.Sign(velocity.y) * m_damping * num4; - velocity -= base.transform.forward * (num5 * num5 * Mathf.Sign(num5)) * m_dampingForward * num4; - velocity -= base.transform.right * (num6 * num6 * Mathf.Sign(num6)) * m_dampingSideway * num4; - if (velocity.magnitude > m_body.velocity.magnitude) - { - velocity = velocity.normalized * m_body.velocity.magnitude; - } - if (m_players.Count == 0) - { - velocity.x *= 0.1f; - velocity.z *= 0.1f; - } - m_body.velocity = velocity; - m_body.angularVelocity -= m_body.angularVelocity * m_angularDamping * num4; - float num7 = 0.15f; - float num8 = 0.5f; - float f = Mathf.Clamp((vector7.y - vector.y) * num7, 0f - num8, num8); - float f2 = Mathf.Clamp((vector8.y - vector2.y) * num7, 0f - num8, num8); - float f3 = Mathf.Clamp((vector5.y - vector3.y) * num7, 0f - num8, num8); - float f4 = Mathf.Clamp((vector6.y - vector4.y) * num7, 0f - num8, num8); - f = Mathf.Sign(f) * Mathf.Abs(Mathf.Pow(f, 2f)); - f2 = Mathf.Sign(f2) * Mathf.Abs(Mathf.Pow(f2, 2f)); - f3 = Mathf.Sign(f3) * Mathf.Abs(Mathf.Pow(f3, 2f)); - f4 = Mathf.Sign(f4) * Mathf.Abs(Mathf.Pow(f4, 2f)); - m_body.AddForceAtPosition(Vector3.up * f * num3, vector, ForceMode.VelocityChange); - m_body.AddForceAtPosition(Vector3.up * f2 * num3, vector2, ForceMode.VelocityChange); - m_body.AddForceAtPosition(Vector3.up * f3 * num3, vector3, ForceMode.VelocityChange); - m_body.AddForceAtPosition(Vector3.up * f4 * num3, vector4, ForceMode.VelocityChange); - float sailSize = 0f; - if (m_speed == Speed.Full) - { - sailSize = 1f; - } - else if (m_speed == Speed.Half) - { - sailSize = 0.5f; - } - Vector3 sailForce = GetSailForce(sailSize, fixedDeltaTime); - Vector3 position = worldCenterOfMass + base.transform.up * m_sailForceOffset; - m_body.AddForceAtPosition(sailForce, position, ForceMode.VelocityChange); - Vector3 position2 = base.transform.position + base.transform.forward * m_stearForceOffset; - float num9 = num5 * m_stearVelForceFactor; - m_body.AddForceAtPosition(base.transform.right * num9 * (0f - m_rudderValue) * fixedDeltaTime, position2, ForceMode.VelocityChange); - Vector3 zero = Vector3.zero; - switch (m_speed) - { - case Speed.Slow: - zero += base.transform.forward * m_backwardForce * (1f - Mathf.Abs(m_rudderValue)); - break; - case Speed.Back: - zero += -base.transform.forward * m_backwardForce * (1f - Mathf.Abs(m_rudderValue)); - break; - } - if (m_speed == Speed.Back || m_speed == Speed.Slow) - { - float num10 = ((m_speed != Speed.Back) ? 1 : (-1)); - zero += base.transform.right * m_stearForce * (0f - m_rudderValue) * num10; - } - m_body.AddForceAtPosition(zero * fixedDeltaTime, position2, ForceMode.VelocityChange); - ApplyEdgeForce(Time.fixedDeltaTime); - } - } - - private void UpdateUpsideDmg(float dt) - { - if (!(base.transform.up.y < 0f)) - { - return; - } - m_upsideDownDmgTimer += dt; - if (m_upsideDownDmgTimer > m_upsideDownDmgInterval) - { - m_upsideDownDmgTimer = 0f; - IDestructible component = GetComponent<IDestructible>(); - if (component != null) - { - HitData hitData = new HitData(); - hitData.m_damage.m_blunt = m_upsideDownDmg; - hitData.m_point = base.transform.position; - hitData.m_dir = Vector3.up; - component.Damage(hitData); - } - } - } - - private Vector3 GetSailForce(float sailSize, float dt) - { - Vector3 windDir = EnvMan.instance.GetWindDir(); - float windIntensity = EnvMan.instance.GetWindIntensity(); - float num = Mathf.Lerp(0.25f, 1f, windIntensity); - float windAngleFactor = GetWindAngleFactor(); - windAngleFactor *= num; - Vector3 target = Vector3.Normalize(windDir + base.transform.forward) * windAngleFactor * m_sailForceFactor * sailSize; - m_sailForce = Vector3.SmoothDamp(m_sailForce, target, ref windChangeVelocity, 1f, 99f); - return m_sailForce; - } - - public float GetWindAngleFactor() - { - float num = Vector3.Dot(EnvMan.instance.GetWindDir(), -base.transform.forward); - float num2 = Mathf.Lerp(0.7f, 1f, 1f - Mathf.Abs(num)); - float num3 = 1f - Utils.LerpStep(0.75f, 0.8f, num); - return num2 * num3; - } - - private void UpdateWaterForce(float depth, float dt) - { - if (m_lastDepth == -9999f) - { - m_lastDepth = depth; - return; - } - float num = depth - m_lastDepth; - m_lastDepth = depth; - float num2 = num / dt; - if (num2 > 0f || !(Mathf.Abs(num2) > m_minWaterImpactForce) || !(Time.time - m_lastWaterImpactTime > m_minWaterImpactInterval)) - { - return; - } - m_lastWaterImpactTime = Time.time; - m_waterImpactEffect.Create(base.transform.position, base.transform.rotation); - if (m_players.Count > 0) - { - IDestructible component = GetComponent<IDestructible>(); - if (component != null) - { - HitData hitData = new HitData(); - hitData.m_damage.m_blunt = m_waterImpactDamage; - hitData.m_point = base.transform.position; - hitData.m_dir = Vector3.up; - component.Damage(hitData); - } - } - } - - private void ApplyEdgeForce(float dt) - { - float magnitude = base.transform.position.magnitude; - float num = 10420f; - if (magnitude > num) - { - Vector3 vector = Vector3.Normalize(base.transform.position); - float num2 = Utils.LerpStep(num, 10500f, magnitude) * 8f; - Vector3 vector2 = vector * num2; - m_body.AddForce(vector2 * dt, ForceMode.VelocityChange); - } - } - - private void FixTilt() - { - float num = Mathf.Asin(base.transform.right.y); - float num2 = Mathf.Asin(base.transform.forward.y); - if (Mathf.Abs(num) > (float)Math.PI / 6f) - { - if (num > 0f) - { - base.transform.RotateAround(base.transform.position, base.transform.forward, (0f - Time.fixedDeltaTime) * 20f); - } - else - { - base.transform.RotateAround(base.transform.position, base.transform.forward, Time.fixedDeltaTime * 20f); - } - } - if (Mathf.Abs(num2) > (float)Math.PI / 6f) - { - if (num2 > 0f) - { - base.transform.RotateAround(base.transform.position, base.transform.right, (0f - Time.fixedDeltaTime) * 20f); - } - else - { - base.transform.RotateAround(base.transform.position, base.transform.right, Time.fixedDeltaTime * 20f); - } - } - } - - private void UpdateControlls(float dt) - { - if (m_nview.IsOwner()) - { - m_nview.GetZDO().Set("forward", (int)m_speed); - m_nview.GetZDO().Set("rudder", m_rudderValue); - return; - } - m_speed = (Speed)m_nview.GetZDO().GetInt("forward"); - if (Time.time - m_sendRudderTime > 1f) - { - m_rudderValue = m_nview.GetZDO().GetFloat("rudder"); - } - } - - public bool IsSailUp() - { - if (m_speed != Speed.Half) - { - return m_speed == Speed.Full; - } - return true; - } - - private void UpdateSail(float dt) - { - UpdateSailSize(dt); - Vector3 windDir = EnvMan.instance.GetWindDir(); - windDir = Vector3.Cross(Vector3.Cross(windDir, base.transform.up), base.transform.up); - if (m_speed == Speed.Full || m_speed == Speed.Half) - { - float t = 0.5f + Vector3.Dot(base.transform.forward, windDir) * 0.5f; - Quaternion to = Quaternion.LookRotation(-Vector3.Lerp(windDir, Vector3.Normalize(windDir - base.transform.forward), t), base.transform.up); - m_mastObject.transform.rotation = Quaternion.RotateTowards(m_mastObject.transform.rotation, to, 30f * dt); - } - else if (m_speed == Speed.Back) - { - Quaternion from = Quaternion.LookRotation(-base.transform.forward, base.transform.up); - Quaternion to2 = Quaternion.LookRotation(-windDir, base.transform.up); - to2 = Quaternion.RotateTowards(from, to2, 80f); - m_mastObject.transform.rotation = Quaternion.RotateTowards(m_mastObject.transform.rotation, to2, 30f * dt); - } - } - - private void UpdateRudder(float dt, bool haveControllingPlayer) - { - if (!m_rudderObject) - { - return; - } - Quaternion b = Quaternion.Euler(0f, m_rudderRotationMax * (0f - m_rudderValue), 0f); - if (haveControllingPlayer) - { - if (m_speed == Speed.Slow) - { - m_rudderPaddleTimer += dt; - b *= Quaternion.Euler(0f, Mathf.Sin(m_rudderPaddleTimer * 6f) * 20f, 0f); - } - else if (m_speed == Speed.Back) - { - m_rudderPaddleTimer += dt; - b *= Quaternion.Euler(0f, Mathf.Sin(m_rudderPaddleTimer * -3f) * 40f, 0f); - } - } - m_rudderObject.transform.localRotation = Quaternion.Slerp(m_rudderObject.transform.localRotation, b, 0.5f); - } - - private void UpdateSailSize(float dt) - { - float num = 0f; - switch (m_speed) - { - case Speed.Back: - num = 0.1f; - break; - case Speed.Half: - num = 0.5f; - break; - case Speed.Full: - num = 1f; - break; - case Speed.Slow: - num = 0.1f; - break; - case Speed.Stop: - num = 0.1f; - break; - } - Vector3 localScale = m_sailObject.transform.localScale; - bool flag = Mathf.Abs(localScale.y - num) < 0.01f; - if (!flag) - { - localScale.y = Mathf.MoveTowards(localScale.y, num, dt); - m_sailObject.transform.localScale = localScale; - } - if ((bool)m_sailCloth) - { - if (m_speed == Speed.Stop || m_speed == Speed.Slow || m_speed == Speed.Back) - { - if (flag && m_sailCloth.enabled) - { - m_sailCloth.enabled = false; - } - } - else if (flag) - { - if (!sailWasInPosition) - { - m_sailCloth.enabled = false; - m_sailCloth.enabled = true; - } - } - else - { - m_sailCloth.enabled = true; - } - } - sailWasInPosition = flag; - } - - private void UpdateOwner() - { - if (m_nview.IsValid() && m_nview.IsOwner() && !(Player.m_localPlayer == null) && m_players.Count > 0 && !IsPlayerInBoat(Player.m_localPlayer)) - { - long owner = m_players[0].GetOwner(); - m_nview.GetZDO().SetOwner(owner); - ZLog.Log("Changing ship owner to " + owner); - } - } - - private void OnTriggerEnter(Collider collider) - { - Player component = collider.GetComponent<Player>(); - if ((bool)component) - { - m_players.Add(component); - ZLog.Log("Player onboard, total onboard " + m_players.Count); - if (component == Player.m_localPlayer) - { - m_currentShips.Add(this); - } - } - } - - private void OnTriggerExit(Collider collider) - { - Player component = collider.GetComponent<Player>(); - if ((bool)component) - { - m_players.Remove(component); - ZLog.Log("Player over board, players left " + m_players.Count); - if (component == Player.m_localPlayer) - { - m_currentShips.Remove(this); - } - } - } - - public bool IsPlayerInBoat(ZDOID zdoid) - { - foreach (Player player in m_players) - { - if (player.GetZDOID() == zdoid) - { - return true; - } - } - return false; - } - - public bool IsPlayerInBoat(Player player) - { - return m_players.Contains(player); - } - - public bool HasPlayerOnboard() - { - return m_players.Count > 0; - } - - private void OnDestroyed() - { - if (m_nview.IsValid() && m_nview.IsOwner()) - { - GoogleAnalyticsV4.instance.LogEvent("Game", "ShipDestroyed", base.gameObject.name, 0L); - } - m_currentShips.Remove(this); - } - - public bool IsWindControllActive() - { - foreach (Player player in m_players) - { - if (player.GetSEMan().HaveStatusAttribute(StatusEffect.StatusAttribute.SailingPower)) - { - return true; - } - } - return false; - } - - public static Ship GetLocalShip() - { - if (m_currentShips.Count == 0) - { - return null; - } - return m_currentShips[m_currentShips.Count - 1]; - } - - public bool HaveControllingPlayer() - { - if (m_players.Count == 0) - { - return false; - } - return m_shipControlls.HaveValidUser(); - } - - public bool IsOwner() - { - if (!m_nview.IsValid()) - { - return false; - } - return m_nview.IsOwner(); - } - - public float GetSpeed() - { - return Vector3.Dot(m_body.velocity, base.transform.forward); - } - - public Speed GetSpeedSetting() - { - return m_speed; - } - - public float GetRudder() - { - return m_rudder; - } - - public float GetRudderValue() - { - return m_rudderValue; - } - - public float GetShipYawAngle() - { - Camera mainCamera = Utils.GetMainCamera(); - if (mainCamera == null) - { - return 0f; - } - return 0f - Utils.YawFromDirection(mainCamera.transform.InverseTransformDirection(base.transform.forward)); - } - - public float GetWindAngle() - { - Vector3 windDir = EnvMan.instance.GetWindDir(); - return 0f - Utils.YawFromDirection(base.transform.InverseTransformDirection(windDir)); - } - - private void OnDrawGizmosSelected() - { - Gizmos.color = Color.red; - Gizmos.DrawWireSphere(base.transform.position + base.transform.forward * m_stearForceOffset, 0.25f); - Gizmos.color = Color.yellow; - Gizmos.DrawWireSphere(base.transform.position + base.transform.up * m_sailForceOffset, 0.25f); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ShipConstructor.cs b/Valheim_v202102/Valheim/assembly_valheim/ShipConstructor.cs deleted file mode 100644 index b754868..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ShipConstructor.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using UnityEngine; - -public class ShipConstructor : MonoBehaviour -{ - public GameObject m_shipPrefab; - - public GameObject m_hideWhenConstructed; - - public Transform m_spawnPoint; - - public long m_constructionTimeMinutes = 1L; - - private ZNetView m_nview; - - private void Start() - { - m_nview = GetComponent<ZNetView>(); - if (!(m_nview == null) && m_nview.GetZDO() != null) - { - if (m_nview.IsOwner() && m_nview.GetZDO().GetLong("spawntime", 0L) == 0L) - { - m_nview.GetZDO().Set("spawntime", ZNet.instance.GetTime().Ticks); - } - InvokeRepeating("UpdateConstruction", 5f, 1f); - if (IsBuilt()) - { - m_hideWhenConstructed.SetActive(value: false); - } - } - } - - private bool IsBuilt() - { - return m_nview.GetZDO().GetBool("done"); - } - - private void UpdateConstruction() - { - if (!m_nview.IsOwner()) - { - return; - } - if (IsBuilt()) - { - m_hideWhenConstructed.SetActive(value: false); - return; - } - DateTime time = ZNet.instance.GetTime(); - DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("spawntime", 0L)); - if ((time - dateTime).TotalMinutes > (double)m_constructionTimeMinutes) - { - m_hideWhenConstructed.SetActive(value: false); - UnityEngine.Object.Instantiate(m_shipPrefab, m_spawnPoint.position, m_spawnPoint.rotation); - m_nview.GetZDO().Set("done", value: true); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ShipControlls.cs b/Valheim_v202102/Valheim/assembly_valheim/ShipControlls.cs deleted file mode 100644 index c8911ed..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ShipControlls.cs +++ /dev/null @@ -1,175 +0,0 @@ -using UnityEngine; - -public class ShipControlls : MonoBehaviour, Interactable, Hoverable -{ - public string m_hoverText = ""; - - public Ship m_ship; - - public float m_maxUseRange = 10f; - - public Transform m_attachPoint; - - public Vector3 m_detachOffset = new Vector3(0f, 0.5f, 0f); - - public string m_attachAnimation = "attach_chair"; - - private ZNetView m_nview; - - private void Awake() - { - m_nview = m_ship.GetComponent<ZNetView>(); - m_nview.Register<ZDOID>("RequestControl", RPC_RequestControl); - m_nview.Register<ZDOID>("ReleaseControl", RPC_ReleaseControl); - m_nview.Register<bool>("RequestRespons", RPC_RequestRespons); - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public bool Interact(Humanoid character, bool repeat) - { - if (repeat) - { - return false; - } - if (!m_nview.IsValid()) - { - return false; - } - if (!InUseDistance(character)) - { - return false; - } - Player player = character as Player; - if (player == null) - { - return false; - } - if (player.IsEncumbered()) - { - return false; - } - if (player.GetStandingOnShip() != m_ship) - { - return false; - } - m_nview.InvokeRPC("RequestControl", player.GetZDOID()); - return false; - } - - public Ship GetShip() - { - return m_ship; - } - - public string GetHoverText() - { - if (!InUseDistance(Player.m_localPlayer)) - { - return Localization.instance.Localize("<color=grey>$piece_toofar</color>"); - } - return Localization.instance.Localize("[<color=yellow><b>$KEY_Use</b></color>] " + m_hoverText); - } - - public string GetHoverName() - { - return Localization.instance.Localize(m_hoverText); - } - - private void RPC_RequestControl(long sender, ZDOID playerID) - { - if (m_nview.IsOwner() && m_ship.IsPlayerInBoat(playerID)) - { - if (GetUser() == playerID || !HaveValidUser()) - { - m_nview.GetZDO().Set("user", playerID); - m_nview.InvokeRPC(sender, "RequestRespons", true); - } - else - { - m_nview.InvokeRPC(sender, "RequestRespons", false); - } - } - } - - private void RPC_ReleaseControl(long sender, ZDOID playerID) - { - if (m_nview.IsOwner() && GetUser() == playerID) - { - m_nview.GetZDO().Set("user", ZDOID.None); - } - } - - private void RPC_RequestRespons(long sender, bool granted) - { - if (!Player.m_localPlayer) - { - return; - } - if (granted) - { - Player.m_localPlayer.StartShipControl(this); - if (m_attachPoint != null) - { - Player.m_localPlayer.AttachStart(m_attachPoint, hideWeapons: false, isBed: false, m_attachAnimation, m_detachOffset); - } - } - else - { - Player.m_localPlayer.Message(MessageHud.MessageType.Center, "$msg_inuse"); - } - } - - public void OnUseStop(Player player) - { - if (m_nview.IsValid()) - { - m_nview.InvokeRPC("ReleaseControl", player.GetZDOID()); - if (m_attachPoint != null) - { - player.AttachStop(); - } - } - } - - public bool HaveValidUser() - { - ZDOID user = GetUser(); - if (user.IsNone()) - { - return false; - } - return m_ship.IsPlayerInBoat(user); - } - - public bool IsLocalUser() - { - if (!Player.m_localPlayer) - { - return false; - } - ZDOID user = GetUser(); - if (user.IsNone()) - { - return false; - } - return user == Player.m_localPlayer.GetZDOID(); - } - - private ZDOID GetUser() - { - if (!m_nview.IsValid()) - { - return ZDOID.None; - } - return m_nview.GetZDO().GetZDOID("user"); - } - - private bool InUseDistance(Humanoid human) - { - return Vector3.Distance(human.transform.position, m_attachPoint.position) < m_maxUseRange; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ShipEffects.cs b/Valheim_v202102/Valheim/assembly_valheim/ShipEffects.cs deleted file mode 100644 index d7bf567..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ShipEffects.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class ShipEffects : MonoBehaviour -{ - public Transform m_shadow; - - public float m_offset = 0.01f; - - public float m_minimumWakeVel = 5f; - - public GameObject m_speedWakeRoot; - - public GameObject m_wakeSoundRoot; - - public GameObject m_inWaterSoundRoot; - - public float m_audioFadeDuration = 2f; - - public AudioSource m_sailSound; - - public float m_sailFadeDuration = 1f; - - public GameObject m_splashEffects; - - private float m_sailBaseVol = 1f; - - private ParticleSystem[] m_wakeParticles; - - private List<KeyValuePair<AudioSource, float>> m_wakeSounds = new List<KeyValuePair<AudioSource, float>>(); - - private List<KeyValuePair<AudioSource, float>> m_inWaterSounds = new List<KeyValuePair<AudioSource, float>>(); - - private Rigidbody m_body; - - private Ship m_ship; - - private void Awake() - { - ZNetView componentInParent = GetComponentInParent<ZNetView>(); - if ((bool)componentInParent && componentInParent.GetZDO() == null) - { - base.enabled = false; - return; - } - m_body = GetComponentInParent<Rigidbody>(); - m_ship = GetComponentInParent<Ship>(); - if ((bool)m_speedWakeRoot) - { - m_wakeParticles = m_speedWakeRoot.GetComponentsInChildren<ParticleSystem>(); - } - if ((bool)m_wakeSoundRoot) - { - AudioSource[] componentsInChildren = m_wakeSoundRoot.GetComponentsInChildren<AudioSource>(); - foreach (AudioSource audioSource in componentsInChildren) - { - audioSource.pitch = Random.Range(0.9f, 1.1f); - m_wakeSounds.Add(new KeyValuePair<AudioSource, float>(audioSource, audioSource.volume)); - } - } - if ((bool)m_inWaterSoundRoot) - { - AudioSource[] componentsInChildren = m_inWaterSoundRoot.GetComponentsInChildren<AudioSource>(); - foreach (AudioSource audioSource2 in componentsInChildren) - { - audioSource2.pitch = Random.Range(0.9f, 1.1f); - m_inWaterSounds.Add(new KeyValuePair<AudioSource, float>(audioSource2, audioSource2.volume)); - } - } - if ((bool)m_sailSound) - { - m_sailBaseVol = m_sailSound.volume; - m_sailSound.pitch = Random.Range(0.9f, 1.1f); - } - } - - private void LateUpdate() - { - float waterLevel = WaterVolume.GetWaterLevel(base.transform.position); - Vector3 position = base.transform.position; - float deltaTime = Time.deltaTime; - if (position.y > waterLevel) - { - m_shadow.gameObject.SetActive(value: false); - SetWake(enabled: false, deltaTime); - FadeSounds(m_inWaterSounds, enabled: false, deltaTime); - return; - } - m_shadow.gameObject.SetActive(value: true); - bool flag = m_body.velocity.magnitude > m_minimumWakeVel; - FadeSounds(m_inWaterSounds, enabled: true, deltaTime); - SetWake(flag, deltaTime); - if ((bool)m_sailSound) - { - float target = (m_ship.IsSailUp() ? m_sailBaseVol : 0f); - FadeSound(m_sailSound, target, m_sailFadeDuration, deltaTime); - } - if (m_splashEffects != null) - { - m_splashEffects.SetActive(m_ship.HasPlayerOnboard()); - } - } - - private void SetWake(bool enabled, float dt) - { - ParticleSystem[] wakeParticles = m_wakeParticles; - for (int i = 0; i < wakeParticles.Length; i++) - { - ParticleSystem.EmissionModule emission = wakeParticles[i].emission; - emission.enabled = enabled; - } - FadeSounds(m_wakeSounds, enabled, dt); - } - - private void FadeSounds(List<KeyValuePair<AudioSource, float>> sources, bool enabled, float dt) - { - foreach (KeyValuePair<AudioSource, float> source in sources) - { - if (enabled) - { - FadeSound(source.Key, source.Value, m_audioFadeDuration, dt); - } - else - { - FadeSound(source.Key, 0f, m_audioFadeDuration, dt); - } - } - } - - private void FadeSound(AudioSource source, float target, float fadeDuration, float dt) - { - float maxDelta = dt / fadeDuration; - if (target > 0f) - { - if (!source.isPlaying) - { - source.Play(); - } - source.volume = Mathf.MoveTowards(source.volume, target, maxDelta); - } - else if (source.isPlaying) - { - source.volume = Mathf.MoveTowards(source.volume, 0f, maxDelta); - if (source.volume <= 0f) - { - source.Stop(); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ShuffleClass.cs b/Valheim_v202102/Valheim/assembly_valheim/ShuffleClass.cs deleted file mode 100644 index 5787a18..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ShuffleClass.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; - -internal static class ShuffleClass -{ - private static Random rng = new Random(); - - public static void Shuffle<T>(this IList<T> list) - { - int num = list.Count; - while (num > 1) - { - num--; - int index = rng.Next(num + 1); - T value = list[index]; - list[index] = list[num]; - list[num] = value; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Sign.cs b/Valheim_v202102/Valheim/assembly_valheim/Sign.cs deleted file mode 100644 index 04e91d9..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Sign.cs +++ /dev/null @@ -1,82 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -public class Sign : MonoBehaviour, Hoverable, Interactable, TextReceiver -{ - public Text m_textWidget; - - public string m_name = "Sign"; - - public string m_defaultText = "Sign"; - - public int m_characterLimit = 50; - - private ZNetView m_nview; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_nview.GetZDO() != null) - { - UpdateText(); - InvokeRepeating("UpdateText", 2f, 2f); - } - } - - public string GetHoverText() - { - if (!PrivateArea.CheckAccess(base.transform.position, 0f, flash: false)) - { - return "\"" + GetText() + "\""; - } - return "\"" + GetText() + "\"\n" + Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_use"); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - if (!PrivateArea.CheckAccess(base.transform.position)) - { - return false; - } - TextInput.instance.RequestText(this, "$piece_sign_input", m_characterLimit); - return true; - } - - private void UpdateText() - { - string text = GetText(); - if (!(m_textWidget.text == text)) - { - m_textWidget.text = text; - } - } - - public string GetText() - { - return m_nview.GetZDO().GetString("text", m_defaultText); - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public void SetText(string text) - { - if (PrivateArea.CheckAccess(base.transform.position)) - { - m_nview.ClaimOwnership(); - m_textWidget.text = text; - m_nview.GetZDO().Set("text", text); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Skills.cs b/Valheim_v202102/Valheim/assembly_valheim/Skills.cs deleted file mode 100644 index 642f867..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Skills.cs +++ /dev/null @@ -1,333 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Skills : MonoBehaviour -{ - public enum SkillType - { - None = 0, - Swords = 1, - Knives = 2, - Clubs = 3, - Polearms = 4, - Spears = 5, - Blocking = 6, - Axes = 7, - Bows = 8, - FireMagic = 9, - FrostMagic = 10, - Unarmed = 11, - Pickaxes = 12, - WoodCutting = 13, - Jump = 100, - Sneak = 101, - Run = 102, - Swim = 103, - All = 999 - } - - [Serializable] - public class SkillDef - { - public SkillType m_skill = SkillType.Swords; - - public Sprite m_icon; - - public string m_description = ""; - - public float m_increseStep = 1f; - } - - public class Skill - { - public SkillDef m_info; - - public float m_level; - - public float m_accumulator; - - public Skill(SkillDef info) - { - m_info = info; - } - - public bool Raise(float factor) - { - if (m_level >= 100f) - { - return false; - } - float num = m_info.m_increseStep * factor; - m_accumulator += num; - float nextLevelRequirement = GetNextLevelRequirement(); - if (m_accumulator >= nextLevelRequirement) - { - m_level += 1f; - m_level = Mathf.Clamp(m_level, 0f, 100f); - m_accumulator = 0f; - return true; - } - return false; - } - - private float GetNextLevelRequirement() - { - return Mathf.Pow(m_level + 1f, 1.5f) * 0.5f + 0.5f; - } - - public float GetLevelPercentage() - { - if (m_level >= 100f) - { - return 0f; - } - float nextLevelRequirement = GetNextLevelRequirement(); - return Mathf.Clamp01(m_accumulator / nextLevelRequirement); - } - } - - private const int dataVersion = 2; - - private const float randomSkillRange = 0.15f; - - private const float randomSkillMin = 0.4f; - - public const float m_maxSkillLevel = 100f; - - public const float m_skillCurve = 2f; - - public bool m_useSkillCap; - - public float m_totalSkillCap = 600f; - - public List<SkillDef> m_skills = new List<SkillDef>(); - - public float m_DeathLowerFactor = 0.25f; - - private Dictionary<SkillType, Skill> m_skillData = new Dictionary<SkillType, Skill>(); - - private Player m_player; - - public void Awake() - { - m_player = GetComponent<Player>(); - } - - public void Save(ZPackage pkg) - { - pkg.Write(2); - pkg.Write(m_skillData.Count); - foreach (KeyValuePair<SkillType, Skill> skillDatum in m_skillData) - { - pkg.Write((int)skillDatum.Value.m_info.m_skill); - pkg.Write(skillDatum.Value.m_level); - pkg.Write(skillDatum.Value.m_accumulator); - } - } - - public void Load(ZPackage pkg) - { - int num = pkg.ReadInt(); - m_skillData.Clear(); - int num2 = pkg.ReadInt(); - for (int i = 0; i < num2; i++) - { - SkillType skillType = (SkillType)pkg.ReadInt(); - float level = pkg.ReadSingle(); - float accumulator = ((num >= 2) ? pkg.ReadSingle() : 0f); - if (IsSkillValid(skillType)) - { - Skill skill = GetSkill(skillType); - skill.m_level = level; - skill.m_accumulator = accumulator; - } - } - } - - private bool IsSkillValid(SkillType type) - { - return Enum.IsDefined(typeof(SkillType), type); - } - - public float GetSkillFactor(SkillType skillType) - { - if (skillType == SkillType.None) - { - return 0f; - } - return GetSkill(skillType).m_level / 100f; - } - - public void GetRandomSkillRange(out float min, out float max, SkillType skillType) - { - float skillFactor = GetSkillFactor(skillType); - float num = Mathf.Lerp(0.4f, 1f, skillFactor); - min = Mathf.Clamp01(num - 0.15f); - max = Mathf.Clamp01(num + 0.15f); - } - - public float GetRandomSkillFactor(SkillType skillType) - { - float skillFactor = GetSkillFactor(skillType); - float num = Mathf.Lerp(0.4f, 1f, skillFactor); - float a = Mathf.Clamp01(num - 0.15f); - float b = Mathf.Clamp01(num + 0.15f); - return Mathf.Lerp(a, b, UnityEngine.Random.value); - } - - public void CheatRaiseSkill(string name, float value) - { - foreach (SkillType value2 in Enum.GetValues(typeof(SkillType))) - { - if (value2.ToString().ToLower() == name) - { - Skill skill = GetSkill(value2); - skill.m_level += value; - skill.m_level = Mathf.Clamp(skill.m_level, 0f, 100f); - if (m_useSkillCap) - { - RebalanceSkills(value2); - } - m_player.Message(MessageHud.MessageType.TopLeft, "Skill incresed " + skill.m_info.m_skill.ToString() + ": " + (int)skill.m_level, 0, skill.m_info.m_icon); - Console.instance.Print("Skill " + value2.ToString() + " = " + skill.m_level); - return; - } - } - Console.instance.Print("Skill not found " + name); - } - - public void CheatResetSkill(string name) - { - foreach (SkillType value in Enum.GetValues(typeof(SkillType))) - { - if (value.ToString().ToLower() == name) - { - ResetSkill(value); - Console.instance.Print("Skill " + value.ToString() + " reset"); - return; - } - } - Console.instance.Print("Skill not found " + name); - } - - public void ResetSkill(SkillType skillType) - { - m_skillData.Remove(skillType); - } - - public void RaiseSkill(SkillType skillType, float factor = 1f) - { - if (skillType == SkillType.None) - { - return; - } - Skill skill = GetSkill(skillType); - float level = skill.m_level; - if (skill.Raise(factor)) - { - if (m_useSkillCap) - { - RebalanceSkills(skillType); - } - m_player.OnSkillLevelup(skillType, skill.m_level); - MessageHud.MessageType type = (((int)level != 0) ? MessageHud.MessageType.TopLeft : MessageHud.MessageType.Center); - m_player.Message(type, "$msg_skillup $skill_" + skill.m_info.m_skill.ToString().ToLower() + ": " + (int)skill.m_level, 0, skill.m_info.m_icon); - GoogleAnalyticsV4.instance.LogEvent("Game", "Levelup", skillType.ToString(), (int)skill.m_level); - } - } - - private void RebalanceSkills(SkillType skillType) - { - if (GetTotalSkill() < m_totalSkillCap) - { - return; - } - float level = GetSkill(skillType).m_level; - float num = m_totalSkillCap - level; - float num2 = 0f; - foreach (KeyValuePair<SkillType, Skill> skillDatum in m_skillData) - { - if (skillDatum.Key != skillType) - { - num2 += skillDatum.Value.m_level; - } - } - foreach (KeyValuePair<SkillType, Skill> skillDatum2 in m_skillData) - { - if (skillDatum2.Key != skillType) - { - skillDatum2.Value.m_level = skillDatum2.Value.m_level / num2 * num; - } - } - } - - public void Clear() - { - m_skillData.Clear(); - } - - public void OnDeath() - { - LowerAllSkills(m_DeathLowerFactor); - } - - public void LowerAllSkills(float factor) - { - foreach (KeyValuePair<SkillType, Skill> skillDatum in m_skillData) - { - float num = skillDatum.Value.m_level * factor; - skillDatum.Value.m_level -= num; - skillDatum.Value.m_accumulator = 0f; - } - m_player.Message(MessageHud.MessageType.TopLeft, "$msg_skills_lowered"); - } - - private Skill GetSkill(SkillType skillType) - { - if (m_skillData.TryGetValue(skillType, out var value)) - { - return value; - } - value = new Skill(GetSkillDef(skillType)); - m_skillData.Add(skillType, value); - return value; - } - - private SkillDef GetSkillDef(SkillType type) - { - foreach (SkillDef skill in m_skills) - { - if (skill.m_skill == type) - { - return skill; - } - } - return null; - } - - public List<Skill> GetSkillList() - { - List<Skill> list = new List<Skill>(); - foreach (KeyValuePair<SkillType, Skill> skillDatum in m_skillData) - { - list.Add(skillDatum.Value); - } - return list; - } - - public float GetTotalSkill() - { - float num = 0f; - foreach (KeyValuePair<SkillType, Skill> skillDatum in m_skillData) - { - num += skillDatum.Value.m_level; - } - return num; - } - - public float GetTotalSkillCap() - { - return m_totalSkillCap; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SkillsDialog.cs b/Valheim_v202102/Valheim/assembly_valheim/SkillsDialog.cs deleted file mode 100644 index 01f8e66..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SkillsDialog.cs +++ /dev/null @@ -1,56 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class SkillsDialog : MonoBehaviour -{ - public RectTransform m_listRoot; - - public GameObject m_elementPrefab; - - public Text m_totalSkillText; - - public float m_spacing = 80f; - - private float m_baseListSize; - - private List<GameObject> m_elements = new List<GameObject>(); - - private void Awake() - { - m_baseListSize = m_listRoot.rect.height; - } - - public void Setup(Player player) - { - base.gameObject.SetActive(value: true); - foreach (GameObject element in m_elements) - { - Object.Destroy(element); - } - m_elements.Clear(); - List<Skills.Skill> skillList = player.GetSkills().GetSkillList(); - for (int i = 0; i < skillList.Count; i++) - { - Skills.Skill skill = skillList[i]; - GameObject gameObject = Object.Instantiate(m_elementPrefab, Vector3.zero, Quaternion.identity, m_listRoot); - gameObject.SetActive(value: true); - (gameObject.transform as RectTransform).anchoredPosition = new Vector2(0f, (float)(-i) * m_spacing); - gameObject.GetComponentInChildren<UITooltip>().m_text = skill.m_info.m_description; - Utils.FindChild(gameObject.transform, "icon").GetComponent<Image>().sprite = skill.m_info.m_icon; - Utils.FindChild(gameObject.transform, "name").GetComponent<Text>().text = Localization.instance.Localize("$skill_" + skill.m_info.m_skill.ToString().ToLower()); - Utils.FindChild(gameObject.transform, "leveltext").GetComponent<Text>().text = ((int)skill.m_level).ToString(); - Utils.FindChild(gameObject.transform, "levelbar").GetComponent<GuiBar>().SetValue(skill.m_level / 100f); - Utils.FindChild(gameObject.transform, "currentlevel").GetComponent<GuiBar>().SetValue(skill.GetLevelPercentage()); - m_elements.Add(gameObject); - } - float size = Mathf.Max(m_baseListSize, (float)skillList.Count * m_spacing); - m_listRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size); - m_totalSkillText.text = "<color=orange>" + player.GetSkills().GetTotalSkill().ToString("0") + "</color><color=white> / </color><color=orange>" + player.GetSkills().GetTotalSkillCap().ToString("0") + "</color>"; - } - - public void OnClose() - { - base.gameObject.SetActive(value: false); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SleepText.cs b/Valheim_v202102/Valheim/assembly_valheim/SleepText.cs deleted file mode 100644 index 1566d30..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SleepText.cs +++ /dev/null @@ -1,43 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -public class SleepText : MonoBehaviour -{ - public Text m_textField; - - public Text m_dreamField; - - public DreamTexts m_dreamTexts; - - private void OnEnable() - { - m_textField.canvasRenderer.SetAlpha(0f); - m_textField.CrossFadeAlpha(1f, 1f, ignoreTimeScale: true); - m_dreamField.enabled = false; - Invoke("HideZZZ", 2f); - Invoke("ShowDreamText", 4f); - } - - private void HideZZZ() - { - m_textField.CrossFadeAlpha(0f, 2f, ignoreTimeScale: true); - } - - private void ShowDreamText() - { - DreamTexts.DreamText randomDreamText = m_dreamTexts.GetRandomDreamText(); - if (randomDreamText != null) - { - m_dreamField.enabled = true; - m_dreamField.canvasRenderer.SetAlpha(0f); - m_dreamField.CrossFadeAlpha(1f, 1.5f, ignoreTimeScale: true); - m_dreamField.text = Localization.instance.Localize(randomDreamText.m_text); - Invoke("HideDreamText", 6.5f); - } - } - - private void HideDreamText() - { - m_dreamField.CrossFadeAlpha(0f, 1.5f, ignoreTimeScale: true); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SlowUpdate.cs b/Valheim_v202102/Valheim/assembly_valheim/SlowUpdate.cs deleted file mode 100644 index 2871f3d..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SlowUpdate.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class SlowUpdate : MonoBehaviour -{ - private static List<SlowUpdate> m_allInstances = new List<SlowUpdate>(); - - private int m_myIndex = -1; - - public virtual void Awake() - { - m_allInstances.Add(this); - m_myIndex = m_allInstances.Count - 1; - } - - public virtual void OnDestroy() - { - if (m_myIndex != -1) - { - m_allInstances[m_myIndex] = m_allInstances[m_allInstances.Count - 1]; - m_allInstances[m_myIndex].m_myIndex = m_myIndex; - m_allInstances.RemoveAt(m_allInstances.Count - 1); - } - } - - public virtual void SUpdate() - { - } - - public static List<SlowUpdate> GetAllInstaces() - { - return m_allInstances; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SlowUpdater.cs b/Valheim_v202102/Valheim/assembly_valheim/SlowUpdater.cs deleted file mode 100644 index b97b1ee..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SlowUpdater.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class SlowUpdater : MonoBehaviour -{ - private const int m_updatesPerFrame = 100; - - private void Awake() - { - StartCoroutine("UpdateLoop"); - } - - private IEnumerator UpdateLoop() - { - while (true) - { - List<SlowUpdate> instances = SlowUpdate.GetAllInstaces(); - int index = 0; - while (index < instances.Count) - { - for (int i = 0; i < 100; i++) - { - if (instances.Count == 0) - { - break; - } - if (index >= instances.Count) - { - break; - } - instances[index].SUpdate(); - int num = index + 1; - index = num; - } - yield return null; - } - yield return new WaitForSeconds(0.1f); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Smelter.cs b/Valheim_v202102/Valheim/assembly_valheim/Smelter.cs deleted file mode 100644 index c35b772..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Smelter.cs +++ /dev/null @@ -1,519 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Smelter : MonoBehaviour -{ - [Serializable] - public class ItemConversion - { - public ItemDrop m_from; - - public ItemDrop m_to; - } - - public string m_name = "Smelter"; - - public string m_addOreTooltip = "$piece_smelter_additem"; - - public string m_emptyOreTooltip = "$piece_smelter_empty"; - - public Switch m_addWoodSwitch; - - public Switch m_addOreSwitch; - - public Switch m_emptyOreSwitch; - - public Transform m_outputPoint; - - public Transform m_roofCheckPoint; - - public GameObject m_enabledObject; - - public Animator[] m_animators; - - public ItemDrop m_fuelItem; - - public int m_maxOre = 10; - - public int m_maxFuel = 10; - - public int m_fuelPerProduct = 4; - - public float m_secPerProduct = 10f; - - public bool m_spawnStack; - - public bool m_requiresRoof; - - public Windmill m_windmill; - - public List<ItemConversion> m_conversion = new List<ItemConversion>(); - - public EffectList m_oreAddedEffects = new EffectList(); - - public EffectList m_fuelAddedEffects = new EffectList(); - - public EffectList m_produceEffects = new EffectList(); - - private ZNetView m_nview; - - private bool m_haveRoof; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (!(m_nview == null) && m_nview.GetZDO() != null) - { - Switch addOreSwitch = m_addOreSwitch; - addOreSwitch.m_onUse = (Switch.Callback)Delegate.Combine(addOreSwitch.m_onUse, new Switch.Callback(OnAddOre)); - if ((bool)m_addWoodSwitch) - { - Switch addWoodSwitch = m_addWoodSwitch; - addWoodSwitch.m_onUse = (Switch.Callback)Delegate.Combine(addWoodSwitch.m_onUse, new Switch.Callback(OnAddFuel)); - } - if ((bool)m_emptyOreSwitch) - { - Switch emptyOreSwitch = m_emptyOreSwitch; - emptyOreSwitch.m_onUse = (Switch.Callback)Delegate.Combine(emptyOreSwitch.m_onUse, new Switch.Callback(OnEmpty)); - } - m_nview.Register<string>("AddOre", RPC_AddOre); - m_nview.Register("AddFuel", RPC_AddFuel); - m_nview.Register("EmptyProcessed", RPC_EmptyProcessed); - WearNTear component = GetComponent<WearNTear>(); - if ((bool)component) - { - component.m_onDestroyed = (Action)Delegate.Combine(component.m_onDestroyed, new Action(OnDestroyed)); - } - InvokeRepeating("UpdateSmelter", 1f, 1f); - } - } - - private void DropAllItems() - { - SpawnProcessed(); - if (m_fuelItem != null) - { - float @float = m_nview.GetZDO().GetFloat("fuel"); - for (int i = 0; i < (int)@float; i++) - { - Vector3 position = base.transform.position + Vector3.up + UnityEngine.Random.insideUnitSphere * 0.3f; - Quaternion rotation = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f); - UnityEngine.Object.Instantiate(m_fuelItem.gameObject, position, rotation); - } - } - while (GetQueueSize() > 0) - { - string queuedOre = GetQueuedOre(); - RemoveOneOre(); - ItemConversion itemConversion = GetItemConversion(queuedOre); - if (itemConversion != null) - { - Vector3 position2 = base.transform.position + Vector3.up + UnityEngine.Random.insideUnitSphere * 0.3f; - Quaternion rotation2 = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f); - UnityEngine.Object.Instantiate(itemConversion.m_from.gameObject, position2, rotation2); - } - else - { - ZLog.Log("Invalid ore in smelter " + queuedOre); - } - } - } - - private void OnDestroyed() - { - if (m_nview.IsOwner()) - { - DropAllItems(); - } - } - - private bool IsItemAllowed(ItemDrop.ItemData item) - { - return IsItemAllowed(item.m_dropPrefab.name); - } - - private bool IsItemAllowed(string itemName) - { - foreach (ItemConversion item in m_conversion) - { - if (item.m_from.gameObject.name == itemName) - { - return true; - } - } - return false; - } - - private ItemDrop.ItemData FindCookableItem(Inventory inventory) - { - foreach (ItemConversion item2 in m_conversion) - { - ItemDrop.ItemData item = inventory.GetItem(item2.m_from.m_itemData.m_shared.m_name); - if (item != null) - { - return item; - } - } - return null; - } - - private bool OnAddOre(Switch sw, Humanoid user, ItemDrop.ItemData item) - { - if (item == null) - { - item = FindCookableItem(user.GetInventory()); - if (item == null) - { - user.Message(MessageHud.MessageType.Center, "$msg_noprocessableitems"); - return false; - } - } - if (!IsItemAllowed(item.m_dropPrefab.name)) - { - user.Message(MessageHud.MessageType.Center, "$msg_wontwork"); - return false; - } - ZLog.Log("trying to add " + item.m_shared.m_name); - if (GetQueueSize() >= m_maxOre) - { - user.Message(MessageHud.MessageType.Center, "$msg_itsfull"); - return false; - } - user.Message(MessageHud.MessageType.Center, "$msg_added " + item.m_shared.m_name); - user.GetInventory().RemoveItem(item, 1); - m_nview.InvokeRPC("AddOre", item.m_dropPrefab.name); - return true; - } - - private float GetBakeTimer() - { - return m_nview.GetZDO().GetFloat("bakeTimer"); - } - - private void SetBakeTimer(float t) - { - m_nview.GetZDO().Set("bakeTimer", t); - } - - private float GetFuel() - { - return m_nview.GetZDO().GetFloat("fuel"); - } - - private void SetFuel(float fuel) - { - m_nview.GetZDO().Set("fuel", fuel); - } - - private int GetQueueSize() - { - return m_nview.GetZDO().GetInt("queued"); - } - - private void RPC_AddOre(long sender, string name) - { - if (m_nview.IsOwner()) - { - if (!IsItemAllowed(name)) - { - ZLog.Log("Item not allowed " + name); - return; - } - QueueOre(name); - m_oreAddedEffects.Create(base.transform.position, base.transform.rotation); - ZLog.Log("Added ore " + name); - } - } - - private void QueueOre(string name) - { - int queueSize = GetQueueSize(); - m_nview.GetZDO().Set("item" + queueSize, name); - m_nview.GetZDO().Set("queued", queueSize + 1); - } - - private string GetQueuedOre() - { - if (GetQueueSize() == 0) - { - return ""; - } - return m_nview.GetZDO().GetString("item0"); - } - - private void RemoveOneOre() - { - int queueSize = GetQueueSize(); - if (queueSize != 0) - { - for (int i = 0; i < queueSize; i++) - { - string @string = m_nview.GetZDO().GetString("item" + (i + 1)); - m_nview.GetZDO().Set("item" + i, @string); - } - m_nview.GetZDO().Set("queued", queueSize - 1); - } - } - - private bool OnEmpty(Switch sw, Humanoid user, ItemDrop.ItemData item) - { - if (GetProcessedQueueSize() <= 0) - { - return false; - } - m_nview.InvokeRPC("EmptyProcessed"); - return true; - } - - private void RPC_EmptyProcessed(long sender) - { - if (m_nview.IsOwner()) - { - SpawnProcessed(); - } - } - - private bool OnAddFuel(Switch sw, Humanoid user, ItemDrop.ItemData item) - { - if (item != null && item.m_shared.m_name != m_fuelItem.m_itemData.m_shared.m_name) - { - user.Message(MessageHud.MessageType.Center, "$msg_wrongitem"); - return false; - } - if (GetFuel() > (float)(m_maxFuel - 1)) - { - user.Message(MessageHud.MessageType.Center, "$msg_itsfull"); - return false; - } - if (!user.GetInventory().HaveItem(m_fuelItem.m_itemData.m_shared.m_name)) - { - user.Message(MessageHud.MessageType.Center, "$msg_donthaveany " + m_fuelItem.m_itemData.m_shared.m_name); - return false; - } - user.Message(MessageHud.MessageType.Center, "$msg_added " + m_fuelItem.m_itemData.m_shared.m_name); - user.GetInventory().RemoveItem(m_fuelItem.m_itemData.m_shared.m_name, 1); - m_nview.InvokeRPC("AddFuel"); - return true; - } - - private void RPC_AddFuel(long sender) - { - if (m_nview.IsOwner()) - { - float fuel = GetFuel(); - SetFuel(fuel + 1f); - m_fuelAddedEffects.Create(base.transform.position, base.transform.rotation, base.transform); - } - } - - private double GetDeltaTime() - { - DateTime time = ZNet.instance.GetTime(); - DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("StartTime", time.Ticks)); - double totalSeconds = (time - dateTime).TotalSeconds; - m_nview.GetZDO().Set("StartTime", time.Ticks); - return totalSeconds; - } - - private float GetAccumulator() - { - return m_nview.GetZDO().GetFloat("accTime"); - } - - private void SetAccumulator(float t) - { - m_nview.GetZDO().Set("accTime", t); - } - - private void UpdateRoof() - { - if (m_requiresRoof) - { - m_haveRoof = Cover.IsUnderRoof(m_roofCheckPoint.position); - } - } - - private void UpdateSmelter() - { - UpdateRoof(); - if (!m_nview.IsValid() || !m_nview.IsOwner()) - { - return; - } - double deltaTime = GetDeltaTime(); - float accumulator = GetAccumulator(); - accumulator += (float)deltaTime; - float num = (m_windmill ? m_windmill.GetPowerOutput() : 1f); - while (accumulator >= 1f) - { - accumulator -= 1f; - float fuel = GetFuel(); - string queuedOre = GetQueuedOre(); - if ((m_maxFuel != 0 && !(fuel > 0f)) || !(queuedOre != "") || !(m_secPerProduct > 0f) || (m_requiresRoof && !m_haveRoof)) - { - continue; - } - float num2 = 1f * num; - if (m_maxFuel > 0) - { - float num3 = m_secPerProduct / (float)m_fuelPerProduct; - fuel -= num2 / num3; - if (fuel < 0f) - { - fuel = 0f; - } - SetFuel(fuel); - } - float bakeTimer = GetBakeTimer(); - bakeTimer += num2; - SetBakeTimer(bakeTimer); - if (bakeTimer > m_secPerProduct) - { - SetBakeTimer(0f); - RemoveOneOre(); - QueueProcessed(queuedOre); - } - } - if (GetQueuedOre() == "" || ((float)m_maxFuel > 0f && GetFuel() == 0f)) - { - SpawnProcessed(); - } - SetAccumulator(accumulator); - } - - private void QueueProcessed(string ore) - { - if (!m_spawnStack) - { - Spawn(ore, 1); - return; - } - string @string = m_nview.GetZDO().GetString("SpawnOre"); - int @int = m_nview.GetZDO().GetInt("SpawnAmount"); - if (@string.Length > 0) - { - if (@string != ore) - { - SpawnProcessed(); - m_nview.GetZDO().Set("SpawnOre", ore); - m_nview.GetZDO().Set("SpawnAmount", 1); - return; - } - @int++; - ItemConversion itemConversion = GetItemConversion(ore); - if (itemConversion == null || @int >= itemConversion.m_to.m_itemData.m_shared.m_maxStackSize) - { - Spawn(ore, @int); - m_nview.GetZDO().Set("SpawnOre", ""); - m_nview.GetZDO().Set("SpawnAmount", 0); - } - else - { - m_nview.GetZDO().Set("SpawnAmount", @int); - } - } - else - { - m_nview.GetZDO().Set("SpawnOre", ore); - m_nview.GetZDO().Set("SpawnAmount", 1); - } - } - - private void SpawnProcessed() - { - int @int = m_nview.GetZDO().GetInt("SpawnAmount"); - if (@int > 0) - { - string @string = m_nview.GetZDO().GetString("SpawnOre"); - Spawn(@string, @int); - m_nview.GetZDO().Set("SpawnOre", ""); - m_nview.GetZDO().Set("SpawnAmount", 0); - } - } - - private int GetProcessedQueueSize() - { - return m_nview.GetZDO().GetInt("SpawnAmount"); - } - - private void Spawn(string ore, int stack) - { - ItemConversion itemConversion = GetItemConversion(ore); - if (itemConversion != null) - { - m_produceEffects.Create(base.transform.position, base.transform.rotation); - UnityEngine.Object.Instantiate(itemConversion.m_to.gameObject, m_outputPoint.position, m_outputPoint.rotation).GetComponent<ItemDrop>().m_itemData.m_stack = stack; - } - } - - private void FixedUpdate() - { - if (m_nview.IsValid()) - { - UpdateState(); - UpdateHoverTexts(); - } - } - - private ItemConversion GetItemConversion(string itemName) - { - foreach (ItemConversion item in m_conversion) - { - if (item.m_from.gameObject.name == itemName) - { - return item; - } - } - return null; - } - - private void UpdateState() - { - bool flag = IsActive(); - m_enabledObject.SetActive(flag); - Animator[] animators = m_animators; - foreach (Animator animator in animators) - { - if (animator.gameObject.activeInHierarchy) - { - animator.SetBool("active", flag); - } - } - } - - public bool IsActive() - { - if ((m_maxFuel == 0 || GetFuel() > 0f) && GetQueueSize() > 0) - { - if (m_requiresRoof) - { - return m_haveRoof; - } - return true; - } - return false; - } - - private void UpdateHoverTexts() - { - if ((bool)m_addWoodSwitch) - { - float fuel = GetFuel(); - m_addWoodSwitch.m_hoverText = m_name + " (" + m_fuelItem.m_itemData.m_shared.m_name + " " + Mathf.Ceil(fuel) + "/" + m_maxFuel + ")\n[<color=yellow><b>$KEY_Use</b></color>] $piece_smelter_add " + m_fuelItem.m_itemData.m_shared.m_name; - } - if ((bool)m_emptyOreSwitch && m_spawnStack) - { - int processedQueueSize = GetProcessedQueueSize(); - m_emptyOreSwitch.m_hoverText = m_name + " (" + processedQueueSize + " $piece_smelter_ready \n[<color=yellow><b>$KEY_Use</b></color>] " + m_emptyOreTooltip; - } - int queueSize = GetQueueSize(); - m_addOreSwitch.m_hoverText = m_name + " (" + queueSize + "/" + m_maxOre + ") "; - if (m_requiresRoof && !m_haveRoof && Mathf.Sin(Time.time * 10f) > 0f) - { - m_addOreSwitch.m_hoverText += " <color=yellow>$piece_smelter_reqroof</color>"; - } - Switch addOreSwitch = m_addOreSwitch; - addOreSwitch.m_hoverText = addOreSwitch.m_hoverText + "\n[<color=yellow><b>$KEY_Use</b></color>] " + m_addOreTooltip; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Smoke.cs b/Valheim_v202102/Valheim/assembly_valheim/Smoke.cs deleted file mode 100644 index 01dfa2e..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Smoke.cs +++ /dev/null @@ -1,128 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class Smoke : MonoBehaviour -{ - public Vector3 m_vel = Vector3.up; - - public float m_randomVel = 0.1f; - - public float m_force = 0.1f; - - public float m_ttl = 10f; - - public float m_fadetime = 3f; - - private Rigidbody m_body; - - private float m_time; - - private float m_fadeTimer = -1f; - - private bool m_added; - - private MeshRenderer m_mr; - - private static List<Smoke> m_smoke = new List<Smoke>(); - - private void Awake() - { - m_body = GetComponent<Rigidbody>(); - m_smoke.Add(this); - m_added = true; - m_mr = GetComponent<MeshRenderer>(); - m_vel += Quaternion.Euler(0f, Random.Range(0, 360), 0f) * Vector3.forward * m_randomVel; - } - - private void OnDestroy() - { - if (m_added) - { - m_smoke.Remove(this); - m_added = false; - } - } - - public void StartFadeOut() - { - if (!(m_fadeTimer >= 0f)) - { - if (m_added) - { - m_smoke.Remove(this); - m_added = false; - } - m_fadeTimer = 0f; - } - } - - public static int GetTotalSmoke() - { - return m_smoke.Count; - } - - public static void FadeOldest() - { - if (m_smoke.Count != 0) - { - m_smoke[0].StartFadeOut(); - } - } - - public static void FadeMostDistant() - { - if (m_smoke.Count == 0) - { - return; - } - Camera mainCamera = Utils.GetMainCamera(); - if (mainCamera == null) - { - return; - } - Vector3 position = mainCamera.transform.position; - int num = -1; - float num2 = 0f; - for (int i = 0; i < m_smoke.Count; i++) - { - float num3 = Vector3.Distance(m_smoke[i].transform.position, position); - if (num3 > num2) - { - num = i; - num2 = num3; - } - } - if (num != -1) - { - m_smoke[num].StartFadeOut(); - } - } - - private void Update() - { - m_time += Time.deltaTime; - if (m_time > m_ttl && m_fadeTimer < 0f) - { - StartFadeOut(); - } - float num = 1f - Mathf.Clamp01(m_time / m_ttl); - m_body.mass = num * num; - Vector3 velocity = m_body.velocity; - Vector3 vel = m_vel; - vel.y *= num; - Vector3 vector = vel - velocity; - m_body.AddForce(vector * m_force * Time.deltaTime, ForceMode.VelocityChange); - if (m_fadeTimer >= 0f) - { - m_fadeTimer += Time.deltaTime; - float a = 1f - Mathf.Clamp01(m_fadeTimer / m_fadetime); - Color color = m_mr.material.color; - color.a = a; - m_mr.material.color = color; - if (m_fadeTimer >= m_fadetime) - { - Object.Destroy(base.gameObject); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SmokeLod.cs b/Valheim_v202102/Valheim/assembly_valheim/SmokeLod.cs deleted file mode 100644 index 2ae82c0..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SmokeLod.cs +++ /dev/null @@ -1,5 +0,0 @@ -using UnityEngine; - -public class SmokeLod : MonoBehaviour -{ -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SmokeRenderer.cs b/Valheim_v202102/Valheim/assembly_valheim/SmokeRenderer.cs deleted file mode 100644 index 474f921..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SmokeRenderer.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class SmokeRenderer : MonoBehaviour -{ - private InstanceRenderer m_instanceRenderer; - - private List<Vector4> tempTransforms = new List<Vector4>(); - - private void Start() - { - m_instanceRenderer = GetComponent<InstanceRenderer>(); - } - - private void Update() - { - if (!(Utils.GetMainCamera() == null)) - { - UpdateInstances(); - } - } - - private void UpdateInstances() - { - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SmokeSpawner.cs b/Valheim_v202102/Valheim/assembly_valheim/SmokeSpawner.cs deleted file mode 100644 index 8787c56..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SmokeSpawner.cs +++ /dev/null @@ -1,73 +0,0 @@ -using UnityEngine; - -public class SmokeSpawner : MonoBehaviour -{ - private const float m_minPlayerDistance = 64f; - - private const int m_maxGlobalSmoke = 100; - - private const float m_blockedMinTime = 4f; - - public GameObject m_smokePrefab; - - public float m_interval = 0.5f; - - public LayerMask m_testMask; - - public float m_testRadius = 0.5f; - - private float m_lastSpawnTime; - - private float m_time; - - private void Start() - { - m_time = Random.Range(0f, m_interval); - } - - private void Update() - { - m_time += Time.deltaTime; - if (m_time > m_interval) - { - m_time = 0f; - Spawn(); - } - } - - private void Spawn() - { - Player localPlayer = Player.m_localPlayer; - if (localPlayer == null || Vector3.Distance(localPlayer.transform.position, base.transform.position) > 64f) - { - m_lastSpawnTime = Time.time; - } - else if (!TestBlocked()) - { - if (Smoke.GetTotalSmoke() > 100) - { - Smoke.FadeOldest(); - } - Object.Instantiate(m_smokePrefab, base.transform.position, Random.rotation); - m_lastSpawnTime = Time.time; - } - } - - private bool TestBlocked() - { - if (Physics.CheckSphere(base.transform.position, m_testRadius, m_testMask.value)) - { - return true; - } - return false; - } - - public bool IsBlocked() - { - if (!base.gameObject.activeInHierarchy) - { - return TestBlocked(); - } - return Time.time - m_lastSpawnTime > 4f; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SnapToGround.cs b/Valheim_v202102/Valheim/assembly_valheim/SnapToGround.cs deleted file mode 100644 index 2aa1ad8..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SnapToGround.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -[ExecuteInEditMode] -public class SnapToGround : MonoBehaviour -{ - public float m_offset; - - private static List<SnapToGround> m_allSnappers = new List<SnapToGround>(); - - private bool m_inList; - - private void Awake() - { - m_allSnappers.Add(this); - m_inList = true; - } - - private void OnDestroy() - { - if (m_inList) - { - m_allSnappers.Remove(this); - m_inList = false; - } - } - - private void Snap() - { - if (!(ZoneSystem.instance == null)) - { - float groundHeight = ZoneSystem.instance.GetGroundHeight(base.transform.position); - Vector3 position = base.transform.position; - position.y = groundHeight + m_offset; - base.transform.position = position; - ZNetView component = GetComponent<ZNetView>(); - if (component != null && component.IsOwner()) - { - component.GetZDO().SetPosition(position); - } - } - } - - public bool HaveUnsnapped() - { - return m_allSnappers.Count > 0; - } - - public static void SnappAll() - { - if (m_allSnappers.Count == 0) - { - return; - } - Heightmap.ForceGenerateAll(); - foreach (SnapToGround allSnapper in m_allSnappers) - { - allSnapper.Snap(); - allSnapper.m_inList = false; - } - m_allSnappers.Clear(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SpawnAbility.cs b/Valheim_v202102/Valheim/assembly_valheim/SpawnAbility.cs deleted file mode 100644 index f71dfcf..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SpawnAbility.cs +++ /dev/null @@ -1,164 +0,0 @@ -using System; -using System.Collections; -using UnityEngine; - -public class SpawnAbility : MonoBehaviour, IProjectile -{ - public enum TargetType - { - ClosestEnemy, - RandomEnemy, - Caster, - Position - } - - [Header("Spawn")] - public GameObject[] m_spawnPrefab; - - public bool m_alertSpawnedCreature = true; - - public bool m_spawnAtTarget = true; - - public int m_minToSpawn = 1; - - public int m_maxToSpawn = 1; - - public int m_maxSpawned = 3; - - public float m_spawnRadius = 3f; - - public bool m_snapToTerrain = true; - - public float m_spawnGroundOffset; - - public float m_spawnDelay; - - public TargetType m_targetType; - - public float m_maxTargetRange = 40f; - - public EffectList m_spawnEffects = new EffectList(); - - [Header("Projectile")] - public float m_projectileVelocity = 10f; - - public float m_projectileAccuracy = 10f; - - private Character m_owner; - - public void Setup(Character owner, Vector3 velocity, float hitNoise, HitData hitData, ItemDrop.ItemData item) - { - m_owner = owner; - StartCoroutine("Spawn"); - } - - public string GetTooltipString(int itemQuality) - { - return ""; - } - - private IEnumerator Spawn() - { - int toSpawn = UnityEngine.Random.Range(m_minToSpawn, m_maxToSpawn); - int i = 0; - while (i < toSpawn) - { - if (FindTarget(out var point)) - { - Vector3 vector = (m_spawnAtTarget ? point : base.transform.position); - Vector2 vector2 = UnityEngine.Random.insideUnitCircle * m_spawnRadius; - Vector3 vector3 = vector + new Vector3(vector2.x, 0f, vector2.y); - if (m_snapToTerrain) - { - float solidHeight = ZoneSystem.instance.GetSolidHeight(vector3); - vector3.y = solidHeight; - } - vector3.y += m_spawnGroundOffset; - if (!(Mathf.Abs(vector3.y - vector.y) > 100f)) - { - GameObject gameObject = m_spawnPrefab[UnityEngine.Random.Range(0, m_spawnPrefab.Length)]; - if (m_maxSpawned <= 0 || SpawnSystem.GetNrOfInstances(gameObject) < m_maxSpawned) - { - GameObject obj = UnityEngine.Object.Instantiate(gameObject, vector3, Quaternion.Euler(0f, UnityEngine.Random.value * (float)Math.PI * 2f, 0f)); - Projectile component = obj.GetComponent<Projectile>(); - if ((bool)component) - { - SetupProjectile(component, point); - } - BaseAI component2 = obj.GetComponent<BaseAI>(); - if (component2 != null && m_alertSpawnedCreature) - { - component2.Alert(); - } - m_spawnEffects.Create(vector3, Quaternion.identity); - if (m_spawnDelay > 0f) - { - yield return new WaitForSeconds(m_spawnDelay); - } - } - } - } - int num = i + 1; - i = num; - } - UnityEngine.Object.Destroy(base.gameObject); - } - - private void SetupProjectile(Projectile projectile, Vector3 targetPoint) - { - Vector3 normalized = (targetPoint - projectile.transform.position).normalized; - Vector3 axis = Vector3.Cross(normalized, Vector3.up); - Quaternion quaternion = Quaternion.AngleAxis(UnityEngine.Random.Range(0f - m_projectileAccuracy, m_projectileAccuracy), Vector3.up); - normalized = Quaternion.AngleAxis(UnityEngine.Random.Range(0f - m_projectileAccuracy, m_projectileAccuracy), axis) * normalized; - normalized = quaternion * normalized; - projectile.Setup(m_owner, normalized * m_projectileVelocity, -1f, null, null); - } - - private bool FindTarget(out Vector3 point) - { - point = Vector3.zero; - switch (m_targetType) - { - case TargetType.ClosestEnemy: - { - if (m_owner == null) - { - return false; - } - Character character2 = BaseAI.FindClosestEnemy(m_owner, base.transform.position, m_maxTargetRange); - if (character2 != null) - { - point = character2.transform.position; - return true; - } - return false; - } - case TargetType.RandomEnemy: - { - if (m_owner == null) - { - return false; - } - Character character = BaseAI.FindRandomEnemy(m_owner, base.transform.position, m_maxTargetRange); - if (character != null) - { - point = character.transform.position; - return true; - } - return false; - } - case TargetType.Position: - point = base.transform.position; - return true; - case TargetType.Caster: - if (m_owner == null) - { - return false; - } - point = m_owner.transform.position; - return true; - default: - return false; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SpawnArea.cs b/Valheim_v202102/Valheim/assembly_valheim/SpawnArea.cs deleted file mode 100644 index 1a052fa..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SpawnArea.cs +++ /dev/null @@ -1,198 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class SpawnArea : MonoBehaviour -{ - [Serializable] - public class SpawnData - { - public GameObject m_prefab; - - public float m_weight; - - [Header("Level")] - public int m_maxLevel = 1; - - public int m_minLevel = 1; - } - - private const float dt = 2f; - - public List<SpawnData> m_prefabs = new List<SpawnData>(); - - public float m_levelupChance = 15f; - - public float m_spawnIntervalSec = 30f; - - public float m_triggerDistance = 256f; - - public bool m_setPatrolSpawnPoint = true; - - public float m_spawnRadius = 2f; - - public float m_nearRadius = 10f; - - public float m_farRadius = 1000f; - - public int m_maxNear = 3; - - public int m_maxTotal = 20; - - public bool m_onGroundOnly; - - public EffectList m_spawnEffects = new EffectList(); - - private ZNetView m_nview; - - private float m_spawnTimer; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - InvokeRepeating("UpdateSpawn", 2f, 2f); - } - - private void UpdateSpawn() - { - if (m_nview.IsOwner() && !ZNetScene.instance.OutsideActiveArea(base.transform.position) && Player.IsPlayerInRange(base.transform.position, m_triggerDistance)) - { - m_spawnTimer += 2f; - if (m_spawnTimer > m_spawnIntervalSec) - { - m_spawnTimer = 0f; - SpawnOne(); - } - } - } - - private bool SpawnOne() - { - GetInstances(out var near, out var total); - if (near >= m_maxNear || total >= m_maxTotal) - { - return false; - } - SpawnData spawnData = SelectWeightedPrefab(); - if (spawnData == null) - { - return false; - } - if (!FindSpawnPoint(spawnData.m_prefab, out var point)) - { - return false; - } - GameObject gameObject = UnityEngine.Object.Instantiate(spawnData.m_prefab, point, Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f)); - if (m_setPatrolSpawnPoint) - { - BaseAI component = gameObject.GetComponent<BaseAI>(); - if (component != null) - { - component.SetPatrolPoint(); - } - } - Character component2 = gameObject.GetComponent<Character>(); - if (spawnData.m_maxLevel > 1) - { - int i; - for (i = spawnData.m_minLevel; i < spawnData.m_maxLevel; i++) - { - if (!(UnityEngine.Random.Range(0f, 100f) <= m_levelupChance)) - { - break; - } - } - if (i > 1) - { - component2.SetLevel(i); - } - } - Vector3 centerPoint = component2.GetCenterPoint(); - m_spawnEffects.Create(centerPoint, Quaternion.identity); - return true; - } - - private bool FindSpawnPoint(GameObject prefab, out Vector3 point) - { - prefab.GetComponent<BaseAI>(); - for (int i = 0; i < 10; i++) - { - Vector3 vector = base.transform.position + Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f) * Vector3.forward * UnityEngine.Random.Range(0f, m_spawnRadius); - if (ZoneSystem.instance.FindFloor(vector, out var height) && (!m_onGroundOnly || !ZoneSystem.instance.IsBlocked(vector))) - { - vector.y = height + 0.1f; - point = vector; - return true; - } - } - point = Vector3.zero; - return false; - } - - private SpawnData SelectWeightedPrefab() - { - if (m_prefabs.Count == 0) - { - return null; - } - float num = 0f; - foreach (SpawnData prefab in m_prefabs) - { - num += prefab.m_weight; - } - float num2 = UnityEngine.Random.Range(0f, num); - float num3 = 0f; - foreach (SpawnData prefab2 in m_prefabs) - { - num3 += prefab2.m_weight; - if (num2 <= num3) - { - return prefab2; - } - } - return m_prefabs[m_prefabs.Count - 1]; - } - - private void GetInstances(out int near, out int total) - { - near = 0; - total = 0; - Vector3 position = base.transform.position; - foreach (BaseAI allInstance in BaseAI.GetAllInstances()) - { - if (IsSpawnPrefab(allInstance.gameObject)) - { - float num = Utils.DistanceXZ(allInstance.transform.position, position); - if (num < m_nearRadius) - { - near++; - } - if (num < m_farRadius) - { - total++; - } - } - } - } - - private bool IsSpawnPrefab(GameObject go) - { - string text = go.name; - foreach (SpawnData prefab in m_prefabs) - { - if (text.StartsWith(prefab.m_prefab.name)) - { - return true; - } - } - return false; - } - - private void OnDrawGizmosSelected() - { - Gizmos.color = Color.red; - Gizmos.DrawWireSphere(base.transform.position, m_spawnRadius); - Gizmos.color = Color.yellow; - Gizmos.DrawWireSphere(base.transform.position, m_nearRadius); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SpawnOnDamaged.cs b/Valheim_v202102/Valheim/assembly_valheim/SpawnOnDamaged.cs deleted file mode 100644 index a334005..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SpawnOnDamaged.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using UnityEngine; - -public class SpawnOnDamaged : MonoBehaviour -{ - public GameObject m_spawnOnDamage; - - private void Start() - { - WearNTear component = GetComponent<WearNTear>(); - if ((bool)component) - { - component.m_onDamaged = (Action)Delegate.Combine(component.m_onDamaged, new Action(OnDamaged)); - } - Destructible component2 = GetComponent<Destructible>(); - if ((bool)component2) - { - component2.m_onDamaged = (Action)Delegate.Combine(component2.m_onDamaged, new Action(OnDamaged)); - } - } - - private void OnDamaged() - { - if ((bool)m_spawnOnDamage) - { - UnityEngine.Object.Instantiate(m_spawnOnDamage, base.transform.position, Quaternion.identity); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SpawnSystem.cs b/Valheim_v202102/Valheim/assembly_valheim/SpawnSystem.cs deleted file mode 100644 index 8b5fa4a..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SpawnSystem.cs +++ /dev/null @@ -1,510 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class SpawnSystem : MonoBehaviour -{ - [Serializable] - public class SpawnData - { - public string m_name = ""; - - public bool m_enabled = true; - - public GameObject m_prefab; - - [BitMask(typeof(Heightmap.Biome))] - public Heightmap.Biome m_biome; - - [BitMask(typeof(Heightmap.BiomeArea))] - public Heightmap.BiomeArea m_biomeArea = Heightmap.BiomeArea.Everything; - - [Header("Total nr of instances (if near player is set, only instances within the max spawn radius is counted)")] - public int m_maxSpawned = 1; - - [Header("How often do we spawn")] - public float m_spawnInterval = 4f; - - [Header("Chanse to spawn each spawn interval")] - [Range(0f, 100f)] - public float m_spawnChance = 100f; - - [Header("Minimum distance to another instance")] - public float m_spawnDistance = 10f; - - [Header("Spawn range ( 0 = use global setting )")] - public float m_spawnRadiusMin; - - public float m_spawnRadiusMax; - - [Header("Only spawn if this key is set")] - public string m_requiredGlobalKey = ""; - - [Header("Only spawn if this environment is active")] - public List<string> m_requiredEnvironments = new List<string>(); - - [Header("Group spawning")] - public int m_groupSizeMin = 1; - - public int m_groupSizeMax = 1; - - public float m_groupRadius = 3f; - - [Header("Time of day")] - public bool m_spawnAtNight = true; - - public bool m_spawnAtDay = true; - - [Header("Altitude")] - public float m_minAltitude = -1000f; - - public float m_maxAltitude = 1000f; - - [Header("Terrain tilt")] - public float m_minTilt; - - public float m_maxTilt = 35f; - - [Header("Forest")] - public bool m_inForest = true; - - public bool m_outsideForest = true; - - [Header("Ocean depth ")] - public float m_minOceanDepth; - - public float m_maxOceanDepth; - - [Header("States")] - public bool m_huntPlayer; - - public float m_groundOffset = 0.5f; - - [Header("Level")] - public int m_maxLevel = 1; - - public int m_minLevel = 1; - - public float m_levelUpMinCenterDistance; - - [HideInInspector] - public bool m_foldout; - - public SpawnData Clone() - { - SpawnData obj = MemberwiseClone() as SpawnData; - obj.m_requiredEnvironments = new List<string>(m_requiredEnvironments); - return obj; - } - } - - private static List<SpawnSystem> m_instances = new List<SpawnSystem>(); - - private const float m_spawnDistanceMin = 40f; - - private const float m_spawnDistanceMax = 80f; - - public List<SpawnData> m_spawners = new List<SpawnData>(); - - public float m_levelupChance = 10f; - - [HideInInspector] - public List<Heightmap.Biome> m_biomeFolded = new List<Heightmap.Biome>(); - - private List<Player> m_nearPlayers = new List<Player>(); - - private ZNetView m_nview; - - private Heightmap m_heightmap; - - private void Awake() - { - m_instances.Add(this); - m_nview = GetComponent<ZNetView>(); - m_heightmap = Heightmap.FindHeightmap(base.transform.position); - InvokeRepeating("UpdateSpawning", 4f, 4f); - } - - private void OnDestroy() - { - m_instances.Remove(this); - } - - private void UpdateSpawning() - { - if (!m_nview.IsValid() || !m_nview.IsOwner() || Player.m_localPlayer == null) - { - return; - } - m_nearPlayers.Clear(); - GetPlayersInZone(m_nearPlayers); - if (m_nearPlayers.Count != 0) - { - DateTime time = ZNet.instance.GetTime(); - UpdateSpawnList(m_spawners, time, eventSpawners: false); - List<SpawnData> currentSpawners = RandEventSystem.instance.GetCurrentSpawners(); - if (currentSpawners != null) - { - UpdateSpawnList(currentSpawners, time, eventSpawners: true); - } - } - } - - private void UpdateSpawnList(List<SpawnData> spawners, DateTime currentTime, bool eventSpawners) - { - string text = (eventSpawners ? "e_" : "b_"); - int num = 0; - foreach (SpawnData spawner in spawners) - { - num++; - if (!spawner.m_enabled || !m_heightmap.HaveBiome(spawner.m_biome)) - { - continue; - } - int stableHashCode = (text + spawner.m_prefab.name + num).GetStableHashCode(); - DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong(stableHashCode, 0L)); - TimeSpan timeSpan = currentTime - dateTime; - int num2 = Mathf.Min(spawner.m_maxSpawned, (int)(timeSpan.TotalSeconds / (double)spawner.m_spawnInterval)); - if (num2 > 0) - { - m_nview.GetZDO().Set(stableHashCode, currentTime.Ticks); - } - for (int i = 0; i < num2; i++) - { - if (UnityEngine.Random.Range(0f, 100f) > spawner.m_spawnChance) - { - continue; - } - if ((!string.IsNullOrEmpty(spawner.m_requiredGlobalKey) && !ZoneSystem.instance.GetGlobalKey(spawner.m_requiredGlobalKey)) || (spawner.m_requiredEnvironments.Count > 0 && !EnvMan.instance.IsEnvironment(spawner.m_requiredEnvironments)) || (!spawner.m_spawnAtDay && EnvMan.instance.IsDay()) || (!spawner.m_spawnAtNight && EnvMan.instance.IsNight()) || GetNrOfInstances(spawner.m_prefab, Vector3.zero, 0f, eventSpawners) >= spawner.m_maxSpawned) - { - break; - } - if (!FindBaseSpawnPoint(spawner, m_nearPlayers, out var spawnCenter, out var _) || (spawner.m_spawnDistance > 0f && HaveInstanceInRange(spawner.m_prefab, spawnCenter, spawner.m_spawnDistance))) - { - continue; - } - int num3 = UnityEngine.Random.Range(spawner.m_groupSizeMin, spawner.m_groupSizeMax + 1); - float num4 = ((num3 > 1) ? spawner.m_groupRadius : 0f); - int num5 = 0; - for (int j = 0; j < num3 * 2; j++) - { - Vector2 insideUnitCircle = UnityEngine.Random.insideUnitCircle; - Vector3 spawnPoint = spawnCenter + new Vector3(insideUnitCircle.x, 0f, insideUnitCircle.y) * num4; - if (IsSpawnPointGood(spawner, ref spawnPoint)) - { - Spawn(spawner, spawnPoint + Vector3.up * spawner.m_groundOffset, eventSpawners); - num5++; - if (num5 >= num3) - { - break; - } - } - } - ZLog.Log("Spawned " + spawner.m_prefab.name + " x " + num5); - } - } - } - - private void Spawn(SpawnData critter, Vector3 spawnPoint, bool eventSpawner) - { - GameObject gameObject = UnityEngine.Object.Instantiate(critter.m_prefab, spawnPoint, Quaternion.identity); - BaseAI component = gameObject.GetComponent<BaseAI>(); - if (!(component != null)) - { - return; - } - if (critter.m_huntPlayer) - { - component.SetHuntPlayer(hunt: true); - } - if (critter.m_maxLevel > 1 && (critter.m_levelUpMinCenterDistance <= 0f || spawnPoint.magnitude > critter.m_levelUpMinCenterDistance)) - { - Character component2 = gameObject.GetComponent<Character>(); - if ((bool)component2) - { - int i; - for (i = critter.m_minLevel; i < critter.m_maxLevel; i++) - { - if (!(UnityEngine.Random.Range(0f, 100f) <= m_levelupChance)) - { - break; - } - } - if (i > 1) - { - component2.SetLevel(i); - } - } - } - MonsterAI monsterAI = component as MonsterAI; - if ((bool)monsterAI) - { - if (!critter.m_spawnAtDay) - { - monsterAI.SetDespawnInDay(despawn: true); - } - if (eventSpawner) - { - monsterAI.SetEventCreature(despawn: true); - } - } - } - - private bool IsSpawnPointGood(SpawnData spawn, ref Vector3 spawnPoint) - { - ZoneSystem.instance.GetGroundData(ref spawnPoint, out var normal, out var biome, out var biomeArea, out var hmap); - if ((spawn.m_biome & biome) == 0) - { - return false; - } - if ((spawn.m_biomeArea & biomeArea) == 0) - { - return false; - } - if (ZoneSystem.instance.IsBlocked(spawnPoint)) - { - return false; - } - float num = spawnPoint.y - ZoneSystem.instance.m_waterLevel; - if (num < spawn.m_minAltitude || num > spawn.m_maxAltitude) - { - return false; - } - float num2 = Mathf.Cos((float)Math.PI / 180f * spawn.m_maxTilt); - float num3 = Mathf.Cos((float)Math.PI / 180f * spawn.m_minTilt); - if (normal.y < num2 || normal.y > num3) - { - return false; - } - float range = ((spawn.m_spawnRadiusMin > 0f) ? spawn.m_spawnRadiusMin : 40f); - if (Player.IsPlayerInRange(spawnPoint, range)) - { - return false; - } - if ((bool)EffectArea.IsPointInsideArea(spawnPoint, EffectArea.Type.PlayerBase)) - { - return false; - } - if (!spawn.m_inForest || !spawn.m_outsideForest) - { - bool flag = WorldGenerator.InForest(spawnPoint); - if (!spawn.m_inForest && flag) - { - return false; - } - if (!spawn.m_outsideForest && !flag) - { - return false; - } - } - if (spawn.m_minOceanDepth != spawn.m_maxOceanDepth && hmap != null) - { - float oceanDepth = hmap.GetOceanDepth(spawnPoint); - if (oceanDepth < spawn.m_minOceanDepth || oceanDepth > spawn.m_maxOceanDepth) - { - return false; - } - } - return true; - } - - private bool FindBaseSpawnPoint(SpawnData spawn, List<Player> allPlayers, out Vector3 spawnCenter, out Player targetPlayer) - { - float min = ((spawn.m_spawnRadiusMin > 0f) ? spawn.m_spawnRadiusMin : 40f); - float max = ((spawn.m_spawnRadiusMax > 0f) ? spawn.m_spawnRadiusMax : 80f); - for (int i = 0; i < 20; i++) - { - Player player = allPlayers[UnityEngine.Random.Range(0, allPlayers.Count)]; - Vector3 vector = Quaternion.Euler(0f, UnityEngine.Random.Range(0, 360), 0f) * Vector3.forward; - Vector3 spawnPoint = player.transform.position + vector * UnityEngine.Random.Range(min, max); - if (IsSpawnPointGood(spawn, ref spawnPoint)) - { - spawnCenter = spawnPoint; - targetPlayer = player; - return true; - } - } - spawnCenter = Vector3.zero; - targetPlayer = null; - return false; - } - - private int GetNrOfInstances(string prefabName) - { - List<Character> allCharacters = Character.GetAllCharacters(); - int num = 0; - foreach (Character item in allCharacters) - { - if (item.gameObject.name.StartsWith(prefabName) && InsideZone(item.transform.position)) - { - num++; - } - } - return num; - } - - private void GetPlayersInZone(List<Player> players) - { - foreach (Player allPlayer in Player.GetAllPlayers()) - { - if (InsideZone(allPlayer.transform.position)) - { - players.Add(allPlayer); - } - } - } - - private void GetPlayersNearZone(List<Player> players, float marginDistance) - { - foreach (Player allPlayer in Player.GetAllPlayers()) - { - if (InsideZone(allPlayer.transform.position, marginDistance)) - { - players.Add(allPlayer); - } - } - } - - private bool IsPlayerTooClose(List<Player> players, Vector3 point, float minDistance) - { - foreach (Player player in players) - { - if (Vector3.Distance(player.transform.position, point) < minDistance) - { - return true; - } - } - return false; - } - - private bool InPlayerRange(List<Player> players, Vector3 point, float minDistance, float maxDistance) - { - bool result = false; - foreach (Player player in players) - { - float num = Utils.DistanceXZ(player.transform.position, point); - if (num < minDistance) - { - return false; - } - if (num < maxDistance) - { - result = true; - } - } - return result; - } - - private static bool HaveInstanceInRange(GameObject prefab, Vector3 centerPoint, float minDistance) - { - string value = prefab.name; - if (prefab.GetComponent<BaseAI>() != null) - { - foreach (BaseAI allInstance in BaseAI.GetAllInstances()) - { - if (allInstance.gameObject.name.StartsWith(value) && Utils.DistanceXZ(allInstance.transform.position, centerPoint) < minDistance) - { - return true; - } - } - return false; - } - GameObject[] array = GameObject.FindGameObjectsWithTag("spawned"); - foreach (GameObject gameObject in array) - { - if (gameObject.gameObject.name.StartsWith(value) && Utils.DistanceXZ(gameObject.transform.position, centerPoint) < minDistance) - { - return true; - } - } - return false; - } - - public static int GetNrOfInstances(GameObject prefab) - { - return GetNrOfInstances(prefab, Vector3.zero, 0f); - } - - public static int GetNrOfInstances(GameObject prefab, Vector3 center, float maxRange, bool eventCreaturesOnly = false, bool procreationOnly = false) - { - string text = prefab.name + "(Clone)"; - if (prefab.GetComponent<BaseAI>() != null) - { - List<BaseAI> allInstances = BaseAI.GetAllInstances(); - int num = 0; - { - foreach (BaseAI item in allInstances) - { - if (item.gameObject.name != text || (maxRange > 0f && Vector3.Distance(center, item.transform.position) > maxRange)) - { - continue; - } - if (eventCreaturesOnly) - { - MonsterAI monsterAI = item as MonsterAI; - if ((bool)monsterAI && !monsterAI.IsEventCreature()) - { - continue; - } - } - if (procreationOnly) - { - Procreation component = item.GetComponent<Procreation>(); - if ((bool)component && !component.ReadyForProcreation()) - { - continue; - } - } - num++; - } - return num; - } - } - GameObject[] array = GameObject.FindGameObjectsWithTag("spawned"); - int num2 = 0; - GameObject[] array2 = array; - foreach (GameObject gameObject in array2) - { - if (gameObject.name.StartsWith(text) && (!(maxRange > 0f) || !(Vector3.Distance(center, gameObject.transform.position) > maxRange))) - { - num2++; - } - } - return num2; - } - - public void GetSpawners(Heightmap.Biome biome, List<SpawnData> spawners) - { - foreach (SpawnData spawner in m_spawners) - { - if ((spawner.m_biome & biome) != 0 || spawner.m_biome == biome) - { - spawners.Add(spawner); - } - } - } - - private bool InsideZone(Vector3 point, float extra = 0f) - { - float num = ZoneSystem.instance.m_zoneSize * 0.5f + extra; - Vector3 position = base.transform.position; - if (point.x < position.x - num || point.x > position.x + num) - { - return false; - } - if (point.z < position.z - num || point.z > position.z + num) - { - return false; - } - return true; - } - - private bool HaveGlobalKeys(SpawnData ev) - { - if (!string.IsNullOrEmpty(ev.m_requiredGlobalKey)) - { - return ZoneSystem.instance.GetGlobalKey(ev.m_requiredGlobalKey); - } - return true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/StateController.cs b/Valheim_v202102/Valheim/assembly_valheim/StateController.cs deleted file mode 100644 index 1e97056..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/StateController.cs +++ /dev/null @@ -1,53 +0,0 @@ -using UnityEngine; - -public class StateController : StateMachineBehaviour -{ - public string m_effectJoint = ""; - - public EffectList m_enterEffect = new EffectList(); - - public bool m_enterDisableChildren; - - public bool m_enterEnableChildren; - - public GameObject[] m_enterDisable = new GameObject[0]; - - public GameObject[] m_enterEnable = new GameObject[0]; - - private Transform m_effectJoinT; - - public override void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) - { - if (m_enterEffect.HasEffects()) - { - m_enterEffect.Create(GetEffectPos(animator), animator.transform.rotation); - } - if (m_enterDisableChildren) - { - for (int i = 0; i < animator.transform.childCount; i++) - { - animator.transform.GetChild(i).gameObject.SetActive(value: false); - } - } - if (m_enterEnableChildren) - { - for (int j = 0; j < animator.transform.childCount; j++) - { - animator.transform.GetChild(j).gameObject.SetActive(value: true); - } - } - } - - private Vector3 GetEffectPos(Animator animator) - { - if (m_effectJoint.Length == 0) - { - return animator.transform.position; - } - if (m_effectJoinT == null) - { - m_effectJoinT = Utils.FindChild(animator.transform, m_effectJoint); - } - return m_effectJoinT.position; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/StaticPhysics.cs b/Valheim_v202102/Valheim/assembly_valheim/StaticPhysics.cs deleted file mode 100644 index 47a4685..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/StaticPhysics.cs +++ /dev/null @@ -1,122 +0,0 @@ -using UnityEngine; - -public class StaticPhysics : SlowUpdate -{ - public bool m_pushUp = true; - - public bool m_fall = true; - - public bool m_checkSolids; - - public float m_fallCheckRadius; - - private ZNetView m_nview; - - private const float m_fallSpeed = 4f; - - private const float m_fallStep = 0.05f; - - private float m_createTime; - - private bool m_falling; - - public override void Awake() - { - base.Awake(); - m_nview = GetComponent<ZNetView>(); - m_createTime = Time.time; - } - - private bool ShouldUpdate() - { - return Time.time - m_createTime > 20f; - } - - public override void SUpdate() - { - if (ShouldUpdate() && !ZNetScene.instance.OutsideActiveArea(base.transform.position) && !m_falling) - { - if (m_fall) - { - CheckFall(); - } - if (m_pushUp) - { - PushUp(); - } - } - } - - private void CheckFall() - { - float fallHeight = GetFallHeight(); - if (base.transform.position.y > fallHeight + 0.05f) - { - Fall(); - } - } - - private float GetFallHeight() - { - if (m_checkSolids) - { - if (ZoneSystem.instance.GetSolidHeight(base.transform.position, m_fallCheckRadius, out var height, base.transform)) - { - return height; - } - return base.transform.position.y; - } - if (ZoneSystem.instance.GetGroundHeight(base.transform.position, out var height2)) - { - return height2; - } - return base.transform.position.y; - } - - private void Fall() - { - m_falling = true; - base.gameObject.isStatic = false; - InvokeRepeating("FallUpdate", 0.05f, 0.05f); - } - - private void FallUpdate() - { - float fallHeight = GetFallHeight(); - Vector3 position = base.transform.position; - position.y -= 0.2f; - if (position.y <= fallHeight) - { - position.y = fallHeight; - StopFalling(); - } - base.transform.position = position; - if (m_nview.IsValid() && m_nview.IsOwner()) - { - m_nview.GetZDO().SetPosition(base.transform.position); - } - } - - private void StopFalling() - { - base.gameObject.isStatic = true; - m_falling = false; - CancelInvoke("FallUpdate"); - } - - private void PushUp() - { - if (ZoneSystem.instance.GetGroundHeight(base.transform.position, out var height) && base.transform.position.y < height - 0.05f) - { - base.gameObject.isStatic = false; - Vector3 position = base.transform.position; - position.y = height; - base.transform.position = position; - base.gameObject.isStatic = true; - if (m_nview.IsValid() && m_nview.IsOwner()) - { - m_nview.GetZDO().SetPosition(base.transform.position); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/StaticTarget.cs b/Valheim_v202102/Valheim/assembly_valheim/StaticTarget.cs deleted file mode 100644 index a538dc5..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/StaticTarget.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class StaticTarget : MonoBehaviour -{ - public bool m_primaryTarget; - - public bool m_randomTarget = true; - - private List<Collider> m_colliders; - - private Vector3 m_center; - - private bool m_haveCenter; - - public virtual bool IsValidMonsterTarget() - { - return true; - } - - public Vector3 GetCenter() - { - if (!m_haveCenter) - { - List<Collider> allColliders = GetAllColliders(); - m_center = Vector3.zero; - foreach (Collider item in allColliders) - { - if ((bool)item) - { - m_center += item.bounds.center; - } - } - m_center /= (float)m_colliders.Count; - } - return m_center; - } - - public List<Collider> GetAllColliders() - { - if (m_colliders == null) - { - Collider[] componentsInChildren = GetComponentsInChildren<Collider>(); - m_colliders = new List<Collider>(); - m_colliders.Capacity = componentsInChildren.Length; - Collider[] array = componentsInChildren; - foreach (Collider collider in array) - { - if (collider.enabled && collider.gameObject.activeInHierarchy && !collider.isTrigger) - { - m_colliders.Add(collider); - } - } - } - return m_colliders; - } - - public Vector3 FindClosestPoint(Vector3 point) - { - List<Collider> allColliders = GetAllColliders(); - if (allColliders.Count == 0) - { - return base.transform.position; - } - float num = 9999999f; - Vector3 result = Vector3.zero; - foreach (Collider item in allColliders) - { - MeshCollider meshCollider = item as MeshCollider; - Vector3 vector = (((bool)meshCollider && !meshCollider.convex) ? item.ClosestPointOnBounds(point) : item.ClosestPoint(point)); - float num2 = Vector3.Distance(point, vector); - if (num2 < num) - { - result = vector; - num = num2; - } - } - return result; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/StationExtension.cs b/Valheim_v202102/Valheim/assembly_valheim/StationExtension.cs deleted file mode 100644 index 321c548..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/StationExtension.cs +++ /dev/null @@ -1,158 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class StationExtension : MonoBehaviour, Hoverable -{ - public CraftingStation m_craftingStation; - - public float m_maxStationDistance = 5f; - - public GameObject m_connectionPrefab; - - private GameObject m_connection; - - private Piece m_piece; - - private Collider[] m_colliders; - - private static List<StationExtension> m_allExtensions = new List<StationExtension>(); - - private void Awake() - { - if (GetComponent<ZNetView>().GetZDO() != null) - { - m_piece = GetComponent<Piece>(); - m_allExtensions.Add(this); - } - } - - private void OnDestroy() - { - if ((bool)m_connection) - { - Object.Destroy(m_connection); - m_connection = null; - } - m_allExtensions.Remove(this); - } - - public string GetHoverText() - { - PokeEffect(); - return Localization.instance.Localize(m_piece.m_name); - } - - public string GetHoverName() - { - return Localization.instance.Localize(m_piece.m_name); - } - - public string GetExtensionName() - { - return m_piece.m_name; - } - - public static void FindExtensions(CraftingStation station, Vector3 pos, List<StationExtension> extensions) - { - foreach (StationExtension allExtension in m_allExtensions) - { - if (Vector3.Distance(allExtension.transform.position, pos) < allExtension.m_maxStationDistance && allExtension.m_craftingStation.m_name == station.m_name && !ExtensionInList(extensions, allExtension)) - { - extensions.Add(allExtension); - } - } - } - - private static bool ExtensionInList(List<StationExtension> extensions, StationExtension extension) - { - foreach (StationExtension extension2 in extensions) - { - if (extension2.GetExtensionName() == extension.GetExtensionName()) - { - return true; - } - } - return false; - } - - public bool OtherExtensionInRange(float radius) - { - foreach (StationExtension allExtension in m_allExtensions) - { - if (!(allExtension == this) && Vector3.Distance(allExtension.transform.position, base.transform.position) < radius) - { - return true; - } - } - return false; - } - - public List<CraftingStation> FindStationsInRange(Vector3 center) - { - List<CraftingStation> list = new List<CraftingStation>(); - CraftingStation.FindStationsInRange(m_craftingStation.m_name, center, m_maxStationDistance, list); - return list; - } - - public CraftingStation FindClosestStationInRange(Vector3 center) - { - return CraftingStation.FindClosestStationInRange(m_craftingStation.m_name, center, m_maxStationDistance); - } - - private void PokeEffect() - { - CraftingStation craftingStation = FindClosestStationInRange(base.transform.position); - if ((bool)craftingStation) - { - StartConnectionEffect(craftingStation); - } - } - - public void StartConnectionEffect(CraftingStation station) - { - StartConnectionEffect(station.GetConnectionEffectPoint()); - } - - public void StartConnectionEffect(Vector3 targetPos) - { - Vector3 center = GetCenter(); - if (m_connection == null) - { - m_connection = Object.Instantiate(m_connectionPrefab, center, Quaternion.identity); - } - Vector3 vector = targetPos - center; - Quaternion rotation = Quaternion.LookRotation(vector.normalized); - m_connection.transform.position = center; - m_connection.transform.rotation = rotation; - m_connection.transform.localScale = new Vector3(1f, 1f, vector.magnitude); - CancelInvoke("StopConnectionEffect"); - Invoke("StopConnectionEffect", 1f); - } - - public void StopConnectionEffect() - { - if ((bool)m_connection) - { - Object.Destroy(m_connection); - m_connection = null; - } - } - - private Vector3 GetCenter() - { - if (m_colliders == null) - { - m_colliders = GetComponentsInChildren<Collider>(); - } - Vector3 position = base.transform.position; - Collider[] colliders = m_colliders; - foreach (Collider collider in colliders) - { - if (collider.bounds.max.y > position.y) - { - position.y = collider.bounds.max.y; - } - } - return position; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/StatusEffect.cs b/Valheim_v202102/Valheim/assembly_valheim/StatusEffect.cs deleted file mode 100644 index 40ba74b..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/StatusEffect.cs +++ /dev/null @@ -1,268 +0,0 @@ -using System; -using UnityEngine; - -public class StatusEffect : ScriptableObject -{ - public enum StatusAttribute - { - None = 0, - ColdResistance = 1, - DoubleImpactDamage = 2, - SailingPower = 4 - } - - [Header("__Common__")] - public string m_name = ""; - - public string m_category = ""; - - public Sprite m_icon; - - public bool m_flashIcon; - - public bool m_cooldownIcon; - - [TextArea] - public string m_tooltip = ""; - - [BitMask(typeof(StatusAttribute))] - public StatusAttribute m_attributes; - - public MessageHud.MessageType m_startMessageType = MessageHud.MessageType.TopLeft; - - public string m_startMessage = ""; - - public MessageHud.MessageType m_stopMessageType = MessageHud.MessageType.TopLeft; - - public string m_stopMessage = ""; - - public MessageHud.MessageType m_repeatMessageType = MessageHud.MessageType.TopLeft; - - public string m_repeatMessage = ""; - - public float m_repeatInterval; - - public float m_ttl; - - public EffectList m_startEffects = new EffectList(); - - public EffectList m_stopEffects = new EffectList(); - - [Header("__Guardian power__")] - public float m_cooldown; - - public string m_activationAnimation = "gpower"; - - [NonSerialized] - public bool m_isNew = true; - - private float m_msgTimer; - - protected Character m_character; - - protected float m_time; - - protected GameObject[] m_startEffectInstances; - - public StatusEffect Clone() - { - return MemberwiseClone() as StatusEffect; - } - - public virtual bool CanAdd(Character character) - { - return true; - } - - public virtual void Setup(Character character) - { - m_character = character; - if (!string.IsNullOrEmpty(m_startMessage)) - { - m_character.Message(m_startMessageType, m_startMessage); - } - TriggerStartEffects(); - } - - public virtual void SetAttacker(Character attacker) - { - } - - public virtual string GetTooltipString() - { - return m_tooltip; - } - - private void OnApplicationQuit() - { - m_startEffectInstances = null; - } - - public virtual void OnDestroy() - { - RemoveStartEffects(); - } - - protected void TriggerStartEffects() - { - RemoveStartEffects(); - float radius = m_character.GetRadius(); - m_startEffectInstances = m_startEffects.Create(m_character.GetCenterPoint(), m_character.transform.rotation, m_character.transform, radius * 2f); - } - - private void RemoveStartEffects() - { - if (m_startEffectInstances == null || !(ZNetScene.instance != null)) - { - return; - } - GameObject[] startEffectInstances = m_startEffectInstances; - foreach (GameObject gameObject in startEffectInstances) - { - if ((bool)gameObject) - { - ZNetView component = gameObject.GetComponent<ZNetView>(); - if (component.IsValid()) - { - component.ClaimOwnership(); - component.Destroy(); - } - } - } - m_startEffectInstances = null; - } - - public virtual void Stop() - { - RemoveStartEffects(); - m_stopEffects.Create(m_character.transform.position, m_character.transform.rotation); - if (!string.IsNullOrEmpty(m_stopMessage)) - { - m_character.Message(m_stopMessageType, m_stopMessage); - } - } - - public virtual void UpdateStatusEffect(float dt) - { - m_time += dt; - if (m_repeatInterval > 0f && !string.IsNullOrEmpty(m_repeatMessage)) - { - m_msgTimer += dt; - if (m_msgTimer > m_repeatInterval) - { - m_msgTimer = 0f; - m_character.Message(m_repeatMessageType, m_repeatMessage); - } - } - } - - public virtual bool IsDone() - { - if (m_ttl > 0f && m_time > m_ttl) - { - return true; - } - return false; - } - - public virtual void ResetTime() - { - m_time = 0f; - } - - public float GetDuration() - { - return m_time; - } - - public float GetRemaningTime() - { - return m_ttl - m_time; - } - - public virtual string GetIconText() - { - if (m_ttl > 0f) - { - return GetTimeString(m_ttl - GetDuration()); - } - return ""; - } - - public static string GetTimeString(float time, bool sufix = false, bool alwaysShowMinutes = false) - { - if (time > 0f) - { - int num = Mathf.CeilToInt(time); - int num2 = (int)((float)num / 60f); - int num3 = Mathf.Max(0, num - num2 * 60); - if (sufix) - { - if (num2 > 0 || alwaysShowMinutes) - { - return num2 + "m:" + num3.ToString("00") + "s"; - } - return num3 + "s"; - } - if (num2 > 0 || alwaysShowMinutes) - { - return num2 + ":" + num3.ToString("00"); - } - return num3.ToString(); - } - return ""; - } - - public virtual void ModifyAttack(Skills.SkillType skill, ref HitData hitData) - { - } - - public virtual void ModifyHealthRegen(ref float regenMultiplier) - { - } - - public virtual void ModifyStaminaRegen(ref float staminaRegen) - { - } - - public virtual void ModifyDamageMods(ref HitData.DamageModifiers modifiers) - { - } - - public virtual void ModifyRaiseSkill(Skills.SkillType skill, ref float value) - { - } - - public virtual void ModifySpeed(ref float speed) - { - } - - public virtual void ModifyNoise(float baseNoise, ref float noise) - { - } - - public virtual void ModifyStealth(float baseStealth, ref float stealth) - { - } - - public virtual void ModifyMaxCarryWeight(float baseLimit, ref float limit) - { - } - - public virtual void ModifyRunStaminaDrain(float baseDrain, ref float drain) - { - } - - public virtual void ModifyJumpStaminaUsage(float baseStaminaUse, ref float staminaUse) - { - } - - public virtual void OnDamaged(HitData hit, Character attacker) - { - } - - public bool HaveAttribute(StatusAttribute value) - { - return (m_attributes & value) != 0; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/StealthSystem.cs b/Valheim_v202102/Valheim/assembly_valheim/StealthSystem.cs deleted file mode 100644 index 774ca07..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/StealthSystem.cs +++ /dev/null @@ -1,83 +0,0 @@ -using UnityEngine; - -public class StealthSystem : MonoBehaviour -{ - private static StealthSystem m_instance; - - public LayerMask m_shadowTestMask; - - public float m_minLightLevel = 0.2f; - - public float m_maxLightLevel = 1.6f; - - private Light[] m_allLights; - - private float m_lastLightListUpdate; - - private const float m_lightUpdateInterval = 1f; - - public static StealthSystem instance => m_instance; - - private void Awake() - { - m_instance = this; - } - - private void OnDestroy() - { - m_instance = null; - } - - public float GetLightFactor(Vector3 point) - { - float lightLevel = GetLightLevel(point); - return Utils.LerpStep(m_minLightLevel, m_maxLightLevel, lightLevel); - } - - public float GetLightLevel(Vector3 point) - { - if (Time.time - m_lastLightListUpdate > 1f) - { - m_lastLightListUpdate = Time.time; - m_allLights = Object.FindObjectsOfType<Light>(); - } - float num = RenderSettings.ambientIntensity * RenderSettings.ambientLight.grayscale; - Light[] allLights = m_allLights; - foreach (Light light in allLights) - { - if (light == null) - { - continue; - } - if (light.type == LightType.Directional) - { - float num2 = 1f; - if (light.shadows != 0 && (Physics.Raycast(point - light.transform.forward * 1000f, light.transform.forward, 1000f, m_shadowTestMask) || Physics.Raycast(point, -light.transform.forward, 1000f, m_shadowTestMask))) - { - num2 = 1f - light.shadowStrength; - } - float num3 = light.intensity * light.color.grayscale * num2; - num += num3; - continue; - } - float num4 = Vector3.Distance(light.transform.position, point); - if (num4 > light.range) - { - continue; - } - float num5 = 1f; - if (light.shadows != 0) - { - Vector3 vector = point - light.transform.position; - if (Physics.Raycast(light.transform.position, vector.normalized, vector.magnitude, m_shadowTestMask) || Physics.Raycast(point, -vector.normalized, vector.magnitude, m_shadowTestMask)) - { - num5 = 1f - light.shadowStrength; - } - } - float num6 = 1f - num4 / light.range; - float num7 = light.intensity * light.color.grayscale * num6 * num5; - num += num7; - } - return num; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/SteamManager.cs b/Valheim_v202102/Valheim/assembly_valheim/SteamManager.cs deleted file mode 100644 index 7866906..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/SteamManager.cs +++ /dev/null @@ -1,166 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using System.Text; -using Steamworks; -using UnityEngine; - -[DisallowMultipleComponent] -public class SteamManager : MonoBehaviour -{ - public static uint[] ACCEPTED_APPIDs = new uint[2] { 1223920u, 892970u }; - - public static uint APP_ID = 0u; - - private static int m_serverPort = 2456; - - private static SteamManager s_instance; - - private static bool s_EverInialized; - - private bool m_bInitialized; - - private SteamAPIWarningMessageHook_t m_SteamAPIWarningMessageHook; - - public static SteamManager instance => s_instance; - - public static bool Initialized - { - get - { - if (s_instance != null) - { - return s_instance.m_bInitialized; - } - return false; - } - } - - public static bool Initialize() - { - if (s_instance == null) - { - new GameObject("SteamManager").AddComponent<SteamManager>(); - } - return Initialized; - } - - private static void SteamAPIDebugTextHook(int nSeverity, StringBuilder pchDebugText) - { - Debug.LogWarning(pchDebugText); - } - - public static void SetServerPort(int port) - { - m_serverPort = port; - } - - private uint LoadAPPID() - { - string environmentVariable = Environment.GetEnvironmentVariable("SteamAppId"); - if (environmentVariable != null) - { - ZLog.Log("Using environment steamid " + environmentVariable); - return uint.Parse(environmentVariable); - } - try - { - string s = File.ReadAllText("steam_appid.txt"); - ZLog.Log("Using steam_appid.txt"); - return uint.Parse(s); - } - catch - { - } - ZLog.LogWarning("Failed to find APPID"); - return 0u; - } - - private void Awake() - { - if (s_instance != null) - { - UnityEngine.Object.Destroy(base.gameObject); - return; - } - s_instance = this; - APP_ID = LoadAPPID(); - ZLog.Log("Using steam APPID:" + APP_ID); - if (!ACCEPTED_APPIDs.Contains(APP_ID)) - { - ZLog.Log("Invalid APPID"); - Application.Quit(); - return; - } - if (s_EverInialized) - { - throw new Exception("Tried to Initialize the SteamAPI twice in one session!"); - } - UnityEngine.Object.DontDestroyOnLoad(base.gameObject); - if (!Packsize.Test()) - { - Debug.LogError("[Steamworks.NET] Packsize Test returned false, the wrong version of Steamworks.NET is being run in this platform.", this); - } - if (!DllCheck.Test()) - { - Debug.LogError("[Steamworks.NET] DllCheck Test returned false, One or more of the Steamworks binaries seems to be the wrong version.", this); - } - try - { - if (SteamAPI.RestartAppIfNecessary((AppId_t)APP_ID)) - { - Application.Quit(); - return; - } - } - catch (DllNotFoundException ex) - { - Debug.LogError("[Steamworks.NET] Could not load [lib]steam_api.dll/so/dylib. It's likely not in the correct location. Refer to the README for more details.\n" + ex, this); - Application.Quit(); - return; - } - m_bInitialized = SteamAPI.Init(); - if (!m_bInitialized) - { - Debug.LogError("[Steamworks.NET] SteamAPI_Init() failed. Refer to Valve's documentation or the comment above this line for more information.", this); - } - else - { - s_EverInialized = true; - } - } - - private void OnEnable() - { - if (s_instance == null) - { - s_instance = this; - } - if (m_bInitialized && m_SteamAPIWarningMessageHook == null) - { - m_SteamAPIWarningMessageHook = SteamAPIDebugTextHook; - SteamClient.SetWarningMessageHook(m_SteamAPIWarningMessageHook); - } - } - - private void OnDestroy() - { - ZLog.Log("Steam manager on destroy"); - if (!(s_instance != this)) - { - s_instance = null; - if (m_bInitialized) - { - SteamAPI.Shutdown(); - } - } - } - - private void Update() - { - if (m_bInitialized) - { - SteamAPI.RunCallbacks(); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/StoreGui.cs b/Valheim_v202102/Valheim/assembly_valheim/StoreGui.cs deleted file mode 100644 index 8ea6962..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/StoreGui.cs +++ /dev/null @@ -1,354 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class StoreGui : MonoBehaviour -{ - private static StoreGui m_instance; - - public GameObject m_rootPanel; - - public Button m_buyButton; - - public Button m_sellButton; - - public RectTransform m_listRoot; - - public GameObject m_listElement; - - public Scrollbar m_listScroll; - - public ScrollRectEnsureVisible m_itemEnsureVisible; - - public Text m_coinText; - - public EffectList m_buyEffects = new EffectList(); - - public EffectList m_sellEffects = new EffectList(); - - public float m_hideDistance = 5f; - - public float m_itemSpacing = 64f; - - public ItemDrop m_coinPrefab; - - private List<GameObject> m_itemList = new List<GameObject>(); - - private Trader.TradeItem m_selectedItem; - - private Trader m_trader; - - private float m_itemlistBaseSize; - - private int m_hiddenFrames; - - private List<ItemDrop.ItemData> m_tempItems = new List<ItemDrop.ItemData>(); - - public static StoreGui instance => m_instance; - - private void Awake() - { - m_instance = this; - m_rootPanel.SetActive(value: false); - m_itemlistBaseSize = m_listRoot.rect.height; - } - - private void OnDestroy() - { - if (m_instance == this) - { - m_instance = null; - } - } - - private void Update() - { - if (!m_rootPanel.activeSelf) - { - m_hiddenFrames++; - return; - } - m_hiddenFrames = 0; - if (!m_trader) - { - Hide(); - return; - } - Player localPlayer = Player.m_localPlayer; - if (localPlayer == null || localPlayer.IsDead() || localPlayer.InCutscene()) - { - Hide(); - return; - } - if (Vector3.Distance(m_trader.transform.position, Player.m_localPlayer.transform.position) > m_hideDistance) - { - Hide(); - return; - } - if (InventoryGui.IsVisible() || Minimap.IsOpen()) - { - Hide(); - return; - } - if ((Chat.instance == null || !Chat.instance.HasFocus()) && !Console.IsVisible() && !Menu.IsVisible() && (bool)TextViewer.instance && !TextViewer.instance.IsVisible() && !localPlayer.InCutscene() && (ZInput.GetButtonDown("JoyButtonB") || Input.GetKeyDown(KeyCode.Escape) || ZInput.GetButtonDown("Use"))) - { - ZInput.ResetButtonStatus("JoyButtonB"); - Hide(); - } - UpdateBuyButton(); - UpdateSellButton(); - UpdateRecipeGamepadInput(); - m_coinText.text = GetPlayerCoins().ToString(); - } - - public void Show(Trader trader) - { - if (!(m_trader == trader) || !IsVisible()) - { - m_trader = trader; - m_rootPanel.SetActive(value: true); - FillList(); - } - } - - public void Hide() - { - m_trader = null; - m_rootPanel.SetActive(value: false); - } - - public static bool IsVisible() - { - if ((bool)m_instance) - { - return m_instance.m_hiddenFrames <= 1; - } - return false; - } - - public void OnBuyItem() - { - BuySelectedItem(); - } - - private void BuySelectedItem() - { - if (m_selectedItem != null && CanAfford(m_selectedItem)) - { - int stack = Mathf.Min(m_selectedItem.m_stack, m_selectedItem.m_prefab.m_itemData.m_shared.m_maxStackSize); - int quality = m_selectedItem.m_prefab.m_itemData.m_quality; - int variant = m_selectedItem.m_prefab.m_itemData.m_variant; - if (Player.m_localPlayer.GetInventory().AddItem(m_selectedItem.m_prefab.name, stack, quality, variant, 0L, "") != null) - { - Player.m_localPlayer.GetInventory().RemoveItem(m_coinPrefab.m_itemData.m_shared.m_name, m_selectedItem.m_price); - m_trader.OnBought(m_selectedItem); - m_buyEffects.Create(base.transform.position, Quaternion.identity); - Player.m_localPlayer.ShowPickupMessage(m_selectedItem.m_prefab.m_itemData, m_selectedItem.m_prefab.m_itemData.m_stack); - FillList(); - GoogleAnalyticsV4.instance.LogEvent("Game", "BoughtItem", m_selectedItem.m_prefab.name, 0L); - } - } - } - - public void OnSellItem() - { - SellItem(); - } - - private void SellItem() - { - ItemDrop.ItemData sellableItem = GetSellableItem(); - if (sellableItem != null) - { - int stack = sellableItem.m_shared.m_value * sellableItem.m_stack; - Player.m_localPlayer.GetInventory().RemoveItem(sellableItem); - Player.m_localPlayer.GetInventory().AddItem(m_coinPrefab.gameObject.name, stack, m_coinPrefab.m_itemData.m_quality, m_coinPrefab.m_itemData.m_variant, 0L, ""); - string text = ""; - text = ((sellableItem.m_stack <= 1) ? sellableItem.m_shared.m_name : (sellableItem.m_stack + "x" + sellableItem.m_shared.m_name)); - m_sellEffects.Create(base.transform.position, Quaternion.identity); - Player.m_localPlayer.Message(MessageHud.MessageType.TopLeft, Localization.instance.Localize("$msg_sold", text, stack.ToString()), 0, sellableItem.m_shared.m_icons[0]); - m_trader.OnSold(); - FillList(); - GoogleAnalyticsV4.instance.LogEvent("Game", "SoldItem", text, 0L); - } - } - - private int GetPlayerCoins() - { - return Player.m_localPlayer.GetInventory().CountItems(m_coinPrefab.m_itemData.m_shared.m_name); - } - - private bool CanAfford(Trader.TradeItem item) - { - int playerCoins = GetPlayerCoins(); - return item.m_price <= playerCoins; - } - - private void FillList() - { - int playerCoins = GetPlayerCoins(); - int num = GetSelectedItemIndex(); - List<Trader.TradeItem> items = m_trader.m_items; - foreach (GameObject item in m_itemList) - { - Object.Destroy(item); - } - m_itemList.Clear(); - float b = (float)items.Count * m_itemSpacing; - b = Mathf.Max(m_itemlistBaseSize, b); - m_listRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, b); - for (int i = 0; i < items.Count; i++) - { - Trader.TradeItem tradeItem = items[i]; - GameObject element = Object.Instantiate(m_listElement, m_listRoot); - element.SetActive(value: true); - (element.transform as RectTransform).anchoredPosition = new Vector2(0f, (float)i * (0f - m_itemSpacing)); - bool flag = tradeItem.m_price <= playerCoins; - Image component = element.transform.Find("icon").GetComponent<Image>(); - component.sprite = tradeItem.m_prefab.m_itemData.m_shared.m_icons[0]; - component.color = (flag ? Color.white : new Color(1f, 0f, 1f, 0f)); - string text = Localization.instance.Localize(tradeItem.m_prefab.m_itemData.m_shared.m_name); - if (tradeItem.m_stack > 1) - { - text = text + " x" + tradeItem.m_stack; - } - Text component2 = element.transform.Find("name").GetComponent<Text>(); - component2.text = text; - component2.color = (flag ? Color.white : Color.grey); - UITooltip component3 = element.GetComponent<UITooltip>(); - component3.m_topic = tradeItem.m_prefab.m_itemData.m_shared.m_name; - component3.m_text = tradeItem.m_prefab.m_itemData.GetTooltip(); - Text component4 = Utils.FindChild(element.transform, "price").GetComponent<Text>(); - component4.text = tradeItem.m_price.ToString(); - if (!flag) - { - component4.color = Color.grey; - } - element.GetComponent<Button>().onClick.AddListener(delegate - { - OnSelectedItem(element); - }); - m_itemList.Add(element); - } - if (num < 0) - { - num = 0; - } - SelectItem(num, center: false); - } - - private void OnSelectedItem(GameObject button) - { - int index = FindSelectedRecipe(button); - SelectItem(index, center: false); - } - - private int FindSelectedRecipe(GameObject button) - { - for (int i = 0; i < m_itemList.Count; i++) - { - if (m_itemList[i] == button) - { - return i; - } - } - return -1; - } - - private void SelectItem(int index, bool center) - { - ZLog.Log("Setting selected recipe " + index); - for (int i = 0; i < m_itemList.Count; i++) - { - bool active = i == index; - m_itemList[i].transform.Find("selected").gameObject.SetActive(active); - } - if (center && index >= 0) - { - m_itemEnsureVisible.CenterOnItem(m_itemList[index].transform as RectTransform); - } - if (index < 0) - { - m_selectedItem = null; - } - else - { - m_selectedItem = m_trader.m_items[index]; - } - } - - private void UpdateSellButton() - { - m_sellButton.interactable = GetSellableItem() != null; - } - - private ItemDrop.ItemData GetSellableItem() - { - m_tempItems.Clear(); - Player.m_localPlayer.GetInventory().GetValuableItems(m_tempItems); - foreach (ItemDrop.ItemData tempItem in m_tempItems) - { - if (tempItem.m_shared.m_name != m_coinPrefab.m_itemData.m_shared.m_name) - { - return tempItem; - } - } - return null; - } - - private int GetSelectedItemIndex() - { - int result = 0; - for (int i = 0; i < m_trader.m_items.Count; i++) - { - if (m_trader.m_items[i] == m_selectedItem) - { - result = i; - } - } - return result; - } - - private void UpdateBuyButton() - { - UITooltip component = m_buyButton.GetComponent<UITooltip>(); - if (m_selectedItem != null) - { - bool flag = CanAfford(m_selectedItem); - bool flag2 = Player.m_localPlayer.GetInventory().HaveEmptySlot(); - m_buyButton.interactable = flag && flag2; - if (!flag) - { - component.m_text = Localization.instance.Localize("$msg_missingrequirement"); - } - else if (!flag2) - { - component.m_text = Localization.instance.Localize("$inventory_full"); - } - else - { - component.m_text = ""; - } - } - else - { - m_buyButton.interactable = false; - component.m_text = ""; - } - } - - private void UpdateRecipeGamepadInput() - { - if (m_itemList.Count > 0) - { - if (ZInput.GetButtonDown("JoyLStickDown")) - { - SelectItem(Mathf.Min(m_itemList.Count - 1, GetSelectedItemIndex() + 1), center: true); - } - if (ZInput.GetButtonDown("JoyLStickUp")) - { - SelectItem(Mathf.Max(0, GetSelectedItemIndex() - 1), center: true); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Switch.cs b/Valheim_v202102/Valheim/assembly_valheim/Switch.cs deleted file mode 100644 index 9b18b0d..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Switch.cs +++ /dev/null @@ -1,56 +0,0 @@ -using UnityEngine; - -public class Switch : MonoBehaviour, Interactable, Hoverable -{ - public delegate bool Callback(Switch caller, Humanoid user, ItemDrop.ItemData item); - - public Callback m_onUse; - - public string m_hoverText = ""; - - public string m_name = ""; - - public float m_holdRepeatInterval = -1f; - - private float m_lastUseTime; - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - if (m_holdRepeatInterval <= 0f) - { - return false; - } - if (Time.time - m_lastUseTime < m_holdRepeatInterval) - { - return false; - } - } - m_lastUseTime = Time.time; - if (m_onUse != null) - { - return m_onUse(this, character, null); - } - return false; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - if (m_onUse != null) - { - return m_onUse(this, user, item); - } - return false; - } - - public string GetHoverText() - { - return Localization.instance.Localize(m_hoverText); - } - - public string GetHoverName() - { - return Localization.instance.Localize(m_name); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Tail.cs b/Valheim_v202102/Valheim/assembly_valheim/Tail.cs deleted file mode 100644 index ab17b28..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Tail.cs +++ /dev/null @@ -1,116 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Tail : MonoBehaviour -{ - private class TailSegment - { - public Transform transform; - - public Vector3 pos; - - public Quaternion rot; - - public float distance; - } - - public List<Transform> m_tailJoints = new List<Transform>(); - - public float m_yMovementDistance = 0.5f; - - public float m_yMovementFreq = 0.5f; - - public float m_yMovementOffset = 0.2f; - - public float m_maxAngle = 80f; - - public float m_gravity = 2f; - - public float m_gravityInWater = 0.1f; - - public bool m_waterSurfaceCheck; - - public bool m_groundCheck; - - public float m_smoothness = 0.1f; - - public float m_tailRadius; - - public Character m_character; - - public Rigidbody m_characterBody; - - public Rigidbody m_tailBody; - - private List<TailSegment> m_positions = new List<TailSegment>(); - - private void Awake() - { - foreach (Transform tailJoint in m_tailJoints) - { - float distance = Vector3.Distance(tailJoint.parent.position, tailJoint.position); - Vector3 position = tailJoint.position; - TailSegment tailSegment = new TailSegment(); - tailSegment.transform = tailJoint; - tailSegment.pos = position; - tailSegment.rot = tailJoint.rotation; - tailSegment.distance = distance; - m_positions.Add(tailSegment); - } - } - - private void LateUpdate() - { - float deltaTime = Time.deltaTime; - if ((bool)m_character) - { - m_character.IsSwiming(); - } - for (int i = 0; i < m_positions.Count; i++) - { - TailSegment tailSegment = m_positions[i]; - if (m_waterSurfaceCheck) - { - float waterLevel = WaterVolume.GetWaterLevel(tailSegment.pos); - if (tailSegment.pos.y + m_tailRadius > waterLevel) - { - tailSegment.pos.y -= m_gravity * deltaTime; - } - else - { - tailSegment.pos.y -= m_gravityInWater * deltaTime; - } - } - else - { - tailSegment.pos.y -= m_gravity * deltaTime; - } - Vector3 vector = tailSegment.transform.parent.position + tailSegment.transform.parent.up * tailSegment.distance * 0.5f; - Vector3 vector2 = Vector3.RotateTowards(target: Vector3.Normalize(vector - tailSegment.pos), current: -tailSegment.transform.parent.up, maxRadiansDelta: (float)Math.PI / 180f * m_maxAngle, maxMagnitudeDelta: 1f); - Vector3 vector3 = vector - vector2 * tailSegment.distance * 0.5f; - if (m_groundCheck) - { - float groundHeight = ZoneSystem.instance.GetGroundHeight(vector3); - if (vector3.y - m_tailRadius < groundHeight) - { - vector3.y = groundHeight + m_tailRadius; - } - } - vector3 = Vector3.Lerp(tailSegment.pos, vector3, m_smoothness); - Vector3 normalized = (vector - vector3).normalized; - Vector3 rhs = Vector3.Cross(Vector3.up, -normalized); - Quaternion b = Quaternion.LookRotation(Vector3.Cross(-normalized, rhs), -normalized); - b = Quaternion.Slerp(tailSegment.rot, b, m_smoothness); - tailSegment.transform.position = vector3; - tailSegment.transform.rotation = b; - tailSegment.pos = vector3; - tailSegment.rot = b; - } - if ((bool)m_tailBody) - { - m_tailBody.velocity = Vector3.zero; - m_tailBody.angularVelocity = Vector3.zero; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Talker.cs b/Valheim_v202102/Valheim/assembly_valheim/Talker.cs deleted file mode 100644 index 7d1c361..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Talker.cs +++ /dev/null @@ -1,60 +0,0 @@ -using UnityEngine; - -public class Talker : MonoBehaviour -{ - public enum Type - { - Whisper, - Normal, - Shout, - Ping - } - - public float m_visperDistance = 4f; - - public float m_normalDistance = 15f; - - public float m_shoutDistance = 70f; - - private ZNetView m_nview; - - private Character m_character; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_character = GetComponent<Character>(); - m_nview.Register<int, string, string>("Say", RPC_Say); - } - - public void Say(Type type, string text) - { - ZLog.Log(string.Concat("Saying ", type, " ", text)); - m_nview.InvokeRPC(ZNetView.Everybody, "Say", (int)type, Game.instance.GetPlayerProfile().GetName(), text); - } - - private void RPC_Say(long sender, int ctype, string user, string text) - { - if (!(Player.m_localPlayer == null)) - { - float num = 0f; - switch (ctype) - { - case 0: - num = m_visperDistance; - break; - case 1: - num = m_normalDistance; - break; - case 2: - num = m_shoutDistance; - break; - } - if (Vector3.Distance(base.transform.position, Player.m_localPlayer.transform.position) < num && (bool)Chat.instance) - { - Vector3 headPoint = m_character.GetHeadPoint(); - Chat.instance.OnNewChatMessage(base.gameObject, sender, headPoint, (Type)ctype, user, text); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Tameable.cs b/Valheim_v202102/Valheim/assembly_valheim/Tameable.cs deleted file mode 100644 index 3f418c0..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Tameable.cs +++ /dev/null @@ -1,239 +0,0 @@ -using System; -using UnityEngine; - -public class Tameable : MonoBehaviour, Interactable -{ - private const float m_playerMaxDistance = 15f; - - private const float m_tameDeltaTime = 3f; - - public float m_fedDuration = 30f; - - public float m_tamingTime = 1800f; - - public EffectList m_tamedEffect = new EffectList(); - - public EffectList m_sootheEffect = new EffectList(); - - public EffectList m_petEffect = new EffectList(); - - public bool m_commandable; - - private Character m_character; - - private MonsterAI m_monsterAI; - - private ZNetView m_nview; - - private float m_lastPetTime; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_character = GetComponent<Character>(); - m_monsterAI = GetComponent<MonsterAI>(); - MonsterAI monsterAI = m_monsterAI; - monsterAI.m_onConsumedItem = (Action<ItemDrop>)Delegate.Combine(monsterAI.m_onConsumedItem, new Action<ItemDrop>(OnConsumedItem)); - if (m_nview.IsValid()) - { - m_nview.Register<ZDOID>("Command", RPC_Command); - InvokeRepeating("TamingUpdate", 3f, 3f); - } - } - - public string GetHoverText() - { - if (!m_nview.IsValid()) - { - return ""; - } - string text = Localization.instance.Localize(m_character.m_name); - if (m_character.IsTamed()) - { - text += Localization.instance.Localize(" ( $hud_tame, " + GetStatusString() + " )"); - return text + Localization.instance.Localize("\n[<color=yellow><b>$KEY_Use</b></color>] $hud_pet"); - } - int tameness = GetTameness(); - if (tameness <= 0) - { - return text + Localization.instance.Localize(" ( $hud_wild, " + GetStatusString() + " )"); - } - return text + Localization.instance.Localize(" ( $hud_tameness " + tameness + "%, " + GetStatusString() + " )"); - } - - private string GetStatusString() - { - if (m_monsterAI.IsAlerted()) - { - return "$hud_tamefrightened"; - } - if (IsHungry()) - { - return "$hud_tamehungry"; - } - if (m_character.IsTamed()) - { - return "$hud_tamehappy"; - } - return "$hud_tameinprogress"; - } - - public bool Interact(Humanoid user, bool hold) - { - if (hold) - { - return false; - } - if (!m_nview.IsValid()) - { - return false; - } - string hoverName = m_character.GetHoverName(); - if (m_character.IsTamed()) - { - if (Time.time - m_lastPetTime > 1f) - { - m_lastPetTime = Time.time; - m_petEffect.Create(m_character.GetCenterPoint(), Quaternion.identity); - if (m_commandable) - { - Command(user); - } - else - { - user.Message(MessageHud.MessageType.Center, hoverName + " $hud_tamelove"); - } - return true; - } - return false; - } - return false; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private void TamingUpdate() - { - if (m_nview.IsValid() && m_nview.IsOwner() && !m_character.IsTamed() && !IsHungry() && !m_monsterAI.IsAlerted()) - { - DecreaseRemainingTime(3f); - if (GetRemainingTime() <= 0f) - { - Tame(); - } - else - { - m_sootheEffect.Create(m_character.GetCenterPoint(), Quaternion.identity); - } - } - } - - public void Tame() - { - if (m_nview.IsValid() && m_nview.IsOwner() && !m_character.IsTamed()) - { - m_monsterAI.MakeTame(); - m_tamedEffect.Create(m_character.GetCenterPoint(), Quaternion.identity); - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, 30f); - if ((bool)closestPlayer) - { - closestPlayer.Message(MessageHud.MessageType.Center, m_character.m_name + " $hud_tamedone"); - } - } - } - - public static void TameAllInArea(Vector3 point, float radius) - { - foreach (Character allCharacter in Character.GetAllCharacters()) - { - if (!allCharacter.IsPlayer()) - { - Tameable component = allCharacter.GetComponent<Tameable>(); - if ((bool)component) - { - component.Tame(); - } - } - } - } - - private void Command(Humanoid user) - { - m_nview.InvokeRPC("Command", user.GetZDOID()); - } - - private Player GetPlayer(ZDOID characterID) - { - GameObject gameObject = ZNetScene.instance.FindInstance(characterID); - if ((bool)gameObject) - { - return gameObject.GetComponent<Player>(); - } - return null; - } - - private void RPC_Command(long sender, ZDOID characterID) - { - Player player = GetPlayer(characterID); - if (!(player == null)) - { - if ((bool)m_monsterAI.GetFollowTarget()) - { - m_monsterAI.SetFollowTarget(null); - m_monsterAI.SetPatrolPoint(); - player.Message(MessageHud.MessageType.Center, m_character.GetHoverName() + " $hud_tamestay"); - } - else - { - m_monsterAI.ResetPatrolPoint(); - m_monsterAI.SetFollowTarget(player.gameObject); - player.Message(MessageHud.MessageType.Center, m_character.GetHoverName() + " $hud_tamefollow"); - } - } - } - - public bool IsHungry() - { - DateTime dateTime = new DateTime(m_nview.GetZDO().GetLong("TameLastFeeding", 0L)); - return (ZNet.instance.GetTime() - dateTime).TotalSeconds > (double)m_fedDuration; - } - - private void ResetFeedingTimer() - { - m_nview.GetZDO().Set("TameLastFeeding", ZNet.instance.GetTime().Ticks); - } - - private int GetTameness() - { - float remainingTime = GetRemainingTime(); - return (int)((1f - Mathf.Clamp01(remainingTime / m_tamingTime)) * 100f); - } - - private void OnConsumedItem(ItemDrop item) - { - if (IsHungry()) - { - m_sootheEffect.Create(m_character.GetCenterPoint(), Quaternion.identity); - } - ResetFeedingTimer(); - } - - private void DecreaseRemainingTime(float time) - { - float remainingTime = GetRemainingTime(); - remainingTime -= time; - if (remainingTime < 0f) - { - remainingTime = 0f; - } - m_nview.GetZDO().Set("TameTimeLeft", remainingTime); - } - - private float GetRemainingTime() - { - return m_nview.GetZDO().GetFloat("TameTimeLeft", m_tamingTime); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Teleport.cs b/Valheim_v202102/Valheim/assembly_valheim/Teleport.cs deleted file mode 100644 index a395fb7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Teleport.cs +++ /dev/null @@ -1,64 +0,0 @@ -using UnityEngine; - -public class Teleport : MonoBehaviour, Hoverable, Interactable -{ - public string m_hoverText = "$location_enter"; - - public string m_enterText = ""; - - public Teleport m_targetPoint; - - public string GetHoverText() - { - return Localization.instance.Localize("[<color=yellow><b>$KEY_Use</b></color>] " + m_hoverText); - } - - public string GetHoverName() - { - return ""; - } - - private void OnTriggerEnter(Collider collider) - { - Player component = collider.GetComponent<Player>(); - if (!(component == null) && !(Player.m_localPlayer != component)) - { - Interact(component, hold: false); - } - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - if (m_targetPoint == null) - { - return false; - } - if (character.TeleportTo(m_targetPoint.GetTeleportPoint(), m_targetPoint.transform.rotation, distantTeleport: false)) - { - if (m_enterText.Length > 0) - { - MessageHud.instance.ShowBiomeFoundMsg(m_enterText, playStinger: false); - } - return true; - } - return false; - } - - private Vector3 GetTeleportPoint() - { - return base.transform.position + base.transform.forward - base.transform.up; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private void OnDrawGizmos() - { - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TeleportHome.cs b/Valheim_v202102/Valheim/assembly_valheim/TeleportHome.cs deleted file mode 100644 index fc411a3..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TeleportHome.cs +++ /dev/null @@ -1,13 +0,0 @@ -using UnityEngine; - -public class TeleportHome : MonoBehaviour -{ - private void OnTriggerEnter(Collider collider) - { - Player component = collider.GetComponent<Player>(); - if (!(component == null) && !(Player.m_localPlayer != component)) - { - Game.instance.RequestRespawn(0f); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TeleportWorld.cs b/Valheim_v202102/Valheim/assembly_valheim/TeleportWorld.cs deleted file mode 100644 index e5be540..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TeleportWorld.cs +++ /dev/null @@ -1,159 +0,0 @@ -using UnityEngine; - -public class TeleportWorld : MonoBehaviour, Hoverable, Interactable, TextReceiver -{ - public float m_activationRange = 5f; - - public float m_exitDistance = 1f; - - public Transform m_proximityRoot; - - [ColorUsage(true, true)] - public Color m_colorUnconnected = Color.white; - - [ColorUsage(true, true)] - public Color m_colorTargetfound = Color.white; - - public EffectFade m_target_found; - - public MeshRenderer m_model; - - public EffectList m_connected; - - private ZNetView m_nview; - - private bool m_hadTarget; - - private float m_colorAlpha; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_nview.GetZDO() == null) - { - base.enabled = false; - return; - } - m_hadTarget = HaveTarget(); - m_nview.Register<string>("SetTag", RPC_SetTag); - InvokeRepeating("UpdatePortal", 0.5f, 0.5f); - } - - public string GetHoverText() - { - string text = GetText(); - string text2 = (HaveTarget() ? "$piece_portal_connected" : "$piece_portal_unconnected"); - return Localization.instance.Localize("$piece_portal $piece_portal_tag:\"" + text + "\" [" + text2 + "]\n[<color=yellow><b>$KEY_Use</b></color>] $piece_portal_settag"); - } - - public string GetHoverName() - { - return "Teleport"; - } - - public bool Interact(Humanoid human, bool hold) - { - if (hold) - { - return false; - } - if (!PrivateArea.CheckAccess(base.transform.position)) - { - human.Message(MessageHud.MessageType.Center, "$piece_noaccess"); - return true; - } - TextInput.instance.RequestText(this, "$piece_portal_tag", 10); - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private void UpdatePortal() - { - if (m_nview.IsValid()) - { - Player closestPlayer = Player.GetClosestPlayer(m_proximityRoot.position, m_activationRange); - bool flag = HaveTarget(); - if (flag && !m_hadTarget) - { - m_connected.Create(base.transform.position, base.transform.rotation); - } - m_hadTarget = flag; - m_target_found.SetActive((bool)closestPlayer && closestPlayer.IsTeleportable() && TargetFound()); - } - } - - private void Update() - { - m_colorAlpha = Mathf.MoveTowards(m_colorAlpha, m_hadTarget ? 1f : 0f, Time.deltaTime); - m_model.material.SetColor("_EmissionColor", Color.Lerp(m_colorUnconnected, m_colorTargetfound, m_colorAlpha)); - } - - public void Teleport(Player player) - { - if (!TargetFound()) - { - return; - } - if (!player.IsTeleportable()) - { - player.Message(MessageHud.MessageType.Center, "$msg_noteleport"); - return; - } - ZLog.Log("Teleporting " + player.GetPlayerName()); - ZDOID zDOID = m_nview.GetZDO().GetZDOID("target"); - if (!(zDOID == ZDOID.None)) - { - ZDO zDO = ZDOMan.instance.GetZDO(zDOID); - Vector3 position = zDO.GetPosition(); - Quaternion rotation = zDO.GetRotation(); - Vector3 vector = rotation * Vector3.forward; - Vector3 pos = position + vector * m_exitDistance + Vector3.up; - player.TeleportTo(pos, rotation, distantTeleport: true); - } - } - - public string GetText() - { - return m_nview.GetZDO().GetString("tag"); - } - - public void SetText(string text) - { - if (m_nview.IsValid()) - { - m_nview.InvokeRPC("SetTag", text); - } - } - - private void RPC_SetTag(long sender, string tag) - { - if (m_nview.IsValid() && m_nview.IsOwner() && !(GetText() == tag)) - { - m_nview.GetZDO().Set("tag", tag); - } - } - - private bool HaveTarget() - { - return m_nview.GetZDO().GetZDOID("target") != ZDOID.None; - } - - private bool TargetFound() - { - ZDOID zDOID = m_nview.GetZDO().GetZDOID("target"); - if (zDOID == ZDOID.None) - { - return false; - } - if (ZDOMan.instance.GetZDO(zDOID) == null) - { - ZDOMan.instance.RequestZDO(zDOID); - return false; - } - return true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TeleportWorldTrigger.cs b/Valheim_v202102/Valheim/assembly_valheim/TeleportWorldTrigger.cs deleted file mode 100644 index 97f28a7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TeleportWorldTrigger.cs +++ /dev/null @@ -1,21 +0,0 @@ -using UnityEngine; - -public class TeleportWorldTrigger : MonoBehaviour -{ - private TeleportWorld m_tp; - - private void Awake() - { - m_tp = GetComponentInParent<TeleportWorld>(); - } - - private void OnTriggerEnter(Collider collider) - { - Player component = collider.GetComponent<Player>(); - if (!(component == null) && !(Player.m_localPlayer != component)) - { - ZLog.Log("TRIGGER"); - m_tp.Teleport(component); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TerrainLod.cs b/Valheim_v202102/Valheim/assembly_valheim/TerrainLod.cs deleted file mode 100644 index 99402d7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TerrainLod.cs +++ /dev/null @@ -1,37 +0,0 @@ -using UnityEngine; - -public class TerrainLod : MonoBehaviour -{ - public float m_updateStepDistance = 256f; - - private Heightmap m_hmap; - - private Vector3 m_lastPoint = new Vector3(99999f, 0f, 99999f); - - private bool m_needRebuild = true; - - private void Awake() - { - m_hmap = GetComponent<Heightmap>(); - } - - private void Update() - { - Camera mainCamera = Utils.GetMainCamera(); - if (!(mainCamera == null) && ZNet.GetConnectionStatus() == ZNet.ConnectionStatus.Connected) - { - Vector3 position = mainCamera.transform.position; - if (Utils.DistanceXZ(position, m_lastPoint) > m_updateStepDistance) - { - m_lastPoint = new Vector3(Mathf.Round(position.x / m_hmap.m_scale) * m_hmap.m_scale, 0f, Mathf.Round(position.z / m_hmap.m_scale) * m_hmap.m_scale); - m_needRebuild = true; - } - if (m_needRebuild && HeightmapBuilder.instance.IsTerrainReady(m_lastPoint, m_hmap.m_width, m_hmap.m_scale, m_hmap.m_isDistantLod, WorldGenerator.instance)) - { - base.transform.position = m_lastPoint; - m_hmap.Regenerate(); - m_needRebuild = false; - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TerrainModifier.cs b/Valheim_v202102/Valheim/assembly_valheim/TerrainModifier.cs deleted file mode 100644 index 9804830..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TerrainModifier.cs +++ /dev/null @@ -1,246 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -[ExecuteInEditMode] -public class TerrainModifier : MonoBehaviour -{ - public enum PaintType - { - Dirt, - Cultivate, - Paved, - Reset - } - - private static bool m_triggerOnPlaced = false; - - public int m_sortOrder; - - public bool m_playerModifiction; - - public float m_levelOffset; - - [Header("Level")] - public bool m_level; - - public float m_levelRadius = 2f; - - public bool m_square = true; - - [Header("Smooth")] - public bool m_smooth; - - public float m_smoothRadius = 2f; - - public float m_smoothPower = 3f; - - [Header("Paint")] - public bool m_paintCleared = true; - - public bool m_paintHeightCheck; - - public PaintType m_paintType; - - public float m_paintRadius = 2f; - - [Header("Effects")] - public EffectList m_onPlacedEffect = new EffectList(); - - [Header("Spawn items")] - public GameObject m_spawnOnPlaced; - - public float m_chanceToSpawn = 1f; - - public int m_maxSpawned = 1; - - public bool m_spawnAtMaxLevelDepth = true; - - private bool m_wasEnabled; - - private ZNetView m_nview; - - private static List<TerrainModifier> m_instances = new List<TerrainModifier>(); - - private static bool m_needsSorting = false; - - private void Awake() - { - m_instances.Add(this); - m_needsSorting = true; - m_nview = GetComponent<ZNetView>(); - m_wasEnabled = base.enabled; - if (base.enabled) - { - if (m_triggerOnPlaced) - { - OnPlaced(); - } - PokeHeightmaps(); - } - } - - private void OnDestroy() - { - m_instances.Remove(this); - m_needsSorting = true; - if (m_wasEnabled) - { - PokeHeightmaps(); - } - } - - private void PokeHeightmaps() - { - bool delayed = !m_triggerOnPlaced; - foreach (Heightmap allHeightmap in Heightmap.GetAllHeightmaps()) - { - if (allHeightmap.TerrainVSModifier(this)) - { - allHeightmap.Poke(delayed); - } - } - if ((bool)ClutterSystem.instance) - { - ClutterSystem.instance.ResetGrass(base.transform.position, GetRadius()); - } - } - - public float GetRadius() - { - float num = 0f; - if (m_level && m_levelRadius > num) - { - num = m_levelRadius; - } - if (m_smooth && m_smoothRadius > num) - { - num = m_smoothRadius; - } - if (m_paintCleared && m_paintRadius > num) - { - num = m_paintRadius; - } - return num; - } - - public static void SetTriggerOnPlaced(bool trigger) - { - m_triggerOnPlaced = trigger; - } - - private void OnPlaced() - { - RemoveOthers(base.transform.position, GetRadius() / 4f); - m_onPlacedEffect.Create(base.transform.position, Quaternion.identity); - if ((bool)m_spawnOnPlaced && (m_spawnAtMaxLevelDepth || !Heightmap.AtMaxLevelDepth(base.transform.position + Vector3.up * m_levelOffset)) && Random.value <= m_chanceToSpawn) - { - Vector3 vector = Random.insideUnitCircle * 0.2f; - GameObject obj = Object.Instantiate(m_spawnOnPlaced, base.transform.position + Vector3.up * 0.5f + vector, Quaternion.identity); - obj.GetComponent<ItemDrop>().m_itemData.m_stack = Random.Range(1, m_maxSpawned + 1); - obj.GetComponent<Rigidbody>().velocity = Vector3.up * 4f; - } - } - - private static void GetModifiers(Vector3 point, float range, List<TerrainModifier> modifiers, TerrainModifier ignore = null) - { - foreach (TerrainModifier instance in m_instances) - { - if (!(instance == ignore) && Utils.DistanceXZ(point, instance.transform.position) < range) - { - modifiers.Add(instance); - } - } - } - - public static Piece FindClosestModifierPieceInRange(Vector3 point, float range) - { - float num = 999999f; - TerrainModifier terrainModifier = null; - foreach (TerrainModifier instance in m_instances) - { - if (!(instance.m_nview == null)) - { - float num2 = Utils.DistanceXZ(point, instance.transform.position); - if (!(num2 > range) && !(num2 > num)) - { - num = num2; - terrainModifier = instance; - } - } - } - if ((bool)terrainModifier) - { - return terrainModifier.GetComponent<Piece>(); - } - return null; - } - - private void RemoveOthers(Vector3 point, float range) - { - List<TerrainModifier> list = new List<TerrainModifier>(); - GetModifiers(point, range, list, this); - int num = 0; - foreach (TerrainModifier item in list) - { - if ((m_level || !item.m_level) && (!m_paintCleared || m_paintType != PaintType.Reset || (item.m_paintCleared && item.m_paintType == PaintType.Reset)) && (bool)item.m_nview) - { - num++; - item.m_nview.ClaimOwnership(); - item.m_nview.Destroy(); - } - } - } - - private static int SortByModifiers(TerrainModifier a, TerrainModifier b) - { - if (a.m_playerModifiction == b.m_playerModifiction) - { - if (a.m_sortOrder == b.m_sortOrder) - { - return a.GetCreationTime().CompareTo(b.GetCreationTime()); - } - return a.m_sortOrder.CompareTo(b.m_sortOrder); - } - return a.m_playerModifiction.CompareTo(b.m_playerModifiction); - } - - public static List<TerrainModifier> GetAllInstances() - { - if (m_needsSorting) - { - m_instances.Sort(SortByModifiers); - m_needsSorting = false; - } - return m_instances; - } - - private void OnDrawGizmosSelected() - { - Gizmos.matrix = Matrix4x4.TRS(base.transform.position + Vector3.up * m_levelOffset, Quaternion.identity, new Vector3(1f, 0f, 1f)); - if (m_level) - { - Gizmos.color = Color.green; - Gizmos.DrawWireSphere(Vector3.zero, m_levelRadius); - } - if (m_smooth) - { - Gizmos.color = Color.blue; - Gizmos.DrawWireSphere(Vector3.zero, m_smoothRadius); - } - if (m_paintCleared) - { - Gizmos.color = Color.yellow; - Gizmos.DrawWireSphere(Vector3.zero, m_paintRadius); - } - Gizmos.matrix = Matrix4x4.identity; - } - - public long GetCreationTime() - { - if ((bool)m_nview && m_nview.GetZDO() != null) - { - return m_nview.GetZDO().m_timeCreated; - } - return 0L; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TestCollision.cs b/Valheim_v202102/Valheim/assembly_valheim/TestCollision.cs deleted file mode 100644 index 29ca07f..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TestCollision.cs +++ /dev/null @@ -1,19 +0,0 @@ -using UnityEngine; - -public class TestCollision : MonoBehaviour -{ - private void Start() - { - } - - private void Update() - { - } - - public void OnCollisionEnter(Collision info) - { - ZLog.Log("Hit by " + info.rigidbody.gameObject.name); - ZLog.Log(string.Concat("rel vel ", info.relativeVelocity, " ", info.relativeVelocity)); - ZLog.Log(string.Concat("Vel ", info.rigidbody.velocity, " ", info.rigidbody.angularVelocity)); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TestSceneCharacter.cs b/Valheim_v202102/Valheim/assembly_valheim/TestSceneCharacter.cs deleted file mode 100644 index 95f1742..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TestSceneCharacter.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System.Threading; -using UnityEngine; - -public class TestSceneCharacter : MonoBehaviour -{ - public float m_speed = 5f; - - public float m_cameraDistance = 10f; - - private Rigidbody m_body; - - private Quaternion m_lookYaw = Quaternion.identity; - - private float m_lookPitch; - - private void Start() - { - m_body = GetComponent<Rigidbody>(); - } - - private void Update() - { - Thread.Sleep(30); - HandleInput(Time.deltaTime); - } - - private void HandleInput(float dt) - { - Camera mainCamera = Utils.GetMainCamera(); - if (mainCamera == null) - { - return; - } - Vector2 zero = Vector2.zero; - zero.x = Input.GetAxis("Mouse X"); - zero.y = Input.GetAxis("Mouse Y"); - if (Input.GetKey(KeyCode.Mouse1) || Cursor.lockState != 0) - { - m_lookYaw *= Quaternion.Euler(0f, zero.x, 0f); - m_lookPitch = Mathf.Clamp(m_lookPitch - zero.y, -89f, 89f); - } - if (Input.GetKeyDown(KeyCode.F1)) - { - if (Cursor.lockState == CursorLockMode.None) - { - Cursor.lockState = CursorLockMode.Locked; - } - else - { - Cursor.lockState = CursorLockMode.None; - } - } - Vector3 zero2 = Vector3.zero; - if (Input.GetKey(KeyCode.A)) - { - zero2 -= base.transform.right * m_speed; - } - if (Input.GetKey(KeyCode.D)) - { - zero2 += base.transform.right * m_speed; - } - if (Input.GetKey(KeyCode.W)) - { - zero2 += base.transform.forward * m_speed; - } - if (Input.GetKey(KeyCode.S)) - { - zero2 -= base.transform.forward * m_speed; - } - if (Input.GetKeyDown(KeyCode.Space)) - { - m_body.AddForce(Vector3.up * 10f, ForceMode.VelocityChange); - } - Vector3 force = zero2 - m_body.velocity; - force.y = 0f; - m_body.AddForce(force, ForceMode.VelocityChange); - base.transform.rotation = m_lookYaw; - Quaternion quaternion = m_lookYaw * Quaternion.Euler(m_lookPitch, 0f, 0f); - mainCamera.transform.position = base.transform.position - quaternion * Vector3.forward * m_cameraDistance; - mainCamera.transform.LookAt(base.transform.position + Vector3.up); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TestSceneSetup.cs b/Valheim_v202102/Valheim/assembly_valheim/TestSceneSetup.cs deleted file mode 100644 index e8cc282..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TestSceneSetup.cs +++ /dev/null @@ -1,13 +0,0 @@ -using UnityEngine; - -public class TestSceneSetup : MonoBehaviour -{ - private void Awake() - { - WorldGenerator.Initialize(World.GetMenuWorld()); - } - - private void Update() - { - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TextInput.cs b/Valheim_v202102/Valheim/assembly_valheim/TextInput.cs deleted file mode 100644 index 419d21f..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TextInput.cs +++ /dev/null @@ -1,93 +0,0 @@ -using UnityEngine; -using UnityEngine.EventSystems; -using UnityEngine.UI; - -public class TextInput : MonoBehaviour -{ - private static TextInput m_instance; - - public GameObject m_panel; - - public InputField m_textField; - - public Text m_topic; - - private TextReceiver m_queuedSign; - - private bool m_visibleFrame; - - public static TextInput instance => m_instance; - - private void Awake() - { - m_instance = this; - m_panel.SetActive(value: false); - } - - private void OnDestroy() - { - m_instance = null; - } - - public static bool IsVisible() - { - if ((bool)m_instance) - { - return m_instance.m_visibleFrame; - } - return false; - } - - private void Update() - { - m_visibleFrame = m_instance.m_panel.gameObject.activeSelf; - if (!m_visibleFrame || Console.IsVisible() || Chat.instance.HasFocus()) - { - return; - } - if (Input.GetKeyDown(KeyCode.Escape)) - { - Hide(); - return; - } - if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter)) - { - string text = m_textField.text; - OnEnter(text); - Hide(); - } - if (!m_textField.isFocused) - { - EventSystem.current.SetSelectedGameObject(m_textField.gameObject); - } - } - - private void OnEnter(string text) - { - if (m_queuedSign != null) - { - m_queuedSign.SetText(text); - m_queuedSign = null; - } - } - - public void RequestText(TextReceiver sign, string topic, int charLimit) - { - m_queuedSign = sign; - Show(topic, sign.GetText(), charLimit); - } - - private void Show(string topic, string text, int charLimit) - { - m_panel.SetActive(value: true); - m_textField.text = text; - m_topic.text = Localization.instance.Localize(topic); - m_textField.ActivateInputField(); - m_textField.characterLimit = charLimit; - } - - public void Hide() - { - m_panel.SetActive(value: false); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TextReceiver.cs b/Valheim_v202102/Valheim/assembly_valheim/TextReceiver.cs deleted file mode 100644 index 33507c5..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TextReceiver.cs +++ /dev/null @@ -1,6 +0,0 @@ -public interface TextReceiver -{ - string GetText(); - - void SetText(string text); -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TextViewer.cs b/Valheim_v202102/Valheim/assembly_valheim/TextViewer.cs deleted file mode 100644 index 9e41172..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TextViewer.cs +++ /dev/null @@ -1,155 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -public class TextViewer : MonoBehaviour -{ - public enum Style - { - Rune, - Intro, - Raven - } - - private static TextViewer m_instance; - - private Animator m_animator; - - private Animator m_animatorIntro; - - private Animator m_animatorRaven; - - [Header("Rune")] - public GameObject m_root; - - public Text m_topic; - - public Text m_text; - - public Text m_runeText; - - public GameObject m_closeText; - - [Header("Intro")] - public GameObject m_introRoot; - - public Text m_introTopic; - - public Text m_introText; - - [Header("Raven")] - public GameObject m_ravenRoot; - - public Text m_ravenTopic; - - public Text m_ravenText; - - private static int m_visibleID = Animator.StringToHash("visible"); - - private static int m_animatorTagVisible = Animator.StringToHash("visible"); - - private float m_showTime; - - private bool m_autoHide; - - private Vector3 m_openPlayerPos = Vector3.zero; - - public static TextViewer instance => m_instance; - - private void Awake() - { - m_instance = this; - m_root.SetActive(value: true); - m_introRoot.SetActive(value: true); - m_ravenRoot.SetActive(value: true); - m_animator = m_root.GetComponent<Animator>(); - m_animatorIntro = m_introRoot.GetComponent<Animator>(); - m_animatorRaven = m_ravenRoot.GetComponent<Animator>(); - } - - private void OnDestroy() - { - m_instance = null; - } - - private void LateUpdate() - { - if (!IsVisible()) - { - return; - } - m_showTime += Time.deltaTime; - if (m_showTime > 0.2f) - { - if (m_autoHide && (bool)Player.m_localPlayer && Vector3.Distance(Player.m_localPlayer.transform.position, m_openPlayerPos) > 3f) - { - Hide(); - } - if (ZInput.GetButtonDown("Use") || ZInput.GetButtonDown("JoyUse") || Input.GetKeyDown(KeyCode.Escape)) - { - Hide(); - } - } - } - - public void ShowText(Style style, string topic, string text, bool autoHide) - { - if (!(Player.m_localPlayer == null)) - { - topic = Localization.instance.Localize(topic); - text = Localization.instance.Localize(text); - switch (style) - { - case Style.Rune: - m_topic.text = topic; - m_text.text = text; - m_runeText.text = text; - m_animator.SetBool(m_visibleID, value: true); - break; - case Style.Intro: - m_introTopic.text = topic; - m_introText.text = text; - m_animatorIntro.SetTrigger("play"); - ZLog.Log("Show intro " + Time.frameCount); - break; - case Style.Raven: - m_ravenTopic.text = topic; - m_ravenText.text = text; - m_animatorRaven.SetBool(m_visibleID, value: true); - break; - } - m_autoHide = autoHide; - m_openPlayerPos = Player.m_localPlayer.transform.position; - m_showTime = 0f; - ZLog.Log("Show text " + topic + ":" + text); - } - } - - public void Hide() - { - m_autoHide = false; - m_animator.SetBool(m_visibleID, value: false); - m_animatorRaven.SetBool(m_visibleID, value: false); - } - - public bool IsVisible() - { - if (m_instance.m_animatorIntro.GetCurrentAnimatorStateInfo(0).tagHash == m_animatorTagVisible) - { - return true; - } - if (!m_animator.GetBool(m_visibleID) && !m_animatorIntro.GetBool(m_visibleID)) - { - return m_animatorRaven.GetBool(m_visibleID); - } - return true; - } - - public static bool IsShowingIntro() - { - if (m_instance != null) - { - return m_instance.m_animatorIntro.GetCurrentAnimatorStateInfo(0).tagHash == m_animatorTagVisible; - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TextsDialog.cs b/Valheim_v202102/Valheim/assembly_valheim/TextsDialog.cs deleted file mode 100644 index da3a792..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TextsDialog.cs +++ /dev/null @@ -1,196 +0,0 @@ -using System.Collections.Generic; -using System.Text; -using UnityEngine; -using UnityEngine.UI; - -public class TextsDialog : MonoBehaviour -{ - public class TextInfo - { - public string m_topic; - - public string m_text; - - public GameObject m_listElement; - - public GameObject m_selected; - - public TextInfo(string topic, string text) - { - m_topic = topic; - m_text = text; - } - } - - public RectTransform m_listRoot; - - public GameObject m_elementPrefab; - - public Text m_totalSkillText; - - public float m_spacing = 80f; - - public Text m_textAreaTopic; - - public Text m_textArea; - - public ScrollRectEnsureVisible m_recipeEnsureVisible; - - private List<TextInfo> m_texts = new List<TextInfo>(); - - private float m_baseListSize; - - private void Awake() - { - m_baseListSize = m_listRoot.rect.height; - } - - public void Setup(Player player) - { - base.gameObject.SetActive(value: true); - FillTextList(); - if (m_texts.Count > 0) - { - ShowText(m_texts[0]); - return; - } - m_textAreaTopic.text = ""; - m_textArea.text = ""; - } - - private void Update() - { - UpdateGamepadInput(); - } - - private void FillTextList() - { - foreach (TextInfo text2 in m_texts) - { - Object.Destroy(text2.m_listElement); - } - m_texts.Clear(); - UpdateTextsList(); - for (int i = 0; i < m_texts.Count; i++) - { - TextInfo text = m_texts[i]; - GameObject gameObject = Object.Instantiate(m_elementPrefab, Vector3.zero, Quaternion.identity, m_listRoot); - gameObject.SetActive(value: true); - (gameObject.transform as RectTransform).anchoredPosition = new Vector2(0f, (float)(-i) * m_spacing); - Utils.FindChild(gameObject.transform, "name").GetComponent<Text>().text = Localization.instance.Localize(text.m_topic); - text.m_listElement = gameObject; - text.m_selected = Utils.FindChild(gameObject.transform, "selected").gameObject; - text.m_selected.SetActive(value: false); - gameObject.GetComponent<Button>().onClick.AddListener(delegate - { - OnSelectText(text); - }); - } - float size = Mathf.Max(m_baseListSize, (float)m_texts.Count * m_spacing); - m_listRoot.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, size); - if (m_texts.Count > 0) - { - m_recipeEnsureVisible.CenterOnItem(m_texts[0].m_listElement.transform as RectTransform); - } - } - - private void UpdateGamepadInput() - { - if (m_texts.Count > 0) - { - if (ZInput.GetButtonDown("JoyLStickDown")) - { - ShowText(Mathf.Min(m_texts.Count - 1, GetSelectedText() + 1)); - } - if (ZInput.GetButtonDown("JoyLStickUp")) - { - ShowText(Mathf.Max(0, GetSelectedText() - 1)); - } - } - } - - private void OnSelectText(TextInfo text) - { - ShowText(text); - } - - private int GetSelectedText() - { - for (int i = 0; i < m_texts.Count; i++) - { - if (m_texts[i].m_selected.activeSelf) - { - return i; - } - } - return 0; - } - - private void ShowText(int i) - { - ShowText(m_texts[i]); - } - - private void ShowText(TextInfo text) - { - m_textAreaTopic.text = Localization.instance.Localize(text.m_topic); - m_textArea.text = Localization.instance.Localize(text.m_text); - foreach (TextInfo text2 in m_texts) - { - text2.m_selected.SetActive(value: false); - } - text.m_selected.SetActive(value: true); - } - - public void OnClose() - { - base.gameObject.SetActive(value: false); - } - - private void UpdateTextsList() - { - m_texts.Clear(); - foreach (KeyValuePair<string, string> knownText in Player.m_localPlayer.GetKnownTexts()) - { - m_texts.Add(new TextInfo(Localization.instance.Localize(knownText.Key), Localization.instance.Localize(knownText.Value))); - } - m_texts.Sort((TextInfo a, TextInfo b) => a.m_topic.CompareTo(b.m_topic)); - AddLog(); - AddActiveEffects(); - } - - private void AddLog() - { - StringBuilder stringBuilder = new StringBuilder(); - foreach (string item in MessageHud.instance.GetLog()) - { - stringBuilder.Append(item + "\n\n"); - } - m_texts.Insert(0, new TextInfo(Localization.instance.Localize("$inventory_logs"), stringBuilder.ToString())); - } - - private void AddActiveEffects() - { - if (!Player.m_localPlayer) - { - return; - } - List<StatusEffect> list = new List<StatusEffect>(); - Player.m_localPlayer.GetSEMan().GetHUDStatusEffects(list); - StringBuilder stringBuilder = new StringBuilder(256); - foreach (StatusEffect item in list) - { - stringBuilder.Append("<color=orange>" + Localization.instance.Localize(item.m_name) + "</color>\n"); - stringBuilder.Append(Localization.instance.Localize(item.GetTooltipString())); - stringBuilder.Append("\n\n"); - } - Player.m_localPlayer.GetGuardianPowerHUD(out var se, out var _); - if ((bool)se) - { - stringBuilder.Append("<color=yellow>" + Localization.instance.Localize("$inventory_selectedgp") + "</color>\n"); - stringBuilder.Append("<color=orange>" + Localization.instance.Localize(se.m_name) + "</color>\n"); - stringBuilder.Append(Localization.instance.Localize(se.GetTooltipString())); - } - m_texts.Insert(0, new TextInfo(Localization.instance.Localize("$inventory_activeeffects"), stringBuilder.ToString())); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ThorFly.cs b/Valheim_v202102/Valheim/assembly_valheim/ThorFly.cs deleted file mode 100644 index a24de60..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ThorFly.cs +++ /dev/null @@ -1,24 +0,0 @@ -using UnityEngine; - -public class ThorFly : MonoBehaviour -{ - public float m_speed = 100f; - - public float m_ttl = 10f; - - private float m_timer; - - private void Start() - { - } - - private void Update() - { - base.transform.position = base.transform.position + base.transform.forward * m_speed * Time.deltaTime; - m_timer += Time.deltaTime; - if (m_timer > m_ttl) - { - Object.Destroy(base.gameObject); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Thunder.cs b/Valheim_v202102/Valheim/assembly_valheim/Thunder.cs deleted file mode 100644 index 6b7198e..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Thunder.cs +++ /dev/null @@ -1,133 +0,0 @@ -using System; -using UnityEngine; - -public class Thunder : MonoBehaviour -{ - public float m_strikeIntervalMin = 3f; - - public float m_strikeIntervalMax = 10f; - - public float m_thunderDelayMin = 3f; - - public float m_thunderDelayMax = 5f; - - public float m_flashDistanceMin = 50f; - - public float m_flashDistanceMax = 200f; - - public float m_flashAltitude = 100f; - - public EffectList m_flashEffect = new EffectList(); - - public EffectList m_thunderEffect = new EffectList(); - - [Header("Thor")] - public bool m_spawnThor; - - public string m_requiredGlobalKey = ""; - - public GameObject m_thorPrefab; - - public float m_thorSpawnDistance = 300f; - - public float m_thorSpawnAltitudeMax = 100f; - - public float m_thorSpawnAltitudeMin = 100f; - - public float m_thorInterval = 10f; - - public float m_thorChance = 1f; - - private Vector3 m_flashPos = Vector3.zero; - - private float m_strikeTimer = -1f; - - private float m_thunderTimer = -1f; - - private float m_thorTimer; - - private void Start() - { - m_strikeTimer = UnityEngine.Random.Range(m_strikeIntervalMin, m_strikeIntervalMax); - } - - private void Update() - { - if (m_strikeTimer > 0f) - { - m_strikeTimer -= Time.deltaTime; - if (m_strikeTimer <= 0f) - { - DoFlash(); - } - } - if (m_thunderTimer > 0f) - { - m_thunderTimer -= Time.deltaTime; - if (m_thunderTimer <= 0f) - { - DoThunder(); - m_strikeTimer = UnityEngine.Random.Range(m_strikeIntervalMin, m_strikeIntervalMax); - } - } - if (!m_spawnThor) - { - return; - } - m_thorTimer += Time.deltaTime; - if (m_thorTimer > m_thorInterval) - { - m_thorTimer = 0f; - if (UnityEngine.Random.value <= m_thorChance && (m_requiredGlobalKey == "" || ZoneSystem.instance.GetGlobalKey(m_requiredGlobalKey))) - { - SpawnThor(); - } - } - } - - private void SpawnThor() - { - float num = UnityEngine.Random.value * ((float)Math.PI * 2f); - Vector3 vector = base.transform.position + new Vector3(Mathf.Sin(num), 0f, Mathf.Cos(num)) * m_thorSpawnDistance; - vector.y += UnityEngine.Random.Range(m_thorSpawnAltitudeMin, m_thorSpawnAltitudeMax); - float groundHeight = ZoneSystem.instance.GetGroundHeight(vector); - if (vector.y < groundHeight) - { - vector.y = groundHeight + 50f; - } - float f = num + 180f + (float)UnityEngine.Random.Range(-45, 45); - Vector3 vector2 = base.transform.position + new Vector3(Mathf.Sin(f), 0f, Mathf.Cos(f)) * m_thorSpawnDistance; - vector2.y += UnityEngine.Random.Range(m_thorSpawnAltitudeMin, m_thorSpawnAltitudeMax); - float groundHeight2 = ZoneSystem.instance.GetGroundHeight(vector2); - if (vector.y < groundHeight2) - { - vector.y = groundHeight2 + 50f; - } - Vector3 normalized = (vector2 - vector).normalized; - UnityEngine.Object.Instantiate(m_thorPrefab, vector, Quaternion.LookRotation(normalized)); - } - - private void DoFlash() - { - float f = UnityEngine.Random.value * ((float)Math.PI * 2f); - float num = UnityEngine.Random.Range(m_flashDistanceMin, m_flashDistanceMax); - m_flashPos = base.transform.position + new Vector3(Mathf.Sin(f), 0f, Mathf.Cos(f)) * num; - m_flashPos.y += m_flashAltitude; - Quaternion rotation = Quaternion.LookRotation((base.transform.position - m_flashPos).normalized); - GameObject[] array = m_flashEffect.Create(m_flashPos, Quaternion.identity); - for (int i = 0; i < array.Length; i++) - { - Light[] componentsInChildren = array[i].GetComponentsInChildren<Light>(); - for (int j = 0; j < componentsInChildren.Length; j++) - { - componentsInChildren[j].transform.rotation = rotation; - } - } - m_thunderTimer = UnityEngine.Random.Range(m_thunderDelayMin, m_thunderDelayMax); - } - - private void DoThunder() - { - m_thunderEffect.Create(m_flashPos, Quaternion.identity); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TimedDestruction.cs b/Valheim_v202102/Valheim/assembly_valheim/TimedDestruction.cs deleted file mode 100644 index 55f4e73..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TimedDestruction.cs +++ /dev/null @@ -1,51 +0,0 @@ -using UnityEngine; - -public class TimedDestruction : MonoBehaviour -{ - public float m_timeout = 1f; - - public bool m_triggerOnAwake; - - private ZNetView m_nview; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_triggerOnAwake) - { - Trigger(); - } - } - - public void Trigger() - { - Invoke("DestroyNow", m_timeout); - } - - public void Trigger(float timeout) - { - Invoke("DestroyNow", timeout); - } - - private void DestroyNow() - { - if ((bool)m_nview) - { - if (m_nview.IsValid()) - { - if (m_nview.GetZDO().m_owner == 0L) - { - m_nview.ClaimOwnership(); - } - if (m_nview.IsOwner()) - { - ZNetScene.instance.Destroy(base.gameObject); - } - } - } - else - { - Object.Destroy(base.gameObject); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ToggleImage.cs b/Valheim_v202102/Valheim/assembly_valheim/ToggleImage.cs deleted file mode 100644 index 6c0f5c6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ToggleImage.cs +++ /dev/null @@ -1,30 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -public class ToggleImage : MonoBehaviour -{ - private Toggle m_toggle; - - public Image m_targetImage; - - public Sprite m_onImage; - - public Sprite m_offImage; - - private void Awake() - { - m_toggle = GetComponent<Toggle>(); - } - - private void Update() - { - if (m_toggle.isOn) - { - m_targetImage.sprite = m_onImage; - } - else - { - m_targetImage.sprite = m_offImage; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ToggleSwitch.cs b/Valheim_v202102/Valheim/assembly_valheim/ToggleSwitch.cs deleted file mode 100644 index bc0f4aa..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ToggleSwitch.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using UnityEngine; - -public class ToggleSwitch : MonoBehaviour, Interactable, Hoverable -{ - public MeshRenderer m_renderer; - - public Material m_enableMaterial; - - public Material m_disableMaterial; - - public Action<ToggleSwitch, Humanoid> m_onUse; - - public string m_hoverText = ""; - - public string m_name = ""; - - private bool m_state; - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - if (m_onUse != null) - { - m_onUse(this, character); - } - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public string GetHoverText() - { - return m_hoverText; - } - - public string GetHoverName() - { - return m_name; - } - - public void SetState(bool enabled) - { - m_state = enabled; - m_renderer.material = (m_state ? m_enableMaterial : m_disableMaterial); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TombStone.cs b/Valheim_v202102/Valheim/assembly_valheim/TombStone.cs deleted file mode 100644 index dd74763..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TombStone.cs +++ /dev/null @@ -1,217 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.UI; - -public class TombStone : MonoBehaviour, Hoverable, Interactable -{ - private static float m_updateDt = 2f; - - public string m_text = "$piece_tombstone"; - - public GameObject m_floater; - - public Text m_worldText; - - public float m_spawnUpVel = 5f; - - public StatusEffect m_lootStatusEffect; - - public EffectList m_removeEffect = new EffectList(); - - private Container m_container; - - private ZNetView m_nview; - - private Floating m_floating; - - private Rigidbody m_body; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_container = GetComponent<Container>(); - m_floating = GetComponent<Floating>(); - m_body = GetComponent<Rigidbody>(); - m_body.maxDepenetrationVelocity = 1f; - Container container = m_container; - container.m_onTakeAllSuccess = (Action)Delegate.Combine(container.m_onTakeAllSuccess, new Action(OnTakeAllSuccess)); - if (m_nview.IsOwner() && m_nview.GetZDO().GetLong("timeOfDeath", 0L) == 0L) - { - m_nview.GetZDO().Set("timeOfDeath", ZNet.instance.GetTime().Ticks); - } - InvokeRepeating("UpdateDespawn", m_updateDt, m_updateDt); - } - - private void Start() - { - string @string = m_nview.GetZDO().GetString("ownerName"); - GetComponent<Container>().m_name = @string; - m_worldText.text = @string; - } - - public string GetHoverText() - { - if (!m_nview.IsValid()) - { - return ""; - } - string @string = m_nview.GetZDO().GetString("ownerName"); - string text = m_text + " " + @string; - if (m_container.GetInventory().NrOfItems() == 0) - { - return ""; - } - return Localization.instance.Localize(text + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_container_open"); - } - - public string GetHoverName() - { - return ""; - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - if (m_container.GetInventory().NrOfItems() == 0) - { - return false; - } - if (IsOwner()) - { - Player player = character as Player; - if (EasyFitInInventory(player)) - { - ZLog.Log("Grave should fit in inventory, loot all"); - m_container.TakeAll(character); - return true; - } - } - return m_container.Interact(character, hold: false); - } - - private void OnTakeAllSuccess() - { - Player localPlayer = Player.m_localPlayer; - if ((bool)localPlayer) - { - localPlayer.m_pickupEffects.Create(localPlayer.transform.position, Quaternion.identity); - localPlayer.Message(MessageHud.MessageType.Center, "$piece_tombstone_recovered"); - } - } - - private bool EasyFitInInventory(Player player) - { - int emptySlots = player.GetInventory().GetEmptySlots(); - if (m_container.GetInventory().NrOfItems() > emptySlots) - { - return false; - } - if (player.GetInventory().GetTotalWeight() + m_container.GetInventory().GetTotalWeight() > player.GetMaxCarryWeight()) - { - return false; - } - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public void Setup(string ownerName, long ownerUID) - { - m_nview.GetZDO().Set("ownerName", ownerName); - m_nview.GetZDO().Set("owner", ownerUID); - if ((bool)m_body) - { - m_body.velocity = new Vector3(0f, m_spawnUpVel, 0f); - } - } - - public long GetOwner() - { - if (!m_nview.IsValid()) - { - return 0L; - } - return m_nview.GetZDO().GetLong("owner", 0L); - } - - public bool IsOwner() - { - long owner = GetOwner(); - long playerID = Game.instance.GetPlayerProfile().GetPlayerID(); - return owner == playerID; - } - - private void UpdateDespawn() - { - if (m_floater != null) - { - UpdateFloater(); - } - if (m_nview.IsOwner()) - { - UnderWorldCheck(); - if (!m_container.IsInUse() && m_container.GetInventory().NrOfItems() <= 0) - { - GiveBoost(); - m_removeEffect.Create(base.transform.position, base.transform.rotation); - m_nview.Destroy(); - } - } - } - - private void GiveBoost() - { - if (!(m_lootStatusEffect == null)) - { - Player player = FindOwner(); - if ((bool)player) - { - player.GetSEMan().AddStatusEffect(m_lootStatusEffect, resetTime: true); - } - } - } - - private Player FindOwner() - { - long owner = GetOwner(); - if (owner == 0L) - { - return null; - } - return Player.GetPlayer(owner); - } - - private void UnderWorldCheck() - { - float groundHeight = ZoneSystem.instance.GetGroundHeight(base.transform.position); - if (base.transform.position.y < groundHeight - 1f) - { - Vector3 position = base.transform.position; - position.y = groundHeight + 0.5f; - base.transform.position = position; - m_body.position = position; - m_body.velocity = Vector3.zero; - } - } - - private void UpdateFloater() - { - if (m_nview.IsOwner()) - { - bool flag = m_floating.BeenInWater(); - m_nview.GetZDO().Set("inWater", flag); - m_floater.SetActive(flag); - } - else - { - bool @bool = m_nview.GetZDO().GetBool("inWater"); - m_floater.SetActive(@bool); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Tracker.cs b/Valheim_v202102/Valheim/assembly_valheim/Tracker.cs deleted file mode 100644 index f9aaed8..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Tracker.cs +++ /dev/null @@ -1,34 +0,0 @@ -using UnityEngine; - -public class Tracker : MonoBehaviour -{ - private bool m_active; - - private void Awake() - { - ZNetView component = GetComponent<ZNetView>(); - if ((bool)component && component.IsOwner()) - { - m_active = true; - ZNet.instance.SetReferencePosition(base.transform.position); - } - } - - public void SetActive(bool active) - { - m_active = active; - } - - private void OnDestroy() - { - m_active = false; - } - - private void FixedUpdate() - { - if (m_active) - { - ZNet.instance.SetReferencePosition(base.transform.position); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Trader.cs b/Valheim_v202102/Valheim/assembly_valheim/Trader.cs deleted file mode 100644 index cb5289e..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Trader.cs +++ /dev/null @@ -1,168 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Trader : MonoBehaviour, Hoverable, Interactable -{ - [Serializable] - public class TradeItem - { - public ItemDrop m_prefab; - - public int m_stack = 1; - - public int m_price = 100; - } - - public string m_name = "Haldor"; - - public float m_standRange = 15f; - - public float m_greetRange = 5f; - - public float m_byeRange = 5f; - - public List<TradeItem> m_items = new List<TradeItem>(); - - [Header("Dialog")] - public float m_hideDialogDelay = 5f; - - public float m_randomTalkInterval = 30f; - - public List<string> m_randomTalk = new List<string>(); - - public List<string> m_randomGreets = new List<string>(); - - public List<string> m_randomGoodbye = new List<string>(); - - public List<string> m_randomStartTrade = new List<string>(); - - public List<string> m_randomBuy = new List<string>(); - - public List<string> m_randomSell = new List<string>(); - - public EffectList m_randomTalkFX = new EffectList(); - - public EffectList m_randomGreetFX = new EffectList(); - - public EffectList m_randomGoodbyeFX = new EffectList(); - - public EffectList m_randomStartTradeFX = new EffectList(); - - public EffectList m_randomBuyFX = new EffectList(); - - public EffectList m_randomSellFX = new EffectList(); - - private bool m_didGreet; - - private bool m_didGoodbye; - - private Animator m_animator; - - private LookAt m_lookAt; - - private void Start() - { - m_animator = GetComponentInChildren<Animator>(); - m_lookAt = GetComponentInChildren<LookAt>(); - InvokeRepeating("RandomTalk", m_randomTalkInterval, m_randomTalkInterval); - } - - private void Update() - { - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, m_standRange); - if ((bool)closestPlayer) - { - m_animator.SetBool("Stand", value: true); - m_lookAt.SetLoockAtTarget(closestPlayer.GetHeadPoint()); - float num = Vector3.Distance(closestPlayer.transform.position, base.transform.position); - if (!m_didGreet && num < m_greetRange) - { - m_didGreet = true; - Say(m_randomGreets, "Greet"); - m_randomGreetFX.Create(base.transform.position, Quaternion.identity); - } - if (m_didGreet && !m_didGoodbye && num > m_byeRange) - { - m_didGoodbye = true; - Say(m_randomGoodbye, "Greet"); - m_randomGoodbyeFX.Create(base.transform.position, Quaternion.identity); - } - } - else - { - m_animator.SetBool("Stand", value: false); - m_lookAt.ResetTarget(); - } - } - - private void RandomTalk() - { - if (m_animator.GetBool("Stand") && !StoreGui.IsVisible() && Player.IsPlayerInRange(base.transform.position, m_greetRange)) - { - Say(m_randomTalk, "Talk"); - m_randomTalkFX.Create(base.transform.position, Quaternion.identity); - } - } - - public string GetHoverText() - { - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] $raven_interact"); - } - - public string GetHoverName() - { - return Localization.instance.Localize(m_name); - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - StoreGui.instance.Show(this); - Say(m_randomStartTrade, "Talk"); - m_randomStartTradeFX.Create(base.transform.position, Quaternion.identity); - return false; - } - - private void DiscoverItems(Player player) - { - foreach (TradeItem item in m_items) - { - player.AddKnownItem(item.m_prefab.m_itemData); - } - } - - private void Say(List<string> texts, string trigger) - { - Say(texts[UnityEngine.Random.Range(0, texts.Count)], trigger); - } - - private void Say(string text, string trigger) - { - Chat.instance.SetNpcText(base.gameObject, Vector3.up * 1.5f, 20f, m_hideDialogDelay, "", text, large: false); - if (trigger.Length > 0) - { - m_animator.SetTrigger(trigger); - } - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - public void OnBought(TradeItem item) - { - Say(m_randomBuy, "Buy"); - m_randomBuyFX.Create(base.transform.position, Quaternion.identity); - } - - public void OnSold() - { - Say(m_randomSell, "Sell"); - m_randomSellFX.Create(base.transform.position, Quaternion.identity); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TreeBase.cs b/Valheim_v202102/Valheim/assembly_valheim/TreeBase.cs deleted file mode 100644 index 4126c97..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TreeBase.cs +++ /dev/null @@ -1,183 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class TreeBase : MonoBehaviour, IDestructible -{ - private ZNetView m_nview; - - public float m_health = 1f; - - public HitData.DamageModifiers m_damageModifiers; - - public int m_minToolTier; - - public EffectList m_destroyedEffect = new EffectList(); - - public EffectList m_hitEffect = new EffectList(); - - public EffectList m_respawnEffect = new EffectList(); - - public GameObject m_trunk; - - public GameObject m_stubPrefab; - - public GameObject m_logPrefab; - - public Transform m_logSpawnPoint; - - [Header("Drops")] - public DropTable m_dropWhenDestroyed = new DropTable(); - - public float m_spawnYOffset = 0.5f; - - public float m_spawnYStep = 0.3f; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_nview.Register<HitData>("Damage", RPC_Damage); - m_nview.Register("Grow", RPC_Grow); - m_nview.Register("Shake", RPC_Shake); - if (m_nview.IsOwner() && m_nview.GetZDO().GetFloat("health", m_health) <= 0f) - { - m_nview.Destroy(); - } - } - - public DestructibleType GetDestructibleType() - { - return DestructibleType.Tree; - } - - public void Damage(HitData hit) - { - m_nview.InvokeRPC("Damage", hit); - } - - public void Grow() - { - m_nview.InvokeRPC(ZNetView.Everybody, "Grow"); - } - - private void RPC_Grow(long uid) - { - StartCoroutine("GrowAnimation"); - } - - private IEnumerator GrowAnimation() - { - GameObject animatedTrunk = Object.Instantiate(m_trunk, m_trunk.transform.position, m_trunk.transform.rotation, base.transform); - animatedTrunk.isStatic = false; - LODGroup component = base.transform.GetComponent<LODGroup>(); - if ((bool)component) - { - component.fadeMode = LODFadeMode.None; - } - m_trunk.SetActive(value: false); - for (float t = 0f; t < 0.3f; t += Time.deltaTime) - { - float num = Mathf.Clamp01(t / 0.3f); - animatedTrunk.transform.localScale = m_trunk.transform.localScale * num; - yield return null; - } - Object.Destroy(animatedTrunk); - m_trunk.SetActive(value: true); - if (m_nview.IsOwner()) - { - m_respawnEffect.Create(base.transform.position, base.transform.rotation, base.transform); - } - } - - private void RPC_Damage(long sender, HitData hit) - { - if (!m_nview.IsOwner()) - { - return; - } - float @float = m_nview.GetZDO().GetFloat("health", m_health); - if (@float <= 0f) - { - m_nview.Destroy(); - return; - } - hit.ApplyResistance(m_damageModifiers, out var significantModifier); - float totalDamage = hit.GetTotalDamage(); - if (hit.m_toolTier < m_minToolTier) - { - DamageText.instance.ShowText(DamageText.TextType.TooHard, hit.m_point, 0f); - return; - } - DamageText.instance.ShowText(significantModifier, hit.m_point, totalDamage); - if (totalDamage <= 0f) - { - return; - } - @float -= totalDamage; - m_nview.GetZDO().Set("health", @float); - Shake(); - m_hitEffect.Create(hit.m_point, Quaternion.identity, base.transform); - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, 10f); - if ((bool)closestPlayer) - { - closestPlayer.AddNoise(100f); - } - if (@float <= 0f) - { - m_destroyedEffect.Create(base.transform.position, base.transform.rotation, base.transform); - SpawnLog(hit.m_dir); - List<GameObject> dropList = m_dropWhenDestroyed.GetDropList(); - for (int i = 0; i < dropList.Count; i++) - { - Vector2 vector = Random.insideUnitCircle * 0.5f; - Vector3 position = base.transform.position + Vector3.up * m_spawnYOffset + new Vector3(vector.x, m_spawnYStep * (float)i, vector.y); - Quaternion rotation = Quaternion.Euler(0f, Random.Range(0, 360), 0f); - Object.Instantiate(dropList[i], position, rotation); - } - base.gameObject.SetActive(value: false); - m_nview.Destroy(); - } - } - - private void Shake() - { - m_nview.InvokeRPC(ZNetView.Everybody, "Shake"); - } - - private void RPC_Shake(long uid) - { - StopCoroutine("ShakeAnimation"); - StartCoroutine("ShakeAnimation"); - } - - private IEnumerator ShakeAnimation() - { - m_trunk.gameObject.isStatic = false; - float t = Time.time; - while (Time.time - t < 1f) - { - float time = Time.time; - float num = 1f - Mathf.Clamp01((time - t) / 1f); - float num2 = num * num * num * 1.5f; - Quaternion localRotation = Quaternion.Euler(Mathf.Sin(time * 40f) * num2, 0f, Mathf.Cos(time * 0.9f * 40f) * num2); - m_trunk.transform.localRotation = localRotation; - yield return null; - } - m_trunk.transform.localRotation = Quaternion.identity; - m_trunk.gameObject.isStatic = true; - } - - private void SpawnLog(Vector3 hitDir) - { - GameObject gameObject = Object.Instantiate(m_logPrefab, m_logSpawnPoint.position, m_logSpawnPoint.rotation); - gameObject.GetComponent<ZNetView>().SetLocalScale(base.transform.localScale); - Rigidbody component = gameObject.GetComponent<Rigidbody>(); - component.mass *= base.transform.localScale.x; - component.ResetInertiaTensor(); - component.AddForceAtPosition(hitDir * 0.2f, gameObject.transform.position + Vector3.up * 4f * base.transform.localScale.y, ForceMode.VelocityChange); - if ((bool)m_stubPrefab) - { - Object.Instantiate(m_stubPrefab, base.transform.position, base.transform.rotation).GetComponent<ZNetView>().SetLocalScale(base.transform.localScale); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/TreeLog.cs b/Valheim_v202102/Valheim/assembly_valheim/TreeLog.cs deleted file mode 100644 index a2ec07b..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/TreeLog.cs +++ /dev/null @@ -1,139 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class TreeLog : MonoBehaviour, IDestructible -{ - public float m_health = 60f; - - public HitData.DamageModifiers m_damages; - - public int m_minToolTier; - - public EffectList m_destroyedEffect = new EffectList(); - - public EffectList m_hitEffect = new EffectList(); - - public DropTable m_dropWhenDestroyed = new DropTable(); - - public GameObject m_subLogPrefab; - - public Transform[] m_subLogPoints = new Transform[0]; - - public float m_spawnDistance = 2f; - - public float m_hitNoise = 100f; - - private Rigidbody m_body; - - private ZNetView m_nview; - - private bool m_firstFrame = true; - - private void Awake() - { - m_body = GetComponent<Rigidbody>(); - m_body.maxDepenetrationVelocity = 1f; - m_nview = GetComponent<ZNetView>(); - m_nview.Register<HitData>("Damage", RPC_Damage); - if (m_nview.IsOwner()) - { - float @float = m_nview.GetZDO().GetFloat("health", -1f); - if (@float == -1f) - { - m_nview.GetZDO().Set("health", m_health); - } - else if (@float <= 0f) - { - m_nview.Destroy(); - } - } - Invoke("EnableDamage", 0.2f); - } - - private void EnableDamage() - { - m_firstFrame = false; - } - - public DestructibleType GetDestructibleType() - { - return DestructibleType.Tree; - } - - public void Damage(HitData hit) - { - if (!m_firstFrame && m_nview.IsValid()) - { - m_nview.InvokeRPC("Damage", hit); - } - } - - private void RPC_Damage(long sender, HitData hit) - { - if (!m_nview.IsOwner()) - { - return; - } - float @float = m_nview.GetZDO().GetFloat("health"); - if (@float <= 0f) - { - return; - } - hit.ApplyResistance(m_damages, out var significantModifier); - float totalDamage = hit.GetTotalDamage(); - if (hit.m_toolTier < m_minToolTier) - { - DamageText.instance.ShowText(DamageText.TextType.TooHard, hit.m_point, 0f); - return; - } - if ((bool)m_body) - { - m_body.AddForceAtPosition(hit.m_dir * hit.m_pushForce * 2f, hit.m_point, ForceMode.Impulse); - } - DamageText.instance.ShowText(significantModifier, hit.m_point, totalDamage); - if (totalDamage <= 0f) - { - return; - } - @float -= totalDamage; - if (@float < 0f) - { - @float = 0f; - } - m_nview.GetZDO().Set("health", @float); - m_hitEffect.Create(hit.m_point, Quaternion.identity, base.transform); - if (m_hitNoise > 0f) - { - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, 10f); - if ((bool)closestPlayer) - { - closestPlayer.AddNoise(m_hitNoise); - } - } - if (@float <= 0f) - { - Destroy(); - } - } - - private void Destroy() - { - ZNetScene.instance.Destroy(base.gameObject); - m_destroyedEffect.Create(base.transform.position, base.transform.rotation, base.transform); - List<GameObject> dropList = m_dropWhenDestroyed.GetDropList(); - for (int i = 0; i < dropList.Count; i++) - { - Vector3 position = base.transform.position + base.transform.up * Random.Range(0f - m_spawnDistance, m_spawnDistance) + Vector3.up * 0.3f * i; - Quaternion rotation = Quaternion.Euler(0f, Random.Range(0, 360), 0f); - Object.Instantiate(dropList[i], position, rotation); - } - if (m_subLogPrefab != null) - { - Transform[] subLogPoints = m_subLogPoints; - foreach (Transform transform in subLogPoints) - { - Object.Instantiate(m_subLogPrefab, transform.position, base.transform.rotation).GetComponent<ZNetView>().SetLocalScale(base.transform.localScale); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Tutorial.cs b/Valheim_v202102/Valheim/assembly_valheim/Tutorial.cs deleted file mode 100644 index 564d399..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Tutorial.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class Tutorial : MonoBehaviour -{ - [Serializable] - public class TutorialText - { - public string m_name; - - public string m_topic = ""; - - public string m_label = ""; - - [TextArea] - public string m_text = ""; - } - - public List<TutorialText> m_texts = new List<TutorialText>(); - - public RectTransform m_windowRoot; - - public Text m_topic; - - public Text m_text; - - public GameObject m_ravenPrefab; - - private static Tutorial m_instance; - - private Queue<string> m_tutQueue = new Queue<string>(); - - public static Tutorial instance => m_instance; - - private void Awake() - { - m_instance = this; - m_windowRoot.gameObject.SetActive(value: false); - } - - private void Update() - { - } - - public void ShowText(string name, bool force) - { - TutorialText tutorialText = m_texts.Find((TutorialText x) => x.m_name == name); - if (tutorialText != null) - { - SpawnRaven(tutorialText.m_name, tutorialText.m_topic, tutorialText.m_text, tutorialText.m_label); - } - } - - private void SpawnRaven(string key, string topic, string text, string label) - { - if (!Raven.IsInstantiated()) - { - UnityEngine.Object.Instantiate(m_ravenPrefab, new Vector3(0f, 0f, 0f), Quaternion.identity); - } - Raven.AddTempText(key, topic, text, label, munin: false); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Vagon.cs b/Valheim_v202102/Valheim/assembly_valheim/Vagon.cs deleted file mode 100644 index 8539bf3..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Vagon.cs +++ /dev/null @@ -1,333 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class Vagon : MonoBehaviour, Hoverable, Interactable -{ - [Serializable] - public class LoadData - { - public GameObject m_gameobject; - - public float m_minPercentage; - } - - private static List<Vagon> m_instances = new List<Vagon>(); - - public Transform m_attachPoint; - - public string m_name = "Wagon"; - - public float m_detachDistance = 2f; - - public Vector3 m_attachOffset = new Vector3(0f, 0.8f, 0f); - - public Container m_container; - - public Transform m_lineAttachPoints0; - - public Transform m_lineAttachPoints1; - - public Vector3 m_lineAttachOffset = new Vector3(0f, 1f, 0f); - - public float m_breakForce = 10000f; - - public float m_spring = 5000f; - - public float m_springDamping = 1000f; - - public float m_baseMass = 20f; - - public float m_itemWeightMassFactor = 1f; - - public AudioSource[] m_wheelLoops; - - public float m_minPitch = 1f; - - public float m_maxPitch = 1.5f; - - public float m_maxPitchVel = 10f; - - public float m_maxVol = 1f; - - public float m_maxVolVel = 10f; - - public float m_audioChangeSpeed = 2f; - - public Rigidbody[] m_wheels = new Rigidbody[0]; - - public List<LoadData> m_loadVis = new List<LoadData>(); - - private ZNetView m_nview; - - private ConfigurableJoint m_attachJoin; - - private Rigidbody m_body; - - private LineRenderer m_lineRenderer; - - private Rigidbody[] m_bodies; - - private Humanoid m_useRequester; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - if (m_nview.GetZDO() == null) - { - base.enabled = false; - return; - } - m_instances.Add(this); - Heightmap.ForceGenerateAll(); - m_body = GetComponent<Rigidbody>(); - m_bodies = GetComponentsInChildren<Rigidbody>(); - m_lineRenderer = GetComponent<LineRenderer>(); - Rigidbody[] bodies = m_bodies; - for (int i = 0; i < bodies.Length; i++) - { - bodies[i].maxDepenetrationVelocity = 2f; - } - m_nview.Register("RequestOwn", RPC_RequestOwn); - m_nview.Register("RequestDenied", RPC_RequestDenied); - InvokeRepeating("UpdateMass", 0f, 5f); - InvokeRepeating("UpdateLoadVisualization", 0f, 3f); - } - - private void OnDestroy() - { - m_instances.Remove(this); - } - - public string GetHoverName() - { - return m_name; - } - - public string GetHoverText() - { - return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] Use"); - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - m_useRequester = character; - if (!m_nview.IsOwner()) - { - m_nview.InvokeRPC("RequestOwn"); - } - return false; - } - - public void RPC_RequestOwn(long sender) - { - if (m_nview.IsOwner()) - { - if (InUse()) - { - ZLog.Log("Requested use, but is already in use"); - m_nview.InvokeRPC(sender, "RequestDenied"); - } - else - { - m_nview.GetZDO().SetOwner(sender); - } - } - } - - private void RPC_RequestDenied(long sender) - { - ZLog.Log("Got request denied"); - if ((bool)m_useRequester) - { - m_useRequester.Message(MessageHud.MessageType.Center, m_name + " is in use by someone else"); - m_useRequester = null; - } - } - - private void FixedUpdate() - { - UpdateAudio(Time.fixedDeltaTime); - if (m_nview.IsOwner()) - { - if ((bool)m_useRequester) - { - if (IsAttached()) - { - Detach(); - } - else if (CanAttach(m_useRequester.gameObject)) - { - AttachTo(m_useRequester.gameObject); - } - else - { - m_useRequester.Message(MessageHud.MessageType.Center, "Not in the right position"); - } - m_useRequester = null; - } - if (IsAttached() && !CanAttach(m_attachJoin.connectedBody.gameObject)) - { - Detach(); - } - } - else if (IsAttached()) - { - Detach(); - } - } - - private void LateUpdate() - { - if (IsAttached()) - { - m_lineRenderer.enabled = true; - m_lineRenderer.SetPosition(0, m_lineAttachPoints0.position); - m_lineRenderer.SetPosition(1, m_attachJoin.connectedBody.transform.position + m_lineAttachOffset); - m_lineRenderer.SetPosition(2, m_lineAttachPoints1.position); - } - else - { - m_lineRenderer.enabled = false; - } - } - - public bool IsAttached(Character character) - { - if ((bool)m_attachJoin && m_attachJoin.connectedBody.gameObject == character.gameObject) - { - return true; - } - return false; - } - - public bool InUse() - { - if ((bool)m_container && m_container.IsInUse()) - { - return true; - } - return IsAttached(); - } - - private bool IsAttached() - { - return m_attachJoin != null; - } - - private bool CanAttach(GameObject go) - { - if (base.transform.up.y < 0.1f) - { - return false; - } - Humanoid component = go.GetComponent<Humanoid>(); - if ((bool)component && component.InDodge()) - { - return false; - } - return Vector3.Distance(go.transform.position + m_attachOffset, m_attachPoint.position) < m_detachDistance; - } - - private void AttachTo(GameObject go) - { - DetachAll(); - m_attachJoin = base.gameObject.AddComponent<ConfigurableJoint>(); - m_attachJoin.autoConfigureConnectedAnchor = false; - m_attachJoin.anchor = m_attachPoint.localPosition; - m_attachJoin.connectedAnchor = m_attachOffset; - m_attachJoin.breakForce = m_breakForce; - m_attachJoin.xMotion = ConfigurableJointMotion.Limited; - m_attachJoin.yMotion = ConfigurableJointMotion.Limited; - m_attachJoin.zMotion = ConfigurableJointMotion.Limited; - SoftJointLimit linearLimit = default(SoftJointLimit); - linearLimit.limit = 0.001f; - m_attachJoin.linearLimit = linearLimit; - SoftJointLimitSpring linearLimitSpring = default(SoftJointLimitSpring); - linearLimitSpring.spring = m_spring; - linearLimitSpring.damper = m_springDamping; - m_attachJoin.linearLimitSpring = linearLimitSpring; - m_attachJoin.zMotion = ConfigurableJointMotion.Locked; - m_attachJoin.connectedBody = go.GetComponent<Rigidbody>(); - } - - private static void DetachAll() - { - foreach (Vagon instance in m_instances) - { - instance.Detach(); - } - } - - private void Detach() - { - if ((bool)m_attachJoin) - { - UnityEngine.Object.Destroy(m_attachJoin); - m_attachJoin = null; - m_body.WakeUp(); - m_body.AddForce(0f, 1f, 0f); - } - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private void UpdateMass() - { - if (m_nview.IsOwner() && !(m_container == null)) - { - float totalWeight = m_container.GetInventory().GetTotalWeight(); - float mass = m_baseMass + totalWeight * m_itemWeightMassFactor; - SetMass(mass); - } - } - - private void SetMass(float mass) - { - float mass2 = mass / (float)m_bodies.Length; - Rigidbody[] bodies = m_bodies; - for (int i = 0; i < bodies.Length; i++) - { - bodies[i].mass = mass2; - } - } - - private void UpdateLoadVisualization() - { - if (m_container == null) - { - return; - } - float num = m_container.GetInventory().SlotsUsedPercentage(); - foreach (LoadData loadVi in m_loadVis) - { - loadVi.m_gameobject.SetActive(num >= loadVi.m_minPercentage); - } - } - - private void UpdateAudio(float dt) - { - float num = 0f; - Rigidbody[] wheels = m_wheels; - foreach (Rigidbody rigidbody in wheels) - { - num += rigidbody.angularVelocity.magnitude; - } - num /= (float)m_wheels.Length; - float target = Mathf.Lerp(m_minPitch, m_maxPitch, Mathf.Clamp01(num / m_maxPitchVel)); - float target2 = m_maxVol * Mathf.Clamp01(num / m_maxVolVel); - AudioSource[] wheelLoops = m_wheelLoops; - foreach (AudioSource obj in wheelLoops) - { - obj.volume = Mathf.MoveTowards(obj.volume, target2, m_audioChangeSpeed * dt); - obj.pitch = Mathf.MoveTowards(obj.pitch, target, m_audioChangeSpeed * dt); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Valheim.csproj b/Valheim_v202102/Valheim/assembly_valheim/Valheim.csproj deleted file mode 100644 index f3dd810..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Valheim.csproj +++ /dev/null @@ -1,273 +0,0 @@ -<Project Sdk="Microsoft.NET.Sdk"> - <PropertyGroup> - <AssemblyName>assembly_valheim</AssemblyName> - <GenerateAssemblyInfo>False</GenerateAssemblyInfo> - <TargetFramework>net40</TargetFramework> - </PropertyGroup> - <PropertyGroup> - <LangVersion>11.0</LangVersion> - <AllowUnsafeBlocks>True</AllowUnsafeBlocks> - </PropertyGroup> - <PropertyGroup /> - <ItemGroup> - <Reference Include="assembly_googleanalytics"> - <HintPath>..\..\Valheim\valheim_Data\Managed\assembly_googleanalytics.dll</HintPath> - </Reference> - <Reference Include="assembly_guiutils"> - <HintPath>..\..\Valheim\valheim_Data\Managed\assembly_guiutils.dll</HintPath> - </Reference> - <Reference Include="assembly_lux"> - <HintPath>..\..\Valheim\valheim_Data\Managed\assembly_lux.dll</HintPath> - </Reference> - <Reference Include="assembly_postprocessing"> - <HintPath>..\..\Valheim\valheim_Data\Managed\assembly_postprocessing.dll</HintPath> - </Reference> - <Reference Include="assembly_simplemeshcombine"> - <HintPath>..\..\Valheim\valheim_Data\Managed\assembly_simplemeshcombine.dll</HintPath> - </Reference> - <Reference Include="assembly_steamworks"> - <HintPath>..\..\Valheim\valheim_Data\Managed\assembly_steamworks.dll</HintPath> - </Reference> - <Reference Include="assembly_sunshafts"> - <HintPath>..\..\Valheim\valheim_Data\Managed\assembly_sunshafts.dll</HintPath> - </Reference> - <Reference Include="assembly_utils"> - <HintPath>..\..\Valheim\valheim_Data\Managed\assembly_utils.dll</HintPath> - </Reference> - <Reference Include="Mono.Security"> - <HintPath>..\..\Valheim\valheim_Data\Managed\Mono.Security.dll</HintPath> - </Reference> - <Reference Include="mscorlib"> - <HintPath>..\Valheim\valheim_Data\Managed\mscorlib.dll</HintPath> - </Reference> - <Reference Include="netstandard"> - <HintPath>..\..\Valheim\valheim_Data\Managed\netstandard.dll</HintPath> - </Reference> - <Reference Include="System.ComponentModel.Composition"> - <HintPath>..\Valheim\valheim_Data\Managed\System.ComponentModel.Composition.dll</HintPath> - </Reference> - <Reference Include="System.Configuration"> - <HintPath>..\Valheim\valheim_Data\Managed\System.Configuration.dll</HintPath> - </Reference> - <Reference Include="System.Core" /> - <Reference Include="System.Diagnostics.StackTrace"> - <HintPath>..\..\Valheim\valheim_Data\Managed\System.Diagnostics.StackTrace.dll</HintPath> - </Reference> - <Reference Include="System.EnterpriseServices"> - <HintPath>..\Valheim\valheim_Data\Managed\System.EnterpriseServices.dll</HintPath> - </Reference> - <Reference Include="System.Globalization.Extensions"> - <HintPath>..\..\Valheim\valheim_Data\Managed\System.Globalization.Extensions.dll</HintPath> - </Reference> - <Reference Include="System.IO.Compression"> - <HintPath>..\..\Valheim\valheim_Data\Managed\System.IO.Compression.dll</HintPath> - </Reference> - <Reference Include="System.IO.Compression.FileSystem"> - <HintPath>..\..\Valheim\valheim_Data\Managed\System.IO.Compression.FileSystem.dll</HintPath> - </Reference> - <Reference Include="System.Net.Http"> - <HintPath>..\..\Valheim\valheim_Data\Managed\System.Net.Http.dll</HintPath> - </Reference> - <Reference Include="System.Runtime.Serialization.Xml"> - <HintPath>..\..\Valheim\valheim_Data\Managed\System.Runtime.Serialization.Xml.dll</HintPath> - </Reference> - <Reference Include="System.ServiceModel.Internals"> - <HintPath>..\..\Valheim\valheim_Data\Managed\System.ServiceModel.Internals.dll</HintPath> - </Reference> - <Reference Include="System.Transactions"> - <HintPath>..\Valheim\valheim_Data\Managed\System.Transactions.dll</HintPath> - </Reference> - <Reference Include="System.Xml.XPath.XDocument"> - <HintPath>..\..\Valheim\valheim_Data\Managed\System.Xml.XPath.XDocument.dll</HintPath> - </Reference> - <Reference Include="Unity.TextMeshPro"> - <HintPath>..\..\Valheim\valheim_Data\Managed\Unity.TextMeshPro.dll</HintPath> - </Reference> - <Reference Include="Unity.Timeline"> - <HintPath>..\..\Valheim\valheim_Data\Managed\Unity.Timeline.dll</HintPath> - </Reference> - <Reference Include="UnityEngine"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.AccessibilityModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.AccessibilityModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.AIModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.AIModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.AndroidJNIModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.AndroidJNIModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.AnimationModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.AnimationModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.ARModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.ARModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.AssetBundleModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.AssetBundleModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.AudioModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.AudioModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.ClothModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.ClothModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.ClusterInputModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.ClusterInputModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.ClusterRendererModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.ClusterRendererModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.CoreModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.CoreModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.CrashReportingModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.CrashReportingModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.DirectorModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.DirectorModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.DSPGraphModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.DSPGraphModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.GameCenterModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.GameCenterModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.GridModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.GridModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.HotReloadModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.HotReloadModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.ImageConversionModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.ImageConversionModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.IMGUIModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.IMGUIModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.InputLegacyModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.InputLegacyModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.InputModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.InputModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.JSONSerializeModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.JSONSerializeModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.LocalizationModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.LocalizationModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.ParticleSystemModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.ParticleSystemModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.PerformanceReportingModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.PerformanceReportingModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.Physics2DModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.Physics2DModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.PhysicsModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.PhysicsModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.ProfilerModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.ProfilerModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.ScreenCaptureModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.ScreenCaptureModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.SharedInternalsModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.SharedInternalsModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.SpriteMaskModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.SpriteMaskModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.SpriteShapeModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.SpriteShapeModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.StreamingModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.StreamingModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.SubstanceModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.SubstanceModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.SubsystemsModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.SubsystemsModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.TerrainModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.TerrainModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.TerrainPhysicsModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.TerrainPhysicsModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.TextCoreModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.TextCoreModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.TextRenderingModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.TextRenderingModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.TilemapModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.TilemapModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.TLSModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.TLSModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UI"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UI.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UIElementsModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UIElementsModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UIModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UIModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UmbraModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UmbraModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UNETModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UNETModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UnityAnalyticsModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UnityAnalyticsModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UnityConnectModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UnityConnectModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UnityTestProtocolModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UnityTestProtocolModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UnityWebRequestAssetBundleModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UnityWebRequestAssetBundleModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UnityWebRequestAudioModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UnityWebRequestAudioModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UnityWebRequestModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UnityWebRequestModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UnityWebRequestTextureModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UnityWebRequestTextureModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.UnityWebRequestWWWModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.UnityWebRequestWWWModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.VehiclesModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.VehiclesModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.VFXModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.VFXModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.VideoModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.VideoModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.VRModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.VRModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.WindModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.WindModule.dll</HintPath> - </Reference> - <Reference Include="UnityEngine.XRModule"> - <HintPath>..\..\Valheim\valheim_Data\Managed\UnityEngine.XRModule.dll</HintPath> - </Reference> - </ItemGroup> -</Project>
\ No newline at end of file diff --git a/Valheim_v202102/Valheim/assembly_valheim/Valheim.sln b/Valheim_v202102/Valheim/assembly_valheim/Valheim.sln deleted file mode 100644 index f4adca7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Valheim.sln +++ /dev/null @@ -1,25 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.4.33213.308 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Valheim", "Valheim.csproj", "{876E5906-A8FC-4313-9555-D7B33E28A73D}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {876E5906-A8FC-4313-9555-D7B33E28A73D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {876E5906-A8FC-4313-9555-D7B33E28A73D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {876E5906-A8FC-4313-9555-D7B33E28A73D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {876E5906-A8FC-4313-9555-D7B33E28A73D}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {F47B53F2-7311-4FAB-9D8C-F70D295285F0} - EndGlobalSection -EndGlobal diff --git a/Valheim_v202102/Valheim/assembly_valheim/Valkyrie.cs b/Valheim_v202102/Valheim/assembly_valheim/Valkyrie.cs deleted file mode 100644 index ee2aa56..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Valkyrie.cs +++ /dev/null @@ -1,192 +0,0 @@ -using System; -using UnityEngine; - -public class Valkyrie : MonoBehaviour -{ - public float m_startPause = 10f; - - public float m_speed = 10f; - - public float m_turnRate = 5f; - - public float m_dropHeight = 10f; - - public float m_startAltitude = 500f; - - public float m_descentAltitude = 100f; - - public float m_startDistance = 500f; - - public float m_startDescentDistance = 200f; - - public Vector3 m_attachOffset = new Vector3(0f, 0f, 1f); - - public float m_textDuration = 5f; - - public string m_introTopic = ""; - - [TextArea] - public string m_introText = ""; - - public Transform m_attachPoint; - - private Vector3 m_targetPoint; - - private Vector3 m_descentStart; - - private Vector3 m_flyAwayPoint; - - private bool m_descent; - - private bool m_droppedPlayer; - - private Animator m_animator; - - private ZNetView m_nview; - - private float m_timer; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_animator = GetComponentInChildren<Animator>(); - if (!m_nview.IsOwner()) - { - base.enabled = false; - return; - } - ZLog.Log("Setting up valkyrie "); - float f = UnityEngine.Random.value * (float)Math.PI * 2f; - Vector3 vector = new Vector3(Mathf.Sin(f), 0f, Mathf.Cos(f)); - Vector3 vector2 = Vector3.Cross(vector, Vector3.up); - Player.m_localPlayer.SetIntro(intro: true); - m_targetPoint = Player.m_localPlayer.transform.position + new Vector3(0f, m_dropHeight, 0f); - Vector3 position = m_targetPoint + vector * m_startDistance; - position.y = m_startAltitude; - base.transform.position = position; - m_descentStart = m_targetPoint + vector * m_startDescentDistance + vector2 * 200f; - m_descentStart.y = m_descentAltitude; - Vector3 vector3 = m_targetPoint - m_descentStart; - vector3.y = 0f; - vector3.Normalize(); - m_flyAwayPoint = m_targetPoint + vector3 * m_startDescentDistance; - m_flyAwayPoint.y = m_startAltitude; - ShowText(); - SyncPlayer(doNetworkSync: true); - ZLog.Log(string.Concat("World pos ", base.transform.position, " ", ZNet.instance.GetReferencePosition())); - } - - private void ShowText() - { - TextViewer.instance.ShowText(TextViewer.Style.Intro, m_introTopic, m_introText, autoHide: false); - } - - private void HideText() - { - } - - private void OnDestroy() - { - ZLog.Log("Destroying valkyrie"); - } - - private void FixedUpdate() - { - UpdateValkyrie(Time.fixedDeltaTime); - if (!m_droppedPlayer) - { - SyncPlayer(doNetworkSync: true); - } - } - - private void LateUpdate() - { - if (!m_droppedPlayer) - { - SyncPlayer(doNetworkSync: false); - } - } - - private void UpdateValkyrie(float dt) - { - m_timer += dt; - if (m_timer < m_startPause) - { - return; - } - Vector3 vector = (m_droppedPlayer ? m_flyAwayPoint : ((!m_descent) ? m_descentStart : m_targetPoint)); - if (Utils.DistanceXZ(vector, base.transform.position) < 0.5f) - { - if (!m_descent) - { - m_descent = true; - ZLog.Log("Starting descent"); - } - else if (!m_droppedPlayer) - { - ZLog.Log("We are here"); - DropPlayer(); - } - else - { - m_nview.Destroy(); - } - } - Vector3 normalized = (vector - base.transform.position).normalized; - Vector3 vector2 = base.transform.position + normalized * 25f; - if (ZoneSystem.instance.GetGroundHeight(vector2, out var height)) - { - vector2.y = Mathf.Max(vector2.y, height + m_dropHeight); - } - Vector3 normalized2 = (vector2 - base.transform.position).normalized; - Quaternion quaternion = Quaternion.LookRotation(normalized2); - Vector3 to = normalized2; - to.y = 0f; - to.Normalize(); - Vector3 forward = base.transform.forward; - forward.y = 0f; - forward.Normalize(); - float num = Mathf.Clamp(Vector3.SignedAngle(forward, to, Vector3.up), -30f, 30f) / 30f; - quaternion = Quaternion.Euler(0f, 0f, num * 45f) * quaternion; - float num2 = (m_droppedPlayer ? (m_turnRate * 4f) : m_turnRate); - base.transform.rotation = Quaternion.RotateTowards(base.transform.rotation, quaternion, num2 * dt); - Vector3 vector3 = base.transform.forward * m_speed; - Vector3 vector4 = base.transform.position + vector3 * dt; - if (ZoneSystem.instance.GetGroundHeight(vector4, out var height2)) - { - vector4.y = Mathf.Max(vector4.y, height2 + m_dropHeight); - } - base.transform.position = vector4; - } - - private void DropPlayer() - { - ZLog.Log("We are here"); - m_droppedPlayer = true; - Vector3 forward = base.transform.forward; - forward.y = 0f; - forward.Normalize(); - Player.m_localPlayer.transform.rotation = Quaternion.LookRotation(forward); - Player.m_localPlayer.SetIntro(intro: false); - m_animator.SetBool("dropped", value: true); - } - - private void SyncPlayer(bool doNetworkSync) - { - Player localPlayer = Player.m_localPlayer; - if (localPlayer == null) - { - ZLog.LogWarning("No local player"); - return; - } - localPlayer.transform.rotation = m_attachPoint.rotation; - localPlayer.transform.position = m_attachPoint.position - localPlayer.transform.TransformVector(m_attachOffset); - localPlayer.GetComponent<Rigidbody>().position = localPlayer.transform.position; - if (doNetworkSync) - { - ZNet.instance.SetReferencePosition(localPlayer.transform.position); - localPlayer.GetComponent<ZSyncTransform>().SyncNow(); - GetComponent<ZSyncTransform>().SyncNow(); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/VariantDialog.cs b/Valheim_v202102/Valheim/assembly_valheim/VariantDialog.cs deleted file mode 100644 index 30f3ea6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/VariantDialog.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; -using UnityEngine.UI; - -public class VariantDialog : MonoBehaviour -{ - public Transform m_listRoot; - - public GameObject m_elementPrefab; - - public float m_spacing = 70f; - - public int m_gridWidth = 5; - - private List<GameObject> m_elements = new List<GameObject>(); - - public Action<int> m_selected; - - public void Setup(ItemDrop.ItemData item) - { - base.gameObject.SetActive(value: true); - foreach (GameObject element in m_elements) - { - UnityEngine.Object.Destroy(element); - } - m_elements.Clear(); - for (int i = 0; i < item.m_shared.m_variants; i++) - { - Sprite sprite = item.m_shared.m_icons[i]; - int num = i / m_gridWidth; - int num2 = i % m_gridWidth; - GameObject gameObject = UnityEngine.Object.Instantiate(m_elementPrefab, Vector3.zero, Quaternion.identity, m_listRoot); - gameObject.SetActive(value: true); - (gameObject.transform as RectTransform).anchoredPosition = new Vector2((float)num2 * m_spacing, (float)(-num) * m_spacing); - Button component = gameObject.transform.Find("Button").GetComponent<Button>(); - int buttonIndex = i; - component.onClick.AddListener(delegate - { - OnClicked(buttonIndex); - }); - component.GetComponent<Image>().sprite = sprite; - m_elements.Add(gameObject); - } - } - - public void OnClose() - { - base.gameObject.SetActive(value: false); - } - - private void OnClicked(int index) - { - ZLog.Log("Clicked button " + index); - base.gameObject.SetActive(value: false); - m_selected(index); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Vegvisir.cs b/Valheim_v202102/Valheim/assembly_valheim/Vegvisir.cs deleted file mode 100644 index 7e8ccb3..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Vegvisir.cs +++ /dev/null @@ -1,38 +0,0 @@ -using UnityEngine; - -public class Vegvisir : MonoBehaviour, Hoverable, Interactable -{ - public string m_name = "$piece_vegvisir"; - - public string m_locationName = ""; - - public string m_pinName = "Pin"; - - public Minimap.PinType m_pinType; - - public string GetHoverText() - { - return Localization.instance.Localize(m_name + " " + m_pinName + "\n[<color=yellow><b>$KEY_Use</b></color>] $piece_register_location "); - } - - public string GetHoverName() - { - return m_name; - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - Game.instance.DiscoverClosestLocation(m_locationName, base.transform.position, m_pinName, (int)m_pinType); - GoogleAnalyticsV4.instance.LogEvent("Game", "Vegvisir", m_locationName, 0L); - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Version.cs b/Valheim_v202102/Valheim/assembly_valheim/Version.cs deleted file mode 100644 index 9c05fc7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Version.cs +++ /dev/null @@ -1,101 +0,0 @@ -using UnityEngine; - -internal class Version -{ - public static int m_major = 0; - - public static int m_minor = 141; - - public static int m_patch = 2; - - public static int m_playerVersion = 32; - - public static int[] m_compatiblePlayerVersions = new int[5] { 31, 30, 29, 28, 27 }; - - public static int m_worldVersion = 26; - - public static int[] m_compatibleWorldVersions = new int[16] - { - 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, - 15, 14, 13, 11, 10, 9 - }; - - public static int m_worldGenVersion = 1; - - public static string GetVersionString() - { - return CombineVersion(m_major, m_minor, m_patch); - } - - public static bool IsVersionNewer(int major, int minor, int patch) - { - if (major > m_major) - { - return true; - } - if (major == m_major && minor > m_minor) - { - return true; - } - if (major == m_major && minor == m_minor) - { - if (m_patch >= 0) - { - return patch > m_patch; - } - if (patch >= 0) - { - return true; - } - return patch < m_patch; - } - return false; - } - - public static string CombineVersion(int major, int minor, int patch) - { - if (patch == 0) - { - return major + "." + minor; - } - if (patch < 0) - { - return major + "." + minor + ".rc" + Mathf.Abs(patch); - } - return major + "." + minor + "." + patch; - } - - public static bool IsWorldVersionCompatible(int version) - { - if (version == m_worldVersion) - { - return true; - } - int[] compatibleWorldVersions = m_compatibleWorldVersions; - foreach (int num in compatibleWorldVersions) - { - if (version == num) - { - return true; - } - } - return false; - } - - public static bool IsPlayerVersionCompatible(int version) - { - if (version == m_playerVersion) - { - return true; - } - int[] compatiblePlayerVersions = m_compatiblePlayerVersions; - foreach (int num in compatiblePlayerVersions) - { - if (version == num) - { - return true; - } - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/VisEquipment.cs b/Valheim_v202102/Valheim/assembly_valheim/VisEquipment.cs deleted file mode 100644 index 7eba531..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/VisEquipment.cs +++ /dev/null @@ -1,1022 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -//player װ -public class VisEquipment : MonoBehaviour -{ - [Serializable] - public class PlayerModel - { - public Mesh m_mesh; - - public Material m_baseMaterial; - } - - public SkinnedMeshRenderer m_bodyModel; - - [Header("Attachment points")] - public Transform m_leftHand; - - public Transform m_rightHand; - - public Transform m_helmet; - - public Transform m_backShield; - - public Transform m_backMelee; - - public Transform m_backTwohandedMelee; - - public Transform m_backBow; - - public Transform m_backTool; - - public Transform m_backAtgeir; - - public CapsuleCollider[] m_clothColliders = new CapsuleCollider[0]; - - public PlayerModel[] m_models = new PlayerModel[0]; - - public bool m_isPlayer; - - public bool m_useAllTrails; - - private string m_leftItem = ""; - - private string m_rightItem = ""; - - private string m_chestItem = ""; - - private string m_legItem = ""; - - private string m_helmetItem = ""; - - private string m_shoulderItem = ""; - - private string m_beardItem = ""; - - private string m_hairItem = ""; - - private string m_utilityItem = ""; - - private string m_leftBackItem = ""; - - private string m_rightBackItem = ""; - - private int m_shoulderItemVariant; - - private int m_leftItemVariant; - - private int m_leftBackItemVariant; - - private GameObject m_leftItemInstance; - - private GameObject m_rightItemInstance; - - private GameObject m_helmetItemInstance; - - private List<GameObject> m_chestItemInstances; - - private List<GameObject> m_legItemInstances; - - private List<GameObject> m_shoulderItemInstances; - - private List<GameObject> m_utilityItemInstances; - - private GameObject m_beardItemInstance; - - private GameObject m_hairItemInstance; - - private GameObject m_leftBackItemInstance; - - private GameObject m_rightBackItemInstance; - - private int m_currentLeftItemHash; - - private int m_currentRightItemHash; - - private int m_currentChestItemHash; - - private int m_currentLegItemHash; - - private int m_currentHelmetItemHash; - - private int m_currentShoulderItemHash; - - private int m_currentBeardItemHash; - - private int m_currentHairItemHash; - - private int m_currentUtilityItemHash; - - private int m_currentLeftBackItemHash; - - private int m_currentRightBackItemHash; - - private int m_currenShoulderItemVariant; - - private int m_currentLeftItemVariant; - - private int m_currentLeftBackItemVariant; - - private bool m_helmetHideHair; - - private Texture m_emptyBodyTexture; - - private int m_modelIndex; - - private Vector3 m_skinColor = Vector3.one; - - private Vector3 m_hairColor = Vector3.one; - - private int m_currentModelIndex; - - private ZNetView m_nview; - - private GameObject m_visual; - - private LODGroup m_lodGroup; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - Transform transform = base.transform.Find("Visual"); - if (transform == null) - { - transform = base.transform; - } - m_visual = transform.gameObject; - m_lodGroup = m_visual.GetComponentInChildren<LODGroup>(); - if (m_bodyModel != null && m_bodyModel.material.HasProperty("_ChestTex")) - { - m_emptyBodyTexture = m_bodyModel.material.GetTexture("_ChestTex"); - } - } - - private void Start() - { - UpdateVisuals(); - } - - public void SetWeaponTrails(bool enabled) - { - if (m_useAllTrails) - { - MeleeWeaponTrail[] componentsInChildren = base.gameObject.GetComponentsInChildren<MeleeWeaponTrail>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - componentsInChildren[i].Emit = enabled; - } - } - else if ((bool)m_rightItemInstance) - { - MeleeWeaponTrail[] componentsInChildren = m_rightItemInstance.GetComponentsInChildren<MeleeWeaponTrail>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - componentsInChildren[i].Emit = enabled; - } - } - } - - public void SetModel(int index) - { - if (m_modelIndex != index && index >= 0 && index < m_models.Length) - { - ZLog.Log("Vis equip model set to " + index); - m_modelIndex = index; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("ModelIndex", m_modelIndex); - } - } - } - - public void SetSkinColor(Vector3 color) - { - if (!(color == m_skinColor)) - { - m_skinColor = color; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("SkinColor", m_skinColor); - } - } - } - - public void SetHairColor(Vector3 color) - { - if (!(m_hairColor == color)) - { - m_hairColor = color; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("HairColor", m_hairColor); - } - } - } - - public void SetLeftItem(string name, int variant) - { - if (!(m_leftItem == name) || m_leftItemVariant != variant) - { - m_leftItem = name; - m_leftItemVariant = variant; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("LeftItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - m_nview.GetZDO().Set("LeftItemVariant", variant); - } - } - } - - public void SetRightItem(string name) - { - if (!(m_rightItem == name)) - { - m_rightItem = name; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("RightItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - } - } - } - - public void SetLeftBackItem(string name, int variant) - { - if (!(m_leftBackItem == name) || m_leftBackItemVariant != variant) - { - m_leftBackItem = name; - m_leftBackItemVariant = variant; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("LeftBackItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - m_nview.GetZDO().Set("LeftBackItemVariant", variant); - } - } - } - - public void SetRightBackItem(string name) - { - if (!(m_rightBackItem == name)) - { - m_rightBackItem = name; - ZLog.Log("Right back item " + name); - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("RightBackItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - } - } - } - - public void SetChestItem(string name) - { - if (!(m_chestItem == name)) - { - m_chestItem = name; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("ChestItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - } - } - } - - public void SetLegItem(string name) - { - if (!(m_legItem == name)) - { - m_legItem = name; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("LegItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - } - } - } - - public void SetHelmetItem(string name) - { - if (!(m_helmetItem == name)) - { - m_helmetItem = name; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("HelmetItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - } - } - } - - public void SetShoulderItem(string name, int variant) - { - if (!(m_shoulderItem == name) || m_shoulderItemVariant != variant) - { - m_shoulderItem = name; - m_shoulderItemVariant = variant; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("ShoulderItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - m_nview.GetZDO().Set("ShoulderItemVariant", variant); - } - } - } - - public void SetBeardItem(string name) - { - if (!(m_beardItem == name)) - { - m_beardItem = name; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("BeardItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - } - } - } - - public void SetHairItem(string name) - { - if (!(m_hairItem == name)) - { - m_hairItem = name; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("HairItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - } - } - } - - public void SetUtilityItem(string name) - { - if (!(m_utilityItem == name)) - { - m_utilityItem = name; - if (m_nview.GetZDO() != null) - { - m_nview.GetZDO().Set("UtilityItem", (!string.IsNullOrEmpty(name)) ? name.GetStableHashCode() : 0); - } - } - } - - private void Update() - { - UpdateVisuals(); - } - - private void UpdateVisuals() - { - UpdateEquipmentVisuals(); - if (m_isPlayer) - { - UpdateBaseModel(); - UpdateColors(); - } - } - - private void UpdateColors() - { - Color value = Utils.Vec3ToColor(m_skinColor); - Color value2 = Utils.Vec3ToColor(m_hairColor); - if (m_nview.GetZDO() != null) - { - value = Utils.Vec3ToColor(m_nview.GetZDO().GetVec3("SkinColor", Vector3.one)); - value2 = Utils.Vec3ToColor(m_nview.GetZDO().GetVec3("HairColor", Vector3.one)); - } - m_bodyModel.materials[0].SetColor("_SkinColor", value); - m_bodyModel.materials[1].SetColor("_SkinColor", value2); - if ((bool)m_beardItemInstance) - { - Renderer[] componentsInChildren = m_beardItemInstance.GetComponentsInChildren<Renderer>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - componentsInChildren[i].material.SetColor("_SkinColor", value2); - } - } - if ((bool)m_hairItemInstance) - { - Renderer[] componentsInChildren = m_hairItemInstance.GetComponentsInChildren<Renderer>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - componentsInChildren[i].material.SetColor("_SkinColor", value2); - } - } - } - - private void UpdateBaseModel() - { - if (m_models.Length != 0) - { - int num = m_modelIndex; - if (m_nview.GetZDO() != null) - { - num = m_nview.GetZDO().GetInt("ModelIndex"); - } - if (m_currentModelIndex != num || m_bodyModel.sharedMesh != m_models[num].m_mesh) - { - m_currentModelIndex = num; - m_bodyModel.sharedMesh = m_models[num].m_mesh; - m_bodyModel.materials[0].SetTexture("_MainTex", m_models[num].m_baseMaterial.GetTexture("_MainTex")); - m_bodyModel.materials[0].SetTexture("_SkinBumpMap", m_models[num].m_baseMaterial.GetTexture("_SkinBumpMap")); - } - } - } - - private void UpdateEquipmentVisuals() - { - int hash = 0; - int rightHandEquiped = 0; - int chestEquiped = 0; - int legEquiped = 0; - int hash2 = 0; - int beardEquiped = 0; - int num = 0; - int hash3 = 0; - int utilityEquiped = 0; - int leftItem = 0; - int rightItem = 0; - int variant = m_shoulderItemVariant; - int variant2 = m_leftItemVariant; - int leftVariant = m_leftBackItemVariant; - ZDO zDO = m_nview.GetZDO(); - if (zDO != null) - { - hash = zDO.GetInt("LeftItem"); - rightHandEquiped = zDO.GetInt("RightItem"); - chestEquiped = zDO.GetInt("ChestItem"); - legEquiped = zDO.GetInt("LegItem"); - hash2 = zDO.GetInt("HelmetItem"); - hash3 = zDO.GetInt("ShoulderItem"); - utilityEquiped = zDO.GetInt("UtilityItem"); - if (m_isPlayer) - { - beardEquiped = zDO.GetInt("BeardItem"); - num = zDO.GetInt("HairItem"); - leftItem = zDO.GetInt("LeftBackItem"); - rightItem = zDO.GetInt("RightBackItem"); - variant = zDO.GetInt("ShoulderItemVariant"); - variant2 = zDO.GetInt("LeftItemVariant"); - leftVariant = zDO.GetInt("LeftBackItemVariant"); - } - } - else - { - if (!string.IsNullOrEmpty(m_leftItem)) - { - hash = m_leftItem.GetStableHashCode(); - } - if (!string.IsNullOrEmpty(m_rightItem)) - { - rightHandEquiped = m_rightItem.GetStableHashCode(); - } - if (!string.IsNullOrEmpty(m_chestItem)) - { - chestEquiped = m_chestItem.GetStableHashCode(); - } - if (!string.IsNullOrEmpty(m_legItem)) - { - legEquiped = m_legItem.GetStableHashCode(); - } - if (!string.IsNullOrEmpty(m_helmetItem)) - { - hash2 = m_helmetItem.GetStableHashCode(); - } - if (!string.IsNullOrEmpty(m_shoulderItem)) - { - hash3 = m_shoulderItem.GetStableHashCode(); - } - if (!string.IsNullOrEmpty(m_utilityItem)) - { - utilityEquiped = m_utilityItem.GetStableHashCode(); - } - if (m_isPlayer) - { - if (!string.IsNullOrEmpty(m_beardItem)) - { - beardEquiped = m_beardItem.GetStableHashCode(); - } - if (!string.IsNullOrEmpty(m_hairItem)) - { - num = m_hairItem.GetStableHashCode(); - } - if (!string.IsNullOrEmpty(m_leftBackItem)) - { - leftItem = m_leftBackItem.GetStableHashCode(); - } - if (!string.IsNullOrEmpty(m_rightBackItem)) - { - rightItem = m_rightBackItem.GetStableHashCode(); - } - } - } - bool flag = false; - flag = SetRightHandEquiped(rightHandEquiped) || flag; - flag = SetLeftHandEquiped(hash, variant2) || flag; - flag = SetChestEquiped(chestEquiped) || flag; - flag = SetLegEquiped(legEquiped) || flag; - flag = SetHelmetEquiped(hash2, num) || flag; - flag = SetShoulderEquiped(hash3, variant) || flag; - flag = SetUtilityEquiped(utilityEquiped) || flag; - if (m_isPlayer) - { - flag = SetBeardEquiped(beardEquiped) || flag; - flag = SetBackEquiped(leftItem, rightItem, leftVariant) || flag; - if (m_helmetHideHair) - { - num = 0; - } - flag = SetHairEquiped(num) || flag; - } - if (flag) - { - UpdateLodgroup(); - } - } - - protected void UpdateLodgroup() - { - if (!(m_lodGroup == null)) - { - Renderer[] componentsInChildren = m_visual.GetComponentsInChildren<Renderer>(); - LOD[] lODs = m_lodGroup.GetLODs(); - lODs[0].renderers = componentsInChildren; - m_lodGroup.SetLODs(lODs); - } - } - - private bool SetRightHandEquiped(int hash) - { - if (m_currentRightItemHash == hash) - { - return false; - } - if ((bool)m_rightItemInstance) - { - UnityEngine.Object.Destroy(m_rightItemInstance); - m_rightItemInstance = null; - } - m_currentRightItemHash = hash; - if (hash != 0) - { - m_rightItemInstance = AttachItem(hash, 0, m_rightHand); - } - return true; - } - - private bool SetLeftHandEquiped(int hash, int variant) - { - if (m_currentLeftItemHash == hash && m_currentLeftItemVariant == variant) - { - return false; - } - if ((bool)m_leftItemInstance) - { - UnityEngine.Object.Destroy(m_leftItemInstance); - m_leftItemInstance = null; - } - m_currentLeftItemHash = hash; - m_currentLeftItemVariant = variant; - if (hash != 0) - { - m_leftItemInstance = AttachItem(hash, variant, m_leftHand); - } - return true; - } - - private bool SetBackEquiped(int leftItem, int rightItem, int leftVariant) - { - if (m_currentLeftBackItemHash == leftItem && m_currentRightBackItemHash == rightItem && m_currentLeftBackItemVariant == leftVariant) - { - return false; - } - if ((bool)m_leftBackItemInstance) - { - UnityEngine.Object.Destroy(m_leftBackItemInstance); - m_leftBackItemInstance = null; - } - if ((bool)m_rightBackItemInstance) - { - UnityEngine.Object.Destroy(m_rightBackItemInstance); - m_rightBackItemInstance = null; - } - m_currentLeftBackItemHash = leftItem; - m_currentRightBackItemHash = rightItem; - m_currentLeftBackItemVariant = leftVariant; - if (m_currentLeftBackItemHash != 0) - { - m_leftBackItemInstance = AttachBackItem(leftItem, leftVariant, rightHand: false); - } - if (m_currentRightBackItemHash != 0) - { - m_rightBackItemInstance = AttachBackItem(rightItem, 0, rightHand: true); - } - return true; - } - - private GameObject AttachBackItem(int hash, int variant, bool rightHand) - { - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(hash); - if (itemPrefab == null) - { - ZLog.Log("Missing back attach item prefab: " + hash); - return null; - } - ItemDrop component = itemPrefab.GetComponent<ItemDrop>(); - switch ((component.m_itemData.m_shared.m_attachOverride != 0) ? component.m_itemData.m_shared.m_attachOverride : component.m_itemData.m_shared.m_itemType) - { - case ItemDrop.ItemData.ItemType.Torch: - if (rightHand) - { - return AttachItem(hash, variant, m_backMelee, enableEquipEffects: false); - } - return AttachItem(hash, variant, m_backTool, enableEquipEffects: false); - case ItemDrop.ItemData.ItemType.Bow: - return AttachItem(hash, variant, m_backBow); - case ItemDrop.ItemData.ItemType.Tool: - return AttachItem(hash, variant, m_backTool); - case ItemDrop.ItemData.ItemType.Attach_Atgeir: - return AttachItem(hash, variant, m_backAtgeir); - case ItemDrop.ItemData.ItemType.OneHandedWeapon: - return AttachItem(hash, variant, m_backMelee); - case ItemDrop.ItemData.ItemType.TwoHandedWeapon: - return AttachItem(hash, variant, m_backTwohandedMelee); - case ItemDrop.ItemData.ItemType.Shield: - return AttachItem(hash, variant, m_backShield); - default: - return null; - } - } - - private bool SetChestEquiped(int hash) - { - if (m_currentChestItemHash == hash) - { - return false; - } - m_currentChestItemHash = hash; - if (m_bodyModel == null) - { - return true; - } - if (m_chestItemInstances != null) - { - foreach (GameObject chestItemInstance in m_chestItemInstances) - { - if ((bool)m_lodGroup) - { - Utils.RemoveFromLodgroup(m_lodGroup, chestItemInstance); - } - UnityEngine.Object.Destroy(chestItemInstance); - } - m_chestItemInstances = null; - m_bodyModel.material.SetTexture("_ChestTex", m_emptyBodyTexture); - m_bodyModel.material.SetTexture("_ChestBumpMap", null); - m_bodyModel.material.SetTexture("_ChestMetal", null); - } - if (m_currentChestItemHash == 0) - { - return true; - } - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(hash); - if (itemPrefab == null) - { - ZLog.Log("Missing chest item " + hash); - return true; - } - ItemDrop component = itemPrefab.GetComponent<ItemDrop>(); - if ((bool)component.m_itemData.m_shared.m_armorMaterial) - { - m_bodyModel.material.SetTexture("_ChestTex", component.m_itemData.m_shared.m_armorMaterial.GetTexture("_ChestTex")); - m_bodyModel.material.SetTexture("_ChestBumpMap", component.m_itemData.m_shared.m_armorMaterial.GetTexture("_ChestBumpMap")); - m_bodyModel.material.SetTexture("_ChestMetal", component.m_itemData.m_shared.m_armorMaterial.GetTexture("_ChestMetal")); - } - m_chestItemInstances = AttachArmor(hash); - return true; - } - - private bool SetShoulderEquiped(int hash, int variant) - { - if (m_currentShoulderItemHash == hash && m_currenShoulderItemVariant == variant) - { - return false; - } - m_currentShoulderItemHash = hash; - m_currenShoulderItemVariant = variant; - if (m_bodyModel == null) - { - return true; - } - if (m_shoulderItemInstances != null) - { - foreach (GameObject shoulderItemInstance in m_shoulderItemInstances) - { - if ((bool)m_lodGroup) - { - Utils.RemoveFromLodgroup(m_lodGroup, shoulderItemInstance); - } - UnityEngine.Object.Destroy(shoulderItemInstance); - } - m_shoulderItemInstances = null; - } - if (m_currentShoulderItemHash == 0) - { - return true; - } - if (ObjectDB.instance.GetItemPrefab(hash) == null) - { - ZLog.Log("Missing shoulder item " + hash); - return true; - } - m_shoulderItemInstances = AttachArmor(hash, variant); - return true; - } - - private bool SetLegEquiped(int hash) - { - if (m_currentLegItemHash == hash) - { - return false; - } - m_currentLegItemHash = hash; - if (m_bodyModel == null) - { - return true; - } - if (m_legItemInstances != null) - { - foreach (GameObject legItemInstance in m_legItemInstances) - { - UnityEngine.Object.Destroy(legItemInstance); - } - m_legItemInstances = null; - m_bodyModel.material.SetTexture("_LegsTex", m_emptyBodyTexture); - m_bodyModel.material.SetTexture("_LegsBumpMap", null); - m_bodyModel.material.SetTexture("_LegsMetal", null); - } - if (m_currentLegItemHash == 0) - { - return true; - } - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(hash); - if (itemPrefab == null) - { - ZLog.Log("Missing legs item " + hash); - return true; - } - ItemDrop component = itemPrefab.GetComponent<ItemDrop>(); - if ((bool)component.m_itemData.m_shared.m_armorMaterial) - { - m_bodyModel.material.SetTexture("_LegsTex", component.m_itemData.m_shared.m_armorMaterial.GetTexture("_LegsTex")); - m_bodyModel.material.SetTexture("_LegsBumpMap", component.m_itemData.m_shared.m_armorMaterial.GetTexture("_LegsBumpMap")); - m_bodyModel.material.SetTexture("_LegsMetal", component.m_itemData.m_shared.m_armorMaterial.GetTexture("_LegsMetal")); - } - m_legItemInstances = AttachArmor(hash); - return true; - } - - private bool SetBeardEquiped(int hash) - { - if (m_currentBeardItemHash == hash) - { - return false; - } - if ((bool)m_beardItemInstance) - { - UnityEngine.Object.Destroy(m_beardItemInstance); - m_beardItemInstance = null; - } - m_currentBeardItemHash = hash; - if (hash != 0) - { - m_beardItemInstance = AttachItem(hash, 0, m_helmet); - } - return true; - } - - private bool SetHairEquiped(int hash) - { - if (m_currentHairItemHash == hash) - { - return false; - } - if ((bool)m_hairItemInstance) - { - UnityEngine.Object.Destroy(m_hairItemInstance); - m_hairItemInstance = null; - } - m_currentHairItemHash = hash; - if (hash != 0) - { - m_hairItemInstance = AttachItem(hash, 0, m_helmet); - } - return true; - } - - private bool SetHelmetEquiped(int hash, int hairHash) - { - if (m_currentHelmetItemHash == hash) - { - return false; - } - if ((bool)m_helmetItemInstance) - { - UnityEngine.Object.Destroy(m_helmetItemInstance); - m_helmetItemInstance = null; - } - m_currentHelmetItemHash = hash; - m_helmetHideHair = HelmetHidesHair(hash); - if (hash != 0) - { - m_helmetItemInstance = AttachItem(hash, 0, m_helmet); - } - return true; - } - - private bool SetUtilityEquiped(int hash) - { - if (m_currentUtilityItemHash == hash) - { - return false; - } - if (m_utilityItemInstances != null) - { - foreach (GameObject utilityItemInstance in m_utilityItemInstances) - { - if ((bool)m_lodGroup) - { - Utils.RemoveFromLodgroup(m_lodGroup, utilityItemInstance); - } - UnityEngine.Object.Destroy(utilityItemInstance); - } - m_utilityItemInstances = null; - } - m_currentUtilityItemHash = hash; - if (hash != 0) - { - m_utilityItemInstances = AttachArmor(hash); - } - return true; - } - - private bool HelmetHidesHair(int itemHash) - { - if (itemHash == 0) - { - return false; - } - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemHash); - if (itemPrefab == null) - { - return false; - } - return itemPrefab.GetComponent<ItemDrop>().m_itemData.m_shared.m_helmetHideHair; - } - - private List<GameObject> AttachArmor(int itemHash, int variant = -1) - { - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemHash); - if (itemPrefab == null) - { - ZLog.Log("Missing attach item: " + itemHash + " ob:" + base.gameObject.name); - return null; - } - List<GameObject> list = new List<GameObject>(); - int childCount = itemPrefab.transform.childCount; - for (int i = 0; i < childCount; i++) - { - Transform child = itemPrefab.transform.GetChild(i); - if (!child.gameObject.name.StartsWith("attach_")) - { - continue; - } - string text = child.gameObject.name.Substring(7); - GameObject gameObject; - if (text == "skin") - { - gameObject = UnityEngine.Object.Instantiate(child.gameObject, m_bodyModel.transform.position, m_bodyModel.transform.parent.rotation, m_bodyModel.transform.parent); - gameObject.SetActive(value: true); - SkinnedMeshRenderer[] componentsInChildren = gameObject.GetComponentsInChildren<SkinnedMeshRenderer>(); - foreach (SkinnedMeshRenderer obj in componentsInChildren) - { - obj.rootBone = m_bodyModel.rootBone; - obj.bones = m_bodyModel.bones; - } - Cloth[] componentsInChildren2 = gameObject.GetComponentsInChildren<Cloth>(); - foreach (Cloth cloth in componentsInChildren2) - { - if (m_clothColliders.Length != 0) - { - if (cloth.capsuleColliders.Length != 0) - { - List<CapsuleCollider> list2 = new List<CapsuleCollider>(m_clothColliders); - list2.AddRange(cloth.capsuleColliders); - cloth.capsuleColliders = list2.ToArray(); - } - else - { - cloth.capsuleColliders = m_clothColliders; - } - } - } - } - else - { - Transform transform = Utils.FindChild(m_visual.transform, text); - if (transform == null) - { - ZLog.LogWarning("Missing joint " + text + " in item " + itemPrefab.name); - continue; - } - gameObject = UnityEngine.Object.Instantiate(child.gameObject); - gameObject.SetActive(value: true); - gameObject.transform.SetParent(transform); - gameObject.transform.localPosition = Vector3.zero; - gameObject.transform.localRotation = Quaternion.identity; - } - if (variant >= 0) - { - gameObject.GetComponentInChildren<IEquipmentVisual>()?.Setup(variant); - } - CleanupInstance(gameObject); - EnableEquipedEffects(gameObject); - list.Add(gameObject); - } - return list; - } - - protected GameObject AttachItem(int itemHash, int variant, Transform joint, bool enableEquipEffects = true) - { - GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemHash); - if (itemPrefab == null) - { - ZLog.Log("Missing attach item: " + itemHash + " ob:" + base.gameObject.name + " joint:" + (joint ? joint.name : "none")); - return null; - } - GameObject gameObject = null; - int childCount = itemPrefab.transform.childCount; - for (int i = 0; i < childCount; i++) - { - Transform child = itemPrefab.transform.GetChild(i); - if (child.gameObject.name == "attach" || child.gameObject.name == "attach_skin") - { - gameObject = child.gameObject; - break; - } - } - if (gameObject == null) - { - return null; - } - GameObject gameObject2 = UnityEngine.Object.Instantiate(gameObject); - gameObject2.SetActive(value: true); - CleanupInstance(gameObject2); - if (enableEquipEffects) - { - EnableEquipedEffects(gameObject2); - } - if (gameObject.name == "attach_skin") - { - gameObject2.transform.SetParent(m_bodyModel.transform.parent); - gameObject2.transform.localPosition = Vector3.zero; - gameObject2.transform.localRotation = Quaternion.identity; - SkinnedMeshRenderer[] componentsInChildren = gameObject2.GetComponentsInChildren<SkinnedMeshRenderer>(); - foreach (SkinnedMeshRenderer obj in componentsInChildren) - { - obj.rootBone = m_bodyModel.rootBone; - obj.bones = m_bodyModel.bones; - } - } - else - { - gameObject2.transform.SetParent(joint); - gameObject2.transform.localPosition = Vector3.zero; - gameObject2.transform.localRotation = Quaternion.identity; - } - gameObject2.GetComponentInChildren<IEquipmentVisual>()?.Setup(variant); - return gameObject2; - } - - private void CleanupInstance(GameObject instance) - { - Collider[] componentsInChildren = instance.GetComponentsInChildren<Collider>(); - for (int i = 0; i < componentsInChildren.Length; i++) - { - componentsInChildren[i].enabled = false; - } - } - - private void EnableEquipedEffects(GameObject instance) - { - Transform transform = instance.transform.Find("equiped"); - if ((bool)transform) - { - transform.gameObject.SetActive(value: true); - } - } - - public int GetModelIndex() - { - int result = m_modelIndex; - if (m_nview.IsValid()) - { - result = m_nview.GetZDO().GetInt("ModelIndex"); - } - return result; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/WaterMark.cs b/Valheim_v202102/Valheim/assembly_valheim/WaterMark.cs deleted file mode 100644 index 92bf3f9..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/WaterMark.cs +++ /dev/null @@ -1,12 +0,0 @@ -using UnityEngine; -using UnityEngine.UI; - -public class WaterMark : MonoBehaviour -{ - public Text m_text; - - private void Awake() - { - m_text.text = "Version: " + Version.GetVersionString(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/WaterTrigger.cs b/Valheim_v202102/Valheim/assembly_valheim/WaterTrigger.cs deleted file mode 100644 index 4d100a6..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/WaterTrigger.cs +++ /dev/null @@ -1,24 +0,0 @@ -using UnityEngine; - -public class WaterTrigger : MonoBehaviour -{ - public EffectList m_effects = new EffectList(); - - public float m_cooldownDelay = 2f; - - private float m_cooldownTimer; - - private void Update() - { - m_cooldownTimer += Time.deltaTime; - if (m_cooldownTimer > m_cooldownDelay) - { - float waterLevel = WaterVolume.GetWaterLevel(base.transform.position); - if (base.transform.position.y < waterLevel) - { - m_effects.Create(base.transform.position, base.transform.rotation, base.transform); - m_cooldownTimer = 0f; - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/WaterVolume.cs b/Valheim_v202102/Valheim/assembly_valheim/WaterVolume.cs deleted file mode 100644 index 40187f2..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/WaterVolume.cs +++ /dev/null @@ -1,237 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class WaterVolume : MonoBehaviour -{ - private static Collider[] tempColliderArray = new Collider[256]; - - private float[] m_normalizedDepth = new float[4]; - - private BoxCollider m_collider; - - public MeshRenderer m_waterSurface; - - public Heightmap m_heightmap; - - public float m_forceDepth = -1f; - - public bool m_menuWater; - - public bool m_useGlobalWind = true; - - private static float m_waterTime = 0f; - - private static int m_waterUpdateFrame = 0; - - private static int m_waterVolumeMask = 0; - - private static int _WaterTime = Shader.PropertyToID("_WaterTime"); - - private static int _depth = Shader.PropertyToID("_depth"); - - private static int _UseGlobalWind = Shader.PropertyToID("_UseGlobalWind"); - - private List<IWaterInteractable> m_inWater = new List<IWaterInteractable>(); - - private void Awake() - { - m_collider = GetComponent<BoxCollider>(); - } - - private void Start() - { - DetectWaterDepth(); - SetupMaterial(); - } - - private void DetectWaterDepth() - { - if ((bool)m_heightmap) - { - float[] oceanDepth = m_heightmap.GetOceanDepth(); - m_normalizedDepth[0] = Mathf.Clamp01(oceanDepth[0] / 10f); - m_normalizedDepth[1] = Mathf.Clamp01(oceanDepth[1] / 10f); - m_normalizedDepth[2] = Mathf.Clamp01(oceanDepth[2] / 10f); - m_normalizedDepth[3] = Mathf.Clamp01(oceanDepth[3] / 10f); - } - else - { - m_normalizedDepth[0] = m_forceDepth; - m_normalizedDepth[1] = m_forceDepth; - m_normalizedDepth[2] = m_forceDepth; - m_normalizedDepth[3] = m_forceDepth; - } - } - - private void Update() - { - if (m_waterUpdateFrame != Time.frameCount) - { - m_waterUpdateFrame = Time.frameCount; - UpdateWaterTime(Time.deltaTime); - } - UpdateFloaters(); - m_waterSurface.material.SetFloat(_WaterTime, m_waterTime); - } - - private void UpdateWaterTime(float dt) - { - float num = (m_menuWater ? Time.time : ZNet.instance.GetWrappedDayTimeSeconds()); - m_waterTime += dt; - if (Mathf.Abs(num - m_waterTime) > 10f) - { - m_waterTime = num; - } - m_waterTime = Mathf.Lerp(m_waterTime, num, 0.05f); - } - - private void SetupMaterial() - { - if (m_forceDepth >= 0f) - { - m_waterSurface.material.SetFloatArray(_depth, new float[4] { m_forceDepth, m_forceDepth, m_forceDepth, m_forceDepth }); - } - else - { - m_waterSurface.material.SetFloatArray(_depth, m_normalizedDepth); - } - m_waterSurface.material.SetFloat(_UseGlobalWind, m_useGlobalWind ? 1f : 0f); - } - - public static float GetWaterLevel(Vector3 p, float waveFactor = 1f) - { - if (m_waterVolumeMask == 0) - { - m_waterVolumeMask = LayerMask.GetMask("WaterVolume"); - } - int num = Physics.OverlapSphereNonAlloc(p, 0f, tempColliderArray, m_waterVolumeMask); - for (int i = 0; i < num; i++) - { - WaterVolume component = tempColliderArray[i].GetComponent<WaterVolume>(); - if ((bool)component) - { - return component.GetWaterSurface(p, waveFactor); - } - } - return -10000f; - } - - private float GetWaterSurface(Vector3 point, float waveFactor = 1f) - { - float wrappedDayTimeSeconds = ZNet.instance.GetWrappedDayTimeSeconds(); - float depth = Depth(point); - float num = CalcWave(point, depth, wrappedDayTimeSeconds, waveFactor); - float num2 = base.transform.position.y + num; - if (Utils.LengthXZ(point) > 10500f && m_forceDepth < 0f) - { - num2 -= 100f; - } - return num2; - } - - private float TrochSin(float x, float k) - { - return Mathf.Sin(x - Mathf.Cos(x) * k) * 0.5f + 0.5f; - } - - private float CreateWave(Vector3 worldPos, float time, float waveSpeed, float waveLength, float waveHeight, Vector2 dir2d, float sharpness) - { - Vector3 normalized = new Vector3(dir2d.x, 0f, dir2d.y).normalized; - Vector3 vector = Vector3.Cross(normalized, Vector3.up); - Vector3 vector2 = -(worldPos.z * normalized + worldPos.x * vector); - return (TrochSin(time * waveSpeed + vector2.z * waveLength, sharpness) * TrochSin(time * waveSpeed * 0.123f + vector2.x * 0.13123f * waveLength, sharpness) - 0.2f) * waveHeight; - } - - private float CalcWave(Vector3 worldPos, float depth, Vector4 wind, float _WaterTime, float waveFactor) - { - Vector3 vector = new Vector3(wind.x, wind.y, wind.z); - float w = wind.w; - float num = Mathf.Lerp(0f, w, depth); - float time = _WaterTime / 20f; - float num2 = CreateWave(worldPos, time, 10f, 0.04f, 8f, new Vector2(vector.x, vector.z), 0.5f); - float num3 = CreateWave(worldPos, time, 14.123f, 0.08f, 6f, new Vector2(1.0312f, 0.312f), 0.5f); - float num4 = CreateWave(worldPos, time, 22.312f, 0.1f, 4f, new Vector2(-0.123f, 1.12f), 0.5f); - float num5 = CreateWave(worldPos, time, 31.42f, 0.2f, 2f, new Vector2(0.423f, 0.124f), 0.5f); - float num6 = CreateWave(worldPos, time, 35.42f, 0.4f, 1f, new Vector2(0.123f, -0.64f), 0.5f); - float num7 = CreateWave(worldPos, time, 38.1223f, 1f, 0.8f, new Vector2(-0.523f, -0.64f), 0.7f); - float num8 = CreateWave(worldPos, time, 41.1223f, 1.2f, 0.6f * waveFactor, new Vector2(0.223f, 0.74f), 0.8f); - float num9 = CreateWave(worldPos, time, 51.5123f, 1.3f, 0.4f * waveFactor, new Vector2(0.923f, -0.24f), 0.9f); - float num10 = CreateWave(worldPos, time, 54.2f, 1.3f, 0.3f * waveFactor, new Vector2(-0.323f, 0.44f), 0.9f); - float num11 = CreateWave(worldPos, time, 56.123f, 1.5f, 0.2f * waveFactor, new Vector2(0.5312f, -0.812f), 0.9f); - return (num2 + num3 + num4 + num5 + num6 + num7 + num8 + num9 + num10 + num11) * num; - } - - private float CalcWave(Vector3 worldPos, float depth, float _WaterTime, float waveFactor) - { - Vector4 wind = new Vector4(1f, 0f, 0f, 0f); - Vector4 wind2 = new Vector4(1f, 0f, 0f, 0f); - float alpha = 0f; - if (m_useGlobalWind) - { - EnvMan.instance.GetWindData(out wind, out wind2, out alpha); - } - float a = CalcWave(worldPos, depth, wind, _WaterTime, waveFactor); - float b = CalcWave(worldPos, depth, wind2, _WaterTime, waveFactor); - return Mathf.Lerp(a, b, alpha); - } - - private float Depth(Vector3 point) - { - Vector3 vector = base.transform.InverseTransformPoint(point); - float value = (vector.x + m_collider.bounds.size.x / 2f) / m_collider.bounds.size.x; - float value2 = (vector.z + m_collider.bounds.size.z / 2f) / m_collider.bounds.size.z; - value = Mathf.Clamp01(value); - value2 = Mathf.Clamp01(value2); - float a = Mathf.Lerp(m_normalizedDepth[3], m_normalizedDepth[2], value); - float b = Mathf.Lerp(m_normalizedDepth[0], m_normalizedDepth[1], value); - return Mathf.Lerp(a, b, value2); - } - - private void OnTriggerEnter(Collider collider) - { - IWaterInteractable component = collider.attachedRigidbody.GetComponent<IWaterInteractable>(); - if (component != null && !m_inWater.Contains(component)) - { - m_inWater.Add(component); - } - } - - private void UpdateFloaters() - { - if (m_inWater.Count == 0) - { - return; - } - IWaterInteractable waterInteractable = null; - foreach (IWaterInteractable item in m_inWater) - { - if (item.IsOwner()) - { - Transform transform = item.GetTransform(); - if ((bool)transform) - { - float waterSurface = GetWaterSurface(transform.position); - item.SetInWater(waterSurface); - } - else - { - waterInteractable = item; - } - } - } - if (waterInteractable != null) - { - m_inWater.Remove(waterInteractable); - } - } - - private void OnTriggerExit(Collider collider) - { - IWaterInteractable component = collider.attachedRigidbody.GetComponent<IWaterInteractable>(); - if (component != null) - { - component.SetInWater(-10000f); - m_inWater.Remove(component); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/WayStone.cs b/Valheim_v202102/Valheim/assembly_valheim/WayStone.cs deleted file mode 100644 index 21f0be7..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/WayStone.cs +++ /dev/null @@ -1,71 +0,0 @@ -using UnityEngine; - -public class WayStone : MonoBehaviour, Hoverable, Interactable -{ - [TextArea] - public string m_activateMessage = "You touch the cold stone surface and you think of home."; - - public GameObject m_activeObject; - - public EffectList m_activeEffect; - - private void Awake() - { - m_activeObject.SetActive(value: false); - } - - public string GetHoverText() - { - if (m_activeObject.activeSelf) - { - return "Activated waystone"; - } - return Localization.instance.Localize("Waystone\n[<color=yellow><b>$KEY_Use</b></color>] Activate"); - } - - public string GetHoverName() - { - return "Waystone"; - } - - public bool Interact(Humanoid character, bool hold) - { - if (hold) - { - return false; - } - if (!m_activeObject.activeSelf) - { - character.Message(MessageHud.MessageType.Center, m_activateMessage); - m_activeObject.SetActive(value: true); - m_activeEffect.Create(base.gameObject.transform.position, base.gameObject.transform.rotation); - } - return true; - } - - public bool UseItem(Humanoid user, ItemDrop.ItemData item) - { - return false; - } - - private void FixedUpdate() - { - if (m_activeObject.activeSelf && Game.instance != null) - { - Vector3 forward = GetSpawnPoint() - base.transform.position; - forward.y = 0f; - forward.Normalize(); - m_activeObject.transform.rotation = Quaternion.LookRotation(forward); - } - } - - private Vector3 GetSpawnPoint() - { - PlayerProfile playerProfile = Game.instance.GetPlayerProfile(); - if (playerProfile.HaveCustomSpawnPoint()) - { - return playerProfile.GetCustomSpawnPoint(); - } - return playerProfile.GetHomePoint(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/WearNTear.cs b/Valheim_v202102/Valheim/assembly_valheim/WearNTear.cs deleted file mode 100644 index 118ba82..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/WearNTear.cs +++ /dev/null @@ -1,792 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; - -public class WearNTear : MonoBehaviour, IDestructible -{ - public enum MaterialType - { - Wood, - Stone, - Iron, - HardWood - } - - private struct BoundData - { - public Vector3 m_pos; - - public Quaternion m_rot; - - public Vector3 m_size; - } - - private struct OldMeshData - { - public Renderer m_renderer; - - public Material[] m_materials; - - public Color[] m_color; - - public Color[] m_emissiveColor; - } - - public static bool m_randomInitialDamage = false; - - public Action m_onDestroyed; - - public Action m_onDamaged; - - [Header("Wear")] - public GameObject m_new; - - public GameObject m_worn; - - public GameObject m_broken; - - public GameObject m_wet; - - public bool m_noRoofWear = true; - - public bool m_noSupportWear = true; - - public MaterialType m_materialType; - - public bool m_supports = true; - - public Vector3 m_comOffset = Vector3.zero; - - [Header("Destruction")] - public float m_health = 100f; - - public HitData.DamageModifiers m_damages; - - public float m_minDamageTreshold; - - public float m_hitNoise; - - public float m_destroyNoise; - - [Header("Effects")] - public EffectList m_destroyedEffect = new EffectList(); - - public EffectList m_hitEffect = new EffectList(); - - public EffectList m_switchEffect = new EffectList(); - - public bool m_autoCreateFragments = true; - - public GameObject[] m_fragmentRoots; - - private const float m_noFireDrain = 0.0049603176f; - - private const float m_noSupportDrain = 25f; - - private const float m_rainDamageTime = 60f; - - private const float m_rainDamage = 5f; - - private const float m_comTestWidth = 0.2f; - - private const float m_comMinAngle = 100f; - - private const float m_minFireDistance = 20f; - - private const int m_wearUpdateIntervalMinutes = 60; - - private const float m_privateAreaModifier = 0.5f; - - private static RaycastHit[] m_raycastHits = new RaycastHit[128]; - - private static Collider[] m_tempColliders = new Collider[128]; - - private static int m_rayMask = 0; - - private static List<WearNTear> m_allInstances = new List<WearNTear>(); - - private static List<Vector3> m_tempSupportPoints = new List<Vector3>(); - - private static List<float> m_tempSupportPointValues = new List<float>(); - - private ZNetView m_nview; - - private Collider[] m_colliders; - - private float m_support = 1f; - - private float m_createTime; - - private int m_myIndex = -1; - - private float m_rainTimer; - - private Piece m_piece; - - private List<BoundData> m_bounds; - - private List<OldMeshData> m_oldMaterials; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_piece = GetComponent<Piece>(); - if (m_nview.GetZDO() != null) - { - m_nview.Register<HitData>("WNTDamage", RPC_Damage); - m_nview.Register<float>("WNTHealthChanged", RPC_HealthChanged); - if (m_autoCreateFragments) - { - m_nview.Register("WNTCreateFragments", RPC_CreateFragments); - } - if (m_rayMask == 0) - { - m_rayMask = LayerMask.GetMask("piece", "Default", "static_solid", "Default_small", "terrain"); - } - m_allInstances.Add(this); - m_myIndex = m_allInstances.Count - 1; - m_createTime = Time.time; - m_support = GetMaxSupport(); - if (m_randomInitialDamage) - { - float value = UnityEngine.Random.Range(0.1f * m_health, m_health * 0.6f); - m_nview.GetZDO().Set("health", value); - } - UpdateVisual(triggerEffects: false); - } - } - - private void OnDestroy() - { - if (m_myIndex != -1) - { - m_allInstances[m_myIndex] = m_allInstances[m_allInstances.Count - 1]; - m_allInstances[m_myIndex].m_myIndex = m_myIndex; - m_allInstances.RemoveAt(m_allInstances.Count - 1); - } - } - - public bool Repair() - { - if (m_nview.GetZDO().GetFloat("health", m_health) >= m_health) - { - return false; - } - m_nview.ClaimOwnership(); - m_nview.GetZDO().Set("health", m_health); - m_nview.InvokeRPC(ZNetView.Everybody, "WNTHealthChanged", m_health); - return true; - } - - private float GetSupport() - { - if (!m_nview.IsValid()) - { - return GetMaxSupport(); - } - if (!m_nview.HasOwner()) - { - return GetMaxSupport(); - } - if (m_nview.IsOwner()) - { - return m_support; - } - return m_nview.GetZDO().GetFloat("support", GetMaxSupport()); - } - - private float GetSupportColorValue() - { - float support = GetSupport(); - GetMaterialProperties(out var maxSupport, out var minSupport, out var _, out var _); - if (support >= maxSupport) - { - return -1f; - } - support -= minSupport; - return Mathf.Clamp01(support / (maxSupport * 0.5f - minSupport)); - } - - public void OnPlaced() - { - m_createTime = -1f; - } - - private List<Renderer> GetHighlightRenderers() - { - MeshRenderer[] componentsInChildren = GetComponentsInChildren<MeshRenderer>(includeInactive: true); - SkinnedMeshRenderer[] componentsInChildren2 = GetComponentsInChildren<SkinnedMeshRenderer>(includeInactive: true); - List<Renderer> list = new List<Renderer>(); - list.AddRange(componentsInChildren); - list.AddRange(componentsInChildren2); - return list; - } - - public void Highlight() - { - if (m_oldMaterials == null) - { - m_oldMaterials = new List<OldMeshData>(); - foreach (Renderer highlightRenderer in GetHighlightRenderers()) - { - OldMeshData item = default(OldMeshData); - item.m_materials = highlightRenderer.sharedMaterials; - item.m_color = new Color[item.m_materials.Length]; - item.m_emissiveColor = new Color[item.m_materials.Length]; - for (int i = 0; i < item.m_materials.Length; i++) - { - if (item.m_materials[i].HasProperty("_Color")) - { - item.m_color[i] = item.m_materials[i].GetColor("_Color"); - } - if (item.m_materials[i].HasProperty("_EmissionColor")) - { - item.m_emissiveColor[i] = item.m_materials[i].GetColor("_EmissionColor"); - } - } - item.m_renderer = highlightRenderer; - m_oldMaterials.Add(item); - } - } - float supportColorValue = GetSupportColorValue(); - Color color = new Color(0.6f, 0.8f, 1f); - if (supportColorValue >= 0f) - { - color = Color.Lerp(new Color(1f, 0f, 0f), new Color(0f, 1f, 0f), supportColorValue); - Color.RGBToHSV(color, out var H, out var S, out var V); - S = Mathf.Lerp(1f, 0.5f, supportColorValue); - V = Mathf.Lerp(1.2f, 0.9f, supportColorValue); - color = Color.HSVToRGB(H, S, V); - } - foreach (OldMeshData oldMaterial in m_oldMaterials) - { - if ((bool)oldMaterial.m_renderer) - { - Material[] materials = oldMaterial.m_renderer.materials; - foreach (Material obj in materials) - { - obj.SetColor("_EmissionColor", color * 0.4f); - obj.color = color; - } - } - } - CancelInvoke("ResetHighlight"); - Invoke("ResetHighlight", 0.2f); - } - - private void ResetHighlight() - { - if (m_oldMaterials == null) - { - return; - } - foreach (OldMeshData oldMaterial in m_oldMaterials) - { - if (!oldMaterial.m_renderer) - { - continue; - } - Material[] materials = oldMaterial.m_renderer.materials; - if (materials.Length == 0) - { - continue; - } - if (materials[0] == oldMaterial.m_materials[0]) - { - if (materials.Length != oldMaterial.m_color.Length) - { - continue; - } - for (int i = 0; i < materials.Length; i++) - { - if (materials[i].HasProperty("_Color")) - { - materials[i].SetColor("_Color", oldMaterial.m_color[i]); - } - if (materials[i].HasProperty("_EmissionColor")) - { - materials[i].SetColor("_EmissionColor", oldMaterial.m_emissiveColor[i]); - } - } - } - else if (materials.Length == oldMaterial.m_materials.Length) - { - oldMaterial.m_renderer.materials = oldMaterial.m_materials; - } - } - m_oldMaterials = null; - } - - private void SetupColliders() - { - m_colliders = GetComponentsInChildren<Collider>(includeInactive: true); - m_bounds = new List<BoundData>(); - Collider[] colliders = m_colliders; - foreach (Collider collider in colliders) - { - if (!collider.isTrigger) - { - BoundData item = default(BoundData); - if (collider is BoxCollider) - { - BoxCollider boxCollider = collider as BoxCollider; - item.m_rot = boxCollider.transform.rotation; - item.m_pos = boxCollider.transform.position + boxCollider.transform.TransformVector(boxCollider.center); - item.m_size = new Vector3(boxCollider.transform.lossyScale.x * boxCollider.size.x, boxCollider.transform.lossyScale.y * boxCollider.size.y, boxCollider.transform.lossyScale.z * boxCollider.size.z); - } - else - { - item.m_rot = Quaternion.identity; - item.m_pos = collider.bounds.center; - item.m_size = collider.bounds.size; - } - item.m_size.x += 0.3f; - item.m_size.y += 0.3f; - item.m_size.z += 0.3f; - item.m_size *= 0.5f; - m_bounds.Add(item); - } - } - } - - private bool ShouldUpdate() - { - if (!(m_createTime < 0f)) - { - return Time.time - m_createTime > 30f; - } - return true; - } - - public void UpdateWear() - { - if (!m_nview.IsValid()) - { - return; - } - if (m_nview.IsOwner() && ShouldUpdate()) - { - if (ZNetScene.instance.OutsideActiveArea(base.transform.position)) - { - m_support = GetMaxSupport(); - m_nview.GetZDO().Set("support", m_support); - return; - } - float num = 0f; - bool flag = HaveRoof(); - bool flag2 = EnvMan.instance.IsWet() && !flag; - if ((bool)m_wet) - { - m_wet.SetActive(flag2); - } - if (m_noRoofWear && GetHealthPercentage() > 0.5f) - { - if (flag2 || IsUnderWater()) - { - if (m_rainTimer == 0f) - { - m_rainTimer = Time.time; - } - else if (Time.time - m_rainTimer > 60f) - { - m_rainTimer = Time.time; - num += 5f; - } - } - else - { - m_rainTimer = 0f; - } - } - if (m_noSupportWear) - { - UpdateSupport(); - if (!HaveSupport()) - { - num = 100f; - } - } - if (num > 0f && !CanBeRemoved()) - { - num = 0f; - } - if (num > 0f) - { - float damage = num / 100f * m_health; - ApplyDamage(damage); - } - } - UpdateVisual(triggerEffects: true); - } - - private Vector3 GetCOM() - { - return base.transform.position + base.transform.rotation * m_comOffset; - } - - private void UpdateSupport() - { - if (m_colliders == null) - { - SetupColliders(); - } - GetMaterialProperties(out var maxSupport, out var _, out var horizontalLoss, out var verticalLoss); - m_tempSupportPoints.Clear(); - m_tempSupportPointValues.Clear(); - Vector3 cOM = GetCOM(); - float a = 0f; - foreach (BoundData bound in m_bounds) - { - int num = Physics.OverlapBoxNonAlloc(bound.m_pos, bound.m_size, m_tempColliders, bound.m_rot, m_rayMask); - for (int i = 0; i < num; i++) - { - Collider collider = m_tempColliders[i]; - if (m_colliders.Contains(collider) || collider.attachedRigidbody != null || collider.isTrigger) - { - continue; - } - WearNTear componentInParent = collider.GetComponentInParent<WearNTear>(); - if (componentInParent == null) - { - m_support = maxSupport; - m_nview.GetZDO().Set("support", m_support); - return; - } - if (!componentInParent.m_supports) - { - continue; - } - float num2 = Vector3.Distance(cOM, componentInParent.transform.position) + 0.1f; - float support = componentInParent.GetSupport(); - a = Mathf.Max(a, support - horizontalLoss * num2 * support); - Vector3 vector = FindSupportPoint(cOM, componentInParent, collider); - if (vector.y < cOM.y + 0.05f) - { - Vector3 normalized = (vector - cOM).normalized; - if (normalized.y < 0f) - { - float t = Mathf.Acos(1f - Mathf.Abs(normalized.y)) / ((float)Math.PI / 2f); - float num3 = Mathf.Lerp(horizontalLoss, verticalLoss, t); - float b = support - num3 * num2 * support; - a = Mathf.Max(a, b); - } - float item = support - verticalLoss * num2 * support; - m_tempSupportPoints.Add(vector); - m_tempSupportPointValues.Add(item); - } - } - } - if (m_tempSupportPoints.Count > 0 && m_tempSupportPoints.Count >= 2) - { - for (int j = 0; j < m_tempSupportPoints.Count; j++) - { - Vector3 from = m_tempSupportPoints[j] - cOM; - from.y = 0f; - for (int k = 0; k < m_tempSupportPoints.Count; k++) - { - if (j != k) - { - Vector3 to = m_tempSupportPoints[k] - cOM; - to.y = 0f; - if (Vector3.Angle(from, to) >= 100f) - { - float b2 = (m_tempSupportPointValues[j] + m_tempSupportPointValues[k]) * 0.5f; - a = Mathf.Max(a, b2); - } - } - } - } - } - m_support = Mathf.Min(a, maxSupport); - m_nview.GetZDO().Set("support", m_support); - } - - private Vector3 FindSupportPoint(Vector3 com, WearNTear wnt, Collider otherCollider) - { - MeshCollider meshCollider = otherCollider as MeshCollider; - if (meshCollider != null && !meshCollider.convex) - { - if (meshCollider.Raycast(new Ray(com, Vector3.down), out var hitInfo, 10f)) - { - return hitInfo.point; - } - return (com + wnt.GetCOM()) * 0.5f; - } - return otherCollider.ClosestPoint(com); - } - - private bool HaveSupport() - { - return m_support >= GetMinSupport(); - } - - private bool IsUnderWater() - { - float waterLevel = WaterVolume.GetWaterLevel(base.transform.position); - return base.transform.position.y < waterLevel; - } - - private bool HaveRoof() - { - int num = Physics.SphereCastNonAlloc(base.transform.position, 0.1f, Vector3.up, m_raycastHits, 100f, m_rayMask); - for (int i = 0; i < num; i++) - { - RaycastHit raycastHit = m_raycastHits[i]; - if (!raycastHit.collider.gameObject.CompareTag("leaky")) - { - return true; - } - } - return false; - } - - private void RPC_HealthChanged(long peer, float health) - { - float health2 = health / m_health; - SetHealthVisual(health2, triggerEffects: true); - } - - private void UpdateVisual(bool triggerEffects) - { - if (m_nview.IsValid()) - { - SetHealthVisual(GetHealthPercentage(), triggerEffects); - } - } - - private void SetHealthVisual(float health, bool triggerEffects) - { - if (m_worn == null && m_broken == null && m_new == null) - { - return; - } - if (health > 0.75f) - { - if (m_worn != m_new) - { - m_worn.SetActive(value: false); - } - if (m_broken != m_new) - { - m_broken.SetActive(value: false); - } - m_new.SetActive(value: true); - } - else if (health > 0.25f) - { - if (triggerEffects && !m_worn.activeSelf) - { - m_switchEffect.Create(base.transform.position, base.transform.rotation, base.transform); - } - if (m_new != m_worn) - { - m_new.SetActive(value: false); - } - if (m_broken != m_worn) - { - m_broken.SetActive(value: false); - } - m_worn.SetActive(value: true); - } - else - { - if (triggerEffects && !m_broken.activeSelf) - { - m_switchEffect.Create(base.transform.position, base.transform.rotation, base.transform); - } - if (m_new != m_broken) - { - m_new.SetActive(value: false); - } - if (m_worn != m_broken) - { - m_worn.SetActive(value: false); - } - m_broken.SetActive(value: true); - } - } - - public float GetHealthPercentage() - { - if (!m_nview.IsValid()) - { - return 1f; - } - return Mathf.Clamp01(m_nview.GetZDO().GetFloat("health", m_health) / m_health); - } - - public DestructibleType GetDestructibleType() - { - return DestructibleType.Default; - } - - public void Damage(HitData hit) - { - if (m_nview.IsValid()) - { - m_nview.InvokeRPC("WNTDamage", hit); - } - } - - private bool CanBeRemoved() - { - if ((bool)m_piece) - { - return m_piece.CanBeRemoved(); - } - return true; - } - - private void RPC_Damage(long sender, HitData hit) - { - if (!m_nview.IsOwner() || m_nview.GetZDO().GetFloat("health", m_health) <= 0f) - { - return; - } - hit.ApplyResistance(m_damages, out var significantModifier); - float totalDamage = hit.GetTotalDamage(); - if ((bool)m_piece && m_piece.IsPlacedByPlayer()) - { - PrivateArea.CheckInPrivateArea(base.transform.position, flash: true); - } - DamageText.instance.ShowText(significantModifier, hit.m_point, totalDamage); - if (totalDamage <= 0f) - { - return; - } - ApplyDamage(totalDamage); - m_hitEffect.Create(hit.m_point, Quaternion.identity, base.transform); - if (m_hitNoise > 0f) - { - Player closestPlayer = Player.GetClosestPlayer(hit.m_point, 10f); - if ((bool)closestPlayer) - { - closestPlayer.AddNoise(m_hitNoise); - } - } - if (m_onDamaged != null) - { - m_onDamaged(); - } - } - - public bool ApplyDamage(float damage) - { - float @float = m_nview.GetZDO().GetFloat("health", m_health); - if (@float <= 0f) - { - return false; - } - @float -= damage; - m_nview.GetZDO().Set("health", @float); - if (@float <= 0f) - { - Destroy(); - } - else - { - m_nview.InvokeRPC(ZNetView.Everybody, "WNTHealthChanged", @float); - } - return true; - } - - public void Destroy() - { - m_nview.GetZDO().Set("health", 0f); - if ((bool)m_piece) - { - m_piece.DropResources(); - } - if (m_onDestroyed != null) - { - m_onDestroyed(); - } - if (m_destroyNoise > 0f) - { - Player closestPlayer = Player.GetClosestPlayer(base.transform.position, 10f); - if ((bool)closestPlayer) - { - closestPlayer.AddNoise(m_destroyNoise); - } - } - m_destroyedEffect.Create(base.transform.position, base.transform.rotation, base.transform); - if (m_autoCreateFragments) - { - m_nview.InvokeRPC(ZNetView.Everybody, "WNTCreateFragments"); - } - ZNetScene.instance.Destroy(base.gameObject); - } - - private void RPC_CreateFragments(long peer) - { - ResetHighlight(); - if (m_fragmentRoots != null && m_fragmentRoots.Length != 0) - { - GameObject[] fragmentRoots = m_fragmentRoots; - foreach (GameObject obj in fragmentRoots) - { - obj.SetActive(value: true); - Destructible.CreateFragments(obj, visibleOnly: false); - } - } - else - { - Destructible.CreateFragments(base.gameObject); - } - } - - private float GetMaxSupport() - { - GetMaterialProperties(out var maxSupport, out var _, out var _, out var _); - return maxSupport; - } - - private float GetMinSupport() - { - GetMaterialProperties(out var _, out var minSupport, out var _, out var _); - return minSupport; - } - - private void GetMaterialProperties(out float maxSupport, out float minSupport, out float horizontalLoss, out float verticalLoss) - { - switch (m_materialType) - { - case MaterialType.Wood: - maxSupport = 100f; - minSupport = 10f; - verticalLoss = 0.125f; - horizontalLoss = 0.2f; - break; - case MaterialType.HardWood: - maxSupport = 140f; - minSupport = 10f; - verticalLoss = 0.1f; - horizontalLoss = 1f / 6f; - break; - case MaterialType.Stone: - maxSupport = 1000f; - minSupport = 100f; - verticalLoss = 0.125f; - horizontalLoss = 1f; - break; - case MaterialType.Iron: - maxSupport = 1500f; - minSupport = 20f; - verticalLoss = 1f / 13f; - horizontalLoss = 1f / 13f; - break; - default: - maxSupport = 0f; - minSupport = 0f; - verticalLoss = 0f; - horizontalLoss = 0f; - break; - } - } - - public static List<WearNTear> GetAllInstaces() - { - return m_allInstances; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/WearNTearUpdater.cs b/Valheim_v202102/Valheim/assembly_valheim/WearNTearUpdater.cs deleted file mode 100644 index 8225e2e..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/WearNTearUpdater.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using UnityEngine; - -public class WearNTearUpdater : MonoBehaviour -{ - private const int m_updatesPerFrame = 50; - - private void Awake() - { - StartCoroutine("UpdateWear"); - } - - private IEnumerator UpdateWear() - { - while (true) - { - List<WearNTear> instances = WearNTear.GetAllInstaces(); - int index = 0; - while (index < instances.Count) - { - for (int i = 0; i < 50; i++) - { - if (instances.Count == 0) - { - break; - } - if (index >= instances.Count) - { - break; - } - instances[index].UpdateWear(); - int num = index + 1; - index = num; - } - yield return null; - } - yield return new WaitForSeconds(0.5f); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/Windmill.cs b/Valheim_v202102/Valheim/assembly_valheim/Windmill.cs deleted file mode 100644 index 1420e82..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/Windmill.cs +++ /dev/null @@ -1,91 +0,0 @@ -using UnityEngine; - -public class Windmill : MonoBehaviour -{ - public Transform m_propeller; - - public Transform m_grindstone; - - public Transform m_bom; - - public AudioSource[] m_sfxLoops; - - public GameObject m_propellerAOE; - - public float m_minAOEPropellerSpeed = 5f; - - public float m_bomRotationSpeed = 10f; - - public float m_propellerRotationSpeed = 10f; - - public float m_grindstoneRotationSpeed = 10f; - - public float m_minWindSpeed = 0.1f; - - public float m_minPitch = 1f; - - public float m_maxPitch = 1.5f; - - public float m_maxPitchVel = 10f; - - public float m_maxVol = 1f; - - public float m_maxVolVel = 10f; - - public float m_audioChangeSpeed = 2f; - - private float m_cover; - - private float m_propAngle; - - private float m_grindStoneAngle; - - private Smelter m_smelter; - - private void Start() - { - m_smelter = GetComponent<Smelter>(); - InvokeRepeating("CheckCover", 0.1f, 5f); - } - - private void Update() - { - Quaternion to = Quaternion.LookRotation(-EnvMan.instance.GetWindDir()); - float powerOutput = GetPowerOutput(); - m_bom.rotation = Quaternion.RotateTowards(m_bom.rotation, to, m_bomRotationSpeed * powerOutput * Time.deltaTime); - float num = powerOutput * m_propellerRotationSpeed; - m_propAngle += num * Time.deltaTime; - m_propeller.localRotation = Quaternion.Euler(0f, 0f, m_propAngle); - if (m_smelter == null || m_smelter.IsActive()) - { - m_grindStoneAngle += powerOutput * m_grindstoneRotationSpeed * Time.deltaTime; - } - m_grindstone.localRotation = Quaternion.Euler(0f, m_grindStoneAngle, 0f); - m_propellerAOE.SetActive(Mathf.Abs(num) > m_minAOEPropellerSpeed); - UpdateAudio(Time.deltaTime); - } - - public float GetPowerOutput() - { - float num = Utils.LerpStep(m_minWindSpeed, 1f, EnvMan.instance.GetWindIntensity()); - return (1f - m_cover) * num; - } - - private void CheckCover() - { - Cover.GetCoverForPoint(m_propeller.transform.position, out m_cover, out var _); - } - - private void UpdateAudio(float dt) - { - float powerOutput = GetPowerOutput(); - float target = Mathf.Lerp(m_minPitch, m_maxPitch, Mathf.Clamp01(powerOutput / m_maxPitchVel)); - float target2 = m_maxVol * Mathf.Clamp01(powerOutput / m_maxVolVel); - AudioSource[] sfxLoops = m_sfxLoops; - foreach (AudioSource obj in sfxLoops) - { - obj.volume = Mathf.MoveTowards(obj.volume, target2, m_audioChangeSpeed * dt); - obj.pitch = Mathf.MoveTowards(obj.pitch, target, m_audioChangeSpeed * dt); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/World.cs b/Valheim_v202102/Valheim/assembly_valheim/World.cs deleted file mode 100644 index 6fb1408..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/World.cs +++ /dev/null @@ -1,236 +0,0 @@ -using System.Collections.Generic; -using System.IO; -using UnityEngine; - -public class World -{ - public string m_name = ""; - - public string m_seedName = ""; - - public int m_seed; - - public long m_uid; - - public int m_worldGenVersion; - - public bool m_menu; - - public bool m_loadError; - - public bool m_versionError; - - private string m_worldSavePath = ""; - - public World() - { - m_worldSavePath = GetWorldSavePath(); - } - - public World(string name, bool loadError, bool versionError) - { - m_name = name; - m_loadError = loadError; - m_versionError = versionError; - m_worldSavePath = GetWorldSavePath(); - } - - public World(string name, string seed) - { - m_name = name; - m_seedName = seed; - m_seed = ((!(m_seedName == "")) ? m_seedName.GetStableHashCode() : 0); - m_uid = name.GetStableHashCode() + Utils.GenerateUID(); - m_worldGenVersion = Version.m_worldGenVersion; - m_worldSavePath = GetWorldSavePath(); - } - - private static string GetWorldSavePath() - { - return Application.persistentDataPath + "/worlds"; - } - - public static List<World> GetWorldList() - { - string[] array; - try - { - array = Directory.GetFiles(GetWorldSavePath(), "*.fwl"); - } - catch - { - array = new string[0]; - } - List<World> list = new List<World>(); - string[] array2 = array; - for (int i = 0; i < array2.Length; i++) - { - World world = LoadWorld(Path.GetFileNameWithoutExtension(array2[i])); - if (world != null) - { - list.Add(world); - } - } - return list; - } - - public static void RemoveWorld(string name) - { - try - { - string text = GetWorldSavePath() + "/" + name; - File.Delete(text + ".fwl"); - File.Delete(text + ".db"); - } - catch - { - } - } - - public string GetDBPath() - { - return m_worldSavePath + "/" + m_name + ".db"; - } - - public string GetMetaPath() - { - return m_worldSavePath + "/" + m_name + ".fwl"; - } - - public static string GetMetaPath(string name) - { - return GetWorldSavePath() + "/" + name + ".fwl"; - } - - public static bool HaveWorld(string name) - { - return File.Exists(string.Concat(GetWorldSavePath() + "/" + name, ".fwl")); - } - - public static World GetMenuWorld() - { - return new World("menu", "") - { - m_menu = true - }; - } - - public static World GetEditorWorld() - { - return new World("editor", ""); - } - - public static string GenerateSeed() - { - string text = ""; - for (int i = 0; i < 10; i++) - { - text += "abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ023456789"[Random.Range(0, "abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ023456789".Length)]; - } - return text; - } - - public static World GetCreateWorld(string name) - { - ZLog.Log("Get create world " + name); - World world = LoadWorld(name); - if (!world.m_loadError && !world.m_versionError) - { - return world; - } - ZLog.Log(" creating"); - world = new World(name, GenerateSeed()); - world.SaveWorldMetaData(); - return world; - } - - public static World GetDevWorld() - { - World world = LoadWorld("DevWorld"); - if (!world.m_loadError && !world.m_versionError) - { - return world; - } - world = new World("DevWorld", ""); - world.SaveWorldMetaData(); - return world; - } - - public void SaveWorldMetaData() - { - ZPackage zPackage = new ZPackage(); - zPackage.Write(Version.m_worldVersion); - zPackage.Write(m_name); - zPackage.Write(m_seedName); - zPackage.Write(m_seed); - zPackage.Write(m_uid); - zPackage.Write(m_worldGenVersion); - Directory.CreateDirectory(m_worldSavePath); - string metaPath = GetMetaPath(); - string text = metaPath + ".new"; - string text2 = metaPath + ".old"; - FileStream fileStream = File.Create(text); - BinaryWriter binaryWriter = new BinaryWriter(fileStream); - byte[] array = zPackage.GetArray(); - binaryWriter.Write(array.Length); - binaryWriter.Write(array); - fileStream.Dispose(); - if (File.Exists(metaPath)) - { - if (File.Exists(text2)) - { - File.Delete(text2); - } - File.Move(metaPath, text2); - } - File.Move(text, metaPath); - } - - public static World LoadWorld(string name) - { - FileStream fileStream = null; - try - { - fileStream = File.OpenRead(GetMetaPath(name)); - } - catch - { - fileStream?.Dispose(); - ZLog.Log(" failed to load " + name); - return new World(name, loadError: true, versionError: false); - } - byte[] data; - try - { - BinaryReader binaryReader = new BinaryReader(fileStream); - int count = binaryReader.ReadInt32(); - data = binaryReader.ReadBytes(count); - } - catch - { - ZLog.LogWarning(" error loading world " + name); - return new World(name, loadError: true, versionError: false); - } - finally - { - fileStream?.Dispose(); - } - ZPackage zPackage = new ZPackage(data); - int num = zPackage.ReadInt(); - if (!Version.IsWorldVersionCompatible(num)) - { - ZLog.Log("incompatible world version " + num); - return new World(name, loadError: false, versionError: true); - } - World world = new World(); - world.m_name = zPackage.ReadString(); - world.m_seedName = zPackage.ReadString(); - world.m_seed = zPackage.ReadInt(); - world.m_uid = zPackage.ReadLong(); - if (num >= 26) - { - world.m_worldGenVersion = zPackage.ReadInt(); - } - return world; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/WorldGenerator.cs b/Valheim_v202102/Valheim/assembly_valheim/WorldGenerator.cs deleted file mode 100644 index 7d96344..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/WorldGenerator.cs +++ /dev/null @@ -1,1069 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using UnityEngine; - -public class WorldGenerator -{ - public class River - { - public Vector2 p0; - - public Vector2 p1; - - public Vector2 center; - - public float widthMin; - - public float widthMax; - - public float curveWidth; - - public float curveWavelength; - } - - public struct RiverPoint - { - public Vector2 p; - - public float w; - - public float w2; - - public RiverPoint(Vector2 p_p, float p_w) - { - p = p_p; - w = p_w; - w2 = p_w * p_w; - } - } - - private const float m_waterTreshold = 0.05f; - - private static WorldGenerator m_instance; - - private World m_world; - - private int m_version; - - private float m_offset0; - - private float m_offset1; - - private float m_offset2; - - private float m_offset3; - - private float m_offset4; - - private int m_riverSeed; - - private int m_streamSeed; - - private List<Vector2> m_mountains; - - private List<Vector2> m_lakes; - - private List<River> m_rivers = new List<River>(); - - private List<River> m_streams = new List<River>(); - - private Dictionary<Vector2i, RiverPoint[]> m_riverPoints = new Dictionary<Vector2i, RiverPoint[]>(); - - private RiverPoint[] m_cachedRiverPoints; - - private Vector2i m_cachedRiverGrid = new Vector2i(-999999, -999999); - - private ReaderWriterLockSlim m_riverCacheLock = new ReaderWriterLockSlim(); - - private List<Heightmap.Biome> m_biomes = new List<Heightmap.Biome>(); - - private const float riverGridSize = 64f; - - private const float minRiverWidth = 60f; - - private const float maxRiverWidth = 100f; - - private const float minRiverCurveWidth = 50f; - - private const float maxRiverCurveWidth = 80f; - - private const float minRiverCurveWaveLength = 50f; - - private const float maxRiverCurveWaveLength = 70f; - - private const int streams = 3000; - - private const float streamWidth = 20f; - - private const float meadowsMaxDistance = 5000f; - - private const float minDeepForestNoise = 0.4f; - - private const float minDeepForestDistance = 600f; - - private const float maxDeepForestDistance = 6000f; - - private const float deepForestForestFactorMax = 0.9f; - - private const float marshBiomeScale = 0.001f; - - private const float minMarshNoise = 0.6f; - - private const float minMarshDistance = 2000f; - - private const float maxMarshDistance = 8000f; - - private const float minMarshHeight = 0.05f; - - private const float maxMarshHeight = 0.25f; - - private const float heathBiomeScale = 0.001f; - - private const float minHeathNoise = 0.4f; - - private const float minHeathDistance = 3000f; - - private const float maxHeathDistance = 8000f; - - private const float darklandBiomeScale = 0.001f; - - private const float minDarklandNoise = 0.5f; - - private const float minDarklandDistance = 6000f; - - private const float maxDarklandDistance = 10000f; - - private const float oceanBiomeScale = 0.0005f; - - private const float oceanBiomeMinNoise = 0.4f; - - private const float oceanBiomeMaxNoise = 0.6f; - - private const float oceanBiomeMinDistance = 1000f; - - private const float oceanBiomeMinDistanceBuffer = 256f; - - private float m_minMountainDistance = 1000f; - - private const float mountainBaseHeightMin = 0.4f; - - private const float deepNorthMinDistance = 12000f; - - private const float deepNorthYOffset = 4000f; - - private const float ashlandsMinDistance = 12000f; - - private const float ashlandsYOffset = -4000f; - - public const float worldSize = 10000f; - - public const float waterEdge = 10500f; - - public static WorldGenerator instance => m_instance; - - public static void Initialize(World world) - { - m_instance = new WorldGenerator(world); - } - - public static void Deitialize() - { - m_instance = null; - } - - private WorldGenerator(World world) - { - m_world = world; - ZLog.Log("Initializing world generator seed:" + m_world.m_seedName + " ( " + m_world.m_seed + " ) menu:" + m_world.m_menu.ToString() + " worldgen version:" + m_world.m_worldGenVersion); - m_version = m_world.m_worldGenVersion; - VersionSetup(m_version); - UnityEngine.Random.State state = UnityEngine.Random.state; - UnityEngine.Random.InitState(m_world.m_seed); - m_offset0 = UnityEngine.Random.Range(-10000, 10000); - m_offset1 = UnityEngine.Random.Range(-10000, 10000); - m_offset2 = UnityEngine.Random.Range(-10000, 10000); - m_offset3 = UnityEngine.Random.Range(-10000, 10000); - m_riverSeed = UnityEngine.Random.Range(int.MinValue, int.MaxValue); - m_streamSeed = UnityEngine.Random.Range(int.MinValue, int.MaxValue); - m_offset4 = UnityEngine.Random.Range(-10000, 10000); - if (!m_world.m_menu) - { - Pregenerate(); - } - UnityEngine.Random.state = state; - } - - private void VersionSetup(int version) - { - if (version < 1) - { - m_minMountainDistance = 1500f; - } - ZLog.Log("Using mountain distance: " + m_minMountainDistance); - } - - private void Pregenerate() - { - FindMountains(); - FindLakes(); - m_rivers = PlaceRivers(); - m_streams = PlaceStreams(); - } - - public List<Vector2> GetMountains() - { - return m_mountains; - } - - public List<Vector2> GetLakes() - { - return m_lakes; - } - - public List<River> GetRivers() - { - return m_rivers; - } - - public List<River> GetStreams() - { - return m_streams; - } - - private void FindMountains() - { - DateTime now = DateTime.Now; - List<Vector2> list = new List<Vector2>(); - for (float num = -10000f; num <= 10000f; num += 128f) - { - for (float num2 = -10000f; num2 <= 10000f; num2 += 128f) - { - if (!(new Vector2(num2, num).magnitude > 10000f) && GetBaseHeight(num2, num, menuTerrain: false) > 0.45f) - { - list.Add(new Vector2(num2, num)); - } - } - } - ZLog.Log("Found " + list.Count + " mountain points"); - m_mountains = MergePoints(list, 800f); - ZLog.Log("Remaining mountains:" + m_mountains.Count); - ZLog.Log("Calc time " + (DateTime.Now - now).TotalMilliseconds + " ms"); - } - - private void FindLakes() - { - DateTime now = DateTime.Now; - List<Vector2> list = new List<Vector2>(); - for (float num = -10000f; num <= 10000f; num += 128f) - { - for (float num2 = -10000f; num2 <= 10000f; num2 += 128f) - { - if (!(new Vector2(num2, num).magnitude > 10000f) && GetBaseHeight(num2, num, menuTerrain: false) < 0.05f) - { - list.Add(new Vector2(num2, num)); - } - } - } - ZLog.Log("Found " + list.Count + " lake points"); - m_lakes = MergePoints(list, 800f); - ZLog.Log("Remaining lakes:" + m_lakes.Count); - ZLog.Log("Calc time " + (DateTime.Now - now).TotalMilliseconds + " ms"); - } - - private List<Vector2> MergePoints(List<Vector2> points, float range) - { - List<Vector2> list = new List<Vector2>(); - while (points.Count > 0) - { - Vector2 vector = points[0]; - points.RemoveAt(0); - while (points.Count > 0) - { - int num = FindClosest(points, vector, range); - if (num == -1) - { - break; - } - vector = (vector + points[num]) * 0.5f; - points[num] = points[points.Count - 1]; - points.RemoveAt(points.Count - 1); - } - list.Add(vector); - } - return list; - } - - private int FindClosest(List<Vector2> points, Vector2 p, float maxDistance) - { - int result = -1; - float num = 99999f; - for (int i = 0; i < points.Count; i++) - { - if (!(points[i] == p)) - { - float num2 = Vector2.Distance(p, points[i]); - if (num2 < maxDistance && num2 < num) - { - result = i; - num = num2; - } - } - } - return result; - } - - private List<River> PlaceStreams() - { - UnityEngine.Random.State state = UnityEngine.Random.state; - UnityEngine.Random.InitState(m_streamSeed); - List<River> list = new List<River>(); - int num = 0; - DateTime now = DateTime.Now; - for (int i = 0; i < 3000; i++) - { - if (FindStreamStartPoint(100, 26f, 31f, out var p, out var _) && FindStreamEndPoint(100, 36f, 44f, p, 80f, 200f, out var end)) - { - Vector2 center = (p + end) * 0.5f; - float height = GetHeight(center.x, center.y); - if (!(height < 26f) && !(height > 44f)) - { - River river = new River(); - river.p0 = p; - river.p1 = end; - river.center = center; - river.widthMax = 20f; - river.widthMin = 20f; - float num2 = Vector2.Distance(river.p0, river.p1); - river.curveWidth = num2 / 15f; - river.curveWavelength = num2 / 20f; - list.Add(river); - num++; - } - } - } - RenderRivers(list); - UnityEngine.Random.state = state; - ZLog.Log("Placed " + num + " streams"); - ZLog.Log("Stream Calc time " + (DateTime.Now - now).TotalMilliseconds + " ms"); - return list; - } - - private bool FindStreamEndPoint(int iterations, float minHeight, float maxHeight, Vector2 start, float minLength, float maxLength, out Vector2 end) - { - float num = (maxLength - minLength) / (float)iterations; - float num2 = maxLength; - for (int i = 0; i < iterations; i++) - { - num2 -= num; - float f = UnityEngine.Random.Range(0f, (float)Math.PI * 2f); - Vector2 vector = start + new Vector2(Mathf.Sin(f), Mathf.Cos(f)) * num2; - float height = GetHeight(vector.x, vector.y); - if (height > minHeight && height < maxHeight) - { - end = vector; - return true; - } - } - end = Vector2.zero; - return false; - } - - private bool FindStreamStartPoint(int iterations, float minHeight, float maxHeight, out Vector2 p, out float starth) - { - for (int i = 0; i < iterations; i++) - { - float num = UnityEngine.Random.Range(-10000f, 10000f); - float num2 = UnityEngine.Random.Range(-10000f, 10000f); - float height = GetHeight(num, num2); - if (height > minHeight && height < maxHeight) - { - p = new Vector2(num, num2); - starth = height; - return true; - } - } - p = Vector2.zero; - starth = 0f; - return false; - } - - private List<River> PlaceRivers() - { - UnityEngine.Random.State state = UnityEngine.Random.state; - UnityEngine.Random.InitState(m_riverSeed); - DateTime now = DateTime.Now; - List<River> list = new List<River>(); - List<Vector2> list2 = new List<Vector2>(m_lakes); - while (list2.Count > 1) - { - Vector2 vector = list2[0]; - int num = FindRandomRiverEnd(list, m_lakes, vector, 2000f, 0.4f, 128f); - if (num == -1 && !HaveRiver(list, vector)) - { - num = FindRandomRiverEnd(list, m_lakes, vector, 5000f, 0.4f, 128f); - } - if (num != -1) - { - River river = new River(); - river.p0 = vector; - river.p1 = m_lakes[num]; - river.center = (river.p0 + river.p1) * 0.5f; - river.widthMax = UnityEngine.Random.Range(60f, 100f); - river.widthMin = UnityEngine.Random.Range(60f, river.widthMax); - float num2 = Vector2.Distance(river.p0, river.p1); - river.curveWidth = num2 / 15f; - river.curveWavelength = num2 / 20f; - list.Add(river); - } - else - { - list2.RemoveAt(0); - } - } - ZLog.Log("Rivers:" + list.Count); - RenderRivers(list); - ZLog.Log("River Calc time " + (DateTime.Now - now).TotalMilliseconds + " ms"); - UnityEngine.Random.state = state; - return list; - } - - private int FindClosestRiverEnd(List<River> rivers, List<Vector2> points, Vector2 p, float maxDistance, float heightLimit, float checkStep) - { - int result = -1; - float num = 99999f; - for (int i = 0; i < points.Count; i++) - { - if (!(points[i] == p)) - { - float num2 = Vector2.Distance(p, points[i]); - if (num2 < maxDistance && num2 < num && !HaveRiver(rivers, p, points[i]) && IsRiverAllowed(p, points[i], checkStep, heightLimit)) - { - result = i; - num = num2; - } - } - } - return result; - } - - private int FindRandomRiverEnd(List<River> rivers, List<Vector2> points, Vector2 p, float maxDistance, float heightLimit, float checkStep) - { - List<int> list = new List<int>(); - for (int i = 0; i < points.Count; i++) - { - if (!(points[i] == p) && Vector2.Distance(p, points[i]) < maxDistance && !HaveRiver(rivers, p, points[i]) && IsRiverAllowed(p, points[i], checkStep, heightLimit)) - { - list.Add(i); - } - } - if (list.Count == 0) - { - return -1; - } - return list[UnityEngine.Random.Range(0, list.Count)]; - } - - private bool HaveRiver(List<River> rivers, Vector2 p0) - { - foreach (River river in rivers) - { - if (river.p0 == p0 || river.p1 == p0) - { - return true; - } - } - return false; - } - - private bool HaveRiver(List<River> rivers, Vector2 p0, Vector2 p1) - { - foreach (River river in rivers) - { - if ((river.p0 == p0 && river.p1 == p1) || (river.p0 == p1 && river.p1 == p0)) - { - return true; - } - } - return false; - } - - private bool IsRiverAllowed(Vector2 p0, Vector2 p1, float step, float heightLimit) - { - float num = Vector2.Distance(p0, p1); - Vector2 normalized = (p1 - p0).normalized; - bool flag = true; - for (float num2 = step; num2 <= num - step; num2 += step) - { - Vector2 vector = p0 + normalized * num2; - float baseHeight = GetBaseHeight(vector.x, vector.y, menuTerrain: false); - if (baseHeight > heightLimit) - { - return false; - } - if (baseHeight > 0.05f) - { - flag = false; - } - } - if (flag) - { - return false; - } - return true; - } - - private void RenderRivers(List<River> rivers) - { - DateTime now = DateTime.Now; - Dictionary<Vector2i, List<RiverPoint>> dictionary = new Dictionary<Vector2i, List<RiverPoint>>(); - foreach (River river in rivers) - { - float num = river.widthMin / 8f; - Vector2 normalized = (river.p1 - river.p0).normalized; - Vector2 vector = new Vector2(0f - normalized.y, normalized.x); - float num2 = Vector2.Distance(river.p0, river.p1); - for (float num3 = 0f; num3 <= num2; num3 += num) - { - float num4 = num3 / river.curveWavelength; - float num5 = Mathf.Sin(num4) * Mathf.Sin(num4 * 0.63412f) * Mathf.Sin(num4 * 0.33412f) * river.curveWidth; - float r = UnityEngine.Random.Range(river.widthMin, river.widthMax); - Vector2 p = river.p0 + normalized * num3 + vector * num5; - AddRiverPoint(dictionary, p, r, river); - } - } - foreach (KeyValuePair<Vector2i, List<RiverPoint>> item in dictionary) - { - if (m_riverPoints.TryGetValue(item.Key, out var value)) - { - List<RiverPoint> list = new List<RiverPoint>(value); - list.AddRange(item.Value); - m_riverPoints[item.Key] = list.ToArray(); - } - else - { - RiverPoint[] value2 = item.Value.ToArray(); - m_riverPoints.Add(item.Key, value2); - } - } - ZLog.Log("River buckets " + m_riverPoints.Count); - ZLog.Log("River render time " + (DateTime.Now - now).TotalMilliseconds + " ms"); - } - - private void AddRiverPoint(Dictionary<Vector2i, List<RiverPoint>> riverPoints, Vector2 p, float r, River river) - { - Vector2i riverGrid = GetRiverGrid(p.x, p.y); - int num = Mathf.CeilToInt(r / 64f); - for (int i = riverGrid.y - num; i <= riverGrid.y + num; i++) - { - for (int j = riverGrid.x - num; j <= riverGrid.x + num; j++) - { - Vector2i grid = new Vector2i(j, i); - if (InsideRiverGrid(grid, p, r)) - { - AddRiverPoint(riverPoints, grid, p, r, river); - } - } - } - } - - private void AddRiverPoint(Dictionary<Vector2i, List<RiverPoint>> riverPoints, Vector2i grid, Vector2 p, float r, River river) - { - if (riverPoints.TryGetValue(grid, out var value)) - { - value.Add(new RiverPoint(p, r)); - return; - } - value = new List<RiverPoint>(); - value.Add(new RiverPoint(p, r)); - riverPoints.Add(grid, value); - } - - public bool InsideRiverGrid(Vector2i grid, Vector2 p, float r) - { - Vector2 vector = new Vector2((float)grid.x * 64f, (float)grid.y * 64f); - Vector2 vector2 = p - vector; - if (Mathf.Abs(vector2.x) < r + 32f) - { - return Mathf.Abs(vector2.y) < r + 32f; - } - return false; - } - - public Vector2i GetRiverGrid(float wx, float wy) - { - int x = Mathf.FloorToInt((wx + 32f) / 64f); - int y = Mathf.FloorToInt((wy + 32f) / 64f); - return new Vector2i(x, y); - } - - private void GetRiverWeight(float wx, float wy, out float weight, out float width) - { - Vector2i riverGrid = GetRiverGrid(wx, wy); - m_riverCacheLock.EnterReadLock(); - if (riverGrid == m_cachedRiverGrid) - { - if (m_cachedRiverPoints != null) - { - GetWeight(m_cachedRiverPoints, wx, wy, out weight, out width); - m_riverCacheLock.ExitReadLock(); - } - else - { - weight = 0f; - width = 0f; - m_riverCacheLock.ExitReadLock(); - } - return; - } - m_riverCacheLock.ExitReadLock(); - if (m_riverPoints.TryGetValue(riverGrid, out var value)) - { - GetWeight(value, wx, wy, out weight, out width); - m_riverCacheLock.EnterWriteLock(); - m_cachedRiverGrid = riverGrid; - m_cachedRiverPoints = value; - m_riverCacheLock.ExitWriteLock(); - } - else - { - m_riverCacheLock.EnterWriteLock(); - m_cachedRiverGrid = riverGrid; - m_cachedRiverPoints = null; - m_riverCacheLock.ExitWriteLock(); - weight = 0f; - width = 0f; - } - } - - private void GetWeight(RiverPoint[] points, float wx, float wy, out float weight, out float width) - { - Vector2 vector = new Vector2(wx, wy); - weight = 0f; - width = 0f; - float num = 0f; - float num2 = 0f; - for (int i = 0; i < points.Length; i++) - { - RiverPoint riverPoint = points[i]; - float num3 = Vector2.SqrMagnitude(riverPoint.p - vector); - if (num3 < riverPoint.w2) - { - float num4 = Mathf.Sqrt(num3); - float num5 = 1f - num4 / riverPoint.w; - if (num5 > weight) - { - weight = num5; - } - num += riverPoint.w * num5; - num2 += num5; - } - } - if (num2 > 0f) - { - width = num / num2; - } - } - - private void GenerateBiomes() - { - m_biomes = new List<Heightmap.Biome>(); - int num = 400000000; - for (int i = 0; i < num; i++) - { - m_biomes[i] = Heightmap.Biome.Meadows; - } - } - - public Heightmap.BiomeArea GetBiomeArea(Vector3 point) - { - Heightmap.Biome biome = GetBiome(point); - Heightmap.Biome biome2 = GetBiome(point - new Vector3(-64f, 0f, -64f)); - Heightmap.Biome biome3 = GetBiome(point - new Vector3(64f, 0f, -64f)); - Heightmap.Biome biome4 = GetBiome(point - new Vector3(64f, 0f, 64f)); - Heightmap.Biome biome5 = GetBiome(point - new Vector3(-64f, 0f, 64f)); - Heightmap.Biome biome6 = GetBiome(point - new Vector3(-64f, 0f, 0f)); - Heightmap.Biome biome7 = GetBiome(point - new Vector3(64f, 0f, 0f)); - Heightmap.Biome biome8 = GetBiome(point - new Vector3(0f, 0f, -64f)); - Heightmap.Biome biome9 = GetBiome(point - new Vector3(0f, 0f, 64f)); - if (biome == biome2 && biome == biome3 && biome == biome4 && biome == biome5 && biome == biome6 && biome == biome7 && biome == biome8 && biome == biome9) - { - return Heightmap.BiomeArea.Median; - } - return Heightmap.BiomeArea.Edge; - } - - public Heightmap.Biome GetBiome(Vector3 point) - { - return GetBiome(point.x, point.z); - } - - public Heightmap.Biome GetBiome(float wx, float wy) - { - if (m_world.m_menu) - { - if (GetBaseHeight(wx, wy, menuTerrain: true) >= 0.4f) - { - return Heightmap.Biome.Mountain; - } - return Heightmap.Biome.BlackForest; - } - float magnitude = new Vector2(wx, wy).magnitude; - float baseHeight = GetBaseHeight(wx, wy, menuTerrain: false); - float num = WorldAngle(wx, wy) * 100f; - if (new Vector2(wx, wy + -4000f).magnitude > 12000f + num) - { - return Heightmap.Biome.AshLands; - } - if ((double)baseHeight <= 0.02) - { - return Heightmap.Biome.Ocean; - } - if (new Vector2(wx, wy + 4000f).magnitude > 12000f + num) - { - if (baseHeight > 0.4f) - { - return Heightmap.Biome.Mountain; - } - return Heightmap.Biome.DeepNorth; - } - if (baseHeight > 0.4f) - { - return Heightmap.Biome.Mountain; - } - if (Mathf.PerlinNoise((m_offset0 + wx) * 0.001f, (m_offset0 + wy) * 0.001f) > 0.6f && magnitude > 2000f && magnitude < 8000f && baseHeight > 0.05f && baseHeight < 0.25f) - { - return Heightmap.Biome.Swamp; - } - if (Mathf.PerlinNoise((m_offset4 + wx) * 0.001f, (m_offset4 + wy) * 0.001f) > 0.5f && magnitude > 6000f + num && magnitude < 10000f) - { - return Heightmap.Biome.Mistlands; - } - if (Mathf.PerlinNoise((m_offset1 + wx) * 0.001f, (m_offset1 + wy) * 0.001f) > 0.4f && magnitude > 3000f + num && magnitude < 8000f) - { - return Heightmap.Biome.Plains; - } - if (Mathf.PerlinNoise((m_offset2 + wx) * 0.001f, (m_offset2 + wy) * 0.001f) > 0.4f && magnitude > 600f + num && magnitude < 6000f) - { - return Heightmap.Biome.BlackForest; - } - if (magnitude > 5000f + num) - { - return Heightmap.Biome.BlackForest; - } - return Heightmap.Biome.Meadows; - } - - private float WorldAngle(float wx, float wy) - { - return Mathf.Sin(Mathf.Atan2(wx, wy) * 20f); - } - - private float GetBaseHeight(float wx, float wy, bool menuTerrain) - { - if (menuTerrain) - { - wx += 100000f + m_offset0; - wy += 100000f + m_offset1; - float num = 0f; - num += Mathf.PerlinNoise(wx * 0.002f * 0.5f, wy * 0.002f * 0.5f) * Mathf.PerlinNoise(wx * 0.003f * 0.5f, wy * 0.003f * 0.5f) * 1f; - num += Mathf.PerlinNoise(wx * 0.002f * 1f, wy * 0.002f * 1f) * Mathf.PerlinNoise(wx * 0.003f * 1f, wy * 0.003f * 1f) * num * 0.9f; - num += Mathf.PerlinNoise(wx * 0.005f * 1f, wy * 0.005f * 1f) * Mathf.PerlinNoise(wx * 0.01f * 1f, wy * 0.01f * 1f) * 0.5f * num; - return num - 0.07f; - } - float num2 = Utils.Length(wx, wy); - wx += 100000f + m_offset0; - wy += 100000f + m_offset1; - float num3 = 0f; - num3 += Mathf.PerlinNoise(wx * 0.002f * 0.5f, wy * 0.002f * 0.5f) * Mathf.PerlinNoise(wx * 0.003f * 0.5f, wy * 0.003f * 0.5f) * 1f; - num3 += Mathf.PerlinNoise(wx * 0.002f * 1f, wy * 0.002f * 1f) * Mathf.PerlinNoise(wx * 0.003f * 1f, wy * 0.003f * 1f) * num3 * 0.9f; - num3 += Mathf.PerlinNoise(wx * 0.005f * 1f, wy * 0.005f * 1f) * Mathf.PerlinNoise(wx * 0.01f * 1f, wy * 0.01f * 1f) * 0.5f * num3; - num3 -= 0.07f; - float num4 = Mathf.PerlinNoise(wx * 0.002f * 0.25f + 0.123f, wy * 0.002f * 0.25f + 0.15123f); - float num5 = Mathf.PerlinNoise(wx * 0.002f * 0.25f + 0.321f, wy * 0.002f * 0.25f + 0.231f); - float v = Mathf.Abs(num4 - num5); - float num6 = 1f - Utils.LerpStep(0.02f, 0.12f, v); - num6 *= Utils.SmoothStep(744f, 1000f, num2); - num3 *= 1f - num6; - if (num2 > 10000f) - { - float t = Utils.LerpStep(10000f, 10500f, num2); - num3 = Mathf.Lerp(num3, -0.2f, t); - float num7 = 10490f; - if (num2 > num7) - { - float t2 = Utils.LerpStep(num7, 10500f, num2); - num3 = Mathf.Lerp(num3, -2f, t2); - } - } - if (num2 < m_minMountainDistance && num3 > 0.28f) - { - float t3 = Mathf.Clamp01((num3 - 0.28f) / 0.099999994f); - num3 = Mathf.Lerp(Mathf.Lerp(0.28f, 0.38f, t3), num3, Utils.LerpStep(m_minMountainDistance - 400f, m_minMountainDistance, num2)); - } - return num3; - } - - private float AddRivers(float wx, float wy, float h) - { - GetRiverWeight(wx, wy, out var weight, out var width); - if (weight <= 0f) - { - return h; - } - float t = Utils.LerpStep(20f, 60f, width); - float num = Mathf.Lerp(0.14f, 0.12f, t); - float num2 = Mathf.Lerp(0.139f, 0.128f, t); - if (h > num) - { - h = Mathf.Lerp(h, num, weight); - } - if (h > num2) - { - float t2 = Utils.LerpStep(0.85f, 1f, weight); - h = Mathf.Lerp(h, num2, t2); - } - return h; - } - - public float GetHeight(float wx, float wy) - { - Heightmap.Biome biome = GetBiome(wx, wy); - return GetBiomeHeight(biome, wx, wy); - } - - public float GetBiomeHeight(Heightmap.Biome biome, float wx, float wy) - { - if (m_world.m_menu) - { - if (biome == Heightmap.Biome.Mountain) - { - return GetSnowMountainHeight(wx, wy, menu: true) * 200f; - } - return GetMenuHeight(wx, wy) * 200f; - } - return biome switch - { - Heightmap.Biome.Swamp => GetMarshHeight(wx, wy) * 200f, - Heightmap.Biome.DeepNorth => GetDeepNorthHeight(wx, wy) * 200f, - Heightmap.Biome.Mountain => GetSnowMountainHeight(wx, wy, menu: false) * 200f, - Heightmap.Biome.BlackForest => GetForestHeight(wx, wy) * 200f, - Heightmap.Biome.Ocean => GetOceanHeight(wx, wy) * 200f, - Heightmap.Biome.AshLands => GetAshlandsHeight(wx, wy) * 200f, - Heightmap.Biome.Plains => GetPlainsHeight(wx, wy) * 200f, - Heightmap.Biome.Meadows => GetMeadowsHeight(wx, wy) * 200f, - Heightmap.Biome.Mistlands => GetForestHeight(wx, wy) * 200f, - _ => 0f, - }; - } - - private float GetMarshHeight(float wx, float wy) - { - float wx2 = wx; - float wy2 = wy; - float num = 0.137f; - wx += 100000f; - wy += 100000f; - float num2 = Mathf.PerlinNoise(wx * 0.04f, wy * 0.04f) * Mathf.PerlinNoise(wx * 0.08f, wy * 0.08f); - num += num2 * 0.03f; - num = AddRivers(wx2, wy2, num); - num += Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * 0.01f; - return num + Mathf.PerlinNoise(wx * 0.4f, wy * 0.4f) * 0.003f; - } - - private float GetMeadowsHeight(float wx, float wy) - { - float wx2 = wx; - float wy2 = wy; - float baseHeight = GetBaseHeight(wx, wy, menuTerrain: false); - wx += 100000f + m_offset3; - wy += 100000f + m_offset3; - float num = Mathf.PerlinNoise(wx * 0.01f, wy * 0.01f) * Mathf.PerlinNoise(wx * 0.02f, wy * 0.02f); - num += Mathf.PerlinNoise(wx * 0.05f, wy * 0.05f) * Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * num * 0.5f; - float num2 = baseHeight; - num2 += num * 0.1f; - float num3 = 0.15f; - float num4 = num2 - num3; - float num5 = Mathf.Clamp01(baseHeight / 0.4f); - if (num4 > 0f) - { - num2 -= num4 * (1f - num5) * 0.75f; - } - num2 = AddRivers(wx2, wy2, num2); - num2 += Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * 0.01f; - return num2 + Mathf.PerlinNoise(wx * 0.4f, wy * 0.4f) * 0.003f; - } - - private float GetForestHeight(float wx, float wy) - { - float wx2 = wx; - float wy2 = wy; - float baseHeight = GetBaseHeight(wx, wy, menuTerrain: false); - wx += 100000f + m_offset3; - wy += 100000f + m_offset3; - float num = Mathf.PerlinNoise(wx * 0.01f, wy * 0.01f) * Mathf.PerlinNoise(wx * 0.02f, wy * 0.02f); - num += Mathf.PerlinNoise(wx * 0.05f, wy * 0.05f) * Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * num * 0.5f; - baseHeight += num * 0.1f; - baseHeight = AddRivers(wx2, wy2, baseHeight); - baseHeight += Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * 0.01f; - return baseHeight + Mathf.PerlinNoise(wx * 0.4f, wy * 0.4f) * 0.003f; - } - - private float GetPlainsHeight(float wx, float wy) - { - float wx2 = wx; - float wy2 = wy; - float baseHeight = GetBaseHeight(wx, wy, menuTerrain: false); - wx += 100000f + m_offset3; - wy += 100000f + m_offset3; - float num = Mathf.PerlinNoise(wx * 0.01f, wy * 0.01f) * Mathf.PerlinNoise(wx * 0.02f, wy * 0.02f); - num += Mathf.PerlinNoise(wx * 0.05f, wy * 0.05f) * Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * num * 0.5f; - float num2 = baseHeight; - num2 += num * 0.1f; - float num3 = 0.15f; - float num4 = num2 - num3; - float num5 = Mathf.Clamp01(baseHeight / 0.4f); - if (num4 > 0f) - { - num2 -= num4 * (1f - num5) * 0.75f; - } - num2 = AddRivers(wx2, wy2, num2); - num2 += Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * 0.01f; - return num2 + Mathf.PerlinNoise(wx * 0.4f, wy * 0.4f) * 0.003f; - } - - private float GetMenuHeight(float wx, float wy) - { - float baseHeight = GetBaseHeight(wx, wy, menuTerrain: true); - wx += 100000f + m_offset3; - wy += 100000f + m_offset3; - float num = Mathf.PerlinNoise(wx * 0.01f, wy * 0.01f) * Mathf.PerlinNoise(wx * 0.02f, wy * 0.02f); - num += Mathf.PerlinNoise(wx * 0.05f, wy * 0.05f) * Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * num * 0.5f; - return baseHeight + num * 0.1f + Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * 0.01f + Mathf.PerlinNoise(wx * 0.4f, wy * 0.4f) * 0.003f; - } - - private float GetAshlandsHeight(float wx, float wy) - { - float wx2 = wx; - float wy2 = wy; - float baseHeight = GetBaseHeight(wx, wy, menuTerrain: false); - wx += 100000f + m_offset3; - wy += 100000f + m_offset3; - float num = Mathf.PerlinNoise(wx * 0.01f, wy * 0.01f) * Mathf.PerlinNoise(wx * 0.02f, wy * 0.02f); - num += Mathf.PerlinNoise(wx * 0.05f, wy * 0.05f) * Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * num * 0.5f; - baseHeight += num * 0.1f; - baseHeight += 0.1f; - baseHeight += Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * 0.01f; - baseHeight += Mathf.PerlinNoise(wx * 0.4f, wy * 0.4f) * 0.003f; - return AddRivers(wx2, wy2, baseHeight); - } - - private float GetEdgeHeight(float wx, float wy) - { - float magnitude = new Vector2(wx, wy).magnitude; - float num = 10490f; - if (magnitude > num) - { - float num2 = Utils.LerpStep(num, 10500f, magnitude); - return -2f * num2; - } - float t = Utils.LerpStep(10000f, 10100f, magnitude); - float baseHeight = GetBaseHeight(wx, wy, menuTerrain: false); - baseHeight = Mathf.Lerp(baseHeight, 0f, t); - return AddRivers(wx, wy, baseHeight); - } - - private float GetOceanHeight(float wx, float wy) - { - return GetBaseHeight(wx, wy, menuTerrain: false); - } - - private float BaseHeightTilt(float wx, float wy) - { - float baseHeight = GetBaseHeight(wx - 1f, wy, menuTerrain: false); - float baseHeight2 = GetBaseHeight(wx + 1f, wy, menuTerrain: false); - float baseHeight3 = GetBaseHeight(wx, wy - 1f, menuTerrain: false); - float baseHeight4 = GetBaseHeight(wx, wy + 1f, menuTerrain: false); - return Mathf.Abs(baseHeight2 - baseHeight) + Mathf.Abs(baseHeight3 - baseHeight4); - } - - private float GetSnowMountainHeight(float wx, float wy, bool menu) - { - float wx2 = wx; - float wy2 = wy; - float baseHeight = GetBaseHeight(wx, wy, menu); - float num = BaseHeightTilt(wx, wy); - wx += 100000f + m_offset3; - wy += 100000f + m_offset3; - float num2 = baseHeight - 0.4f; - baseHeight += num2; - float num3 = Mathf.PerlinNoise(wx * 0.01f, wy * 0.01f) * Mathf.PerlinNoise(wx * 0.02f, wy * 0.02f); - num3 += Mathf.PerlinNoise(wx * 0.05f, wy * 0.05f) * Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * num3 * 0.5f; - baseHeight += num3 * 0.2f; - baseHeight = AddRivers(wx2, wy2, baseHeight); - baseHeight += Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * 0.01f; - baseHeight += Mathf.PerlinNoise(wx * 0.4f, wy * 0.4f) * 0.003f; - return baseHeight + Mathf.PerlinNoise(wx * 0.2f, wy * 0.2f) * 2f * num; - } - - private float GetDeepNorthHeight(float wx, float wy) - { - float wx2 = wx; - float wy2 = wy; - float baseHeight = GetBaseHeight(wx, wy, menuTerrain: false); - wx += 100000f + m_offset3; - wy += 100000f + m_offset3; - float num = Mathf.Max(0f, baseHeight - 0.4f); - baseHeight += num; - float num2 = Mathf.PerlinNoise(wx * 0.01f, wy * 0.01f) * Mathf.PerlinNoise(wx * 0.02f, wy * 0.02f); - num2 += Mathf.PerlinNoise(wx * 0.05f, wy * 0.05f) * Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * num2 * 0.5f; - baseHeight += num2 * 0.2f; - baseHeight *= 1.2f; - baseHeight = AddRivers(wx2, wy2, baseHeight); - baseHeight += Mathf.PerlinNoise(wx * 0.1f, wy * 0.1f) * 0.01f; - return baseHeight + Mathf.PerlinNoise(wx * 0.4f, wy * 0.4f) * 0.003f; - } - - public static bool InForest(Vector3 pos) - { - return GetForestFactor(pos) < 1.15f; - } - - public static float GetForestFactor(Vector3 pos) - { - float num = 0.4f; - return Utils.Fbm(pos * 0.01f * num, 3, 1.6f, 0.7f); - } - - public void GetTerrainDelta(Vector3 center, float radius, out float delta, out Vector3 slopeDirection) - { - int num = 10; - float num2 = -999999f; - float num3 = 999999f; - Vector3 vector = center; - Vector3 vector2 = center; - for (int i = 0; i < num; i++) - { - Vector2 vector3 = UnityEngine.Random.insideUnitCircle * radius; - Vector3 vector4 = center + new Vector3(vector3.x, 0f, vector3.y); - float height = GetHeight(vector4.x, vector4.z); - if (height < num3) - { - num3 = height; - vector2 = vector4; - } - if (height > num2) - { - num2 = height; - vector = vector4; - } - } - delta = num2 - num3; - slopeDirection = Vector3.Normalize(vector2 - vector); - } - - public int GetSeed() - { - return m_world.m_seed; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZBroastcast.cs b/Valheim_v202102/Valheim/assembly_valheim/ZBroastcast.cs deleted file mode 100644 index a33eb77..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZBroastcast.cs +++ /dev/null @@ -1,174 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Net; -using System.Net.Sockets; -using System.Threading; - -public class ZBroastcast : IDisposable -{ - public class HostData - { - public string m_host; - - public int m_port; - - public float m_timeout; - } - - private List<HostData> m_hosts = new List<HostData>(); - - private static ZBroastcast m_instance; - - private const int m_port = 6542; - - private const float m_pingInterval = 5f; - - private const float m_hostTimeout = 10f; - - private float m_timer; - - private int m_myPort; - - private Socket m_socket; - - private UdpClient m_listner; - - private Mutex m_lock = new Mutex(); - - public static ZBroastcast instance => m_instance; - - public static void Initialize() - { - if (m_instance == null) - { - m_instance = new ZBroastcast(); - } - } - - private ZBroastcast() - { - ZLog.Log("opening zbroadcast"); - m_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); - m_socket.EnableBroadcast = true; - try - { - m_listner = new UdpClient(6542); - m_listner.EnableBroadcast = true; - m_listner.BeginReceive(GotPackage, null); - } - catch (Exception ex) - { - m_listner = null; - ZLog.Log("Error creating zbroadcast socket " + ex.ToString()); - } - } - - public void SetServerPort(int port) - { - m_myPort = port; - } - - public void Dispose() - { - ZLog.Log("Clozing zbroadcast"); - if (m_listner != null) - { - m_listner.Close(); - } - m_socket.Close(); - m_lock.Close(); - if (m_instance == this) - { - m_instance = null; - } - } - - public void Update(float dt) - { - m_timer -= dt; - if (m_timer <= 0f) - { - m_timer = 5f; - if (m_myPort != 0) - { - Ping(); - } - } - TimeoutHosts(dt); - } - - private void GotPackage(IAsyncResult ar) - { - IPEndPoint remoteEP = new IPEndPoint(0L, 0); - byte[] array; - try - { - array = m_listner.EndReceive(ar, ref remoteEP); - } - catch (ObjectDisposedException) - { - return; - } - if (array.Length >= 5) - { - ZPackage zPackage = new ZPackage(array); - if (zPackage.ReadChar() == 'F' && zPackage.ReadChar() == 'E' && zPackage.ReadChar() == 'J' && zPackage.ReadChar() == 'D') - { - int port = zPackage.ReadInt(); - m_lock.WaitOne(); - AddHost(remoteEP.Address.ToString(), port); - m_lock.ReleaseMutex(); - m_listner.BeginReceive(GotPackage, null); - } - } - } - - private void Ping() - { - IPEndPoint remoteEP = new IPEndPoint(IPAddress.Broadcast, 6542); - ZPackage zPackage = new ZPackage(); - zPackage.Write('F'); - zPackage.Write('E'); - zPackage.Write('J'); - zPackage.Write('D'); - zPackage.Write(m_myPort); - m_socket.SendTo(zPackage.GetArray(), remoteEP); - } - - private void AddHost(string host, int port) - { - foreach (HostData host2 in m_hosts) - { - if (host2.m_port == port && host2.m_host == host) - { - host2.m_timeout = 0f; - return; - } - } - HostData hostData = new HostData(); - hostData.m_host = host; - hostData.m_port = port; - hostData.m_timeout = 0f; - m_hosts.Add(hostData); - } - - private void TimeoutHosts(float dt) - { - m_lock.WaitOne(); - foreach (HostData host in m_hosts) - { - host.m_timeout += dt; - if (host.m_timeout > 10f) - { - m_hosts.Remove(host); - return; - } - } - m_lock.ReleaseMutex(); - } - - public void GetHostList(List<HostData> hosts) - { - hosts.AddRange(m_hosts); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZConnector.cs b/Valheim_v202102/Valheim/assembly_valheim/ZConnector.cs deleted file mode 100644 index 9c23678..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZConnector.cs +++ /dev/null @@ -1,150 +0,0 @@ -using System; -using System.Net; -using System.Net.Sockets; - -public class ZConnector : IDisposable -{ - private Socket m_socket; - - private IAsyncResult m_result; - - private IPEndPoint m_endPoint; - - private string m_host; - - private int m_port; - - private bool m_dnsError; - - private bool m_abort; - - private float m_timer; - - private static float m_timeout = 5f; - - public ZConnector(string host, int port) - { - m_host = host; - m_port = port; - ZLog.Log("Zconnect " + host + " " + port); - Dns.BeginGetHostEntry(host, OnHostLookupDone, null); - } - - public void Dispose() - { - Close(); - } - - private void Close() - { - if (m_socket != null) - { - try - { - if (m_socket.Connected) - { - m_socket.Shutdown(SocketShutdown.Both); - } - } - catch (Exception ex) - { - ZLog.Log("Some excepetion when shuting down ZConnector socket, ignoring:" + ex); - } - m_socket.Close(); - m_socket = null; - } - m_abort = true; - } - - public bool IsPeer(string host, int port) - { - if (m_host == host && m_port == port) - { - return true; - } - return false; - } - - public bool UpdateStatus(float dt, bool logErrors = false) - { - if (m_abort) - { - ZLog.Log("ZConnector - Abort"); - return true; - } - if (m_dnsError) - { - ZLog.Log("ZConnector - dns error"); - return true; - } - if (m_result != null && m_result.IsCompleted) - { - ZLog.Log("ZConnector - result completed"); - return true; - } - m_timer += dt; - if (m_timer > m_timeout) - { - ZLog.Log("ZConnector - timeout"); - Close(); - return true; - } - return false; - } - - public ZSocket Complete() - { - if (m_socket != null && m_socket.Connected) - { - ZSocket result = new ZSocket(m_socket, m_host); - m_socket = null; - return result; - } - Close(); - return null; - } - - public bool CompareEndPoint(IPEndPoint endpoint) - { - return m_endPoint.Equals(endpoint); - } - - private void OnHostLookupDone(IAsyncResult res) - { - IPHostEntry iPHostEntry = Dns.EndGetHostEntry(res); - if (m_abort) - { - ZLog.Log("Host lookup abort"); - return; - } - if (iPHostEntry.AddressList.Length == 0) - { - m_dnsError = true; - ZLog.Log("Host lookup adress list empty"); - return; - } - ZLog.Log("Host lookup done , addresses: " + iPHostEntry.AddressList.Length); - IPAddress[] addressList = iPHostEntry.AddressList; - foreach (IPAddress iPAddress in addressList) - { - ZLog.Log(" " + iPAddress); - } - m_socket = ZSocket.CreateSocket(); - m_result = m_socket.BeginConnect(iPHostEntry.AddressList, m_port, null, null); - } - - public string GetEndPointString() - { - return m_host + ":" + m_port; - } - - public string GetHostName() - { - return m_host; - } - - public int GetHostPort() - { - return m_port; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZConnector2.cs b/Valheim_v202102/Valheim/assembly_valheim/ZConnector2.cs deleted file mode 100644 index 0643547..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZConnector2.cs +++ /dev/null @@ -1,131 +0,0 @@ -using System; -using System.Net; -using System.Net.Sockets; - -public class ZConnector2 : IDisposable -{ - private TcpClient m_socket; - - private IAsyncResult m_result; - - private IPEndPoint m_endPoint; - - private string m_host; - - private int m_port; - - private bool m_dnsError; - - private bool m_abort; - - private float m_timer; - - private static float m_timeout = 5f; - - public ZConnector2(string host, int port) - { - m_host = host; - m_port = port; - Dns.BeginGetHostEntry(host, OnHostLookupDone, null); - } - - public void Dispose() - { - Close(); - } - - private void Close() - { - if (m_socket != null) - { - m_socket.Close(); - m_socket = null; - } - m_abort = true; - } - - public bool IsPeer(string host, int port) - { - if (m_host == host && m_port == port) - { - return true; - } - return false; - } - - public bool UpdateStatus(float dt, bool logErrors = false) - { - if (m_abort) - { - ZLog.Log("ZConnector - Abort"); - return true; - } - if (m_dnsError) - { - ZLog.Log("ZConnector - dns error"); - return true; - } - if (m_result != null && m_result.IsCompleted) - { - return true; - } - m_timer += dt; - if (m_timer > m_timeout) - { - Close(); - return true; - } - return false; - } - - public ZSocket2 Complete() - { - if (m_socket != null && m_socket.Connected) - { - ZSocket2 result = new ZSocket2(m_socket, m_host); - m_socket = null; - return result; - } - Close(); - return null; - } - - public bool CompareEndPoint(IPEndPoint endpoint) - { - return m_endPoint.Equals(endpoint); - } - - private void OnHostLookupDone(IAsyncResult res) - { - IPHostEntry iPHostEntry = Dns.EndGetHostEntry(res); - if (m_abort) - { - ZLog.Log("Host lookup abort"); - } - else if (iPHostEntry.AddressList.Length == 0) - { - m_dnsError = true; - ZLog.Log("Host lookup adress list empty"); - } - else - { - m_socket = ZSocket2.CreateSocket(); - m_result = m_socket.BeginConnect(iPHostEntry.AddressList, m_port, null, null); - } - } - - public string GetEndPointString() - { - return m_host + ":" + m_port; - } - - public string GetHostName() - { - return m_host; - } - - public int GetHostPort() - { - return m_port; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZDO.cs b/Valheim_v202102/Valheim/assembly_valheim/ZDO.cs deleted file mode 100644 index d592aab..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZDO.cs +++ /dev/null @@ -1,1076 +0,0 @@ -using System; -using System.Collections.Generic; -using UnityEngine; - -public class ZDO : IEquatable<ZDO> -{ - public enum ObjectType - { - Default, - Prioritized, - Solid - } - - public ZDOID m_uid; - - public bool m_persistent; - - public bool m_distant; - - public long m_owner; - - public long m_timeCreated; - - public uint m_ownerRevision; - - public uint m_dataRevision; - - public int m_pgwVersion; - - public ObjectType m_type; - - public float m_tempSortValue; - - public bool m_tempHaveRevision; - - public int m_tempRemoveEarmark = -1; - - public int m_tempCreateEarmark = -1; - - private int m_prefab; - - private Vector2i m_sector = Vector2i.zero; - - private Vector3 m_position = Vector3.zero; - - private Quaternion m_rotation = Quaternion.identity; - - private Dictionary<int, float> m_floats; - - private Dictionary<int, Vector3> m_vec3; - - private Dictionary<int, Quaternion> m_quats; - - private Dictionary<int, int> m_ints; - - private Dictionary<int, long> m_longs; - - private Dictionary<int, string> m_strings; - - private ZDOMan m_zdoMan; - - public void Initialize(ZDOMan man, ZDOID id, Vector3 position) - { - m_zdoMan = man; - m_uid = id; - m_position = position; - m_sector = ZoneSystem.instance.GetZone(m_position); - m_zdoMan.AddToSector(this, m_sector); - } - - public void Initialize(ZDOMan man) - { - m_zdoMan = man; - } - - public bool IsValid() - { - return m_zdoMan != null; - } - - public void Reset() - { - m_uid = ZDOID.None; - m_persistent = false; - m_owner = 0L; - m_timeCreated = 0L; - m_ownerRevision = 0u; - m_dataRevision = 0u; - m_pgwVersion = 0; - m_distant = false; - m_tempSortValue = 0f; - m_tempHaveRevision = false; - m_prefab = 0; - m_sector = Vector2i.zero; - m_position = Vector3.zero; - m_rotation = Quaternion.identity; - ReleaseFloats(); - ReleaseVec3(); - ReleaseQuats(); - ReleaseInts(); - ReleaseLongs(); - ReleaseStrings(); - m_zdoMan = null; - } - - public ZDO Clone() - { - ZDO zDO = MemberwiseClone() as ZDO; - zDO.m_floats = null; - zDO.m_vec3 = null; - zDO.m_quats = null; - zDO.m_ints = null; - zDO.m_longs = null; - zDO.m_strings = null; - if (m_floats != null && m_floats.Count > 0) - { - zDO.InitFloats(); - zDO.m_floats.Copy(m_floats); - } - if (m_vec3 != null && m_vec3.Count > 0) - { - zDO.InitVec3(); - zDO.m_vec3.Copy(m_vec3); - } - if (m_quats != null && m_quats.Count > 0) - { - zDO.InitQuats(); - zDO.m_quats.Copy(m_quats); - } - if (m_ints != null && m_ints.Count > 0) - { - zDO.InitInts(); - zDO.m_ints.Copy(m_ints); - } - if (m_longs != null && m_longs.Count > 0) - { - zDO.InitLongs(); - zDO.m_longs.Copy(m_longs); - } - if (m_strings != null && m_strings.Count > 0) - { - zDO.InitStrings(); - zDO.m_strings.Copy(m_strings); - } - return zDO; - } - - public bool Equals(ZDO other) - { - return this == other; - } - - public void Set(KeyValuePair<int, int> hashPair, ZDOID id) - { - Set(hashPair.Key, id.userID); - Set(hashPair.Value, id.id); - } - - public static KeyValuePair<int, int> GetHashZDOID(string name) - { - return new KeyValuePair<int, int>((name + "_u").GetStableHashCode(), (name + "_i").GetStableHashCode()); - } - - public void Set(string name, ZDOID id) - { - Set(GetHashZDOID(name), id); - } - - public ZDOID GetZDOID(KeyValuePair<int, int> hashPair) - { - long @long = GetLong(hashPair.Key, 0L); - uint num = (uint)GetLong(hashPair.Value, 0L); - if (@long == 0L || num == 0) - { - return ZDOID.None; - } - return new ZDOID(@long, num); - } - - public ZDOID GetZDOID(string name) - { - return GetZDOID(GetHashZDOID(name)); - } - - public void Set(string name, float value) - { - int stableHashCode = name.GetStableHashCode(); - Set(stableHashCode, value); - } - - public void Set(int hash, float value) - { - InitFloats(); - if (!m_floats.TryGetValue(hash, out var value2) || value2 != value) - { - m_floats[hash] = value; - IncreseDataRevision(); - } - } - - public void Set(string name, Vector3 value) - { - int stableHashCode = name.GetStableHashCode(); - Set(stableHashCode, value); - } - - public void Set(int hash, Vector3 value) - { - InitVec3(); - if (!m_vec3.TryGetValue(hash, out var value2) || !(value2 == value)) - { - m_vec3[hash] = value; - IncreseDataRevision(); - } - } - - public void Set(string name, Quaternion value) - { - int stableHashCode = name.GetStableHashCode(); - Set(stableHashCode, value); - } - - public void Set(int hash, Quaternion value) - { - InitQuats(); - if (!m_quats.TryGetValue(hash, out var value2) || !(value2 == value)) - { - m_quats[hash] = value; - IncreseDataRevision(); - } - } - - public void Set(string name, int value) - { - Set(name.GetStableHashCode(), value); - } - - public void Set(int hash, int value) - { - InitInts(); - if (!m_ints.TryGetValue(hash, out var value2) || value2 != value) - { - m_ints[hash] = value; - IncreseDataRevision(); - } - } - - public void Set(string name, bool value) - { - Set(name, value ? 1 : 0); - } - - public void Set(int hash, bool value) - { - Set(hash, value ? 1 : 0); - } - - public void Set(string name, long value) - { - Set(name.GetStableHashCode(), value); - } - - public void Set(int hash, long value) - { - InitLongs(); - if (!m_longs.TryGetValue(hash, out var value2) || value2 != value) - { - m_longs[hash] = value; - IncreseDataRevision(); - } - } - - public void Set(string name, byte[] bytes) - { - string value = Convert.ToBase64String(bytes); - Set(name, value); - } - - public byte[] GetByteArray(string name) - { - string @string = GetString(name); - if (@string.Length > 0) - { - return Convert.FromBase64String(@string); - } - return null; - } - - public void Set(string name, string value) - { - InitStrings(); - int stableHashCode = name.GetStableHashCode(); - if (!m_strings.TryGetValue(stableHashCode, out var value2) || !(value2 == value)) - { - m_strings[stableHashCode] = value; - IncreseDataRevision(); - } - } - - public void SetPosition(Vector3 pos) - { - InternalSetPosition(pos); - } - - public void InternalSetPosition(Vector3 pos) - { - if (!(m_position == pos)) - { - m_position = pos; - SetSector(ZoneSystem.instance.GetZone(m_position)); - if (IsOwner()) - { - IncreseDataRevision(); - } - } - } - - private void SetSector(Vector2i sector) - { - if (!(m_sector == sector)) - { - m_zdoMan.RemoveFromSector(this, m_sector); - m_sector = sector; - m_zdoMan.AddToSector(this, m_sector); - m_zdoMan.ZDOSectorInvalidated(this); - } - } - - public Vector2i GetSector() - { - return m_sector; - } - - public void SetRotation(Quaternion rot) - { - if (!(m_rotation == rot)) - { - m_rotation = rot; - IncreseDataRevision(); - } - } - - public void SetType(ObjectType type) - { - if (m_type != type) - { - m_type = type; - IncreseDataRevision(); - } - } - - public void SetDistant(bool distant) - { - if (m_distant != distant) - { - m_distant = distant; - IncreseDataRevision(); - } - } - - public void SetPrefab(int prefab) - { - if (m_prefab != prefab) - { - m_prefab = prefab; - IncreseDataRevision(); - } - } - - public int GetPrefab() - { - return m_prefab; - } - - public Vector3 GetPosition() - { - return m_position; - } - - public Quaternion GetRotation() - { - return m_rotation; - } - - private void IncreseDataRevision() - { - m_dataRevision++; - if (!ZNet.instance.IsServer()) - { - ZDOMan.instance.ClientChanged(m_uid); - } - } - - private void IncreseOwnerRevision() - { - m_ownerRevision++; - if (!ZNet.instance.IsServer()) - { - ZDOMan.instance.ClientChanged(m_uid); - } - } - - public float GetFloat(string name, float defaultValue = 0f) - { - return GetFloat(name.GetStableHashCode(), defaultValue); - } - - public float GetFloat(int hash, float defaultValue = 0f) - { - if (m_floats == null) - { - return defaultValue; - } - if (m_floats.TryGetValue(hash, out var value)) - { - return value; - } - return defaultValue; - } - - public Vector3 GetVec3(string name, Vector3 defaultValue) - { - return GetVec3(name.GetStableHashCode(), defaultValue); - } - - public Vector3 GetVec3(int hash, Vector3 defaultValue) - { - if (m_vec3 == null) - { - return defaultValue; - } - if (m_vec3.TryGetValue(hash, out var value)) - { - return value; - } - return defaultValue; - } - - public Quaternion GetQuaternion(string name, Quaternion defaultValue) - { - return GetQuaternion(name.GetStableHashCode(), defaultValue); - } - - public Quaternion GetQuaternion(int hash, Quaternion defaultValue) - { - if (m_quats == null) - { - return defaultValue; - } - if (m_quats.TryGetValue(hash, out var value)) - { - return value; - } - return defaultValue; - } - - public int GetInt(string name, int defaultValue = 0) - { - return GetInt(name.GetStableHashCode(), defaultValue); - } - - public int GetInt(int hash, int defaultValue = 0) - { - if (m_ints == null) - { - return defaultValue; - } - if (m_ints.TryGetValue(hash, out var value)) - { - return value; - } - return defaultValue; - } - - public bool GetBool(string name, bool defaultValue = false) - { - return GetBool(name.GetStableHashCode(), defaultValue); - } - - public bool GetBool(int hash, bool defaultValue = false) - { - if (m_ints == null) - { - return defaultValue; - } - if (m_ints.TryGetValue(hash, out var value)) - { - return value != 0; - } - return defaultValue; - } - - public long GetLong(string name, long defaultValue = 0L) - { - return GetLong(name.GetStableHashCode(), defaultValue); - } - - public long GetLong(int hash, long defaultValue = 0L) - { - if (m_longs == null) - { - return defaultValue; - } - if (m_longs.TryGetValue(hash, out var value)) - { - return value; - } - return defaultValue; - } - - public string GetString(string name, string defaultValue = "") - { - if (m_strings == null) - { - return defaultValue; - } - if (m_strings.TryGetValue(name.GetStableHashCode(), out var value)) - { - return value; - } - return defaultValue; - } - - public void Serialize(ZPackage pkg) - { - pkg.Write(m_persistent); - pkg.Write(m_distant); - pkg.Write(m_timeCreated); - pkg.Write(m_pgwVersion); - pkg.Write((sbyte)m_type); - pkg.Write(m_prefab); - pkg.Write(m_rotation); - int num = 0; - if (m_floats != null && m_floats.Count > 0) - { - num |= 1; - } - if (m_vec3 != null && m_vec3.Count > 0) - { - num |= 2; - } - if (m_quats != null && m_quats.Count > 0) - { - num |= 4; - } - if (m_ints != null && m_ints.Count > 0) - { - num |= 8; - } - if (m_strings != null && m_strings.Count > 0) - { - num |= 0x10; - } - if (m_longs != null && m_longs.Count > 0) - { - num |= 0x40; - } - pkg.Write(num); - if (m_floats != null && m_floats.Count > 0) - { - pkg.Write((byte)m_floats.Count); - foreach (KeyValuePair<int, float> @float in m_floats) - { - pkg.Write(@float.Key); - pkg.Write(@float.Value); - } - } - if (m_vec3 != null && m_vec3.Count > 0) - { - pkg.Write((byte)m_vec3.Count); - foreach (KeyValuePair<int, Vector3> item in m_vec3) - { - pkg.Write(item.Key); - pkg.Write(item.Value); - } - } - if (m_quats != null && m_quats.Count > 0) - { - pkg.Write((byte)m_quats.Count); - foreach (KeyValuePair<int, Quaternion> quat in m_quats) - { - pkg.Write(quat.Key); - pkg.Write(quat.Value); - } - } - if (m_ints != null && m_ints.Count > 0) - { - pkg.Write((byte)m_ints.Count); - foreach (KeyValuePair<int, int> @int in m_ints) - { - pkg.Write(@int.Key); - pkg.Write(@int.Value); - } - } - if (m_longs != null && m_longs.Count > 0) - { - pkg.Write((byte)m_longs.Count); - foreach (KeyValuePair<int, long> @long in m_longs) - { - pkg.Write(@long.Key); - pkg.Write(@long.Value); - } - } - if (m_strings == null || m_strings.Count <= 0) - { - return; - } - pkg.Write((byte)m_strings.Count); - foreach (KeyValuePair<int, string> @string in m_strings) - { - pkg.Write(@string.Key); - pkg.Write(@string.Value); - } - } - - public void Deserialize(ZPackage pkg) - { - m_persistent = pkg.ReadBool(); - m_distant = pkg.ReadBool(); - m_timeCreated = pkg.ReadLong(); - m_pgwVersion = pkg.ReadInt(); - m_type = (ObjectType)pkg.ReadSByte(); - m_prefab = pkg.ReadInt(); - m_rotation = pkg.ReadQuaternion(); - int num = pkg.ReadInt(); - if (((uint)num & (true ? 1u : 0u)) != 0) - { - InitFloats(); - int num2 = pkg.ReadByte(); - for (int i = 0; i < num2; i++) - { - int key = pkg.ReadInt(); - m_floats[key] = pkg.ReadSingle(); - } - } - else - { - ReleaseFloats(); - } - if (((uint)num & 2u) != 0) - { - InitVec3(); - int num3 = pkg.ReadByte(); - for (int j = 0; j < num3; j++) - { - int key2 = pkg.ReadInt(); - m_vec3[key2] = pkg.ReadVector3(); - } - } - else - { - ReleaseVec3(); - } - if (((uint)num & 4u) != 0) - { - InitQuats(); - int num4 = pkg.ReadByte(); - for (int k = 0; k < num4; k++) - { - int key3 = pkg.ReadInt(); - m_quats[key3] = pkg.ReadQuaternion(); - } - } - else - { - ReleaseQuats(); - } - if (((uint)num & 8u) != 0) - { - InitInts(); - int num5 = pkg.ReadByte(); - for (int l = 0; l < num5; l++) - { - int key4 = pkg.ReadInt(); - m_ints[key4] = pkg.ReadInt(); - } - } - else - { - ReleaseInts(); - } - if (((uint)num & 0x40u) != 0) - { - InitLongs(); - int num6 = pkg.ReadByte(); - for (int m = 0; m < num6; m++) - { - int key5 = pkg.ReadInt(); - m_longs[key5] = pkg.ReadLong(); - } - } - else - { - ReleaseLongs(); - } - if (((uint)num & 0x10u) != 0) - { - InitStrings(); - int num7 = pkg.ReadByte(); - for (int n = 0; n < num7; n++) - { - int key6 = pkg.ReadInt(); - m_strings[key6] = pkg.ReadString(); - } - } - else - { - ReleaseStrings(); - } - } - - public void Save(ZPackage pkg) - { - pkg.Write(m_ownerRevision); - pkg.Write(m_dataRevision); - pkg.Write(m_persistent); - pkg.Write(m_owner); - pkg.Write(m_timeCreated); - pkg.Write(m_pgwVersion); - pkg.Write((sbyte)m_type); - pkg.Write(m_distant); - pkg.Write(m_prefab); - pkg.Write(m_sector); - pkg.Write(m_position); - pkg.Write(m_rotation); - if (m_floats != null) - { - pkg.Write((char)m_floats.Count); - foreach (KeyValuePair<int, float> @float in m_floats) - { - pkg.Write(@float.Key); - pkg.Write(@float.Value); - } - } - else - { - pkg.Write('\0'); - } - if (m_vec3 != null) - { - pkg.Write((char)m_vec3.Count); - foreach (KeyValuePair<int, Vector3> item in m_vec3) - { - pkg.Write(item.Key); - pkg.Write(item.Value); - } - } - else - { - pkg.Write('\0'); - } - if (m_quats != null) - { - pkg.Write((char)m_quats.Count); - foreach (KeyValuePair<int, Quaternion> quat in m_quats) - { - pkg.Write(quat.Key); - pkg.Write(quat.Value); - } - } - else - { - pkg.Write('\0'); - } - if (m_ints != null) - { - pkg.Write((char)m_ints.Count); - foreach (KeyValuePair<int, int> @int in m_ints) - { - pkg.Write(@int.Key); - pkg.Write(@int.Value); - } - } - else - { - pkg.Write('\0'); - } - if (m_longs != null) - { - pkg.Write((char)m_longs.Count); - foreach (KeyValuePair<int, long> @long in m_longs) - { - pkg.Write(@long.Key); - pkg.Write(@long.Value); - } - } - else - { - pkg.Write('\0'); - } - if (m_strings != null) - { - pkg.Write((char)m_strings.Count); - { - foreach (KeyValuePair<int, string> @string in m_strings) - { - pkg.Write(@string.Key); - pkg.Write(@string.Value); - } - return; - } - } - pkg.Write('\0'); - } - - public void Load(ZPackage pkg, int version) - { - m_ownerRevision = pkg.ReadUInt(); - m_dataRevision = pkg.ReadUInt(); - m_persistent = pkg.ReadBool(); - m_owner = pkg.ReadLong(); - m_timeCreated = pkg.ReadLong(); - m_pgwVersion = pkg.ReadInt(); - if (version >= 16 && version < 24) - { - pkg.ReadInt(); - } - if (version >= 23) - { - m_type = (ObjectType)pkg.ReadSByte(); - } - if (version >= 22) - { - m_distant = pkg.ReadBool(); - } - if (version < 13) - { - pkg.ReadChar(); - pkg.ReadChar(); - } - if (version >= 17) - { - m_prefab = pkg.ReadInt(); - } - m_sector = pkg.ReadVector2i(); - m_position = pkg.ReadVector3(); - m_rotation = pkg.ReadQuaternion(); - int num = pkg.ReadChar(); - if (num > 0) - { - InitFloats(); - for (int i = 0; i < num; i++) - { - int key = pkg.ReadInt(); - m_floats[key] = pkg.ReadSingle(); - } - } - else - { - ReleaseFloats(); - } - int num2 = pkg.ReadChar(); - if (num2 > 0) - { - InitVec3(); - for (int j = 0; j < num2; j++) - { - int key2 = pkg.ReadInt(); - m_vec3[key2] = pkg.ReadVector3(); - } - } - else - { - ReleaseVec3(); - } - int num3 = pkg.ReadChar(); - if (num3 > 0) - { - InitQuats(); - for (int k = 0; k < num3; k++) - { - int key3 = pkg.ReadInt(); - m_quats[key3] = pkg.ReadQuaternion(); - } - } - else - { - ReleaseQuats(); - } - int num4 = pkg.ReadChar(); - if (num4 > 0) - { - InitInts(); - for (int l = 0; l < num4; l++) - { - int key4 = pkg.ReadInt(); - m_ints[key4] = pkg.ReadInt(); - } - } - else - { - ReleaseInts(); - } - int num5 = pkg.ReadChar(); - if (num5 > 0) - { - InitLongs(); - for (int m = 0; m < num5; m++) - { - int key5 = pkg.ReadInt(); - m_longs[key5] = pkg.ReadLong(); - } - } - else - { - ReleaseLongs(); - } - int num6 = pkg.ReadChar(); - if (num6 > 0) - { - InitStrings(); - for (int n = 0; n < num6; n++) - { - int key6 = pkg.ReadInt(); - m_strings[key6] = pkg.ReadString(); - } - } - else - { - ReleaseStrings(); - } - if (version < 17) - { - m_prefab = GetInt("prefab"); - } - } - - public bool IsOwner() - { - return m_owner == m_zdoMan.GetMyID(); - } - - public bool HasOwner() - { - return m_owner != 0; - } - - public void Print() - { - ZLog.Log("UID:" + m_uid); - ZLog.Log("Persistent:" + m_persistent); - ZLog.Log("Owner:" + m_owner); - ZLog.Log("Revision:" + m_ownerRevision); - foreach (KeyValuePair<int, float> @float in m_floats) - { - ZLog.Log("F:" + @float.Key + " = " + @float.Value); - } - } - - public void SetOwner(long uid) - { - if (m_owner != uid) - { - m_owner = uid; - IncreseOwnerRevision(); - } - } - - public void SetPGWVersion(int version) - { - m_pgwVersion = version; - } - - public int GetPGWVersion() - { - return m_pgwVersion; - } - - private void InitFloats() - { - if (m_floats == null) - { - m_floats = Pool<Dictionary<int, float>>.Create(); - m_floats.Clear(); - } - } - - private void InitVec3() - { - if (m_vec3 == null) - { - m_vec3 = Pool<Dictionary<int, Vector3>>.Create(); - m_vec3.Clear(); - } - } - - private void InitQuats() - { - if (m_quats == null) - { - m_quats = Pool<Dictionary<int, Quaternion>>.Create(); - m_quats.Clear(); - } - } - - private void InitInts() - { - if (m_ints == null) - { - m_ints = Pool<Dictionary<int, int>>.Create(); - m_ints.Clear(); - } - } - - private void InitLongs() - { - if (m_longs == null) - { - m_longs = Pool<Dictionary<int, long>>.Create(); - m_longs.Clear(); - } - } - - private void InitStrings() - { - if (m_strings == null) - { - m_strings = Pool<Dictionary<int, string>>.Create(); - m_strings.Clear(); - } - } - - private void ReleaseFloats() - { - if (m_floats != null) - { - Pool<Dictionary<int, float>>.Release(m_floats); - m_floats = null; - } - } - - private void ReleaseVec3() - { - if (m_vec3 != null) - { - Pool<Dictionary<int, Vector3>>.Release(m_vec3); - m_vec3 = null; - } - } - - private void ReleaseQuats() - { - if (m_quats != null) - { - Pool<Dictionary<int, Quaternion>>.Release(m_quats); - m_quats = null; - } - } - - private void ReleaseInts() - { - if (m_ints != null) - { - Pool<Dictionary<int, int>>.Release(m_ints); - m_ints = null; - } - } - - private void ReleaseLongs() - { - if (m_longs != null) - { - Pool<Dictionary<int, long>>.Release(m_longs); - m_longs = null; - } - } - - private void ReleaseStrings() - { - if (m_strings != null) - { - Pool<Dictionary<int, string>>.Release(m_strings); - m_strings = null; - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZDOComparer.cs b/Valheim_v202102/Valheim/assembly_valheim/ZDOComparer.cs deleted file mode 100644 index 68aad96..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZDOComparer.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; - -internal class ZDOComparer : IEqualityComparer<ZDO> -{ - public bool Equals(ZDO a, ZDO b) - { - return a == b; - } - - public int GetHashCode(ZDO a) - { - return a.GetHashCode(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZDOID.cs b/Valheim_v202102/Valheim/assembly_valheim/ZDOID.cs deleted file mode 100644 index 6814e25..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZDOID.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.IO; - -public struct ZDOID : IEquatable<ZDOID> -{ - public static ZDOID None = new ZDOID(0L, 0u); - - private long m_userID; - - private uint m_id; - - private int m_hash; - - public long userID => m_userID; - - public uint id => m_id; - - public ZDOID(BinaryReader reader) - { - m_userID = reader.ReadInt64(); - m_id = reader.ReadUInt32(); - m_hash = 0; - } - - public ZDOID(long userID, uint id) - { - m_userID = userID; - m_id = id; - m_hash = 0; - } - - public ZDOID(ZDOID other) - { - m_userID = other.m_userID; - m_id = other.m_id; - m_hash = other.m_hash; - } - - public override string ToString() - { - return m_userID + ":" + m_id; - } - - public static bool operator ==(ZDOID a, ZDOID b) - { - if (a.m_userID == b.m_userID) - { - return a.m_id == b.m_id; - } - return false; - } - - public static bool operator !=(ZDOID a, ZDOID b) - { - if (a.m_userID == b.m_userID) - { - return a.m_id != b.m_id; - } - return true; - } - - public bool Equals(ZDOID other) - { - if (other.m_userID == m_userID) - { - return other.m_id == m_id; - } - return false; - } - - public override bool Equals(object obj) - { - if (obj == null) - { - return false; - } - if (obj is ZDOID zDOID) - { - if (zDOID.m_userID == m_userID) - { - return zDOID.m_id == m_id; - } - return false; - } - return false; - } - - public override int GetHashCode() - { - if (m_hash == 0) - { - m_hash = m_userID.GetHashCode() ^ m_id.GetHashCode(); - } - return m_hash; - } - - public bool IsNone() - { - if (m_userID == 0L) - { - return m_id == 0; - } - return false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZDOMan.cs b/Valheim_v202102/Valheim/assembly_valheim/ZDOMan.cs deleted file mode 100644 index 7544039..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZDOMan.cs +++ /dev/null @@ -1,1207 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Linq; -using UnityEngine; - -public class ZDOMan -{ - private class ZDOPeer - { - public struct PeerZDOInfo - { - public uint m_dataRevision; - - public long m_ownerRevision; - - public float m_syncTime; - - public PeerZDOInfo(uint dataRevision, uint ownerRevision, float syncTime) - { - m_dataRevision = dataRevision; - m_ownerRevision = ownerRevision; - m_syncTime = syncTime; - } - } - - public ZNetPeer m_peer; - - public Dictionary<ZDOID, PeerZDOInfo> m_zdos = new Dictionary<ZDOID, PeerZDOInfo>(); - - public HashSet<ZDOID> m_forceSend = new HashSet<ZDOID>(); - - public int m_sendIndex; - - public void ZDOSectorInvalidated(ZDOID uid) - { - if (m_zdos.ContainsKey(uid)) - { - ForceSendZDO(uid); - } - } - - public void ForceSendZDO(ZDOID id) - { - m_forceSend.Add(id); - } - - public bool ShouldSend(ZDO zdo) - { - if (m_zdos.TryGetValue(zdo.m_uid, out var value)) - { - if (zdo.m_ownerRevision <= value.m_ownerRevision) - { - return zdo.m_dataRevision > value.m_dataRevision; - } - return true; - } - return true; - } - } - - private class SaveData - { - public long m_myid; - - public uint m_nextUid = 1u; - - public List<ZDO> m_zdos; - - public Dictionary<ZDOID, long> m_deadZDOs; - } - - private static long compareReceiver; - - public Action<ZDO> m_onZDODestroyed; - - private Dictionary<ZDOID, ZDO> m_objectsByID = new Dictionary<ZDOID, ZDO>(); - - private List<ZDO>[] m_objectsBySector; - - private Dictionary<Vector2i, List<ZDO>> m_objectsByOutsideSector = new Dictionary<Vector2i, List<ZDO>>(); - - private List<ZDOPeer> m_peers = new List<ZDOPeer>(); - - private const int m_maxDeadZDOs = 100000; - - private Dictionary<ZDOID, long> m_deadZDOs = new Dictionary<ZDOID, long>(); - - private List<ZDOID> m_destroySendList = new List<ZDOID>(); - - private HashSet<ZDOID> m_clientChangeQueue = new HashSet<ZDOID>(); - - private long m_myid; - - private uint m_nextUid = 1u; - - private int m_width; - - private int m_halfWidth; - - private int m_dataPerSec = 61440; - - private float m_sendTimer; - - private const float m_sendFPS = 20f; - - private float m_releaseZDOTimer; - - private static ZDOMan m_instance; - - private int m_zdosSent; - - private int m_zdosRecv; - - private int m_zdosSentLastSec; - - private int m_zdosRecvLastSec; - - private float m_statTimer; - - private List<ZDO> m_tempToSync = new List<ZDO>(); - - private List<ZDO> m_tempToSyncDistant = new List<ZDO>(); - - private List<ZDO> m_tempNearObjects = new List<ZDO>(); - - private List<ZDOID> m_tempRemoveList = new List<ZDOID>(); - - private SaveData m_saveData; - - public static ZDOMan instance => m_instance; - - public ZDOMan(int width) - { - m_instance = this; - m_myid = Utils.GenerateUID(); - ZRoutedRpc.instance.Register<ZPackage>("DestroyZDO", RPC_DestroyZDO); - ZRoutedRpc.instance.Register<ZDOID>("RequestZDO", RPC_RequestZDO); - m_width = width; - m_halfWidth = m_width / 2; - ResetSectorArray(); - } - - private void ResetSectorArray() - { - m_objectsBySector = new List<ZDO>[m_width * m_width]; - m_objectsByOutsideSector.Clear(); - } - - public void ShutDown() - { - if (!ZNet.instance.IsServer()) - { - int num = FlushClientObjects(); - ZLog.Log("Flushed " + num + " objects"); - } - ZDOPool.Release(m_objectsByID); - m_objectsByID.Clear(); - m_tempToSync.Clear(); - m_tempToSyncDistant.Clear(); - m_tempNearObjects.Clear(); - m_tempRemoveList.Clear(); - m_peers.Clear(); - ResetSectorArray(); - GC.Collect(); - } - - public void PrepareSave() - { - m_saveData = new SaveData(); - m_saveData.m_myid = m_myid; - m_saveData.m_nextUid = m_nextUid; - Stopwatch stopwatch = Stopwatch.StartNew(); - m_saveData.m_zdos = GetSaveClone(); - ZLog.Log("clone " + stopwatch.ElapsedMilliseconds); - m_saveData.m_deadZDOs = new Dictionary<ZDOID, long>(m_deadZDOs); - } - - public void SaveAsync(BinaryWriter writer) - { - writer.Write(m_saveData.m_myid); - writer.Write(m_saveData.m_nextUid); - ZPackage zPackage = new ZPackage(); - writer.Write(m_saveData.m_zdos.Count); - foreach (ZDO zdo in m_saveData.m_zdos) - { - writer.Write(zdo.m_uid.userID); - writer.Write(zdo.m_uid.id); - zPackage.Clear(); - zdo.Save(zPackage); - byte[] array = zPackage.GetArray(); - writer.Write(array.Length); - writer.Write(array); - } - writer.Write(m_saveData.m_deadZDOs.Count); - foreach (KeyValuePair<ZDOID, long> deadZDO in m_saveData.m_deadZDOs) - { - writer.Write(deadZDO.Key.userID); - writer.Write(deadZDO.Key.id); - writer.Write(deadZDO.Value); - } - ZLog.Log("Saved " + m_saveData.m_zdos.Count + " zdos"); - m_saveData = null; - } - - public void Load(BinaryReader reader, int version) - { - try - { - reader.ReadInt64(); - uint num = reader.ReadUInt32(); - int num2 = reader.ReadInt32(); - ZDOPool.Release(m_objectsByID); - m_objectsByID.Clear(); - ResetSectorArray(); - ZLog.Log("Loading " + num2 + " zdos , my id " + m_myid + " data version:" + version); - ZPackage zPackage = new ZPackage(); - for (int i = 0; i < num2; i++) - { - ZDO zDO = ZDOPool.Create(this); - zDO.m_uid = new ZDOID(reader); - int count = reader.ReadInt32(); - byte[] data = reader.ReadBytes(count); - zPackage.Load(data); - zDO.Load(zPackage, version); - zDO.SetOwner(0L); - m_objectsByID.Add(zDO.m_uid, zDO); - AddToSector(zDO, zDO.GetSector()); - if (zDO.m_uid.userID == m_myid && zDO.m_uid.id >= num) - { - num = zDO.m_uid.id + 1; - } - } - m_deadZDOs.Clear(); - int num3 = reader.ReadInt32(); - for (int j = 0; j < num3; j++) - { - ZDOID key = new ZDOID(reader.ReadInt64(), reader.ReadUInt32()); - long value = reader.ReadInt64(); - m_deadZDOs.Add(key, value); - if (key.userID == m_myid && key.id >= num) - { - num = key.id + 1; - } - } - CapDeadZDOList(); - ZLog.Log("Loaded " + m_deadZDOs.Count + " dead zdos"); - RemoveOldGeneratedZDOS(); - m_nextUid = num; - } - catch (Exception ex) - { - ZLog.LogError("Exception while loading ZDO data:" + ex.ToString()); - ZDOPool.Release(m_objectsByID); - m_objectsByID.Clear(); - ResetSectorArray(); - m_deadZDOs.Clear(); - m_myid = Utils.GenerateUID(); - m_nextUid = 1u; - } - } - - private void RemoveOldGeneratedZDOS() - { - List<ZDOID> list = new List<ZDOID>(); - foreach (KeyValuePair<ZDOID, ZDO> item in m_objectsByID) - { - int pGWVersion = item.Value.GetPGWVersion(); - if (pGWVersion != 0 && pGWVersion != ZoneSystem.instance.m_pgwVersion) - { - list.Add(item.Key); - RemoveFromSector(item.Value, item.Value.GetSector()); - ZDOPool.Release(item.Value); - } - } - foreach (ZDOID item2 in list) - { - m_objectsByID.Remove(item2); - } - ZLog.Log("Removed " + list.Count + " OLD generated ZDOS"); - } - - private void CapDeadZDOList() - { - if (m_deadZDOs.Count > 100000) - { - List<KeyValuePair<ZDOID, long>> list = m_deadZDOs.ToList(); - list.Sort((KeyValuePair<ZDOID, long> a, KeyValuePair<ZDOID, long> b) => a.Value.CompareTo(b.Value)); - int num = list.Count - 100000; - for (int i = 0; i < num; i++) - { - m_deadZDOs.Remove(list[i].Key); - } - } - } - - public ZDO CreateNewZDO(Vector3 position) - { - ZDOID zDOID = new ZDOID(m_myid, m_nextUid++); - while (GetZDO(zDOID) != null) - { - zDOID = new ZDOID(m_myid, m_nextUid++); - } - return CreateNewZDO(zDOID, position); - } - - public ZDO CreateNewZDO(ZDOID uid, Vector3 position) - { - ZDO zDO = ZDOPool.Create(this, uid, position); - zDO.m_owner = m_myid; - zDO.m_timeCreated = ZNet.instance.GetTime().Ticks; - m_objectsByID.Add(uid, zDO); - return zDO; - } - - public void AddToSector(ZDO zdo, Vector2i sector) - { - int num = SectorToIndex(sector); - List<ZDO> value; - if (num >= 0 && num < m_objectsBySector.Length) - { - if (m_objectsBySector[num] != null) - { - m_objectsBySector[num].Add(zdo); - return; - } - List<ZDO> list = new List<ZDO>(); - list.Add(zdo); - m_objectsBySector[num] = list; - } - else if (m_objectsByOutsideSector.TryGetValue(sector, out value)) - { - value.Add(zdo); - } - else - { - value = new List<ZDO>(); - value.Add(zdo); - m_objectsByOutsideSector.Add(sector, value); - } - } - - public void ZDOSectorInvalidated(ZDO zdo) - { - ZDOID uid = zdo.m_uid; - foreach (ZDOPeer peer in m_peers) - { - peer.ZDOSectorInvalidated(uid); - } - } - - public void RemoveFromSector(ZDO zdo, Vector2i sector) - { - int num = SectorToIndex(sector); - List<ZDO> value; - if (num >= 0 && num < m_objectsBySector.Length) - { - if (m_objectsBySector[num] != null) - { - m_objectsBySector[num].Remove(zdo); - } - } - else if (m_objectsByOutsideSector.TryGetValue(sector, out value)) - { - value.Remove(zdo); - } - } - - public ZDO GetZDO(ZDOID id) - { - if (id == ZDOID.None) - { - return null; - } - if (m_objectsByID.TryGetValue(id, out var value)) - { - return value; - } - return null; - } - - public void AddPeer(ZNetPeer netPeer) - { - ZDOPeer zDOPeer = new ZDOPeer(); - zDOPeer.m_peer = netPeer; - m_peers.Add(zDOPeer); - zDOPeer.m_peer.m_rpc.Register<ZPackage>("ZDOData", RPC_ZDOData); - } - - public void RemovePeer(ZNetPeer netPeer) - { - ZDOPeer zDOPeer = FindPeer(netPeer); - if (zDOPeer != null) - { - m_peers.Remove(zDOPeer); - if (ZNet.instance.IsServer()) - { - RemoveOrphanNonPersistentZDOS(); - } - } - } - - private ZDOPeer FindPeer(ZNetPeer netPeer) - { - foreach (ZDOPeer peer in m_peers) - { - if (peer.m_peer == netPeer) - { - return peer; - } - } - return null; - } - - private ZDOPeer FindPeer(ZRpc rpc) - { - foreach (ZDOPeer peer in m_peers) - { - if (peer.m_peer.m_rpc == rpc) - { - return peer; - } - } - return null; - } - - public void Update(float dt) - { - if (ZNet.instance.IsServer()) - { - ReleaseZDOS(dt); - } - SendZDOToPeers(dt); - SendDestroyed(); - UpdateStats(dt); - } - - private void UpdateStats(float dt) - { - m_statTimer += dt; - if (m_statTimer >= 1f) - { - m_statTimer = 0f; - m_zdosSentLastSec = m_zdosSent; - m_zdosRecvLastSec = m_zdosRecv; - m_zdosRecv = 0; - m_zdosSent = 0; - } - } - - private void SendZDOToPeers(float dt) - { - int num = 0; - m_sendTimer += dt; - if (m_sendTimer > 0.05f) - { - m_sendTimer = 0f; - foreach (ZDOPeer peer in m_peers) - { - num += SendZDOs(peer, flush: false); - } - } - m_zdosSent += num; - } - - private int FlushClientObjects() - { - int num = 0; - foreach (ZDOPeer peer in m_peers) - { - num += SendZDOs(peer, flush: true); - } - return num; - } - - private void ReleaseZDOS(float dt) - { - m_releaseZDOTimer += dt; - if (!(m_releaseZDOTimer > 2f)) - { - return; - } - m_releaseZDOTimer = 0f; - ReleaseNearbyZDOS(ZNet.instance.GetReferencePosition(), m_myid); - foreach (ZDOPeer peer in m_peers) - { - ReleaseNearbyZDOS(peer.m_peer.m_refPos, peer.m_peer.m_uid); - } - } - - private bool IsInPeerActiveArea(Vector2i sector, long uid) - { - if (uid == m_myid) - { - return ZNetScene.instance.InActiveArea(sector, ZNet.instance.GetReferencePosition()); - } - ZNetPeer peer = ZNet.instance.GetPeer(uid); - if (peer == null) - { - return false; - } - return ZNetScene.instance.InActiveArea(sector, peer.GetRefPos()); - } - - private void ReleaseNearbyZDOS(Vector3 refPosition, long uid) - { - Vector2i zone = ZoneSystem.instance.GetZone(refPosition); - m_tempNearObjects.Clear(); - FindSectorObjects(zone, ZoneSystem.instance.m_activeArea, 0, m_tempNearObjects); - foreach (ZDO tempNearObject in m_tempNearObjects) - { - if (!tempNearObject.m_persistent) - { - continue; - } - if (tempNearObject.m_owner == uid) - { - if (!ZNetScene.instance.InActiveArea(tempNearObject.GetSector(), zone)) - { - tempNearObject.SetOwner(0L); - } - } - else if ((tempNearObject.m_owner == 0L || !IsInPeerActiveArea(tempNearObject.GetSector(), tempNearObject.m_owner)) && ZNetScene.instance.InActiveArea(tempNearObject.GetSector(), zone)) - { - tempNearObject.SetOwner(uid); - } - } - } - - public void DestroyZDO(ZDO zdo) - { - if (zdo.IsOwner()) - { - m_destroySendList.Add(zdo.m_uid); - } - } - - private void SendDestroyed() - { - if (m_destroySendList.Count == 0) - { - return; - } - ZPackage zPackage = new ZPackage(); - zPackage.Write(m_destroySendList.Count); - foreach (ZDOID destroySend in m_destroySendList) - { - zPackage.Write(destroySend); - } - m_destroySendList.Clear(); - ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "DestroyZDO", zPackage); - } - - private void RPC_DestroyZDO(long sender, ZPackage pkg) - { - int num = pkg.ReadInt(); - for (int i = 0; i < num; i++) - { - ZDOID uid = pkg.ReadZDOID(); - HandleDestroyedZDO(uid); - } - } - - private void HandleDestroyedZDO(ZDOID uid) - { - if (uid.userID == m_myid && uid.id >= m_nextUid) - { - m_nextUid = uid.id + 1; - } - ZDO zDO = GetZDO(uid); - if (zDO == null) - { - return; - } - if (m_onZDODestroyed != null) - { - m_onZDODestroyed(zDO); - } - RemoveFromSector(zDO, zDO.GetSector()); - m_objectsByID.Remove(zDO.m_uid); - ZDOPool.Release(zDO); - foreach (ZDOPeer peer in m_peers) - { - peer.m_zdos.Remove(uid); - } - if (ZNet.instance.IsServer()) - { - long ticks = ZNet.instance.GetTime().Ticks; - m_deadZDOs[uid] = ticks; - } - } - - private int SendZDOs(ZDOPeer peer, bool flush) - { - if (!flush && peer.m_peer.m_socket.IsSending()) - { - return 0; - } - float time = Time.time; - m_tempToSync.Clear(); - CreateSyncList(peer, m_tempToSync); - if (m_tempToSync.Count <= 0) - { - return 0; - } - int num = m_dataPerSec / 20; - ZPackage zPackage = new ZPackage(); - ZPackage zPackage2 = new ZPackage(); - int num2 = 0; - for (int i = 0; i < m_tempToSync.Count; i++) - { - ZDO zDO = m_tempToSync[i]; - peer.m_forceSend.Remove(zDO.m_uid); - if (!ZNet.instance.IsServer()) - { - m_clientChangeQueue.Remove(zDO.m_uid); - } - if (peer.ShouldSend(zDO)) - { - zPackage.Write(zDO.m_uid); - zPackage.Write(zDO.m_ownerRevision); - zPackage.Write(zDO.m_dataRevision); - zPackage.Write(zDO.m_owner); - zPackage.Write(zDO.GetPosition()); - zPackage2.Clear(); - zDO.Serialize(zPackage2); - zPackage.Write(zPackage2); - peer.m_zdos[zDO.m_uid] = new ZDOPeer.PeerZDOInfo(zDO.m_dataRevision, zDO.m_ownerRevision, time); - num2++; - if (!flush && zPackage.Size() > num) - { - break; - } - } - } - if (num2 > 0) - { - zPackage.Write(ZDOID.None); - peer.m_peer.m_rpc.Invoke("ZDOData", zPackage); - } - return num2; - } - - private void RPC_ZDOData(ZRpc rpc, ZPackage pkg) - { - ZDOPeer zDOPeer = FindPeer(rpc); - if (zDOPeer == null) - { - ZLog.Log("ZDO data from unkown host, ignoring"); - return; - } - float time = Time.time; - int num = 0; - ZPackage pkg2 = new ZPackage(); - while (true) - { - ZDOID zDOID = pkg.ReadZDOID(); - if (zDOID.IsNone()) - { - break; - } - num++; - uint num2 = pkg.ReadUInt(); - uint num3 = pkg.ReadUInt(); - long owner = pkg.ReadLong(); - Vector3 vector = pkg.ReadVector3(); - pkg.ReadPackage(ref pkg2); - ZDO zDO = GetZDO(zDOID); - bool flag = false; - if (zDO != null) - { - if (num3 <= zDO.m_dataRevision) - { - if (num2 > zDO.m_ownerRevision) - { - zDO.m_owner = owner; - zDO.m_ownerRevision = num2; - zDOPeer.m_zdos[zDOID] = new ZDOPeer.PeerZDOInfo(num3, num2, time); - } - continue; - } - } - else - { - zDO = CreateNewZDO(zDOID, vector); - flag = true; - } - zDO.m_ownerRevision = num2; - zDO.m_dataRevision = num3; - zDO.m_owner = owner; - zDO.InternalSetPosition(vector); - zDOPeer.m_zdos[zDOID] = new ZDOPeer.PeerZDOInfo(zDO.m_dataRevision, zDO.m_ownerRevision, time); - zDO.Deserialize(pkg2); - if (ZNet.instance.IsServer() && flag && m_deadZDOs.ContainsKey(zDOID)) - { - zDO.SetOwner(m_myid); - DestroyZDO(zDO); - } - } - m_zdosRecv += num; - } - - public void FindSectorObjects(Vector2i sector, int area, int distantArea, List<ZDO> sectorObjects, List<ZDO> distantSectorObjects = null) - { - FindObjects(sector, sectorObjects); - for (int i = 1; i <= area; i++) - { - for (int j = sector.x - i; j <= sector.x + i; j++) - { - FindObjects(new Vector2i(j, sector.y - i), sectorObjects); - FindObjects(new Vector2i(j, sector.y + i), sectorObjects); - } - for (int k = sector.y - i + 1; k <= sector.y + i - 1; k++) - { - FindObjects(new Vector2i(sector.x - i, k), sectorObjects); - FindObjects(new Vector2i(sector.x + i, k), sectorObjects); - } - } - List<ZDO> objects = ((distantSectorObjects != null) ? distantSectorObjects : sectorObjects); - for (int l = area + 1; l <= area + distantArea; l++) - { - for (int m = sector.x - l; m <= sector.x + l; m++) - { - FindDistantObjects(new Vector2i(m, sector.y - l), objects); - FindDistantObjects(new Vector2i(m, sector.y + l), objects); - } - for (int n = sector.y - l + 1; n <= sector.y + l - 1; n++) - { - FindDistantObjects(new Vector2i(sector.x - l, n), objects); - FindDistantObjects(new Vector2i(sector.x + l, n), objects); - } - } - } - - public void FindSectorObjects(Vector2i sector, int area, List<ZDO> sectorObjects) - { - for (int i = sector.y - area; i <= sector.y + area; i++) - { - for (int j = sector.x - area; j <= sector.x + area; j++) - { - Vector2i sector2 = new Vector2i(j, i); - FindObjects(sector2, sectorObjects); - } - } - } - - private void CreateSyncList(ZDOPeer peer, List<ZDO> toSync) - { - if (ZNet.instance.IsServer()) - { - Vector3 refPos = peer.m_peer.GetRefPos(); - Vector2i zone = ZoneSystem.instance.GetZone(refPos); - m_tempToSyncDistant.Clear(); - FindSectorObjects(zone, ZoneSystem.instance.m_activeArea, ZoneSystem.instance.m_activeDistantArea, toSync, m_tempToSyncDistant); - ServerSortSendZDOS(toSync, refPos, peer); - toSync.AddRange(m_tempToSyncDistant); - AddForceSendZdos(peer, toSync); - return; - } - m_tempRemoveList.Clear(); - foreach (ZDOID item in m_clientChangeQueue) - { - ZDO zDO = GetZDO(item); - if (zDO != null) - { - toSync.Add(zDO); - } - else - { - m_tempRemoveList.Add(item); - } - } - foreach (ZDOID tempRemove in m_tempRemoveList) - { - m_clientChangeQueue.Remove(tempRemove); - } - ClientSortSendZDOS(toSync, peer); - AddForceSendZdos(peer, toSync); - } - - private void AddForceSendZdos(ZDOPeer peer, List<ZDO> syncList) - { - if (peer.m_forceSend.Count <= 0) - { - return; - } - m_tempRemoveList.Clear(); - foreach (ZDOID item in peer.m_forceSend) - { - ZDO zDO = GetZDO(item); - if (zDO != null) - { - syncList.Insert(0, zDO); - } - else - { - m_tempRemoveList.Add(item); - } - } - foreach (ZDOID tempRemove in m_tempRemoveList) - { - peer.m_forceSend.Remove(tempRemove); - } - } - - private static int ServerSendCompare(ZDO x, ZDO y) - { - bool flag = x.m_owner != compareReceiver; - bool flag2 = y.m_owner != compareReceiver; - if (flag && flag2) - { - if (x.m_type == y.m_type) - { - return x.m_tempSortValue.CompareTo(y.m_tempSortValue); - } - if (x.m_type == ZDO.ObjectType.Prioritized) - { - return -1; - } - if (y.m_type == ZDO.ObjectType.Prioritized) - { - return 1; - } - return x.m_tempSortValue.CompareTo(y.m_tempSortValue); - } - if (flag != flag2) - { - if (flag && x.m_type == ZDO.ObjectType.Prioritized) - { - return -1; - } - if (flag2 && y.m_type == ZDO.ObjectType.Prioritized) - { - return 1; - } - } - if (x.m_type == y.m_type) - { - return x.m_tempSortValue.CompareTo(y.m_tempSortValue); - } - if (x.m_type == ZDO.ObjectType.Solid) - { - return -1; - } - if (y.m_type == ZDO.ObjectType.Solid) - { - return 1; - } - if (x.m_type == ZDO.ObjectType.Prioritized) - { - return -1; - } - if (y.m_type == ZDO.ObjectType.Prioritized) - { - return 1; - } - return x.m_tempSortValue.CompareTo(y.m_tempSortValue); - } - - private void ServerSortSendZDOS(List<ZDO> objects, Vector3 refPos, ZDOPeer peer) - { - float time = Time.time; - for (int i = 0; i < objects.Count; i++) - { - ZDO zDO = objects[i]; - Vector3 position = zDO.GetPosition(); - zDO.m_tempSortValue = Vector3.Distance(position, refPos); - float num = 100f; - if (peer.m_zdos.TryGetValue(zDO.m_uid, out var value)) - { - num = Mathf.Clamp(time - value.m_syncTime, 0f, 100f); - zDO.m_tempHaveRevision = true; - } - else - { - zDO.m_tempHaveRevision = false; - } - zDO.m_tempSortValue -= num * 1.5f; - } - compareReceiver = peer.m_peer.m_uid; - objects.Sort(ServerSendCompare); - } - - private static int ClientSendCompare(ZDO x, ZDO y) - { - if (x.m_type == y.m_type) - { - return x.m_tempSortValue.CompareTo(y.m_tempSortValue); - } - if (x.m_type == ZDO.ObjectType.Prioritized) - { - return -1; - } - if (y.m_type == ZDO.ObjectType.Prioritized) - { - return 1; - } - return x.m_tempSortValue.CompareTo(y.m_tempSortValue); - } - - private void ClientSortSendZDOS(List<ZDO> objects, ZDOPeer peer) - { - float time = Time.time; - for (int i = 0; i < objects.Count; i++) - { - ZDO zDO = objects[i]; - zDO.m_tempSortValue = 0f; - float num = 100f; - if (peer.m_zdos.TryGetValue(zDO.m_uid, out var value)) - { - num = Mathf.Clamp(time - value.m_syncTime, 0f, 100f); - } - zDO.m_tempSortValue -= num * 1.5f; - } - objects.Sort(ClientSendCompare); - } - - private void PrintZdoList(List<ZDO> zdos) - { - ZLog.Log("Sync list " + zdos.Count); - foreach (ZDO zdo in zdos) - { - string text = ""; - int prefab = zdo.GetPrefab(); - if (prefab != 0) - { - GameObject prefab2 = ZNetScene.instance.GetPrefab(prefab); - if ((bool)prefab2) - { - text = prefab2.name; - } - } - ZLog.Log(" " + zdo.m_uid.ToString() + " " + zdo.m_ownerRevision + " prefab:" + text); - } - } - - private void AddDistantObjects(ZDOPeer peer, int maxItems, List<ZDO> toSync) - { - if (peer.m_sendIndex >= m_objectsByID.Count) - { - peer.m_sendIndex = 0; - } - IEnumerable<KeyValuePair<ZDOID, ZDO>> enumerable = m_objectsByID.Skip(peer.m_sendIndex).Take(maxItems); - peer.m_sendIndex += maxItems; - foreach (KeyValuePair<ZDOID, ZDO> item in enumerable) - { - toSync.Add(item.Value); - } - } - - public long GetMyID() - { - return m_myid; - } - - private int SectorToIndex(Vector2i s) - { - return (s.y + m_halfWidth) * m_width + (s.x + m_halfWidth); - } - - private void FindObjects(Vector2i sector, List<ZDO> objects) - { - int num = SectorToIndex(sector); - List<ZDO> value; - if (num >= 0 && num < m_objectsBySector.Length) - { - if (m_objectsBySector[num] != null) - { - objects.AddRange(m_objectsBySector[num]); - } - } - else if (m_objectsByOutsideSector.TryGetValue(sector, out value)) - { - objects.AddRange(value); - } - } - - private void FindDistantObjects(Vector2i sector, List<ZDO> objects) - { - int num = SectorToIndex(sector); - if (num >= 0 && num < m_objectsBySector.Length) - { - List<ZDO> list = m_objectsBySector[num]; - if (list == null) - { - return; - } - for (int i = 0; i < list.Count; i++) - { - ZDO zDO = list[i]; - if (zDO.m_distant) - { - objects.Add(zDO); - } - } - } - else - { - if (!m_objectsByOutsideSector.TryGetValue(sector, out var value)) - { - return; - } - for (int j = 0; j < value.Count; j++) - { - ZDO zDO2 = value[j]; - if (zDO2.m_distant) - { - objects.Add(zDO2); - } - } - } - } - - private void RemoveOrphanNonPersistentZDOS() - { - foreach (KeyValuePair<ZDOID, ZDO> item in m_objectsByID) - { - ZDO value = item.Value; - if (!value.m_persistent && (value.m_owner == 0L || !IsPeerConnected(value.m_owner))) - { - ZLog.Log(string.Concat("Destroying abandoned non persistent zdo ", value.m_uid, " owner ", value.m_owner)); - value.SetOwner(m_myid); - DestroyZDO(value); - } - } - } - - private bool IsPeerConnected(long uid) - { - if (m_myid == uid) - { - return true; - } - foreach (ZDOPeer peer in m_peers) - { - if (peer.m_peer.m_uid == uid) - { - return true; - } - } - return false; - } - - public void GetAllZDOsWithPrefab(string prefab, List<ZDO> zdos) - { - int stableHashCode = prefab.GetStableHashCode(); - foreach (ZDO value in m_objectsByID.Values) - { - if (value.GetPrefab() == stableHashCode) - { - zdos.Add(value); - } - } - } - - private static bool InvalidZDO(ZDO zdo) - { - return !zdo.IsValid(); - } - - public bool GetAllZDOsWithPrefabIterative(string prefab, List<ZDO> zdos, ref int index) - { - int stableHashCode = prefab.GetStableHashCode(); - if (index >= m_objectsBySector.Length) - { - foreach (List<ZDO> value in m_objectsByOutsideSector.Values) - { - foreach (ZDO item in value) - { - if (item.GetPrefab() == stableHashCode) - { - zdos.Add(item); - } - } - } - zdos.RemoveAll(InvalidZDO); - return true; - } - int num = 0; - while (index < m_objectsBySector.Length) - { - List<ZDO> list = m_objectsBySector[index]; - if (list != null) - { - foreach (ZDO item2 in list) - { - if (item2.GetPrefab() == stableHashCode) - { - zdos.Add(item2); - } - } - num++; - if (num > 400) - { - break; - } - } - index++; - } - return false; - } - - private List<ZDO> GetSaveClone() - { - List<ZDO> list = new List<ZDO>(); - for (int i = 0; i < m_objectsBySector.Length; i++) - { - if (m_objectsBySector[i] == null) - { - continue; - } - foreach (ZDO item in m_objectsBySector[i]) - { - if (item.m_persistent) - { - list.Add(item.Clone()); - } - } - } - foreach (List<ZDO> value in m_objectsByOutsideSector.Values) - { - foreach (ZDO item2 in value) - { - if (item2.m_persistent) - { - list.Add(item2.Clone()); - } - } - } - return list; - } - - public int NrOfObjects() - { - return m_objectsByID.Count; - } - - public int GetSentZDOs() - { - return m_zdosSentLastSec; - } - - public int GetRecvZDOs() - { - return m_zdosRecvLastSec; - } - - public void GetAverageStats(out float sentZdos, out float recvZdos) - { - sentZdos = (float)m_zdosSentLastSec / 20f; - recvZdos = (float)m_zdosRecvLastSec / 20f; - } - - public int GetClientChangeQueue() - { - return m_clientChangeQueue.Count; - } - - public void RequestZDO(ZDOID id) - { - ZRoutedRpc.instance.InvokeRoutedRPC("RequestZDO", id); - } - - private void RPC_RequestZDO(long sender, ZDOID id) - { - GetPeer(sender)?.ForceSendZDO(id); - } - - private ZDOPeer GetPeer(long uid) - { - foreach (ZDOPeer peer in m_peers) - { - if (peer.m_peer.m_uid == uid) - { - return peer; - } - } - return null; - } - - public void ForceSendZDO(ZDOID id) - { - foreach (ZDOPeer peer in m_peers) - { - peer.ForceSendZDO(id); - } - } - - public void ForceSendZDO(long peerID, ZDOID id) - { - if (ZNet.instance.IsServer()) - { - GetPeer(peerID)?.ForceSendZDO(id); - return; - } - foreach (ZDOPeer peer in m_peers) - { - peer.ForceSendZDO(id); - } - } - - public void ClientChanged(ZDOID id) - { - m_clientChangeQueue.Add(id); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZDOPool.cs b/Valheim_v202102/Valheim/assembly_valheim/ZDOPool.cs deleted file mode 100644 index 57c477e..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZDOPool.cs +++ /dev/null @@ -1,69 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class ZDOPool -{ - private static int BATCH_SIZE = 64; - - private static Stack<ZDO> m_free = new Stack<ZDO>(); - - private static int m_active = 0; - - public static ZDO Create(ZDOMan man, ZDOID id, Vector3 position) - { - ZDO zDO = Get(); - zDO.Initialize(man, id, position); - return zDO; - } - - public static ZDO Create(ZDOMan man) - { - ZDO zDO = Get(); - zDO.Initialize(man); - return zDO; - } - - public static void Release(Dictionary<ZDOID, ZDO> objects) - { - foreach (ZDO value in objects.Values) - { - Release(value); - } - } - - public static void Release(ZDO zdo) - { - zdo.Reset(); - m_free.Push(zdo); - m_active--; - } - - private static ZDO Get() - { - if (m_free.Count <= 0) - { - for (int i = 0; i < BATCH_SIZE; i++) - { - ZDO item = new ZDO(); - m_free.Push(item); - } - } - m_active++; - return m_free.Pop(); - } - - public static int GetPoolSize() - { - return m_free.Count; - } - - public static int GetPoolActive() - { - return m_active; - } - - public static int GetPoolTotal() - { - return m_active + m_free.Count; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZNat.cs b/Valheim_v202102/Valheim/assembly_valheim/ZNat.cs deleted file mode 100644 index 058cb86..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZNat.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.IO; - -public class ZNat : IDisposable -{ - private FileStream m_output; - - private bool m_mappingOK; - - private int m_port; - - public void Dispose() - { - } - - public void SetPort(int port) - { - if (m_port != port) - { - m_port = port; - } - } - - public void Update(float dt) - { - } - - public bool GetStatus() - { - return m_mappingOK; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZNet.cs b/Valheim_v202102/Valheim/assembly_valheim/ZNet.cs deleted file mode 100644 index 9306206..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZNet.cs +++ /dev/null @@ -1,1488 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Security.Cryptography; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using Steamworks; -using UnityEngine; -using UnityEngine.Rendering; -using UnityEngine.UI; - -public class ZNet : MonoBehaviour -{ - public enum ConnectionStatus - { - None, - Connecting, - Connected, - ErrorVersion, - ErrorDisconnected, - ErrorConnectFailed, - ErrorPassword, - ErrorAlreadyConnected, - ErrorBanned, - ErrorFull - } - - public struct PlayerInfo - { - public string m_name; - - public string m_host; - - public ZDOID m_characterID; - - public bool m_publicPosition; - - public Vector3 m_position; - } - - private float m_banlistTimer; - - private static ZNet m_instance; - - public int m_hostPort = 2456; - - public RectTransform m_passwordDialog; - - public float m_badConnectionPing = 5f; - - public int m_zdoSectorsWidth = 512; - - public int m_serverPlayerLimit = 10; - - private ZConnector2 m_serverConnector; - - private ISocket m_hostSocket; - - private List<ZNetPeer> m_peers = new List<ZNetPeer>(); - - private Thread m_saveThread; - - private float m_saveStartTime; - - private float m_saveThreadStartTime; - - private ZDOMan m_zdoMan; - - private ZRoutedRpc m_routedRpc; - - private ZNat m_nat; - - private double m_netTime = 2040.0; - - private ZDOID m_characterID = ZDOID.None; - - private Vector3 m_referencePosition = Vector3.zero; - - private bool m_publicReferencePosition; - - private float m_periodicSendTimer; - - private float m_statTimer; - - private int m_totalSent; - - private int m_totalRecv; - - private bool m_haveStoped; - - private static bool m_isServer = true; - - private static World m_world = null; - - private static string m_serverHost = ""; - - private static int m_serverHostPort = 0; - - private static ulong m_serverSteamID = 0uL; - - private static bool m_openServer = true; - - private static bool m_publicServer = true; - - private static string m_serverPassword = ""; - - private static string m_ServerName = ""; - - private static ConnectionStatus m_connectionStatus = ConnectionStatus.None; - - private SyncedList m_adminList; - - private SyncedList m_bannedList; - - private SyncedList m_permittedList; - - private List<PlayerInfo> m_players = new List<PlayerInfo>(); - - private ZRpc m_tempPasswordRPC; - - public static ZNet instance => m_instance; - - private void Awake() - { - m_instance = this; - m_routedRpc = new ZRoutedRpc(m_isServer); - m_zdoMan = new ZDOMan(m_zdoSectorsWidth); - m_passwordDialog.gameObject.SetActive(value: false); - WorldGenerator.Deitialize(); - if (!SteamManager.Initialize()) - { - return; - } - string personaName = SteamFriends.GetPersonaName(); - ZLog.Log("Steam initialized, persona:" + personaName); - ZSteamMatchmaking.Initialize(); - if (m_isServer) - { - m_adminList = new SyncedList(Application.persistentDataPath + "/adminlist.txt", "List admin players ID ONE per line"); - m_bannedList = new SyncedList(Application.persistentDataPath + "/bannedlist.txt", "List banned players ID ONE per line"); - m_permittedList = new SyncedList(Application.persistentDataPath + "/permittedlist.txt", "List permitted players ID ONE per line"); - if (m_world == null) - { - m_publicServer = false; - m_world = World.GetDevWorld(); - } - if (m_openServer) - { - ZSteamSocket zSteamSocket = new ZSteamSocket(); - zSteamSocket.StartHost(); - m_hostSocket = zSteamSocket; - bool password = m_serverPassword != ""; - string versionString = Version.GetVersionString(); - ZSteamMatchmaking.instance.RegisterServer(m_ServerName, password, versionString, m_publicServer, m_world.m_seedName); - } - WorldGenerator.Initialize(m_world); - LoadWorld(); - m_connectionStatus = ConnectionStatus.Connected; - } - else - { - ZLog.Log("Connecting to server " + m_serverSteamID); - Connect(new CSteamID(m_serverSteamID)); - } - m_routedRpc.SetUID(m_zdoMan.GetMyID()); - if (IsServer()) - { - SendPlayerList(); - } - } - - private string GetPublicIP() - { - try - { - string input = Utils.DownloadString("http://checkip.dyndns.org/"); - input = new Regex("\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}").Matches(input)[0].ToString(); - ZLog.Log("Got public ip respons:" + input); - return input; - } - catch (Exception ex) - { - ZLog.Log("Failed to get public ip:" + ex.ToString()); - return ""; - } - } - - public void Shutdown() - { - ZLog.Log("ZNet Shutdown"); - Save(); - StopAll(); - base.enabled = false; - } - - private void StopAll() - { - if (m_haveStoped) - { - return; - } - m_haveStoped = true; - if (m_saveThread != null && m_saveThread.IsAlive) - { - m_saveThread.Join(); - m_saveThread = null; - } - m_zdoMan.ShutDown(); - SendDisconnect(); - ZSteamMatchmaking.instance.ReleaseSessionTicket(); - ZSteamMatchmaking.instance.UnregisterServer(); - if (m_hostSocket != null) - { - m_hostSocket.Dispose(); - } - if (m_serverConnector != null) - { - m_serverConnector.Dispose(); - } - foreach (ZNetPeer peer in m_peers) - { - peer.Dispose(); - } - m_peers.Clear(); - } - - private void OnDestroy() - { - ZLog.Log("ZNet OnDestroy"); - if (m_instance == this) - { - m_instance = null; - } - } - - public void Connect(CSteamID hostID) - { - ZNetPeer peer = new ZNetPeer(new ZSteamSocket(hostID), server: true); - OnNewConnection(peer); - m_connectionStatus = ConnectionStatus.Connecting; - } - - public void Connect(string host, int port) - { - m_serverConnector = new ZConnector2(host, port); - m_connectionStatus = ConnectionStatus.Connecting; - } - - private void UpdateClientConnector(float dt) - { - if (m_serverConnector != null && m_serverConnector.UpdateStatus(dt, logErrors: true)) - { - ZSocket2 zSocket = m_serverConnector.Complete(); - if (zSocket != null) - { - ZLog.Log("Connection established to " + m_serverConnector.GetEndPointString()); - ZNetPeer peer = new ZNetPeer(zSocket, server: true); - OnNewConnection(peer); - } - else - { - m_connectionStatus = ConnectionStatus.ErrorConnectFailed; - ZLog.Log("Failed to connect to server"); - } - m_serverConnector.Dispose(); - m_serverConnector = null; - } - } - - private void OnNewConnection(ZNetPeer peer) - { - m_peers.Add(peer); - peer.m_rpc.Register<ZPackage>("PeerInfo", RPC_PeerInfo); - peer.m_rpc.Register("Disconnect", RPC_Disconnect); - if (m_isServer) - { - peer.m_rpc.Register("ServerHandshake", RPC_ServerHandshake); - return; - } - peer.m_rpc.Register<int>("Error", RPC_Error); - peer.m_rpc.Register<bool>("ClientHandshake", RPC_ClientHandshake); - peer.m_rpc.Invoke("ServerHandshake"); - } - - private void RPC_ServerHandshake(ZRpc rpc) - { - ZNetPeer peer = GetPeer(rpc); - if (peer != null) - { - ZLog.Log("Got handshake from client " + peer.m_socket.GetEndPointString()); - ClearPlayerData(peer); - bool flag = !string.IsNullOrEmpty(m_serverPassword); - peer.m_rpc.Invoke("ClientHandshake", flag); - } - } - - private void UpdatePassword() - { - if (m_passwordDialog.gameObject.activeSelf) - { - m_passwordDialog.GetComponentInChildren<InputField>().ActivateInputField(); - } - } - - public bool InPasswordDialog() - { - return m_passwordDialog.gameObject.activeSelf; - } - - private void RPC_ClientHandshake(ZRpc rpc, bool needPassword) - { - if (needPassword) - { - m_passwordDialog.gameObject.SetActive(value: true); - InputField componentInChildren = m_passwordDialog.GetComponentInChildren<InputField>(); - componentInChildren.text = ""; - componentInChildren.ActivateInputField(); - m_passwordDialog.GetComponentInChildren<InputFieldSubmit>().m_onSubmit = OnPasswordEnter; - m_tempPasswordRPC = rpc; - } - else - { - SendPeerInfo(rpc); - } - } - - private void OnPasswordEnter(string pwd) - { - if (m_tempPasswordRPC.IsConnected()) - { - m_passwordDialog.gameObject.SetActive(value: false); - SendPeerInfo(m_tempPasswordRPC, pwd); - m_tempPasswordRPC = null; - } - } - - private void SendPeerInfo(ZRpc rpc, string password = "") - { - ZPackage zPackage = new ZPackage(); - zPackage.Write(GetUID()); - zPackage.Write(Version.GetVersionString()); - zPackage.Write(m_referencePosition); - zPackage.Write(Game.instance.GetPlayerProfile().GetName()); - if (IsServer()) - { - zPackage.Write(m_world.m_name); - zPackage.Write(m_world.m_seed); - zPackage.Write(m_world.m_seedName); - zPackage.Write(m_world.m_uid); - zPackage.Write(m_world.m_worldGenVersion); - zPackage.Write(m_netTime); - } - else - { - string data = (string.IsNullOrEmpty(password) ? "" : HashPassword(password)); - zPackage.Write(data); - byte[] array = ZSteamMatchmaking.instance.RequestSessionTicket(); - if (array == null) - { - m_connectionStatus = ConnectionStatus.ErrorConnectFailed; - return; - } - zPackage.Write(array); - } - rpc.Invoke("PeerInfo", zPackage); - } - - private void RPC_PeerInfo(ZRpc rpc, ZPackage pkg) - { - ZNetPeer peer = GetPeer(rpc); - if (peer == null) - { - return; - } - long num = pkg.ReadLong(); - string text = pkg.ReadString(); - string endPointString = peer.m_socket.GetEndPointString(); - string hostName = peer.m_socket.GetHostName(); - ZLog.Log("VERSION check their:" + text + " mine:" + Version.GetVersionString()); - if (text != Version.GetVersionString()) - { - if (m_isServer) - { - rpc.Invoke("Error", 3); - } - else - { - m_connectionStatus = ConnectionStatus.ErrorVersion; - } - ZLog.Log("Peer " + endPointString + " has incompatible version, mine:" + Version.GetVersionString() + " remote " + text); - return; - } - Vector3 refPos = pkg.ReadVector3(); - string text2 = pkg.ReadString(); - if (m_isServer) - { - if (!IsAllowed(hostName, text2)) - { - rpc.Invoke("Error", 8); - ZLog.Log("Player " + text2 + " : " + hostName + " is blacklisted or not in whitelist."); - return; - } - string text3 = pkg.ReadString(); - ZSteamSocket zSteamSocket = peer.m_socket as ZSteamSocket; - byte[] ticket = pkg.ReadByteArray(); - if (!ZSteamMatchmaking.instance.VerifySessionTicket(ticket, zSteamSocket.GetPeerID())) - { - ZLog.Log("Peer " + endPointString + " has invalid session ticket"); - rpc.Invoke("Error", 8); - return; - } - if (GetNrOfPlayers() >= m_serverPlayerLimit) - { - rpc.Invoke("Error", 9); - ZLog.Log("Peer " + endPointString + " disconnected due to server is full"); - return; - } - if (m_serverPassword != text3) - { - rpc.Invoke("Error", 6); - ZLog.Log("Peer " + endPointString + " has wrong password"); - return; - } - if (IsConnected(num)) - { - rpc.Invoke("Error", 7); - ZLog.Log("Already connected to peer with UID:" + num + " " + endPointString); - return; - } - } - else - { - m_world = new World(); - m_world.m_name = pkg.ReadString(); - m_world.m_seed = pkg.ReadInt(); - m_world.m_seedName = pkg.ReadString(); - m_world.m_uid = pkg.ReadLong(); - m_world.m_worldGenVersion = pkg.ReadInt(); - WorldGenerator.Initialize(m_world); - m_netTime = pkg.ReadDouble(); - } - peer.m_refPos = refPos; - peer.m_uid = num; - peer.m_playerName = text2; - rpc.Register<Vector3, bool>("RefPos", RPC_RefPos); - rpc.Register<ZPackage>("PlayerList", RPC_PlayerList); - rpc.Register<string>("RemotePrint", RPC_RemotePrint); - if (m_isServer) - { - rpc.Register<ZDOID>("CharacterID", RPC_CharacterID); - rpc.Register<string>("Kick", RPC_Kick); - rpc.Register<string>("Ban", RPC_Ban); - rpc.Register<string>("Unban", RPC_Unban); - rpc.Register("PrintBanned", RPC_PrintBanned); - } - else - { - rpc.Register<double>("NetTime", RPC_NetTime); - } - if (m_isServer) - { - SendPeerInfo(rpc); - SendPlayerList(); - } - else - { - m_connectionStatus = ConnectionStatus.Connected; - } - m_zdoMan.AddPeer(peer); - m_routedRpc.AddPeer(peer); - } - - private void SendDisconnect() - { - ZLog.Log("Sending disconnect msg"); - foreach (ZNetPeer peer in m_peers) - { - SendDisconnect(peer); - } - } - - private void SendDisconnect(ZNetPeer peer) - { - if (peer.m_rpc != null) - { - ZLog.Log("Sent to " + peer.m_socket.GetEndPointString()); - peer.m_rpc.Invoke("Disconnect"); - } - } - - private void RPC_Disconnect(ZRpc rpc) - { - ZLog.Log("RPC_Disconnect "); - ZNetPeer peer = GetPeer(rpc); - if (peer != null) - { - if (peer.m_server) - { - m_connectionStatus = ConnectionStatus.ErrorDisconnected; - } - Disconnect(peer); - } - } - - private void RPC_Error(ZRpc rpc, int error) - { - ZLog.Log("Got connectoin error msg " + (m_connectionStatus = (ConnectionStatus)error)); - } - - public bool IsConnected(long uid) - { - if (uid == GetUID()) - { - return true; - } - foreach (ZNetPeer peer in m_peers) - { - if (peer.m_uid == uid) - { - return true; - } - } - return false; - } - - private void ClearPlayerData(ZNetPeer peer) - { - m_routedRpc.RemovePeer(peer); - m_zdoMan.RemovePeer(peer); - } - - public void Disconnect(ZNetPeer peer) - { - ClearPlayerData(peer); - m_peers.Remove(peer); - peer.Dispose(); - if (m_isServer) - { - SendPlayerList(); - } - } - - private void FixedUpdate() - { - UpdateNetTime(Time.fixedDeltaTime); - } - - private void Update() - { - float deltaTime = Time.deltaTime; - ZSteamSocket.Update(); - if (IsServer()) - { - UpdateBanList(deltaTime); - } - CheckForIncommingServerConnections(); - UpdatePeers(deltaTime); - UpdateStats(deltaTime); - SendPeriodicData(deltaTime); - m_zdoMan.Update(deltaTime); - UpdateSave(); - UpdatePassword(); - } - - private void UpdateNetTime(float dt) - { - if (IsServer()) - { - if (GetNrOfPlayers() > 0) - { - m_netTime += dt; - } - } - else - { - m_netTime += dt; - } - } - - private void UpdateBanList(float dt) - { - m_banlistTimer += dt; - if (!(m_banlistTimer > 5f)) - { - return; - } - m_banlistTimer = 0f; - CheckWhiteList(); - foreach (string item in m_bannedList.GetList()) - { - InternalKick(item); - } - } - - private void CheckWhiteList() - { - if (m_permittedList.Count() == 0) - { - return; - } - bool flag = false; - while (!flag) - { - flag = true; - foreach (ZNetPeer peer in m_peers) - { - if (peer.IsReady()) - { - string hostName = peer.m_socket.GetHostName(); - if (!m_permittedList.Contains(hostName)) - { - ZLog.Log("Kicking player not in permitted list " + peer.m_playerName + " host: " + hostName); - InternalKick(peer); - flag = false; - break; - } - } - } - } - } - - public bool IsSaving() - { - return m_saveThread != null; - } - - private void UpdateStats(float dt) - { - m_statTimer += dt; - if (!(m_statTimer >= 1f)) - { - return; - } - m_statTimer = 0f; - m_totalRecv = 0; - m_totalSent = 0; - foreach (ZNetPeer peer in m_peers) - { - if (peer.m_socket != null) - { - peer.m_socket.GetAndResetStats(out var totalSent, out var totalRecv); - m_totalRecv += totalRecv; - m_totalSent += totalSent; - } - } - } - - public void Save() - { - if (ZoneSystem.instance.SkipSaving() || DungeonDB.instance.SkipSaving()) - { - ZLog.LogWarning("Skipping world save"); - } - else if (m_isServer && m_world != null) - { - SaveWorldAsync(); - } - } - - private void SendPeriodicData(float dt) - { - m_periodicSendTimer += dt; - if (!(m_periodicSendTimer >= 2f)) - { - return; - } - m_periodicSendTimer = 0f; - if (IsServer()) - { - SendNetTime(); - SendPlayerList(); - return; - } - foreach (ZNetPeer peer in m_peers) - { - if (peer.IsReady()) - { - peer.m_rpc.Invoke("RefPos", m_referencePosition, m_publicReferencePosition); - } - } - } - - private void SendNetTime() - { - foreach (ZNetPeer peer in m_peers) - { - if (peer.IsReady()) - { - peer.m_rpc.Invoke("NetTime", m_netTime); - } - } - } - - private void RPC_NetTime(ZRpc rpc, double time) - { - m_netTime = time; - } - - private void RPC_RefPos(ZRpc rpc, Vector3 pos, bool publicRefPos) - { - ZNetPeer peer = GetPeer(rpc); - if (peer != null) - { - peer.m_refPos = pos; - peer.m_publicRefPos = publicRefPos; - } - } - - private void UpdatePeers(float dt) - { - foreach (ZNetPeer peer in m_peers) - { - if (!peer.m_rpc.IsConnected()) - { - if (peer.m_server) - { - m_connectionStatus = ConnectionStatus.ErrorDisconnected; - } - Disconnect(peer); - break; - } - } - ZNetPeer[] array = m_peers.ToArray(); - for (int i = 0; i < array.Length; i++) - { - array[i].m_rpc.Update(dt); - } - } - - private void CheckForIncommingServerConnections() - { - if (m_hostSocket == null) - { - return; - } - ISocket socket = m_hostSocket.Accept(); - if (socket != null) - { - if (!socket.IsConnected()) - { - socket.Dispose(); - return; - } - ZNetPeer peer = new ZNetPeer(socket, server: false); - OnNewConnection(peer); - } - } - - public ZNetPeer GetPeerByPlayerName(string name) - { - foreach (ZNetPeer peer in m_peers) - { - if (peer.IsReady() && peer.m_playerName == name) - { - return peer; - } - } - return null; - } - - public ZNetPeer GetPeerByHostName(string endpoint) - { - foreach (ZNetPeer peer in m_peers) - { - if (peer.IsReady() && peer.m_socket.GetHostName() == endpoint) - { - return peer; - } - } - return null; - } - - public ZNetPeer GetPeer(long uid) - { - foreach (ZNetPeer peer in m_peers) - { - if (peer.m_uid == uid) - { - return peer; - } - } - return null; - } - - private ZNetPeer GetPeer(ZRpc rpc) - { - foreach (ZNetPeer peer in m_peers) - { - if (peer.m_rpc == rpc) - { - return peer; - } - } - return null; - } - - public List<ZNetPeer> GetConnectedPeers() - { - return new List<ZNetPeer>(m_peers); - } - - private void SaveWorldAsync() - { - if (m_saveThread != null && m_saveThread.IsAlive) - { - m_saveThread.Join(); - m_saveThread = null; - } - m_saveStartTime = Time.realtimeSinceStartup; - m_zdoMan.PrepareSave(); - ZoneSystem.instance.PrepareSave(); - RandEventSystem.instance.PrepareSave(); - m_saveThreadStartTime = Time.realtimeSinceStartup; - m_saveThread = new Thread(SaveWorldThread); - m_saveThread.Start(); - } - - private void UpdateSave() - { - if (m_saveThread != null && !m_saveThread.IsAlive) - { - m_saveThread = null; - float num = m_saveThreadStartTime - m_saveStartTime; - float num2 = Time.realtimeSinceStartup - m_saveThreadStartTime; - MessageHud.instance.ShowMessage(MessageHud.MessageType.TopLeft, "$msg_worldsaved ( " + num.ToString("0.00") + "+" + num2.ToString("0.00") + "s )"); - } - } - - private void SaveWorldThread() - { - DateTime now = DateTime.Now; - string dBPath = m_world.GetDBPath(); - string text = dBPath + ".new"; - string text2 = dBPath + ".old"; - FileStream fileStream = File.Create(text); - BinaryWriter binaryWriter = new BinaryWriter(fileStream); - binaryWriter.Write(Version.m_worldVersion); - binaryWriter.Write(m_netTime); - m_zdoMan.SaveAsync(binaryWriter); - ZoneSystem.instance.SaveASync(binaryWriter); - RandEventSystem.instance.SaveAsync(binaryWriter); - binaryWriter.Close(); - fileStream.Dispose(); - m_world.SaveWorldMetaData(); - if (File.Exists(dBPath)) - { - if (File.Exists(text2)) - { - File.Delete(text2); - } - File.Move(dBPath, text2); - } - File.Move(text, dBPath); - ZLog.Log("World saved ( " + (DateTime.Now - now).TotalMilliseconds + "ms )"); - } - - private bool LoadWorld() - { - ZLog.Log("Load world " + m_world.m_name); - string dBPath = m_world.GetDBPath(); - FileStream fileStream; - try - { - fileStream = File.OpenRead(dBPath); - } - catch - { - ZLog.Log(" missing world.dat"); - return false; - } - BinaryReader binaryReader = new BinaryReader(fileStream); - if (!CheckDataVersion(binaryReader, out var version)) - { - ZLog.Log(" incompatible data version " + version); - binaryReader.Close(); - fileStream.Dispose(); - return false; - } - if (version >= 4) - { - m_netTime = binaryReader.ReadDouble(); - } - m_zdoMan.Load(binaryReader, version); - if (version >= 12) - { - ZoneSystem.instance.Load(binaryReader, version); - } - if (version >= 15) - { - RandEventSystem.instance.Load(binaryReader, version); - } - binaryReader.Close(); - fileStream.Dispose(); - GC.Collect(); - return true; - } - - private bool CheckDataVersion(BinaryReader reader, out int version) - { - try - { - version = reader.ReadInt32(); - if (!Version.IsWorldVersionCompatible(version)) - { - return false; - } - } - catch - { - version = 0; - return false; - } - return true; - } - - public int GetHostPort() - { - if (m_hostSocket != null) - { - return m_hostSocket.GetHostPort(); - } - return 0; - } - - public long GetUID() - { - return m_zdoMan.GetMyID(); - } - - public long GetWorldUID() - { - return m_world.m_uid; - } - - public string GetWorldName() - { - if (m_world != null) - { - return m_world.m_name; - } - return null; - } - - public void SetCharacterID(ZDOID id) - { - m_characterID = id; - if (!m_isServer) - { - m_peers[0].m_rpc.Invoke("CharacterID", id); - } - } - - private void RPC_CharacterID(ZRpc rpc, ZDOID characterID) - { - ZNetPeer peer = GetPeer(rpc); - if (peer != null) - { - peer.m_characterID = characterID; - ZLog.Log("Got character ZDOID from " + peer.m_playerName + " : " + characterID); - } - } - - public void SetPublicReferencePosition(bool pub) - { - m_publicReferencePosition = pub; - } - - public bool IsReferencePositionPublic() - { - return m_publicReferencePosition; - } - - public void SetReferencePosition(Vector3 pos) - { - m_referencePosition = pos; - } - - public Vector3 GetReferencePosition() - { - return m_referencePosition; - } - - public List<ZDO> GetAllCharacterZDOS() - { - List<ZDO> list = new List<ZDO>(); - ZDO zDO = m_zdoMan.GetZDO(m_characterID); - if (zDO != null) - { - list.Add(zDO); - } - foreach (ZNetPeer peer in m_peers) - { - if (peer.IsReady() && !peer.m_characterID.IsNone()) - { - ZDO zDO2 = m_zdoMan.GetZDO(peer.m_characterID); - if (zDO2 != null) - { - list.Add(zDO2); - } - } - } - return list; - } - - public int GetPeerConnections() - { - int num = 0; - for (int i = 0; i < m_peers.Count; i++) - { - if (m_peers[i].IsReady()) - { - num++; - } - } - return num; - } - - public ZNat GetZNat() - { - return m_nat; - } - - public static void SetServer(bool server, bool openServer, bool publicServer, string serverName, string password, World world) - { - m_isServer = server; - m_openServer = openServer; - m_publicServer = publicServer; - m_serverPassword = (string.IsNullOrEmpty(password) ? "" : HashPassword(password)); - m_ServerName = serverName; - m_world = world; - } - - private static string HashPassword(string password) - { - byte[] bytes = Encoding.ASCII.GetBytes(password); - byte[] bytes2 = new MD5CryptoServiceProvider().ComputeHash(bytes); - return Encoding.ASCII.GetString(bytes2); - } - - public static void SetServerHost(ulong serverID) - { - m_serverHost = ""; - m_serverHostPort = 0; - m_serverSteamID = serverID; - } - - public static void SetServerHost(string host, int port) - { - m_serverHost = host; - m_serverHostPort = port; - m_serverSteamID = 0uL; - } - - public static string GetServerString() - { - return m_serverHost + ":" + m_serverHostPort; - } - - public bool IsServer() - { - return m_isServer; - } - - public bool IsDedicated() - { - return false; - } - - private void UpdatePlayerList() - { - m_players.Clear(); - if (SystemInfo.graphicsDeviceType != GraphicsDeviceType.Null) - { - PlayerInfo item = default(PlayerInfo); - item.m_name = Game.instance.GetPlayerProfile().GetName(); - item.m_host = ""; - item.m_characterID = m_characterID; - item.m_publicPosition = m_publicReferencePosition; - if (item.m_publicPosition) - { - item.m_position = m_referencePosition; - } - m_players.Add(item); - } - foreach (ZNetPeer peer in m_peers) - { - if (peer.IsReady()) - { - PlayerInfo item2 = default(PlayerInfo); - item2.m_characterID = peer.m_characterID; - item2.m_name = peer.m_playerName; - item2.m_host = peer.m_socket.GetHostName(); - item2.m_publicPosition = peer.m_publicRefPos; - if (item2.m_publicPosition) - { - item2.m_position = peer.m_refPos; - } - m_players.Add(item2); - } - } - } - - private void SendPlayerList() - { - UpdatePlayerList(); - if (m_peers.Count <= 0) - { - return; - } - ZPackage zPackage = new ZPackage(); - zPackage.Write(m_players.Count); - foreach (PlayerInfo player in m_players) - { - zPackage.Write(player.m_name); - zPackage.Write(player.m_host); - zPackage.Write(player.m_characterID); - zPackage.Write(player.m_publicPosition); - if (player.m_publicPosition) - { - zPackage.Write(player.m_position); - } - } - foreach (ZNetPeer peer in m_peers) - { - if (peer.IsReady()) - { - peer.m_rpc.Invoke("PlayerList", zPackage); - } - } - } - - private void RPC_PlayerList(ZRpc rpc, ZPackage pkg) - { - m_players.Clear(); - int num = pkg.ReadInt(); - for (int i = 0; i < num; i++) - { - PlayerInfo item = default(PlayerInfo); - item.m_name = pkg.ReadString(); - item.m_host = pkg.ReadString(); - item.m_characterID = pkg.ReadZDOID(); - item.m_publicPosition = pkg.ReadBool(); - if (item.m_publicPosition) - { - item.m_position = pkg.ReadVector3(); - } - m_players.Add(item); - } - } - - public List<PlayerInfo> GetPlayerList() - { - return m_players; - } - - public void GetOtherPublicPlayers(List<PlayerInfo> playerList) - { - foreach (PlayerInfo player in m_players) - { - if (player.m_publicPosition) - { - ZDOID characterID = player.m_characterID; - if (!characterID.IsNone() && !(player.m_characterID == m_characterID)) - { - playerList.Add(player); - } - } - } - } - - public int GetNrOfPlayers() - { - return m_players.Count; - } - - public void GetNetStats(out int totalSent, out int totalRecv) - { - totalSent = m_totalSent; - totalRecv = m_totalRecv; - } - - public void SetNetTime(double time) - { - m_netTime = time; - } - - public DateTime GetTime() - { - long ticks = (long)(m_netTime * 1000.0 * 10000.0); - return new DateTime(ticks); - } - - public float GetWrappedDayTimeSeconds() - { - return (float)(m_netTime % 86400.0); - } - - public double GetTimeSeconds() - { - return m_netTime; - } - - public static ConnectionStatus GetConnectionStatus() - { - if (m_instance != null && m_instance.IsServer()) - { - return ConnectionStatus.Connected; - } - return m_connectionStatus; - } - - public bool HasBadConnection() - { - return GetServerPing() > m_badConnectionPing; - } - - public float GetServerPing() - { - if (IsServer()) - { - return 0f; - } - if (m_connectionStatus == ConnectionStatus.Connecting || m_connectionStatus == ConnectionStatus.None) - { - return 0f; - } - if (m_connectionStatus == ConnectionStatus.Connected) - { - foreach (ZNetPeer peer in m_peers) - { - if (peer.IsReady()) - { - return peer.m_rpc.GetTimeSinceLastData(); - } - } - } - return 0f; - } - - public ZNetPeer GetServerPeer() - { - if (IsServer()) - { - return null; - } - if (m_connectionStatus == ConnectionStatus.Connecting || m_connectionStatus == ConnectionStatus.None) - { - return null; - } - if (m_connectionStatus == ConnectionStatus.Connected) - { - foreach (ZNetPeer peer in m_peers) - { - if (peer.IsReady()) - { - return peer; - } - } - } - return null; - } - - public ZRpc GetServerRPC() - { - return GetServerPeer()?.m_rpc; - } - - public List<ZNetPeer> GetPeers() - { - return m_peers; - } - - public void RemotePrint(ZRpc rpc, string text) - { - if (rpc == null) - { - if ((bool)Console.instance) - { - Console.instance.Print(text); - } - } - else - { - rpc.Invoke("RemotePrint", text); - } - } - - private void RPC_RemotePrint(ZRpc rpc, string text) - { - if ((bool)Console.instance) - { - Console.instance.Print(text); - } - } - - public void Kick(string user) - { - if (IsServer()) - { - InternalKick(user); - return; - } - GetServerRPC()?.Invoke("Kick", user); - } - - private void RPC_Kick(ZRpc rpc, string user) - { - if (ServerCtrl.instance != null) - { - if (!m_adminList.Contains(rpc.GetSocket().GetHostName())) - { - RemotePrint(rpc, "You are not admin"); - return; - } - RemotePrint(rpc, "Kicking user " + user); - InternalKick(user); - } - } - - private void InternalKick(string user) - { - if (!(user == "")) - { - ZNetPeer zNetPeer = GetPeerByHostName(user); - if (zNetPeer == null) - { - zNetPeer = GetPeerByPlayerName(user); - } - if (zNetPeer != null) - { - InternalKick(zNetPeer); - } - } - } - - private void InternalKick(ZNetPeer peer) - { - if (IsServer() && peer != null) - { - ZLog.Log("Kicking " + peer.m_playerName); - SendDisconnect(peer); - Disconnect(peer); - } - } - - public bool IsAllowed(string hostName, string playerName) - { - if (m_bannedList.Contains(hostName) || m_bannedList.Contains(playerName)) - { - return false; - } - if (m_permittedList.Count() > 0 && !m_permittedList.Contains(hostName)) - { - return false; - } - return true; - } - - public void Ban(string user) - { - if (IsServer()) - { - InternalBan(null, user); - return; - } - GetServerRPC()?.Invoke("Ban", user); - } - - private void RPC_Ban(ZRpc rpc, string user) - { - if (ServerCtrl.instance != null) - { - if (!m_adminList.Contains(rpc.GetSocket().GetHostName())) - { - RemotePrint(rpc, "You are not admin"); - } - else - { - InternalBan(rpc, user); - } - } - } - - private void InternalBan(ZRpc rpc, string user) - { - if (IsServer() && !(user == "")) - { - ZNetPeer peerByPlayerName = GetPeerByPlayerName(user); - if (peerByPlayerName != null) - { - user = peerByPlayerName.m_socket.GetHostName(); - } - RemotePrint(rpc, "Banning user " + user); - m_bannedList.Add(user); - } - } - - public void Unban(string user) - { - if (IsServer()) - { - InternalUnban(null, user); - return; - } - GetServerRPC()?.Invoke("Unban", user); - } - - private void RPC_Unban(ZRpc rpc, string user) - { - if (ServerCtrl.instance != null) - { - if (!m_adminList.Contains(rpc.GetSocket().GetHostName())) - { - RemotePrint(rpc, "You are not admin"); - } - else - { - InternalUnban(rpc, user); - } - } - } - - private void InternalUnban(ZRpc rpc, string user) - { - if (IsServer() && !(user == "")) - { - RemotePrint(rpc, "Unbanning user " + user); - m_bannedList.Remove(user); - } - } - - public void PrintBanned() - { - if (IsServer()) - { - InternalPrintBanned(null); - } - else - { - GetServerRPC()?.Invoke("PrintBanned"); - } - } - - private void RPC_PrintBanned(ZRpc rpc) - { - if (ServerCtrl.instance != null) - { - if (!m_adminList.Contains(rpc.GetSocket().GetHostName())) - { - RemotePrint(rpc, "You are not admin"); - } - else - { - InternalPrintBanned(rpc); - } - } - } - - private void InternalPrintBanned(ZRpc rpc) - { - RemotePrint(rpc, "Banned users"); - List<string> list = m_bannedList.GetList(); - if (list.Count == 0) - { - RemotePrint(rpc, "-"); - } - else - { - for (int i = 0; i < list.Count; i++) - { - RemotePrint(rpc, i + ": " + list[i]); - } - } - RemotePrint(rpc, ""); - RemotePrint(rpc, "Permitted users"); - List<string> list2 = m_permittedList.GetList(); - if (list2.Count == 0) - { - RemotePrint(rpc, "All"); - return; - } - for (int j = 0; j < list2.Count; j++) - { - RemotePrint(rpc, j + ": " + list2[j]); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZNetPeer.cs b/Valheim_v202102/Valheim/assembly_valheim/ZNetPeer.cs deleted file mode 100644 index a2c2482..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZNetPeer.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using UnityEngine; - -public class ZNetPeer : IDisposable -{ - public ZRpc m_rpc; - - public ISocket m_socket; - - public long m_uid; - - public bool m_server; - - public Vector3 m_refPos = Vector3.zero; - - public bool m_publicRefPos; - - public ZDOID m_characterID = ZDOID.None; - - public string m_playerName = ""; - - public ZNetPeer(ISocket socket, bool server) - { - m_socket = socket; - m_rpc = new ZRpc(m_socket); - m_server = server; - } - - public void Dispose() - { - m_socket.Dispose(); - m_rpc.Dispose(); - } - - public bool IsReady() - { - return m_uid != 0; - } - - public Vector3 GetRefPos() - { - return m_refPos; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZNetScene.cs b/Valheim_v202102/Valheim/assembly_valheim/ZNetScene.cs deleted file mode 100644 index ae853c5..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZNetScene.cs +++ /dev/null @@ -1,423 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using UnityEngine; - -public class ZNetScene : MonoBehaviour -{ - private static ZNetScene m_instance; - - private const int m_maxCreatedPerFrame = 10; - - private const int m_maxDestroyedPerFrame = 20; - - private const float m_createDestroyFps = 30f; - - public List<GameObject> m_prefabs = new List<GameObject>(); - - public List<GameObject> m_nonNetViewPrefabs = new List<GameObject>(); - - private Dictionary<int, GameObject> m_namedPrefabs = new Dictionary<int, GameObject>(); - - private Dictionary<ZDO, ZNetView> m_instances = new Dictionary<ZDO, ZNetView>(new ZDOComparer()); - - private GameObject m_netSceneRoot; - - private List<ZDO> m_tempCurrentObjects = new List<ZDO>(); - - private List<ZDO> m_tempCurrentObjects2 = new List<ZDO>(); - - private List<ZDO> m_tempCurrentDistantObjects = new List<ZDO>(); - - private List<ZNetView> m_tempRemoved = new List<ZNetView>(); - - private HashSet<ZDO> m_tempActiveZDOs = new HashSet<ZDO>(new ZDOComparer()); - - private float m_createDestroyTimer; - - public static ZNetScene instance => m_instance; - - private void Awake() - { - m_instance = this; - foreach (GameObject prefab in m_prefabs) - { - m_namedPrefabs.Add(prefab.name.GetStableHashCode(), prefab); - } - foreach (GameObject nonNetViewPrefab in m_nonNetViewPrefabs) - { - m_namedPrefabs.Add(nonNetViewPrefab.name.GetStableHashCode(), nonNetViewPrefab); - } - ZDOMan zDOMan = ZDOMan.instance; - zDOMan.m_onZDODestroyed = (Action<ZDO>)Delegate.Combine(zDOMan.m_onZDODestroyed, new Action<ZDO>(OnZDODestroyed)); - m_netSceneRoot = new GameObject("_NetSceneRoot"); - ZRoutedRpc.instance.Register<Vector3, Quaternion, int>("SpawnObject", RPC_SpawnObject); - } - - private void OnDestroy() - { - ZLog.Log("Net scene destroyed"); - if (m_instance == this) - { - m_instance = null; - } - } - - public void Shutdown() - { - foreach (KeyValuePair<ZDO, ZNetView> instance in m_instances) - { - if ((bool)instance.Value) - { - instance.Value.ResetZDO(); - UnityEngine.Object.Destroy(instance.Value.gameObject); - } - } - m_instances.Clear(); - base.enabled = false; - } - - public void AddInstance(ZDO zdo, ZNetView nview) - { - m_instances[zdo] = nview; - if (nview.transform.parent == null) - { - nview.transform.SetParent(m_netSceneRoot.transform); - } - } - - private bool IsPrefabZDOValid(ZDO zdo) - { - int prefab = zdo.GetPrefab(); - if (prefab == 0) - { - return false; - } - if (GetPrefab(prefab) == null) - { - return false; - } - return true; - } - - private GameObject CreateObject(ZDO zdo) - { - int prefab = zdo.GetPrefab(); - if (prefab == 0) - { - return null; - } - GameObject prefab2 = GetPrefab(prefab); - if (prefab2 == null) - { - return null; - } - Vector3 position = zdo.GetPosition(); - Quaternion rotation = zdo.GetRotation(); - ZNetView.m_initZDO = zdo; - GameObject result = UnityEngine.Object.Instantiate(prefab2, position, rotation); - ZNetView.m_initZDO = null; - return result; - } - - public void Destroy(GameObject go) - { - ZNetView component = go.GetComponent<ZNetView>(); - if ((bool)component && component.GetZDO() != null) - { - ZDO zDO = component.GetZDO(); - component.ResetZDO(); - m_instances.Remove(zDO); - if (zDO.IsOwner()) - { - ZDOMan.instance.DestroyZDO(zDO); - } - } - UnityEngine.Object.Destroy(go); - } - - public GameObject GetPrefab(int hash) - { - if (m_namedPrefabs.TryGetValue(hash, out var value)) - { - return value; - } - return null; - } - - public GameObject GetPrefab(string name) - { - int stableHashCode = name.GetStableHashCode(); - return GetPrefab(stableHashCode); - } - - public int GetPrefabHash(GameObject go) - { - return go.name.GetStableHashCode(); - } - - public bool IsAreaReady(Vector3 point) - { - Vector2i zone = ZoneSystem.instance.GetZone(point); - if (!ZoneSystem.instance.IsZoneLoaded(zone)) - { - return false; - } - m_tempCurrentObjects.Clear(); - ZDOMan.instance.FindSectorObjects(zone, 1, 0, m_tempCurrentObjects); - foreach (ZDO tempCurrentObject in m_tempCurrentObjects) - { - if (IsPrefabZDOValid(tempCurrentObject) && !FindInstance(tempCurrentObject)) - { - return false; - } - } - return true; - } - - private bool InLoadingScreen() - { - if (Player.m_localPlayer == null || Player.m_localPlayer.IsTeleporting()) - { - return true; - } - return false; - } - - private void CreateObjects(List<ZDO> currentNearObjects, List<ZDO> currentDistantObjects) - { - int maxCreatedPerFrame = 10; - if (InLoadingScreen()) - { - maxCreatedPerFrame = 100; - } - int frameCount = Time.frameCount; - foreach (ZDO key in m_instances.Keys) - { - key.m_tempCreateEarmark = frameCount; - } - int created = 0; - CreateObjectsSorted(currentNearObjects, maxCreatedPerFrame, ref created); - CreateDistantObjects(currentDistantObjects, maxCreatedPerFrame, ref created); - } - - private void CreateObjectsSorted(List<ZDO> currentNearObjects, int maxCreatedPerFrame, ref int created) - { - m_tempCurrentObjects2.Clear(); - int frameCount = Time.frameCount; - foreach (ZDO currentNearObject in currentNearObjects) - { - if (currentNearObject.m_tempCreateEarmark != frameCount && (currentNearObject.m_distant || ZoneSystem.instance.IsZoneLoaded(currentNearObject.GetSector()))) - { - m_tempCurrentObjects2.Add(currentNearObject); - } - } - foreach (ZDO item in m_tempCurrentObjects2.OrderByDescending((ZDO item) => item.m_type)) - { - if (CreateObject(item) != null) - { - created++; - if (created > maxCreatedPerFrame) - { - break; - } - } - else if (ZNet.instance.IsServer()) - { - item.SetOwner(ZDOMan.instance.GetMyID()); - ZLog.Log("Destroyed invalid predab ZDO:" + item.m_uid); - ZDOMan.instance.DestroyZDO(item); - } - } - } - - private void CreateDistantObjects(List<ZDO> objects, int maxCreatedPerFrame, ref int created) - { - if (created > maxCreatedPerFrame) - { - return; - } - int frameCount = Time.frameCount; - foreach (ZDO @object in objects) - { - if (@object.m_tempCreateEarmark == frameCount) - { - continue; - } - if (CreateObject(@object) != null) - { - created++; - if (created > maxCreatedPerFrame) - { - break; - } - } - else if (ZNet.instance.IsServer()) - { - @object.SetOwner(ZDOMan.instance.GetMyID()); - ZLog.Log(string.Concat("Destroyed invalid predab ZDO:", @object.m_uid, " prefab hash:", @object.GetPrefab())); - ZDOMan.instance.DestroyZDO(@object); - } - } - } - - private void OnZDODestroyed(ZDO zdo) - { - if (m_instances.TryGetValue(zdo, out var value)) - { - value.ResetZDO(); - UnityEngine.Object.Destroy(value.gameObject); - m_instances.Remove(zdo); - } - } - - private void RemoveObjects(List<ZDO> currentNearObjects, List<ZDO> currentDistantObjects) - { - int frameCount = Time.frameCount; - foreach (ZDO currentNearObject in currentNearObjects) - { - currentNearObject.m_tempRemoveEarmark = frameCount; - } - foreach (ZDO currentDistantObject in currentDistantObjects) - { - currentDistantObject.m_tempRemoveEarmark = frameCount; - } - m_tempRemoved.Clear(); - foreach (ZNetView value in m_instances.Values) - { - if (value.GetZDO().m_tempRemoveEarmark != frameCount) - { - m_tempRemoved.Add(value); - } - } - for (int i = 0; i < m_tempRemoved.Count; i++) - { - ZNetView zNetView = m_tempRemoved[i]; - ZDO zDO = zNetView.GetZDO(); - zNetView.ResetZDO(); - UnityEngine.Object.Destroy(zNetView.gameObject); - if (!zDO.m_persistent && zDO.IsOwner()) - { - ZDOMan.instance.DestroyZDO(zDO); - } - m_instances.Remove(zDO); - } - } - - public ZNetView FindInstance(ZDO zdo) - { - if (m_instances.TryGetValue(zdo, out var value)) - { - return value; - } - return null; - } - - public bool HaveInstance(ZDO zdo) - { - return m_instances.ContainsKey(zdo); - } - - public GameObject FindInstance(ZDOID id) - { - ZDO zDO = ZDOMan.instance.GetZDO(id); - if (zDO != null) - { - ZNetView zNetView = FindInstance(zDO); - if ((bool)zNetView) - { - return zNetView.gameObject; - } - } - return null; - } - - private void Update() - { - float deltaTime = Time.deltaTime; - m_createDestroyTimer += deltaTime; - if (m_createDestroyTimer >= 1f / 30f) - { - m_createDestroyTimer = 0f; - CreateDestroyObjects(); - } - } - - private void CreateDestroyObjects() - { - Vector2i zone = ZoneSystem.instance.GetZone(ZNet.instance.GetReferencePosition()); - m_tempCurrentObjects.Clear(); - m_tempCurrentDistantObjects.Clear(); - ZDOMan.instance.FindSectorObjects(zone, ZoneSystem.instance.m_activeArea, ZoneSystem.instance.m_activeDistantArea, m_tempCurrentObjects, m_tempCurrentDistantObjects); - CreateObjects(m_tempCurrentObjects, m_tempCurrentDistantObjects); - RemoveObjects(m_tempCurrentObjects, m_tempCurrentDistantObjects); - } - - public bool InActiveArea(Vector2i zone, Vector3 refPoint) - { - Vector2i zone2 = ZoneSystem.instance.GetZone(refPoint); - return InActiveArea(zone, zone2); - } - - public bool InActiveArea(Vector2i zone, Vector2i refCenterZone) - { - int num = ZoneSystem.instance.m_activeArea - 1; - if (zone.x >= refCenterZone.x - num && zone.x <= refCenterZone.x + num && zone.y <= refCenterZone.y + num) - { - return zone.y >= refCenterZone.y - num; - } - return false; - } - - public bool OutsideActiveArea(Vector3 point) - { - return OutsideActiveArea(point, ZNet.instance.GetReferencePosition()); - } - - public bool OutsideActiveArea(Vector3 point, Vector3 refPoint) - { - Vector2i zone = ZoneSystem.instance.GetZone(refPoint); - Vector2i zone2 = ZoneSystem.instance.GetZone(point); - if (zone2.x > zone.x - ZoneSystem.instance.m_activeArea && zone2.x < zone.x + ZoneSystem.instance.m_activeArea && zone2.y < zone.y + ZoneSystem.instance.m_activeArea) - { - return zone2.y <= zone.y - ZoneSystem.instance.m_activeArea; - } - return true; - } - - public bool HaveInstanceInSector(Vector2i sector) - { - foreach (KeyValuePair<ZDO, ZNetView> instance in m_instances) - { - if ((bool)instance.Value && !instance.Value.m_distant && ZoneSystem.instance.GetZone(instance.Value.transform.position) == sector) - { - return true; - } - } - return false; - } - - public int NrOfInstances() - { - return m_instances.Count; - } - - public void SpawnObject(Vector3 pos, Quaternion rot, GameObject prefab) - { - int prefabHash = GetPrefabHash(prefab); - ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "SpawnObject", pos, rot, prefabHash); - } - - private void RPC_SpawnObject(long spawner, Vector3 pos, Quaternion rot, int prefabHash) - { - GameObject prefab = GetPrefab(prefabHash); - if (prefab == null) - { - ZLog.Log("Missing prefab " + prefabHash); - } - else - { - UnityEngine.Object.Instantiate(prefab, pos, rot); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZNetView.cs b/Valheim_v202102/Valheim/assembly_valheim/ZNetView.cs deleted file mode 100644 index c5879ae..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZNetView.cs +++ /dev/null @@ -1,226 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; -using UnityEngine; - -public class ZNetView : MonoBehaviour -{ - public static long Everybody; - - public bool m_persistent; - - public bool m_distant; - - public ZDO.ObjectType m_type; - - public bool m_syncInitialScale; - - private ZDO m_zdo; - - private Rigidbody m_body; - - private Dictionary<int, RoutedMethodBase> m_functions = new Dictionary<int, RoutedMethodBase>(); - - private bool m_ghost; - - public static ZDO m_initZDO; - - public static bool m_forceDisableInit; - - private static bool m_ghostInit; - - private void Awake() - { - if (m_forceDisableInit) - { - UnityEngine.Object.Destroy(this); - return; - } - m_body = GetComponent<Rigidbody>(); - if (m_initZDO != null) - { - m_zdo = m_initZDO; - if (m_zdo.m_type != m_type && m_zdo.IsOwner()) - { - m_zdo.SetType(m_type); - } - if (m_zdo.m_distant != m_distant && m_zdo.IsOwner()) - { - m_zdo.SetDistant(m_distant); - } - if (m_syncInitialScale) - { - Vector3 vec = m_zdo.GetVec3("scale", base.transform.localScale); - base.transform.localScale = vec; - } - if ((bool)m_body) - { - m_body.Sleep(); - } - } - else - { - string prefabName = GetPrefabName(); - m_zdo = ZDOMan.instance.CreateNewZDO(base.transform.position); - m_zdo.m_persistent = m_persistent; - m_zdo.m_type = m_type; - m_zdo.m_distant = m_distant; - m_zdo.SetPrefab(prefabName.GetStableHashCode()); - m_zdo.SetRotation(base.transform.rotation); - if (m_syncInitialScale) - { - m_zdo.Set("scale", base.transform.localScale); - } - if (m_ghostInit) - { - m_ghost = true; - return; - } - } - ZNetScene.instance.AddInstance(m_zdo, this); - } - - public void SetLocalScale(Vector3 scale) - { - base.transform.localScale = scale; - if (m_zdo != null && m_syncInitialScale && IsOwner()) - { - m_zdo.Set("scale", base.transform.localScale); - } - } - - private void OnDestroy() - { - _ = (bool)ZNetScene.instance; - } - - public void SetPersistent(bool persistent) - { - m_zdo.m_persistent = persistent; - } - - public string GetPrefabName() - { - return GetPrefabName(base.gameObject); - } - - public static string GetPrefabName(GameObject gameObject) - { - string text = gameObject.name; - char[] anyOf = new char[2] { '(', ' ' }; - int num = text.IndexOfAny(anyOf); - if (num != -1) - { - return text.Remove(num); - } - return text; - } - - public void Destroy() - { - ZNetScene.instance.Destroy(base.gameObject); - } - - public bool IsOwner() - { - return m_zdo.IsOwner(); - } - - public bool HasOwner() - { - return m_zdo.HasOwner(); - } - - public void ClaimOwnership() - { - if (!IsOwner()) - { - m_zdo.SetOwner(ZDOMan.instance.GetMyID()); - } - } - - public ZDO GetZDO() - { - return m_zdo; - } - - public bool IsValid() - { - if (m_zdo != null) - { - return m_zdo.IsValid(); - } - return false; - } - - public void ResetZDO() - { - m_zdo = null; - } - - public void Register(string name, Action<long> f) - { - m_functions.Add(name.GetStableHashCode(), new RoutedMethod(f)); - } - - public void Register<T>(string name, Action<long, T> f) - { - m_functions.Add(name.GetStableHashCode(), new RoutedMethod<T>(f)); - } - - public void Register<T, U>(string name, Action<long, T, U> f) - { - m_functions.Add(name.GetStableHashCode(), new RoutedMethod<T, U>(f)); - } - - public void Register<T, U, V>(string name, Action<long, T, U, V> f) - { - m_functions.Add(name.GetStableHashCode(), new RoutedMethod<T, U, V>(f)); - } - - public void Unregister(string name) - { - int stableHashCode = name.GetStableHashCode(); - m_functions.Remove(stableHashCode); - } - - public void HandleRoutedRPC(ZRoutedRpc.RoutedRPCData rpcData) - { - if (m_functions.TryGetValue(rpcData.m_methodHash, out var value)) - { - value.Invoke(rpcData.m_senderPeerID, rpcData.m_parameters); - } - else - { - ZLog.LogWarning("Failed to find rpc method " + rpcData.m_methodHash); - } - } - - public void InvokeRPC(long targetID, string method, params object[] parameters) - { - ZRoutedRpc.instance.InvokeRoutedRPC(targetID, m_zdo.m_uid, method, parameters); - } - - public void InvokeRPC(string method, params object[] parameters) - { - ZRoutedRpc.instance.InvokeRoutedRPC(m_zdo.m_owner, m_zdo.m_uid, method, parameters); - } - - public static object[] Deserialize(long callerID, ParameterInfo[] paramInfo, ZPackage pkg) - { - List<object> parameters = new List<object>(); - parameters.Add(callerID); - ZRpc.Deserialize(paramInfo, pkg, ref parameters); - return parameters.ToArray(); - } - - public static void StartGhostInit() - { - m_ghostInit = true; - } - - public static void FinishGhostInit() - { - m_ghostInit = false; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZNtp.cs b/Valheim_v202102/Valheim/assembly_valheim/ZNtp.cs deleted file mode 100644 index f04cb95..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZNtp.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System; -using System.Net; -using System.Net.Sockets; -using System.Threading; - -public class ZNtp : IDisposable -{ - private static ZNtp m_instance; - - private DateTime m_ntpTime; - - private bool m_status; - - private bool m_stop; - - private Thread m_ntpThread; - - private Mutex m_lock = new Mutex(); - - public static ZNtp instance => m_instance; - - public ZNtp() - { - m_instance = this; - m_ntpTime = DateTime.UtcNow; - m_ntpThread = new Thread(NtpThread); - m_ntpThread.Start(); - } - - public void Dispose() - { - if (m_ntpThread != null) - { - ZLog.Log("Stoping ntp thread"); - m_lock.WaitOne(); - m_stop = true; - m_ntpThread.Abort(); - m_lock.ReleaseMutex(); - m_ntpThread = null; - } - if (m_lock != null) - { - m_lock.Close(); - m_lock = null; - } - } - - public bool GetStatus() - { - return m_status; - } - - public void Update(float dt) - { - m_lock.WaitOne(); - m_ntpTime = m_ntpTime.AddSeconds(dt); - m_lock.ReleaseMutex(); - } - - private void NtpThread() - { - while (!m_stop) - { - if (GetNetworkTime("pool.ntp.org", out var time)) - { - m_status = true; - m_lock.WaitOne(); - m_ntpTime = time; - m_lock.ReleaseMutex(); - } - else - { - m_status = false; - } - Thread.Sleep(60000); - } - } - - public DateTime GetTime() - { - return m_ntpTime; - } - - private bool GetNetworkTime(string ntpServer, out DateTime time) - { - byte[] array = new byte[48]; - array[0] = 27; - IPAddress[] addressList; - try - { - addressList = Dns.GetHostEntry(ntpServer).AddressList; - if (addressList.Length == 0) - { - ZLog.Log("Dns lookup failed"); - time = DateTime.UtcNow; - return false; - } - } - catch - { - ZLog.Log("Failed ntp dns lookup"); - time = DateTime.UtcNow; - return false; - } - IPEndPoint remoteEP = new IPEndPoint(addressList[0], 123); - Socket socket = null; - try - { - socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp); - socket.ReceiveTimeout = 3000; - socket.SendTimeout = 3000; - socket.Connect(remoteEP); - if (!socket.Connected) - { - ZLog.Log("Failed to connect to ntp"); - time = DateTime.UtcNow; - socket.Close(); - return false; - } - socket.Send(array); - socket.Receive(array); - socket.Shutdown(SocketShutdown.Both); - socket.Close(); - } - catch - { - socket?.Close(); - time = DateTime.UtcNow; - return false; - } - ulong num = ((ulong)array[40] << 24) | ((ulong)array[41] << 16) | ((ulong)array[42] << 8) | array[43]; - ulong num2 = ((ulong)array[44] << 24) | ((ulong)array[45] << 16) | ((ulong)array[46] << 8) | array[47]; - ulong num3 = num * 1000 + num2 * 1000 / 4294967296uL; - time = new DateTime(1900, 1, 1).AddMilliseconds((long)num3); - return true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZPackage.cs b/Valheim_v202102/Valheim/assembly_valheim/ZPackage.cs deleted file mode 100644 index 2151732..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZPackage.cs +++ /dev/null @@ -1,293 +0,0 @@ -using System; -using System.IO; -using System.Security.Cryptography; -using UnityEngine; - -public class ZPackage -{ - private MemoryStream m_stream = new MemoryStream(); - - private BinaryWriter m_writer; - - private BinaryReader m_reader; - - public ZPackage() - { - m_writer = new BinaryWriter(m_stream); - m_reader = new BinaryReader(m_stream); - } - - public ZPackage(string base64String) - { - m_writer = new BinaryWriter(m_stream); - m_reader = new BinaryReader(m_stream); - if (!string.IsNullOrEmpty(base64String)) - { - byte[] array = Convert.FromBase64String(base64String); - m_stream.Write(array, 0, array.Length); - m_stream.Position = 0L; - } - } - - public ZPackage(byte[] data) - { - m_writer = new BinaryWriter(m_stream); - m_reader = new BinaryReader(m_stream); - m_stream.Write(data, 0, data.Length); - m_stream.Position = 0L; - } - - public ZPackage(byte[] data, int dataSize) - { - m_writer = new BinaryWriter(m_stream); - m_reader = new BinaryReader(m_stream); - m_stream.Write(data, 0, dataSize); - m_stream.Position = 0L; - } - - public void Load(byte[] data) - { - Clear(); - m_stream.Write(data, 0, data.Length); - m_stream.Position = 0L; - } - - public void Write(ZPackage pkg) - { - m_writer.Write(pkg.Size()); - m_writer.Write(pkg.GetArray()); - } - - public void Write(byte[] array) - { - m_writer.Write(array.Length); - m_writer.Write(array); - } - - public void Write(byte data) - { - m_writer.Write(data); - } - - public void Write(sbyte data) - { - m_writer.Write(data); - } - - public void Write(char data) - { - m_writer.Write(data); - } - - public void Write(bool data) - { - m_writer.Write(data); - } - - public void Write(int data) - { - m_writer.Write(data); - } - - public void Write(uint data) - { - m_writer.Write(data); - } - - public void Write(ulong data) - { - m_writer.Write(data); - } - - public void Write(long data) - { - m_writer.Write(data); - } - - public void Write(float data) - { - m_writer.Write(data); - } - - public void Write(double data) - { - m_writer.Write(data); - } - - public void Write(string data) - { - m_writer.Write(data); - } - - public void Write(ZDOID id) - { - m_writer.Write(id.userID); - m_writer.Write(id.id); - } - - public void Write(Vector3 v3) - { - m_writer.Write(v3.x); - m_writer.Write(v3.y); - m_writer.Write(v3.z); - } - - public void Write(Vector2i v2) - { - m_writer.Write(v2.x); - m_writer.Write(v2.y); - } - - public void Write(Quaternion q) - { - m_writer.Write(q.x); - m_writer.Write(q.y); - m_writer.Write(q.z); - m_writer.Write(q.w); - } - - public ZDOID ReadZDOID() - { - return new ZDOID(m_reader.ReadInt64(), m_reader.ReadUInt32()); - } - - public bool ReadBool() - { - return m_reader.ReadBoolean(); - } - - public char ReadChar() - { - return m_reader.ReadChar(); - } - - public byte ReadByte() - { - return m_reader.ReadByte(); - } - - public sbyte ReadSByte() - { - return m_reader.ReadSByte(); - } - - public int ReadInt() - { - return m_reader.ReadInt32(); - } - - public uint ReadUInt() - { - return m_reader.ReadUInt32(); - } - - public long ReadLong() - { - return m_reader.ReadInt64(); - } - - public ulong ReadULong() - { - return m_reader.ReadUInt64(); - } - - public float ReadSingle() - { - return m_reader.ReadSingle(); - } - - public double ReadDouble() - { - return m_reader.ReadDouble(); - } - - public string ReadString() - { - return m_reader.ReadString(); - } - - public Vector3 ReadVector3() - { - Vector3 result = default(Vector3); - result.x = m_reader.ReadSingle(); - result.y = m_reader.ReadSingle(); - result.z = m_reader.ReadSingle(); - return result; - } - - public Vector2i ReadVector2i() - { - Vector2i result = default(Vector2i); - result.x = m_reader.ReadInt32(); - result.y = m_reader.ReadInt32(); - return result; - } - - public Quaternion ReadQuaternion() - { - Quaternion result = default(Quaternion); - result.x = m_reader.ReadSingle(); - result.y = m_reader.ReadSingle(); - result.z = m_reader.ReadSingle(); - result.w = m_reader.ReadSingle(); - return result; - } - - public ZPackage ReadPackage() - { - int count = m_reader.ReadInt32(); - return new ZPackage(m_reader.ReadBytes(count)); - } - - public void ReadPackage(ref ZPackage pkg) - { - int count = m_reader.ReadInt32(); - byte[] array = m_reader.ReadBytes(count); - pkg.Clear(); - pkg.m_stream.Write(array, 0, array.Length); - pkg.m_stream.Position = 0L; - } - - public byte[] ReadByteArray() - { - int count = m_reader.ReadInt32(); - return m_reader.ReadBytes(count); - } - - public string GetBase64() - { - return Convert.ToBase64String(GetArray()); - } - - public byte[] GetArray() - { - return m_stream.ToArray(); - } - - public void SetPos(int pos) - { - m_stream.Position = pos; - } - - public int GetPos() - { - return (int)m_stream.Position; - } - - public int Size() - { - return (int)m_stream.Length; - } - - public void Clear() - { - m_stream.SetLength(0L); - m_stream.Position = 0L; - } - - public byte[] GenerateHash() - { - byte[] buffer = m_stream.ToArray(); - return SHA512.Create().ComputeHash(buffer); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZRoutedRpc.cs b/Valheim_v202102/Valheim/assembly_valheim/ZRoutedRpc.cs deleted file mode 100644 index 8a9536b..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZRoutedRpc.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System; -using System.Collections.Generic; - -public class ZRoutedRpc -{ - public class RoutedRPCData - { - public long m_msgID; - - public long m_senderPeerID; - - public long m_targetPeerID; - - public ZDOID m_targetZDO; - - public int m_methodHash; - - public ZPackage m_parameters = new ZPackage(); - - public void Serialize(ZPackage pkg) - { - pkg.Write(m_msgID); - pkg.Write(m_senderPeerID); - pkg.Write(m_targetPeerID); - pkg.Write(m_targetZDO); - pkg.Write(m_methodHash); - pkg.Write(m_parameters); - } - - public void Deserialize(ZPackage pkg) - { - m_msgID = pkg.ReadLong(); - m_senderPeerID = pkg.ReadLong(); - m_targetPeerID = pkg.ReadLong(); - m_targetZDO = pkg.ReadZDOID(); - m_methodHash = pkg.ReadInt(); - m_parameters = pkg.ReadPackage(); - } - } - - public static long Everybody; - - public Action<long> m_onNewPeer; - - private int m_rpcMsgID = 1; - - private bool m_server; - - private long m_id; - - private List<ZNetPeer> m_peers = new List<ZNetPeer>(); - - private Dictionary<int, RoutedMethodBase> m_functions = new Dictionary<int, RoutedMethodBase>(); - - private static ZRoutedRpc m_instance; - - public static ZRoutedRpc instance => m_instance; - - public ZRoutedRpc(bool server) - { - m_instance = this; - m_server = server; - } - - public void SetUID(long uid) - { - m_id = uid; - } - - public void AddPeer(ZNetPeer peer) - { - m_peers.Add(peer); - peer.m_rpc.Register<ZPackage>("RoutedRPC", RPC_RoutedRPC); - if (m_onNewPeer != null) - { - m_onNewPeer(peer.m_uid); - } - } - - public void RemovePeer(ZNetPeer peer) - { - m_peers.Remove(peer); - } - - private ZNetPeer GetPeer(long uid) - { - foreach (ZNetPeer peer in m_peers) - { - if (peer.m_uid == uid) - { - return peer; - } - } - return null; - } - - public void InvokeRoutedRPC(long targetPeerID, string methodName, params object[] parameters) - { - InvokeRoutedRPC(targetPeerID, ZDOID.None, methodName, parameters); - } - - public void InvokeRoutedRPC(string methodName, params object[] parameters) - { - InvokeRoutedRPC(GetServerPeerID(), methodName, parameters); - } - - private long GetServerPeerID() - { - if (m_server) - { - return m_id; - } - if (m_peers.Count > 0) - { - return m_peers[0].m_uid; - } - return 0L; - } - - public void InvokeRoutedRPC(long targetPeerID, ZDOID targetZDO, string methodName, params object[] parameters) - { - RoutedRPCData routedRPCData = new RoutedRPCData(); - routedRPCData.m_msgID = m_id + m_rpcMsgID++; - routedRPCData.m_senderPeerID = m_id; - routedRPCData.m_targetPeerID = targetPeerID; - routedRPCData.m_targetZDO = targetZDO; - routedRPCData.m_methodHash = methodName.GetStableHashCode(); - ZRpc.Serialize(parameters, ref routedRPCData.m_parameters); - routedRPCData.m_parameters.SetPos(0); - if (targetPeerID == m_id || targetPeerID == 0L) - { - HandleRoutedRPC(routedRPCData); - } - if (targetPeerID != m_id) - { - RouteRPC(routedRPCData); - } - } - - private void RouteRPC(RoutedRPCData rpcData) - { - ZPackage zPackage = new ZPackage(); - rpcData.Serialize(zPackage); - if (m_server) - { - if (rpcData.m_targetPeerID != 0L) - { - ZNetPeer peer = GetPeer(rpcData.m_targetPeerID); - if (peer != null && peer.IsReady()) - { - peer.m_rpc.Invoke("RoutedRPC", zPackage); - } - return; - } - { - foreach (ZNetPeer peer2 in m_peers) - { - if (rpcData.m_senderPeerID != peer2.m_uid && peer2.IsReady()) - { - peer2.m_rpc.Invoke("RoutedRPC", zPackage); - } - } - return; - } - } - foreach (ZNetPeer peer3 in m_peers) - { - if (peer3.IsReady()) - { - peer3.m_rpc.Invoke("RoutedRPC", zPackage); - } - } - } - - private void RPC_RoutedRPC(ZRpc rpc, ZPackage pkg) - { - RoutedRPCData routedRPCData = new RoutedRPCData(); - routedRPCData.Deserialize(pkg); - if (routedRPCData.m_targetPeerID == m_id || routedRPCData.m_targetPeerID == 0L) - { - HandleRoutedRPC(routedRPCData); - } - if (m_server && routedRPCData.m_targetPeerID != m_id) - { - RouteRPC(routedRPCData); - } - } - - private void HandleRoutedRPC(RoutedRPCData data) - { - if (data.m_targetZDO.IsNone()) - { - if (m_functions.TryGetValue(data.m_methodHash, out var value)) - { - value.Invoke(data.m_senderPeerID, data.m_parameters); - } - return; - } - ZDO zDO = ZDOMan.instance.GetZDO(data.m_targetZDO); - if (zDO != null) - { - ZNetView zNetView = ZNetScene.instance.FindInstance(zDO); - if (zNetView != null) - { - zNetView.HandleRoutedRPC(data); - } - } - } - - public void Register(string name, Action<long> f) - { - m_functions.Add(name.GetStableHashCode(), new RoutedMethod(f)); - } - - public void Register<T>(string name, Action<long, T> f) - { - m_functions.Add(name.GetStableHashCode(), new RoutedMethod<T>(f)); - } - - public void Register<T, U>(string name, Action<long, T, U> f) - { - m_functions.Add(name.GetStableHashCode(), new RoutedMethod<T, U>(f)); - } - - public void Register<T, U, V>(string name, Action<long, T, U, V> f) - { - m_functions.Add(name.GetStableHashCode(), new RoutedMethod<T, U, V>(f)); - } - - public void Register<T, U, V, B>(string name, RoutedMethod<T, U, V, B>.Method f) - { - m_functions.Add(name.GetStableHashCode(), new RoutedMethod<T, U, V, B>(f)); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZRpc.cs b/Valheim_v202102/Valheim/assembly_valheim/ZRpc.cs deleted file mode 100644 index 319f033..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZRpc.cs +++ /dev/null @@ -1,405 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; -using UnityEngine; - -public class ZRpc : IDisposable -{ - private interface RpcMethodBase - { - void Invoke(ZRpc rpc, ZPackage pkg); - } - - public class RpcMethod : RpcMethodBase - { - public delegate void Method(ZRpc RPC); - - private Method m_action; - - public RpcMethod(Method action) - { - m_action = action; - } - - public void Invoke(ZRpc rpc, ZPackage pkg) - { - m_action(rpc); - } - } - - private class RpcMethod<T> : RpcMethodBase - { - private Action<ZRpc, T> m_action; - - public RpcMethod(Action<ZRpc, T> action) - { - m_action = action; - } - - public void Invoke(ZRpc rpc, ZPackage pkg) - { - m_action.DynamicInvoke(Deserialize(rpc, m_action.Method.GetParameters(), pkg)); - } - } - - private class RpcMethod<T, U> : RpcMethodBase - { - private Action<ZRpc, T, U> m_action; - - public RpcMethod(Action<ZRpc, T, U> action) - { - m_action = action; - } - - public void Invoke(ZRpc rpc, ZPackage pkg) - { - m_action.DynamicInvoke(Deserialize(rpc, m_action.Method.GetParameters(), pkg)); - } - } - - private class RpcMethod<T, U, V> : RpcMethodBase - { - private Action<ZRpc, T, U, V> m_action; - - public RpcMethod(Action<ZRpc, T, U, V> action) - { - m_action = action; - } - - public void Invoke(ZRpc rpc, ZPackage pkg) - { - m_action.DynamicInvoke(Deserialize(rpc, m_action.Method.GetParameters(), pkg)); - } - } - - public class RpcMethod<T, U, V, B> : RpcMethodBase - { - public delegate void Method(ZRpc RPC, T p0, U p1, V p2, B p3); - - private Method m_action; - - public RpcMethod(Method action) - { - m_action = action; - } - - public void Invoke(ZRpc rpc, ZPackage pkg) - { - m_action.DynamicInvoke(Deserialize(rpc, m_action.Method.GetParameters(), pkg)); - } - } - - private ISocket m_socket; - - private ZPackage m_pkg = new ZPackage(); - - private Dictionary<int, RpcMethodBase> m_functions = new Dictionary<int, RpcMethodBase>(); - - private float m_pingTimer; - - private float m_timeSinceLastData; - - private static float m_pingInterval = 4f; - - private static float m_timeout = 120f; - - private static bool m_DEBUG = false; - - public ZRpc(ISocket socket) - { - m_socket = socket; - } - - public void Dispose() - { - m_socket.Dispose(); - } - - public ISocket GetSocket() - { - return m_socket; - } - - public bool Update(float dt) - { - if (!m_socket.IsConnected()) - { - return false; - } - for (ZPackage zPackage = m_socket.Recv(); zPackage != null; zPackage = m_socket.Recv()) - { - try - { - HandlePackage(zPackage); - } - catch (Exception ex) - { - ZLog.Log("Exception in ZRpc::HandlePackage: " + ex); - } - } - UpdatePing(dt); - return true; - } - - private void UpdatePing(float dt) - { - m_pingTimer += dt; - if (m_pingTimer > m_pingInterval) - { - m_pingTimer = 0f; - if (!m_socket.IsSending()) - { - m_pkg.Clear(); - m_pkg.Write(0); - m_socket.Send(m_pkg); - } - } - if (m_socket.GotNewData()) - { - m_timeSinceLastData = 0f; - } - m_timeSinceLastData += dt; - if (m_timeSinceLastData > m_timeout) - { - ZLog.LogWarning("ZRpc timeout detected"); - m_socket.Close(); - } - } - - public float GetTimeSinceLastData() - { - return m_timeSinceLastData; - } - - public bool IsConnected() - { - return m_socket.IsConnected(); - } - - private void HandlePackage(ZPackage package) - { - int num = package.ReadInt(); - if (num == 0) - { - return; - } - RpcMethodBase value2; - if (m_DEBUG) - { - package.ReadString(); - if (m_functions.TryGetValue(num, out var value)) - { - value.Invoke(this, package); - } - } - else if (m_functions.TryGetValue(num, out value2)) - { - value2.Invoke(this, package); - } - } - - public void Register(string name, RpcMethod.Method f) - { - int stableHashCode = name.GetStableHashCode(); - m_functions.Remove(stableHashCode); - m_functions.Add(stableHashCode, new RpcMethod(f)); - } - - public void Register<T>(string name, Action<ZRpc, T> f) - { - int stableHashCode = name.GetStableHashCode(); - m_functions.Remove(stableHashCode); - m_functions.Add(stableHashCode, new RpcMethod<T>(f)); - } - - public void Register<T, U>(string name, Action<ZRpc, T, U> f) - { - int stableHashCode = name.GetStableHashCode(); - m_functions.Remove(stableHashCode); - m_functions.Add(stableHashCode, new RpcMethod<T, U>(f)); - } - - public void Register<T, U, V>(string name, Action<ZRpc, T, U, V> f) - { - int stableHashCode = name.GetStableHashCode(); - m_functions.Remove(stableHashCode); - m_functions.Add(stableHashCode, new RpcMethod<T, U, V>(f)); - } - - public void Register<T, U, V, W>(string name, RpcMethod<T, U, V, W>.Method f) - { - int stableHashCode = name.GetStableHashCode(); - m_functions.Remove(stableHashCode); - m_functions.Add(stableHashCode, new RpcMethod<T, U, V, W>(f)); - } - - public void Unregister(string name) - { - int stableHashCode = name.GetStableHashCode(); - m_functions.Remove(stableHashCode); - } - - public void Invoke(string method, params object[] parameters) - { - if (IsConnected()) - { - m_pingTimer = 0f; - m_pkg.Clear(); - int stableHashCode = method.GetStableHashCode(); - m_pkg.Write(stableHashCode); - if (m_DEBUG) - { - m_pkg.Write(method); - } - Serialize(parameters, ref m_pkg); - m_socket.Send(m_pkg); - } - } - - public static void Serialize(object[] parameters, ref ZPackage pkg) - { - foreach (object obj in parameters) - { - if (obj is int) - { - pkg.Write((int)obj); - } - else if (obj is uint) - { - pkg.Write((uint)obj); - } - else if (obj is long) - { - pkg.Write((long)obj); - } - else if (obj is float) - { - pkg.Write((float)obj); - } - else if (obj is double) - { - pkg.Write((double)obj); - } - else if (obj is bool) - { - pkg.Write((bool)obj); - } - else if (obj is string) - { - pkg.Write((string)obj); - } - else if (obj is ZPackage) - { - pkg.Write((ZPackage)obj); - } - else if (obj is List<string>) - { - List<string> list = obj as List<string>; - pkg.Write(list.Count); - foreach (string item in list) - { - pkg.Write(item); - } - } - else if (obj is Vector3) - { - pkg.Write(((Vector3)obj).x); - pkg.Write(((Vector3)obj).y); - pkg.Write(((Vector3)obj).z); - } - else if (obj is Quaternion) - { - pkg.Write(((Quaternion)obj).x); - pkg.Write(((Quaternion)obj).y); - pkg.Write(((Quaternion)obj).z); - pkg.Write(((Quaternion)obj).w); - } - else if (obj is ZDOID) - { - pkg.Write((ZDOID)obj); - } - else if (obj is HitData) - { - (obj as HitData).Serialize(ref pkg); - } - } - } - - public static object[] Deserialize(ZRpc rpc, ParameterInfo[] paramInfo, ZPackage pkg) - { - List<object> parameters = new List<object>(); - parameters.Add(rpc); - Deserialize(paramInfo, pkg, ref parameters); - return parameters.ToArray(); - } - - public static void Deserialize(ParameterInfo[] paramInfo, ZPackage pkg, ref List<object> parameters) - { - for (int i = 1; i < paramInfo.Length; i++) - { - ParameterInfo parameterInfo = paramInfo[i]; - if (parameterInfo.ParameterType == typeof(int)) - { - parameters.Add(pkg.ReadInt()); - } - else if (parameterInfo.ParameterType == typeof(uint)) - { - parameters.Add(pkg.ReadUInt()); - } - else if (parameterInfo.ParameterType == typeof(long)) - { - parameters.Add(pkg.ReadLong()); - } - else if (parameterInfo.ParameterType == typeof(float)) - { - parameters.Add(pkg.ReadSingle()); - } - else if (parameterInfo.ParameterType == typeof(double)) - { - parameters.Add(pkg.ReadDouble()); - } - else if (parameterInfo.ParameterType == typeof(bool)) - { - parameters.Add(pkg.ReadBool()); - } - else if (parameterInfo.ParameterType == typeof(string)) - { - parameters.Add(pkg.ReadString()); - } - else if (parameterInfo.ParameterType == typeof(ZPackage)) - { - parameters.Add(pkg.ReadPackage()); - } - else if (parameterInfo.ParameterType == typeof(List<string>)) - { - int num = pkg.ReadInt(); - List<string> list = new List<string>(num); - for (int j = 0; j < num; j++) - { - list.Add(pkg.ReadString()); - } - parameters.Add(list); - } - else if (parameterInfo.ParameterType == typeof(Vector3)) - { - Vector3 vector = new Vector3(pkg.ReadSingle(), pkg.ReadSingle(), pkg.ReadSingle()); - parameters.Add(vector); - } - else if (parameterInfo.ParameterType == typeof(Quaternion)) - { - Quaternion quaternion = new Quaternion(pkg.ReadSingle(), pkg.ReadSingle(), pkg.ReadSingle(), pkg.ReadSingle()); - parameters.Add(quaternion); - } - else if (parameterInfo.ParameterType == typeof(ZDOID)) - { - parameters.Add(pkg.ReadZDOID()); - } - else if (parameterInfo.ParameterType == typeof(HitData)) - { - HitData hitData = new HitData(); - hitData.Deserialize(ref pkg); - parameters.Add(hitData); - } - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZSFX.cs b/Valheim_v202102/Valheim/assembly_valheim/ZSFX.cs deleted file mode 100644 index 63294ab..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZSFX.cs +++ /dev/null @@ -1,219 +0,0 @@ -using UnityEngine; - -public class ZSFX : MonoBehaviour -{ - public bool m_playOnAwake = true; - - [Header("Clips")] - public AudioClip[] m_audioClips = new AudioClip[0]; - - [Header("Random")] - public float m_maxPitch = 1f; - - public float m_minPitch = 1f; - - public float m_maxVol = 1f; - - public float m_minVol = 1f; - - [Header("Fade")] - public float m_fadeInDuration; - - public float m_fadeOutDuration; - - public float m_fadeOutDelay; - - public bool m_fadeOutOnAwake; - - [Header("Pan")] - public bool m_randomPan; - - public float m_minPan = -1f; - - public float m_maxPan = 1f; - - [Header("Delay")] - public float m_maxDelay; - - public float m_minDelay; - - [Header("Reverb")] - public bool m_distanceReverb = true; - - public bool m_useCustomReverbDistance; - - public float m_customReverbDistance = 10f; - - private const float m_globalReverbDistance = 64f; - - private const float m_minReverbSpread = 45f; - - private const float m_maxReverbSpread = 120f; - - private float m_delay; - - private float m_time; - - private float m_fadeOutTimer = -1f; - - private float m_fadeInTimer = -1f; - - private float m_vol = 1f; - - private float m_baseSpread; - - private float m_updateReverbTimer; - - private AudioSource m_audioSource; - - public void Awake() - { - m_delay = Random.Range(m_minDelay, m_maxDelay); - m_audioSource = GetComponent<AudioSource>(); - m_baseSpread = m_audioSource.spread; - } - - private void OnDisable() - { - if (m_playOnAwake && m_audioSource.loop) - { - m_time = 0f; - m_delay = Random.Range(m_minDelay, m_maxDelay); - m_audioSource.Stop(); - } - } - - public void Update() - { - if (m_audioSource == null) - { - return; - } - m_time += Time.deltaTime; - if (m_delay >= 0f && m_time >= m_delay) - { - m_delay = -1f; - if (m_playOnAwake) - { - Play(); - } - } - if (!m_audioSource.isPlaying) - { - return; - } - if (m_distanceReverb && m_audioSource.loop) - { - m_updateReverbTimer += Time.deltaTime; - if (m_updateReverbTimer > 1f) - { - m_updateReverbTimer = 0f; - UpdateReverb(); - } - } - if (m_fadeOutOnAwake && m_time > m_fadeOutDelay) - { - m_fadeOutOnAwake = false; - FadeOut(); - } - if (m_fadeOutTimer >= 0f) - { - m_fadeOutTimer += Time.deltaTime; - if (m_fadeOutTimer >= m_fadeOutDuration) - { - m_audioSource.volume = 0f; - Stop(); - } - else - { - float num = Mathf.Clamp01(m_fadeOutTimer / m_fadeOutDuration); - m_audioSource.volume = (1f - num) * m_vol; - } - } - else if (m_fadeInTimer >= 0f) - { - m_fadeInTimer += Time.deltaTime; - float num2 = Mathf.Clamp01(m_fadeInTimer / m_fadeInDuration); - m_audioSource.volume = num2 * m_vol; - if (m_fadeInTimer > m_fadeInDuration) - { - m_fadeInTimer = -1f; - } - } - } - - public void FadeOut() - { - if (m_fadeOutTimer < 0f) - { - m_fadeOutTimer = 0f; - } - } - - public void Stop() - { - if (m_audioSource != null) - { - m_audioSource.Stop(); - } - } - - public bool IsPlaying() - { - if (m_audioSource == null) - { - return false; - } - return m_audioSource.isPlaying; - } - - private void UpdateReverb() - { - Camera mainCamera = Utils.GetMainCamera(); - if (m_distanceReverb && m_audioSource.spatialBlend != 0f && mainCamera != null) - { - float num = Vector3.Distance(mainCamera.transform.position, base.transform.position); - float num2 = (m_useCustomReverbDistance ? m_customReverbDistance : 64f); - float a = Mathf.Clamp01(num / num2); - float b = Mathf.Clamp01(m_audioSource.maxDistance / num2) * Mathf.Clamp01(num / m_audioSource.maxDistance); - float num3 = Mathf.Max(a, b); - m_audioSource.bypassReverbZones = false; - m_audioSource.reverbZoneMix = num3; - if (m_baseSpread < 120f) - { - float a2 = Mathf.Max(m_baseSpread, 45f); - m_audioSource.spread = Mathf.Lerp(a2, 120f, num3); - } - } - else - { - m_audioSource.bypassReverbZones = true; - } - } - - public void Play() - { - if (!(m_audioSource == null) && m_audioClips.Length != 0 && m_audioSource.gameObject.activeInHierarchy) - { - int num = Random.Range(0, m_audioClips.Length); - m_audioSource.clip = m_audioClips[num]; - m_audioSource.pitch = Random.Range(m_minPitch, m_maxPitch); - if (m_randomPan) - { - m_audioSource.panStereo = Random.Range(m_minPan, m_maxPan); - } - m_vol = Random.Range(m_minVol, m_maxVol); - if (m_fadeInDuration > 0f) - { - m_audioSource.volume = 0f; - m_fadeInTimer = 0f; - } - else - { - m_audioSource.volume = m_vol; - } - UpdateReverb(); - m_audioSource.Play(); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZSocket.cs b/Valheim_v202102/Valheim/assembly_valheim/ZSocket.cs deleted file mode 100644 index f2a2f35..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZSocket.cs +++ /dev/null @@ -1,449 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Net; -using System.Net.Sockets; -using System.Threading; - -public class ZSocket : IDisposable -{ - private Socket m_socket; - - private Mutex m_mutex = new Mutex(); - - private Mutex m_sendMutex = new Mutex(); - - private Queue<Socket> m_newConnections = new Queue<Socket>(); - - private static int m_maxRecvBuffer = 10485760; - - private int m_recvOffset; - - private byte[] m_recvBuffer; - - private byte[] m_recvSizeBuffer = new byte[4]; - - private Queue<ZPackage> m_pkgQueue = new Queue<ZPackage>(); - - private bool m_isSending; - - private Queue<byte[]> m_sendQueue = new Queue<byte[]>(); - - private IPEndPoint m_endpoint; - - private string m_originalHostName; - - private int m_listenPort; - - private int m_lastRecvPkgSize; - - private int m_totalSent; - - private int m_totalRecv; - - public ZSocket() - { - m_socket = CreateSocket(); - } - - public static Socket CreateSocket() - { - return new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) - { - NoDelay = true - }; - } - - public ZSocket(Socket socket, string originalHostName = null) - { - m_socket = socket; - m_originalHostName = originalHostName; - try - { - m_endpoint = m_socket.RemoteEndPoint as IPEndPoint; - } - catch - { - Close(); - return; - } - BeginReceive(); - } - - public void Dispose() - { - Close(); - m_mutex.Close(); - m_sendMutex.Close(); - m_recvBuffer = null; - } - - public void Close() - { - if (m_socket != null) - { - try - { - if (m_socket.Connected) - { - m_socket.Shutdown(SocketShutdown.Both); - } - } - catch (Exception) - { - } - m_socket.Close(); - } - m_socket = null; - m_endpoint = null; - } - - public static IPEndPoint GetEndPoint(string host, int port) - { - return new IPEndPoint(Dns.GetHostEntry(host).AddressList[0], port); - } - - public bool Connect(string host, int port) - { - ZLog.Log("Connecting to " + host + " : " + port); - IPEndPoint endPoint = GetEndPoint(host, port); - m_socket.BeginConnect(endPoint, null, null).AsyncWaitHandle.WaitOne(3000, exitContext: true); - if (!m_socket.Connected) - { - return false; - } - try - { - m_endpoint = m_socket.RemoteEndPoint as IPEndPoint; - } - catch - { - Close(); - return false; - } - BeginReceive(); - ZLog.Log(" connected"); - return true; - } - - public bool StartHost(int port) - { - if (m_listenPort != 0) - { - Close(); - } - if (!BindSocket(m_socket, IPAddress.Any, port, port + 10)) - { - ZLog.LogWarning("Failed to bind socket"); - return false; - } - m_socket.Listen(100); - m_socket.BeginAccept(AcceptCallback, m_socket); - return true; - } - - private bool BindSocket(Socket socket, IPAddress ipAddress, int startPort, int endPort) - { - for (int i = startPort; i <= endPort; i++) - { - try - { - IPEndPoint localEP = new IPEndPoint(ipAddress, i); - m_socket.Bind(localEP); - m_listenPort = i; - ZLog.Log("Bound socket port " + i); - return true; - } - catch - { - ZLog.Log("Failed to bind port:" + i); - } - } - return false; - } - - private void BeginReceive() - { - m_socket.BeginReceive(m_recvSizeBuffer, 0, m_recvSizeBuffer.Length, SocketFlags.None, PkgSizeReceived, m_socket); - } - - private void PkgSizeReceived(IAsyncResult res) - { - int num; - try - { - num = m_socket.EndReceive(res); - } - catch (Exception) - { - Disconnect(); - return; - } - m_totalRecv += num; - if (num != 4) - { - Disconnect(); - return; - } - int num2 = BitConverter.ToInt32(m_recvSizeBuffer, 0); - if (num2 == 0 || num2 > 10485760) - { - ZLog.LogError("Invalid pkg size " + num2); - return; - } - m_lastRecvPkgSize = num2; - m_recvOffset = 0; - m_lastRecvPkgSize = num2; - if (m_recvBuffer == null) - { - m_recvBuffer = new byte[m_maxRecvBuffer]; - } - m_socket.BeginReceive(m_recvBuffer, m_recvOffset, m_lastRecvPkgSize, SocketFlags.None, PkgReceived, m_socket); - } - - private void Disconnect() - { - if (m_socket != null) - { - try - { - m_socket.Disconnect(reuseSocket: true); - } - catch - { - } - } - } - - private void PkgReceived(IAsyncResult res) - { - int num; - try - { - num = m_socket.EndReceive(res); - } - catch (Exception) - { - Disconnect(); - return; - } - m_totalRecv += num; - m_recvOffset += num; - if (m_recvOffset < m_lastRecvPkgSize) - { - int size = m_lastRecvPkgSize - m_recvOffset; - if (m_recvBuffer == null) - { - m_recvBuffer = new byte[m_maxRecvBuffer]; - } - m_socket.BeginReceive(m_recvBuffer, m_recvOffset, size, SocketFlags.None, PkgReceived, m_socket); - } - else - { - ZPackage item = new ZPackage(m_recvBuffer, m_lastRecvPkgSize); - m_mutex.WaitOne(); - m_pkgQueue.Enqueue(item); - m_mutex.ReleaseMutex(); - BeginReceive(); - } - } - - private void AcceptCallback(IAsyncResult res) - { - Socket item; - try - { - item = m_socket.EndAccept(res); - } - catch - { - Disconnect(); - return; - } - m_mutex.WaitOne(); - m_newConnections.Enqueue(item); - m_mutex.ReleaseMutex(); - m_socket.BeginAccept(AcceptCallback, m_socket); - } - - public ZSocket Accept() - { - if (m_newConnections.Count == 0) - { - return null; - } - Socket socket = null; - m_mutex.WaitOne(); - if (m_newConnections.Count > 0) - { - socket = m_newConnections.Dequeue(); - } - m_mutex.ReleaseMutex(); - if (socket != null) - { - return new ZSocket(socket); - } - return null; - } - - public bool IsConnected() - { - if (m_socket != null) - { - return m_socket.Connected; - } - return false; - } - - public void Send(ZPackage pkg) - { - if (pkg.Size() == 0 || m_socket == null || !m_socket.Connected) - { - return; - } - byte[] array = pkg.GetArray(); - byte[] bytes = BitConverter.GetBytes(array.Length); - m_sendMutex.WaitOne(); - if (!m_isSending) - { - if (array.Length > 10485760) - { - ZLog.LogError("Too big data package: " + array.Length); - } - try - { - m_totalSent += bytes.Length; - m_socket.BeginSend(bytes, 0, bytes.Length, SocketFlags.None, PkgSent, null); - m_isSending = true; - m_sendQueue.Enqueue(array); - } - catch (Exception ex) - { - ZLog.Log("Handled exception in ZSocket:Send:" + ex); - Disconnect(); - } - } - else - { - m_sendQueue.Enqueue(bytes); - m_sendQueue.Enqueue(array); - } - m_sendMutex.ReleaseMutex(); - } - - private void PkgSent(IAsyncResult res) - { - m_sendMutex.WaitOne(); - if (m_sendQueue.Count > 0 && IsConnected()) - { - byte[] array = m_sendQueue.Dequeue(); - try - { - m_totalSent += array.Length; - m_socket.BeginSend(array, 0, array.Length, SocketFlags.None, PkgSent, null); - } - catch (Exception ex) - { - ZLog.Log("Handled exception in pkgsent:" + ex); - m_isSending = false; - Disconnect(); - } - } - else - { - m_isSending = false; - } - m_sendMutex.ReleaseMutex(); - } - - public ZPackage Recv() - { - if (m_socket == null) - { - return null; - } - if (m_pkgQueue.Count == 0) - { - return null; - } - ZPackage result = null; - m_mutex.WaitOne(); - if (m_pkgQueue.Count > 0) - { - result = m_pkgQueue.Dequeue(); - } - m_mutex.ReleaseMutex(); - return result; - } - - public string GetEndPointString() - { - if (m_endpoint != null) - { - return m_endpoint.ToString(); - } - return "None"; - } - - public string GetEndPointHost() - { - if (m_endpoint != null) - { - return m_endpoint.Address.ToString(); - } - return "None"; - } - - public IPEndPoint GetEndPoint() - { - return m_endpoint; - } - - public bool IsPeer(string host, int port) - { - if (!IsConnected()) - { - return false; - } - if (m_endpoint == null) - { - return false; - } - IPEndPoint endpoint = m_endpoint; - if (endpoint.Address.ToString() == host && endpoint.Port == port) - { - return true; - } - if (m_originalHostName != null && m_originalHostName == host && endpoint.Port == port) - { - return true; - } - return false; - } - - public bool IsHost() - { - return m_listenPort != 0; - } - - public int GetHostPort() - { - return m_listenPort; - } - - public bool IsSending() - { - if (!m_isSending) - { - return m_sendQueue.Count > 0; - } - return true; - } - - public void GetAndResetStats(out int totalSent, out int totalRecv) - { - totalSent = m_totalSent; - totalRecv = m_totalRecv; - m_totalSent = 0; - m_totalRecv = 0; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZSocket2.cs b/Valheim_v202102/Valheim/assembly_valheim/ZSocket2.cs deleted file mode 100644 index 887648d..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZSocket2.cs +++ /dev/null @@ -1,440 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Net; -using System.Net.Sockets; -using System.Threading; - -public class ZSocket2 : IDisposable, ISocket -{ - private TcpListener m_listner; - - private TcpClient m_socket; - - private Mutex m_mutex = new Mutex(); - - private Mutex m_sendMutex = new Mutex(); - - private static int m_maxRecvBuffer = 10485760; - - private int m_recvOffset; - - private byte[] m_recvBuffer; - - private int m_recvSizeOffset; - - private byte[] m_recvSizeBuffer = new byte[4]; - - private Queue<ZPackage> m_pkgQueue = new Queue<ZPackage>(); - - private bool m_isSending; - - private Queue<byte[]> m_sendQueue = new Queue<byte[]>(); - - private IPEndPoint m_endpoint; - - private string m_originalHostName; - - private int m_listenPort; - - private int m_lastRecvPkgSize; - - private int m_totalSent; - - private int m_totalRecv; - - private bool m_gotData; - - public ZSocket2() - { - } - - public static TcpClient CreateSocket() - { - TcpClient tcpClient = new TcpClient(AddressFamily.InterNetwork); - ConfigureSocket(tcpClient); - return tcpClient; - } - - private static void ConfigureSocket(TcpClient socket) - { - socket.NoDelay = true; - socket.SendBufferSize = 2048; - } - - public ZSocket2(TcpClient socket, string originalHostName = null) - { - m_socket = socket; - m_originalHostName = originalHostName; - try - { - m_endpoint = m_socket.Client.RemoteEndPoint as IPEndPoint; - } - catch - { - Close(); - return; - } - BeginReceive(); - } - - public void Dispose() - { - Close(); - m_mutex.Close(); - m_sendMutex.Close(); - m_recvBuffer = null; - } - - public void Close() - { - ZLog.Log("Closing socket " + GetEndPointString()); - if (m_listner != null) - { - m_listner.Stop(); - m_listner = null; - } - if (m_socket != null) - { - m_socket.Close(); - m_socket = null; - } - m_endpoint = null; - } - - public static IPEndPoint GetEndPoint(string host, int port) - { - return new IPEndPoint(Dns.GetHostEntry(host).AddressList[0], port); - } - - public bool StartHost(int port) - { - if (m_listner != null) - { - m_listner.Stop(); - m_listner = null; - } - if (!BindSocket(port, port + 10)) - { - ZLog.LogWarning("Failed to bind socket"); - return false; - } - return true; - } - - private bool BindSocket(int startPort, int endPort) - { - for (int i = startPort; i <= endPort; i++) - { - try - { - m_listner = new TcpListener(IPAddress.Any, i); - m_listner.Start(); - m_listenPort = i; - ZLog.Log("Bound socket port " + i); - return true; - } - catch - { - ZLog.Log("Failed to bind port:" + i); - m_listner = null; - } - } - return false; - } - - private void BeginReceive() - { - m_recvSizeOffset = 0; - m_socket.GetStream().BeginRead(m_recvSizeBuffer, 0, m_recvSizeBuffer.Length, PkgSizeReceived, m_socket); - } - - private void PkgSizeReceived(IAsyncResult res) - { - if (m_socket == null || !m_socket.Connected) - { - ZLog.LogWarning("PkgSizeReceived socket closed"); - Close(); - return; - } - int num; - try - { - num = m_socket.GetStream().EndRead(res); - } - catch (Exception ex) - { - ZLog.LogWarning("PkgSizeReceived exception " + ex.ToString()); - Close(); - return; - } - if (num == 0) - { - ZLog.LogWarning("PkgSizeReceived Got 0 bytes data,closing socket"); - Close(); - return; - } - m_gotData = true; - m_recvSizeOffset += num; - if (m_recvSizeOffset < m_recvSizeBuffer.Length) - { - int count = m_recvSizeBuffer.Length - m_recvOffset; - m_socket.GetStream().BeginRead(m_recvSizeBuffer, m_recvSizeOffset, count, PkgSizeReceived, m_socket); - return; - } - int num2 = BitConverter.ToInt32(m_recvSizeBuffer, 0); - if (num2 == 0 || num2 > 10485760) - { - ZLog.LogError("PkgSizeReceived Invalid pkg size " + num2); - return; - } - m_lastRecvPkgSize = num2; - m_recvOffset = 0; - m_lastRecvPkgSize = num2; - if (m_recvBuffer == null) - { - m_recvBuffer = new byte[m_maxRecvBuffer]; - } - m_socket.GetStream().BeginRead(m_recvBuffer, m_recvOffset, m_lastRecvPkgSize, PkgReceived, m_socket); - } - - private void PkgReceived(IAsyncResult res) - { - int num; - try - { - num = m_socket.GetStream().EndRead(res); - } - catch (Exception ex) - { - ZLog.Log("PkgReceived error " + ex.ToString()); - Close(); - return; - } - if (num == 0) - { - ZLog.LogWarning("PkgReceived: Got 0 bytes data,closing socket"); - Close(); - return; - } - m_gotData = true; - m_totalRecv += num; - m_recvOffset += num; - if (m_recvOffset < m_lastRecvPkgSize) - { - int count = m_lastRecvPkgSize - m_recvOffset; - if (m_recvBuffer == null) - { - m_recvBuffer = new byte[m_maxRecvBuffer]; - } - m_socket.GetStream().BeginRead(m_recvBuffer, m_recvOffset, count, PkgReceived, m_socket); - } - else - { - ZPackage item = new ZPackage(m_recvBuffer, m_lastRecvPkgSize); - m_mutex.WaitOne(); - m_pkgQueue.Enqueue(item); - m_mutex.ReleaseMutex(); - BeginReceive(); - } - } - - public ISocket Accept() - { - if (m_listner == null) - { - return null; - } - if (!m_listner.Pending()) - { - return null; - } - TcpClient socket = m_listner.AcceptTcpClient(); - ConfigureSocket(socket); - return new ZSocket2(socket); - } - - public bool IsConnected() - { - if (m_socket != null) - { - return m_socket.Connected; - } - return false; - } - - public void Send(ZPackage pkg) - { - if (pkg.Size() == 0 || m_socket == null || !m_socket.Connected) - { - return; - } - byte[] array = pkg.GetArray(); - byte[] bytes = BitConverter.GetBytes(array.Length); - byte[] array2 = new byte[array.Length + bytes.Length]; - bytes.CopyTo(array2, 0); - array.CopyTo(array2, 4); - m_sendMutex.WaitOne(); - if (!m_isSending) - { - if (array2.Length > 10485760) - { - ZLog.LogError("Too big data package: " + array2.Length); - } - try - { - m_totalSent += array2.Length; - m_socket.GetStream().BeginWrite(array2, 0, array2.Length, PkgSent, m_socket); - m_isSending = true; - } - catch (Exception ex) - { - ZLog.Log("Handled exception in ZSocket:Send:" + ex); - Close(); - } - } - else - { - m_sendQueue.Enqueue(array2); - } - m_sendMutex.ReleaseMutex(); - } - - private void PkgSent(IAsyncResult res) - { - try - { - m_socket.GetStream().EndWrite(res); - } - catch (Exception ex) - { - ZLog.Log("PkgSent error " + ex.ToString()); - Close(); - return; - } - m_sendMutex.WaitOne(); - if (m_sendQueue.Count > 0 && IsConnected()) - { - byte[] array = m_sendQueue.Dequeue(); - try - { - m_totalSent += array.Length; - m_socket.GetStream().BeginWrite(array, 0, array.Length, PkgSent, m_socket); - } - catch (Exception ex2) - { - ZLog.Log("Handled exception in pkgsent:" + ex2); - m_isSending = false; - Close(); - } - } - else - { - m_isSending = false; - } - m_sendMutex.ReleaseMutex(); - } - - public ZPackage Recv() - { - if (m_socket == null) - { - return null; - } - if (m_pkgQueue.Count == 0) - { - return null; - } - ZPackage result = null; - m_mutex.WaitOne(); - if (m_pkgQueue.Count > 0) - { - result = m_pkgQueue.Dequeue(); - } - m_mutex.ReleaseMutex(); - return result; - } - - public string GetEndPointString() - { - if (m_endpoint != null) - { - return m_endpoint.ToString(); - } - return "None"; - } - - public string GetHostName() - { - if (m_endpoint != null) - { - return m_endpoint.Address.ToString(); - } - return "None"; - } - - public IPEndPoint GetEndPoint() - { - return m_endpoint; - } - - public bool IsPeer(string host, int port) - { - if (!IsConnected()) - { - return false; - } - if (m_endpoint == null) - { - return false; - } - IPEndPoint endpoint = m_endpoint; - if (endpoint.Address.ToString() == host && endpoint.Port == port) - { - return true; - } - if (m_originalHostName != null && m_originalHostName == host && endpoint.Port == port) - { - return true; - } - return false; - } - - public bool IsHost() - { - return m_listenPort != 0; - } - - public int GetHostPort() - { - return m_listenPort; - } - - public bool IsSending() - { - if (!m_isSending) - { - return m_sendQueue.Count > 0; - } - return true; - } - - public void GetAndResetStats(out int totalSent, out int totalRecv) - { - totalSent = m_totalSent; - totalRecv = m_totalRecv; - m_totalSent = 0; - m_totalRecv = 0; - } - - public bool GotNewData() - { - bool gotData = m_gotData; - m_gotData = false; - return gotData; - } - - public bool Flush() - { - return true; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZSteamMatchmaking.cs b/Valheim_v202102/Valheim/assembly_valheim/ZSteamMatchmaking.cs deleted file mode 100644 index 45811a2..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZSteamMatchmaking.cs +++ /dev/null @@ -1,427 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Net; -using Steamworks; - -public class ZSteamMatchmaking -{ - private static ZSteamMatchmaking m_instance; - - private List<MasterClient.ServerData> m_matchmakingServers = new List<MasterClient.ServerData>(); - - private List<MasterClient.ServerData> m_dedicatedServers = new List<MasterClient.ServerData>(); - - private List<MasterClient.ServerData> m_dedicatedServersTemp = new List<MasterClient.ServerData>(); - - private List<MasterClient.ServerData> m_friendServers = new List<MasterClient.ServerData>(); - - private int m_serverListRevision; - - private CallResult<LobbyCreated_t> m_lobbyCreated; - - private CallResult<LobbyMatchList_t> m_lobbyMatchList; - - private CallResult<LobbyEnter_t> m_lobbyEntered; - - private Callback<GameServerChangeRequested_t> m_changeServer; - - private Callback<GameLobbyJoinRequested_t> m_joinRequest; - - private Callback<LobbyDataUpdate_t> m_lobbyDataUpdate; - - private Callback<GetAuthSessionTicketResponse_t> m_authSessionTicketResponse; - - private Callback<SteamServerConnectFailure_t> m_steamServerConnectFailure; - - private Callback<SteamServersConnected_t> m_steamServersConnected; - - private Callback<SteamServersDisconnected_t> m_steamServersDisconnected; - - private CSteamID m_myLobby = CSteamID.Nil; - - private CSteamID m_joinUserID = CSteamID.Nil; - - private CSteamID m_queuedJoinLobby = CSteamID.Nil; - - private List<KeyValuePair<CSteamID, string>> m_requestedFriendGames = new List<KeyValuePair<CSteamID, string>>(); - - private ISteamMatchmakingServerListResponse m_steamServerCallbackHandler; - - private ISteamMatchmakingPingResponse m_joinServerCallbackHandler; - - private HServerQuery m_joinQuery; - - private HServerListRequest m_serverListRequest; - - private bool m_haveListRequest; - - private bool m_refreshingList; - - private string m_registerServerName = ""; - - private bool m_registerPassword; - - private string m_registerVerson = ""; - - private string m_nameFilter = ""; - - private bool m_friendsFilter = true; - - private HAuthTicket m_authTicket = HAuthTicket.Invalid; - - public static ZSteamMatchmaking instance => m_instance; - - public static void Initialize() - { - if (m_instance == null) - { - m_instance = new ZSteamMatchmaking(); - } - } - - private ZSteamMatchmaking() - { - m_steamServerCallbackHandler = new ISteamMatchmakingServerListResponse(OnServerResponded, OnServerFailedToRespond, OnRefreshComplete); - m_joinServerCallbackHandler = new ISteamMatchmakingPingResponse(OnJoinServerRespond, OnJoinServerFailed); - m_lobbyCreated = CallResult<LobbyCreated_t>.Create(OnLobbyCreated); - m_lobbyMatchList = CallResult<LobbyMatchList_t>.Create(OnLobbyMatchList); - m_changeServer = Callback<GameServerChangeRequested_t>.Create(OnChangeServerRequest); - m_joinRequest = Callback<GameLobbyJoinRequested_t>.Create(OnJoinRequest); - m_lobbyDataUpdate = Callback<LobbyDataUpdate_t>.Create(OnLobbyDataUpdate); - m_authSessionTicketResponse = Callback<GetAuthSessionTicketResponse_t>.Create(OnAuthSessionTicketResponse); - } - - public byte[] RequestSessionTicket() - { - ReleaseSessionTicket(); - byte[] array = new byte[1024]; - uint pcbTicket = 0u; - m_authTicket = SteamUser.GetAuthSessionTicket(array, 1024, out pcbTicket); - if (m_authTicket == HAuthTicket.Invalid) - { - return null; - } - byte[] array2 = new byte[pcbTicket]; - Buffer.BlockCopy(array, 0, array2, 0, (int)pcbTicket); - return array2; - } - - public void ReleaseSessionTicket() - { - if (!(m_authTicket == HAuthTicket.Invalid)) - { - SteamUser.CancelAuthTicket(m_authTicket); - m_authTicket = HAuthTicket.Invalid; - ZLog.Log("Released session ticket"); - } - } - - public bool VerifySessionTicket(byte[] ticket, CSteamID steamID) - { - return SteamUser.BeginAuthSession(ticket, ticket.Length, steamID) == EBeginAuthSessionResult.k_EBeginAuthSessionResultOK; - } - - private void OnAuthSessionTicketResponse(GetAuthSessionTicketResponse_t data) - { - ZLog.Log("Session auth respons callback"); - } - - private void OnSteamServersConnected(SteamServersConnected_t data) - { - ZLog.Log("Game server connected"); - } - - private void OnSteamServersDisconnected(SteamServersDisconnected_t data) - { - ZLog.LogWarning("Game server disconnected"); - } - - private void OnSteamServersConnectFail(SteamServerConnectFailure_t data) - { - ZLog.LogWarning("Game server connected failed"); - } - - private void OnChangeServerRequest(GameServerChangeRequested_t data) - { - ZLog.Log("ZSteamMatchmaking got change server request to:" + data.m_rgchServer); - QueueServerJoin(data.m_rgchServer); - } - - private void OnJoinRequest(GameLobbyJoinRequested_t data) - { - ZLog.Log(string.Concat("ZSteamMatchmaking got join request friend:", data.m_steamIDFriend, " lobby:", data.m_steamIDLobby)); - if (!Game.instance) - { - QueueLobbyJoin(data.m_steamIDLobby); - } - } - - public void QueueServerJoin(string addr) - { - string[] array = addr.Split(':'); - if (array.Length >= 2 && array[0].Split('.').Length == 4) - { - int num = BitConverter.ToInt32(IPAddress.Parse(array[0]).GetAddressBytes(), 0); - uint num2 = (uint)IPAddress.HostToNetworkOrder(num); - int num3 = int.Parse(array[1]) + 1; - ZLog.Log("request " + array[0] + " " + array[1] + " ip:" + num + " nboip:" + num2 + " port:" + num3); - m_joinQuery = SteamMatchmakingServers.PingServer(num2, (ushort)num3, m_joinServerCallbackHandler); - } - } - - private void OnJoinServerRespond(gameserveritem_t serverData) - { - ZLog.Log("Got join server data " + serverData.GetServerName() + " " + serverData.m_steamID); - m_joinUserID = serverData.m_steamID; - } - - private void OnJoinServerFailed() - { - ZLog.Log("Failed to get join server data"); - } - - public void QueueLobbyJoin(CSteamID lobbyID) - { - if (SteamMatchmaking.GetLobbyGameServer(lobbyID, out var _, out var _, out var psteamIDGameServer)) - { - ZLog.Log(" hostid: " + psteamIDGameServer); - m_joinUserID = psteamIDGameServer; - m_queuedJoinLobby = CSteamID.Nil; - } - else - { - ZLog.Log(string.Concat("Failed to get lobby data for lobby ", lobbyID, ", requesting lobby data")); - m_queuedJoinLobby = lobbyID; - SteamMatchmaking.RequestLobbyData(lobbyID); - } - } - - private void OnLobbyDataUpdate(LobbyDataUpdate_t data) - { - CSteamID cSteamID = new CSteamID(data.m_ulSteamIDLobby); - if (cSteamID == m_queuedJoinLobby) - { - ZLog.Log("Got lobby data, for queued lobby"); - if (SteamMatchmaking.GetLobbyGameServer(cSteamID, out var _, out var _, out var psteamIDGameServer)) - { - m_joinUserID = psteamIDGameServer; - } - m_queuedJoinLobby = CSteamID.Nil; - return; - } - ZLog.Log("Got requested lobby data"); - foreach (KeyValuePair<CSteamID, string> requestedFriendGame in m_requestedFriendGames) - { - if (requestedFriendGame.Key == cSteamID) - { - MasterClient.ServerData lobbyServerData = GetLobbyServerData(cSteamID); - if (lobbyServerData != null) - { - lobbyServerData.m_name = requestedFriendGame.Value + " [" + lobbyServerData.m_name + "]"; - m_friendServers.Add(lobbyServerData); - m_serverListRevision++; - } - } - } - } - - public void RegisterServer(string name, bool password, string version, bool publicServer, string worldName) - { - UnregisterServer(); - SteamAPICall_t hAPICall = SteamMatchmaking.CreateLobby((!publicServer) ? ELobbyType.k_ELobbyTypeFriendsOnly : ELobbyType.k_ELobbyTypePublic, 32); - m_lobbyCreated.Set(hAPICall); - m_registerServerName = name; - m_registerPassword = password; - m_registerVerson = version; - ZLog.Log("Registering lobby"); - } - - private void OnLobbyCreated(LobbyCreated_t data, bool ioError) - { - ZLog.Log(string.Concat("Lobby was created ", data.m_eResult, " ", data.m_ulSteamIDLobby, " error:", ioError.ToString())); - if (!ioError) - { - m_myLobby = new CSteamID(data.m_ulSteamIDLobby); - SteamMatchmaking.SetLobbyData(m_myLobby, "name", m_registerServerName); - SteamMatchmaking.SetLobbyData(m_myLobby, "password", m_registerPassword ? "1" : "0"); - SteamMatchmaking.SetLobbyData(m_myLobby, "version", m_registerVerson); - SteamMatchmaking.SetLobbyGameServer(m_myLobby, 0u, 0, SteamUser.GetSteamID()); - } - } - - private void OnLobbyEnter(LobbyEnter_t data, bool ioError) - { - ZLog.LogWarning("Entering lobby " + data.m_ulSteamIDLobby); - } - - public void UnregisterServer() - { - if (m_myLobby != CSteamID.Nil) - { - SteamMatchmaking.SetLobbyJoinable(m_myLobby, bLobbyJoinable: false); - SteamMatchmaking.LeaveLobby(m_myLobby); - m_myLobby = CSteamID.Nil; - } - } - - public void RequestServerlist() - { - if (m_friendsFilter) - { - RequestFriendGames(); - return; - } - RequestPublicLobbies(); - RequestDedicatedServers(); - } - - private void RequestFriendGames() - { - m_friendServers.Clear(); - m_requestedFriendGames.Clear(); - int num = SteamFriends.GetFriendCount(EFriendFlags.k_EFriendFlagImmediate); - if (num == -1) - { - ZLog.Log("GetFriendCount returned -1, the current user is not logged in."); - num = 0; - } - for (int i = 0; i < num; i++) - { - CSteamID friendByIndex = SteamFriends.GetFriendByIndex(i, EFriendFlags.k_EFriendFlagImmediate); - string friendPersonaName = SteamFriends.GetFriendPersonaName(friendByIndex); - if (SteamFriends.GetFriendGamePlayed(friendByIndex, out var pFriendGameInfo) && pFriendGameInfo.m_gameID == (CGameID)SteamManager.APP_ID && pFriendGameInfo.m_steamIDLobby != CSteamID.Nil) - { - ZLog.Log("Friend is in our game"); - m_requestedFriendGames.Add(new KeyValuePair<CSteamID, string>(pFriendGameInfo.m_steamIDLobby, friendPersonaName)); - SteamMatchmaking.RequestLobbyData(pFriendGameInfo.m_steamIDLobby); - } - } - m_serverListRevision++; - } - - private void RequestPublicLobbies() - { - SteamAPICall_t hAPICall = SteamMatchmaking.RequestLobbyList(); - m_lobbyMatchList.Set(hAPICall); - } - - private void RequestDedicatedServers() - { - if (!m_refreshingList) - { - if (m_haveListRequest) - { - SteamMatchmakingServers.ReleaseRequest(m_serverListRequest); - m_haveListRequest = false; - } - m_dedicatedServersTemp.Clear(); - m_serverListRequest = SteamMatchmakingServers.RequestInternetServerList(SteamUtils.GetAppID(), new MatchMakingKeyValuePair_t[0], 0u, m_steamServerCallbackHandler); - m_refreshingList = true; - m_haveListRequest = true; - } - } - - private void OnLobbyMatchList(LobbyMatchList_t data, bool ioError) - { - m_matchmakingServers.Clear(); - for (int i = 0; i < data.m_nLobbiesMatching; i++) - { - CSteamID lobbyByIndex = SteamMatchmaking.GetLobbyByIndex(i); - MasterClient.ServerData lobbyServerData = GetLobbyServerData(lobbyByIndex); - if (lobbyServerData != null) - { - m_matchmakingServers.Add(lobbyServerData); - } - } - m_serverListRevision++; - } - - private MasterClient.ServerData GetLobbyServerData(CSteamID lobbyID) - { - string lobbyData = SteamMatchmaking.GetLobbyData(lobbyID, "name"); - bool password = SteamMatchmaking.GetLobbyData(lobbyID, "password") == "1"; - string lobbyData2 = SteamMatchmaking.GetLobbyData(lobbyID, "version"); - int numLobbyMembers = SteamMatchmaking.GetNumLobbyMembers(lobbyID); - if (m_nameFilter.Length > 0 && !lobbyData.Contains(m_nameFilter)) - { - return null; - } - if (SteamMatchmaking.GetLobbyGameServer(lobbyID, out var _, out var _, out var psteamIDGameServer)) - { - MasterClient.ServerData serverData = new MasterClient.ServerData(); - serverData.m_name = lobbyData; - serverData.m_password = password; - serverData.m_version = lobbyData2; - serverData.m_players = numLobbyMembers; - serverData.m_steamHostID = (ulong)psteamIDGameServer; - ZLog.Log("Got server " + lobbyData + " host:" + serverData.m_steamHostID); - return serverData; - } - ZLog.Log("Failed to get lobby gameserver"); - return null; - } - - public void GetServers(List<MasterClient.ServerData> allServers) - { - if (m_friendsFilter) - { - allServers.AddRange(m_friendServers); - return; - } - allServers.AddRange(m_matchmakingServers); - allServers.AddRange(m_dedicatedServers); - } - - public CSteamID GetJoinUserID() - { - CSteamID joinUserID = m_joinUserID; - m_joinUserID = CSteamID.Nil; - return joinUserID; - } - - private void OnServerResponded(HServerListRequest request, int iServer) - { - gameserveritem_t serverDetails = SteamMatchmakingServers.GetServerDetails(request, iServer); - string serverName = serverDetails.GetServerName(); - if (m_nameFilter.Length <= 0 || serverName.Contains(m_nameFilter)) - { - MasterClient.ServerData serverData = new MasterClient.ServerData(); - serverData.m_name = serverName; - serverData.m_steamHostID = (ulong)serverDetails.m_steamID; - serverData.m_password = serverDetails.m_bPassword; - serverData.m_players = serverDetails.m_nPlayers; - serverData.m_version = serverDetails.GetGameTags(); - m_dedicatedServersTemp.Add(serverData); - } - } - - private void OnServerFailedToRespond(HServerListRequest request, int iServer) - { - ZLog.Log("Server failed to respond"); - } - - private void OnRefreshComplete(HServerListRequest request, EMatchMakingServerResponse response) - { - ZLog.Log("Refresh complete " + m_dedicatedServersTemp.Count + " " + response); - m_dedicatedServers.Clear(); - m_dedicatedServers.AddRange(m_dedicatedServersTemp); - m_dedicatedServersTemp.Clear(); - m_refreshingList = false; - m_serverListRevision++; - } - - public void SetNameFilter(string filter) - { - m_nameFilter = filter; - } - - public void SetFriendFilter(bool enabled) - { - m_friendsFilter = enabled; - } - - public int GetServerListRevision() - { - return m_serverListRevision; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZSteamSocket.cs b/Valheim_v202102/Valheim/assembly_valheim/ZSteamSocket.cs deleted file mode 100644 index 30a271d..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZSteamSocket.cs +++ /dev/null @@ -1,340 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using Steamworks; - -public class ZSteamSocket : IDisposable, ISocket -{ - private static List<ZSteamSocket> m_sockets = new List<ZSteamSocket>(); - - private static Callback<P2PSessionRequest_t> m_SessionRequest; - - private static Callback<P2PSessionConnectFail_t> m_connectionFailed; - - private Queue<ZSteamSocket> m_pendingConnections = new Queue<ZSteamSocket>(); - - private CSteamID m_peerID = CSteamID.Nil; - - private bool m_listner; - - private Queue<ZPackage> m_pkgQueue = new Queue<ZPackage>(); - - private Queue<byte[]> m_sendQueue = new Queue<byte[]>(); - - private int m_totalSent; - - private int m_totalRecv; - - private bool m_gotData; - - public ZSteamSocket() - { - m_sockets.Add(this); - RegisterGlobalCallbacks(); - } - - public ZSteamSocket(CSteamID peerID) - { - m_sockets.Add(this); - m_peerID = peerID; - RegisterGlobalCallbacks(); - } - - private static void RegisterGlobalCallbacks() - { - if (m_connectionFailed == null) - { - ZLog.Log("ZSteamSocket Registering global callbacks"); - m_connectionFailed = Callback<P2PSessionConnectFail_t>.Create(OnConnectionFailed); - } - if (m_SessionRequest == null) - { - m_SessionRequest = Callback<P2PSessionRequest_t>.Create(OnSessionRequest); - } - } - - private static void UnregisterGlobalCallbacks() - { - ZLog.Log("ZSteamSocket UnregisterGlobalCallbacks, existing sockets:" + m_sockets.Count); - if (m_connectionFailed != null) - { - m_connectionFailed.Dispose(); - m_connectionFailed = null; - } - if (m_SessionRequest != null) - { - m_SessionRequest.Dispose(); - m_SessionRequest = null; - } - } - - private static void OnConnectionFailed(P2PSessionConnectFail_t data) - { - ZLog.Log("Got connection failed callback: " + data.m_steamIDRemote); - foreach (ZSteamSocket socket in m_sockets) - { - if (socket.IsPeer(data.m_steamIDRemote)) - { - socket.Close(); - } - } - } - - private static void OnSessionRequest(P2PSessionRequest_t data) - { - ZLog.Log("Got session request from " + data.m_steamIDRemote); - if (SteamNetworking.AcceptP2PSessionWithUser(data.m_steamIDRemote)) - { - GetListner()?.QueuePendingConnection(data.m_steamIDRemote); - } - } - - public void Dispose() - { - ZLog.Log("Disposing socket"); - Close(); - m_pkgQueue.Clear(); - m_sockets.Remove(this); - if (m_sockets.Count == 0) - { - ZLog.Log("Last socket, unregistering callback"); - UnregisterGlobalCallbacks(); - } - } - - public void Close() - { - ZLog.Log("Closing socket " + GetEndPointString()); - if (m_peerID != CSteamID.Nil) - { - Flush(); - ZLog.Log(" send queue size:" + m_sendQueue.Count); - Thread.Sleep(100); - SteamNetworking.GetP2PSessionState(m_peerID, out var pConnectionState); - ZLog.Log(" P2P state, bytes in send queue:" + pConnectionState.m_nBytesQueuedForSend); - SteamNetworking.CloseP2PSessionWithUser(m_peerID); - SteamUser.EndAuthSession(m_peerID); - m_peerID = CSteamID.Nil; - } - m_listner = false; - } - - public bool StartHost() - { - m_listner = true; - m_pendingConnections.Clear(); - return true; - } - - private ZSteamSocket QueuePendingConnection(CSteamID id) - { - foreach (ZSteamSocket pendingConnection in m_pendingConnections) - { - if (pendingConnection.IsPeer(id)) - { - return pendingConnection; - } - } - ZSteamSocket zSteamSocket = new ZSteamSocket(id); - m_pendingConnections.Enqueue(zSteamSocket); - return zSteamSocket; - } - - public ISocket Accept() - { - if (!m_listner) - { - return null; - } - if (m_pendingConnections.Count > 0) - { - return m_pendingConnections.Dequeue(); - } - return null; - } - - public bool IsConnected() - { - return m_peerID != CSteamID.Nil; - } - - public void Send(ZPackage pkg) - { - if (pkg.Size() != 0 && IsConnected()) - { - byte[] array = pkg.GetArray(); - byte[] bytes = BitConverter.GetBytes(array.Length); - byte[] array2 = new byte[array.Length + bytes.Length]; - bytes.CopyTo(array2, 0); - array.CopyTo(array2, 4); - m_sendQueue.Enqueue(array); - SendQueuedPackages(); - } - } - - public bool Flush() - { - SendQueuedPackages(); - return m_sendQueue.Count == 0; - } - - private void SendQueuedPackages() - { - if (!IsConnected()) - { - return; - } - while (m_sendQueue.Count > 0) - { - byte[] array = m_sendQueue.Peek(); - if (SteamNetworking.SendP2PPacket(m_peerID, array, (uint)array.Length, EP2PSend.k_EP2PSendReliable)) - { - m_totalSent += array.Length; - m_sendQueue.Dequeue(); - continue; - } - break; - } - } - - public static void Update() - { - foreach (ZSteamSocket socket in m_sockets) - { - socket.SendQueuedPackages(); - } - ReceivePackages(); - } - - private static void ReceivePackages() - { - uint pcubMsgSize; - while (SteamNetworking.IsP2PPacketAvailable(out pcubMsgSize)) - { - byte[] array = new byte[pcubMsgSize]; - if (SteamNetworking.ReadP2PPacket(array, pcubMsgSize, out var _, out var psteamIDRemote)) - { - QueueNewPkg(psteamIDRemote, array); - continue; - } - break; - } - } - - private static void QueueNewPkg(CSteamID sender, byte[] data) - { - foreach (ZSteamSocket socket in m_sockets) - { - if (socket.IsPeer(sender)) - { - socket.QueuePackage(data); - return; - } - } - ZSteamSocket listner = GetListner(); - if (listner != null) - { - ZLog.Log("Got package from unconnected peer " + sender); - listner.QueuePendingConnection(sender).QueuePackage(data); - } - else - { - ZLog.Log(string.Concat("Got package from unkown peer ", sender, " but no active listner")); - } - } - - private static ZSteamSocket GetListner() - { - foreach (ZSteamSocket socket in m_sockets) - { - if (socket.IsHost()) - { - return socket; - } - } - return null; - } - - private void QueuePackage(byte[] data) - { - ZPackage item = new ZPackage(data); - m_pkgQueue.Enqueue(item); - m_gotData = true; - m_totalRecv += data.Length; - } - - public ZPackage Recv() - { - if (!IsConnected()) - { - return null; - } - if (m_pkgQueue.Count > 0) - { - return m_pkgQueue.Dequeue(); - } - return null; - } - - public string GetEndPointString() - { - return m_peerID.ToString(); - } - - public string GetHostName() - { - return m_peerID.ToString(); - } - - public CSteamID GetPeerID() - { - return m_peerID; - } - - public bool IsPeer(CSteamID peer) - { - if (!IsConnected()) - { - return false; - } - return peer == m_peerID; - } - - public bool IsHost() - { - return m_listner; - } - - public bool IsSending() - { - if (!IsConnected()) - { - return false; - } - return m_sendQueue.Count > 0; - } - - public void GetAndResetStats(out int totalSent, out int totalRecv) - { - totalSent = m_totalSent; - totalRecv = m_totalRecv; - m_totalSent = 0; - m_totalRecv = 0; - } - - public bool GotNewData() - { - bool gotData = m_gotData; - m_gotData = false; - return gotData; - } - - public int GetHostPort() - { - if (IsHost()) - { - return 1; - } - return -1; - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZSyncAnimation.cs b/Valheim_v202102/Valheim/assembly_valheim/ZSyncAnimation.cs deleted file mode 100644 index eb6d5a1..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZSyncAnimation.cs +++ /dev/null @@ -1,217 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class ZSyncAnimation : MonoBehaviour -{ - private ZNetView m_nview; - - private Animator m_animator; - - public List<string> m_syncBools = new List<string>(); - - public List<string> m_syncFloats = new List<string>(); - - public List<string> m_syncInts = new List<string>(); - - public bool m_smoothCharacterSpeeds = true; - - private static int m_forwardSpeedID; - - private static int m_sidewaySpeedID; - - private static int m_animSpeedID; - - private int[] m_boolHashes; - - private bool[] m_boolDefaults; - - private int[] m_floatHashes; - - private float[] m_floatDefaults; - - private int[] m_intHashes; - - private int[] m_intDefaults; - - private const int m_zdoSalt = 438569; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_animator = GetComponentInChildren<Animator>(); - m_animator.logWarnings = false; - m_nview.Register<string>("SetTrigger", RPC_SetTrigger); - m_boolHashes = new int[m_syncBools.Count]; - m_boolDefaults = new bool[m_syncBools.Count]; - for (int i = 0; i < m_syncBools.Count; i++) - { - m_boolHashes[i] = GetHash(m_syncBools[i]); - m_boolDefaults[i] = m_animator.GetBool(m_boolHashes[i]); - } - m_floatHashes = new int[m_syncFloats.Count]; - m_floatDefaults = new float[m_syncFloats.Count]; - for (int j = 0; j < m_syncFloats.Count; j++) - { - m_floatHashes[j] = GetHash(m_syncFloats[j]); - m_floatDefaults[j] = m_animator.GetFloat(m_floatHashes[j]); - } - m_intHashes = new int[m_syncInts.Count]; - m_intDefaults = new int[m_syncInts.Count]; - for (int k = 0; k < m_syncInts.Count; k++) - { - m_intHashes[k] = GetHash(m_syncInts[k]); - m_intDefaults[k] = m_animator.GetInteger(m_intHashes[k]); - } - if (m_forwardSpeedID == 0) - { - m_forwardSpeedID = GetHash("forward_speed"); - m_sidewaySpeedID = GetHash("sideway_speed"); - m_animSpeedID = GetHash("anim_speed"); - } - if (m_nview.GetZDO() == null) - { - base.enabled = false; - } - else - { - SyncParameters(); - } - } - - public static int GetHash(string name) - { - return Animator.StringToHash(name); - } - - private void FixedUpdate() - { - if (m_nview.IsValid()) - { - SyncParameters(); - } - } - - private void SyncParameters() - { - ZDO zDO = m_nview.GetZDO(); - if (!m_nview.IsOwner()) - { - for (int i = 0; i < m_boolHashes.Length; i++) - { - int num = m_boolHashes[i]; - bool @bool = zDO.GetBool(438569 + num, m_boolDefaults[i]); - m_animator.SetBool(num, @bool); - } - for (int j = 0; j < m_floatHashes.Length; j++) - { - int num2 = m_floatHashes[j]; - float @float = zDO.GetFloat(438569 + num2, m_floatDefaults[j]); - if (m_smoothCharacterSpeeds && (num2 == m_forwardSpeedID || num2 == m_sidewaySpeedID)) - { - m_animator.SetFloat(num2, @float, 0.2f, Time.fixedDeltaTime); - } - else - { - m_animator.SetFloat(num2, @float); - } - } - for (int k = 0; k < m_intHashes.Length; k++) - { - int num3 = m_intHashes[k]; - int @int = zDO.GetInt(438569 + num3, m_intDefaults[k]); - m_animator.SetInteger(num3, @int); - } - float float2 = zDO.GetFloat(m_animSpeedID, 1f); - m_animator.speed = float2; - } - else - { - zDO.Set(m_animSpeedID, m_animator.speed); - } - } - - public void SetTrigger(string name) - { - m_nview.InvokeRPC(ZNetView.Everybody, "SetTrigger", name); - } - - public void SetBool(string name, bool value) - { - int hash = GetHash(name); - SetBool(hash, value); - } - - public void SetBool(int hash, bool value) - { - if (m_animator.GetBool(hash) != value) - { - m_animator.SetBool(hash, value); - if (m_nview.GetZDO() != null && m_nview.IsOwner()) - { - m_nview.GetZDO().Set(438569 + hash, value); - } - } - } - - public void SetFloat(string name, float value) - { - int hash = GetHash(name); - SetFloat(hash, value); - } - - public void SetFloat(int hash, float value) - { - if (!(Mathf.Abs(m_animator.GetFloat(hash) - value) < 0.01f)) - { - if (m_smoothCharacterSpeeds && (hash == m_forwardSpeedID || hash == m_sidewaySpeedID)) - { - m_animator.SetFloat(hash, value, 0.2f, Time.fixedDeltaTime); - } - else - { - m_animator.SetFloat(hash, value); - } - if (m_nview.GetZDO() != null && m_nview.IsOwner()) - { - m_nview.GetZDO().Set(438569 + hash, value); - } - } - } - - public void SetInt(string name, int value) - { - int hash = GetHash(name); - SetInt(hash, value); - } - - public void SetInt(int hash, int value) - { - if (m_animator.GetInteger(hash) != value) - { - m_animator.SetInteger(hash, value); - if (m_nview.GetZDO() != null && m_nview.IsOwner()) - { - m_nview.GetZDO().Set(438569 + hash, value); - } - } - } - - private void RPC_SetTrigger(long sender, string name) - { - m_animator.SetTrigger(name); - } - - public void SetSpeed(float speed) - { - m_animator.speed = speed; - } - - public bool IsOwner() - { - if (!m_nview.IsValid()) - { - return false; - } - return m_nview.IsOwner(); - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZSyncTransform.cs b/Valheim_v202102/Valheim/assembly_valheim/ZSyncTransform.cs deleted file mode 100644 index 01431f0..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZSyncTransform.cs +++ /dev/null @@ -1,327 +0,0 @@ -using System.Collections.Generic; -using UnityEngine; - -public class ZSyncTransform : MonoBehaviour -{ - public bool m_syncPosition = true; - - public bool m_syncRotation = true; - - public bool m_syncScale; - - public bool m_syncBodyVelocity; - - public bool m_characterParentSync; - - private const float m_smoothness = 0.2f; - - private bool m_isKinematicBody; - - private bool m_useGravity = true; - - private Vector3 m_tempRelPos; - - private bool m_haveTempRelPos; - - private float m_targetPosTimer; - - private uint m_posRevision; - - private int m_lastUpdateFrame = -1; - - private static int m_velHash = "vel".GetStableHashCode(); - - private static int m_scaleHash = "scale".GetStableHashCode(); - - private static int m_bodyVel = "body_vel".GetStableHashCode(); - - private static int m_bodyAVel = "body_avel".GetStableHashCode(); - - private static int m_relPos = "relPos".GetStableHashCode(); - - private static KeyValuePair<int, int> m_parentIDHash = ZDO.GetHashZDOID("parentID"); - - private ZNetView m_nview; - - private Rigidbody m_body; - - private Projectile m_projectile; - - private Character m_character; - - private void Awake() - { - m_nview = GetComponent<ZNetView>(); - m_body = GetComponent<Rigidbody>(); - m_projectile = GetComponent<Projectile>(); - m_character = GetComponent<Character>(); - if (m_nview.GetZDO() == null) - { - base.enabled = false; - } - else if ((bool)m_body) - { - m_isKinematicBody = m_body.isKinematic; - m_useGravity = m_body.useGravity; - } - } - - private Vector3 GetVelocity() - { - if (m_body != null) - { - return m_body.velocity; - } - if (m_projectile != null) - { - return m_projectile.GetVelocity(); - } - return Vector3.zero; - } - - private Vector3 GetPosition() - { - if (!m_body) - { - return base.transform.position; - } - return m_body.position; - } - - private void OwnerSync() - { - ZDO zDO = m_nview.GetZDO(); - if (!zDO.IsOwner()) - { - return; - } - if (base.transform.position.y < -5000f) - { - if ((bool)m_body) - { - m_body.velocity = Vector3.zero; - } - ZLog.Log("Object fell out of world:" + base.gameObject.name); - float groundHeight = ZoneSystem.instance.GetGroundHeight(base.transform.position); - Vector3 position = base.transform.position; - position.y = groundHeight + 1f; - base.transform.position = position; - return; - } - if (m_syncPosition) - { - zDO.SetPosition(GetPosition()); - zDO.Set(m_velHash, GetVelocity()); - if (m_characterParentSync) - { - if (m_character.GetRelativePosition(out var parent, out var relativePos, out var relativeVel)) - { - zDO.Set(m_parentIDHash, parent); - zDO.Set(m_relPos, relativePos); - zDO.Set(m_velHash, relativeVel); - } - else - { - zDO.Set(m_parentIDHash, ZDOID.None); - } - } - } - if (m_syncRotation && base.transform.hasChanged) - { - Quaternion rotation = (m_body ? m_body.rotation : base.transform.rotation); - zDO.SetRotation(rotation); - } - if (m_syncScale && base.transform.hasChanged) - { - zDO.Set(m_scaleHash, base.transform.localScale); - } - if ((bool)m_body) - { - if (m_syncBodyVelocity) - { - m_nview.GetZDO().Set(m_bodyVel, m_body.velocity); - m_nview.GetZDO().Set(m_bodyAVel, m_body.angularVelocity); - } - m_body.useGravity = m_useGravity; - } - base.transform.hasChanged = false; - } - - private void SyncPosition(ZDO zdo, float dt) - { - if (m_characterParentSync && zdo.HasOwner()) - { - ZDOID zDOID = zdo.GetZDOID(m_parentIDHash); - if (!zDOID.IsNone()) - { - GameObject gameObject = ZNetScene.instance.FindInstance(zDOID); - if ((bool)gameObject) - { - ZSyncTransform component = gameObject.GetComponent<ZSyncTransform>(); - if ((bool)component) - { - component.ClientSync(dt); - } - Vector3 vector = zdo.GetVec3(m_relPos, Vector3.zero); - Vector3 vec = zdo.GetVec3(m_velHash, Vector3.zero); - if (zdo.m_dataRevision != m_posRevision) - { - m_posRevision = zdo.m_dataRevision; - m_targetPosTimer = 0f; - } - m_targetPosTimer += dt; - m_targetPosTimer = Mathf.Min(m_targetPosTimer, 2f); - vector += vec * m_targetPosTimer; - if (!m_haveTempRelPos) - { - m_haveTempRelPos = true; - m_tempRelPos = vector; - } - if (Vector3.Distance(m_tempRelPos, vector) > 0.001f) - { - m_tempRelPos = Vector3.Lerp(m_tempRelPos, vector, 0.2f); - vector = m_tempRelPos; - } - Vector3 vector2 = gameObject.transform.TransformPoint(vector); - if (Vector3.Distance(base.transform.position, vector2) > 0.001f) - { - base.transform.position = vector2; - } - return; - } - } - } - m_haveTempRelPos = false; - Vector3 position = zdo.GetPosition(); - if (zdo.m_dataRevision != m_posRevision) - { - m_posRevision = zdo.m_dataRevision; - m_targetPosTimer = 0f; - } - if (zdo.HasOwner()) - { - m_targetPosTimer += dt; - m_targetPosTimer = Mathf.Min(m_targetPosTimer, 2f); - Vector3 vec2 = zdo.GetVec3(m_velHash, Vector3.zero); - position += vec2 * m_targetPosTimer; - } - if (Vector3.Distance(base.transform.position, position) > 0.001f) - { - base.transform.position = Vector3.Lerp(base.transform.position, position, 0.2f); - } - } - - private void ClientSync(float dt) - { - ZDO zDO = m_nview.GetZDO(); - if (zDO.IsOwner()) - { - return; - } - int frameCount = Time.frameCount; - if (m_lastUpdateFrame == frameCount) - { - return; - } - m_lastUpdateFrame = frameCount; - if (m_isKinematicBody) - { - if (m_syncPosition) - { - Vector3 vector = zDO.GetPosition(); - if (Vector3.Distance(m_body.position, vector) > 5f) - { - m_body.position = vector; - } - else - { - if (Vector3.Distance(m_body.position, vector) > 0.01f) - { - vector = Vector3.Lerp(m_body.position, vector, 0.2f); - } - m_body.MovePosition(vector); - } - } - if (m_syncRotation) - { - Quaternion rotation = zDO.GetRotation(); - if (Quaternion.Angle(m_body.rotation, rotation) > 45f) - { - m_body.rotation = rotation; - } - else - { - m_body.MoveRotation(rotation); - } - } - } - else - { - if (m_syncPosition) - { - SyncPosition(zDO, dt); - } - if (m_syncRotation) - { - Quaternion rotation2 = zDO.GetRotation(); - if (Quaternion.Angle(base.transform.rotation, rotation2) > 0.001f) - { - base.transform.rotation = Quaternion.Slerp(base.transform.rotation, rotation2, 0.2f); - } - } - if ((bool)m_body) - { - m_body.useGravity = false; - if (m_syncBodyVelocity && m_nview.HasOwner()) - { - Vector3 vec = zDO.GetVec3(m_bodyVel, Vector3.zero); - Vector3 vec2 = zDO.GetVec3(m_bodyAVel, Vector3.zero); - if (vec.magnitude > 0.01f || vec2.magnitude > 0.01f) - { - m_body.velocity = vec; - m_body.angularVelocity = vec2; - } - else - { - m_body.Sleep(); - } - } - else if (!m_body.IsSleeping()) - { - m_body.velocity = Vector3.zero; - m_body.angularVelocity = Vector3.zero; - m_body.Sleep(); - } - } - } - if (m_syncScale) - { - Vector3 vec3 = zDO.GetVec3(m_scaleHash, base.transform.localScale); - base.transform.localScale = vec3; - } - } - - private void FixedUpdate() - { - if (m_nview.IsValid()) - { - ClientSync(Time.fixedDeltaTime); - } - } - - private void LateUpdate() - { - if (m_nview.IsValid()) - { - OwnerSync(); - } - } - - public void SyncNow() - { - if (m_nview.IsValid()) - { - OwnerSync(); - } - } -} diff --git a/Valheim_v202102/Valheim/assembly_valheim/ZoneSystem.cs b/Valheim_v202102/Valheim/assembly_valheim/ZoneSystem.cs deleted file mode 100644 index cc376b1..0000000 --- a/Valheim_v202102/Valheim/assembly_valheim/ZoneSystem.cs +++ /dev/null @@ -1,1712 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using UnityEngine; -using UnityEngine.SceneManagement; - -public class ZoneSystem : MonoBehaviour -{ - private class ZoneData - { - public GameObject m_root; - - public float m_ttl; - } - - private class ClearArea - { - public Vector3 m_center; - - public float m_radius; - - public ClearArea(Vector3 p, float r) - { - m_center = p; - m_radius = r; - } - } - - [Serializable] - public class ZoneVegetation - { - public string m_name = "veg"; - - public GameObject m_prefab; - - public bool m_enable = true; - - public float m_min; - - public float m_max = 10f; - - public bool m_forcePlacement; - - public float m_scaleMin = 1f; - - public float m_scaleMax = 1f; - - public float m_randTilt; - - public float m_chanceToUseGroundTilt; - - [BitMask(typeof(Heightmap.Biome))] - public Heightmap.Biome m_biome; - - [BitMask(typeof(Heightmap.BiomeArea))] - public Heightmap.BiomeArea m_biomeArea = Heightmap.BiomeArea.Everything; - - public bool m_blockCheck = true; - - public float m_minAltitude = -1000f; - - public float m_maxAltitude = 1000f; - - public float m_minOceanDepth; - - public float m_maxOceanDepth; - - public float m_minTilt; - - public float m_maxTilt = 90f; - - public float m_terrainDeltaRadius; - - public float m_maxTerrainDelta = 2f; - - public float m_minTerrainDelta; - - public bool m_snapToWater; - - public float m_groundOffset; - - public int m_groupSizeMin = 1; - - public int m_groupSizeMax = 1; - - public float m_groupRadius; - - [Header("Forest fractal 0-1 inside forest")] - public bool m_inForest; - - public float m_forestTresholdMin; - - public float m_forestTresholdMax = 1f; - - [HideInInspector] - public bool m_foldout; - - public ZoneVegetation Clone() - { - return MemberwiseClone() as ZoneVegetation; - } - } - - [Serializable] - public class ZoneLocation - { - public bool m_enable = true; - - public string m_prefabName; - - [BitMask(typeof(Heightmap.Biome))] - public Heightmap.Biome m_biome; - - [BitMask(typeof(Heightmap.BiomeArea))] - public Heightmap.BiomeArea m_biomeArea = Heightmap.BiomeArea.Everything; - - public int m_quantity; - - public float m_chanceToSpawn = 10f; - - public bool m_prioritized; - - public bool m_centerFirst; - - public bool m_unique; - - public string m_group = ""; - - public float m_minDistanceFromSimilar; - - public bool m_iconAlways; - - public bool m_iconPlaced; - - public bool m_randomRotation = true; - - public bool m_slopeRotation; - - public bool m_snapToWater; - - public float m_maxTerrainDelta = 2f; - - public float m_minTerrainDelta; - - [Header("Forest fractal 0-1 inside forest")] - public bool m_inForest; - - public float m_forestTresholdMin; - - public float m_forestTresholdMax = 1f; - - [Space(10f)] - public float m_minDistance; - - public float m_maxDistance; - - public float m_minAltitude = -1000f; - - public float m_maxAltitude = 1000f; - - [NonSerialized] - public GameObject m_prefab; - - [NonSerialized] - public int m_hash; - - [NonSerialized] - public Location m_location; - - [NonSerialized] - public float m_interiorRadius = 10f; - - [NonSerialized] - public float m_exteriorRadius = 10f; - - [NonSerialized] - public List<ZNetView> m_netViews = new List<ZNetView>(); - - [NonSerialized] - public List<RandomSpawn> m_randomSpawns = new List<RandomSpawn>(); - - [HideInInspector] - public bool m_foldout; - - public ZoneLocation Clone() - { - return MemberwiseClone() as ZoneLocation; - } - } - - public struct LocationInstance - { - public ZoneLocation m_location; - - public Vector3 m_position; - - public bool m_placed; - } - - public enum SpawnMode - { - Full, - Client, - Ghost - } - - private Dictionary<Vector3, string> tempIconList = new Dictionary<Vector3, string>(); - - private RaycastHit[] rayHits = new RaycastHit[200]; - - private static ZoneSystem m_instance; - - [HideInInspector] - public List<Heightmap.Biome> m_biomeFolded = new List<Heightmap.Biome>(); - - [HideInInspector] - public List<Heightmap.Biome> m_vegetationFolded = new List<Heightmap.Biome>(); - - [HideInInspector] - public List<Heightmap.Biome> m_locationFolded = new List<Heightmap.Biome>(); - - [NonSerialized] - public bool m_drawLocations; - - [NonSerialized] - public string m_drawLocationsFilter = ""; - - [Tooltip("Zones to load around center sector")] - public int m_activeArea = 1; - - public int m_activeDistantArea = 1; - - [Tooltip("Zone size, should match netscene sector size")] - public float m_zoneSize = 64f; - - [Tooltip("Time before destroying inactive zone")] - public float m_zoneTTL = 4f; - - [Tooltip("Time before spawning active zone")] - public float m_zoneTTS = 4f; - - public GameObject m_zonePrefab; - - public GameObject m_zoneCtrlPrefab; - - public GameObject m_locationProxyPrefab; - - public float m_waterLevel = 30f; - - [Header("Versions")] - public int m_pgwVersion = 53; - - public int m_locationVersion = 1; - - [Header("Generation data")] - public List<ZoneVegetation> m_vegetation = new List<ZoneVegetation>(); - - public List<ZoneLocation> m_locations = new List<ZoneLocation>(); - - private Dictionary<int, ZoneLocation> m_locationsByHash = new Dictionary<int, ZoneLocation>(); - - private bool m_error; - - private bool m_didZoneTest; - - private int m_terrainRayMask; - - private int m_blockRayMask; - - private int m_solidRayMask; - - private float m_updateTimer; - - private Dictionary<Vector2i, ZoneData> m_zones = new Dictionary<Vector2i, ZoneData>(); - - private HashSet<Vector2i> m_generatedZones = new HashSet<Vector2i>(); - - private bool m_locationsGenerated; - - private Dictionary<Vector2i, LocationInstance> m_locationInstances = new Dictionary<Vector2i, LocationInstance>(); - - private Dictionary<Vector3, string> m_locationIcons = new Dictionary<Vector3, string>(); - - private HashSet<string> m_globalKeys = new HashSet<string>(); - - private HashSet<Vector2i> m_tempGeneratedZonesSaveClone; - - private HashSet<string> m_tempGlobalKeysSaveClone; - - private List<LocationInstance> m_tempLocationsSaveClone; - - private bool m_tempLocationsGeneratedSaveClone; - - private List<ClearArea> m_tempClearAreas = new List<ClearArea>(); - - private List<GameObject> m_tempSpawnedObjects = new List<GameObject>(); - - public static ZoneSystem instance => m_instance; - - private void Awake() - { - m_instance = this; - m_terrainRayMask = LayerMask.GetMask("terrain"); - m_blockRayMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece"); - m_solidRayMask = LayerMask.GetMask("Default", "static_solid", "Default_small", "piece", "terrain"); - SceneManager.LoadScene("locations", LoadSceneMode.Additive); - ZLog.Log("Zonesystem Awake " + Time.frameCount); - } - - private void Start() - { - ZLog.Log("Zonesystem Start " + Time.frameCount); - SetupLocations(); - ValidateVegetation(); - if (!m_locationsGenerated && ZNet.instance.IsServer()) - { - GenerateLocations(); - } - ZRoutedRpc zRoutedRpc = ZRoutedRpc.instance; - zRoutedRpc.m_onNewPeer = (Action<long>)Delegate.Combine(zRoutedRpc.m_onNewPeer, new Action<long>(OnNewPeer)); - if (ZNet.instance.IsServer()) - { - ZRoutedRpc.instance.Register<string>("SetGlobalKey", RPC_SetGlobalKey); - return; - } - ZRoutedRpc.instance.Register<List<string>>("GlobalKeys", RPC_GlobalKeys); - ZRoutedRpc.instance.Register<ZPackage>("LocationIcons", RPC_LocationIcons); - } - - private void SendGlobalKeys(long peer) - { - List<string> list = new List<string>(m_globalKeys); - ZRoutedRpc.instance.InvokeRoutedRPC(peer, "GlobalKeys", list); - } - - private void RPC_GlobalKeys(long sender, List<string> keys) - { - ZLog.Log("client got keys " + keys.Count); - m_globalKeys.Clear(); - foreach (string key in keys) - { - m_globalKeys.Add(key); - } - } - - private void SendLocationIcons(long peer) - { - ZPackage zPackage = new ZPackage(); - tempIconList.Clear(); - GetLocationIcons(tempIconList); - zPackage.Write(tempIconList.Count); - foreach (KeyValuePair<Vector3, string> tempIcon in tempIconList) - { - zPackage.Write(tempIcon.Key); - zPackage.Write(tempIcon.Value); - } - ZRoutedRpc.instance.InvokeRoutedRPC(peer, "LocationIcons", zPackage); - } - - private void RPC_LocationIcons(long sender, ZPackage pkg) - { - ZLog.Log("client got location icons"); - m_locationIcons.Clear(); - int num = pkg.ReadInt(); - for (int i = 0; i < num; i++) - { - Vector3 key = pkg.ReadVector3(); - string value = pkg.ReadString(); - m_locationIcons[key] = value; - } - ZLog.Log("Icons:" + num); - } - - private void OnNewPeer(long peerID) - { - if (ZNet.instance.IsServer()) - { - ZLog.Log("Server: New peer connected,sending global keys"); - SendGlobalKeys(peerID); - SendLocationIcons(peerID); - } - } - - private void SetupLocations() - { - GameObject[] array = Resources.FindObjectsOfTypeAll<GameObject>(); - GameObject gameObject = null; - GameObject[] array2 = array; - foreach (GameObject gameObject2 in array2) - { - if (gameObject2.name == "_Locations") - { - gameObject = gameObject2; - break; - } - } - Location[] componentsInChildren = gameObject.GetComponentsInChildren<Location>(includeInactive: true); - Location[] array3 = componentsInChildren; - for (int i = 0; i < array3.Length; i++) - { - if (array3[i].transform.gameObject.activeInHierarchy) - { - m_error = true; - } - } - foreach (ZoneLocation location3 in m_locations) - { - Transform transform = null; - array3 = componentsInChildren; - foreach (Location location in array3) - { - if (location.gameObject.name == location3.m_prefabName) - { - transform = location.transform; - break; - } - } - if (transform == null && !location3.m_enable) - { - continue; - } - location3.m_prefab = transform.gameObject; - location3.m_hash = location3.m_prefab.name.GetStableHashCode(); - Location location2 = (location3.m_location = location3.m_prefab.GetComponentInChildren<Location>()); - location3.m_interiorRadius = (location2.m_hasInterior ? location2.m_interiorRadius : 0f); - location3.m_exteriorRadius = location2.m_exteriorRadius; - if (Application.isPlaying) - { - PrepareNetViews(location3.m_prefab, location3.m_netViews); - PrepareRandomSpawns(location3.m_prefab, location3.m_randomSpawns); - if (!m_locationsByHash.ContainsKey(location3.m_hash)) - { - m_locationsByHash.Add(location3.m_hash, location3); - } - } - } - } - - public static void PrepareNetViews(GameObject root, List<ZNetView> views) - { - views.Clear(); - ZNetView[] componentsInChildren = root.GetComponentsInChildren<ZNetView>(includeInactive: true); - foreach (ZNetView zNetView in componentsInChildren) - { - if (Utils.IsEnabledInheirarcy(zNetView.gameObject, root)) - { - views.Add(zNetView); - } - } - } - - public static void PrepareRandomSpawns(GameObject root, List<RandomSpawn> randomSpawns) - { - randomSpawns.Clear(); - RandomSpawn[] componentsInChildren = root.GetComponentsInChildren<RandomSpawn>(includeInactive: true); - foreach (RandomSpawn randomSpawn in componentsInChildren) - { - if (Utils.IsEnabledInheirarcy(randomSpawn.gameObject, root)) - { - randomSpawns.Add(randomSpawn); - randomSpawn.Prepare(); - } - } - } - - private void OnDestroy() - { - m_instance = null; - } - - private void ValidateVegetation() - { - foreach (ZoneVegetation item in m_vegetation) - { - if (item.m_enable && (bool)item.m_prefab && item.m_prefab.GetComponent<ZNetView>() == null) - { - ZLog.LogError("Vegetation " + item.m_prefab.name + " [ " + item.m_name + "] is missing ZNetView"); - } - } - } - - public void PrepareSave() - { - m_tempGeneratedZonesSaveClone = new HashSet<Vector2i>(m_generatedZones); - m_tempGlobalKeysSaveClone = new HashSet<string>(m_globalKeys); - m_tempLocationsSaveClone = new List<LocationInstance>(m_locationInstances.Values); - m_tempLocationsGeneratedSaveClone = m_locationsGenerated; - } - - public void SaveASync(BinaryWriter writer) - { - writer.Write(m_tempGeneratedZonesSaveClone.Count); - foreach (Vector2i item in m_tempGeneratedZonesSaveClone) - { - writer.Write(item.x); - writer.Write(item.y); - } - writer.Write(m_pgwVersion); - writer.Write(m_locationVersion); - writer.Write(m_tempGlobalKeysSaveClone.Count); - foreach (string item2 in m_tempGlobalKeysSaveClone) - { - writer.Write(item2); - } - writer.Write(m_tempLocationsGeneratedSaveClone); - writer.Write(m_tempLocationsSaveClone.Count); - foreach (LocationInstance item3 in m_tempLocationsSaveClone) - { - writer.Write(item3.m_location.m_prefabName); - writer.Write(item3.m_position.x); - writer.Write(item3.m_position.y); - writer.Write(item3.m_position.z); - writer.Write(item3.m_placed); - } - m_tempGeneratedZonesSaveClone.Clear(); - m_tempGeneratedZonesSaveClone = null; - m_tempGlobalKeysSaveClone.Clear(); - m_tempGlobalKeysSaveClone = null; - m_tempLocationsSaveClone.Clear(); - m_tempLocationsSaveClone = null; - } - - public void Load(BinaryReader reader, int version) - { - m_generatedZones.Clear(); - int num = reader.ReadInt32(); - for (int i = 0; i < num; i++) - { - Vector2i item = default(Vector2i); - item.x = reader.ReadInt32(); - item.y = reader.ReadInt32(); - m_generatedZones.Add(item); - } - if (version < 13) - { - return; - } - int num2 = reader.ReadInt32(); - int num3 = ((version >= 21) ? reader.ReadInt32() : 0); - if (num2 != m_pgwVersion) - { - m_generatedZones.Clear(); - } - if (version >= 14) - { - m_globalKeys.Clear(); - int num4 = reader.ReadInt32(); - for (int j = 0; j < num4; j++) - { - string item2 = reader.ReadString(); - m_globalKeys.Add(item2); - } - } - if (version < 18) - { - return; - } - if (version >= 20) - { - m_locationsGenerated = reader.ReadBoolean(); - } - m_locationInstances.Clear(); - int num5 = reader.ReadInt32(); - for (int k = 0; k < num5; k++) - { - string text = reader.ReadString(); - Vector3 zero = Vector3.zero; - zero.x = reader.ReadSingle(); - zero.y = reader.ReadSingle(); - zero.z = reader.ReadSingle(); - bool generated = false; - if (version >= 19) - { - generated = reader.ReadBoolean(); - } - ZoneLocation location = GetLocation(text); - if (location != null) - { - RegisterLocation(location, zero, generated); - } - else - { - ZLog.DevLog("Failed to find location " + text); - } - } - ZLog.Log("Loaded " + num5 + " locations"); - if (num2 != m_pgwVersion) - { - m_locationInstances.Clear(); - m_locationsGenerated = false; - } - if (num3 != m_locationVersion) - { - m_locationsGenerated = false; - } - } - - private void Update() - { - if (ZNet.GetConnectionStatus() != ZNet.ConnectionStatus.Connected) - { - return; - } - m_updateTimer += Time.deltaTime; - if (!(m_updateTimer > 0.1f)) - { - return; - } - m_updateTimer = 0f; - bool flag = CreateLocalZones(ZNet.instance.GetReferencePosition()); - UpdateTTL(0.1f); - if (!ZNet.instance.IsServer() || flag) - { - return; - } - CreateGhostZones(ZNet.instance.GetReferencePosition()); - foreach (ZNetPeer peer in ZNet.instance.GetPeers()) - { - CreateGhostZones(peer.GetRefPos()); - } - } - - private bool CreateGhostZones(Vector3 refPoint) - { - Vector2i zone = GetZone(refPoint); - if (!IsZoneGenerated(zone) && SpawnZone(zone, SpawnMode.Ghost, out var _)) - { - return true; - } - int num = m_activeArea + m_activeDistantArea; - for (int i = zone.y - num; i <= zone.y + num; i++) - { - for (int j = zone.x - num; j <= zone.x + num; j++) - { - Vector2i zoneID = new Vector2i(j, i); - if (!IsZoneGenerated(zoneID) && SpawnZone(zoneID, SpawnMode.Ghost, out var _)) - { - return true; - } - } - } - return false; - } - - private bool CreateLocalZones(Vector3 refPoint) - { - Vector2i zone = GetZone(refPoint); - if (PokeLocalZone(zone)) - { - return true; - } - for (int i = zone.y - m_activeArea; i <= zone.y + m_activeArea; i++) - { - for (int j = zone.x - m_activeArea; j <= zone.x + m_activeArea; j++) - { - Vector2i vector2i = new Vector2i(j, i); - if (!(vector2i == zone) && PokeLocalZone(vector2i)) - { - return true; - } - } - } - return false; - } - - private bool PokeLocalZone(Vector2i zoneID) - { - if (m_zones.TryGetValue(zoneID, out var value)) - { - value.m_ttl = 0f; - return false; - } - SpawnMode mode = ((!ZNet.instance.IsServer() || IsZoneGenerated(zoneID)) ? SpawnMode.Client : SpawnMode.Full); - if (SpawnZone(zoneID, mode, out var root)) - { - ZoneData zoneData = new ZoneData(); - zoneData.m_root = root; - m_zones.Add(zoneID, zoneData); - return true; - } - return false; - } - - public bool IsZoneLoaded(Vector3 point) - { - Vector2i zone = GetZone(point); - return IsZoneLoaded(zone); - } - - public bool IsZoneLoaded(Vector2i zoneID) - { - return m_zones.ContainsKey(zoneID); - } - - private bool SpawnZone(Vector2i zoneID, SpawnMode mode, out GameObject root) - { - Vector3 zonePos = GetZonePos(zoneID); - Heightmap componentInChildren = m_zonePrefab.GetComponentInChildren<Heightmap>(); - if (!HeightmapBuilder.instance.IsTerrainReady(zonePos, componentInChildren.m_width, componentInChildren.m_scale, componentInChildren.m_isDistantLod, WorldGenerator.instance)) - { - root = null; - return false; - } - root = UnityEngine.Object.Instantiate(m_zonePrefab, zonePos, Quaternion.identity); - if ((mode == SpawnMode.Ghost || mode == SpawnMode.Full) && !IsZoneGenerated(zoneID)) - { - Heightmap componentInChildren2 = root.GetComponentInChildren<Heightmap>(); - m_tempClearAreas.Clear(); - m_tempSpawnedObjects.Clear(); - PlaceLocations(zoneID, zonePos, root.transform, componentInChildren2, m_tempClearAreas, mode, m_tempSpawnedObjects); - PlaceVegetation(zoneID, zonePos, root.transform, componentInChildren2, m_tempClearAreas, mode, m_tempSpawnedObjects); - PlaceZoneCtrl(zoneID, zonePos, mode, m_tempSpawnedObjects); - if (mode == SpawnMode.Ghost) - { - foreach (GameObject tempSpawnedObject in m_tempSpawnedObjects) - { - UnityEngine.Object.Destroy(tempSpawnedObject); - } - m_tempSpawnedObjects.Clear(); - UnityEngine.Object.Destroy(root); - root = null; - } - SetZoneGenerated(zoneID); - } - return true; - } - - private void PlaceZoneCtrl(Vector2i zoneID, Vector3 zoneCenterPos, SpawnMode mode, List<GameObject> spawnedObjects) - { - if (mode == SpawnMode.Full || mode == SpawnMode.Ghost) - { - if (mode == SpawnMode.Ghost) - { - ZNetView.StartGhostInit(); - } - GameObject gameObject = UnityEngine.Object.Instantiate(m_zoneCtrlPrefab, zoneCenterPos, Quaternion.identity); - gameObject.GetComponent<ZNetView>().GetZDO().SetPGWVersion(m_pgwVersion); - if (mode == SpawnMode.Ghost) - { - spawnedObjects.Add(gameObject); - ZNetView.FinishGhostInit(); - } - } - } - - private Vector3 GetRandomPointInRadius(Vector3 center, float radius) - { - float f = UnityEngine.Random.value * (float)Math.PI * 2f; - float num = UnityEngine.Random.Range(0f, radius); - return center + new Vector3(Mathf.Sin(f) * num, 0f, Mathf.Cos(f) * num); - } - - private void PlaceVegetation(Vector2i zoneID, Vector3 zoneCenterPos, Transform parent, Heightmap hmap, List<ClearArea> clearAreas, SpawnMode mode, List<GameObject> spawnedObjects) - { - UnityEngine.Random.State state = UnityEngine.Random.state; - int seed = WorldGenerator.instance.GetSeed(); - float num = m_zoneSize / 2f; - int num2 = 1; - foreach (ZoneVegetation item in m_vegetation) - { - num2++; - if (!item.m_enable || !hmap.HaveBiome(item.m_biome)) - { - continue; - } - UnityEngine.Random.InitState(seed + zoneID.x * 4271 + zoneID.y * 9187 + item.m_prefab.name.GetStableHashCode()); - int num3 = 1; - if (item.m_max < 1f) - { - if (UnityEngine.Random.value > item.m_max) - { - continue; - } - } - else - { - num3 = UnityEngine.Random.Range((int)item.m_min, (int)item.m_max + 1); - } - bool flag = item.m_prefab.GetComponent<ZNetView>() != null; - float num4 = Mathf.Cos((float)Math.PI / 180f * item.m_maxTilt); - float num5 = Mathf.Cos((float)Math.PI / 180f * item.m_minTilt); - float num6 = num - item.m_groupRadius; - int num7 = (item.m_forcePlacement ? (num3 * 50) : num3); - int num8 = 0; - for (int i = 0; i < num7; i++) - { - Vector3 vector = new Vector3(UnityEngine.Random.Range(zoneCenterPos.x - num6, zoneCenterPos.x + num6), 0f, UnityEngine.Random.Range(zoneCenterPos.z - num6, zoneCenterPos.z + num6)); - int num9 = UnityEngine.Random.Range(item.m_groupSizeMin, item.m_groupSizeMax + 1); - bool flag2 = false; - for (int j = 0; j < num9; j++) - { - Vector3 p = ((j == 0) ? vector : GetRandomPointInRadius(vector, item.m_groupRadius)); - float num10 = UnityEngine.Random.Range(0, 360); - float num11 = UnityEngine.Random.Range(item.m_scaleMin, item.m_scaleMax); - float x = UnityEngine.Random.Range(0f - item.m_randTilt, item.m_randTilt); - float z = UnityEngine.Random.Range(0f - item.m_randTilt, item.m_randTilt); - if (item.m_blockCheck && IsBlocked(p)) - { - continue; - } - GetGroundData(ref p, out var normal, out var biome, out var biomeArea, out var hmap2); - if ((item.m_biome & biome) == 0 || (item.m_biomeArea & biomeArea) == 0) - { - continue; - } - float num12 = p.y - m_waterLevel; - if (num12 < item.m_minAltitude || num12 > item.m_maxAltitude) - { - continue; - } - if (item.m_minOceanDepth != item.m_maxOceanDepth) - { - float oceanDepth = hmap2.GetOceanDepth(p); - if (oceanDepth < item.m_minOceanDepth || oceanDepth > item.m_maxOceanDepth) - { - continue; - } - } - if (normal.y < num4 || normal.y > num5) - { - continue; - } - if (item.m_terrainDeltaRadius > 0f) - { - GetTerrainDelta(p, item.m_terrainDeltaRadius, out var delta, out var _); - if (delta > item.m_maxTerrainDelta || delta < item.m_minTerrainDelta) - { - continue; - } - } - if (item.m_inForest) - { - float forestFactor = WorldGenerator.GetForestFactor(p); - if (forestFactor < item.m_forestTresholdMin || forestFactor > item.m_forestTresholdMax) - { - continue; - } - } - if (InsideClearArea(clearAreas, p)) - { - continue; - } - if (item.m_snapToWater) - { - p.y = m_waterLevel; - } - p.y += item.m_groundOffset; - Quaternion identity = Quaternion.identity; - identity = ((!(item.m_chanceToUseGroundTilt > 0f) || !(UnityEngine.Random.value <= item.m_chanceToUseGroundTilt)) ? Quaternion.Euler(x, num10, z) : Quaternion.AngleAxis(num10, normal)); - if (flag) - { - if (mode == SpawnMode.Full || mode == SpawnMode.Ghost) - { - if (mode == SpawnMode.Ghost) - { - ZNetView.StartGhostInit(); - } - GameObject gameObject = UnityEngine.Object.Instantiate(item.m_prefab, p, identity); - ZNetView component = gameObject.GetComponent<ZNetView>(); - component.SetLocalScale(new Vector3(num11, num11, num11)); - component.GetZDO().SetPGWVersion(m_pgwVersion); - if (mode == SpawnMode.Ghost) - { - spawnedObjects.Add(gameObject); - ZNetView.FinishGhostInit(); - } - } - } - else - { - GameObject obj = UnityEngine.Object.Instantiate(item.m_prefab, p, identity); - obj.transform.localScale = new Vector3(num11, num11, num11); - obj.transform.SetParent(parent, worldPositionStays: true); - } - flag2 = true; - } - if (flag2) - { - num8++; - } - if (num8 >= num3) - { - break; - } - } - } - UnityEngine.Random.state = state; - } - - private bool InsideClearArea(List<ClearArea> areas, Vector3 point) - { - foreach (ClearArea area in areas) - { - if (point.x > area.m_center.x - area.m_radius && point.x < area.m_center.x + area.m_radius && point.z > area.m_center.z - area.m_radius && point.z < area.m_center.z + area.m_radius) - { - return true; - } - } - return false; - } - - private ZoneLocation GetLocation(int hash) - { - if (m_locationsByHash.TryGetValue(hash, out var value)) - { - return value; - } - return null; - } - - private ZoneLocation GetLocation(string name) - { - foreach (ZoneLocation location in m_locations) - { - if (location.m_prefabName == name) - { - return location; - } - } - return null; - } - - private void ClearNonPlacedLocations() - { - Dictionary<Vector2i, LocationInstance> dictionary = new Dictionary<Vector2i, LocationInstance>(); - foreach (KeyValuePair<Vector2i, LocationInstance> locationInstance in m_locationInstances) - { - if (locationInstance.Value.m_placed) - { - dictionary.Add(locationInstance.Key, locationInstance.Value); - } - } - m_locationInstances = dictionary; - } - - private void CheckLocationDuplicates() - { - ZLog.Log("Checking for location duplicates"); - for (int i = 0; i < m_locations.Count; i++) - { - ZoneLocation zoneLocation = m_locations[i]; - if (!zoneLocation.m_enable) - { - continue; - } - for (int j = i + 1; j < m_locations.Count; j++) - { - ZoneLocation zoneLocation2 = m_locations[j]; - if (zoneLocation2.m_enable && zoneLocation.m_prefabName == zoneLocation2.m_prefabName) - { - ZLog.LogWarning("Two locations points to the same location prefab " + zoneLocation.m_prefabName); - } - } - } - } - - public void GenerateLocations() - { - if (!Application.isPlaying) - { - ZLog.Log("Setting up locations"); - SetupLocations(); - } - ZLog.Log("Generating locations"); - DateTime now = DateTime.Now; - m_locationsGenerated = true; - UnityEngine.Random.State state = UnityEngine.Random.state; - CheckLocationDuplicates(); - ClearNonPlacedLocations(); - foreach (ZoneLocation item in m_locations.OrderByDescending((ZoneLocation a) => a.m_prioritized)) - { - if (item.m_enable && item.m_quantity != 0) - { - GenerateLocations(item); - } - } - UnityEngine.Random.state = state; - ZLog.Log(" Done generating locations, duration:" + (DateTime.Now - now).TotalMilliseconds + " ms"); - } - - private int CountNrOfLocation(ZoneLocation location) - { - int num = 0; - foreach (LocationInstance value in m_locationInstances.Values) - { - if (value.m_location.m_prefabName == location.m_prefabName) - { - num++; - } - } - if (num > 0) - { - ZLog.Log("Old location found " + location.m_prefabName + " x " + num); - } - return num; - } - - private void GenerateLocations(ZoneLocation location) - { - DateTime now = DateTime.Now; - UnityEngine.Random.InitState(WorldGenerator.instance.GetSeed() + location.m_prefabName.GetStableHashCode()); - int num = 0; - int num2 = 0; - int num3 = 0; - int num4 = 0; - int num5 = 0; - int num6 = 0; - int num7 = 0; - int num8 = 0; - float locationRadius = Mathf.Max(location.m_exteriorRadius, location.m_interiorRadius); - int num9 = 0; - int num10 = CountNrOfLocation(location); - float num11 = 10000f; - if (location.m_centerFirst) - { - num11 = location.m_minDistance; - } - if (location.m_unique && num10 > 0) - { - return; - } - for (int i = 0; i < 100000; i++) - { - if (num10 >= location.m_quantity) - { - break; - } - Vector2i randomZone = GetRandomZone(num11); - if (location.m_centerFirst) - { - num11 += 1f; - } - if (m_locationInstances.ContainsKey(randomZone)) - { - num++; - } - else - { - if (IsZoneGenerated(randomZone)) - { - continue; - } - Vector3 zonePos = GetZonePos(randomZone); - Heightmap.BiomeArea biomeArea = WorldGenerator.instance.GetBiomeArea(zonePos); - if ((location.m_biomeArea & biomeArea) == 0) - { - num4++; - continue; - } - for (int j = 0; j < 20; j++) - { - num9++; - Vector3 randomPointInZone = GetRandomPointInZone(randomZone, locationRadius); - float magnitude = randomPointInZone.magnitude; - if (location.m_minDistance != 0f && magnitude < location.m_minDistance) - { - num2++; - continue; - } - if (location.m_maxDistance != 0f && magnitude > location.m_maxDistance) - { - num2++; - continue; - } - Heightmap.Biome biome = WorldGenerator.instance.GetBiome(randomPointInZone); - if ((location.m_biome & biome) == 0) - { - num3++; - continue; - } - randomPointInZone.y = WorldGenerator.instance.GetHeight(randomPointInZone.x, randomPointInZone.z); - float num12 = randomPointInZone.y - m_waterLevel; - if (num12 < location.m_minAltitude || num12 > location.m_maxAltitude) - { - num5++; - continue; - } - if (location.m_inForest) - { - float forestFactor = WorldGenerator.GetForestFactor(randomPointInZone); - if (forestFactor < location.m_forestTresholdMin || forestFactor > location.m_forestTresholdMax) - { - num6++; - continue; - } - } - WorldGenerator.instance.GetTerrainDelta(randomPointInZone, location.m_exteriorRadius, out var delta, out var _); - if (delta > location.m_maxTerrainDelta || delta < location.m_minTerrainDelta) - { - num8++; - continue; - } - if (location.m_minDistanceFromSimilar > 0f && HaveLocationInRange(location.m_prefabName, location.m_group, randomPointInZone, location.m_minDistanceFromSimilar)) - { - num7++; - continue; - } - RegisterLocation(location, randomPointInZone, generated: false); - num10++; - break; - } - } - } - if (num10 < location.m_quantity) - { - ZLog.LogWarning("Failed to place all " + location.m_prefabName + ", placed " + num10 + " out of " + location.m_quantity); - ZLog.DevLog("errorLocationInZone " + num); - ZLog.DevLog("errorCenterDistance " + num2); - ZLog.DevLog("errorBiome " + num3); - ZLog.DevLog("errorBiomeArea " + num4); - ZLog.DevLog("errorAlt " + num5); - ZLog.DevLog("errorForest " + num6); - ZLog.DevLog("errorSimilar " + num7); - ZLog.DevLog("errorTerrainDelta " + num8); - } - _ = DateTime.Now - now; - } - - private Vector2i GetRandomZone(float range) - { - int num = (int)range / (int)m_zoneSize; - Vector2i vector2i; - do - { - vector2i = new Vector2i(UnityEngine.Random.Range(-num, num), UnityEngine.Random.Range(-num, num)); - } - while (!(GetZonePos(vector2i).magnitude < 10000f)); - return vector2i; - } - - private Vector3 GetRandomPointInZone(Vector2i zone, float locationRadius) - { - Vector3 zonePos = GetZonePos(zone); - float num = m_zoneSize / 2f; - float x = UnityEngine.Random.Range(0f - num + locationRadius, num - locationRadius); - float z = UnityEngine.Random.Range(0f - num + locationRadius, num - locationRadius); - return zonePos + new Vector3(x, 0f, z); - } - - private Vector3 GetRandomPointInZone(float locationRadius) - { - Vector3 point = new Vector3(UnityEngine.Random.Range(-10000f, 10000f), 0f, UnityEngine.Random.Range(-10000f, 10000f)); - Vector2i zone = GetZone(point); - Vector3 zonePos = GetZonePos(zone); - float num = m_zoneSize / 2f; - return new Vector3(UnityEngine.Random.Range(zonePos.x - num + locationRadius, zonePos.x + num - locationRadius), 0f, UnityEngine.Random.Range(zonePos.z - num + locationRadius, zonePos.z + num - locationRadius)); - } - - private void PlaceLocations(Vector2i zoneID, Vector3 zoneCenterPos, Transform parent, Heightmap hmap, List<ClearArea> clearAreas, SpawnMode mode, List<GameObject> spawnedObjects) - { - if (!m_locationsGenerated) - { - GenerateLocations(); - } - DateTime now = DateTime.Now; - if (m_locationInstances.TryGetValue(zoneID, out var value) && !value.m_placed) - { - Vector3 p = value.m_position; - GetGroundData(ref p, out var _, out var _, out var _, out var _); - if (value.m_location.m_snapToWater) - { - p.y = m_waterLevel; - } - if (value.m_location.m_location.m_clearArea) - { - ClearArea item = new ClearArea(p, value.m_location.m_exteriorRadius); - clearAreas.Add(item); - } - Quaternion rot = Quaternion.identity; - if (value.m_location.m_slopeRotation) - { - GetTerrainDelta(p, value.m_location.m_exteriorRadius, out var _, out var slopeDirection); - Vector3 forward = new Vector3(slopeDirection.x, 0f, slopeDirection.z); - forward.Normalize(); - rot = Quaternion.LookRotation(forward); - Vector3 eulerAngles = rot.eulerAngles; - eulerAngles.y = Mathf.Round(eulerAngles.y / 22.5f) * 22.5f; - rot.eulerAngles = eulerAngles; - } - else if (value.m_location.m_randomRotation) - { - rot = Quaternion.Euler(0f, (float)UnityEngine.Random.Range(0, 16) * 22.5f, 0f); - } - int seed = WorldGenerator.instance.GetSeed() + zoneID.x * 4271 + zoneID.y * 9187; - SpawnLocation(value.m_location, seed, p, rot, mode, spawnedObjects); - value.m_placed = true; - m_locationInstances[zoneID] = value; - TimeSpan timeSpan = DateTime.Now - now; - ZLog.Log(string.Concat("Placed locations in zone ", zoneID, " duration ", timeSpan.TotalMilliseconds, " ms")); - if (value.m_location.m_unique) - { - RemoveUnplacedLocations(value.m_location); - } - if (value.m_location.m_iconPlaced) - { - SendLocationIcons(ZRoutedRpc.Everybody); - } - } - } - - private void RemoveUnplacedLocations(ZoneLocation location) - { - List<Vector2i> list = new List<Vector2i>(); - foreach (KeyValuePair<Vector2i, LocationInstance> locationInstance in m_locationInstances) - { - if (locationInstance.Value.m_location == location && !locationInstance.Value.m_placed) - { - list.Add(locationInstance.Key); - } - } - foreach (Vector2i item in list) - { - m_locationInstances.Remove(item); - } - ZLog.DevLog("Removed " + list.Count + " unplaced locations of type " + location.m_prefabName); - } - - public bool TestSpawnLocation(string name, Vector3 pos) - { - if (!ZNet.instance.IsServer()) - { - return false; - } - ZoneLocation location = GetLocation(name); - if (location == null) - { - ZLog.Log("Missing location:" + name); - Console.instance.Print("Missing location:" + name); - return false; - } - if (location.m_prefab == null) - { - ZLog.Log("Missing prefab in location:" + name); - Console.instance.Print("Missing location:" + name); - return false; - } - float num = Mathf.Max(location.m_exteriorRadius, location.m_interiorRadius); - Vector2i zone = GetZone(pos); - Vector3 zonePos = GetZonePos(zone); - pos.x = Mathf.Clamp(pos.x, zonePos.x - m_zoneSize / 2f + num, zonePos.x + m_zoneSize / 2f - num); - pos.z = Mathf.Clamp(pos.z, zonePos.z - m_zoneSize / 2f + num, zonePos.z + m_zoneSize / 2f - num); - ZLog.Log(string.Concat("radius ", num, " ", zonePos, " ", pos)); - MessageHud.instance.ShowMessage(MessageHud.MessageType.Center, "Location spawned, world saving DISABLED until restart"); - m_didZoneTest = true; - float y = (float)UnityEngine.Random.Range(0, 16) * 22.5f; - List<GameObject> spawnedGhostObjects = new List<GameObject>(); - SpawnLocation(location, UnityEngine.Random.Range(0, 99999), pos, Quaternion.Euler(0f, y, 0f), SpawnMode.Full, spawnedGhostObjects); - return true; - } - - public GameObject SpawnProxyLocation(int hash, int seed, Vector3 pos, Quaternion rot) - { - ZoneLocation location = GetLocation(hash); - if (location == null) - { - ZLog.LogWarning("Missing location:" + hash); - return null; - } - List<GameObject> spawnedGhostObjects = new List<GameObject>(); - return SpawnLocation(location, seed, pos, rot, SpawnMode.Client, spawnedGhostObjects); - } - - private GameObject SpawnLocation(ZoneLocation location, int seed, Vector3 pos, Quaternion rot, SpawnMode mode, List<GameObject> spawnedGhostObjects) - { - Vector3 position = location.m_prefab.transform.position; - Quaternion quaternion = Quaternion.Inverse(location.m_prefab.transform.rotation); - UnityEngine.Random.InitState(seed); - if (mode == SpawnMode.Full || mode == SpawnMode.Ghost) - { - foreach (ZNetView netView in location.m_netViews) - { - netView.gameObject.SetActive(value: true); - } - foreach (RandomSpawn randomSpawn in location.m_randomSpawns) - { - randomSpawn.Randomize(); - } - WearNTear.m_randomInitialDamage = location.m_location.m_applyRandomDamage; - foreach (ZNetView netView2 in location.m_netViews) - { - if (netView2.gameObject.activeSelf) - { - Vector3 vector = netView2.gameObject.transform.position - position; - Vector3 position2 = pos + rot * vector; - Quaternion quaternion2 = quaternion * netView2.gameObject.transform.rotation; - Quaternion rotation = rot * quaternion2; - if (mode == SpawnMode.Ghost) - { - ZNetView.StartGhostInit(); - } - GameObject gameObject = UnityEngine.Object.Instantiate(netView2.gameObject, position2, rotation); - gameObject.GetComponent<ZNetView>().GetZDO().SetPGWVersion(m_pgwVersion); - DungeonGenerator component = gameObject.GetComponent<DungeonGenerator>(); - if ((bool)component) - { - component.Generate(mode); - } - if (mode == SpawnMode.Ghost) - { - spawnedGhostObjects.Add(gameObject); - ZNetView.FinishGhostInit(); - } - } - } - WearNTear.m_randomInitialDamage = false; - CreateLocationProxy(location, seed, pos, rot, mode, spawnedGhostObjects); - SnapToGround.SnappAll(); - return null; - } - foreach (RandomSpawn randomSpawn2 in location.m_randomSpawns) - { - randomSpawn2.Randomize(); - } - foreach (ZNetView netView3 in location.m_netViews) - { - netView3.gameObject.SetActive(value: false); - } - GameObject obj = UnityEngine.Object.Instantiate(location.m_prefab, pos, rot); - obj.SetActive(value: true); - SnapToGround.SnappAll(); - return obj; - } - - private void CreateLocationProxy(ZoneLocation location, int seed, Vector3 pos, Quaternion rotation, SpawnMode mode, List<GameObject> spawnedGhostObjects) - { - if (mode == SpawnMode.Ghost) - { - ZNetView.StartGhostInit(); - } - GameObject gameObject = UnityEngine.Object.Instantiate(m_locationProxyPrefab, pos, rotation); - LocationProxy component = gameObject.GetComponent<LocationProxy>(); - bool spawnNow = mode == SpawnMode.Full; - component.SetLocation(location.m_prefab.name, seed, spawnNow, m_pgwVersion); - if (mode == SpawnMode.Ghost) - { - spawnedGhostObjects.Add(gameObject); - ZNetView.FinishGhostInit(); - } - } - - private void RegisterLocation(ZoneLocation location, Vector3 pos, bool generated) - { - LocationInstance value = default(LocationInstance); - value.m_location = location; - value.m_position = pos; - value.m_placed = generated; - Vector2i zone = GetZone(pos); - if (m_locationInstances.ContainsKey(zone)) - { - ZLog.LogWarning("Location already exist in zone " + zone); - } - else - { - m_locationInstances.Add(zone, value); - } - } - - private bool HaveLocationInRange(string prefabName, string group, Vector3 p, float radius) - { - foreach (LocationInstance value in m_locationInstances.Values) - { - if ((value.m_location.m_prefabName == prefabName || (group.Length > 0 && group == value.m_location.m_group)) && Vector3.Distance(value.m_position, p) < radius) - { - return true; - } - } - return false; - } - - public bool GetLocationIcon(string name, out Vector3 pos) - { - if (ZNet.instance.IsServer()) - { - foreach (KeyValuePair<Vector2i, LocationInstance> locationInstance in m_locationInstances) - { - if ((locationInstance.Value.m_location.m_iconAlways || (locationInstance.Value.m_location.m_iconPlaced && locationInstance.Value.m_placed)) && locationInstance.Value.m_location.m_prefabName == name) - { - pos = locationInstance.Value.m_position; - return true; - } - } - } - else - { - foreach (KeyValuePair<Vector3, string> locationIcon in m_locationIcons) - { - if (locationIcon.Value == name) - { - pos = locationIcon.Key; - return true; - } - } - } - pos = Vector3.zero; - return false; - } - - public void GetLocationIcons(Dictionary<Vector3, string> icons) - { - if (ZNet.instance.IsServer()) - { - foreach (LocationInstance value in m_locationInstances.Values) - { - if (value.m_location.m_iconAlways || (value.m_location.m_iconPlaced && value.m_placed)) - { - icons[value.m_position] = value.m_location.m_prefabName; - } - } - return; - } - foreach (KeyValuePair<Vector3, string> locationIcon in m_locationIcons) - { - icons.Add(locationIcon.Key, locationIcon.Value); - } - } - - private void GetTerrainDelta(Vector3 center, float radius, out float delta, out Vector3 slopeDirection) - { - int num = 10; - float num2 = -999999f; - float num3 = 999999f; - Vector3 vector = center; - Vector3 vector2 = center; - for (int i = 0; i < num; i++) - { - Vector2 vector3 = UnityEngine.Random.insideUnitCircle * radius; - Vector3 vector4 = center + new Vector3(vector3.x, 0f, vector3.y); - float groundHeight = GetGroundHeight(vector4); - if (groundHeight < num3) - { - num3 = groundHeight; - vector2 = vector4; - } - if (groundHeight > num2) - { - num2 = groundHeight; - vector = vector4; - } - } - delta = num2 - num3; - slopeDirection = Vector3.Normalize(vector2 - vector); - } - - public bool IsBlocked(Vector3 p) - { - p.y += 2000f; - if (Physics.Raycast(p, Vector3.down, 10000f, m_blockRayMask)) - { - return true; - } - return false; - } - - public float GetAverageGroundHeight(Vector3 p, float radius) - { - Vector3 origin = p; - origin.y = 6000f; - if (Physics.Raycast(origin, Vector3.down, out var hitInfo, 10000f, m_terrainRayMask)) - { - return hitInfo.point.y; - } - return p.y; - } - - public float GetGroundHeight(Vector3 p) - { - Vector3 origin = p; - origin.y = 6000f; - if (Physics.Raycast(origin, Vector3.down, out var hitInfo, 10000f, m_terrainRayMask)) - { - return hitInfo.point.y; - } - return p.y; - } - - public bool GetGroundHeight(Vector3 p, out float height) - { - p.y = 6000f; - if (Physics.Raycast(p, Vector3.down, out var hitInfo, 10000f, m_terrainRayMask)) - { - height = hitInfo.point.y; - return true; - } - height = 0f; - return false; - } - - public float GetSolidHeight(Vector3 p) - { - Vector3 origin = p; - origin.y += 1000f; - if (Physics.Raycast(origin, Vector3.down, out var hitInfo, 2000f, m_solidRayMask)) - { - return hitInfo.point.y; - } - return p.y; - } - - public bool GetSolidHeight(Vector3 p, out float height) - { - p.y += 1000f; - if (Physics.Raycast(p, Vector3.down, out var hitInfo, 2000f, m_solidRayMask) && !hitInfo.collider.attachedRigidbody) - { - height = hitInfo.point.y; - return true; - } - height = 0f; - return false; - } - - public bool GetSolidHeight(Vector3 p, float radius, out float height, Transform ignore) - { - height = p.y - 1000f; - p.y += 1000f; - int num = ((!(radius <= 0f)) ? Physics.SphereCastNonAlloc(p, radius, Vector3.down, rayHits, 2000f, m_solidRayMask) : Physics.RaycastNonAlloc(p, Vector3.down, rayHits, 2000f, m_solidRayMask)); - bool result = false; - for (int i = 0; i < num; i++) - { - RaycastHit raycastHit = rayHits[i]; - Collider collider = raycastHit.collider; - if (!(collider.attachedRigidbody != null) && (!(ignore != null) || !Utils.IsParent(collider.transform, ignore))) - { - if (raycastHit.point.y > height) - { - height = raycastHit.point.y; - } - result = true; - } - } - return result; - } - - public bool GetSolidHeight(Vector3 p, out float height, out Vector3 normal) - { - GameObject go; - return GetSolidHeight(p, out height, out normal, out go); - } - - public bool GetSolidHeight(Vector3 p, out float height, out Vector3 normal, out GameObject go) - { - p.y += 1000f; - if (Physics.Raycast(p, Vector3.down, out var hitInfo, 2000f, m_solidRayMask) && !hitInfo.collider.attachedRigidbody) - { - height = hitInfo.point.y; - normal = hitInfo.normal; - go = hitInfo.collider.gameObject; - return true; - } - height = 0f; - normal = Vector3.zero; - go = null; - return false; - } - - public bool FindFloor(Vector3 p, out float height) - { - if (Physics.Raycast(p + Vector3.up * 1f, Vector3.down, out var hitInfo, 1000f, m_solidRayMask)) - { - height = hitInfo.point.y; - return true; - } - height = 0f; - return false; - } - - public void GetGroundData(ref Vector3 p, out Vector3 normal, out Heightmap.Biome biome, out Heightmap.BiomeArea biomeArea, out Heightmap hmap) - { - biome = Heightmap.Biome.None; - biomeArea = Heightmap.BiomeArea.Everything; - hmap = null; - if (Physics.Raycast(p + Vector3.up * 5000f, Vector3.down, out var hitInfo, 10000f, m_terrainRayMask)) - { - p.y = hitInfo.point.y; - normal = hitInfo.normal; - Heightmap component = hitInfo.collider.GetComponent<Heightmap>(); - if ((bool)component) - { - biome = component.GetBiome(hitInfo.point); - biomeArea = component.GetBiomeArea(); - hmap = component; - } - } - else - { - normal = Vector3.up; - } - } - - private void UpdateTTL(float dt) - { - foreach (KeyValuePair<Vector2i, ZoneData> zone in m_zones) - { - zone.Value.m_ttl += dt; - } - foreach (KeyValuePair<Vector2i, ZoneData> zone2 in m_zones) - { - if (zone2.Value.m_ttl > m_zoneTTL && !ZNetScene.instance.HaveInstanceInSector(zone2.Key)) - { - UnityEngine.Object.Destroy(zone2.Value.m_root); - m_zones.Remove(zone2.Key); - break; - } - } - } - - public void GetVegetation(Heightmap.Biome biome, List<ZoneVegetation> vegetation) - { - foreach (ZoneVegetation item in m_vegetation) - { - if ((item.m_biome & biome) != 0 || item.m_biome == biome) - { - vegetation.Add(item); - } - } - } - - public void GetLocations(Heightmap.Biome biome, List<ZoneLocation> locations, bool skipDisabled) - { - foreach (ZoneLocation location in m_locations) - { - if (((location.m_biome & biome) != 0 || location.m_biome == biome) && (!skipDisabled || location.m_enable)) - { - locations.Add(location); - } - } - } - - public bool FindClosestLocation(string name, Vector3 point, out LocationInstance closest) - { - float num = 999999f; - closest = default(LocationInstance); - bool result = false; - foreach (LocationInstance value in m_locationInstances.Values) - { - float num2 = Vector3.Distance(value.m_position, point); - if (value.m_location.m_prefabName == name && num2 < num) - { - num = num2; - closest = value; - result = true; - } - } - return result; - } - - public Vector2i GetZone(Vector3 point) - { - int x = Mathf.FloorToInt((point.x + m_zoneSize / 2f) / m_zoneSize); - int y = Mathf.FloorToInt((point.z + m_zoneSize / 2f) / m_zoneSize); - return new Vector2i(x, y); - } - - public Vector3 GetZonePos(Vector2i id) - { - return new Vector3((float)id.x * m_zoneSize, 0f, (float)id.y * m_zoneSize); - } - - private void SetZoneGenerated(Vector2i zoneID) - { - m_generatedZones.Add(zoneID); - } - - private bool IsZoneGenerated(Vector2i zoneID) - { - return m_generatedZones.Contains(zoneID); - } - - public bool SkipSaving() - { - if (!m_error) - { - return m_didZoneTest; - } - return true; - } - - public void ResetGlobalKeys() - { - m_globalKeys.Clear(); - SendGlobalKeys(ZRoutedRpc.Everybody); - } - - public void SetGlobalKey(string name) - { - ZRoutedRpc.instance.InvokeRoutedRPC("SetGlobalKey", name); - } - - public bool GetGlobalKey(string name) - { - return m_globalKeys.Contains(name); - } - - private void RPC_SetGlobalKey(long sender, string name) - { - if (!m_globalKeys.Contains(name)) - { - m_globalKeys.Add(name); - SendGlobalKeys(ZRoutedRpc.Everybody); - } - } - - public List<string> GetGlobalKeys() - { - return new List<string>(m_globalKeys); - } - - public Dictionary<Vector2i, LocationInstance>.ValueCollection GetLocationList() - { - return m_locationInstances.Values; - } -} |