Skip to content
Bekijk in de app

Een betere weg om onze GTA community te volgen. Leer meer.

GTAGames.nl - De Nederlandse Grand Theft Auto Community!

Een volledig scherm app op het beginscherm inclusief notificaties, badges en meer.

Om deze app op je iPhone en iPad te installeren
  1. Druk op het icoon in Safari
  2. Scroll in het menu en druk op Zet op beginscherm.
  3. Druk op Voeg toe rechts bovenaan.
Om deze app op je Android toe te voegen
  1. Druk op het 3-punten menu (⋮) rechts bovenaan in de browser.
  2. Druk op Toevoegen aan beginscherm of Installeer app.
  3. Druk op Toevoegen om te bevestigen.

Probleempje met maken/verwijderen objecten

Geplaatst:

Noes... zit al de hele avond te prutsen, en heb het gevoel dat ik nog steeds niks nuttigs gedaan heb... :D

Ik had het volgende geniale ( :7 ) idee:

Die objectstreamers e.d. ben ik al tijden hardstikke beu, bugs, ze kunnen niet samenwerken met elkaar en met het script... en de streamers zelf zijn me zo helder als koffiedik (en als ik ergens een hekel aan heb is het wel dingen in mn script die ik niet snap...) maar meer dan 150-200 objecten zou toch wel leuk zijn...

Dus had ik het volgende systeem uitgedacht/gemaakt:

Bij het uitvoeren van een (teleport)commando worden de nodige objecten gemaakt met behulp van "CreatePlayerObject". En bij een ander (teleport)commando en/of bij de OnPlayerDeath worden ze weer verwijderd. Waardoor je dus alleen de objecten ziet die je nodig hebt.

Dus het commando ziet er dan zo uit:

if (strcmp("/bigjump", cmdtext, true) == 0)
{
// kijken of de speler geld genoeg heeft enzo...
if (ObjectenActief[playerid] == 0)
{
	DestroyObjects(playerid);
	Objecten(playerid);
	ObjectenActief[playerid] = 1;
}
// de rest waarin speler word geteleport, en voertuigen meegenomen
return 1;
}

Het gedeelte waar het om draait word dus alleen uitgevoerd als die "ObjectenActief" op 0 staat. Want stel dat je al op die betreffende stunt staat en je voert het commando nog een keer uit, dan zouden opnieuw de objecten verwijderd en opnieuw gemaakt worden...

Bij "Objecten" worden de objecten aangemaakt, dat ziet er dan zo uit:

public Objecten(playerid)
{
object[1] = CreatePlayerObject(playerid, id, x, y, z, rx, ry, rz);
object[2] = CreatePlayerObject(playerid, id, x, y, z, rx, ry, rz);
object[3] = CreatePlayerObject(playerid, id, x, y, z, rx, ry, rz);
// enz.
}

En bij "DestroyObjects" worden de objecten weer verwijderd. Dat heb ik zo gedaan:

public DestroyObjects(playerid)
{
if (ObjectenActief[playerid] == 1)
{
	for(new i = 0; i <= sizeof(object); i++)
	DestroyPlayerObject(playerid, object[i]);
	ObjectenActief[playerid] = 0;
}
if (anderobjecten)
{
	// blabla
}
}

Bij dit laatste worden dus alleen de objecten verwijderd die "actief" zijn. Tot zover allemaal prima in orde. In totaal heb ik er nu 4 commando's op deze manier instaan (met in totaal 160 objecten)

Wanneer ik nu naar bijvoorbeeld een /stunt1 teleport werkt dat prima. Objecten worden gemaakt. Wanneer ik mezelf kill met behulp van /kill gaat het ook prima. De objecten verdwijnen direct na het /kill commando.

Maar wanneer ik probeer van de ene stunt naar de andere stunt te teleporteren dan gaat het mis. Stel ik sta bij /stunt1 en ik ga naar /stunt2.

De eerste keer dat ik /stunt2 intyp worden de objecten van /stunt1 verwijderd EN ik krijg de melding "unknown command". Pas de tweede keer dat ik /stunt2 intyp word ik ernaartoe geteleport. De ander commando's zoals /help blijven wel gewoon feilloos werken.

