Beiträge von .HellYeah

    Na Hallo,


    Ich biete hier meinen Schwarzmarkt zum Verkauf an.


    Verkaufspreis:
    5 Euro(Wer zuerst kommt mahlt zuerst)


    Verkaufsart:
    PSC Only


    Kontaktierung:
    Hier im Forum per Privater Nachricht!



    Link zur Präsentation:
    [ MAP ][Präs. ] Schwarzmarkt (v3) by HellYeah



    PS:
    Bewertungen/Meinungen gehören in den Präsentations Thread nicht hierhin!



    [Folgendes muss im Thema enthalten sein und darf nicht entfernt werden:]
    ______
    Unverbindlicher Hinweis: Die Sicherheit einer Transaktion kann am besten durch die Einschaltung eines Mittelsmannes gewährleistet werden. Weitere Informationen dazu gibt es hier.

    Wer dir Unbegrentzes Volumen Anbietet ist schon bekloppt.


    Ich bin zu Fyve(Oder wie das heisst) Gewechselt und selbst wenn meine Flat ausgelaufen ist habe ich immernoch H(Und ich wohne in nem Richtigen "Kaff")

    Hallo erstmal,




    Ich will euch nun zeigen wie man ein Handy System erstellt dazu fangen wir erstmal mit einem enum an diesen schreiben wir am besten Unter die Includes, aber zuvor noch die Benötigen Includes:

    #include <a_samp>
    #include <ocmd>

    Jetzt zum Enum:

    // Handy System //
    enum AHandy
    {
    AnruferID
    }
    new Anrufer[MAX_PLAYERS][AHandy];
    new Telefoniert[MAX_PLAYERS];
    new HandyKlingelt[MAX_PLAYERS];

    // Handy System Ende //


    Erklärung(en):
    Der Enum sorgt dafür das ihr es nicht jedesmal neu Definieren müsst und es ist MMn Übersichtlicher.
    Anrufer = Der Spieler der uns Anruft
    Telefoniert = Falls man Gerade Telefoniert soll man nicht nochmal Angerufen werden können.
    HandyKlingelt = Bedeutet soviel das man jetzt /abheben tippen kann.


    Jetzt gehen wir unter:

    public OnPlayerText(playerid, text[])


    Und dann tippen wir erstmal diesen Befehl ein:

    public OnPlayerText(playerid, text[])
    {
    if(Telefoniert[playerid] == 1)
    {
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(Anrufer[i][AnruferID] == playerid)
    {
    new str[128], GetName[MAX_PLAYER_NAME];
    GetPlayerName(playerid,GetName,sizeof(GetName));
    format(str,128,"Handy %s: %s",GetName,text);
    SendClientMessage(playerid,GRUEN,str);
    SendClientMessage(i,GRUEN,str);
    return 0;
    }
    }
    }

    if(strlen(text) > 128) return 0;

    new Float:x, Float:y, Float:z;
    GetPlayerPos(playerid,x,y,z);
    new string[280];
    format(string,sizeof string,"%s sagt: %s",SpielerName(playerid),text);
    for(new i=0; i<MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(IsPlayerInRangeOfPoint(i,20,x,y,z))
    {
    SendClientMessage(i,GRAU,string);
    }
    }
    }
    return 0;
    }


    Erklärung(en):
    if(Telefoniert) == 1) = if Bedeutet soviel wie "Falls" oder "Wenn" das heisst wenn unser Spieler gerade Telefoniert dann ist die Bedingung erfüllt und es kann weitergehen ansonsten passiert garnichts.
    format = Formartiert den zuvor Definierten String
    SendClientMessage(i,BLAU,string) = Sendet den String zum Anrufer
    SendClientMessage(playerid,BLAU,string) = Man liest was man selber geschrieben hat
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    if(strlen(text) < 128) return 0; = Wenn der Spieler zuviel geschrieben hat passiert nichts.
    GetPlayerPos = Findet die Aktuelle Position des Absenders heraus mit den zuvor Definierten Floats
    format = Formatiert den String2
    if(IsPlayerConnected(i)) = Prüft ob ein Connnecter Spieler Online ist
    if(IsPlayerInRangeOfPoint(playerid)) = Wenn ein Spieler Online ist(Also die obrige Bedingung erfüllt wird) prüft diese if Abfrage ob jemand in der Nähe des Angerufenen ist.
    SendClientMessage(i,BLAU,string2) = Wenn beide Bedingungen erfüllt sind wird eine Nachricht an alle Spieler in einer Entfernung von 20 Metern gesendet.


    So jetzt brauchen wir noch ein paar Befehle fangen wir doch mit dem Anrufen Befehl an:

    ocmd:anrufen(playerid, params[])
    {
    new pID, string[128], string2[128];
    if(sscanf(params,"u",pID))return SendClientMessage(playerid,ROT,"/anrufen [ID]");
    if(IsPlayerConnected(pID))
    {
    if(Telefoniert[pID] == 1)
    {
    return SendClientMessage(playerid,GRAU,"Besetzt...");
    }
    else
    {
    format(string,sizeof(string),"Du wirst von %s angerufen. Benutze /p um abzunehmen.",SpielerName(playerid));
    SendClientMessage(pID,GELB,string);
    format(string2,sizeof(string2),"Du rufst %s an, warte einen Moment.",SpielerName(pID));
    SendClientMessage(playerid,GELB,string2);
    format(string,sizeof(string),"Das Handy von %s klingelt...",SpielerName(pID));
    ProxDetector(40.0, pID, string, GELB,GELB,GELB,GELB,GELB);
    HandyKlingelt[pID] = 1;
    Telefoniert[playerid] = 1;
    Anrufer[pID][AnruferID]= playerid;
    Anrufer[playerid][AnruferID]= pID;
    return 1;
    }
    }
    return 1;
    }


    Erklärung(en):
    pID = Der andere Spieler.
    Der Sscanf Teil = Sorgt dafür das wenn man einen Befehl falsch eintippt eine Nachricht ausgegeben wird wie man es Richtig macht.
    IsPlayerConnected = Fragt ab ob der Spieler überhaupt Connected ist
    Telefoniert & Die Mailbox = Sollte der Spieler schon Telefonieren kommt diese Nachricht
    else = Falls es anders ist
    format = Formatiert den String
    SendClientMessage = Sendet die Nachricht
    (2.) format = Formatiert den String für den Anrufer
    (2.) SendClientMessage = Sendet die Message für den Anrufer
    (3.) Format = Formatiert den String nochmals
    ProxDector Teil(Der Stock dazu ist ganz unten) = Alle Spieler in der Umgebung des Angerufenen kriegen die Nachricht das sein Handy klingelt
    BereitZumAbheben & TelefoniertGerade = Setzt beides auf Eins um Bugs zu vermeiden und damit die anderen Befehle möglich sind.



    So was währe ein Anruf Befehl ohne Befehl zum Abheben?

    ocmd:abheben(playerid, params[])
    {
    if(HandyKlingelt[playerid] == 1)
    {
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(Anrufer[i][AnruferID] == playerid)
    {
    new string[128],string2[128], xname[MAX_PLAYER_NAME], xname2[MAX_PLAYER_NAME];
    GetPlayerName(i,xname,sizeof(xname));
    GetPlayerName(playerid,xname2,sizeof(xname2));
    format(string,sizeof(string),"Du hast den Anruf von %s angenommen. Tippe /auflegen um aufzulegen.",xname2);
    format(string2,sizeof(string2),"%s hat abgehoben. Tippe /auflegen um aufzulegen.",xname);
    SendClientMessage(playerid,GRAU,string);
    SendClientMessage(i,GRAU,string2);
    SetPlayerSpecialAction(i,SPECIAL_ACTION_USECELLPHONE);
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_USECELLPHONE);
    Telefoniert[i] = 1;
    Telefoniert[playerid] = 1;
    HandyKlingelt[i] = 0;
    return 1;
    }
    }
    }
    return 1;
    }


    Erklärungen:
    if(HandyKlingelt == 1) = Fragt ab ob der Spieler überhaupt einen Anruf hat.
    for Schleife = Erstellt das "i"
    die Formats = Formatieren die Strings
    Die SendClientMessages = Senden Die Nachrichten Ab
    SetPlayerSpecialAction = Solang der Spieler zu Fuß ist wird die Aktion ausgeführt das er das Handy aus der Tasche holt und Abnimmt.
    Telefoniert = Wird auf 1 Gesetzt.
    BereitZumAbheben = Sorgt dafür das man nicht zweimal Abheben kann(Bzw Das keine Bugs da sind).


    Doch plötzlich wird euer GesprächsPartner zur Nervensäge ihr wollt ihn Abwimmeln ... wozu gibts den /auflegen Befehl?

    ocmd:auflegen(playerid, params[])
    {
    if(Telefoniert[playerid] == 1)
    {
    for(new i=0; i<GetMaxPlayers(); i++)
    {
    if(Anrufer[i][AnruferID] == playerid)
    {
    new string[128],string2[128],xname[MAX_PLAYER_NAME];
    GetPlayerName(i,xname,sizeof(xname));
    format(string,sizeof(string),"Der Anruf mit %s ist beendet.",xname);
    format(string2,sizeof(string2),"Es wurde aufgelegt...");
    SendClientMessage(playerid,GRAU,string);
    SendClientMessage(i,GRAU,string2);
    SendClientMessage(playerid,ROT,"Das Gespräch hat 50$ Gekostet!");
    SetPlayerSpecialAction(i,SPECIAL_ACTION_STOPUSECELLPHONE);
    SetPlayerSpecialAction(playerid,SPECIAL_ACTION_STOPUSECELLPHONE);
    Telefoniert[i]= 0, Telefoniert[playerid]= 0;
    HandyKlingelt[playerid]= 0, HandyKlingelt[i]= 0;
    GivePlayerMoney(playerid,-50);
    GivePlayerMoney(playerid,-50);
    return 1;
    }
    }
    }
    return 1;
    }


    Erklärung(en):
    Ich glaube den if Teil habt ihr jetzt verstanden ...
    Den SendClientMessage&Format Teil auch ...
    SetPlayerSpecialAction = Stoppt die Animation wieder.
    Das mit dem Telefoniert usw. denke ich mal auch.



    Als kleinen Bonus noch einen SMS Befehl, den ihr euch selber machen dürft ;)
    Für die die es Ernsthaft Versuchen und nicht schaffen:

    Spoiler anzeigen

    ocmd:sms(playerid,params[])
    {
    new text[128], string[128], string2[128], pID, xname[MAX_PLAYER_NAME];
    if(sscanf(params,"us",pID,text))
    {
    return SendClientMessage(playerid,ROT,"/sms [ID] [Text]");
    }
    if(IsPlayerConnected(playerid))
    {
    if(IsPlayerConnected(pID))
    {
    format(string,sizeof(string),"SMS von %s: %s",xname,text);
    SendClientMessage(pID,GELB,string);
    format(string2,sizeof(string2),"Deine SMS: %s: %s",xname,text);
    SendClientMessage(playerid,GELB,string2);
    GivePlayerMoney(playerid,-25);
    SendClientMessage(playerid,ROT,"Die SMS kostet 25$");
    return 1;
    }
    }
    return 1;
    }

    Erklärungen braucht ihr glaube ich nicht dazu steht eigentlich alles oben...



    Der ProxDector Stock:

    // Prox Detector //
    stock ProxDetector(Float:radi, playerid, string[],col1,col2,col3,col4,col5)
    {
    if(IsPlayerConnected(playerid))
    {
    new Float:posx, Float:posy, Float:posz;
    new Float:oldposx, Float:oldposy, Float:oldposz;
    new Float:tempposx, Float:tempposy, Float:tempposz;
    GetPlayerPos(playerid, oldposx, oldposy, oldposz);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i))continue;
    GetPlayerPos(i, posx, posy, posz);
    tempposx = (oldposx -posx);
    tempposy = (oldposy -posy);
    tempposz = (oldposz -posz);
    if (((tempposx < radi/16) && (tempposx > -radi/16)) && ((tempposy < radi/16) && (tempposy > -radi/16)) && ((tempposz < radi/16) && (tempposz > -radi/16)))SendClientMessage(i, col1, string);
    else if (((tempposx < radi/8) && (tempposx > -radi/8)) && ((tempposy < radi/8) && (tempposy > -radi/8)) && ((tempposz < radi/8) && (tempposz > -radi/8)))SendClientMessage(i, col2, string);
    else if (((tempposx < radi/4) && (tempposx > -radi/4)) && ((tempposy < radi/4) && (tempposy > -radi/4)) && ((tempposz < radi/4) && (tempposz > -radi/4)))SendClientMessage(i, col3, string);
    else if (((tempposx < radi/2) && (tempposx > -radi/2)) && ((tempposy < radi/2) && (tempposy > -radi/2)) && ((tempposz < radi/2) && (tempposz > -radi/2)))SendClientMessage(i, col4, string);
    else if (((tempposx < radi) && (tempposx > -radi)) && ((tempposy < radi) && (tempposy > -radi)) && ((tempposz < radi) && (tempposz > -radi)))SendClientMessage(i, col5, string);
    }
    }
    return 1;
    }
    // Prox Detector Ende //

    Am besten gaaaanz unten ins Script.


    Die Farben:

    #define BLAU 0x0087FFFF
    #define ROT 0xE10000FF
    #define GELB 0xFFE600FF




    Schlusswort:
    Ich habe es auch als FilterScript rausgebracht aber hier ist es auch in Erklärter Form :>
    Ich hoffe es hat euch sehr Geholfen!


    Mit Freundlichen Grüßen HellYeah


    // Edits:
    // Edit 1:
    Bug Gefixxt

    Denn "Bug" meinte ich nicht.
    Selbst wenn ich einen Gegenstand nicht Lösche und die Map Save und danach das Spiel neustarte sind von 100 Waffen 9 zu Mülltonnen geworden.

    An einen Bot habe auch auch schon gedacht nur egal wie ich es mache der Bot Connected einfach nicht aber ich probier da noch mal was aus :>


    Das mit dem Graffiti ist eine gute Idee werde ich bei der nächsten Version einbauen¡!¡



    Freut euch schonmal auf die nächste Version sie wird am LS Strand gemappt werden!