| Помогите с таймером чтобы выбирал игрока | 
|  | 
| 
| 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 раз кредиты игроку. |  |  |  |  | 
|  | 
| 
| 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;
 }
 
  |  |  |  |  |