mirror of
https://git.muiegratis.online/suikoakari/Campofinale
synced 2025-12-12 17:44:37 +01:00
Player.SeamlessEnterScene (not working...)
This commit is contained in:
@@ -13,11 +13,10 @@ namespace Campofinale.Packets.Cs
|
|||||||
{
|
{
|
||||||
CsSceneLoadFinish req = packet.DecodeBody<CsSceneLoadFinish>();
|
CsSceneLoadFinish req = packet.DecodeBody<CsSceneLoadFinish>();
|
||||||
|
|
||||||
|
session.curSceneNumId=req.SceneNumId;
|
||||||
session.Send(new PacketScSelfSceneInfo(session, SelfInfoReasonType.SlrEnterScene));
|
session.Send(new PacketScSelfSceneInfo(session, SelfInfoReasonType.SlrEnterScene));
|
||||||
session.sceneManager.LoadCurrentTeamEntities();
|
session.sceneManager.LoadCurrentTeamEntities();
|
||||||
session.sceneManager.LoadCurrent();
|
session.sceneManager.LoadCurrent();
|
||||||
session.LoadFinish = true;
|
|
||||||
|
|
||||||
if (session.curSceneNumId == 98)
|
if (session.curSceneNumId == 98)
|
||||||
{
|
{
|
||||||
@@ -37,7 +36,7 @@ namespace Campofinale.Packets.Cs
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
session.LoadFinish = true;
|
session.sceneLoadState = Player.SceneLoadState.OK;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,12 @@ namespace Campofinale.Packets.Cs
|
|||||||
public static void Handle(Player session, CsMsgId cmdId, Packet packet)
|
public static void Handle(Player session, CsMsgId cmdId, Packet packet)
|
||||||
{
|
{
|
||||||
CsSceneSetLastSafeZone req = packet.DecodeBody<CsSceneSetLastSafeZone>();
|
CsSceneSetLastSafeZone req = packet.DecodeBody<CsSceneSetLastSafeZone>();
|
||||||
|
Logger.Print($"Current Scene: {req.SceneNumId}");
|
||||||
|
//Change seamlessy scene
|
||||||
|
if (req.SceneNumId != session.curSceneNumId)
|
||||||
|
{
|
||||||
|
session.SeamlessEnterScene(req.SceneNumId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,10 @@ namespace Campofinale.Packets.Sc
|
|||||||
sceneInfo.Detail.CharList.Add(session.chars.Find(c => c.guid == m).ToSceneProto());
|
sceneInfo.Detail.CharList.Add(session.chars.Find(c => c.guid == m).ToSceneProto());
|
||||||
});
|
});
|
||||||
|
|
||||||
//Levelscripts here?
|
if (infoReason == SelfInfoReasonType.SlrSeamlesslyEnterScene)
|
||||||
|
{
|
||||||
|
sceneInfo.TeamInfo = null;
|
||||||
|
}
|
||||||
if(infoReason!= SelfInfoReasonType.SlrChangeTeam)
|
if(infoReason!= SelfInfoReasonType.SlrChangeTeam)
|
||||||
ResourceManager.GetLevelData(session.curSceneNumId).levelData.levelScripts.ForEach(l =>
|
ResourceManager.GetLevelData(session.curSceneNumId).levelData.levelScripts.ForEach(l =>
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ using Campofinale.Game.MissionSys;
|
|||||||
using Pastel;
|
using Pastel;
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using Campofinale.Game.Adventure;
|
using Campofinale.Game.Adventure;
|
||||||
|
using static Campofinale.Player;
|
||||||
|
|
||||||
|
|
||||||
namespace Campofinale
|
namespace Campofinale
|
||||||
@@ -349,7 +350,7 @@ namespace Campofinale
|
|||||||
{
|
{
|
||||||
//sceneManager.UnloadCurrent(false);
|
//sceneManager.UnloadCurrent(false);
|
||||||
//sceneManager.LoadCurrent();
|
//sceneManager.LoadCurrent();
|
||||||
LoadFinish = false;
|
sceneLoadState = SceneLoadState.Loading;
|
||||||
Send(new PacketScEnterSceneNotify(this, curSceneNumId));
|
Send(new PacketScEnterSceneNotify(this, curSceneNumId));
|
||||||
}
|
}
|
||||||
if (savedSaveZone == null || savedSaveZone.sceneNumId == 0)
|
if (savedSaveZone == null || savedSaveZone.sceneNumId == 0)
|
||||||
@@ -362,7 +363,14 @@ namespace Campofinale
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
public bool LoadFinish = true;
|
public enum SceneLoadState
|
||||||
|
{
|
||||||
|
OK=0,
|
||||||
|
Loading=1,
|
||||||
|
|
||||||
|
}
|
||||||
|
public SceneLoadState sceneLoadState=0;
|
||||||
|
// public bool LoadFinish = true;
|
||||||
public void EnterScene(int sceneNumId, Vector3f pos, Vector3f rot, PassThroughData passThroughData = null)
|
public void EnterScene(int sceneNumId, Vector3f pos, Vector3f rot, PassThroughData passThroughData = null)
|
||||||
{
|
{
|
||||||
// if (!LoadFinish) return;
|
// if (!LoadFinish) return;
|
||||||
@@ -381,7 +389,7 @@ namespace Campofinale
|
|||||||
curSceneNumId = sceneNumId;
|
curSceneNumId = sceneNumId;
|
||||||
position = pos;
|
position = pos;
|
||||||
rotation = rot;
|
rotation = rot;
|
||||||
LoadFinish = false;
|
sceneLoadState = SceneLoadState.Loading;
|
||||||
Send(new PacketScEnterSceneNotify(this, sceneNumId, pos, passThroughData));
|
Send(new PacketScEnterSceneNotify(this, sceneNumId, pos, passThroughData));
|
||||||
//sceneManager.LoadCurrent();
|
//sceneManager.LoadCurrent();
|
||||||
}
|
}
|
||||||
@@ -390,6 +398,37 @@ namespace Campofinale
|
|||||||
Logger.PrintError($"Scene {sceneNumId} not found");
|
Logger.PrintError($"Scene {sceneNumId} not found");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/// <summary>
|
||||||
|
/// Seamless Crossing scene is not working, self scene info is not modifying the current scene num id in the client...
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sceneNumId"></param>
|
||||||
|
public void SeamlessEnterScene(int sceneNumId)
|
||||||
|
{
|
||||||
|
if(curSceneNumId != sceneNumId && sceneLoadState == SceneLoadState.OK)
|
||||||
|
{
|
||||||
|
sceneLoadState=SceneLoadState.Loading;
|
||||||
|
curSceneNumId = sceneNumId;
|
||||||
|
Send(new PacketScSelfSceneInfo(this, SelfInfoReasonType.SlrSeamlesslyEnterScene));
|
||||||
|
ScFactoryModifyChapterScene modify = new()
|
||||||
|
{
|
||||||
|
ChapterId=GetCurrentChapter(),
|
||||||
|
SceneId=sceneNumId,
|
||||||
|
Tms=DateTime.UtcNow.ToUnixTimestampMilliseconds()
|
||||||
|
};
|
||||||
|
Send(ScMsgId.ScFactoryModifyChapterScene, modify);
|
||||||
|
ScSceneCrossSceneStatus cross = new()
|
||||||
|
{
|
||||||
|
ObjId = teams[teamIndex].leader,
|
||||||
|
SceneNumId = curSceneNumId
|
||||||
|
};
|
||||||
|
Send(ScMsgId.ScSceneCrossSceneStatus, cross);
|
||||||
|
|
||||||
|
|
||||||
|
sceneManager.LoadCurrentTeamEntities();
|
||||||
|
sceneManager.LoadCurrent();
|
||||||
|
sceneLoadState = SceneLoadState.OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
public void EnterScene(int sceneNumId)
|
public void EnterScene(int sceneNumId)
|
||||||
{
|
{
|
||||||
if(GetLevelData(sceneNumId) != null)
|
if(GetLevelData(sceneNumId) != null)
|
||||||
@@ -410,7 +449,7 @@ namespace Campofinale
|
|||||||
position = GetLevelData(sceneNumId).playerInitPos;
|
position = GetLevelData(sceneNumId).playerInitPos;
|
||||||
rotation = GetLevelData(sceneNumId).playerInitRot;
|
rotation = GetLevelData(sceneNumId).playerInitRot;
|
||||||
// sceneManager.LoadCurrent();
|
// sceneManager.LoadCurrent();
|
||||||
LoadFinish = false;
|
sceneLoadState = SceneLoadState.Loading;
|
||||||
Send(new PacketScEnterSceneNotify(this, sceneNumId));
|
Send(new PacketScEnterSceneNotify(this, sceneNumId));
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -609,7 +648,7 @@ namespace Campofinale
|
|||||||
if (Initialized)
|
if (Initialized)
|
||||||
this.Send(new PacketScAdventureBookSync(this));
|
this.Send(new PacketScAdventureBookSync(this));
|
||||||
}
|
}
|
||||||
if(LoadFinish)
|
if(sceneLoadState==0)
|
||||||
sceneManager.Update();
|
sceneManager.Update();
|
||||||
factoryManager.Update();
|
factoryManager.Update();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ namespace Campofinale
|
|||||||
public static Dispatch? dispatch;
|
public static Dispatch? dispatch;
|
||||||
public static ConfigFile? config;
|
public static ConfigFile? config;
|
||||||
public static List<CsMsgId> csMessageToHide = new() { CsMsgId.CsMoveObjectMove, CsMsgId.CsBattleOp,CsMsgId.CsPing };
|
public static List<CsMsgId> csMessageToHide = new() { CsMsgId.CsMoveObjectMove, CsMsgId.CsBattleOp,CsMsgId.CsPing };
|
||||||
public static List<ScMsgId> scMessageToHide = new() { ScMsgId.ScMoveObjectMove, ScMsgId.ScPing };
|
public static List<ScMsgId> scMessageToHide = new() { ScMsgId.ScMoveObjectMove, ScMsgId.ScPing,ScMsgId.ScObjectEnterView };
|
||||||
public void Start(ConfigFile config)
|
public void Start(ConfigFile config)
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user