Compare commits

..

No commits in common. "fb63df9eb23da227af0a0f07ce75a6c8f8c4c0b2" and "bb7c9831b40229272d922f97fbe1d0c477e22bf6" have entirely different histories.

6 changed files with 19 additions and 64 deletions

View File

@ -19,7 +19,6 @@ namespace Campofinale.Packets.Cs
{ {
case BattleActionOperateType.BattleOpEntityValueModify: case BattleActionOperateType.BattleOpEntityValueModify:
OnEntityValueModify(session, data); OnEntityValueModify(session, data);
break; break;
case BattleActionOperateType.BattleOpSkillStartCast: case BattleActionOperateType.BattleOpSkillStartCast:
@ -35,7 +34,7 @@ namespace Campofinale.Packets.Cs
OnEntityDie(session, data.EntityDieOpData); OnEntityDie(session, data.EntityDieOpData);
break; break;
default: default:
Logger.PrintWarn($"Unimplemented BattleActionOperateType.{data.OpType}"); Logger.PrintWarn($"Unsupported BattleActionOperateType.{data.OpType}");
break; break;
} }
} }
@ -74,8 +73,9 @@ namespace Campofinale.Packets.Cs
HealEntity(session, item); HealEntity(session, item);
} }
break; break;
default: default:
Logger.PrintWarn($"Unimplemented ServerBattleActionType.{data.Action.ActionType}"); Logger.PrintWarn($"Unsupported ServerBattleActionType.{data.Action.ActionType}");
break; break;
} }
} }
@ -106,6 +106,7 @@ namespace Campofinale.Packets.Cs
private static void OnSkillStartCast(Player session, BattleClientOpData data) private static void OnSkillStartCast(Player session, BattleClientOpData data)
{ {
ulong casterId = data.OwnerId; ulong casterId = data.OwnerId;
Character character = session.chars.Find(c => c.guid == casterId); Character character = session.chars.Find(c => c.guid == casterId);
if (character != null) if (character != null)
{ {
@ -139,7 +140,7 @@ namespace Campofinale.Packets.Cs
BattleInfo = new() BattleInfo = new()
{ {
Hp = character.curHp, Hp = character.curHp,
Ultimatesp = character.ultimateSp Ultimatesp = character.ultimateSp+1
}, },
Objid = character.guid, Objid = character.guid,
}; };
@ -153,17 +154,17 @@ namespace Campofinale.Packets.Cs
private static void OnEntityValueModify(Player session, BattleClientOpData data) private static void OnEntityValueModify(Player session, BattleClientOpData data)
{ {
Logger.PrintWarn("EntityValueModify called: " + data.EntityValueModifyData.ToString());
Character character = session.chars.Find(c => c.guid == data.EntityValueModifyData.EntityInstId); Character character = session.chars.Find(c => c.guid == data.EntityValueModifyData.EntityInstId);
if (character != null) if (character != null)
{ {
character.curHp = data.EntityValueModifyData.Value.Hp; character.curHp = data.EntityValueModifyData.Value.Hp;
character.ultimateSp = data.EntityValueModifyData.Value.Ultimatesp;
ScCharSyncStatus s = new() ScCharSyncStatus s = new()
{ {
BattleInfo = new() BattleInfo = new()
{ {
Hp = character.curHp, Hp = data.EntityValueModifyData.Value.Hp,
Ultimatesp = character.ultimateSp Ultimatesp = character.ultimateSp
}, },
Objid = character.guid, Objid = character.guid,

View File

@ -13,10 +13,11 @@ 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)
{ {
@ -36,7 +37,7 @@ namespace Campofinale.Packets.Cs
} }
} }
session.sceneLoadState = Player.SceneLoadState.OK; session.LoadFinish = true;
} }
} }
} }

View File

@ -10,12 +10,7 @@ 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);
}
} }
} }

View File

@ -59,10 +59,7 @@ 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());
}); });
if (infoReason == SelfInfoReasonType.SlrSeamlesslyEnterScene) //Levelscripts here?
{
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 =>
{ {

View File

@ -17,7 +17,6 @@ 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
@ -350,7 +349,7 @@ namespace Campofinale
{ {
//sceneManager.UnloadCurrent(false); //sceneManager.UnloadCurrent(false);
//sceneManager.LoadCurrent(); //sceneManager.LoadCurrent();
sceneLoadState = SceneLoadState.Loading; LoadFinish = false;
Send(new PacketScEnterSceneNotify(this, curSceneNumId)); Send(new PacketScEnterSceneNotify(this, curSceneNumId));
} }
if (savedSaveZone == null || savedSaveZone.sceneNumId == 0) if (savedSaveZone == null || savedSaveZone.sceneNumId == 0)
@ -363,14 +362,7 @@ namespace Campofinale
}; };
} }
} }
public enum SceneLoadState public bool LoadFinish = true;
{
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;
@ -389,7 +381,7 @@ namespace Campofinale
curSceneNumId = sceneNumId; curSceneNumId = sceneNumId;
position = pos; position = pos;
rotation = rot; rotation = rot;
sceneLoadState = SceneLoadState.Loading; LoadFinish = false;
Send(new PacketScEnterSceneNotify(this, sceneNumId, pos, passThroughData)); Send(new PacketScEnterSceneNotify(this, sceneNumId, pos, passThroughData));
//sceneManager.LoadCurrent(); //sceneManager.LoadCurrent();
} }
@ -398,37 +390,6 @@ 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)
@ -449,7 +410,7 @@ namespace Campofinale
position = GetLevelData(sceneNumId).playerInitPos; position = GetLevelData(sceneNumId).playerInitPos;
rotation = GetLevelData(sceneNumId).playerInitRot; rotation = GetLevelData(sceneNumId).playerInitRot;
// sceneManager.LoadCurrent(); // sceneManager.LoadCurrent();
sceneLoadState = SceneLoadState.Loading; LoadFinish = false;
Send(new PacketScEnterSceneNotify(this, sceneNumId)); Send(new PacketScEnterSceneNotify(this, sceneNumId));
} }
@ -648,7 +609,7 @@ namespace Campofinale
if (Initialized) if (Initialized)
this.Send(new PacketScAdventureBookSync(this)); this.Send(new PacketScAdventureBookSync(this));
} }
if(sceneLoadState==0) if(LoadFinish)
sceneManager.Update(); sceneManager.Update();
factoryManager.Update(); factoryManager.Update();
} }

View File

@ -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,ScMsgId.ScObjectEnterView }; public static List<ScMsgId> scMessageToHide = new() { ScMsgId.ScMoveObjectMove, ScMsgId.ScPing };
public void Start(ConfigFile config) public void Start(ConfigFile config)
{ {
{ {