Hallo Breadfish
Ich wollte wissen ob es ein Problem wär wenn ich viele Actors erstellen würde . Könnte es bugs oder Fehler davon geben?
Zahl: ca 50 Stück
Hallo Breadfish
Ich wollte wissen ob es ein Problem wär wenn ich viele Actors erstellen würde . Könnte es bugs oder Fehler davon geben?
Zahl: ca 50 Stück
Guckst du hier:
[wiki]CreateActor[/wiki]
ZitatActors are limited to 1000 (MAX_ACTORS).
Oder hier sind alle Limits: [wiki]Limits[/wiki]
Wenn du zu viele erstellst, wird beim CreateActor INVALID_ACTOR_ID (65535) returnt und der Actor nicht erstellt.
50 Stück sollten aber in der Regel kein Problem darstellen.
Ok sehr gut. Wisst ihr vlt noch wie die Function heißt um ein Object zum explodieren bringen zu können?
Also so das man eine Taschenbombe drauf wirft dann drückt man halt auf dem Knopf und BoooM die Tür verschwindet.
Wisst ihr vlt noch wie die Function heißt um ein Object zum explodieren bringen zu können?
Du könntest die Funktion [wiki]CreateExplosion[/wiki] nutzen und dann das Objekt einfach mit [wiki]DestroyObject[/wiki] zerstören.
MfG
//Edit: Schreibfehler behoben.
Das Limit liegt wie oben bereits erwähnt bei 1000, d.h. aber nicht das du problemlos spielen kannst wenn sich 1000 Actors in der Nähe befinden, wollte das nur anmerken.
Bei 50 Actors sollte es aber in der Regel keine Probleme geben, was ich mir nur vorstellen könnte ist, wenn alle nebeneinander sind und jeder eine Animation ausführt das es zu einigen FPS Drops kommt, das ist aber nur eine Vermutung
Ich habe es so geschrieben aber mein Script crasht
if(strcmp(cmd,"/tresorbombe",true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid, 15.0, -1991.38464, 545.81628, 34.85460))
{
new Float:x, Float:y, Float:z;
CreateExplosion(x, y, z, 6, 10.0);
DestroyObject(tresordoor);
}
}
else SendClientMessage(playerid,rot,"Du bist nicht in der Nähe");
return 1;
}
}
Versuch es mal so:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext,"/tresorbombe",true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid, 15.0, -1991.38464, 545.81628, 34.85460))
{
new Float:x, Float:y, Float:z;
CreateExplosion(x, y, z, 6, 10.0);
DestroyObject(tresordoor);
}
}
else SendClientMessage(playerid,rot,"Du bist nicht in der Nähe");
return 1;
}
Immer noch crash
Ich gehe mal stark davon aus das du irgendwo eine geschweifte Klammer vergessen hast @Russian_Mythos
Ne ka was mein Fehler ist @German_ScripterHD hast du eine Idee?
Zeig doch mal dein ganzes OnPlayerCommandText. Vielleicht ist dort dein Fehler irgendwo.
Function OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext,"/tresorbombe",true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid, 15.0, -1991.38464, 545.81628, 34.85460))
{
new Float:x, Float:y, Float:z;
CreateExplosion(x, y, z, 6, 10.0);
DestroyObject(tresordoor);
}
}
else
{
SendClientMessage(playerid,rot,"Du bist nicht in der Nähe");
return 1;
}
1. Da ist ein Klammerfehler (eine } fehlt).
2. Muss das so:
Function OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext,"/tresorbombe",true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid, 15.0, -1991.38464, 545.81628, 34.85460))
{
new Float:x, Float:y, Float:z;
CreateExplosion(x, y, z, 6, 10.0);
DestroyObject(tresordoor);
}
else
{
SendClientMessage(playerid,rot,"Du bist nicht in der Nähe");
}
}
return 1;
}
Alles anzeigen
Nein wieder crash
Function OnPlayerCommandText(playerid, cmdtext[])
{
if(strcmp(cmdtext,"/tresorbombe",true) == 0)
{
if(IsPlayerInRangeOfPoint(playerid, 15.0, -1991.38464, 545.81628, 34.85460))
{
new Float:x, Float:y, Float:z;
CreateExplosion(x, y, z, 6, 10.0);
//DestroyObject(tresordoor);
}
else
{
SendClientMessage(playerid,rot,"Du bist nicht in der Nähe");
}
}
return 1;
}
Alles anzeigen
Und so?
Wieder crash
Ich denke der Crasht aus folgendem Grund:
Die Funktion CreateExplusion weis in deinem Fall nicht wo sie explodieren soll, da du x, y, z ja keinen Wert zuweist.
Sprich du musst der Funktion einen Wert zuweisen, damit die Funktion weis wo die Explosion erstellt werden soll.
Testbefehl:
if(strcmp(cmdtext,"/bombe",true) == 0)
{
new Float:Pos[3];
GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
CreateExplosion(Pos[0],Pos[1],Pos[2], 6, 10.0);
return 1;
}
MfG