Ednostaven Matematika SIS

Započeo Smith.amx, Avgust 11, 2020, 21:30:08 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 4 gostiju pregledaju ovu temu.

Tip: FS
Slike ili Video: Testiraj (Sta da slikam nz ..)
Opis i dodatne informacije: //
Download link: https://pastebin.com/DsE1Ah5T
Scan link: pastebin
Credits: ME

Broj od 1 pa do 3 uopste ne trebas cuvati ni dodeljivati memoriju, jer igrac pogadja samo rezultat, a brojeve formatiraj lokalno.
tajmervreme takodje bespotrebno mada ako vec hoces definisi ga s #define.
Takodje bih ti preporucio da poradis na imenovanju varijabli i funkciju da to ima neku povezanost i da znas da su deo tog odredjenog sistema.
Bilo bi dobro da raslojavas provere da na primer ako kviz nije aktivan da uopste ne poziva strval.
GetPlayerName bi mogao pozvati samo pri konekciji igraca i onda koristiti sacuvano ime i update ga ako se slucajno promeni.
Kada saljes ClientMessage igracima ne moras na pocetak stringa dodavati {NEKA BOJA} vec samo iskoristi parametar iz funkcije koja ce sama na pocetak ubaciti boju.

Ovo su samo saveti koji se ne bi trebali smatrati kao uvreda vec nesto sto bi pomoglo nekome ko pravi slicne greske u nekim vecim stvarima.
Poslednja Izmena: Avgust 12, 2020, 01:43:16 PRE PODNE od XACK
Those parts of the system that you can hit with a hammer (not advised) are called hardware; those program instructions that you can only curse at are called software

L3o

*

Kao što ti je rekao Xack, moraš poraditi na kodu. Napravio sam ti jedan primjer dole pa ako želiš pogledaj, također sam malo uredio tvoju skriptu ako netko želi koristiti. Nisam testirao niti compile jer nemam samp ni' pawno, ako netko želi koristiti a ima nekih grešaka neka mi se obrati preko PM-a.

Pastebin.

[pawn]#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define COLOR_WHITE (0xFFFFFFAA)

enum E_MATH_TEST {
   m_result,
   m_reward,
   bool: m_active
}
new MathTest[E_MATH_TEST];

public OnGameModeInit() {

   // reset math-test
    MathTest[m_result] = (0);
   MathTest[m_active] = (false);
   MathTest[m_reward] = (0);
   
   return (true);
}

public OnPlayerText(playerid, text[]) {
   if(strval(text) == MathTest[m_result] && MathTest[m_active] == (true)) {
      new tmpString[90];

        format(tmpString, sizeof(tmpString), "[MATH-TEST]: Odgovorili ste tocno na math-pitanje (rezultat: %d) i zaradili ste %d$.", MathTest[m_result], MathTest[m_reward]);
        SendClientMessageToAll(COLOR_WHITE, (tmpString));

        GivePlayerMoney(playerid, MathTest[m_reward]);

       MathTest[m_result] = (0);
      MathTest[m_active] = (false);
      MathTest[m_reward] = (0);
    }
    return (true);
}

CMD:math(playerid, params[]) {

    if (!IsPlayerAdmin(playerid))
       return SendClientMessage(playerid, COLOR_WHITE, "Ne mozete koristiti ovu komandu.");

   new reward;
   if(sscanf(params, "d", reward))
      return SendClientMessage(playerid, COLOR_WHITE, "[CMD]: /math [reward].");

   new tmpString[64],
      num1 = (0), num2 = (0), num3 = (0);
   MathTest[m_result] = (num1 = random(100)) + (num2 = random(100))-(num3 = random(100));
   MathTest[m_active] = (true);
   MathTest[m_reward] = (reward);

   format(tmpString, sizeof(tmpString), "[MATH-TEST]: Unesite rezultat od (%d+%d-%d), nagrada iznosi %d$.", num1, num2, num3, MathTest[m_reward]);
    SendClientMessageToAll(COLOR_WHITE, (tmpString));

   return (true);
}[/pawn]
retired

