Sebastian wie schon auf meinem Testserver und im Breadfish ist die map sehr gut gelungen ich hoffe du hast die kleinigkeiten entfernt ^^.
Beiträge von IPrototypeI
-
-
Mal ganz ehrlich das deklarieren von arrays ist unnötigste was es gibt das ist verschwendeter RAM
wenn es doch ganz einfach auch so geht
SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,9515,"bigboxtemp1","poshground_sfw",0);
Die Vorteile es so zu machen:
- Es wird Ram gespeichert
- Leichteres ersetzen der Beschaffenheit der Objekte dank der Replacefunktion von Pawno und anderen editoren.und für die ganz Schlauen unter euch, zum schnelleren ändern des Materials einer Objektgruppe. Das arbeiten von defines
#define objectid 9515
#define objectgroup "bigboxtemp1"
#define objecttxt "poshground_sfw"
#define objectcolor 0SetObjectMaterial(CreateObject(19378,1359.1500, -1766.9200, 12.4800,0.0000, 90.0000, 90.0000),0,objectid ,objectgroup ,objecttxt ,objectcolor);
so könnt ihr mit paar klicks die Testur oder die Farbe in sekunden ändern ist sowas nicht kuhl.
-
Hmm ja..., aber den ganzen script auf MySQL umzuschreiben, würde jetzt etwas dauern....
Hat sich bei dini wirklich nichts geändert?
An den meisten Inhalten von Includes verändert sich garnix so fern nicht ihrgend eine funktion von samp entfernt wurde oder diese mit addressen von samp
arbeitet. Daher musst sowas nie updaten oder nach erneuerungen suchen. -
oh shit,
mit dem inputtext is wohl irwas schief gelaufen xD
und zwar derbe...und das / schadet nicht. Wenn mans kpoiert und sich dann wundert, dass es nicht funktioniert, dann is es mir auch wayne
Aber ich würde auch niemandem empfehlen seine Cmds mit strtok zu machen.
Sachen wie dcmd und ocmd sind vielleicht langsamer, oder ressourcenfressender, und nichtmal das denke ich.
Aber sie sind 1000x einfacherstrok ist fast so schnell wie sscanf
und dcmd und ocmd , etc sind command prozessoren sind zwar langsamer als strok kann man jedoch nicht vergleichen, weil es hier um das splitten gehtxD aber trotzdem warm drüber über den Fehler " Das is zwar ned schön, aber ich denke sowas sollte man eh selbst hinkriegen ? "
-
du solltet auch den wert von narichten verändern
-
da wo du ihn einsteigen lässt ist ja meist eine for-schleife wo abgefragt wird ob der spieler in der fraktion ist dort fügst du die jeweiligen abfragen hinzu
Also insgesammt musst nu nur den Rang abfragen und natürlich das Fahrzeugmodelif(PlayerInfo[playerid][pRank] > 4 && GetVehicleModel(akuzaVehs[i]) == 541){
RemovePlayerFromVehicle(playerid);
return SendClientMessage(playerid,-1,"Du bist nicht Rang 4");
}
else if(PlayerInfo[playerid][pRank] > 5 && GetVehicleModel(akuzaVehs[i]) == 411){
.... -
also wenn du dies schon postest dann tu dies bitte richtig die fehlt das / für den jeweiligen command würde zwar so auch gehen, wenn man spawn in das eingabemenü eingibt,
aber nagut.
SpawnPlayer(strval(inputtext));geht auch nicht strval(inputtext) das OnPlayerCommandText nicht OnDialogResponse. Zu dem musst du die eingabe splitten mit strtok oder sscanf .
meist verwendet in jedem GFCodeif(!strcmp("/spawn", cmdtest)) { if(IsPlayerAdmin(playerid)) { new tmp[20],idx; tmp = strtok(cmdtext, idx); SpawnPlayer(strval(tmp)); } return 1; }
tmp = strtok(cmdtext, idx);
dann strval(tmp) jedoch hat man die möglichkeit bei jedem GF noch auf ReturnUser zurück zu greifen kommt jedoch auch nicht um die verwendung mit strtok rum -
Und wie Vergleich ich die?
Sorry ich kenn mich mit sowas nicht aus
Also es wurde ja schon gepostet
new Float:hp;
GetPlayerHealth (playerid, hp);
if (hp <= 20)
{
FreezePlayer (playerid);
}GetPlayerHealth gibt wie schon gesagt den Leben des spielers an einer variabel weiter also hier an hp. Da die Variabel eine Float sein muss ist es ja auch verständlich das
man das ganze auch demenstsprechend deklariert mit dem Keyword Float:, mann könnte jedoch auch den datentyp float: zuweißen ist jedoch nciht nötig und würde nur ein unbedeutenedes warning ausgeben beim compilen. Das momentane Leben wurde dann an die variabel hp weiter gegeben welche du hier auch nun vergleichen kannst.
die Operator < und = sollten bekannt sein in kombination wie hier bedeutet dies ist das leben kleiner oder gleich 20 so wird der spieler hier nur die nebenfunktion FreezePlayer
gefreezt. -
Wie müsste ich es den ändern das es funktioniert?
Habe ich doch geschrieben GetPlayerHealth returnt nix sondern übergibt den wert an eine deklarierte variabel als float.
Daher musst du diese vergleichen -
das liegt daran das GetPlayerHealth die die entsprechende hp des spielers zurück gibt sondern den wert an die deklarierte float welcher als zweites argument
eingetragen wurde. Hier health@ Undercut du weisst schon das hier hilfe gesucht wird und hier kein codeschnipsel , klein skript gepostet wurde daher lösch besser deinen beitrag
-
Guten Morgen,
ich habe ein größeres Problem mit meinem AdminchatDer Befehl:
ocmd:a(playerid,params[]){
new text[96],textconent[128],rang;
if(sscanf(params,"s",text)) return SendClientMessage(playerid,0xD30000FF,"Benutzung: (/a)dminchat [text].");
if(!IsPlayerAnAdmin(playerid,1)){
format(textconent,sizeof(textconent),"(a)dmin Report von %s [ID: %d] - Nachricht: %s",SpielerName(playerid),playerid,text);
}else{
format(textconent,sizeof(textconent),"%s %s: %s",rang,SpielerName(playerid),text);
}
SendClientMessage(playerid,0xD30000FF,textconent);
SendAdminChat(textconent,playerid);
return 1;
}Das Problem ist, sobald ich mich Admin mache, und "/a test" mache, das dann dort steht "(a)dmin Report von [Name] [ID: 0]: test", obwohl dort eig. stehen sollte "[Adminrang][Name]: test"
Meine PVar des Adminlevels
GetPVarInt(playerid,"Adminlevel")Und hier noch mein stock SendAdminChat
stock SendAdminChat(string[],playerid){
for(new i = 0;i < MAX_PLAYERS; i++){
if(!IsPlayerAnAdmin(playerid,1) && i != playerid){
SendClientMessage(i,0xB0AFB0FF,string);
}
}
return 1;
}Bitte um Hilfe,
Mit freundlichen Grüßen
AndyWalkersowas liegt eindeutig an deiner if Abfrage
if(!IsPlayerAnAdmin(playerid,1)){du prüfst hier bestimmt hab ob der Spieler das Adminlevel 1 hat zuzüglich dem ! Operator alles außer dem Adminlevel 1
dies bedeutet wenn du das Adminlevel 2 hast wird automatisch der erste string formatiert.daher änder diese mal ab
zu
if(GetPVarInt(playerid,"Adminlevel") != 0) -
Schöne Villa aber die Bilder wo die Villa grün oder pink/rot ist, sieht meiner Meinung nach schlecht aus,grau ist ganz okay
Ja das in Pink und grün war eigentlich nur zum spaß ich wollte es eigentlich nicht grau haben sondern mehr ins weiße gehen lassen , jedoch geht dies nicht mit dem Object
also hellere Farben darzustellen auch nicht mit dem drüber hauen einer textur, es ist im großen und ganzem noch nicht fertig zumindestens die ganze inneneinrichtung
und ich werde weiter hin nach hellen texturen suchen da ich wie oben schon genannt die Farbe grau nicht wirklich passend finde,Könntest du mir bitte verraten welche ID die Wände und die Fenster haben? Ich suche schon seit 3-4 Monaten nach ihnen aber ich finde nichts
Btw: Sehr schön und sehr sauber gemappt, 10/10Ja klar Leo die wände haben die ID
19377
19454
19435
Diese Objekte sind von der Beschaffenheit (Textur) immer die selben nur haben diese eine andere größeund das Fenster die ID
19325Der Boden hat die ID
19379Jedoch solltest du MTA benutzen musst du natürlich diese neueren Objecte dort hinzufügen
und hier findest du auch die jeweiligen Objekte http://www.k-dst.de/
@ all ich bedanke mich für eure ganzen Bewertungen, die negativen Kritikpunkte werde ich mir natürlich auch zur Herzen nehmen und diese versuchen zu beseitigen. -
format(query, sizeof(query), "UPDATE `bizes` SET Besitzer='%s', Name='%s', Preis=%d, Lock=%d, Interior=%d, Kasse=%d WHERE bID='%d'", Biz[i][bizBesitzer], Biz[i][bizName], Biz[i][bizPreis], Biz[i][bizLock], Biz[i][bizInterior], Biz[i][bizKasse], i);
weisst du eigentlich warum man backtricks benutzt ?
ich geh mal davon aus das du dies nicht weißt und wann man einen wert mit einem einfachen anführungszeichen kennzeichnet beziehungsweise maskiertformat(query, sizeof(query), "UPDATE `bizes` SET `Besitzer`='%s', `Name`='%s', `Preis`=%d, `Lock`= %d, `Interior`= %d, `Kasse`= %d WHERE `bID` = %d",
Biz[i][bizBesitzer],
Biz[i][bizName],
Biz[i][bizPreis],
Biz[i][bizLock],
Biz[i][bizInterior],
Biz[i][bizKasse],
i);und zwar backtricks verwendet man damit mysql nicht mit den tabellen namen durcheinander kommt da es auch dort Keywords gibt ( Wörter die von MySQL reserviert sind wie
WHERE, SELECT, UPDATE...). Wo ist den dann hier der Fehler tja das liegt an LOCK damit kann man tabellen sperren.Daher benutzt man bei den Spalten oder tabellennamen immer die backtricks. Nun wann benutzt man die einfachen Anführungszeichen ?
Nun diese benutzt man wenn man string benutzt besser gesagt den platzhalter sonst sind diese nicht nötig ^^. Hier geht es auch wieder darum das MySQL nicht durcheinander
kommt mit Anweisungen die von dir natürlich nicht gewollt sind. Beispiel: wenn ich auf deinen Server mit dem namen SELECT betretten würde und du benutzt die einfachen Anführungszeichen nicht bei dem Platzhalter (%s) oder was ich noch vergessen habe das diese auch nicht als spaltennamen angesehen werden. -
Es ist nur, wenn man das 'deagle' macht, bei anderen ist das nicht O.o
Das kommt von der string überladung du kannst auch rein schreiben duhanswurst da würde der server auch crashen.
wie schon geschrieben und auch nochmal oben geschrieben kommt dies durch eine string überladungdcmd_sirene(playerid,params[])
{
new status[4];
if(sscanf(params,"s",status)) { return SendClientMessage(playerid,0xFF0000,"Benutzung: /sirene [an/aus]"); }
if(!IsACop(playerid))
{
SendClientMessage(playerid, COLOR_GRAD1, "Du bist kein Cop!");
return 1;
}das ist der übeltäter status[4] dieses problem hat man jedoch beim sscanf plugin nicht mehr da man hier auch die länge angibt also s[4]
-
Ja dann nimm den Befehl /sirene raus.
Oder schreib ihn um bzw. Klammer die
"deagle Bedingung" aus.
mfg.sowas braucht man nicht machen , dies kommt von einer string überladung entweder du bearbeitest den command oder erhöhst den string ganz einfach
-
Ich hab das ganze auch noch in anderen Farben
-
Ganz einfach das was du hier auch gemacht hast völliger rotzt ist
stock mysql_CheckAccount(playerid)
{
new query[64],Namei[MAX_PLAYERS_NAME];
GetPlayerName(playerid,Namei,sizeof(Namei));
mysql_format(verbindung,query,"SELECT `Passwort` FROM `accounts` WHERE `Name` = '%e'",Namei);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows()){
}else{
}
mysql_free_result();
}ich hoffe mal du weißt für was mysql_store_result(); und mysql_free_result(); da sind mit mysql_store_result(); speicherst du so gesehen daten zwischen, welche du dan über weitere
funktionen von dem jeweiligen mysqlplugin abrufen kannst und mysql_store_result(); löscht diese zwischen gespeicherten daten.
warum nur das passwort und nicht dieses * ? Der Stern steht für alles aus der reihe ist das in dem fall notwendig ? Nein ist es nicht du willst nur wissen ob der account
existiert da reicht ein element raus zu greifen und ist auch die schnellste variante.
warum hier gleich mysql_num_rows in so eine if abfrage rein packen muss ich da nicht dieses count verwenden? Auch hier ist die Antwort nein ganz einfach da
mysql_num_rows(); die anzahl an Reihen die du über den sqlbefehl abgesendet hast ausspuckt. Beispiel du hast 3 mal den selben account in der daten bank was spuckt
mysql_num_rows(); wohl aus ganz einfach 3 und dir reicht ja ein ergebnis daher geht dies auch klar. Du kannst das jedoch auch mit der anzahl begrenzen mit dem schönen LIMIT.
Daher kannst du dein SQL-Befehl ein bissle tunenmysql_format(verbindung,query,"SELECT `Passwort` FROM `accounts` WHERE `Name` = '%e' LIMIT 1",Namei);
nun wird er dir falls ein Ergebnis oder mehrere Ergenisse vorhanden sind nur eins ausspucken, besser gesagt nur 1 auslesen.
Ich hoffe mal ich konnte damit ein bissle klarheit schaffen
-
stock mysql_GetFloat(Table[], Field[], Where[], Is[]) { new query[128], Float:sqlfloat; mysql_real_escape_string(Table, Table); mysql_real_escape_string(Field, Field); mysql_real_escape_string(Where, Where); mysql_real_escape_string(Is, Is); format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is); mysql_query(query); mysql_store_result(); mysql_fetch_float(sqlfloat); mysql_free_result(); /*HIER IST ES HIIIEERR*/return sqlfloat; }
das liegt an wieder geben einer Float
stock mysql_GetFloat(Table[], Field[], Where[], Is[])
{
new query[128], Float:sqlfloat;
mysql_real_escape_string(Table, Table);
mysql_real_escape_string(Field, Field);
mysql_real_escape_string(Where, Where);
mysql_real_escape_string(Is, Is);
format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
mysql_query(query);
mysql_store_result();
mysql_fetch_float(sqlfloat);
mysql_free_result();
return _:sqlfloat;
}oder
forward Float:mysql_GetFloat(Table[], Field[], Where[], Is[]);
stock Float:mysql_GetFloat(Table[], Field[], Where[], Is[])
{
new query[128], Float:sqlfloat;
mysql_real_escape_string(Table, Table);
mysql_real_escape_string(Field, Field);
mysql_real_escape_string(Where, Where);
mysql_real_escape_string(Is, Is);
format(query, 128, "SELECT `%s` FROM `%s` WHERE `%s` = '%s'", Field, Table, Where, Is);
mysql_query(query);
mysql_store_result();
mysql_fetch_float(sqlfloat);
mysql_free_result();
return sqlfloat;
}die wahl liegt bei dir welche variante du verwenden willst das problem lag wie schon oben genannt an dem zurück geben eines strings
-
von mir bekommst 9/10
leider ein Punkt weniger weil meiner meinung nach ist die fassade zu eintönig
aber echt respekt für die detailsJa da hast du recht ich selbst muss sagen das meine fassade nicht wirklich das ware ist die Texture wurde zwar geändert dennoch ist das immer noch ziemlich dunkel .
Naja ich denk sowieso daran eine andere textur zu finden ein helle wo ins weiße übergeht ist jedoch schwer sowas ähnliches zu finden, welches noch die struktur einer
Wand/Fassade beinhaltet .naja trotzdem easy doing per define
#define objectid 10938
#define objectgroup "cj_barb"
#define objecttxt "whiteceil_int"
#define objectcolor 0SetDynamicObjectMaterial(CreateDynamicObject(19391, 1477.92, 748.17, 13.76, 0.00, 0.00, 90.00),0, objectid, objectgroup, objecttxt, objectcolor);
ich wollte mal den aussschnitt hier posten da es erstmal schneller geht die textur zu ersetzen da man replace benutzen kan in pawno
und auch noch ressourcenfreundlicher da man keine unnötige arrays oder variabeln deklarieren muss -
Enum und PVars kann man nicht vergleichen würde ich sagen.
PVars benutzen den Arbeitsspeicher, und die normalen Variablen (in eurem Sinne die "Enums") benutzen die CPU.
Das heißt man kann konkret ohne Daten nicht sagen, was besser ist.
Das kommt auf den jeweiligen Server an.Korrigiert mich wenn ich da falsch liege.
Ich hoffe dir ist klar das beides CPU und Memory in anspruch nimmt alles variabeln werden Temporär gespeichert und nehmen Memory ein.
Jedoch haben PVars einen dynamischen Speicher und ....
mehr hier
http://wiki.sa-mp.com/wiki/Per-player_variable_systemjetzt ist ja die Frage CPU für was ist dieser da, der verarbeitet eure Binärcodes/Hexdezimale und macht dies was ein PC eigentlich macht rechnen , vergleichen, sortieren und natürlich auch speichern lassen im Memory oder elemente in der Register ablegen. Im großen und ganzen macht er das was er an Opcodes bekommt.