Beiträge von Mr.Homer.[325]

    Das mit Nitrado kannst du so nicht sagen. Es kommt immer drauf an für was du es brauchst. Wenn du nur einen SA:MP Server hosten möchtest, also ohne Ts³ und Forum, is Nitrado das Beste was du machen kannst. Nur wenn du mehreres kombinieren willst solltest du eher auf einen VServer zurückgreifen.


    Was viele vielleicht nicht wissen: Wenn ihr einen SA:MP Server bei Nitrado bucht müsst ihr die Slotzahl mit 10 multiplizieren, da SA:MP kaum Ressourcen verbraucht. Wenn ihr also nen Publicserver mit 4 Slots kauft und darauf SA:MP installiert, habt ihr in Wirklichkeit 40 Slots. Bedeutet also ihr könnt dort einen SA:MP Server mit 40 Slots für 4€ pro Monat hosten und müsst nicht mal Kenntnise in der Server Administration haben da alles vollautomatisch geht. Ihr habt bequeme Zahlungsmöglichkeiten und der Server ist 2 Minuten nach dem Bestellen online. Außerdem fragt bei Nitrado niemand nach dem Alter o.ä. da bei deren Servern nichts schiefgehen kann wofür du die Verantwortung tragen müsstest und sie ein Prepaid-System haben. Du musst nichtmal deinen Namen angeben.


    Die Webspace Funktion von Nitrado habe ich noch nicht getestet, daher kann ich dazu nicht viel sagen. Aber vom Angebot her hört sichs auch nicht schlecht an.


    Nur die Ts³ Funktion lässt stark zu wünschen übrig. Ihr bekommt nur einen eigenen Port auf einer Subdomain von Nitrado, also von wegen gleiche Server- und Ts-Ip is nicht. Außerdem sind hierbei die Preise wirklich stark überteuert.


    Bevor jemand fragt, nein das habe ich nicht irgendwo gelesen o.ä., das sind meine persönlichen Erfahrungen ;)
    Ich habe erst vor kurzem die Funktionen von Nitrado getestet.

    Würde es dir eher so empfehlen, ist weitaus ressourcenschonender:


    // Bei den anderen Includes wie #include a_samp etc.


    #include <ForEachPlayer>


    // Unter OnGameModeInit()


    SetTimer("LebenDown",60000,1) // Hier kannst du anstatt der 60000 eine beliebige Zeitspanne in Millisekunden angeben


    // Neue Funktion:


    forward Lebendown();
    public LebenDown()
    {
    ForEachPlayer(i)
    {
    new Float:Life;
    GetPlayerHealth(i,Life);
    SetPlayerHealth(i,Life-10); // Für die -10 kannst du natürlich auch eine beliebige andre Menge abziehen
    }
    return 1;
    }


    Das ForEachPlayer ist standardmäßig im Serverdownload vom Samp Server enthalten.

    er meint das sicher so :


    wenn ein Admin /clearchat eingibt wird der chat ja oft mit SendClientMessageToAll(COLOR_WEISS,""); gecleart und das ca. 100 mal.
    So wenn man jetzt schreibt fängt man in der 10 Chatzeile an und nicht in der 1.Chatzeile.


    Aber ich weiss nicht wie man das lösen kann, das man in der ersten anfängt


    Und dann nachträglich zwischen den Clear vom Admin schreiben oder wie? Wenn er das gemeint hat, das ist nicht möglich. Wenn ne Chat Message mal gesendet wurde kann man nichts mehr drüber schreiben.


    Falls du einfach nur nen normalen Clear Befehl für Admins willst der den Chat leert kannst du das hier benutzen, is aus meinem Script:


    CMD:clear(playerid,params[])
    {
    if(ISADMIN[playerid] < 2) return SendClientMessage(playerid,red,"Du bist kein Admin oder dein Adminlevel ist zu niedrig!");
    {
    for(new i = 0; i < 100; i++) SendClientMessageToAll(white," ");
    new aname[MAX_PNAME], string[128];
    GetPlayerName(playerid,aname,sizeof(aname));
    format(string,128,"Der Chat wurde von Admin %s gecleart!",aname);
    SendClientMessageToAll(green,string);
    admin_log(string);
    chat_log(string);
    }
    return 1;
    }


    PS: Ich weiß das i=0 is unnötig, aber ich setz es aus Gewohnheit ;)

    Wtf, ich versteh iwie nicht was du dir dabei gedacht hast. So müsste es richtig heißen:


    ocmd:heal(playerid,params[])
    {
    if(!IstSpielerInFraktion(playerid,7)) return 1; // Hier musst du 1 statt 0 returnen, sonst kommt bei dem Spieler Unknown Command. Würde dir auch ampfehlen dem Spieler noch ne Nachricht zu senden von wegen "Du bist kein Medic" oder so
    new medic[MAX_PLAYER_NAME],pID,string[128];

    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,Blau,"/heal [SpielerID]");

    GetPlayerName(playerid,medic,sizeof(medic));

    format(string,128,"Du wurdest vom Sanitäter %s geheilt!",medic);
    SendClientMessage(pID,Blau,string);
    SendClientMessage(playerid,Blau,"Du hast einen Patienten geheilt!");
    SetPlayerHealth(pID,100);
    return 1;
    }


    //Edit: Shoxx: Ebenfalls zwei Fehler die mir direkt ins Auge stechen. Erstens hast du pID nicht definiert ("new pID;") und zweitens wird der string zwar formatiert aber nichts ausgegeben ;)


    Das wird wohl kaum gehen. Wie willst du einen Reallife-Server ohne Dinge wie Fraktionen, Autosystem, Haussystem etc. erstellen?

    Was hast denn du fürn Server? Ist das bei Nitrado? Hast du nen Server angemietet wo explizit dranstand für Samp oder hast du nen Root-Server angemietet? Weil das bei einem Root Server nicht grade leicht ist, da musst erstmal selbst das Betriebssystem das Servers etc. installieren bevor du an die Installation von Samp denken kannst. Ohne entsprechende Kenntnise kaum möglich.

    Wensn dir um die Übersicht geht würd ich dir empfehlen das so wie ich zu machen, und zwar die Maps und die Autos über ein extra Callback zu laden. Ich hab das z. B. so:


    forward LoadMaps();


    public OnGameModeInit()
    {
    LoadMaps();
    // Alles andre
    }


    public LoadMaps() // Das hier ganz unten im Script, oder eben an einer beliebigen anderen Stelle
    {
    // Hier die Maps und zugehörigen Vehicles
    }


    Die selbe Geschichte hab ich auch mit dem Textdraws, da das bei mir sehr viele sind. An anderen Stellen würd ich dir diese Scriptweise nicht empfehlen, da sie von der Ressourcennutzung her nicht optimal ist, aber da OnGameModeInit nur jeweils einmal ausgeführt wird sind die paar Millisekunden mehr egal.

    Naja die Dialoge gefielen mir vorher besser, ich hoffe man kann trotzdem noch weiterhin die alten verwenden. Die GetPlayerVersion Funktion finde ich auch ein bisschen sinnlos, wozu soll man das denn brauchen, Server- und Client Version müssen sowieso gleich sein, also weiß man ja welche Version verwendet wird....


    Die Kamera-Funktion is schonmal nicht schlecht, ich hoffe mal da werden noch eingie Sachen folgen. Ich werde mein Script auch erst darauf updaten wenn die Final Version oder zumidnest mal RC 5 oder so raus ist.

    Hey,
    Ich habe folgendes Problem:


    Ich habe mein Login/Register System eben umgeschrieben, so dass es die Passwörter nichtmehr auslesbar speichert, sondern als Hashtag. Der Hash wird beim Registrieren auch korrekt erzeugt und in die .ini geschrieben (benutze Dini), beim Login wird das Passwort aber nur als richtig erkannt wenn das beim Regsitrieren gewählte Passwort 9 oder mehr Zeichen hat.


    Das hab ich ausführlich getestet indem ich mir ausgeben lassen hab was beim Hashen der Passworteingabe rauskommt und das mit dem Wert der beim Login in der .ini eingetragen wurde verglichen habe. Der Code hat 1:1 gestimmt, trotzdem hat das Login - System den Code nur dann als übereinstimmend erkannt wenn das Passwort länger als 9 Zeichen war (das richtige Passwort nicht der Hash).


    Ich weiß inzwischen nicht mehr weiter, keine Ahnung wie das zustande kommt, wäre super wenn mir jemand helfen könnte.


    Hier der entsprechende Code:


    case DIALOG_LOGIN:
    {
    if(strlen(inputtext) >= 23)
    {
    ShowPlayerDialog(playerid,DIALOG_LOGIN,3,"Herzlich Willkommen auf unserem Server","Bitte logge dich mit deinem Passwort ein: \n ","Login","Leave");
    return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort war falsch!");
    }
    SendClientMessage(playerid,grey,inputtext);
    format(inputtext,128,"%s",hash(inputtext));
    SendClientMessage(playerid,grey,inputtext);
    if(strcmp(inputtext,dini_Get(accFormat,"Passwort")) == 0)
    {
    // Meine Login Funktionen, für das hier unwichtig



    case DIALOG_REG:
    {
    new logstring[128];
    if(strlen(inputtext) < 4 || strlen(inputtext) >= 23)
    {
    ShowPlayerDialog(playerid,DIALOG_REG,1,"Herzlich Willkommen auf dem Xtreme CSS Server","Bitte registriere dich mit deinem gewünschten Passwort \n ","Register","Leave");
    return SendClientMessage(playerid,0xFFFFFFFF,"Das Passwort muss zwischen 4 und 22 Zeichen lang sein!");
    }
    format(inputtext,255,"%s",hash(inputtext));
    dini_Create(accFormat);
    dini_Set(accFormat,"Passwort",inputtext);
    // Weitere Funktionen, hier unwichtig.

    Also wenn du das hier releaste Projekt Junkbuster meinst, den brauchst du nur zu installieren so wie es in der Readme Datei steht, dann weiß der das. Der ist schon fertig programmiert, hat nur an manchen Stellen noch paar Bugs.

    Nein, das liegt nicht am installierten S0beit, man kann nach aktuellem Stand nicht direkt beim Connecten prüfen ob S0beit installiert ist. Das passiert wenn du den Junkbuster nicht ordnungsgemäß geladen hast. Damit er richtig funktioniert musst du erstens in wirklich jedem Script (auch Filterscript) das du lädst "#include <Junkbuster>" reinmachen, und zwar direkt unter "#include <a_samp>", also noch vor allen anderen Includes. Außerdem muss der Junkbuster in der Server.cfg als erstes Filterscript geladen werden. Wenn du den Junkbuster restartest musst du die gesamte server.exe beenden und neustarten, wenn du versuchst nur das Filterscript vom Junkbuster zu reloaden bannt er jeden beim Connecten. Hättest du die Readme des Junkbusters mal gelesen wüsstest du das auch....


    Master_FM: Jo hat zwar einige Fehler, aber die sind leicht zu beheben, und wenn man das mal gemacht hat ist das Ding ein geniales Stück Technik, der erkennt fast alles. Das beste Anticheating Programm das ich kenne.

    Zur ersten Frage: Würde dir zcmd empfehlen. Vom Grundsatz her ist es gleich wie ocmd, aber du hast den Vorteil dass zcmd nicht auf die Groß/Kleinschreibung von Befehlen achtet. Damit definierst du den Befehl einmal in klein geschriebener Form und dann funktioniert er egal wie er ingame geschrieben wird. Wenn du z. B. in ocmd den Befehl "/respawn" machst und ingame dann "/Respawn" eingibst wird das nicht funktionieren, bei zcmd dagegen schon.


    Zur zweiten Frage: Ich würd auch sagen dass Variablen am schnellsten sind.

    Hey,
    Ich habe folgenden Befehl geschrieben:


    CMD:respawncars(playerid,params[])
    {
    if(ISADMIN[playerid] < 2) return SendClientMessage(playerid,red,"Du bist kein Admin oder dein Adminlevel ist zu niedrig!");
    {
    new bool:unwanted[MAX_VEH],aname[MAX_PNAME],string[128];
    ForEachPlayer(i)
    {
    if(GetPlayerState(i) == 2)
    {
    unwanted[GetPlayerVehicleID(i)] = true;
    }
    }
    for(new vehid=1;vehid<=MAX_VEH;vehid++)
    {
    if(vehid <= 8 && unwanted[vehid] == false)
    {
    SetVehicleToRespawn(vehid);
    }
    if(vehid > 8 && unwanted[vehid] == false)
    {
    DestroyVehicle(vehid);
    }
    }


    GetPlayerName(playerid,aname,sizeof(aname));
    format(string,128,"Admin %s hat alle Vehicles respawnt!",aname);
    SendClientMessageToAll(green,string);
    admin_log(string);
    }
    return 1;
    }


    Wenn er ausgeführt wird werden alle im Script gespawnten Vehicles respawnt und alle von Admins gespawnten Vehicles gelöscht, Vehicles die besetzt sind bleiben davon ausgenommen. Das funktioniert soweit auch perfekt, das Problem ist nur dass die Nachricht nicht ausgegeben wird und wenn man den Befehl eingibt "Server: Unknown Command" kommt. Das heißt der Code wird nur bis nach der zweiten Schleife ausgeführt und dann ist Schluss. Da ich selbst nicht auf den Fehler komme poste ich den Befehl einfach mal hier, vielleicht weiß ja einer woran es liegen könnte.
    Mfg
    Homer

    Hey,
    Ich habe folgenden Code:



    stock IsTerrorVeh(vehid)
    {
    for(new i = 0; i < sizeof(tveh); i++)
    {
    if(vehid == tveh[i])
    {
    return 1;
    }
    else
    {
    return 0;
    }
    }
    }


    Das Problem ist dass ich beim compilen das Warning "C:\Programme\Gta San Andreas\Server\CSS mit Junkbuster 11\gamemodes\CSS.pwn(2615) : warning 209: function "IsTerrorVeh" should return a value" bekomme. Ich wollte mal fragen wie ich das abstellen kann. Sorry falls die Frage schonmal beantwortet wurde, aber ich hab nix gefunden. Der Code erfüllt seine Funktion, ich will nurnoch das Warning loswerden.

    Hey,
    Ich bin grade dabei einen Befehl der überprüft ob ein Spieler Godmode hat zu erstellen. Dazu erstelle ich eine Explosion an der Position des Spielers und überprüfe die Health vorher und nachher.



    GetPlayerHealth(pID,health1);
    GetPlayerArmour(pID,armor1);
    GetPlayerPos(pID,x,y,z);
    CreateExplosion(x,y,z,12,1.0);
    GetPlayerHealth(pID,health2);
    GetPlayerArmour(pID,armor2);


    Der gesamte Befehl (hab hier nur die betreffenden Zeilen reinkopiert) lässt sich ohne Errors/Warnings compilen und der Spieler verliert bei der Explosion auch normal Leben so wie er es sollte. Das Problem ist dass health1 und armor1 wenn ich mir das zum Test als String ausgeben lasse beide gleich groß sind. Vielleicht weiß ja hier jemand woran das liegt/wie man das lösen kann.