Citat: L3o poslato Avgust 12, 2020, 02:26:28 PRE PODNE
Kao što ti je rekao Xack, moraš poraditi na kodu. Napravio sam ti jedan primjer dole pa ako želiš pogledaj, također sam malo uredio tvoju skriptu ako netko želi koristiti. Nisam testirao niti compile jer nemam samp ni' pawno, ako netko želi koristiti a ima nekih grešaka neka mi se obrati preko PM-a.

Pastebin.

[pawn]#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define COLOR_WHITE (0xFFFFFFAA)

enum E_MATH_TEST {
   m_result,
   m_reward,
   bool: m_active
}
new MathTest[E_MATH_TEST];

public OnGameModeInit() {

   // reset math-test
    MathTest[m_result] = (0);
   MathTest[m_active] = (false);
   MathTest[m_reward] = (0);
   
   return (true);
}

public OnPlayerText(playerid, text[]) {
   if(strval(text) == MathTest[m_result] && MathTest[m_active] == (true)) {
      new tmpString[90];

        format(tmpString, sizeof(tmpString), "[MATH-TEST]: Odgovorili ste tocno na math-pitanje (rezultat: %d) i zaradili ste %d$.", MathTest[m_result], MathTest[m_reward]);
        SendClientMessageToAll(COLOR_WHITE, (tmpString));

        GivePlayerMoney(playerid, MathTest[m_reward]);

       MathTest[m_result] = (0);
      MathTest[m_active] = (false);
      MathTest[m_reward] = (0);
    }
    return (true);
}

CMD:math(playerid, params[]) {

    if (!IsPlayerAdmin(playerid))
       return SendClientMessage(playerid, COLOR_WHITE, "Ne mozete koristiti ovu komandu.");

   new reward;
   if(sscanf(params, "d", reward))
      return SendClientMessage(playerid, COLOR_WHITE, "[CMD]: /math [reward].");

   new tmpString[64],
      num1 = (0), num2 = (0), num3 = (0);
   MathTest[m_result] = (num1 = random(100)) + (num2 = random(100))-(num3 = random(100));
   MathTest[m_active] = (true);
   MathTest[m_reward] = (reward);

   format(tmpString, sizeof(tmpString), "[MATH-TEST]: Unesite rezultat od (%d+%d-%d), nagrada iznosi %d$.", num1, num2, num3, MathTest[m_reward]);
    SendClientMessageToAll(COLOR_WHITE, (tmpString));

   return (true);
}[/pawn]

A šta kažeš na ovo? Nisam 100% prepravio kod naravno, mrzelo me, nemam živaca da radim, malo sam ga samo sredio i tjt.
Btw pola od ovoga ja ne koristim tako daa...

[pawn]
#include <a_samp>
#include <zcmd>
#include <sscanf2>


enum E_MATH_TEST
{
   m_result,
   m_reward,

   bool: m_active
};

new MathTest[E_MATH_TEST];


public OnGameModeInit()
{
   // reset math-test
   MathTest[m_active] = false;
   MathTest[m_result] =
   MathTest[m_reward] = 0;

   return 1;
}


public OnPlayerText(playerid, text[])
{
   if(strval(text) == MathTest[m_result] && MathTest[m_active])
   {
      new tmpString[90];

      format(
         tmpString, sizeof(tmpString),
         "[MATH-TEST]: Odgovorili ste tocno na math-pitanje (rezultat: %d) i zaradili ste %d$.",
         MathTest[m_result], MathTest[m_reward]
      );
      SendClientMessageToAll(-1, (tmpString));


      GivePlayerMoney(playerid, MathTest[m_reward]);


      MathTest[m_active] = false;
      MathTest[m_result] =
      MathTest[m_reward] = 0;
   }

   return 1;
}


