Jump to content
  • 0

pomoc Pomoc začiatočníkovi


palec456321

Dotaz

Ahoj zo začiatku by som sa chcel ospravedlniť ak zakladam tému v zlom Topicu nevedel som kde to mám zaradiť.

Takže poďme k veci už dlhšiu dobu ma zaujíma program pawno tvorba filterscriptov a gamemodov chcel som si spraviť vlastný server z vlastným gamemodom tak som si povedal že sa začnem učiť pracovať v pawne našiel som túto stránku a sekciu pre začiatočníkov skoro všetky návody už viem pomaly naspamäť ale keď otvorím pawno tak neviem čo ďalej viem na čo je ktorý public ale ďalej sa neviem pohnúť len jednoduché príkazy a preto by som vás chcel požiadať o pomoc nechcem nežiadam aby niekto robil GM alebo fs za mňa ale chcel by som niekoho kto by mi vedel vysvetliť základy a pomohol keď si nebudem vedieť rady teda niekoho kto by bol schopný a chcel by mi pomôcť naučiť sa pawnovať.

Ďakujem :)

Link to comment
Share on other sites

11 odpovědí na tuto otázku

Recommended Posts

  • 0
  • Hlavní moderátor

Říkáš, že jsi ty návody projel, tak tě budu brát za slovo. Já bych ti teď tedy doporučil zkusit si něco jednoduchého, třeba pár příkazů, které jen vypíší zprávu do chatu nebo ti dají zbraně. Pak bych se postupně propracovával ke složitějším věcem – můžeš k těm příkazům přidat oprávnění, která budeš udělovat a odebírat. Takhle se postupně propracuješ k tomu, jak to běžně funguje.

Link to comment
Share on other sites

  • 0

Tak skúšal som vytvoriť job roznáška pizze zatiaľ mam len dialog chcel by som ho sem pridať a požiadať vás aby ste sa na neho pozreli a povedali mi že čo tam mám zle alebo či je to dobre či postupujem správne a tak. Nenútim vás ak sa vám nechce tak to ignorujte.To IsPlayerInSphere používam treto lebo sa mi miešali Pickupy z Dialógmi 

Ďakujem. :)

new pizzaboy;
new zpb[MAX_PLAYERS] = 0;

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(IsPlayerInSphere(playerid,369.4378,-116.1333,1001.4922, 2))
	{
		ShowPlayerDialog(playerid, pizzaboy, DIALOG_STYLE_LIST, "{0000BB}Zamestnanie: {FFFFFF}PizzaBoy", "Zamestnanť sa\nPrezliecť sa \nVýplata \nVýpoveď", "Dobre", "Oddýsť");
		}
		return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(IsPlayerInSphere(playerid,369.4378,-116.1333,1001.4922, 2))
{
	if(response)
	{
	switch(listitem)
 	{
		case 0:
		{
		zpb[playerid] = 1;
		GivePlayerWeapon(playerid, 1, 0);
		GivePlayerWeapon(playerid, 14, 0);
		}
		case 1:
		{
		if(zpb[playerid] == 1)
		{
		SetPlayerSkin(playerid, 155);
		}
		else
  		{
  		if(zpb[playerid] < 1)
  		{
  		SendClientMessage(playerid, COLOR_RED, "Niesi zamestnaný.zamestnaj sa.");
		}
		}
		}
		case 2:
		{
		if(zpb[playerid] == 1)
		{
		GivePlayerMoney(playerid, 500);
		}
		else
		{
		if(zpb[playerid] < 1)
		{
		SendClientMessage(playerid, COLOR_RED, "Niesi zamestnaný.zamestnaj sa.");
		}
		}
		}
		case 3:
		{
		if(zpb[playerid] == 1)
		{
		zpb[playerid] = 0;
		SetPlayerSkin(playerid, 230);
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "Podal si výpoveď.");
		}
		else
		{
		if(zpb[playerid] < 1)
		{
        SendClientMessage(playerid, COLOR_RED, "Nemôžeš dať výpoveď ak tu niesi zamestnaný.");
        }
        }
		}

		
}
}
	return 0;
}



return 1;
}

CMD:job(playerid, params[])
{
if(zpb[playerid] == 1)
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Prácu môžeš začat príkazom /roznaska");
}
else
{
if(zpb[playerid] < 1)
{
SendClientMessage(playerid, COLOR_RED, "Niesi zamestnaný ako PizzaBoy.");
}
}
return 1;
}

 

 

Edited by palec456321
Link to comment
Share on other sites

  • 0

Akože, vcelku to máš dobre... Akurát:

1) Nemáš dorobené že čo má robiť (že má roznášať pizzu)

2) Dávaš mu peniaze za nič... lebo kedykolvek klikne na výplata, dostane 500$

Link to comment
Share on other sites

  • 0

Áno to viem spravil som to naschvál chcel som si tím overiť že všetky list itemy fungujú správne... viem že to ešte nieje dokončené chcel by som spraviť roznášku pizze na checkpointy ale zatiaľ ešte neviem ako na to tak len premýšľam ako by som to mohol spraviť.

Ďakujem za tvoju odpoveď. :)

Link to comment
Share on other sites

  • 0
  • Hlavní moderátor

Vidím, že principy zvládáš, super. Vše k checkpointům najdeš tady. Dole jsou dvě sekce - Related functions a Related callback, kde jsou odkazy na všechny další funkce a callbacky, které se týkají checkpointů. Začal bych tím, že se podíváš na ty stránky, projedeš si ukázkové kódy a pak to zkusíš sám. Vždycky se můžeš ozvat tady na fóru, když se na něčem zasekneš.

Link to comment
Share on other sites

  • 0

Ahoj tak dnes som pracoval na Checkpointoch vEnd ďakujem ti za ten odkaz veľmi mi pomohol :) spravil som len Checkpointy pridám tu aj kód budem rád ak by ste sa na neho pozreli a povedali mi či je to správne mne to funguje čo som veľmi rád. Už len dorobím nejak tu výplatu a prvý môj job je na svete teda s vašou pomocou díky. A ešte jedná vec by ma zaujímala dá sa to spraviť aj tak aby tie checkpointy išli random ?

new pizzaboy;
new zpb[MAX_PLAYERS] = 0;
new roznaska[MAX_PLAYERS];

CreatePickup(1581,1,369.4378,-116.1333,1001.4922);

public OnPlayerPickUpPickup(playerid, pickupid)
{
if(IsPlayerInSphere(playerid,369.4378,-116.1333,1001.4922, 2))
	{
	ShowPlayerDialog(playerid, pizzaboy, DIALOG_STYLE_LIST, "{0000BB}Zamestnanie: {FFFFFF}PizzaBoy", "Zamestnanť sa\nPrezliecť sa \nVýplata \nVýpoveď", "Dobre", "Oddýsť");
	}
	return 1;
}

public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(IsPlayerInSphere(playerid,369.4378,-116.1333,1001.4922, 2))
{
	if(response)
	{
	switch(listitem)
 	{
		case 0:
		{
		zpb[playerid] = 1;
		GivePlayerWeapon(playerid, 1, 0);
		GivePlayerWeapon(playerid, 14, 0);
		}
		case 1:
		{
		if(zpb[playerid] == 1)
		{
		SetPlayerSkin(playerid, 155);
		}
		else
  		{
  		if(zpb[playerid] < 1)
  		{
  		SendClientMessage(playerid, COLOR_RED, "Niesi zamestnaný.zamestnaj sa.");
		}
		}
		}
		case 2:
		{
		if(zpb[playerid] == 1)
		{
		GivePlayerMoney(playerid, 500); //Toto si nevšímajte nemam ešte spravenu výplatu.
		}
		else
		{
		if(zpb[playerid] < 1)
		{
		SendClientMessage(playerid, COLOR_RED, "Niesi zamestnaný.zamestnaj sa.");
		}
		}
		}
		case 3:
		{
		if(zpb[playerid] == 1)
		{
		zpb[playerid] = 0;
		SetPlayerSkin(playerid, 230);
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "Podal si výpoveď.");
		}
		else
		{
		if(zpb[playerid] < 1)
		{
        SendClientMessage(playerid, COLOR_RED, "Nemôžeš dať výpoveď ak tu niesi zamestnaný.");
        }
        }
		}

		
}
}
	return 0;
}



