So
#
text[0] ist bessere Lösung da hast du recht, aber soweit ich weiß returned strfind die anzahl der vorherigen Zeichen, da ja kein Zeichen davor sein soll also == 0.
Damit ist aber im text noch das ! enthalten, also in der Nachricht
So
#
text[0] ist bessere Lösung da hast du recht, aber soweit ich weiß returned strfind die anzahl der vorherigen Zeichen, da ja kein Zeichen davor sein soll also == 0.
Damit ist aber im text noch das ! enthalten, also in der Nachricht
GhostRider wegen den Textdraws nein es ist nicht das selbe.
PlayerTextDraws sind wie es der Name schon sagt Spieler gebunden und TextDraws sind Global. D.h. wenn man viele Sachen hat die nur bestimmte Spieler sehen wie z.B. ein Speedo ist es ratsam PlayerTextDraws zu nutzen und bei Dingen wie eine Domain etc. ist es ratsam TextDraws zu nutzen.
BOMBER einfach das Objekt destroyen und wieder ganz normal erstellen.
DestroyObject(ObjName);
ObjName = CreateObject(2993,-384.2000122,-4133.7001953,23.2999992,0.0000000,0.0000000,0.0000000);
So habe ich das im Timer aufgerufen, aber der Timer wird nicht mal aufgerufen, demnach wird das Objekt nicht zerstört / erstellt.
forward Respawn(playerid);
public Respawn(playerid)
{
//Hier steht das drinne...
}
SetTimer("Respawn",RESPAWNZEIT,false);
Hier wirds aufgerufen, Respawnzeit = 15 Sek.
Soll der Timer Spielergebunden sein? Wenn ja würde ich dir raten mit SetTimerEx zu arbeiten.
Und btw, du zeigst nur wie du den Timer erstellst, aber nicht wo. xD
Also ich kann mir mit der Funktion alleine nicht wirklich einen Einblick machen warum es nicht funktioniert.
EDIT: Vorschlag
OnPlayerSpawn(playerid)
{
SetTimerEx("Respawn",RESPAWNZEIT,0,"i",playerid);
return 1;
}
forward Respawn(playerid);
public Respawn(playerid)
{
//Dein Code
return 1;
}
Soll der Timer Spielergebunden sein? Wenn ja würde ich dir raten mit SetTimerEx zu arbeiten.
Und btw, du zeigst nur wie du den Timer erstellst, aber nicht wo. xD
Also ich kann mir mit der Funktion alleine nicht wirklich einen Einblick machen warum es nicht funktioniert.
if(Var{playerid} > 0)
{
SendClientMessage(playerid, GRÜN, "Objekt wird abgegeben (15 Sekunden!)");
SetTimer("Respawn",RESPAWNZEIT,false);
}
Bei dem /Abgeben Befehl, soll das Objekt sozusagen nach 15 Sek zerstört werden, und nach 30 Respawnt, nein der soll ja nicht Spieler gebunden sein, der soll das Objekt ja für alle respawnen.
Gut jetzt habe ich in etwa verstanden was du meinst. dann solltest du erstens mit einer Schleife zum ablegen nutzen (Zerstören des Objektes).
Zudem wie du es derzeitig hast wird es nur für eine playerid ausgeführt, also wäre auch hier eine Schleife angebracht um es für alle auszuführen.
Jedoch kann ich mir immer noch nicht sehr viel vorstellen unter den 10 Zeilen die du jetzt insgesamt gepostet hast. Also ich verstehe was du machen willst, aber ich sehe derzeitig nicht warum es nicht funktioniert (der Timer nicht startet).
Damit ist aber im text noch das ! enthalten, also in der Nachricht
Na eben nicht. strfind returned wenn es nicht vorhanden ist "-1". Wenn es vorhanden ist, returned er die Anzahl der zeichen vor dem gesuchtem!
Sprich: wenn es am anfang stehen soll MUSS er "0" retunen, steht es aber mitten im Text, returned er einen höheren Wert.
Das ist aber eh überflüssig weil mit text[0] ist es viel einfacher und besser. er muss dann aber dennoch "!" ausschneiden damit das nicht mitgesendet wird.
Gut jetzt habe ich in etwa verstanden was du meinst. dann solltest du erstens mit einer Schleife zum ablegen nutzen (Zerstören des Objektes).
Zudem wie du es derzeitig hast wird es nur für eine playerid ausgeführt, also wäre auch hier eine Schleife angebracht um es für alle auszuführen.
Jedoch kann ich mir immer noch nicht sehr viel vorstellen unter den 10 Zeilen die du jetzt insgesamt gepostet hast. Also ich verstehe was du machen willst, aber ich sehe derzeitig nicht warum es nicht funktioniert (der Timer nicht startet).
forward Respawn(playerid);
public Respawn(playerid)
{
if(var{playerid} == 1)return SendClientMessageToAll(ROT, "Objekt abgegeben!"), Obj+=1; //Bis hier kommt der Code noch...
DestroyObject(ObjName); //Aber hier ist denn Sense :D
ObjName = CreateObject(2993,-384.2000122,-4133.7001953,23.2999992,0.0000000,0.0000000,0.0000000);
SendClientMessageToAll(GRÜN, "Das Objekt wurde respawnt!");
return 1;
}
So, das sollte helfen?
//Edit noch mal ausgebessert
//Edit² Hat sich erledigt, habs nun in einen IF-Block gesetzt, anstatt mit Return (Funktioniert nun), danke an alle
Yup jetzt kann ich auch auf Fehlersuche gehen und würde auch gerne gleich einmal Anfangen.
Erstens, sagtest du nicht, dass das Objekt etwas später wieder erstellt werden soll?
Wenn ja solltest du hier mit einer simplen Variable arbeiten welche abfragt welchen Status es derzeitig hat und bei Status 0 den Timer erneut ausführt und die Variable +1 setzt.
Dann würde ich es ungefähr so machen (alles zusammen).
new obj, ObjName[MAX_PLAYERS],RespawnStatus;
forward Respawn(playerid);
public Respawn(playerid)
{
if(RespawnStatus==0)
{
if(var{playerid} == 1)return SendClientMessageToAll(ROT, "Objekt abgegeben!"), Obj+=1,RespawnStatus=1,DestroyObject(ObjName[playerid]);
}
else if(RespawnStatus == 1
{
ObjName[playerid]=CreateObject(2993,-384.2000122,-4133.7001953,23.2999992,0.0000000,0.0000000,0.0000000);
SendClientMessageToAll(GRÜN, "Das Objekt wurde respawnt!");
}
return 1;
}
PS: Ist jetzt mehr oder weniger nur Pseudocode, jedoch würde ich dir raten für ObjName noch, da es ja an Spieler attached ist, die playerid zu returnen.
Na eben nicht. strfind returned wenn es nicht vorhanden ist "-1". Wenn es vorhanden ist, returned er die Anzahl der zeichen vor dem gesuchtem!
Sprich: wenn es am anfang stehen soll MUSS er "0" retunen, steht es aber mitten im Text, returned er einen höheren Wert.
Das ist aber eh überflüssig weil mit text[0] ist es viel einfacher und besser. er muss dann aber dennoch "!" ausschneiden damit das nicht mitgesendet wird.
Das man wie ausschneidet?
Das man wie ausschneidet?
if(text[0] == '!')
{
new message[128];
GetPlayerName(playerid, message, sizeof(message));
format(message, sizeof(message), "%s: %s", message, text[1]); // Format "Name: Nachricht"
//hier versenden
return 0; // damit die normale chatnachricht nicht gesendet wird
}
Alles anzeigen
if(text[0] == '!')
{
new message[128];
GetPlayerName(playerid, message, sizeof(message));
format(message, sizeof(message), "%s: %s", message, text[1]); // Format "Name: Nachricht"
//hier versenden
return 0; // damit die normale chatnachricht nicht gesendet wird
}
text[1] löscht das erste Zeichen, bzw sendet alles nach dem 0. , sprich ! , richtig?
Denn nur das hätte ich gebraucht ;*
Trotzdem danke an alle
genau
Alles anzeigenYup jetzt kann ich auch auf Fehlersuche gehen und würde auch gerne gleich einmal Anfangen.
Erstens, sagtest du nicht, dass das Objekt etwas später wieder erstellt werden soll?
Wenn ja solltest du hier mit einer simplen Variable arbeiten welche abfragt welchen Status es derzeitig hat und bei Status 0 den Timer erneut ausführt und die Variable +1 setzt.
Dann würde ich es ungefähr so machen (alles zusammen).
new obj, ObjName[MAX_PLAYERS],RespawnStatus;
forward Respawn(playerid);
public Respawn(playerid)
{
if(RespawnStatus==0)
{
if(var{playerid} == 1)return SendClientMessageToAll(ROT, "Objekt abgegeben!"), Obj+=1,RespawnStatus=1,DestroyObject(ObjName[playerid]);
}
else if(RespawnStatus == 1
{
ObjName[playerid]=CreateObject(2993,-384.2000122,-4133.7001953,23.2999992,0.0000000,0.0000000,0.0000000);
SendClientMessageToAll(GRÜN, "Das Objekt wurde respawnt!");
}
return 1;
}
PS: Ist jetzt mehr oder weniger nur Pseudocode, jedoch würde ich dir raten für ObjName noch, da es ja an Spieler attached ist, die playerid zu returnen.
Danke vielmals, aber hatte sich schon erledigt.
Habe es oben auch editiert
Naja aber noch ne kleine Frage, wenn der Spieler nicht in der Nähe vom Objekt ist... soll das Objekt sozusagen auch zerstört werden ( 5 Meter )
if(VAR2 == 1 && !IsPlayerInRangeOfPoint(playerid, 5, X, Y, Z))
{
DestroyObject(ObjName);
}
X, Y, Z Habe ich mit GetPlayerPos ausgelesen...
Wie erstell ich schnell eine Zufallsfunktion mit einer Chance von 50% zu 50%.
Also es startet eine Funktion, und dann soll zufällig Event1 oder Event2 eintreten.
- Tom
Wie erstell ich schnell eine Zufallsfunktion mit einer Chance von 50% zu 50%.
Also es startet eine Funktion, und dann soll zufällig Event1 oder Event2 eintreten.
- Tom
switch(random(2)) {
case 0: Start(Event1);
case 1: Start(Event2);
}
mfg.
Kann man während dem GameMode Wechsel einen Chat aktiviert haben?
Soweit ich weiß nicht
Habe es gerade noch auf nem Server gesehen, die frage ist nur wie. Denn bei GMExit wird doch alles beendet.
Deswegen soweit ich weiß nein. Keine Ahnung wie er das gelöst hat.
switch(random(2)) {
case 0: Start(Event1);
case 1: Start(Event2);
}
mfg.
Danke
Kannst du mir noch verraten wie ich es mache das wenn ich zB 3 Zahlen habe 5000, 10000 und 15000 wie ich am Anfang einer Funktion eine der drei zufällig auswähle um zB. so den max. Betrag zu bestimmen den man in einer Bank stehlen kann?
- Tom
#fail verbessert (doppelzitat)