v1.2.2.b4
- #### General:
- ###### Updated the GitHub source code to implement the changes introduced in merge request (https://github.com/Juzlus/jRandomSkills/pull/32).
- #### Skill improvements:
- ###### Ninja:
- ###### Removed debug chat messages that were used for testing.
This commit is contained in:
parent
36bd85ef06
commit
42e5453fd4
25 changed files with 212 additions and 268 deletions
|
|
@ -71,9 +71,6 @@ namespace src.utils
|
|||
|
||||
public class SettingsModel
|
||||
{
|
||||
[DisplayName("Game Mode")]
|
||||
[Description("TESTfafw..")]
|
||||
[Range(0, 5)]
|
||||
public string ConfigName { get; set; }
|
||||
public int GameMode { get; set; }
|
||||
public bool YourSkillChatInfo { get; set; }
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ namespace src.utils
|
|||
if (!File.Exists(langPath))
|
||||
return;
|
||||
|
||||
var code = Path.GetFileNameWithoutExtension(langPath).ToLower();
|
||||
var code = Path.GetFileNameWithoutExtension(langPath).ToLowerInvariant();
|
||||
var jsonText = File.ReadAllText(langPath);
|
||||
var translations = JsonConvert.DeserializeObject<ConcurrentDictionary<string, string>>(jsonText);
|
||||
|
||||
|
|
@ -60,7 +60,7 @@ namespace src.utils
|
|||
|
||||
public static bool HasTranslation(string code)
|
||||
{
|
||||
return _translations.ContainsKey(code.ToLower());
|
||||
return _translations.ContainsKey(code.ToLowerInvariant());
|
||||
}
|
||||
|
||||
public static string GetSkillName(this CCSPlayerController player, Skills skill, float? chance = null)
|
||||
|
|
@ -68,7 +68,7 @@ namespace src.utils
|
|||
string langCode = GetLangCode(player);
|
||||
if (chance == null)
|
||||
{
|
||||
var translation = GetTranslation(skill.ToString().ToLower(), langCode);
|
||||
var translation = GetTranslation(skill.ToString().ToLowerInvariant(), langCode);
|
||||
if (!translation.Contains("{0}"))
|
||||
return translation;
|
||||
|
||||
|
|
@ -81,7 +81,7 @@ namespace src.utils
|
|||
}
|
||||
|
||||
var value = Math.Round((double)(chance ?? 1), 2);
|
||||
var skillNameText = GetTranslation(skill.ToString().ToLower(), langCode, player, value);
|
||||
var skillNameText = GetTranslation(skill.ToString().ToLowerInvariant(), langCode, player, value);
|
||||
if (skillNameText.Contains('%')) skillNameText = skillNameText.Replace(value.ToString(), Math.Round(value * 100, 0).ToString());
|
||||
return skillNameText;
|
||||
}
|
||||
|
|
@ -91,7 +91,7 @@ namespace src.utils
|
|||
string langCode = GetLangCode(player);
|
||||
if (chance == null)
|
||||
{
|
||||
var translation = GetTranslation($"{skill.ToString().ToLower()}_desc", langCode);
|
||||
var translation = GetTranslation($"{skill.ToString().ToLowerInvariant()}_desc", langCode);
|
||||
if (!translation.Contains("{0}"))
|
||||
return translation;
|
||||
|
||||
|
|
@ -103,12 +103,12 @@ namespace src.utils
|
|||
return string.Join(' ', filtered);
|
||||
}
|
||||
|
||||
var skillName = $"{skill.ToString().ToLower()}_desc2";
|
||||
var skillName = $"{skill.ToString().ToLowerInvariant()}_desc2";
|
||||
var value = Math.Round((double)(chance ?? 1), 2);
|
||||
var desc2 = GetTranslation(skillName, langCode, player, value);
|
||||
|
||||
var skilLDescription = desc2 == skillName
|
||||
? player.GetTranslation($"{skill.ToString().ToLower()}_desc")
|
||||
? player.GetTranslation($"{skill.ToString().ToLowerInvariant()}_desc")
|
||||
: desc2.Contains('%') ? desc2.Replace(value.ToString(), Math.Round(value * 100, 0).ToString()) : desc2;
|
||||
return skilLDescription;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,7 +28,10 @@ namespace src.utils
|
|||
playerPawn.CBodyComponent?.SceneNode == null)
|
||||
return null;
|
||||
|
||||
var rayTrace = RayTraceInterface.Get();
|
||||
CRayTraceInterface? rayTrace;
|
||||
try { rayTrace = RayTraceInterface.Get(); }
|
||||
catch { return null; }
|
||||
|
||||
if (rayTrace == null)
|
||||
return null;
|
||||
|
||||
|
|
@ -111,7 +114,10 @@ namespace src.utils
|
|||
playerPawn.CBodyComponent?.SceneNode == null)
|
||||
return null;
|
||||
|
||||
var rayTrace = RayTraceInterface.Get();
|
||||
CRayTraceInterface? rayTrace;
|
||||
try { rayTrace = RayTraceInterface.Get(); }
|
||||
catch { return null; }
|
||||
|
||||
if (rayTrace == null)
|
||||
return null;
|
||||
|
||||
|
|
|
|||
|
|
@ -524,7 +524,7 @@ namespace src.utils
|
|||
? $"<font class='fontWeight-Bold fontSize-{config.SkillLineSize}'>\u202A{Illiterate.GetRandomText(player.GetSkillName(skillData.Skill))}\u202C</font><br>"
|
||||
: $"<font class='fontWeight-Bold fontSize-{config.SkillLineSize}' color='{skillData.Color}'>\u202A{player.GetSkillName(skillData.Skill)}\u202C</font><br>";
|
||||
|
||||
var skill_select_info = player.GetTranslation($"{playerInfo.Skill.ToString().ToLower()}_select_info");
|
||||
var skill_select_info = player.GetTranslation($"{playerInfo.Skill.ToString().ToLowerInvariant()}_select_info");
|
||||
string remainingLine = string.IsNullOrWhiteSpace(skill_select_info)
|
||||
? ""
|
||||
: $"<font class='fontSize-{config.WSADMenuSelectInfoLineSize}' color='{config.WSADMenuSelectInfoLineColor}'>{skill_select_info}</font><br>";
|
||||
|
|
@ -585,8 +585,8 @@ namespace src.utils
|
|||
{
|
||||
if (jRandomSkills.Instance == null || jRandomSkills.Instance.GameRules == null) return;
|
||||
var teams = Utilities.FindAllEntitiesByDesignerName<CCSTeam>("cs_team_manager");
|
||||
var ctTeam = teams.First(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.CounterTerrorist);
|
||||
var tTeams = teams.First(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.Terrorist);
|
||||
var ctTeam = teams.FirstOrDefault(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.CounterTerrorist);
|
||||
var tTeams = teams.FirstOrDefault(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.Terrorist);
|
||||
if (ctTeam == null || tTeams == null) return;
|
||||
|
||||
short ctScore = (short)(winnerTeam == CsTeam.CounterTerrorist ? ctTeam.Score + 1 : ctTeam.Score);
|
||||
|
|
@ -686,8 +686,8 @@ namespace src.utils
|
|||
private static void UpdateClientTeamScores(MCCSMatch match)
|
||||
{
|
||||
var teams = Utilities.FindAllEntitiesByDesignerName<CCSTeam>("cs_team_manager");
|
||||
var ctTeam = teams.First(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.CounterTerrorist);
|
||||
var tTeams = teams.First(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.Terrorist);
|
||||
var ctTeam = teams.FirstOrDefault(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.CounterTerrorist);
|
||||
var tTeams = teams.FirstOrDefault(t => t.IsValid && (CsTeam)t.TeamNum == CsTeam.Terrorist);
|
||||
|
||||
if (ctTeam != null && tTeams != null)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -18,6 +18,10 @@ namespace src.utils
|
|||
private static SkillsInfoModel config = LoadSkillsInfo();
|
||||
public static SkillsInfoModel LoadedConfig => config;
|
||||
|
||||
private static SkillsInfoModel? _indexedConfig;
|
||||
private static ConcurrentDictionary<string, DefaultSkillInfo> _byName = new();
|
||||
private static readonly ConcurrentDictionary<(Type Type, string Key), MemberInfo?> _memberCache = new();
|
||||
|
||||
public static SkillsInfoModel LoadSkillsInfo()
|
||||
{
|
||||
lock (fileLock)
|
||||
|
|
@ -84,26 +88,39 @@ namespace src.utils
|
|||
{
|
||||
if (config == null) return default!;
|
||||
|
||||
var skillConfig = LoadedConfig.FirstOrDefault(s => s.Name == skill.ToString());
|
||||
if (skillConfig == null) return default!;
|
||||
EnsureIndex();
|
||||
if (!_byName.TryGetValue(skill.ToString()!, out var skillConfig) || skillConfig == null)
|
||||
return default!;
|
||||
|
||||
var prop = skillConfig.GetType().GetProperty(key, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
|
||||
if (prop != null)
|
||||
var member = _memberCache.GetOrAdd((skillConfig.GetType(), key), k =>
|
||||
{
|
||||
var value = prop.GetValue(skillConfig);
|
||||
if (value == null) return default!;
|
||||
else return (T)Convert.ChangeType(value, typeof(T));
|
||||
}
|
||||
MemberInfo? m = k.Type.GetProperty(k.Key, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
|
||||
m ??= k.Type.GetField(k.Key, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
|
||||
return m;
|
||||
});
|
||||
|
||||
var field = skillConfig.GetType().GetField(key, BindingFlags.Public | BindingFlags.Instance | BindingFlags.IgnoreCase);
|
||||
if (field != null)
|
||||
object? value = member switch
|
||||
{
|
||||
var value = field.GetValue(skillConfig);
|
||||
if (value == null) return default!;
|
||||
else return (T)Convert.ChangeType(value, typeof(T));
|
||||
}
|
||||
PropertyInfo p => p.GetValue(skillConfig),
|
||||
FieldInfo f => f.GetValue(skillConfig),
|
||||
_ => null
|
||||
};
|
||||
|
||||
return default!;
|
||||
if (value == null) return default!;
|
||||
return (T)Convert.ChangeType(value, typeof(T));
|
||||
}
|
||||
|
||||
private static void EnsureIndex()
|
||||
{
|
||||
if (ReferenceEquals(_indexedConfig, config)) return;
|
||||
|
||||
var dict = new ConcurrentDictionary<string, DefaultSkillInfo>();
|
||||
foreach (var s in config)
|
||||
dict[s.Name] = s;
|
||||
|
||||
_byName = dict;
|
||||
_indexedConfig = config;
|
||||
_memberCache.Clear();
|
||||
}
|
||||
|
||||
public class SkillsInfoModel : ConcurrentBag<DefaultSkillInfo>
|
||||
|
|
@ -124,7 +141,7 @@ namespace src.utils
|
|||
.Where(instance => instance != null)
|
||||
.Cast<DefaultSkillInfo>())
|
||||
Add(skill);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class DefaultSkillInfo(Skills skill, bool active = true, string color = "#ffffff", CsTeam onlyTeam = CsTeam.None, bool disableOnFreezeTime = false, bool needsTeammates = false, string requiredPermission = "", int maxPerServer = -1, Rarity rarity = Rarity.Common)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue