mirror of
https://github.com/EggLinks/DanhengServer-OpenSource.git
synced 2026-01-02 20:26:03 +08:00
fix friend system bug, fix some mission bug
This commit is contained in:
@@ -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; }
|
||||
|
||||
@@ -11,4 +11,11 @@
|
||||
MuseumPhaseRenewPointReach = 6,
|
||||
HeliobusPhaseReach = 7,
|
||||
}
|
||||
public enum SubMissionTakeTypeEnum
|
||||
{
|
||||
AnySequence = 0,
|
||||
Auto = 1,
|
||||
CustomValue = 2,
|
||||
MultiSequence = 3,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user