[Scriptwunsch] Kleines Simples Hitmansystem

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
  • Scriptwunsch


    Vorab habe ich eine bitte, wenn leute keine Lust haben, mir dies zu machen und nur ein blödes kommentar drunter geben
    werde ich den melden button benutzen müssen.
    Wer nicht helfen will, muss es nicht. es ist hier Legendlich nur eine Frage.


    Nicht über die Rechtschreibung meckern, ich habe ne Lese/Rechtschreibschwäche :)


    Erstmal guten abend allerseits, und zwar bin ich auf der suche, nach einem /contract system auf NON-GF basis.
    Zu Meinem script erstmal, ich arbeite mit Dini(eigentlich logisch :p) Benutze SetPVarInt und GetPVarInt(eigentlich auch klar)
    und arbeite mit ocmd.



    Inhaltsverzeichniss


    1.0 Zum Script.
    2.0 Wunsch des Aufbaues des Hitmansystemes.
    3.0 Dankessagung




    1.0


    Die Fraktion Hitman ist bereits im Script, und funktioniert soweit auch super. HS system alles.
    Da nur die Hitmans die aufträge sehen können sollten, Schreibe ich mal kurz ein paar zeilen.
    if(isPlayerInFrakt(playerid,12))


    Die 12 Steht für die Fraktionsnummer, da ich schon bestimmte befehle drin habe, die nur die jewaligen fraktionen benutzen sollten.


    Da ich kein großer "Fan" von GF bin, bzw ich gegen Godfather bin, wuenschte ich es mir auch nicht direkt im GF style.


    2.0


    Wie andere auch habe ich bestimme Vorstellung.
    Meine Vorstellungen sind nicht all zu hoch angefordert, der rest ist der person überlassen, die es villeicht für mich machen würde..
    Meine Forderungen wären:


    Zum Kopfgeld setzen /Contract und/oder /Kopfgeld
    Mindestbetrag sollte bei 3000$ Liegen, Höchstpreis ist nicht festgesetzt. also in die höhe ohne ende.
    Eine Nachricht sollte beim Autrag geber erscheinen: Du hast auf NAME soebend SUMME Kopfgeld gesetzt.
    Desweiteren sollte eine Nachricht bei dem Hitman erscheinen: NAME hat auf NAME soebend SUMME gesetzt. Schalte ihn aus.
    Um zu sehen, was für aufträge ein hitman noch Hat, sollte er die funktion /auftrage haben. Es sollte So aussehen:
    ---Aufträge---
    NAME(ID: %i): SUMME
    NAME(ID: %i): SUMME
    NAME(ID: %i): SUMME
    ---Aufträge---
    Natürlich sollte er diese person auch finden. dies sollte mit /find passieren. der Maker sollte 15 Sekunden verbleiben, und sich dann entfernen, sodass man wieder /find ID eingeben sollte.
    Das Kopfgeld, sollte Komplett dem Hitman, der den Auftrag erledigt hat, gutgeschrieben werden.
    Der rest, ist der Person überlassen :)


    3.0


    Selbst wenn, sich keiner findet, der es mir machen würde, wäre es nicht schlimm, denn ich versuche es nebenbei trotzdem weiter, was eher erfolglos bleiben wird.
    Ich bedanke mich trotzdem fürs lesen, und wünsch den Brotfischen noch einen schönen abend.


    Mit Freundlichen Grüßen
    Mike aka. PsychoX

  • Ich versuch mal was zusammen zu scripten.


    //Edit:


    Ganz oben:


    #include <sscanf>//Wenn du es noch nicht eingebunden hast
    #include <ocmd>//Wenn du es noch nicht eingebunden hast


    #define COLOR_WHITE 0xFFFFFFFF//Wenn du es noch nicht definiert hast
    #define COLOR_GREY 0xAFAFAFAA//Wenn du es noch nicht definiert hast
    #define COLOR_GREEN 0x33AA33AA//Wenn du es noch nicht definiert hast


    new PlayerContractPrice[MAX_PLAYERS];
    new PlayerContractTarget[MAX_PLAYERS];
    new bool:Finding[MAX_PLAYERS];


    Unter OnPlayerConnect:


    PlayerContractTarget[playerid] = -1;
    PlayerContractPrice[playerid] = 0;


    Unter OnPlayerDisconnect:


    PlayerContractTarget[playerid] = -1;
    PlayerContractPrice[playerid] = 0;


    Unter OnPlayerDeath:


    if(isPlayerInFrakt(killerid,12))
    {
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(PlayerContractTarget[i] == playerid)
    {
    new string[128];
    new pName[128];
    GetPlayerName(playerid, pName, sizeof pName);
    format(string, sizeof string, "[Hitman]Du hast %s getoetet, und %d$ bekommen!", pName, PlayerContractPrice[i]);
    SendClientMessage(killerid, COLOR_GREEN, string);
    new money = GetPlayerMoney(killerid);//Anpassen!
    ResetPlayerMoney(killerid);//Anpassen!
    GivePlayerMoney(killerid, money+PlayerContractPrice[i]);//Anpassen!
    PlayerContractPrice[i] = 0;
    PlayerContractTarget[i] = -1;
    }
    }
    }


    Ganz unten:


    ocmd:contract(playerid, params[0])
    {
    new target,price;
    if(sscanf(params, "ud", target,price))
    {
    if(!isPlayerInFrakt(playerid,12))
    {
    if(price <= 3000)
    {
    if(GetPlayerMoney(playerid) >= price)//Anpassen!
    {
    if(IsPlayerConnected(target))
    {
    if(PlayerContractPrice[playerid] == 0)
    {
    new string1[128];
    new pName2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName2, sizeof pName2);
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(target, pName, sizeof pName);
    format(string1, sizeof string1, "[Hitman]Du hast %d$ Kopfgeld auf %s gesetzt!", price,pName);
    SendClientMessage(playerid, COLOR_GREEN, string1);
    format(string1, sizeof string1, "[Hitman]%s hat ein Kopfgeld von %d$ auf %s gesetzt, erledige ihn.", pName2, price, pName);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(isPlayerInFrakt(i,12))
    {
    SendClientMessage(i, COLOR_GREEN, string1);
    }
    }
    PlayerContractPrice[playerid] = price;
    PlayerContractTarget[playerid] = target;
    new money = GetPlayerMoney(playerid);//Anpassen!
    ResetPlayerMoney(playerid);//Anpassen!
    GivePlayerMoney(playerid, money-price);//Anpassen!
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du hast bereits einen Vertrag abgeschlossen!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler ist nicht online!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du hast nicht genug Geld!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Der Preis muss ueber 3000$ liegen!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du darfst kein Hitman sein um einen Auftrag abzuschließen!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "BENUTZE: /contract [Spieler-ID/Teil des Namens] [Preis]");
    }
    return 1;
    }


    ocmd:uncontract(playerid, params[0])
    {
    if(PlayerContractPrice[playerid] != 0)
    {
    new string1[128], pName[MAX_PLAYER_NAME];
    GetPlayerName(PlayerContractTarget[playerid], pName, sizeof pName);
    format(string1, sizeof string1, "[Hitman]Du hast das Kopfgeld auf %s zurueckgezogen!", pName);
    SendClientMessage(playerid, COLOR_GREEN, string1);
    new pName2[MAX_PLAYER_NAME];
    GetPlayerName(playerid, pName2, sizeof pName2);
    format(string1, sizeof string1, "[Hitman]%s hat das Kopfgeld auf %s zurueckgezogen!", pName2, pName);
    for(new i=0;i<MAX_PLAYERS;i++)
    {
    if(isPlayerInFrakt(i,12))
    {
    SendClientMessage(i, COLOR_GREEN, string1);
    }
    }
    new money = GetPlayerMoney(playerid);//Anpassen!
    ResetPlayerMoney(playerid);//Anpassen!
    GivePlayerMoney(playerid, money+PlayerContractPrice[playerid]);//Anpassen!
    PlayerContractPrice[playerid] = 0;
    PlayerContractTarget[playerid] = -1;
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du hast keinen Auftrag abgeschlossen!");
    }
    return 1;
    }


    ocmd:contractlist(playerid, params[0])
    {
    if(isPlayerInFrakt(i,12))
    {
    new string[128];
    new bool:ContractExist;
    for(new a=0;a<MAX_PLAYERS;a++)
    {
    if(PlayerContractPrice[a] != 0)
    {
    ContractExist = true;
    new pName[MAX_PLAYER_NAME];
    GetPlayerName(PlayerContractTarget[a], pName, sizeof pName);
    format(string, sizeof string, "%s(ID: %d): %d$", pName, PlayerContractTarget[a], PlayerContractPrice[a]);
    }
    }
    if(ContractExist == true)
    {
    SendClientMessage(playerid, COLOR_WHITE, "======[Hitman Auftraege]======");
    SendClientMessage(playerid, COLOR_GREEN, string);
    SendClientMessage(playerid, COLOR_WHITE, "==============================");
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Es gibt keine Auftraege!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du musst ein Hitman sein um alle Auftraege zu sehen!");
    }
    return 1;
    }


    ocmd:find(playerid, params[0])
    {
    new target;
    if(sscanf(params, "u", target))
    {
    if(isPlayerInFrakt(i,12))
    {
    if(IsPlayerConnected(target))
    {
    if(Finding[playerid] == false)
    {
    Finding[playerid] = true;
    new Float:x, Float:y, Float:z;
    GetPlayerPos(target, x,y,z);
    SetPlayerCheckpoint(playerid, x,y,z,2);
    SetTimerEx("DeleteCheckpoint", 15000, false, "playerid", playerid);
    new string[128],pName[MAX_PLAYER_NAME];
    GetPlayerName(target, pName, sizeof pName);
    format(string, sizeof string, "[Hitman]Es wurde ein Marker bei %s erstellt!",pName);
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du suchst bereits jemanden!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Dieser Spieler ist nicht online!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "Du musst ein Hitman sein um Personen ausfindig zu machen!");
    }
    }
    else
    {
    SendClientMessage(playerid, COLOR_GREY, "BENUTZE: /find [Spieler-ID/Teil des Namens]");
    }
    return 1;
    }


    forward public DeleteCheckpoint(playerid);
    public DeleteCheckpoint(playerid)
    {
    DisablePlayerCheckpoint(playerid);
    SendClientMessage(playerid, COLOR_GREY, "Der Marker wurde entfernt!");
    return 1;
    }



    Ich habs nicht getestet, poste bitte wenn du Probleme hast ;)
    Musst es dann noch in deinem Login/Register speichern lassen


    MfG


    Einmal editiert, zuletzt von _PayDay_ ()

  • Guten Tag,


    bitte steinigt mich nicht gleich, weil das Thema schon älter ist, ich möchte das Forum nicht ständig zumüllen müssen, wenn sich die Frage direkt auf die oben stehenden Scriptzeilen bezieht.


    Ich habe 2 Fragen:


    1. Bei OnPlayerDisconnect, würde das nicht bedeuten, dass wenn der Contract offline geht, das Kopfgeld gelöscht wird? Genauso wie bei OnPlayerConnect? Dass es dann auf 0 gesetzt wird?
    Wäre es nicht sinnvoller, wenn man das bei OnPlayerConnect und OnPlayerDisconnect lädt/speichert?
    Weil sonst bezahlt ja ein User bspw. 4000$ dafür, der Contract geht off, das Geld ist futsch und der Contract wurde nicht gekillt...


    2. Wie kann ich es schreiben, wenn ein Contract nochmals ein Kopfgeld erhält, dass dies dann zusammengezählt wird. Wenn also bspw. User 1: 4000$ auf User 2 aussetzt und User 3 dann 10000§ auf User 2 aussetzt, dass es dann insgesamt 14000$ sind. Weil theoretisch ist der Befehl ja derzeit so, dass nur ein Kopfgeld ausgesetzt werden kann oder?


    Kann es sein dass man genau diese Abfrage im Code dafür nutzt? Dass man dann einfach PlayerContractPrice + PlayerContractPrice nutzt?



    LG Para