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

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

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

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

Система Трейлеров

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

Jeff_Hardy

Компетентный
Здравствуйте сегодня я вас научу Стаить в мод Систему Трейлеров!
И так начьнём,


вверх мода
PHP:
forward LoadTrailer();
forward SaveTrailer();
enum TrailerInfo
{
     tOwned,
     tOwner[64],
     Float:tPosX,
     Float:tPosY,
     Float:tPosZ,
     Float:tPosA,
     tCol,
     tLvl,
     tExit,
     tCost,
     tLock,
};
new Trailer[27][TrailerInfo];
new buytrailer[sizeof(Trailer)];
new Text3D:TrailerLabel[sizeof(Trailer)];
new trailercheck[MAX_PLAYERS];//
forward IsATrailer(carid);
в enum pInfo
PHP:
pTrailer,
в public OnPlayerConnect
PHP:
PlayerInfo[playerid][pTrailer] = 255;
в public SetPlayerSpawn
PHP:
         new newveh=GetPlayerVehicleID(playerid); 
        new trailer = PlayerInfo[playerid][pTrailer]; 
        for(new i;i<sizeof(Trailer);++i) 
        { 
            if(newstate==2&&newveh==buytrailer[i]) 
            { 
                if(Trailer[i][tOwned]==0) 
                { 
                    TogglePlayerControllable(playerid,0); 
                    format(string, sizeof(string), "{FFFFFF}Вы действительно собираетесь приобрести данный {FFA500}трейлер{FFFFFF} за ${FFA500}%d?",Trailer[i][tCost]); 
                    ShowPlayerDialog(playerid,817,DIALOG_STYLE_MSGBOX,"{FFA500}Покупка трейлера",string," [Да] "," [Нет] "); 
                } 
                if(Trailer[i][tOwned]==1) 
                 { 
                    if(trailer != i ) 
                     { 
                        RemovePlayerFromVehicle(playerid),SendClientMessage(playerid,COLOR_GREY,"{FFA500}*{FFFFFF} У вас нет ключей от этого трейлера"); 
                    } 
                } 
            }
ищем
PHP:
public OnPlayerStateChange(playerid, newstate, oldstate)
там будет вот такая функция
PHP:
PLAYER_STATE_DRIVER
ниже добавим
PHP:
 new newveh=GetPlayerVehicleID(playerid);
        new trailer = PlayerInfo[playerid][pTrailer];
        for(new i;i<sizeof(Trailer);++i)
        {
            if(newstate==2&&newveh==buytrailer[i])
            {
                if(Trailer[i][tOwned]==0)
                {
                    TogglePlayerControllable(playerid,0);
                    format(string, sizeof(string), "{FFFFFF}Вы действительно собираетесь приобрести данный {FFA500}трейлер{FFFFFF} за ${FFA500}%d?",Trailer[i][tCost]);
                    ShowPlayerDialog(playerid,817,DIALOG_STYLE_MSGBOX,"{FFA500}Покупка трейлера",string," [Да] "," [Нет] ");
                }
                if(Trailer[i][tOwned]==1)
                 {
                    if(trailer != i )
                     {
                        RemovePlayerFromVehicle(playerid),SendClientMessage(playerid,COLOR_GREY,"{FFA500}*{FFFFFF} У вас нет ключей от этого трейлера");
                    }
                }
            }

в public OnGameModeInit
PHP:
LoadTrailer();
    for(new h = 0; h < sizeof(Trailer); h++)
    {
        buytrailer[h] = CreateVehicle(508, Trailer[h][tPosX], Trailer[h][tPosY], Trailer[h][tPosZ], Trailer[h][tPosA], Trailer[h][tCol], 1, -1);
    }
for(new h = 0; h < sizeof(Trailer); h++)
     {
         if(Trailer[h][tOwned] == 1)
        {
              new temp[MAX_STRING];
             format(temp, sizeof(temp), "{FFA500}Владелей трейлера: {ffffff}%s ", Trailer[h][tOwner]);
             TrailerLabel[h] = Create3DTextLabel(temp,0xFF0000FF,Trailer[h][tPosX], Trailer[h][tPosY], Trailer[h][tPosZ]+1.5,40.0,0,1);
             Attach3DTextLabelToVehicle(TrailerLabel[h] , buytrailer[h] , 0.0, 0.0, 1.5);
         }
         if(Trailer[h][tOwned] == 0)
        {
              new temp[MAX_STRING];
             format(temp, sizeof(temp), "{FFA500}Трейлер: {ffffff}продается{FFA500} \n{FFA500}Цена: %d", Trailer[h][tCost]);
             TrailerLabel[h] = Create3DTextLabel(temp,0xFF0000FF,Trailer[h][tPosX], Trailer[h][tPosY], Trailer[h][tPosZ]+1.5,40.0,0,1);
             Attach3DTextLabelToVehicle(TrailerLabel[h] , buytrailer[h] , 0.0, 0.0, 1.5);
        }
    }
в public OnPlayerRegister
PHP:
format(var, 32, "Trailer=%d\n",PlayerInfo[playerid][pTrailer]);fwrite(hFile, var);
в public OnPlayerUpDate
PHP:
format(var, 32, "Trailer=%d\n",PlayerInfo[playerid][pTrailer]);fwrite(hFile, var);
теперь в OnPlayerLogin добавим
PHP:
if( strcmp( key , "Trailer" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pTrailer] = strval( val ); }
в public OnPlayerCommandText
PHP:
if(strcmp(cmd,"/t",true)==0)
      {
        new temp[256];
          new house = PlayerInfo[playerid][pTrailer];
          temp = strtok(cmdtext, idx);
          if(!strlen(temp))
          {
              SendClientMessage(playerid,COLOR_WHITE," Используйте: /t (sell buy park lock color gps) ");
              return 1;
          }
          if(strcmp(temp,"sell",true)==0)
          {
              if(strcmp(playername, Trailer[house][tOwner], true) == 0)
              {
                  PlayerInfo[playerid][pTrailer] = 255;
                  Trailer[house][tOwned] = 0;
                  Trailer[house][tLock] = 0;
                  GetPlayerName(playerid, sendername, sizeof(sendername));
                  strmid(Trailer[house][tOwner], "The State", 0, strlen("The State"), 255);
                  GivePlayerMoney(playerid,Trailer[house][tCost]);
                  SendClientMessage(playerid,COLOR_WHITE,"Поздравляю, Вы продали трейлер ");
                  RemovePlayerFromVehicle(playerid);
                  SaveTrailer();
                  OnPlayerUpdate(playerid);
                  TrailerUpdate();
                  return 1;
            }
              else
              {
                SendClientMessage(playerid, COLOR_WHITE, " Вы не владеете трейлером. ");
                return 1;
              }
          }
          if(strcmp(temp,"buy",true)==0)
          {
              for(new b;b<sizeof(Trailer);b++)
              {
                if(IsPlayerInVehicle(playerid,buytrailer[b]))
                  {
                      if(Trailer[b][tOwned]!=0) return SendClientMessage(playerid,COLOR_WHITE," Этот трейлер уже куплен! ");
  if(PlayerInfo[playerid][pTrailer]!= 255 || PlayerInfo[playerid][pPhousekey] != 255)
  {
   SendClientMessage(playerid,COLOR_WHITE," У вас уже есть дом/трейлер ");
   RemovePlayerFromVehicle(playerid);
   TogglePlayerControllable(playerid, 1);
   return 1;
   }
   if(Trailer[b][tLvl] > PlayerInfo[playerid][pLevel])
  {
   SendClientMessage(playerid, COLOR_WHITE, "У вас нехватает уровня.");
   RemovePlayerFromVehicle(playerid);
   TogglePlayerControllable(playerid, 1);
   return 1;
   }
  if(GetPlayerMoney(playerid) > Trailer[b][tCost])
  {
  PlayerInfo[playerid][pTrailer] = b;
  Trailer[b][tOwned] = 1;
  Trailer[b][tLock] = 1;
  GetPlayerName(playerid, sendername, sizeof(sendername));
  strmid(Trailer[b][tOwner], sendername, 0, strlen(sendername), 255);
  SendClientMessage(playerid, COLOR_WHITE, "Поздравляем с покупкой трейлера.");
  GivePlayerMoney(playerid,-Trailer[b][tCost]);
//  PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
  TogglePlayerControllable(playerid, 1);
  SaveTrailer();
  OnPlayerUpdate(playerid);
  TrailerUpdate();
  return 1;
  }
  else
  {
//   strmid(Trailer[b][tOwner], sendername, 0, strlen(sendername), 255);
   SendClientMessage(playerid, COLOR_WHITE, "У вас не хватает денег .");
   RemovePlayerFromVehicle(playerid);
   TogglePlayerControllable(playerid, 1);
  }
  }
  }
  }
  if(strcmp(temp,"gps",true)==0)
  {
  if(house==255)return SendClientMessage(playerid,COLOR_WHITE,"У Вас нету техники ");
  new Float:vx,Float:vy,Float:vz;
  GetVehiclePos(buytrailer[house],vx,vy,vz);
  SetPlayerCheckpoint(playerid,vx,vy,vz,5.0);
  trailercheck[playerid]=1;
  SendClientMessage(playerid,COLOR_WHITE,"Ваш трейлер отмечен маркером на карте");
  return 1;
  }
  if(strcmp(temp,"lock",true)==0)
  {
  for(new u;u<sizeof(Trailer);u++)
  {
  if(house==255)return SendClientMessage(playerid,COLOR_WHITE," У Вас нету машины! ");
  if(Trailer[u][tLock] == 0)
  {
  if(house==u)
  {
  Trailer[u][tLock]=1;
  SendClientMessage(playerid,COLOR_WHITE,"Трейлер закрыт ");
  SaveTrailer();
  LockCar(buytrailer[u]);
  return 1;
  }
  }
  else if(Trailer[u][tLock] == 1)
  {
  if(house==u)
  {
  Trailer[u][tLock]=0;
  UnLockCar(buytrailer[u]);
  SendClientMessage(playerid,COLOR_WHITE,"Трейлер открыт ");
  
  SaveTrailer();
  return 1;
  }
  }
  }
  }
  if(strcmp(temp,"park",true)==0)
  {
  if(house==255)return SendClientMessage(playerid,COLOR_WHITE,"У вас нету трейлера");
  for(new u;u<sizeof(Trailer);u++)
  {
  if(IsPlayerInVehicle(playerid,buytrailer[u]))
  {
  new Float:vx,Float:vy,Float:vz,Float:vfa;
//  CarInfo[house][vehmodel]=GetVehicleModel(buytrailer[u]);
  GetVehiclePos(buytrailer[u],vx,vy,vz);
  GetVehicleZAngle(buytrailer[u],vfa);
  Trailer[u][tPosX]=vx;
  Trailer[u][tPosY]=vy;
  Trailer[u][tPosZ]=vz;
  Trailer[u][tPosA]=vfa;
  SendClientMessage(playerid,COLOR_WHITE,"Вы припарковали свою технику ");
  DestroyVehicle(buytrailer[u]);
  buytrailer[u] = CreateVehicle(508, Trailer[u][tPosX], Trailer[u][tPosY], Trailer[u][tPosZ], Trailer[u][tPosA], Trailer[u][tCol], 1, -1);
//  Attach3DTextLabelToVehicle(CarLabel[u] , buyveh[u] , 0.0, 0.0, 1.0);
  SaveTrailer();
  return 1;
  }
  }
  }
  if(strcmp(temp,"color",true)==0)
  {
//  new house = PlayerInfo[playerid][pVeh];
            GetPlayerName(playerid, playername, sizeof(playername));
            if (house != 255 && strcmp(playername, Trailer[PlayerInfo[playerid][pTrailer]][tOwner], true) == 0)
            {
                tmp = strtok(cmdtext, idx);
                if(!strlen(tmp))
                {
                    SendClientMessage(playerid, COLOR_GRAD3," ИСПОЛЬЗУЙТЕ: /t color [color number]");
                }
                new color = strval(tmp);
                if(color > 800)
                {
                    SendClientMessage(playerid, COLOR_GRAD3," Максимум  126");
                    return 1;
                }
                if (GetPlayerMoney(playerid) < SBizzInfo[5][sbEntranceCost])
                {
                    SendClientMessage(playerid, COLOR_GRAD3," Вы не можете позволить себе это");
                }
                    Trailer[house][tCol] = color;
                    format(string, sizeof(string), " Цвет установлен %d -$%d",color,SBizzInfo[5][sbEntranceCost]);
                    SendClientMessage(playerid, COLOR_GRAD3,string);
                      DestroyVehicle(buytrailer[house]);
                    buytrailer[house] = CreateVehicle(508, Trailer[house][tPosX], Trailer[house][tPosY], Trailer[house][tPosZ], Trailer[house][tPosA], Trailer[house][tCol], 1, -1);
                    SendClientMessage(playerid, COLOR_GRAD6, " Покрасочные работы заказаны");
                    GivePlayerMoney(playerid,-SBizzInfo[5][sbEntranceCost]);
                    SBizzInfo[5][sbTill] += SBizzInfo[5][sbEntranceCost];
                    SBizzInfo[5][sbProducts] -= 1;
                    ExtortionSBiz(5, 5000);
                    new Float:X,Float:Y,Float:Z;GetPlayerPos(playerid, X,Y,Z);//координаты и угол поворота игрока
                    PlayerPlaySound(giveplayerid, 1134, 0.0, 0.0, 0.0);
                    OnPropUpdate();
                    SaveTrailer();
            }
            else
            {
                SendClientMessage(playerid, COLOR_GRAD2, "Вы не владеете трейлером");
                return 1;
            }
          }
    return 1;
    }
теперь добавим
PHP:
stock IsVehicleAttachedToTrailer(vehicleid)
{   //получить ID тачки прицепленной к чему либо
    for(new car = 1; car<(MAX_VEHICLES-1); car++)
    {
        if(IsTrailerAttachedToVehicle(car))
        {   //работает правильно толко тогда когда в тягаче сидит человек
             if( vehicleid == GetVehicleTrailer(car) )
               {
                //ИНФОРМИРОВАНИЕ
                //new string[MAX_STRING];
                //format(string, sizeof(string), "IsVehicleAttachedToTrailer(%d) - %d", vehicleid, car);
                //ABroadCast(COLOR_MAROON, string, 9);
                   return car;//если данная тачка к чему то прицеплена то вернуть верно
            }
        }
    }
    return 0;
}

в низ мода
PHP:
public LoadTrailer()
{
     new arrCoords[11][64];
     new strFromFile2[256];
     new File: file = fopen("trailer.cfg", io_read);
     if (file)
     {
         new idx;
         while (idx < sizeof(Trailer))
         {
             fread(file, strFromFile2);
             split(strFromFile2, arrCoords, '|');
             Trailer[idx][tOwned] = strval(arrCoords[0]);
             strmid(Trailer[idx][tOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255);
             Trailer[idx][tPosX] = floatstr(arrCoords[2]);
             Trailer[idx][tPosY] = floatstr(arrCoords[3]);
             Trailer[idx][tPosZ] = floatstr(arrCoords[4]);
             Trailer[idx][tPosA] = floatstr(arrCoords[5]);
                Trailer[idx][tCol] = strval(arrCoords[6]);
             Trailer[idx][tLvl] = strval(arrCoords[7]);
             Trailer[idx][tExit] = strval(arrCoords[8]);
             Trailer[idx][tCost] = strval(arrCoords[9]);
             Trailer[idx][tLock] = strval(arrCoords[10]);
             idx++;
           }
         fclose(file);
    }
    return 1;
}
public SaveTrailer()
{
    new idx;
    new File: file2;
    while (idx < sizeof(Trailer))
    {
         new coordsstring[256];
         format(coordsstring, sizeof(coordsstring), "%d|%s|%f|%f|%f|%f|%d|%d|%d|%d|%d\n",
         Trailer[idx][tOwned],
         Trailer[idx][tOwner],
         Trailer[idx][tPosX],
         Trailer[idx][tPosY],
         Trailer[idx][tPosZ],
         Trailer[idx][tPosA],
         Trailer[idx][tCol],
         Trailer[idx][tLvl],
         Trailer[idx][tExit],
         Trailer[idx][tCost],
         Trailer[idx][tLock]);
        if(idx == 0)
        {
            file2 = fopen("trailer.cfg", io_write);
        }
        else
        {
            file2 = fopen("trailer.cfg", io_append);
        }
        fwrite(file2, coordsstring);
        idx++;
        fclose(file2);
    }
    return 1;
}
stock TrailerUpdate()
{
    for(new h = 0; h < sizeof(Trailer); h++)
    {
         if(Trailer[h][tOwned] == 1)
        {
            Delete3DTextLabel(TrailerLabel[h]);
              new temp[MAX_STRING];
             format(temp, sizeof(temp), "{FFA500}Трейлер:{FFFFFF} %s ", Trailer[h][tOwner]);
             TrailerLabel[h] = Create3DTextLabel(temp,0xFF0000FF,Trailer[h][tPosX], Trailer[h][tPosY], Trailer[h][tPosZ]+1.5,40.0,0,1);
             Attach3DTextLabelToVehicle(TrailerLabel[h] , buytrailer[h] , 0.0, 0.0, 3.0);
         }
         if(Trailer[h][tOwned] == 0)
        {
            Delete3DTextLabel(TrailerLabel[h]);
              new temp[MAX_STRING];
             format(temp, sizeof(temp), "{FFA500}Трейлер: {FFFFFF}%s{FFA500} \nЦена: %d", Trailer[h][tOwner], Trailer[h][tCost]);
             TrailerLabel[h] = Create3DTextLabel(temp,0xFF0000FF,Trailer[h][tPosX], Trailer[h][tPosY], Trailer[h][tPosZ]+1.5,40.0,0,1);
             Attach3DTextLabelToVehicle(TrailerLabel[h] , buytrailer[h] , 0.0, 0.0, 3.0);
        }
    }
}
ко всем forward
PHP:
forward IsATrailer(carid);
добавить public
PHP:
public IsATrailer(carid)
{
    if(carid >= truck[0] && carid <= truck[2])
    {
        return 1;
    }
    return 0;
}
в начало мода
PHP:
new truck[3];
Трейлеры находятса возле Отеля Джефферсон
Вот файлик с Трейлепами Это нужно положить в папку Skriptfiles


Автор:
Jeff_Hardy & Mr_Dave​
Кому не жалко ставьте ​
+
Ну вот и всё!! Спасибо за внимание с вами был Jeff_Hardy ..​
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу