Fix maze skill loading and Rogue buff rarity

This commit is contained in:
WatchAndyTW
2024-07-06 00:19:33 +08:00
parent 9fa2f46fdd
commit decd3f39b6
15 changed files with 151 additions and 16 deletions

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EggLink.DanhengServer.Data.Excel
{
[ResourceEntity("AdventurePlayer.json")]
public class AdventurePlayerExcel : ExcelResource
{
public int AvatarID { get; set; } = 0;
public string PlayerJsonPath { get; set; } = "";
public override int GetId()
{
return AvatarID;
}
public override void Loaded()
{
GameData.AdventurePlayerData[AvatarID] = this;
}
}
}

View File

@@ -11,7 +11,8 @@ namespace EggLink.DanhengServer.Data.Excel
public int MazeBuffID { get; set; }
public int MazeBuffLevel { get; set; }
public int RogueBuffType { get; set; }
public int RogueBuffRarity { get; set; }
[JsonConverter(typeof(StringEnumConverter))]
public RogueBuffCategory RogueBuffRarity { get; set; }
public int RogueBuffTag { get; set; }
public int AeonID { get; set; }

View File

@@ -0,0 +1,25 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EggLink.DanhengServer.Data.Excel
{
[ResourceEntity("SummonUnitData.json")]
public class SummonUnitExcel : ExcelResource
{
public int ID { get; set; } = 0;
public string JsonPath { get; set; } = "";
public override int GetId()
{
return ID;
}
public override void Loaded()
{
GameData.SummonUnitData[ID] = this;
}
}
}

View File

@@ -19,6 +19,8 @@ namespace EggLink.DanhengServer.Data
public static Dictionary<int, AvatarExpItemConfigExcel> AvatarExpItemConfigData { get; private set; } = [];
public static Dictionary<int, AvatarSkillTreeConfigExcel> AvatarSkillTreeConfigData { get; private set; } = [];
public static Dictionary<int, ExpTypeExcel> ExpTypeData { get; private set; } = [];
public static Dictionary<int, AdventurePlayerExcel> AdventurePlayerData { get; private set; } = [];
public static Dictionary<int, SummonUnitExcel> SummonUnitData { get; private set; } = [];
#endregion

View File

@@ -314,9 +314,11 @@ namespace EggLink.DanhengServer.Data
public static void LoadMazeSkill()
{
var count = 0;
foreach (var avatar in GameData.AvatarConfigData.Values)
foreach (var adventure in GameData.AdventurePlayerData.Values)
{
var path = ConfigManager.Config.Path.ResourcePath + "/Config/ConfigAdventureAbility/LocalPlayer/LocalPlayer_" + avatar.NameKey + "_Ability.json";
var avatar = GameData.AvatarConfigData[adventure.AvatarID];
var adventurePath = adventure.PlayerJsonPath.Replace("_Config.json", "_Ability.json").Replace("ConfigCharacter", "ConfigAdventureAbility");
var path = ConfigManager.Config.Path.ResourcePath + "/" + adventurePath;
var file = new FileInfo(path);
if (!file.Exists) continue;
try
@@ -327,12 +329,13 @@ namespace EggLink.DanhengServer.Data
var skillAbilityInfo = JsonConvert.DeserializeObject<SkillAbilityInfo>(text);
skillAbilityInfo?.Loaded(avatar);
count += skillAbilityInfo == null ? 0 : 1;
} catch (Exception ex)
}
catch (Exception ex)
{
Logger.Error("Error in reading " + file.Name, ex);
}
}
if (count < GameData.AvatarConfigData.Count)
if (count < GameData.AdventurePlayerData.Count)
{
Logger.Warn("Maze skill infos are missing, please check your resources folder: " + ConfigManager.Config.Path.ResourcePath + "/Config/ConfigAdventureAbility/LocalPlayer. Maze skills may not work!");
}

View File

@@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace EggLink.DanhengServer.Enums.Rogue
{
public enum RogueBuffCategory
{
None = 0,
Common = 1,
Rare = 2,
Legendary = 3,
}
}

View File

