[Hilfe] mit WeedSystem^^

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
  • Also habe heute mein eigenes Weedsystem begonnen. Hier mal der "Grundcode":
    if(!strcmp(cmd, "/weedpflanzen", true))
    {
    if(WEEDgepflanzt == 0)
    {
    WEEDgepflanzt = 1;
    GetPlayerPos(playerid,XWeed,YWeed,ZWeed);
    weedobject = CreateObject(823, XWeed, YWeed, ZWeed - 3, 0, 0, 0);
    SendClientMessage(playerid,COLOR_GREEN,"Du hast Weed erfolgreich angebaut!");
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast schon Weed angebaut.");
    }
    return 1;
    }

    if(!strcmp(cmd, "/weedgiessen", true))
    {
    if(WEEDgepflanzt == 1)
    {
    WEEDgegossen = 1;
    MoveObject(weedobject, XWeed, YWeed, ZWeed , 0.05);
    SendClientMessage(playerid,COLOR_GREEN,"Du hast das Weed erfolgreich gegossen. Es wächst nun.");
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst zuerst WeedSamen pflanzen um das Weed zu giessen!");
    }
    return 1;
    }

    if(!strcmp(cmd, "/weedernten", true))
    {
    if(WEEDgepflanzt == 0)
    {
    if(WEEDgegossen == 1)
    {
    //IRgendwas hier -> man bekommt 10 Gramm oder so^^
    SendClientMessage(playerid,COLOR_GREEN,"Weed erfolgreich geerntet!");
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst das Weed zuerst giessen!");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst das Weed zuerst pflanzen und dann giessen!");
    }
    return 1;
    }


    Jetzt möchte ich es irgendwie machen das man eben dann Weed hat(WICHTIG: Wenn man das selbe nochmal macht also pflanzen ernten etc. dann erhält man "2 Weed"(xD -> in Gramm dann oder so..^^)
    Und man kann die dann verkaufen mit /giveweed ID(des spielers der es bekommt) Gramm(also von der Menge her wieviel du hergibst) PREIS(und dann der Preis den du verlangst(nur zwischen zB. 200 und 5000 möglich)


    BITTE HELFT MIR!

  • Weed kannst du als ganz einfache Variable deklarieren,wie

    new WEEDGramm[MAX_PLAYERS];


    // Im Command, wo mans haben soll:
    WEEDGramm[playerid]++;
    //bzw.
    WEEDGramm[playerid] += x;


    Was mir aufgefallen ist, deine Variabeln, wie WEEDgepflanzt sind einmalig und keine Arrys. D.h. wenn jemand /weedpflanzen macht, wäre das WEEDgepflanzt für alle auf 1 gesetzt.
    Benutzt daher new WEEDgeplfanzt[MAX_PLAYERS] (= für jeden Spieler existiert diese Variabel nun...). Verwendung dann mit WEEDgepflanzt[playerid]; . Nebenbei: Da du sowieso nur zwischen "1" und "0" unterscheidest, reicht true und false => bool.



    // Ganz Oben
    enum AcceptInfo
    {
    gewicht,
    preis,
    dealer
    }
    new Accept[MAX_PLAYERS][AcceptInfo];
    new WEEDgramm[MAX_PLAYERS];



    // Unter das OnPlayerCommandText


    new cmd[128];
    new tmp[128];
    new giveplayerid, moneys, idx;


    cmd = strtok(cmdtext, idx);
    if(!strcmp(cmd,"/accept",true))
    {
    if(Accept[playerid][gewicht] <= 0 || Accept[playerid][preis] <= 0) return SendClientMessage(playerid,COLOR_GREEN,"*** Du hast kein Angebot!");
    if(GetPlayerMoney(playerid) < Accept[playerid][preis]) return SendClientMessage(playerid,COLOR_GREEN,"*** Du hast kein Geld dafür im Moment!");
    WEEDgramm[playerid] += Accept[playerid][gewicht];
    GivePlayerMoney(playerid, -Accept[playerid][preis]);
    SendClientMessage(playerid,COLOR_GREEN,"*** Weed angenommen. Viel Spaß damit !");
    GivePlayerMoney(Accept[playerid][dealer],Accept[playerid][preis]);
    Accept[playerid][gewicht] = 0;
    Accept[playerid][preis] = 0;
    Accept[playerid][dealer] = 0;
    // Was auch immer
    return 1;
    }
    if(!strcmp(cmd,"/weedsell",true))
    {
    if(WEEDgramm[playerid] == 0) return SendClientMessage(playerid,COLOR_GREEN,"*** Du hast kein Weed (0 Gramm)");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GREEN,"USE: /weedsell [ID] [GRAMM] [PREIS]!");
    giveplayerid = ReturnUser(tmp);
    if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,COLOR_GREEN,"*** Angegebener User nicht online!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GREEN,"USE: /weedsell [ID] [GRAMM] [PREIS]!");
    new gramm = strval(tmp);
    if(gramm <= 0 || gramm >= 1000) return SendClientMessage(playerid,COLOR_GREEN,"*** Gramm muss zwischen 1 und 999 sein!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GREEN,"USE: /weedsell [ID] [GRAMM] [PREIS]!");
    moneys = strval(tmp);
    if(moneys <= 0) return SendClientMessage(playerid,COLOR_GREEN,"*** Preis muss über 0 sein!");
    SendClientMessage(playerid,COLOR_GREEN,"*** Weedangebot abgegeben!");
    Accept[giveplayerid][gewicht] = gramm;
    Accept[giveplayerid][preis] = moneys;
    Accept[giveplayerid][dealer] = playerid;
    return 1;
    }



    // ReturnUser Code falls du ihn nicht hast. Ist von mir gibts aber bestimmt von irgendwem anders besser
    stock ReturnUser(strings[])
    {
    new count = 0;
    new len = strlen(strings);
    if(len > 3)
    {
    for(new i = 0; i < MAX_PLAYERS;i++)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(i,name,sizeof(name));
    if(!strcmp(name,strings,false,MAX_PLAYER_NAME))
    {
    return i;
    }
    else
    {
    count = 1;
    }
    }
    }
    else
    {
    return strval(strings);
    }
    return (count == 1) ? (INVALID_PLAYER_ID) : (strval(strings));
    }

    Es ist spät, ich bin müde und hab den Code ungetestet aus dem Kopf geschrieben. Hoffe daher, dass es klappt, sonst mach ich es dir heute (später) richtig. :)
    Für Neulinge empfiehlt sich aber dcmd & sscanf
    [ SCRIPTING ] Commands mit Parametern
    by Goldkiller.


  • muss es zwar erst testen aber DANKE! so ne gute hilfe hab ich noch nie bekommen :thumbup::thumbup::thumbup:


    EDIT:


    Jetzt vversteh ich das endlich mit den Unterschied zwischen zB.: WEEDgepflanzt = 0; oder halt mit [Maxplayers].....
    WUsste das eben nie was das bringt^^


    EDIT 2:
    Hab eienn error:
    symbol is never used...
    aber der is irgendwo also keine zeile angegeben könnte man sagen^^


    Einmal editiert, zuletzt von BMGP ()


  • Danke mal für deine Hilfe, doch etwas funktioniert bei deinem Script nicht.
    Also selbst wenn ich Weed haben kommt trotzdem immer "Du hast kein Weed" und zwar immer^^
    Was tun?

  • Zeig am besten mal alles, denn diese Abfrage hier
    if(WEEDgramm[playerid] <= 0) return SendClientMessage(playerid,COLOR_GREEN,"*** Du hast kein Weed (0 Gramm)");
    sollte das eigtl klären. Sobald er unter 0 oder 0 Gramm hat, kommt die MSG. Daher liegts vielleicht woanders...

  • ALso bekomme jetzt zwei Fehler beim Filterscript(einmal Error expected token + einmal Warning symbol is never used(immer letzte(leere) Zeile als fehlerzeile angegeben...))
    Das ist das Filterscript:
    #include <a_samp>


    //----------------------------------------------------------------


    #define COLOR_RED 0xFF0000AA
    #define COLOR_GREEN 0x33AA33AA33AA


    new weedobject;
    new WEEDGramm[MAX_PLAYERS];
    new Float:XWeed, Float:YWeed, Float:ZWeed;
    new WEEDgepflanzt[MAX_PLAYERS] = 0;
    new WEEDgegossen[MAX_PLAYERS] = 0;
    new WEEDhaben[MAX_PLAYERS] = 0;


    enum AcceptInfo
    {
    gewicht,
    preis,
    dealer
    }


    new Accept[MAX_PLAYERS][AcceptInfo];
    new WEEDgramm[MAX_PLAYERS];


    //----------------------------------------------------------------


    #define FILTERSCRIPT


    #if defined FILTERSCRIPT


    public OnFilterScriptInit()
    {
    print("\n-------------------------------------------------------");
    print(" Weed - System by BMGP alias NWC Daniel...... 100% loaded");
    print("-------------------------------------------------------\n");
    return 1;
    }


    public OnFilterScriptExit()
    {
    return 1;
    }





    strtok(const string[], &index)
    {
    new length = strlen(string);
    while ((index < length) && (string[index] <= ' '))
    {
    index++;
    }


    new offset = index;
    new result[20];
    while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
    {
    result[index - offset] = string[index];
    index++;
    }
    result[index - offset] = EOS;
    return result;
    }





    public OnPlayerCommandText(playerid, cmdtext[])
    {


    new cmd[128];
    new tmp[128];
    new giveplayerid, moneys, idx;


    //--------------------------------------------------------------------

    if(!strcmp(cmd, "/weedpflanzen", true))
    {
    if(WEEDgepflanzt[playerid] == 0)
    {

    GetPlayerPos(playerid,XWeed,YWeed,ZWeed);
    weedobject = CreateObject(823, XWeed, YWeed, ZWeed - 3, 0, 0, 0);
    SendClientMessage(playerid,COLOR_GREEN,"Du hast Weed erfolgreich angebaut!");
    WEEDgepflanzt[playerid] = 1;
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du hast schon Weed angebaut.");
    }
    return 1;
    }

    if(!strcmp(cmd, "/weedgiessen", true))
    {
    if(WEEDgepflanzt[playerid] == 1)
    {
    WEEDgegossen[playerid] = 1;
    MoveObject(weedobject, XWeed, YWeed, ZWeed , 0.05);
    SendClientMessage(playerid,COLOR_GREEN,"Du hast das Weed erfolgreich gegossen. Es wächst nun.");
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst zuerst WeedSamen pflanzen um das Weed zu giessen!");
    }
    return 1;
    }

    if(!strcmp(cmd, "/weedernten", true))
    {
    if(WEEDgepflanzt[playerid] == 1)
    {
    if(WEEDgegossen[playerid] == 1)
    {
    WEEDGramm[playerid]++;
    SendClientMessage(playerid,COLOR_GREEN,"Weed erfolgreich geerntet!");
    WEEDgepflanzt[playerid] = 0;
    DestroyObject(weedobject);
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst das Weed zuerst giessen damit es wächst!");
    }
    }
    else
    {
    SendClientMessage(playerid,COLOR_RED,"Du musst das Weed zuerst pflanzen und dann giessen!");
    }


    return 1;
    }




    if(!strcmp(cmd,"/accept",true))
    {
    if(Accept[playerid][gewicht] <= 0 || Accept[playerid][preis] <= 0) return SendClientMessage(playerid,COLOR_GREEN,"*** Du hast kein Angebot!");
    if(GetPlayerMoney(playerid) < Accept[playerid][preis]) return SendClientMessage(playerid,COLOR_GREEN,"*** Du hast kein Geld dafür im Moment!");
    WEEDgramm[playerid] += Accept[playerid][gewicht];
    GivePlayerMoney(playerid, -Accept[playerid][preis]);
    SendClientMessage(playerid,COLOR_GREEN,"*** Weed angenommen. Viel Spaß damit !");
    GivePlayerMoney(Accept[playerid][dealer],Accept[playerid][preis]);
    Accept[playerid][gewicht] = 0;
    Accept[playerid][preis] = 0;
    Accept[playerid][dealer] = 0;
    // Was auch immer
    return 1;
    }

    if(!strcmp(cmd,"/weedsell",true))
    {
    if(WEEDgramm[playerid] == 0) return SendClientMessage(playerid,COLOR_GREEN,"*** Du hast kein Weed (0 Gramm)");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GREEN,"USE: /weedsell [ID] [GRAMM] [PREIS]!");
    giveplayerid = ReturnUser(tmp);
    if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid,COLOR_GREEN,"*** Angegebener User nicht online!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GREEN,"USE: /weedsell [ID] [GRAMM] [PREIS]!");
    new gramm = strval(tmp);
    if(gramm <= 0 || gramm >= 1000) return SendClientMessage(playerid,COLOR_GREEN,"*** Gramm muss zwischen 1 und 999 sein!");
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp)) return SendClientMessage(playerid,COLOR_GREEN,"USE: /weedsell [ID] [GRAMM] [PREIS]!");
    moneys = strval(tmp);
    if(moneys <= 0) return SendClientMessage(playerid,COLOR_GREEN,"*** Preis muss über 0 sein!");
    SendClientMessage(playerid,COLOR_GREEN,"*** Weedangebot abgegeben!");
    Accept[giveplayerid][gewicht] = gramm;
    Accept[giveplayerid][preis] = moneys;
    Accept[giveplayerid][dealer] = playerid;
    return 1;
    }
    //--------------------------------------------------------------------

    return 0;
    }


    stock ReturnUser(strings[])
    {
    new count = 0;
    new len = strlen(strings);
    if(len > 3)
    {
    for(new i = 0; i < MAX_PLAYERS;i++)
    {
    new name[MAX_PLAYER_NAME];
    GetPlayerName(i,name,sizeof(name));
    if(!strcmp(name,strings,false,MAX_PLAYER_NAME))
    {
    return i;
    }
    else
    {
    count = 1;
    }
    }
    }
    else
    {
    return strval(strings);
    }
    return (count == 1) ? (INVALID_PLAYER_ID) : (strval(strings));
    }





    HIIIIIIIIIIIIILFE... PLS


    2 Mal editiert, zuletzt von BMGP ()