Jump to content

[HELP] Een gebouw binnen gaan, ander manier.


Recommended Posts

Geplaatst:

Nou, ik ben dus een andere manier aan 't bedenken hoe je een gebouw binnen kan (Bijvoorbeeld de police department in Pershing Square).

Hoe je er momenteel in gaat, is via dat gele ding, je gaat erin staan en je bent in het gebouw.

Wat ik wil maken is: Er is een icoontje, bijv een huis icoontje bij de entrance. Dat gele ding is verwijderd. Als je op dat icoontje gaat staan bij de entrance, moet je /enter typen om erin te komen.

Als het kan, wil ik jullie vragen voor hulp. Ten eerste heb ik geen idee hoe ik die gele entrance verwijder, ten tweede ik weet niet hoe ik de interieur kan laden.

Als dit hierboven gelukt is, heb ik nog een vraagje.

Hoe kan ik, bijv area's, maken in de interior? De coördinaten halen is makkelijk, maar hoe stel ik 't zo in dat de coördinaten voor dat bepaalde interieur is.

Bedankt!

Geplaatst:

Het systeem dat ik zelf gebruik voor dit soort dingen is nog wat ingewikkelder dan ik je nu ga tonen - ik gebruik 1 grote array voor ±50 gebouwen (100+ pickups) en nog wat andere info - maar het basisidee is:

// Bovenaan:
#define MAX_PICKUP 1

const Float:PickupData[MAX_PICKUP][3] = 
{ 
   {x1, y1, z1, x2, y2, z2}

/*  {0 , 1 , 2 , 3 , 4 , 5 } 
       Dit zijn de zogenaamde 'indexen' die we later nodig hebben
       Een 'index' is het getal wat tussen de vierkante haken [] staat

       Niet geheel zeker of MAX_PICKUP eigenlijk moet ingevuld worden, mogelijk kan die index ook leeg gelaten worden
       x1, y1, z1: locatie van de pickup aan de buitenkant van het gebouw
       x2, y2, z2: locatie van de pickup aan de binnenkant van het gebouw
*/

}

// GameModeInit/FilterscriptInit
for(new i; i < sizeof(PickupData); i++)
{
   AddStaticPickup(1239, PickupData[i][0], PickupData[i][1], PickupData[i][2])
   // Maakt alle pickups tegelijkertijd aan, met de data die bovenaan staat (let op de index!)
   // Deze zijn puur voor de show en hebben geen enkele functie (welja, de speler weet waar hij heen moet)
}


// Bij je /enter command plaats je

for(new i; i < sizeof(PickupData); i++)
// Juiste punt zoeken
{
   if(IsPlayerInRangeOfPoint(playerid, 1.5, PickupData[i][0], PickupData[i][1], PickupData[i][2]))
   // Kijkt of de speler in de buurt is van een van de punten aan de buitenkant
   {
       // Verplaats speler naar binnen
       // Breek de loop af, want we hebben het juiste punt gevonden

       SetPlayerPos(playerid, PickupData[i][3], PickupData[i][4], PickupData[i][5]);
       break;
   }

   if(IsPlayerInRangeOfPoint(playerid, 1.5, PickupData[i][3], PickupData[i][4], PickupData[i][5]))
   // Kijkt of de speler in de buurt is van een van de punten aan de binnenkant
   {
       // Verplaats speler naar buiten
       // Breek de loop af, want we hebben het juiste punt gevonden

       SetPlayerPos(playerid, PickupData[i][0], PickupData[i][1], PickupData[i][2]);
       break;
   }
}

Eventuele fouten voorbehouden.

Geplaatst:

Ik snap jouw script wel, klinkt logisch.

Maar ik snap hem toch niet helemaal.

"{x1, y1, z1, x2, y2, z2}" dat is dus waar de pickup object moet staan.

Maar hoe stel ik in dat je naar een bepaald interieur gaat?

En de coördinaten in het interieur (zoals een house system).

Ik ben van plan om jouw script te gebruiken als je mij toestaat om dat te doen. (Als hij volmaakt is(pickups toevoegen))

Geplaatst:

Owja, interiorid ben ik inderdaad vergeten toe te voegen. Dat kan je wel gewoon achter z2 plaatsen (nog wel binnen de haakjes), maar dan moet je const even vervangen door new. Daarna kan je PickupData[6] gebruiken voor het interiorid.

Bij de coördinaten x2, y2 en z2 moet je de spawnplek van het interieur toevoegen. Op die plek zal de speler terechtkomen als hij naar binnen gaat. Tevens zal op exact dezelfde plek ook een pickup worden toegevoegd waarmee je dan weer naar buiten kan.

Geplaatst:

Owja, interiorid ben ik inderdaad vergeten toe te voegen. Dat kan je wel gewoon achter z2 plaatsen (nog wel binnen de haakjes), maar dan moet je const even vervangen door new. Daarna kan je PickupData[6] gebruiken voor het interiorid.

