Jump to content
  • 0

pomoc Správa po vykonaní


Marshall_

Dotaz

Popis problému:

Zdravím,

 

Skúšam vytvoriť jednoduchý dice systém, ale neviem ako vypísať správu do chatu po vykonaní kola. Myslím tým niečo ako:

SendClientMessage(playerid, RUZOVA, "Vyhrali ste!");
SendClientMessage(playerid, RUZOVA, "Prehrali ste!");
SendClientMessage(playerid, RUZOVA, "Remíza!");
Tu je ukážka môjho kódu. Používan #include strlib (http://forum.sa-mp.com/showthread.php?t=85697). Nejaké rady ako na to?

 

Chyby/varování kompilátoru a při běhu:

--

 

Kód:

 

#include 

#define ZELENA 0x55D57BFF
#define CERVENA 0xFF2F2FFF
#define RUZOVA 0xFF80C0FF

public OnPlayerCommandText(playerid, cmdtext[])
{


//Kocka test

  if (strcmp("/kocka", cmdtext)== 0)
{
    new KockaCislo = random(6) +1;
    new stringKockaCislo[2];
      valstr (stringKockaCislo, KockaCislo);
SendClientMessage(playerid, ZELENA, str_replace("DICENUMBERCLIENT", stringKockaCislo, "Hodili ste DICENUMBERCLIENT"));
   for (new pc = 0; pc < MAX_PLAYERS; pc++)
  {
    new KockaCisloPC = random(6) +1;
     new stringKockaCisloPC[2];
     valstr (stringKockaCisloPC, KockaCisloPC);
SendClientMessage(pc, CERVENA, str_replace("DICENUMBERPC", stringKockaCisloPC, "PC hodil DICENUMBERPC"));
  }
return 1;
}

//Kocka test

 

 

 

Dodatečné poznámky:

--

Link to comment
Share on other sites

13 odpovědí na tuto otázku

Recommended Posts

  • 0

if(KockaCislo > KockaCisloPC) SendClientMessage(playerid, RUZOVA, "Vyhrali ste!");
if(KockaCisloPC > KockaCislo) SendClientMessage(playerid, RUZOVA, "Prehrali ste!");
if(KockaCislo == KockaCisloPC) SendClientMessage(playerid, RUZOVA, "Remíza!");
Edited by EvoLve.
Link to comment
Share on other sites

  • 1
  • Globální moderátor

Tvl nez to zacne byt tvym standardem v modu :d

new KockaCislo = random(6) +1;
new stringKockaCislo[2];
valstr (stringKockaCislo, KockaCislo);
SendClientMessage(playerid, ZELENA, str_replace("DICENUMBERCLIENT", stringKockaCislo, "Hodili ste DICENUMBERCLIENT"));

Celej tenhle bullshit se da prepsat na:

new kockaCislo = random(6) + 1;
new str[128];
format(str,sizeof(str),"Hodili ste %d",kockaCislo);
SendClientMessage(playerid,ZELENA,str);

http://wiki.sa-mp.com/wiki/Format

Link to comment
Share on other sites

  • 0

ďakujem EvoLve, že ma taká to primitívnosť nenapadla, naozaj... :d 

Inak HighPrint, ďakujem aj tebe. Nevedel som nájsť čo to znamená to %d %s apod :d Som nováčik a stále sa učím. Určite to vylepším :)

Taktiež vie mi niekto poradiť ako opraviť loose indentation warningy?

Link to comment
Share on other sites

  • 0

ďakujem EvoLve, že ma taká to primitívnosť nenapadla, naozaj... :d

Inak HighPrint, ďakujem aj tebe. Nevedel som nájsť čo to znamená to %d %s apod :d Som nováčik a stále sa učím. Určite to vylepším :).

Taktiež vie mi niekto poradiť ako opraviť loose indentation warningy?

 

Odtabuj si to..

Pod každou složenou závorku dej tab

if(blabla)
{ 
Zde stiskni tab a piš kód, udělá ti to velkou mezeru a budeš mít přehlednější kód
A až zase budeš dávat uzavírací závorku, tak ten tab smaž, nevím přesně jak to vysvětlit, tak to napíšu (btw jsem na mobilu takže to budu dělat mezerama :d )

 

public OnPlayerConnect(playerid, reason[])
{
      if(...)
      {           
            .. kód
      } Zde u uzavírací závorky jsme zase odebrali tab nad tímto řádkem
      return 1;
}
Edited by Rawy
Link to comment
Share on other sites

  • 0

Rawy, stlačilo to napísať stručne ako raz písal ATomas :d Za každou { dáš TAB, a za } dáš o TAB menej.. :)