CMD:math(playerid, const params[])
{
   if (!IsPlayerAdmin(playerid))
      return SendClientMessage(playerid, -1, "Ne mozete koristiti ovu komandu.");


   if (isnull(params))
      return SendClientMessage(playerid, -1, "[CMD]: /math [reward].");


   new
      tmpString[64],

      num1 = 0,
      num2 = 0,
      num3 = 0;


   MathTest[m_result] = (num1 = random(100)) + (num2 = random(100)) - (num3 = random(100));
   MathTest[m_reward] = reward;
   MathTest[m_active] = true;


   format(tmpString, sizeof(tmpString), "[MATH-TEST]: Unesite rezultat od (%d+%d-%d), nagrada iznosi %d$.", num1, num2, num3, MathTest[m_reward]);
   SendClientMessageToAll(-1, (tmpString));

   return 1;
}
[/pawn]
Poslednja Izmena: Avgust 12, 2020, 03:20:21 PRE PODNE od inquisitiveemmett

Totalno odudarate od koncepta koji je ovaj covek odradio.
Dzaba vam rad na drugaciji nacin ako ne pratite sta i kako radite.

Ako je filterskripta onda se po tom formatu i radi, callback break nedostaje, bespotrebne inicijalizacije, bespotrebno includanje sscanfa, da ne nabrajam dalje.

[pawn]
#define FILTERSCRIPT

   /*
       @Dependencies
   */

#include <a_samp>
#include <zcmd>

   /*
       @Configuration
   */

#define MATH_TEST_AUTOTIME (15)
#define MATH_TEST_AUTOREWARD (5000)

   /*
       @Data
   */

enum E_MATH_TEST
{
   m_result,
   m_reward,
   bool: m_active
};

new MathTest[E_MATH_TEST];

   /*
      @Prototypes
   */

forward MathTest_Auto();
stock MathTest_Start(reward);

   /*
       @Native callbacks
   */

public OnFilterScriptInit()
{
   SetTimer("MathTest_Auto", 60000 * MATH_TEST_AUTOTIME, true);
   return 1;
}

public OnPlayerText(playerid, text[])
{
   if(MathTest[m_active])
   {
       if(strval(text) == MathTest[m_result])
      {
         new tmpString[90];

         GetPlayerName(playerid, tmpString);

         format(
            tmpString, sizeof tmpString,
            "[Math]: %s je prvi dao tacan odgovor (rezultat: %d | nagrada: %d$)",
            tmpString, MathTest[m_result], MathTest[m_reward]
         );
         SendClientMessageToAll(-1, tmpString);

         GivePlayerMoney(playerid, MathTest[m_reward]);

         MathTest[m_active] = false;
         MathTest[m_result] =
         MathTest[m_reward] = 0;
         return 0;
      }
   }
   return 1;
}
   /*
       @Function bodies
   */
stock MathTest_Start(reward)
{
   if(reward < 0)
   {
       return 0;
   }
   new
      tmpString[56],
      num[3];

   MathTest[m_result] = (num[0] = random(100)) + (num[1] = random(100)) - (num[2] = random(100));
   MathTest[m_reward] = reward;
   MathTest[m_active] = true;

   format(
      tmpString, sizeof tmpString,
       "[Math]: Izracunajte (%d+%d-%d), nagrada iznosi %d$.",
        num[0], num[1], num[2], MathTest[m_reward]
     );
   SendClientMessageToAll(-1, tmpString);
   return 1;
}

public MathTest_Auto()
{
   MathTest_Start(MATH_TEST_AUTOREWARD);
   return 1;
}

   /*
       @Player area
   */

CMD:math(playerid, const params[])
{
   if(!IsPlayerAdmin(playerid))
   {
      return SendClientMessage(playerid, -1, "Ne mozete koristiti ovu komandu.");
   }

   if(isnull(params))
   {
      return SendClientMessage(playerid, -1, "[CMD]: /math [reward].");
   }
      
   MathTest_Start(strval(params));

   return 1;
}
[/pawn]
Poslednja Izmena: Avgust 12, 2020, 11:54:40 PRE PODNE od XACK
Those parts of the system that you can hit with a hammer (not advised) are called hardware; those program instructions that you can only curse at are called software

Citat: XACK poslato Avgust 12, 2020, 11:53:00 PRE PODNE
Totalno odudarate od koncepta koji je ovaj covek odradio.
Dzaba vam rad na drugaciji nacin ako ne pratite sta i kako radite.

Ako je filterskripta onda se po tom formatu i radi, callback break nedostaje, bespotrebne inicijalizacije, bespotrebno includanje sscanfa, da ne nabrajam dalje.

