Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

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

  • Страница 1 из 1
  • 1
Ноль игроков, определенный конфиг.
Sunday Дата: Четверг, 19.07.2012, 19:43:34 | Сообщение # 1
Сообщений: 186
Репутация: 24 [ +/- ]
Здравствуйте Форумчане!

Пытаюсь написать скрипт, когда нет игроков на сервере то загружается определенный конфиг и сервер перезагружает карту.

Подглядел скрипт из rockthevote.sp, он выводит кол-во игроков на сервере но пока что не укладывается в голове как сделать что бы когда есть игроки то он бездействует, а когда нет игроков (0) загружал конфиг... Вот сам скрипт, я думаю ни кого им не удивишь:

public OnMapStart()
{
for (new i = 1; i <= MaxClients; i++)
{
if (IsClientConnected(i))
{
OnClientConnected(i);
}
}
}

public OnClientConnected(client)
{
if(IsFakeClient(client))
return;
}

В голове понимаю как надо сделать, практики написания, порядка и последовательности мало..

Пытаюсь представить как должно:
new a = Максимальному кол-ву игроков на сервере;
new b;
Если a > b - то плагин бездействует
Если a <= b то скрипт активируется и производит действие только один раз и после ожидал игрока, переменную 1, как только 1 появился, скрипт ожидает 0....

Вот как то так я это понимаю, сидел часов 5 в экран как облупленный и так не склепал, рассчитываю на ваше понимание.
 
sssw Дата: Пятница, 20.07.2012, 07:13:37 | Сообщение # 2
Сообщений: 123
Репутация: 14 [ +/- ]
Code
#include <sourcemod>
#include <sdktools>

public OnMapStart()
{
        new f;
        for(new i = 0; i <= 3; i++)
        {
         f = f + GetTeamClientCount(i);
        }
               
        RuConfig(f);
}

public RuConfig(f)
{
        if (f <= 1)
         PrintToChatAll("в игре %d", f);
}


Но думаю делать в OnMapStart бес мысленно всегда f будет ноль.
Так как клиенты при OnMapEnd переключаться на сервер и новое соединение начинается после OnMapStart

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Точно не помню может они и не выходят и по этому даже useridы остаются прежними.

+++++++
Можно так

Code
#include <sourcemod>
#include <sdktools>        

public OnPluginStart()
{
        CreateTimer(500.0, Test, _, TIMER_REPEAT);
}

public Action:Test(Handle:timer)
{
        new count;
        for(new i = 0; i <= 3; i++)
        {
         count += GetTeamClientCount(i);
        }
               
        RuConfig(count);
}

public RuConfig(f)
{
        if (f <= 0)
         ServerCommand("exec restart.cfg");
}


Тут так если каждые 500 секунд не будет игроков, сервер выполнит restart.cfg.

++++++++++++++++++++++++
А если так (не уверен в его работе)

Code
#include <sourcemod>
#include <sdktools>         

new Handle:LocalBase;

public OnMapEnd()
{
        SQL_FastQuery(LocalBase, "INSERT OR REPLACE INTO restart VALUES ('0');");
}

public OnPluginStart()
{
        SQL_LockDatabase(LocalBase);
        SQL_FastQuery(LocalBase, "VACUUM");
        SQL_FastQuery(LocalBase, "CREATE TABLE IF NOT EXISTS restart (areadyrestart INTEGER);");
        CreateTimer(500.0, Test, _, TIMER_REPEAT);        
}

public Action:Test(Handle:timer)
{
        new count;
        for(new i = 0; i <= 3; i++)
        {
         count += GetTeamClientCount(i);
        }
               
        SQL_TQuery(LocalBase, Parse_Query, "SELECT areadyrestart FROM restart", count, DBPrio_High);
               
        //RuConfig(count);
}

public Parse_Query(Handle:h_Owner, Handle:h_Query, const String:s_Error[], any:count)
{
           if (h_Query != INVALID_HANDLE && SQL_GetRowCount(h_Query) > 0)          
        {
         new iTemp = SQL_FetchInt(h_Query, 1)
         if (iTemp <= 0 && !count)
         {
          RuConfig();
         }
         else
         {
          SQL_FastQuery(LocalBase, "INSERT OR REPLACE INTO restart VALUES ('0');");
         }
               CloseHandle(h_Query)
           }
           else LogToGame("Query failed: %s", s_Error);
}        

public RuConfig()
{
        SQL_FastQuery(LocalBase, "INSERT OR REPLACE INTO restart VALUES ('1');");
        ServerCommand("exec restart.cfg");
               SQL_FastQuery(LocalBase, "INSERT OR REPLACE INTO restart VALUES ('0');");
}
Тут сервер будет делать exec restart.cfg каждые 500 секунд и если он ранее этого не делал(до перезагрузки).


Сообщение отредактировал sssw - Суббота, 21.07.2012, 04:07:15
 
Sunday Дата: Пятница, 20.07.2012, 20:10:43 | Сообщение # 3
Сообщений: 186
Репутация: 24 [ +/- ]
Спасибо большое sssw! Сейчас попробую!

Добавлено (20.07.2012, 17:07:41)
---------------------------------------------
К сожалению, второй скрипт постоянно активируется, есть ли кто на сервере или нет, третий бездействует в обоих случаях. Есть еще варианты?

Добавлено (20.07.2012, 19:55:19)
---------------------------------------------
не ужели это сложно так? dumaem третий день сижу и не получается все......

Добавлено (20.07.2012, 20:10:43)
---------------------------------------------
ладно, похоже не судьба... спасибо и на этом формумчане... попробую порыться в интернете и поспрашивать еще где...



Сообщение отредактировал Sunday - Пятница, 20.07.2012, 19:55:48
 
sssw Дата: Суббота, 21.07.2012, 04:08:41 | Сообщение # 4
Сообщений: 123
Репутация: 14 [ +/- ]
Проверю, я был уверен что второй скрипт работает.
 
Scarface_slv Дата: Суббота, 21.07.2012, 17:21:35 | Сообщение # 5
Сообщений: 737
Репутация: 61 [ +/- ]
Можно так:
Code

public OnMapStart() CreateTimer(60.0, Timer_Func, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);  

public Action:Timer_Func(Handle:timer)
{
  new client = 0;
  for (new i = 1; i <= MaxClients; i++)
  {
   if (IsClientInGame(i) && !IsFakeClient(i)) client = i;
  }
  if (client == 0) ServerCommand("Changelevel de_cbble");
}  

Каждые 60 с. проверяет есть ли игроки на сервере если нет меняет на кебл.. это просто пример)
 
Sunday Дата: Воскресенье, 22.07.2012, 22:16:04 | Сообщение # 6
Сообщений: 186
Репутация: 24 [ +/- ]
Спасибо ребят за помощь, спасибо Scarface_slv, скрипт работает!
 
  • Страница 1 из 1
  • 1
Поиск: