Jump to content
  • 0

pomoc Gamemode


Paulee

Dotaz

Zdravím,

Jsem sice začátečník, ale rozhodl jsem se udělat svůj vlastní mod... Chci to zkusit z jednoho prostého důvodu. Protože, jak jsem začátečník tak neovládám všechny funkce publicy atd... Tak se to chci naučit, co je všechno v gamemodu potřeba... Udělal jsem tam pár aut, že se hráč připojí, ale vůbec nevím jak udělat jednu věc... Např.: příkaz /hp ID HP DŮVOD... Zkoušel jsem příkaz /heal HP, ale vůbec mi to nejde. Psalo mi to furt unknow command. Tak vás prosím aby jste mi řekly jak na to... Abych se mohl nějak odpíchnout k dalším věcem....

 

Díky za přečtení ;).

S pozdravem Petr.

Link to comment
Share on other sites

Recommended Posts

  • 0

Nerob si to hneď od začiatku zložité ;)

 

Najprv si pozisťuj čo každý public robí a kedy sa vyvolá :p

Potom sa nauč trošku s premennými a až potom prejdi na príkazy a vyhraj sa s tým :)

 

Nerob príkaz /hp ID HP DOVOD

Najprv sprav príkaz /hp

potom /hp ID

až potom /hp ID HP

 

aby ti nepísalo unkown command tak hoď na koniec príkazu return true;

Link to comment
Share on other sites

  • 0

Příkaz /hp to dám, ale já právě nevím, jak dát do příkazu proměnnou to ID... Nikdy jsem to nenašel a já prostě potřebuju jak to vypadá nebo jaké tam jsou funkce... A pak podle toho udělám další....

 

EDIT: Ten heal mi furt nejde... Zde je code

#include <a_samp>

#define MAX_PLAYER_EX 100

public OnPlayerCommandText(playerid, cmdtext[])
{
	if (strcmp("/heal", cmdtext, true, 10) == 0)
	{
		if(!cmdtext[5]) return SendClientMessage(playerid, -1, "Použi /heal [HP]");
		new Float:HP[MAX_PLAYER_EX];
		HP[playerid] = floatstr(cmdtext[6]);
		SetPlayerHealth(playerid, HP[playerid]);
		return true;
	}
	return 0;
}
Edited by PetrPaulik
Link to comment
Share on other sites

  • 0
    if (strcmp("/heal", cmdtext, true, 10) == 0)
    {
    new hp;
    SetPlayerHealth(playerid,hp);
        return true;
    }

Děláš to složitě tobě prakticky stačí toto.

A podmínku zvladneš ?

Link to comment
Share on other sites

  • 0

 

    if (strcmp("/heal", cmdtext, true, 10) == 0)
    {
    new hp;
    SetPlayerHealth(playerid,hp);
        return true;
    }
Děláš to složitě tobě prakticky stačí toto.

A podmínku zvladneš ?

 

~> Proč to dělat složitě, když to jde ještě složitěji a zbytečněji, že?

 

 

	if (!strcmp("/heal", cmdtext)) {

		SetPlayerHealth(playerid, 100.0); return (true);
		/* Hádám, že je to příkaz na doplnění života. */
	}
~> Pokud je to příkaz na doplnění životů, tak nějak nechápu, proč tam přidávat ještě hodnoty. Logicky si asi moc lidí nebude chtít dát 20% života.
Link to comment
Share on other sites

  • 0

 

~> Proč to dělat složitě, když to jde ještě složitěji a zbytečněji, že?

 

 

    if (!strcmp("/heal", cmdtext)) {

 

        SetPlayerHealth(playerid, 100.0); return (true);

        /* Hádám, že je to příkaz na doplnění života. */

    }~> Pokud je to příkaz na doplnění životů, tak nějak nechápu, proč tam přidávat ještě hodnoty. Logicky si asi moc lidí nebude chtít dát 20% života.

 

 

 

SkiBigu

Protože on chce přikaz /hp [počet HP]

Jak psal v komentáři

Link to comment
Share on other sites

  • 0

SkiBigu

Protože on chce přikaz /hp [počet HP]

Jak psal v komentáři

~> Pokud je to příkaz na doplnění životů, tak nějak nechápu, proč tam přidávat ještě hodnoty. Logicky si asi moc lidí nebude chtít dát 20% života.

~> Nic bych neříkal, kdyby to byl podklad pro administrátorský příkaz, ale to nikde nenapsal.

Link to comment
Share on other sites

  • 0

Lukas

Jde prakticky o "podmínku".

 

Tu máš kod trošku editnutej aji s ID.

 