Ale, ten warning len upozorňuje že je zlé tabovanie.. Nijak to nezasahuje do kódu, ani do funkčnosti kódu.. Všetko pôjde ako má

Link to comment
Share on other sites

  • 0

Ďakujem ešte raz za rady icon_e_smile.gif Vážim si to.

 

Tu je kód: 

 

//Kocka


  if (strcmp("/kocka", cmdtext)== 0)
{
    if (GetPlayerMoney(playerid) == 0){
SendClientMessage(playerid, SCERVENA, "Nedostatok financií na účte! Potrebuješ minimálne 1000$!");
}
else {
    GivePlayerMoney(playerid, -1000);
    new KockaCislo = random(6) +1;
    new stringKockaCislo[128];
        format(stringKockaCislo, sizeof(stringKockaCislo), "Hodili ste %d", KockaCislo);
SendClientMessage(playerid, ZELENA,stringKockaCislo);
   for (new pc = 0; pc < MAX_PLAYERS; pc++)
  {
    new KockaCisloPC = random(6) +1;
     new stringKockaCisloPC[128];
     format(stringKockaCisloPC, sizeof(stringKockaCisloPC), "Počítač hodil %d", KockaCisloPC);
SendClientMessage(pc,CERVENA,stringKockaCisloPC);
  }
  #define KockaCisloPC 2
  if(KockaCislo > KockaCisloPC)
     {
          SendClientMessage(playerid, RUZOVA, "Vyhrali ste!");
          GivePlayerMoney(playerid, 2000);
}
  else if(KockaCislo < KockaCisloPC)
     {
          SendClientMessage(playerid, RUZOVA, "Prehrali ste!");
}
  else
     {
          SendClientMessage(playerid, RUZOVA, "Remíza!");
  GivePlayerMoney(playerid, 1000);
}
}
return 1;
}

//Kocka
   
 
No bohužiaľ vyskytol sa ďalší problém, ktorý netuším ako opraviť. Ako vidíte na obrázku, hodilo to remízu aj keď som hodil 2 a počítač 6. Viete niekto ako toto fixnúť?
QSgq.png
Edited by Marshall_
Link to comment
Share on other sites

  • 0

 

 

 

else if(KockaCislo == KockaCisloPC) // CHYBA TADY

 if (strcmp("/kocka", cmdtext)== 0)
{
    if (GetPlayerMoney(playerid) == 0){
SendClientMessage(playerid, SCERVENA, "Nedostatok financií na účte! Potrebuješ minimálne 1000$!");
}
else {
    GivePlayerMoney(playerid, -1000);
    new KockaCislo = random(6) +1;
    new stringKockaCislo[128];
        format(stringKockaCislo, sizeof(stringKockaCislo), "Hodili ste %d", KockaCislo);
SendClientMessage(playerid, ZELENA,stringKockaCislo);
  for (new pc = 0; pc < MAX_PLAYERS; pc++)
  {
    new KockaCisloPC = random(6) +1;
    new stringKockaCisloPC[128];
    format(stringKockaCisloPC, sizeof(stringKockaCisloPC), "Počítač hodil %d", KockaCisloPC);
SendClientMessage(pc,CERVENA,stringKockaCisloPC);
  }
  #define KockaCisloPC 2
  if(KockaCislo > KockaCisloPC)
     {
          SendClientMessage(playerid, RUZOVA, "Vyhrali ste!");
          GivePlayerMoney(playerid, 2000);
}
  else if(KockaCislo < KockaCisloPC)
     {
          SendClientMessage(playerid, RUZOVA, "Prehrali ste!");
}
  else if(KockaCislo == KockaCisloPC) // CHYBA TADY
     {
          SendClientMessage(playerid, RUZOVA, "Remíza!");
  GivePlayerMoney(playerid, 1000);
}
}
return 1;
}


 

 

Edited by SnOwY_
Link to comment
Share on other sites

  • 0

a teď ?

 

 

 if (strcmp("/kocka", cmdtext)== 0)
 {
 if (GetPlayerMoney(playerid) == 0) return SendClientMessage(playerid,SCERVENA,"Nedostatok financií na účte! Potrebuješ minimálne 1000$!");

 GivePlayerMoney(playerid, -1000);
 new KockaCislo = random(6) +1,stringKockaCislo[128];

 format(stringKockaCislo, sizeof(stringKockaCislo), "Hodili ste %d", KockaCislo);
 SendClientMessage(playerid, ZELENA,stringKockaCislo);

 for (new pc = 0; pc < MAX_PLAYERS; pc++)
 {
 new KockaCisloPC = random(6) +1,stringKockaCisloPC[128];

 format(stringKockaCisloPC, sizeof(stringKockaCisloPC), "Počítač hodil %d",   KockaCisloPC);
 SendClientMessage(pc,CERVENA,stringKockaCisloPC);
 }

 #define KockaCisloPC 2
 if(KockaCislo > KockaCisloPC)
 {
 SendClientMessage(playerid, RUZOVA, "Vyhrali ste!");
 GivePlayerMoney(playerid, 2000);
 }

 else if(KockaCislo < KockaCisloPC)
 {
 SendClientMessage(playerid, RUZOVA, "Prehrali ste!");
 }

 else if(KockaCislo == KockaCisloPC) // CHYBA TADY
 {
 SendClientMessage(playerid, RUZOVA, "Remíza!");
 GivePlayerMoney(playerid, 1000);
 }
 return 1;
 } 

 

 

