Wunderbar,doch wie wäre es wenn du mal die Zeile 35 zeigst wo der Fehler ist bzw noch ein Paar Zeilen darüber sowie darunter.
Beiträge von Goldkiller
-
-
Angenommen du willst mehrere Einträge aus einer Datei auslesen für bspw zufällige Nachrichten ( Werbungen ).
Würdest du dann machen :
sWerbung1 = dini_Get("motd.ini", "werbung1");
sWerbung2 = dini_Get("motd.ini", "werbung2");
sWerbung3 = dini_Get("motd.ini", "werbung3");
sWerbung4 = dini_Get("motd.ini", "werbung4");
sWerbung5 = dini_Get("motd.ini", "werbung5");
?
Du kannst es natürlich machen wie du willst,nur "Dynamisch" ist das nicht unbedingt ;). -
Bin jetzt nur durch einen Anderen Thread von dir auf dieses Thema aufmerksam geworden,da es ja als Referenz für dich her halten soll.
#if defined FILTERSCRIPTpublic OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" Dynamisches Motd System by Hijashy... Loaded!");
print("--------------------------------------\n");
return 1;
}public OnFilterScriptExit()
{
return 1;
}#else
main()
{
print("\n----------------------------------");
print(" Dynamisches Motd System by Hijashy... Loaded!");
print("----------------------------------\n");
}#endif
Wenn man sich den Quellcode anschaut,hast du es nirgendwo FILTERSCRIPT definiert.Reicht doch wenn du einfach nur OnFilterScriptInit / Exit einfügst.
public OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" Dynamisches Motd System by Hijashy... Loaded!");
print("--------------------------------------\n");
return 1;
}public OnFilterScriptExit()
{
return 1;
}
Wozu man hier DINI brauch ist auch fraglich,dass kann man auch ganz normal nur über fopen,fread,fwrite und fclose machen.
Hätte man besser machen können :p -
Ja kann das niemand anderes machen? Es kann doch net so schwer sein sich mal drum zu kümmern?!
Nein.Du musst wohl noch warten bis DMA oder Einstein sich darum kümmern. -
Das hast du dann aber schon ganz oben in deinem Code falsch gehabt.
Du müsstest aber schon in der Lage sein,dass selber hinzubekommen.Denn es ist kaum Aufwand,nur den Kick() Abschnitt zu verschieben 0o.
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1)
{
if(!Eingeloggt[playerid])
{
if(response)
{
if(!inputtext[0]) { // funktioniert wie strlen(inputtext) == 0
SendClientMessage(playerid,COLOR_RED,"Kein input-text für Passwort");
}
else {
GetPlayerName(playerid,Name,sizeof(Name));
format(s,sizeof(s),"acc/%s.ini",Name);
if(!dini_Exists(s))
{
dini_Create(s);
dini_IntSet(s,"Passwort",udb_hash(inputtext));
dini_FloatSet(s,"X",-2756.4143);
dini_FloatSet(s,"Y",374.9626);
dini_FloatSet(s,"Z",4.3366);
dini_FloatSet(s,"A",269.2460);
dini_FloatSet(s,"Health",100);
dini_FloatSet(s,"Armor",0);
dini_IntSet(s,"Geld",500);
dini_IntSet(s,"Skin",26);
dini_IntSet(s,"Virt",0);
dini_IntSet(s,"Inte",0);
ShowPlayerDialog(playerid,2,DIALOG_STYLE_MSGBOX,"Wohnort","Bitte geben sie an wo sie Wohnen möchten.","SF","LV");
}
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Bla bla blubb");
Kick(playerid);
}
}
}
return 1;
} -
Wo soll den Kick() funktionieren?
Man wird doch nur gekickt,wenn der Account bereits existiert.Liegt wohl daran,dass man dann wahrscheinlich auch eingeloggt ist.Dann scheitert es an dieser Abfrage:
if(!Eingeloggt[playerid]) -
es gobt kein strtok es gibt nur stock
Quatsch .Zitaterror 021: symbol already defined: "strtok"
Es gibt bereits ein strtok bei dir im Script. -
Schau doch den Code an.Gibt er keinen Text ein,wird nichts erstellt.
if(!inputtext[0]) { // funktioniert wie strlen(inputtext) == 0
SendClientMessage(playerid,COLOR_RED,"Kein input-text für Passwort");
}
else { // Ein Text wurde eingegeben ... -
Der Fehler liegt schon beim strlen().
Zitatif(!strlen(inputtext))
Der Code geht an dieser Stelle nur weiter,wenn man KEINEN Text eingegeben hat und somit die Stringlänge 0 ist.public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1)
{
if(!Eingeloggt[playerid])
{
if(response)
{
if(!inputtext[0]) { // funktioniert wie strlen(inputtext) == 0
SendClientMessage(playerid,COLOR_RED,"Kein input-text für Passwort");
}
else {
GetPlayerName(playerid,Name,sizeof(Name));
format(s,sizeof(s),"acc/%s.ini",Name);
if(!dini_Exists(s))
{
dini_Create(s);
dini_IntSet(s,"Passwort",udb_hash(inputtext));
dini_FloatSet(s,"X",-2756.4143);
dini_FloatSet(s,"Y",374.9626);
dini_FloatSet(s,"Z",4.3366);
dini_FloatSet(s,"A",269.2460);
dini_FloatSet(s,"Health",100);
dini_FloatSet(s,"Armor",0);
dini_IntSet(s,"Geld",500);
dini_IntSet(s,"Skin",26);
dini_IntSet(s,"Virt",0);
dini_IntSet(s,"Inte",0);
ShowPlayerDialog(playerid,2,DIALOG_STYLE_MSGBOX,"Wohnort","Bitte geben sie an wo sie Wohnen möchten.","SF","LV");
}
else
{
SendClientMessage(playerid,COLOR_RED,"Bla bla blubb");
Kick(playerid);
}
}
}
}
}
return 1;
}
Hab den Code mal umstrukturiert,logischer ist es nämlich,dass die Abfrage der Stringlänge nach der Abfrage kommt,ob response 1 ist. -
-
Der Fehler liegt in folgendem Abschnitt.Ließ den Kommentar
#include <a_samp>#include <dini>
#if defined FILTERSCRIPT // - Guckt ob FILTERSCRIPT irgendwo definiert wurde
// Die Frage ist aber,ist FILTERSCRIPT bereits definiert ?
// Nein,ist es nicht.Deshalb wird der folgende Abschnitt auch nicht abgearbeitet sondern es wird
// bis zum #else gesprungen und der Abschnitt abgearbeit bis es zum #endif kommt.
// Du willst das Script aber sowieso nicht als Filterscript haben
// Deswegen ist die Abfrage eher unnötig und führt zu dem Fehler.enum spieler_daten
{
wanted,
skin,
Float:lastx,Float:lasty,Float:lastz,
eingeloggt
}
new Spieler[MAX_PLAYERS][spieler_daten];
#define DIALOG_LOGIN
#define DIALOG_REGpublic OnFilterScriptInit()
{
print("\n--------------------------------------");
print(" Test");
print("--------------------------------------\n");
return 1;public OnFilterScriptExit()
{
return 1;
}#else // Wurde NICHT als FILTERSCRIPT defininiert
main()
{
print("\n----------------------------------");
print(" Test");
print("----------------------------------\n");
}#endif // Abschnitt beendet
Wie gesagt,du willst es nicht als Filterscript haben ( Nehme Ich jedenfalls an da du OnGameModeInit() benutzt ) deswegen löschst du die # Inline Anweisungen ( #if defined , #else #endif ) und lösch OnFilterscriptInit / Exit.
#include <a_samp>#include <dini>
enum spieler_daten
{
wanted,
skin,
Float:lastx,Float:lasty,Float:lastz,
eingeloggt
}
new Spieler[MAX_PLAYERS][spieler_daten];
#define DIALOG_LOGIN 24 // Du MUSST hier auch besser einen Wert zuweisen.Sonst bringt es später nichts
#define DIALOG_REG 25 // Du MUSST hier auch besser einen Wert zuweisen.Sonst bringt es später nichts
main()
{
print("\n----------------------------------");
print(" Test");
print("----------------------------------\n"); -
geil hat man vor 5Jahren als qail schon geschrieben,hast wohl den Trend verpasst.
-
Teil 2 des Tutorials etwas verbessert und Teil 3 endlich gepostet ( ZCMD ).
Zu Teil 3 des Tutorials springen. -
Das weiss Ich nicht genau,Ich nehme es aber an.Wäre ja logischer.
Deshalb benutzt ich kaum booleans. Ich mach das immer direkt über bits und kann so 32 Ja/Nein ; True/False Werte anhand einer Variable abfragen.Das ist dann Bitwise Operationen,aber zu schwer für die meisten.Viele erkennen auch nicht den Vorteil dabei.
-
Das geht auch.Hab das damals auch nur in der PAWN Docu gefunden:
enum e_Test {
T_iEins,
T_iZwei,
T_iDrei,
T_iVier
}
new aPlayers[MAX_PLAYERS][e_Test];
public OnPlayerConnect(playerid)
{
for( new i ; i < sizeof(aPlayers[]) ; i++) {
aPlayers[playerid][e_Test:i] = (i * 5);
}
return 1;
} -
Eine Variable vom Typ bool ist genau so groß wie jede Andere Variable auch, 4Byte.Denn genau genommen genommen gibt es nur einen Datentyp bei PAWN.
-
Das kommt davon,wenn man Funktionen nutzt die man absolut nicht versteht oder nur mit Copy&Paste arbeitet.
new
index;
tmp = strtok(cmdtext, index);
Ein Hoch auf Englisch:Zitaterror 017: undefined symbol "index"
Ich empfehle dir trotzdem mein Tutorial, da du damit definitiv leichter arbeiten kannst. -
Wieso ? true ist doch nichts Anderes als 1 und false 0.
stock bool:dini_Int(filename[],key[]) {
if(strval(dini_Get(filename,key)) == 0) return false;
return true;
}
Ich merke,habe in meinem Code anstatt dini_Bool dini_Int verändert x(.Hätte ja eigentlich so aussehen müssen:
stock bool:dini_Bool(filename[],key[]) {
return bool:strval(dini_Get(filename,key));
} -
Da liegt der Fehler nicht bei dir,sondern bei dini selber.
stock dini_Bool(filename[],key[]) {
return strval(dini_Get(filename,key));
}
Wie du siehst,dort wird nirgendwo gesagt, dass es boolean sein soll.Benutzt doch einfach dini_Int().
Ansonsten probier mal
stock bool:dini_Int(filename[],key[]) {
return bool:strval(dini_Get(filename,key));
}
möglich dass es so auch geht. -
Selber Schuld wer es nicht richtig nutzen kann.Ich hab damit keine Probleme, alles funktioniert.
Dieganzenmeisten Leute die dort im offiziellen Thread rumheulen, sind sowieso meist Anfänger die absolut kein Plan haben wie man den Streamer einstellen / installieren.