fix friend system bug, fix some mission bug

This commit is contained in:
Somebody
2024-05-05 17:05:35 +08:00
parent c11dbfb766
commit a66404fd03
9 changed files with 113 additions and 8 deletions

View File

@@ -20,6 +20,9 @@ namespace EggLink.DanhengServer.Data.Config
public int ID { get; set; }
public int MainMissionID { get; set; }
public string MissionJsonPath { get; set; } = "";
[JsonConverter(typeof(StringEnumConverter))]
public SubMissionTakeTypeEnum TakeType { get; set; }
public List<int> TakeParamIntList { get; set; } = []; // the mission's prerequisites
[JsonConverter(typeof(StringEnumConverter))]
public MissionFinishTypeEnum FinishType { get; set; }

View File

@@ -11,4 +11,11 @@
MuseumPhaseRenewPointReach = 6,
HeliobusPhaseReach = 7,
}
public enum SubMissionTakeTypeEnum
{
AnySequence = 0,
Auto = 1,
CustomValue = 2,
MultiSequence = 3,
}
}

View File

@@ -64,7 +64,7 @@ namespace EggLink.DanhengServer.Command.Cmd
}
arg.SendMsg("Running missions:");
Dictionary<int, List<int>> map = [];
SortedDictionary<int, List<int>> map = [];
foreach (var m in runningMissions)
{
@@ -80,8 +80,13 @@ namespace EggLink.DanhengServer.Command.Cmd
var possibleStuckIds = new List<int>();
var morePossibleStuckIds = new List<int>();
var count = 0;
foreach (var list in map)
{
if (count >= 6)
{
break;
}
arg.SendMsg($"Main mission {list.Key}:");
var sb = new StringBuilder();
foreach (var id in list.Value)
@@ -103,6 +108,8 @@ namespace EggLink.DanhengServer.Command.Cmd
sb.Remove(sb.Length - 2, 2);
arg.SendMsg(sb.ToString());
count++;
}
if (morePossibleStuckIds.Count > 0)

View File

@@ -6,6 +6,7 @@ using EggLink.DanhengServer.Enums;
using EggLink.DanhengServer.Game.Mission.FinishAction;
using EggLink.DanhengServer.Game.Mission.FinishType;
using EggLink.DanhengServer.Game.Player;
using EggLink.DanhengServer.Server.Packet.Send.Avatar;
using EggLink.DanhengServer.Server.Packet.Send.Mission;
using EggLink.DanhengServer.Server.Packet.Send.Player;
using EggLink.DanhengServer.Server.Packet.Send.Scene;
@@ -22,6 +23,8 @@ namespace EggLink.DanhengServer.Game.Mission
public Dictionary<FinishActionTypeEnum, MissionFinishActionHandler> ActionHandlers = [];
public Dictionary<MissionFinishTypeEnum, MissionFinishTypeHandler> FinishTypeHandlers = [];
public readonly List<int> SkipSubMissionList = [101030104]; // bug
public MissionManager(PlayerInstance player) : base(player)
{
Data = DatabaseHelper.Instance!.GetInstanceOrCreateNew<MissionData>(player.Uid);
@@ -80,7 +83,7 @@ namespace EggLink.DanhengServer.Game.Mission
public List<Proto.MissionSync?> ReAcceptMainMission(int missionId, bool sendPacket = true)
{
if (!ConfigManager.Config.ServerOption.EnableMission) return [];
if (!Data.MissionInfo.TryGetValue(missionId, out _)) return [];
//if (!Data.MissionInfo.TryGetValue(missionId, out _)) return [];
Data.MissionInfo.Remove(missionId);
Data.MainMissionInfo.Remove(missionId);
@@ -128,6 +131,12 @@ namespace EggLink.DanhengServer.Game.Mission
if (doFinishTypeAction)
handler?.HandleFinishType(Player, mission.SubMissionInfo, null);
}
if (SkipSubMissionList.Contains(missionId))
{
FinishSubMission(missionId);
}
return sync;
}
@@ -185,12 +194,12 @@ namespace EggLink.DanhengServer.Game.Mission
GameData.RaidConfigData.TryGetValue(Player.CurRaidId, out var raidConfig);
if (raidConfig != null)
{
bool leave = true;
bool leave = false;
foreach (var id in raidConfig.MainMissionIDList)
{
if (GetMainMissionStatus(id) != MissionPhaseEnum.Finish)
if (GetMainMissionStatus(id) == MissionPhaseEnum.Finish)
{
leave = false;
leave = true;
}
}
if (leave)
@@ -284,6 +293,7 @@ namespace EggLink.DanhengServer.Game.Mission
Player.AvatarManager!.GetHero()!.HeroId += 2;
DatabaseHelper.Instance?.UpdateInstance(Player.AvatarManager!.AvatarData);
Player.SendPacket(new PacketPlayerSyncScNotify(Player.AvatarManager!.GetHero()!));
Player.SendPacket(new PacketHeroBasicTypeChangedNotify(Player.AvatarManager!.GetHero()!.HeroId));
}
}
@@ -354,6 +364,27 @@ namespace EggLink.DanhengServer.Game.Mission
}
}
public void HandleCustomValue(int index, int cValue, int missionId)
{
if (!ConfigManager.Config.ServerOption.EnableMission) return;
GameData.SubMissionData.TryGetValue(missionId, out var subMission);
if (subMission == null) return;
var mainMissionId = subMission.MainMissionID;
GameData.MainMissionData.TryGetValue(mainMissionId, out var mainMission);
foreach (var mission in mainMission?.MissionInfo?.SubMissionList ?? [])
{
if (mission.TakeType == SubMissionTakeTypeEnum.CustomValue)
{
if (mission.TakeParamIntList[index] == cValue)
{
AcceptSubMission(mission.ID);
}
}
}
}
#endregion
#region Mission Status
@@ -380,9 +411,15 @@ namespace EggLink.DanhengServer.Game.Mission
{
if (info.TryGetValue(missionId, out var mission))
{
if (SkipSubMissionList.Contains(missionId))
{
FinishSubMission(missionId);
mission.Status = MissionPhaseEnum.Finish;
}
return mission.Status;
}
}
return MissionPhaseEnum.None;
}

