Beiträge von Simon

    Guten Tag


    Ich möchte gerne einen Drogendealer ermöglichen Drogen an Bürger zu verkaufen. Nun würde alles super klappen, doch damit es nicht lauter beschwerden gibt, möchte ich das gerne so machen das der Spieler erst ein Angebot vom DrogenDealer bekommt und sobald er das Angebot akzeptiert erst die Drogen bekommt und der DrogenDealer das Geld.
    Nun weiß ich nicht genau wie ich das machen muss, mit dem akzeptieren. Ich habe bereits die Anzahl und den Preis definiert, den ich einfach in dem /accept befehl abfragen muss. doch sobald man es akzeptiert soll das Geld und die Nachricht an den Spieler gehen der dem Spieler die Drogen angeboten hat. wenn ich nun eine Variable erstelle:
    new test[MAX_PLAYERS]; und sobald der DrogenDealer dem Spieler Drogen anbietet die Variable auf 1 stelle test[playerid] = 1; und dann bei den /accept mit einer for-schleife abfrage abfrage von wem die variable auf 1 ist if(test[i] == 1) return bla; dann wird die nachricht an jedem geschickt der gerade einem Drogen angeboten hat und nicht an dem der genau diese Person diese Drogen mit dem Preis angeboten hat, außerdem würde dann Jeder das Geld bekommen.


    Ich hoffe ihr wisst was ich meine. der Spieler der anbietet soll eine Nachricht + das Geld bekommen und die Drogen sollen bei ihm abgezogen werden, wenn der Kunde annimmt.


    hier mein scriptausschnitt:


    new danzahl[MAX_PLAYERS],dpreis[MAX_PLAYERS];
    dcmd_selldrugs(playerid,params[])
    {
    new pID, anzahl, preis;
    if(sscanf(params, "udd", pID, anzahl, preis))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Benutzte /selldrugs [playerid] [Anzahl] [Preis]");
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Ungültige Id!");
    }
    if(gTeam[playerid] != 4)
    {
    return 0;
    }
    if(gTeam[pID] == 4)
    {
    return SendClientMessage(playerid,0xFF0000FF,"Du kannst keinem DrogenDealer Drogen verkaufen!");
    }
    if(playerid == pID)
    {
    return SendClientMessage(playerid,0xFF0000FF,"Das macht keinen Sinn!");
    }
    if(anzahl< 0 || anzahl>Spieler[playerid][Drogen])
    {
    new str[125];
    format(str,sizeof(str),"Du kannst maximal %d Drogen verkaufen!",Spieler[playerid][Drogen]);
    return SendClientMessage(playerid,0xFF0000FF,str);
    }
    if(Spieler[pID][Drogen] >= 50)
    {
    return SendClientMessage(playerid,0xFF0000FF,"Spieler hat genug Drogen!");
    }
    if(preis<anzahl*5 || preis>anzahl*10)
    {
    return SendClientMessage(playerid,0xFF0000FF,"Du kannst 1g Drogen für minimal $5 und maximal $10 verkaufen!");
    }
    else
    {
    new str1[256], str2[256], aname[MAX_PLAYER_NAME], bname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,aname,sizeof(aname));
    GetPlayerName(pID,bname,sizeof(bname));
    format(str1,sizeof(str1),"Du bietest %s %dg Drogen für $%d an.",bname, anzahl, preis);
    format(str2,sizeof(str2),"%s bietet dir %dg Drogen für $%d an, benutze /accept drugs um das angebot anzunehmen!",aname, anzahl, preis);
    SendClientMessage(playerid,türkis,str1);
    SendClientMessage(pID,türkis,str2);
    danzahl[pID] = anzahl;
    dpreis[pID] = preis;
    //hier brauch ich hilfe. wie muss das jetzt aussehen, was auf den /accept befehl übertragen wird.
    }
    return 1;
    }


    dcmd_accept(playerid,params[])
    {
    new s[256];
    if(sscanf(params, "s", s))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Benutzung: /accept [SACHE]");
    }
    else
    {
    if(!strcmp(s,"drugs",true))
    {
    Spieler[playerid][Drogen] = danzahl[playerid];
    GivePlayerMoney(playerid,-dpreis[playerid]);
    //hier brauche ich auch wieder hilfe. wie bekommt der dd nun sein geld und seine drogen abgezogen?
    }
    else
    {
    return 0;
    }
    }
    return 1;
    }


    //edit: problem gelöst.

    was habe ich nicht beachtet???


    //edit: der fehler liegt in dieser zeile: new Bar:drugs[MAX_PLAYERS] = CreateProgressBar(50.0, 300.0,_, _, 0xFFFF00FF, 20.0);


    aber was ist da falsch? habe es so wie es in dem tut steht.

    ja ich werde es mal versuchen. aber habe es noch net so ganz verstanden.. muss mir das noch ma durchlesen.


    //edit:so habe mal ein versuch gemacht. der pawn compiller kackt ab.. er compillet nicht, er kackt ab. hier alles was mit dem drogensystem zu tun hat:


    enum Sinfo
    {
    Drogen,
    Drogenpakete,
    Drogenskill
    }
    new Spieler[MAX_PLAYERS][Sinfo];


    new drogenpackets[MAX_PLAYERS];
    new drugstime[MAX_PLAYERS];
    new drogencheck[MAX_PLAYERS];
    new Bar:drugs[MAX_PLAYERS] = CreateProgressBar(50.0, 300.0, _, _, 0xFFFF00FF, 20.0);



    if(dialogid == DIALOG_REGIS)
    {
    if(response == 1)
    {
    new Spielerdatei[256];
    new SpielerName[MAX_PLAYER_NAME];
    Spieler[playerid][Drogen] = 0;
    Spieler[playerid][Drogenpakete] = 0;
    Spieler[playerid][Drogenskill] = 1;
    dini_IntSet(Spielerdatei,"Drogen",Spieler[playerid][Drogen]);
    dini_IntSet(Spielerdatei,"Drogenpakete",Spieler[playerid][Drogenpakete]);
    dini_IntSet(Spielerdatei,"Drogenskill",Spieler[playerid][Drogenskill]);
    }
    else
    {
    SendClientMessage(playerid,0xFF0000FF,"Du musst dich schon registrieren um hier zu Spielen!");
    Kick(playerid);
    }
    }
    return 1;
    }


    public Anmelden(playerid)
    {
    new Spielerdatei[256];
    new SpielerName[MAX_PLAYER_NAME];
    Spieler[playerid][Drogen] = dini_Int(Spielerdatei,"Drogen");
    Spieler[playerid][Drogenpakete] = dini_Int(Spielerdatei,"Drogenpakete");
    Spieler[playerid][Drogenskill] = dini_Int(Spielerdatei,"Drogenskill");
    return 1;
    }


    public Update(playerid)
    {
    new Spielerdatei[256];
    new SpielerName[MAX_PLAYER_NAME];
    dini_IntSet(Spielerdatei,"Drogen",Spieler[playerid][Drogen]);
    dini_IntSet(Spielerdatei,"Drogenpakete",Spieler[playerid][Drogenpakete]);
    dini_IntSet(Spielerdatei,"Drogenskill",Spieler[playerid][Drogenskill]);
    return 1;
    }


    dcmd_drogen(playerid,params[])
    {
    new s[10], anzahl;
    if(sscanf(params, "sd", s, anzahl))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Benutzte /drogen Abholen/Einlösen Anzahl");
    }
    if(gTeam[playerid] != 4)
    {
    return 0;
    }
    else
    {
    if(!strcmp(s,"abholen",true))
    {
    if(IsPlayerInRangeOfPoint(playerid,3.5,2660.4912,-1589.9127,14.0197))
    {
    if(anzahl+Spieler[playerid][Drogenpakete]>Spieler[playerid][Drogenskill]*10 || anzahl <= 0)
    {
    new str[256];
    format(str,sizeof(str),"Du kannst mit Skill %d maximal %d drogenpakete tragen!",Spieler[playerid][Drogenskill], Spieler[playerid][Drogenskill]*10);
    return SendClientMessage(playerid,0xFF0000FF,str);
    }
    else
    {
    drogenpackets[playerid] = anzahl;
    new str[256];
    format(str,sizeof(str),"Du hast %d Pakete bestellt, begebe dich zum makierten Punkt um sie abzuholen!", anzahl);
    SendClientMessage(playerid,0x00EE00FF,str);
    DisablePlayerCheckpoint(playerid);
    SetPlayerCheckpoint(playerid,2683.3813,-1561.6362,21.8555,5);
    drogencheck[playerid] = 1;
    }
    }
    }
    }
    return 1;
    }


    public OnPlayerEnterCheckpoint(playerid)
    {
    if(drogencheck[playerid] == 1)
    {
    SendClientMessage(playerid,0xFFFF00FF,"Deine Drogenbestellung kommt...");
    drogencheck[playerid] = 0;
    SetTimerEx("drogenabholen",1000,0,"i",playerid);
    TogglePlayerControllable(playerid,0);
    drugstime[playerid] = 20
    SetProgressBarValue(drugs[playerid], drugstime[playerid]);
    UpdateProgressBar(drugs[playerid], playerid);
    ShowProgressBarForPlayer(playerid, drugs[playerid])
    }
    return 1;
    }


    public drogenabholen(playerid)
    {
    if(drugstime[playerid] >= 0)
    {
    drugstime[playerid]--;
    SetProgressBarValue(drugs[playerid], drugstime);
    UpdateProgressBar(drugs[playerid], playerid);
    }
    else
    {
    DestroyProgressBar(drugs[playerid]);
    TogglePlayerControllable(playerid,1);
    DisablePlayerCheckpoint(playerid);
    new str[256]
    format(str,sizeof(str),"Du erhälts %d Drogenpakete, Löse sie auf der Drogenfarm ein!", drogenpackets[playerid]);
    SendClientMessage(playerid,0x00EE00FF,str);
    Spieler[playerid][Drogenpakete] = drogenpackets[playerid];
    drogenpackets[playerid] = 0;
    Update(playerid):
    }
    return 1;
    }


    Ich weiß nicht ob da ein tippfehler drinne ist oder ein richtig schlimmer fehler.. das habe ich jetzt mal eben schnell gemacht, da kann das gut sein das da einiges falsch ist


    wenn mir einer helfen könnte wäre es echt net.

    Guten Tag.


    Ich bin gerade dabei ein Drogensystem zu machen.
    Man fährt zu dem einen punkt und kauft sich drogenpakete. diese drogenpakete muss man nun auf einer drogenfarm einlösen um drogen zu bekommen die mann anschließend verkaufen kann.


    Nun bin ich gerade dabei den dcmd /drogen abheolen ANZAHL und /drogen einlösen ANZAHL zu scripten.


    man soll dann ein marker bekommen wo man hinfahren soll. was mir bisher noch keine probleme macht.


    wenn er nun in dem marker ist soll eine zeit ablaufen und passend dazu wie bei einem speedo so ein balken der leer wird.


    das mache ich mit textdraws. nur ich kenne mich nicht so gut mit textdraws auf und weiß nicht wie ich das mit dem balken machen soll


    könnt ihr mir das an einem beispiel zeigen? bsp: /test und ein timer von 10 sekunden und ein passender balken der nach 10 sekunden leer ist.



    das wäre echt nett wenn mir da eine rhelfen könnte


    mfg
    Simon

    beim sterben und beim ausloggen.


    wenn man gestorben ist spawnt man. deswegen wird beim sterben alles gespeichert und dann beim spawn wiedergegeben vorrausgesetzt man ist verletzt


    beim ausloggen wirds auch gespeichert, wenn man sich wieder einloggt und spawnt und man noch verletzt ist passiert das selbe wie oben genannt.


    ich glaube ich habe den fehler gefunden ich muss es nachprüfen

    ja.. aber die virtuale welt und das interior werden nicht verändert. ich muss mal testen ob sie abgespeichert werden aber sicher ist das sie nicht wiedergegeben werden.
    warum sie nicht wiedergegeben weiß ich nicht. ich habe in der .ini die virtuale welt auf "2" und das interior auf 4 (ammu) und die passende position vom ammu eingetragen.


    er wurde zu der pos hingeportet, aber net ins interior 4 und auch nicht in die virtuale welt 2.

    Guten tag


    Wenn man stirbt wird die position, das interior und die welt gespeichert. wenn er spawnt und vorher gespawnt wird, soll alles wiedergegeben werden. die position wird wiedergegeben, doch das interior und die welt bleiben gleich. hier mal ein scriptausschnitt:


    enum Sinfo
    {
    Float:posx,
    Float:posy,
    Float:posz,
    virtualw,
    interior,
    Verletzt,
    Tot
    }
    new Spieler[MAX_PLAYERS][Sinfo];


    public OnPlayerDeath(playerid, killerid, reason)
    {
    SendClientMessage(playerid,0xFF9190FF,"Du bist schwerverletzt, rufe mit /service einen Notarzt!");
    GetPlayerPos(playerid,Spieler[playerid][posx],Spieler[playerid][posy],Spieler[playerid][posz]);
    Spieler[playerid][interior] = GetPlayerInterior(playerid);
    Spieler[playerid][virtualw] = GetPlayerVirtualWorld(playerid);
    Spieler[playerid][Verletzt] = 1;
    return 1;
    }


    public OnPlayerSpawn(playerid)
    {
    if(Spieler[playerid][Verletzt] == 1)
    {
    KillTimer(todtimer1[playerid]);
    KillTimer(todtimer2[playerid]);
    SetPlayerPos(playerid,Spieler[playerid][posx],Spieler[playerid][posy],Spieler[playerid][posz]);
    SetPlayerInterior(playerid,Spieler[playerid][interior]);
    SetPlayerVirtualWorld(playerid,Spieler[playerid][virtualw]);
    TogglePlayerControllable(playerid,0);
    todtimer1[playerid] = SetTimerEx("tot1",180000,0,"i",playerid);
    Spieler[playerid][Spawn]--;
    ClearAnimations(playerid);
    ApplyAnimation(playerid,"CRACK","crckdeth2",3.0,1,1,1,1,0);
    }
    return 1;
    }

    kein gf :D


    also der fragt ab ob der spieler member nummer 9 ist oder leader nummer 9 ist.


    "wenn spieler nicht member 9 oder nicht leader 9 ist, brech vorgang ab."


    so sehe ich das script mal übersetzt


    also wenn er member 9 ODER leader 9 ist, wird der vorgang nicht abgebrochen. so wäre das gegenteil also "else".

    Guten Tag


    Ich habe gerade ein dcmd erstellt, mit denen man schwerverletzte leute heilen kann:


    dcmd_beleben(playerid,params[])
    {
    new pID, Float:x, Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);
    if(sscanf(params, "u", pID))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Benutzung: /beleben [playerid]");
    }
    if(!IsPlayerConnected(pID))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Spieler ist nicht verletzt!");
    }
    if(Spieler[pID][Verletzt] == 0)
    {
    return SendClientMessage(playerid,0xFF0000FF,"Spieler ist nicht verletzt!");
    }
    if(Spieler[playerid][Member] != 9 || Spieler[playerid][Leader] != 9)
    {
    return 0;
    }
    if(playerid == pID)
    {
    return SendClientMessage(playerid,0xFF0000FF,"Du kannst dich nicht selbst heilen!");
    }
    if(!IsPlayerInRangeOfPoint(pID,10.0,x,y,z))
    {
    return SendClientMessage(playerid,0xFF0000FF,"Spieler ist nicht in deiner Nähe!");
    }
    else
    {
    new str1[100],str2[100],aname[MAX_PLAYER_NAME],bname[MAX_PLAYER_NAME];
    GetPlayerName(playerid,aname,sizeof(aname));
    GetPlayerName(pID,bname,sizeof(bname));
    format(str1,sizeof(str1),"Du hast %s für $75 wiederbelebt!",bname);
    format(str2,sizeof(str2),"Du wurdest von %s für $75 wiederbelebt!",aname);
    KillTimer(todtimer1[pID]);
    KillTimer(todtimer2[pID]);
    ClearAnimations(pID);
    TogglePlayerControllable(pID,0);
    GivePlayerMoney(pID,-75);
    SendClientMessage(playerid,grau,str1);
    SendClientMessage(pID,grau,str2);
    }
    return 1;
    }


    alles klappt es kommen immer die nachrichten wenn bestimmte voraussetzung nicht erfüllt sind. aber sobald alles erfüllt ist, passiert nichts. weder die nachrichten kommen, noch wird er unfreezed. kein geld wird abgezogen und die animation sowie die timer bis er stirbt werden nicht beendet.


    könnte mir da einer helfen, weiß nicht wo ich da ein fehler drinne habe.


    mfg
    Simon

    ähm mappe deine objekte mit mta, die autos setzte dann per debug rein mit folgenden parametern:


    AddStaticVehicle(id,x,y,z,angle,Farbe1,Farbe2);
    AddStaticVehicleEx(id,x,y,z,angel,f1,f2,spawntime);


    ich weiß net welche form du benutzt.. aufjeden fall kannste bei dem parametern: "Farbe1", "Farbe2" die farbe einstellen.


    hier mal ne seite mit alles farben:


    http://wiki.sa-mp.com/wiki/Color_ID

    lool kenne server da gehen die 100% immer.. das ja blöd kann man iwas machen das die wirklich immer gehen bzw. die chance erhöhrt wird?

    ja okay.. soweit fast alles verstanden.


    was genau muss ich für Abdiesenummerzählen, lastvergenenummer und Nummerreadstring einsetzten?


    sonst ist alles kla..

    ouh mann -.-


    das ist soo logisch :D die camra wird hoch gesetzt und schaut auf den spieler -.-


    da hätte wirklich jeder drauf kommen könne, danke werde es gleich einbauen..


    //edit: wunderbar es klappt, eine kurze frage noch, und zwar bugt die animation, kann gut daran liegen das ich die parameter falsch gesetzt habe.. also die animation wird gestartet und wenn man dann engültig stirbt gestoppt und man wird weggeportet und die camera sicht wird eingestellt. nur ab und zu startet die animation nicht.. keine ahnung wieso..


    public OnPlayerSpawn(playerid)
    {
    if(Spieler[playerid][Verletzt] == 1)
    {
    SetPlayerPos(playerid,Spieler[playerid][posx],Spieler[playerid][posy],Spieler[playerid][posz]);
    TogglePlayerControllable(playerid,0);
    todtimer1[playerid] = SetTimerEx("tot1",180000,0,"i",playerid);
    ApplyAnimation(playerid,"CRACK","crckdeth2",3.0,1,1,1,1,0); //hier die animation
    }
    return 1;
    }