Jump to content
  • 0

Bonus la un numar de jucatori conectati


Question

Posted

salutare,

Am facut comanda /setbonus (sa ofere un nr de bani, puncte RP, puncte PP) la un numar de jucatori conectati, dar bonusul il ofera doar jucatorului care foloseste comanda.

 

Quote

CMD:setbonus(playerid, params[]) {
    new money, rp, pp, players, string[128];
    if(sscanf(params, "iiii", money, rp, pp, players)) return SCM(playerid, COLOR_SERVER, "Syntax: {FFFFFF}/setbonus [money] [respect points] [premium points] [players online]");
    if(PlayerInfo[playerid][pAdmin] < 6) return SCM(playerid, -1, AdminOnly);
    
    SetBonusActiv = 1;
    MoneyAll = money;
    PremiumPointsForAll = pp;
    RespectPointsForAll = rp;
    PlayersOnlineForBonus = players;

    format(string, sizeof(string), "La %d jucatori conectati toti jucatorii vor primi $%s, %d respect points si %d premium points.", players, FormatNumber(money), rp, pp);
    SendClientMessageToAll(COLOR_GOLD, string);
    //SendStaffMessage(COLOR_GOLD, string);
    return 1;
}

 

Functia BonusForAll e apelata la OnGameModeInit odata la 1 secunda.

Quote

function BonusForAll() {
    new string[129];
    foreach(Player, i) {
        if(IsPlayerConnected(i) && IsPlayerLogged[i] == 1) {
            if(GetPlayersOnline() == PlayersOnlineForBonus) {
                if(SetBonusActiv == 1) {

                    format(string, sizeof(string), "The server has reached %d players online and you have received: $%s, %d respect points, %d premium points.", PlayersOnlineForBonus, FormatNumber(MoneyAll), RespectPointsForAll, PremiumPointsForAll);
                    SCM(i, COLOR_YELLOW, string);

                    PlayerInfo[i][pCashMoney] += MoneyAll;
                    UpdateVar(i, "CashMoney", PlayerInfo[i][pCashMoney]);
                    ResetPlayerMoney(i);
                    GivePlayerMoney(i, PlayerInfo[i][pCashMoney]);

                    PlayerInfo[i][pRespectPoints] += RespectPointsForAll;
                    UpdateVar(i, "RespectPoints", PlayerInfo[i][pRespectPoints]);

                    PlayerInfo[i][pPremiumPoints] += PremiumPointsForAll;
                    UpdateVar(i, "PremiumPoints", PlayerInfo[i][pPremiumPoints]);

                    SetBonusActiv = 0;
                    MoneyAll = 0;
                    PremiumPointsForAll = 0;
                    RespectPointsForAll = 0;
                    PlayersOnlineForBonus = 0;
                }
            }
        }
    }
    return 1;
}

 

1 answer to this question

Recommended Posts

  • 0
Posted

salut, problema e că tu resetezi variabilele fix după ce primul jucător primește bonusul. de asemenea, am mai observat și câteva greșeli de logică în codul tau.
1. ar trebui să verifici prima dată dacă bonusul e activ, nu atunci când treci prin toti jucătorii logați
2. la fel, trebuie să verifici dacă sunt suficienți jucători conectați fix după ce bonusul este activ. cum e acum nu e ok, trebuie să verifici o singură dată
3. nu trebuie să verifici dacă jucătorul este conectat, trebuie să verifici doar dacă e logat pentru a-i acorda bonusul
4. trebuie să resetezi variabilele după ce toți jucătorii primesc bonusul. cum e acum în codul tău, doar un singur jucător primește bonusul și apoi nimic.
5. poți folosi SendClientMessageToAll în loc să formatezi textul de mai multe ori, e același text deci nu trebuie să-l formatezi pt fiecare player în parte

ai mai jos funcția rescrisă. sper că ai înțeles ce era greșit.
 

function BonusForAll() 
{
    // daca nu e bonus activ, opreste functia
    if(!SetBonusActiv) return 0;

    // daca nu sunt suficienti jucatori online, opreste functia
    if(GetPlayersOnline() < PlayersOnlineForBonus) return 0;

    // formatezi mesajul o singura data, nu e nevoie sa-l formatezi in bucla pt jucatorii on
    new string[128];
    format(string, sizeof(string), "The server has reached %d players online and you have received: $%s, %d respect points and %d premium points.", PlayersOnlineForBonus, FormatNumber(MoneyAll), RespectPointsForAll, PremiumPointsForAll);
    SendClientMessageToAll(COLOR_YELLOW, string);

    // oferi bonusul tuturor jucatorilor
    foreach(Player, playerid)
    {
        if(IsPlayerLogged[playerid] != 1) continue;

        PlayerInfo[playerid][pCashMoney] += MoneyAll;
        UpdateVar(playerid, "CashMoney", PlayerInfo[playerid][pCashMoney]);

        ResetPlayerMoney(playerid);
        GivePlayerMoney(playerid, PlayerInfo[playerid][pCashMoney]);

        PlayerInfo[playerid][pRespectPoints] += RespectPointsForAll;
        UpdateVar(playerid, "RespectPoints", PlayerInfo[playerid][pRespectPoints]);

        PlayerInfo[playerid][pPremiumPoints] += PremiumPointsForAll;
        UpdateVar(playerid, "PremiumPoints", PlayerInfo[playerid][pPremiumPoints]);
    }

    // abia acum resetezi variabilele 
    SetBonusActiv = 0;
    MoneyAll = 0;
    PremiumPointsForAll = 0;
    RespectPointsForAll = 0;
    PlayersOnlineForBonus = 0;
    return 1;
}

 

  • Thanks 1

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. For more details you can also review our Terms of Use and Privacy Policy.