[Урок] Работа грузчика. - Форум Cheat-Master.ru
  • Страница 1 из 1
  • 1
Модератор форума: Phoenixxx_Czar, Getbackthere, [CM]OlegEhtler  
[Урок] Работа грузчика.
TTaKeMoWa Дата: Понедельник, 07.05.2012, 18:28 | Сообщение # 1
Боец
Сообщений: 118
Статус: Offline
В этом уроке я расскажу как написать свою работу грузчика, для любого мода. Делается она просто, всего в несколько сотен строк, но и получается не плохая, уже стандартная работа.

Ко всем #define, добовляем:
Code
#define MAX_UCHECK 2 // Чекпоинт куда несём груз
#define MAX_PCHECK 5 // Чекпоинт где берём груз
#define START_JOB 2 // Кол-во мест для начала работы
#define JOB_CASH 10 // Бабки за 1 ящик  


Ко всем new, добавляем вот это:

Code
new Float:ucheck[MAX_UCHECK][3] = {// Чекпоинты где нужно брать вещи..
{2746.9546,-2436.0449,13.6432},
{2746.5940,-2427.4841,13.6380}
};

new Float:pcheck[MAX_PCHECK][3] = {// Чекпоинты куда нужно нести вещи...
{2785.3604,-2409.4348,13.6343},
{2784.9187,-2424.8127,13.6344},
{2793.5256,-2410.3799,13.6323},
{2793.3657,-2425.0623,13.6323},
{2799.1807,-2409.9629,13.6309}
};

new Float:start_job[START_JOB][3] = {// Места, где можно начать работу...
{2798.4226,-2393.9375,13.9560},
{2749.2666,-2454.0779,13.8623}
};


Если вы хотите добавить ещё одно место для начала работы, то вы добавляете в start_job, координаты x,y,z, заключённые в "{ }", а #define START_JOB 2, меняете на #define START_JOB 3. Тупо говоря, двойку меняете на тройку.

Далее в public OnGameModeInit, добовляем:

