17.11.2009, 14:20
Hey, can somebody tell me how i can change the /loadrace and /startrace to a automatic laoder with at timer, I have to delete the strings but i dont know anything about strings, here are the commands:
Please help me out i really need it!
Код:
dcmd_loadrace(playerid, params[]) { if(RaceAdmin == 1 && IsNotAdmin(playerid)) return 1; Racemode = 0; Racelaps = 1; new tmp[128], idx, fback; tmp = strtok(params, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_WHITE, "USAGE: /loadrace [name]"); return 1; } if(RaceActive == 1) { SendClientMessage(playerid, COLOR_RED, "A race is already active!"); return 1; } fback=LoadRace(tmp); if(fback == -1) format(ystring,sizeof(ystring),"Race \'%s\' doesn't exist!",tmp); else if (fback == -2) format(ystring,sizeof(ystring),"Race \'%s\' is created with a newer version of YRACE, cannot load.",tmp); if(fback < 0) { SendClientMessage(playerid,COLOR_RED,ystring); return 1; } format(ystring,sizeof(ystring),"Race \'%s\' loaded, /startrace to start it. You can change laps and mode before that.",CRaceName); SendClientMessage(playerid,COLOR_GREEN,ystring); if(LCurrentCheckpoint<2 && Racemode == 2) { Racemode = 1; // Racemode 2 doesn't work well with only 2CPs, and mode 1 is just the same when playing with 2 CPs. } // Setting racemode 2 is prevented from racebuilder so this shouldn't happen anyways. #if defined MENUSYSTEM if(!IsValidMenu(MRace)) CreateRaceMenus(); if(Airrace == 0) SetMenuColumnHeader(MRace,0,"Air race: off"); else SetMenuColumnHeader(MRace,0,"Air race: ON"); TogglePlayerControllable(playerid,0); ShowMenuForPlayer(MRace,playerid); #endif return 1; }
Код:
public startrace() { format(ystring,128,"Race \'%s\' is about to start, type /join to join!",CRaceName); SendClientMessageToAll(COLOR_GREEN,ystring); if(Racemode == 0) format(ystring,sizeof(ystring),"default"); else if(Racemode == 1) format(ystring,sizeof(ystring),"ring"); else if(Racemode == 2) format(ystring,sizeof(ystring),"yoyo"); else if(Racemode == 3) format(ystring,sizeof(ystring),"mirror"); format(ystring,sizeof(ystring),"Racemode: %s Laps: %d",ystring,Racelaps); if(PrizeMode >= 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; }