Ist doch logisch warum es nicht funktioniert, mach die sscanf abfrage vor der abfrage ob der user gecufft ist den die variable aID ist auf 0 denn sie wird erst danach befüllt aber da die ID 0 nicht gecufft ist wird halt ausgegeben das er nicht gecufft ist
Beiträge von Nexor
-
-
Ja aber du willst doch von der Datenbank etwas
num_rows2 wird bei diesem Code IMMER 1 sein da wenn es nicht 1 wäre garnicht soweit kommen würde da es ganz am anfang die Abfrage if(num_rows==1) gibt. Du frägst einfach nur 2mal ab wieviele Datensätze die Tabelle accounts oder wie auch immer du sie genannt hast hab bzw ob das eingegebene Passwort mit dem aus der datenbank übereinstimmt. also anstelle von der zweiten cache_get_data einfach eine neue Abfrage bei der du erneut die Datenbank ansprichst. Es kann sein das ich mit dem völlig falsch liege ich würde es so machen und bin mir dabei auch ziemlich sicher das es stimmt
-
Du sprichst doch garkeine Datenbank an ? Du müsstest eine neue query erstellen mit der Abfrage die du haben willst bspw: SELECT * from SPAWNS
Aber warum hast du da überhaupt eine forschleife drin ? Du Lässt den Spieler dann an jedem Spawn spawnen und am letzen in der Datenbank bleibt er dann -
new Float:FPosX,Float:FPosY,Float:FPosZ,Float:FPosRT,int,vir;
new num_fields2,num_rows2;cache_get_data(num_rows2,num_fields2,dbhandle);
if(!num_rows2)return 1;
for(new i=0; i<num_rows2; i++)
{FPosX = cache_get_field_content_float(i,"SpawnX",dbhandle);
FPosY = cache_get_field_content_float(i,"SpawnY",dbhandle);
FPosZ = cache_get_field_content_float(i,"SpawnZ",dbhandle);
FPosRT = cache_get_field_content_float(i,"SpawnRT",dbhandle);
int = cache_get_field_content_int(i,"SpawnInt",dbhandle);
vir = cache_get_field_content_int(i,"SpawnVir",dbhandle);
SetSpawnInfo(playerid, 0, sInfo[playerid][SkinID], FPosX,FPosY,FPosZ,FPosRT, 0, 0, 0, 0, 0, 0 );
SetPlayerInterior(playerid,int);
SetPlayerVirtualWorld(playerid,vir);
SpawnPlayer(playerid);
}Schätze mal du musst erst num_rows2 befüllen bevor du abfragen kannst ob was drin is :b also habs dir mal an die richtige Stelle gesetzt
-
Du kannst einfach n include verwenden heißt irgendwas mit area die befehle sind getmainareaname und getareaname eindah mal googeln dann kannst abfragen SF lv ls und die einzelnen stadtteile
-
-
Hallo,
erstmal möchte ich mich bedanken, ich finde das Programm mega!
Aber noch eine kleine Bitte: Könntest du (zumindest in den Einstellungen einstellbar) das man wie beim Standartprogramm das man etwas bei der Suchfunktion sucht es komplett nach oben springt und von oben nach unten durchsucht, finde ich etwas praktischer. Wäre echt geil!Mit freundlichem Gruß
Moritz -
Vielen dank @Sean_Smith:
-
Ist samp for you auch offline ? Komme nichtmehr auf die Seite drauf und mein Keybinder (in verbindung mit der Datenbank von Sampforyou) funktioniert nichtmehr.
Könnte aber auch sein das es nur bei mir so ist....MFG
Moritz -
Okay dann bin ich jetzt echt Ratlos
wie gesagt hab mich damit schon länger nichtmehr beschäftigt
speicher einfach dort auch die Playerid rein so wie beim Admin und dann frag dort wo du den Namen brauchst einfach den Namen ab und fertig
-
hä?
Habe es jetzt so:
ocmd:timeban(playerid,params[])
{
if(SpielerInfo[playerid][pAlevel] >= 1)
{
new pID, aname[MAX_PLAYERS],spieler[MAX_PLAYERS],grund[128],dauer,string[128];
GetPlayerName(playerid,aname,sizeof(aname));
GetPlayerName(pID,spieler,sizeof(spieler));
if(sscanf(params,"uds[128]",pID,dauer,grund)) return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} /TimeBan [Name/ID][Dauer][Grund]");
//if(!IsPlayerConnected(pid)) return SendClientMessage(playerid,0xFF0000FF,"Kein Spieler mit der angegebenen ID ist Online");
{
format(string,sizeof(string),"[INFO]{00CDFF} %s %s {FFFFFF}hat {00CDFF}%s {FFFFFF}für {00CDFF}%d Minuten {FFFFFF}vom Server verbannt! Grund: {00CDFF}%s",GetPlayerAdminRankName(playerid),aname,spieler,dauer,grund);
SendClientMessageToAll(0xFF0000FF,string);
new zeitdauer = Now() + dauer*60;
GetPlayerName(pID,SpielerTimeBan[pID][pNameTBan],sizeof(SpielerTimeBan[pID][pNameTBan]));//ERRORS
SpielerTimeBan[pID][pvonAdmin] = playerid;
SpielerTimeBan[pID][pTBanDauer] = zeitdauer;
SpielerTimeBan[pID][pTBanGrund] = grund;
CreateTBanAccount(pID);
Kick(pID);
}
}
return 1;
}Und bekomme diese Errors:
[PHP]
error 001: expected token: "]", but found "-identifier-"
warning 215: expression has no effecterror 001:
expected token: ";", but found "]"error 029: invalid expression, assumed zerofatal
error 107: too many error messages on one line
[/PHP]versuchs mal so
new Name[MAX_PLAYER_NAME];
GetPlayerName(pID, Name, sizeof(Name));//ERRORS
format(SpielerTimeBan[pID][pNameTBan], sizeof(SpielerTimeBan[pID][pNameTBan]), "%s", Name); -
http://wiki.sa-mp.com/wiki/OnPlayerStateChange
Das wird dir sicherlich helfen. Einfach checken ob er in ein Fahrzeug als Fahrer einsteigt und dann abfragen ob das fahrzeig SAPD[0] ist wenn ja abfragen ob er Berechtigt ist dieses Fahrzeug zu fahren.
-
Dies entspricht die Zeile des ersten Warning:
CreateObject(8390, 1472.90002, -2540.19995, 31.9, 0, 0, 270);
http://wiki.sa-mp.com/wiki/CreateObject
schau dir mal diese Seite an und überprüf die "Argumente" sprich die Parameter ( die Sachen die in der Klammer setehen getrennt durch ein Komma ).
Der Fehler kommt daher das die Funktion CreateObject 8 Parameter benötigt (welche sind auf der Seite zu entnehmen) und du hast nur 7 angegeben.Mit freundlichem Gruß
MoritzJeffry: Alles klar ich verwende eh eigendlich nur stocks da ich keine Lust hab forwards zu machen.:D
-
Hey,
bekomme beim einfügen meiner Mapcodes viler solcher Warnings:C:\Users\olli962\Dropbox\Ausbildung\Script\gamemodes\ausbildung.pwn(299) : warning 202: number of arguments does not match definition
Code ?
-
also GetPlayerName(deineid,sizeof(indergrössevon),speichervariable);
nein genau nicht so. Les dir http://wiki.sa-mp.com/wiki/GetPlayerName durch.und hier das beispielscript dazu
public OnPlayerConnect(playerid)
{
// Get the name of the player that connected and display a join message to other players
new name[MAX_PLAYER_NAME], string[24+MAX_PLAYER_NAME];
GetPlayerName(playerid, name, sizeof(name));
format(string, sizeof(string), "%s has joined the server.", name);
SendClientMessageToAll(0xC4C4C4FF, string);
return 1;
}Hier kannst du sehen das es nicht id, sizeof, variable ist.
-
upsala
also zu Silbermond: ich weiß nicht wie rum die Parameter sind wie gesagt ich hab mich schon lange nichtmehr damit beschäftigt und wenn ichs mach dann mit meiner eingenen Funktion.
/edit:
hab mal nachgelesen
http://wiki.sa-mp.com/wiki/GetPlayerName(playerid, const name[], len)
also id, die variable in die es gespeichert werden soll, die länge der variable.Einen Fehler im Code finde ich so jetzt nicht. Also ich finde das die Zeile korrekt ist.
-
Was ist der Unterschied zwischen stock und Public? Bzw. wozu ist was gut?
Was sind denn jetzt genau Variabeln? (Bin mir nicht sicher ob ich die richtige Erklärung bekommen habe!)
Ich denke einen großen unterschied gibt es nicht. Kleine Unterschiede schon
Public:
- muss geforwarded werden
- wird auch wenn es nicht irgendwie aufgerufen wird auf Fehler überprüftstock:
- wird nur auf Fehler überprüft wenn man es auch irgendwo aufruftandere Unterschiede hab ich noch nicht festgestellt. Bin für neues gerne offen
/edit:
Du hattest doch bestimmt Mathe in der Schule, da wurde doch in einer Gleichung Werte wie "x" "y" eingesetzt bzw versucht Rechnerisch herauszufinden gelle ? Kleines beispiel.10 = x + 6 |-6
4 = xalso muss für die Variable "x" der Wert "4" eingesetzt dann steht ja da 10 = 4 + 6
(Mathenachhilfe kostet.... Nein Spaß)
Im Script läuft das ähnlich ab. Du kannst in eine Variable einen bestimmten Wert schreiben und den dann beliebig oft im Script einsetzen (falls global) kleines Beispiel.new alter = 17;
ocmd:test(playerid, params[])if(alter<18)
{
SendClientMessage(playerid, color, "Ich bin nicht volljährig");
}
else
{
SendClientMessage(playerid, color, "Ich bin volljährig");
}ocmd:alter(playerid, params[])
{
new string[128];
format(string,sizeof(string),"Ich bin %i Jahre alt/jung", alter);
SendClientMessage(playerid, color, string);
return 1;
}Jetzt kannst du oben die Variable "alter" einfach auf 20 machen und dann steht bei /test dort das du volljährig bist und bei /alter das du 20 bist.
Hoffe du hast es ein wenig verstanden. Bin nicht sehr gut im erklären, habs warscheinlich etwas umständlich gemacht...:D
-
Habe das andere auch so geändert nur noch ein Warning, steht unten!
ocmd:timeban(playerid,params[])
{
if(SpielerInfo[playerid][pAlevel] >= 1)
{
new pID, aname[MAX_PLAYERS],spieler[MAX_PLAYERS],grund[128],dauer,string[128];
if(sscanf(params,"uds[128]",pID,dauer,grund)) return SendClientMessage(playerid,0xFF0000FF,"[FEHLER]{FFFFFF} /Timeban [Name/ID][Dauer][Grund]");
//if(!IsPlayerConnected(pid)) return SendClientMessage(playerid,0xFF0000FF,"Kein Spieler mit der angegebenen ID ist Online");
{
format(string,sizeof(string),"[INFO]{00CDFF} %s %s {FFFFFF}hat {00CDFF}%s {FFFFFF}für {00CDFF}%d Minuten {FFFFFF}vom Server verbannt! Grund: {00CDFF}%s",GetPlayerAdminRankName(playerid),aname,spieler,dauer,grund);
SendClientMessageToAll(0xFF0000FF,string);
new zeitdauer = Now() + dauer*60;//warning: warning 204: symbol is assigned a value that is never used: "zeitdauer"
CreateTBanAccount(pID);
Kick(pID);
}
}
Alles klar, der Fehler heißt einfach das die variable "zeitdauer" nur erstellt evtl. befüllt wurde aber nirgends verwendet wird, das werden wir nun ändern. Du musst ja dein Enum auch noch befüllen.
GetPlayerName(pID,tBan[pID][pNameTBan],sizeof(tBan[pID][pNameTBan]));
tBan[pID][pvonAdmin] = playerid;
tBan[pID][pTBanDauer] = zeitdauer;
tBan[pID][pTBanGrund] = grund;
das einfach über "CreateTBanAccount(pID);
und unter new zeitdauer = Now() + dauer*60;Dürfte funktionieren
/edit: Du musst schauen was du abspeichern willst, du hast oben im enum "pvonAdmin" als integer deklariert also musst du die id von dem Admin abspeichern, bei pNameTBan allerdings den Namen also ein string. Ich würde es einheitlich machen und das immer mit den ids musst du aber wissen, wenn du es mit den ids machst musst du halt vorher noch den Namen herrausfinden fillst (z.b. bei printf()) da wolltest du das der Name von dem Admin dort steht (%s) allerdings ist die Variable die dafür eingesetzt wird wie oben erwähnt ein integer somit wird es da zu fehlern kommen. Ich würde dir Raten um das ständinge new pName[MAX_PLAYER_NAME] GetPlayerName etc. zu vermeiden (ist denk ich auch auf dauer ressourcen sparend) eine Funktion zu erstellen.
stock getPlayerName(playerid)
{
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid,pName,sizeof(pName));
return pName;
} -
war schon lange nichtmehr an nem script dran aber ich bin mir ziemlich sicher das man zu einem Enum noch eine variable hinzufügen muss
enum SpielerTimeBanned
{
pNameTBan[MAX_PLAYER_NAME],
pTBanIP,
pTBanGrund,
pvonAdmin,
pTBanDauer
}new tBan[MAX_PLAYERS][SpielerTimeBanned];
hätten wir geschafft und dann musst du unten das machen
printf("[S-INFO] %s wurde von %s für %d verbannt. Grund: %s",tBan[pID][pNameTBan], tBan[pID][pvonAdmin], tBan[pID][pTBanDauer], tBan[pID][pTBanGrund]); //UND HIER INSGESAMT 10 Warnings!
jetzt dürften schon weniger warnings kommen
-
immernoch zu haben ?