Beiträge von Templer

    Hab gerade einen Denkfehler im code gefunden, also bitte ersetze die unteren zwei Funktionen!


    RW_CreatePlayerObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ)
    {
    new counter=GetPVarInt(playerid,"PlayerObjectsCreated"),playerid=CurrentVWPlayer;
    PlayerObject[playerid][counter]=CreatePlayerObject(playerid,modelid,X,Y,Z,rX,rY,rZ);
    SetPVarInt(playerid,"PlayerObjectsCreated",counter+1);
    return PlayerObject[playerid][counter];
    }
    #define CreateObject RW_CreatePlayerObject


    public OnPlayerVirtualWorldChange(playerid,oldvw,newvw)
    {
    CurrentVWPlayer=playerid;
    DeleteOldPlayerObjects(playerid);
    switch(newvw) //Überprüft zu welcher Virtuellen Wert er gesetzt hat
    {
    case 0: //Wenn die neue Virtuelle Welt 0 ist, dann...
    {
    //Hier fügst du die Objecte im CreateObject Stil ein, welche für den Spieler angezeigt werden sollen
    //wenn er in der VirtuellenWelt 0 ist...
    }
    case 1: //Wenn die neue Virtuelle Welt 1 ist, dann...
    {
    //Das gleiche gilt für das obige, nur für die VirtuelleWelt 1, usw...
    }
    case 2: //Wenn die neue Virtuelle Welt 2 ist, dann...
    {

    }
    case 3: //Wenn die neue Virtuelle Welt 3 ist, dann...
    {

    }
    //usw ^^
    }
    CurrentVWPlayer=INVALID_PLAYER_ID;
    return true;
    }

    Nunja, ich hab im GF einen Bug gehabt, dass wenn wer gefesselt war (TogglePlayerControllable) und das Fahrzeug explodiert, dass es der gefesselte Spieler überlebt. Mit der Variante von RFT kann man dann entdecken ob der Spieler gefesselt "war" und ihn schnell im nachhineinen per SetPlayerHealth töten ^^


    //EDIT: Habe statt RFT immer MFT geschrieben, sry ^^

    Zeig mal bitte


    forward OOCOff


    wenn es nicht vorhanden ist, dann füge im Script folgendes ein:



    forwardOOCOff(color,const string[]);

    Ich habe mal bissl geraden, also bitte schicke uns nach dem Code die neuen Fehler und markiere uns die Zeilen, danke!


    public OOCOff(color,const string[])
    {
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(!IsPlayerConnected(i)||gOoc[i]) continue;
    SendClientMessage(i, color, string);
    }
    return 1;
    }
    public Lotto(number)
    {
    new JackpotFallen = 0;
    new string[128];
    new winner[MAX_PLAYER_NAME];
    format(string, sizeof(string), "Lotterie News: Die heutige Gewinnnummer: %d.", number);
    format(string, sizeof(string), "Lotterie News: ~n~ Heutige Nummer: ~p~ %d", number);
    GameTextForAll(string, 4000, 6);
    for(new i = 0; i < MAX_PLAYERS; i++)
    {
    if(IsPlayerConnected(i))
    {
    if(PlayerInfo[i][pLottoNr] > 0)
    {
    if(PlayerInfo[i][pLottoNr] == number)
    {
    JackpotFallen = 1;
    GetPlayerName(i, winner, sizeof(winner));
    format(string, sizeof(string), "Lotterie News: %s hat den Jackpot von $%d gewonnen!", winner, Jackpot);
    OOCOff(0x0000FFFC,const string[]);
    format(string, sizeof(string), "* Du gewinnst $%d mit Deinem Lottolos!", Jackpot);
    OOCOff(0x0000FFFC,const string[]);
    SendClientMessage(i, COLOR_WHITE, string);
    format(string, sizeof(string), "~g~~h~~h~Gewinnt die Lotterie!!! ~n~~g~$%d !! ~n~~n~~n~~p~Glueckwunsch!!!!", Jackpot);
    GameTextForPlayer(i, string, 5000, 3);
    ConsumingMoney[i] = 1;
    GivePlayerMoney(i, Jackpot);
    }
    else
    {
    SendClientMessage(i, COLOR_WHITE, "Leider hast Du diesmal nichts gewonnen!");
    }
    }
    PlayerInfo[i][pLottoNr] = 0;
    }
    }
    if(JackpotFallen)
    {
    new rand = random(10000); rand += 5789;
    Jackpot = rand;
    SaveStuff();
    format(string, sizeof(string), "Lotterie News: Der neue Jackpot startet mit $%d.", Jackpot);
    OOCOff(COLOR_WHITE,const string[]);
    }
    else
    {
    new rand = random(5000); rand += 2158;
    Jackpot += rand;
    SaveStuff();
    format(string, sizeof(string), "Lotterie News: Der Jackpot wurde auf $%d erhöht.", Jackpot);
    OOCOff(COLOR_WHITE,const string[]);
    }
    return 1;
    }

    Hab dir hier einen kleinen Codeschnippsel mit erklärungen gemacht ^^ Zwar ist es ungetstet, müsste jedoch funktionieren!


    new PlayerObject[MAX_PLAYERS][MAX_OBJECTS];
    new CurrentVWPlayer=INVALID_PLAYER_ID;


    DeleteOldPlayerObjects(playerid)
    {
    for(new object;object!=GetPVarInt(playerid,"PlayerObjectsCreated");object++)
    {
    if(PlayerObject[playerid][object]==0) continue;
    DestroyPlayerObject(playerid,PlayerObject[playerid][object]); PlayerObject[playerid][object]=0;
    }
    DeletePVar(playerid,"PlayerObjectsCreated");
    return true;
    }
    RW_CreatePlayerObject(modelid, Float:X, Float:Y, Float:Z, Float:rX, Float:rY, Float:rZ)
    {
    new counter=GetPVarInt(playerid,"PlayerObjectsCreated"),playerid=CurrentVWPlayer;
    PlayerObject[playerid][counter]=CreatePlayerObject(playerid,modelid,X,Y,Z,rX,rY,rZ);
    SetPVarInt(playerid,"PlayerObjectsCreated",counter+1); CurrentVWPlayer=INVALID_PLAYER_ID;
    return PlayerObject[playerid][counter];
    }
    #define CreateObject RW_CreatePlayerObject


    forward public OnPlayerVirtualWorldChange(playerid,oldvw,newvw);
    forward CheckVirtualWorldForPlayer();


    public OnPlayerVirtualWorldChange(playerid,oldvw,newvw)
    {
    CurrentVWPlayer=playerid;
    DeleteOldPlayerObjects(playerid);
    switch(newvw) //Überprüft zu welcher Virtuellen Wert er gesetzt hat
    {
    case 0: //Wenn die neue Virtuelle Welt 0 ist, dann...
    {
    //Hier fügst du die Objecte im CreateObject Stil ein, welche für den Spieler angezeigt werden sollen
    //wenn er in der VirtuellenWelt 0 ist...
    }
    case 1: //Wenn die neue Virtuelle Welt 1 ist, dann...
    {
    //Das gleiche gilt für das obige, nur für die VirtuelleWelt 1, usw...
    }
    case 2: //Wenn die neue Virtuelle Welt 2 ist, dann...
    {

    }
    case 3: //Wenn die neue Virtuelle Welt 3 ist, dann...
    {

    }
    //usw ^^
    }
    return true;
    }


    public CheckVirtualWorldForPlayer()
    {
    for(new playerid;playerid!=MAX_PLAYERS;playerid++)
    {
    if(!IsPlayerConnected(playerid)) continue;
    if(GetPVarInt(playerid,"PlayerVW")!=GetPlayerVirtualWorld(playerid))
    {
    CallLocalFunction("OnPlayerVirtualWorldChange","ddd",playerid,GetPVarInt(playerid,"PlayerVW"),GetPlayerVirtualWorld(playerid));
    SetPVarInt(playerid,"PlayerVW",GetPlayerVirtualWorld(playerid));
    }
    }
    return true;
    }


    public OnGameModeInit()
    {
    SetTimer("CheckVirtualWorldForPlayer",2500,true);
    }

    IsPlayerConnect musst du nach sscanf nichtmehr abfragen, da dies sscanf automatisch unternimmt, jedoch fragwürdig, warum er bei dir es falsch wiedergibt.


    Am besten nützt du es mal folgendermaßen und sag mir bescheid ob es funktioniert.


    if(dialogid==DIALOG_BANKUEBERWEISEN2)
    {
    if(!response) return ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST,"Bank","Einzahlen\nAuszahlen\nKontostand\nÜberweisen","Auswählen","Abbrechen");
    new Ziel;
    if(sscanf(inputtext,"u",Ziel)) return SendClientMessage(playerid,ROT,"Ungültige Angabe!");
    {
    SpielerInfo[Ziel][Bankkonto]=SpielerInfo[Ziel][Bankkonto]+Ueberweisung[playerid];
    SendClientMessage(playerid,GRUEN,"Überweisung erfolgreich!");
    ShowPlayerDialog(playerid,DIALOG_BANK,DIALOG_STYLE_LIST,"Bank","Einzahlen\nAuszahlen\nKontostand\nÜberweisen","Auswählen","Abbrechen");
    }
    }


    aber irgendwie kann es an dem auch nicht wirklich liegen ^^ Überprüfe ob du vielleicht den String inputtext davor veränderst, oder du fügst einfach mal oberhalb von der obigen sscanf Zeile folgendes ein und überprüfst es dann in den Serverlogs.


    printf("Inputtext Check: %s",inputtext);

    Diese Zeile hast du vergessen umzuändern:


    if(GetPVarInt(playerid,"SpielerBank")<geld) return ShowPlayerDialog(playerid,DIALOG_Einzahlen,DIALOG_STYLE_INPUT,"Sie haben nicht soviel Geld auf Ihrem Bankkonto, bitte geben Sie einen realistischen Betrag an!\n\nWieviel möchten Sie einzahlen?","Bestätigen","Zurück");

    Mit


    SetPVarInt(playerid,"SpielerBank",GetPVarInt(playerid,"SpielerBank")-geld);


    wir das Geld abgezogen.





    Mit


    SetPVarInt(playerid,"SpielerBank",GetPVarInt(playerid,"SpielerBank")+geld);


    wird das Geld eingezahlt.

    Verdammt, entschuldige ich blindes huhn...


    new car = GetPlayerVehicleID(playerid),fuel = 110 - Gas[car];


    bitte der Fix, und entschuldige, hab die Variable total vergessen xD

    Einfach negativ abziehen von der Variable und natürlich bei der einen Abfrage, anstatt du das Geld Bar überprüfst, überprüfst du dann das Geld auf dem Konto, ob das was er abheben will auch wirklich auf dem Bankkonto vorhanden ist.

    Tja junge, aber du hast das wichtigste vergessen, wo ist denn die Wand die er benötigt zum anpinkeln? Nebenbei was für ein Mann bist du, der auf Beton sein Geschäft erledigt, sicher ist BasiDerGamer nicht so ein Mann wie du! Ein Mann braucht einen Baum! und dieser muss immer bereit stehn, wenn man pinkelt!


    SetPlayerAttachedObject(playerid, 3, 627, 1, 0.5, 2, 0, 0, 90, 0);
    SetPlayerSpecialAction(playerid, 68);


    Und BasiDerGamer, wenn du das wirklich so einfügst, dann wirst du was besonderes haben, weil bis jetzt hat noch kein Server nen Baum, der ganze Zeit mit dem Spieler geht und du auch noch deine Geschäfte darin erledigen kannst.