Stand jetzt, ja.
Ich kann dir natürlich nicht sagen was in Zukunft möglich ist. ![]()
Beiträge von Jeffry
-
-
http://forum.sa-mp.com/showthread.php?t=152656
Ein flüssiger Übergang ist auf Grund der begrenzten und vorgegebenen Farben nicht möglich. -
stock FraktRangName(playerid)
{
new query[128], returnvar[11];
format(query,sizeof(query),"SELECT Rang%d FROM `rangnamen` WHERE `FID` = '%d'",SpielerInfo[playerid][pFRang],SpielerInfo[playerid][pFraktion]);
mysql_query(Handle, query);
cache_get_row(0, 0, returnvar);
return returnvar;
}
Teste es so. -
Das geht bei Arrays aus einem enum nicht.
Du musst format oder strcat nutzen.
format(Spieler[playerid][p_IP], 16, playerIP); -
Nein, da soll kein Stern hin, da soll der Name der Spalte hin, in der die Namen der Ränge stehen, sonst geht es nicht.
Wenn du nicht weißt was das ist, poste einen Screenshot der Tabelle in der die Namen stehen. -
Willkommen auf Breadfish!
Lies dir bitte diesen Thread durch und editiere dann deinen Post, damit nicht alles in einer Zeile steht.
Der Pawn BB Code - Die richtige Anwendung -
stock FraktRangName(playerid)
{
new query[128], returnvar[11];
//Passe hier das "name" an den Name der Spalte an, in der die Rangnamen stehen.
format(query,sizeof(query),"SELECT name FROM `rangnamen` WHERE `FID` = '%d'",SpielerInfo[playerid][pFraktion]);
mysql_query(Handle, query);
cache_get_row(0, 0, returnvar);
return returnvar;
}Und im Befehl:
format(fstring,sizeof(fstring),"*%s %d: %s*", Spielername(playerid), FraktRangName(playerid), ftext);
zu:
format(fstring,sizeof(fstring),"*%s %s: %s*", Spielername(playerid), FraktRangName(playerid), ftext);Allerdings sei gesagt, dass das nicht wirklich performant ist. Besser ist es, wenn du die Rangnamen beim Starten des Servers in Variablen lädst.
-
Schließt du die Konsole, wenn du es speichern lassen willst? Wenn ja, da wird OnGameModeExit nicht aufgerufen.
-
Einfach unter der anderen Nachricht einfügen:
format(str, sizeof(str), "Ein Administrator hat dir die Farbe zu %s geändert.", tmp);
SendClientMessage(pID, 0xFFFFFFFF, str);@Jack_Bauer:
Meiner Meinung nach ist die Methode sich etwas anzuschauen, was komplett ist, und daraus zu lernen die bessere Methode, wenn man sehr wenig bis gar keine Kenntnisse hat. aviate: stimmt dem sicher auch zu, vor allem wenn er gar nicht mit sscanf arbeiten will.
Das grüne Häkchen an Post #6 düfte Onkel Jeffry's Methode wohl bestätigen. -
-
Ich möchte, dass ich anderen Personen eine Farbe zuteile und nicht mir, also /nametag ID Farbe
Genau das hab ich dir doch gemacht.
Nein, hast du nicht.
Zitatif(sscanf(params, "s[20]", color)) return SendClientMessage(playerid, red, "Verwende: /color <Farbe>");
aviate: Schau dir meinen Post an.
-
-
Willkommen auf Breadfish!
Hier der Befehl:
dcmd_setcolor(playerid,params[])
{
new pID, tmp[20], idx;
tmp = strtok(params, idx);
if(!strlen(tmp)) return SendClientMessage(playerid,0xFF0000FF,"Fehler: /setcolor [playerid/SpielerName] [Farbe]");
if(IsNumeric(tmp)) pID = strval(tmp);
else pID = ReturnPlayerID(tmp);
tmp = strtok(params, idx);
if(!strlen(tmp)) return SendClientMessage(playerid,0xFF0000FF,"Fehler: /setcolor [playerid/SpielerName] [Farbe]");
if(!IsPlayerConnected(pID)) return SendClientMessage(playerid,0xFF0000FF,"Der Spieler ist nicht online.");
if(!strcmp(tmp, "blau", true)) SetPlayerColor(pID, COLOR_BLUE);
else if(!strcmp(tmp, "gelb", true)) SetPlayerColor(pID, COLOR_YELLOW);
else if(!strcmp(tmp, "rot", true)) SetPlayerColor(pID, COLOR_RED);
else if(!strcmp(tmp, "grün", true)) SetPlayerColor(pID, COLOR_GREEN);
else if(!strcmp(tmp, "weiß", true)) SetPlayerColor(pID, COLOR_WHITE);
else return SendClientMessage(playerid,0xFF0000FF,"Diese Farbe existiert nicht.");
new str[145];
GetPlayerName(pID, str, MAX_PLAYER_NAME);
format(str, sizeof(str), "Du hast die Farbe von %s zu %s geändert.", str, tmp);
SendClientMessage(playerid, 0xFFFFFFFF, str);
return 1;
}
Ich denke das ist alles recht selbsterklärend.
strtok gibt dir immer die Zeichen bis zum nächsten Leerzeichen zurück.
Falls du ocmd verwendest, ersetze das dcmd_ mit ocmd:.Diese Funktionen fügst du einmalig in deinen Gamemode ganz unten ein:
Spoiler anzeigen stock strtok(const string[], &index) //©Jeffry
{
new result[20], length = strlen(string), i = index;
while ((i < length) && (string[i] == ' ')) i++;
strmid(result,string,i,((index = strfind(string, " ", false, i)) == -1) ? (index = length) : (index) , 20);
index++;
return result;
}Spoiler anzeigen 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;
}Spoiler anzeigen stock IsNumeric(string[])
{
for (new i = 0, j = strlen(string); i < j; i++)
{
if ((string[i] > '9' || string[i] < '0')) return 0;
}
return 1;
}Alternativ könnte man es auch mit sscanf machen.
-
-
Welches MySQL Plugin verwendest du?
-
Ehh, doch nicht mit einem Timer.
Das geht viel einfacher und ressourcensparender indem man einfach den Timestamp prüft:Unter die Includes:
new tPickBlocked[MAX_PLAYERS];Unter OnPlayerPickUpPickup, bei dem entsprechenden Pickup:
if(tPickBlocked[playerid] > gettime()) return 1;
tPickBlocked[playerid] = gettime() + 20; //20 SekundenMehr ist es nicht.
-
Nichts, das muss genau so bleiben (Edit: Mit } am Ende anstatt ]) .

Das heißt, dass beim instanziieren alle Werte, sprich jeder Index von 0 bis MAX_PLAYERS-1 auf -1 gesetzt werden. Die 3 Punkte sind hier eine korrekte Anweisung. -
Doch, das macht einen Unterschied, das muss mit -1 deklariert werden, da es ja eine ID 0 geben kann, daher weiß der Code dann nicht, ob 0 jetzt nichts heißt, oder ID 0. Bei -1 weiß er das.
So wie das aussieht wird der Timer bei dir gar nicht aufgerufen, sonst würde es dir die Box schon anzeigen, bevor du überhaupt den TV Befehl nutzt (dadurch, dass du es auf 0 -
Hast du das
tvID[playerid] = pID;
bei deinem TV-Befehl eingefügt? Poste ggf. mal die beiden Befehle nochmal.
Timer und das was ich dir gegegeben habe hast du auch genau gleich? -
Die musst du auch aufnehmen.