Skip to content

Commit

Permalink
fixed achievement chat parsing (close #281)
Browse files Browse the repository at this point in the history
  • Loading branch information
foglio1024 committed Oct 26, 2023
1 parent 0b5feb3 commit 29d3a0f
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 44 deletions.
10 changes: 5 additions & 5 deletions TCC.Core/Data/Chat/MessagePieceBuilder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public static string ParseSysMsgAchi(string msgText)

var id = ChatUtils.GetId(dictionary, "achievement");
var achiName = id.ToString();
if (Game.DB!.AchievementDatabase.Achievements.TryGetValue(id * 1000 + 1, out var g2))
if (Game.DB!.AchievementDatabase.TryGetAchievementName(id, out var g2))
{
achiName = $"[{g2}]";
}
Expand All @@ -67,7 +67,7 @@ public static string ParseSysMsgQuest(string msgText)
public static string ParseSysMsgAchiGrade(string msgText)
{
var dictionary = ChatUtils.BuildParametersDictionary(msgText);
var id = ChatUtils.GetId(dictionary, "AchievementGradeInfo");
var id = ChatUtils.GetId(dictionary, "achievementgradeinfo");
var txt = id.ToString();
if (Game.DB!.AchievementGradeDatabase.Grades.TryGetValue(id, out var g)) txt = g;
return txt;
Expand All @@ -83,7 +83,7 @@ public static string ParseSysMsgDungeon(string msgText)
public static string ParseSysMsgAccBenefit(string msgText)
{
var dictionary = ChatUtils.BuildParametersDictionary(msgText);
var id = ChatUtils.GetId(dictionary, "accountBenefit");
var id = ChatUtils.GetId(dictionary, "accountbenefit");
var txt = id.ToString();
if (Game.DB!.AccountBenefitDatabase.Benefits.TryGetValue(id, out var ab)) txt = ab;
return txt;
Expand All @@ -92,7 +92,7 @@ public static string ParseSysMsgGuildQuest(string msgText)
{
var dictionary = ChatUtils.BuildParametersDictionary(msgText);

var id = ChatUtils.GetId(dictionary, "GuildQuest");
var id = ChatUtils.GetId(dictionary, "guildquest");
var questName = id.ToString();
if (Game.DB!.GuildQuestDatabase.GuildQuests.TryGetValue(id, out var q))
{
Expand Down Expand Up @@ -164,7 +164,7 @@ public static SimpleMessagePiece BuildSysMsgAchiGrade(string msgText)
{
var dictionary = ChatUtils.BuildParametersDictionary(msgText);

var id = ChatUtils.GetId(dictionary, "AchievementGradeInfo");
var id = ChatUtils.GetId(dictionary, "achievementgradeinfo");
var txt = id.ToString();
var col = "fcb06f";

Expand Down
36 changes: 18 additions & 18 deletions TCC.Core/Data/Chat/SystemMessage.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,69 +95,69 @@ void ParseSysHtmlPiece(HtmlNode piece, Dictionary<string, string> prm)
}

MessagePieceBase mp;
if (inPiece.StartsWith("@select"))
if (inPiece.StartsWith("@select", StringComparison.InvariantCultureIgnoreCase))
{
selectionStep++;
continue;
}
if (inPiece.StartsWith("@item"))
if (inPiece.Contains("@item", StringComparison.InvariantCultureIgnoreCase))
{
mp = MessagePieceBuilder.BuildSysMsgItem(inPiece);
}
else if (inPiece.StartsWith("@abnormal"))
else if (inPiece.Contains("@abnormal", StringComparison.InvariantCultureIgnoreCase))
{
var abName = "Unknown";
if (Game.DB!.AbnormalityDatabase.Abnormalities.TryGetValue(
uint.Parse(inPiece.Split(':')[1]), out var ab)) abName = ab.Name;
mp = new SimpleMessagePiece(abName, App.Settings.FontSize, false) { Color = col };
}
else if (inPiece.StartsWith("@achievement"))
{
mp = MessagePieceBuilder.BuildSysMsgAchi(inPiece);
mp.Color = col;
}
else if (inPiece.StartsWith("@GuildQuest"))
else if (inPiece.Contains("@guildquest", StringComparison.InvariantCultureIgnoreCase))
{
mp = MessagePieceBuilder.BuildSysMsgGuildQuest(inPiece);
mp.Color = col;
}
else if (inPiece.StartsWith("@dungeon"))
else if (inPiece.Contains("@dungeon", StringComparison.InvariantCultureIgnoreCase))
{
mp = MessagePieceBuilder.BuildSysMsgDungeon(inPiece);
mp.Color = col;
}
else if (inPiece.StartsWith("@accountBenefit"))
else if (inPiece.Contains("@accountbenefit", StringComparison.InvariantCultureIgnoreCase))
{
mp = MessagePieceBuilder.BuildSysMsgAccBenefit(inPiece);
mp.Color = col;
}
else if (inPiece.StartsWith("@AchievementGradeInfo"))
else if (inPiece.Contains("@achievementgradeinfo", StringComparison.InvariantCultureIgnoreCase))
{
mp = MessagePieceBuilder.BuildSysMsgAchiGrade(inPiece);
}
else if (inPiece.StartsWith("@quest"))
else if (inPiece.Contains("@achievement", StringComparison.InvariantCultureIgnoreCase)) // this has to be here, find a better way pls
{
mp = MessagePieceBuilder.BuildSysMsgAchi(inPiece);
mp.Color = col;
}
else if (inPiece.Contains("@quest", StringComparison.InvariantCultureIgnoreCase))
{
mp = MessagePieceBuilder.BuildSysMsgQuest(inPiece);
mp.Color = col;
}
else if (inPiece.StartsWith("@creature"))
else if (inPiece.Contains("@creature", StringComparison.InvariantCultureIgnoreCase))
{
mp = MessagePieceBuilder.BuildSysMsgCreature(inPiece);
mp.Color = col;
}
else if (inPiece.StartsWith("@rgn"))
else if (inPiece.Contains("@rgn", StringComparison.InvariantCultureIgnoreCase))
{
mp = MessagePieceBuilder.BuildSysMsgRegion(inPiece);
mp.Color = col;
}
else if (inPiece.StartsWith("@zoneName"))
else if (inPiece.Contains("@zonename", StringComparison.InvariantCultureIgnoreCase))
{
mp = MessagePieceBuilder.BuildSysMsgZone(inPiece);
mp.Color = col;
}
else if (inPiece.Contains("@money"))
else if (inPiece.Contains("@money", StringComparison.InvariantCultureIgnoreCase))
{
var t = inPiece.Replace("@money", "");
var t = inPiece.Replace("@money", "", StringComparison.InvariantCultureIgnoreCase);
mp = new MoneyMessagePiece(new Money(t));
Channel = ChatChannel.Money;
}
Expand Down
30 changes: 15 additions & 15 deletions TCC.Core/Data/Chat/SystemMessagesProcessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,56 +60,56 @@ static string Build(SystemMessageData template, params string[] parameters)
}

string mp;
if (inPiece.StartsWith("@select"))
if (inPiece.StartsWith("@select", StringComparison.InvariantCultureIgnoreCase))
{
selectionStep++;
continue;
}

if (inPiece.StartsWith("@item"))
if (inPiece.StartsWith("@item", StringComparison.InvariantCultureIgnoreCase))
{
mp = SystemMessageParser.ParseSysMsgItem(inPiece);
}
else if (inPiece.StartsWith("@abnormal"))
else if (inPiece.StartsWith("@abnormal", StringComparison.InvariantCultureIgnoreCase))
{
var abName = "Unknown";
if (Game.DB!.AbnormalityDatabase.Abnormalities.TryGetValue(uint.Parse(inPiece.Split(':')[1]),
out var ab)) abName = ab.Name;
mp = abName;
}
else if (inPiece.StartsWith("@achievement"))
{
mp = SystemMessageParser.ParseSysMsgAchi(inPiece);
}
else if (inPiece.StartsWith("@GuildQuest"))
else if (inPiece.StartsWith("@GuildQuest", StringComparison.InvariantCultureIgnoreCase))
{
mp = SystemMessageParser.ParseSysMsgGuildQuest(inPiece);
}
else if (inPiece.StartsWith("@dungeon"))
else if (inPiece.StartsWith("@dungeon", StringComparison.InvariantCultureIgnoreCase))
{
mp = SystemMessageParser.ParseSysMsgDungeon(inPiece);
}
else if (inPiece.StartsWith("@accountBenefit"))
else if (inPiece.StartsWith("@accountBenefit", StringComparison.InvariantCultureIgnoreCase))
{
mp = SystemMessageParser.ParseSysMsgAccBenefit(inPiece);
}
else if (inPiece.StartsWith("@AchievementGradeInfo"))
else if (inPiece.StartsWith("@AchievementGradeInfo", StringComparison.InvariantCultureIgnoreCase))
{
mp = SystemMessageParser.ParseSysMsgAchiGrade(inPiece);
}
else if (inPiece.StartsWith("@quest"))
else if (inPiece.StartsWith("@achievement", StringComparison.InvariantCultureIgnoreCase))
{
mp = SystemMessageParser.ParseSysMsgAchi(inPiece);
}
else if (inPiece.StartsWith("@quest", StringComparison.InvariantCultureIgnoreCase))
{
mp = SystemMessageParser.ParseSysMsgQuest(inPiece);
}
else if (inPiece.StartsWith("@creature"))
else if (inPiece.StartsWith("@creature", StringComparison.InvariantCultureIgnoreCase))
{
mp = SystemMessageParser.ParseSysMsgCreature(inPiece);
}
else if (inPiece.StartsWith("@rgn"))
else if (inPiece.StartsWith("@rgn", StringComparison.InvariantCultureIgnoreCase))
{
mp = SystemMessageParser.ParseSysMsgRegion(inPiece);
}
else if (inPiece.StartsWith("@zoneName"))
else if (inPiece.StartsWith("@zoneName", StringComparison.InvariantCultureIgnoreCase))
{
mp = SystemMessageParser.ParseSysMsgZone(inPiece);
}
Expand Down
52 changes: 46 additions & 6 deletions TCC.Core/Data/Databases/AchievementDatabase.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,21 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.IO;
using System.Runtime.InteropServices.ComTypes;

namespace TCC.Data.Databases;

public readonly record struct Achievement(uint Id, uint NameId, string Name);

public class AchievementDatabase : DatabaseBase
{
public readonly Dictionary<uint, string> Achievements;
readonly Dictionary<uint, Achievement> _achievements;
readonly Dictionary<uint, Achievement> _achievementsByName;
public AchievementDatabase(string lang) : base(lang)
{
Achievements = new Dictionary<uint, string>();
_achievements = new Dictionary<uint, Achievement>();
_achievementsByName = new Dictionary<uint, Achievement>();
}

protected override string FolderName => "achievements";
Expand All @@ -17,7 +24,8 @@ public AchievementDatabase(string lang) : base(lang)

public override void Load()
{
Achievements.Clear();
_achievements.Clear();
_achievementsByName.Clear();
//var f = File.OpenText(FullPath);
var lines = File.ReadAllLines(FullPath);
foreach (var line in lines)
Expand All @@ -26,9 +34,41 @@ public override void Load()
if (string.IsNullOrWhiteSpace(line)) break;
var s = line.Split('\t');
if (!uint.TryParse(s[0], out var id)) continue;
var name = s[1];
if (!uint.TryParse(s[1], out var nameid)) continue;
var name = s[2];

var achi = new Achievement(id, nameid, name);
_achievements[id] = achi;
_achievementsByName[nameid] = achi;
}
}

public bool TryGetAchievementNameById(uint id, [NotNullWhen(true)] out string? name)
{
var ret = _achievements.TryGetValue(id, out var achi);
if (!ret)
{
name = null;
return false;
}
name = achi.Name;
return true;
}

Achievements.Add(id, name);
public bool TryGetAchievementNameByNameId(uint nameId, [NotNullWhen(true)] out string? name)
{
var ret = _achievementsByName.TryGetValue(nameId, out var achi);
if (!ret)
{
name = null;
return false;
}
name = achi.Name;
return true;
}

public bool TryGetAchievementName(uint id, [NotNullWhen(true)] out string? o)
{
return TryGetAchievementNameById(id, out o) || TryGetAchievementNameByNameId(id ,out o);
}
}

0 comments on commit 29d3a0f

Please sign in to comment.