Hast du denn auch das ShowPlayerDialog eingefügt, so wie ich das gezeigt hatte?
Hab den Beitrag nochmal nacheditiert.
Kannst du ja auch einfach mal kurz davor den String printen ![]()
Hast du denn auch das ShowPlayerDialog eingefügt, so wie ich das gezeigt hatte?
Hab den Beitrag nochmal nacheditiert.
Kannst du ja auch einfach mal kurz davor den String printen ![]()
Ich hab alles geschrieben wie du meintest, edoch wnn ichd e Befehl eingeb kommt nix.
Hast du crashdetect drinnen?
Vielleicht meckert der wegen der String-Größe mach mal:
new string[512] = "Rang\tName\tOnlinestatus";
Danke, ich bekom folgendeFehler.
Ohh, jaa da war ja was, state ist ja ein Keyword ![]()
Dann nehmen wir halt Deutsch ![]()
stock GetPlayerStatus(const name[])
{
static const status[][] = {"{FF0000}Offline","{40FF00}Online","{FF0048}AFK"};
for(new i=GetPlayerPoolSize(),n[MAX_PLAYER_NAME]; i!=-1; i--)
{
if(IsPlayerNPC(i) || !GetPlayerName(i,n,MAX_PLAYER_NAME) || strcmp(name,n) != 0) continue;
return status[IsPlayerAFK(i) ? 2 : 1];
}
return status[0];
}
Alles anzeigen
@Kaliber
Ich hab da och keine Variable.
Ahh jaa okay
//Pack oben in dein Skript
#define IsPlayerAFK(%0) ((gettime()-AFK[%0])>5)
//Das auch oben irgendwo hin
new AFK[MAX_PLAYERS];
//Und das unter OnPlayerUpdate
AFK[playerid] = gettime();
So jetzt hast ein AFK System ![]()
Und dann den Befehl so:
ocmd:admins(playerid)
{
static const projektleiter[][] = {"Allrounder18"}; //Alle Projektleiter
static const manager[][] = {"Kolho", "Flo20"}; //Alle Manager
new string[256] = "Rang\tName\tOnlinestatus";
for(new i; i<sizeof(projektleiter); i++)
{
format(string,sizeof(string),"%s\n{FF0000}Projektleiter\t%s\t%s",string,projektleiter[i],GetPlayerStatus(projektleiter[i]));
}
for(new i; i<sizeof(manager); i++)
{
format(string,sizeof(string),"%s\n{00a4b3}Manager\t%s\t%s",string,manager[i],GetPlayerStatus(manager[i]));
}
ShowPlayerDialog(playerid, 8, DIALOG_STYLE_TABLIST_HEADERS, "ARP Team",string,"Okay","");
return 1;
}
stock GetPlayerStatus(const name[])
{
static const state[][] = {"{FF0000}Offline","{40FF00}Online","{FF0048}AFK"};
for(new i=GetPlayerPoolSize(),n[MAX_PLAYER_NAME]; i!=-1; i--)
{
if(IsPlayerNPC(i) || !GetPlayerName(i,n,MAX_PLAYER_NAME) || strcmp(name,n) != 0) continue;
return state[IsPlayerAFK(i) ? 2 : 1];
}
return state[0];
}
Alles anzeigen
Also die Tickets hab ich aus dem Befehl weggelassen, weil ich da keine Infos hatte.
Wenn du die noch haben magst, kannst du es gerne selbst probieren oder mir sagen, in welcher Variable du die speicherst, welchen Wert das haben soll, wenn der Spieler offline ist.
Wie bekomme ich es hin, das mir angezeigt wird ob der Spieler Online, Offline oder AFK ist?
Mit welcher Variable prüfst du denn, ob jemand AFK ist? ![]()
Moin.
Wenn man über 100 Zeilen Code + Logik Fragen hat...daaann ist das keine kleine Scripting Frage mehr ![]()
Eröffne da mal lieber einen eigenen Thread xD
Mir geht es eher darum, dass Gegner erscheinen o.ä. wo man den Geschossen etc. ausweichen muss etc.
He was?
Bei Agar io kann man schießen und muss Genern ausweichen und permanent erscheinen welche...und werden größer und gefährlicher...
Hast du das mal gespielt? ![]()
In der Log steht [18:50:14] 0 != 0 && 0 == 1
Dann weißt du, dass er offensichtlich pOrgMember von nix ist, da das 0 ist.
Ist er eventuell pOrgLeader? Kann es sein, dass du da 2 Variablen hast? ![]()
Irgendeine idee?
Schreibs mal so:
{
new org = PlayerInfo[playerid][pOrgMember];
printf("%d != 0 && %d == 1",org,OrgInfo[org][OrgMech]);
return (org != 0 && OrgInfo[org][OrgMech] == 1);
}
Dann schau mal, was geprintet wird im Server-Log und dann weißt du, was falsch läuft ![]()
PS: Funktionsname entfernt weil angeblich das ein zensiertes Wort ist *roflkopter*
Gibt es wirklich keine genauere Bezeichnung dazu?
Naja, kannst ja die Genre von Spielen einfach googeln, dann hast du alle exakt.

