Gast Geplaatst: 6 oktober 2010 Rapport Geplaatst: 6 oktober 2010 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! Reageren
Big Boss Geplaatst: 6 oktober 2010 Rapport Geplaatst: 6 oktober 2010 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. Reageren
Gast Geplaatst: 6 oktober 2010 Rapport Geplaatst: 6 oktober 2010 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)) Reageren
Big Boss Geplaatst: 6 oktober 2010 Rapport Geplaatst: 6 oktober 2010 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. Reageren
Gast Geplaatst: 6 oktober 2010 Rapport Geplaatst: 6 oktober 2010 (bewerkt) oops Bewerkt: 7 oktober 2010 door Gast Reageren
Gast Geplaatst: 7 oktober 2010 Rapport Geplaatst: 7 oktober 2010 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. Reageren
Big Boss Geplaatst: 7 oktober 2010 Rapport Geplaatst: 7 oktober 2010 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. Reageren
Gast Geplaatst: 7 oktober 2010 Rapport Geplaatst: 7 oktober 2010 (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: 7 oktober 2010 door Gast Reageren
Big Boss Geplaatst: 7 oktober 2010 Rapport Geplaatst: 7 oktober 2010 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; } Reageren
Gast Geplaatst: 7 oktober 2010 Rapport Geplaatst: 7 oktober 2010 (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: 7 oktober 2010 door Gast Reageren
Big Boss Geplaatst: 7 oktober 2010 Rapport Geplaatst: 7 oktober 2010 (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: 7 oktober 2010 door Big Boss Reageren
Recommended Posts
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.