Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Новый Авторынок - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

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

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

[ Scr ][ GF ]
Новый Авторынок
Оценка: -----

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

  • © Pawn-Wiki.Ru
  • Вставить ник
  • Раскрыть информацию
Итак, я услышал, что кому-то нужна не багнутая система машин . Вот решил написать. Вот впрочем краткое описание, писал около 2-х дней:
1) Система номеров - как покупаешь машину дается номер.
2) Пробег авто - при продаже учитывается пробег авто, и тем самым снижается цена
3) Авто можно продать государству или игроку (/sellmycar)
4) Состояние авто - при продаже тоже учитывается + чем меньше состояние, тем
больше требуется бензина
5) Посторонний человек в авто не сядет, только владелец
6) Если машина взорвалась, она остается там где взорвал
7) Система тюннинга - тюннинг сохраняется, при продаже машины, тюннинг исчезает
8) Команды: /sellmycar или /sellmycar id сумма(продать авто),
/carpass или /carpass id(документы на транспорт), /park(вернуть авто на место парковки),
/fixcar(возвратить авто к бизнессу FixCar), /editmodelcar(изменить модель авто),
/editlevelcar(изменить лвл машины), /editpricecar(изменить цену авто),
/asellcar(продать авто админам)


Итак сначало создадим переменную в аккаунте игрока. Для этого в конец pInfo ставим:
pNomerCar,

В public OnPlayerConnect:
ClearCarInfo(playerid);

Теперь сделаем чтобы когда другой пользователь регистрировался, номер у него был "None". Для этого делаем stock:
stock ClearCarInfo(playerid)
{
    if(IsPlayerConnected(playerid))
    {
        new string[MAX_PLAYER_NAME];
        format(string, sizeof(string), "None");
        strmid(PlayerInfo[playerid][pNomerCar], string, 0, strlen(string), 255);
    }
    return 1;
}  

Теперь сохранение и загрузка номера игрока. Для этого в public OnPlayerRegister:
format(var, 32, "NomerCar=%s\n",PlayerInfo[playerid][pNomerCar]);fwrite(hFile,
 var);  

В public OnPlayerRename:
format(var, 32, "NomerCar=%s\n",PlayerInfo[playerid][pNomerCar]);fwrite(hFile,
 var);  

Потом в public SavePlayer:
format(var, 32, "NomerCar=%s\n",PlayerInfo[playerid][pNomerCar]);fwrite(hFile,
 var);  

Ну и в public OnPlayerLogin добавляем это:
if( strcmp( key , "NomerCar" , true ) == 0 ) { val = ini_GetValue( Data ); strmid(PlayerInfo[playerid][pNomerCar], val, 0, strlen(val)-1, 255); }

Так, теперь сам авторынок. Вообщем перед или после pInfo, вообщем все равно, добавляем это:
#define MAX_BUYABLE_CARS 1 // максимально машин на сервере
#define SELLCARDIALOG 9541
#define CHECKPOINT_CAR 11
new prodmoney[MAX_PLAYERS];
new prodcarid[MAX_PLAYERS];
new prodcar[MAX_PLAYERS];
new prodcarinfo[MAX_PLAYERS];
new prodcarmoney[MAX_PLAYERS];
#define MAX_COMPONENTS 16 // максимально компонентов тюннинга
enum vInfo
{
    vOwned,
    vOwner[MAX_PLAYER_NAME],
    vModel,
    Float:vPos[4],
    vColor[2],
    vPrice,
    vLevel,
    vNomer[40],
    Float:vProbeg,
    vPercent,
    vDate,
    Components[MAX_COMPONENTS],
};
new CarsInfo[MAX_BUYABLE_CARS][vInfo];
new BuyableCar[MAX_BUYABLE_CARS];
forward CreateVehicles();
forward SaveVehicleData(vehicleid,playerid);

stock IsOwnableCar(carid)
{
if(carid <= MAX_BUYABLE_CARS) {return 1;}
else {return 0;}
}  

Теперь сделаем создание авто, загрузку, сохранение, ну и сохранение позиции авто. Делаем Stock'и:
stock LoadBuyableCars()
{
    new arrCoords[31][64];
    new strFromFile2[256];
    new File: file = fopen("cars.cfg", io_read);
    new idx;
    if (file)
    {
        while (idx < sizeof(CarsInfo))
        {
            fread(file, strFromFile2);
            split(strFromFile2, arrCoords, ',');
            CarsInfo[idx][vOwned] = strval(arrCoords[0]);
            strmid(CarsInfo[idx][vOwner], arrCoords[1], 0, strlen(arrCoords[1]), 255);
            CarsInfo[idx][vModel] = strval(arrCoords[2]);
            CarsInfo[idx][vPos][0] = floatstr(arrCoords[3]);
            CarsInfo[idx][vPos][1] = floatstr(arrCoords[4]);
            CarsInfo[idx][vPos][2] = floatstr(arrCoords[5]);
            CarsInfo[idx][vPos][3] = floatstr(arrCoords[6]);
            CarsInfo[idx][vColor][0] = strval(arrCoords[7]);
            CarsInfo[idx][vColor][1] = strval(arrCoords[8]);
            CarsInfo[idx][vPrice] = strval(arrCoords[9]);
            CarsInfo[idx][vLevel] = strval(arrCoords[10]);
            strmid(CarsInfo[idx][vNomer], arrCoords[11], 0, strlen(arrCoords[11]), 255);
            CarsInfo[idx][vProbeg] = floatstr(arrCoords[12]);
            CarsInfo[idx][vPercent] = strval(arrCoords[13]);
            CarsInfo[idx][vDate] = strval(arrCoords[14]);
            CarsInfo[idx][Components][0] = strval(arrCoords[15]);
            for(new i = 1; i < 14; i++)
            {
            CarsInfo[idx][Components][i] = strval(arrCoords[16+i]);
            }

            idx++;
        }
        fclose(file);
    }
    print("Система машин успешно загружена!");
    printf("Загружено машин: %d",idx);
    return 1;
}

