Nene das else hat damit nix zu tun Aber bitte auch zeigen welche Zeile wo der Fehler ist Hab ihn grad so ned gefunden..
Beiträge von Templer
-
-
Seine mysql_usertable stimmt, sonst würde er sich mit einem bestehenden Account nicht einloggen können 8D ...
Also Skeita probiers mal so aus:
stock mysqlget(table[],bedien[],abfrag[],data[])
{
new query[256];
format(query,sizeof(query),"SELECT %s FROM %s WHERE %s",abfrag,table,bedien);
new ergebnis = samp_mysql_query(query);
if(ergebnis == 0) return false;
samp_mysql_store_result();
if(samp_mysql_num_rows())
{
samp_mysql_get_field(abfrag, data);
samp_mysql_free_result();
return true;
}
} -
Google Earth, der war knapp. Hast fast getroffen ^^. Nächstes mal wenn du nüchterner bist, triffst auch rein
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1)
{
if(response) //Code wenn er auf den 1 Button klickt, also "Weiter"
{
if(strcmp(inputtext,"2002199613")) == 0) // BETAKEY
{
SendClientMessage(playerid,0xFFFFFFFF,"Willkommen in der Betaphase!.");
}
else
{
SendClientMessage(playerid,0xFFFFFFFF,"Du hast einen nicht gültigen Betakey eingegeben!");
kick(Playerid);
}
}
else //wenn er auf "Abbrechen" klickt
{
kick(Playerid);
}
}
else
{
new pname[MAX_PLAYERS],accFormat[128];
GetPlayerName(playerid,pname,sizeof pname);
format(accFormat,sizeof accFormat,"%s.datei",pname);
if(response)
{
switch(dialogid) // dialogid auswählen
{
case DIALOG_LOGIN: // ID Login
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
return SendClientMessage(playerid,0xFFFFFFFF,"Kein Passwort angegeben!");
}
if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0) // Passwort Direkt aus der Datei Laden
{
Spieler[playerid][wanted] = dini_Int(accFormat,"wanted");
Spieler[playerid][skin] = dini_Int(accFormat,"skin");
Spieler[playerid][lastx] = dini_Float(accFormat,"lastx");
Spieler[playerid][lasty] = dini_Float(accFormat,"lasty");
Spieler[playerid][lastz] = dini_Float(accFormat,"lastz");
GivePlayerMoney(playerid,dini_Int(accFormat,"Geld"));
SetPlayerScore(playerid,dini_Int(accFormat,"Score"));
Spieler[playerid][eingeloggt] = 1; // Spieler ist nun erfolgreich eingeloggt
SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
}
else
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war Falsch!");
}
}
case DIALOG_REG: // ID Registrieren
{
if(!strlen(inputtext)) // Text darf nicht = Null sein Null im Sinne von nichts
{
ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort ist zu kurz!");
}
dini_Create(accFormat);
dini_Set(accFormat,"Passwort",inputtext);
Spieler[playerid][eingeloggt] = 1;
SendClientMessage(playerid,0xFFFFFFFF,"Account wurde angelegt und du wurdest eingeloggt.");
}
}
}
else
{
switch(dialogid)
{
case DIALOG_LOGIN:ShowPlayerDialog(playerid,DIALOG_LOGIN,1,"Login","Bitte logge dich ein","Abbrechen","Weiter");
case DIALOG_REG:ShowPlayerDialog(playerid,DIALOG_REG,1,"Registrieren","Bitte Registriere dich","Abbrechen","Weiter");
}
}
}
return 1;
} -
Wie nach unten?
-
Ai, die Dokumentation von deinem MySQL ist sehr schwach Kannst du mal für mich was testen? Ersetz mal den stock damit hier:
stock mysqlget(table[],bedien[],abfrag[],data[])
{
new query[256];
format(query,sizeof(query),"SELECT %s FROM %s WHERE %s",abfrag,table,bedien);
new ergebnis = samp_mysql_query(query);
printf("Ergebnis Query: %d", ergebnis);
samp_mysql_store_result();
if(samp_mysql_num_rows())
{
samp_mysql_get_field(abfrag, data);
samp_mysql_free_result();
return true;
}
else
{
samp_mysql_free_result();
return false;
}
}Bedeutet, du sollst dich einmal mit einem Benutzer anmelden der in MySQL eingespeichert ist und einmal der nicht eingespeichert ist, ok? Ich möchte wissen ob da ein Unterschied ist, um den Crash zu verhindern. Bitte die Beiden Debug log´s dann schicken. Danke!
-
Nein, aber anscheinend mach ich immer ein Tutorial in jedem Thema xD
public OnPlayerConnect(playerid)
{
//Blahblah anderer Code von OnPlayerConnect ^^
ShowPlayerDialog(playerid,DIALOG_BETAKEY,1,"BETAKEY","Bitte gebe deinen Betakey ein!","Weiter","Abbrechen");
return 1;
}public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == 1)
{
if(response) //Code wenn er auf den 1 Button klickt, also "Weiter"
{
if(strcmp(inputtext,"ZAHLENCODE")) == 0) // BETAKEY
{
SendClientMessage(playerid,0xFFFFFFFF,"Du wurdest erfolgreich eingeloggt.");
}
else
{
SendClientMessage(playerid,0xFFFFFFFF,"Du hast einen nicht gültigen Betakey eingegeben!");
kick(Playerid);
}
}
else //wenn er auf "Abbrechen" klickt
{
//Code blahblah ^^
}
}
return 1;
} -
ServerAbsturz noch immer? Wenn nicht dann passt es doch
-
Ach verdammt sry, denkfehler. Ich hab mich mit MySQL nie beschäftigt, aber aus deinem stock gehört das
samp_mysql_free_result();
bei else raus, denn was für ein Ergebnis bitte soll er den finden? Wenn es das gar nicht gibt, verstehst?
Aber ich müsste mich echt mal mit PAWN-MySQL beschäftigen...
-
Zeig mir mal paar Zeilen wo du mysqlget verwendest, dann kann ich dir helfen.
-
Du Meinst vom Boden aus, oder? Wenn ja benötigst du das Plugin MapAndreas by Kyle mit dem du die Z Koordinate vom Boden ausgeben lassen kannst, dass du X und Y angibst. z.B.:
Wenn Spieler auf 500.0,500.0,40.0 Koordinate ist, rechnet man einfach:
new Float:newZ; //Die Z Koordinate vom Boden.
MapAndreas_FindZ_For2DCoord(500.0, 500.0, newZ); //Die Z Höhe von 500x500 in newZ speichern.
if((40.0 - newZ) > 10.0) //Wenn Spieler vom Boden 10.0 höher ist. (Der Wert 40 ist von oben ^^)
{
//Aktion für den Spieler hier, wenn er halt höher ist ^^.
}p.S.: Die Z-Koordinate ist die Höhe
-
@ Google Earth Beim Callback OnPlayerSpawn wird kein string zurückgegeben, nur die playerid.. Du musst eine Definition beim Spawn setzen und der Spieler sollte dann im Chat was eingeben. bzw du nützt ein Dialog ^^.
-
Wenn du mysqlget abfragst, solltest du das wiedergegebene also ob true oder false, vorerst in eine Variable Speichern und wenn es false ergibt, sofort den Vorgang abbrechen.
-
Zu Befehl Chef, dazu noch Schlagobers mit Kirsch?
stock NoLicCar(vehicleid)
{
switch(GetVehicleModel(vehicleid))
{
case 462, 510, 509, 481, 462: return true;
}
return false;
}public OnPlayerStateChange(playerid, newstate, oldstate)
{
if(newstate == PLAYER_STATE_DRIVER && PlayerInfo[playerid][pCarLic] == 0 && !NoLicCar(GetPlayerVehicleID(playerid))
{
SendClientMessage(playerid, 0xFFFFFF00, "Fahren ohne Führerschein ist verboten!");
}
return 1;
} -
@ [FoR]Hardcore Du fragst ja nur ab, dass Leute die zu Fuß oder im Auto sind, geportet werden können Aber das Auto wird immer noch nicht geportet! Deswegen nützt man SetVehiclePos
Lösung:
public OnPlayerPickUpPickup(playerid, pickupid)
{
if(pickupid == GarageEnter1)
{
if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),542.2825,-1410.8854,578.4260);
else SetPlayerPos(playerid,542.2825,-1410.8854,578.4260);
SetPlayerFacingAngle(playerid,270);
SetCameraBehindPlayer(playerid);
}
if(pickupid == GarageEnter2)
{
if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),542.2825,-1410.8854,578.4260);
else SetPlayerPos(playerid,542.2825,-1410.8854,578.4260);
SetPlayerFacingAngle(playerid,270);
SetCameraBehindPlayer(playerid);
}
if(pickupid == GarageExit1)
{
if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),542.2825,-1410.8854,578.4260);
else SetPlayerPos(playerid,168.3734,-1344.4170,69.5407);
SetPlayerFacingAngle(playerid,180);
SetCameraBehindPlayer(playerid);
}
if(pickupid == GarageExit2)
{
if(IsPlayerInAnyVehicle(playerid)) SetVehiclePos(GetPlayerVehicleID(playerid),542.2825,-1410.8854,578.4260);
else SetPlayerPos(playerid,168.3734,-1344.4170,69.5407);
SetPlayerFacingAngle(playerid,180);
SetCameraBehindPlayer(playerid);
}
return 1;
} -
wenn du
printf("Zeichen: %d", sizeof lang);
machst, wirst du 2 oder 3 herausbekommen, meines wissens.. Nicht die länge von string. Nimm mal bei
sizeof(lang)das sizeof weg
-
@ Defcon666 Unterstützt sollte 1024 Zeichen Aber das wäre schwachsinnig wie 512...
-
Nicht nur das, denn wenn der string 1024 groß wäre, würde es nicht klappen, da ich nur 512 festgelegt habe, verstehst Aber nein nicht als Badwordlist, sondern als was anders aber egal Mal gucken ob wer das Prob lösen kann.
-
Ok Jungs, ihr müsst den stock auch nützen Ein stock ist temporär und wird erst mit kompiliert, wenn er benützt wird, also schreibt mal irgendwohin das:
ReplaceWordInString("Deine Muda stinkt!", "stinkt!", "riecht gut!");Also wenn einer nun Deine Mudda stinkt! schreiben würde, wird er umbenannt in Deine Mudda riecht gut!
Edit:// Weil Schnacke fragte wie man es als Befehl Testen könnte hier:
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/test", false))
{
printf("%s", ReplaceWordInString("Deine Muda stinkt!", "stinkt!", "riecht gut!"));
return 1;
}
return 0;
} -
-
So Leute, jetzt wollte ich mal eine Frage stellen
stock ReplaceWordInString(string[], const findstr[], const repstr[]) //by Templer
{
new length = 512, cache[512], pos = strfind(string, findstr, true);
if(strlen(repstr) != strlen(findstr))
{
strmid(cache, string, pos+strlen(findstr), length);
strdel(string, pos, length);
strins(string, repstr, pos, length);
strcat(string, cache, length);
}
else
{
strdel(string, pos, pos+strlen(findstr));
strins(string, repstr, pos, length);
}
return string;
}Wie man sieht wird cache mit 512 gesetzt. Jedoch ist das unsinnig und nicht so schön und wollte ja eigentlich cache die größe vom string geben, jedoch ergeben bei sizeof oder strlen folgende Fehlermeldung:
warning 224: indeterminate array size in "sizeof" expression (symbol "")
Also wie kann ich von diesem string nun die Größe herausfindenHoffe auf ne Antwort, Danke
Mfg Templer