Доступ к архиву

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

[Мануал] работа для фракции "Колхоз"

Статус
В этой теме нельзя размещать новые ответы.

Grime228

Умник
Всем привет...
Сейчас покажу как сделать работу для фракции Колхоз , у вас уже должна быть фракция Колхоз

Что это даст: Игрок состоящий в Колхозе сможет косить мак , а именно катаясь на комбайне по полю

Установка: (Примечание на инклуде mxINI) Очень легкая!

И так начнем:

В начало мода добавьте переменные , а так же форварды


PHP:
new bool: MacYest[MAX_VEHICLES],KolxozMac,PritonMac, 
Text3D: Mac3dText,Text3D: Mac3dTextPriton;//Кол-тво мака на складе и в притоне и 3д тексты в колхозе и притоне
Теперь в public ongamemodeinit добавьте переменную


PHP:
new strg[100];
И теперь чтобы загружало кол-тво мака добавьте строку туда же в public ongamemodeinit , о самой строке позже


PHP:
LoadMac();//Загружаем мак из файла
Теперь давайте создадим 3д тексты , и пикап добавьте тоже в public ongamemodeinit


PHP:
format(strg,sizeof(strg),"Склад Мака\nНа складе: %d/20000 грамм",KolxozMac);//Создаем 3д текст чтобы показывало кол-тво мака на складе, и чтобы обновлял но это позже 
Mac3dText = Create3DTextLabel(strg,0xFFA500FF,-1061.5,-1183.5,129.2,40.0,0); 
format(strg,sizeof(strg),"Притон\nВ притоне: %d/10000 грамм",PritonMac); //Создаем 3д текст чтобы показывало кол-тво мака в притоне, и чтобы обновлял но это позже 
Mac3dTextPriton = Create3DTextLabel
Теперь в public onplayercommandtext добавим команды , так же добавим переменные , если нет


PHP:
new string[150],caridi = GetPlayerVehicleID(playerid); 


