Beiträge von [COE]CodeX

    ocmd:ban(playerid,params[])
    {
    new pID, reason[128], string[128];
    if(!IsPlayerAnAdmin(playerid,3))return SendClientMessage(playerid,Rot,"Du bist kein Admin!");
    if(sscanf(params,"us",pID,reason))return SendClientMessage(playerid,Rot,"Error: /ban [ID] [Grund]");
    format(string,sizeof(string),"AdmCmd: %s wurde von %s gebannt! Grund: %s",SpielerName(pID),SpielerName(playerid),reason);
    SendClientMessage(playerid,Rot,string);
    SetPVarInt(pID,"Baned",1);
    Kick(pID);
    return 1;
    }


    Hier bitte
    Du hast bei der ssscanf Abfrage die Variablen vergessen anzugeben somit bekommt die Variable pID niemals einen Wert zugewiesen
    Außerdem solltest du vllt die Nachricht an alle Spieler schicken statt nur an dich aber ist ja deine Entscheidung
    Desweiteren solltest du falls dein Server auf 0.3x läuft per Timer kicken da der gekickte sonst die Nachricht nicht bekommt das ist ein Bug

    Ok mach hinter dem public Minute(); mal das ; weg


    Damit sollten die meisten Fehler schon behoben sein
    Du musst nur noch wie oben schon erwähnt die Variable Minute umbenennen
    d.h entweder den Timer umbenennen mit dem forward und dem public oder aber die Variable Minute in Zeile 14625 umbenennen dann müsstest du diese variable allerdings überall ändern wo sie verwendet wird

    Na die Fehler stehen doch sogar schon auf Deutsch da du kannst die doch locker beheben!


    Zeile (14652) : Variable "Minute" wurde mehrmals deklariert
    Die Variable Minute existiert bereits dann nenne das was ich dir gegeben hab um in Minute 2 oder ZeitTimer oder aber wenn die bereits bestehende Variable Minute auch schon ein Timer ist der sich jede Minute wiederholt dann pack mein Code da rein


    Zeile (15074) : Variable wird nie benutzt: "Stunde"
    Die Variable Stunde wird nie benutzt warum auch immer, denn laut meinem Code schon


    Poste mal die Zeilen mit den Fehlern und auch alles dazu gehörige

    Ok das mit dem Wetter hast du ja nun schon komplett
    Das Wetter würde sich übrigens alle 45 Minuten zufällig ändern


    Das mit der Zeit machst du folgendermaßen
    //Oben irgendwo
    forward Minute();


    public OnGameModeInit()
    {
    SetTimer("Minute",1000*60,true);
    //sonstiger Code
    }


    public Minute();
    {
    new Stunde;
    gettime(Stunde);
    SetWorldTime(Stunde);
    return 1;
    }

    Na dahin wo/wann du eben deine Zeit updaten lassen möchtest!
    Woher soll ich wissen wo/wann du das machen lassen willst.


    /edit: z.B per Timer jede Minute die Zeit setzen lasen oder in OnPlayerUpdate wo du eben möchtest
    (OnPlayerUpdate ist natürlich nicht zu empfehlen, weil es zu oft aufgerufen wird aber ich meinte ja nur!)

    Hier erstmahl das mit der richtigen Zeit
    new Hour;
    gettime(Hour);
    SetWorldTime(Hour);
    Das mit dem Random Wetter editiere ich gleich mal rein
    /edit: So das Wetter
    //Oben irgendwo
    new WetterRandom[] = {1,3,4,5,7,8,9,11,12,13,15,16,18,19,20,21,22,23,27,29,30,32,33,36,37,38,39,40,42,43,44,45,46,250};
    forward Wetter();


    public OnGameModeInit()
    {
    SetTimer("Wetter",1000*60*45,true);
    }


    public Wetter()
    {
    new randwetter = WetterRandom[random(sizeof(WetterRandom))];
    SetWeather(randwetter);
    return 1;
    }

    Statt hier alle nur zu posten, dass ihr Reste wollt wäre es bestimmt noch hilfreich wenn ihr etwas schreibt wofür, weil jmd. bestimmt spendabler ist wenn er/sie weiß, an wen er/sie sein/ihr Geld "spendet"

    Hier mach es folgendermaßen
    Ich hab das gane noch etwas abgeändert ich schreibe gleich was
    new Inhaber[MAX_PLAYERS];


    ocmd:veh(playerid,params[])
    {
    if(!isPlayerAFK(playerid))
    {
    if(isPlayerAnAdmin(playerid,2))
    {
    if(GetPVarInt(playerid,"Admincar") == 0)
    {
    new carid,c1,c2;
    if(sscanf(params,"iii",carid,c1,c2))return SCM(playerid,COLOR_GREY,"Benutze: /veh [Fahrzeug-ID] [Farbe 1] [Farbe 2]");
    {
    new Float:Pos[3];
    GetPlayerPos(playerid,Pos[0],Pos[1],Pos[2]);
    Inhaber[playerid] = CreateVehicle(carid,Pos[0]+3,Pos[1],Pos[2],0,c1,c2,-1);
    SetPVarInt(playerid,"Admincar",1);
    Echo COLOR_LIGHTGREEN,"Du hast dir ein Adminfahrzeug erstellt. Dieses kannst du mit /dveh löschen!");
    return 1;
    }
    }
    }
    }
    else
    {
    SCM(playerid,AFK,"Du bist Abwesend gemeldet. Mit dem Befehl /back kannst du dich wieder Anwesend melden!");
    }
    return 1;
    }


    ocmd:dveh(playerid,params[])
    {
    if(!isPlayerAFK(playerid))
    {
    if(isPlayerAnAdmin(playerid,2))
    {
    if(GetPVarInt(playerid,"Admincar") == 1)
    {
    DestroyVehicle(Inhaber[playerid]);
    SetPVarInt(playerid,"Admincar",0);
    Echo COLOR_LIGHTGREEN,"Du hast dein Adminfahrzeug gelöscht!");
    return 1;
    }
    }
    }
    else
    {
    SCM(playerid,AFK,"Du bist Abwesend gemeldet. Mit dem Befehl /back kannst du dich wieder Anwesend melden!");
    }
    return 1;
    }


    1. Du kannst kein AddStaticVehicle benutzen, weil man während der Serverlaufzeit Fahrzeuge nur durch CreateVehicle erstellen kann
    2. Ich hab dein Float:X, Float:Y, Float:Z zu Float: Pos[3] also ein eindimensionaler Array das ist etwas ressourcenschonender
    3. das wichtigste Ich hab deine Inhaber Variable in eine "Max_Player" Variable geändert und für den der den Befehl sendet wird ein Auto erstellt und wenn man /dveh eingibt wird "mein" Fahrzeug wieder gelöscht dadurch fällt diese unnötige for-Schleife durch alle Vehicles weg das wären nämlich wenn man es nicht umdefiniert 2000!
    4. Du musst das Fahrzeug beim Disconnecten aber auch noch löschen also DestroyVehicle(Inhaber[playerid]); und die Variable beim connecten auf -1 setzen also Inhaber[playerid] = -1;


    Quark es soll doch "returnen" wenn man nicht Level 20 oder höher ist
    Und das mit dem Klammern kein Wunder, dass das spackt wenn du 2 öffnest und 3 schließt
    ocmd:vehicle(playerid,params[])
    {
    if(GetPlayerScore(playerid) < 20)return SendClientMessage(playerid,HELLROT,"Diesen Befehl kannst du erst ab Level 20 nutzen.");
    if(IsPlayerInAnyVehicle(playerid)) return SendClientMessage(playerid,HELLROT,"AdmCmd: Du kannst diesen Befehl nicht ausführenn, wenn Du im Fahrzeug bist.");
    ShowPlayerDialog(playerid,DIALOG_VEHICLE,DIALOG_STYLE_LIST,"Auto Menü","Sportwagen\nGeländewagen\nSaloonswagen\nMotorräder\nSpaßwagen","Bestellen","Abbrechen");
    return 1;
    }

    @Arendium: er kommt damit klar.


    ShowPlayerDialog(playerid,DIALOG_STATUS,DIALOG_STYLE_MSGBOX,"Statistik","Name: %s\nLevel: %d\nFraktion: %s","Schließen","",SpielerName(playerid),GetPlayerScore(playerid),frakname);
    ist das Problem, die letzten 3 Parameter (SpielerName(playerid),GetPlayerScore(playerid),frakname) sind an dieser Stelle falsch. Versuch den Text zuerst mit format zu formatieren.


    Nunja der Compiler kommt zwar damitklar aber es trifft eben immer ein
    Wenn(PlayerInfo[playerid][pAutoschein]) dann....
    Wie gesagt das würde immer eintreffen


    @Keybinder
    So als Denkanstoß
    Du musst die Abfrage noch etwas ergänzen mit if(PlayerInfo[playerid][pAutoschein] == 1) oder was auch immer du da haben willst
    und
    Die ShowPlayerDialog Funktion besitzt keine Parameter du musst zuerst ein string umformatieren und dann ausgeben lassen

    Ja das ist ein Bug der seit 0.3x existiert ;)


    Du musst den Spieler am besten per Timer kicken lassen der ca 200ms nach ausführen des CMDs ausgeführt wird

    Nein
    1. Das If(....,true/false) steht für die Beachtung der Schreibweise Wenn du es auf true stellst ist MeLBaTT das gleiche wie Melbatt und wenn es auf false steht muss man genau Melbatt heißen
    2. if(!strcmp(name,"Melbatt",false)) und das if(strcmp(name,"Melbatt",false) == 0) ist das gleiche
    Hast du dir schonmal Gedanken gemacht wieso so ein Command wie der von dir "entwickelte" funktioniert?
    strcmp steht für "strings compare" also Strings vergleichen also vergleicht er das Ingame von dir eingegebene mit /melbatt
    Schau dir dochmal die Struktur des /melbatt Commands an

    Grundkenntnisse?!?


    1. GetPlayerName funktioniert nicht so wie du dir das da gedacht hast
    2. Selbst wenn deine Methode funktionieren würde wäre Melbatt ein String und du müsstest "Melbatt" abfrage
    3. so vergleicht man keine Strings


    Das folgende sollte funktionieren
    if (strcmp("/melbatt", cmdtext, true, 10) == 0)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(playerid,name,MAX_PLAYER_NAME);
    if(!strcmp(name,"Melbatt",false))
    {
    SendClientMessage(playerid,Weiss,"Hallo");
    return 1;
    }
    }


    /edit: [DT]Sniper war schneller^^

    z.B so:
    new Float:angle;
    GetPlayerFacingAngle(palyerid,angle);
    printf("%f",angle);//würde jetzt die Rotation ausgeben
    //dann dein speichern mit der Variable Angle


    /edit: Oder falls du in einem Fahrzeug bist
    new Float:angle;
    new vID = GetPlayerVehicleID(playerid);
    GetVehicleZAngle(vID,angle);
    printf("%f",angle);//würde jetzt die Rotation ausgeben

    Zu viele Timer?
    OnPlayerUpdate mit zuviel Code "zugebombt"?
    Allgemein Ressourcenfressend gescripted(rießige Strings/viele "MAX_PLAYERS Schleifen") wäre alles was mir so auf Anhieb einfallen würde
    aber ohne Code kann ich nicht mehr sagen

    Ich hab nichts gegen Crossfire und ich find auch die die effekte ganz nett
    ABER 6:20 Minuten? WTF Ich würd mir nie ein solanges Fragvideo anschauen höchstens ne Minute oder so^^
    Ich hab die mit der AWM gesehen und fand si gut......ab der M4A1 Silver hab ich "weggeschaltet" :D

    Mal ne Frage was denkst du denn, wo der Parameter "playerid" herkommt den übergibst du ja nicht und das kannst du mit SetTimer auch nicht :wacko:


    Du hast 2 Möglichkeiten
    entweder
    Du lässt beim Connecten eines Spieler einen Timer für den Spieler einzeln laufen und killst den wenn man disconnected


    Oder
    Du benutzt weiterhin SetTimer und loopst jede Minute alle Spieler durch und setzt die Variable hoch


    Je nachdem welche "Version" dir lieber ist kann ich dir natürlich helfen


    /edit: Ok die 2.Version wurde ja schon geposted^^