[pawn]
#define FILTERSCRIPT

   /*
       @Dependencies
   */

#include <a_samp>
#include <zcmd>

   /*
       @Configuration
   */

#define MATH_TEST_AUTOTIME (15)
#define MATH_TEST_AUTOREWARD (5000)

   /*
       @Data
   */

enum E_MATH_TEST
{
   m_result,
   m_reward,
   bool: m_active
};

new MathTest[E_MATH_TEST];

   /*
      @Prototypes
   */

forward MathTest_Auto();
stock MathTest_Start(reward);

   /*
       @Native callbacks
   */

public OnFilterScriptInit()
{
   SetTimer("MathTest_Auto", 60000 * MATH_TEST_AUTOTIME, true);
   return 1;
}

public OnPlayerText(playerid, text[])
{
   if(MathTest[m_active])
   {
       if(strval(text) == MathTest[m_result])
      {
         new tmpString[90];

         GetPlayerName(playerid, tmpString);

         format(
            tmpString, sizeof tmpString,
            "[Math]: %s je prvi dao tacan odgovor (rezultat: %d | nagrada: %d$)",
            tmpString, MathTest[m_result], MathTest[m_reward]
         );
         SendClientMessageToAll(-1, tmpString);

         GivePlayerMoney(playerid, MathTest[m_reward]);

         MathTest[m_active] = false;
         MathTest[m_result] =
         MathTest[m_reward] = 0;
         return 0;
      }
   }
   return 1;
}
   /*
       @Function bodies
   */
stock MathTest_Start(reward)
{
   if(reward < 0)
   {
       return 0;
   }
   new
      tmpString[56],
      num[3];

   MathTest[m_result] = (num[0] = random(100)) + (num[1] = random(100)) - (num[2] = random(100));
   MathTest[m_reward] = reward;
   MathTest[m_active] = true;

   format(
      tmpString, sizeof tmpString,
       "[Math]: Izracunajte (%d+%d-%d), nagrada iznosi %d$.",
        num[0], num[1], num[2], MathTest[m_reward]
     );
   SendClientMessageToAll(-1, tmpString);
   return 1;
}

public MathTest_Auto()
{
   MathTest_Start(MATH_TEST_AUTOREWARD);
   return 1;
}

   /*
       @Player area
   */

CMD:math(playerid, const params[])
{
   if(!IsPlayerAdmin(playerid))
   {
      return SendClientMessage(playerid, -1, "Ne mozete koristiti ovu komandu.");
   }

   if(isnull(params))
   {
      return SendClientMessage(playerid, -1, "[CMD]: /math [reward].");
   }
      
   MathTest_Start(strval(params));

   return 1;
}
[/pawn]
Ja sam rekao da nisam skroz sredio kod, samo ga malo sredio, uredio, i to, ništa ga nisam optimizovao i to. Tako da..

Citat: inquisitiveemmett poslato Avgust 12, 2020, 12:08:27 POSLE PODNE
Ja sam rekao da nisam skroz sredio kod, samo ga malo sredio, uredio, i to, ništa ga nisam optimizovao i to. Tako da..
Problem je sto si ga jos vise zabrljavio, tj. ni ne moze se compile, komanda bi primala prazne parametre, nema returna u OPT itd..
Those parts of the system that you can hit with a hammer (not advised) are called hardware; those program instructions that you can only curse at are called software

Ja ću samo reći da se funkcija uvek piše ovako

[pawn]main()
{
   return;
} [/pawn]

Bez obzira da li se koristi ALLMAN ili K&R (ovako i jeste pravilno u K&Ru bez obzira što inače curly bracket ide u isti red u drugim slučajevima)

EDIT: Što se samog sistema tiče (ne pričam o kodu ne loži se) je mnogo jednostavan tako da sumnjam da bi bilo gde imao primenu kada je uvek nesto+nesto-nesto...
Poslednja Izmena: Avgust 12, 2020, 12:17:21 POSLE PODNE od Alhemičar v2

