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

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

  • Страница 1 из 1
  • 1
Помогите с таймером чтобы выбирал игрока
PlaN4ik Дата: Четверг, 08.05.2014, 19:23:10 | Сообщение # 1
Сообщений: 33
Репутация: -7 [ +/- ]
Помогите доделать код. Нужно чтобы по истечению времени таймера выбирался 1 игрок и ему давались кредиты в shop

Код
new Handle:mytimer[MAXPLAYERS+1];

public OnClientPutInServer(client)
{
  if(client > 0 && !IsFakeClient(client))
  {
   mytimer[client] = CreateTimer(60.0, command, client);
  }
}

public OnClientDisconnect(client)
{
  if (mytimer[client] != INVALID_HANDLE)
  {
   KillTimer(mytimer[client]);
   mytimer[client] = INVALID_HANDLE;
  }
}

public Action:command(Handle:timer, any:client)
{
  decl String:szName[64];
  GetClientName(client, szName, sizeof(szName));
  ServerCommand("shop_credits \"%s\" 1", szName);
  mytimer[client] = CreateTimer(60.0, command, client);
   
}


Здесь выдаётся каждому а нужно чтобы выбирался один игрок.
 
«SeReGa»☆ Дата: Четверг, 08.05.2014, 19:49:21 | Сообщение # 2
Сообщений: 395
Репутация: 37 [ +/- ]
Код

new Handle:mytimer[MAXPLAYERS+1];    

public OnClientPutInServer(client)
{
    new String:persona[64];    
    GetClientAuthString(client, persona, sizeof(persona));  
    if (StrEqual(persona, "STEAM_0:1:********")) // здесь пропиши SPEAM того одного человека    
    {    
     if(client > 0 && !IsFakeClient(client))    
     {    
      mytimer[client] = CreateTimer(60.0, command, client);    
     }    
    }
}    

public OnClientDisconnect(client)    
{    
    if (mytimer[client] != INVALID_HANDLE)    
    {    
     KillTimer(mytimer[client]);    
     mytimer[client] = INVALID_HANDLE;    
    }    
}    

public Action:command(Handle:timer, any:client)
{    
    decl String:szName[64];    
    GetClientName(client, szName, sizeof(szName));    
    ServerCommand("shop_credits \"%s\" 1", szName);    
    mytimer[client] = CreateTimer(60.0, command, client);
}


Сообщение отредактировал «SeReGa»☆ - Четверг, 08.05.2014, 19:52:45
 
PlaN4ik Дата: Четверг, 08.05.2014, 19:51:49 | Сообщение # 3
Сообщений: 33
Репутация: -7 [ +/- ]
Цитата «SeReGa»☆ ()
new Handle:mytimer[MAXPLAYERS+1];   public OnClientPutInServer(client) {   new String:persona[64];    GetClientAuthString(client, persona, sizeof(persona)); // Берешь Стим айди игрока    if (StrEqual(persona, "STEAM_0:1:********")) // Если он равен написанному, то    {     if(client > 0 && !IsFakeClient(client))     {      mytimer[client] = CreateTimer(60.0, command, client);     }    } }   public OnClientDisconnect(client)   {    if (mytimer[client] != INVALID_HANDLE)    {     KillTimer(mytimer[client]);     mytimer[client] = INVALID_HANDLE;    }   }   public Action:command(Handle:timer, any:client) {    decl String:szName[64];    GetClientName(client, szName, sizeof(szName));    ServerCommand("shop_credits \"%s\" 1", szName);    mytimer[client] = CreateTimer(60.0, command, client); }

Спасибо, но это не то)
Мне нужно чтобы выбирался 1 игрок из играющих на сервере рандомно и ему выдавались кредиты и так происходило каждый раз когда срабатывал таймер.
 
«SeReGa»☆ Дата: Четверг, 08.05.2014, 19:53:46 | Сообщение # 4
Сообщений: 395
Репутация: 37 [ +/- ]
каждый раз случайный человек?? точнее каждых 60 сек?


