Campofinale/Campofinale/Packets/Sc/PacketScSelfSceneInfo.cs
AlessandroCH 723b81d5e4 some fix
2025-06-04 14:31:56 +02:00

111 lines
3.7 KiB
C#

using Campofinale.Network;
using Campofinale.Protocol;
using Campofinale.Resource;
namespace Campofinale.Packets.Sc
{
public class PacketScSelfSceneInfo : Packet
{
public PacketScSelfSceneInfo(Player session, SelfInfoReasonType infoReason = SelfInfoReasonType.SlrEnterScene) {
ScSelfSceneInfo sceneInfo = new()
{
SceneId = session.sceneManager.GetSceneGuid(session.curSceneNumId),
SceneNumId = session.curSceneNumId,
SelfInfoReason = (int)infoReason,
TeamInfo = new()
{
CurLeaderId = session.teams[session.teamIndex].leader,
TeamIndex = session.teamIndex,
TeamType = CharBagTeamType.Main
},
SceneGrade = 4,
Detail = new()
{
TeamIndex = session.teamIndex,
},
LevelScripts =
{
}
};
if (session.currentDungeon != null)
{
sceneInfo.Dungeon = new()
{
DungeonId = session.currentDungeon.table.dungeonId,
};
}
else
{
sceneInfo.Empty = new()
{
};
}
foreach (var item in ResourceManager.sceneAreaTable)
{
if(session.curSceneNumId==ResourceManager.GetSceneNumIdFromLevelData(item.Value.sceneId))
sceneInfo.UnlockArea.Add(item.Value.areaId);
}
session.teams[session.teamIndex].members.ForEach(m =>
{
sceneInfo.Detail.CharList.Add(session.chars.Find(c => c.guid == m).ToSceneProto());
});
//Levelscripts here?
if(infoReason!= SelfInfoReasonType.SlrChangeTeam)
ResourceManager.GetLevelData(session.curSceneNumId).levelData.levelScripts.ForEach(l =>
{
LevelScriptInfo script = new LevelScriptInfo()
{
ScriptId = l.scriptId,
IsDone = false,
State = 2,
};
var sceneScript=session.sceneManager.GetCurScene().scripts.Find(s => s.scriptId == l.scriptId);
if (sceneScript == null)
{
sceneScript = new()
{
scriptId = l.scriptId,
state = 2
};
l.properties.ForEach(p =>
{
if(!sceneScript.properties.ContainsKey(p.key))
sceneScript.properties.Add(p.key,p.ToScriptProperty());
});
session.sceneManager.GetCurScene().scripts.Add(sceneScript);
}
script.State = sceneScript.state;
int i = 0;
foreach (var item in sceneScript.properties)
{
if(item.Value != null)
{
DynamicParameter p = item.Value.ToProto();
if (p != null)
script.Properties.Add(l.GetPropertyId(item.Key, script.Properties.Keys.ToList()), p);
}
}
sceneInfo.LevelScripts.Add(script);
});
SetData(ScMsgId.ScSelfSceneInfo, sceneInfo);
}
}
}