Marshall_ 0 Odesláno: 13. Leden, 2018 Share Odesláno: 13. Leden, 2018 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 More sharing options...
0 Guyy 14 Odesláno: 13. Leden, 2018 Share Odesláno: 13. Leden, 2018 (upraveno) 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 13. Leden, 2018 by EvoLve. Link to comment Share on other sites More sharing options...
1 Globální moderátor HighPrint 177 Odesláno: 13. Leden, 2018 Globální moderátor Share Odesláno: 13. Leden, 2018 Tvl nez to zacne byt tvym standardem v modu 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 More sharing options...
0 Marshall_ 0 Odesláno: 13. Leden, 2018 Author Share Odesláno: 13. Leden, 2018 ďakujem EvoLve, že ma taká to primitívnosť nenapadla, naozaj... Inak HighPrint, ďakujem aj tebe. Nevedel som nájsť čo to znamená to %d %s apod 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 More sharing options...
0 Rawy 18 Odesláno: 13. Leden, 2018 Share Odesláno: 13. Leden, 2018 (upraveno) ďakujem EvoLve, že ma taká to primitívnosť nenapadla, naozaj... Inak HighPrint, ďakujem aj tebe. Nevedel som nájsť čo to znamená to %d %s apod 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ódA 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 ) public OnPlayerConnect(playerid, reason[]) { if(...) { .. kód } Zde u uzavírací závorky jsme zase odebrali tab nad tímto řádkem return 1; } Edited 13. Leden, 2018 by Rawy Link to comment Share on other sites More sharing options...
0 Guyy 14 Odesláno: 13. Leden, 2018 Share Odesláno: 13. Leden, 2018 Rawy, stlačilo to napísať stručne ako raz písal ATomas 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 More sharing options...
0 Marshall_ 0 Odesláno: 13. Leden, 2018 Author Share Odesláno: 13. Leden, 2018 (upraveno) Ďakujem ešte raz za rady 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úť? Edited 13. Leden, 2018 by Marshall_ Link to comment Share on other sites More sharing options...
0 SnOwY_ 9 Odesláno: 13. Leden, 2018 Share Odesláno: 13. Leden, 2018 (upraveno) 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 13. Leden, 2018 by SnOwY_ Link to comment Share on other sites More sharing options...
0 Marshall_ 0 Odesláno: 13. Leden, 2018 Author Share Odesláno: 13. Leden, 2018 Bohužiaľ, toto vôbec nepomohlo. Link to comment Share on other sites More sharing options...
0 SnOwY_ 9 Odesláno: 13. Leden, 2018 Share Odesláno: 13. Leden, 2018 (upraveno) 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 13. Leden, 2018 by SnOwY_ Link to comment Share on other sites More sharing options...
0 Lukasz 336 Odesláno: 13. Leden, 2018 Share Odesláno: 13. Leden, 2018 Dokud nesmazes #define KockaCisloPC 2, tak si nepomuzes Link to comment Share on other sites More sharing options...
0 DuFF 81 Odesláno: 13. Leden, 2018 Share Odesláno: 13. Leden, 2018 (upraveno) 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 13. Leden, 2018 by DuFF 1 Link to comment Share on other sites More sharing options...
0 Marshall_ 0 Odesláno: 13. Leden, 2018 Author Share Odesláno: 13. Leden, 2018 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 More sharing options...
0 DuFF 81 Odesláno: 13. Leden, 2018 Share Odesláno: 13. Leden, 2018 (upraveno) 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 13. Leden, 2018 by DuFF Link to comment Share on other sites More sharing options...
Dotaz
Marshall_ 0
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:
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:
Dodatečné poznámky:
--
Link to comment
Share on other sites
13 odpovědí na tuto otázku
Recommended Posts