Citat: XACK poslato Avgust 12, 2020, 12:12:14 POSLE PODNE
Problem je sto si ga jos vise zabrljavio, tj. ni ne moze se compile, komanda bi primala prazne parametre, nema returna u OPT itd..
Šta pričaš ti? Isto si uradio komandu kao i ja samo što si one stvari dole pobacao u funkciju i to je to  ???
EDIT: I dodao
[pawn]
// Umesto ovoga (mog)
if (!IsPlayerAdmin(playerid))
      return SendClientMessage(playerid, -1, "Ne mozete koristiti ovu komandu.");


   if (isnull(params))
      return SendClientMessage(playerid, -1, "[CMD]: /math [reward].");

// Si dodao ovo
if(!IsPlayerAdmin(playerid))
   {
      return SendClientMessage(playerid, -1, "Ne mozete koristiti ovu komandu.");
   }

   if(isnull(params))
   {
      return SendClientMessage(playerid, -1, "[CMD]: /math [reward].");
   }
[/pawn]

Ne bodi se više pls

EDIT 2: Ja sam samo uredio kod, nisam ga ništa dodavao/oduzimao osim što sam obrisao COLOR_WHITE i zamenio sa -1...  ::) Tako da, nije moj problem što neće da se compile, ne nameravam da sređujem tuđe kodove baš
Poslednja Izmena: Avgust 12, 2020, 13:04:33 POSLE PODNE od inquisitiveemmett

Citat: inquisitiveemmett poslato Avgust 12, 2020, 13:01:37 POSLE PODNE
Šta pričaš ti? Isto si uradio komandu kao i ja samo što si one stvari dole pobacao u funkciju i to je to  ???
EDIT: I dodao
[pawn]
// Umesto ovoga (mog)
if (!IsPlayerAdmin(playerid))
      return SendClientMessage(playerid, -1, "Ne mozete koristiti ovu komandu.");


   if (isnull(params))
      return SendClientMessage(playerid, -1, "[CMD]: /math [reward].");

// Si dodao ovo
if(!IsPlayerAdmin(playerid))
   {
      return SendClientMessage(playerid, -1, "Ne mozete koristiti ovu komandu.");
   }

   if(isnull(params))
   {
      return SendClientMessage(playerid, -1, "[CMD]: /math [reward].");
   }
[/pawn]

Ne bodi se više pls

EDIT 2: Ja sam samo uredio kod, nisam ga ništa dodavao/oduzimao osim što sam obrisao COLOR_WHITE i zamenio sa -1...  ::) Tako da, nije moj problem što neće da se compile, ne nameravam da sređujem tuđe kodove baš

Gle, prvenstveno, ovaj lik nije uopste napravio komandu vec tajmer koji automatski pokrece kviz svakih 15 minuta.
Ti si onda dosao i stavio komandu takvu da kada je upises uvek ce se slati prazan parametar.
Zapeo si za komandu, a ostalo nisi ni video gde si pogresio.
Navikli ste da includovi rade za vas, a sami ne znate proste stvari uraditi.

Svadje bez pls  :P
Poslednja Izmena: Avgust 12, 2020, 13:22:40 POSLE PODNE od XACK
Those parts of the system that you can hit with a hammer (not advised) are called hardware; those program instructions that you can only curse at are called software

Citat: XACK poslato Avgust 12, 2020, 13:20:21 POSLE PODNE
Gle, prvenstveno, ovaj lik nije uopste napravio komandu vec tajmer koji automatski pokrece kviz svakih 15 minuta.
Ti si onda dosao i stavio komandu takvu da kada je upises uvek ce se slati prazan parametar.
Zapeo si za komandu, a ostalo nisi ni video gde si pogresio.
Navikli ste da includovi rade za vas, a sami ne znate proste stvari uraditi.

Svadje bez pls  :P
Šta sam ja pogrešio ostalo kad nisam ništa radio osim kao što sam rekao promenio color white u -1 i rokao new line ??

Citat: inquisitiveemmett poslato Avgust 12, 2020, 13:25:56 POSLE PODNE
Šta sam ja pogrešio ostalo kad nisam ništa radio osim kao što sam rekao promenio color white u -1 i rokao new line ??
Samim tim sto si odobrio pisanje takvog koda te kritikujuci mene za komandu na kojoj si ti napravio gresku.
Jeste da si sredio imenovanje, ali ostalo je isto kao kod ovog lika.
Those parts of the system that you can hit with a hammer (not advised) are called hardware; those program instructions that you can only curse at are called software

