[SAMMELTHREAD] Kleine Scripting Fragen

Dein Problem konnte durch einen User gelöst werden? Bedank dich bei ihm indem du seinen Beitrag als Hilfreich markierst sowie einen Daumen oben dalässt
Wichtiger Hinweis: Bitte ändert nicht manuell die Schriftfarbe auf schwarz sondern belasst es bei der Standardeinstellung. Somit tragt ihr dazu bei dass euer Text auch bei Verwendung unseren dunklen Forenstils noch lesbar ist!

Tipp: Ihr wollt längere Codeausschnitte oder Logfiles bereitstellen? Benutzt unseren eigenen PasteBin-Dienst Link
  • Vor Monaten einmal diesen stock: Kaliber


    stock SCM(playerid, color, fstring[], {Float, _}:...) {
    new n = numargs() * 4;
    if (n == 3 * 4) return SendClientMessage(playerid, color, fstring);
    new message[128],arg_start,arg_end,i = 0;

    #emit CONST.pri fstring
    #emit ADD.C 0x4
    #emit STOR.S.pri arg_start

    #emit LOAD.S.pri n
    #emit ADD.C 0x8
    #emit STOR.S.pri arg_end

    for (i = arg_end; i >= arg_start; i -= 4) {
    #emit LCTRL 5
    #emit LOAD.S.alt i
    #emit ADD
    #emit LOAD.I
    #emit PUSH.pri
    }

    #emit PUSH.S fstring
    #emit PUSH.C 128
    #emit PUSH.ADR message
    #emit PUSH.S n
    #emit SYSREQ.C format
    i = n / 4 + 1;
    while (--i >= 0) {
    #emit STACK 0x4
    }
    return SendClientMessage(playerid, color, message);
    }


    Link zum Thread: Stock Frage/Problem Hilfesuchen bei Umsetzung


  • Möglich. Versuche mal das Wetter 0 oder 1, das sind die normalsten.


    Du kannst ja auch als Referenz das selbe Objekt nochmal daneben setzen.
    new shint = CreateObject(19377, 231.98621, 1812.54163, 13.92413, 0.00000, 0.00000, 0.00000); //wird texturiert
    SetObjectMaterial(shint, 1, 4981, "wiresetc2_las", "lasunion7", 0xFFFFFFFF);
    CreateObject(19377, 231.98621, 1802.54163, 13.92413, 0.00000, 0.00000, 0.00000); //wird nicht texturiert


    Hab das nun und bei mir sieht das so aus: http://www11.pic-upload.de/22.10.14/4u9h8nl4vlel.png

  • Öhm, der Index der texturiert werden muss ist doch die 0, ich glaube wir haben das irgendwie durcheinander gebracht. 8o
    Da du gesagt hast die 0 geht bei dir nicht, bin ich davon ausgegangen, dass das Objekt bei Index 1 texturiert wird.


    Ohne <---> Mit


    Code:
    new shint = CreateObject(19377, 231.98621, 1812.54163, 13.92413, 0.00000, 0.00000, 0.00000); //wird texturiert
    SetObjectMaterial(shint, 0, 4981, "wiresetc2_las", "lasunion7", 0xFFFFFFFF);
    CreateObject(19377, 231.98621, 1802.54163, 13.92413, 0.00000, 0.00000, 0.00000); //wird nicht texturiert


    Jetzt sollte es aber passen.


  • Jetzt gehts.

  • Hallo com ich habe eine kleine Frage unswa wenn ich ein Spieler mit /setrang 6 den Rang 6 gebe will ich das er dann nicht automatisch leider ist sondern halt ganz normal Rang 6 und er wenn man mit /makeleader jemanden eine Rang gibt das er dann leider ist wie mache ich das ?


    Mit Freundlichen Grüßen
    Snake ♤

  • Jeffry:


    habe zurzeit noch keine /giverang Befehl
    bei dem giverang Befehl soll auch dann nur abgefragt werden ob der Spieler Leader ist und ob der Spieler dem er den Rang geben will in seiner Frak ist und dann dem Spieler den Rang geben mehr nicht


    ocmd:makeleader(playerid, params[])
    {
    if(!isAdmin(playerid,1337))return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
    new pID, fID;
    if(sscanf(params,"ui",pID,fID))return SendClientMessage(playerid, ROT, " Benutze: /makeleader [playerid] [fraktid]");
    if(fID >= sizeof(fInfo))return SendClientMessage(playerid,ROT, " Fraktion existiert nicht.");
    sInfo[pID][fraktion] = fID;
    sInfo[pID][rang] = 6;
    new string [128];
    format(string,sizeof(string), "Admin: %s hat dich zum Leader der Fraktion %s gemacht",getPlayerName(playerid), fInfo[fID][f_name]);
    SendClientMessage(pID, LEUCHTENDBLAU, string);
    SendClientMessage(pID, ROT,"Du kannst mit /help deine neuen Fraktionsbefehle betrachten.");
    SendClientMessage(pID, ROT,"Du hast nun eine 4 Wöchige Leader Pflicht");
    SendClientMessage(pID, ROT,"Wenn du vor Ablauf der Frist rausgeworfen wirst,bekommst du eine Fraksperre für den Rest der Zeit");
    format(string,sizeof(string),"Du hast einen Spieler %s zum Leader der Fraktion %s gemacht",getPlayerName(pID), fInfo[fID][f_name]);
    SendClientMessage(playerid,ROT, string);
    savePlayer(pID);
    return 1;
    }

    Einmal editiert, zuletzt von snake112 ()

  • Dann so:
    ocmd:makeleader(playerid, params[])
    {
    if(!isAdmin(playerid,1337))return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
    new pID, fID;
    if(sscanf(params,"ui",pID,fID))return SendClientMessage(playerid, ROT, " Benutze: /makeleader [playerid] [fraktid]");
    if(fID >= sizeof(fInfo))return SendClientMessage(playerid,ROT, " Fraktion existiert nicht.");
    sInfo[pID][fraktion] = fID;
    sInfo[pID][leader] = 1; //=================>Neu<===================
    new string [128];
    format(string,sizeof(string), "Admin: %s hat dich zum Leader der Fraktion %s gemacht",getPlayerName(playerid), fInfo[fID][f_name]);
    SendClientMessage(pID, LEUCHTENDBLAU, string);
    SendClientMessage(pID, ROT,"Du kannst mit /help deine neuen Fraktionsbefehle betrachten.");
    SendClientMessage(pID, ROT,"Du hast nun eine 4 Wöchige Leader Pflicht");
    SendClientMessage(pID, ROT,"Wenn du vor Ablauf der Frist rausgeworfen wirst,bekommst du eine Fraksperre für den Rest der Zeit");
    format(string,sizeof(string),"Du hast einen Spieler %s zum Leader der Fraktion %s gemacht",getPlayerName(pID), fInfo[fID][f_name]);
    SendClientMessage(playerid,ROT, string);
    savePlayer(pID);
    return 1;
    }


    ocmd:giverang(playerid, params[])
    //...siehe zwei Posts weiter unten...


    Im enum fügst du den Stat "leader" hinzu.


    Der Spieler ist nur dann Leader, wenn er auch Leader ist.

    3HZXdYd.png

    Einmal editiert, zuletzt von Jeffry ()

  • Jeffry:
    Danke für deine schnelle Hilfe
    könntest du dann das so machen ?
    bei dem giverang Befehl soll auch dann nur abgefragt werden ob der Spieler Leader ist und ob der Spieler dem er den Rang geben will in seiner Frak ist und dann dem Spieler den Rang geben mehr nicht


    #edit
    muss ich dann bei der spieler tabelle wo ich den spieler speichere Leader hinzufügen ?


    Mit Freundlichen Grüßen
    Snake ♤

    Einmal editiert, zuletzt von snake112 ()

  • ocmd:giverang(playerid, params[])
    {
    if(sInfo[playerid][leader] == 0)return SendClientMessage(playerid,ROT,"Info: Du bist dazu nicht befugt!");
    new pID, rID;
    if(sscanf(params,"ui",pID,rID))return SendClientMessage(playerid, ROT, " Benutze: /giverang [playerid] [rangid]");
    if(sInfo[playerid][fraktion] != sInfo[pID][fraktion])return SendClientMessage(playerid,ROT, " Spieler nicht in deiner Fraktion.");
    sInfo[pID][rang] = rID;
    new string [128];
    format(string,sizeof(string), "Admin: %s hat dich zum Leader der Fraktion %s gemacht",getPlayerName(playerid), fInfo[sInfo[playerid][fraktion]][f_name]);
    SendClientMessage(pID, LEUCHTENDBLAU, string);
    SendClientMessage(pID, ROT,"Du kannst mit /help deine neuen Fraktionsbefehle betrachten.");
    SendClientMessage(pID, ROT,"Du hast nun eine 4 Wöchige Leader Pflicht");
    SendClientMessage(pID, ROT,"Wenn du vor Ablauf der Frist rausgeworfen wirst,bekommst du eine Fraksperre für den Rest der Zeit");
    format(string,sizeof(string),"Du hast einen Spieler %s zum Leader der Fraktion %s gemacht",getPlayerName(pID), fInfo[sInfo[playerid][fraktion]][f_name]);
    SendClientMessage(playerid,ROT, string);
    savePlayer(pID);
    return 1;
    }
    Also so?


    Ja, musst du. Es ist ein neuer Stat, der dementsprechend gespeichert werden muss.

  • Weist du warum?


    Achso...nun gut, dann führt das wohl in deinem Fall zu einem Memory Leak :S


    Ich habe herausgefunden warum der Fehler auftritt, dieser ist sogar ziemlich leicht zu beheben. Das Problem ist ein Fehler im Compiler (der hat ja bekanntlich so einige). Und zwar, wenn man "#emit SYSREQ.C" für eine Funktion (in diesem Fall "format") verwendet, jedoch diese Funktion nicht vor (entsprechend der Zeile im Code) der Vewendung des "SYSREQ.C" Befehls verwendet worden ist (was ja bei dir der Fall ist), dann stürzt der Compiler ab.


    Beheben kannst du es ziemlich einfach, indem du es einfach verwendest. Füge das hier vor dem stock SCM ein:
    forward _Fix_format();
    public _Fix_format() {
    new _str[2]; format(_str, 2, "");
    }


    Dann funktioniert es.

  • Danke! Jeffry



    Andere Frage, kann das so funktionieren? :


    Oben im Script:
    #define FILTERSCRIPT
    #define IsInFrak(%0) CallRemoteFunction("GetFrak","i",%0)


    //__________ VARIABLEN __________
    new livestat[MAX_PLAYERS];
    new liveangebot[MAX_PLAYERS];
    new liveangebotID;
    new breaklive;


    In OnPlayerText:
    if(livestat[playerid] == 1)
    {
    new name[128];
    GetPlayerName(playerid,name,sizeof(name));
    if(breaklive == 0)
    {
    new str[128];
    if(IsInFrak(playerid) == 19)
    {
    format(str,sizeof(str),"[NR] Live Reporter %s: %s",name,text);
    SendClientMessageToAll(-1,str);
    return 1;
    }
    format(str,sizeof(str),"[NR] Live Spieler %s: %s",name,text);
    SendClientMessageToAll(-1,str);
    return 1;
    }
    else
    {
    new str[128];
    format(str,sizeof(str),"%s sagt: %s",name,text);
    SMessage(playerid,-1,str,20);
    return 1;
    }
    }


    Ganz unten im Script:
    stock SMessage(playerid,farbe,text[],Float:umkreis)
    {
    new Float:xm, Float:ym, Float:zm;
    if(GetPlayerPos(playerid,xm,ym,zm))
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    if(IsPlayerConnected(i) && (i==playerid || IsPlayerInRangeOfPoint(i,umkreis,xm,ym,zm)))
    SendClientMessage(i,farbe,text);
    return 1;
    }
    return 0;
    }


    //__________ BEFEHLE __________


    ocmd:live(playerid,params[])
    {
    if(IsInFrak(playerid) == 19)
    {
    new pID;
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,-1,"[BENUTZUNG]: /live [PlayerID/PlayerName]");
    SendClientMessage(pID,-1,"Dir wurde ein Live Gespräch angeboten! Verwende /annehmen!");
    liveangebot[pID] = 1;
    liveangebotID = playerid;
    return 1;
    }
    return 1;
    }


    ocmd:annehmen(playerid,params[])
    {
    if(liveangebot[playerid] == 1)
    {
    new pID = liveangebotID;
    livestat[playerid] = 1;
    livestat[pID] = 1;
    SendClientMessage(playerid,-1,"Live Chat wurde gestartet!");
    SendClientMessage(pID,-1,"Live Chat wurde gesttartet!");
    return 1;
    }
    SendClientMessage(playerid,-1,"Du hast kein Angebot für einen Live Chat bekommen!");
    return 1;
    }



    ocmd:breaklive(playerid,params[])
    {
    if(IsInFrak(playerid) == 19)
    {
    breaklive = 1;
    for(new i; i < MAX_PLAYERS; i++)
    if(livestat[i] == 1)return SendClientMessage(playerid,-1,"Das Live Gespräch wurde unterbrochen!");
    }
    return 1;
    }



    Bin mir nicht sicher ob es funktionieren kann, kann es leider nicht testen da ich alleine bin !

  • Bin mir nicht sicher ob es funktionieren kann, kann es leider nicht testen da ich alleine bin !


    Ich bin doch kein Semantikanalysator. :D
    Kann schon sein, dass es geht. Teste es doch einfach. Dass du alleine bist macht doch nichts, du kannst es problemlos alleine testen.


    Und zwar so:
    Erstelle dir ein zweites Windows-Benutzerkonto und gehe damit in deinen SA-MP Server, als Spieler. Dann gehst du auf "Benutzer wechseln" und nimmst deinen normalen Benutzeraccount. Damit gehst du auch in deinen Server, und schon bist du zu zweit. So einfach geht das. :thumbup:



    Oder: Setze dir eine Virtuelle Maschine auf, dann kannst du das auch machen.
    Oder: Nutze einen zweiten PC (so mache ich es immer, ich teste mit PC und Notebook, ggf. kommt noch das Win8.1 Tablet dazu).

  • Oder: Setze dir eine Virtuelle Maschine auf, dann kannst du das auch machen.
    Oder: Nutze einen zweiten PC (so mache ich es immer, ich teste mit PC und Notebook, ggf. kommt noch das Win8.1 Tablet dazu).

    Oder benutze ne Sandbox (Sandboxie z.B.) - Sollte eigentlich auch funktionieren bei GTA. Fenstermodus halt und np.


    Mein CS:GO Server: 62.75.168.39:27016


    Ich bin so hungrig, dass ich vor lauter Durst nicht weiß, was ich rauchen soll - so müde bin ich!
    Freedom is just another word for 'Nothing left to lose'

  • Hallo com,
    ich habe ein paar kleine Fragen


    1 wenn ein Spieler joint will das dort steht du bist Member/Leader der Fraktion %s


    2 Du Bist z.b Owner
    Supporter Rang 1 = T-Supporter
    Supporter Rang 2 = Supporter
    Admin Rang 1 = Azubi-Admin
    Admin Rang 2 = Admin *2*
    Admim Rang 3 = Admin *3*
    Admin Rang 1337 = H-Admin
    Admin Rang 2000 = Scripter
    Admin Rang 2002 = Owner


    enum playerInfo{
    alevel,
    slevel,
    fraktion,
    rang


    sInfo[pID][leader] = 1;
    }


    3 wenn Ich alle unbenutzten Cars wo niemand drinne sitzt respawnen will muss ich das so schreiben ?
    als ocmd:carrespawn
    for(new i = 1; i <= MAX_VEHICLES; i++)
    {
    SetVehicleToRespawn(i);
    }


    4 will ich für die Admin befehle machen wie /frccop für jede fraktion das die Cars der Fraktion respawn werden wo niemand drinne sitzt
    dazu muss ich dann eine schleife machen ? aber wie ? brauche nur ein Beispiel din anderen bekomme Ich selber hin
    meine varriable für die com Cars
    policeCars


    Jeffry:


    Mit Freundlichen Grüßen
    Snake ♤

  • Für sowas mach doch bitte einen Thread auf, das ist keine kleine Scripting-Frage mehr, das sind Scriptwünsche für einen halben Gamemode.


    1.) Versuche es erst mal sebst, nutze "format" um den String zu formatieren.
    2.) Was willst du?
    3.) Ja, aber du musst noch fragen, ob jemand in dem Fahrzeug ist, also für jedes Fahrzeug noch eine Schleife durch alle Spieler, dann mit IsPlayerInVehicle prüfen.
    4.) Eine Schleife wie bei 3. und dazu abfragen, ob die Fahrzeug ID einem Fraktionsfahrzeug entspricht. Auch hier, fange erst mal mit dem Code an.


    Für die Zukunft: Eins nach dem anderen. Du hast hier vier verschiedene Dinge, das ist doch klar, dass du da nicht mehr durchblickst. Mache erst eins, dann zwei, nicht alles auf einmal.
    Ebenso beim Fragestellen hier. Stelle nicht alle Fragen auf einmal, wenn die nichts miteinander zu tun haben, das gibt nur ein riesen Chaos. Für sowas erstelle bitte einen separaten Thread.


    => Fange jetzt erst mal mit dem Code für 1 an, etwas Eigeninitiative sollte zu erwarten sein, und wenn du daran scheiterst, dann poste den Code und frage explizit nach.

  • Ist es SAMP Technisch Möglich Leichen zu verschieben?


    Also das ich ein Spieler den ich getötet habe tragen kann, mich bewege und ihn wieder ablege und ihn dann wieder looten kann..


    Hat jemand auch eventuell eine passende Animation?


    Brauche kein Code, nur ne Antwort :p


    Mit freundlichen Grüßen
    JustMe.77 8)

  • do.de - Domain-Offensive - Domains für alle und zu super Preisen