Jump to content

Flight-system maken.


sean5874

Recommended Posts

Hallo,

Ik zou graag een flight-system willen maken waarmee je je kan teleporten naar alle 3 San Andreas landen. Ik wil het graag zo hebben ingeprogrammeerd:

- Bij de ingang van de 3 vliegvelden staan standaard rode checkpoints

- Als je hier inloopt krijg je een dialogje met bestemmingen en andere info

- Om te vliegen kan je de commando's /fly ls, /fly lv en /fly sf gebruiken, je moet dan wel in het checkpoint staan anders krijg je een melding dat je je niet op het vliegveld bevindt.

- Je komt terecht in het rode checkpoint van het vliegveld van het land van je bestemming. Na het aankomen op bestemming wordt er 200 dollar vluchtkosten afgetrokken

Weet iemand hoe dit is in te programmeren? Als je een van de functies weet mag je dat ook zeggen. Alvast bedankt,

sean5874

Bewerkt: door sean5874
Link to comment
Delen op andere websites

Met pickups gaat het volgens mij iets makkelijker dan met checkpoints, want voor pickups heb je geen streamer nodig.

Om over te gaan tot het maken van het script ga je eerst een stappenplan maken:

Stappenplan: (Wat moet er gebeuren?)

  • Coördinaten opzoeken (/save)
  • Pickups plaatsen
  • Zeggen wat er moet gebeuren als iemand de pickup op pakt
    • Menu tonen: Kies Locatie: LS, SF, LV

    [*]Afhankelijk van de keuze die de speler maakt verplaats je hem naar een van de drie locaties.

Vervolens ga je opzoeken welke callbacks en functies je hier zeker voor nodig hebt:

CreatePickup, OnPlayerPickUpPickup, CreateMenu, ShowMenuForPlayer, OnPlayerSelectedMenuRow, SetPlayerPos

Daarna kan je overgaan naar het script werk:

new PU_AIRPORT[3];
new Menu:FlightMenu;

public OnGameModeInit()
{
   PU_AIRPORT[0] = CreatePickup(1239, 23, 0.0, 0.0, 0.0); // LS
   PU_AIRPORT[1] = CreatePickup(1239, 23, 0.0, 0.0, 0.0); // SF
   PU_AIRPORT[2] = CreatePickup(1239, 23, 0.0, 0.0, 0.0); // LV

   FlightMenu = CreateMenu("Kies locatie", 1, 200.0, 100.0, 150.0);
   AddMenuItem(FlightMenu, 0, "Los Santos");
   AddMenuItem(FlightMenu, 0, "San Fierro");
   AddMenuItem(FlightMenu, 0, "Las Venturas");
   return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
   for(new i = 0; i <= 3; i++)
   {
       if(pickupid == PU_AIRPORT[i])
       {
           TogglePlayerControllable(playerid, false);
           ShowMenuForPlayer(FlightMenu, playerid);
       }
   }
   return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
   new Menu:Current;
   Current = GetPlayerMenu(playerid);

   if(Current == FlightMenu)
   {
       switch(row)
       {
           case 0: // LS
           {
               // SetPlayerPos, etc
           }
           case 1: // SF
           {
               // SetPlayerPos, etc
           }
           case 2: // LV
           {
               // SetPlayerPos, etc
           }
       }
   }
   return 1;
}

public OnPlayerExitedMenu(playerid)
{
   TogglePlayerControllable(playerid, true);
   return 1;
}

Link to comment
Delen op andere websites

Met pickups gaat het volgens mij iets makkelijker dan met checkpoints, want voor pickups heb je geen streamer nodig.

Om over te gaan tot het maken van het script ga je eerst een stappenplan maken:

Stappenplan: (Wat moet er gebeuren?)

  • Coördinaten opzoeken (/save)
  • Pickups plaatsen
  • Zeggen wat er moet gebeuren als iemand de pickup op pakt
    • Menu tonen: Kies Locatie: LS, SF, LV

    [*]Afhankelijk van de keuze die de speler maakt verplaats je hem naar een van de drie locaties.

Vervolens ga je opzoeken welke callbacks en functies je hier zeker voor nodig hebt:

CreatePickup, OnPlayerPickUpPickup, CreateMenu, ShowMenuForPlayer, OnPlayerSelectedMenuRow, SetPlayerPos

Daarna kan je overgaan naar het script werk:

new PU_AIRPORT[3];
new Menu:FlightMenu;

