Du könntest eine Schleife erstellen, die alle Objekt-IDs durchläuft und per IsValidObject überprüfen, ob das Objekt erstellt wurde. Wenn ja eine Variable hochzählen.
Beiträge von Haxler
-
-
Aus der 0 eine 1 zu machen ändert nichts an der Tatsache, dass du die Schleife nach dem ersten Durchlauf beendest.
for(new i=0;i<sizeof(SchimpfWort);i++)
{
if(strfind(text,SchimpfWort[i],true) != -1)
{
new string1[128];
format(string1,sizeof(string1),"AdmCmd: %s wurde vom Anti - Beleidigungs System gekickt, Grund: Beleidigung",SpielerName(playerid));
SendClientMessageToAll(HELLROT,string1);
Kick(playerid);
return 1; //Wort gefunden, Schleife wird abgebrochen
}
}
edit: Falls die Abfrage unter OnPlayerText stattfindet musst du return 0 verwenden, um das Abschicken zu verhindern. -
Hab den Code mal ein wenig verbessert:
ocmd:report(playerid,params[])
{
new pID, grund[80];
if(sscanf(params,"us",pID,grund))return SendClientMessage(playerid,grau,"INFO: /report [Spieler der Reportet werden soll] [Grund]");
//falls du sscanf2 verwendest musst du die Größe des Strings mit "s[80]" angeben
new string[128];
format(string,sizeof(string),"Report von %s : Der Spieler %s wurde Reportet: %s ",SpielerName(playerid),SpielerName(pID),grund); //Es reicht, den String nur einmal zu formatierenfor(new i = 0; i < MAX_PLAYERS; i++) // Spieler-ID's werden von 0 bis MAX_PLAYERS-1 vergeben
{
if(isPlayerAnAdmin(i,2))
{
SendClientMessage(i,drot,string); //wenn du die Nachricht an playerid sendest bekommt der Spieler, der den Befehl eingegeben hat die Meldung
//return 1; //return hat hier keinen Sinn, da die Nachricht dann nur an den ersten Spieler gesendet und die Schleife dann abgebrochen wird.
}
}
return 1;
} -
new count = 0;
for(new i;i<MAX_PLAYERS;i++)
{
if(!SpielerInfo[i][Eingeloggt] || !SpielerInfo[i][Wantedlevel]) continue;
format(buffer,sizeof(buffer),"Name: %s Level: %i Wantedlevel: %i Fahndungslevel: %i\n",SpielerName(i),i,GetPlayerWantedLevel(i),SpielerInfo[i][Wantedlevel]);
strins(string,buffer,strlen(string),sizeof(string));
count++; //Spieler gefunden, count wird erhöht
}
if(count == 0)return SendClientMessage(playerid,0xFF0000FF,"Keine Spieler gefunden."); //Wenn count immer noch 0 ist wurde kein Spieler gefunden
else ShowPlayerDialog(...); -
Du könntest unter OnPlayerEnterVehicle per SendClientMessage eine Nachricht an den NPC senden und diese mit OnClientMessage im NPC-Mode abfangen.
Jetzt musst du nur noch die Aufnahme abspielen (StartRecordingPlayback).
edit: wäre noch besser wenn du die Nachricht unter OnPlayerStateChange abschickst -
Damit ist gemeint dass es vor 0.3x auf 300 limitiert war.
ZitatThe draw distance of objects can be set to any distance (with CreateObject), which can be used to reduce pop-in in custom areas.
-
new /*text[50],Name[MAX_PLAYER_NAME],string[126],rankname[20],*/rank; // rank = 0
SpielerInfo[playerid][pTeammitglied] = rank; //pTeammitglied wird auf rank gesetzt, was 0 beträgt
switch(rank) //rang ist Null -> wird nicht ausgeführt
{}
rank = SpielerInfo[playerid][pTeammitglied];
wäre die richtige Lösung. Alternativ kannst du auch direkt switch(SpielerInfo[playerid][pTeammitglied]) verwenden. -
Wenn du eine zufällige Zahl zwischen 1 und 11 erzeugen willst, kannst du nicht einfach random(1-11) verwenden, das würde erst 1 minus 11 rechnen -> random(-10)
Der richtige Code wäre:
1 + random(11); , da random(11) dir eine Zahl zwischen 0 und 10 ausgibt, das ganze +1 würde dir dann die Zahl zwischen 1 und 11 ausgeben. -
-
Falls du meinen Beitrag gelesen hättest, wüsstest du was der Fehler ist.
Verwende
SpielerDaten[playerid][pPasswort][0] = '\0';
strcat(SpielerDaten[playerid][pPasswort],inputtext);
zum Ändern des Passwortes und beim Laden:
strcat(SpielerDaten[playerid][pPasswort],dini_Get(Spielerdatei,"Passwort")); -
Zitat
pPasswort ist ein String.
Dann ist diese Zeile auch falsch: new code = SpielerDaten[playerid][pPasswort];
Du könntest die Variable auch direkt im String formatieren:
format(codestring, sizeof(codestring), "{FFFFFF}Dein Code für den Login lautet: %s", SpielerDaten[playerid][pPasswort]);Zitat
Selfmade.pwn(947) : warning 202: number of arguments does not match definition
Selfmade.pwn(947) : warning 224: indeterminate array size in "sizeof" expression (symbol "maxlength")
Da hast du wohl strcat falsch verwendet:
SpielerDaten[playerid][pPasswort][0] = '\0'; //damit das alte Passwort überschrieben wird, strcat fügt den String nur hinzu
strcat(SpielerDaten[playerid][pPasswort],inputtext); -
Ist SpielerDaten[playerid][pPasswort] eine Zahl oder ein String?
SpielerDaten[playerid][pPasswort] = strlen(inputtext);
strlen gibt dir die Länge des Textes wieder. Falls pPasswort ein Integer ist musst du strval verwenden bzw. strcat falls es ein String ist. -
Ja. Du musst nur darauf achten, dass du die Variable nach dem Beobachten wieder auf 0 setzt.
-
Du könntest auch direkt in deiner Funktion PosFinder abfragen, ob der Spieler im Spectate-Mode ist und falls ja 0 returnen. Dann müsstest du das nicht in jedem Befehl ändern.
-
Sehe nur dass nach Filterscripts gefragt wurde. Falls du z.b. zcmd oder ocmd inkludierst funktioniert OnPlayerCommandText im GameMode nichtmehr.
Kannst mir auch gerne deine TV-Daten per PN schicken, dann kann ich mir das mal anschauen -
Hab jetzt nicht den ganzen Thread gelesen, vielleicht hast du das schon erwähnt aber welche Includes verwendest du denn?
-
Aus dem Samp-Wiki: This function can be used to make objects rotate smoothly. In order to achieve this however, the object must also be moved
D.h. du musst das Objekt ein wenig bewegen, damit es rotiert wird.
MoveObject(Baum[baumid],x,y,z+0.01,5.0,0,90,0); -
Natürlich geht das: http://wiki.sa-mp.com/wiki/SelectObject
-
-
Du kannst Strings nicht einfach mit = zuweisen, dafür gibts Funktionen wie strcat. Eine bessere Lösung wäre, die Ränge in einen Array zu packen. Dann kannst du viel besser darauf zugreifen:
new RangArray[2 /*Fraktionen*/][3 /*Anzahl der Ränge*/][15] =
{
{ //Fraktion 0
{"Rang1"},{"Rang2"}, {"Rang3"}
},
{ //Fraktion 1
{"Rang1"},{"Rang2"}, {"Rang3"}
}
};
//...
printf("Rang: %s",RangArray[1][1]); //würde dir den 2. Rang von Fraktion 1 ausgeben("Rang2").
Dabei musst du nur aufpassen, dass jede Fraktion die gleiche Anzahl an Rängen hat bzw. der Array komplett ausgefüllt ist.