stock CreateVehicles()
{
    for(new c = 0; c < sizeof(CarsInfo); c++)
    {
        new stringi[24];
        BuyableCar[c] = CreateVehicle(CarsInfo[c][vModel], CarsInfo[c][vPos][0], CarsInfo[c][vPos][1], CarsInfo[c][vPos][2], CarsInfo[c][vPos][3], CarsInfo[c][vColor][0], CarsInfo[c][vColor][1], -1);
        if(CarsInfo[c][vOwned] == 0)
        {
        format(stringi,sizeof(stringi),"       ");
        }
        else
        {
        format(stringi,sizeof(stringi),"%s",CarsInfo[c][vNomer]
);
        }
        ChangeVehiclePaintjob(BuyableCar[c], CarsInfo[c][Components][0]);
        ChangeVehicleColor(BuyableCar[c], CarsInfo[c][vColor][0],CarsInfo[c][vColor]
[1]);
         for(new i = 1; i < 14; i++)
        {
        AddVehicleComponent(BuyableCar[c], CarsInfo[c][Components][i]);
        }
        SetVehicleNumberPlate(BuyableCar[c],stringi);
    }
    return 1;
}

stock SaveVehicleData(vehicleid,playerid)
{
new Float:x,Float:y,Float:z,Float:a;
if(!IsPlayerInAnyVehicle(playerid)) return 1;
if(!IsOwnableCar(vehicleid)) return 1;
GetVehiclePos(vehicleid,x,y,z);
GetVehicleZAngle(vehicleid,a);
CarsInfo[vehicleid-1][vPos][0] = x;
CarsInfo[vehicleid-1][vPos][1] = y;
CarsInfo[vehicleid-1][vPos][2] = z;
CarsInfo[vehicleid-1][vPos][3] = a;
CarsInfo[vehicleid-1][Components][0] = getVehiclePaintJob(vehicleid);
for(new i = 1; i <= 14; i++)
{
CarsInfo[vehicleid-1][Components][i] = GetVehicleComponentInSlot(vehicleid, i - 1);
}
new color[2];
getVehicleColor(vehicleid, color[0], color[1]);
CarsInfo[vehicleid-1][vColor][0] = color[0];
CarsInfo[vehicleid-1][vColor][1] = color[1];
OnPropUpdate();
return 1;
}

forward Float:GetVehicleSpeed(vehid);
public Float:GetVehicleSpeed(vehid)
{
    new
    Float:X,
    Float:Y,
    Float:Z,
    Float:PlayerToPoints;
    GetVehicleVelocity(vehid, X, Y, Z);
    PlayerToPoints = floatsqroot(floatpower(X, 2) + floatpower(Y, 2) + floatpower(Z, 2))*100;
    return PlayerToPoints;
}

forward Probeg();
public Probeg()
{
    for(new i=0;i<MAX_PLAYERS;i++)
    {
        if(IsPlayerConnected(i))
        {
            if(IsPlayerInAnyVehicle(i))
            {
                if(IsOwnableCar(GetPlayerVehicleID(i)))
                {
                    new Float:sp = GetPlayerSpeed(i);
                    new string[256];
                    new Float:ms;
                    ms = (sp/1.4)/1000;
                    CarsInfo[GetPlayerVehicleID(i)-1][vProbeg] += ms;
                    format(string,256,"%f km",CarsInfo[GetPlayerVehicleID(i)-1][vProbeg]);
                    TextDrawSetString(probeg[i],string);
                }
            }
        }
    }
    return 1;
}  

В public OnPropUpdate суем:
idx = 0;
    while (idx < sizeof(CarsInfo))
    {
        new coordsstring[256];
        format(coordsstring, sizeof(coordsstring), "%d,%s,%d,%f,%f,%f,%f,%d,%d,%d,%d,%s,%f,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,
%d,%d,%d,%d,%d\n",
        CarsInfo[idx][vOwned],
        CarsInfo[idx][vOwner],
        CarsInfo[idx][vModel],
        CarsInfo[idx][vPos][0],
        CarsInfo[idx][vPos][1],
        CarsInfo[idx][vPos][2],
        CarsInfo[idx][vPos][3],
        CarsInfo[idx][vColor][0],
        CarsInfo[idx][vColor][1],
        CarsInfo[idx][vPrice],
        CarsInfo[idx][vLevel],
        CarsInfo[idx][vNomer],
        CarsInfo[idx][vProbeg],
        CarsInfo[idx][vPercent],
        CarsInfo[idx][vDate],
        CarsInfo[idx][Components][0],
        CarsInfo[idx][Components][1],
        CarsInfo[idx][Components][2],
        CarsInfo[idx][Components][3],
        CarsInfo[idx][Components][4],
        CarsInfo[idx][Components][5],
        CarsInfo[idx][Components][6],
        CarsInfo[idx][Components][7],
        CarsInfo[idx][Components][8],
        CarsInfo[idx][Components][9],
        CarsInfo[idx][Components][10],
        CarsInfo[idx][Components][11],
        CarsInfo[idx][Components][12],
        CarsInfo[idx][Components][13],
        CarsInfo[idx][Components][14]);
        if(idx == 0)
        {
            file2 = fopen("cars.cfg", io_write);
        }
        else
        {
            file2 = fopen("cars.cfg", io_append);
        }
        fwrite(file2, coordsstring);
        idx++;
        fclose(file2);
    }  

