Boost question...
#1

Hello guys, I just installed RydeR racing system, but I've a boost system on my server, and it's seperated and both are fliterscript, what line should I add to block boost when I racing and re-enable it when the player finished the race?
Reply
#2

I suggest you to add your racing system and boost system in one FS. Then check if the player is racing and set the privileges for using the boost.
Reply
#3

Can you help me combine it then? Here's the race and boost one.

pawn Код:
/*
    Release:
            » Race System Filterscript

    Author:
            » » RyDeR «
           
    Last Update:
            » 26/04/2010
           
    ChangeLog:
            » v0.1a:
                - Initial release
               
            » v0.2a:
                - Major Bugs fixed!
                - Racing in other worlds added (enable/disbable with uncomment/comment-ing the define)
                - New Commands added:
                                    - /startautorace: You can enable that the script starts automaticly a race after the previous one is done.
                                    - /stopautorace: You can disable the command above.
                                    - /exitrace: To exit the race safely
                - Best Race Times added (Top 5 best time laps; You will see a message when the record is broken).
                - Crash while creating a race is fixed.
                - Etc..
               
    Bugs:
            » No bugs
           
    Version:
            » v0.2a

    Functions:
            » IsPlayerInRace(playerid);    >> UseFull in stunt servers to disable speedhack, nitro etc. while racing.

    Credits:
            » Joker: He knows why ;)
            » Joe Torran C, ModrLicC: For testing.
            » DracoBlue: 'Dini' include.
            » ******: 'IsOdd' function.
            » Seif_: 'function' function.
            » ZeeX: 'zcmd' include.
            » Switch: InRace Position function.
*/


#include <a_samp>
#include <dini>
#include <zcmd>

#pragma unused \
    ret_memcpy

#define ForEach(%0,%1) \
    for(new %0 = 0; %0 != %1; %0++) if(IsPlayerConnected(%0) && !IsPlayerNPC(%0))

#define Loop(%0,%1) \
    for(new %0 = 0; %0 != %1; %0++)
   
#define IsOdd(%1) \
    ((%1) & 1)
   
#define ConvertTime(%0,%1,%2,%3,%4) \
    new \
        Float: %0 = floatdiv(%1, 60000) \
    ;\
    %2 = floatround(%0, floatround_tozero); \
    %3 = floatround(floatmul(%0 - %2, 60), floatround_tozero); \
    %4 = floatround(floatmul(floatmul(%0 - %2, 60) - %3, 1000), floatround_tozero)
   
#define function%0(%1) \
    forward%0(%1); public%0(%1)
   
#define MAX_RACE_CHECKPOINTS_EACH_RACE \
    120
   
#define MAX_RACES \
    1000

#define COUNT_DOWN_TILL_RACE_START \
    30 // seconds
   
#define MAX_RACE_TIME \
    600 // seconds
   
#define RACE_CHECKPOINT_SIZE \
    12.0

#define DEBUG_RACE \
    1
   
#define RACE_IN_OTHER_WORLD // Uncomment to enable
   
#define GREY \
    0xAFAFAFAA
   
#define GREEN \
    0x9FFF00FF
   
#define RED \
    0xE60000FF
   
#define YELLOW \
    0xFFFF00AA
   
#define WHITE \
    0xFFFFFFAA
   
new
    vNames[212][] =
    {
        {"Landstalker"},
        {"Bravura"},
        {"Buffalo"},
        {"Linerunner"},
        {"Perrenial"},
        {"Sentinel"},
        {"Dumper"},
        {"Firetruck"},
        {"Trashmaster"},
        {"Stretch"},
        {"Manana"},
        {"Infernus"},
        {"Voodoo"},
        {"Pony"},
        {"Mule"},
        {"Cheetah"},
        {"Ambulance"},
        {"Leviathan"},
        {"Moonbeam"},
        {"Esperanto"},
        {"Taxi"},
        {"Washington"},
        {"Bobcat"},
        {"Mr Whoopee"},
        {"BF Injection"},
        {"Hunter"},
        {"Premier"},
        {"Enforcer"},
        {"Securicar"},
        {"Banshee"},
        {"Predator"},
        {"Bus"},
        {"Rhino"},
        {"Barracks"},
        {"Hotknife"},
        {"Trailer 1"},
        {"Previon"},
        {"Coach"},
        {"Cabbie"},
        {"Stallion"},
        {"Rumpo"},
        {"RC Bandit"},
        {"Romero"},
        {"Packer"},
        {"Monster"},
        {"Admiral"},
        {"Squalo"},
        {"Seasparrow"},
        {"Pizzaboy"},
        {"Tram"},
        {"Trailer 2"},
        {"Turismo"},
        {"Speeder"},
        {"Reefer"},
        {"Tropic"},
        {"Flatbed"},
        {"Yankee"},
        {"Caddy"},
        {"Solair"},
        {"Berkley's RC Van"},
        {"Skimmer"},
        {"PCJ-600"},
        {"Faggio"},
        {"Freeway"},
        {"RC Baron"},
        {"RC Raider"},
        {"Glendale"},
        {"Oceanic"},
        {"Sanchez"},
        {"Sparrow"},
        {"Patriot"},
        {"Quad"},
        {"Coastguard"},
        {"Dinghy"},
        {"Hermes"},
        {"Sabre"},
        {"Rustler"},
        {"ZR-350"},
        {"Walton"},
        {"Regina"},
        {"Comet"},
        {"BMX"},
        {"Burrito"},
        {"Camper"},
        {"Marquis"},
        {"Baggage"},
        {"Dozer"},
        {"Maverick"},
        {"News Chopper"},
        {"Rancher"},
        {"FBI Rancher"},
        {"Virgo"},
        {"Greenwood"},
        {"Jetmax"},
        {"Hotring"},
        {"Sandking"},
        {"Blista Compact"},
        {"Police Maverick"},
        {"Boxville"},
        {"Benson"},
        {"Mesa"},
        {"RC Goblin"},
        {"Hotring Racer A"},
        {"Hotring Racer B"},
        {"Bloodring Banger"},
        {"Rancher"},
        {"Super GT"},
        {"Elegant"},
        {"Journey"},
        {"Bike"},
        {"Mountain Bike"},
        {"Beagle"},
        {"Cropdust"},
        {"Stunt"},
        {"Tanker"},
        {"Roadtrain"},
        {"Nebula"},
        {"Majestic"},
        {"Buccaneer"},
        {"Shamal"},
        {"Hydra"},
        {"FCR-900"},
        {"NRG-500"},
        {"HPV1000"},
        {"Cement Truck"},
        {"Tow Truck"},
        {"Fortune"},
        {"Cadrona"},
        {"FBI Truck"},
        {"Willard"},
        {"Forklift"},
        {"Tractor"},
        {"Combine"},
        {"Feltzer"},
        {"Remington"},
        {"Slamvan"},
        {"Blade"},
        {"Freight"},
        {"Streak"},
        {"Vortex"},
        {"Vincent"},
        {"Bullet"},
        {"Clover"},
        {"Sadler"},
        {"Firetruck LA"},
        {"Hustler"},
        {"Intruder"},
        {"Primo"},
        {"Cargobob"},
        {"Tampa"},
        {"Sunrise"},
        {"Merit"},
        {"Utility"},
        {"Nevada"},
        {"Yosemite"},
        {"Windsor"},
        {"Monster A"},
        {"Monster B"},
        {"Uranus"},
        {"Jester"},
        {"Sultan"},
        {"Stratum"},
        {"Elegy"},
        {"Raindance"},
        {"RC Tiger"},
        {"Flash"},
        {"Tahoma"},
        {"Savanna"},
        {"Bandito"},
        {"Freight Flat"},
        {"Streak Carriage"},
        {"Kart"},
        {"Mower"},
        {"Duneride"},
        {"Sweeper"},
        {"Broadway"},
        {"Tornado"},
        {"AT-400"},
        {"DFT-30"},
        {"Huntley"},
        {"Stafford"},
        {"BF-400"},
        {"Newsvan"},
        {"Tug"},
        {"Trailer 3"},
        {"Emperor"},
        {"Wayfarer"},
        {"Euros"},
        {"Hotdog"},
        {"Club"},
        {"Freight Carriage"},
        {"Trailer 3"},
        {"Andromada"},
        {"Dodo"},
        {"RC Cam"},
        {"Launch"},
        {"Police Car (LSPD)"},
        {"Police Car (SFPD)"},
        {"Police Car (LVPD)"},
        {"Police Ranger"},
        {"Picador"},
        {"S.W.A.T. Van"},
        {"Alpha"},
        {"Phoenix"},
        {"Glendale"},
        {"Sadler"},
        {"Luggage Trailer A"},
        {"Luggage Trailer B"},
        {"Stair Trailer"},
        {"Boxville"},
        {"Farm Plow"},
        {"Utility Trailer"}
    },
    BuildRace,
    BuildRaceType,
    BuildVehicle,
    BuildCreatedVehicle,
    BuildModeVID,
    BuildName[30],
    bool: BuildTakeVehPos,
    BuildVehPosCount,
    bool: BuildTakeCheckpoints,
    BuildCheckPointCount,
    RaceBusy = 0x00,
    RaceName[30],
    RaceVehicle,
    RaceType,
    TotalCP,
    Float: RaceVehCoords[2][4],
    Float: CPCoords[MAX_RACE_CHECKPOINTS_EACH_RACE][4],
    CreatedRaceVeh[MAX_PLAYERS],
    Index,
    PlayersCount[2],
    CountTimer,
    CountAmount,
    bool: Joined[MAX_PLAYERS],
    RaceTick,
    RaceStarted,
    CPProgess[MAX_PLAYERS],
    Position,
    FinishCount,
    JoinCount,
    rCounter,
    RaceTime,
    Text: RaceInfo[MAX_PLAYERS],
    InfoTimer[MAX_PLAYERS],
    RacePosition[MAX_PLAYERS],
    RaceNames[MAX_RACES][128],
    TotalRaces,
    bool: AutomaticRace,
    TimeProgress
   
;

public OnFilterScriptExit()
{
    BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
    KillTimer(rCounter);
    KillTimer(CountTimer);
    Loop(i, MAX_PLAYERS)
    {
        DisablePlayerRaceCheckpoint(i);
        TextDrawDestroy(RaceInfo[i]);
        DestroyVehicle(CreatedRaceVeh[i]);
        Joined[i] = false;
        KillTimer(InfoTimer[i]);
    }
    JoinCount = 0;
    FinishCount = 0;
    TimeProgress = 0;
    AutomaticRace = false;
    return 1;
}

