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()
{
if (info().isSeamless && alreadyLoaded) return;
alreadyLoaded = true;
//alreadyLoaded = true;
Unload();
LevelScene lv_scene = ResourceManager.GetLevelData(sceneNumId);
@@ -345,6 +345,7 @@ namespace Campofinale.Game
levelLogicId = en.levelLogicId,
};
entity.defaultHide=en.defaultHide;
entities.Add(entity);
});
lv_scene.levelData.npcs.ForEach(en =>
@@ -381,6 +382,7 @@ namespace Campofinale.Game
}
public void SpawnEntity(Entity en,bool spawnedCheck=true)
{
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))
{
toSpawn.Add(e);
e.spawned= true;
if (!e.defaultHide)
{
toSpawn.Add(e);
e.spawned = true;
}
}
}
@@ -445,7 +451,14 @@ namespace Campofinale.Game
{
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)
{
LevelScene lv_scene = ResourceManager.GetLevelData(sceneNumId);
@@ -462,5 +475,7 @@ namespace Campofinale.Game
SpawnEntity(entity);
}
}
}
}

View File

@@ -29,6 +29,7 @@ namespace Campofinale.Packets.Cs
session.AddCharacter("chr_0003_endminf", true);
session.RemoveCharacter("chr_0002_endminm");
}
session.teamIndex = 0;
session.teams[0].leader = 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(ScMsgId.ScSceneClientIdInfo, new ScSceneClientIdInfo()
{
RoleIdx=6,
LastMaxIdx=session.random.v
});
session.Send(new PacketScItemBagScopeSync(session, ItemValuableDepotType.Weapon));
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.Table;
using Pastel;
using System.Net.Sockets;
using static Campofinale.Resource.ResourceManager.LevelScene.LevelData;
namespace Campofinale.Packets.Cs
@@ -26,13 +27,17 @@ namespace Campofinale.Packets.Cs
State = 3
};
session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp);
if (!session.sceneManager.GetCurScene().activeScripts.Contains(req.ScriptId))
{
session.sceneManager.GetCurScene().activeScripts.Add(req.ScriptId);
session.sceneManager.GetCurScene().UpdateShowEntities();
}
session.Send(ScMsgId.ScSceneLevelScriptStateNotify, rsp);
}
else
{
}
@@ -50,17 +55,29 @@ namespace Campofinale.Packets.Cs
{
SceneNumId = req.SceneNumId,
ScriptId = req.ScriptId,
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)
{
@@ -71,7 +88,17 @@ namespace Campofinale.Packets.Cs
player.missionSystem.ProcessQuest(action.valueStr[0]);
break;
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;
case ScriptActionType.UnlockSystem:
UnlockSystemType type = (UnlockSystemType)Enum.Parse(typeof(UnlockSystemType), action.valueStr[0]);
@@ -83,6 +110,19 @@ namespace Campofinale.Packets.Cs
case ScriptActionType.AddMission:
player.missionSystem.AddMission(action.valueStr[0]);
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:
//player.missionSystem.C(action.valueStr[0]);
break;
@@ -104,7 +144,7 @@ namespace Campofinale.Packets.Cs
Logger.Print($"{levelScriptEvent.comment}");
levelScriptEvent.actions.ForEach(a =>
{
ExecuteEventAction(session, a);
ExecuteEventAction(session, a,req);
});
}
else
@@ -130,15 +170,8 @@ namespace Campofinale.Packets.Cs
}
}
session.Send(ScMsgId.ScSceneUpdateLevelScriptProperty, update1);
/*ScSceneTriggerClientLevelScriptEvent trigger = new()
{
EventName = req.EventName,
SceneNumId = req.SceneNumId,
ScriptId = req.ScriptId,
};
session.Send(ScMsgId.ScSceneTriggerClientLevelScriptEvent, trigger);
ScSceneUpdateLevelScriptProperty update2 = new()
/*ScSceneUpdateLevelScriptProperty update2 = new()
{
SceneNumId = req.SceneNumId,
ScriptId = req.ScriptId,

View File

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