Как правильно изменить счёт побед команд?

gameuser425

Участник
Сообщения
30
Реакции
3
Мод CSS DM.
Тема такая. По истечении 5-ти раундов. В конце 5-го раунда происходит смена команд. Счёт команды переносится вместе с командой, всё ровно - как надо, но в конце нового первого раунда когда одна из команд побеждает счёт становится на старое место. То есть, мы от играли за "CT" со счётом 10/5, команды сменились счёт стал 5/10, но в конце первого раунда за новую сторону (если допустим выиграли "CT") Счёт меняется и получается не 6/10, а 11/5... То есть счёт возвращается на свою сторону...

Вот сегодня запилил плагин. Не знаю как мне исправить это. Можно было бы объявить две переменные и в конце каждого раунда проверять кто победил и плюсовать очки, потом заново объявлять для команды счёт через SetTeamScore, но не хотелось бы пилить лишние переменные.

Вот сам код.

C-подобный:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <cstrike>

#define MAX_ROUNDS (5)

new CountRounds = -1;

public Plugin:myinfo = {
    name = "bla-bla-bla",
    author = "bla-bla-bla",
    description = "bla-bla-bla",
    version = "bla-bla-bla",
    url = "bla-bla-bla"
};

public void OnPluginStart()
{
    HookEvent("round_start", Event_RoundStart);
    HookEvent("round_end", Event_RoundEnd);
}

public OnMapStart()
{
    CountRounds = -1;
}

public void Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    CountRounds += 1;
    if((MAX_ROUNDS - CountRounds) > 1)PrintToChatAll("C4 ©: Смена команд произойдёт через %i раунд(а,ов).", (MAX_ROUNDS - CountRounds));    //(5 - 0 = 5), (5 - 1 = 4), (5 - 2 = 3), (5 - 3 = 2)
    else if(CountRounds == (MAX_ROUNDS-1))PrintToChatAll("C4 ©: Смена команд произойдёт в конце раунда.");    //5
}

public void Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(CountRounds == (MAX_ROUNDS-1))
    {
        CountRounds = -1;
        int scoreCT = GetTeamScore(CS_TEAM_T);
        int scoreT = GetTeamScore(CS_TEAM_CT);
        SetTeamScore(CS_TEAM_CT, scoreCT);
        SetTeamScore(CS_TEAM_T, scoreT);
        new team;
        for(new i = 1; i < MaxClients; i++)
        {
            if(IsClientConnected(i))
            {
                team = GetClientTeam(i);
                if(team == CS_TEAM_CT)
                {
                    CS_SwitchTeam(i, CS_TEAM_T);
                    CS_UpdateClientModel(i);
                }
                else if(team == CS_TEAM_T)
                {
                    CS_SwitchTeam(i, CS_TEAM_CT);
                    CS_UpdateClientModel(i);
                }
            }
        }
        PrintToChatAll("C4 ©: Смена команд!");
    }
}
 
Последнее редактирование модератором:

crux

Участник
Сообщения
49
Реакции
4
Мод CSS DM.
Тема такая. По истечении 5-ти раундов. В конце 5-го раунда происходит смена команд. Счёт команды переносится вместе с командой, всё ровно - как надо, но в конце нового первого раунда когда одна из команд побеждает счёт становится на старое место. То есть, мы от играли за "CT" со счётом 10/5, команды сменились счёт стал 5/10, но в конце первого раунда за новую сторону (если допустим выиграли "CT") Счёт меняется и получается не 6/10, а 11/5... То есть счёт возвращается на свою сторону...

Вот сегодня запилил плагин. Не знаю как мне исправить это. Можно было бы объявить две переменные и в конце каждого раунда проверять кто победил и плюсовать очки, потом заново объявлять для команды счёт через SetTeamScore, но не хотелось бы пилить лишние переменные.

Вот сам код.

C-подобный:
#pragma semicolon 1

#include <sourcemod>
#include <sdktools>
#include <cstrike>

#define MAX_ROUNDS (5)

new CountRounds = -1;

public Plugin:myinfo = {
    name = "bla-bla-bla",
    author = "bla-bla-bla",
    description = "bla-bla-bla",
    version = "bla-bla-bla",
    url = "bla-bla-bla"
};

public void OnPluginStart()
{
    HookEvent("round_start", Event_RoundStart);
    HookEvent("round_end", Event_RoundEnd);
}

public OnMapStart()
{
    CountRounds = -1;
}

public void Event_RoundStart(Handle:event, const String:name[], bool:dontBroadcast)
{
    CountRounds += 1;
    if((MAX_ROUNDS - CountRounds) > 1)PrintToChatAll("C4 ©: Смена команд произойдёт через %i раунд(а,ов).", (MAX_ROUNDS - CountRounds));    //(5 - 0 = 5), (5 - 1 = 4), (5 - 2 = 3), (5 - 3 = 2)
    else if(CountRounds == (MAX_ROUNDS-1))PrintToChatAll("C4 ©: Смена команд произойдёт в конце раунда.");    //5
}

public void Event_RoundEnd(Handle:event, const String:name[], bool:dontBroadcast)
{
    if(CountRounds == (MAX_ROUNDS-1))
    {
        CountRounds = -1;
        int scoreCT = GetTeamScore(CS_TEAM_T);
        int scoreT = GetTeamScore(CS_TEAM_CT);
        SetTeamScore(CS_TEAM_CT, scoreCT);
        SetTeamScore(CS_TEAM_T, scoreT);
        new team;
        for(new i = 1; i < MaxClients; i++)
        {
            if(IsClientConnected(i))
            {
                team = GetClientTeam(i);
                if(team == CS_TEAM_CT)
                {
                    CS_SwitchTeam(i, CS_TEAM_T);
                    CS_UpdateClientModel(i);
                }
                else if(team == CS_TEAM_T)
                {
                    CS_SwitchTeam(i, CS_TEAM_CT);
                    CS_UpdateClientModel(i);
                }
            }
        }
        PrintToChatAll("C4 ©: Смена команд!");
    }
}
Попробуй сделать так создай какие-нибудь 2 переменные типа int, запиши в них значения функций GetTeamScore(2) в первую и GetTeamScore(3) во вторую, потом, когда тебе нужно просто вызови SetTeamScore(2, значение int переменной) и SetTeamScore(3, значение переменной). Вкратце, что мы сделали: создали 2 переменные, получили и записали в них текущие значения счета команд и потом эти значения использовали для установки нового счета.
 

Reg1oxeN

Участник
Сообщения
399
Реакции
314
в конце нового первого раунда когда одна из команд побеждает счёт становится на старое место
потому что для подсчета выигранных раундов используется сторонний счетчик, на который невозможно воздействовать через SetTeamScore
 
Сверху Снизу