Beiträge von Jeffry
-
-
Im Befehl (das Query gegebenenfalls an eure Spaltennamen anpassen):
mysql_pquery(handle, "SELECT name, fraktion FROM users WHERE rank = 6;", "OnLeaderOnline", "d", playerid);Ganz unten im Gamemode (das FraktionsName müsst ihr anpassen):
forward OnLeaderOnline(playerid);
public OnLeaderOnline(playerid)
{
new rows = cache_get_row_count();
if(!rows) return SendClientMessage(playerid, 0xFF0000FF, "Error: Etwas ist schief gegangen.");
new str[512], name[32], frak;
for(new i = 0; i < rows; i++)
{
cache_get_field_content(i, "name", name);
frak = cache_get_field_content_int(i, "fraktion");
if(ReturnPlayerID(name) != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}%s [%s] - {00FF00}Online\n", str, name, FraktionsName[frak]);
else format(str, sizeof(str), "%s{FFFFFF}%s [%s] - {FF0000}Offline\n", str, name, FraktionsName[frak]);
}
ShowPlayerDialog(playerid, 4521, DIALOG_STYLE_MSGBOX, "OnlineList", str, "Ok");
return 1;
} -
Im Befehl (das Query gegebenenfalls an deine Spaltennamen anpassen):
mysql_pquery(handle, "SELECT name, fraktion FROM users WHERE rank = 8;", "OnLeaderOnline", "d", playerid);Ganz unten im Gamemode (das FraktionsName musst du anpassen):
forward OnLeaderOnline(playerid);
public OnLeaderOnline(playerid)
{
new rows = cache_get_row_count();
if(!rows) return SendClientMessage(playerid, 0xFF0000FF, "Error: Etwas ist schief gegangen.");
new str[512], name[32], frak;
for(new i = 0; i < rows; i++)
{
cache_get_field_content(i, "name", name);
frak = cache_get_field_content_int(i, "fraktion");
if(ReturnPlayerID(name) != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}%s [%s] - {00FF00}Online\n", str, name, FraktionsName[frak]);
else format(str, sizeof(str), "%s{FFFFFF}%s [%s] - {FF0000}Offline\n", str, name, FraktionsName[frak]);
}
ShowPlayerDialog(playerid, 4521, DIALOG_STYLE_MSGBOX, "OnlineList", str, "Ok");
return 1;
}stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
{
new l_name[MAX_PLAYER_NAME];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
GetPlayerName(i, l_name, MAX_PLAYER_NAME);
if(!strcmp(l_name,l_PlayerName, true)) return i;
}
}
return INVALID_PLAYER_ID;
} -
Welche Plugin Version nutzt du?
-
Dini oder MySQL?
Wenn Dini, dann geht es nur, wenn du den Leader in einer Datei die der Fraktion zugewiesen ist speicherst.
Wenn MySQL, dann kann man es mit einem Query auslesen. -
Da ihr anscheinend beide die gleiche Methode nutzt.
Um das aus der Datenbank auszulesen:
Dann damit den Cache auslesen (das Result) und entsprechend dann anzeigen.Den Beispielcode habe ich oben gepostet, da muss man dann den Name der aus der Datenbank ausgelesen wurde einfügen.
Versucht damit mal wie weit ihr kommt, und postet dann gegebenenfalls den Code den ihr bis zum Problem habt, falls eines auftaucht. -
Wie und wo speicherst du den Leader der Fraktion?
-
Hast du keine Variablen in denen die Fraktionsdaten stehen?
Gibt es nur einen Leader? -
Seegras
635,636,639,820-827,864-866,3409Fische
1599-1601, 1604-1606
Um den Nummernbereich sind auch noch andere Tiere, aber ein Hai passt ja nicht wirklich in ein Aquarium. -
-
Genau.
-
Poste bitte mal ein Beispiel deines Codes, der den Leadername einer Fraktion anzeigt.
-
InterpolateCameraPos(playerid, 187.600982, -1791.727050, 119.087432, 193.731567, -1789.235473, 118.845245, 5000);
InterpolateCameraLookAt(playerid, 189.006942, -1790.279785, 114.512641, 195.057144, -1788.512817, 114.078620, 5000);
SetTimerEx("InterPos2", 5000, false, "d", playerid); Die 5000 musst du an die Zeit anpassen, die die erste Interpolation dauert.forward InterPos2(playerid);
public InterPos2(playerid)
{
InterpolateCameraPos(playerid, 187.600982, -1791.727050, 119.087432, 193.731567, -1789.235473, 118.845245, 5000);
InterpolateCameraLookAt(playerid, 189.006942, -1790.279785, 114.512641, 195.057144, -1788.512817, 114.078620, 5000);
return 1;
} -
Du musst die Gebiete, wie einen Spieler nur in einer anderen Tabelle, auch speichern (bei Änderung) und laden (beim Server-Start) lassen.
-
stock ReturnPlayerID(l_PlayerName[]) //©Jeffry
{
new l_name[MAX_PLAYER_NAME];
for(new i = 0; i < MAX_PLAYERS; i++)
{
if(IsPlayerConnected(i))
{
GetPlayerName(i, l_name, MAX_PLAYER_NAME);
if(!strcmp(l_name,l_PlayerName, true)) return i;
}
}
return INVALID_PLAYER_ID;
}Du nimmst diese Funktion, damit kannst du dann abfragen, ob der Spieler online ist.
if(ReturnPlayerID(entsprechenderName) != INVALID_PLAYER_ID) //online
else //offlineZum Beispiel:
if (strcmp(cmd, "/ot", true) == 0)
{
new str[512];
if(ReturnPlayerID("Basti") != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}Basti - {00FF00}Online\n", str);
else format(str, sizeof(str), "%s{FFFFFF}Basti - {FF0000}Offline\n", str);
if(ReturnPlayerID("Hansi") != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}Hansi - {00FF00}Online\n", str);
else format(str, sizeof(str), "%s{FFFFFF}Hansi - {FF0000}Offline\n", str);
if(ReturnPlayerID("Ulli") != INVALID_PLAYER_ID) format(str, sizeof(str), "%s{FFFFFF}Ulli - {00FF00}Online\n", str);
else format(str, sizeof(str), "%s{FFFFFF}Ulli - {FF0000}Offline\n", str);
ShowPlayerDialog(playerid, 4521, DIALOG_STYLE_MSGBOX, "Spieler", str, "Ok");
return 1;
}Dort wo jetzt die Namen "hart" drin stehen kannst du dann die Variable für den entsprechenden Leader einfügen.
-
if(strcmp(cmdtext,"/buygun",true) == 0)
{
new Float:x, Float:y, Float:z;
GetPlayerPos(playerid, x, y, z);
printf("Pos: %f / %f / %f | Range: %d", x, y, z, IsPlayerInRangeOfPoint(playerid,30.0,235.6019,168.0306,1003.0300));
if(IsPlayerInRangeOfPoint(playerid,30.0,235.6019,168.0306,1003.0300))
{
if(PlayerInfo[playerid][pGunLic] == 1)
{
ShowPlayerDialog(playerid,DIALOG_GUNMENUE,DIALOG_STYLE_LIST,"Gun Menü","Waffen Kaufen\nLaser Menü","Auswählen","Abbrechen");
}
else
{
SendClientMessage(playerid,COLOR_RED,"Sie haben keinen Waffenschein.");
}
}
else
{
SendClientMessage(playerid,COLOR_RED,"Sie sind nicht im Waffenladen.");
}
return 1;
}Debugge es mal so. Gebe den Befehl ein und poste dann was im Server Log steht, als Position.
-
Das ist zum Teil ein Fehler in SA-MP.
Versuche es mal mit einem Timer, das behebt es meistens.
Nach:
OnPlayerCommandText(playerid,"/wave");
das einfügen:
SetTimerEx("OnPlayerCommandText", 1000, false, "ds", playerid, "/wave"); -
Kommt die Info-Meldung wie der Befehl zu verwenden ist, wenn du nur
Zitat/leadererstellen
eingibst?Wenn nein, hast du im Compiler eine mehrzeilige Meldung mit vielen Zahlen?
-
Mit einem SetTimerEx.
https://wiki.sa-mp.com/wiki/SetTimerEx -
Die Zahl kann nicht kleiner als 0 und größer als 7 sein. Da musst du oder verwenden.
if(aLvl <= 0 || aLvl >= 7)