Biz System Problem

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
  • Ich habe ein dickes Problem bei meinem selber gebauten Business System.


    ocmd:buybiz(playerid, params[])
    {
    for(new i=0;i>500;i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, BizInfo[i][Xkoord],BizInfo[i][Ykoord],BizInfo[i][Zkoord]))
    {
    return SendClientMessage(playerid, COLOR_LIGHTGREY,"Es befindet sich kein Business in der Nähe.");
    }
    else
    {
    new name[20];
    GetPlayerName(playerid, name, 20);
    if(strcmp(BizInfo[i][bOwner],name,true)) return SendClientMessage(playerid,COLOR_LIGHTGREY,"Du kannst dein Biz nicht noch einmal kaufen!");
    if(strcmp(BizInfo[i][bOwner],"NoOne",false)) return SendClientMessage(playerid, COLOR_LIGHTGREY, "Dieses Business besitzt bereits jemand.");
    if(GetPlayerMoney(playerid) < BizInfo[i][bPreis]) return SendClientMessage(playerid, COLOR_LIGHTGREY, "Du hast nicht genügend Geld dabei.");
    GivePlayerMoney(playerid, -BizInfo[i][bPreis]);
    BizInfo[i][bOwner] = GetPlayerName(playerid, name, 20);
    SaveBizzes(i);
    }
    }
    return 1;
    }
    ocmd:bizmenu(playerid, params[])
    {
    for(new i=0;i>500;i++)
    {
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, BizInfo[i][Xkoord],BizInfo[i][Ykoord],BizInfo[i][Zkoord]))
    {
    return SendClientMessage(playerid, COLOR_LIGHTGREY,"Es befindet sich kein Business in der Nähe.");
    }
    new name[20];
    GetPlayerName(playerid, name, 20);
    if(strcmp(BizInfo[i][bOwner],name,false)) return SendClientMessage(playerid,COLOR_LIGHTGREY,"Das ist nicht dein Business.");
    ShowPlayerDialog(playerid, DIALOG_BIZMENU, 2, "Business Menu","Name ändern \nEinzahlen \nAuszahlen \nVerkaufen","Bestätigen","Abbrechen");
    }
    return 1;
    }


    Die beiden Befehle funktionieren nicht, denn er sagt immer, ich wäre nicht in der Nähe eines Biz oder er sagt gar nichts.

  • ocmd:buybiz(playerid, params[])
    {
    for(new i=0;i>500;i++) // das würde bedeuten, dass er die Variable 'i' erstellt und die Variable 'i' größer als 500 sein müsste, damit die Schleife durchlaufen wird [...]
    {
    if(!IsPlayerInRangeOfPoint(playerid, 5.0, BizInfo[i][Xkoord],BizInfo[i][Ykoord],BizInfo[i][Zkoord]))
    { // Er müsste theoretisch in der nähe von jedem Business sein, da die Bedingung sonst stimmt und die folgende Anweisung aufgerufen wird:
    return SendClientMessage(playerid, COLOR_LIGHTGREY,"Es befindet sich kein Business in der Nähe."); // Zudem würde return hier bewirken, dass wenn der Spieler sich nicht in der nähe von Business mit der ID 0 befindet, nicht abgefragt wird, ob er sich möglicherweiße in der nähe von Business 1 befindet
    }
    else
    {
    new name[20];
    GetPlayerName(playerid, name, 20);
    if(strcmp(BizInfo[i][bOwner],name,true)) return SendClientMessage(playerid,COLOR_LIGHTGREY,"Du kannst dein Biz nicht noch einmal kaufen!"); // strcmp gibt den Wert 0 zurück, wenn die verglichenen Strings gleich sind, daher muss hier abgefragt werden ob strcmp(...) 0 ist
    if(strcmp(BizInfo[i][bOwner],"NoOne",false)) return SendClientMessage(playerid, COLOR_LIGHTGREY, "Dieses Business besitzt bereits jemand."); // Hier dasselbe
    if(GetPlayerMoney(playerid) < BizInfo[i][bPreis]) return SendClientMessage(playerid, COLOR_LIGHTGREY, "Du hast nicht genügend Geld dabei.");
    GivePlayerMoney(playerid, -BizInfo[i][bPreis]);
    BizInfo[i][bOwner] = GetPlayerName(playerid, name, 20);
    SaveBizzes(i);
    }
    }
    return 1;
    }


    So.. dann versuchen wir das doch mal umzuändern:
    ocmd:buybiz(playerid, params[])
    {
    for(new i=0;i<500;i++)
    {
    if(IsPlayerInRangeOfPoint(playerid, 5.0, BizInfo[i][Xkoord],BizInfo[i][Ykoord],BizInfo[i][Zkoord]))
    {
    new name[20];
    GetPlayerName(playerid, name, 20);
    if(strcmp(BizInfo[i][bOwner],name,true) == 0) return SendClientMessage(playerid,COLOR_LIGHTGREY,"Du kannst dein Biz nicht noch einmal kaufen!");
    if(strcmp(BizInfo[i][bOwner],"NoOne",false) == 0) return SendClientMessage(playerid, COLOR_LIGHTGREY, "Dieses Business besitzt bereits jemand.");
    if(GetPlayerMoney(playerid) < BizInfo[i][bPreis]) return SendClientMessage(playerid, COLOR_LIGHTGREY, "Du hast nicht genügend Geld dabei.");
    GivePlayerMoney(playerid, -BizInfo[i][bPreis]);
    BizInfo[i][bOwner] = GetPlayerName(playerid, name, 20);
    SaveBizzes(i);
    return 1; // Wenn er in der nähe eines Businesses war, wird die Funktion frühzeitig beendet und gibt den Wert 1 zurück
    }
    }
    return SendClientMessage(playerid, COLOR_LIGHTGREY,"Es befindet sich kein Business in der Nähe."); // Dies kann also nun nur noch erreicht werden, wenn er sich nicht in der nähe irgendeines Businesses befand
    }


    Die selben Fehler sind auch bei dem Befehl bizmenu, daher hoffe ich, dass du die Erklärungen einigermaßen verstanden hast und nachvollziehen kannst, um dir den anderen Befehl noch selbst umzuschreiben. ;)

  • Sorry für die späte Antwort. Das mit der Position geht nun, danke ;)


    Aber ich habe ein Problem mit dem String des Besitzers. Egal ob ich true oder false mache kriege ich die Message "Dieses Biz besitzt bereits jmd."


    Edit: Kann mir niemand helfen.

    Einmal editiert, zuletzt von Cooper ()

  • enum bizz {
    bOwner[64],
    bName[64],
    Float:Xkoord,
    Float:Ykoord,
    Float:Zkoord,
    bizpickup,
    bLevel,
    bPreis,
    bKonto
    }


    stock SaveBizzes(bizid)
    {
    new bizformat[50];
    format(bizformat,sizeof(bizformat),"/Biz/biz%i.txt",bizid);
    if(fexist(bizformat))
    {
    dini_Set(bizformat, "bOwner", BizInfo[bizid][bOwner]);
    dini_Set(bizformat, "bName", BizInfo[bizid][bName]);
    dini_FloatSet(bizformat, "Xkoord", BizInfo[bizid][Xkoord]);
    dini_FloatSet(bizformat, "Ykoord", BizInfo[bizid][Ykoord]);
    dini_FloatSet(bizformat, "Zkoord", BizInfo[bizid][Zkoord]);
    dini_IntSet(bizformat, "bPreis", BizInfo[bizid][bPreis]);
    dini_IntSet(bizformat, "bLevel", BizInfo[bizid][bLevel]);
    dini_IntSet(bizformat, "bKonto", BizInfo[bizid][bKonto]);
    }
    else
    {
    dini_Create(bizformat);
    SaveBizzes(bizid);
    LoadBizzes(bizid);
    }
    return 1;
    }