Beiträge von Beavis

    Ich hab wieder ein kleines Problem


    Bei den SScanf2 plugin sollen laut der liste Optimale Strings so gemacht werden
    S[länge]
    gut habe ich gemacht siehe
    if(sscanf(p,"S[50]",tanga))
    Nur im Log steht jetzt das drin:
    [15:09:40] sscanf warning: No default value found.
    [15:09:40] sscanf warning: Unknown format specifier '[', skipping.
    [15:09:40] sscanf warning: Unknown format specifier '5', skipping.
    [15:09:40] sscanf warning: Unknown format specifier '0', skipping.
    [15:09:40] sscanf warning: Unknown format specifier ']', skipping.
    [15:09:40] sscanf warning: Format specifier does not match parameter count.
    schreibe ich aber ein text rein kommt die meldung nicht
    Wie macht man es jetzt richtig?

    wo ne schrank von unten nach oben rotiert? also vertikal?


    die schranke geht auf wie es eine echte auch macht?


    Bisher geplant ist:

    • Das wie Hauke schon schrieb nur nenn ich die Funktion auf SetSchranke um wenn man die manuell öffnen/schließen will.
    • Der fehler das die sich drehen kann wurde behoben
    • Geschwindigkeit bei der ersellung kann man mit angeben (optimaler wert bleibt aber 0.005
    • Das man die schranken vertikal öffnen/schließen kann (wie ich das mache is mir noch nen rätsel da ich einiges beachten muss :D

    HORIZONTAL / VERTIKAL gibt an, ob die Schranke horizontal oder vertikal steuert


    Das versteh ich gerade nicht bzw kann mir daunter jetzt nichts denken


    Das mit den Open/close hatte ich erst vorgehabt dann aber doch seingelassen :D
    Mit den Speed ist auch so eine sache das 0.005 ist schon die optimale geschwindigkeit
    wenn da einer ne 1 oder so reinschreibt, dann ist die schranke schlagartig offen

    Hallo miteinander


    Da ich etwas Langeweile hatte und da einige in den letzten Tagen probleme mit schranken hatten, dachte ich mir. "hm wiso nicht mal eine Include dafür machen?"
    Gedacht und Getan


    Mit der Include könnt ihr einfach schranken erstellen ohne Probleme.
    Es ist vom Prinzip her wie Objecte erstellen hier mal die Funktionen:
    native CreateSchranke(objectid, Float:x, Float:y, Float:z, Float:rx, Float:ry, Float:rz, Float:DrawDistance = 0.0, Float:Speed = 0.005, bool:hori_verti = false, bool:Left_Right = false);//Schranke wird erstellt
    native MoveSchranke(schrankenid);//Schranke öffnen/schließen (Automatisch)
    native DestroySchranke(schrankenid);//Schranke löschen
    native SetSchranke(schrankenid, bool:openclose);//Schranke manuell öffnen/schließen (true = offen, false=geschlossen)
    native IsPlayerInRangeOfSchranke(playerid,schrankenid,Float:range);//Abfrage ob Spieler XX in der nähe der schranke ist


    Zu der erklärung was CreateSchranke kann, hier mal ein kleines Muster:
    ~> objectid = Die ID des Objektes
    ~> X,Y,Z,rX,rY,rZ = Die coordinaten (Wichtig! alles im geschlossenen zustand angeben!)
    ~> DrawDistance = Die Distance ab wo man das Object sehen kann
    ~> Speed = geschwindigkeiten das 0.005 ist Optinal für schranken (bei toren oder Türen könnt ihr es selber entscheiden)
    ~> hori_verti = false - schranke geht nach oben | true - aufdrehen lassen für Türen etc
    ~> Left_Right = false - Links | true - rechts (Das drehen)


    Ich habe das zum Testen alles so gemacht, daher könnt ihr euch darauf orientieren
    //Global
    new schranke;//um die ID festzuhalten die die schranke hat
    //Funktionen für Schranken
    public OnGameModeInit()
    {
    schranke = CreateSchranke(968, 997.11, 1707.54, 10.62, 0.00, 90.00, 90.00);//schranke wird erstellt
    return 1;
    }
    //Funktionen für Türen oder desgleichen:
    public OnGameModeInit()
    {
    schranke = CreateSchranke(968, 997.11, 1707.54, 10.62, 0.00, 90.00, 90.00, 0.0, 0.01, true, false);//Tür oder Tor wird erstellt
    return 1;
    }


    public OnPlayerCommandText(playerid, cmdtext[])
    {
    if (strcmp("/schranke", cmdtext, true, 10) == 0)
    {
    if(!IsPlayerInRangeOfSchranke(playerid,schranke,10.0))return SendClientMessage(playerid,-1,"Hier ist keine schranke");//Abfragen ob er in der nähe von schranke XX ist
    MoveSchranke(schranke);//schranke geht auf/zu ganz sanft
    //Alternativ
    SetSchranke(schranke, true);//schranke öffnet
    //Oder
    SetSchranke(schranke, false);//schranke schließt
    return 1;
    }
    if (strcmp("/removeschranke", cmdtext, true, 10) == 0)
    {
    DestroySchranke(schranke);//schranke wird gelöscht
    return 1;
    }
    return 0;
    }
    Wie ihr sehen könnt ist der Umgang recht einfach und ich hoffe das jeder damit zurechtkommt :D


    Pastebinlink: http://pastebin.com/raw.php?i=PP4ErwhE
    Download im Anhang


    Sollte einer Fragen zu den System haben oder Probleme, kann er dies hier im Theard melden ich werde mich dann darum kümmern.
    Die Include ist so angepasst, das die erkennt ob ein streamer genutzt wird oder nicht ;)
    Das limit der schranken liegt bei 300 (das sollte eig vollkommen reichen)


    Die Installation macht ihr so:
    include downloaden, unter Pawno/include einfügen und oben im Script das einfügen:
    (Am besten unter den Streamer wenn ihr den Nutzt
    #include B_Schranke


    Ich hoffe, das sie euch gefällt und feedback ist immer erwünscht ;)


    Infos
    +Fehler bei den Türen Behoben und den Code Optimiert


    !! Hinweis !!
    Schranken und Türen im Geschlossenen zustand erstellen lassen!

    du könntest es so machen:
    stock IsAMemberFromFraktion(vehicleid)
    {
    for(new j = 0;j<sizeof lspdcars;j++)if(vehicleid == lspdcars[j])return 1;
    //weitere als muster das noch
    /*
    for(new j = 0;j<sizeof mediccars;j++)if(vehicleid == mediccars[j])return 2;//return 2 da ich mal sage das es Fraktion 2 ist
    */
    return 0;//0 wenn er nix ist
    }


    //Die anwendung dann so:
    if(IsAMemberFromFraktion(GetPlayerVehicleID(playerid)) != PlayerInfo[playerid][pMember])
    return SendClientMessage(playerid, -1, "Nein du darfst das nicht");
    //command

    das fällt mir auf der stelle ein nach dein Muster im ersten Post
    stock DarfErDas(playerid)
    {
    switch(PlayerInfo[playerid][pLeader])
    {
    case 1..6:return 1;//1-6 returnt er 1
    }
    return 0;//return 0 wenn er nix darf
    }


    Anwendung


    if(!DarfErDas(playerid))return SendClientMessage(playerid,-1,"Das darfst du nicht");

    Ich hab hier was
    lightEffect(vid)
    {
    new xx[7];
    GetVehicleParamsEx(vid,xx[0],xx[1],xx[2],xx[3],xx[4],xx[5],xx[6]);
    new andas=((xx[1]==-1||xx[1]==0)?(1):(0));
    SetTimerEx("lightEffectEx",100,false,"dd",vid,andas);
    SetTimerEx("lightEffectEx",600,false,"dd",vid,xx[1]);
    SetTimerEx("lightEffectEx",1100,false,"dd",vid,andas);
    SetTimerEx("lightEffectEx",1600,false,"dd",vid,xx[1]);
    }


    forward lightEffectEx(vid,stt);
    public lightEffectEx(vid,stt)
    {
    new xx[7];
    GetVehicleParamsEx(vid,xx[0],xx[1],xx[2],xx[3],xx[4],xx[5],xx[6]);
    SetVehicleParamsEx(vid,xx[0],stt,xx[2],xx[3],xx[4],xx[5],xx[6]);
    }
    wenn du das Auto lockst einfach das reinschreiben:
    lightEffect(vehicleid);

    erstellen = INSERT INTO tabelle (werta) VALUE (inhalt)
    Laden ist alles mit SELECT xx FROM Tabelle WHERE userid = 5555
    Speichern = UPDATE Tabelle SET level = 1500, Geld = -1500 WHERE userid = 5555


    Als muster
    Ich würd das laden bei der Menge entwerder mit sscanf machen oder mit den R7 plugin von Blue G

    Naja ich finds auch nicht schön
    Mir gefällt da das WBB3 besser auch vom Aussehen her ist das 3 besser..

    Das beweise mir doch erstmal...


    Gut machen wir mal
    sagen wir 10 Spieler sind Admins
    Du führst den command aus
    wenn er den namen holen soll, lässt du noch in einer extra funktion den namen returnen.
    machst du es direkt in den admins command, ist es nen tack schneller als den namen in einer extra Funktion zu returnen
    Und mein nicht das ich unrecht habe aber die Funktion ist schwachsinnig

    stock GetPlayerNameEx(playerid)
    {
    new PlayerName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,PlayerName,sizeof PlayerName);
    return PlayerName;
    }

    Wiso postet ihr immer so ein Müll?
    Einfach GetPlayerName direkt auslesen das is schonender als so ein müll..


    Und das ihr hier fertige Codes postet ist auch nicht richtig
    Wo lernt er denn da was?
    Richtig nirgends....


    und man könnte es auch mit switch und case machen anstatt hunderte von if abfragen