Da hast du zwar keine eigenen Funktion zum zurückgeben des Indexes sondern prüfst in der Schleife direkt auf den exakten Eintrag in dem du die Position vergleichst.
if(!IsPlayerInRangeOfPoint(playerid,1.0,Telefonzelle[i][x2],Telefonzelle[i][y2],Telefonzelle[i][z2]))continue;
Du filterst damit ja auf den richtigen Index. Ist ja nicht wirkliche eine andere Logik dahinter als die, die ich meinte mit prüfen von vehicleid auf AHC.
Beiträge von Goldkiller
-
-
Kommt drauf an.
Nur unter "OnPlayerStateChange" reicht der von dir gezeigte Code nicht. newstate muss zumindest PLAYER_STATE_DRIVER oder PLAYER_STATE_PASSENGER sein, sonst kannst dudiedort nicht richtig mit GetPlayerVehicleID arbeiten.Zitatfor(new i; i<MAX_AHC; i++)
{
if(!IstAHC(vehicleid))continue;
format(string,sizeof(string),"ID: {FFAA00}%d{FEFEFE} Kosten: {FFAA00}%d${FEFEFE}",AutoHausCar[i][cID],AutoHausCar[i][Kosten]);
return ShowPlayerDialog(playerid,DIALOG_EAHC,DIALOG_STYLE_LIST,string,"Fahrzeug Umparken","Auswahl","Abbrechen");
}
Ganz genau hab ich auch nicht verstanden,wieso du in der Schleife IstAHC() prüfst.
Ich denke mal, du möchtest beim Einsteigen in eines dieser Fahrzeuge die zum Autohaus gehören den Dialog anzeigen.
Was dir dann aber fehlt,ist der richtige Index im Array AutoHausCar bzw AHC der zu der vehicleid passt.
Könntest also passend zu IstAHC eine Funktion anlegen, die dir an Hand der vehicleid den korrekten Index liefert. Mit dem müsstest du dann weiterarbeiten für den Dialog:if(!IstAHC(vehicleid) ) return print("Kein Autohaus Fahrzeug");
new index = GetAHCIndex(vehicleid);
format(string,sizeof(string),"ID: {FFAA00}%d{FEFEFE} Kosten: {FFAA00}%d${FEFEFE}",AutoHausCar[index ][cID],AutoHausCar[index ][Kosten]);
return ShowPlayerDialog(playerid,DIALOG_EAHC,DIALOG_STYLE_LIST,string,"Fahrzeug Umparken","Auswahl","Abbrechen");
GetAHCIndex gibt es natürlich noch nicht ;).//Edit: Rechtschreibung
-
Zitat
pawno\include\streamer.inc(304)
Die Warnung ist in einer anderen Datei, nicht deinem Hauptscript welches du kompiliert.Die Zeilen mit den Warnungen enthalten beide "Streamer_OnPlayerDisconnect".Wie sieht denn bei dir im Script OnPlayerDisconnect aus ? Dort müssten 2 Parameter übergeben werden (playerid, reason) .
-
Der gezeigte Ausschnitt hat auch nichts mit dem Speichervorgang zu tun.
Da du sagst,dass du ein MySQL Plugin verwendest:
Such doch nach einer Variable von der du weisst,dass sie in der Datenbank gespeichert wird und dann "NextPayday" im gleichen Stil an. -
Erklärt sich nicht von selbst.
Variable i gibt es gar nicht, sizeof(MAX_AHC) wird mMn nicht mal kompilieren ( MAX_AHC ist keine Variable ) und "AHC" ist kein mehrdimensionales Array.ZitatUndzwar ist die ID des Fahrzeuges immer 0.. dabei steht in der Datenbank was anderes. Sprich er nimmt immer das Fahrzeug 0 aus der Datenbank...
Woran erkennst du denn,dass das Fahrzeug immer die ID 0 hat ? Das einzige wo du die ID direkt ausließt ist ja hier:Zitatmysql_fetch_field_row(query,"cID"); AutoHausCar[i][cID] = strval(query);
Lass doch mal direkt per print "query" und / oder den Wert hinter "AutoHausCar[i][cID]" ausgeben.//Edit: Vielleicht auch mal definieren,was cID genau sein soll. Soll es die vehicleid sein,die auch von SA:MP Server vergeben wird oder eine einzigartige ID die von der Datenbank vergeben wird.
-
Dann bleib besser beim Streamer Plugin.
Im Releasethread stehen dazu wichtige Informationen,falls Objekte zu spät laden o.Ä. .
http://forum.sa-mp.com/showpost.php?p=428433&postcount=1Zitat- The tick rate does not represent any specific measurement of time and varies depending on the server's processing power. If items stream too slowly, lower the tick rate; if CPU usage gets too high, raise the tick rate.
- If some items are not appearing, there may be too many in one area. Lower the streaming distance by decreasing the "streamdistance" parameter on each native.
Aber:
Performance NotesZitat- It is not recommended to use a high streaming distance for every item. This can drastically impact performance because it leads to more items being checked on each update. If an item's streaming distance exceeds that of the cell distance (600.0 by default), it also does not benefit from spatial indexing, which can lead to even worse performance. Only set high streaming distances for items which need to be visible from very far away (global map icons, for example).
- Adding too many virtual worlds and interiors to items can lead to increased memory usage and decreased performance. Specifying -1 (all virtual worlds and interiors) actually ensures the best performance, because it eliminates the need to do a lookup when that item is checked on each update. Note that this does not apply to players since only a finite amount can be added.
-
-
Ich zitiere mal folgendes Video:
Zitat von Zock3rExterner Inhalt www.youtube.comInhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.Durch die Aktivierung der externen Inhalte erklären Sie sich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.:loltroll:
Muss ich auch später mal ausprobieren -
Du musst kein where angeben ( Grundlagen ) . Nur werden so alle Einträge aktualisiert. Macht bei den Spaltennamen wie bei dir sogar auch Sinn.
Vor dem Letzten Wert muss das Komma ( , ) entfernt werden.
Der String ist mit 128 definitiv zu klein.
//Edit:
db_query(Konten,query);
Die Variable in der du die Datenbankverbindung speicherst heißt wirklich Konten ?
Huoaps. -
Das geht mit sscanf auch viel einfacher. Ist sowieso Bestandteil von sehr vielen Scripten, bei dir bestimmt auch.
new tag,monat,jahr;
if(sscanf(input,"p.ddd",tag,monat,jahr)) { // sscanf v1
// if(sscanf(input,"p<.>ddd",tag,monat,jahr)) { // sscanf v2,v3
// Ungültiges Zahlenformat
}
else {
// Gültiges Zahlenformatif( tag <= 0 || tag > 31 || monat <= 0 || monat > 12 || jahr < 1900 ) ) {
// Zahlen die ungültiges sind. Vor 1900 sollte sowieso keine Geboren sein,der SA:MP spielt :p
}
} -
Das weiss es nicht. Es wird automatisch aufgerufen durch das Plugin, sobald es die Abfrage abgearbeitet hat und ein Ergebnis vorhanden ist.
Das ist in etwa so wie OnPlayerConnect, OnPlayerStateChange etc. Die werden auch automatisch aufgerufen,sobald es dort neue Informationen gibt. Genau so funktioniert es auch mit dem MySQL Plugin ( sofern Threaded ).
-
Also ich hab da eine Frage.
Hier bei
mysql_function_query(handle,"SELECT * From accounts",true,"LoadPlayers","");
Bei SELECT Anfragen sollte ja der Cache auf true sein, das verstehe ich. Muss man dann immer einen Public angeben wie hier im Beispiel LoadPlayers ?
Ja,denn r7 erlaubt nur noch die Threaded Methode.Zitat* = R7 (supports only threaded scripts)
Erst wenn LoadPlayers() aufgerufen wurde, ist das Ergebnis der SQL Abfrage ( "SELECT * From accounts" ) fertig abgearbeitet.//Edit:
Spoiler anzeigen Zugegeben,bei UPDATE macht es eher weniger Sinn dort eine public Funktion anzugeben.//Edit2:
Damit ich nicht immer neue Funktionen anlegen muss,lass es es immer über OnQueryFinish verarbeitet.
Ist bei r7 vorhanden:
#define mysql_query(%1,%2,%3,%4) \
mysql_function_query(%4, %1, false, "OnQueryFinish", "siii", %1, %2, %3, %4)
Die Reihenfolge der Parameter muss entsprechend angepasst werden. -
Zitat
Accessing element at index 601 past array upper bound 301
Dort steht doch woran es liegt.
new array[300];
new i = 601;
new a = array[i]; // Würde den gleichen Fehler verursachenZitat[20:25:09] [debug] #0 00046310 in public OnPlayerStateChange () from GER.amx
Der Fehler liegt irgendwo bei OnPlayerStateChange.
Du solltest auch mal mit einem anderem Debuglevel dein Script kompilieren,dann wird dir auch die genaue Zeile im Quellcode angegeben.
https://github.com/Zeex/samp-p…le-script-with-debug-info -
Verbinde dich doch mit dem MySQL Server und sende ein ganz einfach SQL Kommando an ihn ( "SELECT NOW()" )
Solltest du erfolgreich ein Ergebnis erhalten ist die Verbindung hergestellt worden.
Für den Fall es kommt kein Ergebnis im Script an, startest du auch noch nach der Verbindung einen Timer und prüfst beim Aufruf der Funktion durch den Timer ob die Verbindung hergestellt wurde ( Über eine Variable zB ).
So funktioniert es definitiv. Über errno weiss ich nichts. -
Ein bischen mehr Infos hätte auch nicht geschadet. Das die Meldung erscheint oder bei error ?
Sieht aber so aus,als würde der Button klick nicht registriert werden und daher müsste man dort gucken.
In Zeile 23 wird die Funktion nicht richtig geschlossen, dort muss "});" hin.Eigentlich hätte die javascript Console dort eine Fehler melden müssen. Hat sie auch bestimmt nur hast du nicht nachgesehen :p.
//Edit: Hups.
-
Warum möchtest du den Login denn unbedingt über Ajax abwickeln ? Das geht auch einfacher über ein Formular.
Eventuell klappt einfach der Aufruf der "ajax.PHP" nicht und du kannst den Fehler über das "error" Callback abfangen:
Wenn du denn nichts eingegeben hast,kommt denn folgende Meldung:
-
Du hast also nur den Code aus einem anderem Thread kopiert ohne ihn zu verstehen .
Was daran falsch ist habe ich geschrieben.
Du weist nie vx,vy und vz Werte zu. Über die Werte hinter vx,vy und vz soll aber geprüft werden in welcher Zone / Stadt die Koordinaten sind.
Was du haben möchtest ist,dass die Koordinaten des Fahrzeuges hinter vx,vy und vz stecken. Wie das geht, solltest jetzt aber auch alleine schaffen.new a;
if( a == 2 ) {
}
Hier hast du das gleiche Problem nur viel einfacher aufgebaut. Die Abfrage wird nie wahr und macht auch keinen Sinn. -
Der 1. Fehler liegt schon bei BohrTimer3().
Du erstellst die Pickups nur,wenn ein Spieler nahe der bestimmten Position ist. Sind aber mehrere Spieler an dieser Position, wird der alte Wert hinter den Variablen Geldsack1 ,Geldsack2,Geldsack3 und Geldsack4 überschrieben und es werden weitere Pickups erstellt.
Heißt: Pro Spieler an der richtige Position 4 neue Pickups.
Macht also bei 5 Spielern: 5 * 4 Pickups = 20 Pickups ( Von den Letzten 4 weisst du aber nur noch über Geldsack1-4 die IDs ).
Wenn du du Pickups sowieso erstellen musst, wieso in der Spieler Schleife ?Das Problem zieht sich dann durch den Rest deines Codes.
-
new Float:vx, Float:vy, Float:vz;
for(new g = 0; g< sizeof(SanAndreasZones); g++)
{
if(vx >= SanAndreasZones[g][Zone_Area][0] && vx <= SanAndreasZones[g][Zone_Area][3]
// usw
Was hälst du davon:
Den Variablen vx,vy und vz sollte man richtige Werte / Koordinaten zuweisen. -
Nein.
1. Der Text muss auch als String gekennzeichnet sein ( " " )
2. Es ist \n , nicht /n. ( Backslash )