01:35
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
  • Страница 1 из 1
  • 1
Модератор форума: Alcoholik  
[FAQ] Создаем таймеры в GF
SMOUKДата: Среда, 27.10.2010, 01:26 | Сообщение # 1
Местный
Группа: Продвинутые
Сообщений: 646
Награды: 13
Город: Рославль
Репутация: 284
Замечания: 100%
Статус:
В последнее время участились вопросы новичков которые правым боком связаны с таймерами. А именно что для воплощения ихних идей как раз таки и требуеться *таймеры* ))

Создадим таймер требующий выполнения какого либо действия через определенное время для указаного игрока.
В нашем случае будем использовать public SetPlayerUnJaill

Т.к в OnGameModeInit >> SetTimer (xxx) он настроен под выполнение ежесекундно. (1000)

И так, идем в SetPlayerUnJaill

Там мы видим что то вроде этого:

Code
// Взято из Cream Life
    for(new i = 0; i < MAX_PLAYERS; i++)  // Цикл или условие, хз <img rel="usm" src="http://www.samp-rus.com/Smiles_for_forum/lol.gif" border="0" align="absmiddle" alt=":D"> я там полнейший нуб )
    {
        if(IsPlayerConnected(i)) // Проверка на игрока онлайн.
        {
            if(!IsPlayerNPC(i)) // Проверочка на бота.
            {
             TextDrawDestroy(PlayerZoneName[i]); // Функция удаления тексдрава.
             new zone[MAX_ZONE_NAME]; // Переменная...
             GetPlayer2DZone(i, zone, MAX_ZONE_NAME); // не стандартная функция.    
             PlayerZoneName[i] = TextDrawCreate(470.0,420.0,zone); // Установка тексдрава.
          TextDrawShowForPlayer(i,PlayerZoneName[i]); // Показываем тексдрав определенному игроку.
          if(PlayerInfo[i][pJobTime] > 0) // Проверка на значение в pJobTume . Тоесть в аккаунте игрока.
          {
              PlayerInfo[i][pJobTime] --; // Если проверка вышла положительно то выполняем ету чушь.
           } // Скобка :D

Насмотрелись ? Спускаемся в самый низ паблика и вставляем вот этот код..

if(Noobtime[i] => 1) // Проверяем значение в Noobtime. Если оно 1 или больше то выполянем следующие.
{
Noobtime[i] += 1; // Таким образом мы как бы вставляем батарейку. Даем дальнейшие колеса нашему таймеру. Тоесть добавляем к уже ранее установленому значению в Noobtime ище 1. И того у нас выйдет за одну секунду - 2.
Я уже упоминал что паблик выполняеться каждую секунду ? Так вот после 5-и секунд , как думаете какое в Noobtime будет значение ?! 6 =_= Не 5 потому что мы уже ранее установили значение в 1. Что бы начать наш таймер.

Далее. Продолжаем наш код.

if(Noobtime[i] => 1)
{
Noobtime[i] += 1;

if(Noobtime[i] == 500) // Догадались ? Прально. При достижении значения 500(секунд) мы выполняем действие которое я опишу ниже.
{
Noobtime[i] = 0; // Теперь остановим наш таймер задав ему значение 0.
Kick(i); // Кикаем игрока.
SendClientMessage(i,COLOR_WHITE,"Вы были кикнуты сервером.");
}

После написания этого кода мы должны проделать следующие процедуры.
Дать вашему коду новые знания так сказать.
Всё просто.
Ко всем new Добавьте new Noobtime[MAX_PLAYERS];

Так же если вы не хотите что бы у вас были рандомные случаи запуска таймера у игроков то суньте в OnPlayerConnect этот кодик.

Noobtime[i] = 0;

Если же вы хотите что бы значения таймера вписывались в аккаунт то вместе с Noobtime используйте PlayerInfo[i(или playerid)][pтут название вашего таймера] = 1; // Но я думаю вы понимаете что для этого кода ребуються необходимые процедуры для того что бы работала запись в аккаунт игрока. enum pinfo в помощь.

Если же вы хотите что бы таймер срабатывал по вашей команде то вот вам простой кодик.

if(strcmp(cmd, "/kickmy", true) == 0 || strcmp(cmd, "/km", true) == 0)
{
GetPlayerName(playerid, sendername, sizeof(sendername));
format(string, sizeof(string), "%s будет кикнут через 500 секунд по ПСЖ. ", sendername);
SendClientMessageToAll(playerid,COLOR_WHITE,string);
Noobtime[playerid] = 1;
return 1;
}

Если вы думаете что в таймерах нет не какой пользы то вы ошибаетесь. Знающие скриптеры так не думают )
Именно на них построены главные основы хороших модов/скриптов. Это теже самые спидометры, античиты, гонки ,и так далее.

Удачи. :)




Сообщение отредактировал SMOUK - Среда, 27.10.2010, 01:30
xSLiMxДата: Среда, 27.10.2010, 07:38 | Сообщение # 2
Мастер джэдай
Группа: I'm V.I.P.
Сообщений: 2163
Награды: 34
Город: Ростов - на - Дону
Репутация: 1429
Замечания: 80%
Статус:
SMOUK, таймеры - зло.Вернее ихбольшое кол-во. А так,вроде нормально расписал.
DiSEДата: Среда, 27.10.2010, 07:42 | Сообщение # 3
Группа: I'm V.I.P.
Сообщений: 1759
Награды: 23
Город: Уфа
Репутация: 337
Замечания: 80%
Статус:
xSLiMx, главное их уничтожать при выгрузке
SMOUKДата: Среда, 27.10.2010, 07:44 | Сообщение # 4
Местный
Группа: Продвинутые
Сообщений: 646
Награды: 13
Город: Рославль
Репутация: 284
Замечания: 100%
Статус:
Слим , ну а куда без таймеров ? Сам же понимаешь. На них щас все ГФ и т.п
В меру просто стараться их использовать.



__JesterДата: Среда, 27.10.2010, 08:34 | Сообщение # 5
Новенький
Группа: Пользователи
Сообщений: 48
Награды: 0
Город: Волгоград
Репутация: 22
Замечания: 0%
Статус:
Открою секрет, всё это фуфло (:
Граматные скриптеры не будут юзать setTimer; Ну максимум setTimerEx :D

SMOUKДата: Среда, 27.10.2010, 08:45 | Сообщение # 6
Местный
Группа: Продвинутые
Сообщений: 646
Награды: 13
Город: Рославль
Репутация: 284
Замечания: 100%
Статус:
С таким фуфлом бегает ls-rp и другие РП / ДМ моды :)
Ну а так как фак предназначен для новичков в павн то для них такие таймеры как раз то. Заумности не к чему. Если только по какой либо крайне уважительной причине.



__JesterДата: Среда, 27.10.2010, 13:28 | Сообщение # 7
Новенький
Группа: Пользователи
Сообщений: 48
Награды: 0
Город: Волгоград
Репутация: 22
Замечания: 0%
Статус:
SMOUK, ты не опытен! Ты видел код ls-rp? Если бы у них всё было бы на таймерах, не возможно было бы играть... (Я имею ввиду такой код, который ты называешь FAQом )
SMOUKДата: Среда, 27.10.2010, 14:29 | Сообщение # 8
Местный
Группа: Продвинутые
Сообщений: 646
Награды: 13
Город: Рославль
Репутация: 284
Замечания: 100%
Статус:
Quote (__Jester)
SMOUK, ты не опытен! Ты видел код ls-rp? Если бы у них всё было бы на таймерах, не возможно было бы играть... (Я имею ввиду такой код, который ты называешь FAQом )

Видел и не раз. )
ты хочешь сказать все моды что построены на таймерах го*но т.к их строили неопытные скриптеры ^^
Зачем создавать второй велосипед ? Используй то что уже придумали. Рано на новые технологии переходить пока что ^_^.


HELKERNДата: Среда, 27.10.2010, 14:46 | Сообщение # 9
Уважаемый человек
Группа: I'm V.I.P.
Сообщений: 767
Награды: 17
Город: Улан-Удэ
Репутация: 206
Замечания: 0%
Статус:
Да и почему бы не юзать SetPVarInt ?


Сообщение отредактировал HELKERN - Среда, 27.10.2010, 14:47
StelsДата: Среда, 27.10.2010, 15:03 | Сообщение # 10
Группа: I'm V.I.P.
Сообщений: 3167
Награды: 32
Город: Каменск-Уральский
Репутация: 828
Замечания: 0%
Статус:
Quote (SMOUK)
хочешь сказать все моды что построены на таймерах го*но т.к их строили неопытные скриптеры ^^

Читай внимательно текст в бреккетсах!
Quote (__Jester)
Я имею ввиду такой код, который ты называешь FAQом

Ты очень неграмотно привёл применение одного-единственного таймера SetPlayerUnJail. При этом ты не раз заикался о том, какой ты малограмотный и пофапал на опытных скриптеров. Прекращай это.




Полезные ссылки:
GTA:SA спецсборка для SA-MP / GTA:SA-MP ver. 0.3a / GTA:SA-MP ver. 0.2x / Руссификатор геймтекста в GTA:SA(рекомендуется) / Классная игрушка!(Рекомендую!) / Пак русских шрифтов.
__JesterДата: Среда, 27.10.2010, 15:31 | Сообщение # 11
Новенький
Группа: Пользователи
Сообщений: 48
Награды: 0
Город: Волгоград
Репутация: 22
Замечания: 0%
Статус:
HELKERN, в каком именно случае?

SMOUK, читай внимательно, то код который ты написал - безграмотен, чисто логически... Я не говорю, что таймеры это плохо, я говорю, что их нужно использовать только в экстренных случаях. Программинг - это процесс мышления, а не просто набор инструментов. Ну я не изобретаю велосипеды кстати, я бы сделал так:

[php]
public kickPlayer( playerID ) {

new
buffer[ 128 ],
name[ 24 ];

GetPlayerName( playerID, name, sizeof name );
format( buffer, sizeof buffer, "Внимание! %s кикнут по собственному желанию." );
SendClientMessageToAll( playerID, 0xffffff00, buffer );

return Kick( playerID );
}

if( !strcmp( cmd, "/kickmy" ) ) {

SetTimerEx( "kickPlayer", 500*1000, 0, "i", playerid );

return 1;
}
[/php]

Если хочешь можешь даже на скорость проверить, только твой вариант всё равно проиграет (:

Добавлено (27.10.2010, 15:31)
---------------------------------------------
Где тег [php] ??? asd

SMOUKДата: Среда, 27.10.2010, 15:40 | Сообщение # 12
Местный
Группа: Продвинутые
Сообщений: 646
Награды: 13
Город: Рославль
Репутация: 284
Замечания: 100%
Статус:
Quote (Stels)
Читай внимательно текст в бреккетсах!

Эмм. Всмысле ? // ?

crazy


HELKERNДата: Среда, 27.10.2010, 16:16 | Сообщение # 13
Уважаемый человек
Группа: I'm V.I.P.
Сообщений: 767
Награды: 17
Город: Улан-Удэ
Репутация: 206
Замечания: 0%
Статус:
Quote (__Jester)
Если хочешь можешь даже на скорость проверить, только твой вариант всё равно проиграет (:

А он как раз и не создает таймер, а использует уже готовый таймер, который стоит уже в моде, а по быстроте конечно твой вариант обгонит, только потому, что не использует цикл, перебирая все ID игроков.

Интересно, а кого он кикнет если я заранее уйду с сервера? :D

В данном случае самое удобное решение - это ввести /q и не париться

Добавлено (27.10.2010, 16:16)
---------------------------------------------

Quote (__Jester)
HELKERN, в каком именно случае?

В этом

__JesterДата: Среда, 27.10.2010, 17:29 | Сообщение # 14
Новенький
Группа: Пользователи
Сообщений: 48
Награды: 0
Город: Волгоград
Репутация: 22
Замечания: 0%
Статус:
HELKERN, смотря как часто обновляются игроки (: Однозначно убить таймер не долго...
  • Страница 1 из 1
  • 1
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua