{"id":37812,"date":"2019-10-31T22:19:55","date_gmt":"2019-10-31T19:19:55","guid":{"rendered":"https:\/\/prohoster.info\/blog\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov\/"},"modified":"2019-10-31T22:19:55","modified_gmt":"2019-10-31T19:19:55","slug":"megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","status":"publish","type":"post","link":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","title":{"rendered":"Megan\u00ebpako: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhin problemin me multiplayer me 200 lojtar\u00eb","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Megan\u00ebpako: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhin problemin me multiplayer me 200 lojtar\u00eb\" src=\"\/wp-content\/uploads\/2019\/09\/135544365299791de479555734645ef2.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00eb maj t\u00eb k\u00ebtij viti, un\u00eb mora pjes\u00eb si lojtar n\u00eb <noindex><a rel=\"nofollow\" href=\"https:\/\/youtu.be\/d_DlvkTK9hU\">eventin MMO KatherineOfSky<\/a><\/noindex>. Vura re se kur numri i lojtar\u00ebve arrin nj\u00eb num\u00ebr t\u00eb caktuar, pas \u00e7do disa minutash, nj\u00eb pjes\u00eb e tyre \"bien\". Me fat p\u00ebr ju (por jo p\u00ebr mua), un\u00eb isha nj\u00eb nga ata lojtar\u00eb q\u00eb \u00e7aktivizoheshin <b>\u00e7do her\u00eb<\/b>, edhe me nj\u00eb lidhje t\u00eb mir\u00eb. E mora k\u00ebt\u00eb si nj\u00eb sfid\u00eb personale dhe fillova t\u00eb k\u00ebrkoj arsyet e problemit. Pas tre jav\u00ebsh debugging, testimi dhe rregullimesh, gabimi u eliminua p\u00ebrfundimisht, por ky udh\u00ebtim nuk ishte aq i leht\u00eb.<\/p>\n<p>Problemet e loj\u00ebrave multiplayer jan\u00eb shum\u00eb t\u00eb v\u00ebshtira p\u00ebr t'u gjurmuar. Ato zakonisht lindin n\u00eb kushte shum\u00eb specifike t\u00eb parametra t\u00eb rrjetit dhe n\u00eb gjendje shum\u00eb specifike t\u00eb loj\u00ebs (n\u00eb k\u00ebt\u00eb rast - pranin\u00eb e mbi 200 lojtar\u00ebve). Dhe edhe kur arrin t\u00eb riprodhosh problemin, \u00ebsht\u00eb e pamundur ta debugosh si\u00e7 duhet, sepse vendosja e pikave kontrolli ndalon loj\u00ebn, ngat\u00ebrroj tempor\u00ebt dhe zakonisht \u00e7on n\u00eb p\u00ebrfundimin e lidhjes p\u00ebr shkak t\u00eb tejkalimit t\u00eb afatit. Por fal\u00eb k\u00ebmb\u00ebnguljes dhe nj\u00eb mjeti t\u00eb mrekulluesh\u00ebm t\u00eb quajtur <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jagt\/clumsy\">clumsy<\/a><\/noindex> , arrita t\u00eb zbuloj se \u00e7far\u00eb po ndodhte.<\/p>\n<p>N\u00eb p\u00ebrmbledhje: p\u00ebr shkak t\u00eb nj\u00eb gabimi dhe implementimi t\u00eb pap\u00ebrfunduar t\u00eb simulimit t\u00eb gjendjes s\u00eb vones\u00ebs, klienti ndonj\u00ebher\u00eb gjendej n\u00eb nj\u00eb situat\u00eb ku duhej t\u00eb d\u00ebrgonte nj\u00eb paket\u00eb rrjeti, e cila p\u00ebrmbante veprimet e lojtar\u00ebve n\u00eb lidhje me rreth 400 entitete lojrash (ne e quajm\u00eb \"megapaketa\"). Pas k\u00ebsaj, serveri duhet jo vet\u00ebm t\u00eb marr\u00eb sakt\u00ebsisht t\u00eb gjitha k\u00ebto veprime hyr\u00ebse, por gjithashtu t\u00eb d\u00ebrgoj\u00eb ato te t\u00eb gjith\u00eb klient\u00ebt e tjer\u00eb. N\u00ebse ke 200 klient\u00eb, kjo b\u00ebhet shpejt nj\u00eb problem. Kanali drejt serverit shpejt mbushet, \u00e7ka \u00e7on n\u00eb humbje paketash dhe nj\u00eb kaskad\u00eb t\u00eb k\u00ebrkesave t\u00eb rip\u00ebrs\u00ebritura p\u00ebr paketa. Vonimi i veprimeve hyr\u00ebse pastaj \u00e7on n\u00eb at\u00eb q\u00eb edhe m\u00eb shum\u00eb klient\u00eb fillojn\u00eb t\u00eb d\u00ebrgojn\u00eb megapaketa, dhe mbingarkesa e tyre b\u00ebhet edhe m\u00eb e fort\u00eb. Klient\u00ebt me fat arrijn\u00eb t\u00eb rikuperohen, t\u00eb tjer\u00ebt \"bien\".<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\n<img decoding=\"async\" alt=\"Megan\u00ebpako: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhin problemin me multiplayer me 200 lojtar\u00eb\" src=\"\/wp-content\/uploads\/2019\/09\/ff1a60d55eb6f5a4dc7be4b826d747f0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nProblemi ishte mjaft themelor dhe m\u00eb zuri dy jav\u00eb p\u00ebr ta zgjidhur. Ajo \u00ebsht\u00eb mjaft teknike, prandaj m\u00eb posht\u00eb do t\u00eb shpjegoj detajet teknike t\u00eb holl\u00ebsishme. Por fillimisht duhet t\u00eb dini se nga versioni 0.17.54, i l\u00ebshuar m\u00eb 4 qershor, n\u00eb kushtet e problemeve t\u00eb p\u00ebrkohshme me lidhjen, multiplayer b\u00ebhet m\u00eb i q\u00ebndruesh\u00ebm, dhe fshehja e vonesave \u00ebsht\u00eb shum\u00eb m\u00eb pak me defekte (m\u00eb pak ngecje dhe teleporter). P\u00ebr m\u00eb tep\u00ebr, e kam ndryshuar m\u00ebnyr\u00ebn e fshehjes s\u00eb vonesave n\u00eb luftime dhe shpresoj q\u00eb p\u00ebr k\u00ebt\u00eb arsye ato do t\u00eb jen\u00eb pak m\u00eb t\u00eb buta.<\/p>\n<h3>Megan multiplayer - detajet teknike<\/h3>\n<p>\nN\u00ebse e shpjegojm\u00eb thjesht, multiplayer n\u00eb loj\u00eb funksionon si m\u00eb posht\u00eb: t\u00eb gjith\u00eb klient\u00ebt simulojn\u00eb gjendjen e loj\u00ebs, duke marr\u00eb dhe d\u00ebrguar vet\u00ebm hyrjen e lojtarit (t\u00eb quajtur \"veprimet e hyrjes\", <i>Input Actions<\/i>). Detyra kryesore e serverit \u00ebsht\u00eb t\u00eb transferoj\u00eb <i>Input Actions<\/i> dhe t\u00eb kontrolloj\u00eb q\u00eb t\u00eb gjith\u00eb klient\u00ebt t\u00eb realizojn\u00eb t\u00eb nj\u00ebjtat veprime n\u00eb nj\u00eb cik\u00ebl. M\u00eb shum\u00eb informacion rreth k\u00ebsaj mund t\u00eb lexoni n\u00eb postimin <noindex><a rel=\"nofollow\" href=\"https:\/\/www.factorio.com\/blog\/post\/fff-149\">FFF-149<\/a><\/noindex>.<\/p>\n<p>Duke qen\u00eb se serveri duhet t\u00eb marr\u00eb vendime n\u00eb lidhje me veprimet q\u00eb duhet t\u00eb realizohen, veprimi i lojtarit kalon n\u00ebp\u00ebr nj\u00eb rrug\u00eb t\u00eb till\u00eb: veprimi i lojtarit -&gt; klienti i loj\u00ebs -&gt; rrjeti -&gt; serveri -&gt; rrjeti -&gt; klienti i loj\u00ebs. Kjo do t\u00eb thot\u00eb se \u00e7do veprim i lojtarit b\u00ebhet vet\u00ebm pasi kalon n\u00eb rrug\u00ebn e tij p\u00ebrmes rrjetit. P\u00ebr k\u00ebt\u00eb arsye, loja do t\u00eb dukej shum\u00eb e ndaluar, prandaj pothuajse menj\u00ebher\u00eb pas shfaqjes s\u00eb multiplayer-it n\u00eb loj\u00eb u krijua nj\u00eb mekaniz\u00ebm p\u00ebr fshehjen e vonesave. Fshehja e vonesave imiton hyrjen e lojtarit pa marr\u00eb parasysh veprimet e lojtar\u00ebve t\u00eb tjer\u00eb dhe vendimet e serverit.<\/p>\n<p><img decoding=\"async\" alt=\"Megan\u00ebpako: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhin problemin me multiplayer me 200 lojtar\u00eb\" src=\"\/wp-content\/uploads\/2019\/09\/0b66a3b07d6aa2ab1d2329d782c78615.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nN\u00eb Factorio ka nj\u00eb gjendje loj\u00eb <i>Game State<\/i> \u2014 kjo \u00ebsht\u00eb gjendja e plot\u00eb e Hart\u00ebs, lojtarit, entiteteve dhe gjith\u00e7kaje tjet\u00ebr. Ajo simulohet n\u00eb m\u00ebnyr\u00eb determinuese n\u00eb t\u00eb gjith\u00eb klient\u00ebt n\u00eb baz\u00eb t\u00eb veprimeve t\u00eb marra nga serveri. Gjendja e loj\u00ebs \u00ebsht\u00eb e shenjt\u00eb, dhe n\u00ebse ndonj\u00ebher\u00eb fillon t\u00eb ndryshoj\u00eb nga serveri ose nga ndonj\u00eb klient tjet\u00ebr, ndodh nj\u00eb desinkronizim.<\/p>\n<p>P\u00ebrve\u00e7 <i>Game State<\/i> ne kemi nj\u00eb gjendje vonesash <i>Latency State<\/i>. Ajo p\u00ebrmban nj\u00eb n\u00ebn-grup t\u00eb vog\u00ebl t\u00eb gjendjes kryesore. <i>Latency State<\/i> nuk \u00ebsht\u00eb e shenjt\u00eb dhe thjesht paraqet nj\u00eb pamje t\u00eb asaj si do t\u00eb duket gjendja e loj\u00ebs n\u00eb t\u00eb ardhmen bazuar n\u00eb hyrjet e lojtar\u00ebve. <i>Input Actions<\/i>.<\/p>\n<p>P\u00ebr k\u00ebt\u00eb, ne ruajm\u00eb nj\u00eb kopje t\u00eb krijuar <i>Input Actions<\/i> n\u00eb radh\u00ebn e vonesave.<\/p>\n<p><img decoding=\"async\" alt=\"Megan\u00ebpako: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhin problemin me multiplayer me 200 lojtar\u00eb\" src=\"\/wp-content\/uploads\/2019\/09\/31e43263d1d2bfc79700730978fcd02a.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nPra fillon, skena n\u00eb an\u00ebn e klientit duket pak a shum\u00eb k\u00ebshtu:<\/p>\n<ol>\n<li>Aplikojm\u00eb <i>Input Actions<\/i> t\u00eb gjith\u00eb lojtar\u00ebt n\u00eb <i>Game State<\/i> ashtu si\u00e7 k\u00ebto veprime hyr\u00ebse u mor\u00ebn nga serveri.<\/li>\n<li>Fshijm\u00eb nga radh\u00ebt e vonesave t\u00eb gjitha <i>Input Actions<\/i>, q\u00eb sipas t\u00eb dh\u00ebnave t\u00eb serverit, tashm\u00eb ishin aplikuar n\u00eb <i>Game State<\/i>.<\/li>\n<li>Fshijm\u00eb <i>Latency State<\/i> dhe e rivendosim, q\u00eb t\u00eb duket sakt\u00ebsisht si <i>Game State<\/i>.<\/li>\n<li>Aplikojm\u00eb t\u00eb gjitha veprimet nga radh\u00ebt e vonesave n\u00eb <i>Latency State<\/i>.<\/li>\n<li>N\u00eb baz\u00eb t\u00eb t\u00eb dh\u00ebnave <i>Game State<\/i> dhe <i>Latency State<\/i> rend\u00ebrtojm\u00eb loj\u00ebn p\u00ebr lojtarin.<\/li>\n<\/ol>\n<p>\nE gjith\u00eb kjo p\u00ebrs\u00ebritet n\u00eb \u00e7do cik\u00ebl.<\/p>\n<p>P\u00ebr shum\u00eb t\u00eb komplikuar? Mos u relaksoni, kjo nuk \u00ebsht\u00eb e gjith\u00eb historia. P\u00ebr t\u00eb kompensuar pasigurin\u00eb e lidhjeve t\u00eb internetit, ne kemi krijuar dy mekanizma:<\/p>\n<ul>\n<li>Ciklet e humbura: kur serveri vendos se <i>Input Actions<\/i> do t\u00eb realizohen n\u00eb ciklin e loj\u00ebs, n\u00ebse ai nuk mori <i>Input Actions<\/i> asnj\u00eb lojtar (p\u00ebr shembull, p\u00ebr shkak t\u00eb rritjes s\u00eb vones\u00ebs), ai nuk do t\u00eb pres\u00eb, por do t'i thot\u00eb k\u00ebtij klienti \u00abnuk i mora parasysh t\u00eb dh\u00ebnat e tua, do t\u00eb p\u00ebrpiqem t'i p\u00ebrfshij n\u00eb ciklin e ardhsh\u00ebm\u00bb. Kjo \u00ebsht\u00eb b\u00ebr\u00eb q\u00eb, p\u00ebr shkak t\u00eb problemeve me lidhjen (apo me kompjuterin) t\u00eb nj\u00eb lojtari, p\u00ebrdit\u00ebsimi i hart\u00ebs t\u00eb mos ngadal\u00ebsohet p\u00ebr t\u00eb gjith\u00eb t\u00eb tjer\u00ebt. Vlen t\u00eb p\u00ebrmendet se <i>Input Actions<\/i>nuk injorohen, por thjesht shtyhen. <i>Input Actions<\/i> Vonesa e kompletuar e rrug\u00ebs p\u00ebrpara dhe pas: serveri p\u00ebrpiqet t\u00eb supozoj\u00eb se cila \u00ebsht\u00eb vonesa e transmetimit t\u00eb t\u00eb dh\u00ebnave mes klientit dhe serverit p\u00ebr secilin klient. \u00c7do 5 sekonda ai diskuton me klientin p\u00ebr nj\u00eb vones\u00eb t\u00eb re (n\u00eb var\u00ebsi t\u00eb asaj si ka vepruar lidhja n\u00eb t\u00eb kaluar\u00ebn), dhe k\u00ebshtu rrit apo zvog\u00eblson p\u00ebrkat\u00ebsisht vones\u00ebn e transmetimit t\u00eb t\u00eb dh\u00ebnave.<\/li>\n<li>K\u00ebta mekanizma vet\u00eb jan\u00eb mjaft t\u00eb thjesht\u00eb, por kur p\u00ebrdoren s\u00eb bashku (\u00e7ka ndodh shpesh n\u00eb probleme me lidhjen), logjika e kodit b\u00ebhet e v\u00ebshtir\u00eb p\u00ebr t'u menaxhuar dhe me shum\u00eb raste kufitare. P\u00ebr m\u00eb tep\u00ebr, kur k\u00ebta mekanizma hyjn\u00eb n\u00eb loj\u00eb, serveri dhe radh\u00ebt e vonesave duhet t\u00eb implementojn\u00eb sakt\u00ebsisht nj\u00eb<\/li>\n<\/ul>\n<p>\nInput Action <i>StopMovementInTheNextTick<\/i> me emrin <i>. Fal\u00eb k\u00ebsaj, n\u00eb rastin e problemeve me lidhjen, personazhi nuk do t\u00eb vrapoj\u00eb vet\u00eb (p\u00ebr shembull, n\u00ebn nj\u00eb tren).<\/i>Tani duhet t'ju shpjegoj se si funksionon selektimi i entiteteve. Nj\u00eb nga llojet e transmetuara<\/p>\n<p>Tani duhet t\u00eb shpjegojm\u00eb se si funksionon zgjedhja e entiteteve. Nj\u00eb nga tipet e transmetuara <i>StopMovementInTheNextTick<\/i> \u2014 \u00ebsht\u00eb nj\u00eb ndryshim i gjendjes s\u00eb zgjedhjes s\u00eb nj\u00eb entiteti. Ajo i komunikon t\u00eb gjith\u00ebve se mbi cilin entitet ka kaluar kursori i lojtarit. Si\u00e7 mund t\u00eb kuptohet, ky \u00ebsht\u00eb nj\u00eb nga veprimet m\u00eb t\u00eb shpeshta t\u00eb hyrjes q\u00eb d\u00ebrgojn\u00eb klient\u00ebt, prandaj p\u00ebr t\u00eb kursyer kapacitetin e kanalit, ne e kemi optimizuar at\u00eb q\u00eb t\u00eb z\u00ebr\u00eb sa m\u00eb pak hap\u00ebsir\u00eb. Kjo realizohet k\u00ebshtu: p\u00ebr secil\u00ebn zgjedhje t\u00eb entitetit, n\u00eb vend q\u00eb t\u00eb ruajm\u00eb koordinatat absolute dhe shum\u00eb t\u00eb sakta t\u00eb hart\u00ebs, loja ruan nj\u00eb zhvendosje relative me sakt\u00ebsi t\u00eb ul\u00ebt nga zgjedhja e m\u00ebparshme. Kjo funksionon mir\u00eb, sepse selektimi me miun zakonisht ndodh shum\u00eb af\u00ebr zgjedhjes s\u00eb m\u00ebparshme. P\u00ebr k\u00ebt\u00eb arsye, ndodhin dy k\u00ebrkesa t\u00eb r\u00ebnd\u00ebsishme: <i>Input Actions<\/i> nuk duhet kurr\u00eb t\u00eb injorohen dhe duhet t\u00eb p\u00ebrmbushen n\u00eb rendin e duhur. K\u00ebto k\u00ebrkesa p\u00ebrmbushen p\u00ebr <i>Game State<\/i>. Por qysh se detyra <i>Stati i vones\u00ebs<\/i> \u00ebsht\u00eb \"t\u00eb duket mjaft mir\u00eb\" p\u00ebr lojtarin, n\u00eb gjendjen e vonesave k\u00ebto nuk p\u00ebrmbushen. <i>Latency State<\/i> nuk merr parasysh <noindex><a rel=\"nofollow\" href=\"https:\/\/cdn.factorio.com\/assets\/img\/blog\/fff-302-megapacket-commit.jpg\">shum\u00eb raste t\u00eb kufirit<\/a><\/noindex>, q\u00eb lidhen me humbjen e cikle dhe ndryshimin e vonesave t\u00eb d\u00ebrgimit nga nj\u00ebra an\u00eb n\u00eb tjetr\u00ebn.<\/p>\n<p>Tani ju mund t\u00eb filloni t\u00eb kuptoni se \u00e7far\u00eb po ndodh. M\u00eb n\u00eb fund, ne fillojm\u00eb t\u00eb shohim arsyet e problemit t\u00eb mega-paket\u00ebs. Zgjidhja e problemit \u00ebsht\u00eb se n\u00eb vendimin p\u00ebr t\u00eb p\u00ebrcaktuar n\u00ebse duhet t\u00eb transmitohet veprimi i ndryshimit t\u00eb zgjedhjes, logjika e zgjedhjes s\u00eb entiteteve mb\u00ebshtetet n\u00eb <i>Latency State<\/i>, dhe kjo gjendje nuk p\u00ebrmban gjithmon\u00eb informacion t\u00eb sakt\u00eb. Prandaj, mega-paketa gjenerohet k\u00ebshtu:<\/p>\n<ol>\n<li>Lojtari ka probleme me lidhjen.<\/li>\n<li>Mekanizmat e humbjes s\u00eb cikle dhe rregullimit t\u00eb vonesave t\u00eb d\u00ebrgimit nga nj\u00ebra an\u00eb n\u00eb tjetr\u00ebn hyjn\u00eb n\u00eb loj\u00eb.<\/li>\n<li>Rradha e gjendjes s\u00eb vones\u00ebs nuk merr parasysh k\u00ebto mekanizma. Kjo rezulton n\u00eb faktin se disa veprime hiqen para kohe ose kryhen n\u00eb rend t\u00eb gabuar, duke \u00e7uar n\u00eb <i>Latency State<\/i>.<\/li>\n<li>Lojtari rimerr lidhjen dhe, p\u00ebr t'u p\u00ebrgatitur p\u00ebr serverin, simuluan deri n\u00eb 400 cikle.<\/li>\n<li>N\u00eb \u00e7do cik\u00ebl gjenerohet dhe p\u00ebrgatitet p\u00ebr d\u00ebrgim n\u00eb server nj\u00eb veprim i ri p\u00ebr ndryshimin e zgjedhjes s\u00eb entitetit.<\/li>\n<li>Klienti d\u00ebrgon serverit nj\u00eb mega-pakete prej m\u00eb shum\u00eb se 400 ndryshimesh zgjedhjesh t\u00eb entiteteve (dhe veprime t\u00eb tjera: gjendja e q\u00ebllimit, ecjes etj. gjithashtu vuajn\u00eb nga ky problem).<\/li>\n<li>Serveri merr 400 veprime hyr\u00ebse. Duke qen\u00eb se nuk i lejohet t\u00eb kaloj\u00eb asnj\u00eb veprim hyr\u00ebs, ai urdh\u00ebron t\u00eb gjith\u00eb klient\u00ebt t\u00eb kryejn\u00eb k\u00ebto veprime dhe i d\u00ebrgon ato n\u00ebp\u00ebrmjet rrjetit.<\/li>\n<\/ol>\n<p>\nIronia q\u00ebndron n\u00eb faktin se mekanizmi i dise\u00f1ado p\u00ebr t\u00eb kursyer kapacitetin e kanalit, p\u00ebrfundimisht krijonte paketa rrjeti t\u00eb m\u00ebdha.<\/p>\n<p>Ne e zgjodh\u00ebm k\u00ebt\u00eb problem, duke p\u00ebrmir\u00ebsuar t\u00eb gjitha rastet kufitare t\u00eb p\u00ebrdit\u00ebsimeve dhe mb\u00ebshtetjes s\u00eb radh\u00ebs t\u00eb vonesave. Edhe pse kjo k\u00ebrkoi mjaft koh\u00eb, n\u00eb fund ia vlen p\u00ebr ta realizuar gjith\u00e7ka si\u00e7 duhet dhe jo t\u00eb mb\u00ebshtetemi n\u00eb haks t\u00eb shpejt\u00eb.<br \/>\n<br \/>Burimi: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/post\/466135\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043c\u0430\u0435 \u044d\u0442\u043e\u0433\u043e \u0433\u043e\u0434\u0430 \u044f \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0433\u0440\u043e\u043a\u0430 \u0432 MMO-\u043c\u0435\u0440\u043e\u043f\u0440\u0438\u044f\u0442\u0438\u0438 KatherineOfSky. \u042f \u0437\u0430\u043c\u0435\u0442\u0438\u043b, \u0447\u0442\u043e \u043a\u043e\u0433\u0434\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u0433\u0440\u043e\u043a\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430, \u0447\u0435\u0440\u0435\u0437 \u043a\u0430\u0436\u0434\u044b\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043c\u0438\u043d\u0443\u0442 \u0447\u0430\u0441\u0442\u044c \u0438\u0437 \u043d\u0438\u0445 \u00ab\u043e\u0442\u0432\u0430\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f\u00bb. \u041a \u0441\u0447\u0430\u0441\u0442\u044c\u044e \u0434\u043b\u044f \u0432\u0430\u0441 (\u043d\u043e \u043d\u0435 \u0434\u043b\u044f \u043c\u0435\u043d\u044f), \u044f \u0431\u044b\u043b \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0442\u0435\u0445 \u0438\u0433\u0440\u043e\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. \u042f \u0432\u043e\u0441\u043f\u0440\u0438\u043d\u044f\u043b \u044d\u0442\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":28381,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-37812","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\".\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"sq_AL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041c\u0435\u0433\u0430\u043f\u0430\u043a\u0435\u0442: \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c Factorio \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u0435\u0440\u043e\u043c \u043d\u0430 200 \u0438\u0433\u0440\u043e\u043a\u043e\u0432 | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\".\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:19:55+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:19:55+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Megapaketi: si arrit\u00ebn zhvilluesit e Factorio t\u00eb zgjidhnin problemin me multiplayerin p\u00ebr 200 lojtar\u00eb | ProHoster","description":".","canonical_url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"sq_AL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041c\u0435\u0433\u0430\u043f\u0430\u043a\u0435\u0442: \u043a\u0430\u043a \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430\u043c Factorio \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0435\u0448\u0438\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0441 \u043c\u0443\u043b\u044c\u0442\u0438\u043f\u043b\u0435\u0435\u0440\u043e\u043c \u043d\u0430 200 \u0438\u0433\u0440\u043e\u043a\u043e\u0432 | ProHoster","og:description":".","og:url":"https:\/\/prohoster.info\/sq\/blog\/administrirovanie\/megapaket-kak-razrabotchikam-factorio-udalos-reshit-problemu-s-multipleerom-na-200-igrokov","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:19:55+00:00","article:modified_time":"2019-10-31T19:19:55+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"37812","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 19:22:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:20:22","updated":"2026-01-23 19:22:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37812","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/comments?post=37812"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/posts\/37812\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media\/28381"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/media?parent=37812"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/categories?post=37812"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/sq\/wp-json\/wp\/v2\/tags?post=37812"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}