[Tweak] Ghost respawn check upgrade (#441)
* [Tweak] Ghost respawn check upgrade * fix
This commit is contained in:
@@ -164,21 +164,64 @@ namespace Content.Server.GameTicking
|
||||
|
||||
//WD start
|
||||
//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>()
|
||||
.Where(mind => mind.OriginalOwnerUserId == player.UserId);
|
||||
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");
|
||||
var wrappedMessage = Loc.GetString("chat-manager-server-wrap-message", ("message", message));
|
||||
_chatManager.ChatMessageToOne(ChatChannel.Server, message, wrappedMessage,
|
||||
default, false, player.ConnectedClient, Color.Red);
|
||||
|
||||
return;
|
||||
sameChar = true;
|
||||
break;
|
||||
}
|
||||
|
||||
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
|
||||
@@ -323,6 +366,27 @@ namespace Content.Server.GameTicking
|
||||
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)
|
||||
{
|
||||
var whitelistedSpecies = jobPrototype.WhitelistedSpecies;
|
||||
|
||||
@@ -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-bug = Нет времени смерти. Установлено стандартное значение.
|
||||
ghost-respawn-same-character = Нельзя заходить в раунд за того же персонажа. Поменяйте его в настройках персонажей.
|
||||
ghost-respawn-character-almost-same = Игрок { $player } { $try ->
|
||||
[true] зашёл
|
||||
*[false] попытался зайти
|
||||
} в раунд после респауна с похожим именем. Прошлое имя: { $oldName }, текущее: { $newName }.
|
||||
ghost-respawn-same-character-slightly-changed-name = Попытка обойти запрет входа в раунд тем же персонажем. Ваши действия будут переданы администрации!
|
||||
|
||||
Reference in New Issue
Block a user