public OnGameModeInit()
{
   PU_AIRPORT[0] = CreatePickup(1239, 23, 0.0, 0.0, 0.0); // LS
   PU_AIRPORT[1] = CreatePickup(1239, 23, 0.0, 0.0, 0.0); // SF
   PU_AIRPORT[2] = CreatePickup(1239, 23, 0.0, 0.0, 0.0); // LV

   FlightMenu = CreateMenu("Kies locatie", 1, 200.0, 100.0, 150.0);
   AddMenuItem(FlightMenu, 0, "Los Santos");
   AddMenuItem(FlightMenu, 0, "San Fierro");
   AddMenuItem(FlightMenu, 0, "Las Venturas");
   return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
   for(new i = 0; i <= 3; i++)
   {
       if(pickupid == PU_AIRPORT[i])
       {
           TogglePlayerControllable(playerid, false);
           ShowMenuForPlayer(FlightMenu, playerid);
       }
   }
   return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
   new Menu:Current;
   Current = GetPlayerMenu(playerid);

   if(Current == FlightMenu)
   {
       switch(row)
       {
           case 0: // LS
           {
               // SetPlayerPos, etc
           }
           case 1: // SF
           {
               // SetPlayerPos, etc
           }
           case 2: // LV
           {
               // SetPlayerPos, etc
           }
       }
   }
   return 1;
}

public OnPlayerExitedMenu(playerid)
{
   TogglePlayerControllable(playerid, true);
   return 1;
}

Bedankt voor je reactie! Als ik dit in mijn pawno plak krijg ik alleen 12 errors. Hoe moet ik dat verhelpen?

Link to comment
Delen op andere websites

[...]

Bedankt voor je reactie! Als ik dit in mijn pawno plak krijg ik alleen 12 errors. Hoe moet ik dat verhelpen?

Ik zou eerst eens beginnen met het lezen van tutorials. Zoek de Pawn Master Tutorial List op, lees in ieder geval de (blauwe) must-reads en wat simpele tutorials en je bent al een stuk verder! :tu:

Link to comment
Delen op andere websites

Bigboss ik vraag me echt af waar je last van hebt....

#include <a_samp>

#include <a_samp>

new PU_AIRPORT[3];
new Menu:FlightMenu;

public OnGameModeInit()
{
   PU_AIRPORT[0] = CreatePickup(1239, 23, 0.0, 0.0, 0.0); // LS
   PU_AIRPORT[1] = CreatePickup(1239, 23, 0.0, 0.0, 0.0); // SF
   PU_AIRPORT[2] = CreatePickup(1239, 23, 0.0, 0.0, 0.0); // LV

   FlightMenu = CreateMenu("Kies locatie", 1, 200.0, 100.0, 150.0);
   AddMenuItem(FlightMenu, 0, "Los Santos");
   AddMenuItem(FlightMenu, 0, "San Fierro");
   AddMenuItem(FlightMenu, 0, "Las Venturas");
   return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
   for(new i = 0; i <= 3; i++)
   {
       if(pickupid == PU_AIRPORT[i])
       {
           TogglePlayerControllable(playerid, false);
           ShowMenuForPlayer(FlightMenu, playerid);
       }
   }
   return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
   new Menu:Current;
   Current = GetPlayerMenu(playerid);

   if(Current == FlightMenu)
   {
       switch(row)
       {
           case 0: // LS
           {
               // SetPlayerPos, etc
           }
           case 1: // SF
           {
               // SetPlayerPos, etc
           }
           case 2: // LV
           {
               // SetPlayerPos, etc
           }
       }
   }
   return 1;
}

public OnPlayerExitedMenu(playerid)
{
   TogglePlayerControllable(playerid, true);
   return 1;
}

Link to comment
Delen op andere websites

Het script doet het nu, bedankt! Ik wil nu alleen nog voor elke vlucht 200 dollar aftrekken, kan je dit doen door bij GivePlayerMoney een negatief getal in te vullen? Als de speler niet genoeg geld voor een vlucht heeft, moet hij hiervan een melding krijgen.

Link to comment
Delen op andere websites

Om te kijken of iemand genoeg geld heeft is heel simpel.

Een negatief getal bij GivePlayerMoney kan ook

