Beiträge von _Advanced_

    Also bei meinem GF sieht es so aus:


    if(strcmp("/carlock", cmdtext, true, 10) == 0)
    {
    if(Dtc_PlayerHaveCar[playerid][Dtc_PlayerKey[playerid]])
    {
    new Status = Dtc_Carlock[PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId]];
    new Float:dtc_X,Float:dtc_Y,Float:dtc_Z;
    GetVehiclePos(PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId],dtc_X,dtc_Y,dtc_Z);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i) && IsPlayerInRangeOfPoint(i,20.0,dtc_X,dtc_Y,dtc_Z))
    {
    PlayerPlaySound(i,1147,dtc_X,dtc_Y,dtc_Z);
    }
    }
    switch (Status)
    {
    case 0:
    {
    GameTextForPlayer(playerid, "~w~Fahrzeug ~r~abgeschlossen", 5000, 6);
    PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
    Dtc_Carlock[PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId]] = 1;
    Dtc_LockCar(PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId]);
    }
    case 1:
    {
    GameTextForPlayer(playerid, "~w~Fahrzeug ~g~aufgeschlossen", 5000, 6);
    PlayerPlaySound(playerid, 1145, 0.0, 0.0, 0.0);
    Dtc_Carlock[PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId]] = 0;
    Dtc_UnLockCar(PlayerCar[playerid][Dtc_PlayerKey[playerid]][CarId]);
    }
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, " Du besitzt Kein Fahrzeug für deinen Ausgewählten Schlüssel!");
    return 1;
    }
    return 1;
    }

    Ja, ich hatte z.B. mal auf meinem Server die Army Base bei diesem Flugzeugträger, die Hydra waren unten. Wenn man starten wollte hat man die einfach mit dem Aufzug hoch gebracht.
    Doch nicht alle Objekte tragen die Fahrzeuge, manchmal fallen sie auch durch.



    MfG

    Hallo ihr Breadfische,


    da ich mir schon viele Tutorials angeguckt habe, und mir 90% auch weiter geholfen haben, möchte ich mein Wissen auch teilen.
    In diesem (meinem ersten) Tutorial zeige ich euch wie ihr ein Restart Befehl (z.B. /srestart) mit einem Grund erstellt. Am Ende soll es dann z.B. so aussehen:


    [SERVER]: Achtung! Der Server wird in 3 Minuten automatisch Restarten! Grund: ...


    PS: Dieses Tutorial ist für neue Pawno Anfänger. Ich weiß man könnte den Befehl noch mit selbst bestimmter Zeit etc machen,

    aber ich hab mich dafür entschieden.



    Was ihr braucht?


    - Ein bisschen Zeit

    - Verständnis

    - Pawno

    - Lust und Laune


    Gut dann fangen wir mal an...




    Als erstes erstellen wir eine Variable ganz oben im Script. Warum die Variable? Wir wollen, dass wenn jemand den Befehl eintippt

    der Vorgang gestartet wird. Wird der Befehl erneut vor dem Restart eingetippt werden doppelte Nachrichten verschickt etc. Und das

    wollen wir nicht. Deswegen geht ihr ganz nach oben ins Script und macht folgendes hin:


    new RestartS;


    Gut, das hätten wir. Manche Fragen sich jetzt bestimmt warum kein: new RestartS[MAX_PLAYERS];? Aus dem Grund, weil die Variable

    für den ganzen Server gelten soll. Würden wir MAX_PLAYERS eingeben, würde die Variable nur für den bestimmten Spieler auf 1 springen, was heißt:

    Die nächsten könnten auch alle den Befehl eingeben und der Server wird zu gespammt. Wenn wir jetzt nur für den Server setzen kann nur

    einer den Befehl machen, sodass die Variable auf 1 gesetzt wird.


    So, nun haben wir die Variable, jetzt geht's auf zum Befehl der wie folgt lautet:




    if(strcmp(cmd, "/srestart", true) == 0)
    {
    if(IsPlayerConnected(playerid))
    {
    if(PlayerInfo[playerid][pAdmin] >= 6)
    {
    if(Restarts == 0)
    {
    ShowPlayerDialog(playerid,SRESTART,DIALOG_STYLE_INPUT,"Server Restart","Bitte gebe den Grund des Server Restarts ein.\n(Achtung: Die Nachricht kann jeder lesen!)","Starten","Abbrechen");
    }
    else if(Restarts == 1)
    {
    SendClientMessage(playerid,COLOR_GRAD1,"Es wurde bereits ein Serverrestart gestartet!");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_GRAD1,"Du besitzt nicht die benötigten Rechte dafür!");
    }
    }
    return 1;
    }


    Das ist nun unser Befehl, wie ihr sehen könnt habe ich das für ein GF gescriptet.

    Wenn ihr ein Selfmade habt, ändert ihr einfach die Abfragen in eure um.


    Was heißen nun alle diese Abfragen?


    if(IsPlayerConnected(playerid))


    Das Fragt ab, ob der Spieler eingeloggt ist (GF)


    if(PlayerInfo[playerid][pAdmin] >= 6)


    Das Fragt ab, ob der Spieler der diesen Befehl eingibt auch ein Admin ist, der einen höheren Rang als 6 hat. ( >= 6)(GF)

    Doch was heißt nun dieses "else"?

    Das "else" bedeutet wenn der Spieler den Bedingungen nicht nachkommt soll das und das passieren. In unserem Fall:


    SendClientMessage(playerid,COLOR_GRAD1,"Du besitzt nicht die benötigten Rechte dafür!");


    Nun kommen wir zu unserer Variable. Die Abfrage lautet folgender maßen:


    if(Restarts == 0)


    Das heißt, wenn die Variable auf 0 gesetzt ist, also kein Restart gestartet wurde, zeigt er den Dialog an.

    Die "else" Abfrage dadrunter verhindert den erneuten Start, sollte jemand schon den Befehl eingegeben haben wird die Nachricht gesendet:


    SendClientMessage(playerid,COLOR_GRAD1,"Es wurde bereits ein Serverrestart gestartet!");


    Wenn also noch kein Restart gestartet wurde, soll uns das Script das Dialog zeigen:


    ShowPlayerDialog(playerid,SRESTART,DIALOG_STYLE_INPUT,"Server Restart","Bitte gebe den Grund des Server Restarts ein.\n(Achtung: Die Nachricht kann jeder lesen!)","Starten","Abbrechen");


    Das ist unser Dialog wo wir später den Grund eintippen für unseren Server Restart. Dazu nehmen wir den DIALOG_STYLE_INPUT. Beim INPUT hat man

    dann die freie Zeile wo man dann beliebiges rein schreiben kann. Der Name des Dialoges lautet "SRESTART", was wir auch oben definieren müssen.

    Deswegen geht ihr nochmal ganz oben ins Script und macht:


    #define SRESTART Zahl


    Warum steht da jetzt Zahl? Da die meisten schon ein paar Dialoge haben müsst ihr die entsprechende Zahl eintragen. Das heißt, wenn ihr ein Dialog mit z.B.


    #define DIALOG_REPORT 1


    habt, müsst ihr um eins erhöhen, nämlich:


    #define SRESTART 2


    Das oben ist nur ein Beispiel, bei jedem ist es anders!

    Wenn ihr noch mehr Fragen zu Dialogen habt: http://wiki.sa-mp.com/wiki/ShowPlayerDialog


    So nun haben wir unseren schönen Dialog definiert. Jetzt fehlt eigentlich nur die Funktion des Dialoges.

    Dafür gehen wir zu OnDialogResponse und fügen folgendes ein:






    if(dialogid == SRESTART)
    {
    if(response == 0)
    {
    return 1;
    }
    if(response == 1)
    {
    new string[128];
    SendClientMessage(playerid,COLOR_GREEN,"Der Serverrestart wurde erfolgreich gestartet!");
    format(string,sizeof(string),"[Server]: Der Server startet in 2 Minuten automatisch neu! Grund: %s",inputtext);
    SendClientMessageToAll(COLOR_RED,string);
    Restarts = 1;
    SetTimerEx("Srestart",120000,false,"i",playerid);
    }
    }


    Was heißen denn nun wieder die Abfragen?


    if(dialogid == SRESTART)


    Diese Abfrage kommt immer am Anfang, denn die fragt ab ist es dieser Dialog. In diesem Fall, ist es der Dialog SRESTART wird

    folgende Funktion ausgeführt.


    if(response == 0)


    Das ist der erste Button bei unserem Dialog oben. Response 0 ist immer der letzte Button, in diesem Falle der "Abbrechen" Button.


    if(response == 1)


    Das ist unser erste Button, nämlich der "Starten" Button.


    Also wenn der Spieler den Button "Abbrechen" drückt, schließt sich der Dialog, wenn der Spieler aber auf

    "Starten" drückt, wird das ausgeführt was dort hinein geschrieben wurde.

    Der Spieler bekommt eine Nachricht und es kommt eine Nachricht an den ganzen Server.

    Die Variable wird auch auf 1 gesetzt, damit er nicht mehrmals gestartet wird.

    Nun sehen wir auch einen Timer, aber zu dem kommen wir gleich, wer sich noch nicht so gut mit Timern auskennt:

    Nun Fragen sie ein paar was dieser "inputtext" am Ende bedeutet:


    format(string,sizeof(string),"[Server]: Der Server startet in 2 Minuten automatisch neu! Grund: %s",inputtext);


    Der "inputtext" ist das was der Spieler beim Dialog eingibt, und wir mit diesem Befehl wiedergeben.

    Der eingegebene Text wird bei "%s" angezeigt.


    So, nun wo das erklärt ist kommen wir zum Timer. Damit der Timer auch funktioniert müssen wir ihm eine Funktion zuteilen.

    Ales erstes gehen wir nochmal ganz oben ins Script und fügen folgendes ein:


    forward Srestart ();


    Nach dem wir das gemacht haben, können wir unten einen "public" erstellen.

    Der wie folgt aufgebaut ist:





    public Srestart()
    {
    SendRconCommand("gmx");
    return 1;
    }


    Merke: Bei einem public oder einer Abfrage muss kein ";" hinten dran!


    So nun wird der RconCommand "gmx" (Restart Server) an den Server geschickt, danach startet er automatisch.

    Ihr könnt mit dem gleichen verfahren andere Befehle ausführen lassen.


    So nun ist unser Befehl fertig, der Server restartet nach 2 Minuten automatisch. Die Zeit könnt ihr beliebig ändern bei:


    SetTimerEx("Srestart",120000,false,"i",playerid);


    1000 = 1 Sekunde

    60.000 = 60 Sekunden

    120.000 = 120 Sekunden

    .

    .

    .


    Was nützt mir der Befehl?


    - Die User sind über einen Restart informiert

    - Man muss das Spiel nicht neu starten

    (Da man danach wieder sich einloggen kann)

    - Script Updates etc werden übernommen




    Ich hoffe ich konnte euch was beibringen. Mein Rat an euch, durch Copy und Paste lernt ihr nichts. Last euch Zeit!

    Über Verbesserungsvorschläge, Antworten oder PN's würde ich mich freuen.

    Es würde mich ebenfalls freuen wenn ihr mir Vorschläge für die nächsten Neulings Tutorial macht.

    Wenn ihr Fragen oder Probleme habt, schreibt mir!





    MfG



    Advanced



    Guten Tag/Abend,


    und zwar habe ich folgendes Problem:


    Ich hab ein Textdraw eingefügt (das ich mit dem TextdrawEditor 0.6 erstellt habe).

    Er wird angezeigt wenn man sich einloggt.


    Das Problem daran ist jetzt, beim Serverrestart wenn man sich einloggt wird er angezeigt.

    Wenn ich mich aber jetzt auslogge und wieder drauf komme, wird er nicht mehr

    angezeigt.


    Woran kann das liegen?


    Ich hab



    TextDrawShowForPlayer(playerid,Text:Textdraw0);
    TextDrawShowForPlayer(playerid,Text:Textdraw1);
    TextDrawShowForPlayer(playerid,Text:Textdraw2);


    versucht unter OnPlayerConnect und OnPlayerRequestClass zu tun, aber immer das gleiche Ergebnis.
    Die Textdraw's sind alle definiert und unter OnGameModeInit sind die ganzen Infos/Daten zu den Textdraw's.


    Ich weiß echt nicht mehr weiter, kann mir bitte einer helfen?


    MfG


    Advanced

    Guten Tag/Abend,


    ich habe mir vor einigen Tagen ein Mysql Server erstellt (localhost).

    Doch jetzt habe ich von einem Kollegen einen Root Server bekommen.

    Ich weiß jedoch nicht wie ich jetzt dafür die Datenbank erstelle, da die Accounts nicht gespeichert werden etc.


    Ich hoffe ihr könnt mir weiter helfen.


    MfG


    Advanced

    Guten Tag,


    ich wollte Fragen da ich ein Trucker System auf die Beine gestellt habe, wie die Abfrage ist ob der bestimmte Anhänger dran hängt.

    Weil die Abfrage ob ein Spieler in dem Fahrzeug sitzt, die kann ich ja. Aber einen Anhänger kann man ja nicht fahren nur ziehen.


    Ich würde mich über eure Hilfe freuen, da mir nur diese Abfrage bei meinem System fehlt.


    MfG


    Advanced

    if(strcmp(cmdtext,"/invade",true)==0){
    if(IsAFightFaction(GetPlayerFaction(playerid))){
    for(new fs;fs<sizeof(FightSystem);fs++){
    if((FightSystem[fs][fsOwnerFaction] == GetPlayerFaction(playerid) && FightSystem[fs][fsFightTime]) || FightSystem[fs][fsAttackFaction] == GetPlayerFaction(playerid))
    return SendClientMessage(playerid,FS_COL_GREY,"** Deine Gang / Mafia ist bereits in einem Fight.");
    }
    new on[2];
    on[0] = 0;
    on[1] = 0;
    for(new fs;fs<sizeof(FightSystem);fs++){
    for(new p=0;p<MAX_PLAYERS;p++)
    {
    if(GetPlayerFaction(p) == FightSystem[fs][fsOwnerFaction]) {
    on[0]++;
    }
    if(GetPlayerFaction(p) == GetPlayerFaction(playerid))
    {
    on[1]++;
    }
    }
    }
    if(testphase == 0) {
    if(on[0] <= 2) return SendClientMessage(playerid, COLOR_WHITE, "Es sind nicht genügend Gegner Online (mindestens 3)");
    if(on[1] <= 2) return SendClientMessage(playerid, COLOR_WHITE, "Es sind nicht genügend Mitglieder deiner Fraktion Online (mindestens 3)");
    }
    new TempZone = GetPlayerFightzone(playerid);
    if(TempZone != -255){
    if(FightSystem[TempZone][fsFightTimeCool] != 0) {
    format(stringx, sizeof(stringx), "Das Gebiet kann erst wieder in ca. %d Minuten erobert werden.", FightSystem[TempZone][fsFightTimeCool]);
    return SendClientMessage(playerid, FS_COL_GREY,stringx);
    }


    if(!IsAFightFaction(FightSystem[TempZone][fsOwnerFaction]))
    return SendClientMessage(playerid,FS_COL_GREY,"Gebiet wurde ausgeschaltet.");
    if(FightSystem[TempZone][fsOwnerFaction] == GetPlayerFaction(playerid))
    return SendClientMessage(playerid,FS_COL_GREY,"** Man greift nicht seine eigenen Leute an.");
    if(FightSystem[TempZone][fsFightTime] || FightSystem[TempZone][fsAttackFaction] != -255)
    return SendClientMessage(playerid,FS_COL_GREY,"** In diesem Gebiet wird bereits geschossen.");
    if(FightSystem[TempZone][fsLastFight]){
    new fsText[178];
    format(fsText,sizeof(fsText),"Ganggebiet: Dieses Ganggebiet wurde bereits Angegriffen, wartet noch: '%d' Minuten.",FightSystem[TempZone][fsLastFight]);
    SendClientMessage(playerid,FS_COL_GREY,fsText);
    return 1;
    }
    for(new fs;fs<sizeof(FightSystem);fs++){
    if(FightSystem[fs][fsOwnerFaction] == FightSystem[TempZone][fsOwnerFaction] && (FightSystem[fs][fsFightTime] || FightSystem[fs][fsAttackFaction] != -255))
    return SendClientMessage(playerid,FS_COL_GREY,"Ganggebiet: Die Gang / Mafia der das Ganggebiet gehört hat bereits ein Kampf.");
    }
    new fsTextToOwner[255];
    format(fsTextToOwner,sizeof(fsTextToOwner),">>> Fight <<< | Ihr werden von: %s angegriffen, setzt euch zur wehr!",GetFactionNameOfFaction(GetPlayerFaction(playerid)));
    new fsName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,fsName,MAX_PLAYER_NAME);
    new fsTextToAttack[255];
    format(fsTextToAttack,sizeof(fsTextToAttack),">>> Fight <<< | %s hat ein Kampf mit: %s begonnen, macht sie Platt!",fsName,GetFactionNameOfFaction(FightSystem[TempZone][fsOwnerFaction]));
    new fsText[64];
    format(fsText,sizeof(fsText),"~y~%s",GetFactionNameOfFaction(FightSystem[TempZone][fsOwnerFaction]));
    TextDrawSetString(FightSystem[TempZone][fsWinFaction],fsText);
    TextDrawSetString(FightSystem[TempZone][fsWinKills],"~y~00 Kills");
    format(fsText,sizeof(fsText),"~y~%s",GetFactionNameOfFaction(GetPlayerFaction(playerid)));
    TextDrawSetString(FightSystem[TempZone][fsLoseFaction],fsText);
    TextDrawSetString(FightSystem[TempZone][fsLoseKills],"~y~00 Kills");
    TextDrawSetString(FightSystem[TempZone][fsTime],"Verbl. Zeit: 30 Minuten");//ZEIT
    for(new i;i<MAX_PLAYERS;i++){
    if(IsPlayerConnected(i)){
    GangZoneFlashForPlayer(i,FightSystem[TempZone][fsZoneID],GetZoneColorOfFaction(GetPlayerFaction(playerid)));
    if(GetPlayerFaction(i) == FightSystem[TempZone][fsOwnerFaction]){
    PlayerPlaySound(i,1058,0.0,0.0,0.0);
    SendClientMessage(i,FS_COL_YELLOW,fsTextToOwner);
    TextDrawShowForPlayer(i,Fight);
    TextDrawShowForPlayer(i,FightUnderline);
    TextDrawShowForPlayer(i,FightSystem[TempZone][fsWinFaction]);
    TextDrawShowForPlayer(i,FightSystem[TempZone][fsWinKills]);
    TextDrawShowForPlayer(i,FightSystem[TempZone][fsLoseFaction]);
    TextDrawShowForPlayer(i,FightSystem[TempZone][fsLoseKills]);
    TextDrawShowForPlayer(i,FightSystem[TempZone][fsTime]);
    }
    if(GetPlayerFaction(i) == GetPlayerFaction(playerid)){
    PlayerPlaySound(i,1058,0.0,0.0,0.0);
    SendClientMessage(i,FS_COL_YELLOW,fsTextToAttack);
    TextDrawShowForPlayer(i,Fight);
    TextDrawShowForPlayer(i,FightUnderline);
    TextDrawShowForPlayer(i,FightSystem[TempZone][fsWinFaction]);
    TextDrawShowForPlayer(i,FightSystem[TempZone][fsWinKills]);
    TextDrawShowForPlayer(i,FightSystem[TempZone][fsLoseFaction]);
    TextDrawShowForPlayer(i,FightSystem[TempZone][fsLoseKills]);
    TextDrawShowForPlayer(i,FightSystem[TempZone][fsTime]);
    }
    }
    }
    FightSystem[TempZone][fsAttackFaction] = GetPlayerFaction(playerid);
    FightSystem[TempZone][fsKillsOfOwner] = 0;
    FightSystem[TempZone][fsKillsOfAttack] = 0;
    FightSystem[TempZone][fsFightTime] = 30;//ZEIT
    FightSystem[TempZone][fsFightTimeCool] = 90;//ZEIT
    FightSystem[TempZone][fsCTF][0] = -255;
    FightSystem[TempZone][fsCTF][1] = 0;
    FightSystem[TempZone][fsCTF][2] = 0;
    return 1;
    }return SendClientMessage(playerid,FS_COL_GREY,"** Du bist in keinem Gebiet!");
    }else SendClientMessage(playerid,FS_COL_GREY,"** Du bist in keiner Gang / Mafia.");
    return 1;
    }