@FerienFreak: Du musst das Ganze in einem String formatieren..
ocmd:score(playerid,params[]) {
new heading[32],text[64];
format(heading,sizeof(heading),"Score von %s",Name(playerid)), format(text,sizeof(text),"Dein Score: %s",GetPVarInt(playerid,"Respektpunkte"));
return ShowPlayerDialog(playerid, DIALOG_SCORE, DIALOG_STYLE_MSGBOX, heading, text, "Close", "");
}
Beiträge von ErikSon
-
-
CreepyFreaky: Mach mal so:
#include <a_samp>
#include <a_mysql>
#include <a_http>
#include <streamer>
#include <sscanf2>
#include <md5>
#include <zcmd>
#include <AC> -
Dann benutze mal 'strtok'..
if(strcmp(strget(cmdtext,0), "/heal", true) == 0)
{
if(!IstSpielerAdmin(playerid, 1)) return SendClientMessage(playerid, RED, "SERVER: Du bist kein Admin!");
new idx,tmp[64], ziel;
tmp = strtok(cmdtext,idx); ziel = strval(tmp);
if(!IsPlayerConnected(ziel)) return SendClientMessage(playerid, RED, "SERVER: Dieser Spieler ist nicht mit dem Server verbunden!");
if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid, RED, "SERVER: Benutze: /heal ID");
new zielname[16],playername[16],msg[128],Float:health;
GetPlayerHealth(ziel,health);
if(health >= 100)return SendClientMessage(playerid, RED, "SERVER: Dieser Spieler muss nicht geheilt werden!");
SetPlayerHealth(ziel, 100);
GetPlayerName(playerid, playername, sizeof(playername)), GetPlayerName(ziel, zielname, sizeof(zielname));
format(msg, sizeof(msg), "SERVER: Du hast %s geheilt!", zielname),SendClientMessage(playerid, RED, msg);
format(msg, sizeof(msg), "SERVER: %s hat dich geheilt!", playername);
return SendClientMessage(ziel, RED, msg);
}strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
Sollte so richtig sein, verwende selber nie strtok, jedoch ist es anscheinend einfach..//Edit: Sorry, vergessen.. Bearbeitet! @Post unten
-
Nein, das brauchst du dort nicht machen..
Du brichst den Befehl per 'return' doch eh ab ( wenn es nicht den Anforderungen entspricht ), also wozu das 'else'?//Edit:
Trotzdem sind die Klammern ein Fehler, da sie am falschen Ort sind!
Benutzt du vlt einen Commandprozessor? ( zum Beispiel 'OCMD' ) -
Hey,
versuche es mal so:
if(strcmp(strget(cmdtext,0), "/heal", true) == 0)
{
if(!IstSpielerAdmin(playerid, 1)) return SendClientMessage(playerid, RED, "SERVER: Du bist kein Admin!");
new ziel = strval(strget(cmdtext,1));
if(!IsPlayerConnected(ziel)) return SendClientMessage(playerid, RED, "SERVER: Dieser Spieler ist nicht mit dem Server verbunden!");
if(!strlen(strget(cmdtext,1))) return SendClientMessage(playerid, RED, "SERVER: Benutze: /heal ID");
new zielname[512],playername[512],msg[128],Float:health;
GetPlayerHealth(ziel,health);
if(health >= 100)return SendClientMessage(playerid, RED, "SERVER: Dieser Spieler muss nicht geheilt werden!");
SetPlayerHealth(ziel, 100);
GetPlayerName(playerid, playername, sizeof(playername)), GetPlayerName(ziel, zielname, sizeof(zielname));
format(msg, sizeof(msg), "SERVER: Du hast %s geheilt!", zielname),SendClientMessage(playerid, RED, msg);
format(msg, sizeof(msg), "SERVER: %s hat dich geheilt!", playername);
return SendClientMessage(ziel, RED, msg);
}
Du hast ziemlich viele unnötige Klammern gemacht!
Wenn du etwas returnst, darfst du hinterher keine Klammer auf mehr machen ( direkt danach )
Beispiel:
if(!IsPlayerConnected(ziel)) return SendClientMessage(playerid, RED, "SERVER: Dieser Spieler ist nicht mit dem Server verbunden!");
{
Das ergibt keinen Sinn! -
Lässt du das Ganze auch anzeigen? -> Mit 'TextDrawShowForPlayer' bzw 'PlayerTextDrawShowForPlayer'
-
Hey,
versuche es mal so:
if(!isAdmin(playerid,3)) return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
new pID, weapon, ammunation;
if(sscanf(params,"udd",pID, weapon, ammunation))return SendClientMessage(playerid,ROT,"Benutze /givegun [playerid] [waffen ID] [munition]");
if(weapon < 0 || weapon > 54)return SendClientMessage(playerid,ROT, "Error: Bitte gib eine gültige Waffen-ID an (0-54)!");
GivePlayerWeapon(pID, weapon, ammunation);
new string[128],gunname[32];
GetWeaponName(weapon,gunname,sizeof(gunname)); //Waffenname auslesen
format(string, sizeof(string),"Du hast %s eine %s gegeben mit %i Muni",getPlayerName(pID), gunname, ammunation);
SendClientMessage(playerid, ROT, string);
format(string, sizeof(string),"Du hast von %s eine %s bekommen mit %i Muni",getPlayerName(playerid), gunname, ammunation);
return SendClientMessage(pID, ROT, string);Du hast einen Integer als String ausgegeben.. -> Deswegen stand dort nichts.
Außerdem musst du den Waffennamen auslesen! -
PStar: Warum speicherst du es unter OnPlayerDisconnect und in der Funktion "SpielerSpeichern"?
Einmal reicht doch vollkommenstock SpielerSpeichern(playerid){
new name[MAX_PLAYER_NAME],Spielerdatei[64], datum[20], string[100],jahr, monat, tag, stunde, minute, sekunde;
GetPlayerName(playerid,name,sizeof(name));
format(Spielerdatei,sizeof(Spielerdatei),"/Accounts/%s.txt",name);
if(GetPVarInt(playerid, "loggedin")){
dini_IntSet(Spielerdatei,"Interior",GetPVarInt(playerid,"Interior"));
dini_IntSet(Spielerdatei,"VWorld",GetPVarInt(playerid,"VWorld"));
//Alles speichern
return 1;
}
return 1;
}public OnPlayerDisconnect(playerid, reason){
SpielerSpeichern(playerid);
return 1;
} -
Ist klar, dass 0 ausgegeben wird. .. Du musst 'h_id' ausgeben, nicht Haus [..][..]
-
Mach anstatt "Haus [h_id][haus_vw]" 》 "h_id"
-
1. Ja, genau..
2. Nein.. So
ocmd:betreten(playerid)
{
new h_id = NearestHaus (playerid);
if(h_id == -1)return SendClientMessage(playerid,-1,"Du bist nicht in der Nähe eines Hauses!");
if(Haus[h_id][haus_lock] == 1)return SendClientMessage(playerid,-1,"Das Haus ist verschlossen!");SetPlayerInterior(playerid,Haus[h_id][haus_int]);
SetPlayerVirtualWorld(playerid,Haus[h_id][haus_vw]);
SetPVarInt(playerid,"ImHaus",h_id);
SendClientMessage(playerid,-1,"Du hast das Haus betreten.");
return SetPlayerPos(playerid,Haus[h_id][haus_xi],Haus[h_id][haus_yi],Haus[h_id][haus_zi]);
}#Handy
-
Mach mal das SetPlayerPos vor dem 'return ...'
Die Abfrage bei der stock-Funktion gibt das näheste Haus (die ID) zurück. .
Bei dem Befehl 'betreten' kannst du 'NearestHaus' auch einer Integer-Variable zuteilen, dann frisst das auch noch weniger Ressourcen. Dann musst du aber auch überall anstatt 'NearestHaus (playerid)' 》beispielsweise 'h_id' machen... -
Wenn es erst in 1-2 Jahren fertig ist, hat eh niemand mehr Bock drauf...
Und ist Lebenslänglich nicht nur 15 Jahre?
-
Kann es sein, dass du unter "OnPlayerSpawn" einige Objekte löscht? -> Ja, werden
Bei OnplayerSpawn steht nix davon nur das halt was ich Weg Gemappt habe
Also stehts ja doch dort? ..RemoveBuildingForPlayer(playerid, 5858, 1214.1484, -913.4453, 43.0547, 0.25);
RemoveBuildingForPlayer(playerid, 1522, 1199.9688, -917.6406, 42.0234, 0.25);
RemoveBuildingForPlayer(playerid, 6010, 1214.1484, -913.4453, 43.0547, 0.25);//Fahrschule
RemoveBuildingForPlayer(playerid, 11372, -2076.4375, -107.9297, 36.9688, 0.25);
RemoveBuildingForPlayer(playerid, 11014, -2076.4375, -107.9297, 36.9688, 0.25);Das könnte das Problem sein, da Objekte, die bereits bei dem Spieler nicht mehr existieren, trotzdem versucht werden, zu entfernen, was dann zu einem "Standbild" führt..
Also, der Spieler connected -> wird gespawnt | Objekte werden entfernt. -> Spieler stirbt -> Wird gespawnt | Objekte werden erneut versucht zu entfernen -> Spieler stirbt -> Wird gespawnt | Objekte werden erneut versucht zu entfernen -> Crash / "Standbild"
-
Schau dir mal diese Parameter an..
CreateDynamicObject(modelid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, worldid = -1, interiorid = -1, playerid = -1, Float:streamdistance = 300.0);
-
...
Zeig einfach mal, wie du ein Objekt erstellst ( den Code! )..
Es fehlt dir nämlich überall ein Parameter! -
Bei dem Erstellen von Objekten fehlt halt ein Parameter..
Zeig mal, wie du die Objekte erstellst. -
Kann es sein, dass du unter "OnPlayerSpawn" einige Objekte löscht?
Das könnte das Problem sein, da Objekte, die bereits bei dem Spieler nicht mehr existieren, trotzdem versucht werden, zu entfernen, was dann zu einem "Standbild" führt..//Edit: @Post unten: @GameComander:
Du solltest unsere Fragen / etc auch schon beantworten, wenn du willst, dass wir dir helfen..! -
Und warum ist dann nur eins dort..?
) VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')", i, escape(name), escape(Tag), escape(CRank1), escape(CRank2), escape(CRank3), escape(CRank4), escape(CRank5), escape(CRank6));
Kenne mich damit nicht aus, aber muss das dann nicht eher so?:
) VALUES "( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')[size=18]"[/size], i, escape(name), escape(Tag), escape(CRank1), escape(CRank2), escape(CRank3), escape(CRank4), escape(CRank5), escape(CRank6)); -
Wenn ich angreifen will, dann steht da, dass ich nicht in der Zone bin. Woran liegt's?
Hmm.. Hast du die neuste Include "M_Zones" & auch die Zonen mit dem Filterscript erstellt..?