if(strcmp(cmd, "/sellmac", true) == 0) 
{ 
if(PlayerInfo[playerid][pMember] != 22 ||PlayerInfo[playerid][pLeader] != 22) return SendClientMessage(playerid,COLOR_RED,"* Вы не Колхозник");//Проверяем игрока на фракцию 
if(!IsPlayerInRangeOfPoint(playerid,10.0,-1061.5,-1183.5,129.2)) return SendClientMessage(playerid,COLOR_RED,"* Вы не в месте продажи наркотиков (Склад/Притон).");//Проверяем на позицию 
if(GetVehicleModel(caridi) != 532 || GetVehicleModel(caridi) != 478) return SendClientMessage(playerid,COLOR_RED,"* Вы не в машине Колхоза");//Проверяем сидит ли игрок в данной машине 
if(GetPlayerState(playerid) != 2) return SendClientMessage(playerid,COLOR_RED,"* Вы не водитель!");//А так же проверяем сидит ли он за рулем 
if(MacYest[caridi] <= 0) return SendClientMessage(playerid,COLOR_RED,"* В вашей машине нету наркотиков!");//Проверяем есть мак в машине , если 0 то иди нах :D 
if(KolxozMac >= 20000) return SendClientMessage(playerid,COLOR_RED,"* Склад переполнен! Максимум 20000 грамм.");//Так же делаем лимит на склад , макс мак можно поместить на склад 20 тыс 
KolxozMac += MacYest[caridi]; 
GivePlayerMoney(playerid,MacYest[caridi]*50); 
format(string, sizeof(string), "* Вы продали %d грамм складу за %d$",MacYest[caridi],MacYest[caridi]*50); 
SendClientMessage(playerid,COLOR_LIGHTBLUE,string); 
DisablePlayerCheckpoint(playerid); 
format(string,sizeof(string),"Склад Мака\nНа складе: %d/20000 грамм",KolxozMac); 
Update3DTextLabelText(Mac3dText, 0xFFA500FF, string);//Обновляем 3д текст у склада с показом кол-тва мака 
MacYest[caridi] = 0;//Все как бэ игрок мак здал , значит в машине мака больше не должно быть так что ставим 0 
return SaveMac();//Сохраняем мак в файл 
} 
else 
{ 
if(!IsPlayerInRangeOfPoint(playerid,10.0,2172.3,-1674.6,15.1)) return SendClientMessage(playerid,COLOR_RED,"* Вы не в месте продажи наркотиков (Склад/Притон).");//Проверяем игрока на координаты у притона , там где можно продать собранный мак 
if(GetVehicleModel(caridi) != 478 || GetVehicleModel(caridi) != 554 || GetVehicleModel(caridi) != 547) return SendClientMessage(playerid,COLOR_RED,"* Вы не в машине Колхоза");//Опять же проверяем машины 
if(GetPlayerState(playerid) != 2) return SendClientMessage(playerid,COLOR_RED,"* Вы не водитель!");//А так же проверяем сидит ли он за рулем 
if(MacYest[caridi] <= 0) return SendClientMessage(playerid,COLOR_RED,"* В вашей машине нету наркотиков!");//Думаю вам понятно 
if(PritonMac >= 10000) return SendClientMessage(playerid,COLOR_RED,"* Притон переполнен. Максимум 10000 грамм");//Думаю вам понятно 
new money = MacYest[caridi]*100; 
PritonMac += MacYest[caridi]; 
GivePlayerMoney(playerid,money); 
format(string, sizeof(string), "* Вы продали %d грамм притону за %d$",MacYest[caridi],money); 
SendClientMessage(playerid,COLOR_YELLOW,string); 
format(string,sizeof(string),"Склад Мака\nНа складе: %d/20000 грамм",KolxozMac); 
Update3DTextLabelText(Mac3dText, 0xFFA500FF, string); 
format(string,sizeof(string),"Притон\nВ притоне: %d/10000 грамм",PritonMac); 
Update3DTextLabelText(Mac3dTextPriton, 0xFFA500FF, string); 
MacYest[caridi] = 0; 
return SaveMac();//Думаю вам понятно 
} 
//------------------------------------------------------------------------------ 
if(strcmp(cmd, "/buymac", true) == 0) 
{ 
if(PlayerInfo[playerid][pMember] != 22 ||PlayerInfo[playerid][pLeader] != 22) return SendClientMessage(playerid,COLOR_RED,"* Вы не Колхозник");//Проверяем игрока на фракцию 
tmp = strtok(cmdtext, idx); 
if(!strlen(tmp)) return SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используйте: /buymac [кол-во максимум 100]"); 
new mat = strval(tmp); 
if(!IsPlayerInRangeOfPoint(playerid,10.0,-1061.5,-1183.5,129.2)) return SendClientMessage(playerid,COLOR_RED,"* Вы не в месте продажи наркотиков (Склад).");//Проверяем игрока на коорды 
if(GetVehicleModel(caridi) != 478 || GetVehicleModel(caridi) != 554 || GetVehicleModel(caridi) != 547) return SendClientMessage(playerid,COLOR_RED,"* Вы не в машине Колхоза");//Опять же проверяем машины 
if(GetPlayerState(playerid) != 2) return SendClientMessage(playerid,COLOR_RED,"* Вы не водитель!");//А так же проверяем сидит ли он за рулем 
if(mat > 100) return SendClientMessage(playerid,COLOR_RED,"* Больше 100 грамм возить нельзя!");//Ставим лимит что больше 100 грам возить нельзя 
if(GetPlayerMoney(playerid) < mat*50) return SendClientMessage(playerid,COLOR_RED,"* У Вас нехватает денег!");//Проверка на деньги 
if(MacYest[caridi]+mat > 100) return SendClientMessage(playerid,COLOR_LIGHTBLUE,"* За один раз можно везти 100 грамм!");//Опсть же 
MacYest[caridi] += mat; 
KolxozMac -= mat; 
GivePlayerMoney(playerid,-mat*50); 
format(string, sizeof(string), "* Вы взяли %d грамм за %d$",mat,mat*50); 
SendClientMessage(playerid,COLOR_LIGHTBLUE,string); 
format(string,sizeof(string),"Склад Мака\nНа складе: %d/20000 грамм",KolxozMac); 
Update3DTextLabelText(Mac3dText, 0xFFA500FF, string); 
return SaveMac();//Думаю понятно 
}                    
//------------------------------------------------------------------------------ 
if(strcmp(cmd, "/checkmac", true) == 0) 
{ 
if(PlayerInfo[playerid][pLeader] != 22 || PlayerInfo[playerid][pAdmin] < 13)continue; 
format(string, sizeof(string), "* На складе %d грамм",KolxozMac); 
SendClientMessage(playerid,COLOR_YELLOW,string); 
format(string, sizeof(string), "* В притоне %d грамм",PritonMac); 
SendClientMessage(playerid,COLOR_YELLOW,string);//Думаю и так понятен смысл команды , и как тут все устроено 
return 1; 
}
Кстати есл у вас нет паблика PlayerToKvadrat то добавьте , он нам нужен для проверки на зону
Куда нибудь в конец мода

PHP:
stock PlayerToKvadrat(playerid,Float:min_x,Float:min_y,Float:max_x,Float:max_y) 
{ 
new Float:p[3]; 
GetPlayerPos(playerid,p[0],p[1],p[2]); 
if(p[0] > minx && p[0] < maxx && p[1] > miny && p[1] < maxy) return 1; 
return 0; 
}
Теперь давайте добавим само кошение

В public SetPlayerUnJail