CMD:buildrace(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> You are not an administrator!");
    if(BuildRace != 0) return SendClientMessage(playerid, RED, "<!> There's already someone building a race!");
    if(RaceBusy == 0x01) return SendClientMessage(playerid, RED, "<!> Wait first till race ends!");
    if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, "<!> Please leave your vehicle first!");
    BuildRace = playerid+1;
    ShowDialog(playerid, 599);
    return 1;
}
CMD:startrace(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> You are not an administrator!");
    if(AutomaticRace == true) return SendClientMessage(playerid, RED, "<!> Not possible. Automatic race is enabled!");
    if(BuildRace != 0) return SendClientMessage(playerid, RED, "<!> There's someone building a race!");
    if(RaceBusy == 0x01 || RaceStarted == 1) return SendClientMessage(playerid, RED, "<!> There's a race currently. Wait first till race ends!");
    if(isnull(params)) return SendClientMessage(playerid, RED, "<!> /startrace [racename]");
    LoadRace(playerid, params);
    return 1;
}
CMD:stoprace(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> You are not an administrator!");
    if(RaceBusy == 0x00 || RaceStarted == 0) return SendClientMessage(playerid, RED, "<!> There's no race to stop!");
    SendClientMessageToAll(RED, ">> An admin stopped the current race!");
    return StopRace();
}
CMD:joinrace(playerid, params[])
{
    if(RaceStarted == 1) return SendClientMessage(playerid, RED, "<!> Race already started! Wait first till race ends!");
    if(RaceBusy == 0x00) return SendClientMessage(playerid, RED, "<!> There's no race to join!");
    if(Joined[playerid] == true) return SendClientMessage(playerid, RED, "<!> You already joined a race!");
    if(IsPlayerInAnyVehicle(playerid)) return SetTimerEx("SetupRaceForPlayer", 2500, 0, "e", playerid), RemovePlayerFromVehicle(playerid), Joined[playerid] = true;
    SetupRaceForPlayer(playerid);
    Joined[playerid] = true;
    return 1;
}
CMD:startautorace(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> You are not an administrator!");
    if(RaceBusy == 0x01 || RaceStarted == 1) return SendClientMessage(playerid, RED, "<!> There's a race currently. Wait first till race ends!");
    if(AutomaticRace == true) return SendClientMessage(playerid, RED, "<!> It's already enabled!");
    LoadRaceNames();
    LoadAutoRace(RaceNames[random(TotalRaces)]);
    AutomaticRace = true;
    SendClientMessage(playerid, GREEN, ">> You stared auto race. The filterscript will start a random race everytime the previous race is over!");
    return 1;
}
CMD:stopautorace(playerid, params[])
{
    if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> You are not an administrator!");
    if(AutomaticRace == false) return SendClientMessage(playerid, RED, "<!> It's already disabled!");
    AutomaticRace = false;
    return 1;
}
CMD:exitrace(playerid, params[])
{
    if(Joined[playerid] == true)
    {
        JoinCount--;
        Joined[playerid] = false;
        DestroyVehicle(CreatedRaceVeh[playerid]);
        DisablePlayerRaceCheckpoint(playerid);
        TextDrawHideForPlayer(playerid, RaceInfo[playerid]);
        CPProgess[playerid] = 0;
        KillTimer(InfoTimer[playerid]);
        TogglePlayerControllable(playerid, true);
        SetCameraBehindPlayer(playerid);
        #if defined RACE_IN_OTHER_WORLD
        SetPlayerVirtualWorld(playerid, 0);
        #endif
    } else return SendClientMessage(playerid, RED, "<!> You are not in a race!");
    return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
    if(CPProgess[playerid] == TotalCP -1)
    {
        new
            TimeStamp,
            TotalRaceTime,
            string[256],
            rFile[256],
            pName[MAX_PLAYER_NAME],
            rTime[3],
            Prize[2],
            TempTotalTime,
            TempTime[3]
        ;
        Position++;
        GetPlayerName(playerid, pName, sizeof(pName));
        TimeStamp = GetTickCount();
        TotalRaceTime = TimeStamp - RaceTick;
        ConvertTime(var, TotalRaceTime, rTime[0], rTime[1], rTime[2]);
        switch(Position)
        {
            case 1: Prize[0] = (random(random(5000)) + 10000), Prize[1] = 10;
            case 2: Prize[0] = (random(random(4500)) + 9000), Prize[1] = 9;
            case 3: Prize[0] = (random(random(4000)) + 8000), Prize[1] = 8;
            case 4: Prize[0] = (random(random(3500)) + 7000), Prize[1] = 7;
            case 5: Prize[0] = (random(random(3000)) + 6000), Prize[1] = 6;
            case 6: Prize[0] = (random(random(2500)) + 5000), Prize[1] = 5;
            case 7: Prize[0] = (random(random(2000)) + 4000), Prize[1] = 4;
            case 8: Prize[0] = (random(random(1500)) + 3000), Prize[1] = 3;
            case 9: Prize[0] = (random(random(1000)) + 2000), Prize[1] = 2;
            default: Prize[0] = random(random(1000)), Prize[1] = 1;
        }
        format(string, sizeof(string), ">> \"%s\" has finished the race in position \"%d\".", pName, Position);
        SendClientMessageToAll(WHITE, string);
        format(string, sizeof(string), "    - Time: \"%d:%d.%d\".", rTime[0], rTime[1], rTime[2]);
        SendClientMessageToAll(WHITE, string);
        format(string, sizeof(string), "    - Prize: \"$%d and +%d Score\".", Prize[0], Prize[1]);
        SendClientMessageToAll(WHITE, string);
       
        if(FinishCount <= 5)
        {
            format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", RaceName);
            format(string, sizeof(string), "BestRacerTime_%d", TimeProgress);
            TempTotalTime = dini_Int(rFile, string);
            ConvertTime(var1, TempTotalTime, TempTime[0], TempTime[1], TempTime[2]);
            if(TotalRaceTime <= dini_Int(rFile, string) || TempTotalTime == 0)
            {
                dini_IntSet(rFile, string, TotalRaceTime);
                format(string, sizeof(string), "BestRacer_%d", TimeProgress);
                if(TempTotalTime != 0) format(string, sizeof(string), ">> \"%s\" has broken the record of \"%s\" with \"%d\" seconds faster on the \"%d\"'st/th place!", pName, dini_Get(rFile, string), -(rTime[1] - TempTime[1]), TimeProgress+1);
                    else format(string, sizeof(string), ">> \"%s\" has broken a new record of on the \"%d\"'st/th place!", pName, TimeProgress+1);
                SendClientMessageToAll(GREEN, "  ");
                SendClientMessageToAll(GREEN, string);
                SendClientMessageToAll(GREEN, "  ");
                format(string, sizeof(string), "BestRacer_%d", TimeProgress);
                dini_Set(rFile, string, pName);
                TimeProgress++;
            }
        }
        FinishCount++;
        GivePlayerMoney(playerid, Prize[0]);
        SetPlayerScore(playerid, GetPlayerScore(playerid) + Prize[1]);
        DisablePlayerRaceCheckpoint(playerid);
        CPProgess[playerid]++;
        if(FinishCount >= JoinCount) return StopRace();
    }
    else
    {
        CPProgess[playerid]++;
        CPCoords[CPProgess[playerid]][3]++;
        RacePosition[playerid] = floatround(CPCoords[CPProgess[playerid]][3], floatround_floor);
        SetCP(playerid, CPProgess[playerid], CPProgess[playerid]+1, TotalCP, RaceType);
        PlayerPlaySound(playerid, 1137, 0.0, 0.0, 0.0);
    }
    return 1;
}

public OnPlayerDisconnect(playerid)
{
    if(Joined[playerid] == true)
    {
        JoinCount--;
        Joined[playerid] = false;
        DestroyVehicle(CreatedRaceVeh[playerid]);
        DisablePlayerRaceCheckpoint(playerid);
        TextDrawHideForPlayer(playerid, RaceInfo[playerid]);
        CPProgess[playerid] = 0;
        KillTimer(InfoTimer[playerid]);
        #if defined RACE_IN_OTHER_WORLD
        SetPlayerVirtualWorld(playerid, 0);
        #endif
    }
    TextDrawDestroy(RaceInfo[playerid]);
    if(BuildRace == playerid+1) BuildRace = 0;
    return 1;
}

public OnPlayerConnect(playerid)
{
    RaceInfo[playerid] = TextDrawCreate(633.000000, 348.000000, " ");
    TextDrawAlignment(RaceInfo[playerid], 3);
    TextDrawBackgroundColor(RaceInfo[playerid], 255);
    TextDrawFont(RaceInfo[playerid], 1);
    TextDrawLetterSize(RaceInfo[playerid], 0.240000, 1.100000);
    TextDrawColor(RaceInfo[playerid], -687931137);
    TextDrawSetOutline(RaceInfo[playerid], 0);
    TextDrawSetProportional(RaceInfo[playerid], 1);
    TextDrawSetShadow(RaceInfo[playerid], 1);
    return 1;
}

public OnPlayerDeath(playerid)
{
    if(Joined[playerid] == true)
    {
        JoinCount--;
        Joined[playerid] = false;
        DestroyVehicle(CreatedRaceVeh[playerid]);
        DisablePlayerRaceCheckpoint(playerid);
        TextDrawHideForPlayer(playerid, RaceInfo[playerid]);
        CPProgess[playerid] = 0;
        KillTimer(InfoTimer[playerid]);
        #if defined RACE_IN_OTHER_WORLD
        SetPlayerVirtualWorld(playerid, 0);
        #endif
    }
    if(BuildRace == playerid+1) BuildRace = 0;
    return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
    switch(dialogid)
    {
        case 599:
        {
            if(!response) return BuildRace = 0;
            switch(listitem)
            {
                case 0: BuildRaceType = 0;
                case 1: BuildRaceType = 3;
            }
            ShowDialog(playerid, 600);
        }
        case 600..601:
        {
            if(!response) return ShowDialog(playerid, 599);
            if(!strlen(inputtext)) return ShowDialog(playerid, 601);
            if(strlen(inputtext) < 1 || strlen(inputtext) > 20) return ShowDialog(playerid, 601);
            strmid(BuildName, inputtext, 0, strlen(inputtext), sizeof(BuildName));
            ShowDialog(playerid, 602);
        }
        case 602..603:
        {
            if(!response) return ShowDialog(playerid, 600);
            if(!strlen(inputtext)) return ShowDialog(playerid, 603);
            if(isNumeric(inputtext))
            {

                if(!IsValidVehicle(strval(inputtext))) return ShowDialog(playerid, 603);
                new
                    Float: pPos[4]
                ;
                GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
                GetPlayerFacingAngle(playerid, pPos[3]);
                BuildModeVID = strval(inputtext);
                BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
                BuildVehicle = CreateVehicle(strval(inputtext), pPos[0], pPos[1], pPos[2], pPos[3], random(126), random(126), (60 * 60));
                PutPlayerInVehicle(playerid, BuildVehicle, 0);
                BuildCreatedVehicle = 0x01;
                ShowDialog(playerid, 604);
            }
            else
            {
                if(!IsValidVehicle(ReturnVehicleID(inputtext))) return ShowDialog(playerid, 603);
                new
                    Float: pPos[4]
                ;
                GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
                GetPlayerFacingAngle(playerid, pPos[3]);
                BuildModeVID = ReturnVehicleID(inputtext);
                BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
                BuildVehicle = CreateVehicle(ReturnVehicleID(inputtext), pPos[0], pPos[1], pPos[2], pPos[3], random(126), random(126), (60 * 60));
                PutPlayerInVehicle(playerid, BuildVehicle, 0);
                BuildCreatedVehicle = 0x01;
                ShowDialog(playerid, 604);
            }
        }
        case 604:
        {
            if(!response) return ShowDialog(playerid, 602);
            SendClientMessage(playerid, GREEN, ">> Go to the start line on the left road and press 'KEY_FIRE' and do the same with the right road block.");
            SendClientMessage(playerid, GREEN, "   - When this is done, you will see a dialog to continue.");
            BuildVehPosCount = 0;
            BuildTakeVehPos = true;
        }
        case 605:
        {
            if(!response) return ShowDialog(playerid, 604);
            SendClientMessage(playerid, GREEN, ">> Start taking checkpoints now by clicking 'KEY_FIRE'.");
            SendClientMessage(playerid, GREEN, "   - IMPORTANT: Press 'ENTER' when you're done with the checkpoints! If it doesn't react press again and again.");
            BuildCheckPointCount = 0;
            BuildTakeCheckpoints = true;
        }
        case 606:
        {
            if(!response) return ShowDialog(playerid, 606);
            BuildRace = 0;
            BuildCheckPointCount = 0;
            BuildVehPosCount = 0;
            BuildTakeCheckpoints = false;
            BuildTakeVehPos = false;
            BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
        }
    }
    return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
    new
        string[256],
        rNameFile[256],
        rFile[256],
        Float: vPos[4]
    ;
    if(newkeys & KEY_FIRE)
    {
        if(BuildRace == playerid+1)
        {
            if(BuildTakeVehPos == true)
            {
                if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, ">> You need to be in a vehicle");
                format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", BuildName);
                GetVehiclePos(GetPlayerVehicleID(playerid), vPos[0], vPos[1], vPos[2]);
                GetVehicleZAngle(GetPlayerVehicleID(playerid), vPos[3]);
                dini_Create(rFile);
                dini_IntSet(rFile, "vModel", BuildModeVID);
                dini_IntSet(rFile, "rType", BuildRaceType);
                format(string, sizeof(string), "vPosX_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[0]);
                format(string, sizeof(string), "vPosY_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[1]);
                format(string, sizeof(string), "vPosZ_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[2]);
                format(string, sizeof(string), "vAngle_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[3]);
                format(string, sizeof(string), ">> Vehicle Pos '%d' has been taken.", BuildVehPosCount+1);
                SendClientMessage(playerid, YELLOW, string);
                BuildVehPosCount++;
            }
            if(BuildVehPosCount >= 2)
            {
                BuildVehPosCount = 0;
                BuildTakeVehPos = false;
                ShowDialog(playerid, 605);
            }
            if(BuildTakeCheckpoints == true)
            {
                if(BuildCheckPointCount > MAX_RACE_CHECKPOINTS_EACH_RACE) return SendClientMessage(playerid, RED, ">> You reached the maximum amount of checkpoints!");
                if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, ">> You need to be in a vehicle");
                format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", BuildName);
                GetVehiclePos(GetPlayerVehicleID(playerid), vPos[0], vPos[1], vPos[2]);
                format(string, sizeof(string), "CP_%d_PosX", BuildCheckPointCount), dini_FloatSet(rFile, string, vPos[0]);
                format(string, sizeof(string), "CP_%d_PosY", BuildCheckPointCount), dini_FloatSet(rFile, string, vPos[1]);
                format(string, sizeof(string), "CP_%d_PosZ", BuildCheckPointCount), dini_FloatSet(rFile, string, vPos[2]);
                format(string, sizeof(string), ">> Checkpoint '%d' has been setted!", BuildCheckPointCount+1);
                SendClientMessage(playerid, YELLOW, string);
                BuildCheckPointCount++;
            }
        }
    }
    if(newkeys & KEY_SECONDARY_ATTACK)
    {
        if(BuildTakeCheckpoints == true)
        {
            ShowDialog(playerid, 606);
            format(rNameFile, sizeof(rNameFile), "/rRaceSystem/RaceNames/RaceNames.txt");
            TotalRaces = dini_Int(rNameFile, "TotalRaces");
            TotalRaces++;
            dini_IntSet(rNameFile, "TotalRaces", TotalRaces);
            format(string, sizeof(string), "Race_%d", TotalRaces-1);
            format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", BuildName);
            dini_Set(rNameFile, string, BuildName);
            dini_IntSet(rFile, "TotalCP", BuildCheckPointCount);
            Loop(x, 5)
            {
                format(string, sizeof(string), "BestRacerTime_%d", x);
                dini_Set(rFile, string, "0");
                format(string, sizeof(string), "BestRacer_%d", x);
                dini_Set(rFile, string, "noone");
            }
        }
    }
    return 1;
}

function LoadRaceNames()
{
    new
        rNameFile[64],
        string[64]
    ;
    format(rNameFile, sizeof(rNameFile), "/rRaceSystem/RaceNames/RaceNames.txt");
    TotalRaces = dini_Int(rNameFile, "TotalRaces");
    Loop(x, TotalRaces)
    {
        format(string, sizeof(string), "Race_%d", x), strmid(RaceNames[x], dini_Get(rNameFile, string), 0, 20, sizeof(RaceNames));
        printf(">> Loaded Races: %s", RaceNames[x]);
    }
    return 1;
}

function LoadAutoRace(rName[])
{
    new
        rFile[256],
        string[256]
    ;
    format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", rName);
    if(!dini_Exists(rFile)) return printf("Race \"%s\" doesn't exist!", rName);
    strmid(RaceName, rName, 0, strlen(rName), sizeof(RaceName));
    RaceVehicle = dini_Int(rFile, "vModel");
    RaceType = dini_Int(rFile, "rType");
    TotalCP = dini_Int(rFile, "TotalCP");

    #if DEBUG_RACE == 1
    printf("VehicleModel: %d", RaceVehicle);
    printf("RaceType: %d", RaceType);
    printf("TotalCheckpoints: %d", TotalCP);
    #endif

    Loop(x, 2)
    {
        format(string, sizeof(string), "vPosX_%d", x), RaceVehCoords[x][0] = dini_Float(rFile, string);
        format(string, sizeof(string), "vPosY_%d", x), RaceVehCoords[x][1] = dini_Float(rFile, string);
        format(string, sizeof(string), "vPosZ_%d", x), RaceVehCoords[x][2] = dini_Float(rFile, string);
        format(string, sizeof(string), "vAngle_%d", x), RaceVehCoords[x][3] = dini_Float(rFile, string);
        #if DEBUG_RACE == 1
        printf("VehiclePos %d: %f, %f, %f, %f", x, RaceVehCoords[x][0], RaceVehCoords[x][1], RaceVehCoords[x][2], RaceVehCoords[x][3]);
        #endif
    }
    Loop(x, TotalCP)
    {
        format(string, sizeof(string), "CP_%d_PosX", x), CPCoords[x][0] = dini_Float(rFile, string);
        format(string, sizeof(string), "CP_%d_PosY", x), CPCoords[x][1] = dini_Float(rFile, string);
        format(string, sizeof(string), "CP_%d_PosZ", x), CPCoords[x][2] = dini_Float(rFile, string);
        #if DEBUG_RACE == 1
        printf("RaceCheckPoint %d: %f, %f, %f", x, CPCoords[x][0], CPCoords[x][1], CPCoords[x][2]);
        #endif
    }
    Position = 0;
    FinishCount = 0;
    JoinCount = 0;
    Loop(x, 2) PlayersCount[x] = 0;
    CountAmount = COUNT_DOWN_TILL_RACE_START;
    RaceTime = MAX_RACE_TIME;
    RaceBusy = 0x01;
    CountTimer = SetTimer("CountTillRace", 999, 1);
    TimeProgress = 0;
    return 1;
}

function LoadRace(playerid, rName[])
{
    new
        rFile[256],
        string[256]
    ;
    format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", rName);
    if(!dini_Exists(rFile)) return SendClientMessage(playerid, RED, "<!> Race doesn't exist!"), printf("Race \"%s\" doesn't exist!", rName);
    strmid(RaceName, rName, 0, strlen(rName), sizeof(RaceName));
    RaceVehicle = dini_Int(rFile, "vModel");
    RaceType = dini_Int(rFile, "rType");
    TotalCP = dini_Int(rFile, "TotalCP");
   
    #if DEBUG_RACE == 1
    printf("VehicleModel: %d", RaceVehicle);
    printf("RaceType: %d", RaceType);
    printf("TotalCheckpoints: %d", TotalCP);
    #endif
   
    Loop(x, 2)
    {
        format(string, sizeof(string), "vPosX_%d", x), RaceVehCoords[x][0] = dini_Float(rFile, string);
        format(string, sizeof(string), "vPosY_%d", x), RaceVehCoords[x][1] = dini_Float(rFile, string);
        format(string, sizeof(string), "vPosZ_%d", x), RaceVehCoords[x][2] = dini_Float(rFile, string);
        format(string, sizeof(string), "vAngle_%d", x), RaceVehCoords[x][3] = dini_Float(rFile, string);
        #if DEBUG_RACE == 1
        printf("VehiclePos %d: %f, %f, %f, %f", x, RaceVehCoords[x][0], RaceVehCoords[x][1], RaceVehCoords[x][2], RaceVehCoords[x][3]);
        #endif
    }
    Loop(x, TotalCP)
    {
        format(string, sizeof(string), "CP_%d_PosX", x), CPCoords[x][0] = dini_Float(rFile, string);
        format(string, sizeof(string), "CP_%d_PosY", x), CPCoords[x][1] = dini_Float(rFile, string);
        format(string, sizeof(string), "CP_%d_PosZ", x), CPCoords[x][2] = dini_Float(rFile, string);
        #if DEBUG_RACE == 1
        printf("RaceCheckPoint %d: %f, %f, %f", x, CPCoords[x][0], CPCoords[x][1], CPCoords[x][2]);
        #endif
    }
    Position = 0;
    FinishCount = 0;
    JoinCount = 0;
    Loop(x, 2) PlayersCount[x] = 0;
    Joined[playerid] = true;
    CountAmount = COUNT_DOWN_TILL_RACE_START;
    RaceTime = MAX_RACE_TIME;
    RaceBusy = 0x01;
    TimeProgress = 0;
    SetupRaceForPlayer(playerid);
    CountTimer = SetTimer("CountTillRace", 999, 1);
    return 1;
}

function SetCP(playerid, PrevCP, NextCP, MaxCP, Type)
{
    if(Type == 0)
    {
        if(NextCP == MaxCP) SetPlayerRaceCheckpoint(playerid, 1, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
            else SetPlayerRaceCheckpoint(playerid, 0, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
    }
    else if(Type == 3)
    {
        if(NextCP == MaxCP) SetPlayerRaceCheckpoint(playerid, 4, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
            else SetPlayerRaceCheckpoint(playerid, 3, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
    }
    return 1;
}

function SetupRaceForPlayer(playerid)
{
    CPProgess[playerid] = 0;
    TogglePlayerControllable(playerid, false);
    CPCoords[playerid][3] = 0;
    SetCP(playerid, CPProgess[playerid], CPProgess[playerid]+1, TotalCP, RaceType);
    if(IsOdd(playerid)) Index = 1;
        else Index = 0;

    switch(Index)
    {
        case 0:
        {
            if(PlayersCount[0] == 1)
            {
                RaceVehCoords[0][0] -= (6 * floatsin(-RaceVehCoords[0][3], degrees));
                RaceVehCoords[0][1] -= (6 * floatcos(-RaceVehCoords[0][3], degrees));
                CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2, RaceVehCoords[0][3], random(126), random(126), (60 * 60));
                SetPlayerPos(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2);
                SetPlayerFacingAngle(playerid, RaceVehCoords[0][3]);
                PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);
                Camera(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2], RaceVehCoords[0][3], 20);
            }
        }
        case 1:
        {
            if(PlayersCount[1] == 1)
            {
                RaceVehCoords[1][0] -= (6 * floatsin(-RaceVehCoords[1][3], degrees));
                RaceVehCoords[1][1] -= (6 * floatcos(-RaceVehCoords[1][3], degrees));
                CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2, RaceVehCoords[1][3], random(126), random(126), (60 * 60));
                SetPlayerPos(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2);
                SetPlayerFacingAngle(playerid, RaceVehCoords[1][3]);
                PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);
                Camera(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2], RaceVehCoords[1][3], 20);
            }
        }
    }
    switch(Index)
    {
        case 0:
        {
            if(PlayersCount[0] != 1)
            {
                CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2, RaceVehCoords[0][3], random(126), random(126), (60 * 60));
                SetPlayerPos(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2);
                SetPlayerFacingAngle(playerid, RaceVehCoords[0][3]);
                PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);
                Camera(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2], RaceVehCoords[0][3], 20);
                PlayersCount[0] = 1;
            }
        }
        case 1:
        {
            if(PlayersCount[1] != 1)
            {
                CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2, RaceVehCoords[1][3], random(126), random(126), (60 * 60));
                SetPlayerPos(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2);
                SetPlayerFacingAngle(playerid, RaceVehCoords[1][3]);
                PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);
                Camera(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2], RaceVehCoords[1][3], 20);
                PlayersCount[1] = 1;
            }
        }
    }
    new
        string[128]
    ;
    #if defined RACE_IN_OTHER_WORLD
    SetPlayerVirtualWorld(playerid, 10);
    #endif
    InfoTimer[playerid] = SetTimerEx("TextInfo", 500, 1, "e", playerid);
    if(JoinCount == 1) format(string, sizeof(string), "RaceName: ~w~%s~n~~p~~h~Checkpoint: ~w~%d/%d~n~~b~~h~RaceTime: ~w~%s~n~~y~RacePosition: ~w~1/1~n~ ", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime));
        else format(string, sizeof(string), "RaceName: ~w~%s~n~~p~~h~Checkpoint: ~w~%d/%d~n~~b~~h~RaceTime: ~w~%s~n~~y~RacePosition: ~w~%d/%d~n~ ", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime), RacePosition[playerid], JoinCount);
    TextDrawSetString(RaceInfo[playerid], string);
    TextDrawShowForPlayer(playerid, RaceInfo[playerid]);
    JoinCount++;
    return 1;
}