Code
for(new gjob; gjob < START_JOB; gjob++)// Цикл на создание пикапа для начала работу
{
CreatePickup(1275,23,start_job[gjob][0],start_job[gjob][1],start_job[gjob][2],-1);// Создаём пикап начала работы

Мы создали пикап, по заданным координатам в start_job.

В public OnPlayerUpdate добовляем:

Code
for(new gjob; gjob < START_JOB; gjob++)// кол-во мест в которых можно начать работу
{
if(IsPlayerInRangeOfPoint(playerid,2,start_job[gjob][0],start_job[gjob][1],start_job[gjob][2])) GameTextForPlayer(playerid,"~g~PRESS KEY ~r~ALT",5000,4);// Проверяем нахождение игрока в точках начала работы, если он там, выводите GameText


В public OnPlayerKeyStateChange добовляем:
Code
if(newkeys == KEY_WALK)// Проверка на кнопку ALT
           {
           for(new gjob; gjob < START_JOB; gjob++)// Цикл колличество мест в которых можно начать работу
                   {
                   if(IsPlayerInRangeOfPoint(playerid,2,start_job[gjob][0],start_job[gjob][1],start_job[gjob][2]))// Проверяем нахождение игрока в точках начала работы
                           {
                           if(GetPVarInt(playerid,"InJob") == 0) ShowPlayerDialog(playerid,30000,DIALOG_STYLE_MSGBOX,"Начало Работы грузчиком","{FFFFFF}Если вы хотите начать работу грузчиком, нажмите начать","Начать","Отмена");
                           // Если игрок уже работает грузчиком, то выводим диалог окончания
                      else if(GetPVarInt(playerid,"InJob") == 1) ShowPlayerDialog(playerid,30001,DIALOG_STYLE_MSGBOX,"Окончание Работы грузчиком","{FFFFFF}Если вы хотите завершить работу грузчиком, нажмите конец","Конец","Отмена");
                      // Если игрок не работает грузчиком, то выводим диалог начала
                           }
                   }
           }
           if(GetPVarInt(playerid,"Job") == 2)
           {
           if(newkeys == KEY_SECONDARY_ATTACK || newkeys == KEY_JUMP || newkeys == KEY_SECONDARY_ATTACK || newkeys == KEY_FIRE
                   || newkeys == KEY_CROUCH)
                   {
                   RemovePlayerAttachedObject(playerid,5);// Удаляем объект из рук
                   ApplyAnimation(playerid,"PED","IDLE_tired",4.1,0,1,1,0,1);// Обнуляем анимацию
                   SetPVarInt(playerid,"Job",1);// Устанавливаем момент работы игрока на 1..
                   new checkp = random(MAX_PCHECK);
                           SetPlayerCheckpoint(playerid,pcheck[checkp][0],pcheck[checkp][1],pcheck[checkp][2],1.5);// Создаём один из чекпоинтов
                   }
           }if(newkeys == KEY_WALK)// Проверка на кнопку ALT
           {
           for(new gjob; gjob < START_JOB; gjob++)// Цикл колличество мест в которых можно начать работу
                   {
                   if(IsPlayerInRangeOfPoint(playerid,2,start_job[gjob][0],start_job[gjob][1],start_job[gjob][2]))// Проверяем нахождение игрока в точках начала работы
                           {
                           if(GetPVarInt(playerid,"InJob") == 0) ShowPlayerDialog(playerid,30000,DIALOG_STYLE_MSGBOX,"Начало Работы грузчиком","{FFFFFF}Если вы хотите начать работу грузчиком, нажмите начать","Начать","Отмена");
                           // Если игрок уже работает грузчиком, то выводим диалог окончания
                      else if(GetPVarInt(playerid,"InJob") == 1) ShowPlayerDialog(playerid,30001,DIALOG_STYLE_MSGBOX,"Окончание Работы грузчиком","{FFFFFF}Если вы хотите завершить работу грузчиком, нажмите конец","Конец","Отмена");
                      // Если игрок не работает грузчиком, то выводим диалог начала
                           }
                   }
           }
           if(GetPVarInt(playerid,"Job") == 2)
           {
           if(newkeys == KEY_SECONDARY_ATTACK || newkeys == KEY_JUMP || newkeys == KEY_SECONDARY_ATTACK || newkeys == KEY_FIRE
                   || newkeys == KEY_CROUCH)
                   {
                   RemovePlayerAttachedObject(playerid,5);// Удаляем объект из рук
                   ApplyAnimation(playerid,"PED","IDLE_tired",4.1,0,1,1,0,1);// Обнуляем анимацию
                   SetPVarInt(playerid,"Job",1);// Устанавливаем момент работы игрока на 1..
                   new checkp = random(MAX_PCHECK);
                           SetPlayerCheckpoint(playerid,pcheck[checkp][0],pcheck[checkp][1],pcheck[checkp][2],1.5);// Создаём один из чекпоинтов
                   }
           }


Затем в public OnDialogResponse вставляем:
Code
if(dialogid == 30000)
                   {
                   if(!response) return 1;// Если нажал отмена
                           SendClientMessage(playerid,0xFFFFFFAA,"* Вы начали работу {ff0000}грузчиком");// Выводим текст
                   SetPVarInt(playerid,"PSkin",GetPlayerSkin(playerid));// Сохраним скин игрока
                   SetPlayerSkin(playerid,268);// Установим игроку скин
                   SetPVarInt(playerid,"InJob",1);// Устанавливаем игроку работу.
                   SetPVarInt(playerid,"Job",1);// Устанавливаем момент работы, 1 - идём брать вещи. 2 - несём вещи.
                           new checkp = random(MAX_PCHECK);// Рандомно выдаём координаты где брать груз
                           SetPlayerCheckpoint(playerid,pcheck[checkp][0],pcheck[checkp][1],pcheck[checkp][2],1.5);// Создаём один из чекпоинтов
                   }
                   if(dialogid == 30001)
                   {
                   if(!response) return 1;
                   new str[128];
                   format(str,sizeof(str),"* Вы завершили работу {ff0000}грузчиком.{ffffff}Вы получаете: {ff0000}$%d",GetPVarInt(playerid,"JobY")*JOB_CASH);
                   SendClientMessage(playerid,0xFFFFFFAA,str);// Выводим текст
                           DisablePlayerCheckpoint(playerid);// Удаляем чекпоинт
                           ApplyAnimation(playerid,"PED","IDLE_tired",4.1,0,1,1,0,1);// Обнуляем анимацию
                           RemovePlayerAttachedObject(playerid,5);// Удаляем объект из рук
                           GivePlayerMoney(playerid,GetPVarInt(playerid,"JobY")*JOB_CASH);// Выдаём деньги
                           SetPlayerSkin(playerid,GetPVarInt(playerid,"PSkin"));// Возвращаем скин
                           DeletePVar(playerid,"Job");// Удаляем PVar с моментом работы
                           DeletePVar(playerid,"InJob");// Удаляем PVar с работой
                           DeletePVar(playerid,"JobY");// Удаляем PVar с колличеством вещей
                           DeletePVar(playerid,"PSkin");// Удаляем PVar с одеждой
                   }


Ну и на конец в public OnPlayerEnterCheckpoint вставляем:

Quote
if(GetPVarInt(playerid,"Job") == 1)// Если момент работы игрока 1..
{
new checku = random(MAX_UCHECK);// Рандомно выдаём координаты куда нести груз
SetPlayerCheckpoint(playerid,ucheck[checku][0],ucheck[checku][1],ucheck[checku][2],1.5);// Создаём один из чекпоинтов
ApplyAnimation(playerid,"CARRY","crry_prtial",4.1,0,1,1,1,1);// Анимация, типо что то несём..
SetPVarInt(playerid,"Job",2);// Устанавливаем момент работы игрока на 2..
new objectr = random(3);// Выдаём в руки объект
if(objectr == 0) return SetPlayerAttachedObject(playerid,5,1221,1,0.135011,0.463495,-0.024351,357.460632,87.350753,88.068374,0.434164,0.491270,0.368655);
if(objectr == 1) return SetPlayerAttachedObject(playerid,5,2226,1,0.000708,0.356461,0.000000,186.670364,87.529838,0.000000,1.000000,1.000000,1.000000);
if(objectr == 2) return SetPlayerAttachedObject(playerid,5,1750,1,0.013829,0.131155,0.145773,185.651550,86.201354,345.922180,0.693442,0.873942,0.577291);
}
if(GetPVarInt(playerid,"Job") == 2)
{
RemovePlayerAttachedObject(playerid,5);// Удаляем объект из рук
ApplyAnimation(playerid,"PED","IDLE_tired",4.1,0,1,1,0,1);// Обнуляем анимацию
SetPVarInt(playerid,"Job",1);// Устанавливаем момент работы игрока на 1..
SetPVarInt(playerid,"JobY",GetPVarInt(playerid,"JobY")+1);// Прибавим к вещам игрока 1
new str[128],checkp = random(MAX_PCHECK);
format(str,sizeof(str),"* Вещей перетащенно: {ff0000}%d",GetPVarInt(playerid,"JobY"));
SendClientMessage(playerid,0xFFFFFFAA,str);// Выведем сообщение
SetPlayerCheckpoint(playerid,pcheck[checkp][0],pcheck[checkp][1],pcheck[checkp][2],1.5);// Создаём один из чекпоинтов
}


Объясняю в краце: если игрок встал на чекпоинт, и его момент работы равен 1 ( GetPVarInt(playerid,"Job") == 1), то ему в руки даёт один из 3 - х объектов, и показывается один из двух доступных чекпоинтов, на которые надо принести вещь. А если момент работы игрока, равен 2 ( GetPVarInt(playerid,"Job") ==2), то у игрока удаляется из рук объект, убирается анимация, к перенесёным вещам прибавляется 1, и показывает один из 5 чекпоинтов, где можно взять вещь.

Автор: Vovan228

P.S.: Работа находится в доках Лос Сантоса, если кому надо переносите в свое место. Могу помочь, если что стучите в скайп: ilyxa_newskype.


[img]http://cheat-master.ru/_fr/1/9873422.png[/img]

Сообщение отредактировал TTaKeMoWa - Понедельник, 07.05.2012, 21:55
iMaddy Дата: Понедельник, 07.05.2012, 18:48 | Сообщение # 2
Cheat-Master
Сообщений: 2855
Статус: Offline
Кто автор мануала?


Вопросами по сайту и так же игровому рынку (развод, невалидные товары, добавление в ЧС, проведение сделок)
не занимаюсь



TTaKeMoWa Дата: Понедельник, 07.05.2012, 18:52 | Сообщение # 3
Боец
Сообщений: 118
Статус: Offline
вай, забыл... Vovan228

[img]http://cheat-master.ru/_fr/1/9873422.png[/img]
Sj-olo Дата: Понедельник, 07.05.2012, 19:14 | Сообщение # 4
Новичок
Сообщений: 2
Статус: Offline
biggrin

Хорошо, что на свете есть дураки. Это благодаря им мы преуспеваем (Марк Твен)
[CM]Jeremy Дата: Понедельник, 07.05.2012, 21:27 | Сообщение # 5
Любитель
Сообщений: 35
Статус: Offline
Код требует хорошей оптимизации.
Придерусь:
Quote
Грусчика

Это от слова грусить?


NYASHKA
[Ice][Cube] Дата: Понедельник, 07.05.2012, 21:47 | Сообщение # 6
Новичок
Сообщений: 23
Статус: Offline
Норм, попробую happy
Quote (|CM|Jeremy)
грусить?

Прикрепления: 1969697.jpg (3.2 Kb)
TTaKeMoWa Дата: Понедельник, 07.05.2012, 21:58 | Сообщение # 7
Боец
Сообщений: 118
Статус: Offline
Quote (|CM|Jeremy)
Это от слова грусить?

Ну ошибся, с кем не бывает.. shy
Исправил. Спасибо, что заметил.


[img]http://cheat-master.ru/_fr/1/9873422.png[/img]
[CM]FCDK Дата: Воскресенье, 24.06.2012, 01:04 | Сообщение # 8
Новичок
Сообщений: 16
Статус: Offline
дайте кто то на cleo рузчика
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Лучшие пользователи
Admin [39113]

GеNius [7210]

[CM]Russel [5557]

kenlo763 [4952]

[CM]AGRESSOR [4639]

Snake_Firm [4452]

Сэс [4416]

Artem_Buero [4223]

[CM]Durman [3204]

[CM]Рафаэль [3080]

iMaddy [2855]

sky_Woker [2854]

getrekt [2745]

Новые пользователи
cheatjopa2 [11:58]

gabitovismaismaisma [09:18]

Gotham_ws [03:45]

раре [02:58]

Epiphonexmr [02:38]

ksuexe [01:35]

petrusenko_t [23:29]

shanepk60 [21:19]

chadaevvo18 [19:34]

zazik965mb [17:41]

AndreSR [16:49]

funovv [20:46]

Dizelmotnik [11:22]