case 0: // LS           
{      
  If(GetPlayerMoney(playerid) <=200
  {
     SendClientMessage(playerid,COLOR_RED,"Je hebt te weinig geld");
  }
  else
  {
     GivePlayerMoney(playerid,-200)
  // SetPlayerPos, etc    
  }  
}      
//etc.

Bewerkt: door mosweg
Link to comment
Delen op andere websites

Om te kijken of iemand genoeg geld heeft is heel simpel.

Een negatief getal bij GivePlayerMoney kan ook

case 0: // LS           
{      
  If(GetPlayerMoney(playerid) <=200
  {
     SendClientMessage(playerid,COLOR_RED,"Je hebt te weinig geld");
  }
  else
  {
     GivePlayerMoney(playerid,-200)
  // SetPlayerPos, etc    
  }  
}      
//etc.

Je hebt achter If(GetPlayerMoney(playerid) <=200 geen afsluitend haakje staan, waardoor je errors krijgt. Bovendien is het toch wel aan te raden om return 1; te gebruiken.

case 0: // LS           
{      
  if(GetPlayerMoney(playerid) < 200)
  {
     SendClientMessage(playerid,COLOR_RED,"Je hebt te weinig geld");
     return 1; // Code is voltooid, het script hoeft niet verder te lezen.
  }
  else
  {
     GivePlayerMoney(playerid, -200)
  // SetPlayerPos, etc    
     return 1; // Code is voltooid, het script hoeft niet verder te lezen.
  }  
}      
//etc.

Link to comment
Delen op andere websites

Tenzij je voor verschillende vluchten verschillende bedragen wilt gebruiken (al zal dat lastig worden, want dan moet je ook kijken bij welke marker en dus vliegveld de persoon binnen loopt), raad ik je aan om de GetPlayerMoney buiten de case-constructie te halen. Als je hem daarbinnen zet, moet je hem voor ieder vliegveld herhalen (kost meer werk, langere code, etc.).

@ Crusher: Ik zei "ook geen andere callbacks", beter lezen..

Link to comment
Delen op andere websites

Om te kijken of iemand genoeg geld heeft is heel simpel.

Een negatief getal bij GivePlayerMoney kan ook

case 0: // LS           
{      
  If(GetPlayerMoney(playerid) <=200
  {
     SendClientMessage(playerid,COLOR_RED,"Je hebt te weinig geld");
  }
  else
  {
     GivePlayerMoney(playerid,-200)
  // SetPlayerPos, etc    
  }  
}      
//etc.

Je hebt achter If(GetPlayerMoney(playerid) <=200 geen afsluitend haakje staan, waardoor je errors krijgt. Bovendien is het toch wel aan te raden om return 1; te gebruiken.

case 0: // LS           
{      
  if(GetPlayerMoney(playerid) < 200)
  {
     SendClientMessage(playerid,COLOR_RED,"Je hebt te weinig geld");
     return 1; // Code is voltooid, het script hoeft niet verder te lezen.
  }
  else
  {
     GivePlayerMoney(playerid, -200)
  // SetPlayerPos, etc    
     return 1; // Code is voltooid, het script hoeft niet verder te lezen.
  }  
}      
//etc.

Ik heb de code overgenomen, maar iedere keer krijg ik errors, waar ligt dit aan?

Link to comment
Delen op andere websites

Mischien is het handig als je de errors erbij zet, dan weten wij ook wat het probleem is,

Een probleem die je mischien kan oplossen is om dit bovenaan je script te zetten:

#define COLOR_RED 0xFF0000AA

Sorry voor mijn onduidelijkheid, hier zijn de errors:

C:\Documents and Settings\Eigenaar\Bureaublad\SAMP\filterscripts\flight.pwn(46) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Eigenaar\Bureaublad\SAMP\filterscripts\flight.pwn(49) : warning 217: loose indentation
C:\Documents and Settings\Eigenaar\Bureaublad\SAMP\filterscripts\flight.pwn(52) : error 001: expected token: ";", but found "-identifier-"
C:\Documents and Settings\Eigenaar\Bureaublad\SAMP\filterscripts\flight.pwn(55) : warning 217: loose indentation
C:\Documents and Settings\Eigenaar\Bureaublad\SAMP\filterscripts\flight.pwn(55) : error 014: invalid statement; not in switch
C:\Documents and Settings\Eigenaar\Bureaublad\SAMP\filterscripts\flight.pwn(55) : warning 215: expression has no effect
C:\Documents and Settings\Eigenaar\Bureaublad\SAMP\filterscripts\flight.pwn(55) : error 001: expected token: ";", but found ":"
C:\Documents and Settings\Eigenaar\Bureaublad\SAMP\filterscripts\flight.pwn(55) : error 029: invalid expression, assumed zero
C:\Documents and Settings\Eigenaar\Bureaublad\SAMP\filterscripts\flight.pwn(55) : fatal error 107: too many error messages on one line

Compilation aborted.Pawn compiler 3.2.3664	 	 	Copyright (c) 1997-2006, ITB CompuPhase


6 Errors.

Hier is het script zoals het er nu uitziet:

#include <a_samp>

new PU_AIRPORT[3];
new Menu:FlightMenu;

public OnGameModeInit()
{
   PU_AIRPORT[0] = CreatePickup(1239, 23, 1685.6554, -2332.5691, 13.5469); // LS
   PU_AIRPORT[1] = CreatePickup(1239, 23, -1422.1975, -287.9890, 14.1484); // SF
   PU_AIRPORT[2] = CreatePickup(1239, 23, 1674.9839, 1447.7999, 10.7887); // LV

   FlightMenu = CreateMenu("SAA", 1, 200.0, 100.0, 150.0);
   AddMenuItem(FlightMenu, 0, "Los Santos");
   AddMenuItem(FlightMenu, 0, "San Fierro");
   AddMenuItem(FlightMenu, 0, "Las Venturas");
   return 1;
}

public OnPlayerPickUpPickup(playerid, pickupid)
{
   for(new i = 0; i <= 3; i++)
   {
       if(pickupid == PU_AIRPORT[i])
       {
           TogglePlayerControllable(playerid, false);
           ShowMenuForPlayer(FlightMenu, playerid);
       }
   }
   return 1;
}

public OnPlayerSelectedMenuRow(playerid, row)
{
   new Menu:Current;
   Current = GetPlayerMenu(playerid);

   if(Current == FlightMenu)
   {
       switch(row)
       {
           case 0: // LS
           {
		SetPlayerPos(playerid, 1685.6554,-2332.5691,13.5469);
 			SendClientMessage(playerid, 0xFFFF00AA,"You flight is arrived in Los Santos, the flight coast you 200 dollar");
           }
           case 1: // SF
           {
           SetPlayerPos(playerid, -1422.1975, -287.9890, 14.1484);
           SendClientMessage(playerid, 0xFFFF00AA,"You flight is arrived in San Fierro, the flight coast you 200 dollar");
           }
           case 2: // LV
           {
           SetPlayerPos(playerid, 1674.9839, 1447.7999, 10.7887);
           SendClientMessage(playerid, 0xFFFF00AA,"You flight is arrived in Las Venturas, the flight coast you 200 dollar");
           }
       }
   }
   return 1;
}

public OnPlayerExitedMenu(playerid)
{
   TogglePlayerControllable(playerid, true);
   return 1;
}

Sorry als de uitlijning iets onduidelijk is, dit doet mijn PC vanzelf

Bewerkt: door sean5874
Link to comment
Delen op andere websites

Ik heb de code precies gekopieërd maar ik krijg geen errors

Mischien helpt het als je return 1; erbij zet:

           case 0: // LS
           {
		SetPlayerPos(playerid, 1685.6554,-2332.5691,13.5469);
 			SendClientMessage(playerid, 0xFFFF00AA,"You flight is arrived in Los Santos, the flight coast you 200 dollar");
		return 1;
		}
           case 1: // SF
           {
           SetPlayerPos(playerid, -1422.1975, -287.9890, 14.1484);
           SendClientMessage(playerid, 0xFFFF00AA,"You flight is arrived in San Fierro, the flight coast you 200 dollar");
           return 1;
		}
           case 2: // LV
           {
           SetPlayerPos(playerid, 1674.9839, 1447.7999, 10.7887);
           SendClientMessage(playerid, 0xFFFF00AA,"You flight is arrived in Las Venturas, the flight coast you 200 dollar");
           return 1;
		}

Link to comment
Delen op andere websites

Hij geeft ook geen spawnpoints en de andere callbacks, Big Boss geeft alleen delen van de callbacks en de daarbij behorende code waar de topicstarter om vraagt. Logisch, toch? Hij vraagt niet om een heel script..

in een FS hoeft dat niet ;)

Link to comment
Delen op andere websites

Een reactie plaatsen

Je kan nu een reactie plaatsen en pas achteraf registreren. Als je al lid bent, log eerst in om met je eigen account een reactie te plaatsen.

Gast
Op dit onderwerp reageren...

×   Je hebt text geplaatst met opmaak.   Opmaak verwijderen

  Only 75 emoji are allowed.

×   Je link is automatisch ingevoegd.   In plaats daarvan weergeven als link

×   Je vorige bewerkingen zijn hersteld.   Alles verwijderen

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent actief   0 leden

    • Er zijn hier geen geregistreerde gebruikers aanwezig.
×
×
  • Create New...