Und bei dem anderen Game steht nur Adventure, General
Und doch die games sind ähnlich.
Da man bei den io games auch interaktiv ist um mit der Maus Dingen auszuweichen oder sonstiges.
Auf was legst du denn genau Wert bei deiner Spiele Suche, wenn es dir um Musik geht, ist das natürlich eine andere Geschichte.
Empfehle dir folgendes:
1. Lösche CountDownFromAmount.
2. Schreib es so:
SetTimerEx("CountDownTimer2", 997, 0, "i", 10); //10 = Sekunden
forward CountDownTimer2(countDown);
public CountDownTimer2(countDown)
{
if (--countDown == 0) return GameTextForAll("Mach dich bereit!", 3000, 5);
new string[32];
format(string, sizeof(string), "~w~%d Sekunden", countDown);
GameTextForAll(string, 990, 4);
SetTimerEx("CountDownTimer2", 997, 0, "i", countDown);
return 1;
}
Dann brauchst du keine Globale Variable und der Timer beendet sich automatisch ![]()
Leider finde ich auch nicht das Paket welches diese Datei beinhaltet.
Das kommt auf deine Distribution an.
Unter Debian/Ubuntu müsste das libmysqlclient-dev sein und unter CentOS mysql-libs
Also das bezeichnet man eigentlich einfach als "Action Games" oder auch "Casual Games".
Gibt ja viele davon, sowie agar.io, slither.io, diep.io etc. pp.
Denke du suchst so nach io games ![]()
Ist es möglich z.B der aktuelle Stand von Bitcoin auszulesen und im Script einzubauen?
Ja, das ist sehr gut möglich.
Es gibt schon eine API die dir das zur Verfügung stellt: https://api.coinmarketcap.com/v1/ticker/bitcoin/?convert=EUR
Und mit der Funktion: https://wiki.sa-mp.com/wiki/HTTP kannst du das einfach abfragen und angeben ![]()
Am Ende wuerde ich gerne in einem Dialog alle Spieler auflisten, sortiert absteigend nach den meisten Kills.
Schreib das mal so:
new scoreTable[MAX_PLAYERS][2], idx;
for(new i = GetPlayerPoolSize(); i!=-1; i--)
{
if(!IsPlayerConnected(i) || IsPlayerNPC(i)) continue;
scoreTable[i][0] = playerdataInfo[i][pKills];
scoreTable[i][1] = i;
}
SortDeepArray(scoreTable, 0, .order = SORT_DESC); //Sortiert nach Kills
//Platz 1 - Meisten Kills
idx = scoreTable[0][1];
playerdataInfo[idx][pKills] //Platz 1 Kills
playerdataInfo[idx][pDeaths] //Platz 1 Deaths
playerdataInfo[idx][pBeds] //Platz 1 Betten
//Dann einfach Platz 2
idx = scoreTable[1][1];
playerdataInfo[idx][pKills] //Platz 2 Kills
playerdataInfo[idx][pDeaths] //Platz 2 Deaths
playerdataInfo[idx][pBeds] //Platz 2 Betten
//Dann einfach Platz 3
idx = scoreTable[2][1];
playerdataInfo[idx][pKills] //Platz 3 Kills
playerdataInfo[idx][pDeaths] //Platz 3 Deaths
playerdataInfo[idx][pBeds] //Platz 3 Betten
Alles anzeigen
Nutze dafür: https://forum.sa-mp.com/showthread.php?t=343172
Kleine Frage
Das keine kleine Frage, weil das komplett unverständlich ist, was du eigentlich wissen magst.
Und so gut wie keiner kennt doch die Funktionen etc was du da verwendest.
Schreib mir eine PN wenn du doch offensichtlich zu dem Callback Mechanismus von mir fragen hast ![]()
Ja...so könntest du es machen, dann musste einfach wieder das .pwn dranhängen und gut ist.
Aber es ist halt einfach unsinnig. Du könntest es ja auch .c oder .exe nennen, aber das macht ja keinen Sinn.
Du verwendest die Direktive #include somit ist faktisch alles was du da angibst, ein Include und nichts anderes.
Also solltest du .inc verwenden.
...ja hast du meinen Beitrag überhaupt genau gelesen?
Wie sieht denn dein Code und deine Ordnerstruktur jetzt aus...
Du solltest ja jetzt was angepasst haben
3 Dinge.
Das nennt man CULL Zones und das wird von GTA:SA geladen.
Das heißt, für sich selbst könnte man es evtl deaktivieren, aber nicht für einen SA:MP Server.
Hier nochmal eine Grafik: https://forum.sa-mp.com/showpost.php?p=3762186&postcount=13
Alsoo, irgendwo in deinem Gamemode steht:
#include <server/enums.pwn>
Also eine Sache dazu, man nennt Includes nicht .pwn, sondern .inc.
Dementsprechend schreib einfach: #include <server/enums>
So und nun muss es folgende Datei geben unter Pawno/includes/server/enums.inc.
Falls dann immer noch der Fehler auftritt liegt es eventuell daran, dass du das falsche Pawno geöffnet hast und er deshalb die Include nicht findet ![]()
sizeof(Donutshop[0][itemName])
Das kannst du leider nicht machen.
Die einzige Möglichkeit wäre sizeof(Donutshop[]) oder du nutzt einen direkten Wert ![]()
Format ist aber auch sehr langsam und in diesem Beispiel, wird auch kein format benötigt, da könntest du den String direkt setzen.
Donutshop[0][itemName] = "Donut ohne Füllung";
oder memcopy bzw strcat. Alles schneller und besser, als format ![]()
alle anderen auch 10 Minuten warten..
Dann musst du das auf die Spieler beschränken.
Anstatt atmtime musst das individualisieren mit atmtime[playerid].
Also auch mit new atmtime[MAX_PLAYERS]; deklarieren.