Заказать Плагин Контакты Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 2
  • 1
  • 2
  • »
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Рандомный раунд(
Рандомный раунд(
Foxik Дата: Суббота, 13.04.2019, 10:02:43 | Сообщение # 1
Сообщений: 11
Репутация: 0 [ +/- ]
Здравствуйте,возможен ли такой плагин,чтобы к примеру выбирался случайный раунд ну или через каждые 5 ,и случайный игрок.Например через каждые 5 нормальных раундов,выбирался один тт(рандомно) ,а все остальные за ст и все они против него одного,после того как кто то из команд выиграл,то начинались снова нормальные раунды?Help,сам только начинаю,не особо бум бум в этом,может у кого был уже такой?(((
 
polo79655 Дата: Суббота, 13.04.2019, 11:22:44 | Сообщение # 2
Сообщений: 97
Репутация: -1 [ +/- ]
Код
new round = 0;
public OnMapStart()
{
        round = 0;
}
public OnPluginStart()
{
        HookEvent("round_end", event_round_end, EventHookMode_Pre);
        HookEvent("round_start", round_start);
}

public Action:event_round_end(Handle:event, const String:name[], bool:dontBroadcast)
{
        round++;
}

public Action:round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
       if (round == 5 || round == 10)  // указываешь раунды, которые тебе нужны
       {
                new massiv[MAXPLAYERS+1];
                new j=0;
                for (new i=1;i<=MaxClients;i++)
                {
                      if (IsClientInGame(i) && GetClientTeam(i) > 1 && IsPlayerAlive(i))
                      {
                             massiv[j] = i;
                             j++;
                       }
                }
                твоя цель в этом раунде = massiv[GetRandomInt(0, j-1)];
                // дальше переводи всех игроков кроме него за другую команду
        }
}
 
Foxik Дата: Суббота, 13.04.2019, 11:38:38 | Сообщение # 3
Сообщений: 11
Репутация: 0 [ +/- ]
polo79655, это не совсем понял,объясни плз((( твоя цель в этом раунде = massiv[GetRandomInt(0, j-1)];
// дальше переводи всех игроков кроме него за другую команду
И можно ли добавить тт 250 здоровья ? SetEntityHealth(client, 250);


Сообщение отредактировал Foxik - Суббота, 13.04.2019, 12:01:01
 
polo79655 Дата: Суббота, 13.04.2019, 16:36:18 | Сообщение # 4
Сообщений: 97
Репутация: -1 [ +/- ]
Что именно объяснить? Ну да, можно, так и добавляй
Цитата Foxik ()
SetEntityHealth(client, 250);
 
Foxik Дата: Суббота, 13.04.2019, 18:06:02 | Сообщение # 5
Сообщений: 11
Репутация: 0 [ +/- ]
polo79655, а куда добавлять?я же говорю в этом совсем пока плох(((
 
polo79655 Дата: Суббота, 13.04.2019, 19:14:25 | Сообщение # 6
Сообщений: 97
Репутация: -1 [ +/- ]
Цитата Foxik ()
в этом совсем пока плох

Здесь все просто. Ты делаешь проверку в начале раунда, является ли он пятый или десятым. Дальше я скинул, как выбрать случайного игрока. После чего переводишь всех кроме него за одну команду, или например его за террористов, а остальных игроков за кт.
Код
new TvoyaTsel = massiv[GetRandomInt(0, j-1)];
if (GetClientTeam(TvoyaTsel) == 3) // если он за контров, то переводим его за террористов
{
      CS_SwitchTeam(client, 2);
      CS_RespawnPlayer(client);
}
for (new i=1;i<=MaxClients;i++)
                {
                      if (IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i) && i != TvoyaTsel) // переводим всех кто в игре, кто за теров, кто живой и кто не является твоей целью за кт
                      {
                             CS_SwitchTeam(i, 3);
                             CS_RespawnPlayer(i);
                       }
                }
 
Foxik Дата: Воскресенье, 14.04.2019, 10:22:32 | Сообщение # 7
Сообщений: 11
Репутация: 0 [ +/- ]
polo79655,
Код
new round = 0;
public OnMapStart()
{
round = 0;
}
public OnPluginStart()
{
HookEvent("round_end", event_round_end, EventHookMode_Pre);
HookEvent("round_start", round_start);
}

public Action:event_round_end(Handle:event, const String:name[], bool:dontBroadcast)
{
round++;
}

public Action:round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
if (round == 5 || round == 10) // указываешь раунды, которые тебе нужны
{
new massiv[MAXPLAYERS+1];
new j=0;
for (new i=1;i<=MaxClients;i++)
{
if (IsClientInGame(i) && GetClientTeam(i) > 1 && IsPlayerAlive(i))
{
massiv[j] = i;
j++;
}
}
new TvoyaTsel = massiv[GetRandomInt(0, j-1)];
if (GetClientTeam(TvoyaTsel) == 3) // если он за контров, то переводим его за террористов
{
CS_SwitchTeam(client, 2);
CS_RespawnPlayer(client);
}
for (new i=1;i<=MaxClients;i++)
{
if (IsClientInGame(i) && GetClientTeam(i) == 2 && IsPlayerAlive(i) && i != TvoyaTsel) // переводим всех кто в игре, кто за теров, кто живой и кто не является твоей целью за кт
{
CS_SwitchTeam(i, 3);
CS_RespawnPlayer(i);
}
}
}
}
получается так?А вот куда прописывать чтобы дать тт 250hp?


Сообщение отредактировал Foxik - Воскресенье, 14.04.2019, 16:47:44
 
polo79655 Дата: Воскресенье, 14.04.2019, 10:38:01 | Сообщение # 8
Сообщений: 97
Репутация: -1 [ +/- ]
Сам подумай, когда тебе нужно дать ему 250 хп?
 
Foxik Дата: Воскресенье, 14.04.2019, 11:20:41 | Сообщение # 9
Сообщений: 11
Репутация: 0 [ +/- ]
polo79655, всё,доделал,И ещё вопросик вот у меня рандомным способом выбирается 5 раунд и 10 а как сделать так,чтобы с 6 по 9 и после 10 раундов был автобаланс, а то получается так,что на 5 раунд одного перекидывает и все против него,но все остальные раунды тт так и остается одним(


Сообщение отредактировал Foxik - Воскресенье, 14.04.2019, 12:30:37
 
polo79655 Дата: Воскресенье, 14.04.2019, 14:22:55 | Сообщение # 10
Сообщений: 97
Репутация: -1 [ +/- ]
Можно в конце 5 или 10 раунда менять, или в начале 6 или 1
Код
if (round == 6 || round == 11)  // указываешь раунды, которые идут после твоих раундов
       {
              for (new i = 1;i <= MaxClients;i++)
    {
  if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) > 1 )
  {
   if (GetTeamClientCount(3) > GetTeamClientCount(2)) // если количество игроков у контров больше чем у теров, то переводим i за т
   {
    ChangeClientTeam(i, 2);
   }
   else // если количество равно или меньше, то наоборот
   {
    ChangeClientTeam(i, 3);
   }
  }
    }
        }

(сори за пробелы и скобки, там сам поправь их)
 
Foxik Дата: Воскресенье, 14.04.2019, 14:33:32 | Сообщение # 11
Сообщений: 11
Репутация: 0 [ +/- ]
polo79655,
Код
for(new s = 1; s <= MaxClients; s++)
if(IsValidClient(s))
{
SetEntityHealth(s, 250);
CS_SwitchTeam(s, 2);
CS_RespawnPlayer(s);
так правильно будет?

и куда вот это втсавлять?))
Код
if (round == 6 || round == 11) // указываешь раунды, которые идут после твоих раундов
{
for (new i = 1;i <= MaxClients;i++)
{
if (IsClientInGame(i) && IsPlayerAlive(i) && GetClientTeam(i) > 1 )
{
if (GetTeamClientCount(3) > GetTeamClientCount(2)) // если количество игроков у контров больше чем у теров, то переводим i за т
{
ChangeClientTeam(i, 2);
}
else // если количество равно или меньше, то наоборот
{
ChangeClientTeam(i, 3);
}
}
}
}


Сообщение отредактировал Foxik - Воскресенье, 14.04.2019, 16:47:09
 
polo79655 Дата: Воскресенье, 14.04.2019, 16:26:29 | Сообщение # 12
Сообщений: 97
Репутация: -1 [ +/- ]
Цитата Foxik ()
и куда вот это втсавлять

Пытайся понимать, что ты делаешь, а не просто выпрашивать готовый код, где нужно все разжевать и положить в рот. А еще пользуйся цитатами и [cоde] код [/cоde], чтобы приятно и понятно можно было читать твой текст. В начале раунда делаешь проверку, если он является 6 или 11, то это значит, что 5 или 10 был особенным раундом, и теперь нужно сделать баланс по игрокам. Вставляешь это в
Код
public Action:round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
}

А тут я твой вопрос не понял, что правильно?
Цитата Foxik ()
if(IsValidClient(s))
{
SetEntityHealth(s, 250);
CS_SwitchTeam(s, 2);
CS_RespawnPlayer(s); так правильно будет?
 
Foxik Дата: Воскресенье, 14.04.2019, 16:39:54 | Сообщение # 13
Сообщений: 11
Репутация: 0 [ +/- ]
polo79655, да я пытаюсь понять (cорри)и вставил это сам, то есть сюда (правильно значит вставил,значит всё таки начинаю понимать)

Код
public Action:round_start(Handle:event, const String:name[], bool:dontBroadcast)
{
}


но после этого у меня 6 и 11 раунды начинаются всё сначала,то есть сбрасывается весь счет игроков перекидывает всё норм,но вот всё начинается с 1 раунда и всё по нулям.а то и вовсе убивает оставляет в команде по одному

А тут я правильно дал скорость тт?

Код
if(IsValidClient(s))
{
SetEntityHealth(s, 250);
CS_SwitchTeam(s, 2);
CS_RespawnPlayer(s);


(cорри недавно на этом форуме(((


Сообщение отредактировал Foxik - Воскресенье, 14.04.2019, 17:35:10
 
polo79655 Дата: Понедельник, 15.04.2019, 10:52:02 | Сообщение # 14
Сообщений: 97
Репутация: -1 [ +/- ]
Цитата Foxik ()
А тут я правильно дал скорость тт?

Код
if(IsValidClient(s))
{
SetEntityHealth(s, 250);
CS_SwitchTeam(s, 2);
CS_RespawnPlayer(s);


Ты здесь не даешь никакую скорость, проверяешь валидность клиента, и если он нормальный, то ты выдаешь ему 250 хп, переводишь за команду террористов, а потом возрождаешь его, тем самым у него снова будет 100 хп, надо выдавать их после.
Цитата Foxik ()
начинаются всё сначала,то есть сбрасывается весь счет игроков перекидывает всё норм,но вот всё начинается с 1 раунда и всё по нулям.а то и вовсе убивает оставляет в команде по одному

Насчет этого я помочь не смогу, не понимаю, почему у тебя там кого-то убивает, но если раунды обнуляются, то тут поможет эта тема http://world-source.ru/forum/100-2330-1
 
Brodyaga73 Дата: Понедельник, 15.04.2019, 12:40:27 | Сообщение # 15
Сообщений: 8
Репутация: 1 [ +/- ]
Цитата Foxik ()
но после этого у меня 6 и 11 раунды начинаются всё сначала,то есть сбрасывается весь счет игроков перекидывает всё норм,но вот всё начинается с 1 раунда и всё по нулям.а то и вовсе убивает оставляет в команде по одному

Попробуй это заменить
Код
if (GetTeamClientCount(3) > GetTeamClientCount(2)) // если количество игроков у контров больше чем у теров, то переводим i за т
{
ChangeClientTeam(i, 2);
}
else // если количество равно или меньше, то наоборот
{
ChangeClientTeam(i, 3);
}
}
}
}


на это и добавить CS_RespawnPlayer вот так:

вот так крч пробуй
Код
if (GetTeamClientCount(3) > GetTeamClientCount(2)) // если количество игроков у контров больше чем у теров, то переводим i за т
        {
             CS_SwitchTeam(i, 2);
      CS_RespawnPlayer(i);
        }
            else // если количество равно или меньше, то наоборот
           {
              CS_SwitchTeam(i, 3);
        CS_RespawnPlayer(i);
           }

Функция ChangeClientTeam в ксс убивает (если память не подводит))


Сообщение отредактировал Brodyaga73 - Понедельник, 15.04.2019, 12:46:45
 
Форум » SourceMod - Counter Strike Source && CS GO » Обсуждение » Рандомный раунд(
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск: