[Tweak] Ghost respawn check upgrade (#441)

* [Tweak] Ghost respawn check upgrade

* fix
This commit is contained in:
HitPanda
2023-09-27 06:59:45 +03:00
committed by Aviu00
parent 3854704b3e
commit 4009932fb2
2 changed files with 77 additions and 8 deletions

View File

@@ -164,21 +164,64 @@ namespace Content.Server.GameTicking
//WD start //WD start
//Ghost system return to round, check for whether the character isn't the same. //Ghost system return to round, check for whether the character isn't the same.
if (lateJoin) if (lateJoin && !_adminManager.IsAdmin(player))
{ {
var sameChar = false;
var checkAvoid = false;
var allPlayerMinds = EntityQuery<MindComponent>() var allPlayerMinds = EntityQuery<MindComponent>()
.Where(mind => mind.OriginalOwnerUserId == player.UserId); .Where(mind => mind.OriginalOwnerUserId == player.UserId);
foreach (var mind in allPlayerMinds) foreach (var mind in allPlayerMinds)
{ {
if (mind.CharacterName == character.Name && !_adminManager.IsAdmin(player)) if (mind.CharacterName == character.Name)
{ {
var message = Loc.GetString("ghost-respawn-same-character"); sameChar = true;
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message)); break;
_chatManager.ChatMessageToOne(ChatChannel.Server, message, wrappedMessage,
default, false, player.ConnectedClient, Color.Red);
return;
} }
if (mind.ClownName == character.ClownName
&& mind.BorgName == character.BorgName
&& mind.MimeName == character.MimeName)
{
sameChar = true;
break;
}
if (mind.CharacterName != null)
{
var similarity = CalculateStringSimilarity(mind.CharacterName, character.Name);
switch (similarity)
{
case >= 85f:
{
_chatManager.SendAdminAlert(Loc.GetString("ghost-respawn-character-almost-same",
("player", player.Name), ("try", false), ("oldName", mind.CharacterName), ("newName", character.Name)));
checkAvoid = true;
sameChar = true;
break;
}
case >= 50f:
{
_chatManager.SendAdminAlert(Loc.GetString("ghost-respawn-character-almost-same",
("player", player.Name), ("try", true), ("oldName", mind.CharacterName),
("newName", character.Name)));
break;
}
}
}
}
if (sameChar)
{
var message = checkAvoid
? Loc.GetString("ghost-respawn-same-character-slightly-changed-name")
: Loc.GetString("ghost-respawn-same-character");
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message));
_chatManager.ChatMessageToOne(ChatChannel.Server, message, wrappedMessage,
default, false, player.ConnectedClient, Color.Red);
return;
} }
} }
//WD end //WD end
@@ -323,6 +366,27 @@ namespace Content.Server.GameTicking
RaiseLocalEvent(mob, aev, true); RaiseLocalEvent(mob, aev, true);
} }
//WD start - Need this to check player not respawning with the slightly changed name in the same round.
private float CalculateStringSimilarity(string str1, string str2)
{
var minLength = Math.Min(str1.Length, str2.Length);
var matchingCharacters = 0;
for (var i = 0; i < minLength; i++)
{
if (str1[i] == str2[i])
{
matchingCharacters++;
}
}
float maxLength = Math.Max(str1.Length, str2.Length);
var similarityPercentage = (matchingCharacters / maxLength) * 100;
return similarityPercentage;
}
//WD end
private HumanoidCharacterProfile ReplaceBlacklistedSpecies(ICommonSession player, HumanoidCharacterProfile character, JobPrototype jobPrototype) private HumanoidCharacterProfile ReplaceBlacklistedSpecies(ICommonSession player, HumanoidCharacterProfile character, JobPrototype jobPrototype)
{ {
var whitelistedSpecies = jobPrototype.WhitelistedSpecies; var whitelistedSpecies = jobPrototype.WhitelistedSpecies;

View File

@@ -29,3 +29,8 @@ ghost-respawn-window-request-button = Принять
ghost-respawn-window-rules-footer = Пользуясь это функцией, вы [color=#ff7700]обязуетесь[/color] [color=#ff0000]не переносить[/color] знания своего прошлого персонажа в нового, [color=#ff0000]не метамстить[/color]. Каждый новый персонаж - [color=#ff7700]чистый уникальный лист[/color], который никак не связан с предыдущим. Поэтому не забудьте [color=#ff7700]поменять персонажа[/color] перед заходом, а также помните, что за нарушение пункта, указанного здесь, следует [color=#ff0000]бан в размере от 3ех дней[/color]. ghost-respawn-window-rules-footer = Пользуясь это функцией, вы [color=#ff7700]обязуетесь[/color] [color=#ff0000]не переносить[/color] знания своего прошлого персонажа в нового, [color=#ff0000]не метамстить[/color]. Каждый новый персонаж - [color=#ff7700]чистый уникальный лист[/color], который никак не связан с предыдущим. Поэтому не забудьте [color=#ff7700]поменять персонажа[/color] перед заходом, а также помните, что за нарушение пункта, указанного здесь, следует [color=#ff0000]бан в размере от 3ех дней[/color].
ghost-respawn-bug = Нет времени смерти. Установлено стандартное значение. ghost-respawn-bug = Нет времени смерти. Установлено стандартное значение.
ghost-respawn-same-character = Нельзя заходить в раунд за того же персонажа. Поменяйте его в настройках персонажей. ghost-respawn-same-character = Нельзя заходить в раунд за того же персонажа. Поменяйте его в настройках персонажей.
ghost-respawn-character-almost-same = Игрок { $player } { $try ->
[true] зашёл
*[false] попытался зайти
} в раунд после респауна с похожим именем. Прошлое имя: { $oldName }, текущее: { $newName }.
ghost-respawn-same-character-slightly-changed-name = Попытка обойти запрет входа в раунд тем же персонажем. Ваши действия будут переданы администрации!