new types

This commit is contained in:
AlessandroCH
2025-05-29 00:32:39 +02:00
parent 0a42b80772
commit f416665d40
5 changed files with 98 additions and 24 deletions

View File

@@ -297,7 +297,7 @@ namespace Campofinale.Game
public void Load() public void Load()
{ {
if (info().isSeamless && alreadyLoaded) return; if (info().isSeamless && alreadyLoaded) return;
alreadyLoaded = true; //alreadyLoaded = true;
Unload(); Unload();
LevelScene lv_scene = ResourceManager.GetLevelData(sceneNumId); LevelScene lv_scene = ResourceManager.GetLevelData(sceneNumId);
@@ -345,6 +345,7 @@ namespace Campofinale.Game
levelLogicId = en.levelLogicId, levelLogicId = en.levelLogicId,
}; };
entity.defaultHide=en.defaultHide;
entities.Add(entity); entities.Add(entity);
}); });
lv_scene.levelData.npcs.ForEach(en => lv_scene.levelData.npcs.ForEach(en =>
@@ -381,6 +382,7 @@ namespace Campofinale.Game
} }
public void SpawnEntity(Entity en,bool spawnedCheck=true) public void SpawnEntity(Entity en,bool spawnedCheck=true)
{ {
if (!activeScripts.Contains(en.belongLevelScriptId) && en.defaultHide && en.belongLevelScriptId != 0) if (!activeScripts.Contains(en.belongLevelScriptId) && en.defaultHide && en.belongLevelScriptId != 0)
@@ -404,8 +406,12 @@ namespace Campofinale.Game
{ {
if(e.spawned==false && (activeScripts.Contains(e.belongLevelScriptId) || e.belongLevelScriptId==0)) if(e.spawned==false && (activeScripts.Contains(e.belongLevelScriptId) || e.belongLevelScriptId==0))
{ {
toSpawn.Add(e); if (!e.defaultHide)
e.spawned= true; {
toSpawn.Add(e);
e.spawned = true;
}
} }
} }
@@ -445,7 +451,14 @@ namespace Campofinale.Game
{ {
return Server.clients.Find(c => c.roleId == ownerId); return Server.clients.Find(c => c.roleId == ownerId);
} }
public void SpawnEnemyByScriptId(ulong id)
{
GetEntityExcludingChar().FindAll(e => e.belongLevelScriptId == id).ForEach(e =>
{
e.spawned = true;
});
GetOwner().Send(new PacketScObjectEnterView(GetOwner(), GetEntityExcludingChar().FindAll(e => e.belongLevelScriptId == id)));
}
public void SpawnEnemy(ulong v) public void SpawnEnemy(ulong v)
{ {
LevelScene lv_scene = ResourceManager.GetLevelData(sceneNumId); LevelScene lv_scene = ResourceManager.GetLevelData(sceneNumId);
@@ -462,5 +475,7 @@ namespace Campofinale.Game
SpawnEntity(entity); SpawnEntity(entity);
} }
} }
} }
} }

View File

@@ -29,6 +29,7 @@ namespace Campofinale.Packets.Cs
session.AddCharacter("chr_0003_endminf", true); session.AddCharacter("chr_0003_endminf", true);
session.RemoveCharacter("chr_0002_endminm"); session.RemoveCharacter("chr_0002_endminm");
} }
session.teamIndex = 0; session.teamIndex = 0;
session.teams[0].leader = session.chars[0].guid; session.teams[0].leader = session.chars[0].guid;
session.teams[0].members = new() { session.chars[0].guid }; session.teams[0].members = new() { session.chars[0].guid };
@@ -129,7 +130,8 @@ namespace Campofinale.Packets.Cs
session.Send(new PacketScSyncBaseData(session)); session.Send(new PacketScSyncBaseData(session));
session.Send(ScMsgId.ScSceneClientIdInfo, new ScSceneClientIdInfo() session.Send(ScMsgId.ScSceneClientIdInfo, new ScSceneClientIdInfo()
{ {
RoleIdx=6,
LastMaxIdx=session.random.v
}); });
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.Weapon)); session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.Weapon));
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.WeaponGem)); session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.WeaponGem));

View File

@@ -0,0 +1,22 @@
using Campofinale.Network;
using Campofinale.Protocol;
namespace Campofinale.Packets.Cs
{
public class HandleCsSceneSetBattle
{
[Server.Handler(CsMsgId.CsSceneSetBattle)]
public static void Handle(Player session, CsMsgId cmdId, Packet packet)
{
CsSceneSetBattle req = packet.DecodeBody<CsSceneSetBattle>();
ScSceneSetBattle rsp = new()
{
InBattle = req.InBattle,
};
session.Send(ScMsgId.ScSceneSetBattle, rsp);
}
}
}

View File

@@ -5,6 +5,7 @@ using Campofinale.Protocol;
using Campofinale.Resource; using Campofinale.Resource;
using Campofinale.Resource.Table; using Campofinale.Resource.Table;
using Pastel; using Pastel;
using System.Net.Sockets;
using static Campofinale.Resource.ResourceManager.LevelScene.LevelData; using static Campofinale.Resource.ResourceManager.LevelScene.LevelData;
namespace Campofinale.Packets.Cs namespace Campofinale.Packets.Cs
@@ -26,13 +27,17 @@ namespace Campofinale.Packets.Cs
State = 3 State = 3
}; };
session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp);
if (!session.sceneManager.GetCurScene().activeScripts.Contains(req.ScriptId)) if (!session.sceneManager.GetCurScene().activeScripts.Contains(req.ScriptId))
{ {
session.sceneManager.GetCurScene().activeScripts.Add(req.ScriptId); session.sceneManager.GetCurScene().activeScripts.Add(req.ScriptId);
session.sceneManager.GetCurScene().UpdateShowEntities(); session.sceneManager.GetCurScene().UpdateShowEntities();
} }
session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp);
}
else
{
} }
@@ -54,13 +59,25 @@ namespace Campofinale.Packets.Cs
State = 4 State = 4
}; };
session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp,packet.csHead.UpSeqid); session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp, packet.csHead.UpSeqid);
}
else
{
ScSceneLevelScriptStateNotify rsp = new ScSceneLevelScriptStateNotify()
{
SceneNumId = req.SceneNumId,
ScriptId = req.ScriptId,
State = 4
};
session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp, packet.csHead.UpSeqid);
} }
} }
public static void ExecuteEventAction(Player player, ScriptAction action) public static void ExecuteEventAction(Player player, ScriptAction action, CsSceneLevelScriptEventTrigger req)
{ {
switch (action.action) switch (action.action)
{ {
@@ -71,7 +88,17 @@ namespace Campofinale.Packets.Cs
player.missionSystem.ProcessQuest(action.valueStr[0]); player.missionSystem.ProcessQuest(action.valueStr[0]);
break; break;
case ScriptActionType.SpawnEnemy: case ScriptActionType.SpawnEnemy:
player.sceneManager.GetCurScene().SpawnEnemy(action.valueUlong[0]); foreach (ulong id in action.valueUlong)
{
player.sceneManager.GetCurScene().SpawnEnemy(id);
}
break;
case ScriptActionType.SpawnEnemyByScriptId:
foreach(ulong id in action.valueUlong)
{
player.sceneManager.GetCurScene().SpawnEnemyByScriptId(id);
}
break; break;
case ScriptActionType.UnlockSystem: case ScriptActionType.UnlockSystem:
UnlockSystemType type = (UnlockSystemType)Enum.Parse(typeof(UnlockSystemType), action.valueStr[0]); UnlockSystemType type = (UnlockSystemType)Enum.Parse(typeof(UnlockSystemType), action.valueStr[0]);
@@ -83,6 +110,19 @@ namespace Campofinale.Packets.Cs
case ScriptActionType.AddMission: case ScriptActionType.AddMission:
player.missionSystem.AddMission(action.valueStr[0]); player.missionSystem.AddMission(action.valueStr[0]);
break; break;
case ScriptActionType.CallClientEvent:
foreach(string id in action.valueStr)
{
ScSceneTriggerClientLevelScriptEvent trigger = new()
{
EventName = id,
SceneNumId = req.SceneNumId,
ScriptId = req.ScriptId,
};
player.Send(ScMsgId.ScSceneTriggerClientLevelScriptEvent, trigger);
}
break;
case ScriptActionType.CompleteMission: case ScriptActionType.CompleteMission:
//player.missionSystem.C(action.valueStr[0]); //player.missionSystem.C(action.valueStr[0]);
break; break;
@@ -104,7 +144,7 @@ namespace Campofinale.Packets.Cs
Logger.Print($"{levelScriptEvent.comment}"); Logger.Print($"{levelScriptEvent.comment}");
levelScriptEvent.actions.ForEach(a => levelScriptEvent.actions.ForEach(a =>
{ {
ExecuteEventAction(session, a); ExecuteEventAction(session, a,req);
}); });
} }
else else
@@ -130,15 +170,8 @@ namespace Campofinale.Packets.Cs
} }
} }
session.Send(ScMsgId.ScSceneUpdateLevelScriptProperty, update1); session.Send(ScMsgId.ScSceneUpdateLevelScriptProperty, update1);
/*ScSceneTriggerClientLevelScriptEvent trigger = new()
{
EventName = req.EventName,
SceneNumId = req.SceneNumId,
ScriptId = req.ScriptId,
}; /*ScSceneUpdateLevelScriptProperty update2 = new()
session.Send(ScMsgId.ScSceneTriggerClientLevelScriptEvent, trigger);
ScSceneUpdateLevelScriptProperty update2 = new()
{ {
SceneNumId = req.SceneNumId, SceneNumId = req.SceneNumId,
ScriptId = req.ScriptId, ScriptId = req.ScriptId,

View File

@@ -29,5 +29,7 @@ namespace Campofinale.Resource.Table
EnterScene = 5, EnterScene = 5,
AddMission = 6, AddMission = 6,
CompleteMission = 7, CompleteMission = 7,
SpawnEnemyByScriptId = 8,
CallClientEvent = 9
} }
} }