function CountTillRace()
{
    switch(CountAmount)
    {
        case 0:
        {
            ForEach(i, MAX_PLAYERS)
            {
                if(Joined[i] == false)
                {
                    new
                        string[128]
                    ;
                    format(string, sizeof(string), ">> You can't join to \"%s\" named race anymore. Join time is over!", RaceName);
                    SendClientMessage(i, RED, string);
                }
            }
            StartRace();
        }
        case 1..5:
        {
            new
                string[10]
            ;
            format(string, sizeof(string), "~b~%d", CountAmount);
            ForEach(i, MAX_PLAYERS)
            {
                if(Joined[i] == true)
                {
                    GameTextForPlayer(i, string, 999, 5);
                    PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
                }
            }
        }
        case 60, 50, 40, 30, 20, 10:
        {
            new
                string[128]
            ;
            format(string, sizeof(string), ">> \"%d\" seconds till \"%s\" named race starts! Type \"/joinrace\" to join the race.", CountAmount, RaceName);
            SendClientMessageToAll(GREEN, string);
        }
    }
    return CountAmount--;
}

function StartRace()
{
    ForEach(i, MAX_PLAYERS)
    {
        if(Joined[i] == true)
        {
            TogglePlayerControllable(i, true);
            PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
            GameTextForPlayer(i, "~g~GO GO GO", 2000, 5);
            SetCameraBehindPlayer(i);
        }
    }
    rCounter = SetTimer("RaceCounter", 900, 1);
    RaceTick = GetTickCount();
    RaceStarted = 1;
    KillTimer(CountTimer);
    return 1;
}

function StopRace()
{
    KillTimer(rCounter);
    RaceStarted = 0;
    RaceTick = 0;
    RaceBusy = 0x00;
    JoinCount = 0;
    FinishCount = 0;
    TimeProgress = 0;
   
    ForEach(i, MAX_PLAYERS)
    {
        if(Joined[i] == true)
        {
            DisablePlayerRaceCheckpoint(i);
            DestroyVehicle(CreatedRaceVeh[i]);
            Joined[i] = false;
            TextDrawHideForPlayer(i, RaceInfo[i]);
            CPProgess[i] = 0;
            KillTimer(InfoTimer[i]);
        }
    }
    SendClientMessageToAll(YELLOW, ">> Race time is over!");
    if(AutomaticRace == true) LoadRaceNames(), LoadAutoRace(RaceNames[random(TotalRaces)]);
    return 1;
}

function RaceCounter()
{
    if(RaceStarted == 1)
    {
        RaceTime--;
        if(JoinCount <= 0)
        {
            StopRace();
            SendClientMessageToAll(RED, ">> Race ended.. No one left in the race!");
        }
    }
    if(RaceTime <= 0)
    {
        StopRace();
    }
    return 1;
}

function TextInfo(playerid)
{
    new
        string[128]
    ;
    if(JoinCount == 1) format(string, sizeof(string), "RaceName: ~w~%s~n~~p~~h~Checkpoint: ~w~%d/%d~n~~b~~h~RaceTime: ~w~%s~n~~y~RacePosition: ~w~1/1~n~", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime));
        else format(string, sizeof(string), "RaceName: ~w~%s~n~~p~~h~Checkpoint: ~w~%d/%d~n~~b~~h~RaceTime: ~w~%s~n~~y~RacePosition: ~w~%d/%d~n~", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime), RacePosition[playerid], JoinCount);
    TextDrawSetString(RaceInfo[playerid], string);
    TextDrawShowForPlayer(playerid, RaceInfo[playerid]);
}

function Camera(playerid, Float:X, Float:Y, Float:Z, Float:A, Mul)
{
    SetPlayerCameraLookAt(playerid, X, Y, Z);
    SetPlayerCameraPos(playerid, X + (Mul * floatsin(-A, degrees)), Y + (Mul * floatcos(-A, degrees)), Z+6);
}

function IsPlayerInRace(playerid)
{
    if(Joined[playerid] == true) return true;
        else return false;
}

function ShowDialog(playerid, dialogid)
{
    switch(dialogid)
    {
        case 599: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateCaption("Build New Race"), "\
        Normal Race\n\
        Air Race"
, "Next", "Exit");

        case 600: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Build New Race (Step 1/4)"), "\
        Step 1:\n\
        ********\n\
        Welcome to wizard 'Build New Race'.\n\
        Before getting started, I need to know the name (e.g. SFRace) of the to save it under.\n\n\
        >> Give the NAME below and press 'Next' to continue."
, "Next", "Back");

        case 601: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Build New Race (Step 1/4)"), "\
        ERROR: Name too short or too long! (min. 1 - max. 20)\n\n\n\
        Step 1:\n\
        ********\n\
        Welcome to wizard 'Build New Race'.\n\
        Before getting started, I need to know the name (e.g. SFRace) of the to save it under.\n\n\
        >> Give the NAME below and press 'Next' to continue."
, "Next", "Back");

        case 602: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Build New Race (Step 2/4)"), "\
        Step 2:\n\
        ********\n\
        Please give the ID or NAME of the vehicle that's going to be used in the race you are creating now.\n\n\
        >> Give the ID or NAME of the vehicle below and press 'Next' to continue. 'Back' to change something."
, "Next", "Back");

        case 603: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Build New Race (Step 2/4)"), "\
        ERROR: Invalid Vehilce ID/Name\n\n\n\
        Step 2:\n\
        ********\n\
        Please give the ID or NAME of the vehicle that's going to be used in the race you are creating now.\n\n\
        >> Give the ID or NAME of the vehicle below and press 'Next' to continue. 'Back' to change something."
, "Next", "Back");

        case 604: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateCaption("Build New Race (Step 3/4)"),
        "\
        Step 3:\n\
        ********\n\
        We are almost done! Now go to the start line where the first and second car should stand.\n\
        Note: When you click 'OK' you will be free. Use 'KEY_FIRE' to set the first position and second position.\n\
        Note: After you got these positions you will automaticly see a dialog to continue the wizard.\n\n\
        >> Press 'OK' to do the things above. 'Back' to change something."
, "OK", "Back");

        case 605: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateCaption("Build New Race (Step 4/4)"),
        "\
        Step 4:\n\
        ********\n\
        Welcome to the last stap. In this stap you have to set the checkpoints; so if you click 'OK' you can set the checkpoints.\n\
        You can set the checkpoints with 'KEY_FIRE'. Each checkpoint you set will save.\n\
        You have to press 'ENTER' button when you're done with everything. You race is aviable then!\n\n\
        >> Press 'OK' to do the things above. 'Back' to change something."
, "OK", "Back");
       
        case 606: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateCaption("Build New Race (Done)"),
        "\
        You have created your race and it's ready to use now.\n\n\
        >> Press 'Finish' to finish. 'Exit' - Has no effect."
, "Finish", "Exit");
    }
    return 1;
}

CreateCaption(arguments[])
{
    new
        string[128 char]
    ;
    format(string, sizeof(string), "RyDeR's Race System - %s", arguments);
    return string;
}

stock IsValidVehicle(vehicleid)
{
    if(vehicleid < 400 || vehicleid > 611) return false;
        else return true;
}

ReturnVehicleID(vName[])
{
    Loop(x, 211)
    {
        if(strfind(vNames[x], vName, true) != -1)
        return x + 400;
    }
    return -1;
}

TimeConvert(seconds)
{
    new tmp[16];
    new minutes = floatround(seconds/60);
    seconds -= minutes*60;
    format(tmp, sizeof(tmp), "%d:%02d", minutes, seconds);
    return tmp;
}
pawn Код:
#include <a_samp>

new EnableBoast[MAX_PLAYERS];

#if defined FILTERSCRIPT

public OnFilterScriptInit()
{
        print("\n--------------------------------------");
        print("SpeedBoost By Faour");
        print("--------------------------------------\n");
        return 1;
}

public OnFilterScriptExit()
{
    print("\n--------------------------------------");
        print("Un Loaded Boost By Faour");
        print("--------------------------------------\n");
        return 1;
}

#else

main()
{


print("////////////////////////////////////////////////////////////////////////\n");
print("________________________________________________________________________\n");
print("/////////\n");
print("//\n");
print("//\n");
print("//\n");
print("////////    /////////        /////////     /       /      /////////\n");
print("//          /       /        /       /     /       /       //\n");
print("//          /       /        /       /     /       /       //\n");
print("//          /       /        /       /     /       /       //\n");
print("//          ///////////      /////////     /////////       //\n");
print("________________________________________________________________________\n");
print("////////////////////////////////////////////////////////////////////////\n");
print("Speed Boost By Faour = Aloushi");

}

#endif




public OnPlayerSpawn(playerid)
{
    EnableBoast[playerid] = 1;
    return 1;
}


