Beiträge von Kristik47

    Moin. Ich schraube gerade am Actor System ein wenig rum und möchte einen Timer einbauen,
    welcher ausgelesen wird. Genauer gesagt möchte ich wissen bei welcher Sekunde der Timer
    gerade ist und in der Sekunde möchte ich etwas machen. Das Problem: das passiert nicht.
    Er kommt nicht dazu, es zu machen.



    public OnPlayerGiveDamageActor(playerid, damaged_actorid, Float: amount, weaponid, bodypart)
    {
    //================================>
    ApplyActorAnimation(damaged_actorid,"SHOP","SHP_Rob_GiveCash",4.1,0,0,0,0,30000);
    SetPVarInt(playerid,"rdyForBreak", 1);
    angeschossenMsg[playerid] = true;
    actorAttacked[damaged_actorid] = 1;
    SetTimerEx("RobBreak", 240000, 0, "i", playerid);
    //================================>
    timerobac = 30;
    AcRobTimerb = SetTimerEx("IsDoingACRob", 3000, 1, "i", playerid);
    }
    return 1;
    }


    forward IsDoingACRob(playerid);
    public IsDoingACRob(playerid)
    {
    timerobac = 30;
    if(timerobac == 27)
    {
    SendClientMessage(playerid, -1, "x");
    }
    else if(timerobac == 24)
    {
    SendClientMessage(playerid, -1, "x");
    }
    else if(timerobac == 21)
    {
    SendClientMessage(playerid, -1, "x");
    }
    else if(timerobac == 18)
    {
    SendClientMessage(playerid, -1, "x");
    }
    else if(timerobac == 15)
    {
    SendClientMessage(playerid, -1, "x");
    }
    else if(timerobac == 12)
    {
    SendClientMessage(playerid, -1, "x");
    }
    else if(timerobac == 9)
    {
    SendClientMessage(playerid, -1, "x");
    }
    else if(timerobac == 6)
    {
    SendClientMessage(playerid, -1, "x");
    }
    else if(timerobac == 3)
    {
    SendClientMessage(playerid, -1, "x");
    }
    else if(timerobac == 0)
    {
    SendClientMessage(playerid, -1, "xD");
    KillTimer(IsDoingACRob(playerid));
    }
    return 1;
    }

    Das passiert, wenn du einen Actor in einem Interior (VirtualWorld 0) hast und keiner in dem Interior ist und InteriorID > 0.


    Am besten du machst eine Art Actor Streamer...wenn jemand betritt, erstellst du den Actor..wenn der letzte den Interior verlässt (bzw keiner mehr in der Nähe ist evtl einfacher zu checken) zerstörst du den Actor :)


    Dann verrutscht der Actor auch nicht o.ä. xD

    Das mit dem Actor Streamer verstehe ich nicht so ganz bzw. würde mir glaube ich schwer fallen es umzusetzen, aber ich und ein Kollege
    hatten die Idee, dass wir es so machen könnten, dass die Actors, sobald niemand in der Nähe ist bzw. diese von keinem überfallen werden,
    einfach ihre Position per SetActorPos erneut gesetzt bekommen, sodass sie auch wieder bzw. immer auf dieser Position sind. Die Frage
    ist halt, ob das sehr zulasten sein wird. Ansonsten wäre es nett, wenn du mir per Beispiel-Code zeigen würdest, wie du dein Vorschlag
    genau meinst.


    @Kaliber

    Moin. Kurze Frage:


    Kann man Actors irgendwie freezen, denn wenn ich in der Nähe eines Actors ist, zu ihm heranfahre, sehe ich, dass
    er wie aus dem Himmel bzw. von irgendwo(aus der Luft) runterfällt. Ich habe keine Ahnung wieso. Ist nicht bei
    allen Actors bei mir so, aber bei vielen.


    Und eine weitere Frage wäre, wie ich abfragen kann, ob er einen von denn 40 Actors, die ich in meinem Skript habe,
    anvisiert hat und keine riesen Abfragen wie solche hier machen muss:


    Sondern das ganze irgendwie vereinfachen kann, indem ich eine Schleife oder so machen kann oder ein Stock. Komme irgendwie nicht drauf.

    Versuchs mal so.


    @Dr. Frauenarzt

    Habe mich mal an mein Interface hingesetzt und ein wenig Änderungen eingebracht, aber irgendwie ist
    InGame mein Name nicht zu sehen, welchen ich statt der Uhrzeit eingesetzt habe. Habe diese Datei
    direkt im GTA SAMP Ordner drinne:



    Ich danke schon mal im Voraus für die Hilfe. Und ja, wie gesagt: Es hat sich nichts verändert. Nichtmal die Farbe.

    Hab'n bisschen rumgespielt, konnte aber nur eine Lösung für ocmd:getpakete finden. für ocmd:deliverpakete habe ich nichts scripten können Klappte bei mir einfach nicht.



    ocmd:getpakete(playerid, params[])
    {
    //if(!IsPlayerInRangeOfPoint(playerid,5.0,-91.8772,-40.3565,6.4844))return SendClientMessage(playerid,-1,"Du bist nicht am Paketekaufpunkt!");
    new Materialss;
    if(sscanf(params, "d", Materialss))return SendClientMessage(playerid,-1,"Verwendung: /getpakete [Anzahl der Pakete]");
    new string[128];
    if(Materialss < 0 || Materialss > 15) { SendClientMessage(playerid, -1, "*Die anzahl an Pakete darf nicht unter 0 und über 15 sein."); return 1; }
    if(Materialss +sSpieler[playerid][sMatsPack] < 16)
    {
    new Paketpreis = Materialss*150;
    sSpieler[playerid][sMatsPack] += Materialss;
    GivePlayerMoney(playerid, -Paketpreis);
    format(string,sizeof(string), "Du hast dir %i Materialspakete für %d$ gekauft!", Materialss, Paketpreis);
    SendClientMessage(playerid,-1,string);
    SendClientMessage(playerid,-1,"Fahre nun schnell nach San Fierro bevor dich die Cops erwischen!");
    Materialspakete[playerid] = true; //Vergessen bei get den bool auf true zu setzen, um ihn bei deliver auszulesen.
    }
    else if(Materialss + sSpieler[playerid][sMatsPack] > 15)
    {
    SendClientMessage(playerid,-1,"Du kannst Maximal 15 Materialpakete bei dir Tragen!");
    }
    else
    {
    SendClientMessage(playerid,-1,"Du hast bereits die maximale Anzahl an Paketen.");
    }
    return 1;
    }


    Beachte bitte, dass sich in deinem Skript keine Wörter verdoppeln. Du kannst keinen bool mit Materialspakete erstellen und
    dabei nochmal Materialspakete im Enum definieren. So habe ich dir statt Materialspakete im Enum ein sMatsPack erstellt.


    Bzw. füg bei dir mal im Enum statt Materialspakete ein sMatsPack ein


    @KinGRaPTiiC

    Zum Thema "leserlicher Code" hab ich was parat @Jeffry :



    if(dialogid==DIALOG_Rangnamensetzten)
    {
    if(response){if(strlen(inputtext)<4||strlen(inputtext)>20)
    {
    ShowPlayerDialog(playerid,DIALOG_Rangnamensetzten,DIALOG_STYLE_INPUT,"{FF9600}Rangname","{D10000}Der Rangname muss Mindestens 4 und Höchstens 20 Buchstaben haben!","Fertig","Zurück");
    }
    else
    {
    new rangwahl=GetPVarInt(playerid,"rangwahl");
    if(rangwahl==1)
    {
    format(fInfo[rangwahl][rang1], 30, "%s", inputtext);
    }
    else if(rangwahl==2)
    {
    format(fInfo[rangwahl][rang2], 30, "%s", inputtext);
    }
    else if(rangwahl==3)
    {
    format(fInfo[rangwahl][rang3], 30, "%s", inputtext);
    }
    if(rangwahl==4)
    {
    format(fInfo[rangwahl][rang4], 30, "%s", inputtext);
    }
    if(rangwahl==5)
    {
    format(fInfo[rangwahl][rang5], 30, "%s", inputtext);
    }
    if(rangwahl==6)
    {
    format(fInfo[rangwahl][rang6], 30, "%s", inputtext);
    }
    rangdialog(playerid); //Keine Ahnung, was es ab hier bedeuten soll, stand aber so, als ich es umwandelte.
    }


    }
    else
    {
    rangdialog(playerid);
    }
    }



    //Hier werden die nahmen denn gesetzt


    PAWN-Quellcode
    if(dialogid==DIALOG_Rangnamen)
    {
    if(response)
    {
    SetPVarInt(playerid,"rangwahl",0);
    if(listitem == 0)
    {
    SetPVarInt(playerid,"rangwahl",1);
    ShowPlayerDialog(playerid,DIALOG_Rangnamensetzten,DIALOG_STYLE_INPUT,"{FF9600}Rangname", "{FFFFFF}Wie möchtest du diesen Rang nennen? (max.20 Zeichen)", "Fertig", "Zurück");
    }
    if(listitem == 1)
    {
    SetPVarInt(playerid,"rangwahl",2);
    }
    if(listitem == 2)
    {
    SetPVarInt(playerid,"rangwahl",3);
    }
    if(listitem == 3)
    {
    SetPVarInt(playerid,"rangwahl",4);
    }
    if(listitem == 4)
    {
    SetPVarInt(playerid,"rangwahl",5);
    }
    if(listitem == 5)
    {
    SetPVarInt(playerid,"rangwahl",6);
    }
    }
    }



    //Hier wähle ich aus welchen ich ändern will


    stock rangdialog(playerid)
    {
    new string[500],str[50];
    new i=sInfo[playerid][leader];
    if(i==1)
    {
    format(str,sizeof(str),"Police Department");
    }
    if(i==2)
    {
    format(str,sizeof(str),"Bundeswehr");
    }
    if(i==3)
    {
    format(str,sizeof(str),"Rettungsdienst");
    }
    if(i==4)
    {
    format(str,sizeof(str),"Ordungsamt");
    }
    if(i==5)
    {
    format(str,sizeof(str),"Media AG");
    }
    if(i==6)
    {
    format(str,sizeof(str),"Grove Street");
    }
    if(i==7)
    {
    format(str,sizeof(str),"Ballas");
    }
    if(i==8)
    {
    format(str,sizeof(str),"Vagos");
    }
    if(i==9)
    {
    format(str,sizeof(str),"LS Biker");
    }
    if(i==10)
    {
    format(str,sizeof(str),"LCN");
    }
    if(i==11)
    {
    format(str,sizeof(str),"Yakuza");
    }
    if(i==12)
    {
    format(str,sizeof(str),"Atztecas");
    }
    format(string,sizeof(string),"Rang 1: %s\nRang 2: %s\nRang 3: %s\nRang 4: %s\nRang 5: %s\nRang 6: %s",fInfo[i][rang1],fInfo[i][rang2],fInfo[i][rang3],fInfo[i][rang4],fInfo[i] [rang5],fInfo[i][rang6]);
    ShowPlayerDialog(playerid,DIALOG_Rangnamen,DIALOG_STYLE_LIST,str,string,"Weiter","Beenden");}

    Kannst du nochmal die genauen Zeilen bzw. den Befehl mit dieser Zeile zeigen. Es hat sich ja was geändert.


    @KinGRaPTiiC

    Ich kann mir vorstellen dass if(Materialspakete[playerid] == 0) ein Boolean ist, so
    würde ich gerne diesen Bool haben; stell ihn mal bitte hier rein. Du hast ihn wahrscheinlich
    irgendwo bei den "new"-Definitionen oben im Skript.

    So könnte dein Bool aussehen:

    new bool:Materialspaketel[MAX_PLAYERS];

    @KinGRaPTiiC

    Omg, was soll das den sein? Hingeklatscht. :D
    Wo ist die Texturierung für eine ordentliche Map?
    Schrecklich, stell sowas nicht vor.


    0/10
    mfg

    Drei Beiträge und legst Äußerungen hervor, als würdest du hier schon seit Jahren dabei sein.
    Das nächste mal bitte ich, und nicht nur ich, eine konstruktive Bewertung "hinzuklatschen",
    anstatt der heißen Luft im Hirn freien Lauf zu lassen. Tut keinem gut. Wenn du etwas
    zu bemängeln hast, wenn du alles zu bemängeln hast, dann fass es in einige Hauptaspekte zusammen
    und gib dem jungen Mann einen Tipp, wie und was er besser machen kann.


    Von meiner Seite aus kann ich sagen, dass die Map für den Anfang nicht das schlechteste Werk
    ist, du dich aber mal bisschen mehr inspirieren lassen solltest. Du siehst bestimmt selber, dass alles
    ein wenig dem Standard ähnelt. Wenn man dir sagt, dass heute bisschen mehr erwartet wird, dann
    nimm es nicht als Beleidigung, sondern als Herausforderung an. Mir fällt es auch schwer beim Mappen
    kreativ zu sein. Weißt du was ich mache? Wenn ich mappe, ist es so gegen Abend immer.
    Wenn mir nichts einfällt, gehe ich duschen. Beim Duschen kannst du über verschiedene Sachen
    fantasieren und natürlich nachdenken. Mich bringen Sachen, wo ich immer in Ruhe tun kann,
    was ich will, zu guten Ideen. Empfehle ich dir auch mal. Du musst natürlich nicht duschen gehen ->
    tue einfach etwas, wo du nachdenken kannst. Der Mensch denkt nämlich zu jeder Zeit nach.
    Du kannst dir übrigens auch Bilder im Internet anschauen -> "GTA SAMP Fahrschule Mapping..."
    und dich auch davon "inspirieren" lassen - achte, dass du nicht kopierst, sondern eigene Ideen entwickelst.


    Achte bitte immer darauf, dass du deine Map mit Texturen belegst, denn somit verschönerst du sie enorm.


    5/10 - für dein erster Interior


    Wenn du mal nicht weißt oder dir die Umsetzung nicht gefällt in deinem Kopf, so belasse es erstmal
    dabei und leg mal eine Pause ein.

    Wie gesagt: Wenn du es für alle Ränge haben möchtest, dann musst du es auch für alle Ränge formatieren, also so:


    Code
    format(fInfo[i][rang1], 30, "%s", inputtext);
    format(fInfo[i][rang2], 30, "%s", inputtext);
    format(fInfo[i][rang3], 30, "%s", inputtext);
    format(fInfo[i][rang4], 30, "%s", inputtext);
    format(fInfo[i][rang5], 30, "%s", inputtext);
    format(fInfo[i][rang6], 30, "%s", inputtext);

    /E: Da ich nur den Teil der Funktion sehe, kann ich nicht viel damit anfangen.


    @Gurkie94


    Nun ja wenn du fInfo[rangwahl][rang1] in Format formatierst, dann
    beachte, dass du noch weitere 5 Ränge hast und diese auch formatieren musst. Ich würde gerne
    wissen, was du damit vorhast bzw. zu welchem System es gehört für besseres Verständnis.

    "AddPlayerClass"-Sachen entfernen und folgendes machen:



    public OnPlayerRequestClass(playerid, classid)
    {
    SetSpawnInfo(playerid, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0);
    SpawnPlayer(playerid);
    return 0;
    }


    public OnPlayerSpawn(playerid)
    {
    SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746);
    SetCameraBehindPlayer(playerid);
    return 1;
    }


    @robbi2304

    @Kristik47


    jetzt kommt immer "Verwendung: /put [drugs | drugs] [Anzahl an Drogen/Mats]");
    "Verwendung: /gtake [drugs | mats] [Anzahl an Drogen/Mats]");
    wenn ich put und gtake mache


    So, dann mal zur nächsten Runde. Versuch es mal so: :):)



    ocmd:put(playerid,params[])
    {
    //Safebox Koordinaten hier einfügen!!
    new savethings, putid[24], putstring[128];
    if(sscanf(params, "s[24]d", putid, savethings)) return SendClientMessage(playerid,-1,"Verwendung: /put [drugs | mats] [Anzahl an Drogen/Mats]");
    if(strcmp(putid,"drugs",false) == 0)
    {
    if(sSpieler[playerid][DDrogen] >= savethings)
    {
    sSpieler[playerid][DDrogen] -= savethings;
    sSpieler[playerid][SBDrogen] += savethings;
    format(putstring, sizeof(putstring),"Du hast %d Drogen in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.", savethings);
    SendClientMessage(playerid, -1, putstring);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Drogenmenge besitzt du nicht auf bei dir.");
    }
    }
    else if(strcmp(putid,"mats",false) == 0)
    {
    if(sSpieler[playerid][Materials] >= savethings)
    {
    sSpieler[playerid][Materials] -= savethings;
    sSpieler[playerid][SBMats] += savethings;
    format(putstring, sizeof(putstring),"Du hast %d Materials in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.", savethings);
    SendClientMessage(playerid, -1, putstring);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Material-Menge besitzt du nicht auf bei dir.");
    }
    }
    else
    {
    SendClientMessage(playerid, -1, "Du hast zwei Optionen. Entweder drugs oder mats.");
    }
    return 1;
    }


    ocmd:gtake(playerid,params[])
    {
    //Safebox Koordinaten hier einfügen!!
    new takethings, putid[24], takestring[128];
    if(sscanf(params, "s[24]d", putid, takethings)) return SendClientMessage(playerid,-1,"Verwendung: /gtake [drugs | mats] [Anzahl an Drogen/Mats]");
    if(strcmp(putid,"drugs",false) == 0)
    {
    if(sSpieler[playerid][SBDrogen] >= takethings)
    {
    sSpieler[playerid][DDrogen] += takethings;
    sSpieler[playerid][SBDrogen] -= takethings;
    format(takestring, sizeof(takestring),"Du hast %d Drogen aus der Safebox entnommen. Benutze /put um sie wieder einzulagern.",takethings);
    SendClientMessage(playerid, -1, takestring);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Drogenmenge besitzt du nicht in deiner Safebox.");
    }
    }
    else if(strcmp(putid,"mats",false) == 0)
    {
    if(sSpieler[playerid][SBMats] >= takethings)
    {
    sSpieler[playerid][Materials] += takethings;
    sSpieler[playerid][SBMats] -= takethings;
    format(takestring, sizeof(takestring),"Du hast %d Materials in der Safebox entnommen. Benutze /put um sie wieder einzulagern.",takethings);
    SendClientMessage(playerid, -1, takestring);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Material-Menge besitzt du nicht auf deienr Safebox.");
    }
    }
    else
    {
    SendClientMessage(playerid, -1, "Du hast zwei Optionen. Entweder drugs oder mats.");
    }
    return 1;
    }


    So funktioniert es bei mir.


    @KinGRaPTiiC

    Wenn ich zu schnell skripte, kommt viel Scheiße bei raus. Habe mich gerade mal hingesetzt und
    alles nochmal in Ruhe durchgearbeitet:



    enum SpielerDaten
    {
    Adminlevel,
    Suplvl,
    level,
    Fraktion,
    Alter,
    Geschlecht,
    Skin,
    slogin,
    Rang,
    PaydayZeit,
    Bargeld,
    DDrogen,
    Materials,//Änderung
    SBDrogen,//Änderung
    SBMats,//Änderung
    Bankguthaben,
    Festgeld,
    FestgeldTime,
    Gangjailticket,
    Bauerticket,
    Pilotticket
    }
    new sSpieler[][SpielerDaten];



    ocmd:put(playerid,params[])
    {
    //Safebox Koordinaten hier einfügen!!
    new savethings, putid[24], putstring[128];
    if(sscanf(params, "dd", putid, savethings))return SendClientMessage(playerid,-1,"Verwendung: /put [drugs | drugs] [Anzahl an Drogen/Mats]");
    if(strcmp(putid,"drugs",true) == 0)
    {
    if(sSpieler[playerid][DDrogen] > savethings)
    {
    sSpieler[playerid][DDrogen] -= savethings;
    sSpieler[playerid][SBDrogen] += savethings;
    format(putstring, sizeof(putstring),"Du hast %d Drogen in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.", savethings);
    SendClientMessage(playerid, -1, putstring);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Drogenmenge besitzt du nicht auf bei dir.");
    }
    }
    else if(strcmp(putid,"mats",true) == 0)
    {
    if(sSpieler[playerid][Materials] >= savethings)
    {
    sSpieler[playerid][Materials] -= savethings;
    sSpieler[playerid][SBMats] += savethings;
    format(putstring, sizeof(putstring),"Du hast %d Materials in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.", savethings);
    SendClientMessage(playerid, -1, putstring);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Material-Menge besitzt du nicht auf bei dir.");
    }
    }
    else
    {
    SendClientMessage(playerid,-1,"Verwendung: /put [drugs | drugs] [Anzahl an Drogen/Mats]");
    }
    return 1;
    }
    ocmd:gtake(playerid,params[])
    {
    //Safebox Koordinaten hier einfügen!!
    new takethings, putid[24], takestring[128];
    if(sscanf(params, "dd", putid, takethings)) return SendClientMessage(playerid,-1,"Verwendung: /gtake [drugs | mats] [Anzahl an Drogen/Mats]");
    if(strcmp(putid,"drugs",true) == 0)
    {
    if(takethings <= sSpieler[playerid][SBDrogen])
    {
    sSpieler[playerid][DDrogen] += takethings;
    sSpieler[playerid][SBDrogen] -= takethings;
    format(takestring, sizeof(takestring),"Du hast %d Drogen aus der Safebox entnommen. Benutze /put um sie wieder einzulagern.",takethings);
    SendClientMessage(playerid, -1, takestring);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Drogenmenge besitzt du nicht in deiner Safebox.");
    }
    }
    else if(strcmp(putid,"mats",true) == 0)
    {
    if(takethings <= sSpieler[playerid][SBMats])
    {
    sSpieler[playerid][Materials] += takethings;
    sSpieler[playerid][SBMats] -= takethings;
    format(takestring, sizeof(takestring),"Du hast %d Materials in der Safebox eingelagert. Benutze /gtake um sie wieder rauszuholen.",takethings);
    SendClientMessage(playerid, -1, takestring);
    }
    else
    {
    SendClientMessage(playerid, -1, "So eine Material-Menge besitzt du nicht auf deienr Safebox.");
    }
    }
    else
    {
    SendClientMessage(playerid,-1,"Verwendung: /gtake [drugs | mats] [Anzahl an Drogen/Mats]");
    }
    return 1;
    }


    Sorry für die ganzen Umstände. So sollte es ohne Errors funktionieren.

    @Kristik47


    Okay werde es nun ingame testen,
    Wäre es auch irgendwie möglich statt 1 und 2 einzugeben drugs und mats zu verwenden


    Okay, habe nochmal dran gearbeitet und jetzt versuche es bitte hiermit - ist nach deinem Wunsch angepasst.


    Schick mal bitte dein "stats" Befehl, versuch aber auch nochmal so, wie ich es dir jetzt schicke.