Ich hatte auf dem Screen garkeine Tonnen
Deswegen verwundert mich es ja das so große Zahlen kommen.
Aktuell klappt /pfandsuchen einwandfrei und wenn tonnen in der Datenbank eingetragen sind, bekommt immer einer von den beiden Pfandflaschen, aber wenn keine Tonnen eingetragen sind, dann kommen große Zahlen.
Aber warum
Beiträge von Kasakow
-
-
Zu deinem ersten Problem, du musst den Code aus der Schleife holen:
public Pfandadd()
{
new str[3], count, query[128];
for(new i=1;i<MAX_TONNEN;i++)
{
format(str, 3, "%i", i);
if(mysql_GetFloat("nlr_tonne", "X", "id", str) < 1.0)continue;
count ++;
}
new rand = 1 + random(count);
format(query, sizeof(query), "SELECT * nlr_tonne WHERE id=%i", rand);
mysql_query(query);
mysql_store_result();
if(!mysql_num_rows())
{
KillTimer(Tonnentimer);
Tonnentimer = SetTimer("Pfandadd", 1000, false);
printf("Es konnten keine Pfandflaschen an ID: %i übermittelt werden!",rand);
}
else
{
KillTimer(Tonnentimer);
format(query, sizeof(query), "UPDATE nlr_tonne SET Pfandflaschen=Pfandflaschen+12 WHERE id=%i", rand);
mysql_query(query);
Tonnentimer = SetTimer("Pfandadd", 60*1000*10, true);
printf("Es wurden 12 Pfandflaschenan ID: %i übermittelt!",rand);
}
mysql_free_result();
return 1;
}Zum zweiten Problem: Hier genau andersrum, du musst den Code in die Schleife Packen:
ocmd:pfandsuchen(playerid)
{
new str[3], Float:X, Float:Y, Float:Z, query[128], string[256], rand = 1 + random(12);
for(new i;i<MAX_TONNEN;i++)
{
format(str, 3, "%i", i);
format(query, sizeof(query), "SELECT * nlr_tonne WHERE id=%i", i);
mysql_query(query);
mysql_store_result();
if(mysql_GetFloat("nlr_tonne", "X", "id", str) < 1.0)continue;
X = mysql_GetFloat("nlr_tonne", "X", "id", str), Y = mysql_GetFloat("nlr_tonne", "Y", "id", str), Z = mysql_GetFloat("nlr_tonne", "Z", "id", str);
if(!IsPlayerInRangeOfPoint(playerid, 3.0, X, Y, Z))continue;
mysql_free_result();
format(query, sizeof(query), "UPDATE nlr_tonne SET Pfandflaschen=Pfandflaschen-%i WHERE id=%i",rand, i);
mysql_query(query);
uInfo[playerid][sPfandflaschen] += rand;
format(string, sizeof(string), "ERFOLGREICH: {FFFFFF}Du hast %i {EBFF00}Pfandflaschen{FFFFFF} aus der {EBFF00}Mülltonne{FFFFFF} gekramt!", rand);
SendClientMessage(playerid, COLOR_GREEN, string);
return 1;
}
return SendClientMessage(playerid, COLOR_RED, "Keine Tonne hier.");
}Ich habe dir mal deine MySQL Queries gelassen wie sie sind, da ich nicht weiß wie du die Funktionen (mysql_GetFloat) hast, aber unter Umständen ist das recht Ressourcenlastig geschrieben. Aber in erster Linie schauen wir mal, dass es überhaupt geht.
Leider ist es aktuell so, wenn es diese ID nicht gibt, versucht er es trotzdem zu übergeben
Aktueller Code:
public Pfandadd()
{
new str[3], count, query[128];
for(new i=1;i<MAX_TONNEN;i++)
{
format(str, 3, "%i", i);
if(mysql_GetFloat("nlr_tonne", "X", "id", str) < 1.0)continue;
count ++;
}
new rand = 1 + random(count);
format(query, sizeof(query), "SELECT * nlr_tonne WHERE id=%i", rand);
mysql_query(query);
mysql_store_result();
if(!mysql_field_rows())
{
KillTimer(Tonnentimer);
Tonnentimer = SetTimer("Pfandadd", 10000, false);
printf("Es konnten keine Pfandflaschen an ID: %i übermittelt werden!",rand);
}
else
{
KillTimer(Tonnentimer);
new rand1 = 1 + random(11);
format(query, sizeof(query), "UPDATE nlr_tonne SET Pfandflaschen=Pfandflaschen+%i WHERE id=%i",rand1, rand);
mysql_query(query);
Tonnentimer = SetTimer("Pfandadd", 10000, true);
printf("Es wurden %i Pfandflaschen an ID: %i übermittelt!",rand1,rand);
}
mysql_free_result();
return 1;
} -
Guten Tag,
Mein Name lautet MrPawn.
Und zwar bräuchte ich hilfe bei meinem Pfandflaschen System.
Es gehört zu meinem Dynamischen Mülltonnen System.
Und zwar habe ich versucht alle 10 Minuten random an eine Tonnenid flaschen zu verteilen, das klappt auch nicht ganz.
Datenbank:
Print Result:Script:
public Pfandadd()
{
new str[3], count, query[128];
for(new i;i<MAX_TONNEN;i++)
{
format(str, 3, "%i", i);
if(mysql_GetFloat("nlr_tonne", "X", "id", str) < 1.0)continue;
count ++;
new rand = 0 + random(count);
format(query, sizeof(query), "SELECT * nlr_tonne WHERE id=%i", rand);
mysql_query(query);
mysql_store_result();
if(!mysql_num_rows())
{
KillTimer(Tonnentimer);
Tonnentimer = SetTimer("Pfandadd", 1000, false);
printf("Es konnten keine Pfandflaschen an ID: %i übermittelt werden!",rand);
}
else
{
KillTimer(Tonnentimer);
format(query, sizeof(query), "UPDATE nlr_tonne SET Pfandflaschen=Pfandflaschen+12 WHERE id=%i", rand);
mysql_query(query);
Tonnentimer = SetTimer("Pfandadd", 60*1000*10, true);
printf("Es wurden 12 Pfandflaschenan ID: %i übermittelt!",rand);
}
mysql_free_result();
}
return 1;
}ocmd:pfandsuchen(playerid)
{
new str[3], Float:X, Float:Y, Float:Z, query[128], string[256], rand = 0 + random(12);
for(new i;i<MAX_TONNEN;i++)
{
format(str, 3, "%i", i);
format(query, sizeof(query), "SELECT * nlr_tonne WHERE id=%i", i);
mysql_query(query);
mysql_store_result();
if(mysql_GetFloat("nlr_tonne", "X", "id", str) < 1.0)continue;
X = mysql_GetFloat("nlr_tonne", "X", "id", str), Y = mysql_GetFloat("nlr_tonne", "Y", "id", str), Z = mysql_GetFloat("nlr_tonne", "Z", "id", str);
if(!IsPlayerInRangeOfPoint(playerid, 3.0, X, Y, Z))continue;
mysql_free_result();
format(query, sizeof(query), "UPDATE nlr_tonne SET Pfandflaschen=Pfandflaschen-%i WHERE id=%i",rand, i);
mysql_query(query);
}
uInfo[playerid][sPfandflaschen] += rand;
format(string, sizeof(string), "ERFOLGREICH: {FFFFFF}Du hast %i {EBFF00}Pfandflaschen{FFFFFF} aus der {EBFF00}Mülltonne{FFFFFF} gekramt!", rand);
SendClientMessage(playerid, COLOR_GREEN, string);
return 1;
}Bei Pfandsuchen tritt das Problem auf der von überall die Pfandflaschen kramen kann.
-
Ich finde das ergibt keinen genaueren sinn, wieso arbeites du den mit INVALID_PLAYER_ID ?
Erstelle dir doch einfach ein PVar - Integer.
Den nennst du z.B "Roller"
Und dann schreibst du deinen Befehl so:
if(!strcmp(cmdtext, "/roller", true))
{
//if(PlayerInfo[playerid][pLevel] > 2) return SendClientMessage(playerid, Rot,"Du bist über Level 2 und kannst dir deshalb keinen weiteren Roller mieten"); // über lvl 2
new Float: X, Float:Y, Float:Z; GetPlayerPos(playerid,X,Y,Z);
if(GetPVarInt(playerid, "Roller") == 0){
MeinRoller[playerid] = CreateVehicle(462, X,Y,Z,0, 0, 1, 120), SetPVarInt(playerid, "Roller", 1);}
else {
DestroyVehicle(MeinRoller[playerid]), SetPVarInt(playerid, "Roller", 0);}
return 1;
}public OnPlayerDisconnect(playerid, reason)
{
if(GetPVarInt(playerid, "Roller") == 1) { DestroyVehicle(MeinRoller[playerid]), DeletePVar(playerid, "Roller"); }
return 1;:
}Das sollte ganz gut Funktionieren
Mit freundlichen Grüßen,
MrPawn
-
Guten Tag,
Mein Name lautet MrPawn.
Das mit dem Objekt erstellen klappt jetzt super, danke Goldkiller:
Doch leider funktionert jetzt das mit dem Laden nicht so ganz.
Wenn ich die Laden Funktion drinnen habe kommt immer folgendes wenn ich auf den Server ConnecteIm Script habe ich das so gemacht:
//Mülltonnen System
mysql_query(handle, "SELECT * FROM nlr_tonne");
while(cache_get_field_count(handle)){
new data = cache_get_row_int(0, 0);
mInfo[data][M_ID] = data;
mInfo[data][Fx] = cache_get_row_float(1, 1, handle),mInfo[data][Fy] = cache_get_row_float(2, 2, handle),mInfo[data][Fz] = cache_get_row_float(3, 3, handle);
mInfo[data][FRotX] = cache_get_row_float(4, 4, handle),mInfo[data][FRotX] = cache_get_row_float(5, 5, handle),mInfo[data][FRotZ] = cache_get_row_float(6, 6, handle);
CreateObject(1337, mInfo[data][Fx], mInfo[data][Fy], mInfo[data][Fz], mInfo[data][FRotX], mInfo[data][FRotY], mInfo[data][FRotZ]);
}Mit freundlichen Grüßen,
MrPawn
-
Guten Tag,
Mein Name lautet MrPawn.
ich habe ein Dynamisches Mülltonnensystem angefangen. Zurzeit werden Mülltonen erstellt und geladen(?) - das hab ich aber noch nicht getestet.
Mein Problem ist jetzt, wenn ich die Mülltonne erstelle bringe ich den Player dann in den Objekt Edit Mode.
Wenn ich die Mülltonne nicht verschiebe, gibt es nur einen Eintrag in der MySQL Datenbank, verschiebe ich es aber, gibt es pro zug bzw. pro fertigen zug, einen Eintrag in die MySQL Datenbank.
Es sieht bisher so aus:
In der DatenbankIm Script
ocmd:ctonne(playerid)
{
new Float:x, Float:y, Float:z;
if(uInfo[playerid][sAdminlevel] < 6)return SendClientMessage(playerid, COLOR_LIGHTRED, "FEHLER: {FFFFFF}Du hast nicht das Recht dazu.");
GetPlayerPos(playerid, x, y, z);
Tonne[playerid] = CreatePlayerObject(playerid, 1337, x, y, z, 0.0, 0.0, 0.0);
EditPlayerObject(playerid, Tonne[playerid]);
return 1;
}public OnPlayerEditObject(playerid, playerobject, objectid, response, Float:fX, Float:fY, Float:fZ, Float:fRotX, Float:fRotY, Float:fRotZ)
{
new query[256];
if(!response)
{
SendClientMessage(playerid, COLOR_LIGHTRED, "FEHLER: {FFFFFF}Du hast das verschieben der Mülltonne abgebrochen!");
DestroyObject(Tonne[playerid]);
}
else if(response)
{
if(playerobject){
format(query, sizeof(query), "INSERT INTO nlr_tonne (X,Y,Z,rX,rY,rZ) VALUES ('%f','%f','%f','%f','%f','%f')", fX, fY, fZ, fRotX, fRotY, fRotZ);
mysql_query(handle, query);}
}
return 1;
}Mit freundlichen Grüßen,
MrPawn
-
Guten Tag,
Mein Name lautet MrPawn.
Und zwar brauche ich folgende sache/tipp für mein Roleplay Script.
Ich mache für den anfang einen Bankraub, und habe in die Bank eine Bot namens Kristina hingestellt.
Dann werden unten im Tresorraum PlayerObjekte erstellt.
Da geht zwar alles aber mein Problem ist:
Alle Spieler sind in der gleichen Virtualen Welt (25)
Und sehen somit den Bot, wunderbar
Aber leider erstellen sich die Objekte auch mehrfach und das ist das Problem.
Deswegen wollte ich einfach ein Objekt für jeden der in der Anfangsmission ist erstellen.
Aber leider sieht man den Ingame nicht.(Soll ein anscheinden Skins sein)
Und dafür brauche ich nun einen Tipp.Mit freundlichen Grüßen,
MrPawn
-
Gib da mal statt return 0; return 1; ein
-
format(string,sizeof(string),"%s: Model: %i Fahrzeug: %i",GetVehicleName(GetVehicleModel(FraktAuto[i][id_x])),FraktAuto[i][vmodel],FraktAuto[i][id_x]);
zu
format(string,sizeof(string),"%s: Model: %i Fahrzeug: %i\n%s",GetVehicleName(GetVehicleModel(FraktAuto[i][id_x])),FraktAuto[i][vmodel],FraktAuto[i][id_x],string);
Versuche das mal
-
Zeig mal deine Funktion Frakchatlog
-
Wie Jeffry schon meinte, sollte der link helfen, dennoch lasse ich dir auch mal einen Beispielcode da.
Erstellung des Arrays/Variable:
new NoobCar[anzahl];Erstellung des Fahrzeuges:
Also meiner Meinung her würde ich sagen, erstelle es beim Serverstart. (Fahrzeuge)
NoobCar[0] = CreateVehicle(..);Mit einer Schleife die Fahrzeuge durchgehen:
for(new i;i<sizeof(NoobCar);i++)
{
DestroyVehicle(NoobCar[i]);
}Natürlich ist dies nur ein Beispiel code
Ich Hoffe ich konnte dir helfen.
Mit freundlichen Grüßen,
MrPawn
-
Es kann ja sein, das der Code von euch auch Funktioniert.
Habe es nur bis jetzt immer so gemacht.
Das der String mit nochmal unten drunter ausgegeben wird, und hatte nie Probleme.
Dennoch sage ich nicht das euer Code nicht stimmt, kann ich ja schließlich auch nicht da ich es noch nicht ausprobiert habe.Mit freundlichen Grüßen,
MrPawn
-
format(string, 128, "Admin %s (ID: %i)- Level %d - %s\n",PlayerName2(i),i, AccInfo[i][Level],AdmDuty);
zu
format(string, 128, "Admin %s (ID: %i)- Level %d - %s\n%s",PlayerName2(i),i, AccInfo[i][Level],AdmDuty,string);
Versuche das mal
-
format(str,sizeof(str),"%sSpieler: %s | Text: %s\n",str,besitzer,text);
format(str,sizeof(str),"Spieler: %s | Text: %s\n",besitzer,text,str);
Das müsste Funktionieren
-
Suche 4/5 € PSC Guthaben, bwz vllt auch nur 30 Cent.
-
stock SaveAccount(playerid) {
format(query, sizeof(query), "UPDATE tabelle SET wert='%.' WHERE bla='%.'", ..);
mysql_query(query);
}Ist aber nur ein Beispiel
-
Pvars/Variablen erhöhen/vermindern
Danach mal mit Timern arbeiten, dann mit deiner jeweiligen Speicherungsart das ganze Speichern lassen:Beispiel:
forward timer(playerid);public OnPlayerConnect(playerid)
{
SetTimerEx("timer", 60000, true, "i", playerid);
}public timer(playerid)
{
if(PayDay[playerid] >= 59)
{
//Payday
}
else PayDay[playerid] ++;
}Natürlich solltest du den Timer ja nicht bei OnPlayerConnect starten lassen, ist nähmlich nur ein Beispiel
-
Vielen Dank
- Ich habe mich dieses mal bemüht ein gutes Tutorial auf die Beine zustellen
-
Soll ich dir gerade mal per Teamspeak & Teamviewer helfen ?
-
Vielleicht wurden sie ja wo anderes hin gestellt, sagen wir mal unter dem Boden.
Musst mal nachschauen.