• Страница 1 из 1
  • 1
[FAQ] Система продажи автомобилей
WedMacKДата: Воскресенье, 03.07.2011, 23:11 | Сообщение # 1
Сдешний
Сообщений: 51
Награды: 0
Репутация: -1
И так начнем
1. Вставляем в самый верх (можно после #include <a_samp>)

Quote
#include <Dini>
#pragma tabsize 0

#define COLOR_RED 0xAA3333AA
#define COLOR_YELLOW 0xFFFF00AA
#define COLOR_GREEN 0x33AA33AA
#define PATH "Cars/cars.ini"


2.Дальше, находим new PlayerInfo[MAX_PLAYERS][pInfo]; и вставляем после него:

Quote
enum info
{
Carid,
Model,
Owner[256],
Float:Pos_x,
Float:Pos_y,
Float:Pos_z,
Float:Pos_a,
Price,
Col1,
Col2,

};

new CarInfo[MAX_VEHICLES][info];
new cars = 0;


3. В public OnPlayerStateChange(playerid, newstate, oldstate) вставляем:

gLastCar[playerid] = newcar;
gLastDriver[newcar] = playerid;
new bveh;
new owner[255];
new pName[255];
GetPlayerName(playerid,pName,sizeof(pName));
for(new i=0; i<MAX_VEHICLES; i++)
{
if(CarInfo[i][Carid] == newcar)
{
bveh = i;
format(owner,sizeof(owner),"%s", CarInfo[i][Owner]);
break;
}
}
if(strmatch(owner,"forsale"))
{
new str[255];
TogglePlayerControllable(playerid,0);
SendClientMessage(playerid,COLOR_YELLOW,"* Этот автомобиль продается.");
format(str,sizeof(str),"* Цена автомобиля: %d$", CarInfo[bveh][Price]);
SendClientMessage(playerid,COLOR_YELLOW,str);
SendClientMessage(playerid,COLOR_YELLOW,"* Вы можете его купить /buycar или выйти из него /leave");
}
else if (!strmatch(owner,pName) && strlen(owner) > 2)
{
SendClientMessage(playerid,COLOR_RED,"* У вас нет ключей от этой машины.");
RemovePlayerFromVehicle(playerid);
}

4. Теперь переходим в public OnGameModeInit(). Я вставил после LoadPapers();

Quote
rint("\n--------------------------------------");
print("Загрузка ...");
print("Система Личных Авто ...");
print("\n--------------------------------------");
new key[256],str[256],idx = 0;
for(new i=0;i<MAX_VEHICLES;i++)
{
format(key,sizeof(key),"Model_%d",i);
if(dini_Isset(PATH,key))
{
CarInfo[idx][Model] = strval(dini_Get(PATH,key));
format(key,sizeof(key),"Owner_%d",i);
format(str, sizeof(str), "%s",dini_Get(PATH,key));
CarInfo[idx][Owner] = str;
format(key,sizeof(key),"Pos_x_%d",i);
CarInfo[idx][Pos_x] = floatstr(dini_Get(PATH,key));
format(key,sizeof(key),"Pos_y_%d",i);
CarInfo[idx][Pos_y] = floatstr(dini_Get(PATH,key));
format(key,sizeof(key),"Pos_z_%d",i);
CarInfo[idx][Pos_z] = floatstr(dini_Get(PATH,key));
format(key,sizeof(key),"Pos_a_%d",i);
CarInfo[idx][Pos_a] = floatstr(dini_Get(PATH,key));
format(key,sizeof(key),"Price_%d",i);
CarInfo[idx][Price] = strval(dini_Get(PATH,key));
format(key,sizeof(key),"Col1_%d",i);
CarInfo[idx][Col1] = strval(dini_Get(PATH,key));
format(key,sizeof(key),"Col2_%d",i);
CarInfo[idx][Col2] = strval(dini_Get(PATH,key));
CarInfo[idx][Carid] = CreateVehicle(CarInfo[idx][Model], CarInfo[idx][Pos_x], CarInfo[idx][Pos_y], CarInfo[idx][Pos_z], CarInfo[idx][Pos_a], CarInfo[idx][Col1], CarInfo[idx][Col2],60000);
format(str,sizeof(str),"ModelID: %d Owner: %s Pos_x: %f Pos_y: %f Pos_z: %f Angle: %f Price: %d $ Color 1: %d Color 2: %d",CarInfo[idx][Model],CarInfo[idx][Owner],CarInfo[idx][Pos_x],CarInfo[idx][Pos_y],CarInfo[idx][Pos_z],CarInfo[idx][Pos_a],CarInfo[idx][Price],CarInfo[idx][Col1],CarInfo[idx][Col2]);
print(str);
idx++;
cars++;
}
else
{
break;
}
}


5. Дальше переходим в public OnPlayerCommandText(playerid, cmdtext[])

Quote
if (strcmp(cmd, "/leave", true) ==0 )
{
if(IsPlayerInAnyVehicle(playerid))
{
TogglePlayerControllable(playerid, 1);
RemovePlayerFromVehicle(playerid);
return 1;
}
return 1;
}

if (strcmp(cmd, "/newcar", true) ==0 )
{
if(!IsPlayerAdmin(playerid))
{
SendClientMessage(playerid,COLOR_RED, "* Вы не администратор.");
return 1;
}
tmp = strtok(cmdtext,idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,COLOR_RED, "* [ИСПОЛЬЗУЙТЕ] /newcar id цвет_1 цвет_2 цена.");
return 1;
}
new vehiclemodel = strval(tmp);
tmp = strtok(cmdtext,idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,COLOR_RED, "* [ИСПОЛЬЗУЙТЕ] /newcar id цвет_1 цвет_2 цена.");
return 1;
}
new color1 = strval(tmp);
tmp = strtok(cmdtext,idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,COLOR_RED, "* [ИСПОЛЬЗУЙТЕ] /newcar id цвет_1 цвет_2 цена.");
return 1;
}
new color2 = strval(tmp);
tmp = strtok(cmdtext,idx);
if(!strlen(tmp))
{
SendClientMessage(playerid,COLOR_RED, "* [ИСПОЛЬЗУЙТЕ] /newcar id цвет_1 цвет_2 цена.");
return 1;
}
new price = strval(tmp);
new Float:px,Float:py,Float:pz,Float:pa;
GetPlayerPos(playerid,px,py,pz);
GetPlayerFacingAngle(playerid,pa);
new id = cars;
cars += 1;
CarInfo[id][Model]=vehiclemodel;
CarInfo[id][Pos_x]=px;
CarInfo[id][Pos_y]=py;
CarInfo[id][Pos_z]=pz;
CarInfo[id][Pos_a]=pa;
CarInfo[id][Col1]=color1;
CarInfo[id][Col2]=color2;
CarInfo[id][Price]=price;
strmid(CarInfo[id][Owner],"forsale",0,128,128);
CarInfo[id][Carid] = CreateVehicle(CarInfo[id][Model],CarInfo[id][Pos_x],CarInfo[id][Pos_y],CarInfo[id][Pos_z],CarInfo[id][Pos_a],CarInfo[id][Col1],CarInfo[id][Col2],600000);
SaveCars();
return 1;
}
if(strcmp(cmd, "/buycar", true) == 0)
{
if(!IsPlayerInAnyVehicle(playerid))
{
SendClientMessage(playerid,COLOR_LIGHTRED,"* Вы должны находиться в машине.");
return 1;
}
new carid,bcarid,money;
new bool:flag = false;
carid = vehid;
money = GetPlayerMoney(playerid);
for(new i=0;i<MAX_VEHICLES;i++){ if(CarInfo[i][Carid] == carid && strmatch(CarInfo[i][Owner],"forsale")){ bcarid = i; break;} else bcarid = -1; }
if(bcarid == -1){SendClientMessage(playerid,COLOR_RED,"* Данная машина не продается."); return 1; }
for(new i=0;i<MAX_VEHICLES;i++){ if(strmatch(CarInfo[i][Owner],name)) {flag = true; break;} }
if(flag){SendClientMessage(playerid,COLOR_RED,"* У вас уже есть машина."); return 1;}
if(money < CarInfo[bcarid][Price]){SendClientMessage(playerid,COLOR_RED,"* У вас не хватает денег."); return 1;}
GivePlayerMoney(playerid,- CarInfo[bcarid][Price]);
TogglePlayerControllable(playerid,1);
CarInfo[bcarid][Owner] = name;
SendClientMessage(playerid,COLOR_YELLOW,"* Поздравляем вас с приобретением транспорта !");
SendClientMessage(playerid,COLOR_YELLOW,"* Что бы припарковать авто введите /parkcar.");
SaveCars();
return 1;
}
if(strcmp(cmd, "/descar", true) == 0)
{

if(!IsPlayerAdmin(playerid)) { SendClientMessage(playerid,COLOR_RED, "* Вы не администратор."); return 1; }

if(!IsPlayerInAnyVehicle(playerid)){ SendClientMessage(playerid,COLOR_RED,"* Вы должны находиться в машине."); return 1; }

new descar;
new bool:flag;

for(new i=0; i<cars; i++) { if(CarInfo[i][Carid] == vehid) { flag = true; descar = i; break;} else {flag = false;} }

if(!flag){SendClientMessage(playerid,COLOR_RED,"* Нельзя удалить данный автомобиль."); return 1;}

CarInfo[descar][Model] = -1;
DestroyVehicle(vehid);
SendClientMessage(playerid,COLOR_GREEN,"* Автомобиль успешно удален.");
TogglePlayerControllable(playerid,1);
SaveCars();
return 1;
}
if(strcmp(cmd, "/parkcar", true) == 0)
{

if(!IsPlayerInAnyVehicle(playerid)){ SendClientMessage(playerid,COLOR_RED,"* Вы должны находиться в машине."); return 1;}

new cucar;
new bool:flag;

for(new i=0; i<cars; i++) { if(CarInfo[i][Carid] == vehid) { flag = true; cucar = i; break;} else {flag = false;} }

if(!flag){SendClientMessage(playerid,COLOR_RED,"* Вы не можете припарковать этот транспорт"); return 1;}

for(new i=0; i<cars; i++) { if(CarInfo[i][Carid] == vehid && strmatch(CarInfo[i][Owner],name)) { flag = true; break; } else { flag = false; } }

if(!flag){SendClientMessage(playerid,COLOR_RED,"* Вы не можете припарковать чужую машину"); return 1;}

new Float:x,Float:y,Float:z,Float:a;
GetVehiclePos(vehid,x,y,z);
GetVehicleZAngle(vehid,a);
CarInfo[cucar][Pos_x] = x;
CarInfo[cucar][Pos_y] = y;
CarInfo[cucar][Pos_z] = z;
CarInfo[cucar][Pos_a] = a;
SendClientMessage(playerid,COLOR_GREEN,"* Машина успешно припаркована");
SaveCars();
return 1;
}