public OnPlayerCommandText(playerid, cmdtext[])
{
    if(!strcmp(cmdtext, "/Boost", true))
        {
        if(EnableBoast[playerid])
        {
        EnableBoast[playerid] = 0; //will disable boast
        SendClientMessage(playerid, 0x924161FF, "[!] Boost Deactivated.");

        }
        else
        {
        EnableBoast[playerid] = 1; //will enable boast
        SendClientMessage(playerid, 0x924161FF, "[!] Boost Activated.");
        SendClientMessage(playerid, 0x00FFFFAA, "Press Fire key for boost.");
        SendClientMessage(playerid, 0x00FFFFAA, "Press H key for bounce.");
        }
        return 1;
    }
    return 0;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{

        if (IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
        {

        if(newkeys & KEY_FIRE)
        {



        if(EnableBoast[playerid] == 1)
        {
        new Float:vx,Float:vy,Float:vz;
        GetVehicleVelocity(GetPlayerVehicleID(playerid),vx,vy,vz);
        SetVehicleVelocity(GetPlayerVehicleID(playerid), vx * 1.8, vy *1.8, vz * 1.8);
        }
        }
        }


        if (IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
        {
        if (newkeys & KEY_CROUCH)
        {

        if(EnableBoast[playerid] == 1)
        {
        new Float:x, Float:y, Float:z;
        GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z);
        SetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z+0.3);
        }
        }
        }
        return 1;
        }
Reply
#4

Damnit! use proper pawn tags.
Reply
#5

Edited? I guess. c:
Reply
#6

Done but untested:
pawn Код:
#include <a_samp>
#include <dini>
#include <zcmd>



#define ForEach(%0,%1) \
for(new %0 = 0; %0 != %1; %0++) if(IsPlayerConnected(%0) && !IsPlayerNPC(%0))

#define Loop(%0,%1) \
for(new %0 = 0; %0 != %1; %0++)

#define IsOdd(%1) \
((%1) & 1)

#define ConvertTime(%0,%1,%2,%3,%4) \
new \
Float: %0 = floatdiv(%1, 60000) \
;\
%2 = floatround(%0, floatround_tozero); \
%3 = floatround(floatmul(%0 - %2, 60), floatround_tozero); \
%4 = floatround(floatmul(floatmul(%0 - %2, 60) - %3, 1000), floatround_tozero)

#define function%0(%1) \
forward%0(%1); public%0(%1)

#define MAX_RACE_CHECKPOINTS_EACH_RACE \
120

#define MAX_RACES \
1000

#define COUNT_DOWN_TILL_RACE_START \
30 // seconds

#define MAX_RACE_TIME \
600 // seconds

#define RACE_CHECKPOINT_SIZE \
12.0

#define DEBUG_RACE \
1

#define RACE_IN_OTHER_WORLD // Uncomment to enable

#define GREY \
0xAFAFAFAA

#define GREEN \
0x9FFF00FF

#define RED \
0xE60000FF

#define YELLOW \
0xFFFF00AA

#define WHITE \
0xFFFFFFAA
new EnableBoast[MAX_PLAYERS];

new
vNames[212][] =
{
{"Landstalker"},
{"Bravura"},
{"Buffalo"},
{"Linerunner"},
{"Perrenial"},
{"Sentinel"},
{"Dumper"},
{"Firetruck"},
{"Trashmaster"},
{"Stretch"},
{"Manana"},
{"Infernus"},
{"Voodoo"},
{"Pony"},
{"Mule"},
{"Cheetah"},
{"Ambulance"},
{"Leviathan"},
{"Moonbeam"},
{"Esperanto"},
{"Taxi"},
{"Washington"},
{"Bobcat"},
{"Mr Whoopee"},
{"BF Injection"},
{"Hunter"},
{"Premier"},
{"Enforcer"},
{"Securicar"},
{"Banshee"},
{"Predator"},
{"Bus"},
{"Rhino"},
{"Barracks"},
{"Hotknife"},
{"Trailer 1"},
{"Previon"},
{"Coach"},
{"Cabbie"},
{"Stallion"},
{"Rumpo"},
{"RC Bandit"},
{"Romero"},
{"Packer"},
{"Monster"},
{"Admiral"},
{"Squalo"},
{"Seasparrow"},
{"Pizzaboy"},
{"Tram"},
{"Trailer 2"},
{"Turismo"},
{"Speeder"},
{"Reefer"},
{"Tropic"},
{"Flatbed"},
{"Yankee"},
{"Caddy"},
{"Solair"},
{"Berkley's RC Van"},
{"Skimmer"},
{"PCJ-600"},
{"Faggio"},
{"Freeway"},
{"RC Baron"},
{"RC Raider"},
{"Glendale"},
{"Oceanic"},
{"Sanchez"},
{"Sparrow"},
{"Patriot"},
{"Quad"},
{"Coastguard"},
{"Dinghy"},
{"Hermes"},
{"Sabre"},
{"Rustler"},
{"ZR-350"},
{"Walton"},
{"Regina"},
{"Comet"},
{"BMX"},
{"Burrito"},
{"Camper"},
{"Marquis"},
{"Baggage"},
{"Dozer"},
{"Maverick"},
{"News Chopper"},
{"Rancher"},
{"FBI Rancher"},
{"Virgo"},
{"Greenwood"},
{"Jetmax"},
{"Hotring"},
{"Sandking"},
{"Blista Compact"},
{"Police Maverick"},
{"Boxville"},
{"Benson"},
{"Mesa"},
{"RC Goblin"},
{"Hotring Racer A"},
{"Hotring Racer B"},
{"Bloodring Banger"},
{"Rancher"},
{"Super GT"},
{"Elegant"},
{"Journey"},
{"Bike"},
{"Mountain Bike"},
{"Beagle"},
{"Cropdust"},
{"Stunt"},
{"Tanker"},
{"Roadtrain"},
{"Nebula"},
{"Majestic"},
{"Buccaneer"},
{"Shamal"},
{"Hydra"},
{"FCR-900"},
{"NRG-500"},
{"HPV1000"},
{"Cement Truck"},
{"Tow Truck"},
{"Fortune"},
{"Cadrona"},
{"FBI Truck"},
{"Willard"},
{"Forklift"},
{"Tractor"},
{"Combine"},
{"Feltzer"},
{"Remington"},
{"Slamvan"},
{"Blade"},
{"Freight"},
{"Streak"},
{"Vortex"},
{"Vincent"},
{"Bullet"},
{"Clover"},
{"Sadler"},
{"Firetruck LA"},
{"Hustler"},
{"Intruder"},
{"Primo"},
{"Cargobob"},
{"Tampa"},
{"Sunrise"},
{"Merit"},
{"Utility"},
{"Nevada"},
{"Yosemite"},
{"Windsor"},
{"Monster A"},
{"Monster B"},
{"Uranus"},
{"Jester"},
{"Sultan"},
{"Stratum"},
{"Elegy"},
{"Raindance"},
{"RC Tiger"},
{"Flash"},
{"Tahoma"},
{"Savanna"},
{"Bandito"},
{"Freight Flat"},
{"Streak Carriage"},
{"Kart"},
{"Mower"},
{"Duneride"},
{"Sweeper"},
{"Broadway"},
{"Tornado"},
{"AT-400"},
{"DFT-30"},
{"Huntley"},
{"Stafford"},
{"BF-400"},
{"Newsvan"},
{"Tug"},
{"Trailer 3"},
{"Emperor"},
{"Wayfarer"},
{"Euros"},
{"Hotdog"},
{"Club"},
{"Freight Carriage"},
{"Trailer 3"},
{"Andromada"},
{"Dodo"},
{"RC Cam"},
{"Launch"},
{"Police Car (LSPD)"},
{"Police Car (SFPD)"},
{"Police Car (LVPD)"},
{"Police Ranger"},
{"Picador"},
{"S.W.A.T. Van"},
{"Alpha"},
{"Phoenix"},
{"Glendale"},
{"Sadler"},
{"Luggage Trailer A"},
{"Luggage Trailer B"},
{"Stair Trailer"},
{"Boxville"},
{"Farm Plow"},
{"Utility Trailer"}
},
BuildRace,
BuildRaceType,
BuildVehicle,
BuildCreatedVehicle,
BuildModeVID,
BuildName[30],
bool: BuildTakeVehPos,
BuildVehPosCount,
bool: BuildTakeCheckpoints,
BuildCheckPointCount,
RaceBusy = 0x00,
RaceName[30],
RaceVehicle,
RaceType,
TotalCP,
Float: RaceVehCoords[2][4],
Float: CPCoords[MAX_RACE_CHECKPOINTS_EACH_RACE][4],
CreatedRaceVeh[MAX_PLAYERS],
Index,
PlayersCount[2],
CountTimer,
CountAmount,
bool: Joined[MAX_PLAYERS],
RaceTick,
RaceStarted,
CPProgess[MAX_PLAYERS],
Position,
FinishCount,
JoinCount,
rCounter,
RaceTime,
Text: RaceInfo[MAX_PLAYERS],
InfoTimer[MAX_PLAYERS],
RacePosition[MAX_PLAYERS],
RaceNames[MAX_RACES][128],
TotalRaces,
bool: AutomaticRace,
TimeProgress

;




public OnFilterScriptExit()
{
BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
KillTimer(rCounter);
KillTimer(CountTimer);
Loop(i, MAX_PLAYERS)
{
DisablePlayerRaceCheckpoint(i);
TextDrawDestroy(RaceInfo[i]);
DestroyVehicle(CreatedRaceVeh[i]);
Joined[i] = false;
KillTimer(InfoTimer[i]);
}
JoinCount = 0;
FinishCount = 0;
TimeProgress = 0;
AutomaticRace = false;
return 1;
}

public OnPlayerSpawn(playerid)
{
    EnableBoast[playerid] = 1;
    return 1;
}

CMD:boost(playerid, params[])
{
    if(EnableBoast[playerid])
    {
        EnableBoast[playerid] = 0; //will disable boast
        SendClientMessage(playerid, 0x924161FF, "[!] Boost Deactivated.");
    }
    else
    {
        if(StartRace() != 1)
        {
            EnableBoast[playerid] = 1; //will enable boast
            SendClientMessage(playerid, 0x924161FF, "[!] Boost Activated.");
            SendClientMessage(playerid, 0x00FFFFAA, "Press Fire key for boost.");
            SendClientMessage(playerid, 0x00FFFFAA, "Press H key for bounce.");
        }
    }
    return 1;
}

CMD:buildrace(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> You are not an administrator!");
if(BuildRace != 0) return SendClientMessage(playerid, RED, "<!> There's already someone building a race!");
if(RaceBusy == 0x01) return SendClientMessage(playerid, RED, "<!> Wait first till race ends!");
if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, "<!> Please leave your vehicle first!");
BuildRace = playerid+1;
ShowDialog(playerid, 599);
return 1;
}