Dosad do příkazu.

 {
     new id,hp;
    if(sscanf(params,"ud",id,hp)) return SendClientMessage(playerid,-1,"[HP] Použij /heal [ID] [HP]");
     else {
    SetPlayerHealth(id,hp);
  }

Ikdyž se omlouvám ale použil jsem sccanf pro podmínku.

(Nemohl jsem si pomoct)

#include <sscanf2>
Link to comment
Share on other sites

  • 0

 

 {
     new id,hp;
    if(sscanf(params,"ud",id,hp)) return SendClientMessage(playerid,-1,"[HP] Použij /heal [ID] [HP]");
     else {
    SetPlayerHealth(id,hp);
  }
Ikdyž se omlouvám ale použil jsem sccanf pro podmínku.

(Nemohl jsem si pomoct)

#include <sscanf2>

 

~> Opět, jako předtím nepoužíváš správný typ proměnné pro danou funkci. Vyhodí ti to varování.

Link to comment
Share on other sites

  • 0

Prosím vás, nehádej te se .... Chtěl jsem příkaz /heal HP a ID... To ID bych si pak doplnil.... A prosím vás, jestli by jste mi už poradily bez includů zcmd, ysi atd...

Link to comment
Share on other sites

  • 0

Prosím vás, nehádej te se .... Chtěl jsem příkaz /heal HP a ID... To ID bych si pak doplnil.... A prosím vás, jestli by jste mi už poradily bez includů zcmd, ysi atd...

~> Bez includů toho ale jako začátečník moc nesvedeš. Proto také existují, protože je s nimi pak práce jednodušší, a v některých situacích jsou dokonce funkčnější a rychlejší než samotné PAWN.

~> Při multiparametrech je ideální ten sscanf2. Protože v tom jediném příkaze toho bez něho, budeš porovnávat délky a říkám ti, že to (zatím) nepochopíš.

Link to comment
Share on other sites

  • 0

Však já právě potřebuju to /heal ID HP a podle toho bych to mohl pochopit... Kdyby tu byl někdo tak hodný aby mi to stručně vysvětlil ten sscanf2... Aspoň ten příkaz /heal ID HP... To je totiž jediné co jsem pořádně nepochopil a to jsou ty proměnné... Jinak objekty, jednoduch příkazy, tabulka, podmínka tak to vše dám, ale já potřebuju stručně vysvětlit podmínku v tomto příkazu.

Edited by PetrPaulik
Link to comment
Share on other sites

  • 0

Všetky rady tu máš priamo od pawnerov :d

 

No použí DCMD, ZCMD alebo niečo podobné (ja som osobne používal DCMD ale to už je teraz asi história :p )

Nájdi si návod ako sa používa, ono ti vygeneruje premennú PARAMS čo je string (resp. char ale to je fuk) a tú použiješ v SSCANFe a vytiahneš z nej parametre príkazu.

 

PARAMS je vlastne text ktorý napíšeš za príkazom, napríklad: príkaz bude "/hp", tak keď v hre napíšeš "/hp ja neviem" tak params bude mať hodnotu "ja neviem"

 

Pochopil? :d

 

 

if(sscanf(params,"ud",id,hp)) return SendClientMessage(playerid,-1,"[HP] Použij /heal [iD] [HP]");

 

SSCANF je užitočná vecička pomocou ktoréj z nejakého stringu vytiahneš parametre príkazu ;)

 

params - string z ktorého parametre ťaháš

"ud" - typy parametrov... u - ID alebo meno hráča, d - číslovka (len celé čísla), tieto typy si nájdeš na internete, ja si ich už všetky nepamätám

id,hp - premenné do ktorých ukladáš v poradí v akom si určil typy

 

sscanf sa dá použiť aj ako podmienka pretože vracia TRUE a FALSE ;)

 

dúfam že už ti je to jasnejšie ;)

Link to comment
Share on other sites

  • 0

Takže jestli jsem to dobře pochopil. Mám si stáhnout dcmd a sscanf2 a začít dělat v tom? :d :D . Ok určitě díky za radu... Kdyby ještě někdo chtěl něco k tomu říci, tak může tému zatím nechám odemčenou.

Link to comment
Share on other sites

  • 0

Díky moc za rady, ten ZCMD je boží ! :d Určitě ho budu používat stejně jako sscanf2, něco málo jsem už pochytil, ale stejnak se to budu učit :d. Zamykám to.


Otevírám téma potřebuju pomoct :d

#include <a_samp>
#include <zcmd>
#include <sscanf2>