@@ -79,6 +79,7 @@ namespace EggLink.DanhengServer.Internationalization.Message
public RogueTextCHT Rogue { get; } = new();
public SceneTextCHT Scene { get; } = new();
public UnlockAllTextCHT UnlockAll { get; } = new();
public MailTextCHT Mail { get; } = new();
}
#endregion
@@ -282,6 +283,17 @@ namespace EggLink.DanhengServer.Internationalization.Message
public string SceneReloaded { get; } = "場景已重新讀取!";
}
/// <summary>
/// path: Game.Command.Mail
/// </summary>
public class MailTextCHT
{
public string Desc { get; } = "管理員家的郵件";
public string Usage { get; } = "/mail <send [發送名稱] [標題] [內容] [模板ID] [過期天數] - 發送郵件>/<send [發送者] [標題] [內容] [模板ID] [過期天數] [附件] - 發送帶附件的郵件>";
public string MailSent { get; } = "郵件已發送!";
public string MailSentWithAttachment { get; } = "帶附件的郵件已發送!";
}
#endregion
#endregion

View File

@@ -77,6 +77,7 @@ namespace EggLink.DanhengServer.Internationalization.Message
public RogueTextEN Rogue { get; } = new();
public SceneTextEN Scene { get; } = new();
public UnlockAllTextEN UnlockAll { get; } = new();
public MailTextEN Mail { get; } = new();
}
#endregion
@@ -280,6 +281,17 @@ namespace EggLink.DanhengServer.Internationalization.Message
public string SceneReloaded { get; } = "Scene has been reloaded!";
}
/// <summary>
/// path: Game.Command.Mail
/// </summary>
public class MailTextEN
{
public string Desc { get; } = "Manage player's mails";
public string Usage { get; } = "/mail <send [Sender Name] [Title] [Content] [Template ID] [Expire Days] - 發送郵件>/<send [Sender] [Title] [Content] [Template ID] [Expire Days] [Attachments] - 發送帶附件的郵件>";
public string MailSent { get; } = "Mail has been sent!";
public string MailSentWithAttachment { get; } = "Mail with attachments has been sent!";
}
#endregion
#endregion

View File

@@ -33,7 +33,7 @@ namespace EggLink.DanhengServer.Game.Rogue.Buff
});
}
public int EnhanceCost => 100 + ((BuffExcel.RogueBuffRarity - 1) * 30);
public int EnhanceCost => 100 + (((int)BuffExcel.RogueBuffRarity - 1) * 30);
public RogueBuff ToProto() => new()
{

View File

@@ -34,10 +34,10 @@ namespace EggLink.DanhengServer.Game.Rogue.Buff
{
if (buff.RogueBuffType == rogue.RogueBuffType)
{
list.Add(buff, (int)(20 / buff.RogueBuffRarity * 2.5));
list.Add(buff, (int)(20 / (int)buff.RogueBuffRarity * 2.5));
} else
{
list.Add(buff, (int)(20 / buff.RogueBuffRarity * 0.7));
list.Add(buff, (int)(20 / (int)buff.RogueBuffRarity * 0.7));
}
}
var result = new List<RogueBuffExcel>();

View File

@@ -70,6 +70,18 @@ namespace EggLink.DanhengServer.Game.Scene
}
}
}
else if (group.OwnerMainMissionID != 0 && Scene.Player.MissionManager!.GetMainMissionStatus(group.OwnerMainMissionID) != Enums.MissionPhaseEnum.Accept)
{
foreach (var entity in Scene.Entities.Values)
{
if (entity.GroupID == group.Id)
{
Scene.RemoveEntity(entity, false);
removeList.Add(entity);
refreshed = true;
}
}
}
} else // check if it should be loaded
{
var groupList = LoadGroup(group);
@@ -86,6 +98,12 @@ namespace EggLink.DanhengServer.Game.Scene
public virtual List<IGameEntity>? LoadGroup(GroupInfo info, bool forceLoad = false)
{
var missionData = Scene.Player.MissionManager!.Data;
if (!(info.OwnerMainMissionID == 0 || Scene.Player.MissionManager!.GetMainMissionStatus(info.OwnerMainMissionID) == Enums.MissionPhaseEnum.Accept))
{
return null;
}
if ((!info.LoadCondition.IsTrue(missionData) || info.UnloadCondition.IsTrue(missionData, false) || info.ForceUnloadCondition.IsTrue(missionData, false)) && !forceLoad)
{
return null;

View File

@@ -12,10 +12,6 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Player
connection.SendPacket(CmdIds.PlayerLoginFinishScRsp);
//var list = connection.Player!.MissionManager!.GetRunningSubMissionIdList();
//connection.SendPacket(new PacketMissionAcceptScNotify(list));
// DO NOT REMOVE THIS CODE
// This code is responsible for sending the client data to the player
connection.SendPacket(new PacketClientDownloadDataScNotify(Convert.FromBase64String("bG9jYWwgZnVuY3Rpb24gdmVyc2lvbl90ZXh0KCkNCiAgICBsb2NhbCB1aWQgPSBDUy5Vbml0eUVuZ2luZS5HYW1lT2JqZWN0LkZpbmQoIlZlcnNpb25UZXh0Iik6R2V0Q29tcG9uZW50KCJUZXh0IikNCiAgICBpZiBub3Qgc3RyaW5nLm1hdGNoKHVpZC50ZXh0LCAi5q2k5pyN5Yqh56uvIikgdGhlbg0KICAgICAgICB1aWQudGV4dCA9ICLmraTmnI3liqHnq6/ku4XnlKjkvZzlrabkuaDkuqTmtYHvvIzor7fmlK/mjIHmraPniYjmuLjmiI9cbiIgLi4gdWlkLnRleHQNCiAgICAgICAgdWlkLmZvbnRTaXplID0gNzYuMA0KICAgIGVuZA0KICAgIGxvY2FsIGJldGEgPSBDUy5Vbml0eUVuZ2luZS5HYW1lT2JqZWN0LkZpbmQoIlVJUm9vdC9BYm92ZURpYWxvZy9CZXRhSGludERpYWxvZyhDbG9uZSkiKTpHZXRDb21wb25lbnQoIlRleHQiKQ0KZW5kDQoNCnZlcnNpb25fdGV4dCgp")));
}
}
}