Edited by SnOwY_
Link to comment
Share on other sites

  • 0

Snáď to pomôže (netestoval som):

 

 

public OnPlayerCommandText(playerid, cmdtext[])
{
    if (!strcmp("/kocka", cmdtext, true)) // !strcmp(...) je to samé čo strcmp(...) == 0, true tam je kvôli tomu, aby fungoval napríklad príkaz /KoCkA (ignorecase)
    {
        if (GetPlayerMoney(playerid) < 1000) // nechceme, aby išiel hráč do mínusu
            return SendClientMessage(playerid, SCERVENA, "Nedostatok financií na účte! Potrebuješ minimálne 1000$!");
	// Pomocou return sa vyskočí z publicu => netreba písať else => ušetríme si odsadenie, SendClientMessage vracia vždy 1, ak je hráč pripojený (čo je, keďže píše príkaz)

    	GivePlayerMoney(playerid, -1000);
    	new numPlayer = random(6) + 1; // číslo z {0,1,2,3,4,5} + 1
    	new msg[128];
        format(msg, sizeof(msg), "Hodili ste %d", numPlayer);
	SendClientMessage(playerid, ZELENA, msg);
	// Odstránený for cyklus, k čomu vôbec slúžil? Nedáva mi to zmysel
	new numPC = random(6) + 1;
	format(msg, sizeof(msg), "Počítač hodil %d", numPC);
	SendClientMessage(playerid, CERVENA, msg);
	// Čo tu robil riadok #define KockaCisloPC 2? Chceš, aby počítač vždy hodil 2? Ak áno, uprav riadok new numPC = 2, potom by ale spamovanie /kocka bol spôsob, ako si zarobiť peniaze;
        if (numPlayer > numPC)
    	{
            SendClientMessage(playerid, RUZOVA, "Vyhrali ste!");
	    GivePlayerMoney(playerid, 2000);
	}
	else if (numPlayer < numPC)
    	{
            SendClientMessage(playerid, RUZOVA, "Prehrali ste!");
	}
        else // Stačí napísať else, je jasné, že keď neplatí numPlayer > numPC ani numPlayer < numPC, musí platiť numPlayer == numPC
    	{
            SendClientMessage(playerid, RUZOVA, "Remíza!");
	    GivePlayerMoney(playerid, 1000);
	}
	return 1;
    }
    return 0;
} 

 

 

Edited by DuFF
  • Líbí se mi to! (+1) 1
Link to comment
Share on other sites

  • 0

Skvelé Duff, ďakujem ti za pomoc :) Konečne to funguje. Samozrejme ďakujem všetkým za čas strávený pomáhaním a radami, vážim si to :) for tam bolo ešte z prvého kódu ktorý som si vytvoril. Čo sa týka riadku #define-u, bol tam z dôvodu, že mi to hádzalo errory typu: KockaCisloPC je undefinovaná. 

Tak či tak, znova ďakujem :)

Link to comment
Share on other sites

  • 0

To, že KockaCisloPC nebola definovaná, ti písalo preto, že išlo o lokálnu premennú a snažil si sa ju použiť v bloku, v ktorom si ju nedeklaroval, príklad:
 

 

new glob1; // premenná glob1 sa dá použiť všade - je "globálna", deklarovaná mimo bloku
public OnPlayerConnect(playerid) 
{ 
    new local1 = GetPlayerMoney(playerid); // premenná local1 sa dá použiť v celom OnPlayerConnect - je "lokálna" 
    if (local1 > 0) 
    { 
        new local2; // premenná local2 sa dá použiť iba v tele ifu 
        glob1 = 1; // všetko OK 
    } 
    else 
    { 
        new local3; // premenná local3 sa dá použiť iba v tele else 
        glob1 = 2; // všetko OK 
        local2 = 1; // error => premenná local2 nie je definovaná 
    } 
    return 1; 
} 

 

 

Edited by DuFF
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...