Beiträge von IPrototypeI
-
-
%0.2f?
Achso ja das mit dem hab ich gemekrt aber das mit+
%0.2f wusste ich nicht...
%f ist der Format-Operator für Ausgaben (Platzhalter) für eine Float %0.2f bedeutet das nur 2 Stellen hinter dem Koma angezeigt werden. %0.3f wären 3 stellen nach dem komma
du hast auch die möglichkeit bei normale Zahlen Plätze zu belben beispiel %02d der output wäre bei 2 02 oder bei %03d 002. -
weil der return wert von
GetVehicleHealth 1 ist. den wert der Lebens des Fahrzeuges gibt er an sein zweites argument zurück
daher wohl eher
new damage[24],Float:vH;
GetVehicleHealth(GetPlayerVehicleID(playerid),vH)
format(damage,24,"vHealth: %0.2f",vH); -
-
Funktioniert so nicht. Bekomme error das id undefiniert ist
IPrototypeI:
Bitte was ? Das versteh ich jetzt nicht ..
ganz einfach deine Verwendung des 2D( Zweidimensionalen) Arrays ist Falsch. Zu dem ist stock nur ein zusätzlichen tag das beeinflusst nicht den Namen einer Funktion du kannst stock auch bei variabeln benutzen es signalisiert nur das es um kompiler nicht beachtet werden soll, sofern es nicht genutzt ist. Man sieht es ja meinstes wenn man eine funktion im skript stehen hat ohne den tag stock das der warning beim kompilen kommt das die funktion nicht genutzt wird.sieh dir das beispiel an
Mysql Daten laden -
ok hat sich erledigt hab mal ein Filterscript rausgenommen jetzt gehts danke
Das brauchst du auch nicht rausnehmen nur neu kompilen. Da über die .amx gearbeitet wird. Der Server bezieht nix von incldues die du wahrscheinlich mit hochlädst.
Der ganze Code, welchen du benutzt aus den includes wird mit kompilt das ganze wird noch durch die pawn.exe umkonvertiert letztendlich hast du nur noch byte und Pcodes in der .amx. -
Du weißt auch was du benutzt das eine 2D Array und keine 1D Array mein Freund
zu dem wäre es eine Zeile
-
Ja, da dieser als Concat für die Datenbank und die Table wirkt. Der Query wird ja auch ausgeführt, allerdings mit einem leeren Result (es steht halt noch nix in der Table). Wenn ich das ganze per Query in php My Admin ausführe, funktionierts auch perfekt.
Der Punkt ist trotzdem der fehler
format(query,sizeof(query),"SELECT `%s` FROM `%s.User_Stats` WHERE `Name` = '%s'",statistic,mysqldb,pName);tabelle.spalte
nicht `tabelle`.`spalte`das ist falsch backticks werden benutzt damit mysql nicht die tabellennamen mit befehle durcheinander bringt
ich geh mal davon aus das du das ganze auch so bei phpmyadmin eingegeben hast mydatabase.User_Stats -
Hast du das ganze auch recompilt das steht ja schon da. Das betrifft auch filterskripts
-
Steht oben: Plugins: Incognito Streamer, mysql R20 threated, sscanf2, filemanager
Also wenn es kein ersichtlichen Fehler gibt so kannst du davon ausgehen das dan wahrscheinlich das ganze von einem plugin ausgeht.
Du hast paar möglichkeiten ich geh mal davon aus das es am mysql r7 plugin liegen wird da vorkurzem ein updates wieder gemacht wurde und auch eine crashquelle entfernt wurde oder du könntest auf das MySQL plugin von dem Dan. umschwenken , welches 4 mal schneller gegen das r20 von BlueG , welches von diesem Pain123 weiterentwickelt wird war.http://forum.sa-mp.com/showthread.php?t=429464
Es gibt schon die r25 version (musst du jedoch selbst kompilen)
-
Zum einen wissen wir nicht wie dein array
FrakInfo aufgebaut istzum zweiten wird zuletzt nix raus kommen da erstens dein string für solch eine datenmenge zu klein sein wird(obwohl ist grenzwertig).
und zum zweiten du ein fehler in deiner splitt reihenfolge hast besser gesagt es fehlt ein Zeichen >.Am besten machst du dich erstmal mit sscanf und mysql vertraut bevor du ihrgend eine copy paste scheiße zusammen schreibst
-
Wie kann ich mit Mysql und Sscanf alle Daten von den Spielern laden? Ich benutze das Plugin von Strickenkid (2.1)
wäre cool wenn jemand ein Beispiel schreiben könnte.
enum PlayerData {
pName[10]
Level,
bool:Geschlecht,
Float:X,
Float:Y,
Float:Z,
};
new PlayerInfo[MAX_PLAYERS][PlayerData];new Load_Query[100];
mysql_query("SELECT * FROM `accounts` WHERE Name = 'xFreeze' LIMIT 1",1,playerid,handle);
Beispiel zum auslesen von einem Eintrag
public OnMysqlQuery(resultid, spareid, MySQL:handle)
{
switch (resultid){
case 1:{
mysql_store_result(handle);
strdel(Load_Query,0,100);
mysql_fetch_row(Load_Query,"|",handle);
sscanf(Load_Query,"p<|>e<s[10]dlfff>",PlayerInfo[spareid]);
mysql_free_result(handle);
}
}
return 1;
}Beispiel zum auslesen von mehreren Enträgen
public OnMysqlQuery(resultid, spareid, MySQL:handle)
{
switch (resultid){
case 1:{
mysql_store_result(handle);
new i;
while(mysql_fetch_row(Load_Query,"|",handle)){
sscanf(Load_Query,"p<|>e<s[10]dlfff>",PlayerInfo[i]);
++i;
strdel(Load_Query,0,100);
}
mysql_free_result(handle);
}
}
return 1;
}Ich geh jedoch trotzdem mal davon aus das es nicht zwingend notwendig ist den string zu leeren bevor er sich den Datensatz zieht. Daher kannst du strdel auch weglassen.
der specifer p bewirkt das der string gesplittet wird wenn das Zeichen | im string kommt. e steht emulator und in dem code oben hat dies zur folge in was der stringabschnitt konvertiert wird und dank diesem specifer wird das ganze auch direkt zugeordnet solange die reihenfolge in der tabelle auch mit dem des enums übereinstimmt.
Sollte es sein das zum schluss nur quark raus kommt bei den floats als NaN was Not a Number bedeutet so hast du noch die möglichkeit den specifer e weg zu lassen und die abfolge nach den e in den größer/kleiner Zeichen zu übernehmen. das wäre folgt so p<|>s[10]dlfff. Dies hat jedoch den nachteil das du die jeweiligen Variabeln dahinter schreiben musst
sscanf(Load_Query,"p<|>s[10]dlfff",PlayerInfo[i][pName],PlayerInfo[i][Level],...); -
if(model==postbike[6]&&ispassenger==1)
wenn du willst das der spieler den checkpoint angezeigt bekommen will wenn er als fahrer einsteigt so änder dies auf 0
zu dem ist das abrufen der vehicleid sinnlos die wird automatisch an das callback weiter gegeben
if(vehicleid==postbike[6]&&ispassenger==0)
wenn du jedoch möchtest das der checkpoint angezeigt wird wenn der spieler eingestiegen ist so solltest du das eher über
OnPlayerStateChange machen da dieses Callback schon aufgerufen wird wenn der spiele drin der nähe des autos f , g drückt -
Hier 20 Minuten mit Photoshop
-
Warum funktioniert das Anhängen eines Fahrzeugs nicht? Bin nun seit
einer Stunde drann aber egal wie ich das Problem angehe, es funktioniert
einfach nicht...sollte so normal funktionieren was mir aufgefallen ist das du MAX_PLAYERS dafür benutzt ich weiß ja nicht an welchem auto du dich befindest sollte es eine höhere id hat als du auch womöglich MAX_PLAYERS definiert hast , das wäre ein grund warum es nicht geht oder das du nicht nah genug am auto ist daher den radius erhöhen.
new i, Float:Pos[3],veh= GetPlayerVehicleID(playerid);
for(; i < MAX_VEHICLES; ++i){
if(!IsValidVehicle(i)) continue;
GetVehiclePos(i,Pos[0],Pos[1],Pos[2]);
if(IsPlayerInRangeOfPoint(playerid,10.0,Pos[0],Pos[1],Pos[2]) && i != veh){
AttachTrailerToVehicle(i,veh);
break;
}
} -
Da ich aufn Internat bin teste ich es Freitag und melde mich evtl nochmal aber heisst es nicht
x++; anstatt ++x;
Nein es gibt zwei verschiedene Versionen der inkrementierung einmal Postfix(i++) und Präfix(++i). Der unterschied besteht das sie sich unterschiedlich inkrementieren.
so wird bei der Postfix version erst eine kopie erstellt und danach wird sie um 1 erhöht und bei der Präfix versionen genau andersrum. -
1. du musst da garnichts abfragen
2. x dient zur setzung der reihenfolge
Die listitems gehen ja von 0 - x beim anklicken sagen wir mal du hast 10 listitems
und du willst nun das listitem 0 anklicken und dahinter verbirgt sich das auto welches in deiner array MietCars an platz 49 istnun wie kommt man jetzt auf die 49 ?
Da kommt das formatieren des strings ins spiel , array und die extra variabel welche man in der if abfrage erhöhen lässt.
also die for-schleife geht die ganzen daten im array durch und findet 10 autos die nicht besetzt welche den platz 49 , 51, 52, 53, 60, 70, 71, 79, 91, 99
haben. Diese plätze werdne in dem array zwischen gespeichert an platz 1 - 10array[0] = 49;
array[1] = 51;
array[2] = 52;
array[3] = 60;
....du filterst somit die ids raus.
-
Nein, nur ich kann noch aussteigen.
/edit
Wenn du es mit deiner Variante mal testen willst dann hier: pa-1.dyndns.org:7799
Das hatte ich mal gemacht nur kannst du den spieler nicht sofort wieder zurück setzen ich weiß auch nicht warum das nicht geht so sollte es gehen
public OnPlayerExitVehicle(playerid, vehicleid)
{
SetPlayerPos(playerid,0.0,0.0,0.0);
PutPlayerInVehicle(playerid, vehicleid, 0);
return 1;
} -
HDIA_MIETE kann ein define sein
#define HDIA_MIETE 1200
so nun verbirgt sich hinter HDIA_MIETE der Wert 1200
erstellst du noch ein define mit dem selben wert
#define HDIA_SPAWNMSGG 1200
verbirgt sich auch hinter HDIA_SPAWNMSGG der Wert 1200
daher ist das hier das selbe
switch(beispiel){
case 1200:{ }
case 1200:{ }
}
switch(beispiel){
case HDIA_MIETE:{ }
case HDIA_SPAWNMSGG:{ }
}es muss ja nichtmal sein das es zwei defines sind es kann auch eins ein define sein und das andere in einem enum
enthalten sein wo die wert automatisch erhöht in der reihenfolgeenum {
HDIA_X = 1,
HDIA_Y,
HDIA_SPAWNMSGG,
};
#define HDIA_MIETE 3Nun verstanden
-
Hey, sry war fix am Handy getippt.Hast du evtl ein Beispiel?
du erstellst ein array in dem du die werte speicherst 1d arraydann brauchst du noch eine extra variabel die du natürlich außerhalb der for-schleife erstellst
new x, i;
for(; i < sizeof(MietCars); ++i){diese variabel hier x lässt du nach der if abfrage sollte diese zutreffen incrementieren.
++xweil somit legst du die reihenfolge fest und der array weisst du noch den wert von der variabel i zu.
array[x] = i;
weil nun hast du die Möglichkeit mit listitems zu arbeiten bei OnDialogResponse
MietCars[array[listitem]][Price]= 100;wenn du auf den ersten Eintrag im Fialog klickst, wird davon der erste zugewiesene Wert genommen von
der Rangabfolge, der nicht gemieteten Fahrzeugen.