CMD:tartrace(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> You are not an administrator!");
if(AutomaticRace == true) return SendClientMessage(playerid, RED, "<!> Not possible. Automatic race is enabled!");
if(BuildRace != 0) return SendClientMessage(playerid, RED, "<!> There's someone building a race!");
if(RaceBusy == 0x01 || RaceStarted == 1) return SendClientMessage(playerid, RED, "<!> There's a race currently. Wait first till race ends!");
if(isnull(params)) return SendClientMessage(playerid, RED, "<!> /startrace [racename]");
LoadRace(playerid, params);
return 1;
}
CMD:toprace(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> You are not an administrator!");
if(RaceBusy == 0x00 || RaceStarted == 0) return SendClientMessage(playerid, RED, "<!> There's no race to stop!");
SendClientMessageToAll(RED, ">> An admin stopped the current race!");
return StopRace();
}
CMD:joinrace(playerid, params[])
{
if(RaceStarted == 1) return SendClientMessage(playerid, RED, "<!> Race already started! Wait first till race ends!");
if(RaceBusy == 0x00) return SendClientMessage(playerid, RED, "<!> There's no race to join!");
if(Joined[playerid] == true) return SendClientMessage(playerid, RED, "<!> You already joined a race!");
if(IsPlayerInAnyVehicle(playerid)) return SetTimerEx("SetupRaceForPlayer", 2500, 0, "e", playerid), RemovePlayerFromVehicle(playerid), Joined[playerid] = true;
SetupRaceForPlayer(playerid);
Joined[playerid] = true;
return 1;
}
CMD:tartautorace(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> You are not an administrator!");
if(RaceBusy == 0x01 || RaceStarted == 1) return SendClientMessage(playerid, RED, "<!> There's a race currently. Wait first till race ends!");
if(AutomaticRace == true) return SendClientMessage(playerid, RED, "<!> It's already enabled!");
LoadRaceNames();
LoadAutoRace(RaceNames[random(TotalRaces)]);
AutomaticRace = true;
SendClientMessage(playerid, GREEN, ">> You stared auto race. The filterscript will start a random race everytime the previous race is over!");
return 1;
}
CMD:topautorace(playerid, params[])
{
if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, RED, "<!> You are not an administrator!");
if(AutomaticRace == false) return SendClientMessage(playerid, RED, "<!> It's already disabled!");
AutomaticRace = false;
return 1;
}
CMD:exitrace(playerid, params[])
{
if(Joined[playerid] == true)
{
JoinCount--;
Joined[playerid] = false;
DestroyVehicle(CreatedRaceVeh[playerid]);
DisablePlayerRaceCheckpoint(playerid);
TextDrawHideForPlayer(playerid, RaceInfo[playerid]);
CPProgess[playerid] = 0;
KillTimer(InfoTimer[playerid]);
TogglePlayerControllable(playerid, true);
SetCameraBehindPlayer(playerid);
#if defined RACE_IN_OTHER_WORLD
SetPlayerVirtualWorld(playerid, 0);
#endif
} else return SendClientMessage(playerid, RED, "<!> You are not in a race!");
return 1;
}

public OnPlayerEnterRaceCheckpoint(playerid)
{
if(CPProgess[playerid] == TotalCP -1)
{
new
TimeStamp,
TotalRaceTime,
string[256],
rFile[256],
pName[MAX_PLAYER_NAME],
rTime[3],
Prize[2],
TempTotalTime,
TempTime[3]
;
Position++;
GetPlayerName(playerid, pName, sizeof(pName));
TimeStamp = GetTickCount();
TotalRaceTime = TimeStamp - RaceTick;
ConvertTime(var, TotalRaceTime, rTime[0], rTime[1], rTime[2]);
switch(Position)
{
case 1: Prize[0] = (random(random(5000)) + 10000), Prize[1] = 10;
case 2: Prize[0] = (random(random(4500)) + 9000), Prize[1] = 9;
case 3: Prize[0] = (random(random(4000)) + 8000), Prize[1] = 8;
case 4: Prize[0] = (random(random(3500)) + 7000), Prize[1] = 7;
case 5: Prize[0] = (random(random(3000)) + 6000), Prize[1] = 6;
case 6: Prize[0] = (random(random(2500)) + 5000), Prize[1] = 5;
case 7: Prize[0] = (random(random(2000)) + 4000), Prize[1] = 4;
case 8: Prize[0] = (random(random(1500)) + 3000), Prize[1] = 3;
case 9: Prize[0] = (random(random(1000)) + 2000), Prize[1] = 2;
default: Prize[0] = random(random(1000)), Prize[1] = 1;
}
format(string, sizeof(string), ">> \"%s\" has finished the race in position \"%d\".", pName, Position);
SendClientMessageToAll(WHITE, string);
format(string, sizeof(string), " - Time: \"%d:%d.%d\".", rTime[0], rTime[1], rTime[2]);
SendClientMessageToAll(WHITE, string);
format(string, sizeof(string), " - Prize: \"$%d and +%d Score\".", Prize[0], Prize[1]);
SendClientMessageToAll(WHITE, string);

if(FinishCount <= 5)
{
format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", RaceName);
format(string, sizeof(string), "BestRacerTime_%d", TimeProgress);
TempTotalTime = dini_Int(rFile, string);
ConvertTime(var1, TempTotalTime, TempTime[0], TempTime[1], TempTime[2]);
if(TotalRaceTime <= dini_Int(rFile, string) || TempTotalTime == 0)
{
dini_IntSet(rFile, string, TotalRaceTime);
format(string, sizeof(string), "BestRacer_%d", TimeProgress);
if(TempTotalTime != 0) format(string, sizeof(string), ">> \"%s\" has broken the record of \"%s\" with \"%d\" seconds faster on the \"%d\"'st/th place!", pName, dini_Get(rFile, string), -(rTime[1] - TempTime[1]), TimeProgress+1);
else format(string, sizeof(string), ">> \"%s\" has broken a new record of on the \"%d\"'st/th place!", pName, TimeProgress+1);
SendClientMessageToAll(GREEN, " ");
SendClientMessageToAll(GREEN, string);
SendClientMessageToAll(GREEN, " ");
format(string, sizeof(string), "BestRacer_%d", TimeProgress);
dini_Set(rFile, string, pName);
TimeProgress++;
}
}
FinishCount++;
GivePlayerMoney(playerid, Prize[0]);
SetPlayerScore(playerid, GetPlayerScore(playerid) + Prize[1]);
DisablePlayerRaceCheckpoint(playerid);
CPProgess[playerid]++;
if(FinishCount >= JoinCount) return StopRace();
}
else
{
CPProgess[playerid]++;
CPCoords[CPProgess[playerid]][3]++;
RacePosition[playerid] = floatround(CPCoords[CPProgess[playerid]][3], floatround_floor);
SetCP(playerid, CPProgess[playerid], CPProgess[playerid]+1, TotalCP, RaceType);
PlayerPlaySound(playerid, 1137, 0.0, 0.0, 0.0);
}
return 1;
}

public OnPlayerDisconnect(playerid)
{
if(Joined[playerid] == true)
{
JoinCount--;
Joined[playerid] = false;
DestroyVehicle(CreatedRaceVeh[playerid]);
DisablePlayerRaceCheckpoint(playerid);
TextDrawHideForPlayer(playerid, RaceInfo[playerid]);
CPProgess[playerid] = 0;
KillTimer(InfoTimer[playerid]);
#if defined RACE_IN_OTHER_WORLD
SetPlayerVirtualWorld(playerid, 0);
#endif
}
TextDrawDestroy(RaceInfo[playerid]);
if(BuildRace == playerid+1) BuildRace = 0;
return 1;
}

public OnPlayerConnect(playerid)
{
RaceInfo[playerid] = TextDrawCreate(633.000000, 348.000000, " ");
TextDrawAlignment(RaceInfo[playerid], 3);
TextDrawBackgroundColor(RaceInfo[playerid], 255);
TextDrawFont(RaceInfo[playerid], 1);
TextDrawLetterSize(RaceInfo[playerid], 0.240000, 1.100000);
TextDrawColor(RaceInfo[playerid], -687931137);
TextDrawSetOutline(RaceInfo[playerid], 0);
TextDrawSetProportional(RaceInfo[playerid], 1);
TextDrawSetShadow(RaceInfo[playerid], 1);
return 1;
}

public OnPlayerDeath(playerid)
{
if(Joined[playerid] == true)
{
JoinCount--;
Joined[playerid] = false;
DestroyVehicle(CreatedRaceVeh[playerid]);
DisablePlayerRaceCheckpoint(playerid);
TextDrawHideForPlayer(playerid, RaceInfo[playerid]);
CPProgess[playerid] = 0;
KillTimer(InfoTimer[playerid]);
#if defined RACE_IN_OTHER_WORLD
SetPlayerVirtualWorld(playerid, 0);
#endif
}
if(BuildRace == playerid+1) BuildRace = 0;
return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case 599:
{
if(!response) return BuildRace = 0;
switch(listitem)
{
case 0: BuildRaceType = 0;
case 1: BuildRaceType = 3;
}
ShowDialog(playerid, 600);
}
case 600..601:
{
if(!response) return ShowDialog(playerid, 599);
if(!strlen(inputtext)) return ShowDialog(playerid, 601);
if(strlen(inputtext) < 1 || strlen(inputtext) > 20) return ShowDialog(playerid, 601);
strmid(BuildName, inputtext, 0, strlen(inputtext), sizeof(BuildName));
ShowDialog(playerid, 602);
}
case 602..603:
{
if(!response) return ShowDialog(playerid, 600);
if(!strlen(inputtext)) return ShowDialog(playerid, 603);
if(isNumeric(inputtext))
{

if(!IsValidVehicle(strval(inputtext))) return ShowDialog(playerid, 603);
new
Float: pPos[4]
;
GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
GetPlayerFacingAngle(playerid, pPos[3]);
BuildModeVID = strval(inputtext);
BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
BuildVehicle = CreateVehicle(strval(inputtext), pPos[0], pPos[1], pPos[2], pPos[3], random(126), random(126), (60 * 60));
PutPlayerInVehicle(playerid, BuildVehicle, 0);
BuildCreatedVehicle = 0x01;
ShowDialog(playerid, 604);
}
else
{
if(!IsValidVehicle(ReturnVehicleID(inputtext))) return ShowDialog(playerid, 603);
new
Float: pPos[4]
;
GetPlayerPos(playerid, pPos[0], pPos[1], pPos[2]);
GetPlayerFacingAngle(playerid, pPos[3]);
BuildModeVID = ReturnVehicleID(inputtext);
BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
BuildVehicle = CreateVehicle(ReturnVehicleID(inputtext), pPos[0], pPos[1], pPos[2], pPos[3], random(126), random(126), (60 * 60));
PutPlayerInVehicle(playerid, BuildVehicle, 0);
BuildCreatedVehicle = 0x01;
ShowDialog(playerid, 604);
}
}
case 604:
{
if(!response) return ShowDialog(playerid, 602);
SendClientMessage(playerid, GREEN, ">> Go to the start line on the left road and press 'KEY_FIRE' and do the same with the right road block.");
SendClientMessage(playerid, GREEN, " - When this is done, you will see a dialog to continue.");
BuildVehPosCount = 0;
BuildTakeVehPos = true;
}
case 605:
{
if(!response) return ShowDialog(playerid, 604);
SendClientMessage(playerid, GREEN, ">> Start taking checkpoints now by clicking 'KEY_FIRE'.");
SendClientMessage(playerid, GREEN, " - IMPORTANT: Press 'ENTER' when you're done with the checkpoints! If it doesn't react press again and again.");
BuildCheckPointCount = 0;
BuildTakeCheckpoints = true;
}
case 606:
{
if(!response) return ShowDialog(playerid, 606);
BuildRace = 0;
BuildCheckPointCount = 0;
BuildVehPosCount = 0;
BuildTakeCheckpoints = false;
BuildTakeVehPos = false;
BuildCreatedVehicle = (BuildCreatedVehicle == 0x01) ? (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00) : (DestroyVehicle(BuildVehicle), BuildCreatedVehicle = 0x00);
}
}
return 1;
}