Citat: XACK poslato Avgust 12, 2020, 13:27:35 POSLE PODNE
Samim tim sto si odobrio pisanje takvog koda te kritikujuci mene za komandu na kojoj si ti napravio gresku.
Jeste da si sredio imenovanje, ali ostalo je isto kao kod ovog lika.
Njegov kod sam editovao :=





Citat: L3o poslato Avgust 12, 2020, 02:26:28 PRE PODNE
Kao što ti je rekao Xack, moraš poraditi na kodu. Napravio sam ti jedan primjer dole pa ako želiš pogledaj, također sam malo uredio tvoju skriptu ako netko želi koristiti. Nisam testirao niti compile jer nemam samp ni' pawno, ako netko želi koristiti a ima nekih grešaka neka mi se obrati preko PM-a.

Pastebin.

[pawn]#include <a_samp>
#include <zcmd>
#include <sscanf2>

#define COLOR_WHITE (0xFFFFFFAA)

enum E_MATH_TEST {
   m_result,
   m_reward,
   bool: m_active
}
new MathTest[E_MATH_TEST];

public OnGameModeInit() {

   // reset math-test
    MathTest[m_result] = (0);
   MathTest[m_active] = (false);
   MathTest[m_reward] = (0);
   
   return (true);
}

public OnPlayerText(playerid, text[]) {
   if(strval(text) == MathTest[m_result] && MathTest[m_active] == (true)) {
      new tmpString[90];

        format(tmpString, sizeof(tmpString), "[MATH-TEST]: Odgovorili ste tocno na math-pitanje (rezultat: %d) i zaradili ste %d$.", MathTest[m_result], MathTest[m_reward]);
        SendClientMessageToAll(COLOR_WHITE, (tmpString));

        GivePlayerMoney(playerid, MathTest[m_reward]);

       MathTest[m_result] = (0);
      MathTest[m_active] = (false);
      MathTest[m_reward] = (0);
    }
    return (true);
}

CMD:math(playerid, params[]) {

    if (!IsPlayerAdmin(playerid))
       return SendClientMessage(playerid, COLOR_WHITE, "Ne mozete koristiti ovu komandu.");

   new reward;
   if(sscanf(params, "d", reward))
      return SendClientMessage(playerid, COLOR_WHITE, "[CMD]: /math [reward].");

   new tmpString[64],
      num1 = (0), num2 = (0), num3 = (0);
   MathTest[m_result] = (num1 = random(100)) + (num2 = random(100))-(num3 = random(100));
   MathTest[m_active] = (true);
   MathTest[m_reward] = (reward);

   format(tmpString, sizeof(tmpString), "[MATH-TEST]: Unesite rezultat od (%d+%d-%d), nagrada iznosi %d$.", num1, num2, num3, MathTest[m_reward]);
    SendClientMessageToAll(COLOR_WHITE, (tmpString));

   return (true);
}[/pawn]

Citat: inquisitiveemmett poslato Avgust 12, 2020, 13:30:23 POSLE PODNE
Njegov kod sam editovao :=





Svejedno je ciji je, ne radi kako bi trebalo da radi.
Those parts of the system that you can hit with a hammer (not advised) are called hardware; those program instructions that you can only curse at are called software

Citat: XACK poslato Avgust 12, 2020, 13:33:13 POSLE PODNE
Svejedno je ciji je, ne radi kako bi trebalo da radi.
Pa to nije moj problem, nisam ja sjebao kod jer ga nisam ni radio, sjebao ga je L3o i ovaj što ga je napravio i objavio.. Ja niti imam samp na ovom kompu, niti gta, niti compiler, nemam baš ništa tako da me realno ne interesuje šta su radili, ja sam samo pokazao kako bi bilo da malo promeni stil pisanja koda, ništa više, ništa. Tako da nema potrebe da mi pričaš da ništa ne znam i tako to slično, et...