if (strcmp(cmd, "/colorcar", true) == 0)
{

if(!IsPlayerInAnyVehicle(playerid)){ SendClientMessage(playerid,COLOR_LIGHTRED,"* Вы должны находиться в машине."); return 1;}
new bool:flag;
new cucar;
tmp = strtok(cmdtext,idx);
if(!strlen(tmp)){ SendClientMessage(playerid,COLOR_RED, "* [ИСПОЛЬЗУЙТЕ] /colorcar (id цвета) (id цвета)"); return 1;}
new color1 = strval(tmp);
tmp = strtok(cmdtext,idx);
if(!strlen(tmp)){ SendClientMessage(playerid,COLOR_RED, "* [ИСПОЛЬЗУЙТЕ] /colorcar (id цвета) (id цвета)"); return 1;}
new color2 = strval(tmp);
if(color1 > 126 || color2>125) { SendClientMessage(playerid,COLOR_RED, "* ID цвета должен быть не больше 126"); return 1; }

for(new i=0; i<cars; i++) { if(CarInfo[i][Carid] == vehid && strmatch(CarInfo[i][Owner],name)) { flag = true; cucar = i; break; } else { flag = false; } }
if(!flag){SendClientMessage(playerid,COLOR_RED,"* Вы не можете перекрасить чужую машину"); return 1;}

ChangeVehicleColor(vehid, color1, color2);
CarInfo[cucar][Col1] = color1;
CarInfo[cucar][Col2] = color2;
SendClientMessage(playerid,COLOR_GREEN,"* Автомобиль успешно перекрашен");
SaveCars();
return 1;
}