View File

@@ -18,8 +18,20 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Player
if (ConfigManager.Config.ServerOption.ServerAnnounce.EnableAnnounce)
connection.SendPacket(new PacketServerAnnounceNotify());
// send the new client data, DO NOT REMOVE THIS CODE
connection.SendPacket(new PacketClientDownloadDataScNotify(Convert.FromBase64String("bG9jYWwgZnVuY3Rpb24gdmVyc2lvbl90ZXh0KCkNCiAgICBsb2NhbCB1aWQgPSBDUy5Vbml0eUVuZ2luZS5HYW1lT2JqZWN0LkZpbmQoIlZlcnNpb25UZXh0Iik6R2V0Q29tcG9uZW50KCJUZXh0IikNCiAgICBpZiBub3Qgc3RyaW5nLm1hdGNoKHVpZC50ZXh0LCAi5q2k5pyN5Yqh56uvIikgdGhlbg0KICAgICAgICB1aWQudGV4dCA9ICLmraTmnI3liqHnq6/ku4XnlKjkvZzlrabkuaDkuqTmtYHvvIzor7fmlK/mjIHmraPniYjmuLjmiI9cbiIgLi4gdWlkLnRleHQNCiAgICAgICAgdWlkLmZvbnRTaXplID0gNzYuMA0KICAgIGVuZA0KICAgIGxvY2FsIGJldGEgPSBDUy5Vbml0eUVuZ2luZS5HYW1lT2JqZWN0LkZpbmQoIlVJUm9vdC9BYm92ZURpYWxvZy9CZXRhSGludERpYWxvZyhDbG9uZSkiKTpHZXRDb21wb25lbnQoIlRleHQiKQ0KZW5kDQoNCnZlcnNpb25fdGV4dCgp")));
// DO NOT REMOVE THIS CODE
// This code is responsible for sending the client data to the player
switch (ConfigManager.Config.ServerOption.Language)
{
case "CHS":
connection.SendPacket(new PacketClientDownloadDataScNotify(Convert.FromBase64String("bG9jYWwgZnVuY3Rpb24gdmVyc2lvbl90ZXh0KCkKICAgIGxvY2FsIHVpZCA9IENTLlVuaXR5RW5naW5lLkdhbWVPYmplY3QuRmluZCgiVmVyc2lvblRleHQiKTpHZXRDb21wb25lbnQoIlRleHQiKQogICAgaWYgbm90IHN0cmluZy5tYXRjaCh1aWQudGV4dCwgIkRhbmhlbmcgU2VydmVyIikgdGhlbgogICAgICAgIHVpZC50ZXh0ID0gIkRhbmhlbmdTZXJ2ZXLkuLrljYrlvIDmupDlhY3otLnmnI3liqHnq69cbuatpOacjeWKoeerr+S7heeUqOS9nOWtpuS5oOS6pOa1ge+8jOivt+aUr+aMgeato+eJiOa4uOaIjyAiIC4uIHVpZC50ZXh0CiAgICAgICAgdWlkLmZvbnRTaXplID0gNzYuMAogICAgZW5kCiAgICBsb2NhbCBiZXRhID0gQ1MuVW5pdHlFbmdpbmUuR2FtZU9iamVjdC5GaW5kKCJVSVJvb3QvQWJvdmVEaWFsb2cvQmV0YUhpbnREaWFsb2coQ2xvbmUpIik6R2V0Q29tcG9uZW50KCJUZXh0IikKZW5kCgp2ZXJzaW9uX3RleHQoKQ==")));
break;
case "CHT":
connection.SendPacket(new PacketClientDownloadDataScNotify(Convert.FromBase64String("bG9jYWwgZnVuY3Rpb24gdmVyc2lvbl90ZXh0KCkKICAgIGxvY2FsIHVpZCA9IENTLlVuaXR5RW5naW5lLkdhbWVPYmplY3QuRmluZCgiVmVyc2lvblRleHQiKTpHZXRDb21wb25lbnQoIlRleHQiKQogICAgaWYgbm90IHN0cmluZy5tYXRjaCh1aWQudGV4dCwgIkRhbmhlbmcgU2VydmVyIikgdGhlbgogICAgICAgIHVpZC50ZXh0ID0gIkRhbmhlbmdTZXJ2ZXLngrrljYrplovmupDlhY3osrvkvLrmnI3lmajou5/pq5RcbuatpOS8uuacjeWZqOi7n+mrlOWDheeUqOS9nOWtuOe/kuS6pOa1ge+8jOiri+aUr+aMgeato+eJiOmBiuaIsiAiIC4uIHVpZC50ZXh0CiAgICAgICAgdWlkLmZvbnRTaXplID0gNzYuMAogICAgZW5kCiAgICBsb2NhbCBiZXRhID0gQ1MuVW5pdHlFbmdpbmUuR2FtZU9iamVjdC5GaW5kKCJVSVJvb3QvQWJvdmVEaWFsb2cvQmV0YUhpbnREaWFsb2coQ2xvbmUpIik6R2V0Q29tcG9uZW50KCJUZXh0IikKZW5kCgp2ZXJzaW9uX3RleHQoKQ==")));
break;
default:
connection.SendPacket(new PacketClientDownloadDataScNotify(Convert.FromBase64String("bG9jYWwgZnVuY3Rpb24gdmVyc2lvbl90ZXh0KCkKICAgIGxvY2FsIHVpZCA9IENTLlVuaXR5RW5naW5lLkdhbWVPYmplY3QuRmluZCgiVmVyc2lvblRleHQiKTpHZXRDb21wb25lbnQoIlRleHQiKQogICAgaWYgbm90IHN0cmluZy5tYXRjaCh1aWQudGV4dCwgIkRhbmhlbmcgU2VydmVyIikgdGhlbgogICAgICAgIHVpZC50ZXh0ID0gIkRhbmhlbmcgU2VydmVyIGlzIGEgc2VtaSBvcGVuLXNvdXJjZSBzZXJ2ZXIgc29mdHdhcmUuXG5FZHVjYXRpb25hbCBwdXJwb3NlIG9ubHksIHBsZWFzZSBzdXBwb3J0IHRoZSBnZW51aW5lIGdhbWUuICIgLi4gdWlkLnRleHQKICAgICAgICB1aWQuZm9udFNpemUgPSA3Ni4wCiAgICBlbmQKICAgIGxvY2FsIGJldGEgPSBDUy5Vbml0eUVuZ2luZS5HYW1lT2JqZWN0LkZpbmQoIlVJUm9vdC9BYm92ZURpYWxvZy9CZXRhSGludERpYWxvZyhDbG9uZSkiKTpHZXRDb21wb25lbnQoIlRleHQiKQplbmQKCnZlcnNpb25fdGV4dCgp")));
break;
}
}
}
}

