In C kannst du wie in Pawn, einfach Funktionen etc in Includes auslagern und diese dann einfach in deine Main-Datei inkludieren und nutzen ![]()
Beiträge von Kaliber
-
-
Achsoo sehe erst jetzt, dass sich der Name nicht auf den Spielernamen bezieht, okay.
Verstehe aber nicht warum man das nicht "wollen" wollte
Weil der Server in dieser Zeit nichts machen kann und auf das Ergebnis von der Datenbank warten muss.
C
Alles anzeigenstock GetUserIDByName(const name[]) { new Cache:reports,query[128]; mysql_format(mysqlconnect, query, sizeof(query), "SELECT `userID` FROM `user` WHERE `username` = '%e' LIMIT 1", name); reports = mysql_query(mysqlconnect, query, true); new count = cache_num_rows(); if(!count) return 0; new userID; cache_get_value_name_int(0, "userID", userID); return userID; }Nutze bei Strings zudem IMMER %e, sonst wäre eine SQL-Injection möglich.
-
Warum ist "i" nicht definiert?
Weil du es playerid genannt hast?

Müsstest es dann schon i nennen, da du ja keine playerid übergibst

-
Bin mir sicher, dass man das alles in eine Funktion packen kann
Natürlich kann man das, aber das will man nicht

Bzw man sollte es eigentlich schlicht weg vermeiden, da das keine asynchronen calls wären, sondern synchrone...
Dann lade die User_ID doch einfach 1x am Start und dann speichere sie zwischen in einer Variable?
Dann kannst du sie immer direkt nutzen, ohne eine Funktion verwenden zu müssen

-
Nein ich lade den Spieler nicht, diese Funktion muss wirklich die userID returnen
Naja, dann solltest du es so lösen:
Nimm nun den Code 2 und Kapsel ihn in eine neue Funktion:
Und dann kannst du einfach Code2 aufrufen, sobald du den Wert der User_ID hast und dahin alles übergeben und nutzen
Ist so etwas möglich
Natürlich, einfach mit [wiki]SetTimerEx[/wiki]

-
Wie krieg ich das alles in eine einzige Funktion?
Das solltest du nicht tun wollen.
Du solltest die User_ID einfach im Enum zwischenspeichern, wenn du den Spieler eh lädst.
Wie mache ich, dass ich beim erstellen alle Index-Werte im Array auf 100 setze?
new HP[10] = {100, ...};
oder so ist ja auch doof.
Wieso?
Wenn es um solche Delays geht, muss man einen Timer verwenden.
Kannst ja immer die selbe Funktion aufrufen. Übergibst und zählst halt immer den Parameter hoch

(Mit [wiki]SetTimerEx[/wiki]) -
Ich meinte lediglich, dass vor einem Forward sowie Public kein Float kommt.
Doch, wenn diese einen TAG-Wert returnen, dann schon

Zu Fuss geht das auch nicht
Das liegt dann offensichtlich an den Variablen

Hast wohl einen Fehler bei der Deklaration gemacht
-
//e: Generell brauchst du für einen Stock auch kein Forward, lediglich muss ein Public mit Forward genutzt werden.
Nein, das stimmt so beides nicht.
1. Tags wie (Float:) müssen für Funktionen angegeben werden, ansonsten weiß der Compiler ja nicht, dass es sich um einen Tag handelt.
2. Wenn man die Funktion von der Code Logik her verwendet, bevor sie definiert wurde, muss man sie forwarden, damit der Compiler weiß, um welchen Tag es sich handelt. (Nur nötig bei TAG Funktionen)
Keine Ahnung wieso da der Compiler bei dir crasht, aber nutz es doch lieber als Makro:
#define GetDistance(%0,%1,%2,%3,%4,%5) VectorSize((%0)-(%3),(%1)-(%4),(%2)-(%5))
-
Was kann ich da machen?
Timestamp nutzen.
C
Alles anzeigen//Als Include quasi: #define SetDelay(%0,%1,%2) SetPVarInt(%0,%1,gettime()+(%2)) #define HasNoDelay(%0,%1) (GetPVarInt(%0,%1)<=gettime()) #define ClearDelay(%0,%1) DeletePVar(%0,%1) //Und dann kannst du das so nutzen: if(HasNoDelay(playerid,"test_delay")) { SetDelay(playerid, "test_delay", 5); //5 = 5 Sekunden Delay print("Kann nur alle 5 Sekunden geprintet werden!"); } //Wenn nicht mehr benötigt: ClearDelay(playerid, "test_delay"); -
Könnte ich noch eine Variable erstellen und dann abfragen, ob der Timer bereits gesetzt ist
Das klingt vernünftig