if (strcmp(cmd, "/sellcar", true) == 0)
{
new bool:flag;
new cucar;
for(new i=0; i<cars; i++) { if(strmatch(CarInfo[i][Owner],name)) { flag = true; cucar = i; break; } else { flag = false; } }
if(!flag){SendClientMessage(playerid,COLOR_RED,"* У вас нет машины"); return 1;}
if(IsPlayerInAnyVehicle(playerid)){ TogglePlayerControllable(playerid, 1); RemovePlayerFromVehicle(playerid); }
new nowner[256] = "forsale";
CarInfo[cucar][Owner] = nowner;
GivePlayerMoney(playerid,CarInfo[cucar][Price]);
SendClientMessage(playerid,COLOR_GREEN,"* Автомобиль успешно продан");
SaveCars();
return 1;
}
if (strcmp(cmd, "/rescar", true) == 0)
{
new bool:flag;
new cucar;
for(new i=0; i<cars; i++){ if(strmatch(CarInfo[i][Owner],name)) { flag = true; cucar = i; break; } else { flag = false; } }
if(!flag){SendClientMessage(playerid,COLOR_RED,"* У вас нет машины"); return 1;}
for(new i=0; i<MAX_PLAYERS; i++){ if(GetPlayerVehicleID(i) == CarInfo[cucar][Carid]) { RemovePlayerFromVehicle(i); }}
vehid = CarInfo[cucar][Carid];
SetVehiclePos(vehid, CarInfo[cucar][Pos_x], CarInfo[cucar][Pos_y], CarInfo[cucar][Pos_z]);
SetVehicleZAngle(vehid, CarInfo[cucar][Pos_a]);
SendClientMessage(playerid,COLOR_GREEN,"* Автомобиль успешно доставлен на место парковки");
SaveCars();
return 1;
}

