Stránka 1 z 1

Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 16 lis 2013 20:28
od strangereu
Čau,
Chtěl bych se zeptat jestli někdo z Vás neví, jak rozdělit v lua počet něčeho na 2 poloviny.
Dám příklad:
Mám 10 kusů ovoce, polovina jsou hrušky a druhá polovina zase jablka a potřeboval bych to rozdělit na skupiny, aby se vypsalo tohle:
Máš x jablek a y hrušek... Přičemž x = jablkům a y = hruškám.

Potřebuji to totiž do jedné hry, ale v místo ovoce budou hráči :D.
A dělám toto:
Na serveru je třeba 10 hráčů a z toho se náhodně vybere 5 hráčů do jedné skupiny a zbytek hráčů do druhé skupiny, tudíž vždy polovina z daného počtu hráčů.

Jak by se toto dalo udělat?

Tohle už mám:

Kód: Vybrat vše

---------------------------------------
-- First Hide N Seek gamemode in MTA --
---------------------------------------
local gPC = getPlayerCount()

function main ()
outputChatBox ("#ffffffWelcome on first Hide N Seek gamemode in MTA", source, 255,255,255, true )
outputChatBox ("#ffffffYou will be moved to random team... Wait 5 seconds.", source, 255,255,255, true )
end
addEventHandler("onPlayerJoin", root, main )


function setRandomTeam ()
if ( gPC == 1 ) then
outputChatBox ("#ffffffFor this moment is here "..gPC.." player.", source, 255,255,255, true )
else
outputChatBox ("#ffffffFor this moment is here "..gPC.." players.", source, 255,255,255, true )
end
outputChatBox ("#ffffff50% of players will be seekers and missing 50% have to find them.", source, 255,255,255, true )




end
setTimer (setRandomTeam, 5000,1)



gPC je na získání počtu hráčů.

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 16 lis 2013 23:03
od CZechBoY
Zdar,
prostě vem každýho druhýho hráče a dej ho do druhý skupiny, zbytek bude skupina1 třeba.

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 17 lis 2013 08:43
od strangereu
Kdyby jsi mi řekl jak, tak bych byl moc rád, protože já s tou matikou v lua jsem se ještě nesetkal.

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 17 lis 2013 10:19
od Žbeky
For zvětšující se o 2 do počtu hráčů, každý i-tý do skupiny A, i+1 do skupiny B

Toto fakt není žádná extra matika

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 17 lis 2013 11:15
od strangereu
Já to zkusil udělat takovýmto způsobem, jen si nejsem jistý, jestli to opravdu bude fungovat, tak jak by mělo.

if ( gPC == gPC+1 ) then
outputChatBox("Jsi druhej")
else
outputChatBox("Jsi prvni")
end

E: Tak takhle to nefunguje, bere to každého jako druhého, pokud je na serveru více hráčů než 1.

E2: Když jsem zkoušel dělat to for, tak to vypisuje tajten error:
'in' expected near '+'

Kod vypadá takto:
for i, i+1 in ipairs(getPlayerCount()) do

end

Takže si s takovou blbostí nevím vubec rady :D

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 17 lis 2013 13:57
od CZechBoY
Ta podmínka je úplně zcestná :lol: zatím jsem teda neviděl že by se nějaká číslo rovnalo číslu o jedna větší no :idea:
Chtělo by to zjistit jestli jsou vůbec v Lua pole.
Jak to Lua funguje? TO se spouští pro každého hráče zvlášť nebo na serveru?

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 17 lis 2013 14:41
od strangereu
Jsou tam udělané eventy třeba:

function jmenofunkce ()
outputChatBox("hello world")

end
addEventHandler ("onPlayerJoin", root, jmenofunkce")

Určitě ti dojde při jaké činnosti se vypíše Hello World :).

A v lua to určitě bude, tam jde o to akorát udělat, že každej druhej hráč bude v teamu 2.

A jak to funguje?
No úplně jednoduše, zapneš na serveru nějaký ten script, třeba s tím eventem jak jsem tu napsal, což by vypisovalo každému hráči při připojení Hello World.
Takže stačí to jen zapnout a ono to pracuje samo, protože ten onPlayerJoin se bude opakovat pro každého hráče znovu a znovu... Přece jen to je na připojení, ale těch eventů je takhle tisíce.
Ale tento event na připojení tam bude použit při tom třídění do těch teamů.

Já už si ten team vytvořil.

Kód: Vybrat vše

function teams ()
Hiders = createTeam ( "Hiders", 255,255,255)
Seekers = createTeam ( "Seekers", 255,0,255)
end
addEventHandler("onResourceStart", root, teams )

Teamy s názvy Hiders a Seekers se vytvoří při zapnutí scriptu, pokud se script vypne, teamy zmizej.

A háček je tady:

Kód: Vybrat vše

function setTeam ( source )
-- Tady bude asi nějaké to for něco něco in gPC do
setPlayerTeam ( source, Hidders ) -- Pokud bude číslo sudé, tak sem
end

-- Tady bude asi nějaké to for něco+1 ? něco in gPC do
setPlayerTeam ( source, Seekers ) -- Pokud bude číslo liché, tak sem
end

end


Snad to chápeš :D

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 17 lis 2013 14:49
od CZechBoY
Tak onPlayerJoin zařadíš toho hráče do týmu ne?
Jsou tam globální proměnný nebo nějaký počítadlo kolik je délka pole atd.? Jsou vůbec v Lua pole?

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 17 lis 2013 14:51
od strangereu
No na to onPlayerJoin potřebuji zařadit hráče do teamu, což jsem dá se říct udělal,
to je to setPlayerTeam.
A ty pole tam určitě budou.
http://www.root.cz/clanky/operatory-a-a ... azyku-lua/ Jsou to ty pole, které máš na mysli?
Jinak plno užitečných věcí nalezneš zde: https://wiki.multitheftauto.com/wiki/Useful_Functions

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 17 lis 2013 14:52
od domitea
To by šlo přes modulo ;) Teď se bude jednat o takový Céčkovský pseodo kód a předpokládám, že v source je seznam všech hráčů:

Kód: Vybrat vše

for (int i = 0; i < source.size; i++)
{
 if (i % 2 == 0 || i = 0) // pokud je to sudé číslo, nebo nula, protože pak by to nebylo 50/50 :-)
  {
   println("Jsi prvni");
  }
  else
  {
   println("Jsi druhy");
  }
}

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)

Napsal: 17 lis 2013 14:54
od CZechBoY
domitea: to už víme asi 2 dny :D
Asociativní není potřeba, stačí obyč...
Pokud si je teda už zařadil do týmu tak co teda ještě chceš? :D

Re: Lua - Rozdělení náhodně do 2 skupin (50/50)  Vyřešeno

Napsal: 17 lis 2013 14:58
od strangereu
Právě, že ty funkce na zařazení mám připravené, až bude hotovej ten kód na dělení hráčů :D

A k tomu kodu z céčka, to asi né hele, podívej se na ty errory :lol:
errors.png


--- Doplnění předchozího příspěvku (17 Lis 2013 15:44) ---

Takže vyřešeno :)

Výsledek je toto.

for i,player in ipairs(getElementsByType("player")) do
if i % 2 == 0 then
outputChatBox("Si prvy", player)
else
outputChatBox("Si druhy", player)
end
end