command(weapon, playerid, params[])
{
new zbran, idx, munice;
if(sscanf(params, "uii", idx, zbran, munice)) return SendClientMessage(playerid, -1, "Použití: /weapon ID ZBRAN MUNICE");
GivePlayerWeapon(idx, zbran, munice);
SendClientMessage(idx, -1, "Dal jsi hráčovi zbran.");
return 1;
}


Co je na tom špatně? Píše to bez errorů, ale ve hře to furt píše unknow command....

 

A tohle mi v pohodě jde. (Použiji to jako jen příklad a nevidím v tom moc velký rozdíl :d

#include <a_samp>
#include <zcmd>
command(uzdravitse,playerid,params[])
{
    new nick[MAX_PLAYER_NAME];
    new string[144];
    GetPlayerName(playerid, nick, MAX_PLAYER_NAME);
    format(string, 144, "Hráč %s (%d) se uzdravil!", nick, playerid);
    SendClientMessageToAll(-1, string);
    SetPlayerHealth(playerid,100.00);
    SendClientMessage(playerid,0xFFFFFFAA,"Byl jsi uzdraven");
    return 1;
}
Edited by PetrPaulik
Link to comment
Share on other sites

  • 0

~> Byly by fajn nějaké ty podmínky:

 

CMD:weapon(playerid, params[]) {

	new
		id,
		idw,
		munice;

	if sscanf(params, "uii", id, idw, munice) *then return SendClientMessage(playerid, -1, "Použití: /weapon [ID/JMÉNO HRÁČE] [ID ZBRANĚ] [MUNICE]");
	if (id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "[ ! ] Hráč není připojený !");
	if (idw < 1 || idw > 46) return SendClientMessage(playerid, -1, "[ ! ] Špatné ID zbraně !");
	if (munice < 1 || munice > 99999) return SendClientMessage(playerid, -1, "[ ! ] Špatné zadaná minuce !");
	GivePlayerWeapon(id, idw, munice);
	SendClientMessage(playerid, -1, "Dal jsi hráčovi zbran.");
	return (true);
}

~> Btw, mohl bys trochu ušetřit:

 

CMD:uzdravitse(playerid, params[]) {

	new 
		nick[MAX_PLAYER_NAME + 1],
		string[53];
	GetPlayerName(playerid, nick, sizeof(nick));
	format(string, 144, "Hráč %s (%d) se uzdravil!", nick, playerid);
	SendClientMessageToAll(-1, string);
	SetPlayerHealth(playerid, 100.00);
	return (true);
}
Link to comment
Share on other sites

  • 0

Já nevím, jestli mám smůlu ale furt to nejde.... Furt to píše na serveru unknow command. Já už nevím co je na tom špatně, nebo proč to nejde.

#include <a_samp>
#include <zcmd>
#include <sscanf2>

CMD:weapon(playerid, params[]) {

	new
   		id,
   		idw,
   		munice;

	if sscanf(params, "uii", id, idw, munice) *then return SendClientMessage(playerid, -1, "Použití: /weapon [ID/JMÉNO HRÁČE] [ID ZBRANĚ] [MUNICE]");
	if (id == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "[ ! ] Hráč není připojený !");
	if (idw < 1 || idw > 46) return SendClientMessage(playerid, -1, "[ ! ] Špatné ID zbraně !");
	if (munice < 1 || munice > 99999) return SendClientMessage(playerid, -1, "[ ! ] Špatné zadaná minuce !");
	GivePlayerWeapon(id, idw, munice);
	SendClientMessage(playerid, -1, "Dal jsi hráčovi zbran.");
	return (true);
}

Fakt nevíte o stím? Error to nepíše, ale ve hře to prostě nejde....

Edited by PetrPaulik
Link to comment
Share on other sites

  • 0

SkiBigu na něco jsem přišel... Když chci přes ZCMD udělat nějaký příkaz a je tam sscanf2 tak to nejde... Ale když dám pryč sscanf2 tak je to v poho... Takže se to asi nějak blokuje :d


Ale já pak nevím, jak udělat nějaký příkaz jako třeba /hp [HP]... Nevím jak to udělat bez sscanf2 :d

Link to comment
Share on other sites

  • 0

SkiBigu na něco jsem přišel... Když chci přes ZCMD udělat nějaký příkaz a je tam sscanf2 tak to nejde... Ale když dám pryč sscanf2 tak je to v poho... Takže se to asi nějak blokuje :d

~> Tak fajn, zkus to, jak říká Lukasz dát do normální syntaxe. Ale dost bych se divil, kdyby to bylo tím.

Link to comment
Share on other sites

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