Schau dir diesen Callback mal an, damit ist das sehr gut möglich: https://wiki.sa-mp.com/wiki/OnPlayerWeaponShot
mfg. ![]()
Schau dir diesen Callback mal an, damit ist das sehr gut möglich: https://wiki.sa-mp.com/wiki/OnPlayerWeaponShot
mfg. ![]()
Suche mal die mysql_static.so und lade die nur ![]()
Mehr Code
Also eine simple Zeile ist länger, als 6 Zeilen wo man mit jedem Komma und jedem Sonderzeichen zu kämpfen hat...ok
Langsamer
Bei 100 Aufrufen...1ms
Fehleranfälliger
Eigentlich ja eher nicht.
Wieso auch....wenn man es so macht wie ich es gezeigt habe, werden eben keine Fehler auftreten, dafür ist es ja da...man muss sich mit den Kommas etc nicht mehr rumplagen und es wird ja geprüft ob Spalten & Anzahl der Attribute übereinstimmt ![]()
PS: Wenn String > 1024 kann man ihn erhöhen, das steht dann in der Konsole, genauso die anderen Fehlermeldungen...
Unübersichtlicher als ein ganz normales Query
Du findest eine Zeile wo du klar siehst welche Variable zu was gehört unübersichtlicher als 6 oder mehr Zeilen, die voll geschrieben sind mit Sonderzeichen und Feldern...alles klar ![]()
Schlechte Wartbarkeit
Wieso? Wenn was nicht funktioniert...muss es ja an einem der 2 Kriterien liegen...eigentlich ist das eine sehr gute Wartbarkeit
Allgemeinverständlichkeit (niemand weiß, dass Name|Alter für Name und Alter steht, da hätte ich wenigstens & genommen)
Es stehen beide Zeichen indirekt dafür:
new x,y,z
if(x | y | z) //Hier geht der Compiler auch durch alle Variablen, anstatt bei der 1. falschen abzubrechen ^^
Zudem kommt, dass wenn man mehrere Queries hat, die unterschiedliche Spalten in derselben Tabelle ändern, dann muss man die "rows" Variable für dieses Query jedes mal, bzw. oft, neu anlegen, das ist Speicherverschwendung, wenn man in Betracht zieht, dass kein wirklicher Vorteil dabei entsteht.
Ich hoffe dir ist bewusst, dass man nicht gezwungen ist diese Funktionen zu verwenden, aber in den Meisten Fällen kann dies sehr praktisch sein.
Um noch etwas anzumerken das MySQL Query von BlueG/ maddinator beinhaltet das ORM - System, damit spart man sich genug Zeit.
Joa das ist ja jedem selbst überlassen ![]()
Probier mal mein System aus, das sollte einfacher und übersichtlicher sein ![]()
Es ist zwar ressourcenfressender logischerweise, allerdings macht es bei 10.000 Aufrufen nur ca 50ms Unterschied ![]()
//Edit: Bei 100 aufrufen, liegt der unterschied nur bei 1ms ![]()
Hallo, viele von euch kennen das Problem mit den langen MySQL Querys und das es sehr unübersichtlich ist.
Aus diesem Grund habe ich mal eine kleine Library geschrieben womit man einfach diese Querys erzeugen lassen kann.
Funktionen:
native MySQL_Insert(handle,const rows[][],const target_Table[],const form[],{Float, _}:...);
native MySQL_Update(handle,const rows[][],const target_Table[],const where[], const form[],{Float, _}:...);
Beispiel:
//Unter OnGameModeInit
handle = mysql_connect(...);
//Oben ins Skript:
stock const rows[][] = {
"`Geld`","`Alter`","`X`","`Name`" //Hier sind die Spalten Namen, wichtig sind hier die `
};
//Dann da wo Ihr den User registriert (INSERT INTO) benötigt:
new money = 5000,alter=16,Float:x=3.141,name[] = "Test123"; //Das sind Beispiel Daten zum speichern
MySQL_Insert(handle,rows,"Test","ddfs",money,alter,x,name);
/*
"Test" = Der Tabellen-Name
"ddfs" = Die Form (die Reihenfolge der Datentypen) d=Integer,f=Float,s=String
*/
//Angenommen wir wollen jetzt den Spieler nur noch Updaten:
new money = 9500,alter=16,Float:x=3.141,name[] = "Test123";
MySQL_Update(handle,rows,"Test","Name","ddfws",money,alter,x,name);
/*
"Test" = Wieder der Tabellen Name
"Name" = Das Where Statement.
"w" = Das w in dem Format gibt an, dass das nachfolgende das WHERE Statement ist (und s dahinter der Typ halt von dem).
*/
Mehrere Where Statements:
new money = 9500,alter=16,Float:x=3.1412,name[] = "Test123";
MySQL_Update(handle,table,"Test","Name|Alter","dfwswd",money,x,name,alter);
Download:
Source-Code: Pastebin
Direkter-Download: MediaFire
mfg. ![]()
Hier eine nützliche Funktion:
stock ReplaceString(const search[],const replace[], source[], size=sizeof source) //(c) by Kaliber
{
new i=strfind(source,search),tmp=strlen(search);
if(i==-1) return 0;
for( ; i!=-1; i=strfind(source,search,false,i+1))
{
strdel(source,i,i+tmp),strins(source,replace,i,size);
}
return 1;
}
//Beispiel:
new string[64] = "Ich liebe Gemüse und Gemüse!";
ReplaceString("Gemüse", "Schokolade", string);
print(string); //-> "Ich liebe Schokolade und Schokolade!"
Gibt es zwar schon, aber diese Funktion ist um einiges schneller, als das was ich sonst so gesehen habe ![]()
Es kommt auch auf das Betriebssystem an.
Da hat Pawno irgendwie eine Macke, wenn du eine Version über Windows 7 hast...also (8/8.1/10) stell mal den Kompatibilitätsmodus auf Windows 7 ![]()
mfg. ![]()
Zeig uns mal was im Skript dazu steht...ggf auch die Variable größe erhöhen ![]()
Naja, das komma am ende des Querys ist falsch...und ich schätze mal der String ist zu klein oder nicht leer... ![]()
Was hat dies zu bedeuten
Nun, vielleicht das was der Error aussagt? ![]()
Also zum einen hast du Fehler in der Syntax von dem Query und zum anderen:
Table 'gamemode.gm_properties' doesn't exist
Tabelle 'gamemode.gm_properties' existiert nicht.
Also würde ich evtl so eine Tabelle mal erstellen... ![]()
TextDrawTextSize(BINCOdraw[2], 354.499389, 0.000000);
Die TextSize ist bei dem anklicken das entscheidende ![]()
und du hast hier als Y-Koordinate (Höhe) 0.0 angegeben...dein TextDraw hat aber nicht die Höhe von 0.0 ...sondern von mind ~7 schätz ich mal...
Setz es aber vorsichtshalber überall 10.0 ![]()
mfg. ![]()
sInfo[pid][money] = +betrag
Indem man das so schreibt:
sInfo[pid][money] += betrag;
Hier kurz was kleines, um zu checken ob ein SA:MP Server online oder offline ist.
Dieser Schnipsel wurde zwar mal (so ähnlich) gepostet, aber falsch, da keine UDP Verbindung geöffnet wurde und es deshalb nicht bei allen Server funktioniert ![]()
function server($ip, $port)
{
return (!@fsockopen("udp://".$ip, $port, $errno, $errstr)) ? "<font color='red'>offline</font>" : "<font color='green'>online</font>";
}
echo "Der Server ist: ".server("89.33.242.224", 7777);
PS: Die Ip habe ich als zufällig gewählt...den Server kann man eh nicht betreten.
mfg. ![]()
wäre es möglich bei einer fraktion auf denn skin denn namen dieser fraktion zu schreiben sagen wir Mal "Mafia" ?
Doch das ist möglich.
Man kann ein Objekt an den Spieler Attachen (unsichtbares Objekt) und auf dieses Objekt durch SetObjectMaterialText den Fratkionsnamen schreiben ![]()
Oder man gibt ihm direkt diese eine Funktion, die er sucht:
SetPlayerSpecialAction(playerid, SPECIAL_ACTION_DRINK_BEER);
Für andere Actions: https://wiki.sa-mp.com/wiki/SpecialActions
Dadurch bekommt er automatisch eine Bierflasche und wird automatisch betrunken ![]()
mfg. ![]()
Es gibt seit 0.3.7 auch diesen Style.
Du musst deine Includes updaten und auch die richtige Pawno.exe öffnen ![]()
Ich meine da ich ein wenig mehr Übersicht habe die ganzen Objekte in ein Filterscript packen und diese dann per Hauptscript abrufen lassen und dort auch benutzen lassen.
...dafür musst du das doch nicht extra in ein Filterscript packen, mach es doch einfach in eine Funktion und pack die Funktion (z.B. LoadObjects()) in ein Include...
Wenn du es unbedingt mit einem Filterscript machen willst, kannst du die objektids aber auch an dein GameMode übergeben:
//Im Filterscript:
public OnFilterscriptInit()
{
new lspd = CreateObject(...);
new tor = CreateObject(...);
//Hier alle deine anderen Objekte
//Und unten dann:
CallRemoteFunction("Init_Objects","dd",lspd,tor);
}
//und dann im Gamemode:
new lspd,tor; //Oben im Skript
forward Init_Objects(a,b);
public Init_Objects(a,b)
{
lspd = a;
tor = b;
return 1;
}
Aber davon rate ich dir ab!
Erstelle einfach eine seperate Funktion und mach es als Include ![]()
Du musst das mit nem Plugin von Y_Less machen.
Quatsch ![]()
Und wir mache ich dass dann?
Was genau willst du denn machen?
Das Filterscript laden, dafür musst du es einfach in die server.cfg eintragen ![]()