View File

@@ -213,7 +213,10 @@ namespace EggLink.DanhengServer.Game.Player
public void SendPacket(BasePacket packet)
{
Connection?.SendPacket(packet);
if (Connection?.IsOnline == true)
{
Connection?.SendPacket(packet);
}
}
#endregion
@@ -596,12 +599,15 @@ namespace EggLink.DanhengServer.Game.Player
else
{
EnterScene(OldEntryId, 0, true);
MoveTo(LastPos!, LastRot!);
}
SendPacket(new PacketRaidInfoNotify((uint)CurRaidId, RaidStatus.Finish));
CurRaidId = 0;
OldEntryId = 0;
LastPos = null;
LastRot = null;
}
#endregion

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EggLink.DanhengServer.Server.Packet.Recv.Friend
{
[Opcode(CmdIds.GetChatFriendHistoryCsReq)]
public class HandlerGetChatFriendHistoryCsReq : Handler
{
public override void OnHandle(Connection connection, byte[] header, byte[] data)
{
connection.SendPacket(CmdIds.GetChatFriendHistoryScRsp);
}
}
}

View File

@@ -19,6 +19,8 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Friend
{
var req = SendMsgCsReq.Parser.ParseFrom(data);
connection.SendPacket(CmdIds.SendMsgScRsp);
if (req.MessageType == MsgType.CustomText)
{
connection.Player!.FriendManager!.SendMessage(connection.Player!.Uid, (int)req.TargetList[0], req.MessageText);
@@ -27,8 +29,6 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Friend
{
connection.Player!.FriendManager!.SendMessage(connection.Player!.Uid, (int)req.TargetList[0], null, (int)req.ExtraId);
}
connection.SendPacket(CmdIds.SendMsgScRsp);
}
}
}

View File

@@ -1,5 +1,6 @@
using EggLink.DanhengServer.Proto;
using EggLink.DanhengServer.Server.Packet.Send.Mission;
using Microsoft.EntityFrameworkCore;
namespace EggLink.DanhengServer.Server.Packet.Recv.Mission
{
@@ -18,6 +19,11 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Mission
{
}
if (req.CustomValueList != null && req.CustomValueList.Count > 0)
{
player.MissionManager!.HandleCustomValue((int)(req.CustomValueList[0].Index + 1), (int)req.CustomValueList[0].MBFHEFKNIHB, (int)req.SubMissionId);
}
connection.SendPacket(new PacketFinishTalkMissionScRsp(req.TalkStr));
}
}

View File

@@ -0,0 +1,22 @@
using EggLink.DanhengServer.Proto;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EggLink.DanhengServer.Server.Packet.Send.Avatar
{
public class PacketHeroBasicTypeChangedNotify : BasePacket
{
public PacketHeroBasicTypeChangedNotify(int type) : base(CmdIds.HeroBasicTypeChangedNotify)
{
var proto = new HeroBasicTypeChangedNotify()
{
CurBasicType = (HeroBasicType)type
};
SetData(proto);
}
}
}