Du kannst mal versuchen sie ein paar Meter höher zu setzen (Z-Koordinate).
Beiträge von Jeffry
-
-
Hmm, merke gerade das es dann nicht mehr mit der Playerid funktioniert, soll ja mit beidem gehen @Jeffry
Ah, auch noch zusätzlich. Das geht auch, so:
CMD:kick(playerid, params[]) {
new playerID, pname[MAX_PLAYER_NAME], Reason[64], cQuery[128 + (MAX_PLAYER_NAME * 2)];if(pData[playerid][P_Admin] < 1) return
SendClientMessage(playerid, COLOR_RED, LV_Fail);if(sscanf(params,"sS()[32]", pname, Reason)) return
SendClientMessage(playerid, COLOR_RED, "Use: /kick <player> <reason>");if(IsNumeric(pname))
playerID = strval(pname);
else
playerID = ReturnPlayerID(pname);if(!IsPlayerConnected(playerID)) return
SendClientMessage(playerid, COLOR_RED, ID_Fail);if(!Reason[0]) format(Reason, sizeof(Reason), "No reason given");
format(cQuery, sizeof(cQuery), "{%06x}%s {FFFFFF}has been kicked by {%06x}%s {FFFFFF}(%s)", GetPlayerColor(playerid) >>> 8, GetName(playerID), GetPlayerColor(playerID) >>> 8, GetName(playerid), Reason);
SendClientMessageToAll(-1, cQuery);format(cQuery, sizeof(cQuery), "Admin %s kicked %s for %s", GetName(playerid), GetName(playerID), Reason);
writeLog("Logs/Kick.txt", cQuery);Kick(playerID);
return 1;
}Und füge diese Funktion noch hinzu:
stock IsNumeric(const string[])
{
for(new i = 0, j = strlen(string); i < j; i++)
{
if(string[i] > '9' || string[i] < '0') return 0;
}
return 1;
} -
Die erste Zahl für die Länge des Spielernamen und die zweite für den Grund?
Korrekt.
Man muss bei dem Name hier eben 24 angeben, weil er MAX_PLAYER_NAME ja nicht erkennt.
-
Nutze:
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;
}Und schreibe den Befehl so:
CMD:kick(playerid, params[]) {
new playerID, pname[MAX_PLAYER_NAME], Reason[64], cQuery[128 + (MAX_PLAYER_NAME * 2)];if(pData[playerid][P_Admin] < 1) return
SendClientMessage(playerid, COLOR_RED, LV_Fail);if(sscanf(params,"s[24]S()[32]", pname, Reason)) return
SendClientMessage(playerid, COLOR_RED, "Use: /kick <player> <reason>");playerID = ReturnPlayerID(pname);
if(!IsPlayerConnected(playerID)) return
SendClientMessage(playerid, COLOR_RED, ID_Fail);if(!Reason[0]) format(Reason, sizeof(Reason), "No reason given");
format(cQuery, sizeof(cQuery), "{%06x}%s {FFFFFF}has been kicked by {%06x}%s {FFFFFF}(%s)", GetPlayerColor(playerid) >>> 8, GetName(playerID), GetPlayerColor(playerID) >>> 8, GetName(playerid), Reason);
SendClientMessageToAll(-1, cQuery);format(cQuery, sizeof(cQuery), "Admin %s kicked %s for %s", GetName(playerid), GetName(playerID), Reason);
writeLog("Logs/Kick.txt", cQuery);Kick(playerID);
return 1;
}Dann geht das beschriebene Szenario, wenn du den genauen Namen eingibst, und falls nicht, wird die erst-gefundene ID genommen.
-
Naja, und woher weis SetPlayerScore das es dass aus der Datenbank zu nehmen hat?
Das weiß es, weil du es unter den Code schreibst, der den Cache ausliest.
Außerdem gehe ich davon aus, dass es so aussehen muss:
SetPlayerScore(playerid, SpielerInfo[playerid][pLevel]);
Das pLevel nur der enum Bezeichner ist. -
Jeffry, bist du in der Lage mir mal das an dem Beispiel hier zu erläutern (das mit dem Tutorial das du mir geschickt hast):
Für ein solches Vorhaben ist das nicht so einfach zu realisieren.
Hier eine mögliche Variante: http://forum.sa-mp.com/showpost.php?p=1223168&postcount=2
Was genau mit den #emit's gemacht wird kann ich dir nicht sagen, da ich mich da nie eingearbeitet habe, weil man das eigentlich auch nicht braucht. Aber wenn es klappt, passt es ja. -
Beim Login, und dort wo sich das Level ändert:
SetPlayerScore(playerid, /*Variable hier*/); -
geändert und nun funktioniert dieser Code!
Das ist falsch so und wird dir Fehler im Log ausgeben, da ein Cache aufgerufen wird, der nicht existiert.
Die ShowHelp Funktion ist eine Funktion, die der Thread-Ersteller selbst erstellt hat, und wahrscheinlich irgendeine Info-Nachricht anzeigt.
Wenn du dies so nicht machst, dann nutze:
if(!strlen(str)) return SendClientMessage(playerid, 0xFF0000FF, "Nutze: /help [Stichwort]"); -
-
in etwa so:
Nein, bitte niemals so machen, außer es ist wirklich nicht anders möglich, und das ist eigentlich nie der Fall. Das was du da machst geht komplett am Sinn der neuen Versionen vorbei, da es fast genau das Gleiche macht, wie die alten Plugins, nämlich auf die Antwort des MySQL Servers warten. Das ist schlecht und sollte so nicht mehr gemacht werden.
Wie sähe die Query mit der latest MySQL Version aus ?
#define DIALOG_HELP 1403
public OnPlayerCommandText(playerid, cmdtext[])
{
new cmd[256], idx;
cmd = strtok(cmdtext, idx);
if(strcmp("/help", cmd, true) == 0)
{
new str[256];
str = strtok(cmdtext, idx);
if(!strlen(str)) return ShowHelp(playerid);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "*** Hilfe *** Suche Artikel... (Es sollte gleich ein Infotext angezeigt werden. Wenn nicht, probiere es zu einem späteren Ueitpunkt nochmal.)");
mysql_format(handle, str, sizeof(str), "SELECT header FROM helptabelle WHERE tags LIKE '%%%e%%';", str);
mysql_pquery(handle, str, "OnCmdHelp", "d", playerid);
return 1;
}
return 0;
}forward OnCmdHelp(playerid);
public OnCmdHelp(playerid)
{
new num_rows = cache_get_row_count();
if(!num_rows) return SendClientMessage(playerid, COLOR_LIGHTBLUE, "*** Hilfe *** Leider gibt es dazu keinen passenden Treffer.");
new msg[1024], tmp[64];
for(new i = 0; i < num_rows; i++)
{
cache_get_field_content(i, "header", tmp);
format(msg, sizeof(msg), "%s%s\n", msg, tmp);
}
ShowPlayerDialog(playerid, DIALOG_HELP, DIALOG_STYLE_MSGBOX, "Help-Artikel", msg, "Auswählen", "Abbrechen");
return 1;
}#define DIALOG_HELPTEXT 2401
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_HELP:
{
if(!response) return 1;
new str[256];
mysql_format(handle, str, sizeof(str), "SELECT helptext FROM helptabelle WHERE header = '%e';", inputtext);
mysql_pquery(handle, str, "OnDialogHelp", "d", playerid);
return 1;
}
}
return 0;
}forward OnDialogHelp(playerid);
public OnDialogHelp(playerid)
{
if(!cache_get_row_count()) return SendClientMessage(playerid, COLOR_LIGHTBLUE, "*** Hilfe *** Leider gibt es dazu keinen passenden Treffer.");
new msg[1024];
cache_get_field_content(0, "helptext", msg);
for(new i=0; i<strlen(msg); i++) if(msg[i] == '~') msg[i] = '\n';
ShowPlayerDialog(playerid, DIALOG_HELPTEXT, DIALOG_STYLE_MSGBOX, "Help-Text", msg, "Ok", "");
return 1;
} -
buggt etwas mit dem Death-System
Kannst du das genauer erläutern?
-
mach hinten aus dem , ein ;
Das Komma ist korrekt, da er zwei Anweisungen im return hat.
error 036: empty statement
Bei mir kompiliert das ohne Probleme.
Poste bitte folgendes: DIALOG_SCODE, SERVER_COLOR_HTML, SERVERTAG, COLOR_ROT
Möglicherweise liegt es daran.Macht es Sinn Textdraws in OnGameModeExit zu zerstören?
Wenn man es zu 100% sauber schreiben will, dann ja. Es dürfte aber auch in den meisten Fällen kein Problem verursachen, wenn man es nicht macht.
-
Poste bitte deinen Code und markiere die Zeile mit den Fehler.
Poste außerdem bitte die Fehlermeldung dazu.
-
if(strlen(inputtext) < 4 || strlen(inputtext) > 10) return SendClientMessage(playerid, 0xFF0000FF, "Error: Länge muss zwischen 4 und 10 liegen.");
-
Nicht in einem Query?
Woanders oder in mehreren?Woanders: Nein.
In mehreren: Ja, aber wo wäre der Sinn? -
SendMessageToAll(SpielerInfo[playerid]);
Zu
SendMessageToAll(Killer); -
Suche eine Animation für Medics zum wiederbeleben / reanimieren.
"MEDIC","CPR"
Wie kann ich nem selbst geschriebenem Befehl sagen, dass man am Ende (genauso wie bei format) "unendlich" viele Arguments jedes Tags machen kann?
Hier ein Tutorial dazu:
http://forum.sa-mp.com/showthread.php?t=77000 -
Lass dir das Query mal per Print ausgeben. Was steht dann km Server Log? Der korrekte Wert, oder auch nur 1?
-
format(query, sizeof(query), "UPDATE `users` SET `pHeal`='%d', `pArmor`='%d' WHERE `id` = '%d'",
zu:
format(query, sizeof(query), "UPDATE `users` SET `pHeal`='%f', `pArmor`='%f' WHERE `id` = '%d'", -
Nein, aus
if(IsPlayerInRangeOfPoint(playerid,radius,vcoord[0],vcoord[1],vcoord[2]))
das hier:
if(IsPlayerInRangeOfPoint(playerid,radius-0.1,vcoord[0],vcoord[1],vcoord[2]))Eventuell auch mehr als 0.1, ich weiß nicht, welche Werte da genau zurück gegeben werden, eventuell benötigt das kleine Anpassungen. Einfach mal ausprobieren, wann es passt.