PHP:
for(new i = 0; i < MAX_PLAYERS; i++)//Создаем цикл для игроков 
{ 
if(!IsPlayerConnected(i)) continue; 
if(!PlayerToKvadrat(i,-1199.7,-1065.9,-1002.0,-909.5) && GetVehicleModel(GetPlayerVehicleID(i)) != 532) continue; 
if(MacYest[caridd] < 100)//Ставим лимит 
{ 
MacYest[caridd] += 1;//Прибавляем по 1 грамму  мака 
format(string,sizeof(string),"~y~Mac ~g~%d~y~/100",MacYest[caridd]); 
GameTextForPlayer(i, string, 5000, 4);//Создаем геймтекст с показом того сколько игрок собрал мака 
} 
else 
{ 
GameTextForPlayer(i, "~r~Combine is Full", 5000, 4);//И создаем геймтекст когда машина переполнена 
SetPlayerCheckpoint(i,-1061.5,-1183.5,129.2,5);//Так же ставим чекпоинт для иигрока , он показывает место склада , где можно здать мак 
}
Теперь нам нужно чтобы если в притоне не было мака то нарко дилер не мог продать нарко , тогда найдите команду /get

И найдите там такие строки

PHP:
if(strcmp(x_job,"drugs",true) == 0) 
            { 
                if(PlayerInfo[playerid][pDrugs] > 15) 
                { 
                    format(string, sizeof(string), "* У вас есть при себе нарко %d грамм для начало продайте их!", PlayerInfo[playerid][pDrugs]); 
                    SendClientMessage(playerid, COLOR_GREY, string); 
                    return 1; 
                } 
                new tel; 
                new price; 
                new ammount; 
                tmp = strtok(cmdtext, idx); 
                if(!strlen(tmp)) 
                { 
                    SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используй: /get drugs [кол-тво]"); 
                    return 1; 
                } 
                new level = PlayerInfo[playerid][pDrugsSkill]; 
                ammount = strval(tmp);
После этих строк добавьте проверку


PHP:
if((PritonMac-ammount) < 0) 
                { 
                    format(string,sizeof(string),"* В притоне не хватает наркотиков, сейчас в притоне %d наркотков",PritonMac); 
                    SendClientMessage(playerid,COLOR_RED,string); 
                    return 1; 
                }
Далее в этой же команде найди следующие строки

PHP:
format(string, sizeof(string), "* Вы купили %d грамм, за $%d.", ammount, price); 
                        SendClientMessage(playerid, COLOR_LIGHTBLUE, string); 
                        GivePlayerMoney(playerid, -price); 
                        PlayerInfo[playerid][pDrugs] = ammount;
И после GivePlayerMoney(playerid, -price); добавьте следующие строчки ...


PHP:
format(string,sizeof(string),"Притон\nВ притоне: %d/10000 грамм",PritonMac); 
                        Update3DTextLabelText(Mac3dTextPriton, 0xFFA500FF, string); 
                        PlayerInfo[playerid][pDrugs] = PlayerInfo[playerid][pDrugs] + ammount; 
                        PritonMac=PritonMac-ammount; 
                        SaveMac();
Только перед этим удалите строчку PlayerInfo[playerid][pDrugs] = ammount;

Теперь сделаем сохранение и загрузку
Куда нибудь в конец мода добавьте 2 паблика , ниже расписано о них


PHP:
stock LoadMac()//Теперь мы же хотим чтобы мак который сохраняли в файл , при запуске сервера читался 
{ 
new iniFile = ini_openFile("Mac.ini");//откроем файл 
ini_getInteger(iniFile,"Мак в колхозе",KolxozMac);//читаем мак колхоза 
ini_getInteger(iniFile,"Мак в притоне",PritonMac);//читаем мак притона 
ini_closeFile(iniFile);//закрываем файл 
} 
//------------------------------------------------------------------------------ 
stock SaveMac()//Так как мы хотим чтобы мак бесследно не пропал , то делаем сохранение в файл 
{ 
new iniFile = ini_openFile("Mac.ini");//откроем файл 
ini_setInteger(iniFile,"Мак в колхозе",KolxozMac);//запишем мак колхоза 
ini_setInteger(iniFile,"Мак в притоне",PritonMac);//запишем мак притона 
ini_closeFile(iniFile);//закрываем файл 
}
И кстати создайте сам файл Mac.ini с которого и будет происходить запись и сохранение мака и поместите его в папку scriptfiles в вашем моде!
Вот и все!
P.S. Не забудьте сменить иды фракций на свои , а также иды машин на которых можно производить продажу и закупку мака.
Для тех кто не понял как все происходит то распишу с 0 , сначала садимся в комбайн и едем на поле , далее мы косим мак , после того как мы собрали мак мы отвозим его на склад , его нужно сдать , после сдачи , садимся в легковую машинку берем определенное кол-тво мака на складе , и едем в притон , и там продаем его по цене в 2 раза больше , вот и все , я думаю все знают где находится респа Колхоза !

Автор: Mr.Brooks
Перевод: Grime228
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу