Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

Negalima prašyti ar platinti betkokių žaidimą (multiplayer) palengvinančių programų ir scriptų! Kitaip bus taikoma 1.21. taisyklė

[Skriptas]Alga kas 30min


LaurynasJ

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3209 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Žiūriu čia apmirus šita forumo skiltis tai įkelsiu pora savo gamintų skriptų. Na nes ir pats pradėjau suprasti tik lipdydamas kodą iš forumų į savo GM, tai gal kam pravers :)

 

Viršui prie visų define :

#define COLOR_LIGHTRED 0xFF6347AA

#define COL_INFO            "{64E66D}"

 

Po OnGameModeInit dedam šitą:

  SetTimer("Algos", 1800000, true);

 

Prie visų forward'ų dedam šitą :

 

forward Algos();

public Algos()

{

  for(new i = 0; i < MAX_PLAYERS; i++)

  {

if(IsPlayerConnected(i))

{

new String[160];

format(String, sizeof(String), ""#COL_INFO"Jūsų darbo alga(%i €) pervesta į jūsų banko sąskaitą.", pDB[Alga]);

if(pDB[Alga] == 0) return 1;

SendClientMessage(i, COLOR_LIGHTRED, "[bankas] SMS žinutė >> [Jums]");

SendClientMessage(i, -1, String);

pDB[MoneyInBank] += pDB[Alga];

pDB[Alga] = 0;

pDB[MoneyInBank] -= 50;//už žinute(nu tp už banko paslaugas)

    new Strings[160];

format(Strings, sizeof(Strings), ""#COL_INFO"Dabartinis likutis : %i €", pDB[MoneyInBank]);

SendClientMessage(i, -1, Strings);

printf("Išmokame algas :)");

}

}

return 1;

}

 

Jeigu ką pamiršau pasakykit, nes seniai jau bandęs su pawno, tiesiog mano seniai darytas skriptas.

Redaguota , nario LaurynasJ
Nuoroda į komentarą
Dalintis per kitą puslapį

Galima ir truputį efektyviau parašyti kodą, beje, ir lengviau skaitomą.

 

#define COLOR_LIGHTRED             0xFF6347AA
#define COLOR_INFO                0x64E66DAA

SetTimer ("Algos", (1000 * 60) * 30, true);

forward Algos ();
public  Algos ()
{
    for (new i, j = GetPlayerPoolSize (); i <= j; i++)
    {
        if (pDB [i][Alga] == 0)
            (continue);

        SendClientMessage (i, COLOR_LIGHTRED, "[Bankas] SMS žinutė >> [Jums]");

        new
            payoutMessage [57 + 1];

        format (payoutMessage, 57, "Jūsų darbo alga (%d €) pervesta į Jūsų banko sąskaitą.", pDB [i][Alga]);
        SendClientMessage (i, COLOR_INFO, payoutMessage);

        pDB [i][MoneyInBank] += pDB [i][Alga] - 50;
        pDB [i][Alga] = 0;

        format (payoutMessage, 33, "Dabartinis likutis: %i €", pDB[i][MoneyInBank]);
        SendClientMessage (i, COLOR_INFO, payoutMessage);
    }

    return (true);
}
Nuoroda į komentarą
Dalintis per kitą puslapį

(redaguota)

 

Galima ir truputį efektyviau parašyti kodą, beje, ir lengviau skaitomą.

#define COLOR_LIGHTRED             0xFF6347AA
#define COLOR_INFO                0x64E66DAA

SetTimer ("Algos", (1000 * 60) * 30, true);

forward Algos ();
public  Algos ()
{
    for (new i, j = GetPlayerPoolSize (); i <= j; i++)
    {
        if (pDB [i][Alga] == 0)
            (continue);

        SendClientMessage (i, COLOR_LIGHTRED, "[Bankas] SMS žinutė >> [Jums]");

        new
            payoutMessage [57 + 1];

        format (payoutMessage, 57, "Jūsų darbo alga (%d €) pervesta į Jūsų banko sąskaitą.", pDB [i][Alga]);
        SendClientMessage (i, COLOR_INFO, payoutMessage);

        pDB [i][MoneyInBank] += pDB [i][Alga] - 50;
        pDB [i][Alga] = 0;

        format (payoutMessage, 33, "Dabartinis likutis: %i €", pDB[i][MoneyInBank]);
        SendClientMessage (i, COLOR_INFO, payoutMessage);
    }

    return (true);
}

 

Na taip pas tave čia mandriau kažkaip, tikiu kad ir efektyviau, bet kažkaip darau viską paprasčiausiu būdu :D

"if(pDB[Alga] == 0) return 1;" wat :D:D

Jeigu algos nėra(ji lygi nuliui), tai nevykdo toliau esančių dalykų :)

Redaguota , nario LaurynasJ
Nuoroda į komentarą
Dalintis per kitą puslapį

for(new i = 0; i < MAX_PLAYERS; i++)
Geriau naudoti:

new b = GetPlayerPoolSize();
for(new a = 0; a < b + 1; a++)
- todėl, kad ciklui užbaigs procesą greičiau. Ciklas veiks nuo 0 ID iki maks. žaidėjo ID serveryje.

Pvz serveryje yra 2 žaidėjai, žaidėjo X ID: 1, žaidėjo Y ID: 9. Tavo variantas veiks taip: 0-MAX_PLAYERS, o tas su GetPlayerPoolSize veiks: 0-9.

if(pDB[i][Alga] == 0) return 1;
Jeigu žaidėjas (ID 5) turės algoje 0$ - ciklas bus nutrauktas ir žaidėjas kurio ID yra didesnis už ten tą (5 ID), negaus $.

new String[160];
format(String, sizeof(String), ""#COL_INFO"Jūsų darbo alga(%i €) pervesta į jūsų banko sąskaitą.", pDB[i][Alga]);
Maks. string'o ilgis: 72 simboliai, o pas tave 160, tai dar papildomai naudoji nereikalingą funkciją (sizeof).

new Strings[160];
format(Strings, sizeof(Strings), ""#COL_INFO"Dabartinis likutis : %i €", pDB[i][MoneyInBank]);
SendClientMessage(i, -1, Strings);
- analogiškai, + dar sukuri naują string'ą, kai gali naudoti tik vieną (new String[72];).
Nuoroda į komentarą
Dalintis per kitą puslapį

for(new i = 0; i < MAX_PLAYERS; i++)
Geriau naudoti:

new b = GetPlayerPoolSize();
for(new a = 0; a < b + 1; a++)
- todėl, kad ciklui užbaigs procesą greičiau. Ciklas veiks nuo 0 ID iki maks. žaidėjo ID serveryje.

Pvz serveryje yra 2 žaidėjai, žaidėjo X ID: 1, žaidėjo Y ID: 9. Tavo variantas veiks taip: 0-MAX_PLAYERS, o tas su GetPlayerPoolSize veiks: 0-9.

if(pDB[i][Alga] == 0) return 1;
Jeigu žaidėjas (ID 5) turės algoje 0$ - ciklas bus nutrauktas ir žaidėjas kurio ID yra didesnis už ten tą (5 ID), negaus $.

new String[160];
format(String, sizeof(String), ""#COL_INFO"Jūsų darbo alga(%i €) pervesta į jūsų banko sąskaitą.", pDB[i][Alga]);
Maks. string'o ilgis: 72 simboliai, o pas tave 160, tai dar papildomai naudoji nereikalingą funkciją (sizeof).

new Strings[160];
format(Strings, sizeof(Strings), ""#COL_INFO"Dabartinis likutis : %i €", pDB[i][MoneyInBank]);
SendClientMessage(i, -1, Strings);
- analogiškai, + dar sukuri naują string'ą, kai gali naudoti tik vieną (new String[72];).

 

Aha ir pats dabar žiūriu, kad viską galima padaryti kiek kitaip ir veiksmingiau. Ačiū ! :)

Nuoroda į komentarą
Dalintis per kitą puslapį

Nesvarbu, kad viską, ką jis pasakė (100% tas pats), jau pora dienų aš įkėlęs. :D

Uoj. Nemačiau tavo komentaro.

for (new i, j = GetPlayerPoolSize (); i <= j; i++)
Geriau vieną kartą įrašyt GetPlayerPoolSize reikšmė į kint., nei kiek vieną kartą vėl traukt informacija (ilgiau užtrunka).
Nuoroda į komentarą
Dalintis per kitą puslapį

Nesvarbu, kad viską, ką jis pasakė (100% tas pats), jau pora dienų aš įkėlęs. :D

Taip mačiau tavo, bet gan sudėtingai pasirodė tavo viskas. Tarkim payoutmesssage(57+1), kodėl iškarto ne 58 ? :D Ir tie visi (continue), return (true) ir panašiai labai jau painiai atrodo, viskas paprasčiau taip standartiškai :D

Nuoroda į komentarą
Dalintis per kitą puslapį

Uoj. Nemačiau tavo komentaro.

for (new i, j = GetPlayerPoolSize (); i <= j; i++)
Geriau vieną kartą įrašyt GetPlayerPoolSize reikšmė į kint., nei kiek vieną kartą vėl traukt informacija (ilgiau užtrunka).

 

Nea, maišai. Čia tu kalbi apie tą variantą, jei būtų taip:

 

for (new i; i <= GetPlayerPoolSize (); i++). Mano atveju kodas yra identiškas su tavo.

 

 

@LaurynasJ:

 

continue - praleidžia ciklo "dalį" (nežinau kaip lietuviškai :D angliškai iteration). Šiuo atveju jei nieko neuždirbęs, tiesiog pereis prie sekančio žaidėjo.

 

o return true/false tai čia tas pats kas return 1/0, manau jau žinai tai

Redaguota , nario b3nz
Nuoroda į komentarą
Dalintis per kitą puslapį

Taip mačiau tavo, bet gan sudėtingai pasirodė tavo viskas. Tarkim payoutmesssage(57+1), kodėl iškarto ne 58 ? :D Ir tie visi (continue), return (true) ir panašiai labai jau painiai atrodo, viskas paprasčiau taip standartiškai :D

if (pDB [i][Alga] == 0) (continue);
return (true);
Tiesiog beprasmiškai prirašyti 4 skliaustai.

Continue - praleidžia žemiau esanti kodą, cikle (tik jame). Return - gražina tam tikrą reikšmę, šio atveju: 0 (kas nebūtina).

new payoutMessage [57 + 1];
Čia neaišku kodėl taip paraše, galbūt 57 - pats string'as, o 1 - kontrolinis skaičius (nežinau kaip jį pavadinti; 0), naudojamas tam, kad tilptu visas string'as. Tik šio atveju jeigu string'o ilgis bus 57 simb., tai vienas simbolis (paskutinis) netilps, todėl, kad kontrolinis skaičius užims jo vietą. Taip yra todėl, kad format'e naudoja 57 simb. ilgį. vietoj 58.

 

Nea, maišai. Čia tu kalbi apie tą variantą, jei būtų taip:

for (new i; i <= GetPlayerPoolSize (); i++). Mano atveju kodas yra identiškas su tavo.

Atsiprašau. Nepastebėjau, my bad. Pasirodė, kad išgauni reikšmę kiek vieną kartą. Pagal testų rez. kažkodėl tai tavo variantas veikia greičiau. Bet jeigu varyt aukštyn kojom, gaunasi greičiau - testų rezultatai (pastebin). Redaguota , nario ES.^
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3209 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Prisijungti prie diskusijos

Palikti atsakymą galite iš karto, o užsiregistruoti vėliau. Jeigu jau turite paskyrą mūsų forume, Prisijunkite.

Svečias
Atsakyti šioje temoje...

×   Įklijuotas tekstas turi teksto formatavimą.   Pašalinti teksto formatavimą

  Galimi tik 75 veidukai.

×   Nuoroda buvo automatiškai įterpta.   Įterpti nuorodą paprastai

×   Jūsų ankstesnis pranešimas buvo atkurtas.   Išvalyti redaktorių

×   Jūs negalite įkelti nuotraukas tiesiogiai.Įkelkite arba įdėkite nuotraukas iš URL.

  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...