if (strcmp(cmd, "/carkey", true) == 0)
{
new bool:flag;
new cucar;
tmp = strtok(cmdtext,idx);
if(!strlen(tmp)){ SendClientMessage(playerid,COLOR_RED, "* [ИСПОЛЬЗУЙТЕ] /carkey (id игрока)"); return 1;}
//new giveplayerid = strval(tmp);
new gname[256];
GetPlayerName(giveplayerid,gname,sizeof(gname));
for(new i=0; i<cars; i++) { if(strmatch(CarInfo[i][Owner],name)) { flag = true; cucar = i; break; } else { flag = false; } }
if(!flag){SendClientMessage(playerid,COLOR_RED,"* У вас нет машины"); return 1;}
for(new i=0; i<cars; i++) { if(strmatch(CarInfo[i][Owner],gname)) { flag = true; break; } else { flag = false; } }
if(flag){SendClientMessage(playerid,COLOR_RED,"* У игрока уже есть машина"); return 1;}
CarInfo[cucar][Owner]=gname;
new str[255];
format(str,sizeof(str),"* Вы успешно передали машину во владение %s",gname);
SendClientMessage(playerid,COLOR_GREEN,str);
format(str,sizeof(str),"* Игрок %s передал вам ключи от своей машины",name);
SendClientMessage(giveplayerid,COLOR_GREEN,str);
SaveCars();
return 1;
}
if (strcmp(cmd, "/carhelp", true) == 0)
{
if(IsPlayerConnected(playerid))
{
SendClientMessage(playerid,COLOR_GREEN,"------------------------------------ --------");
SendClientMessage(playerid,COLOR_GREEN,"* /buycar - купить авто");
SendClientMessage(playerid,COLOR_GREEN,"* /sellcar - продать авто");
SendClientMessage(playerid,COLOR_GREEN,"* /rescar - респавнить авто");
SendClientMessage(playerid,COLOR_GREEN,"* /keycar - отдать ключи от авто");
SendClientMessage(playerid,COLOR_GREEN,"* /colorcar - поменять цвет (только в авто)");
SendClientMessage(playerid,COLOR_GREEN,"--------------------------------------------");
return 1;
}
}


6. Теперь в самом низу мод вставляем несколько пабликов:

Quote
public OnVehicleSpawn(vehicleid)
{
for(new i=0;i<MAX_VEHICLES;i++) {
if(CarInfo[i][Carid]==vehicleid){ SetVehiclePos(vehicleid, CarInfo[i][Pos_x], CarInfo[i][Pos_y], CarInfo[i][Pos_z]);
SetVehicleZAngle(vehicleid, CarInfo[i][Pos_a]);
ChangeVehicleColor(vehicleid, CarInfo[i][Col1], CarInfo[i][Col2]);
}
}
return 1;
}

