[FilterScript] CarOwnership [1ST FILSTERSCRIPT]
#1

This is my first FilterScript made time back for my friend's LV server. Forgive me if I posted it un-correctly and pm me if you want me to change it.

Pawno code.

Код:
    //===========================Section: Includes==================================
    #include <a_samp>
    //===========================Section: Definitions===============================
    #define COLOR_GRAD1 0xB4B5B7FF
    #define COLOR_GRAD2 0xBFC0C2FF
    #define COLOR_GRAD3 0xCBCCCEFF
    #define COLOR_GRAD4 0xD8D8D8FF
    #define COLOR_GRAD5 0xE3E3E3FF
    #define COLOR_GRAD6 0xF0F0F0FF
    #define COLOR_GREEN 0x33AA33AA
    #define COLOR_GREY 0xAFAFAFAA
    #define COLOR_WHITE 0xFFFFFFAA
    #define COLOR_YELLOW 0xFFFF00AA
    #define COLOR_YELLOW2 0xF5DEB3AA
    //===========================Section: Forwards==================================
    forward split(const strsrc[], strdest[][], delimiter);
    forward LoadCar();
    forward CheckOwner(playerid);
    forward SaveCars();
    //===========================Section: Variables=================================
    enum pInfo
    {
       pCarKey,
    }
    new PlayerInfo[256][pInfo];
    enum cInfo
    {
       cModel,
       Float:cLocationx,
       Float:cLocationy,
       Float:cLocationz,
       Float:cAngle,
       cColorOne,
       cColorTwo,
       cOwner[MAX_PLAYER_NAME],
       cDescription[MAX_PLAYER_NAME],
       cValue,
       cLicense,
       cRegistration,
       cOwned,
       cLock,
       ownedvehicle,
    };
    new CarInfo[12][cInfo];
 
    new CarAutolock[999]; // Variable for Autolocking Car Doors
    new cartrack[256];
    new CarOffered[256];
    //===========================Section: strtok & split============================
    strtok(const string[], &index)
    {
       new length = strlen(string);
       while ((index < length) && (string[index] <= ' '))
       {
          index++;
       }
 
       new offset = index;
       new result[20];
       while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
       {
          result[index - offset] = string[index];
          index++;
       }
       result[index - offset] = EOS;
       return result;
    }
 
    public split(const strsrc[], strdest[][], delimiter)
    {
       new i, li;
       new aNum;
       new len;
       while(i <= strlen(strsrc)){
           if(strsrc[i]==delimiter || i==strlen(strsrc)){
               len = strmid(strdest[aNum], strsrc, li, i, 128);
               strdest[aNum][len] = 0;
               li = i+1;
               aNum++;
          }
          i++;
       }
       return 1;
    }
    //===========================Section: Callbacks & Functions=====================
    public OnFilterScriptInit()
    {
       printf("Filterscript [FS]CarOwnership.amx Initiated\n");
       LoadCar();
       for(new i = 1; i < sizeof(CarInfo); i++)
       {
          CarInfo[i][ownedvehicle] = CreateVehicle(CarInfo[i][cModel],CarInfo[i][cLocationx],CarInfo[i][cLocationy],CarInfo[i][cLocationz],CarInfo[i][cAngle],CarInfo[i][cColorOne],CarInfo[i][cColorTwo],300000);
       }
       SetTimer("SaveCars",60000,1);
       SetTimer("CheckOwner",5000,1);
       return 1;
    }
    public OnVehicleSpawn(vehicleid)
    {
       for(new i = 1; i < sizeof(CarInfo); i++)
       {
          ChangeVehicleColor(CarInfo[i][ownedvehicle],CarInfo[vehicleid][cColorOne],CarInfo[vehicleid][cColorTwo]);
       }
       return 1;
    }
    public CheckOwner(playerid)
    {
       if(IsPlayerConnected(playerid))
       {
           for(new i = 1; i < sizeof(CarInfo); i++)
           {
               new playername[MAX_PLAYER_NAME];
               GetPlayerName(playerid,playername,sizeof(playername));
               if(strcmp(playername,CarInfo[i][cOwner],true)==0)
               {
                   PlayerInfo[i][pCarKey] = i;
                return i;
               }
          }
       }
       return 1;
    }
    public OnPlayerConnect(playerid)
    {
       PlayerInfo[playerid][pCarKey] = 0;
       CheckOwner(playerid);
       return 1;
    }
    public OnPlayerCommandText(playerid, cmdtext[])
    {
       new idx;
       new string[256];
       new cmd[256];
       new tmp[256];
       new sendername[MAX_PLAYER_NAME];
       cmd = strtok(cmdtext, idx);
       new vehid = GetPlayerVehicleID(playerid);
       if(strcmp(cmd, "/carbuy", true) == 0)
       {
           if(IsPlayerConnected(playerid))
           {
               for(new i = 0; i < sizeof(CarInfo); i++)
               {
                if(CarInfo[i][ownedvehicle] == vehid)
                {
                   if(PlayerInfo[playerid][pCarKey]!=0)
                   {
                      SendClientMessage(playerid, COLOR_GREY, "You already own a car, type /car sell if you want to buy this one!");
                      return 1;
                   }
                   if(CarInfo[i][cOwned]==1)
                   {
                       SendClientMessage(playerid, COLOR_GREY, "Someone already owns this car");
                       return 1;
                   }
                   if(GetPlayerMoney(playerid) >= CarInfo[i][cValue])
                   {
                      PlayerInfo[playerid][pCarKey] = i;
                      CarInfo[i][cOwned] = 1;
                      CarOffered[playerid]=0;
                      GetPlayerName(playerid, sendername, sizeof(sendername));
                      strmid(CarInfo[i][cOwner], sendername, 0, strlen(sendername), 999);
                      GivePlayerMoney(playerid,-CarInfo[i][cValue]);
                      GameTextForPlayer(playerid, "~w~Congratulations~n~This is your car until you sell it!", 5000, 3);
                      SendClientMessage(playerid, COLOR_GRAD2, "Congratulations on your new purchase!");
                      SendClientMessage(playerid, COLOR_GRAD2, "Type /car manual to view the car manual!");
                      TogglePlayerControllable(playerid, 1);
                      SaveCars();
                      return 1;
                   }
                   else
                   {
                      SendClientMessage(playerid, COLOR_GREY, "   You don't have the cash for that!");
                      return 1;
                   }
                }
             }
          }
          return 1;
       }
       if(strcmp(cmd,"/car",true)==0)
       {
          new playername[MAX_PLAYER_NAME];
          GetPlayerName(playerid,playername,sizeof(playername));
           tmp = strtok(cmdtext, idx);
           if(!strlen(tmp))
           {
               SendClientMessage(playerid,COLOR_WHITE,"(( Use /car manual for detailed instructions for: ))");
               SendClientMessage(playerid,COLOR_WHITE,"(( [CarOwnership by KDSTStaff ))");
               return 1;
           }
           if(strcmp(tmp,"exit",true)==0)
           {
               CarOffered[playerid]=0;
               RemovePlayerFromVehicle(playerid);
               TogglePlayerControllable(playerid, 1);
               return 1;
           }
          if(strcmp(tmp, "manual", true) == 0)
          {
              if(IsPlayerConnected(playerid))
              {
                  if(PlayerInfo[playerid][pCarKey]!=0)
                  {
                   format(string,sizeof(string),"________________%s________________",CarInfo[CheckOwner(playerid)][cDescription]);
                   SendClientMessage(playerid, COLOR_GREEN,string);
                   SendClientMessage(playerid, COLOR_GRAD2,"** /carbuy - Buys the car (if for sale)");
                   SendClientMessage(playerid, COLOR_GRAD2,"** /car sell - Sells the car");
                   SendClientMessage(playerid, COLOR_GRAD2,"** /car manual - Shows this list");
                   SendClientMessage(playerid, COLOR_GRAD2,"** /car exit - Exits the car");
                   SendClientMessage(playerid, COLOR_GRAD2,"** /car locate - Uses the car's On-Star to locate");
                   SendClientMessage(playerid, COLOR_GRAD2,"** /car lock - Locks the car");
                   SendClientMessage(playerid, COLOR_GRAD2,"** /car unlock - Unlocks the car");
                   SendClientMessage(playerid, COLOR_GRAD2,"** /car autolock - Automatically locks the car upon exiting");
                   return 1;
                }
                else
                {
                    SendClientMessage(playerid,COLOR_GRAD2,"** You do not currently own a car! **");
                    return 1;
                }
             }
             return 1;
          }
          if(strcmp(tmp, "buy", true) == 0)
          {
              if(IsPlayerConnected(playerid))
              {
                  for(new i = 0; i < sizeof(CarInfo); i++)
                  {
                   if(CarInfo[i][ownedvehicle] == vehid)
                   {
                      if(PlayerInfo[playerid][pCarKey]!=0)
                      {
                         SendClientMessage(playerid, COLOR_GREY, "You already own a car, type /carsell if you want to buy this one!");
                         return 1;
                      }
                      if(CarInfo[i][cOwned]==1)
                      {
                          SendClientMessage(playerid, COLOR_GREY, "Someone already owns this car");
                          return 1;
                      }
                      if(GetPlayerMoney(playerid) >= CarInfo[i][cValue])
                      {
                         PlayerInfo[playerid][pCarKey] = i;
                         CarInfo[i][cOwned] = 1;
                         CarOffered[playerid]=0;
                         GetPlayerName(playerid, sendername, sizeof(sendername));
                         strmid(CarInfo[i][cOwner], sendername, 0, strlen(sendername), 999);
                         GivePlayerMoney(playerid,-CarInfo[i][cValue]);
                         GameTextForPlayer(playerid, "~w~Congratulations~n~This is your car until you sell it!", 5000, 3);
                         SendClientMessage(playerid, COLOR_GRAD2, "Congratulations on your new purchase!");
                         SendClientMessage(playerid, COLOR_GRAD2, "Type /manual to view the car manual!");
                         TogglePlayerControllable(playerid, 1);
                         SaveCars();
                         return 1;
                      }
                      else
                      {
                         SendClientMessage(playerid, COLOR_GREY, "   You don't have the cash for that!");
                         return 1;
                      }
                   }
                }
             }
             return 1;
          }
          if(strcmp(tmp, "sell", true) == 0)
          {
              if(IsPlayerConnected(playerid))
             {
                GetPlayerName(playerid, playername, sizeof(playername));
                if(PlayerInfo[playerid][pCarKey] == 0)
                {
                   SendClientMessage(playerid, COLOR_GREY, "You don't own a car.");
                   return 1;
                }
                if(PlayerInfo[playerid][pCarKey] != 0 && strcmp(playername, CarInfo[PlayerInfo[playerid][pCarKey]][cOwner], true) == 0)
                {
                   new car = PlayerInfo[playerid][pCarKey];
                   CarInfo[car][cOwned] = 0;
                   GetPlayerName(playerid, sendername, sizeof(sendername));
                   strmid(CarInfo[car][cOwner], "Dealership", 0, strlen("Dealership"), 999);
                   GivePlayerMoney(playerid,CarInfo[car][cValue]);
                   PlayerPlaySound(playerid, 1052, 0.0, 0.0, 0.0);
                   format(string, sizeof(string), "~w~You have sold your car for: ~n~~g~$%d", CarInfo[car][cValue]);
                   GameTextForPlayer(playerid, string, 10000, 3);
                   RemovePlayerFromVehicle(playerid);
                   TogglePlayerControllable(playerid, 1);
                   PlayerInfo[playerid][pCarKey] = 999;
                   return 1;
                }
             }
             return 1;
          }
          if(strcmp(tmp, "locate", true) == 0)
          {
              if(!IsPlayerConnected(playerid)) { return 1; }
              if(PlayerInfo[playerid][pCarKey] == 0) { GameTextForPlayer(playerid, "~w~You do not have a car to locate", 2500, 3); return 1; }
              if(cartrack[playerid]==0)
              {
                  SendClientMessage(playerid,COLOR_WHITE,"On-Star: This is On-Star's automated vehicle tracking system");
                  SendClientMessage(playerid,COLOR_WHITE,"On-Star: Please enter your PIN # and password now");
                  SendClientMessage(playerid,COLOR_WHITE,"On-Star: Your vehicle's location is now uploaded to your phone");
                  SetPlayerCheckpoint(playerid,CarInfo[PlayerInfo[playerid][pCarKey]][cLocationx], CarInfo[PlayerInfo[playerid][pCarKey]][cLocationy], CarInfo[PlayerInfo[playerid][pCarKey]][cLocationz], 5.0);
                  cartrack[playerid] = 1;
                  return 1;
             }
             else
             {
                  SendClientMessage(playerid,COLOR_WHITE,"On-Star: This is On-Star's automated vehicle tracking system");
                  SendClientMessage(playerid,COLOR_WHITE,"On-Star: The tracking on your vehicle has been canceled");
                  DisablePlayerCheckpoint(playerid);
                  cartrack[playerid] = 0;
                  return 1;
             }
          }
          if(strcmp(tmp, "lock", true) == 0)
           {
             new keycar = PlayerInfo[playerid][pCarKey];
              if(IsPlayerConnected(playerid))
               {
                for(new i = 0; i < MAX_PLAYERS; i++)
                {
                   SetVehicleParamsForPlayer(CarInfo[keycar][ownedvehicle],i,0,1);
                }
                format(string, sizeof(string), "~w~Car~n~~r~Locked");
                GameTextForPlayer(playerid, string, 10000, 3);
                CarInfo[keycar][cLock] = 1;
                return 1;
             }
          }
          if(strcmp(tmp, "unlock", true) == 0)
           {
             new keycar = PlayerInfo[playerid][pCarKey];
              if(IsPlayerConnected(playerid))
               {
                for(new i = 0; i < MAX_PLAYERS; i++)
                {
                   SetVehicleParamsForPlayer(CarInfo[keycar][ownedvehicle],i,0,0);
                }
                format(string, sizeof(string), "~w~Car~n~~g~Unlocked");
                GameTextForPlayer(playerid, string, 10000, 3);
                CarInfo[keycar][cLock] = 0;
                return 1;
             }
          }
          if(strcmp(tmp, "autolock", true) == 0)
           {
             new keycar = PlayerInfo[playerid][pCarKey];
              if(CarAutolock[CarInfo[keycar][ownedvehicle]] == 0) { CarAutolock[CarInfo[keycar][ownedvehicle]] = 1; format(string, sizeof(string), "~w~Car Autolock~n~~r~Engaged"); return 1; }
              if(CarAutolock[CarInfo[keycar][ownedvehicle]] == 1) { CarAutolock[CarInfo[keycar][ownedvehicle]] = 0; format(string, sizeof(string), "~w~Car Autolock~n~~g~Disengaged"); return 1; }
              GameTextForPlayer(playerid, string, 10000, 3);
              return 1;
          }
       }
       return 0;
    }
    /*----------Car Save Functions----------*/
    public LoadCar()
    {
       new arrCoords[13][64];
       new strFromFile2[256];
       new File: file = fopen("[FS]CarOwnership.cfg", io_read);
       if (file)
       {
          new idx = 0;
          while (idx < sizeof(CarInfo))
          {
             fread(file, strFromFile2);
             split(strFromFile2, arrCoords, ',');
             CarInfo[idx][cModel] = strval(arrCoords[0]);
             CarInfo[idx][cLocationx] = floatstr(arrCoords[1]);
             CarInfo[idx][cLocationy] = floatstr(arrCoords[2]);
             CarInfo[idx][cLocationz] = floatstr(arrCoords[3]);
             CarInfo[idx][cAngle] = floatstr(arrCoords[4]);
             CarInfo[idx][cColorOne] = strval(arrCoords[5]);
             CarInfo[idx][cColorTwo] = strval(arrCoords[6]);
             strmid(CarInfo[idx][cOwner], arrCoords[7], 0, strlen(arrCoords[7]), 255);
             strmid(CarInfo[idx][cDescription], arrCoords[8], 0, strlen(arrCoords[8]), 255);
             CarInfo[idx][cValue] = strval(arrCoords[9]);
             CarInfo[idx][cLicense] = strval(arrCoords[10]);
             CarInfo[idx][cOwned] = strval(arrCoords[11]);
             CarInfo[idx][cLock] = strval(arrCoords[12]);
             printf("CarInfo: %d Owner:%s LicensePlate %s",idx,CarInfo[idx][cOwner],CarInfo[idx][cLicense]);
             idx++;
          }
       }
       return 1;
    }
    public SaveCars()
    {
       new idx;
       new File: file2;
       while (idx < sizeof(CarInfo))
       {
           new coordsstring[256];
          format(coordsstring, sizeof(coordsstring), "%d,%f,%f,%f,%f,%d,%d,%s,%s,%d,%s,%d,%d\n",
          CarInfo[idx][cModel],
          CarInfo[idx][cLocationx],
          CarInfo[idx][cLocationy],
          CarInfo[idx][cLocationz],
          CarInfo[idx][cAngle],
          CarInfo[idx][cColorOne],
          CarInfo[idx][cColorTwo],
          CarInfo[idx][cOwner],
          CarInfo[idx][cDescription],
          CarInfo[idx][cValue],
          CarInfo[idx][cLicense],
          CarInfo[idx][cOwned],
          CarInfo[idx][cLock]);
          if(idx == 0)
          {
             file2 = fopen("[FS]CarOwnership.cfg", io_write);
          }
          else
          {
             file2 = fopen("[FS]CarOwnership.cfg", io_append);
          }
          fwrite(file2, coordsstring);
          idx++;
          fclose(file2);
       }
       return 1;
    }
    public OnVehicleRespray(vehicleid, color1, color2)
    {
       for(new i = 0; i < sizeof(CarInfo); i++)
       {
           if(vehicleid == CarInfo[i][ownedvehicle])
           {
             CarInfo[i][cColorOne] = color1;
             CarInfo[i][cColorTwo] = color2;
             printf("[FS]CarOwnership report");
             printf("** Car %s[%d] painted %d and %d",CarInfo[i][cDescription],i,color1,color2);
          }
       }
       return 1;
    }
    public OnPlayerExitVehicle(playerid, vehicleid)
    {
       if(IsPlayerConnected(playerid))
       {
           for(new i = 0; i < sizeof(CarInfo); i++)
           {
              if(vehicleid == CarInfo[i][ownedvehicle])
              {
                 new Float:x,Float:y,Float:z;
                new Float:a;
                GetVehiclePos(vehicleid, x, y, z);
                GetVehicleZAngle(vehicleid, a);
                CarInfo[i][cLocationx] = x;
                CarInfo[i][cLocationy] = y;
                CarInfo[i][cLocationz] = z;
                CarInfo[i][cAngle] = a;
             }
             if(CarAutolock[vehicleid] == 1)
             {
                 for(new j = 0; j < MAX_PLAYERS; i++)
                {
                   if (IsPlayerConnected(j))
                   {
                      SetVehicleParamsForPlayer(vehicleid,j,0,1);
                      GameTextForPlayer(playerid,"~w~Car~n~~r~Autolocked",2500,3);
                      return 1;
                   }
                }
             }
          }
       }
       return 1;
    }
    public OnPlayerStateChange(playerid, newstate, oldstate)
    {
       if(newstate==2)
       {
           for(new i = 0; i < sizeof(CarInfo); i++)
           {
              new newcar = GetPlayerVehicleID(playerid);
              new string[256];
               if(newcar == CarInfo[i][ownedvehicle])
             {
                 if(CarInfo[i][cOwned]==0)
                 {
                     TogglePlayerControllable(playerid, 0);
                     CarOffered[playerid]=1;
                     format(string,sizeof(string),"~w~Car: %s~n~Price: ~g~%d~n~~w~/carbuy to buy this car",CarInfo[i][cDescription],CarInfo[i][cValue]);
                   GameTextForPlayer(playerid,string,5000,5);
                 }
             }
          }
       }
       return 1;
    }
    public OnPlayerEnterCheckpoint(playerid)
    {
       if(cartrack[playerid]!=0)
       {
          SendClientMessage(playerid,COLOR_YELLOW,"SMS: On-Star: Our sensors show that you have come within 5.0 metres of your vehicle");
          DisablePlayerCheckpoint(playerid);
          cartrack[playerid] = 0;
       }
       return 1;
    }
