So zum Beispiel:
ocmd:fhelp(playerid,params[])
{
new string[512];
format(string,sizeof(string),""COLO" FraktionsBefehle:\n");
switch(SpielerInfo[playerid][pFraktion])
{
case 1:
{
format(string,sizeof(string),"%s/befehl 1\n", string);
format(string,sizeof(string),"%s/befehl 2\n", string);
format(string,sizeof(string),"%s/befehl 3\n", string);
}
case 2:
{
format(string,sizeof(string),"%s/befehl x\n", string);
format(string,sizeof(string),"%s/befehl y\n", string);
format(string,sizeof(string),"%s/befehl z\n", string);
}
}
ShowPlayerDialog(playerid,DIALOG_FHELP,DIALOG_STYLE_MSGBOX,""COLO"Fraktionshilfe",string,"OK","");
return 1;
}
Beiträge von Jeffry
-
-
Was willst du denn überhaupt machen? Dem Code kann ich gar nichts von deinem Vorhaben entnehmen.
-
Ändere hier mal
format(file,sizeof(file),"Accounts/%s.ini", Name);
zu:
format(file,sizeof(file),"Accounts/%s.ini", Name);
if(fexist(file)) gPlayerAccount[playerid] = 1;
else gPlayerAccount[playerid] = 0;Siehe auch meinen Post oben, da hab ich noch was editiert.
-
Dann zeig mal den Teil der dir die beiden Dialoge (Login oder Register) anzeigt, steht wahrscheinlich bei OnPlayerConnect.
EDIT:
SetPlayerFightingStyle(playerid, dini_Int(string2, "FightingStyle"));
SpawnChange[playerid] = dini_Int(string2, "SpawnChange");
WantedLevel[playerid] = dini_Int(string2, "WantedLevel");
WantedLevel[playerid] = dini_Int(string2, "WantedPoints");
OfflineFlucht[playerid] = dini_Int(string2, "Offflucht");
Knast[playerid] = dini_Int(string2, "Knast");
KnastTime[playerid] = dini_Int(string2, "KnastTime");Die zwei Zeilen vom alten System und die zwei Zeilen drunter kannst du löschen.
-
ocmd:wanted(playerid,params[])
{
new string[128], pID, wantedlevel,reason[64];
if(sscanf(params, "ids", pID, wantedlevel,reason))return SendClientMessage(playerid, Rot, "Benutze: /wanted [ID] [Wanteds] [Grund]");
if(IsPlayerConnected(pID))
{
if(!IsPlayerNPC(pID))
{
if(GetWantedLevel(pID)+wantedlevel > 69) return SendClientMessage(playerid, Rot,"Nicht mehr als 69 möglich.");
SetWantedLevel(pID,GetWantedLevel(pID)+wantedlevel);
format(string,sizeof(string),"<<Gesuchter:%s Wantedpunkte: %d Gesamt: %d Reporter: %s Grund:%s>>",GetName(pID),wantedlevel,GetWantedLevel(pID),GetName(playerid),reason);
SendClientMessageToAll(Rot,string);
UpdateWantedDraw(pID);
return 1;
}
else return SendClientMessage(playerid,Rot,"Du kannst einem NPC keine Wanteds geben.");
}
else return SendClientMessage(playerid,Rot,"Spieler ist nicht connected.");
} -
Da ist es doch sogar schon drin. Füge einfach noch beim Login das hier unten hinzu (bei Sachen werden gegeben):
UpdateWantedDraw(playerid); -
Nach dem gleichen Prinzip wie du auch die Kills oder das Geld des Spielers speicherst und lädst.
Wenn du nicht weißt wie, poste bitte den LoginPlayer und dein SavePlayer. -
Es geht darum, sobald ich mich einlogge muss ich mich neu registrieren ..
Wie meinst du das?
Du loggst dich ein im Login Dialog, und danach kommt der Dialog zum registrieren? Oder wie?Außerdem hast du da bei OnPlayerLogin immer noch die zwei Systeme durcheinander.
Hier man den Teil verbessert, den du gepostet hast (so wie es aussieht willst du ja dini verwenden):
Function OnPlayerLogin(playerid,password[])
{
new string2[128];
new playername2[MAX_PLAYER_NAME];
GetPlayerName(playerid, playername2, sizeof(playername2));
format(string2, sizeof(string2), "/Accounts/%s.ini", playername2);
new File: UserFile = fopen(string2, io_read);
if ( UserFile )
{
new PassData[256];
new keytmp[256], valtmp[256];
valtmp = dini_Get(string2, "Key");
strmid(PlayerInfo[playerid][pKey], valtmp, 0, strlen(valtmp)-1, 255);
if(strcmp(PlayerInfo[playerid][pKey],password, true ) == 0 )
{
PlayerInfo[playerid][pLevel] = dini_Int(string2, "Level");
PlayerInfo[playerid][pAdmin] = dini_Int(string2, "AdminLevel");
//usw... -
ocmd:makeadmin(playerid,params[])
{
if(!isAdmin(playerid,3))return SendClientMessage(playerid,COLOR_RED,"** Du kannst diesen Befehl nicht ausführen. **");
new pID,a_level;
if(sscanf(params,"ui",pID,a_level))return SendClientMessage(playerid,COLOR_GREY,"** Benutze: /setadmin [ID/NAME] [Adminrank] **");
if(!IsPlayerConnected(pID))return SendClientMessage(playerid,COLOR_GREY,"** Dieser Spieler ist nicht auf dem Server! **");
new str[145];
format(str, sizeof(str), "Dein Adminrang wurde von %s auf %s geändert.", GetRankName(sInfo[pID][alevel]), GetRankName(a_level));
SendClientMessage(pID,COLOR_RED,str);
format(str, sizeof(str), "Du hast den Adminrang von %s auf %s geändert.", GetRankName(sInfo[pID][alevel]), GetRankName(a_level));
SendClientMessage(playerid,COLOR_RED,str);
sInfo[pID][alevel]=a_level;
savePlayer(pID);
return 1;
}stock GetRankName(rank)
{
new name[24];
switch(rank)
{
case 0: name = "Spieler";
case 1: name = "Moderator";
case 2: name = "Admin";
case 3: name = "Owner";
}
return name;
}Sollte so passen.
Jumpin: Dann sollte es aber mit den Parametern gehen, oder?
-
Wie sieht denn dein Befehl mit der neuen Abfrage jetzt aus? Möglicherweise passt die nicht ganz.
Ändere zuvor mal die Abfrage zu
stock IsAPlayerCar(vehicleid)
{
for(new i=0;i<MAX_CARS;i++)
{
if(vehicleid == CarInfo[i][c_ID])
{
return true;
}
}
return false;
} -
Ändere die 9 hinten zu 15.
-
if(dialogid == DIALOG_UEBERWEISEN_PLAYER)
{
if(response == 0)
{
SendClientMessage(playerid,Grau,"Du hast die Überweisung abgebrochen!");
return 1;
}
if(response == 1)
{
new pID = ReturnPlayerID(inputtext);
if(pID == INVALID_PLAYER_ID)
{
ShowPlayerDialog(playerid,DIALOG_UEBERWEISEN_PLAYER,DIALOG_STYLE_INPUT,"Überweisen","Bitte gib den Namen des\nSpielers an, an den du das Geld\nÜberweisen möchtest.","Fertig","Zurück");
return 1;
}
SetPVarInt(playerid, "pID", pID);
ShowPlayerDialog(playerid,DIALOG_UEBERWEISEN_BETRAG,DIALOG_STYLE_INPUT,"Überweisen","Bitte gib den Betrag ein\n den du überweisen möchtest.","Fertig","Zurück");
return 1;
}
return 1;
}
if(dialogid == DIALOG_UEBERWEISEN_BETRAG)
{
if(response == 0)
{
SendClientMessage(playerid,Grau,"Du hast die Überweisung abgebrochen!");
return 1;
}
if(response == 1)
{
new string[145];
new pID = GetPVarInt(playerid, "pID");
if(PlayerInfo[playerid][pBar] < strval(inputtext) ) return SendClientMessage(playerid,Grau,"Du hast nicht genug Geld auf deiner Hand!");
PlayerInfo[playerid][pBank] -= strval(inputtext);
PlayerInfo[pID][pBank] += strval(inputtext);
format(string,sizeof(string),"Du hast $%d überwiesen.",strval(inputtext));
SendClientMessage(playerid,Grau,string);
return 1;
}
return 1;
}stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
{
new l_name[MAX_PLAYER_NAME];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
{
if(!strcmp(l_name,l_PlayerName, true)) return i;
}
}
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(GetPlayerName(i, l_name, MAX_PLAYER_NAME))
{
if(strfind(l_name,l_PlayerName,true)!=-1) return i;
}
}
return INVALID_PLAYER_ID;
}Ich habe es jetzt so weitergemacht wie du begonnen hast (erst Name, dann Betrag). Wenn du die Reihenfolge ändern willst, dann kannst du das ja machen.
Du kannst auch noch eine Abfrage einbauen, ob der Betrag auch über 0 ist, aber das bekommst du selbst hin hoffe ich. -
Dann musst du es so schreiben:
ocmd:wanted(playerid,params[])
{
new string[128], pID, wantedlevel,reason[64];
if(sscanf(params, "ids", pID, wantedlevel,reason))return SendClientMessage(playerid, Rot, "Benutze: /wanted [ID] [Wanteds] [Grund]");
if(IsPlayerConnected(pID))
{
if(!IsPlayerNPC(pID))
{
SetWantedLevel(pID,GetWantedLevel(pID)+wantedlevel);
if(GetWantedLevel(pID) > 69) SetWantedLevel(pID, 69);
format(string,sizeof(string),"<<Gesuchter:%s Wantedpunkte: %d Gesamt: %d Reporter: %s Grund:%s>>",GetName(pID),wantedlevel,GetWantedLevel(pID),GetName(playerid),reason);
SendClientMessageToAll(Rot,string);
UpdateWantedDraw(pID);
return 1;
}
else return SendClientMessage(playerid,Rot,"Du kannst einem NPC keine Wanteds geben.");
}
else return SendClientMessage(playerid,Rot,"Spieler ist nicht connected.");
} -
Die Parameter? Dann solltest du vielleicht doch lieber mal dein Plugin aktualisieren, wer weiß was du für eine alte Version verwendest, wenn da gar nichts geht.
-
Ist dann doch auch alles richtig. Du kannst ja nicht deinen eigenen Report annehmen.
Beim Melden setzt du pReportAktiv auf 1, und beim Annehmen fragst du ab ob es bereits 1 ist. Wenn du deine eigene Meldung annehmen willst geht das logischerweise nicht, da du ja die Meldung erstellt hast, sprich pReportAktiv (wie der Log auch sagt) ist 1.
EDIT:
[PeL]Smiley: Kein Problem, kommt bei jedem vor. -
Naja, wenn du es aufaddieren willst dann so:
SetWantedLevel(pID,GetWantedLevel(pID)+wantedlevel);Set = setzen, nicht addieren. Dafür musst du erst den alten Wert auslesen, und den neuen dazuaddieren.
-
Hm...ich hatte damit noch nie Probleme.
Dann wäre die einzige Möglichkeit die mir noch einfällt diese:
CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 200.0, Float:drawdistance = 0.0);
In CreateDynamicObject kannst du ja auch die streamdistance und die drawdistance ändern. Mach das mal für ein Objekt, und schau ob es dann geht, bei dem Objekt.
Wenn es auch nichts ändert, dann hast du vielleicht schon den maximalen Abstand. -
Welche der drei Meldungen kommt?
Was steht im Log, wenn du ein Ticket auswählst? -
Stimmt, im /wanted Befehl fehlt das Setzen.
UpdateWantedDraw(pID);
zu:
SetWantedLevel(pID,wantedlevel);
UpdateWantedDraw(pID); -
Bekomme nen Error..
Nutzt du eine alte Version? Denn laut http://forum.sa-mp.com/showthread.php?t=102865 gibt es diese Funktion.
Kannst das ja auch erst mal weg lassen.