| WedMacK | Дата: Воскресенье, 03.07.2011, 23:11 | Сообщение # 1 |
 Сдешний
Сообщений: 51
| И так начнем 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: у самого на сервере такой скрипт, все отлично работает
|
| |
| |