Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Работа:Развозчик руды - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ GF ]
Работа:Развозчик руды
Оценка: -----

#1
Пользователь офлайн   fakeN 

  • © fakeN
  • Вставить ник
  • Раскрыть информацию
Первое что делаем - заносим forwards
forward LoadMaterials();
forward SaveMaterials();
forward ruda(playerid);
forward IsAnRifa(playerid);

Следующий шаг - заносим переменные
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];//для машин 

Находим public IsAnInstructor(playerid)
Перед ним вставляем


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;
} 


Находим public LoadStuff() и перед ним вставляем

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;
} 


В OnPlayerCommandText

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);
                }
               }
          }


Удаляем/исправляем /materials на /mats
===========
Потом создаём объекты в OnGameModeInit


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) 


И где все Load'ы вставляем LoadMaterials();

Находим пикап
Materials Package building
Заменяем его на


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 ); 


Ниже дописываем

  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); // Выход из карьера 


Добавляем машины(я сразу присвоил машинам переменные, что бы было легче)

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 


ищем команду /go или /join, ну какая что бы устроится на работу и добавляем

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 профессии (поменяйте на свой)
         } 


Потом в public OnPlayerPickUpPickup

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

1

#2
Пользователь офлайн   KarandaIII 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Отличный урок, но переменные машинам можно было сделать так:
new BELAZ[2];
BELAZ[0]=........
.........
........
........
......
BELAZ[1]=........ (троеточие-это addvehicle)
Я вас конечно не учу написанию кода. Но лично я так делаю...
0

#3
Пользователь офлайн   Mike 

  • Администратор
  • Вставить ник
  • Раскрыть информацию
неплохо, автор кто?
0

#4
Пользователь офлайн   Zhenek_Minsky 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию

Цитата

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;
}

Я не пойму причем тут Рифа?
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей