Setze die ID in ein PVar und Frag die im neuen Dialog ab ![]()
Beiträge von Kaliber
-
-
Hier mal eine Variante:
Cif(listitem == 2) { new String[1500] = "ID\tName\tLohn"; for(new i=GetPlayerPoolSize(); i!=-1; i--) { if(!IsPlayerConnected(i) || SpielerInfo[i][Fraktion] != SpielerInfo[playerid][Fraktion]) continue; format(String, sizeof(String),"%s\n%d\t%s\t%d$",String,i,SpielerName(i),SpielerInfo[i][Lohn]); } ShowPlayerDialog(playerid, FrakEinstell3, DIALOG_STYLE_TABLIST_HEADERS,"Lohn",String,"Ok",""); }
und dann so:C
Alles anzeigenif(dialogid == FrakEinstell3) { if(!response) return 1; new pID,tmp[3]; tmp[0] = inputtext[0]; if('0' <= inputtext[1] <= '9') tmp[1] = inputtext[1]; if('0' <= inputtext[2] <= '9') tmp[2] = inputtext[2]; pID = strval(tmp); if(!IsPlayerConnected(pID)) return SCM(playerid,-1,"Nicht mehr on!"); //pID ist nun die ID die ausgewählt wurde.. } -
Hier schreibs mal so:
C
Alles anzeigenif(dialogid == FrakEinstell) { if(!response) return 1; new pID = strval(inputtext); if(!IsPlayerConnected(pID)) return SendClientMessage(playerid, Rot,"Spieler nicht verfügbar"); printf("%i PlayerID(Wird eingeladen)",pID); //Debug if(SpielerInfo[pID][Fraktion] >= 1) return SendClientMessage(playerid, Rot,"Spieler ist bereits in einer Fraktion"); new string[200]; switch(SpielerInfo[playerid][Fraktion]) { case 0: string ="Zivilisten"; case 1: string ="LSPD"; case 2: string ="Bundeswehr"; } format(string, sizeof(string),"Leader %s hat dich zum Mitglieder der Fraktion %s gemacht",SpielerName(playerid),string); SendClientMessage(pID, Gruen, string); format(string, sizeof(string),"Du hast %s zum Mitglied deiner Fraktion gemacht",SpielerName(pID)); SendClientMessage(playerid, Gruen, string); SpielerInfo[pID][Fraktion] = SpielerInfo[playerid][Fraktion]; return 1; }Wenns nicht aufgerufen wird...ist die dialogid falsch

-
Nun also static kannst du unter 2 Bedingungen verwenden.
1. Wenn etwas konstant ist und du in einer Funktion oder einem Callback verwendest. Dadurch wird nicht neuer Speicher wieder angefordert (so wie es bei new ist) sondern das bleibt statisch im Speicher.
Zum Beispiel kannst du da auch einen Zähler machen:
Wenn du jetzt zum 1. Mal test() aufrufst, wird dir 0 ausgegeben..beim 2. mal 1 usw...
2. Du kannst static auch nutzen um einen Scope (zugriffs beschränkung / Sichtbarkeit) zu erzeugen...
In Includes zum Beispiel solltest du static nehmen, damit keine Variablennamen überschneidung mit dem Gamemmode stattfindet.
Das ! bei einem String packed diesen. Das bedeutet wenn man z.B. new string[5]; macht werden 5 Cells reserviert. Eine Cell hat 4 Bytes, also macht das 5 * 4 Bytes = 20 Bytes die man hier reserviert.
Bei einem packed String ist das new string[5 char]; und hier verbraucht die Cell nur einen Byte und nicht 4.
Das kann man generell auch in Funktionen nutzen (außer z.B. format) und dann spart man einfach speicher.
Dieses ! sagt einfach nur, dass der String gepackt werden soll.Es gibt 2 Möglichkeiten Funktionen als public zu deklarieren.
Entweder über ein public oder über ein @.
Das ist das selbe nur weniger zu schreiben und das static sagt nur, dass das z.B. nicht von einer Include o.ä. aus aufgerufen werden kann...das verkleinert quasi (wie oben erwähnt) den Scope
Achso und das steht 2x da...weil das 1.mal vom Compiler als forward interpretiert wird
-
Mach es so:
new start,ende;
start = CreateObject(...); //Dein erstes Objekt
CreateObject(...); //Hier zwischen alle anderen Objekte
ende = CreateObject(...); //Dein letztes ObjektDann kannst du da so dadurch Loopen:
-
Hier auch eine Möglichkeit wie du es machen könntest:
C
Alles anzeigenpublic OnPlayerDisconnect(playerid, reason) { static const dc[3][] ={"(Timeout/Crash)","(Verlassen)","(Kick/Ban)"}; new Float:x, Float:y, Float:z, tmp[15 + MAX_PLAYER_NAME + 10], h,m,s; gettime(h,m,s),GetPlayerPos(playerid, x, y, z); GetPlayerName(playerid, tmp, MAX_PLAYER_NAME); format(tmp,sizeof(tmp),"%s\n%s\n%02d:%02d:%02d", tmp, dc[reason], h,m,s); SetTimerEx( !"@destroy_Logout",1000*30,0,!"ii", CreatePickup(1275, 23, x, y, z, GetPlayerVirtualWorld(playerid)), _:Create3DTextLabel(tmp, -1, x, y, z, 20.0, GetPlayerVirtualWorld(playerid), 1)); return 1; } static @destroy_Logout(a,Text3D:b);@destroy_Logout(a,Text3D:b) { DestroyPickup(a),Delete3DTextLabel(b); return 1; }Dann schenkst dir paar Variablen

-
Schreib es so:
CreatePickup(1275, 23, x, y, z, -1);
-
Das kannst du hier nachlesen: https://wiki.sa-mp.com/wiki/OnPlayerDisconnect
Und das ist ein Pickup (http://weedarr.wikidot.com/pickups) und da die ID 1275
https://wiki.sa-mp.com/wiki/CreatePickupund ein 3DTextLabel
https://wiki.sa-mp.com/wiki/Create3DTextLabelNa dann, viel Erfolg!

-
Und was genau tippst du ein?
Denn wenn du 12 eingibst, ehh dann ist das vollkommen korrekt...
-
Also mal ganz kurz:
new x[MAX_PLAYERS] = 0;
Das ist Unsinn...richtig wäre:new x[MAX_PLAYERS] = {0, ...};
Allerdings wird in Pawn direkt eine Variable mit 0 initialisiert...also von daher kann man sich das schenken und es reicht:
new x[MAX_PLAYERS];
Nun zu deinem Problem...lösch mal was du bisher gemacht hast und mach das so:
C
Alles anzeigenCMD:fahrrad(playerid) { static Mietfahrrad[MAX_PLAYERS]; if(IsPlayerInRangeOfPoint(playerid,30.0,1773.0819,-1896.1542,13.5516)) { if(Mietfahrrad[playerid] != 0)return SendClientMessage(playerid, 0xAA3333AA,"Du hast dir bereits ein Fahrrad gemietet!"); //782 if(GetPlayerScore(playerid) > 4)return SendClientMessage(playerid, 0xAA3333AA,"Du kannst dir kein Fahrrad mieten, da du über Level 4 bist!"); Mietfahrrad[playerid] = CreateVehicle(481, 1778.7252, -1896.2073, 12.8533, 267.3409,-1,-1,100); GivePlayerMoney(playerid, -300); } return true; } -
Hab hier gerade mal ein Include von mir gefunden, da haben bestimmt einige eine Verwendung für:
Neue Callbacks:
OnTrailerAttachedToVehicle(vehicleid, trailerid) wird aufgerufen, sobald ein Trailer an ein Auto gehangen wird

OnTrailerDettachedFromVehicle(vehicleid, trailerid) wird aufgerufen, sobald der Trailer wieder vom Auto entfernt wird

Joa ich denke damit ist genug gesagt

Download:
Source-Code: Pastebin
Direkter-Download: Strange Download Site (ist aber save)Bin gerne offen für Fragen & Kommentare

-
gefällt mir sehr.. hoffe auf ein REL :D?
Mal sehen

-
Es liegt daran, dass er am Anfang eine Variable new SpielerName; nennt....
Es allerdings eine Funktion mit diesem Namen bereits gibt..also ändere den Variablen Namen (bzw lösch diese) und nutze die Funktion

-
Ja...weil die Spalte password auch nicht existiert...
Schau doch mal was du verwendest..und was du für Spalten hast..ist doch nicht so schwer

-
Ja..und wie du siehst existiert nur die Spalte username...und nicht Name...

Also im Query entweder username verwenden..oder die Spalte zu Name umbenennen

-
Hier ein Bild von meiner Datenbank Accounts
...des ist bei mir nicht da..
-
Also ganz offensichtlich gibt es in deiner Tabelle keine Spalte mit dem Namen "Name"

-
Nein...beim ersten befindest du dich doch in der Virtuellen Welt 0.
Und bei der anderen in der Virtuellen Welt 1...
Also genau einmal rumdrehen:
C
Alles anzeigenelse if(IsPlayerInRangeOfPoint(playerid,4.0,811.4277,-1616.1138,13.5469) && GetPlayerVirtualWorld(playerid) == 0)//Burger Shot Eingang { SetPlayerPos(playerid,363.4249,-74.8294,1001.4486); SetPlayerInterior(playerid,10); SetPlayerVirtualWorld(playerid,1); } else if(IsPlayerInRangeOfPoint(playerid,4.0,363.4249,-74.8294,1001.4486) && GetPlayerVirtualWorld(playerid) == 1)//Burger Shot Ausgang { SetPlayerPos(playerid,811.4277,-1616.1138,13.5469); SetPlayerInterior(playerid,0); SetPlayerVirtualWorld(playerid,0); } -
...dann ist das nicht die richtige Virtuelle Welt..in der du dich befindest..
-
Du hast 2 Klammern am Ende...brauchst nur eine also eine ) entfernen
