Можно к этому коду добавить чтоб подсчитывался шанс выигрыша в процентах от общей суммы ставки и определять победителя по проценту выигрыша? #include <sourcemod>
#include <shop>

enum Lotterystate
{
    LotteryState_None,
    LotteryState_InProgress
};

Lotterystate g_LotteryState;
int g_TotalBet;
int g_PlayerBets[MAXPLAYERS + 1] = {0, ...};
bool g_PlayerHasBet[MAXPLAYERS + 1] =  { false, ... };

public Plugin myinfo = 
{
    name = "Lottery Plugin",
    author = "anon",
    description = "A simple lottery plugin for CS:Source",
    version = "13.37",
    url = "https://www.youtube.com"
};

public void OnPluginStart()
{
    RegConsoleCmd("sm_lot", Command_Lot);
}

public Action Command_Lot(client, args)
{
    if (g_LotteryState == LotteryState_InProgress)
    {
        PrintToChat(client, "\x07000000[Ставки] \x07ffffffЛотерея уже проводится. Пожалуйста, дождитесь ее завершения.");
        return Plugin_Handled;
    }
    
    if (g_PlayerHasBet[client])
    {
        PrintToChat(client, "\x07000000[Ставки] \x07ffffffВы уже сделали ставку. Вы не можете поменять ставку.");
        return Plugin_Handled;
    }

    char arg[64];
    GetCmdArg(1, arg, sizeof(arg));
    
    int credits = Shop_GetClientCredits(client);
    int maxBet;
    
    if (maxBet > credits)
    {
        maxBet = credits;
    }
    
    if (g_TotalBet == 0)
	{
    	if (StrEqual(arg, "x1") || StrEqual(arg, "x2"))
    	{
        	PrintToChat(client, "\x07000000[Ставки] \x07ffffffНикто не сделал ставку. Вы не можете использовать x1/x2.");
        	return Plugin_Handled;
    	}
    	maxBet = credits;
	}
	else
	{
    	maxBet = g_TotalBet * 2;
    	if (maxBet > credits)
    	{
        	maxBet = credits;
    	}
	}

    int amount;
  
    if (StrEqual(arg, "x1"))
    {
        amount = g_TotalBet;  
    }
    
    else if (StrEqual(arg, "x2"))
    {
		amount = g_TotalBet * 2;
	}
	
	else if (StrEqual(arg, "all"))
	{
		amount = credits;
		if (credits > maxBet)
    	{
        	PrintToChat(client, "\x07000000[Ставки] \x07ffffffВы не можете поставить такую сумму. Максимальная ставка - \x04%d", maxBet);
        	return Plugin_Handled;
    	}
	}
	else
    {
    	amount = StringToInt(arg);
    	if (amount <= 0)
    	{
        	PrintToChat(client, "\x07000000[Ставки] \x07ffffffНеверная сумма. Пожалуйста, введите положительное число.");
        	return Plugin_Handled;
    	}
    	if (amount > credits)
    	{
        	PrintToChat(client, "\x07000000[Ставки] \x07ffffffУ вас недостаточно кредитов, чтобы поставить такую сумму.");
        	return Plugin_Handled;
    	}
    	if (amount > maxBet)
    	{
        	PrintToChat(client, "\x07000000[Ставки] \x07ffffffВы не можете поставить такую сумму. Максимальная ставка - \x04%d", maxBet);
        	return Plugin_Handled;
    	}
    }
    
    g_PlayerBets[client] = amount;
    g_TotalBet += amount;
    Shop_SetClientCredits(client, credits - amount);
    g_PlayerHasBet[client] = true;
	PrintToChatAll("\x07000000[Ставки] \x07ffffffИгрок \x07276f5c%N \x07ffffffпоставил \x04%d \x07ffffffкредитов. Джекпот: \x07af2a22%d \x07ffffffкредитов", client, amount, g_TotalBet);
	CreateTimer(30.0, Timer_LotteryEnd);
	return Plugin_Handled;
}

public Action Timer_LotteryEnd(Handle timer)
{
    g_LotteryState = LotteryState_None;

    int winner = GetRandomPlayer();
    if (winner != -1)
    {
        int credits = g_TotalBet;
        Shop_SetClientCredits(winner, Shop_GetClientCredits(winner) + credits);
        PrintToChatAll("\x07000000[Ставки] \x07ffffffИгрок \x07276f5c%N\x07ffffff! \x07ffffffвыиграл \x04%d \x07ffffffкредитов.", winner, credits);
    }
  
    g_TotalBet = 0;
    for (int i = 1; i <= MaxClients; i++)
    {
        g_PlayerBets[i] = 0;
        g_PlayerHasBet[i] = false;
    }
    return Plugin_Continue;
}

stock int GetRandomPlayer()
{
    int players[MAXPLAYERS];
    int count = 0;
    for (int i = 1; i <= MaxClients; i++)
    {
        if (IsClientInGame(i) && g_PlayerBets[i] > 0)
        {
            players[count++] = i;
        }
    }

    if (count == 0)
    {
        return -1;
    }

    return players[GetRandomInt(0, count - 1)];
}