public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
{
new
string[256],
rNameFile[256],
rFile[256],
Float: vPos[4]
;
if(newkeys & KEY_FIRE)
{
if(BuildRace == playerid+1)
{
if(BuildTakeVehPos == true)
{
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, ">> You need to be in a vehicle");
format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", BuildName);
GetVehiclePos(GetPlayerVehicleID(playerid), vPos[0], vPos[1], vPos[2]);
GetVehicleZAngle(GetPlayerVehicleID(playerid), vPos[3]);
dini_Create(rFile);
dini_IntSet(rFile, "vModel", BuildModeVID);
dini_IntSet(rFile, "rType", BuildRaceType);
format(string, sizeof(string), "vPosX_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[0]);
format(string, sizeof(string), "vPosY_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[1]);
format(string, sizeof(string), "vPosZ_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[2]);
format(string, sizeof(string), "vAngle_%d", BuildVehPosCount), dini_FloatSet(rFile, string, vPos[3]);
format(string, sizeof(string), ">> Vehicle Pos '%d' has been taken.", BuildVehPosCount+1);
SendClientMessage(playerid, YELLOW, string);
BuildVehPosCount++;
}
if(BuildVehPosCount >= 2)
{
BuildVehPosCount = 0;
BuildTakeVehPos = false;
ShowDialog(playerid, 605);
}
if(BuildTakeCheckpoints == true)
{
if(BuildCheckPointCount > MAX_RACE_CHECKPOINTS_EACH_RACE) return SendClientMessage(playerid, RED, ">> You reached the maximum amount of checkpoints!");
if(!IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid, RED, ">> You need to be in a vehicle");
format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", BuildName);
GetVehiclePos(GetPlayerVehicleID(playerid), vPos[0], vPos[1], vPos[2]);
format(string, sizeof(string), "CP_%d_PosX", BuildCheckPointCount), dini_FloatSet(rFile, string, vPos[0]);
format(string, sizeof(string), "CP_%d_PosY", BuildCheckPointCount), dini_FloatSet(rFile, string, vPos[1]);
format(string, sizeof(string), "CP_%d_PosZ", BuildCheckPointCount), dini_FloatSet(rFile, string, vPos[2]);
format(string, sizeof(string), ">> Checkpoint '%d' has been setted!", BuildCheckPointCount+1);
SendClientMessage(playerid, YELLOW, string);
BuildCheckPointCount++;
}
}
}
if(newkeys & KEY_SECONDARY_ATTACK)
{
if(BuildTakeCheckpoints == true)
{
ShowDialog(playerid, 606);
format(rNameFile, sizeof(rNameFile), "/rRaceSystem/RaceNames/RaceNames.txt");
TotalRaces = dini_Int(rNameFile, "TotalRaces");
TotalRaces++;
dini_IntSet(rNameFile, "TotalRaces", TotalRaces);
format(string, sizeof(string), "Race_%d", TotalRaces-1);
format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", BuildName);
dini_Set(rNameFile, string, BuildName);
dini_IntSet(rFile, "TotalCP", BuildCheckPointCount);
Loop(x, 5)
{
format(string, sizeof(string), "BestRacerTime_%d", x);
dini_Set(rFile, string, "0");
format(string, sizeof(string), "BestRacer_%d", x);
dini_Set(rFile, string, "noone");
}
}
}

if (IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
        {

        if(newkeys & KEY_FIRE)
        {



        if(EnableBoast[playerid] == 1)
        {
        new Float:vx,Float:vy,Float:vz;
        GetVehicleVelocity(GetPlayerVehicleID(playerid),vx,vy,vz);
        SetVehicleVelocity(GetPlayerVehicleID(playerid), vx * 1.8, vy *1.8, vz * 1.8);
        }
        }
        }


        if (IsPlayerInAnyVehicle(playerid) && GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
        {
        if (newkeys & KEY_CROUCH)
        {

        if(EnableBoast[playerid] == 1)
        {
        new Float:x, Float:y, Float:z;
        GetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z);
        SetVehicleVelocity(GetPlayerVehicleID(playerid),x,y,z+0.3);
        }
        }
        }
return 1;
}

function LoadRaceNames()
{
new
rNameFile[64],
string[64]
;
format(rNameFile, sizeof(rNameFile), "/rRaceSystem/RaceNames/RaceNames.txt");
TotalRaces = dini_Int(rNameFile, "TotalRaces");
Loop(x, TotalRaces)
{
format(string, sizeof(string), "Race_%d", x), strmid(RaceNames[x], dini_Get(rNameFile, string), 0, 20, sizeof(RaceNames));
printf(">> Loaded Races: %s", RaceNames[x]);
}
return 1;
}

function LoadAutoRace(rName[])
{
new
rFile[256],
string[256]
;
format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", rName);
if(!dini_Exists(rFile)) return printf("Race \"%s\" doesn't exist!", rName);
strmid(RaceName, rName, 0, strlen(rName), sizeof(RaceName));
RaceVehicle = dini_Int(rFile, "vModel");
RaceType = dini_Int(rFile, "rType");
TotalCP = dini_Int(rFile, "TotalCP");

#if DEBUG_RACE == 1
printf("VehicleModel: %d", RaceVehicle);
printf("RaceType: %d", RaceType);
printf("TotalCheckpoints: %d", TotalCP);
#endif

Loop(x, 2)
{
format(string, sizeof(string), "vPosX_%d", x), RaceVehCoords[x][0] = dini_Float(rFile, string);
format(string, sizeof(string), "vPosY_%d", x), RaceVehCoords[x][1] = dini_Float(rFile, string);
format(string, sizeof(string), "vPosZ_%d", x), RaceVehCoords[x][2] = dini_Float(rFile, string);
format(string, sizeof(string), "vAngle_%d", x), RaceVehCoords[x][3] = dini_Float(rFile, string);
#if DEBUG_RACE == 1
printf("VehiclePos %d: %f, %f, %f, %f", x, RaceVehCoords[x][0], RaceVehCoords[x][1], RaceVehCoords[x][2], RaceVehCoords[x][3]);
#endif
}
Loop(x, TotalCP)
{
format(string, sizeof(string), "CP_%d_PosX", x), CPCoords[x][0] = dini_Float(rFile, string);
format(string, sizeof(string), "CP_%d_PosY", x), CPCoords[x][1] = dini_Float(rFile, string);
format(string, sizeof(string), "CP_%d_PosZ", x), CPCoords[x][2] = dini_Float(rFile, string);
#if DEBUG_RACE == 1
printf("RaceCheckPoint %d: %f, %f, %f", x, CPCoords[x][0], CPCoords[x][1], CPCoords[x][2]);
#endif
}
Position = 0;
FinishCount = 0;
JoinCount = 0;
Loop(x, 2) PlayersCount[x] = 0;
CountAmount = COUNT_DOWN_TILL_RACE_START;
RaceTime = MAX_RACE_TIME;
RaceBusy = 0x01;
CountTimer = SetTimer("CountTillRace", 999, 1);
TimeProgress = 0;
return 1;
}

function LoadRace(playerid, rName[])
{
new
rFile[256],
string[256]
;
format(rFile, sizeof(rFile), "/rRaceSystem/%s.RRACE", rName);
if(!dini_Exists(rFile)) return SendClientMessage(playerid, RED, "<!> Race doesn't exist!"), printf("Race \"%s\" doesn't exist!", rName);
strmid(RaceName, rName, 0, strlen(rName), sizeof(RaceName));
RaceVehicle = dini_Int(rFile, "vModel");
RaceType = dini_Int(rFile, "rType");
TotalCP = dini_Int(rFile, "TotalCP");

#if DEBUG_RACE == 1
printf("VehicleModel: %d", RaceVehicle);
printf("RaceType: %d", RaceType);
printf("TotalCheckpoints: %d", TotalCP);
#endif

Loop(x, 2)
{
format(string, sizeof(string), "vPosX_%d", x), RaceVehCoords[x][0] = dini_Float(rFile, string);
format(string, sizeof(string), "vPosY_%d", x), RaceVehCoords[x][1] = dini_Float(rFile, string);
format(string, sizeof(string), "vPosZ_%d", x), RaceVehCoords[x][2] = dini_Float(rFile, string);
format(string, sizeof(string), "vAngle_%d", x), RaceVehCoords[x][3] = dini_Float(rFile, string);
#if DEBUG_RACE == 1
printf("VehiclePos %d: %f, %f, %f, %f", x, RaceVehCoords[x][0], RaceVehCoords[x][1], RaceVehCoords[x][2], RaceVehCoords[x][3]);
#endif
}
Loop(x, TotalCP)
{
format(string, sizeof(string), "CP_%d_PosX", x), CPCoords[x][0] = dini_Float(rFile, string);
format(string, sizeof(string), "CP_%d_PosY", x), CPCoords[x][1] = dini_Float(rFile, string);
format(string, sizeof(string), "CP_%d_PosZ", x), CPCoords[x][2] = dini_Float(rFile, string);
#if DEBUG_RACE == 1
printf("RaceCheckPoint %d: %f, %f, %f", x, CPCoords[x][0], CPCoords[x][1], CPCoords[x][2]);
#endif
}
Position = 0;
FinishCount = 0;
JoinCount = 0;
Loop(x, 2) PlayersCount[x] = 0;
Joined[playerid] = true;
CountAmount = COUNT_DOWN_TILL_RACE_START;
RaceTime = MAX_RACE_TIME;
RaceBusy = 0x01;
TimeProgress = 0;
SetupRaceForPlayer(playerid);
CountTimer = SetTimer("CountTillRace", 999, 1);
return 1;
}

function SetCP(playerid, PrevCP, NextCP, MaxCP, Type)
{
if(Type == 0)
{
if(NextCP == MaxCP) SetPlayerRaceCheckpoint(playerid, 1, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
else SetPlayerRaceCheckpoint(playerid, 0, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
}
else if(Type == 3)
{
if(NextCP == MaxCP) SetPlayerRaceCheckpoint(playerid, 4, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
else SetPlayerRaceCheckpoint(playerid, 3, CPCoords[PrevCP][0], CPCoords[PrevCP][1], CPCoords[PrevCP][2], CPCoords[NextCP][0], CPCoords[NextCP][1], CPCoords[NextCP][2], RACE_CHECKPOINT_SIZE);
}
return 1;
}

function SetupRaceForPlayer(playerid)
{
CPProgess[playerid] = 0;
TogglePlayerControllable(playerid, false);
CPCoords[playerid][3] = 0;
SetCP(playerid, CPProgess[playerid], CPProgess[playerid]+1, TotalCP, RaceType);
if(IsOdd(playerid)) Index = 1;
else Index = 0;

switch(Index)
{
case 0:
{
if(PlayersCount[0] == 1)
{
RaceVehCoords[0][0] -= (6 * floatsin(-RaceVehCoords[0][3], degrees));
RaceVehCoords[0][1] -= (6 * floatcos(-RaceVehCoords[0][3], degrees));
CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2, RaceVehCoords[0][3], random(126), random(126), (60 * 60));
SetPlayerPos(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2);
SetPlayerFacingAngle(playerid, RaceVehCoords[0][3]);
PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);
Camera(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2], RaceVehCoords[0][3], 20);
}
}
case 1:
{
if(PlayersCount[1] == 1)
{
RaceVehCoords[1][0] -= (6 * floatsin(-RaceVehCoords[1][3], degrees));
RaceVehCoords[1][1] -= (6 * floatcos(-RaceVehCoords[1][3], degrees));
CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2, RaceVehCoords[1][3], random(126), random(126), (60 * 60));
SetPlayerPos(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2);
SetPlayerFacingAngle(playerid, RaceVehCoords[1][3]);
PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);
Camera(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2], RaceVehCoords[1][3], 20);
}
}
}
switch(Index)
{
case 0:
{
if(PlayersCount[0] != 1)
{
CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2, RaceVehCoords[0][3], random(126), random(126), (60 * 60));
SetPlayerPos(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2]+2);
SetPlayerFacingAngle(playerid, RaceVehCoords[0][3]);
PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);
Camera(playerid, RaceVehCoords[0][0], RaceVehCoords[0][1], RaceVehCoords[0][2], RaceVehCoords[0][3], 20);
PlayersCount[0] = 1;
}
}
case 1:
{
if(PlayersCount[1] != 1)
{
CreatedRaceVeh[playerid] = CreateVehicle(RaceVehicle, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2, RaceVehCoords[1][3], random(126), random(126), (60 * 60));
SetPlayerPos(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2]+2);
SetPlayerFacingAngle(playerid, RaceVehCoords[1][3]);
PutPlayerInVehicle(playerid, CreatedRaceVeh[playerid], 0);
Camera(playerid, RaceVehCoords[1][0], RaceVehCoords[1][1], RaceVehCoords[1][2], RaceVehCoords[1][3], 20);
PlayersCount[1] = 1;
}
}
}
new
string[128]
;
#if defined RACE_IN_OTHER_WORLD
SetPlayerVirtualWorld(playerid, 10);
#endif
InfoTimer[playerid] = SetTimerEx("TextInfo", 500, 1, "e", playerid);
if(JoinCount == 1) format(string, sizeof(string), "RaceName: ~w~%s~n~~p~~h~Checkpoint: ~w~%d/%d~n~~b~~h~RaceTime: ~w~%s~n~~y~RacePosition: ~w~1/1~n~ ", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime));
else format(string, sizeof(string), "RaceName: ~w~%s~n~~p~~h~Checkpoint: ~w~%d/%d~n~~b~~h~RaceTime: ~w~%s~n~~y~RacePosition: ~w~%d/%d~n~ ", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime), RacePosition[playerid], JoinCount);
TextDrawSetString(RaceInfo[playerid], string);
TextDrawShowForPlayer(playerid, RaceInfo[playerid]);
JoinCount++;
return 1;
}

