Beiträge von NeRoTeX

    Ist das vllt besser, oder möchtest du etwas anderes bezwecken?


    stock Rep(playerid,veh)
    {
    SendClientMessage(playerid,COLOR_GREEN," Du hast dein Fahrzeug auf Kosten des Staats tanken und reparieren lassen!");
    Gas[veh] = GetGasMax(GetVehicleModel(veh));
    RepairVehicle(veh);
    return 1;
    }


    if(strcmp(cmd,"/rep",true) == 0)
    {
    if(IsACop(playerid) || IsPlayerInFrac(playerid,4) || IsPlayerInFrac(playerid,7) || IsPlayerInFrac(playerid,3))
    {
    if(IsAtRep(playerid))
    {
    new veh = GetPlayerVehicleID(playerid);
    if(IsAnAmbulance(veh) || IsACopCar(veh) ||IsAArmyCar(veh) || IsAPraesiCar(veh) || IsAFbiCar(veh))
    {
    if(GetPlayerState(playerid) == PLAYER_STATE_DRIVER)
    {
    Rep(playerid,veh);
    }
    else SendClientMessage(playerid,COLOR_RED," Du bist nicht der Fahrer!");
    }
    else SendClientMessage(playerid,COLOR_RED," Du bist in keinem Staatsfahrzeug!");
    }
    else SendClientMessage(playerid,COLOR_RED," Du bist an keinem /rep-Punkt!");
    }
    else SendClientMessage(playerid,COLOR_RED," Du bist nicht berechtigt, dein Fahrzeug auf Kosten des Staats zu reparieren!");
    return 1;
    }

    Dein Script benötigt die Datenbank, die du angegeben hast. Wenn diese jedoch nicht existiert, wird der Server nicht gestartet.



    Schau dir dazu den Thread nochmal an. Da gibt es auch eine SQL-Datei, die möglicherweise zu dir passt.



    Edit: Rechtschreibfehler behoben ;)


    Guten Tag,


    im folgendem Thema möchte ich euch zeigen,
    wie ihr einen einfachen Waffendialog erstellen könnt.



    Der fertige Dialog wird ungefähr so aussehen:


    -------------------------------------------------------------


    Der erste Schritt ist ein Enum (Aufzählung) zu erstellen.
    Für unseren Dialog wird es so aufgebaut sein:



    enum WaffenladenInfo //Name des Enums
    {
    Name[32], //Name der Waffe
    Preis, //Preis der Waffe
    WaffenID, //WaffenID (Weaponid - http://wiki.sa-mp.com/wiki/Weapons)
    Munition //Munition, die man bei einem Kauf bekommen soll
    };


    Im zweiten Schritt erstellen wir die "Liste" der Waffen,
    die der Dialog später beinhalten soll. Dafür benötigen
    wir noch eine festgelegte Anzahl (MAX_WEAPONS) an "Elementen" (Waffen),
    die das Enum beinhaltet. In unserem Beispiel sind das 6 Waffen.
    Also haben wir 6 Elemente, die wir so definieren:



    #define MAX_WEAPONS 6


    Jetzt kommen wir zur eigentlichen Waffenauswahl.
    Wir erstellen eine Array (new Waffenladen) mit 6 Einträgen (MAX_WEAPONS)
    und der Struktur von "WaffenladenInfo". Somit bekommt jedes Element einen
    Namen, Preis, WaffenID und Munition.



    new Waffenladen[MAX_WEAPONS][WaffenladenInfo]=
    {
    {"Vibrator (Silber)",99999,13,1},
    {"Desert Eagle",500,24,50},
    {"Shotgun",700,24,50},
    {"MP5",1500,29,200},
    {"M4",4000,31,300},
    {"Minigun",8000,38,500} //Das Komma in der letzten Zeile fällt bei einem Enum immer weg
    };


    Für eine bessere Übersicht im Script definieren wir den Ausdruck "DIALOG_WAFFENLADEN"
    als die Zahl, die der Dialog später erhalten wird. In unserem Beispiel bekommt
    er die Zahl 1. Das ist generell ratsam, da man bei 20+ Dialogen, die alle nur nummeriert
    sind, leicht vergisst für welchen Dialog die einzelnen Nummer stehen.
    "DIALOG_WAFFENLADEN" ist da schon hilfreicher.



    #define DIALOG_WAFFENLADEN 1


    Um den Dialog einem Spieler zu zeigen verwenden wir eine "Stock"-Funktion. !Hinweis 1!
    In diesem Beispiel nennen wir ihn "ShowWaffenladen(playerid)".



    stock ShowWaffenladen(playerid) //playerid ist die Spielerid, die ihn angezeigt bekommen soll
    {
    new string[512]; //Der String, in dem alle Informationen gespeichert werden, um dann dargestellt zu werden
    for(new i; i < MAX_WEAPONS; i++) //Eine For-Schleife, die in unserem Fall 6x aufgerufen wird (0 bis 5). Das i steht hier für die momentane Zahl. !Hinweis 2!
    {
    format(string,sizeof(string),"%s%s (%d Schuss/$%d)\n",string,Waffenladen[i][Name],Waffenladen[i][Munition],Waffenladen[i][Preis]);
    //!Hinweis 3!
    }
    ShowPlayerDialog(playerid,DIALOG_WAFFENLADEN,DIALOG_STYLE_LIST,"Waffenladen",string,"Kaufen","Abbrechen");
    //Der Dialog DIALOG_WAFFENLADEN (1) wird als Liste angezeigt mit dem Inhalt von "string" und den 2 Buttons "Kaufen" & "Abbrechen"
    return 1;
    }


    Diese Funktion kann z.B. dann aufgerufen werden, wenn der Spieler einen
    bestimmten Befehl eingibt oder in einem bestimmten Radius einer Positonen
    eine festgelegte Taste drückt.



    if(strcmp("/mycommand", cmdtext, true, 10) == 0)
    {
    ShowWaffenladen(playerid);
    return 1;
    }



    public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
    {
    if(newkeys == KEY_FIRE)
    {
    if(IsPlayerInRangeOfPoint(playerid, ...))
    {
    ShowWaffenladen(playerid);
    }
    }
    return 1;
    }


    Damit auch etwas passiert bzw. der Spieler seine Waffe bekommt, die er
    kaufen möchte, müssen wir im Public "OnDialogResponse" unseren Dialog
    noch hinzufügen.



    if(dialogid == DIALOG_WAFFENLADEN)
    {
    if(response) //Wenn auf "Kaufen" gelickt wurde (Button 1)
    {
    new string[128]; //Ein String wird erstellt, um eine formatierte Nachricht an den Spieler zu senden
    new Money = GetPlayerMoney(playerid); //Die Variabele Money wird verwendet, um nicht jedes mal GetPlayerMoney(playerid) schreiben zu müssen
    if(Money >= Waffenladen[listitem][Preis]) //Wenn er genug Geld dabei hat !Hinweis 4!
    {
    format(string,sizeof(string),"Du hast erfolgreich einen/eine %s mit %d Schuss fuer $%d gekauft!",Waffenladen[listitem][Name],Waffenladen[listitem][Munition],Waffenladen[listitem][Preis]);
    //Der string wird formatiert, um eine passende Nachricht an den Spieler zu senden, was er gerade gekauft hat
    SendClientMessage(playerid,FARBE,string);
    GivePlayerWeapon(playerid,Waffenladen[listitem][WaffenID],Waffenladen[listitem][Munition]); //Die Waffe mit der entsprechender Munition wird vergeben
    GivePlayerMoney(playerid,-Waffenladen[listitem][Preis]); //Das benötigte Geld wird dem Spieler abgezogen
    }
    else //Wenn er nicht genug Geld dabei hat
    {
    new RMoney = Waffenladen[listitem][Preis]-Money;
    format(string,sizeof(string),"Du hast nicht genug Geld dabei, um einen/eine %s zu kaufen! ($%d zu wenig)",Waffenladen[listitem][Name],RMoney);
    //Der Spieler wird eine Nachricht bekommen, wie viel Geld ihm fehlt, um seine ausgewählte Waffe zu kaufen
    SendClientMessage(playerid,FARBE,string);
    // Die FARBE könnt ihr durch euere ersetzen
    }
    }
    }


    -------------------------------------------------------------


    Hinweis 1:
    Stock-Funktionen werden verwendet, um einen Codeabschnitt nur 1x schreiben zu müssen,
    anstatt an jeder Stelle im Script, an dem er gebraucht wird, wieder von neu zu schreiben.
    ShowWaffenladen(playerid) benötigt maximal 1 Zeile im Script, wobei eine For-Schleife
    mit anschließendem Zeigen eines Dialoges viel mehr benötigt => spart viel Platz & man
    hat eine bessere Übersicht.


    Hinweis 2:
    Ein Enum (und Standart-For-Schleife) beginnt mit 0 an zu zählen. Also 0,1,2,3,...
    Die Elemente, um sie in MAX_WEAPONS zu definieren, jedoch mit 1,2,3,4,...
    Deswegen zählt unsere Schleife von 0-5. Dabei wird die Information, die in
    Waffenladen[i][Name], etc, vorher festgelegt wurde, vom Element i=0 abgerufen.
    => Waffenladen[0][Name] = Vibrator (Silber) bzw. Waffenladen[3][Name] = MP5.


    Hinweis 3:
    Wir formatieren den String mit format, um Informationen zu speichern. Das erste %s (Text) nimmt den bisherigen Inhalt des Strings
    und hängt die weiteren Informationen an. Das zweite %s steht für den Namen der Waffe, das erste %d (Zahl) steht für die Munition,
    die man bekommen soll und das zweite %d steht für den Preis, den man für die Waffen bezahlen muss. Am Ende jeder Zeile befindet
    sich noch ein \n, welches dafür da ist, dass nach jedem Durchlauf eines i's eine neue Zeile im String angehängt wird.


    Hinweis 4:
    Dialoge, die den Style "DIALOG_STYLE_LIST" (Liste) haben, beginnen auch mit 0 an zu zählen.
    Daher ist die ID der ersten Zeile im Dialog 0 (listitem = 0). Logischerweise hat dann
    die zweite Zeile den listitem-"Wert" 1 usw. Deswegen kann man "listitem" als die Zahl einsetzen,
    die das Element des Enums eigentlich hätte.
    => zweite Zeile im Dialog ist die Desert Eagle (Enum-Element 1) => zweite Zeile im Dialog hat das
    listitem 1 => Waffenladen[listitem] = Waffenladen[1], was die Desert Eagle wäre.


    -------------------------------------------------------------


    Ich hoffe, ich konnte einigen helfen und da das meine erste Tutorial ist, ist
    Kritik natürlich willkommen.



    NeRoTeX

    Zitat von 'KinGShanez|ᵀᴴᴱ ᴼᴿᴵᴳᴵᴻᴬᴸ|

    Das Finde ich Erbärmlich ? 0815 ? Rechtschreibfehler, wo den das ? Du setzt hier Zwar eine Kritik ab . Aber nichts Positives, nein .




    Versuch dir bitte mal was eigenes aufzubauen das ist Unser Anfang LG: KinGShanez






    Vorstellung: 3/10 - Standart


    Forum: 5/10 - Nicht ganz so berauschend

    Ich finde es nicht gerade schön, wie du hier ein Script released, dass dir eigentlich garnicht zusteht.


    Nachdem ich mir das Script angesehen habe, musste ich feststellen, der Gamemode zu 95% von GTA:WC kopiert ist.
    Diese Behauptung kann ich bestätigen, da ich jetzt der Scripter von GTA:WC bin und mir die betreffenden Zeilen angesehen habe.
    Sie stimmen 1:1 überein.


    Was mich jedoch "nervt" ist, dass du ein älteres Script, was sehr lange und hart erarbeitet wurde, wobei du nur einen geringen, fast schon garnichts dazu beigetragen hast, einfach unter deinem Namen released.


    Das zeigt von richtiger Reife. Respekt.

    Angenommen es gibt bei dir im Script nur 50 Fraktionsautos (#define MAX_FRAKCARS 50),
    dann werden nur alle Autos, die die ID 0-50 haben, abgefragt.



    COMMAND:frc(playerid,params[])
    {
    if(IsDMFrak(playerid))
    {
    if(GetPVarInt(playerid,"Rang") < 5) return SCM(playerid,COLOR_RED,"Du hast keine Berechtigung dazu!");
    for(new i=0;i<MAX_VEHICLES;i++)
    {
    if(FrakCarInfo[i][f_Frak] == GetPVarInt(playerid,"Fraktion"))
    {
    SetVehicleToRespawn(i);
    }
    }
    }
    return 1;
    }

    Dann wirkt "OnMinute" nicht, da IsPlayerConnected nicht zutrifft und er nicht auf dem Server ist.



    Somit bleibt die Zeit auf die Zahl gesetzt, mit der er zuletzt online war.



    (Geht mit 5 Minuten offline, kommt nach 8 Stunden wieder online, muss trotzdem noch 5 Minuten im Knast sitzen)

    Angenommen er macht:



    new string[512];
    for(new i; i < MAX_PLAYERS; i++)
    {
    GetPlayerName(i, sendername, sizeof(sendername));
    format(string,sizeof(string),"%sAdminrang: %s\n",string,sendername);
    }
    ShowPlayerDialog(...,string,..);


    Er nimmt den String "string" um formatiert ihn:
    Leer
    => Supporter: Hans\n
    => Supporter: Hans
    Admin: Klaus\n


    Das \n sorgt ja dafür, dass ein "neues" Listitem "erstellt" wird.

    Etwas müde, jedoch versuch mal das:


    dcmd_arrest(playerid,params[])
    {
    new frak = SInfo[playerid][Fraktion];
    new pID,price,time;
    if(frak == 1 || frak == 2 || frak == 3)
    {
    if(sscanf(params,"uii",pID, price, time))
    {
    SendClientMessage(playerid,Rot,"Benutze: /arrest [playerid][preis][zeit]");
    }
    else
    {
    if(!IsPlayerConnected(pID))return SendClientMessage(playerid,Rot,"Spieler nicht online!");
    format(str,sizeof(str),"Verbrecher %s wurde von %s für %d Minute/n eingesperrt",SpielerName(pID),SpielerName(playerid),time);
    SendClientMessageToAll(Lila,str);
    format(str,sizeof(str),"Du wurdest für %d Minute/n eingesperrt",time);
    SendClientMessage(pID,Rot,str);
    SInfo[pID][zeiteingesperrt] = time;
    SInfo[pID][wantedpunkte] = 0;
    SInfo[pID][pGeld] -= price;
    SInfo[playerid][pGeld] += price;
    SpielerSpeichern(pID);
    SpielerLaden(pID);
    SetPlayerPos(...);
    }
    return 1;
    }
    else
    {
    SendClientMessage(playerid,Rot,"Du bist doch kein Cop!");
    }
    return 1;
    }


    Falls du es nicht hast, benötigst du:
    1x Timer, der alle Spieler abfragt, ob sie im Knast sind und jeweils 1 Minute abziehen.


    forward OnMinute();


    public OnGameModeInit()
    {
    SetTimer("OnMinute",60000,1);
    return 1;
    }


    public OnMinute()
    {
    for(new i; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && !IsPlayerNPC(i))
    {
    if(SInfo[i][zeiteingesperrt] > 0)
    {
    // 1 Minute weniger
    SInfo[i][zeiteingesperrt]--;
    }
    if(SInfo[i][zeiteingesperrt] == 0)
    {
    //Befreit
    SetPlayerPos(...);
    }
    }
    }
    return 1;
    }


    EDIT: Sorry, Textformation spinnt und Schreibfehler

    Wie immer ohne Gewähr.
    String wird bei jedem User neu erstellt => Jedes mal wieder leer.


    if (strcmp(cmd, "/admins", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    new adminbox[500];
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(PlayerInfo[i][pAdmin] == 1338)
    {
    GetPlayerName(i, sendername, sizeof(sendername));
    format(adminbox,sizeof(adminbox),"{0532FA}Co Owner: %s\n",sendername);
    }
    if(PlayerInfo[i][pAdmin] == 1337)
    {
    GetPlayerName(i, sendername, sizeof(sendername));
    format(adminbox,sizeof(adminbox),"%s{9005FA}Administrator: %s\n",adminbox, sendername);
    }
    if(PlayerInfo[i][pAdmin] == 4)
    {
    GetPlayerName(i, sendername, sizeof(sendername));
    format(adminbox,sizeof(adminbox),"%s{2EFA05}Supporter: %s\n" ,adminbox, sendername);
    }
    if(PlayerInfo[i][pAdmin] == 3)
    {
    GetPlayerName(i, sendername, sizeof(sendername));
    format(adminbox,sizeof(adminbox),"%s{2EFA05}Supporter auf Probe: %s\n",adminbox, sendername);
    }
    if(PlayerInfo[i][pAdmin] == 2)
    {
    GetPlayerName(i, sendername, sizeof(sendername));
    format(adminbox,sizeof(adminbox),"%s{FA7F05}Moderator: %s\n",adminbox, sendername);
    }
    if(PlayerInfo[i][pAdmin] == 1)
    {
    GetPlayerName(i, sendername, sizeof(sendername));
    format(adminbox,sizeof(adminbox),"%s{FA7F05}Moderator auf Probe: %s\n",adminbox, sendername);
    }
    if(PlayerInfo[i][pAdmin] == 1339)
    {
    GetPlayerName(i, sendername, sizeof(sendername));
    format(adminbox,sizeof(adminbox),"%s{FA0542}Serverleitung: %s\n",adminbox, sendername);
    }
    }
    }
    ShowPlayerDialog(playerid,DIALOG_ADMINS,DIALOG_STYLE_MSGBOX,"{FCFCFC}Admins die online sind:",adminbox,"Fertig","");
    }
    return 1;
    }

    Hilft dir das:



    public SpielerLaden(playerid)
    {
    SInfo[playerid][wantedpunkte] = dini_Int(Datei,"wantedpunkte");
    SetPlayerWantedLevel(playerid,SInfo[playerid][wantedpunkte]);
    return 1;
    }

    ?


    Wenn die Anzahl jedoch über 6 hinausgeht, werden trotzdem nur 6 angezeigt (mehr sind standartgemäß nicht möglich)

    Falls es (noch) nicht klar ist:



    ocmd:heal(playerid,params[])
    {
    if(IsPlayerConnected(playerid))
    {
    new pID;
    if(sscanf(params,"u",pID)) return SendClientMessage(playerid,ROT,"Benutze: /heal [Spielername/Spielerid]");
    SetPlayerHealth(pID, 100);
    }
    return 1;
    }

    dini_IntSet(Datei,"wantedpunkte",0);


    Wenn ich mich nicht irre, speichert es immer "0" ab.
    Somit wird beim Laden auch immer 0 ausgelesen.


    Versuch mal das:


    dini_IntSet(Datei,"wantedpunkte",GetPlayerWantedLevel(playerid));
    oder, je nachdem, wie deine Wantedvergabe genau aufgebaut ist:
    dini_IntSet(Datei,"wantedpunkte",SInfo[playerid][wantedpunkte]);


    Aus deinem Code kann ich den Zusammenhang von GetPlayerWantedLevel(playerid) und SInfo[playerid][wantedpunkte] leider nicht ganz nachvollziehen.
    Trotzdem hoffe ich, dass ich dir helfen konnte.