Ik heb het idee dat er iets fout zit in die "public DestroyObjects" maar geen flauw idee wat eigenlijk... al van alles uitgeprobeerd :-(

Featured Replies

Geplaatst:

Volgens mij, als je returnt in je public waarnaar verwezen word, word er ook in je command returnt, wat dus dan waarschijnlijk te vroeg is. En dan denk ik ook dat het "return 0"-s zijn, omdat je het "unknown command" probleem krijgt.

Haal dus eens alle returns uit die custom callbacks weg, kijk eens of dat helpt ;)

Geplaatst:
  • Auteur
Haal dus eens alle returns uit die custom callbacks weg, kijk eens of dat helpt ;)

In die callbacks heb ik helemaal geen returns staan.

Geplaatst:

Vervang:

public DestroyObjects(playerid)
{
if (ObjectenActief[playerid] == 1)
{
	for(new i = 0; i <= sizeof(object); i++)
	DestroyPlayerObject(playerid, object[i]);
	ObjectenActief[playerid] = 0;
}
if (anderobjecten)
{
	// blabla
}
}

Door:

public DestroyObjects(playerid)
{
if(ObjectenActief[playerid] == 1)
{
	ObjectenActief[playerid] = 0;
	for(new i = 0; i < sizeof(object); i++)
	{
			if(IsValidObject(i))
			{
				DestroyPlayerObject(playerid, object[i]);
			}
	}
}
if (anderobjecten)
{
	// blabla
}
}

Geplaatst:
  • Auteur

Werkt nog niet helemaal, de command's werken dan wel, alleen blijven de objecten gewoon staan :puh:

Ik neem aan dat dat komt doordat "IsValidObject", alleen werkt bij gewone objecten en niet bij "CreatePlayerObject"

Ik heb het daarna eens geprobeerd met de callback die wel bij CreatePlayerObject kan:

if (IsValidPlayerObject(playerid, object[i]))

Dan worden de objecten wel netjes verwijderd, maar ook krijg ik dan weer de melding "unknown command" terug :bonk:

Ik heb trouwens inmiddels een 2e versie van het hele spul. In eerste instantie was de opzet zo:

1. Commando uitvoeren, 2. Overbodige objecten verwijderen en 3. Nieuwe objecten maken, of laten staan als ze er al zijn.

Dat heb ik nu omgedraaid zodat eerst de nieuwe objecten worden en pas helemaal als laatste de overbodige objecten worden verwijderd. Op die manier staat het "DestroyObjects-gedoe" helemaal onderaan het commando, nu word dus wel het hele commando gewoon uitgevoerd... alleen dat unknown command dan nog.. :-(

Geplaatst:

Unknown command komt voor als het script bij een return 0; komt. Dus moet je ergens een return 1; toevoegen.

Volgens mij gaat die dan net onder je loop in je public DestroyObjects.

Geplaatst:
public DestroyObjects(playerid)
{
	// blabla
	return 1;
}

Geplaatst:
  • Auteur

Met die return 1; werkte het nog steeds niet en kreeg dezelfde "unknown command". Had op alle mogelijke (en onmogelijke) plaatsen al returns gezet, wat soms zorgde dat ik die melding niet kreeg, maar dan bleven de objecten weer gewoon staan :puh:

Maar ik heb inmiddels een oplossing gevonden ( :dans: )

Zal even vertellen hoe ik dat gedaan heb, hebben jullie wel een beetje recht op, vind ik :Y

Ik heb de opzet weer iets gewijzigd, bij het teleportcommando staan nu alleen wat spullen zoals het de coordinaten, het aanmaken van de objecten en daarna word de speler freezed. Vervolgens word een timer gezet en krijgt de tekst "wait for loading objects..." voor z'n neus.

In die bijbehorende array word de speler weer unfreezed, in een voertuigje gestopt en de overbodige aangemaakte objecten verwijderd. Het hele spul werkt nu perfect. :)

Dit verhelpt tegelijkertijd alle andere kleinere probleempjes die ik ermee had zoals spelers die met hun voertuig dwars door een object vallen omdat het nog niet geladen is, objecten die niet laden als je al op een voertuig zit enz.

@D-V-D-K, Big Boss en Remi-X: bedankt voor het meehelpen/meedenken :tu:

  • 2 weken later...
Geplaatst:

je had ook de YSI streamer kunnen gebruiken die is zo simpel al wat

en die kan bijna een miljoen object steamen

  • 4 weken later...
Geplaatst:

kan je een link geven van een object streamer

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

Recent actief 0

  • Er zijn hier geen geregistreerde gebruikers aanwezig.

Account

Navigatie

Zoeken

Zoeken

Configureer push berichten

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.