Fix some bugs

This commit is contained in:
Somebody
2024-07-24 16:58:11 +08:00
parent c301dc8846
commit 7fa164e466
5 changed files with 72 additions and 12 deletions

View File

@@ -64,7 +64,7 @@ public class FloorInfo
}
else if (json.Contains("Common_Console"))
{
//prop.CommonConsole = true;
prop.CommonConsole = true;
}
// Clear for garbage collection

View File

@@ -28,6 +28,8 @@ public class PropInfo : PositionInfo
[JsonIgnore] public int MazePieceCount { get; set; }
[JsonIgnore] public bool CommonConsole = false;
public void Load(GroupInfo info)
{
if (ValueSource != null)

View File

@@ -433,18 +433,38 @@ public class MissionManager : BasePlayerManager
if (mission.TakeType == SubMissionTakeTypeEnum.CustomValue)
{
var index = 0;
var accept = true;
foreach (var customValue in mission.TakeParamIntList ?? [])
var accept = false;
List<List<int>> list = [mission.TakeParamIntList ?? []];
if (mission.TakeParamIntList?.Count > 5)
{
if (customValue == 0 && index == 0) continue; // skip 0
var valueInst = values.Find(x => x.Index == index);
if (valueInst == null) continue;
if (valueInst.CustomValue != customValue)
// every 3 as group
var group = mission.TakeParamIntList.Count / 3;
list = [];
for (var i = 0; i < group; i++)
{
accept = false;
break;
var customValue = mission.TakeParamIntList.GetRange(i * 3, 3);
list.Add(customValue);
}
}
foreach (var customValues in list)
{
var thisAccept = true;
foreach (var customValue in customValues)
{
if (customValue == 0 && index == 0) continue; // skip 0
var valueInst = values.Find(x => x.Index == index);
if (valueInst == null) continue;
if (valueInst.CustomValue != customValue)
{
thisAccept = false;
break;
}
index++;
}
if (thisAccept) accept = true; // accept if any group is true
}
if (accept) await AcceptSubMission(mission.ID);
}

View File

@@ -38,6 +38,7 @@ public class StoryLineManager : BasePlayerManager
GameData.StoryLineData.TryGetValue(storyLineId, out var storyExcel);
GameData.StroyLineTrialAvatarDataData.TryGetValue(storyLineId, out var storyAvatarExcel);
if (storyExcel == null || storyAvatarExcel == null) return;
StoryLineData.RunningStoryLines.TryGetValue(storyLineId, out var lineInfo);
StoryLineData.OldEntryId = Player.Data.EntryId;
StoryLineData.OldFloorId = Player.Data.FloorId;
StoryLineData.OldPlaneId = Player.Data.PlaneId;
@@ -58,8 +59,19 @@ public class StoryLineManager : BasePlayerManager
if (entryId > 0)
await Player.EnterMissionScene(entryId, anchorGroupId, anchorId, true, ChangeStoryLineAction.FinishAction);
else
await Player.EnterMissionScene(storyExcel.InitEntranceID, storyExcel.InitGroupID, storyExcel.InitAnchorID,
true, ChangeStoryLineAction.FinishAction);
{
if (lineInfo == null)
{
await Player.EnterMissionScene(storyExcel.InitEntranceID, storyExcel.InitGroupID, storyExcel.InitAnchorID,
true, ChangeStoryLineAction.FinishAction);
}
else
{
await Player.LoadScene(lineInfo.SavedPlaneId, lineInfo.SavedFloorId, lineInfo.SavedEntryId,
lineInfo.SavedPos, lineInfo.SavedRot, true, ChangeStoryLineAction.FinishAction);
}
}
await Player.SendPacket(
new PacketChangeStoryLineFinishScNotify(storyExcel.StoryLineID, ChangeStoryLineAction.FinishAction));
@@ -175,10 +187,24 @@ public class StoryLineManager : BasePlayerManager
{
if (StoryLineData.CurStoryLineId == 0) return;
GameData.StoryLineData.TryGetValue(StoryLineData.CurStoryLineId, out var storyExcel);
if (storyExcel == null) return;
Player.LineupManager!.SetExtraLineup(ExtraLineupType.LineupNone, []);
// delete old & reset
StoryLineData.RunningStoryLines.Remove(StoryLineData.CurStoryLineId);
if (Player.MissionManager!.GetSubMissionStatus(storyExcel.EndCondition.Param) == MissionPhaseEnum.Finish)
StoryLineData.RunningStoryLines.Remove(StoryLineData.CurStoryLineId);
else
StoryLineData.RunningStoryLines[StoryLineData.CurStoryLineId] = new StoryLineInfo
{
Lineup = Player.LineupManager!.GetCurLineup()!.BaseAvatars!,
SavedEntryId = Player.Data.EntryId,
SavedFloorId = Player.Data.FloorId,
SavedPlaneId = Player.Data.PlaneId,
SavedPos = Player.Data.Pos!,
SavedRot = Player.Data.Rot!,
StoryLineId = StoryLineData.CurStoryLineId
};
StoryLineData.CurStoryLineId = 0;
StoryLineData.OldPlaneId = 0;

View File

@@ -398,6 +398,18 @@ public class PlayerInstance(PlayerData data)
}
break;
case PropTypeEnum.PROP_ORDINARY:
if (prop.PropInfo.CommonConsole)
{
// set group
foreach (var p in SceneInstance.GetEntitiesInGroup<EntityProp>(prop.GroupID))
{
await p.SetState(newState);
await MissionManager!.OnPlayerInteractWithProp();
}
}
break;
}
// for door unlock