View File

@@ -28,7 +28,20 @@ namespace EggLink.DanhengServer.Server.Packet.Recv.Tutorial
connection.SendPacket(new PacketClientDownloadDataScNotify(fileBytes));
}
connection.SendPacket(new PacketClientDownloadDataScNotify(Convert.FromBase64String("bG9jYWwgZnVuY3Rpb24gb25EaWFsb2dDbG9zZWQoKQogICAgLS0g5omT5byA5oyH5a6a55qEVVJMCiAgICBDUy5Vbml0eUVuZ2luZS5BcHBsaWNhdGlvbi5PcGVuVVJMKCJodHRwczovL3NyLm1paG95by5jb20vIikKZW5kCgpsb2NhbCBmdW5jdGlvbiBzaG93X2hpbnQoKQogICAgQ1MuUlBHLkNsaWVudC5Db25maXJtRGlhbG9nVXRpbC5TaG93Q3VzdG9tT2tDYW5jZWxIaW50KAogICAgICAgICLmrKLov47kvb/nlKhEYW5oZW5nIFNlcnZlciEgV2VsY29tZSEgXG7kuLnmgZLCt+W0qeWdjzrmmJ/nqbnpk4HpgZNcblRISVMgU0VSVkVSIElTIFRPVEFMTFkgRlJFRSEgSUYgWU9VIFBBWSBGT1IgSVQsIFlPVSBIQVZFIEJFRU4gU0NBTU1FRO+8gVxuVGhpcyBzZXJ2ZXIgaXMgb25seSBmb3IgY29tbXVuaWNhdGluZywgcGxlYXNlIGdvIGZvciBvcmlnaW5hbCBlZGl0aW9uXG7mnKzmnI3liqHlmajlrozlhajlhY3otLnvvIzlpoLmnpzmgqjmmK/otK3kubDlvpfliLDnmoQs6YKj5LmI5oKo5bey57uP6KKr6aqX5LqG77yBXG7mraTmnI3liqHnq6/ku4XnlKjkvZzlrabkuaDkuqTmtYHvvIzor7fmlK/mjIHmraPniYgiLAogICAgICAgIG9uRGlhbG9nQ2xvc2VkCiAgICApCmVuZAoKc2hvd19oaW50KCkK")));
// DO NOT REMOVE THIS CODE
// This code is responsible for sending the client data to the player
switch (ConfigManager.Config.ServerOption.Language)
{
case "CHS":
connection.SendPacket(new PacketClientDownloadDataScNotify(Convert.FromBase64String("bG9jYWwgZnVuY3Rpb24gb25EaWFsb2dDbG9zZWQoKQogICAgQ1MuVW5pdHlFbmdpbmUuQXBwbGljYXRpb24uT3BlblVSTCgiaHR0cHM6Ly9zci5taWhveW8uY29tLyIpCmVuZAoKbG9jYWwgZnVuY3Rpb24gc2hvd19oaW50KCkKICAgIGxvY2FsIHRleHQgPSAi5qyi6L+O5L2/55SoRGFuaGVuZ1NlcnZlcu+8gVxuIgogICAgdGV4dCA9IHRleHQgLi4gIuacrOacjeWKoeWZqOWujOWFqOWFjei0ue+8jOWmguaenOaCqOaYr+i0reS5sOW+l+WIsOeahO+8jOmCo+S5iOaCqOW3sue7j+iiq+mql+S6hu+8gVxuIgogICAgdGV4dCA9IHRleHQgLi4gIuatpOacjeWKoeerr+S7heeUqOS9nOWtpuS5oOS6pOa1ge+8jOivt+aUr+aMgeato+eJiFxuIgogICAgQ1MuUlBHLkNsaWVudC5Db25maXJtRGlhbG9nVXRpbC5TaG93Q3VzdG9tT2tDYW5jZWxIaW50KHRleHQsIG9uRGlhbG9nQ2xvc2VkKQplbmQKCnNob3dfaGludCgp")));
break;
case "CHT":
connection.SendPacket(new PacketClientDownloadDataScNotify(Convert.FromBase64String("bG9jYWwgZnVuY3Rpb24gb25EaWFsb2dDbG9zZWQoKQogICAgQ1MuVW5pdHlFbmdpbmUuQXBwbGljYXRpb24uT3BlblVSTCgiaHR0cHM6Ly9oc3IuaG95b3ZlcnNlLmNvbS8iKQplbmQKCmxvY2FsIGZ1bmN0aW9uIHNob3dfaGludCgpCiAgICBsb2NhbCB0ZXh0ID0gIuatoei/juS9v+eUqERhbmhlbmdTZXJ2ZXLvvIFcbiIKICAgIHRleHQgPSB0ZXh0IC4uICLmnKzkvLrmnI3lmajlrozlhajlhY3osrvvvIzlpoLmnpzmgqjmmK/os7zosrflvpfliLDnmoTjgILpgqPpurzmgqjlt7LntpPooqvpqJnkuobvvIFcbiIKICAgIHRleHQgPSB0ZXh0IC4uICLmraTkvLrmnI3lmajou5/pq5Tlg4Xkvpvlrbjnv5LkuqTmtYHkvb/nlKjvvIzoq4vmlK/mjIHmraPniYhcbiIKICAgIENTLlJQRy5DbGllbnQuQ29uZmlybURpYWxvZ1V0aWwuU2hvd0N1c3RvbU9rQ2FuY2VsSGludCh0ZXh0LCBvbkRpYWxvZ0Nsb3NlZCkKZW5kCgpzaG93X2hpbnQoKQ==")));
break;
default:
connection.SendPacket(new PacketClientDownloadDataScNotify(Convert.FromBase64String("bG9jYWwgZnVuY3Rpb24gb25EaWFsb2dDbG9zZWQoKQogICAgQ1MuVW5pdHlFbmdpbmUuQXBwbGljYXRpb24uT3BlblVSTCgiaHR0cHM6Ly9oc3IuaG95b3ZlcnNlLmNvbS8iKQplbmQKCmxvY2FsIGZ1bmN0aW9uIHNob3dfaGludCgpCiAgICBsb2NhbCB0ZXh0ID0gIldlbGNvbWUgdG8gRGFuaGVuZ1NlcnZlciFcbiIKICAgIHRleHQgPSB0ZXh0IC4uICJUaGlzIHNlcnZlciBzb2Z0d2FyZSBpcyB0b3RhbGx5IGZyZWUuXG4iCiAgICB0ZXh0ID0gdGV4dCAuLiAiSWYgeW91IHBheSBmb3IgaXQsIHlvdSBoYXZlIGJlZW4gc2NhbW1lZC5cbiIKICAgIHRleHQgPSB0ZXh0IC4uICJFZHVjYXRpb25hbCBwdXJwb3NlIG9ubHksIHBsZWFzZSBzdXBwb3J0IHRoZSBnZW51aW5lIGdhbWUuIgogICAgQ1MuUlBHLkNsaWVudC5Db25maXJtRGlhbG9nVXRpbC5TaG93Q3VzdG9tT2tDYW5jZWxIaW50KHRleHQsIG9uRGlhbG9nQ2xvc2VkKQplbmQKCnNob3dfaGludCgp")));
break;
}
}
}
}

View File

@@ -19,7 +19,7 @@ namespace EggLink.DanhengServer.Server.Packet.Send.Others
BeginTime = Extensions.GetUnixSec(),
EndTime = Extensions.GetUnixSec() + 3600,
ConfigId = 1,
NAFKMMGJCND = ConfigManager.Config.ServerOption.ServerAnnounce.AnnounceContent,
CHJPFPLHJBJ = ConfigManager.Config.ServerOption.ServerAnnounce.AnnounceContent,
});
if (ConfigManager.Config.ServerOption.ServerAnnounce.EnableAnnounce)