Потом суем в OnPlayerDisconnect:
SaveVehicleData(GetPlayerVehicleID(playerid),playerid);  

И в OnPlayerExitVehicle:
SaveVehicleData(vehicleid,playerid);  

Теперь в OnGameModeInit:
LoadBuyableCars();
CreateVehicles();
SetTimer("Probeg",500,1);  

Теперь займемся пробегом, добавим ко всем new:
new Text:probeg[MAX_PLAYERS];  

В public OnPlayerConnect(playerid):
probeg[playerid] = TextDrawCreate(610.0000, 135.0000, "loading");
    TextDrawAlignment(probeg[playerid], 3);
    TextDrawFont(probeg[playerid], 1);
    TextDrawLetterSize(probeg[playerid], 0.4, 2.0);
    TextDrawColor(probeg[playerid], 0xFFFFFFFF);
    TextDrawBackgroundColor(probeg[playerid],0x8B00FDAA);
    TextDrawSetShadow(probeg[playerid], 1);
    TextDrawAlignment(probeg[playerid], 3);

В OnPlayerDisconnect:
TextDrawHideForPlayer(playerid,probeg[playerid]);
TextDrawDestroy(probeg[playerid]);

В public OnPlayerStateChange(playerid, newstate, oldstate) после if(newstate == PLAYER_STATE_ONFOOT) вставляем:
TextDrawHideForPlayer(playerid,probeg[playerid]);  

В тот же паблик но уже после if(newstate == PLAYER_STATE_DRIVER) вставляем:
if(IsOwnableCar(newcar))
        {
            format(string,256,"%f km",CarsInfo[newcar-1][vProbeg]);
            TextDrawSetString(probeg[playerid],string);
            TextDrawShowForPlayer(playerid,probeg[playerid]);
        }  

Найдите switch (gPlayerCheckpointStatus[playerid]) и после вставьте:
case CHECKPOINT_CAR:
            {
                PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0);
                DisablePlayerCheckpoint(playerid);
                gPlayerCheckpointStatus[playerid] = CHECKPOINT_NONE;
            }  

Следующее, мы впишем что осталось. Диалог на покупку авто:
else if(dialogid == 558)
    {
        new vid = GetPlayerVehicleID(playerid);
        new buycar = vid-1;
        if(response)
        {
            if(strcmp(PlayerInfo[playerid][pNomerCar],"None", true ) == 0 )
            {
                if(CarsInfo[buycar][vOwned] == 0)
                {
                    if(GetPlayerMoney(playerid) >= CarsInfo[buycar][vPrice])
                    {
                      if(PlayerInfo[playerid][pLevel] >= CarsInfo[buycar][vLevel])
                      {
                        if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
                        {
                            CarsInfo[buycar][vOwned] = 1;
                            strmid(PlayerInfo[playerid][pNomerCar],CarsInfo[buycar][
vNomer],0,40,255);
                            new sendername[MAX_PLAYER_NAME];
                            GetPlayerName(playerid, sendername, sizeof(sendername));
                            strmid(CarsInfo[buycar][vOwner], sendername, 0, strlen(sendername), 255);
                            GivePlayerMoney(playerid,-CarsInfo[buycar][vPrice]);
                            TogglePlayerControllable(playerid, 1);
                            SendClientMessage(playerid, COLOR_GREY, "Поздравляем! Вы купили это авто!");
                            DateProp(playerid);
                            OnPropUpdate();
                            SavePlayer(playerid);
                        }
                      }
                      else
                      {
                        SendClientMessage(playerid, COLOR_RED, "Слишком маленький лвл для покупки машины!");
                        TogglePlayerControllable(playerid, 1);
                        RemovePlayerFromVehicle(playerid);
                        return 1;
                      }
                    }
                    else
                    {
                        SendClientMessage(playerid, COLOR_RED, "У вас нет столько денег!");
                        TogglePlayerControllable(playerid, 1);
                        RemovePlayerFromVehicle(playerid);
                        return 1;
                    }
                }
            }
            else
            {
                SendClientMessage(playerid, COLOR_RED, "У вас уже есть транспорт!");
                TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid);
                return 1;
            }
        }
        else
        {
            TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid);
            return 1;
        }
    }

else if(dialogid == SELLCARDIALOG)
{
if(response)
{
new Float:x,Float:y,Float:z,Float:a;
new car = GetPlayerVehicleID(playerid);
CarsInfo[car-1][vProbeg] = 0.000000;
CarsInfo[car-1][vPercent] = 100;
CarsInfo[car-1][vOwned] = 0;
Engine(car,false);
Lights(car,false);
GetVehiclePos(car,x,y,z);
GetVehicleZAngle(car,a);
CarsInfo[car-1][vPos][0] = x;
CarsInfo[car-1][vPos][1] = y;
CarsInfo[car-1][vPos][2] = z;
CarsInfo[car-1][vPos][3] = a;
RemovePlayerFromVehicle(playerid);
DestroyVehicle(car);
for(new c;c < sizeof(CarsInfo); c++)
{
BuyableCar[c] = CreateVehicle(CarsInfo[c][vModel], x, y, z, a, CarsInfo[c][vColor][0], CarsInfo[c][vColor][1], -1);
SetVehicleNumberPlate(BuyableCar[c],"       ");
}
new babki;
babki=CarsInfo[car-1][vPrice]/100*CarsInfo[car-1][vPercent]
 - floatround(CarsInfo[car-1][vProbeg],floatround_round)*100;
GivePlayerMoney(playerid,babki);
strmid(PlayerInfo[playerid][pNomerCar], "None", 0, strlen("None"), 255);
strmid(CarsInfo[car-1][vOwner], "The State", 0, strlen("The State"), 255);
PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
OnPropUpdate();
SavePlayer(playerid);
}
return 1;
}  