Locations of cars:

Код:
422,2135.418701,-1128.477294,25.593200,110.959999,1,1,Dealership,Bobcat,50000,,0,0
543,2136.328613,-1132.250976,25.511566,110.258712,1,1,Dealership,Sadler,50000,,0,0
554,2135.458496,-1136.625488,25.735660,107.892265,1,1,Dealership,Yosemite,50000,,0,0
579,2135.744140,-1140.979614,25.173116,111.251762,1,1,Dealership,Huntley,50000,,0,0
400,2136.281738,-1144.528686,24.955900,109.024398,1,1,Dealership,Landstalker,50000,,0,0
500,2136.882568,-1147.977294,24.593900,104.355201,1,1,Dealership,Mesa,50000,,0,0
489,2122.037597,-1157.092285,24.256799,356.001007,1,1,Dealership,Rancher,50000,,0,0
445,2117.238281,-1156.901367,24.194599,337.440185,1,1,Dealership,Admiral,50000,,0,0
492,2117.775146,-1148.868041,24.202800,331.458801,1,1,Dealership,Greenwood,50000,,0,0
410,2117.998535,-1141.823730,24.537799,325.724914,1,1,Dealership,Manana,50000,,0,0
600,2118.116210,-1135.639526,24.913400,326.202606,1,1,Dealership,Picador,50000,,0,0
496,2118.714111,-1129.351440,25.015199,318.569488,1,1,Dealership,Blista Compact,50000,,0,0

Filterscript
Name: [FS]CarOwnership
Version: SA-MP 0.2x
Credit: Me, Peace & KDST
Reply


Messages In This Thread
CarOwnership [1ST FILSTERSCRIPT] - by Twizted - 21.10.2011, 14:44
Re: CarOwnership [1ST FILSTERSCRIPT] - by SpiderWalk - 21.10.2011, 14:57
Re: CarOwnership [1ST FILSTERSCRIPT] - by Edvin - 21.10.2011, 14:59
Re: CarOwnership [1ST FILSTERSCRIPT] - by TheArcher - 21.10.2011, 15:12

Forum Jump:


Users browsing this thread: 2 Guest(s)