Nike_
Умник
Доброго всем времени суток. И так начнём с того, что эта система уже есть в пабликах и модах RLS.
Но стоит на неё взглянуть... Аж плакать хочется.
Так вот, я предлагаю рассмотреть новичкам хорошо оптимизированный вариант данной системы.
Начнём.
Ко всем new
В public OnGameModeInit()
Как можно заметить первый здесь +, так это то что мы создаём всего 2 чекпоинта для всех игроков на сервере
Задавая параметр 'playerid' как '-1', это значит если бы там стоял '0', то наш чекпоинт мог бы видеть только 1 игрок с id: 0
Поэтому в RLS создавали сразу 500 чекпоинтов для каждого игрока. А мы лишь убрали этот предел поставив в параметре '-1'
Тем самым сделали чекпоинт доступным всем игрокам на сервере сразу.
Далее добавим в public OnPlayerEnterCheckpoint(playerid)
В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) добавим
В конец мода добавим stock
И вот уже система готова. И не надо создавать кучу диалогов для перемотки страниц в меню. Простым вычислением сократили работу кода.
Данную систему легко редактировать, добавлять и удалять странички. Будет пахать на любой мод.
Написано всё для новичков.
P.S Так же могут быть предупреждения о неровном коде. Всё это можно исправить табуляцией.
На форуме есть много таких уроков.
Автор: Nike_
Но стоит на неё взглянуть... Аж плакать хочется.
Так вот, я предлагаю рассмотреть новичкам хорошо оптимизированный вариант данной системы.
Начнём.
Ко всем new
PHP:
new Checkpoint[2];// Создаём переменные для хранения id чекпоинтов
PHP:
Checkpoint[0] = CreateDynamicCP(1159.8787,-1770.0801,16.5938,1.2, 0, 0, -1,15.0);// Создаём чекпоинт №1 / респа 1 лвл
Checkpoint[1] = CreateDynamicCP(1765.6669,-1918.5022,13.5661,1.2, 0, 0, -1,15.0);// Создаём чекпоинт №2 / жд респа
Задавая параметр 'playerid' как '-1', это значит если бы там стоял '0', то наш чекпоинт мог бы видеть только 1 игрок с id: 0
Поэтому в RLS создавали сразу 500 чекпоинтов для каждого игрока. А мы лишь убрали этот предел поставив в параметре '-1'
Тем самым сделали чекпоинт доступным всем игрокам на сервере сразу.
Далее добавим в public OnPlayerEnterCheckpoint(playerid)
PHP:
if(IsPlayerInDynamicCP(playerid, Checkpoint[0]) || IsPlayerInDynamicCP(playerid, Checkpoint[1]))
{
SetPVarInt(playerid, "params", 0);// Создаём PVar для хранения временных данных.
return ShowPlayerDialog(playerid, 4123, 0, "Помощь","Здравствуйте, я объясню Вам как играть на этом сервере.\nЧто вам делать, куда идти в данный момент", "Далее", "Отмена");// Показываем наш диалог при заходе на чекпоинт
}
PHP:
case 4123:
{
if(!response)// при нажатии кнопки отмена
{
if(GetPVarInt(playerid,"params") > 1) return AddHelpDialog(playerid, 0);// если параметр > 0, то откроем главное меню
else return SetPVarInt(playerid,"params",0);// если главное меню уже открыто, то закроем меню
}
else if(!GetPVarInt(playerid,"params")) return AddHelpDialog(playerid, 0);// Открываем главное меню
else if(GetPVarInt(playerid,"params") == 1) AddHelpDialog(playerid, listitem+1);// Открываем выбранную игроком страницу
else if(GetPVarInt(playerid,"params") > 1) AddHelpDialog(playerid, GetPVarInt(playerid,"params")-1);// Мотаем страницы
return 1;
}
PHP:
stock AddHelpDialog(playerid, dialog)
{
new str[95], sctring[500];
if(dialog+2 != 19) SetPVarInt(playerid, "params", dialog + 2);// Мотаем странички
else SetPVarInt(playerid, "params", 2);// Ставим на второй круг
switch(dialog)
{
case 0:
{
ShowPlayerDialog(playerid,4123,2,"Помощь","[1] Общение\n[2] Список игроков\n[3] Транспорт\n[4] Общее\n[5] Транспорт часть 2\n[6] Оружие и Убийство\n[7] Role Play\n[8] Первые шаги\n[9] Первые шаги часть 2\n[10] Первые шаги часть 3\n[11] Часовая зарплата\n[12] Зарплата фракции\n[13] Бизнес\n[14] Местность\n[15] Законопослушность\n[16] Дома\n[17] Дом часть 2","Далее","Выход");
return SetPVarInt(playerid,"params", 1);
}
case 1:
{
format(str,sizeof(str),"<< Общение >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Вы можете обращаться с другими игроками через чат в левом верхнем углу.\n"),strcat(sctring,str);
format(str,sizeof(str),"Чтобы напечатать сообщение нажмите клавишу \"F6\" или \"T\"(на латинеце).\n"),strcat(sctring,str);
format(str,sizeof(str),"Так же с помощью чата используются все команды сервера, к примеру \"/mm\".\n\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Используйте \"/mm\" для просмотра команд...\n"),strcat(sctring,str);
format(str,sizeof(str),"Более подробное описание вы найдете на нашем сайте Samp-Rp.ru");
return ShowPlayerDialog(playerid, 4123, 0,"Общение",sctring,"Далее","Меню");
}
case 2:
{
format(str,sizeof(str),"<< Список игроков >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Данный список можно посмотреть нажав клавишу \"TAB\".\n"),strcat(sctring,str);
format(str,sizeof(str),"Там вы увидете:\n\n"),strcat(sctring,str);
format(str,sizeof(str),"\"ID\" игрока(используется в командах)\n"),strcat(sctring,str);
format(str,sizeof(str),"\"Ник(РП имя игрока)\"\n"),strcat(sctring,str);
format(str,sizeof(str),"\"Уровень(lvl)\" в графе score(Повышается автоматически каждый отыгранный час)\n"),strcat(sctring,str);
format(str,sizeof(str),"\"Пинг\" это не слишком важно, поэтому я не буду нагружать вас лишней информацией.\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Для просмотра списка полностью, используйте прокрутку с право.\n"),strcat(sctring,str);
format(str,sizeof(str),"Вы в этой табличке всегда отображаетесь первым, независимо от ID.");
return ShowPlayerDialog(playerid, 4123, 0,"Список игроков",sctring,"Далее","Меню");
}
case 3:
{
format(str,sizeof(str),"<< Транспорт >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Я надеюсь вы умеете ездить, но даже если нет, наши Авто Инструкторы вас научат.\n"),strcat(sctring,str);
format(str,sizeof(str),"В Автошколу вам придется идти в любом случае, поскольку езда разрешена только\n"),strcat(sctring,str);
format(str,sizeof(str),"с правами. Ну а пока вы можете воспользоваться мотороллером,\n"),strcat(sctring,str);
format(str,sizeof(str),"Или же общественным транспортом\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Для того чтобы сесть на пассажирское место используйте клавишу \"G\"");
return ShowPlayerDialog(playerid, 4123, 0,"Транспорт",sctring,"Далее","Меню");
}
case 4:
{
format(str,sizeof(str),"<< Общее >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Играя на сервере ваш лвл повышается автоматически.\n"),strcat(sctring,str);
format(str,sizeof(str),"После получения определенного левла открываются новые возможности\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Но уровень персонажа не главное! На нашем сервере можно зарабатывать\n"),strcat(sctring,str);
format(str,sizeof(str),"деньги, после покупать дома, машины и т.д Можно вступить в банду и воевать за\n"),strcat(sctring,str);
format(str,sizeof(str),"территории, тем самым расширяя бизнес. Или стать членом мафии.\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Можно работать полицейским защищая гражданских. И это только малая часть доступного!");
return ShowPlayerDialog(playerid, 4123, 0,"Общее",sctring,"Далее","Меню");
}
case 5:
{
format(str,sizeof(str),"<< Транспорт >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Для управления машиной необходимы водительские права, а пилатирование самолета\n"),strcat(sctring,str);
format(str,sizeof(str),"лицензия пилота. Транспорту нужен бензин, которым можно заправиться на любой заправке.\n"),strcat(sctring,str);
format(str,sizeof(str),"При нарушении Правил дорожного движения(превышение скорости...), вас могут оштрафовать.\n\n"),strcat(sctring,str);
format(str,sizeof(str),"<< Работа >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Многие профессии доступны каждому гражданскому. Устроиться на работу можно в Мэрии.\n"),strcat(sctring,str);
format(str,sizeof(str),"К примеру Водитель автобуса, Таксист, Механик.");
return ShowPlayerDialog(playerid, 4123, 0,"Транспорт часть 2",sctring,"Далее","Меню");
}
case 6:
{
format(str,sizeof(str),"<< Оружие и Убийство >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Для ношения оружия необходима лицензия, без нее вас не впустят в магазин.\n"),strcat(sctring,str);
format(str,sizeof(str),"Но оружие можно достать и другими способами.\n\n"),strcat(sctring,str);
format(str,sizeof(str),"За убисйтво человека вы будете объявлены в розыск, как опасный преступник,\n"),strcat(sctring,str);
format(str,sizeof(str),"а при аресте вы лишитесь крупной суммы денег и сядете в тюрьму!\n"),strcat(sctring,str);
format(str,sizeof(str),"Изначально ваши навыки владения оружием будут малы, но со временем вы сможете\n"),strcat(sctring,str);
format(str,sizeof(str),"стать элитным стрелком, и относиться к вам будут с уважением!");
return ShowPlayerDialog(playerid, 4123, 0,"Оружие и Убийство",sctring,"Далее","Меню");
}
case 7:
{
format(str,sizeof(str),"Role Play - Ролевая игра, игра по ролям.\n"),strcat(sctring,str);
format(str,sizeof(str),"Я объясню более понятно. Вам предоставлены уже готовые роли, к примеру\n"),strcat(sctring,str);
format(str,sizeof(str),"Бандит, Полицейский.\n"),strcat(sctring,str);
format(str,sizeof(str),"Состоя в банде вы продаете наркотики, оружие. Грабите военные склады и т.п.\n"),strcat(sctring,str);
format(str,sizeof(str),"Состоя в Полиции вы следите за порядком, и пытаетесь посадить тех же бандитов.\n"),strcat(sctring,str);
format(str,sizeof(str),"Если вам не нравиться выше написанное, то можете стать к примеру репортером, и\n"),strcat(sctring,str);
format(str,sizeof(str),"вести собственную передачу по радио.");
return ShowPlayerDialog(playerid, 4123, 0,"Role Play",sctring,"Далее","Меню");
}
case 8:
{
format(str,sizeof(str),"<< Первые шаги (Первые деньги) >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Вам потребуются деньги, заработать немного денег вы можете на заводах, работая грузчиком.\n"),strcat(sctring,str);
format(str,sizeof(str),"Добраться на завод вы можете на автобусе \'Внутригородской LS\' или на такси,\n"),strcat(sctring,str);
format(str,sizeof(str),"первый раз таксист отвезет вас бесплатно, просто сядьте в свободное такси.\n"),strcat(sctring,str);
format(str,sizeof(str),"Также заметьте, если у вас нет денег, то вы можете ехать на автобусе бесплатно.");
return ShowPlayerDialog(playerid, 4123, 0,"Первые шаги",sctring,"Далее","Меню");
}
case 9:
{
format(str,sizeof(str),"<< Первые шаги (Водительские права) >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Как только вы заработаете немного денег, отправляйтесь в автошколу.\n"),strcat(sctring,str);
format(str,sizeof(str),"Автошкола находиться в Сан Фиерро (2ой город).\n"),strcat(sctring,str);
format(str,sizeof(str),"Стоимость сдачи экзамена состовляет 500 вирт.\n"),strcat(sctring,str);
format(str,sizeof(str),"Добраться вы можете на автобусе \'Лос Сантос - Сан Фиерро\'.");
return ShowPlayerDialog(playerid, 4123, 0,"Первые шаги часть 2",sctring,"Далее","Меню");
}
case 10:
{
format(str,sizeof(str),"<< Первые шаги (Постоянная работа) >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"После того как вы заработаете денег и получите права\n"),strcat(sctring,str);
format(str,sizeof(str),"вы сможете устроиться на официальную работу.\n"),strcat(sctring,str);
format(str,sizeof(str),"Устроиться на работу, и ознакомиться со списком профессий, вы можете в мэрии.\n"),strcat(sctring,str);
format(str,sizeof(str),"Добирайтесь на \'Внутригородском LS\'");
return ShowPlayerDialog(playerid, 4123, 0,"Первые шаги часть 3",sctring,"Далее","Меню");
}
case 11:
{
format(str,sizeof(str),"<< Часовая зарплата >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Каждый час в 00 игроки получают банковский чек, в котором указаны все доходы и\n"),strcat(sctring,str);
format(str,sizeof(str),"расходы.\n"),strcat(sctring,str);
format(str,sizeof(str),"Доходы: Зарплата с работы.\n"),strcat(sctring,str);
format(str,sizeof(str),"Расходы: Налог государству(после 5 лвл), Счет за телефон(если вы звонили),\n"),strcat(sctring,str);
format(str,sizeof(str),"Кварплата(если вы владелец дома).");
return ShowPlayerDialog(playerid, 4123, 0,"Часовая зарплата",sctring,"Далее","Меню");
}
case 12:
{
format(str,sizeof(str),"<< Зарплата фракции >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"В некоторых фракциях вы получаете Зарплату каждый час от государства.\n"),strcat(sctring,str);
format(str,sizeof(str),"В других эта зарплата выдается лидером. Все организации на сервере имеют\n"),strcat(sctring,str);
format(str,sizeof(str),"свой заработок. Где то нелегальный бизнес, где то постоянная зарплата.\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Банды: Бизнес(Нелегальный), Оружие и Наркотики, Ограбление.\n"),strcat(sctring,str);
format(str,sizeof(str),"Репортеры: Бизнес(Легальный), Реклама.\n"),strcat(sctring,str);
format(str,sizeof(str),"Мэрия: От адвоката до Управления казной.");
return ShowPlayerDialog(playerid, 4123, 0,"Часовая зарплата",sctring,"Далее","Меню");
}
case 13:
{
format(str,sizeof(str),"<< Бизнес >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Все клубы, бары, забегаловки являются бизнесами, которые можно арендовать.\n"),strcat(sctring,str);
format(str,sizeof(str),"По мимо этого еще есть Бензоправки и Магазины.\n"),strcat(sctring,str);
format(str,sizeof(str),"Чтобы заработать на бизнесе нужен начальный капитал. Для лицензии,\n"),strcat(sctring,str);
format(str,sizeof(str),"Аренды помещения, Продуктов.");
return ShowPlayerDialog(playerid, 4123, 0,"Бизнес",sctring,"Далее","Меню");
}
case 14:
{
format(str,sizeof(str),"<< Местность >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Лос Сантос(1 город) самый опасный город, так как здесь большое количество\n"),strcat(sctring,str);
format(str,sizeof(str),"бандитов. Районы банд выделены на карте особыми цветами, но только там\n"),strcat(sctring,str);
format(str,sizeof(str),"можно купить оружие по дешевле и ни кто не спросит у вас лицензии\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Сан Фиерро(2 город). Если не хотите каждый день сталкиваться с беззаконием,\n"),strcat(sctring,str);
format(str,sizeof(str),"то поселитесь в этом городе.\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Лас Вентурас(3 город). Город азарта, город богачей. Конечно здесь не такие раскошные\n"),strcat(sctring,str);
format(str,sizeof(str),"особняки как на VINEWOOD, но улицы самые красивые.");
return ShowPlayerDialog(playerid, 4123, 0,"Местность",sctring,"Далее","Меню");
}
case 15:
{
format(str,sizeof(str),"<< Законопослушность >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"У каждого игрока есть индикатор, который показывает как вы относитесь к закону.\n"),strcat(sctring,str);
format(str,sizeof(str),"-100 и +100 Минимум и максимум. Узнать можно заглянув в ваш пасспорт \"/showpass [ид]\"\n"),strcat(sctring,str);
format(str,sizeof(str),"С плохим отношением к закону вас могут не принять во многии Фракции, но в банду\n"),strcat(sctring,str);
format(str,sizeof(str),"попасть легче.\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Законопослушность повышается каждый час на 1, однако может резко упасть если\n"),strcat(sctring,str);
format(str,sizeof(str),"совершите преступление");
return ShowPlayerDialog(playerid, 4123, 0,"Законопослушность",sctring,"Далее","Меню");
}
case 16:
{
format(str,sizeof(str),"<< Дома >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"Вы можете в любой момент купить себе дом, тогда при смерти или входе в игру\n"),strcat(sctring,str);
format(str,sizeof(str),"вы будете появляться там. По мимо этого у вас появиться место для парковки машины,\n"),strcat(sctring,str);
format(str,sizeof(str),"а значит вы можете купить себе красивое авто.\n"),strcat(sctring,str);
format(str,sizeof(str),"Дома поделенны по классам - [Nope] [D] [C] [B] [A]. Класс говорит о цене и красоте\n"),strcat(sctring,str);
format(str,sizeof(str),"дома как внутри, так и снаружи.");
return ShowPlayerDialog(playerid, 4123, 0,"Дома",sctring,"Далее","Меню");
}
case 17:
{
format(str,sizeof(str),"После покупки дома с вас будут сниматься Кварплата, она зависит от класса дома.\n"),strcat(sctring,str);
format(str,sizeof(str),"Важное примечание! Деньги снимаются каждый час даже когда вы оффлайн.\n\n"),strcat(sctring,str);
format(str,sizeof(str),"<< Личный транспорт >>\n\n"),strcat(sctring,str);
format(str,sizeof(str),"У нас есть несколько Автосалонов, где вы можете приобрести себе машину. Все они\n"),strcat(sctring,str);
format(str,sizeof(str),"указаны в \"/GPS\". Транспорт как и дома разделены по классам.\n"),strcat(sctring,str);
format(str,sizeof(str),"Чтобы выбрать себе машину, воспользуйтесь командой \"/Buycar\". Далее вы\n"),strcat(sctring,str);
format(str,sizeof(str),"увидете подсказку по клавишам с правой стороны, а снизу цену и цвет.");
return ShowPlayerDialog(playerid, 4123, 0,"Дома часть 2",sctring,"Далее","Меню");
}
}
return 1;
}
Данную систему легко редактировать, добавлять и удалять странички. Будет пахать на любой мод.
Написано всё для новичков.
P.S Так же могут быть предупреждения о неровном коде. Всё это можно исправить табуляцией.
На форуме есть много таких уроков.
Автор: Nike_