Команда где у вас заводиться двигатель вставляем:
if(IsOwnableCar(GetPlayerVehicleID(playerid)) && CarsInfo[GetPlayerVehicleID(playerid)-1][vPercent] < 1)
    {
    SendClientMessage(playerid,COLOR_RED,"Ваша машина разбита, придется ее продать!");
    return 1;
    }  

В паблик OnPlayerStateChange после if(newstate == PLAYER_STATE_DRIVER) вставляем:
if(newcar <= MAX_BUYABLE_CARS)
        {
            if(CarsInfo[newcar-1][vOwned] == 0)
            {
                format(string, sizeof string, "{ffffff}<< Этот транспорт продаётся >>\n\nМодель: {34c924}%s {ffffff}(%d)\nСтоимость: {34c924}$%d {ffffff}| Левел: {34c924}%d\n\n{ffffff}Номер: {34c924}%s", PlayerVehicle[GetVehicleModel(newcar)-400],GetVehicleModel(newcar), CarsInfo[newcar-1][vPrice], CarsInfo[newcar-1][vLevel], CarsInfo[newcar-1][vNomer]);
                ShowPlayerDialog(playerid,558,DIALOG_STYLE_MSGBOX,"Транспорт продаётся", string,"Купить","Отмена");
            }
        }
        if(IsOwnableCar(newcar) && CarsInfo[newcar-1][vOwned] != 0)
        {
        if(strcmp(PlayerInfo[playerid][pNomerCar],CarsInfo[newcar-1]
[vNomer], true ) != 0 )
        {
        SendClientMessage(playerid,COLOR_RED, "Это не ваша машина!");
        RemovePlayerFromVehicle(playerid);
        return 1;
        }
        }  

Команды:
if(strcmp(cmd, "/carpass", true) == 0)
  {
    if(IsPlayerConnected(playerid))
    {
       if(!IsPlayerInAnyVehicle(playerid))
       {
           SendClientMessage(playerid, COLOR_GREY, "Вы не в машине!");
           return 1;
       }
       new textcar[64];
       tmp = strtok(cmdtext, idx);
       if(!strlen(tmp))
       {
       if(!IsOwnableCar(GetPlayerVehicleID(playerid))) return SendClientMessage(giveplayerid,COLOR_GREY,"В этой машине нет документов!");
         format(string, sizeof(string), "%s достал(а) из бардачка документы.", Name(playerid));
         ProxDetector(10.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
         SendClientMessage(playerid,0x0AA8DAFF,"-------========[ VEHICLE PASSPORT ]========-------");
         format(textcar,sizeof(textcar),"Модель: %s",PlayerVehicle[GetVehicleModel(GetPlayerVehicleID(playerid))-400]
);
         SendClientMessage(playerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Владелец: %s",CarsInfo[GetPlayerVehicleID(playerid)-1][vOwner]);
         SendClientMessage(playerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Состояние: %d",CarsInfo[GetPlayerVehicleID(playerid)-1][vPercent]);
         SendClientMessage(playerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Номер: %s",CarsInfo[GetPlayerVehicleID(playerid)-1][vNomer]);
         SendClientMessage(playerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Пробег: %f км",CarsInfo[GetPlayerVehicleID(playerid)-1][vProbeg]);
         SendClientMessage(playerid,0xC0E1EEFF, textcar);
         SendClientMessage(playerid,0x0AA8DAFF,"=============================================="
);
         return 1;
         }
         giveplayerid = ReturnUser(tmp);
          if(IsPlayerConnected(giveplayerid))
          {
            if(giveplayerid != INVALID_PLAYER_ID)
            {
              for(new i = 0; i < GetMaxPlayers(); i++)
              {
              if(giveplayerid == playerid) return SendClientMessage(giveplayerid,COLOR_GREY,"Самому себе документы нельзя показать!");
              if(!ProxDetectorS(3.0, playerid, giveplayerid)) return SendClientMessage(giveplayerid,COLOR_GREY,"Вы слишком далеко!");
            if(!IsOwnableCar(GetPlayerVehicleID(playerid))) return SendClientMessage(giveplayerid,COLOR_GREY,"В этой машине нет документов!");
         format(string, sizeof(string), "%s достал(а) из бардачка документы и показал их %s.", Name(playerid),Name(giveplayerid));
         ProxDetector(10.0, playerid, string, COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE,COLOR_PURPLE);
         SendClientMessage(giveplayerid,0x0AA8DAFF,"-------========[ VEHICLE PASSPORT ]========-------");
         format(textcar,sizeof(textcar),"Модель: %s",PlayerVehicle[GetVehicleModel(GetPlayerVehicleID(playerid))-400]
);
         SendClientMessage(giveplayerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Владелец: %s",CarsInfo[GetPlayerVehicleID(playerid)-1][vOwner]);
         SendClientMessage(giveplayerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Состояние: %d",CarsInfo[GetPlayerVehicleID(playerid)-1][vPercent]);
         SendClientMessage(giveplayerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Номер: %s",CarsInfo[GetPlayerVehicleID(playerid)-1][vNomer]);
         SendClientMessage(giveplayerid,0xC0E1EEFF, textcar);
         format(textcar,sizeof(textcar),"Пробег: %f км",CarsInfo[GetPlayerVehicleID(playerid)-1][vProbeg]);
         SendClientMessage(giveplayerid,0xC0E1EEFF, textcar);
         SendClientMessage(giveplayerid,0x0AA8DAFF,"=============================================="
);
         return 1;
              }
          return 1;
            }
          }
      }
  return 1;
  }
  
  
    if(strcmp(cmd, "/sellmycar", true) == 0)
    {
        if(IsPlayerConnected(playerid))
        {
            GetPlayerName(playerid, playername, sizeof(playername));
            if(strcmp(PlayerInfo[playerid][pNomerCar],"None", true ) == 0 )
            {
                SendClientMessage(playerid, COLOR_WHITE, "У вас нет машины!");
                return 1;
            }
            new car = GetPlayerVehicleID(playerid);
            if(PlayerInfo[playerid][pMarried] > 0)
            {
                SendClientMessage(playerid, COLOR_GREY, "Вы женаты и поэтому не можете продать свою машину!");
                return 1;
            }
               if(strcmp(PlayerInfo[playerid][pNomerCar],"None", true ) != 0 && strcmp(playername, CarsInfo[car-1][vOwner], true) == 0)
            {
                tmp = strtok(cmdtext,idx);
                if(!strlen(tmp))
                {
                    format(string,sizeof(string),"{ffffff}Продать машину государству за {34c924}$%d{ffffff}?",((CarsInfo[car-1][vPrice]/100)*CarsInfo[
car-1][vPercent]) - (floatround(CarsInfo[car-1][vProbeg],floatround_round)*100));
                    ShowPlayerDialog(playerid,SELLCARDIALOG,DIALOG_STYLE_MSGBOX,"Продажа автомобиля",string,"Да","Отменить");

                    SendClientMessage(playerid,COLOR_ISPOLZUY,"* Используйте: /sellmycar [id] [сумма]");
                    return 1;
                }
                giveplayerid = strval(tmp);
                tmp = strtok(cmdtext,idx);
                if(!strlen(tmp))
                {
                    SendClientMessage(playerid,COLOR_ISPOLZUY,"* Используйте: /sellmycar [id] [сумма]");
                    return 1;
                }
                new money = strval(tmp);
                if(!IsPlayerConnected(giveplayerid))
                {
                    SendClientMessage(playerid,COLOR_GREY,"Нет такого игрока");
                    return 1;
                }
                if(money < 1)
                {
                    SendClientMessage(playerid,COLOR_GREY,"Стоимость должна быть от 1$!");
                    return 1;
                }
                if(GetPlayerMoney(giveplayerid) < money)
                {
                    SendClientMessage(playerid,COLOR_GREY,"У него нет столько денег!");
                    return 1;
                }
                if(playerid == giveplayerid)
                {
                    SendClientMessage(playerid, COLOR_GREY, "Вы не можете продать машину самому себе!");
                    return 1;
                }
                if(strcmp(PlayerInfo[giveplayerid][pNomerCar],"None", true ) != 0 )
                {
                    SendClientMessage(playerid,COLOR_GREY,"У этого игрока уже есть машина!");
                    return 1;
                }
                if(PlayerInfo[giveplayerid][pLevel] < CarsInfo[car-1][vLevel])
                    {
                        SendClientMessage(playerid, COLOR_GREY, "У этого игрока малый лвл!");
                        return 1;
                    }
                if(ProxDetectorS(8.0, playerid, giveplayerid))
                {
                GetPlayerName(playerid,sendername,sizeof(sendername));
                GetPlayerName(giveplayerid,giveplayer,sizeof(giveplayer));
                prodcarid[giveplayerid] = playerid;
                prodcarinfo[giveplayerid] = car;
                strmid(prodcar[giveplayerid], CarsInfo[car-1][vNomer], 0, strlen(CarsInfo[car-1][vNomer]), 255);
                prodcarmoney[giveplayerid] = money;
                format(string,sizeof(string),"Вы предложили %s купить машину %s, с пробегом %f км, состоянием %d за $%d",giveplayer,PlayerVehicle[GetVehicleModel(car)-400],CarsInfo[
car-1][vProbeg],CarsInfo[car-1][vPercent],money);
                SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
                format(string,sizeof(string),"%s предложил вам купить его машину %s, с пробегом %f км, состоянием %d за $%d (введите /accept sellcar чтобы купить)",sendername,PlayerVehicle[GetVehicleModel(car)-400],CarsInfo[
car-1][vProbeg],CarsInfo[car-1][vPercent],money);
                SendClientMessage(giveplayerid,COLOR_LIGHTBLUE,string);
                return 1;
                }
                else
                {
                SendClientMessage(playerid, COLOR_GREY, "Игрок которому вы хотите продать машину не рядом с вами!");
                }
            }
            else
            {
                SendClientMessage(playerid, COLOR_GREY, "У вас нет машины!");
            }
        }
        return 1;
    }
    
    if(strcmp(cmd, "/park", true) == 0)
    {
    for(new car = 0; car < sizeof(CarsInfo); car++)
    {
    if(strcmp(Name(playerid),CarsInfo[car][vOwner],true) == 0)
    {
    SetVehiclePos(BuyableCar[car],CarsInfo[car][vPos][0]
,CarsInfo[car][vPos][1], CarsInfo[car][vPos][2]);
    SetVehicleZAngle(BuyableCar[car],CarsInfo[car][vPos][
3]);
    SetPlayerCheckpoint(playerid, CarsInfo[car][vPos][0], CarsInfo[car][vPos][1], CarsInfo[car][vPos][2], 10.0);
    SendClientMessage(playerid,COLOR_GREY,"* Автомобиль был возвращен к месту парковки!");
    gPlayerCheckpointStatus[playerid] = CHECKPOINT_CAR;
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"У вас нет машины!");
    return 1;
    }
    }
    return 1;
    }
    
    if(strcmp(cmd, "/fixcar", true) == 0)
    {
    if(PlayerToPoint(2.0, playerid, SBizzInfo[4][sbEntranceX], SBizzInfo[4][sbEntranceY], SBizzInfo[4][sbEntranceZ]))
    {
    if(SBizzInfo[4][sbProducts] == 0)
    {
    GameTextForPlayer(playerid, "~r~Out Of Stock", 5000, 1);
    return 1;
    }
    for(new car = 0; car < sizeof(CarsInfo); car++)
    {
    if(strcmp(Name(playerid),CarsInfo[car][vOwner],true) == 0)
    {
    SetVehiclePos(BuyableCar[car],2524.4014,-1466.1853,23.6246);
    SetVehicleZAngle(BuyableCar[car],272.6978);
    PlayerPlaySound(playerid, 1058, 0.0, 0.0, 0.0);
    format(string,sizeof(string),"~g~FixCar service~n~~r~-$%d",SBizzInfo[4][sbEntranceCost]);
    GameTextForPlayer(playerid, string, 5000, 1);
    GivePlayerMoney(playerid,-SBizzInfo[4][sbEntranceCost]);
    SBizzInfo[4][sbTill] += SBizzInfo[4][sbEntranceCost];
    SBizzInfo[4][sbProducts]--;
    OnPropUpdate();
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"У вас нет машины!");
    return 1;
    }
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GREY,"Вы не у бизнеса Fix Car!");
    return 1;
    }
    return 1;
    }
    
    
    
    if(strcmp(cmd, "/editmodelcar", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, COLOR_LIGHTRED, "* Вам недоступна эта команда!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используй: /editmodelcar [Модель]");
    return 1;
    }
    new model;
    model = strval(tmp);
    if(model < 400 || model > 611) return SendClientMessage(playerid, COLOR_GREY, "Модель авто должна быть не менее 400 и не более 611!");
    
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Вы должны быть в машине!");
    new car = GetPlayerVehicleID(playerid);
    if(!IsOwnableCar(car)) return SendClientMessage(playerid, COLOR_GREY, "Нельзя изменить модель данной машине!");
    
    new str[512];
    format(str,512,"Вы успешно изменили модель данного авто на %d модель!",model);
    SendClientMessage(playerid, COLOR_GREY, str);
    new Float:x,Float:y,Float:z,Float:a;

    GetVehiclePos(car,x,y,z);
    GetVehicleZAngle(car,a);
    CarsInfo[car-1][vPos][0] = x;
    CarsInfo[car-1][vPos][1] = y;
    CarsInfo[car-1][vPos][2] = z;
    CarsInfo[car-1][vPos][3] = a;
    CarsInfo[car-1][vModel] = model;
    RemovePlayerFromVehicle(playerid);
    DestroyVehicle(car);
    for(new c;c < sizeof(CarsInfo); c++)
    {
    BuyableCar[c] = CreateVehicle(CarsInfo[c][vModel], x, y, z, a, CarsInfo[c][vColor][0], CarsInfo[c][vColor][1], -1);
    SetVehicleNumberPlate(BuyableCar[c],CarsInfo[c][vNomer]);

    ChangeVehiclePaintjob(BuyableCar[c], CarsInfo[c][Components][0]);
    PutPlayerInVehicle(playerid,BuyableCar[c],0);
    }
    OnPropUpdate();
    return 1;
    }
    
    if(strcmp(cmd, "/asellcar", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, COLOR_LIGHTRED, "* Вам недоступна эта команда!");
    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Вы должны быть в машине!");
    new car = GetPlayerVehicleID(playerid);
    if(!IsOwnableCar(car)) return SendClientMessage(playerid, COLOR_GREY, "Эту машину нельзя продать!");

    SendClientMessage(playerid, COLOR_GREY, "Вы успешно продали эту машину!");
    new Float:x,Float:y,Float:z,Float:a;

    GetVehiclePos(car,x,y,z);
    GetVehicleZAngle(car,a);
    CarsInfo[car-1][vPos][0] = x;
    CarsInfo[car-1][vPos][1] = y;
    CarsInfo[car-1][vPos][2] = z;
    CarsInfo[car-1][vPos][3] = a;
    CarsInfo[car-1][vOwned] = 0;
    CarsInfo[car-1][vProbeg] = 0.000000;
    CarsInfo[car-1][vPercent] = 100;
    new vladelec[256];
    strmid(vladelec, CarsInfo[car-1][vOwner], 0, strlen(CarsInfo[car-1][vOwner]), 255);
    new str[64];
    format(str, sizeof(str), "%s.ini",vladelec);
    new File = iniOpen(str);
    iniSet(File,"NomerCar","None");
    iniClose(File);
    strmid(CarsInfo[car-1][vOwner], "The State", 0, strlen("The State"), 255);
    RemovePlayerFromVehicle(playerid);
    DestroyVehicle(car);
    for(new c;c < sizeof(CarsInfo); c++)
    {
    BuyableCar[c] = CreateVehicle(CarsInfo[c][vModel], x, y, z, a, CarsInfo[c][vColor][0], CarsInfo[c][vColor][1], -1);
    SetVehicleNumberPlate(BuyableCar[c],"         ");
    }
    OnPropUpdate();
    return 1;
    }
    
    if(strcmp(cmd, "/editlevelcar", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, COLOR_LIGHTRED, "* Вам недоступна эта команда!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используй: /editlevelcar [Левел]");
    return 1;
    }
    new model;
    model = strval(tmp);
    if(model < 1) return SendClientMessage(playerid, COLOR_GREY, "Лвл авто должен быть не менее 1!");

    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Вы должны быть в машине!");
    new car = GetPlayerVehicleID(playerid);
    if(!IsOwnableCar(car)) return SendClientMessage(playerid, COLOR_GREY, "Нельзя изменить левел данной машине!");

    new str[512];
    format(str,512,"Вы успешно изменили лвл данного авто на %d лвл!",model);
    SendClientMessage(playerid, COLOR_GREY, str);
    CarsInfo[car-1][vLevel] = model;
    OnPropUpdate();
    return 1;
    }
    
    if(strcmp(cmd, "/editpricecar", true) == 0)
    {
    if(PlayerInfo[playerid][pAdmin] < 6) return SendClientMessage(playerid, COLOR_LIGHTRED, "* Вам недоступна эта команда!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
    SendClientMessage(playerid, COLOR_ISPOLZUY, "* Используй: /editpricecar [Цена]");
    return 1;
    }
    new model;
    model = strval(tmp);
    if(model < 1) return SendClientMessage(playerid, COLOR_GREY, "Цена авто должна быть не менее $1!");

    if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, COLOR_GREY, "Вы должны быть в машине!");
    new car = GetPlayerVehicleID(playerid);
    if(!IsOwnableCar(car)) return SendClientMessage(playerid, COLOR_GREY, "Нельзя изменить цену данной машине!");

    new str[512];
    format(str,512,"Вы успешно изменили цену данного авто на $%d!",model);
    SendClientMessage(playerid, COLOR_GREY, str);
    CarsInfo[car-1][vPrice] = model;
    OnPropUpdate();
    return 1;
    }  

Найдите команду /accept и добавьте:
else if(strcmp(x_job,"sellcar",true) == 0)
            {
                new ididpl = prodcarid[playerid];
                new moneyy = prodcarmoney[playerid];
                new car = prodcarinfo[playerid];
                if(ididpl == -1)
                {
                    SendClientMessage(playerid,COLOR_GREY,"Вам никто не предлагал купить машину!");
                    return 1;
                }
                if(!IsPlayerConnected(ididpl))
                {
                    SendClientMessage(playerid,COLOR_GREY,"Вам никто не предлогал купить машину, или этот человек вышел!");
                    return 1;
                }
                if(GetPlayerMoney(playerid) < moneyy)
                {
                    SendClientMessage(playerid,COLOR_GREY,"У вас нехватает денег!");
                    return 1;
                }
                GetPlayerName(playerid, sendername, sizeof(sendername));
                GetPlayerName(ididpl, giveplayer, sizeof(giveplayer));
                strmid(CarsInfo[car-1][vOwner], sendername, 0, strlen(sendername), 255);
                ConsumingMoney[ididpl] = 1;
                GivePlayerMoney(ididpl,moneyy);
                RemovePlayerFromVehicle(ididpl);
                ConsumingMoney[playerid] = 1;
                GivePlayerMoney(playerid,-moneyy);
                PlayerPlaySound(ididpl, 1052, 0.0, 0.0, 0.0);
                PlayerPlayMusic(playerid);
                strmid(PlayerInfo[playerid][pNomerCar], prodcar[playerid], 0, strlen(prodcar[playerid]), 255);
                format(string,sizeof(string),"None");
                strmid(PlayerInfo[ididpl][pNomerCar], string, 0, strlen(string), 255);
                OnPropUpdate();
                SavePlayer(playerid);
                SavePlayer(ididpl);
                format(string,sizeof(string),"Вы продали свою машину %s %s, с пробегом %f км, состоянием %d за $%d",sendername,PlayerVehicle[GetVehicleModel(car)-400],CarsInfo[
car-1][vProbeg],CarsInfo[car-1][vPercent],moneyy);
                SendClientMessage(ididpl,COLOR_LIGHTBLUE,string);
                format(string,sizeof(string),"Вы купили машину %s у %s, с пробегом %f км, состоянием %d за $%d",PlayerVehicle[GetVehicleModel(car)-400],giveplayer,CarsInfo[
car-1][vProbeg],CarsInfo[car-1][vPercent],moneyy);
                SendClientMessage(playerid,COLOR_LIGHTBLUE,string);
                prodcar[playerid] = -1;
                prodcarid[playerid] = -1;
                prodcarmoney[playerid] = -1;
                prodcarinfo[playerid] = -1;
        }  

Потом в public OnVehicleSpawn(vehicleid):
if(vehicleid <= MAX_BUYABLE_CARS)
    {
        if(CarsInfo[vehicleid-1][vOwned] == 1)
        {
            ChangeVehiclePaintjob(vehicleid, CarsInfo[vehicleid-1][Components][0]);
            ChangeVehicleColor(vehicleid, CarsInfo[vehicleid-1][vColor][0], CarsInfo[vehicleid-1][vColor][1]);
            for(new i = 1; i < 14; i++)
            {
            AddVehicleComponent(vehicleid, CarsInfo[vehicleid-1][Components][i]);
            }
        }
    }  

Вот 3 паблика если есть хотябы 1 из них, то просто замените, а так просто добавте:
public OnVehicleDeath(vehicleid, killerid)
{
new Float:pos[4];
GetVehiclePos(vehicleid, pos[0], pos[1], pos[2]);
GetVehicleZAngle(vehicleid, pos[3]);
CarsInfo[vehicleid-1][vPos][0] = pos[0];
CarsInfo[vehicleid-1][vPos][1] = pos[1];
CarsInfo[vehicleid-1][vPos][2] = pos[2];
CarsInfo[vehicleid-1][vPos][3] = pos[3];
new componn[14];
for(new i; i < 14; i++)
{
componn[i] = GetVehicleComponentInSlot(vehicleid, i);
}
DestroyVehicle(vehicleid);
new string[64];
for(new c; c< sizeof(CarsInfo); c++)
{
BuyableCar[c] = CreateVehicle(CarsInfo[vehicleid-1][vModel],pos[0],pos[
1],pos[2],pos[3],CarsInfo[vehicleid-1][vColor]
[0],CarsInfo[vehicleid-1][vColor][1],-1);
if(CarsInfo[c][vOwned] == 0)
{
format(string,sizeof(string),"       ");
}
else
{
format(string,sizeof(string),"%s",CarsInfo[c][vNomer]);

}
ChangeVehiclePaintjob(BuyableCar[c], CarsInfo[c][Components][0]);
ChangeVehicleColor(BuyableCar[c], CarsInfo[c][vColor][0], CarsInfo[c][vColor][1]);

for(new i = 0; i < 14; i++)
{
AddVehicleComponent(BuyableCar[c], componn[i]);
}
SetVehicleNumberPlate(BuyableCar[c],string);
SetVehicleHealthAC(BuyableCar[c],1000.0);
}
return 1;
}

public OnVehicleDamageStatusUpdate(vehicleid, playerid)
{
    if(CarsInfo[vehicleid-1][vPercent] < 1)
    {
    SendClientMessage(playerid,COLOR_RED,"Ваша машина разбита, придется ее продать!");
    Engine(vehicleid,false);
    Lights(vehicleid,false);
    RemovePlayerFromVehicle(playerid);
    }
    if(CarsInfo[vehicleid-1][vPercent] < 0)
    {
    CarsInfo[vehicleid-1][vPercent] = 0;
    }
    new Float: carhp;
    GetVehicleHealth(vehicleid, carhp);
    for(new i = 0; i < GetMaxPlayers(); i++)
    {
        if(IsOwnableCar(vehicleid))
        {
            if(carhp > 700 && carhp < 850)
            {
                CarsInfo[vehicleid-1][vPercent] -= 1;
                return 1;
            }
            else if(carhp > 500 && carhp < 700)
            {
                CarsInfo[vehicleid-1][vPercent] -= 1;
                return 1;
            }
            else if(carhp > 350 && carhp < 500)
            {
                CarsInfo[vehicleid-1][vPercent] -= 1;
                return 1;
            }
            OnPropUpdate();
        }
    }
    return 1;
}

new carsColors[MAX_VEHICLES];

stock getVehicleColor(vid, &c1, &c2)
{
    c1 = (carsColors[vid] >> 8) & 0xFF;
    c2 = carsColors[vid] & 0xFF;
}

public OnVehicleRespray(playerid, vehicleid, color1, color2)
{
    carsColors[vehicleid] = (color1 << 8) | (color2);
}

new car_paintjob[MAX_VEHICLES] = {-1, ...};

public OnVehiclePaintjob(playerid, vehicleid, paintjobid)
{
    car_paintjob[vehicleid] = paintjobid;

    return 1;
}

stock getVehiclePaintJob(vehicleid)
{
    return car_paintjob[vehicleid];
}  

Вот и все.
Автор: PaHaNjkee
P.S. SetVehicleHealthAC заменить на SetVehicleHealth (просто у меня стоит античит)
Пока что там 1 машина (для теста), вот сам файл: cars.rar [177байт]

Вот вроде и все.
1

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

  • Эксперт
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияGoGer (23 ноября 2011 - 17:02) писал:

Взято с P***********u

И?Ромзес автора указал что ещё надо?
0

#3
Пользователь офлайн   Макс 

  • Местный
  • Вставить ник
  • Раскрыть информацию
спс за авторынок.
0

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

  • Знаток
  • Вставить ник
  • Раскрыть информацию
После какой строчки вставлять это
ClearCarInfo(playerid);

0

#5
Пользователь офлайн   Lwf 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
В начало OnPlayerConnect после первой скобки
0

#6
Пользователь офлайн   OneLifeOneDream 

  • Знаток
  • Вставить ник
  • Раскрыть информацию
А этот сток куда бросать?
0

#7
Пользователь офлайн   Lwf 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
В конец мода
0

#8
Пользователь офлайн   Jeff_Hardy 

  • Banned
  • Вставить ник
  • Раскрыть информацию
OneLifeOneDream ты уже весь форум зафлудил своими нубо вопросами!

Сообщение отредактировал Jeff_Hardy: 22 декабря 2011 - 19:45


#9
Пользователь офлайн   Lwf 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияJeff_Hardy (22 декабря 2011 - 19:45) писал:

OneLifeOneDream ты уже весь форум зафлудил своими нубо вопросами!

Все когда-то учились
0

#10
Пользователь офлайн   Jeff_Hardy 

  • Banned
  • Вставить ник
  • Раскрыть информацию
з.ы. там же написано куда что вставлять!!!

В public OnPlayerConnect: Вот написано же или ты так спицально делаеш ?

ClearCarInfo(playerid);

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


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

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


Яндекс.Метрика