function CountTillRace()
{
switch(CountAmount)
{
case 0:
{
ForEach(i, MAX_PLAYERS)
{
if(Joined[i] == false)
{
new
string[128]
;
format(string, sizeof(string), ">> You can't join to \"%s\" named race anymore. Join time is over!", RaceName);
SendClientMessage(i, RED, string);
}
}
StartRace();
}
case 1..5:
{
new
string[10]
;
format(string, sizeof(string), "~b~%d", CountAmount);
ForEach(i, MAX_PLAYERS)
{
if(Joined[i] == true)
{
GameTextForPlayer(i, string, 999, 5);
PlayerPlaySound(i, 1056, 0.0, 0.0, 0.0);
}
}
}
case 60, 50, 40, 30, 20, 10:
{
new
string[128]
;
format(string, sizeof(string), ">> \"%d\" seconds till \"%s\" named race starts! Type \"/joinrace\" to join the race.", CountAmount, RaceName);
SendClientMessageToAll(GREEN, string);
}
}
return CountAmount--;
}

function StartRace()
{
ForEach(i, MAX_PLAYERS)
{
if(Joined[i] == true)
{
TogglePlayerControllable(i, true);
PlayerPlaySound(i, 1057, 0.0, 0.0, 0.0);
GameTextForPlayer(i, "~g~GO GO GO", 2000, 5);
SetCameraBehindPlayer(i);
EnableBoast[i] = 0;
}
}
rCounter = SetTimer("RaceCounter", 900, 1);
RaceTick = GetTickCount();
RaceStarted = 1;
KillTimer(CountTimer);
return 1;
}

function StopRace()
{
KillTimer(rCounter);
RaceStarted = 0;
RaceTick = 0;
RaceBusy = 0x00;
JoinCount = 0;
FinishCount = 0;
TimeProgress = 0;

ForEach(i, MAX_PLAYERS)
{
if(Joined[i] == true)
{
DisablePlayerRaceCheckpoint(i);
DestroyVehicle(CreatedRaceVeh[i]);
Joined[i] = false;
TextDrawHideForPlayer(i, RaceInfo[i]);
CPProgess[i] = 0;
KillTimer(InfoTimer[i]);
}
}
SendClientMessageToAll(YELLOW, ">> Race time is over!");
if(AutomaticRace == true) LoadRaceNames(), LoadAutoRace(RaceNames[random(TotalRaces)]);
return 1;
}

function RaceCounter()
{
if(RaceStarted == 1)
{
RaceTime--;
if(JoinCount <= 0)
{
StopRace();
SendClientMessageToAll(RED, ">> Race ended.. No one left in the race!");
}
}
if(RaceTime <= 0)
{
StopRace();
}
return 1;
}

function TextInfo(playerid)
{
new
string[128]
;
if(JoinCount == 1) format(string, sizeof(string), "RaceName: ~w~%s~n~~p~~h~Checkpoint: ~w~%d/%d~n~~b~~h~RaceTime: ~w~%s~n~~y~RacePosition: ~w~1/1~n~", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime));
else format(string, sizeof(string), "RaceName: ~w~%s~n~~p~~h~Checkpoint: ~w~%d/%d~n~~b~~h~RaceTime: ~w~%s~n~~y~RacePosition: ~w~%d/%d~n~", RaceName, CPProgess[playerid], TotalCP, TimeConvert(RaceTime), RacePosition[playerid], JoinCount);
TextDrawSetString(RaceInfo[playerid], string);
TextDrawShowForPlayer(playerid, RaceInfo[playerid]);
}

function Camera(playerid, Float:X, Float:Y, Float:Z, Float:A, Mul)
{
SetPlayerCameraLookAt(playerid, X, Y, Z);
SetPlayerCameraPos(playerid, X + (Mul * floatsin(-A, degrees)), Y + (Mul * floatcos(-A, degrees)), Z+6);
}

function IsPlayerInRace(playerid)
{
if(Joined[playerid] == true) return true;
else return false;
}

function ShowDialog(playerid, dialogid)
{
switch(dialogid)
{
case 599: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_LIST, CreateCaption("Build New Race"), "\
Normal Race\n\
Air Race"
, "Next", "Exit");

case 600: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Build New Race (Step 1/4)"), "\
Step 1:\n\
********\n\
Welcome to wizard 'Build New Race'.\n\
Before getting started, I need to know the name (e.g. SFRace) of the to save it under.\n\n\
>> Give the NAME below and press 'Next' to continue."
, "Next", "Back");

case 601: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Build New Race (Step 1/4)"), "\
ERROR: Name too short or too long! (min. 1 - max. 20)\n\n\n\
Step 1:\n\
********\n\
Welcome to wizard 'Build New Race'.\n\
Before getting started, I need to know the name (e.g. SFRace) of the to save it under.\n\n\
>> Give the NAME below and press 'Next' to continue."
, "Next", "Back");

case 602: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Build New Race (Step 2/4)"), "\
Step 2:\n\
********\n\
Please give the ID or NAME of the vehicle that's going to be used in the race you are creating now.\n\n\
>> Give the ID or NAME of the vehicle below and press 'Next' to continue. 'Back' to change something."
, "Next", "Back");

case 603: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_INPUT, CreateCaption("Build New Race (Step 2/4)"), "\
ERROR: Invalid Vehilce ID/Name\n\n\n\
Step 2:\n\
********\n\
Please give the ID or NAME of the vehicle that's going to be used in the race you are creating now.\n\n\
>> Give the ID or NAME of the vehicle below and press 'Next' to continue. 'Back' to change something."
, "Next", "Back");

case 604: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateCaption("Build New Race (Step 3/4)"),
"\
Step 3:\n\
********\n\
We are almost done! Now go to the start line where the first and second car should stand.\n\
Note: When you click 'OK' you will be free. Use 'KEY_FIRE' to set the first position and second position.\n\
Note: After you got these positions you will automaticly see a dialog to continue the wizard.\n\n\
>> Press 'OK' to do the things above. 'Back' to change something."
, "OK", "Back");

case 605: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateCaption("Build New Race (Step 4/4)"),
"\
Step 4:\n\
********\n\
Welcome to the last stap. In this stap you have to set the checkpoints; so if you click 'OK' you can set the checkpoints.\n\
You can set the checkpoints with 'KEY_FIRE'. Each checkpoint you set will save.\n\
You have to press 'ENTER' button when you're done with everything. You race is aviable then!\n\n\
>> Press 'OK' to do the things above. 'Back' to change something."
, "OK", "Back");

case 606: ShowPlayerDialog(playerid, dialogid, DIALOG_STYLE_MSGBOX, CreateCaption("Build New Race (Done)"),
"\
You have created your race and it's ready to use now.\n\n\
>> Press 'Finish' to finish. 'Exit' - Has no effect."
, "Finish", "Exit");
}
return 1;
}

CreateCaption(arguments[])
{
new
string[128 char]
;
format(string, sizeof(string), "RyDeR's Race System - %s", arguments);
return string;
}

stock IsValidVehicle(vehicleid)
{
if(vehicleid < 400 || vehicleid > 611) return false;
else return true;
}

ReturnVehicleID(vName[])
{
Loop(x, 211)
{
if(strfind(vNames[x], vName, true) != -1)
return x + 400;
}
return -1;
}

TimeConvert(seconds)
{
new tmp[16];
new minutes = floatround(seconds/60);
seconds -= minutes*60;
format(tmp, sizeof(tmp), "%d:%02d", minutes, seconds);
return tmp;
}

stock isNumeric(const string[])
{
    new length=strlen(string);
    if (length==0) return false;
    for (new i = 0; i < length; i++) {
    if (
    (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
    || (string[i]=='-' && i!=0) // A '-' but not at first.
    || (string[i]=='+' && i!=0) // A '+' but not at first.
    ) return false;
    }
    if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
    return true;
}
Reply
#7

pawn Код:
stock isNumeric(const string[])
{
    new length=strlen(string);
    if (length==0) return false;
    for (new i = 0; i < length; i++) {
    if (
    (string[i] > '9' || string[i] < '0' && string[i]!='-' && string[i]!='+') // Not a number,'+' or '-'
    || (string[i]=='-' && i!=0) // A '-' but not at first.
    || (string[i]=='+' && i!=0) // A '+' but not at first.
    ) return false;
    }
    if (length==1 && (string[0]=='-' || string[0]=='+')) return false;
    return true;
}
Error on this part.

Код:
C:\Users\Kelvin\Desktop\Scripting\filterscripts\racenboost.pwn(1213) : error 025: function heading differs from prototype
C:\Users\Kelvin\Desktop\Scripting\filterscripts\racenboost.pwn(1214) : error 021: symbol already defined: "isNumeric"
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


2 Errors.
Reply
#8

I don't get any errors. Post what you got.
Reply
#9

Код:
C:\Users\Kelvin\Desktop\Scripting\filterscripts\racenboost.pwn(1213) : error 025: function heading differs from prototype
C:\Users\Kelvin\Desktop\Scripting\filterscripts\racenboost.pwn(1214) : error 021: symbol already defined: "isNumeric"
Pawn compiler 3.2.3664	 	 	Copyright © 1997-2006, ITB CompuPhase


2 Errors.
Reply
#10

I don't like the idea of using muliple FS's actually, I don't like the idea of mixing FS's as part of your gamemode (unless it's some kind of dynamic system where missions load/unload) at any rate this is really the only use for pvars I can think of. Set a pvar - SetPVarInt(playerid, "DisableBoost", 1); when your racing script loads then check for that in the boost script. I don't really like this idea it's sloppy but it's the easiest and fastest way to get what you want.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)