Skip to content
This repository has been archived by the owner on Nov 1, 2024. It is now read-only.

Commit

Permalink
Новые команды setallbalance и setbalance
Browse files Browse the repository at this point in the history
  • Loading branch information
Ivan Rubinov committed Jun 3, 2024
1 parent 6b21198 commit 6c9e6c2
Show file tree
Hide file tree
Showing 4 changed files with 116 additions and 0 deletions.
93 changes: 93 additions & 0 deletions Content.Server/Administration/Commands/CorvaxSetBalanceCommand.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
using Content.Server.RoundEnd;
using Content.Shared.Administration;
using Robust.Shared.Console;
using Content.Server.Database;
using System.Threading;
using Content.Shared.Preferences;
using Content.Shared.Preferences.Loadouts;

namespace Content.Server.Administration.Commands
{

[AdminCommand(AdminFlags.Admin)]
public sealed class SetAllBalanceCommand : IConsoleCommand
{
[Dependency] private readonly IServerDbManager _dbManager = default!;
public string Command => "setallbalance";
public string Description => Loc.GetString("set-all-balance-command-description");
public string Help => Loc.GetString("set-all-balance-command-help-text", ("command",Command));

public void Execute(IConsoleShell shell, string argStr, string[] args)
{
var loc = IoCManager.Resolve<ILocalizationManager>();

if (args.Length == 1 && int.TryParse(args[0], out var set_balance))
{
_dbManager.SetAllBalance(set_balance);
}
else if (args.Length == 1)
{
shell.WriteLine(Loc.GetString("shell-argument-number-invalid", ("index", "1")));
}
else
{
_dbManager.SetAllBalance(25000);
}
}
}

[AdminCommand(AdminFlags.Admin)]
public sealed class SetBalanceCommand : IConsoleCommand
{
[Dependency] private readonly IServerDbManager _dbManager = default!;
public string Command => "setbalance";
public string Description => Loc.GetString("set-balance-command-description");
public string Help => Loc.GetString("set-balance-command-help-text", ("command", Command));

public async void Execute(IConsoleShell shell, string argStr, string[] args)
{
var loc = IoCManager.Resolve<ILocalizationManager>();
var set_balance = 0;
int.TryParse(args[1], out set_balance);
if (args.Length == 1 || args.Length == 2)
{
var _userId = await _dbManager.GetPlayerRecordByUserName(args[0], new CancellationToken());
if (_userId is not null) {
var userId = _userId.UserId;
var _profile = await _dbManager.GetPlayerPreferencesAsync(userId, new CancellationToken());
if (_profile is not null) {
foreach (var item in _profile.Characters)
{
if (item.Value is HumanoidCharacterProfile profile)
{
var newProfile = new HumanoidCharacterProfile(
profile.Name,
profile.FlavorText,
profile.Species,
profile.Age,
profile.Sex,
profile.Gender,
set_balance,
profile.Appearance,
profile.SpawnPriority,
profile.JobPriorities,
profile.PreferenceUnavailable,
profile.AntagPreferences,
profile.TraitPreferences,
new Dictionary<string, RoleLoadout>(profile.Loadouts));
await _dbManager.SaveCharacterSlotAsync(userId, newProfile, item.Key);
}
}
}
}
}
else
{
shell.WriteLine(Loc.GetString("shell-need-between-arguments", ("lower", "1"), ("upper", "2")));
}

}
}


}
7 changes: 7 additions & 0 deletions Content.Server/Database/ServerDbBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,13 @@ private static HumanoidCharacterProfile ConvertProfiles(Profile profile)
);
}

public async Task SetAllBalance(int set_balance)
{
await using var db = await GetDb();
await db.DbContext.Database.ExecuteSqlAsync($"""UPDATE profile SET bank_balance = {set_balance}""");
await db.DbContext.SaveChangesAsync();
}

private static Profile ConvertProfiles(HumanoidCharacterProfile humanoid, int slot, Profile? profile = null)
{
profile ??= new Profile();
Expand Down
11 changes: 11 additions & 0 deletions Content.Server/Database/ServerDbManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,12 @@ public Task EditServerRoleBan(
/// <param name="updates">The list of all updates to apply to the database.</param>
Task UpdatePlayTimes(IReadOnlyCollection<PlayTimeUpdate> updates);

/// <summary>
/// Change balance in db
/// </summary>
/// <param name="money">The list of all updates to apply to the database.</param>
Task SetAllBalance(int set_balance);

#endregion

#region Player Records
Expand Down Expand Up @@ -519,6 +525,11 @@ public Task UpdatePlayerRecordAsync(
return RunDbCommand(() => _db.UpdatePlayerRecord(userId, userName, address, hwId));
}

public Task SetAllBalance(int set_balance) {
DbWriteOpsMetric.Inc();
return RunDbCommand(() => _db.SetAllBalance(set_balance));
}

public Task<PlayerRecord?> GetPlayerRecordByUserName(string userName, CancellationToken cancel = default)
{
DbReadOpsMetric.Inc();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
set-all-balance-command-description = Комманда которая ставит баланс у всех.
set-all-balance-command-help-text = Записывает данные в базу данных напрямую. ИСПОЛЬЗОВАТЬ ТОЛЬКО В ЛОББИ И ПОСЛЕ ЧЕГО ПЕРЕЗАПУСТИТЬ СЕРВЕР.
set-balance-command-description = Команда которая устанавливает баланс по ckey/username.
set-balance-command-help-text = Записывает данные в базу данных напрямую. Первый аргумент - username, Второй не обязательный - значение баланса, если ничего нет ставит 0. ИСПОЛЬЗОВАТЬ ТОЛЬКО В ЛОББИ И ПОСЛЕ ЧЕГО ПЕРЕЗАПУСТИТЬ СЕРВЕР.

0 comments on commit 6c9e6c2

Please sign in to comment.