liegt an strins(ert) da eine Zeichenfolge bis zu einer stelle ersetzt/hinzugefügt wird,
stelle die Zeichenfolge zurück durch ein Escape Zeichen sprich '\0' oder nutze strmid wobei das
ja eigentlich im Grund bzw. zum Teil das selbe tut.
[SAMMELTHREAD] Kleine Scripting Fragen
- Rafelder
- Unerledigt
Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!
Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
-
-
Soll ich badwords[i] zurückstellen ?
Weil dann würde doch das Wort darin gelöscht.
Aber er soll doch eigentlich in die nächste Zelle das neue Wort reinschreiben -
Oder du benutzt strmid, wäre eine Möglichkeit
-
ICh wollt das mit dem zurücksetzten machen
Aber wenn ich das so machen, kommt das gleiche Ergebnis wie oben
strins(badwords[i],dini_Get(file,string),0);
format(string,sizeof(string),"\0");
printf("Insertet: %s",badwords[i]);badwords zurückzusetzen wäre doch irgentwie unlogisch, weil dann würd ich das eben reinkopierte wort doch direkt wieder löschen
@dit: Das hats gebracht XD
new badwords[maxbadwords][16];
Einfach hier nen String rausgemacht@dit:
Noch ne andere Frage wenn ich anstatt des #define maxbadwords 30
das hier mache
new const maxbadwords = 30;
new badwords[maxbadwords][16]; //zeile 287
Kommt der ErrorZitat(287) : error 008: must be a constant expression; assumed zero
-
macht es einen unterschied ob ich es so mache
SetTimer("UpdateTime",1000 * 60,1);oder so ?
SetTimer("UpdateTime", 60000,1); -
Nein, das sollte es nicht.
funktioniert theoretisch beides
@dit:
Jetzt nochmal hierauf zurück
new const maxbadwords = 30;
new badwords[maxbadwords][16]; //zeile 287Zitat(287) : error 008: must be a constant expression; assumed zero
-
mach das new weg, hab vergessen das, das wohl von Pawn nicht erkannt wird sprich es wird trotzdem als veränderbar erkannt.
const maxbadwords = 30; -
const heißt also, dass egal wie groß ich die variable mache er immer auf den kleinstmöglichen wert geht ?
Andere Frage:
Habe ne Abfrage gemacht ob in einem String ein Badwort drin ist.Sollte ein BAdwort drin sein, bekommen das die anderen nicht zu sehen, denn dann wird ***** Beleidigung ***** returnt.
Nur wenn kein badWord drin ist, bekomm ich den Fehlerstock badwordscheck(playerid,text[])
{
for(new i = 0;i<maxbadwords;i++)
{
if(strfind(text,badwords[i],true) != -1)
{
new string[128],pname[MAX_PLAYER_NAME];
GetPlayerName(playerid,pname,sizeof(pname));
format(string,sizeof(string),"%s wurde wegen einer Beleidigung gekickt",pname);
SendClientMessageToAll(lila,string);
Kick(playerid);
new bstring[32];
format(bstring,32,"***** Beleidigung *****");
return bstring;
}
}
new ntext[256];
format(ntext,sizeof(ntext),"%s",text);
return ntext; // hier der error zeile 7398
}Bekomme den Error hier
Zitat(7398) : error 047: array sizes do not match, or destination array is too small
-
Entweder liegt es daran das die Rückgabe-Größen sich unterscheiden oder an dem
das das Ziel sprich die Variable an die, die Rückgabe erfolgen soll zu klein ist.Schau dir mal Zeile 12 & 17 an einmal 32 Zeichen & 256 es könnte eventuell daran liegen.
Am besten wäre sowieso eine Array für beide Rückgaben zu verwenden um den Ressourcenverbrauch etwas einzudämmen. -
Ich habe mir ein Menü erstellt für einen Busfahrbot. Wenn man in den Bus einsteigt überprüft er die Koordinate an welcher Bushaltestelle er einstieg. Dementsprechend wird bei jeder Bushaltestelle ein anderes Menü geöffnet. In diesem Menü sind alle weiteren Haltestellen bis zum Endhalt auszuwählen mit Preisen. Wenn ich allerdings zu wenig Geld habe für eine Fahrkarte wird das Menü nochmal aufgerufen, allerdings kann ich dort garnichts mehr auswählen. Kann mir jemand bitte bei weiterhelfen?
if(GetPlayerMoney(playerid) < 12)
{
SendClientMessage(playerid,ROT,"Sie haben nicht genug Geld für dieses Ticket!");
ShowMenuForPlayer(bus1,playerid);
return 1;
}
else
{
SendClientMessage(playerid,CREME,"Busfahrer Adolf: Hier ist Ihr Ticket zum Wasserkraftwerk. Das macht 12$!");
ticket4[playerid] = 1;
SetTimer("timer4",5000,true);
GivePlayerMoney(playerid,-12);
return 1;
}Mit freundlichen Grüßen
Padarom -
-
Wo ist der unterschied zweichen
new
und
staticWeil kann man nicht anstatt
static gTeam[MAX_PLAYERS];
auch
new gTeam[MAX_PLAYERS];
nehmen ?Es muss doch irgenteinen entscheidenen Unterschied geben
-
kein wirklicher nur das static die Variable fest definiert sprich in einen geschützten Bereich setzt der nicht mehr verschoben werden kann ,
die normale Variante wandert im Speicher herum. -
Das heißt also, dass auf oben bezogen, ich nicht bestimmen kann wie groß die Variable
const maxbadwords = 30;
entgültig sein soll, damit nicht zu viel Speicher verbraucht werden kann.
Denn es soll natürlich nur maximal so groß sein, wie auch wörter vorhanden sind.Ich hab es so probiert
maxbadwords = dini_Int(file,"maxbadwords");
mit dem FehlerZitat(798) : error 022: must be lvalue (non-constant)
-
maxbadwords soll für die Array sein oder ?
sprich für die Größe ?
Also daher kannst du nur Konstante Werte nutzen da du eine Array durch den Speicher nicht mehr beliebig vergrößern oder verkleinern kannst.
diese Konstanten Variablen können nicht mehr verändert werden & behalten ihren Wert, sprich geschützter Speicher,
selbst wenn du Statische Variablen benutzt bringt das nichts, denn Größen bzw. der Speicher dafür muss immer reserviert werden. -
Das heißt, man müsste eine non-static variable nehmen, doch das funktioniert ja nicht.
Und man kann dann ja theoretisch nur den define verändern ?
Was aber auch nicht funktioniert, da man ja kein define mit einer variable machen kann
#define maxbadwords hierdievariable -
Wozu eine Variable ? Wie gesagt Arraywerte haben nur einen entgültigen Index sprich er kann nicht mehr durch den Speicher verändert werden.
Sprich Arrays lassen sich nicht beliebig in der Größe verändern, egal wie , man kann es nicht -
Ich möchte das gerne haben, da meine BAdwordsliste ja unendlich groß werden kann, sprich ich muss im script das static maxbadwords sehr hoch halten, damit immer alle badwords geladen werden.
Doch ein großes static bedeutet doch immer einen großen specherverlust bzw ressourcenverbrauch.Daher würde ich gerne in der Datei wo die badwords stehen direkt reinschreiben wie viele wörter es sind, diese INformation geladen werden und als maximale arraygröße geladen werden.
-
Wie gesagt, das ist leider nicht Möglich, du kannst einen Array nicht größer machen als er Konstant schon festgelegt wurde also musst
du wohl oder übel einen Maximalen Wert festlegen.In Sprachen wie Lua oder Squirrel ginge das da diese im Speicher kompiliert werden, Pawn kompiliert alles schon vorher & deshalb bleibt auch alles fest vorhanden & deshalb wird
auch alles fest reserviert. -
kleine Frage
ich verwende z.B.
new Killer[MAX_PLAYERS];
das hat bei mir immer den Wert 1 oder 0
ist es Ressourcenschonender wenn ich da
new bool:Killer[MAX_PLAYERS];
mach
bool ist doch dafür da wenn es immer auf 1 oder 0 gesetzt wirdIst bool ressourcenschonender alls normal variable ??????????
-
Es schadet jedenfalls nicht
-