From 0f2a3dade4cf87c6d2a9ace5966dc41fc25f56bd Mon Sep 17 00:00:00 2001 From: AlessandroCH Date: Sun, 27 Jul 2025 15:58:32 +0200 Subject: [PATCH] bug fix --- Campofinale/Game/Entities/Entity.cs | 1 + Campofinale/Game/SceneManager.cs | 14 ++++++++++---- .../Cs/HandleCsSceneSetLevelScriptActive.cs | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/Campofinale/Game/Entities/Entity.cs b/Campofinale/Game/Entities/Entity.cs index df9363a..13891d8 100644 --- a/Campofinale/Game/Entities/Entity.cs +++ b/Campofinale/Game/Entities/Entity.cs @@ -23,6 +23,7 @@ namespace Campofinale.Game.Entities public int sceneNumId; public bool spawned = false; public bool defaultHide = false; + public bool scriptSpawn = false; public Entity() { diff --git a/Campofinale/Game/SceneManager.cs b/Campofinale/Game/SceneManager.cs index 3602800..a57a885 100644 --- a/Campofinale/Game/SceneManager.cs +++ b/Campofinale/Game/SceneManager.cs @@ -412,7 +412,7 @@ namespace Campofinale.Game if(e.spawned==false && (GetActiveScript(e.belongLevelScriptId) || e.belongLevelScriptId==0)) { - if(currentAreaRange.IsObjectInside(e.Position)) + if(currentAreaRange.IsObjectInside(e.Position) || sceneNumId==87) if (!e.defaultHide) { toSpawn.Add(e); @@ -435,7 +435,7 @@ namespace Campofinale.Game List toDespawn=new(); foreach(Entity en in GetEntityExcludingChar().FindAll(e=> e.spawned==true)) { - if (!currentAreaRange.IsObjectInside(en.Position)) + if (!currentAreaRange.IsObjectInside(en.Position) && en.scriptSpawn==false && sceneNumId != 87) { toDespawn.Add(en.guid); en.spawned = false; @@ -458,7 +458,7 @@ namespace Campofinale.Game }); GetOwner().Send(new PacketScObjectEnterView(GetOwner(), GetEntityExcludingChar().FindAll(e => e.belongLevelScriptId == id))); } - public void SpawnEnemy(ulong v) + public void SpawnEnemy(ulong v, bool scriptSpawn=false) { LevelScene lv_scene = ResourceManager.GetLevelData(sceneNumId); LevelEnemyData en = lv_scene.levelData.enemies.Find(e=>e.levelLogicId == v); @@ -468,11 +468,17 @@ namespace Campofinale.Game { type = en.entityType, belongLevelScriptId = en.belongLevelScriptId, - levelLogicId = en.levelLogicId + levelLogicId = en.levelLogicId, + scriptSpawn = scriptSpawn }; entities.Add(entity); + Logger.Print($"Enemy Id {v} found on scene {sceneNumId}:{lv_scene.mapIdStr}"); SpawnEntity(entity); } + else + { + Logger.PrintWarn($"Enemy Id {v} not found on scene {sceneNumId}:{lv_scene.mapIdStr}"); + } } public void SpawnWaveEnemy(ulong spawnerId, int waveId) diff --git a/Campofinale/Packets/Cs/HandleCsSceneSetLevelScriptActive.cs b/Campofinale/Packets/Cs/HandleCsSceneSetLevelScriptActive.cs index 851433f..48c6d02 100644 --- a/Campofinale/Packets/Cs/HandleCsSceneSetLevelScriptActive.cs +++ b/Campofinale/Packets/Cs/HandleCsSceneSetLevelScriptActive.cs @@ -122,7 +122,7 @@ namespace Campofinale.Packets.Cs case ScriptActionType.SpawnEnemy: foreach (ulong id in action.valueUlong) { - player.sceneManager.GetCurScene().SpawnEnemy(id); + player.sceneManager.GetCurScene().SpawnEnemy(id,true); } break;