Bart_Marco
Умник
Первое что делаем - заносим forwards
Следующий шаг - заносим переменные
Находим public IsAnInstructor(playerid)
Перед ним вставляем
Находим public LoadStuff() и перед ним вставляем
В OnPlayerCommandText
Удаляем/исправляем /materials на /mats
===========
Потом создаём объекты в OnGameModeInit
И где все Load'ы вставляем LoadMaterials();
Находим пикап
Materials Package building
Заменяем его на
Ниже дописываем
Добавляем машины(я сразу присвоил машинам переменные, что бы было легче)
ищем команду /go или /join, ну какая что бы устроится на работу и добавляем
Потом в public OnPlayerPickUpPickup
Из слов автора:
Таким образом мы имеем сохранение 2-х складов + сохранение в каждом дампере.
Ещё создайте в scriptfiles файл materials.ini
Автор идее FiLE95, автор Реализации FiLE95
PHP:
forward LoadMaterials();
forward SaveMaterials();
forward ruda(playerid);
forward IsAnRifa(playerid);
PHP:
new encarier; // Вход в карьер
new excarier; // Выход из карьера
new Rudabox = 0; // Склад руды
new Materialsbox = 0; // Склад завода
new Bilaz1 = 0;
new Bilaz2 = 0;
new Bilaz3 = 0;
new Bilaz4 = 0;
new Bilaz5 = 0;
new Bilaz6 = 0;
new mammount; // Покупка материалов (введеное кол-во)
new palammm[MAX_PLAYERS];
new rudaslots = 1;
new BELAZ[7];//для машин
Перед ним вставляем
PHP:
public ruda(playerid)
{
new newcar = GetPlayerVehicleID(playerid);
SendClientMessage(playerid, COLOR_GREY, "Погрузка руды окончена. Отвезите руду в указанное место!");
TogglePlayerControllable(playerid, 1);
SetPlayerCheckpoint(playerid, 804.801,842.090,10.732, 8.0);
if(newcar == 453) //Иды машин поменять
{ Bilaz1 = 100; }
if(newcar == 454)
{ Bilaz2 = 100; }
if(newcar == 455)
{ Bilaz3 = 100; }
if(newcar == 456)
{ Bilaz4 = 100; }
if(newcar == 457)
{ Bilaz5 = 100; }
if(newcar == 458)
{ Bilaz6 = 100; }
SaveMaterials();
return 1;
}
public IsAnRifa(playerid)
{
if(IsPlayerConnected(playerid))
{
new leader = PlayerInfo[playerid][pLeader];
new member = PlayerInfo[playerid][pMember];
if(member==17)//Вместо 17 Вставляем ид Фракции Рифы
{
return 1;
}
if(leader==17)//Тут тоже вместо 17 ид Фракции Рифы
{
return 1;
}
}
return 0;
}
PHP:
public LoadMaterials()
{
new arrCoords[9][64];
new strFromFile2[256];
new File: file = fopen("materials.ini", io_read);
if (file)
{
fread(file, strFromFile2);
split(strFromFile2, arrCoords, '|');
Rudabox = strval(arrCoords[0]);
Materialsbox = strval(arrCoords[1]);
Bilaz1 = strval(arrCoords[2]);
Bilaz2 = strval(arrCoords[3]);
Bilaz3 = strval(arrCoords[4]);
Bilaz4 = strval(arrCoords[5]);
Bilaz5 = strval(arrCoords[6]);
Bilaz6 = strval(arrCoords[7]);
fclose(file);
}
return 1;
}
public SaveMaterials()
{
new coordsstring[256];
format(coordsstring, sizeof(coordsstring), "%d|%d|%d|%d|%d|%d|%d|%d", Rudabox, Materialsbox, Bilaz1, Bilaz2, Bilaz3, Bilaz4, Bilaz5, Bilaz6);
new File: file2 = fopen("materials.ini", io_write);
fwrite(file2, coordsstring);
fclose(file2);
return 1;
}
PHP:
if(strcmp(cmd, "/loadruda", true) == 0)// Узнать кол-ко руды на складе
{
if(PlayerInfo[playerid][pJob] != 17 )
{
SendClientMessage(playerid, COLOR_GREY, "Доступ имеют только водители Билазов!");
return 1;
}
if (!PlayerToPoint(8.0, playerid,804.801,842.090,10.732))
{
SendClientMessage(playerid, COLOR_GREY, "Нельзя здесь загружать руду!");
}
else
{
SendClientMessage(playerid, COLOR_RED, "Вы не около склада !"); return 1;
}
format(string, sizeof(string), "Количество руды на складе: %d из 50000!", Rudabox);
SendClientMessage(playerid, COLOR_GREY, string);
return 1;
}
if(strcmp(cmd, "/ruda", true) == 0)// Загрузить руду в грузовик
{
if(PlayerInfo[playerid][pJob] != 17)
{
SendClientMessage(playerid, COLOR_GREY, "Доступ имеют только водители Билазов!");
return 1;
}
new newcar = GetPlayerVehicleID(playerid);
if(newcar == BELAZ[0] || BELAZ[1] || BELAZ[2] || BELAZ[3] || BELAZ[4] || BELAZ[5])
{
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Вы не на белазе");
return 1;
}
if(newcar == BELAZ[0])
{
if(Bilaz1 == 100)
{
SendClientMessage(playerid, COLOR_GREY, "Машина уже загружена, едьте на склад!");
SetPlayerCheckpoint(playerid, 804.801,842.090,10.732, 8.0);
return 1;
}
}
if(newcar == BELAZ[1])
{
if(Bilaz2 == 100)
{
SendClientMessage(playerid, COLOR_GREY, "Машина уже загружена, едьте на склад!");
SetPlayerCheckpoint(playerid, 804.801,842.090,10.732, 8.0);
return 1;
}
}
if(newcar == BELAZ[2])
{
if(Bilaz3 == 100)
{
SendClientMessage(playerid, COLOR_GREY, "Машина уже загружена, едьте на склад!");
SetPlayerCheckpoint(playerid, 804.801,842.090,10.732, 8.0);
return 1;
}
}
if(newcar == BELAZ[3])
{
if(Bilaz4 == 100)
{
SendClientMessage(playerid, COLOR_GREY, "Машина уже загружена, едьте на склад!");
SetPlayerCheckpoint(playerid, 804.801,842.090,10.732, 8.0);
return 1;
}
}
if(newcar == BELAZ[4])
{
if(Bilaz5 == 100)
{
SendClientMessage(playerid, COLOR_GREY, "Машина уже загружена, едьте на склад!");
SetPlayerCheckpoint(playerid, 804.801,842.090,10.732, 8.0);
return 1;
}
}
if(newcar == BELAZ[5])
{
if(Bilaz6 == 100)
{
SendClientMessage(playerid, COLOR_GREY, "Машина уже загружена, едьте на склад!");
SetPlayerCheckpoint(playerid, 804.801,842.090,10.732, 8.0);
return 1;
}
}
SendClientMessage(playerid, COLOR_WHITE, "Следуйте к месту погрузки руды.");
if(rudaslots == 1)
{
SetPlayerCheckpoint(playerid, 599.036,932.729,-40.953, 8.0);
rudaslots += 1;
}
else if(rudaslots == 2)
{
SetPlayerCheckpoint(playerid, 556.766,923.956,-42.960, 8.0);
rudaslots += 1;
}
else if(rudaslots == 3)
{
SetPlayerCheckpoint(playerid, 576.121,871.943,-43.616, 8.0);
rudaslots += 1;
}
else if(rudaslots == 4)
{
SetPlayerCheckpoint(playerid, 551.299,878.674,-42.683, 8.0);
rudaslots += 1;
}
else if(rudaslots == 5)
{
SetPlayerCheckpoint(playerid, 540.563,844.478,-41.794, 8.0);
rudaslots += 1;
}
else if(rudaslots == 6)
{
SetPlayerCheckpoint(playerid, 585.906,844.187,-42.469, 8.0);
rudaslots = 1;
}
return 1;
}
if(strcmp(cmd, "/takeruda", true) == 0)
{
if(PlayerInfo[playerid][pJob] != 17)
{
SendClientMessage(playerid, COLOR_GREY, "Доступ имеют только водители Билазов!");
return 1;
}
new newcar = GetPlayerVehicleID(playerid);
if(newcar == BELAZ[0] || BELAZ[1] || BELAZ[2] || BELAZ[3] || BELAZ[4] || BELAZ[5])
{
}
else
{
SendClientMessage(playerid, COLOR_GREY, "Вы не в Билазе");
return 1;
}
if(IsPlayerInCheckpoint(playerid)) {}
else { SendClientMessage(playerid, COLOR_RED, "Вы не на месте погрузки руды!"); return 1; }
if (PlayerToPoint(8.0, playerid,599.036,932.729,-40.953) || PlayerToPoint(8.0, playerid,556.766,923.956,-42.960) || PlayerToPoint(8.0, playerid,576.121,871.943,-43.616) || PlayerToPoint(8.0, playerid,551.299,878.674,-42.683) || PlayerToPoint(8.0, playerid,540.563,844.478,-41.794) || PlayerToPoint(8.0, playerid,585.906,844.187,-42.469))
{}
else
{
SendClientMessage(playerid, COLOR_RED, "Вы не на месте погрузки руды!");
return 1;
}
SendClientMessage(playerid, COLOR_WHITE, "Началась погрузка руды. Подождите минуту!");
TogglePlayerControllable(playerid,0);
DisablePlayerCheckpoint(playerid);
SetTimerEx("ruda", 60000, 0, "d", playerid);
return 1;
if(strcmp(cmd, "/sellruda", true) == 0)// Сдать руду на склад
{
if(PlayerInfo[playerid][pJob] != 17)
{
SendClientMessage(playerid, COLOR_GREY, "Доступ имеют только водители Билазов!");
return 1;
}
new newcar = GetPlayerVehicleID(playerid);
if(newcar == BELAZ[0] || BELAZ[1] || BELAZ[2] || BELAZ[3] || BELAZ[4] || BELAZ[5])
{} else { SendClientMessage(playerid, COLOR_GREY, "Вы не в Билазе"); return 1; }
if(IsPlayerInCheckpoint(playerid)) {}
else { SendClientMessage(playerid, COLOR_RED, "Вы не возле склада!"); return 1; }
if (PlayerToPoint(8.0, playerid,804.801,842.090,10.732)) {}
else { SendClientMessage(playerid, COLOR_RED, "Вы не возле склада!"); return 1; }
if (Rudabox >= 50000)
{
SendClientMessage(playerid, COLOR_RED, "Извените, склад полон. Попробуйте позже!"); return 1;
}
if(newcar == BELAZ[0])
{ Bilaz1 = 0; }
if(newcar == BELAZ[1])
{ Bilaz2 = 0; }
if(newcar == BELAZ[2])
{ Bilaz3 = 0; }
if(newcar == BELAZ[3])
{ Bilaz4 = 0; }
if(newcar == BELAZ[4])
{ Bilaz5 = 0; }
if(newcar == BELAZ[5])
{ Bilaz6 = 0; }
SendClientMessage(playerid, COLOR_RED, "Доставлено, вы заработали $5000!");
Rudabox +=100;
new sellmoney = 5000;
GivePlayerMoney(playerid, sellmoney);
DisablePlayerCheckpoint(playerid);
SaveMaterials();
return 1;
}
//////////////////
if(strcmp(cmd,"/mats",true)==0)
{
if(IsPlayerConnected(playerid))
{
if(!IsAnRifa(playerid))//
{
SendClientMessage(playerid,COLOR_GREY,"Перевозкой материалов занимается Rifa");
return 1;
}
new x_nr[256];
x_nr = strtok(cmdtext, idx);
if(!strlen(x_nr))
{
SendClientMessage(playerid, COLOR_WHITE, "Используйте: /mats [название]");
SendClientMessage(playerid, COLOR_WHITE, "Используйте: купить, продать, загружено.");
return 1;
}
if(strcmp(x_nr,"купить",true) == 0) // покупка
{
if(IsPlayerConnected(playerid))
{
if(!PlayerToPoint(5.0, playerid, 321.816741,916.144958,22.131235))//Координаты покупки
{
SendClientMessage(playerid, COLOR_GREY, "Вы не на месте покупки материалов");//
return 1;
}
tmp = strtok(cmdtext, idx);
mammount = strval(tmp);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_WHITE, "+++:::Crazy_Universe:::+++ Используйте: /mats buy [количество]");//
return 1;
}
new manybag = palammm[playerid] + mammount;
if(manybag > 100)
{
SendClientMessage(playerid, COLOR_GREY, "Вы не можете взять больше");
return 1;
}
if(mammount < 1 || mammount > 100)// Диапазон покупки
{
SendClientMessage(playerid, COLOR_GREY, "Покупка материалов не должна превышать в 100 штук.");
return 1;
}
if(GetPlayerMoney(playerid) < mammount * 50)// Кол-во материалов умножаем на 50, это и будет оплата за маты + проверка на наличные
{
SendClientMessage(playerid, COLOR_GREY, "У вас не хватает наличных.");
return 1;
}
palammm[playerid] = mammount;
format(string, sizeof(string), "Вы купили %d заготовок за %d$ !", palammm[playerid], mammount * 50);
SendClientMessage(playerid, COLOR_GREY, string);
GivePlayerMoney(playerid, - mammount * 50);
Rudabox -= palammm[playerid];
SaveMaterials();
}
}
else if(strcmp(x_nr,"продать",true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(!PlayerToPoint(5.0, playerid, 89.951538,-311.614837,1.381098))
{
SendClientMessage(playerid, COLOR_GREY, "Вы не на оптовой базе.");
return 1;
}
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
{
SendClientMessage(playerid, COLOR_WHITE, "Используйте: /mats продать [количество]");
return 1;
}
if (Materialsbox >= 50000)
{
SendClientMessage(playerid, COLOR_GREY, "Приём материалов окончен, база полна!");
return 1;
}
else
{
new sellprice = (100)*(palammm[playerid]); // Цена на продажу
format(string, sizeof(string), "Вы продали %d заготовок за %d$!", palammm[playerid], sellprice);
SendClientMessage(playerid, COLOR_GREY, string);
GivePlayerMoney(playerid, (100)*(palammm[playerid]));
Materialsbox += palammm[playerid];
palammm[playerid] = 0;
SaveMaterials();
}
}
}
else if(strcmp(x_nr,"загружено",true) == 0)
{
if(IsPlayerConnected(playerid))
{
if(!PlayerToPoint(10.0, playerid, 89.951538,-311.614837,1.381098))
{
SendClientMessage(playerid, COLOR_GREY, "Вы не на складе");
return 1;
}
format(string, sizeof(string), "На складе %d/50000 материалов", Materialsbox);
SendClientMessage(playerid, COLOR_GREY, string);
}
}
}
===========
Потом создаём объекты в OnGameModeInit
PHP:
CreateObject(11081,327.55908203,906.82421875,29.18076706,0.00000000,352.00000000,303.99914551); //object(crackfacttanks_sfs) (1)
CreateObject(12941,822.45507812,848.72753906,9.78227806,355.99548340,0.00000000,113.99963379); //object(sw_lastdrop) (1)
CreateObject(3867,820.21386719,864.98046875,9.28411293,0.00000000,0.00000000,199.99511719); //object(ws_scaffolding_sfx) (1)
CreateObject(9361,50.22949219,-224.23339844,3.15150118,0.00000000,0.00000000,41.99523926); //object(boatoffice_sfn) (1)
CreateObject(3795,49.87942886,-227.43286133,1.11750674,0.00000000,0.00000000,356.00000000); //object(missile_04_sfxr) (1)
CreateObject(3794,47.81445312,-225.91308594,1.37590325,0.00000000,0.00000000,265.99548340, 250.0); //object(missile_07_sfxr) (1)
CreateObject(3396,49.85042191,-226.11399841,0.77650118,0.00000000,0.00000000,266.00000000); //object(a51_sdsk_4_) (1)
Находим пикап
Materials Package building
Заменяем его на
PHP:
AddStaticPickup(1239, 1, 49.759590,-224.803787,1.776501); //Materials Package building
Create3DTextLabel( "Продажа материалов\nВведите /materials ", 0x008080FF, 49.759590,-224.803787,2.776501, 40.0, 0 );
PHP:
AddStaticPickup(1239, 1, 835.904968,858.773803,12.753187); //Работа водителя билаза
Create3DTextLabel( "Работа водителя Билаза\nЧтобы устроится введите /go", 0x008080FF, 835.904968,858.773803,13.5, 40.0, 0 );
encarier = CreatePickup(1318,1,835.898498,854.819152,12.614954); // Вход в карьер
excarier = CreatePickup(1318,1,814.163818,839.041259,10.970828); // Выход из карьера
PHP:
BELAZ[0] = AddStaticVehicleEx(406,677.848,838.661,-42.209,61.986,-1,-1,600000); //Dumper 453
BELAZ[1] = AddStaticVehicleEx(406,689.033,853.925,-42.209,59.986,-1,-1,600000); //Dumper 454
BELAZ[2] = AddStaticVehicleEx(406,668.415,821.055,-42.202,59.985,-1,-1,600000); //Dumper 455
BELAZ[3] = AddStaticVehicleEx(406,677.759,926.492,-40.087,59.985,-1,-1,600000); //Dumper 456
BELAZ[4] = AddStaticVehicleEx(406,543.247,834.544,-39.816,319.985,-1,-1,600000); //Dumper 457
BELAZ[5] = AddStaticVehicleEx(406,598.033,873.089,-42.209,359.982,-1,-1,600000); //Dumper 458
PHP:
else if (GetPlayerState(playerid) == 1 && PlayerToPoint(3.0, playerid,835.904968,858.773803,12.753187))
{
if(PlayerInfo[playerid][pMember] > 0 || PlayerInfo[playerid][pFMember] < 255) { SendClientMessage(playerid, COLOR_GREY, " Families cannot take on this Job !"); return 1; }
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Вы собираетесь стать Водителем Билаза, и получить 5-часовой Контракт.");
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Если у вас есть другая работа то сначало пропишите /quitjob.");
SendClientMessage(playerid, COLOR_LIGHTBLUE, "* Если вы уверены что хотите стать Водителем грузовика, напечатайте /accept job.");
GettingJob[playerid] = 17; // id профессии (поменяйте на свой)
}
PHP:
else if(pickupid == encarier)
{
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid, 811.919921,837.891418,9.830896);
}
else if(pickupid == excarier)
{
SetPlayerInterior(playerid, 0);
SetPlayerPos(playerid, 839.547973,857.159484,12.895117);
}
Таким образом мы имеем сохранение 2-х складов + сохранение в каждом дампере.
Ещё создайте в scriptfiles файл materials.ini
Автор идее FiLE95, автор Реализации FiLE95