return 1;
}

public OnPlayerEnterCheckpoint(playerid)
{
switch(roznaska[playerid])
{
	case 0:
	{
	if(IsPlayerInCheckpoint(playerid))
		{
		SendClientMessage(playerid, COLOR_ORANGE, "Pizza úspešne doručená.");
		DisablePlayerCheckpoint(playerid);
		SetPlayerCheckpoint(playerid, 987.1040, 2343.6985, 11.4688, 3.0);
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "Dovez pizzu na okraj mesta Whitewood.");
		roznaska[playerid] = 1;
		}
	}
	case 1:
	{
	if(roznaska[playerid] == 1)
		{
	    SendClientMessage(playerid, COLOR_ORANGE, "Pizza úspešne doručená.");
		DisablePlayerCheckpoint(playerid);
		SetPlayerCheckpoint(playerid, 1459.3208, 2773.4282, 10.8203, 3.0);
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "Dovez pizzu do Golfového klubu.");
		roznaska[playerid] = 2;
		}
	}
	case 2:
	{
	if(roznaska[playerid] == 2)
		{
		SendClientMessage(playerid, COLOR_ORANGE, "Pizza úspešne doručená.");
		DisablePlayerCheckpoint(playerid);
		SetPlayerCheckpoint(playerid, 1623.6689, 2571.1548, 10.8203, 3.0);
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "Dovez pizzu do Pricklepine.");
	    roznaska[playerid] = 3;
	    }
	}
	case 3:
	{
	if(roznaska[playerid] == 3)
		{
	    SendClientMessage(playerid, COLOR_ORANGE, "Pizza úspešne doručená.");
		DisablePlayerCheckpoint(playerid);
		SetPlayerCheckpoint(playerid, 1766.3844, 2735.6050, 10.8359, 3.0);
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "Dovez pizzu na Ubytovňu.");
		roznaska[playerid] = 4;
		}
	}
	case 4:
	{
	if(roznaska[playerid] == 4)
		{
		SendClientMessage(playerid, COLOR_ORANGE, "Pizza úspešne doručená.");
		DisablePlayerCheckpoint(playerid);
		SetPlayerCheckpoint(playerid, 2141.4302, 2834.6477, 10.8203, 3.0);
		SendClientMessage(playerid, COLOR_LIGHTBLUE, "Dovez pizzu na SpinyBed.");
		roznaska[playerid] = 5;
		}
	}
}
return 1;
}

CMD:job(playerid, params[])
{
if(zpb[playerid] == 1)
{
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Prácu môžeš začat príkazom /roznaska");
}
else
{
if(zpb[playerid] < 1)
{
SendClientMessage(playerid, COLOR_RED, "Niesi zamestnaný ako PizzaBoy.");
}
}
return 1;
}

CMD:roznaska(playerid, params[])
{
if(zpb[playerid] == 1)
{	
SetPlayerCheckpoint(playerid, 2445.0430, 1954.9441, 10.7638, 3.0);
SendClientMessage(playerid, COLOR_LIGHTBLUE, "Dovez pizzu na Stavbu.");
}
return 1;
}

 

Link to comment
Share on other sites

  • 0

No, máš tam takú drobnosť, že keď napíše rozvážka a príde k 1. CP (checkpointu), tak môže opäť napísať rozvážka a opäť sa mu objaví CP na tom istom mieste ;)

Resp. neviem teraz presne ako sa zachová CP keď mu znova nastaviť pozíciu, ale pravdepodobne tak ako som povedal. 

Ďalšia vec je, že keď budeš mať viac povolaní s CP, budú sa ti CP medzi sebou byť... Dobré by bolo k CP dodať podmienku či je zamestnaný v pizzerke

 

No a k tomu randomu:

áno dá sa, prikladám ti kód s vysvetlením

//Hore do modu

new PizzaRandPos[][3] = {
	{X1, Y1, Z1}, // pozície X, Y, Z, nahradíš svojimi číselnými hodnotami
	{X2, Y2, Z2}
	//... takto ďalej
};

//v kóde použiješ takto
new rand = random(sizeof(PizzaRandPos)); // funkcia sizeof ti vráti počet riadkov v premennej PizzaRandPos
// funkcia random vyberie náhodné číslo od 0 po zadanú hodnotu (zníženú o 1) - v našom prípade od 0 do 1

SetPlayerCheckpoint(playerid, PizzaRandPos[rand][0], PizzaRandPos[rand][1], PizzaRandPos[rand][2], veľkosť);
//PizzaRandPos[rand][0] je prvá hodnota na riadku s číslom rand, tj. X1 alebo X2
//PizzaRandPos[rand][1] je druhá hodnota na riadku s číslom rand, tj. Y1 alebo Y2

 

Link to comment
Share on other sites

  • 0

Ahoj,

na začátek to vypadá v pohodě, výhrady tam ale budou. V OnDialogResponse vracíš špatně hodnoty.

Pokud vrátíš 1, zamezíš jiným scriptům reagovat na daný dialog. Máš to napsané přesně obráceně. Snad to pochopíš z kódu.

public OnDialogResponse(...)
{
    if (dialogid == ...)
    {
        // V našem scriptu používáme toto id dialogu, zpracujeme
        ....
        // Zpracovali jsme dialog, další script se o to nemusí postarat -> vrátíme 1
        return 1;
    }
	
    // V našem scriptu nepoužíváme dané id dialogu, patří (asi) jinému scriptu
    // Necháme dialog zpracovat jiný script -> vrátíme 0
    return 0;
}

 

Taky si přiděláváš zbytečně moc práce.

if (zpb[playerid] == 1)
{
	// hráč je zaměstnaný jako něco
} else {
	// hráč není zaměstnany jako něco
	// není potřeba další podmínky (zpb[playerid] < 1)
}

Schválně se zamysli, jak bys přidal další job, měl by třeba id 2. V tvém případě by se hráčovi, se zaměstnáním 2 nevypsala hláška, že není zaměstnaný jako pizzaboy.

 

Můžeš trochu rozvést, proč používáš IsPlayerInSphere? Napiš, jaké jsi měl problémy ať ti s tím můžem pomoct.

 

@Quiter tam má malou "chybku", chybí mu tam tag Float (nemusel by tam být, dá se to obejít ale proč..)

 

new Float:PizzaRandPos[][3] = {

Jinak by to mělo být v pohodě.

 

 

 

Edited by Lukasz
Link to comment
Share on other sites

  • 0

Dnes som sa na Pc ani nedostal tak som si to nemohol opraviť zajtra sa do toho pustím ďakujem vám za rady a pomoc :)

@Lukasz IsPlayerInSphere používam preto lebo sa mi miešali pickupy keď som spravil napr. ahoj = CreatePickup(...) a potom vitaj = CreatePickup (...)  Na pickup ahoj som pridelil jeden dialóg a na pickup vitaj druhý a keď som vstúpil na pickup ahoj tak mi otvorilo dialóg vitaj a opačne niekedy to otvorilo správne niekedy sa nič nestalo ak som vstúpil na pickup a na tejto stránke som našiel návod od Atomasa ako zabrániť prehadzovaniu pickupu a dialógu.

Link to comment
Share on other sites

  • 0

Ok, zkus to ještě jednou, a když ti to nebude fungovat správně, tak sem dej kód a my na to koukneme.

Pickupy žádný problém nedělají, ATomas akorát "neresetoval" hodnoty proměnných při odstranění pickupu a pak to dělalo problém. Samozřejmě to bude fungovat i s IsPlayerInSphere, ale zase si akorát přiděláváš práci a přidáváš náročnost na výkon.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...