Bij de coördinaten x2, y2 en z2 moet je de spawnplek van het interieur toevoegen. Op die plek zal de speler terechtkomen als hij naar binnen gaat. Tevens zal op exact dezelfde plek ook een pickup worden toegevoegd waarmee je dan weer naar buiten kan.

Perfect! Bedankt.

Ik ben momenteel niet zo helder, dus sorry voor de noob errors.

Edit:

Ik krijg toch wat errors.

const Float:PickupData[MAX_PICKUP][3] =
{
{1552.1276, -1675.6530, 16.1541, 246.783996, 63.900199, 1003.640625, 6}
}

Bij const Float:

error 001: expected token: "=", but found "[".

for(new i; i < sizeof(PickupData); i++)

error 039: constant symbol has no size

AddStaticPickup(1239, PickupData[i][0], PickupData[i][1], PickupData[i][2], PickupData[i][6]);

error 028: invalid subscript (not an array or too many subscripts): "PickupData"

&

error 001: expected token: ";", but found "]"

&

error 029: invalid expression, assumed zero

&

fatal error 107: too many error messages on one line.

Geplaatst:

Ik ben momenteel niet zo helder

Dat geloof ik graag, want de oplossing stond reeds in mijn vorige post. :)

dan moet je const even vervangen door new.
Geplaatst: (bewerkt)

Ik ben momenteel niet zo helder

Dat geloof ik graag, want de oplossing stond reeds in mijn vorige post. :)

dan moet je const even vervangen door new.

Och jah, wat dom.

Waarschijnlijk is dit ook dom:

Ik merk dat ik waarschijnlijk de functies, enz, op het verkeerde plekje zet.

new Float:PickupData[MAX_PICKUP][7] =
{
{1552.1276, -1675.6530, 16.1541, 246.783996, 63.900199, 1003.640625, 6}
};

Ik heb een ";" moeten neerzetten omdat hij anders de script eronder niet kon "lezen". Maar nu krijg ik allemaal andere probleempjes. Vantevoren kreeg ik helemaal geen errors, voordat ik dit ging gebruiken.

public OnGameModeInit()
{
      SetGameModeText("RevoRPG");
      AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
      for(new i; i < sizeof(PickupData); i++)
{
AddStaticPickup(1239, PickupData[i][0], PickupData[i][1], PickupData[i][2], PickupData[i][6]);
}
return 1;
}

Bewerkt: door Gast
Geplaatst:

Ik ben zelf ook een beetje vergeetachtig geweest, want ik ben vergeten het pickuptype toe te voegen; dat is het tweede argument.

Ik heb de code nu ook een beetje herschreven vanwege de tag mismatch errors (hij ziet het interiorid als een float, terwijl het een integer moet zijn).

Deze code werkt, en heb ik getest:

#include <a_samp>

enum PDATA
{
Float:lx1,
Float:ly1,
Float:lz1,
Float:lx2,
Float:ly2,
Float:lz2,
InteriorId
}

new PickupData[][PDATA] =
{
{1552.1276, -1675.6530, 16.1541, 246.783996, 63.900199, 1003.640625, 6}
};

public OnGameModeInit()
{
for(new i; i < sizeof(PickupData); i++)
{
	AddStaticPickup(1239, 23, PickupData[i][lx1], PickupData[i][ly1], PickupData[i][lz1]); // Buiten
	AddStaticPickup(1239, 23, PickupData[i][lx2], PickupData[i][ly2], PickupData[i][lz2]); // Binnen
}
return 1;
}

Geplaatst: (bewerkt)

Bedankt, maar ik ben toch echt de weg kwijt.

Dit is hoe ik het heb, precies deze volgorde:

enum PDATA
{
Float:lx1,
Float:ly1,
Float:lz1,
Float:lx2,
Float:ly2,
Float:lz2,
InteriorId
}

new PickupData[][PDATA] =
{
{1552.1276, -1675.6530, 16.1541, 246.783996, 63.900199, 1003.640625, 6}
};


public OnGameModeInit()
{
      SetGameModeText("RPG");
      AddPlayerClass(0, 1958.3783, 1343.1572, 15.3746, 269.1425, 0, 0, 0, 0, 0, 0);
      for(new i; i < sizeof(PickupData); i++)
{
AddStaticPickup(1239, 23, PickupData[i][lx1], PickupData[i][ly1], PickupData[i][lz1]); // Buiten
AddStaticPickup(1239, 23, PickupData[i][lx2], PickupData[i][ly2], PickupData[i][lz2]); // Binnen
}
return 1;
}

Toch krijg ik errors bij scripts waarvan ik het niet hoor te krijgen. Alsof er ergens een haakje mist, ofzo.

Bewerkt: door Gast
Geplaatst: (bewerkt)

Tsja, dat is raar. Als je namelijk dat script uit mijn vorige post in een nieuw bestand steekt en dan compileert geeft het geen problemen.

Wellicht ben je nog ergens vergeten PickupData[6] te veranderen naar PickupData[interiorId].

Edit: Problemen met de bbcodes vanwege >.<

Bewerkt: door Big Boss

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...