SaveCars(){

new key[255],next = 0;

dini_Remove(PATH);
dini_Create(PATH);

for(new i=0;i<cars;i++){
if(CarInfo[i][Model] == -1) { next += 1; continue; }
new j = i - next;

format(key,sizeof(key),"Model_%d",j);
dini_IntSet(PATH,key,CarInfo[i][Model]);
format(key,sizeof(key),"Owner_%d",j);
dini_Set(PATH,key,CarInfo[i][Owner]);
format(key,sizeof(key),"Pos_x_%d",j);
dini_FloatSet(PATH,key,CarInfo[i][Pos_x]);
format(key,sizeof(key),"Pos_y_%d",j);
dini_FloatSet(PATH,key,CarInfo[i][Pos_y]);
format(key,sizeof(key),"Pos_z_%d",j);
dini_FloatSet(PATH,key,CarInfo[i][Pos_z]);
format(key,sizeof(key),"Pos_a_%d",j);
dini_FloatSet(PATH,key,CarInfo[i][Pos_a]);
format(key,sizeof(key),"Price_%d",j);
dini_IntSet(PATH,key,CarInfo[i][Price]);
format(key,sizeof(key),"Col1_%d",j);
dini_IntSet(PATH,key,CarInfo[i][Col1]);
format(key,sizeof(key),"Col2_%d",j);
dini_IntSet(PATH,key,CarInfo[i][Col2]);

}
return 1;
}
stock strmatch(const String1[], const String2[])
{
if ((strcmp(String1, String2, true, strlen(String2)) == 0) && (strlen(String2) == strlen(String1)))
{
return true;
}
else
{
return false;
}
}


Если у вас нету инклуда Dini.inc, то можно скачать тут.
И еще, создаем папку Cars (в scriptfiles), а в этой папке файл cars.ini
Команды этого скрипта:

/newcar - создать новое авто (для rcon админов)
/buycar - купить авто
/descar - удалить авто (тоже для rcon админов)
/sellcar - продать авто
/parkcar - припарковать авто
/rescar - ТП авто на место
/keycar - передать ключи
/colorcar - поменять цвет авто.
P.S: есть /carhelp - там все эти команды.
P.S.S: у самого на сервере такой скрипт, все отлично работает
 
MateoДата: Среда, 18.04.2012, 18:52 | Сообщение # 2
Проверенный
Сообщений: 26
Награды: 0
Репутация: 0
Легонькая

111
 
bob-94Дата: Суббота, 10.11.2012, 21:06 | Сообщение # 3
Проверенный
Сообщений: 20
Награды: 0
Репутация: 0
Mateo, не думаю мне пришлось попотеть
 
  • Страница 1 из 1
  • 1
Поиск:
Статистика Форума
Последние посты Популярные темы Топ пользователей Новые пользователи
Наткнулся на интерес... Пост от [ Dodo ]
[CHEAT] Смена скина ... Пост от [ madeinprestige ]
Cоздание HUD интерфе... Пост от [ Player321 ]
Форма заявки! Пост от [ West ]
[GM] SF-LV TDM v 4.0... Пост от [ kimalto452 ]
[GM] Virtual World Пост от [ kimalto452 ]
[GM] Nero RolePlay Пост от [ kimalto452 ]
[GM] Engine Role PLa... Пост от [ kimalto452 ]
[GM] Godfather (Madt... Пост от [ kimalto452 ]
[GTA CriminalRussia]... Пост от [ kimalto452 ]
Новый шаблон главной Ответов [ 25 ]
Игра "Я знаю 5&... Ответов [ 23 ]
Разработка [GTA-MP] ... Ответов [ 22 ]
[GTA-MP]~Russian'... Ответов [ 21 ]
Какая у вас oc? Ответов [ 16 ]
Общение Ответов [ 16 ]
Как долго вы на Gta-... Ответов [ 12 ]
Города Ответов [ 12 ]
RussianWorld [Долгож... Ответов [ 12 ]
"Вот это прикол... Ответов [ 11 ]
West Постов [ 163 ]
Папа Постов [ 103 ]
Sup Постов [ 80 ]
Deni Постов [ 52 ]
WedMacK Постов [ 51 ]
apaccer Постов [ 50 ]
DriftStyle Постов [ 50 ]
XEK Постов [ 45 ]
AK47 Постов [ 44 ]
heyo Постов [ 36 ]
OffingSTДата [ 22.10.2023 ]
ЛексДата [ 30.09.2022 ]
ArsherДата [ 13.01.2021 ]
Graffiton5656Дата [ 13.01.2021 ]
Grom5656Дата [ 13.01.2021 ]
novok94Дата [ 15.09.2020 ]
ArsebДата [ 17.06.2020 ]
SANEK3826Дата [ 27.12.2019 ]
6twertwgdrgДата [ 13.08.2019 ]
zornik123Дата [ 23.07.2019 ]

Sitemap
Хостинг от uCoz