Beiträge von CO2

    Da muss es doch einen Haken geben... :D


    Falls es den nicht gibt, kann ich schonmal einen "reservieren"? Schreibe momentan einen Gamemode, der ist aber noch nicht ganz fertig, dauert noch etwa einen Monat, also Mitte bis Ende Januar 2014 wäre der fertig...

    Ich nehme an, weil du im Adminvehs-Array nicht alle Elemente explizit auf -1 setzt. Und da PAWN da sehr eigenartig reagiert (Jedes weitere Element bekommt einen Wert um 1 größer als der vorherige), nehme ich an, dass die Bedingung if(Adminvehs[i] != -1) einfach immer zutrifft. Ich würde einfach mal die Elemente im Array auf -1 setzen und nochmal probieren.

    Bubblesort.


    Machst ne Liste (weiß nicht ob das geht) und ordnest jedem Level ne zahl zu. Danach sortierst du den Inhalt der Liste mit nem Bubblesort algorythmus von groß nach klein. Im letzten schritt gehst du einfach die Liste durch und gibst die namen aus. Fertig.

    Hallo,
    ich bin momentan dabei, eine Gamemode zu schreiben. Dieser ist in verschiedene Level aufgeteilt, jedes Level dauert 5 Minuten. Wenn ein Level jetzt vorbei ist, füge ich die neuen PlayerClasses für das nächste Level mit AddPlayerClass hinzu. Ich glaube, dass ich wenn ich bspw. in jedem Level 2 PlayerClasses hinzufüge, ich irgendwann zu viele PlayerClasses in der Class-Selection habe...
    Deshalb meine Frage: Gibt es einen Befehl, der alle bisher hinzugefügten PlayerClasses wieder löscht? (Quasi das Äquvalent zu DestroyVehicle)...

    Ich weiß jetzt zumindest woran es liegt, kann den Fehler aber nicht beheben: Zeitlich gesehen wird, wenn ein Admin den /kick Befehl (analog dazu den /ban Befehl) ausführt zuerst der Spieler gekickt/gebannt und erst dann wird versucht das Profil über die SavePlayerProfile() - Funktion zu speichern. Daher auch die part-Datei: Es wird versucht das Profil zu speichern, während der Spieler vom Server disconnected. Hinterher fehlen zwar keine Daten, der File-Handle kann aber anscheinend trotzdem nicht abgegeben werden.


    Zudem habe ich noch folgendes Problem: Dem gekickten Spieler soll der Grund angezeigt werden. Dies habe ich in den Funktionen sogar doppelt umgesetzt: Einmal durch SendClientMessageToAll() und einmal sofort danach durch SendClientMessage(). Der gekickte Spieler bekommt den Grund aber trotzdem nicht angezeigt...

    stock Spielername(playerid)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid, name, sizeof(name));
    return name;
    }


    ocmd:ach(playerid, params[])
    {
    new Message[1024];
    if(sscanf(params, "s", Message))
    {
    SendClientMessage(playerid, 0xBB0000FF, "/ach [NACHRICHT]");
    return 1;
    }
    else
    {
    if(Player[playerid][IsAdmin] == 1 || Player[playerid][IsAdmin] == 2)
    {
    new string[2048];
    format(string, sizeof(string), "[ADMIN-CHAT] %s: %s", Spielername(playerid), Message); //MARKIERT

    new x;
    for(x = 0; x < MAX_PLAYERS; x++)
    {
    if(Player[playerid][IsAdmin] == 1 || Player[playerid][IsAdmin] == 2)
    {
    SendClientMessage(x, 0xBBBB00FF, string);
    }
    }
    }
    else
    {
    SendClientMessage(playerid, 0xBB0000FF, "Du besitzt nicht die erforderlichen Rechte um den Befehl auszuführen.");
    }
    return 1;
    }
    }


    Joa das wars :D Kannst die ausgabe Formatieren in der Zeile mit //MARKIERT
    Syntax des Cmds: /ach [NACHRICHT]


    (Ich habe das aus einem selbstgeschriebenen Gamemode, also kann es sein, dass der Code so noch nicht läuft)

    Zitat

    Seltsam das ich keinen Server finde, wenn ich in die Suchleiste Nazi oder Jude eingebe.

    Ich meinte Jailbreak oder Häftlinge vs. Wärter... Niemand ist bis jetzt auf eine solche Schnapsidee gekommen wie du Sie hast. Zumal niemand seinen Server "Nazis schnetzeln Juden genau wie damals" nennen würde, davon mal ganz abgesehen...

    Die Idee ist etwas morbide, findest du nicht?

    Zitat

    Ich finde auch es wäre ein guter Gamemode, aber nicht mit Juden und Nazis sondern mit Häftlinge und Wärte

    Das würde ich unterstützen, gibt es aber glaube ich schon öfters.

    Zitat

    Wie kommt man denn wohl auf so eine Idee? Mit einer kreativen Ader :P

    Das hat absolut nichts mit einer kreativen Ader zu tun, die Grundidee gibt es schon tausendfach, dass einzige was zu "kreativ" gemacht hast ist es ins absurde zu ziehen durch den Kampf zwischen Juden und Nazis.

    Zitat

    Ps: Gute idee mit den vergasen und verbrennen, kann man bestimmt gut mit Objecten machen, danke sehr

    Alter, jetzt ehrlich: Willst du damit was beweisen?


    Ich denke, dass es sinnlos ist einen solchen Server zu schreiben, da die Grundidee schon 1000-fach umgesetzt wurde und außerdem der Verwaltungsaufwand einfach viel zu Groß wäre, da irgendwann auch der rechteste Spieler keinen Bock mehr hat 24/7 Juden zu töten...


    naja, egal, genug über die Dummheit geärgert,
    mfG
    CO2

    Habe da mal so eine kleine Frage ;)


    Wie kann ich auf Array-Felder innerhalb eines Enums von außerhalb zugreifen? Also ich habe ein Enum Spieler enum Spieler
    {
    Text3D:AFKLabel,

    HasDrivingLicense,
    HasADR[6],

    IsAdmin, // Can be 1 or 2: 1 - Simple Admin (Kick, Ban, Admin-Chat); 2 - Extended Admin (Kick, Ban, SetAdmin, UnsetAdmin, SetPremium, UnsetPremium)
    IsAFK,
    IsPremium,

    TruckModelID,
    Float:TruckModelPosX,
    Float:TruckModelPosY,
    Float:TruckModelPosZ,
    TruckNumPlate[8]
    }


    und möchte nun jedes Feld des HasADR Arrays von außen (innerhalb einer Funktion) zugreifen. Mein erster Gedanke war Player[playerid][HasADR[x]] aber das funktioniert nicht so gut :D (Natürlich sind Player, playerid und x definierte Variablen)

    Hallo,
    habe bereits nach solchen Themen gesucht, allerdings nichts passendes gefunden (angeblich Klammerfehler, aber die habe ich 5 mal kontrolliert und denke sie sind richtig gesetzt ;)). Zunächst die Funktion stock DrivingSchoolDialogs(playerid, state)
    {
    switch(state)
    {
    case 1: // Start
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_START, DIALOG_STYLE_LISTBOX, "Fahrschule / Lizenzamt", "Führerschein erwerben (1.000$ - 1.500$)\nADR-Lizenz erwerben", "Abbrechen", "OK");
    }
    case 2: // Führerschein - Erklärungen
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_EXPLAIN, DIALOG_STYLE_MSGBOX, "Führerschein", "{FFFFFF}- Auf diesem Server gilt {BB0000}Rechtsfahrgebot{FFFFFF}\n- Des Weiteren gilt an Kreuzungen {BB0000}Rechts vor Links{FFFFFF}, Ampeln sind nicht relevant\n- An Kreuzungen haben Fußgänger {BB0000}Vorrang{FFFFFF}\n- Um Gefahrengüter transportieren zu dürfen, benötigst du eine {BB0000}ADR-Lizenz{FFFFFF}\n\nWenn du alles gründlich durchgelesen hast, klicke auf [Start]", "Start", "Start");
    }
    case 3: // Führerschein - Frage 1
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_QUESTION1, DIALOG_STYLE_INPUT, "Frage 1", "{FFFFFF}Auf welcher Straßenseite wird gefahren?\n\n{00BB00}a) Rechts\nb) Links\nc) Egal\n\n{FFFFFF}Gib bitte den Buchstaben der richtigen Antwort unten ein:", "OK", "OK");
    }
    case 4: // Führerschein - Frage 2
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_QUESTION2, DIALOG_STYLE_INPUT, "Frage 2", "{FFFFFF}Welche Regel gilt bei Kreuzungen?\n\n{00BB00}a) Die Ampeln zählen\nb) Rechts vor Links, die Fußgänger müssen warten\nc) Rechts vor Links, Fußgänger haben Vorrang\n\n{FFFFFF}Gib bitte den Buchstaben der richtigen Antwort unten ein:", "OK", "OK");
    }
    case 5: // Führerschein - Frage 3
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_QUESTION3, DIALOG_STYLE_INPUT, "Frage 3", "{FFFFFF}Was wird benötigt, um Gefahrengüter transportieren zu dürfen?\n\n{00BB00}a) Ein gutes Auge\nb) Die entsprechene ADR-Lizenz\nc) Eine starke Zugmaschine\n\n{FFFFFF}Gib bitte den Buchstaben der richtigen Antwort unten ein:", "OK", "OK");
    }
    case 6: // Führerschein - Bestanden
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_PASSED, DIALOG_STYLE_MSGBOX, "Führerschein Bestanden!", "{FFFFFF}Herzlichen Glückwunsch!\n\nSie haben den Führerschein bestanden und dürfen nun offiziell einen LKW führen!\n\nKosten: 1.500$", "OK", "OK");
    }
    case 7: // Führerschein - Durchgefallen
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_FAILED, DIALOG_STYLE_MSGBOX, "Führerschein nicht Bestanden!", "{FFFFFF}Es tut mir leid, aber sie haben die Führerscheinprüfung nicht bestanden.\nWiederholen Sie diese schnellstmöglich, damit sie berechtigt sind LKWs zu führen\n\nKpsten: 1.000$", "OK", "OK");
    }
    //==========================================
    case 8: // ADR Auswahl
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_ADR_SELECTION, DIALOG_STYLE_LISTBOX, "ADR-Lizenzen", "Klasse 1 - Explosive Stoffe (1.000$)\nKlasse 2 - Gase (1.250$)\nKlasse 3 - Brennbare Flüssigkeiten (2.000$)\nKlasse 4 - Brennbare Feststoffe (5.500$)\nKlasse 6 - Toxische und infektiöse Stoffe (10.750$)\nKlasse 8 - Ätzende Stoffe (5.000$)", "Abbrechen", "OK");
    }
    case 9: // ADR Klasse 1
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_ADR_CLASS1, DIALOG_STYLE_MSGBOX, "ADR-Lizenz Klasse 1 (Explosive Stoffe) Erhalten!", "{FFFFFF}Herzlichen Glückwunsch!\n\nSie haben soeben die ADR-Lizenz der Klasse 1 (Explosive Stoffe) erhalten\n\nKosten: 1.000$", "OK", "OK");
    }
    case 10: // ADR Klasse 2
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_ADR_CLASS2, DIALOG_STYLE_MSGBOX, "ADR-Lizenz Klasse 2 (Gase) Erhalten!", "{FFFFFF}Herzlichen Glückwunsch!\n\nSie haben soeben die ADR-Lizenz der Klasse 2 (Gase) erhalten\n\nKosten: 1.250$", "OK", "OK");
    }
    case 11: // ADR_Klasse 3
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_ADR_CLASS3, DIALOG_STYLE_MSGBOX, "ADR-Lizenz Klasse 3 (Brennbare Flüssigkeiten) Erhalten!", "Herzlichen Glückwunsch!\n\nSie haben soeben die ADR-Lizenz der Klasse 3 (Brennbare Flüssigkeiten) erhalten\n\nKosten: 2.000$", "OK", "OK");
    }
    case 12: // ADR_Klasse 4
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_ADR_CLASS4, DIALOG_STYLE_MSGBOX, "ADR-Lizenz Klasse 4 (Brennbare Feststoffe) Erhalten!", "Herzlichen Glückwunsch!\n\nSie haben soeben die ADR-Lizenz der Klasse 4 (Brennbare Feststoffe) erhalten\n\nKosten: 5.500$", "OK", "OK");
    }
    case 13: // ADR_Klasse 6
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_ADR_CLASS6, DIALOG_STYLE_MSGBOX, "ADR-Lizenz Klasse 6 (Toxische und infektiöse Stoffe) Erhalten!", "Herzlichen Glückwunsch!\n\nSie haben soeben die ADR-Lizenz der Klasse 6 (Toxische und infektiöse Stoffe) erhalten\n\nKosten: 10.750$", "OK", "OK");
    }
    case 14: // ADR_Klasse 8
    {
    ShowPlayerDialog(playerid, DIALOG_DRIVINGSCHOOL_ADR_CLASS8, DIALOG_STYLE_MSGBOX, "ADR-Lizenz Klasse 8 (Ätzende Stoffe) Erhalten!", "Herzlichen Glückwunsch!\n\nSie haben soeben die ADR-Lizenz der Klasse 8 (Ätzende Stoffe) erhalten\n\nKosten: 5.000$", "OK", "OK");
    }
    default:
    {
    ShowPlayerDialog(playerid, DIALOG_NULL, DIALOG_STYLE_MSGBOX, "Nicht genug Geld", "Du besitzt nicht genug Geld um die gewählte Option auszuführen!", "OK", "OK");
    }
    }
    return 1;
    }


    Diese Funktion wird als "invalid function or declaration" gekennzeichnet (immer die, egal wo ich sie hinkopiere, woraus sich schließen lässt, dass sie den Fehler verursacht).

    Hatte ich aus einem Video-Tutorial :P Dort meinte der Knaller immer da müsste 1024 rein, einfach darum ;)
    Kam mir aber auch immer seltsam vor, da ich nebenbei C++ programmiere und das so auch nicht kenne, dass man bei einem Array die Länge als Parameter vorgibt...


    Hat sich aber leider nichts getan... Aber mir ist Folgendes aufgefallen: Wenn ich den Befehl InGame ausführe wird nebenbei noch in scriptfiles eine Datei mit dem Namen "[GekickterSpieler].porfile.part" erstellt, obwohl ich die Profil-Daten eines Spielers nur in .profile - Dateien speichere (via Dini). Im obigen Codebeispiel werden die Daten mit der selbstgeschriebenen Funktion SavePlayerProfile(playerid) gespeichert. Hier mal dessen Inhalt:


    Ich habe aber noch nie gesehen, dass der Server automatisch eine .part - Datei erstellt...

    Hallo,
    um Befehle mit Parametern zu erzeugen (Bsp.: /pn [ID] [NACHRICHT]) benutze ich OCMD. Ich habe bereits einige Befehle mit OCMD erstellt, alle funktionieren soweit einwandfrei, außer die Befehle /kick [ID] [GRUND] und /ban [ID] [GRUND]...


    Nachfolgend zunächst die Definition des Befehls /kick [ID] [GRUND]:


    Spielername(playerid) ist hier eine von mir erstellte Funktion (stock), der einfach nur den Namen des Spielers mit der angegebenen ID zurückgibt.


    Den Ban-Befehl (/ban [ID] [GRUND]) habe ich genau so erstellt, nur dass ich in der Zeile mit //MARKIERT statt Kick(playerid) Ban(playerid) geschrieben habe...


    Nun habe ich folgendes Problem: Führe ich InGame einen der Befehle aus (/kick oder /ban), schreibt der Server in den Chat zunächst die Nachricht "[KICK] %s wurde von %s gekickt (Grund: %s)" (Dabei wird %s eben durch die Werte ersetzt), und nachfolgend "SERVER: Unknown Command". Warum?

    Ich habe da mal eine Frage: Wie kann ich denn "Parameter" von solchen Befehlen erfragen? Wenn ich zum beispiel den Befehl "/call" definiere, soll der User, wenn er einen anderen ingame "anrufen" will, "/call [nummerdesanderenspielers]" eingeben. Wie kann ich das eingegebene "auseinanderpfücken"?


    mfG,
    CO2