Как сделать свою работу в самп

Привет Pawn-Wiki
Отступление
Приветствую тебя странник,будь ты пользователь этого сайта,или просто прохожий.Хочу сообщить сразу работу что для более опытных пользователей мой урок будет не очень полезен,вернее совсем бесполезен.В это уроке вы научитесь: 1. Как думать перед созданием той,или иной системы.2. Как построить систему,и получить желаемый результат.В частности я решил взять урок по созданию небольшой работы.Работенка это всего лишь предлог научить вас думать правильно перед созданием кода.
Часть 1 - Учимся думать "как код"
Для начала нужно проанализировать из чего состоит задание,для нас это будет работа грузчика.Хорошо,грузчик,но из чего будет состоять наше задание? Что за чем идет,и какова будет его оплата?
  • Сначала нам нужно прийти на нашу работу.
  • Дальше мы устроимся на нее,но нам нужна одежда рабочего.
  • Пройдем в уборную,и возьмем её.
  • Нам говорят следовать к какой-то цели,пусть это будет мешок с песком.
  • Мы берем его,и несем туда куда нам скажут.
  • Отработав срок мы идем за зарплатой.

Отлично,пол дела мы сделали.Следующий шаг будет состоять из определения места работы,возможно каких-то дополнительных информационных-блоков.
На мысль мне пришла идея сделать работу не далеко от ЖД. вокзала.Такое я уже где-то видел.(Не буду рекламировать сервер,сами понимаете про какой я).
Написание кода
И вот мы уже добрались до того самого,написания кода.Первым делом я хочу отметить что напишу я мини-систему в FS.И так,откроем new.pwn,очистим его,оставим только:
#include <a_samp>
Следующий шагом будет создание нашего пикапа с информацией/устройстве на наше заведение.
//Ко всем new new picroom; //Объявляем пикап при запуске мода public OnGameModeInit() { picroom = CreatePickup(1275, 2, 2137.7551,-2282.3625,20.6719, -1); return 1; }
Эврика! У нас уже есть пикап,однако в ходе размышления я решил не усложнять задачу новичкам.Мы не будем делать отдельно раздевалку,мы сразу начинаем работу в костюме рабочего.Создадим события для нашего пикапа:
//Ко всем new new injob[MAX_PLAYERS];//Это у нас проверка на нашу работу. Если 0 - Не работаем, Если 1 - получаем зарплату new bag[MAX_PLAYERS];//Это кол-во перенесенных мешков. //Теперь создадим enum в котором будем хранить id наших диалогов,и чекпоинтов enum { dJob } //Создаем паблик действия при заходе на наш пикап. public OnPlayerPickUpPickup(playerid, pickupid) { if(pickupid == picroom)//Если мы зашли на пикап нашего инфо-блока. { if(injob[playerid] == 0)//Если мы не работаем,то { ShowPlayerDialog(playerid,dJob,DIALOG_STYLE_MSGBOX,"Работа грузчика","Вы желаете устроиться на работу грузчика?","Начать","Закрыть");//Покажем диалог если зашли на пикап } if(injob[playerid] == 1) { injob[playerid] = 0;//Вернем на 0 чтобы мы могли снова работать new string[35]; format(string, 20, "Вы заработали: %d.", bag[playerid]5);//Кол-во умноженное на то же число что и зп. SendClientMessage(playerid, 0x1F98F1FF, string); GivePlayerMoney(playerid, bag[playerid]5);//Число мешков умноженное на 5,5 число за 1 мешок. } } return 1; }
И так,у нас есть диалог который покажется при входе,но он не дает полезных результатов,исправляем:
//Ко всем new new pCheckpoint[MAX_PLAYERS]; //Создаем паблик public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == dJob) //Ид диалога { if(response)//Если нажали на левую кнопку { injob[playerid] = 1;//Установим значения работы на 1,чтобы мы в следующий раз получали деньги pCheckpoint[playerid]=cIn;//Установим значения чекпоинта на показ его. SetPlayerCheckpoint(playerid, 2231.1714,-2285.3804,14.3751, 2.0);//Покажем чекпоинт SetPlayerSkin(playerid,16);//Установим скин рабочего } } return 1; }
Теперь мы можем получить нашу форму,мы увидим чекпоинт куда можем идти,но придя не чего не получим.Делаем действия:
//Пополним енум enum { dJob,//Диалог работы cIn,//Показываем где брать мешок cOut//Показываем куда положить мешок } //Делаем действие public OnPlayerEnterCheckpoint(playerid) { switch(pCheckpoint[playerid]) { case cIn://Пришли,взяли,нам показали куда идти. { DisablePlayerCheckpoint(playerid); pCheckpoint[playerid]=cOut; SetPlayerCheckpoint(playerid,2172.0193, -2255.3530, 13.3039,3.0); } case cOut: { bag[playerid] ++;//Увеличиваем значение переменной перенесенных мешков на 1 DisablePlayerCheckpoint(playerid);//Удаляем старый чекпоинт pCheckpoint[playerid]=cIn;//Показываем снова откуда брать SetPlayerCheckpoint(playerid, 2231.1714,-2285.3804,14.3751, 2.0);//Показываем его new string[35];//Макс значение 35 format(string, 35, "Перенесено мешков: %d $", bag);//Простейший формат SendClientMessage(playerid, 0x1F98F1FF, string);//Отошлем сколько вы итоге мы перенесли. } } return 1; }
Вот и все,мы закончили нашу работу,пусть она без примочек мол,анимации и прочее.Не хочу нагружать слишком большим материалом для новичков,быть может позже я покажу вам как это делать.На этом моя работа заканчивается,я открываю свою зонт,и улетаю.Надеюсь я вам чем-то помог,и разъяснил суть построения кода.
Вопросы которые могут у вас возникнуть:
Вы: Как не сделать так же но чтобы работало в моем моде. Я: Вы повторяете тоже самое,только вам нужно менять значение переменной денег,скина на то как у вас указанно в массиве. --- Вы: Как мне добраться до того места в котором вы сделали работу Я: В ссылке на исходник я специально дописал команду телепортации для вас (/tp) --- Вы: Могу ли я усовершенствовать эту систему,и как это сделать? Я: Конечно,вы можете доработать так как вы захотите,вы можете даже забрать мой исходник для опытов. --- Вы: Как мне выразить благодарность за урок? Я: Поставить "+" мне в профиль.

Автор урока: ArtZet(Собственно я)
Ссылки: Rghost (Готовый вариант),VT


Поделись с друзьями



Рекомендуем посмотреть ещё:


Закрыть ... [X]

Собрание сочинений Том четвертый. Одиссея. Художественная проза Построй лодку своими руками

Как сделать свою работу в самп Как сделать свою работу в самп Как сделать свою работу в самп Как сделать свою работу в самп Как сделать свою работу в самп Как сделать свою работу в самп Как сделать свою работу в самп Как сделать свою работу в самп

ШОКИРУЮЩИЕ НОВОСТИ