21.10.2011, 14:44
This is my first FilterScript made time back for my friend's LV server. Forgive me if I posted it un-correctly and pm me if you want me to change it.
Filterscript
Name: [FS]CarOwnership
Version: SA-MP 0.2x
Credit: Me, Peace & KDST
Pawno code.
Код:
//===========================Section: Includes================================== #include <a_samp> //===========================Section: Definitions=============================== #define COLOR_GRAD1 0xB4B5B7FF #define COLOR_GRAD2 0xBFC0C2FF #define COLOR_GRAD3 0xCBCCCEFF #define COLOR_GRAD4 0xD8D8D8FF #define COLOR_GRAD5 0xE3E3E3FF #define COLOR_GRAD6 0xF0F0F0FF #define COLOR_GREEN 0x33AA33AA #define COLOR_GREY 0xAFAFAFAA #define COLOR_WHITE 0xFFFFFFAA #define COLOR_YELLOW 0xFFFF00AA #define COLOR_YELLOW2 0xF5DEB3AA //===========================Section: Forwards================================== forward split(const strsrc[], strdest[][], delimiter); forward LoadCar(); forward CheckOwner(playerid); forward SaveCars(); //===========================Section: Variables================================= enum pInfo { pCarKey, } new PlayerInfo[256][pInfo]; enum cInfo { cModel, Float:cLocationx, Float:cLocationy, Float:cLocationz, Float:cAngle, cColorOne, cColorTwo, cOwner[MAX_PLAYER_NAME], cDescription[MAX_PLAYER_NAME], cValue, cLicense, cRegistration, cOwned, cLock, ownedvehicle, }; new CarInfo[12][cInfo]; new CarAutolock[999]; // Variable for Autolocking Car Doors new cartrack[256]; new CarOffered[256]; //===========================Section: strtok & split============================ strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; } new offset = index; new result[20]; while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1))) { result[index - offset] = string[index]; index++; } result[index - offset] = EOS; return result; } public split(const strsrc[], strdest[][], delimiter) { new i, li; new aNum; new len; while(i <= strlen(strsrc)){ if(strsrc[i]==delimiter || i==strlen(strsrc)){ len = strmid(strdest[aNum], strsrc, li, i, 128); strdest[aNum][len] = 0; li = i+1; aNum++; } i++; } return 1; } //===========================Section: Callbacks & Functions===================== public OnFilterScriptInit() { printf("Filterscript [FS]CarOwnership.amx Initiated\n"); LoadCar(); for(new i = 1; i < sizeof(CarInfo); i++) { CarInfo[i][ownedvehicle] = CreateVehicle(CarInfo[i][cModel],CarInfo[i][cLocationx],CarInfo[i][cLocationy],CarInfo[i][cLocationz],CarInfo[i][cAngle],CarInfo[i][cColorOne],CarInfo[i][cColorTwo],300000); } SetTimer("SaveCars",60000,1); SetTimer("CheckOwner",5000,1); return 1; } public OnVehicleSpawn(vehicleid) { for(new i = 1; i < sizeof(CarInfo); i++) { ChangeVehicleColor(CarInfo[i][ownedvehicle],CarInfo[vehicleid][cColorOne],CarInfo[vehicleid][cColorTwo]); } return 1; } public CheckOwner(playerid) { if(IsPlayerConnected(playerid)) { for(new i = 1; i < sizeof(CarInfo); i++) { new playername[MAX_PLAYER_NAME]; GetPlayerName(playerid,playername,sizeof(playername)); if(strcmp(playername,CarInfo[i][cOwner],true)==0) { PlayerInfo[i][pCarKey] = i; return i; } } } return 1; } public OnPlayerConnect(playerid) { PlayerInfo[playerid][pCarKey] = 0; CheckOwner(playerid); return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { new idx; new string[256]; new cmd[256]; new tmp[256]; new sendername[MAX_PLAYER_NAME]; cmd = strtok(cmdtext, idx); new vehid = GetPlayerVehicleID(playerid); if(strcmp(cmd, "/carbuy", true) == 0) { if(IsPlayerConnected(playerid)) { for(new i = 0; i < sizeof(CarInfo); i++) { if(CarInfo[i][ownedvehicle] == vehid) { if(PlayerInfo[playerid][pCarKey]!=0) { SendClientMessage(playerid, COLOR_GREY, "You already own a car, type /car sell if you want to buy this one!"); return 1; } if(CarInfo[i][cOwned]==1) { SendClientMessage(playerid, COLOR_GREY, "Someone already owns this car"); return 1; } if(GetPlayerMoney(playerid) >= CarInfo[i][cValue]) { PlayerInfo[playerid][pCarKey] = i; CarInfo[i][cOwned] = 1; CarOffered[playerid]=0; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(CarInfo[i][cOwner], sendername, 0, strlen(sendername), 999); GivePlayerMoney(playerid,-CarInfo[i][cValue]); GameTextForPlayer(playerid, "~w~Congratulations~n~This is your car until you sell it!", 5000, 3); SendClientMessage(playerid, COLOR_GRAD2, "Congratulations on your new purchase!"); SendClientMessage(playerid, COLOR_GRAD2, "Type /car manual to view the car manual!"); TogglePlayerControllable(playerid, 1); SaveCars(); return 1; } else { SendClientMessage(playerid, COLOR_GREY, " You don't have the cash for that!"); return 1; } } } } return 1; } if(strcmp(cmd,"/car",true)==0) { new playername[MAX_PLAYER_NAME]; GetPlayerName(playerid,playername,sizeof(playername)); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid,COLOR_WHITE,"(( Use /car manual for detailed instructions for: ))"); SendClientMessage(playerid,COLOR_WHITE,"(( [CarOwnership by KDSTStaff ))"); return 1; } if(strcmp(tmp,"exit",true)==0) { CarOffered[playerid]=0; RemovePlayerFromVehicle(playerid); TogglePlayerControllable(playerid, 1); return 1; } if(strcmp(tmp, "manual", true) == 0) { if(IsPlayerConnected(playerid)) { if(PlayerInfo[playerid][pCarKey]!=0) { format(string,sizeof(string),"________________%s________________",CarInfo[CheckOwner(playerid)][cDescription]); SendClientMessage(playerid, COLOR_GREEN,string); SendClientMessage(playerid, COLOR_GRAD2,"** /carbuy - Buys the car (if for sale)"); SendClientMessage(playerid, COLOR_GRAD2,"** /car sell - Sells the car"); SendClientMessage(playerid, COLOR_GRAD2,"** /car manual - Shows this list"); SendClientMessage(playerid, COLOR_GRAD2,"** /car exit - Exits the car"); SendClientMessage(playerid, COLOR_GRAD2,"** /car locate - Uses the car's On-Star to locate"); SendClientMessage(playerid, COLOR_GRAD2,"** /car lock - Locks the car"); SendClientMessage(playerid, COLOR_GRAD2,"** /car unlock - Unlocks the car"); SendClientMessage(playerid, COLOR_GRAD2,"** /car autolock - Automatically locks the car upon exiting"); return 1; } else { SendClientMessage(playerid,COLOR_GRAD2,"** You do not currently own a car! **"); return 1; } } return 1; } if(strcmp(tmp, "buy", true) == 0) { if(IsPlayerConnected(playerid)) { for(new i = 0; i < sizeof(CarInfo); i++) { if(CarInfo[i][ownedvehicle] == vehid) { if(PlayerInfo[playerid][pCarKey]!=0) { SendClientMessage(playerid, COLOR_GREY, "You already own a car, type /carsell if you want to buy this one!"); return 1; } if(CarInfo[i][cOwned]==1) { SendClientMessage(playerid, COLOR_GREY, "Someone already owns this car"); return 1; } if(GetPlayerMoney(playerid) >= CarInfo[i][cValue]) { PlayerInfo[playerid][pCarKey] = i; CarInfo[i][cOwned] = 1; CarOffered[playerid]=0; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(CarInfo[i][cOwner], sendername, 0, strlen(sendername), 999); GivePlayerMoney(playerid,-CarInfo[i][cValue]); GameTextForPlayer(playerid, "~w~Congratulations~n~This is your car until you sell it!", 5000, 3); SendClientMessage(playerid, COLOR_GRAD2, "Congratulations on your new purchase!"); SendClientMessage(playerid, COLOR_GRAD2, "Type /manual to view the car manual!"); TogglePlayerControllable(playerid, 1); SaveCars(); return 1; } else { SendClientMessage(playerid, COLOR_GREY, " You don't have the cash for that!"); return 1; } } } } return 1; } if(strcmp(tmp, "sell", true) == 0) { if(IsPlayerConnected(playerid)) { GetPlayerName(playerid, playername, sizeof(playername)); if(PlayerInfo[playerid][pCarKey] == 0) { SendClientMessage(playerid, COLOR_GREY, "You don't own a car."); return 1; } if(PlayerInfo[playerid][pCarKey] != 0 && strcmp(playername, CarInfo[PlayerInfo[playerid][pCarKey]][cOwner], true) == 0) { new car = PlayerInfo[playerid][pCarKey]; CarInfo[car][cOwned] = 0; GetPlayerName(playerid, sendername, sizeof(sendername)); strmid(CarInfo[car][cOwner], "Dealership", 0, strlen("Dealership"), 999); GivePlayerMoney(playerid,CarInfo[car][cValue]); PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0); format(string, sizeof(string), "~w~You have sold your car for: ~n~~g~$%d", CarInfo[car][cValue]); GameTextForPlayer(playerid, string, 10000, 3); RemovePlayerFromVehicle(playerid); TogglePlayerControllable(playerid, 1); PlayerInfo[playerid][pCarKey] = 999; return 1; } } return 1; } if(strcmp(tmp, "locate", true) == 0) { if(!IsPlayerConnected(playerid)) { return 1; } if(PlayerInfo[playerid][pCarKey] == 0) { GameTextForPlayer(playerid, "~w~You do not have a car to locate", 2500, 3); return 1; } if(cartrack[playerid]==0) { SendClientMessage(playerid,COLOR_WHITE,"On-Star: This is On-Star's automated vehicle tracking system"); SendClientMessage(playerid,COLOR_WHITE,"On-Star: Please enter your PIN # and password now"); SendClientMessage(playerid,COLOR_WHITE,"On-Star: Your vehicle's location is now uploaded to your phone"); SetPlayerCheckpoint(playerid,CarInfo[PlayerInfo[playerid][pCarKey]][cLocationx], CarInfo[PlayerInfo[playerid][pCarKey]][cLocationy], CarInfo[PlayerInfo[playerid][pCarKey]][cLocationz], 5.0); cartrack[playerid] = 1; return 1; } else { SendClientMessage(playerid,COLOR_WHITE,"On-Star: This is On-Star's automated vehicle tracking system"); SendClientMessage(playerid,COLOR_WHITE,"On-Star: The tracking on your vehicle has been canceled"); DisablePlayerCheckpoint(playerid); cartrack[playerid] = 0; return 1; } } if(strcmp(tmp, "lock", true) == 0) { new keycar = PlayerInfo[playerid][pCarKey]; if(IsPlayerConnected(playerid)) { for(new i = 0; i < MAX_PLAYERS; i++) { SetVehicleParamsForPlayer(CarInfo[keycar][ownedvehicle],i,0,1); } format(string, sizeof(string), "~w~Car~n~~r~Locked"); GameTextForPlayer(playerid, string, 10000, 3); CarInfo[keycar][cLock] = 1; return 1; } } if(strcmp(tmp, "unlock", true) == 0) { new keycar = PlayerInfo[playerid][pCarKey]; if(IsPlayerConnected(playerid)) { for(new i = 0; i < MAX_PLAYERS; i++) { SetVehicleParamsForPlayer(CarInfo[keycar][ownedvehicle],i,0,0); } format(string, sizeof(string), "~w~Car~n~~g~Unlocked"); GameTextForPlayer(playerid, string, 10000, 3); CarInfo[keycar][cLock] = 0; return 1; } } if(strcmp(tmp, "autolock", true) == 0) { new keycar = PlayerInfo[playerid][pCarKey]; if(CarAutolock[CarInfo[keycar][ownedvehicle]] == 0) { CarAutolock[CarInfo[keycar][ownedvehicle]] = 1; format(string, sizeof(string), "~w~Car Autolock~n~~r~Engaged"); return 1; } if(CarAutolock[CarInfo[keycar][ownedvehicle]] == 1) { CarAutolock[CarInfo[keycar][ownedvehicle]] = 0; format(string, sizeof(string), "~w~Car Autolock~n~~g~Disengaged"); return 1; } GameTextForPlayer(playerid, string, 10000, 3); return 1; } } return 0; } /*----------Car Save Functions----------*/ public LoadCar() { new arrCoords[13][64]; new strFromFile2[256]; new File: file = fopen("[FS]CarOwnership.cfg", io_read); if (file) { new idx = 0; while (idx < sizeof(CarInfo)) { fread(file, strFromFile2); split(strFromFile2, arrCoords, ','); CarInfo[idx][cModel] = strval(arrCoords[0]); CarInfo[idx][cLocationx] = floatstr(arrCoords[1]); CarInfo[idx][cLocationy] = floatstr(arrCoords[2]); CarInfo[idx][cLocationz] = floatstr(arrCoords[3]); CarInfo[idx][cAngle] = floatstr(arrCoords[4]); CarInfo[idx][cColorOne] = strval(arrCoords[5]); CarInfo[idx][cColorTwo] = strval(arrCoords[6]); strmid(CarInfo[idx][cOwner], arrCoords[7], 0, strlen(arrCoords[7]), 255); strmid(CarInfo[idx][cDescription], arrCoords[8], 0, strlen(arrCoords[8]), 255); CarInfo[idx][cValue] = strval(arrCoords[9]); CarInfo[idx][cLicense] = strval(arrCoords[10]); CarInfo[idx][cOwned] = strval(arrCoords[11]); CarInfo[idx][cLock] = strval(arrCoords[12]); printf("CarInfo: %d Owner:%s LicensePlate %s",idx,CarInfo[idx][cOwner],CarInfo[idx][cLicense]); idx++; } } return 1; } public SaveCars() { new idx; new File: file2; while (idx < sizeof(CarInfo)) { new coordsstring[256]; format(coordsstring, sizeof(coordsstring), "%d,%f,%f,%f,%f,%d,%d,%s,%s,%d,%s,%d,%d\n", CarInfo[idx][cModel], CarInfo[idx][cLocationx], CarInfo[idx][cLocationy], CarInfo[idx][cLocationz], CarInfo[idx][cAngle], CarInfo[idx][cColorOne], CarInfo[idx][cColorTwo], CarInfo[idx][cOwner], CarInfo[idx][cDescription], CarInfo[idx][cValue], CarInfo[idx][cLicense], CarInfo[idx][cOwned], CarInfo[idx][cLock]); if(idx == 0) { file2 = fopen("[FS]CarOwnership.cfg", io_write); } else { file2 = fopen("[FS]CarOwnership.cfg", io_append); } fwrite(file2, coordsstring); idx++; fclose(file2); } return 1; } public OnVehicleRespray(vehicleid, color1, color2) { for(new i = 0; i < sizeof(CarInfo); i++) { if(vehicleid == CarInfo[i][ownedvehicle]) { CarInfo[i][cColorOne] = color1; CarInfo[i][cColorTwo] = color2; printf("[FS]CarOwnership report"); printf("** Car %s[%d] painted %d and %d",CarInfo[i][cDescription],i,color1,color2); } } return 1; } public OnPlayerExitVehicle(playerid, vehicleid) { if(IsPlayerConnected(playerid)) { for(new i = 0; i < sizeof(CarInfo); i++) { if(vehicleid == CarInfo[i][ownedvehicle]) { new Float:x,Float:y,Float:z; new Float:a; GetVehiclePos(vehicleid, x, y, z); GetVehicleZAngle(vehicleid, a); CarInfo[i][cLocationx] = x; CarInfo[i][cLocationy] = y; CarInfo[i][cLocationz] = z; CarInfo[i][cAngle] = a; } if(CarAutolock[vehicleid] == 1) { for(new j = 0; j < MAX_PLAYERS; i++) { if (IsPlayerConnected(j)) { SetVehicleParamsForPlayer(vehicleid,j,0,1); GameTextForPlayer(playerid,"~w~Car~n~~r~Autolocked",2500,3); return 1; } } } } } return 1; } public OnPlayerStateChange(playerid, newstate, oldstate) { if(newstate==2) { for(new i = 0; i < sizeof(CarInfo); i++) { new newcar = GetPlayerVehicleID(playerid); new string[256]; if(newcar == CarInfo[i][ownedvehicle]) { if(CarInfo[i][cOwned]==0) { TogglePlayerControllable(playerid, 0); CarOffered[playerid]=1; format(string,sizeof(string),"~w~Car: %s~n~Price: ~g~%d~n~~w~/carbuy to buy this car",CarInfo[i][cDescription],CarInfo[i][cValue]); GameTextForPlayer(playerid,string,5000,5); } } } } return 1; } public OnPlayerEnterCheckpoint(playerid) { if(cartrack[playerid]!=0) { SendClientMessage(playerid,COLOR_YELLOW,"SMS: On-Star: Our sensors show that you have come within 5.0 metres of your vehicle"); DisablePlayerCheckpoint(playerid); cartrack[playerid] = 0; } return 1; }
Locations of cars:
Код:
422,2135.418701,-1128.477294,25.593200,110.959999,1,1,Dealership,Bobcat,50000,,0,0 543,2136.328613,-1132.250976,25.511566,110.258712,1,1,Dealership,Sadler,50000,,0,0 554,2135.458496,-1136.625488,25.735660,107.892265,1,1,Dealership,Yosemite,50000,,0,0 579,2135.744140,-1140.979614,25.173116,111.251762,1,1,Dealership,Huntley,50000,,0,0 400,2136.281738,-1144.528686,24.955900,109.024398,1,1,Dealership,Landstalker,50000,,0,0 500,2136.882568,-1147.977294,24.593900,104.355201,1,1,Dealership,Mesa,50000,,0,0 489,2122.037597,-1157.092285,24.256799,356.001007,1,1,Dealership,Rancher,50000,,0,0 445,2117.238281,-1156.901367,24.194599,337.440185,1,1,Dealership,Admiral,50000,,0,0 492,2117.775146,-1148.868041,24.202800,331.458801,1,1,Dealership,Greenwood,50000,,0,0 410,2117.998535,-1141.823730,24.537799,325.724914,1,1,Dealership,Manana,50000,,0,0 600,2118.116210,-1135.639526,24.913400,326.202606,1,1,Dealership,Picador,50000,,0,0 496,2118.714111,-1129.351440,25.015199,318.569488,1,1,Dealership,Blista Compact,50000,,0,0
Filterscript
Name: [FS]CarOwnership
Version: SA-MP 0.2x
Credit: Me, Peace & KDST