/* Drift/Race/Tune/Stunt GM By: Splitx Thx To: Kevin433 For Login/Register System Thx To: Yagu's Race Filterscript v0.4a Thx To: Full house script by Antironix Thx To: Every 1 That Helped Me out ------------------------------------- !!DO NOT!! Take Credits For This Script And Dont Say YOU Made It ------------------------------------- YOU Can Edit The Script And Use It On Ur Server xD But Leave My Credits And The Other Credits */ //Includes //Defines #define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1 #include #include #include #include #include #define MAX_RACECHECKPOINTS 64 #define MAX_BUILDERS 4 #define RACEFILE_VERSION 2 #define MENUSYSTEM #define MAX_HOUSES 2 #define MAX_RENTCOST 1000 #define MIN_RENTCOST 500 #define MAX_BUY_CARS 8 #define CAR_DELIVER_TIME 1 //The time that it takes that your car will be delivered. In hours. //colors #define COLOR_GREY 0xBEBEBEAA #define COLOR_WHITE 0xFFFFFFAA #define COLOR_GREEN 0x33AA33AA #define COLOR_GRAD5 0xE3E3E3FF #define COLOR_GRAD1 0xB4B5B7FF #define COLOR_DRIFT 0x8A2BE2FF #define COLOR_RACE 0xBEBEBEAA #define COLOR_TUNE 0x000000AA #define COLOR_RED 0xAA3333AA #define COLOR_YELLOW 0xFFFF00AA #define COLOR_GREEN 0x33AA33AA #define COLOR_WHITE 0xFFFFFFAA #define COLOR_STUNT 0x00FFFFAA //pragmas #pragma tabsize 0 //new //The houses new HOUSE_STATS = 0; //0 Means housestats on pickup pickup, 1 means only housestats on /housestats command. //buyable cars enum CarInfo {CarModel,CarName[24],CarCost}; new Buyable_Cars[MAX_BUY_CARS][CarInfo] = { {411,"Infernus",50000}, {522,"NRG-500",50000}, {451,"Turismo",50000}, {541,"Bullet",50000}, {415,"Cheetah",50000}, {429,"Banshee",50000}, {494,"Hotring",50000}, {556,"Monster",50000} }; #define Cost_Admiral 50000 //---------------------------- //---------------------------- #define c_y 0xFFFF00AA #define c_r 0xAA3333AA new HousePickup[MAX_HOUSES]; new playerinterior[MAX_PLAYERS]=-1; new inhousepickup; new playericonhouse[MAX_PLAYERS]; new Float:housex, Float:housey, Float:housez; new housemapicon[MAX_PLAYERS]; new bool:KillVeh[MAX_VEHICLES] = false; forward rentfee(); forward newcar(); forward KillVehicle(carid); enum HouseInfo { Name[24], Renter[24], Rentable, Rentcost, Cost, Sell, Interior, Locked, Float:InteriorX, Float:InteriorY, Float:InteriorZ, Float:iconx, Float:icony, Float:iconz, Rentfee } new hInfo[MAX_HOUSES][HouseInfo]; enum HouseCarInfo { HouseCar, GotCar, Houseid, CarModel, Float:CarX, Float:CarY, Float:CarZ, CarColor1, CarColor2, Respawn_Delay, NewCar } new cInfo[MAX_HOUSES][HouseCarInfo]; //The Mission´s new Float:VehCP[3][3] = //[3] = amount of coords [3] = size of string { {-1046.6548,448.9770,14.5396}, {2784.0300,-2416.5308,13.6346}, {-2029.8876,157.2540,28.8359} }; //Other new Text:Textdraw000; new Text:Textdraw1000; new Text:Textdraw2; new Text:Textdraw3; new Text:Textdraw0; new Text:Textdraw1; new Menu:VehliceMenu; new Menu:Vehlice2Menu; new Menu:Stationwagons; new Menu:TwoDoors; new Menu:TwoDoors2; new Menu:ForeDoors; new Menu:ForeDoors2; new Menu:RC; new Menu:Muscle; new Menu:Street; new Menu:Lowriders; new Menu:Sport; new Menu:Vans; new Menu:Transport; new Menu:Recreation; new Menu:Bikes; new Menu:Boats; new Menu:Work; new Menu:Work2; new Menu:Planes; new Menu:Planes2; new Menu:Gouverment; new Menu:Gouverment2; new Menu:HangOn; new Menu:Special; new Fire; new NrgLock[MAX_PLAYERS]; new FireLock[MAX_PLAYERS]; new LoadLock[MAX_PLAYERS]; new MajorityDelay = 120; new RRotation = 0; new RRotationDelay = 600000; new BuildAdmin = 1; new RaceAdmin = 1; new PrizeMode=0; new Prize=30000; new DynaMP=1; new JoinFee=1000; new gPlayerLogged[MAX_PLAYERS]; new gPlayerAccount[MAX_PLAYERS]; new Pot=0; new Ranking; new PrizeMP; new Countdown; new cd; new MajStart=0; new MajStartTimer; new mscd; new RaceActive; new RaceStart; new Float:RaceCheckpoints[MAX_RACECHECKPOINTS][3]; new LCurrentCheckpoint; new CurrentCheckpoint[MAX_PLAYERS]; new CurrentLap[MAX_PLAYERS]; new RaceParticipant[MAX_PLAYERS]; new Participants; new PlayerVehicles[MAX_PLAYERS]; new ORacelaps, ORacemode; new OAirrace, Float:OCPsize; new Racelaps, Racemode; new ScoreChange; new RaceTick; new LastLapTick[MAX_PLAYERS]; new TopRacers[6][MAX_PLAYER_NAME]; new TopRacerTimes[6]; new TopLappers[6][MAX_PLAYER_NAME]; new TopLapTimes[6]; new Float:CPsize; new Airrace; new Float:RLenght, Float:LLenght; new BCurrentCheckpoints[MAX_BUILDERS]; new RaceBuilders[MAX_PLAYERS]; new BuilderSlots[MAX_BUILDERS]; new Float:BRaceCheckpoints[MAX_BUILDERS][MAX_RACECHECKPOINTS][3]; new Float:BCPsize[MAX_BUILDERS]; new BAirrace[MAX_BUILDERS]; //The Count new Count = 5; new CountText[5][5] ={ "~g~1", "~y~2", "~r~3", "~r~4", "~r~5" }; #if defined MENUSYSTEM forward RefreshMenuHeader(playerid,Menu:menu,text[]); new Menu:MAdmin, Menu:MPMode, Menu:MPrize, Menu:MDyna, Menu:MBuild, Menu:MLaps; new Menu:MRace, Menu:MRacemode, Menu:MFee, Menu:MCPsize, Menu:MDelay; #endif //Forward forward contimer(); forward FireS(); forward NrgUnlock(playerid); forward FireUnlock(playerid); forward LoadUnlock(playerid); forward CountDown(); forward ShowStats(playerid,targetid); forward OnPlayerUpdate(playerid); forward Encrypt(string[]); forward OnPlayerLogin(playerid,const string[]); forward PayDay (playerid); forward RaceRotation(); forward LockRacers(); forward UnlockRacers(); forward SaveScores(); forward GetRaceTick(playerid); forward GetLapTick(playerid); forward ReadyRefresh(); forward RaceSound(playerid,sound); forward BActiveCP(playerid,sele); forward endrace(); forward countdown(); forward mscountdown(); forward SetNextCheckpoint(playerid); forward CheckBestLap(playerid, laptime); forward CheckBestRace(playerid,racetime); forward ChangeLap(playerid); forward SetRaceCheckpoint(playerid,target,next); forward SetBRaceCheckpoint(playerid,target,next); forward LoadTimes(playerid,timemode,tmp[]); forward IsNotAdmin(playerid); forward GetBuilderSlot(playerid); forward b(playerid); forward Float:Distance(Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2); forward clearrace(playerid); forward startrace(); forward LoadRace(tmp[]); forward CreateRaceMenus(); new ystring[128]; new CBuilder[MAX_PLAYER_NAME], CFile[64], CRaceName[128]; new RotationTimer; enum pInfo { pPassword[128], pKills, pDeaths, pCash, }; new PlayerInfo[MAX_PLAYERS][pInfo]; //------------------------------------------------------------------------------ main() { print("\n----------------------------------"); print(" Drift/Race/Tune/Stunt GM"); print(" By: Splitx"); print("Thx To: Kevin433 For Login/Register System"); print("Thx To: Yagu's Race Filterscript v0.4a"); print("Thx To: Full house script by Antironix"); print("----------------------------------\n"); } //------------------------------------------------------------------------------ public OnGameModeInit() { SetGameModeText("Drift/Race/Tune/Stunt"); // The Game mode name AllowAdminTeleport(1); // Allow! The Rcon ADMIN To Tp via The Map ShowNameTags(1); ShowPlayerMarkers(1); SetWorldTime(12); // The Time UsePlayerPedAnims(); //This Is For CJ´s Run Style RaceActive=0; Ranking=1; LCurrentCheckpoint=0; Participants=0; for(new i;i= i && a < i+strlen("fuck")) text[a]='*'; } } } for(new i=0; i<256; i++) { if (strfind(text[i], "bitch", true) == 0) { for(new a=0; a<256; a++) { if (a >= i && a < i+strlen("bitch")) text[a]='*'; } } } for(new i=0; i<256; i++) { if (strfind(text[i], "wtf", true) == 0) { for(new a=0; a<256; a++) { if (a >= i && a < i+strlen("wtf")) text[a]='*'; } } } for(new i=0; i<256; i++) { if (strfind(text[i], "ffs", true) == 0) { for(new a=0; a<256; a++) { if (a >= i && a < i+strlen("ffs")) text[a]='*'; } } } for(new i=0; i<256; i++) { if (strfind(text[i], "omfg", true) == 0) { for(new a=0; a<256; a++) { if (a >= i && a < i+strlen("omfg")) text[a]='*'; } } } return 1; } public OnPlayerConnect(playerid) { TextDrawShowForAll(Textdraw0); TextDrawShowForAll(Textdraw1); SetTimer("contimer",60000,1); TextDrawShowForPlayer(playerid,Textdraw000); TextDrawShowForPlayer(playerid,Textdraw1000); TextDrawShowForPlayer(playerid,Textdraw2); TextDrawShowForPlayer(playerid,Textdraw3); new pName[MAX_PLAYER_NAME]; new string[48]; GetPlayerName(playerid, pName, sizeof(pName)); format(string, sizeof(string), "(( Server: %s has joined the server. ))", pName); SendClientMessageToAll(COLOR_YELLOW, string); SendClientMessage(playerid, COLOR_GREEN, "Welcome"); SendClientMessage(playerid, COLOR_GREEN, "Do"); SendClientMessage(playerid, COLOR_GREEN, "/help For help /Commands For Commands!"); SendClientMessage(playerid, COLOR_GREEN, "/credits For credits"); SendClientMessage(playerid, COLOR_RED, "DM Not Allowd DM = BAN"); SendClientMessage(playerid, COLOR_RED, "Dont Use Kill This Server is BAD word protected"); SendClientMessage(playerid, COLOR_GREEN, "Dont have a Account Do /register (only if u want to save ur data)"); SendClientMessage(playerid, COLOR_GREEN, "Have a Account Do /login (only if u want to save ur data)"); GivePlayerMoney(playerid, 20000); SetPlayerColor(playerid, COLOR_RED); return 1; } AddHouse(houseid, Float:iconX, Float:iconY, Float:iconZ, Float:interiorX, Float:interiorY, Float:interiorZ, Costa, Sella, Interiora) { new house[256]; format(house, sizeof(house), "Houses/houseid%d",houseid); if(!dini_Exists(house)) { dini_Create(house); format(hInfo[houseid][Name], 24, "ForSale"); dini_Set(house, "Name", "ForSale"); format(hInfo[houseid][Renter], 24, "ForRent"); dini_Set(house, "Renter", "ForRent"); hInfo[houseid][Rentable] = 0; dini_IntSet(house, "Rentable", 0); hInfo[houseid][Rentcost] = 0; dini_IntSet(house, "Rentcost", 0); hInfo[houseid][Cost] = Costa; dini_IntSet(house, "Cost", Costa); hInfo[houseid][Sell] = Sella; dini_IntSet(house, "Sell", Sella); hInfo[houseid][Interior] = Interiora; dini_IntSet(house, "Interior", Interiora); hInfo[houseid][Locked] = 1; dini_IntSet(house, "Locked", 1); hInfo[houseid][InteriorX] = interiorX; hInfo[houseid][InteriorY] = interiorY; hInfo[houseid][InteriorZ] = interiorZ; dini_FloatSet(house, "X", interiorX); dini_FloatSet(house, "Y", interiorY); dini_FloatSet(house, "Z", interiorZ); dini_IntSet(house, "RentPay", 0); dini_IntSet(house, "RentGet", 0); cInfo[houseid][HouseCar] = 429; dini_IntSet(house, "HouseCar", 0); cInfo[houseid][CarModel] = 429; dini_IntSet(house, "CarModel", 0); cInfo[houseid][CarX] = 0; cInfo[houseid][CarY] = 0; cInfo[houseid][CarZ] = 0; dini_FloatSet(house, "CarX", 0); dini_FloatSet(house, "CarY", 0); dini_FloatSet(house, "CarZ", 0); cInfo[houseid][CarColor1] = 0; cInfo[houseid][CarColor2] = 0; dini_FloatSet(house, "CarColor1", 0); dini_FloatSet(house, "CarColor2", 0); cInfo[houseid][GotCar] = 0; format(house, sizeof(house),"Houseid%d Has Been Created!",houseid); print(house); } else { format(hInfo[houseid][Name], 24, dini_Get(house, "Name")); format(hInfo[houseid][Renter], 24, dini_Get(house, "Renter")); hInfo[houseid][Rentable] = dini_Int(house, "Rentable"); hInfo[houseid][Rentcost] = dini_Int(house, "Rentcost"); hInfo[houseid][Cost] = dini_Int(house, "Cost"); hInfo[houseid][Sell] = dini_Int(house, "Sell"); hInfo[houseid][Interior] = dini_Int(house, "Interior"); hInfo[houseid][Locked] = dini_Int(house, "Locked"); hInfo[houseid][InteriorX] = dini_Float(house, "X"); hInfo[houseid][InteriorY] = dini_Float(house, "Y"); hInfo[houseid][InteriorZ] = dini_Float(house, "Z"); } hInfo[houseid][iconx]=iconX; hInfo[houseid][icony]=iconY; hInfo[houseid][iconz]=iconZ; format(house, sizeof(house), "Houses/houseid%d",houseid); if(strcmp(hInfo[playericonhouse[houseid]][Name],"ForSale",true)==0) { HousePickup[houseid] = CreatePickup(1273, 23, iconX, iconY, iconZ);//not bought } else { HousePickup[houseid] = CreatePickup(1272,23, iconX, iconY, iconZ);//bought } } AddHouseCar(houseid, modelid, Float:Carx, Float:Cary, Float:Carz, color1, color2, respawn_delay) { new house[256]; format(house, sizeof(house), "Houses/houseid%d",houseid); if(dini_Exists(house)) { new str[256]; cInfo[houseid][GotCar] = 1; if(!dini_Isset(house, "CarModel")) { dini_IntSet(house, "CarModel", modelid); cInfo[houseid][CarModel] = modelid; } else { cInfo[houseid][CarModel] = dini_Int(house, "CarModel"); } cInfo[houseid][CarX] = Carx; cInfo[houseid][CarY] = Cary; cInfo[houseid][CarZ] = Carz; dini_FloatSet(house, "CarX", Carx); dini_FloatSet(house, "CarY", Cary); dini_FloatSet(house, "CarZ", Carz); cInfo[houseid][CarColor1] = color1; cInfo[houseid][CarColor2] = color2; dini_IntSet(house, "CarColor1", color1); dini_IntSet(house, "CarColor2", color2); dini_IntSet(house, "Respawn_Delay", respawn_delay); cInfo[houseid][Respawn_Delay] = respawn_delay; cInfo[houseid][HouseCar] = CreateVehicle(cInfo[houseid][CarModel], Carx, Cary, Carz, 0.0, color1, color2, respawn_delay); format(str, sizeof(str), "Housecar of houseid%d created!", houseid); print(str); } } stock SpawnPlayerAtHouse(playerid) { new str1[256],pname[24],str[256]; GetPlayerName(playerid, pname, sizeof(pname)); format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname)); if (dini_Exists(str1)) { if(dini_Int(str1,"Houseid")!=-255) { new Float:x,Float:y,Float:z; str = dini_Get(str1,"SpawnInt"); SetPlayerInterior(playerid, strval(str)); playerinterior[playerid] = strval(str); x = dini_Float(str1,"SpawnX"); y = dini_Float(str1,"SpawnY"); z = dini_Float(str1,"SpawnZ"); SetPlayerPos(playerid, x, y, z); } } return 1; } public OnPlayerDisconnect(playerid, reason) { Object_OnPlayerDisconnect(playerid, reason); if(RaceParticipant[playerid]>=1) { if(Participants==1) //Last participant leaving, ending race. { endrace(); } if(RaceParticipant[playerid] < 3 && RaceStart == 0 && !(RaceParticipant[playerid]==3 && RaceStart == 1)) { //Doing readycheck since someone left, but not if they disconnected during countdown. ReadyRefresh(); } Participants--; RaceParticipant[playerid]=0; DisablePlayerRaceCheckpoint(playerid); } if(RaceBuilders[playerid] != 0) { DisablePlayerRaceCheckpoint(playerid); for(new i;i0) { TogglePlayerControllable(i,1); if(PlayerVehicles[i] != 0) { PutPlayerInVehicle(i,PlayerVehicles[i],0); PlayerVehicles[i]=0; } } } } public countdown() { if(RaceStart == 0) // Locking players, setting the reward and { RaceStart=1; LockRacers(); new tmpprize, OPot; OPot=Pot; if(PrizeMode == 1 || PrizeMode == 4) { if(Racemode == 0 || Racemode == 3) tmpprize = floatround(RLenght); else if(Racemode == 1) tmpprize = floatround(LLenght * Racelaps); else if(Racemode == 2) tmpprize = floatround(RLenght * 2 * Racelaps); } tmpprize *= DynaMP; if(PrizeMode == 0 || PrizeMode == 3) Pot += Prize; else if(PrizeMode == 1 || PrizeMode == 4) Pot += tmpprize; if(Participants == 1) Pot=OPot; // Only 1 racer, force reward to entrance fees. } if(cd>0) { format(ystring, sizeof(ystring), "%d...",cd); for(new i=0;i1) { RaceSound(i,1056); GameTextForPlayer(i,ystring,1000,3); } } } else if(cd == 0) { format(ystring, sizeof(ystring), "~g~GO!",cd); KillTimer(Countdown); for(new i=0;i1) { RaceSound(i,1057); GameTextForPlayer(i,ystring,3000,3); RaceParticipant[i]=4; CurrentLap[i]=1; if(Racemode == 3) SetRaceCheckpoint(i,LCurrentCheckpoint,LCurrentCheckpoint-1); else SetRaceCheckpoint(i,0,1); } } UnlockRacers(); RaceTick=tickcount(); } cd--; } public SetNextCheckpoint(playerid) { if(Racemode == 0) // Default Mode { CurrentCheckpoint[playerid]++; if(CurrentCheckpoint[playerid] == LCurrentCheckpoint) { SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],-1); RaceParticipant[playerid]=6; } else SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]+1); } else if(Racemode == 1) // Ring Mode { CurrentCheckpoint[playerid]++; if(CurrentCheckpoint[playerid] == LCurrentCheckpoint+1 && CurrentLap[playerid] == Racelaps) { SetRaceCheckpoint(playerid,0,-1); RaceParticipant[playerid]=6; } else if (CurrentCheckpoint[playerid] == LCurrentCheckpoint+1 && CurrentLap[playerid] != Racelaps) { CurrentCheckpoint[playerid]=0; SetRaceCheckpoint(playerid,0,1); RaceParticipant[playerid]=5; } else if(CurrentCheckpoint[playerid] == 1 && RaceParticipant[playerid]==5) { ChangeLap(playerid); if(LCurrentCheckpoint==1) { SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],0); } else { SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],2); } RaceParticipant[playerid]=4; } else { if(LCurrentCheckpoint==1 || CurrentCheckpoint[playerid] == LCurrentCheckpoint) SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],0); else SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]+1); } } else if(Racemode == 2) // Yoyo-mode { if(RaceParticipant[playerid]==4) { if(CurrentCheckpoint[playerid] == LCurrentCheckpoint) // @ Last CP, trigger last-1 { RaceParticipant[playerid]=5; CurrentCheckpoint[playerid]=LCurrentCheckpoint-1; SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1); } else if(CurrentCheckpoint[playerid] == LCurrentCheckpoint-1) // Second last CP, set next accordingly { CurrentCheckpoint[playerid]++; SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1); } else { CurrentCheckpoint[playerid]++; SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]+1); } } else if(RaceParticipant[playerid]==5) { if(CurrentCheckpoint[playerid] == 1 && CurrentLap[playerid] == Racelaps) //Set the finish line { SetRaceCheckpoint(playerid,0,-1); RaceParticipant[playerid]=6; } else if(CurrentCheckpoint[playerid] == 0) //At finish line, change lap. { ChangeLap(playerid); if(LCurrentCheckpoint==1) { SetRaceCheckpoint(playerid,1,0); } else { SetRaceCheckpoint(playerid,1,2); } RaceParticipant[playerid]=4; } else if(CurrentCheckpoint[playerid] == 1) { CurrentCheckpoint[playerid]--; SetRaceCheckpoint(playerid,0,1); } else { CurrentCheckpoint[playerid]--; SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1); } } } else if(Racemode == 3) // Mirror Mode { CurrentCheckpoint[playerid]--; if(CurrentCheckpoint[playerid] == 0) { SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],-1); RaceParticipant[playerid]=6; } else { SetRaceCheckpoint(playerid,CurrentCheckpoint[playerid],CurrentCheckpoint[playerid]-1); } } } public SetRaceCheckpoint(playerid,target,next) { if(next == -1 && Airrace == 0) SetPlayerRaceCheckpoint(playerid,1,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],0.0,0.0,0.0,CPsize); else if(next == -1 && Airrace == 1) SetPlayerRaceCheckpoint(playerid,4,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],0.0,0.0,0.0,CPsize); else if(Airrace == 1) SetPlayerRaceCheckpoint(playerid,3,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],RaceCheckpoints[next][0], RaceCheckpoints[next][1],RaceCheckpoints[next][2],CPsize); else SetPlayerRaceCheckpoint(playerid,0,RaceCheckpoints[target][0],RaceCheckpoints[target][1],RaceCheckpoints[target][2],RaceCheckpoints[next][0],RaceCheckpoints[next][1], RaceCheckpoints[next][2],CPsize); } public SetBRaceCheckpoint(playerid,target,next) { new ar = BAirrace[b(playerid)]; if(next == -1 && ar == 0) SetPlayerRaceCheckpoint(playerid,1,BRaceCheckpoints[b(playerid)][target][0],BRaceCheckpoints[b(playerid)][target][1], BRaceCheckpoints[b(playerid)][target][2],0.0,0.0,0.0,BCPsize[b(playerid)]); else if(next == -1 && ar == 1) SetPlayerRaceCheckpoint(playerid,4,BRaceCheckpoints[b(playerid)][target][0], BRaceCheckpoints[b(playerid)][target][1],BRaceCheckpoints[b(playerid)][target][2],0.0,0.0,0.0, BCPsize[b(playerid)]); else if(ar == 1) SetPlayerRaceCheckpoint(playerid,3,BRaceCheckpoints[b(playerid)][target][0],BRaceCheckpoints[b(playerid)][target][1],BRaceCheckpoints[b(playerid)][target][2], BRaceCheckpoints[b(playerid)][next][0],BRaceCheckpoints[b(playerid)][next][1],BRaceCheckpoints[b(playerid)][next][2],BCPsize[b(playerid)]); else SetPlayerRaceCheckpoint(playerid,0,BRaceCheckpoints[b(playerid)][target][0],BRaceCheckpoints[b(playerid)][target][1],BRaceCheckpoints[b(playerid)][target][2], BRaceCheckpoints[b(playerid)][next][0],BRaceCheckpoints[b(playerid)][next][1],BRaceCheckpoints[b(playerid)][next][2],BCPsize[b(playerid)]); } public GetLapTick(playerid) { new tick, lap; tick=tickcount(); if(CurrentLap[playerid]==1) { lap=tick-RaceTick; LastLapTick[playerid]=tick; } else { lap=tick-LastLapTick[playerid]; LastLapTick[playerid]=tick; } return lap; } public GetRaceTick(playerid) { new tick, race; tick=tickcount(); race=tick-RaceTick; return race; } public OnPlayerEnterRaceCheckpoint(playerid) { if(RaceParticipant[playerid]>=1) // See if the player is participating in a race, allows race builders to do their stuff in peace. { if(RaceParticipant[playerid] == 6) // Player reaches the checkered flag. { new name[MAX_PLAYER_NAME], LapTime, RaceTime; LapTime=GetLapTick(playerid); RaceTime=GetRaceTick(playerid); GetPlayerName(playerid, name, MAX_PLAYER_NAME); RaceParticipant[playerid]=0; RaceSound(playerid,1139); format(ystring,sizeof(ystring),"%s has finished the race, position: %d",name,Ranking); if (Ranking < 4) SendClientMessageToAll(COLOR_GREEN,ystring); else SendClientMessage(playerid,COLOR_GREEN,ystring); if(Racemode == ORacemode && ORacelaps == Racelaps) { new LapString[10],RaceString[10], laprank, racerank; LapString=BeHuman(LapTime); RaceString=BeHuman(RaceTime); format(ystring,sizeof(ystring),"~w~Racetime: %s",RaceString); if(ORacemode!=0) format(ystring,sizeof(ystring),"%s~n~Laptime: %s",ystring,LapString); laprank=CheckBestLap(playerid,LapTime); if(laprank == 1) { format(ystring,sizeof(ystring),"%s~n~~y~LAP RECORD!",ystring); } racerank=CheckBestRace(playerid,RaceTime); if(racerank == 1) { format(ystring,sizeof(ystring),"%s~n~~y~TRACK RECORD!",ystring); } GameTextForPlayer(playerid,ystring,13000,3); } if(Ranking<4) { new winrar; if(Ranking == 1 && Participants == 1) winrar=Pot; // If the player was only participant, give the whole pot. else if(Ranking == 1 && Participants == 2) winrar=Pot/6*4; // If only 2 participants, give 4/6ths of the pot. else winrar=Pot/6*PrizeMP; // Otherwise 3/6ths, 2/6ths and 1/6th. GivePlayerMoney(playerid,winrar); format(ystring,sizeof(ystring),"You have earned $%d from the race!",winrar); PrizeMP--; SendClientMessage(playerid,COLOR_GREEN,ystring); } Ranking++; Participants--; DisablePlayerRaceCheckpoint(playerid); if(Participants == 0) { endrace(); } } else if (RaceStart == 0 && RaceParticipant[playerid]==1) // Player arrives to the start CP for 1st time { SendClientMessage(playerid,COLOR_YELLOW,"Type /ready when you are ready to start."); SendClientMessage(playerid,COLOR_YELLOW,"NOTE: Your controls will be locked once the countdown starts."); RaceParticipant[playerid]=2; } else if (RaceStart==1) // Otherwise switch to the next race CP. { RaceSound(playerid,1138); SetNextCheckpoint(playerid); } } return 1; } public endrace() { SaveScores(); //If the race had already started, and mode & laps are as originally, save the lapscores and racescores. for(new i=0;i= Waiting && MajorityDelay > 0 && MajStart == 0) { MajStart=1; format(ystring,sizeof(ystring),"Half of the racers are ready, race starts in %d seconds!", MajorityDelay); SendClientMessageToAll(COLOR_GREEN,ystring); MajStartTimer = SetTimer("mscountdown",10000,1); mscd= MajorityDelay; } } } public mscountdown() { if(RaceStart == 1 || MajStart == 0) { MajStart=0; KillTimer(MajStartTimer); } else { mscd-=10; if(mscd <= 0) { for(new i;i 0) GameTextForPlayer(i,ystring,6000,3); } } } } public CheckBestLap(playerid,laptime) { if(TopLapTimes[4] laptime) { for(new j=4;j>=i;j--) { TopLapTimes[j+1]=TopLapTimes[j]; TopLappers[j+1]=TopLappers[j]; } new playername[MAX_PLAYER_NAME]; GetPlayerName(playerid,playername,MAX_PLAYER_NAME); TopLapTimes[i]=laptime; TopLappers[i]=playername; ScoreChange=1; return i+1; } } return -1; //Shouldn't get here. } public CheckBestRace(playerid,racetime) { if(TopRacerTimes[4] racetime) { for(new j=4;j>=i;j--) { TopRacerTimes[j+1]=TopRacerTimes[j]; TopRacers[j+1]=TopRacers[j]; } new playername[MAX_PLAYER_NAME]; GetPlayerName(playerid,playername,MAX_PLAYER_NAME); TopRacerTimes[i]=racetime; TopRacers[i]=playername; ScoreChange=1; return i+1; } } return -1; //Shouldn't get here. } public SaveScores() { if(ScoreChange == 1) { fremove(CFile); new File:f,Float:x,Float:y,Float:z, templine[512]; f = fopen(CFile,io_write); format(templine,sizeof(templine),"YRACE %d %s %d %d %d %f\n", RACEFILE_VERSION, CBuilder, ORacemode, ORacelaps, OAirrace, OCPsize); fwrite(f,templine); format(templine,sizeof(templine),"%s %d %s %d %s %d %s %d %s %d\n", TopRacers[0],TopRacerTimes[0],TopRacers[1], TopRacerTimes[1], TopRacers[2],TopRacerTimes[2], TopRacers[3],TopRacerTimes[3],TopRacers[4], TopRacerTimes[4]); fwrite(f,templine); format(templine,sizeof(templine),"%s %d %s %d %s %d %s %d %s %d\n", TopLappers[0],TopLapTimes[0],TopLappers[1], TopLapTimes[1], TopLappers[2],TopLapTimes[2], TopLappers[3],TopLapTimes[3],TopLappers[4], TopLapTimes[4]); fwrite(f,templine); for(new i = 0; i < LCurrentCheckpoint+1;i++) { x=RaceCheckpoints[i][0]; y=RaceCheckpoints[i][1]; z=RaceCheckpoints[i][2]; format(templine,sizeof(templine),"%f %f %f\n",x,y,z); fwrite(f,templine); } fclose(f); } ScoreChange=0; } public ChangeLap(playerid) { new LapTime, TimeString[10], checklap; LapTime=GetLapTick(playerid); TimeString=BeHuman(LapTime); format(ystring,sizeof(ystring),"~w~Lap %d/%d - time: %s", CurrentLap[playerid], Racelaps, TimeString); if(Racemode == ORacemode && ORacelaps == Racelaps) { checklap=CheckBestLap(playerid,LapTime); if(checklap==1) format(ystring,sizeof(ystring),"%s~n~~y~LAP RECORD!",ystring); } CurrentLap[playerid]++; if(CurrentLap[playerid] == Racelaps) format(ystring,sizeof(ystring),"%s~n~~g~Final lap!",ystring); GameTextForPlayer(playerid,ystring,6000,3); } BeHuman(ticks) { new HumanTime[10], minutes, seconds, secstring[2], msecstring[3]; minutes=ticks/60000; ticks=ticks-(minutes*60000); seconds=ticks/1000; ticks=ticks-(seconds*1000); if(seconds <10) format(secstring,sizeof(secstring),"0%d",seconds); else format(secstring,sizeof(secstring),"%d",seconds); format(HumanTime,sizeof(HumanTime),"%d:%s",minutes,secstring); if(ticks < 10) format(msecstring,sizeof(msecstring),"00%d", ticks); else if(ticks < 100) format(msecstring,sizeof(msecstring),"0%d",ticks); else format(msecstring,sizeof(msecstring),"%d",ticks); format(HumanTime,sizeof(HumanTime),"%s.%s",HumanTime,msecstring); return HumanTime; } public LoadTimes(playerid,timemode,tmp[]) { new temprace[67], idx; format(temprace,sizeof(temprace),"%s.yr",tmp); if(strlen(tmp)) { if(!fexist(temprace)) { format(ystring,sizeof(ystring),"Race \'%s\' doesn't exist!",tmp); SendClientMessage(playerid,COLOR_YELLOW,ystring); return 1; } else { new File:f, templine[256], TBuilder[MAX_PLAYER_NAME], TempLapper[MAX_PLAYER_NAME], TempLap; idx=0; f = fopen(temprace, io_read); fread(f,templine,sizeof(templine)); // Read header-line if(templine[0] == 'Y') //Checking if the racefile is v0.2+ { new fileversion; strtok(templine,idx); // read off YRACE fileversion = strval(strtok(templine,idx)); // read off the file version if(fileversion > RACEFILE_VERSION) // Check if the race is made with a newer version of the racefile format { format(ystring,sizeof(ystring),"Race \'%s\' is created with a newer version of YRACE, unable to load.",tmp); SendClientMessage(playerid,COLOR_RED,ystring); return 1; } TBuilder=strtok(templine,idx); // read off RACEBUILDER fread(f,templine,sizeof(templine)); // read off best race times if(timemode ==1) fread(f,templine,sizeof(templine)); // read off best lap times idx=0; if(timemode == 0) format(ystring,sizeof(ystring),"%s by %s - Best race times:",tmp,TBuilder); else if(timemode == 1) format(ystring,sizeof(ystring),"%s by %s - Best laps:",tmp,TBuilder); else return 1; SendClientMessage(playerid,COLOR_GREEN,ystring); for(new i=0;i<5;i++) { TempLapper=strtok(templine,idx); TempLap=strval(strtok(templine,idx)); if(TempLap == 0) { format(ystring,sizeof(ystring),"%d. None yet",i+1); i=6; } else format(ystring,sizeof(ystring),"%d. %s - %s",i+1,BeHuman(TempLap),TempLapper); SendClientMessage(playerid,COLOR_GREEN,ystring); } return 1; } else { format(ystring,sizeof(ystring),"Race \'%s\' doesn't contain any time data.",tmp); SendClientMessage(playerid,COLOR_GREEN,ystring); return 1; } } } return 0; } public IsNotAdmin(playerid) { if (!IsPlayerAdmin(playerid)) { SendClientMessage(playerid, COLOR_RED, "You need to be an admin to use this command!"); return 1; } return 0; } public GetBuilderSlot(playerid) { for(new i;i < MAX_BUILDERS; i++) { if(!(BuilderSlots[i] < MAX_PLAYERS+1)) { BuilderSlots[i] = playerid; RaceBuilders[playerid] = i+1; return i+1; } } return 0; } public b(playerid) return RaceBuilders[playerid]-1; public Float:Distance(Float:x1,Float:y1,Float:z1,Float:x2,Float:y2,Float:z2) { new Float:temp=floatsqroot((x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) + (z1-z2) * (z1-z2)); if(temp < 0) temp=temp*(-1); return temp; } public clearrace(playerid) { for(new i=0;i= 2) format(ystring,sizeof(ystring),"%s Join fee: %d",ystring,JoinFee); if(Airrace == 1) format(ystring,sizeof(ystring),"%s AIR RACE",ystring); if(Racemode == 0 || Racemode == 3) format(ystring,sizeof(ystring),"%s Track lenght: %0.2fkm", ystring, RLenght/1000); else if(Racemode == 1) format(ystring,sizeof(ystring),"%s Lap lenght: %.2fkm, Total: %.2fkm", ystring, LLenght/1000, LLenght * Racelaps / 1000); SendClientMessageToAll(COLOR_GREEN,ystring); RaceStart=0; RaceActive=1; ScoreChange=0; Ranking=1; PrizeMP=3; } public LoadRace(tmp[]) { new race_name[32],templine[512]; format(CRaceName,sizeof(CRaceName), "%s",tmp); format(race_name,sizeof(race_name), "%s.yr",tmp); if(!fexist(race_name)) return -1; // File doesn't exist CFile=race_name; LCurrentCheckpoint=-1; RLenght=0; RLenght=0; new File:f, i; f = fopen(race_name, io_read); fread(f,templine,sizeof(templine)); if(templine[0] == 'Y') //Checking if the racefile is v0.2+ { new fileversion; strtok(templine,i); // read off YRACE fileversion = strval(strtok(templine,i)); // read off the file version if(fileversion > RACEFILE_VERSION) return -2; // Check if the race is made with a newer version of the racefile format CBuilder=strtok(templine,i); // read off RACEBUILDER ORacemode = strval(strtok(templine,i)); // read off racemode ORacelaps = strval(strtok(templine,i)); // read off amount of laps if(fileversion > 1) { Airrace = strval(strtok(templine,i)); // read off airrace CPsize = floatstr(strtok(templine,i)); // read off CP size } else // v1 file format, set to default { Airrace = 0; CPsize = 8.0; } OAirrace = Airrace; OCPsize = CPsize; Racemode=ORacemode; Racelaps=ORacelaps; //Allows changing the modes, but disables highscores if they've been changed. fread(f,templine,sizeof(templine)); // read off best race times i=0; for(new j=0;j<5;j++) { TopRacers[j]=strtok(templine,i); TopRacerTimes[j]=strval(strtok(templine,i)); } fread(f,templine,sizeof(templine)); // read off best lap times i=0; for(new j=0;j<5;j++) { TopLappers[j]=strtok(templine,i); TopLapTimes[j]=strval(strtok(templine,i)); } } else //Otherwise add the lines as checkpoints, the file is made with v0.1 (or older) version of the script. { LCurrentCheckpoint++; RaceCheckpoints[LCurrentCheckpoint][0] = floatstr(strtok(templine,i)); RaceCheckpoints[LCurrentCheckpoint][1] = floatstr(strtok(templine,i)); RaceCheckpoints[LCurrentCheckpoint][2] = floatstr(strtok(templine,i)); Racemode=0; ORacemode=0; Racelaps=0; ORacelaps=0; //Enables converting old files to new versions CPsize = 8.0; Airrace = 0; // v2 additions OCPsize = CPsize; OAirrace = Airrace; // v2 additions CBuilder="UNKNOWN"; for(new j;j<5;j++) { TopLappers[j]="A"; TopLapTimes[j]=0; TopRacers[j]="A"; TopRacerTimes[j]=0; } } while(fread(f,templine,sizeof(templine),false)) { LCurrentCheckpoint++; i=0; RaceCheckpoints[LCurrentCheckpoint][0] = floatstr(strtok(templine,i)); RaceCheckpoints[LCurrentCheckpoint][1] = floatstr(strtok(templine,i)); RaceCheckpoints[LCurrentCheckpoint][2] = floatstr(strtok(templine,i)); if(LCurrentCheckpoint >= 1) { RLenght+=Distance(RaceCheckpoints[LCurrentCheckpoint][0],RaceCheckpoints[LCurrentCheckpoint][1], RaceCheckpoints[LCurrentCheckpoint][2],RaceCheckpoints[LCurrentCheckpoint-1][0], RaceCheckpoints[LCurrentCheckpoint-1][1],RaceCheckpoints[LCurrentCheckpoint-1][2]); } } LLenght = RLenght + Distance(RaceCheckpoints[LCurrentCheckpoint][0],RaceCheckpoints[LCurrentCheckpoint][1], RaceCheckpoints[LCurrentCheckpoint][2],RaceCheckpoints[0][0],RaceCheckpoints[0][1], RaceCheckpoints[0][2]); fclose(f); return 1; } public RaceRotation() { if(!fexist("yrace.rr")) { printf("ERROR in YRACE's Race Rotation (yrace.rr): yrace.rr doesn't exist!"); return -1; } if(RRotation == -1) { KillTimer(RotationTimer); return -1; // RRotation has been disabled } if(Participants > 0) return 1; // A race is still active. new File:f, templine[32], rotfile[]="yrace.rr", rraces=-1, rracenames[32][32], idx, fback; f = fopen(rotfile, io_read); while(fread(f,templine,sizeof(templine),false)) { idx = 0; rraces++; rracenames[rraces]=strtok(templine,idx); } fclose(f); RRotation++; if(RRotation > rraces) RRotation = 0; fback = LoadRace(rracenames[RRotation]); if(fback == -1) printf("ERROR in YRACE's Race Rotation (yrace.rr): Race \'%s\' doesn't exist!",rracenames[RRotation]); else if (fback == -2) printf("ERROR in YRACE's Race Rotation (yrace.rr): Race \'%s\' is created with a newer version of YRACE",rracenames[RRotation]); else startrace(); return 1; } #if defined MENUSYSTEM public RefreshMenuHeader(playerid,Menu:menu,text[]) { SetMenuColumnHeader(menu,0,text); ShowMenuForPlayer(menu,playerid); } public CreateRaceMenus() { //Admin menu MAdmin = CreateMenu("Admin menu", 1, 25, 170, 220, 25); AddMenuItem(MAdmin,0,"Set prizemode..."); AddMenuItem(MAdmin,0,"Set fixed prize..."); AddMenuItem(MAdmin,0,"Set dynamic prize..."); AddMenuItem(MAdmin,0,"Set entry fees..."); AddMenuItem(MAdmin,0,"Majority delay..."); AddMenuItem(MAdmin,0,"End current race"); AddMenuItem(MAdmin,0,"Toggle Race Admin [RA]"); AddMenuItem(MAdmin,0,"Toggle Build Admin [BA]"); AddMenuItem(MAdmin,0,"Toggle Race Rotation [RR]"); AddMenuItem(MAdmin,0,"Leave"); if(RaceAdmin == 1) format(ystring,sizeof(ystring),"RA: ON"); else format(ystring,sizeof(ystring),"RA: off"); if(BuildAdmin == 1) format(ystring,sizeof(ystring),"%s BA: ON",ystring); else format(ystring,sizeof(ystring),"%s BA: off",ystring); if(RRotation >= 0) format(ystring,sizeof(ystring),"%s RR: ON",ystring); else format(ystring,sizeof(ystring),"%s RR: off",ystring); SetMenuColumnHeader(MAdmin,0,ystring); //Prizemode menu [Admin submenu] MPMode = CreateMenu("Set prizemode:", 1, 25, 170, 220, 25); AddMenuItem(MPMode,0,"Fixed"); AddMenuItem(MPMode,0,"Dynamic"); AddMenuItem(MPMode,0,"Entry Fee"); AddMenuItem(MPMode,0,"Entry Fee + Fixed"); AddMenuItem(MPMode,0,"Entry Fee + Dynamic"); AddMenuItem(MPMode,0,"Back"); SetMenuColumnHeader(MPMode,0,"Mode: Fixed"); //Fixed prize menu MPrize = CreateMenu("Fixed prize:", 1, 25, 170, 220, 25); AddMenuItem(MPrize,0,"+100$"); AddMenuItem(MPrize,0,"+1000$"); AddMenuItem(MPrize,0,"+10000$"); AddMenuItem(MPrize,0,"-100$"); AddMenuItem(MPrize,0,"-1000$"); AddMenuItem(MPrize,0,"-10000$"); AddMenuItem(MPrize,0,"Back"); format(ystring,sizeof(ystring),"Amount: %d",Prize); SetMenuColumnHeader(MPrize,0,ystring); //Dynamic prize menu MDyna = CreateMenu("Dynamic Prize:", 1, 25, 170, 220, 25); AddMenuItem(MDyna,0,"+1x"); AddMenuItem(MDyna,0,"+5x"); AddMenuItem(MDyna,0,"-1x"); AddMenuItem(MDyna,0,"-5x"); AddMenuItem(MDyna,0,"Leave"); format(ystring,sizeof(ystring),"Multiplier: %dx",DynaMP); SetMenuColumnHeader(MDyna,0,ystring); //Build Menu MBuild = CreateMenu("Build Menu", 1, 25, 170, 220, 25); AddMenuItem(MBuild,0,"Set laps..."); AddMenuItem(MBuild,0,"Set racemode..."); AddMenuItem(MBuild,0,"Checkpoint size..."); AddMenuItem(MBuild,0,"Toggle air race"); AddMenuItem(MBuild,0,"Clear the race and exit"); AddMenuItem(MBuild,0,"Leave"); SetMenuColumnHeader(MBuild,0,"Air race: off"); //Laps menu MLaps = CreateMenu("Set laps", 1, 25, 170, 220, 25); AddMenuItem(MLaps,0,"+1"); AddMenuItem(MLaps,0,"+5"); AddMenuItem(MLaps,0,"+10"); AddMenuItem(MLaps,0,"-1"); AddMenuItem(MLaps,0,"-5"); AddMenuItem(MLaps,0,"-10"); AddMenuItem(MLaps,0,"Back"); //Racemode menu MRacemode = CreateMenu("Racemode", 1, 25, 170, 220, 25); AddMenuItem(MRacemode,0,"Default"); AddMenuItem(MRacemode,0,"Ring"); AddMenuItem(MRacemode,0,"Yoyo"); AddMenuItem(MRacemode,0,"Mirror"); AddMenuItem(MRacemode,0,"Back"); //Race menu MRace = CreateMenu("Race Menu", 1, 25, 170, 220, 25); AddMenuItem(MRace,0,"Set laps..."); AddMenuItem(MRace,0,"Set racemode..."); AddMenuItem(MRace,0,"Set checkpoint size..."); AddMenuItem(MRace,0,"Toggle air race"); AddMenuItem(MRace,0,"Start race"); AddMenuItem(MRace,0,"Abort new race"); //Entry fee menu MFee = CreateMenu("Entry fees", 1, 25, 170, 220, 25); AddMenuItem(MFee,0,"+100"); AddMenuItem(MFee,0,"+1000"); AddMenuItem(MFee,0,"+10000"); AddMenuItem(MFee,0,"-100"); AddMenuItem(MFee,0,"-1000"); AddMenuItem(MFee,0,"-10000"); AddMenuItem(MFee,0,"Back"); format(ystring,sizeof(ystring),"Fee: %d$",JoinFee); SetMenuColumnHeader(MFee,0,ystring); //CP size menu MCPsize = CreateMenu("CP size", 1, 25, 170, 220, 25); AddMenuItem(MCPsize,0,"+0.1"); AddMenuItem(MCPsize,0,"+1"); AddMenuItem(MCPsize,0,"+10"); AddMenuItem(MCPsize,0,"-0.1"); AddMenuItem(MCPsize,0,"-1"); AddMenuItem(MCPsize,0,"-10"); AddMenuItem(MCPsize,0,"Back"); //Majority Delay menu MDelay = CreateMenu("Majority Delay", 1, 25, 170, 220, 25); AddMenuItem(MDelay,0,"+10s"); AddMenuItem(MDelay,0,"+60s"); AddMenuItem(MDelay,0,"-10s"); AddMenuItem(MDelay,0,"-60s"); AddMenuItem(MDelay,0,"Back"); if(MajorityDelay == 0) format(ystring,sizeof(ystring),"Delay: disabled"); else format(ystring,sizeof(ystring),"Delay: %ds",MajorityDelay); SetMenuColumnHeader(MDelay,0,ystring); } public OnPlayerCommandText(playerid, cmdtext[]) { //House commands dcmd(buy,3,cmdtext); dcmd(sell,4,cmdtext); dcmd(enter,5,cmdtext); dcmd(exit,4,cmdtext); dcmd(lock,4,cmdtext); dcmd(unlock,6,cmdtext); dcmd(home,4,cmdtext); dcmd(setrent,7,cmdtext); dcmd(rent,4,cmdtext); dcmd(unrent,6,cmdtext); dcmd(house,5,cmdtext); dcmd(housestats,10,cmdtext); dcmd(getrent,7,cmdtext); dcmd(payrent,7,cmdtext); dcmd(ordercar,8,cmdtext); //Admin veh sel if(strcmp(cmdtext, "/veh", true) == 0) { if(IsPlayerAdmin(playerid)) { TogglePlayerControllable(playerid, 0); ShowMenuForPlayer(VehliceMenu,playerid); } else { SendClientMessage(playerid, COLOR_RED,"OMG NOT ALLOWED"); } return 1; } //Admin Help if(strcmp(cmdtext, "/ah", true) == 0) { if(IsPlayerAdmin(playerid)) { SendClientMessage(playerid, COLOR_RED,"*******[AdminHELP For NOOB ADMINS!!]****************"); SendClientMessage(playerid, COLOR_RED,"/veh xD"); } else { SendClientMessage(playerid, COLOR_RED,"OMG NOT ALLOWED"); } return 1; } //join if (strcmp(cmdtext, "/join", true)==0) { if(RaceBuilders[playerid] != 0) { SendClientMessage(playerid, COLOR_YELLOW, "You are currently building a race, can't join. Use /clearrace to exit build mode."); return 1; } if(RaceParticipant[playerid]>0) { SendClientMessage(playerid, COLOR_YELLOW, "You've already joined the race!"); } else if(RaceActive==1 && RaceStart==0) { if(PrizeMode >= 2 && GetPlayerMoney(playerid) < JoinFee) { format(ystring,sizeof(ystring),"You don't have enough money to join the race! (Join fee: %d$)",JoinFee); SendClientMessage(playerid, COLOR_YELLOW, ystring); return 1; } else if (PrizeMode >= 2) { new tempval; tempval=(-1)*JoinFee; GivePlayerMoney(playerid,tempval); Pot+=JoinFee; } CurrentCheckpoint[playerid]=0; if(Racemode == 3) { SetRaceCheckpoint(playerid,LCurrentCheckpoint,LCurrentCheckpoint-1); CurrentCheckpoint[playerid]=LCurrentCheckpoint; } else SetRaceCheckpoint(playerid,0,1); RaceParticipant[playerid]=1; CurrentLap[playerid]=0; SendClientMessage(playerid, COLOR_GREEN, "You have joined the race, go to the start!"); Participants++; } else if(RaceActive==1 && RaceStart==1) { SendClientMessage(playerid, COLOR_YELLOW, "The race has already started, can't join."); } else { SendClientMessage(playerid, COLOR_YELLOW, "There is no race you can join."); } return 1; } //Ready if (strcmp(cmdtext, "/Ready", true)==0) { new PState=GetPlayerState(playerid); if(RaceParticipant[playerid]==2 && PState != PLAYER_STATE_PASSENGER) { SendClientMessage(playerid,COLOR_GREEN,"You are now ready. Type /ready again to cancel."); RaceParticipant[playerid]=3; ReadyRefresh(); } else if (RaceParticipant[playerid]==3 && RaceStart==0) { SendClientMessage(playerid,COLOR_YELLOW,"You are now not ready. Type /ready when you are."); RaceParticipant[playerid]=2; } else if (PState == PLAYER_STATE_PASSENGER) SendClientMessage(playerid,COLOR_YELLOW,"You need to be driving for yourself!"); else if(RaceParticipant[playerid] == 1) SendClientMessage(playerid,COLOR_YELLOW,"You must have visited the starting CP to /ready."); else SendClientMessage(playerid,COLOR_YELLOW,"You have not participated in a race."); return 1; } //car locking code if (strcmp(cmdtext, "/lock", true)==0) { if(IsPlayerInAnyVehicle(playerid)) { new State=GetPlayerState(playerid); if(State!=PLAYER_STATE_DRIVER) { SendClientMessage(playerid,0xFFFF00AA,"You can only lock the doors as the driver."); return 1; } new i; for(i=0;i= 5) { CountDown(); return 1; } else { SendClientMessage(playerid, 0xFFFF00AA, "An countdown is already running! Wait untill its over first!!"); return 1; } } if (strcmp(cmdtext, "/flip", true)==0) { new VehicleID, Float:X, Float:Y, Float:Z; GetPlayerPos(playerid, X, Y, Z); VehicleID = GetPlayerVehicleID(playerid); SetVehiclePos(VehicleID, X, Y, Z); SetVehicleZAngle(VehicleID, 0); return 1; } if(strcmp(cmdtext, "/kill", true) == 0) { SetPlayerHealth(playerid,0); return 1; } if(strcmp(cmdtext, "/fix", true) == 0) { SetVehicleHealth(playerid,1000); return 1; } //Commands if(strcmp(cmdtext, "/commands", true) == 0) { SendClientMessage(playerid, COLOR_GREEN, "*********[Commands]***********"); SendClientMessage(playerid, COLOR_GREEN, "/count /Me /flip /credits /tph /kill /stop /mhelp /Stats /ah (admin)"); SendClientMessage(playerid, COLOR_GREEN, "/nrg /loadw (loads fire work on 5 StaR! Roof /firew (To shoot Fire Work) /loadb(cannon),/fireb"); return 1; } //Help if(strcmp(cmdtext, "/help", true) == 0) { SendClientMessage(playerid, COLOR_GREEN, "*********[Help]***********"); SendClientMessage(playerid, COLOR_GREEN, "/Commands For Commands"); SendClientMessage(playerid, COLOR_GREEN, "/credits For Credits"); SendClientMessage(playerid, COLOR_GREEN, "/tph For Tp Commands"); return 1; } //Credits if(strcmp(cmdtext, "/credits", true) == 0) { SendClientMessage(playerid, COLOR_GREEN, "*********[CREDITS]***********"); SendClientMessage(playerid, COLOR_GREEN, "*******Made By: Splitx*******"); SendClientMessage(playerid, COLOR_GREEN, "*******Drift/Race/Tune/Stunt*******"); SendClientMessage(playerid, COLOR_GREEN, "*Thx To: Kevin433 For Login/Register System / And Yagu for The Race FS*"); SendClientMessage(playerid, COLOR_GREEN, "*Thx To Every 1 That Helped Me out!*"); SendClientMessage(playerid, COLOR_GREEN, "********************************"); return 1; } if(strcmp(cmdtext, "/tph", true) == 0) { SendClientMessage(playerid, COLOR_GREEN, "*********[TelePortHelp]***********"); SendClientMessage(playerid, COLOR_GREEN, "/race For Race Tp /Bigj For Big Jump"); SendClientMessage(playerid, COLOR_GREEN, "/race2 For Race Tp /jum For Jump!"); SendClientMessage(playerid, COLOR_GREEN, "/drift for drift tp"); SendClientMessage(playerid, COLOR_GREEN, "/drift2 for drift tp"); SendClientMessage(playerid, COLOR_GREEN, "/drift3 for drift tp"); SendClientMessage(playerid, COLOR_GREEN, "/drift4 for drift tp"); SendClientMessage(playerid, COLOR_GREEN, "/tune For Spawn at all cars"); SendClientMessage(playerid, COLOR_GREEN, "/tunels = Trans frender"); SendClientMessage(playerid, COLOR_GREEN, "/tunesf = Wheel Arch Angels"); SendClientMessage(playerid, COLOR_GREEN, "/stunt For Stunt Zone"); SendClientMessage(playerid, COLOR_GREEN, "********************************"); return 1; } if(strcmp(cmdtext, "/mhelp", true) == 0) { SendClientMessage(playerid, COLOR_GREEN, "*********[MiSSioN-HeLp]***********"); SendClientMessage(playerid, COLOR_GREEN, "Every Payday A mission will come! go to The Red marKer *IN* A Car To sell it And u will Get 10.000"); SendClientMessage(playerid, COLOR_GREEN, "To Stip The Mission Type /stop"); SendClientMessage(playerid, COLOR_GREEN, "********************************"); return 1; } //Drift if(!strcmp(cmdtext,"/drift",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, 1253.2285,-2037.4835,59.2695); } else { SetPlayerPos(playerid, 1253.2285,-2037.4835,59.2695); } return 1; } //Drift2 if(!strcmp(cmdtext,"/drift2",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, 2274.8635,1389.8893,42.4733); } else { SetPlayerPos(playerid, 2274.8635,1389.8893,42.4733); } return 1; } //DRift3 if(!strcmp(cmdtext,"/drift3",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, -2411.0278,-607.6990,132.6415); } else { SetPlayerPos(playerid, -2411.0278,-607.6990,132.6415); } return 1; } //Drift4 if(!strcmp(cmdtext,"/drift4",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, -346.4654,1524.0566,75.3473); } else { SetPlayerPos(playerid, -346.4654,1524.0566,75.3473); } return 1; } //Tune if(!strcmp(cmdtext,"/tune",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, -2667.7813,223.1301,3.8615); } else { SetPlayerPos(playerid, -2667.7813,223.1301,3.8615); } return 1; } //Tunels if(!strcmp(cmdtext,"/tunels",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, 1039.0768,-1037.3727,31.7109); } else { SetPlayerPos(playerid, 1039.0768,-1037.3727,31.7109); } return 1; } //Tunesf if(!strcmp(cmdtext,"/tunesf",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, -2702.9797,215.2987,4.1797); } else { SetPlayerPos(playerid, -2702.9797,215.2987,4.1797); } return 1; } //Rece if(!strcmp(cmdtext,"/race",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, 1396.1069,-2509.1196,13.5547); } else { SetPlayerPos(playerid, 1396.1069,-2509.1196,13.5547); } return 1; } //Race2 if(!strcmp(cmdtext,"/race2",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, 451.4817,2507.4277,19.4912); } else { SetPlayerPos(playerid, 451.4817,2507.4277,19.4912); } return 1; } //Stunt if(!strcmp(cmdtext,"/stunt",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, 1698.6154,1608.4980,10.7019); } else { SetPlayerPos(playerid, 1698.6154,1608.4980,10.7019); } return 1; } //Big jump if(!strcmp(cmdtext,"/bigj",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, 2602.7456,-1047.9460,172.5956); } else { SetPlayerPos(playerid, 2602.7456,-1047.9460,172.5956); } return 1; } //Jump if(!strcmp(cmdtext,"/Jum",true)) { if (GetPlayerState(playerid) == 2) { new tmpcar = GetPlayerVehicleID(playerid); SetVehiclePos(tmpcar, 2249.0579,-184.9091,1.3464); } else { SetPlayerPos(playerid, 2249.0579,-184.9091,1.3464); } return 1; } //login new cmd[256]; new idx; cmd = strtok(cmdtext, idx); new tmp[256]; new playername[MAX_PLAYER_NAME]; if (strcmp(cmd, "/login", true) ==0 ) { if(IsPlayerConnected(playerid)) { new tmppass[64]; if(gPlayerLogged[playerid] == 1) { SendClientMessage(playerid, COLOR_GREY, " You are already logged in."); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GREY, " USAGE: /login [password]"); return 1; } strmid(tmppass, tmp, 0, strlen(cmdtext), 255); Encrypt(tmppass); OnPlayerLogin(playerid,tmppass); } return 1; } if (strcmp(cmd, "/register", true)==0) { new string[265]; tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GREY, "USAGE: /register [password]"); return 1; } if (gPlayerAccount[playerid] == 1) { SendClientMessage(playerid, COLOR_GREY, " That name is already registered"); return 1; } strmid(PlayerInfo[playerid][pPassword], tmp, 0, strlen(cmdtext), 255); Encrypt(PlayerInfo[playerid][pPassword]); GetPlayerName(playerid, playername, sizeof(playername)); format(string, sizeof(string), "%s.cer", playername); new File: file = fopen(string, io_read); if (file) { SendClientMessage(playerid, COLOR_GREY, " That name is already registered"); fclose(file); return 1; } new File:hFile; hFile = fopen(string, io_append); new var[32];// format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var); format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var); format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var); PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid); format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var); fclose(hFile); SendClientMessage(playerid, COLOR_WHITE, "Succesfully Registered!"); SendClientMessage(playerid, COLOR_WHITE, "Next time you connect, type /login to log in."); OnPlayerLogin(playerid,PlayerInfo[playerid][pPassword]); return 1; } if (strcmp(cmd, "/stats", true) == 0) { if(IsPlayerConnected(playerid)) { if (gPlayerLogged[playerid] != 0) { ShowStats(playerid,playerid); } else { SendClientMessage(playerid, COLOR_GRAD1, " You are not Logged in !"); } } return 1; } return 0; } dcmd_sell(playerid,params[]) { #pragma unused params new timestamp = GetTickCount(); if(timestamp - inhousepickup > 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new str[255],str1[256],pname[24]; GetPlayerName(playerid, pname, 24); format(str1, sizeof(str1), "Houses/houseid%d", playericonhouse[playerid]); if (strcmp(hInfo[playericonhouse[playerid]][Name],pname,false)) return SendClientMessage(playerid, c_r, "This house isn't yours!"); SendClientMessage(playerid, c_y, "You have sold your house!"); format(str, sizeof(str), "%s has sold houseid 0",pname); print(str); GivePlayerMoney(playerid, hInfo[playericonhouse[playerid]][Sell]); dini_Set(str1, "Name", "ForSale"); hInfo[playericonhouse[playerid]][Locked] = dini_IntSet(str1,"Locked",1); format(hInfo[playericonhouse[playerid]][Name],255,"ForSale"); format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname)); if (!dini_Exists(str1)) dini_Create(str1); dini_IntSet(str1, "Houseid", -255); DestroyPickup(HousePickup[playericonhouse[playerid]]); HousePickup[playericonhouse[playerid]] = CreatePickup(1273, 23, hInfo[playericonhouse[playerid]][iconx], hInfo[playericonhouse[playerid]][icony], hInfo[playericonhouse[playerid]][iconz]); RemovePlayerMapIcon(playerid, housemapicon[playerid]); return 1; } dcmd_buy(playerid,params[]) { #pragma unused params new timestamp = GetTickCount(); if(timestamp - inhousepickup > 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new str[255],str1[255],pname[24]; GetPlayerName(playerid, pname, 24); format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname)); if(dini_Exists(str1)) { if (dini_Int(str1, "Houseid")!=-255) return SendClientMessage(playerid, c_r, "You can only buy one house!"); } format(str1, sizeof(str1), "Houses/houseid%d", playericonhouse[playerid]); if (strcmp(hInfo[playericonhouse[playerid]][Name],"ForSale",true)) return SendClientMessage(playerid, c_r, "This house isn't for sale!"); if(GetPlayerMoney(playerid) 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new str1[256],pname[24]; GetPlayerName(playerid, pname, 24); format(str1, sizeof(str1), "Houses/houseid%d", playericonhouse[playerid]); if(strcmp(hInfo[playericonhouse[playerid]][Name],pname,true)==0) { SendClientMessage(playerid, c_y, "You have locked your house!"); dini_IntSet(str1,"Locked",1); hInfo[playericonhouse[playerid]][Locked] = 1; } else if(strcmp(hInfo[playericonhouse[playerid]][Renter],pname,true)==0) { SendClientMessage(playerid, c_y, "You have locked your house!"); dini_IntSet(str1,"Locked",1); hInfo[playericonhouse[playerid]][Locked] = 1; } else { SendClientMessage(playerid, c_r, "This house isn't yours!"); } return 1; } dcmd_unlock(playerid,params[]) { #pragma unused params new timestamp = GetTickCount(); if(timestamp - inhousepickup > 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new str1[256],pname[24]; GetPlayerName(playerid, pname, 24); format(str1, sizeof(str1), "Houses/houseid%d", playericonhouse[playerid]); if(strcmp(hInfo[playericonhouse[playerid]][Name],pname,true)==0) { SendClientMessage(playerid, c_y, "You have unlocked your house!"); dini_IntSet(str1,"Locked",0); hInfo[playericonhouse[playerid]][Locked] = 0; } else if(strcmp(hInfo[playericonhouse[playerid]][Renter],pname,true)==0) { SendClientMessage(playerid, c_y, "You have unlocked your house!"); dini_IntSet(str1,"Locked",0); hInfo[playericonhouse[playerid]][Locked] = 0; } else { SendClientMessage(playerid, c_r, "This house isn't yours!"); } return 1; } dcmd_enter(playerid,params[]) { #pragma unused params new timestamp = GetTickCount(); if(timestamp - inhousepickup > 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new str1[255],pname[24]; GetPlayerPos(playerid, housex, housey, housez); format(str1, sizeof(str1), "Houses/houseid%d", playericonhouse[playerid]); GetPlayerName(playerid, pname, 24); if(hInfo[playericonhouse[playerid]][Locked]==1) return SendClientMessage(playerid, c_r, "This house is locked!"); SendClientMessage(playerid, c_y, "You entered the house!"); SetPlayerInterior(playerid, hInfo[playericonhouse[playerid]][Interior]); SetPlayerPos(playerid, hInfo[playericonhouse[playerid]][InteriorX], hInfo[playericonhouse[playerid]][InteriorY], hInfo[playericonhouse[playerid]][InteriorZ]); playerinterior[playerid] = hInfo[playericonhouse[playerid]][Interior]; return 1; } dcmd_exit(playerid,params[]) { #pragma unused params if(GetPlayerInterior(playerid)==playerinterior[playerid]) { SetPlayerPos(playerid, housex, housey, housez); SetPlayerInterior(playerid, 0); } else { SendClientMessage(playerid, c_r, "You have not entered a house!"); } return 1; } dcmd_home(playerid,params[]) { #pragma unused params new str1[256],pname[24]; GetPlayerName(playerid, pname, 24); format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname)); if(!dini_Exists(str1)) return SendClientMessage(playerid, c_r, "You don't own a house!"); if(dini_Int(str1, "Houseid")!=-255) { housemapicon[playerid] = SetPlayerMapIcon(playerid,31,hInfo[dini_Int(str1, "Houseid")][iconx], hInfo[dini_Int(str1, "Houseid")][icony], hInfo[dini_Int(str1, "Houseid")][iconz],31,c_y); } else if (dini_Int(str1, "Rentid")!=-255) { housemapicon[playerid] = SetPlayerMapIcon(playerid,31,hInfo[dini_Int(str1, "Rentid")][iconx], hInfo[dini_Int(str1, "Rentid")][icony], hInfo[dini_Int(str1, "Rentid")][iconz],31,c_y); } else { SendClientMessage(playerid, c_r, "You don't own a house!"); } return 1; } dcmd_setrent(playerid,params[]) { new timestamp = GetTickCount(); if(timestamp - inhousepickup > 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new str[255],str1[256],pname[24]; GetPlayerName(playerid, pname, 24); format(str1, sizeof(str1), "Houses/houseid%d", playericonhouse[playerid]); str = dini_Get(str1,"Name"); if (strcmp(str,pname,true)) return SendClientMessage(playerid, c_r, "This house isn't yours!"); new rentcost, rentable; if (sscanf(params, "dd", rentable, rentcost)) return SendClientMessage(playerid, c_r, "USAGE: /setrent [0/1] [Rentcost]"); else if (rentcostMAX_RENTCOST) { format(str, sizeof(str), "The maximum rentcost is $%i.", MAX_RENTCOST); SendClientMessage(playerid, c_r, str); return 1; } else if(rentable==1) { SendClientMessage(playerid, c_y, "Your house is now rentable!"); hInfo[playericonhouse[playerid]][Rentable] = 1; dini_IntSet(str1, "Rentable", 1); hInfo[playericonhouse[playerid]][Rentcost] = rentcost; dini_IntSet(str1, "Rentcost", rentcost); return 1; } else if(rentable==0) { SendClientMessage(playerid, c_y, "Your house is now not rentable!"); hInfo[playericonhouse[playerid]][Rentable] = 0; dini_IntSet(str1, "Rentable", 0); hInfo[playericonhouse[playerid]][Rentcost] = rentcost; dini_IntSet(str1, "Rentcost", rentcost); return 1; } return 1; } dcmd_rent(playerid,params[]) { #pragma unused params new timestamp = GetTickCount(); if(timestamp - inhousepickup > 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new str[255],str1[256],str5[255],pname[24]; GetPlayerName(playerid, pname, 24); format(str1, sizeof(str1), "Houses/houseid%d", playericonhouse[playerid]); format(str5, sizeof(str5), "Houses/Users/%s", udb_encode(pname)); if(dini_Isset(str5, "Rentid")) { if (dini_Int(str5, "Rentid")!=-255) return SendClientMessage(playerid, c_r, "You can only rent one house at a time!"); } str = dini_Get(str1,"Name"); if (strcmp(str,"ForSale",true)==0) return SendClientMessage(playerid, c_r, "This house has no owner!"); if(hInfo[playericonhouse[playerid]][Rentable]==0 || strcmp(hInfo[playericonhouse[playerid]][Renter], "ForRent", true)==0) return SendClientMessage(playerid, c_r, "This house is not rentable!"); if(GetPlayerMoney(playerid) 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new str1[256],pname[24]; GetPlayerName(playerid, pname, 24); format(str1, sizeof(str1), "Houses/houseid%d", playericonhouse[playerid]); if(strcmp(hInfo[playericonhouse[playerid]][Renter], pname, true)) return SendClientMessage(playerid, c_r, "You aren't renting this house!"); dini_Set(str1, "Renter", "ForRent"); format(hInfo[playericonhouse[playerid]][Renter], 24, "ForRent"); format(str1, sizeof(str1), "Houses/Users/%s", udb_encode(pname)); dini_IntSet(str1, "Rentid", -255); SendClientMessage(playerid, c_y, "You have unrented this house!"); return 1; } dcmd_house(playerid,params[]) { #pragma unused params SendClientMessage(playerid, c_y, "-------------"); SendClientMessage(playerid, c_y, "House options"); SendClientMessage(playerid, c_y, "-------------"); SendClientMessage(playerid, c_y, "/setrent [0/1] [Cost] - House owner"); SendClientMessage(playerid, c_y, "/ordercar [CarName] - House owner"); SendClientMessage(playerid, c_y, "/getrent - House owner"); SendClientMessage(playerid, c_y, "/lock - Renter/Owner"); SendClientMessage(playerid, c_y, "/unlock - Renter/Owner"); SendClientMessage(playerid, c_y, "/payrent - Renter"); SendClientMessage(playerid, c_y, "/unrent - Renter"); SendClientMessage(playerid, c_y, "/rent - Guest"); SendClientMessage(playerid, c_y, "-------------"); return 1; } dcmd_housestats(playerid,params[]) { #pragma unused params new timestamp = GetTickCount(); if(timestamp - inhousepickup > 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new str[256]; format(str, sizeof(str), "Owner: %s", hInfo[playericonhouse[playerid]][Name]); SendClientMessage(playerid, c_y, str); format(str, sizeof(str), "Cost: $%d", hInfo[playericonhouse[playerid]][Cost]); SendClientMessage(playerid, c_y, str); format(str, sizeof(str), "Renter: %s", hInfo[playericonhouse[playerid]][Renter]); SendClientMessage(playerid, c_y, str); format(str, sizeof(str), "Rentcost: $%d / hour", hInfo[playericonhouse[playerid]][Rentcost]); SendClientMessage(playerid, c_y, str); return 1; } dcmd_getrent(playerid,params[]) { #pragma unused params new timestamp = GetTickCount(); if(timestamp - inhousepickup > 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new pname[24]; GetPlayerName(playerid, pname, 24); if(strcmp(hInfo[playericonhouse[playerid]][Name],pname,true)==0) { new str[255]; SendClientMessage(playerid, c_y, "You collected the money of the renter!"); format(str, sizeof(str), "Houses/houseid%d", playericonhouse[playerid]); GivePlayerMoney(playerid, dini_Int(str, "RentGet")); dini_IntSet(str, "RentGet", 0); } else { SendClientMessage(playerid, c_r, "This house isn't yours!"); } return 1; } dcmd_payrent(playerid,params[]) { #pragma unused params new timestamp = GetTickCount(); if(timestamp - inhousepickup > 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new pname[24]; GetPlayerName(playerid, pname, 24); if(strcmp(hInfo[playericonhouse[playerid]][Renter],pname,true)==0) { new str[255]; format(str, sizeof(str), "Houses/houseid%d", playericonhouse[playerid]); if(GetPlayerMoney(playerid) 5000) { SendClientMessage(playerid, c_r, "You are not in a house icon!"); return 1; } new pname[24]; GetPlayerName(playerid, pname, 24); if(strcmp(hInfo[playericonhouse[playerid]][Name],pname,true)==0) { new carname[40]; if (sscanf(params, "s", carname)) { SendClientMessage(playerid, c_r, "USAGE: /ordercar [CarName]"); } else { new str[256], abc; for(new i=0;i= '0' && ch <= '9') { num = (num * 10) + (ch - '0'); } else { return 1; } } while ((ch = string[stringPos]) && ch != ' '); setarg(paramPos, 0, num * neg); } case 'h', 'x': { new ch, num = 0; while ((ch = string[stringPos++])) { switch (ch) { case 'x', 'X': { num = 0; continue; } case '0' .. '9': { num = (num << 4) | (ch - '0'); } case 'a' .. 'f': { num = (num << 4) | (ch - ('a' - 10)); } case 'A' .. 'F': { num = (num << 4) | (ch - ('A' - 10)); } case ' ': { break; } default: { return 1; } } } setarg(paramPos, 0, num); } case 'c': { setarg(paramPos, 0, string[stringPos++]); } case 'f': { new tmp[25]; strmid(tmp, string, stringPos, stringPos+sizeof(tmp)-2); setarg(paramPos, 0, _:floatstr(tmp)); } case 's', 'z': { new i = 0, ch; if (format[formatPos]) { while ((ch = string[stringPos++]) && ch != ' ') { setarg(paramPos, i++, ch); } if (!i) return 1; } else { while ((ch = string[stringPos++])) { setarg(paramPos, i++, ch); } } stringPos--; setarg(paramPos, i, '\0'); } default: { continue; } } while (string[stringPos] && string[stringPos] != ' ') { stringPos++; } while (string[stringPos] == ' ') { stringPos++; } paramPos++; } while (format[formatPos] == 'z') formatPos++; return format[formatPos]; } public PayDay(playerid) { for (new i; i < MAX_PLAYERS; i++) { if (IsPlayerConnected(i)) { new randomize=random(sizeof(VehCP)); SetPlayerCheckpoint(playerid, VehCP[randomize][0],VehCP[randomize][1],VehCP[randomize][2],30); GivePlayerMoney(i, 10000); GameTextForPlayer(i,"~g~PAY~r~DAY ~b~10.000", 2500, 3); SendClientMessage(playerid, COLOR_GREEN, "*********[PaYDaY]***********"); SendClientMessage(playerid, COLOR_YELLOW, "Hint: Go to the Checkpoint To sell The car Do /stop To Stop the mission"); SendClientMessage(playerid, COLOR_GREEN, "***********10.000***********"); } } } public CountDown(){ if (Count > 0){ GameTextForAll( CountText[Count-1], 2500, 3); Count--; SetTimer("CountDown", 1000, 0); } else{ GameTextForAll("~g~Go! Go! Go!", 2500, 3); Count = 5; } return 1; } public Encrypt(string[]) { for(new x=0; x < strlen(string); x++) { string[x] += (3^x) * (x % 15); if(string[x] > (0xff)) { string[x] -= 64; } } return 1; } public OnPlayerLogin(playerid,const string[]) { new pname2[MAX_PLAYER_NAME]; new pname3[MAX_PLAYER_NAME]; new string2[64]; new string3[128]; GetPlayerName(playerid, pname2, sizeof(pname2)); format(string2, sizeof(string2), "%s.cer", pname2); new File: UserFile = fopen(string2, io_read); if (UserFile) { new valtmp[128]; fread(UserFile, valtmp);strmid(PlayerInfo[playerid][pPassword], valtmp, 0, strlen(valtmp)-1, 255); if ((strcmp(PlayerInfo[playerid][pPassword], string, true, strlen(valtmp)-1) == 0)) { new key[128],val[128]; new Data[128]; while(fread(UserFile,Data,sizeof(Data))) { key = ini_GetKey(Data); if( strcmp( key , "Kills" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pKills] = strval( val ); } if( strcmp( key , "Deaths" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pDeaths] = strval( val ); } if( strcmp( key , "Money" , true ) == 0 ) { val = ini_GetValue( Data ); PlayerInfo[playerid][pCash] = strval( val ); } GivePlayerMoney(playerid,PlayerInfo[playerid][pCash]); } fclose(UserFile); gPlayerLogged[playerid] = 1; gPlayerAccount[playerid] = 1; new kills = PlayerInfo[playerid][pKills]; SetPlayerScore(playerid, kills); GetPlayerName(playerid, pname3, sizeof(pname3)); format(string3, sizeof(string3), "Welcome %s, you have been succesfully logged in!", pname3); SendClientMessage(playerid, COLOR_WHITE,string3); } else { SendClientMessage(playerid, COLOR_GREY, " Password does not match your name"); fclose(UserFile); } } return 1; } public OnPlayerUpdate(playerid) { if(IsPlayerConnected(playerid)) { if(gPlayerLogged[playerid]) { new string3[32]; new pname3[MAX_PLAYER_NAME]; GetPlayerName(playerid, pname3, sizeof(pname3)); format(string3, sizeof(string3), "%s.cer", pname3); new File: pFile = fopen(string3, io_write); if (pFile) { new var[32]; format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(pFile, var); fclose(pFile); new File: hFile = fopen(string3, io_append); PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid); format(var, 32, "Kills=%d\n",PlayerInfo[playerid][pKills]);fwrite(hFile, var); format(var, 32, "Deaths=%d\n",PlayerInfo[playerid][pDeaths]);fwrite(hFile, var); format(var, 32, "Money=%d\n",PlayerInfo[playerid][pCash]);fwrite(hFile, var); fclose(hFile); } } } return 1; } stock ini_GetKey( line[] ) { new keyRes[128]; keyRes[0] = 0; if ( strfind( line , "=" , true ) == -1 ) return keyRes; strmid( keyRes , line , 0 , strfind( line , "=" , true ) , sizeof( keyRes) ); return keyRes; } stock ini_GetValue( line[] ) { new valRes[128]; valRes[0]=0; if ( strfind( line , "=" , true ) == -1 ) return valRes; strmid( valRes , line , strfind( line , "=" , true )+1 , strlen( line ) , sizeof( valRes ) ); return valRes; } 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 ShowStats(playerid,targetid) { if(IsPlayerConnected(playerid)&&IsPlayerConnected(targetid)) { new cash = GetPlayerMoney(targetid); new deaths = PlayerInfo[targetid][pDeaths]; new kills = PlayerInfo[targetid][pKills]; new name[MAX_PLAYER_NAME]; GetPlayerName(targetid, name, sizeof(name)); new Float:px,Float:py,Float:pz; GetPlayerPos(targetid, px, py, pz); new coordsstring[256]; SendClientMessage(playerid, COLOR_GREEN,"_______________________________________"); format(coordsstring, sizeof(coordsstring),"*** %s ***",name); SendClientMessage(playerid, COLOR_WHITE,coordsstring); format(coordsstring, sizeof(coordsstring), "Kills:[%d] Deaths:[%d] Cash:[$%d]",kills,deaths,cash); SendClientMessage(playerid, COLOR_GRAD5,coordsstring); SendClientMessage(playerid, COLOR_GREEN,"_______________________________________"); } } #endif