-
Du brauchst das doch gar nicht abfragen.
Du gibst ihm einfach eine ID.
-
Danke für die Kritik.
Warum nutzt du streamer funktionen, wenn du den Streamer nicht mit "includierst" mit der a_samp machst du das auch.
True dat.
Vor allem brauchst du die nicht (VectorSize) lässt sich auch selbst basteln °L°
VectorSize ist für diese Berechnung optimiert und somit schneller xD
So find ich das irgendwie uncool - so nimmst du den Leuten die Chance zu verstehen was du dort gebastelt hast.
Das stimmt wohl, wobei ich das auch in nem Tutorial mal erklärt habe, aber das irgendwie einfach zur Gewohnheit geworden.
Wo ist Map/ColAndreas
Wollte ja das gerade ohne die großen Plugins lösen.
Alternativ war ja das Physic Include etc verlinkt, aber diese ziehen halt echt viele Ressourcen, für etwas, was man eben auch so grob lösen kann.
-
innerhalb einer Area zurückgibt.
Meinst du ein Rechteck?
Dann:
C
Alles anzeigenstock RandomFloat(Float:min,Float:max,accuracy = 4){ if(min < 0.0 || max < 0.0 || min >= max) return 0.0; if(accuracy < 1 || accuracy > 6) accuracy = 4; new divValue = floatround(floatpower(10.0,accuracy)); return random(floatround(max)-floatround(min))+min+(random(divValue)/divValue); } stock RandomPointInRectangle(Float:minx,Float:miny,Float:maxx,Float:maxy,&Float:tx,&Float:ty){ tx = RandomFloat(0.0,floatsqroot(floatpower(minx-maxx,2)),6)+minx; ty = RandomFloat(0.0,floatsqroot(floatpower(miny-maxy,2)),6)+miny; } -
Hast du einmal geklickt ? Musst glaub ich 2 mal quasi klicken einmal zum markieren und einmal für das aufrufen des callbacks.
Eigentlich sollte einmal klicken reichen, durch das hovern wird es automatisch markiert

Es wird einfach jarnichts davon ausgefuehrt.
Crashdetect geladen, mal einen print gesetzt nach ganz oben, wird dieser ausgeführt?
Es kann sein, dass der Callback falsch gehookt wird durch ein Include, wenn selbst das print nicht ausgeführt wird

-
Der Baum bewegt sich kein bisschen
MoveDynamicObject(Holzfb[i][holzfb_ID], Holzfb[i][holzfb_x], Holzfb[i][holzfb_y], Holzfb[i][holzfb_z]+0.001, 0.001, Holzfb[i][holzfb_urx], Holzfb[i][holzfb_ury], Holzfb[i][holzfb_urz]);
und so?

-
Hast denn mal mit console.log überprüft, ob denn jeweils diese Abfragen ausgeführt werden?

-
Hast dir mal geprintet, was da so die Werte von item sind?
Eventuell musst du das abfangen? Kannst ja per Debug herausfinden, an welcher Stelle der Code crasht...
-
vehiclesMenu.ItemSelect.on
Sollte das nicht:
vehiclesMenu.OnItemSelect
heißen? o:
und bei dem Anderen eben auch?

-
Folgender stock speichert nicht die Stats
Du musst auch immer wieder den string hinten dran hängen (also als Parameter angeben, das %s hast du immer brav gemacht ^^)
C
Alles anzeigenstock SaveUserStats(playerid) { //Wenn der Spieler nicht eingeloggt ist, dann speichere seine Statistiken nicht if(!pInfo[playerid][pLoggedIn]) return 1; //Ansonsten speichere sie new query[256]; mysql_format(handle, query, sizeof(query), "UPDATE `users` SET `level` = '%d', `admin` = '%d', `frak` = '%d', `fraklevel` = '%d', `job` = '%d',", pInfo[playerid][pLevel], pInfo[playerid][pAdmin], pInfo[playerid][pFrak], pInfo[playerid][pFraklevel], pInfo[playerid][pJob]); mysql_format(handle, query, sizeof(query), "%s `money` = '%d', `bank` = '%d', `kills` = '%d', `deaths` = '%d', `prem` = '%d', `maxcars` = '%d'", query, pInfo[playerid][pMoney], pInfo[playerid][pBank], pInfo[playerid][pKills], pInfo[playerid][pDeaths], pInfo[playerid][pPrem], pInfo[playerid][pMaxcars]); mysql_format(handle, query, sizeof(query), "%s WHERE `uid` = '%d'", query, pInfo[playerid][p_ID]); mysql_pquery(handle, query); return 1; } -
Ich hoffe ich hatte dich richtig verstanden: Kleines Mörser Skript
Hahaha xD
Kannst ja einen Kommentar mal drunter geben xD