Сообщение отредактировал «SeReGa»☆ - Четверг, 08.05.2014, 19:54:44
 
PlaN4ik Дата: Четверг, 08.05.2014, 19:54:40 | Сообщение # 5
Сообщений: 33
Репутация: -7 [ +/- ]
Да мне для минигейма нужно.
 
«SeReGa»☆ Дата: Четверг, 08.05.2014, 20:01:34 | Сообщение # 6
Сообщений: 395
Репутация: 37 [ +/- ]
Код
new Handle:mytimer[MAXPLAYERS+1];  

public OnClientPutInServer(client)
{
  new target = GetRandomClient();

  mytimer[target] = CreateTimer(60.0, command, target);  
}  

public OnClientDisconnect(target)  
{  
  if (mytimer[target] != INVALID_HANDLE)  
  {  
   KillTimer(mytimer[target]);  
   mytimer[target] = INVALID_HANDLE;  
  }  
}  

public Action:command(Handle:timer, any:target)
{  
  decl String:szName[64];  
  GetClientName(target, szName, sizeof(szName));  
  ServerCommand("shop_credits \"%s\" 1", szName);  
  mytimer[target] = CreateTimer(60.0, command, target);
}

GetRandomClient(bool:no_bot = true, bool:alive = false, team = 0)   
   {   
  new num = 0, players[MaxClients];   
  for (new i = 1; i <= MaxClients; i++)   
  {   
   if (!IsClientInGame(i) || (no_bot && IsFakeClient(i))) continue;   
   if ((alive && !IsPlayerAlive(i)) || (0 < team < 4 && GetClientTeam(i) != team)) continue;   
   players[num++] = i;   
  }   
  if (num > 0) return players[GetRandomInt(0, num - 1)];   
  return -1;   
}


Попробуй
 
PlaN4ik Дата: Четверг, 08.05.2014, 20:14:39 | Сообщение # 7
Сообщений: 33
Репутация: -7 [ +/- ]
Все кластно, но он выдает сразу по 5-6 раз кредиты игроку.
 
«SeReGa»☆ Дата: Четверг, 08.05.2014, 20:21:10 | Сообщение # 8
Сообщений: 395
Репутация: 37 [ +/- ]
помойму нужно использовать команду return. но я не очень понимаю как правильно им пользоватся.... grust


Сообщение отредактировал «SeReGa»☆ - Четверг, 08.05.2014, 20:21:59
 
Naykon Дата: Пятница, 09.05.2014, 01:04:33 | Сообщение # 9
Сообщений: 439
Репутация: -4 [ +/- ]
Для того что бы ты понял что делает твой код из 1 поста. После того как игрок подключился создается таймер на 60 сек и по окончанию выдает кредиты и сразу же создается новый таймер опять же на 60 секунд и снова по окончанию выдаются кредиты... получается таймер работает рекурсивно. Как буду дома отпишу код который каждые 60 секунд выдает 1 рандомному игршку кредиты... автор я верно тебя понял?
 
PlaN4ik Дата: Пятница, 09.05.2014, 11:05:39 | Сообщение # 10
Сообщений: 33
Репутация: -7 [ +/- ]
Да да буду очень благодарен :))
 
Naykon Дата: Пятница, 09.05.2014, 14:08:23 | Сообщение # 11
Сообщений: 439
Репутация: -4 [ +/- ]
Код
#include <sourcemod>

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

public Action:Timer_Func(Handle:timer)  
{  
  decl String:szName[64];  
     GetClientName(GetRandomClient(), szName, sizeof(szName));
  ServerCommand("shop_credits \"%s\" 1", szName);  
}

GetRandomClient()
{
  new indexes[MaxClients+1], players = 0;
  for (new i = 1; i <= MaxClients; i++)
  {
   if (IsClientInGame(i))
   {
    indexes[players++] = i;
   }
  }
  if (players > 0) return indexes[GetRandomInt(0, players-1)];
  return 0;
}


prikol
 
  • Страница 1 из 1
  • 1
Поиск: