Timer

Тема в разделе "Общие вопросы", создана пользователем TheRunningMan, 4 окт 2011.

  1. TheRunningMan

    TheRunningMan

    Сообщения:
    163
    Симпатии:
    9
    Не знал в какой теме создать, вообщем нужна помощь в написании плагина, ибо по программированию на языке sourcepawn я полный нуб)))
    Код:
    #include <sourcemod>
    
    new count = 10;
    new Handle:Seconds[MAXPLAYERS+1] = {INVALID_HANDLE, ...};
    public Plugin:myinfo =
    {
    	author = "Uknown",
    	name = "Counter",
    	description = "Countdown",
    };
    
    public OnPluginStart()
    {
    	RegAdminCmd("sm_counter", admcmd_counter, ADMFLAG_SLAY, "Countdown");
    	HookEvent("player_spawn", spawn);
    }
    
    public spawn(Handle:event, const String:name[], bool:dontBroadcast)
    {
    	new client = GetClientOfUserId(GetEventInt(event, "userid"));
    }
    
    public Action:admcmd_counter(client, args)
    {
    		Seconds[client] = CreateTimer(1.0, PrintMsg, TIMER_REPEAT, client)
    }
    
    public Action:PrintMsg(Handle:timer, any:client)
    {	
    	if(count >= 0)
    	{
    		PrintHintText(client, "Осталось %i секунд(а)!",count--);
    	}
    }
    
    public OnClientDisconnect(client)
    {
    	if(Seconds[client] != INVALID_HANDLE)
    	{
    		KillTimer(Seconds[client]);
    		Seconds[client] = INVALID_HANDLE;
    	}
    }
    Я хотел сделать плагин отсчета времени, но отсчет происходит некорректно, т.е. я например включаю его, он считает, но если включает другой игрок, то нет и бывало если одновременно активируют два игрока, то у меня к примеру счет идет по четным через 2 секунды, у другого по нечетным тоже через две секунды....
    Если вы не можете помочь в данном опросе, то подкиньте ссылку на русскоязычный сайт по данному языку.....
     
    Последнее редактирование: 4 окт 2011
  2. fallen1994

    fallen1994

    Сообщения:
    2.347
    Симпатии:
    544
    Код нужно сделать в code , а то хрен поймешь что у тебя там какарякано)
     
  3. maza511

    maza511

    Сообщения:
    927
    Симпатии:
    456
    Оффтоп
     
    Последнее редактирование: 4 окт 2011
    Andrey и NagarD нравится это.
  4. TheRunningMan

    TheRunningMan

    Сообщения:
    163
    Симпатии:
    9
    все сделал, но при вводе sm_counter в консоль ничего не происходит....
    пишет только что "не известная команда", но она и раньше писалась и вообще как сделать что не писало....
    сори пишет...(косорукий я :) )
    но там числа мллиардные и имзеняются в непонятном порядке, после этого сервер падает...

    т.е. он выводить каждую секунду(за 10 секунд), какие-то радомные числа....
     
  5. maza511

    maza511

    Сообщения:
    927
    Симпатии:
    456
    Edit*
    Код:
    #include <sourcemod>
    
    new count[MAXPLAYERS+1] = 10;
    new Handle:Seconds[MAXPLAYERS+1] = {INVALID_HANDLE, ...};
    
    public OnPluginStart()
    {
    	RegAdminCmd("sm_counter", admcmd_counter, ADMFLAG_SLAY, "Countdown");
    }
    
    public Action:admcmd_counter(client, args)
    {
    	if(Seconds[client] != INVALID_HANDLE)
    	{
    		KillTimer(Seconds[client]);
    		Seconds[client] = INVALID_HANDLE;
    	}
    	
    	count[client] = 10;
    	Seconds[client] = CreateTimer(1.0, PrintMsg, client, TIMER_REPEAT)
    }
    
    public Action:PrintMsg(Handle:timer, any:client)
    {
    	if(count[client] >= 0)
    	{
    		PrintHintText(client, "Осталось %i секунд(а)!", count[client]);
    		count[client]--;
    	}
    }
    
    public OnClientDisconnect(client)
    {
    	if(Seconds[client] != INVALID_HANDLE)
    	{
    		KillTimer(Seconds[client]);
    		Seconds[client] = INVALID_HANDLE;
    	}
    }
     
  6. TheRunningMan

    TheRunningMan

    Сообщения:
    163
    Симпатии:
    9
    Вроде начинает с 10, но сразу убивается....
     
  7. maza511

    maza511

    Сообщения:
    927
    Симпатии:
    456
    Скопируй заново. Я редактировал
     
    TheRunningMan нравится это.
  8. TheRunningMan

    TheRunningMan

    Сообщения:
    163
    Симпатии:
    9
    ВСе спасибо)))
    Я тоже так делал, но думал что не правильно когда увидел какие цыфры он выводит))

    Добавлено через 43 минуты
    Может знаешь как сделать чтоб при активации, чел становился не видим на радаре и его ника не было видно, просто я даже не представляю какие команды за это отвечают...
     
    Последнее редактирование: 4 окт 2011
  9. TheRunningMan

    TheRunningMan

    Сообщения:
    163
    Симпатии:
    9
    НУ хотя бы а этот вопрос можно ответить:
    как получить значение таймера раунда в данный момент(т.е. промежуточное), ну или хотя бы вообще его получить, т.е. значение с которого начинается отсчет до конца раунда...
     
  10. maza511

    maza511

    Сообщения:
    927
    Симпатии:
    456
    Еслиб знали как это сделать, ни кто не парился бы по поводу убирания радара.

    Вообще значение таймера раунда получить можно:
    Код:
    new Handle:round_Time = FindConVar("mp_roundtime");
    
    Чтоб вычислить текущее время до конца раунда, запоминай время в начале раунда.
    И потом вычитай когда тебе надо.
     
    TheRunningMan нравится это.