Vejít do
Všechna počítačová tajemství pro začátečníky i profesionály
  • Pro začínajícího uživatele: rozdíly mezi softwarovými produkty programového systému 1C:Enterprise
  • Demo verze programu 1s 8.3. Mobilní aplikace "UNF" NOVINKA
  • Nastavení 1C managementu naší společnosti od nuly
  • Warface registrace zdarma
  • Registrace do hry World Of Tanks – co potřebujete vědět?
  • Strategie a taktika Starcraft II
  • Psaní robota pro Stronghold Kingdoms. Psaní robota pro Stronghold Kingdoms Pracovní kódy pro hru Stronghold Kingdoms

    Psaní robota pro Stronghold Kingdoms.  Psaní robota pro Stronghold Kingdoms Pracovní kódy pro hru Stronghold Kingdoms

    Chcete se přenést do jiné éry za skutečným dobrodružstvím? Spusťte na počítači bezplatnou online hru "Silná království" a vyzkoušejte si brutální středověké války. Vnímejte, jaká je krev, která vám tuhne v žilách, zjistěte, kolik máte adrenalinu. Efekt hlubokého ponoření do hry je zaručen. Stronghold Kingdoms září-říjen 2019 – cítíte se jako skutečný hrdina!

    Hráči se ocitnou ve středověkém světě plném nebezpečí, ve kterém si budou muset zvyknout a usadit se, od stavby domova a obrany pevnosti až po účast ve válce.

    Vlastnosti hry:

    • hráči budují a rozšiřují středověké pevnosti, které obstojí ve zkoušce času;
    • účastníci spravují vesnice, správně do nich umísťují budovy, aby zvýšili efektivitu;
    • S pomocí sběratelské karty budou hráči moci obchodovat, prozkoumávat, hledat atd.;
    • kráčet po cestě k vysokým titulům k získání moci;
    • vytvářejte a hrajte své strategické karty, abyste získali zásadní výhodu.

    Napětí v této hře dosáhne nebetyčných úrovní a vítězství vám umožní pocítit skutečnou euforii. Tvůrci pravidelně vyvíjejí nové verze hry. S každou aktualizací se přidává něco nového, rozšiřují se možnosti a hra se stává ještě jasnější, mnohotvárnější a zajímavější.

    Jak uplatnit kupón do hry Stronghold Kingdoms září-říjen 2019?

    Chcete-li získat kýžené „tajné slovo“, stačí na našem webu vybrat jednu z položek, na kterou sleva platí a kliknout myší, poté systém automaticky vydá jedinečné symbolické číslo. Propagační kód pro hru Stronghold Kingdoms může uplatnit kdokoli: zkopírujte přijaté číslo, klikněte na odkaz a vložte kombinaci písmen a číslic do speciálního pole při registraci k placeným službám. Slevové kupóny jsou platné pouze po omezenou dobu, proto vždy věnujte pozornost načasování akce. Slevy na kupóny nelze zpravidla kombinovat se slevami na placené účty a další herní služby označené „Speciální nabídka“.

    Hra je distribuována zdarma stažením herního klienta z oficiálních stránek Firefly Studios.

    Čekejte prosím, propagační kódy se načítají

    Aktuální bonusové kódy a propagační kódy Stronghold Kingdoms se objevily na našem webu přímo na této stránce. Stronghold Kingdoms je nejnovější prohlížečová strategie od tvůrců populární hry Stronghold.

    Hra je skvělá pro fanoušky, kteří si nechtějí stahovat klienta do počítače. Všichni fanoušci staré verze hry si hru užijí, protože jste nyní v online režimu. Nyní jsou vašimi nepřáteli lidé, ne roboti. Musíte ukázat své strategické a ekonomické schopnosti, aby vaše město nebylo zničeno. Pro lidi, kteří o hře slyšeli poprvé, existuje několik věcí, které byste měli vědět. Jednak se okamžitě ocitnete ve středověku, během křížových výprav a různých historických událostí. Potřebujete postavit své město, oplotit ho vysokou zdí, zavést systém jídla, zábavy a samozřejmě sestavit vlastní armádu. Hra spojuje mnoho různých her, protože potřebujete sledovat náladu obyvatel a vývoj města, zatímco na druhém konci mapy řídíte bitvy. Existuje mnoho ras a kategorií vojsk. Od mocných rytířů po obyčejné lupiče. Je na vás, abyste se rozhodli, jak budete provádět své herní zásady. Hra se ale rozhodně zanechá ve vaší paměti, protože s takovým vývojovým systémem není prakticky nic tak zapamatovatelného a živého. Všechny události probíhají v reálném čase, takže rozhodnutí bude potřeba činit rychle a promyšleně.
    Poskytujeme propagační kódy pro hru Stronghold Kingdoms, které vám poskytují velké slevy a bonusy. Díky nim si můžete najmout velkou armádu a obsadit nejbližší hráčské osady nebo vybudovat město, které bude hodné být nazýváno hlavním městem mapy. Propagace této hry jsou na našich webových stránkách neustále aktualizovány, buďte informováni o všech událostech.

    Co přitahuje uživatele na hře Stronghold Kingdoms:

    • Schopnost komunikovat s mnoha hráči z celého světa: obchod, bitvy, dobývání hradů, špionáž a mnoho dalšího;
    • Je zde možnost studovat obory a rozvíjet je. (Například: zemědělství, průmysl, obchod, vojenské záležitosti);
    • Globální mapa provincií, kde je vše rozděleno do regionů (okresů). Každá taková oblast bude pro hráče jakousi domovinou;
    • Hra proti živým hráčům a počítačovým protivníkům (tábor banditů, vlčí doupě, nepřátelský obležení tábor a hrady krysy, hada, kance a vlka). Umělá inteligence může útočit na vlastnosti hráče, takže se vyplatí postarat se o ochranu!
    Dlouho jsem se přikláněl k otázce napsat bota pro tuto hru, ale buď mi chyběly zkušenosti, byl jsem líný, nebo jsem se k tomu snažil přistupovat ze špatného směru.
    V důsledku toho, když jsem získal zkušenosti s psaním a reverzním inženýrstvím kódu v C#, rozhodl jsem se dosáhnout svého cíle.

    Ano, jak jste si mohli všimnout, C# není snadné - hra je napsána v něm pomocí .net 2.0, což mi později vložilo do kol nějaké paprsky.

    Zpočátku mě napadlo napsat soketového bota, který by pouze emuloval síťový protokol (který není nijak zašifrovaný) a mít „zdrojové kódy“ (výsledek dekompilace il-kódu) lze snadno obnovit ve třetím - párty aplikace.

    Ale zdálo se mi to zdlouhavé a nudné, protože proč se trápit s kolem, když máte ty samé „zdrojové kódy“.

    Vyzbrojen Reflectorem jsem začal zjišťovat vstupní bod hry (jejíž kód nebyl více než tři roky vůbec zamlžován, vývojáři se divím) - nic zvláštního.

    Analýza a částečně špatné rozhodnutí
    Je zřejmé, že herní projekt byl původně vytvořen jako konzolová aplikace:

    Private static void Main (string args) jako vstupní bod a jeho třída Program to napovídají; třída je mimochodem také soukromá.

    Nejprve jsem se vrhl na zveřejnění třídy a metody, opět jsem použil Reflector s přídavkem Reflexil, aniž bych věděl, co očekávat.

    Najednou jsem ale narazil na launcher, který stahoval upravený soubor.
    Poté, co jsem s ním krátce bojoval se stejným reflektorem a provedl pitvu, vytáhl jsem kód pro nastavení argumentů předávaných do spustitelného souboru hry:

    If (DDText.getText(0x17) == "XX") parametry = nový řetězec ( "-InstallerVersion", "", "", "st" ); // st == steam else parameters = new string ( "-InstallerVersion", "", "" ); parametry = SelfUpdater.CurrentBuildVersion.ToString(); parametry = DDText.getText(0); // Po prozkoumání jsem zjistil, že toto je jazyk hry, ve formátu „ru“, „de“, „en“ atd. Načteno ze souboru local.txt vedle spouštěče. UpdateManager.SetCommandLineParameters(parametry); // A toto je jejich obal pro nejběžnější System.Diagnostics.Process UpdateManager.StartApplication();

    Pojďme se podívat:

    If (DDText.getText(0x17) == "XX") - Řádek ze souboru local.txt vedle spouštěče.
    U verzí s párou/bez páry mají takovou zvláštní kontrolu: X – bez páry, XX – pára. :\
    parametry = SelfUpdater.CurrentBuildVersion - Verze spouštěče, klidně z ní skočí, i když kontrola v klientovi je divná, jak jsem později zjistil, a můžete jednoduše zadat číslo mnohem větší, než je aktuální, „v záloze“, protože kontrola je pouze na neaktuálnost, abych tak řekl, verze prostřednictvím srovnání čísel „méně než větší“.
    parametry = DDText.getText(0) - Po zfalšování verze jsem zjistil, že se jedná o jazyk hry, ve formátu „ru“, „de“, „en“ atd.
    Načte se také ze souboru local.txt.

    Mimochodem, verze launcheru vypadá asi takto:

    Static SelfUpdater() ( currentBuildVersion = 0x75; // 117, tj. ve skutečnosti 1.17.)

    A vytvořil jsem kouzelný dávkový soubor:

    StrongholdKingdoms.exe -InstallerVersion 117 cs

    Ačkoli můžete udělat toto:

    StrongholdKingdoms.exe - InstallerVersion 100500 ru

    Což je to, o čem jsem mluvil trochu výše.

    Takže to, co máme: mírně upravený klient a systém obcházení launcheru, pokud se tomu tak dá říkat.
    Když jsem to všechno zkusil spustit, vidím, že hra funguje a moje patche jí neublížily (i když proč by jí škodily).

    Poté jsem zkusil připojit spustitelný soubor hry k projektu jako knihovnu tříd a připojit herní jmenný prostor – Kingdoms.

    Pak jsem ohradil spoustu kódu: pokusil jsem se zavolat Main a emulovat třídu Programm, ale z nějakého důvodu se hra zhroutila při běhu rámce not-dotnet-framework, kdykoli jsem se pokusil ji zprovoznit.
    Poukázal na skutečnost, že hra používá mnoho knihoven mimo C# a mnoho nebezpečného kódu. Žádné skutečné důvody jsem nenašel.

    Rozhodnutí je správné
    Jelikož jsem dlouho trpěl a nenašel řešení, vzdal jsem to. Ale z nějakého důvodu jsem si vzpomněl na fork serveru Terraria - TShock (jo, fork, samozřejmě - kluci se také bavili s dekompilátorem) a jeho načítání modulů (mods/plugins) z DLL.

    Tento nápad mi přišel zajímavý. Po googlování jsem našel jak metodu, tak kód.
    Když jsem se do toho trochu ponořil a vyzkoušel ve svém vlastním projektu, s hrůzou jsem zjistil, že to funguje (najednou!).
    Ve skutečnosti kód:

    System.Reflection.Assembly A = System.Reflection.Assembly.LoadFrom(System.Windows.Forms.Application.StartupPath + @"\BotDLL.dll"); Typ ClassType = A.GetType("BotDLL.Main", true); objekt Obj = Activator.CreateInstance(ClassType); System.Reflection.MethodInfo MI = ClassType.GetMethod("Inject"); MI.Invoke(Obj, null);

    Podívejme se na kód:
    System.Reflection.Assembly - To je věc, která je zodpovědná za vytváření odkazů na soubory při jejich připojení k projektu, pouze z kódu. Také ukládá informace o verzích vašich projektů a autorských právech (ano, stejné AssemblyInfo.cs ve všech vašich projektech).
    Assembly.LoadFrom(System.Windows.Forms.Application.StartupPath + @"\BotDLL.dll") - Načtěte naši knihovnu.
    Poté zavoláme funkci uvnitř této třídy Inject(), což je v podstatě začátek robota. =)
    Vyzkoušel jsem kód, který jsem načrtl v aplikaci třetí strany - injekce fungovala.

    Záplatování klienta
    Nyní přejdeme k zábavnější části – implementaci kódu výzvy do hry.
    Poté, co se to bezostyšně pokusil vložit do Main nahrazením kódu pomocí Reflexilu, byl úspěšně poslán opravit to, co nebylo možné opravit v důsledku dekompilace. Nebo jsem byl možná jen líný, na tom nezáleží.
    Šel jsem hledat v tomto Mainu zaručené volání funkcí třetích stran (mimo hlavní větve if atd.) a docela rychle jsem našel volání funkce MySettings.load(), která načetla nastavení hry při spuštění.
    Ale opět se ukázalo, že existuje hora kódu, který se nechtěl zkompilovat bez diamantů.
    Ale naštěstí vedle ní existuje booleovská funkce hasLoggedIn(), která vrací jednu boolovskou hodnotu právě při spuštění hry:
    return (this.HasLoggedIn || (toto.Username.Length > 0));
    Okamžitě mě to potěšilo a okamžitě se tato funkce transformovala na toto:

    If (!IsStarted) ( System.Reflection.Assembly A = System.Reflection.Assembly.LoadFrom(System.Windows.Forms.Application.StartupPath + @"\BotDLL.dll"); Typ ClassType = A.GetType("BotDLL. Main", true); object Obj = Activator.CreateInstance(ClassType); System.Reflection.MethodInfo MI = ClassType.GetMethod("Inject"); MI.Invoke(Obj, null); IsStarted = true; ) return (this. HasLoggedIn || (this.Username.Length > 0));

    Pojďme se s ním vypořádat.
    if (!IsStarted) – museli jsme přidat tuto kontrolu a za tímto účelem zavést další pole do třídy MySettings, protože naše funkce je volána více než jednou a ve skutečnosti nepotřebujeme několik vláken botů. To dělá stejný Reflexil.
    No, hlavní kód jsme již probrali o něco výše.
    A nakonec vracíme to, co zde mělo být. =)

    Tedy – samotný bot
    Funkce vstřikování:

    Public void Inject() ( AllocConsole(); Console.Title = "SHKBot"; Console.WriteLine("DLL загружена!"); Thread Th = new Thread(SHK); Th.Start(); BotForm FBot = new BotForm(); FBot.Show(); } … static extern bool AllocConsole(); !}

    Nejprve zavoláme funkci pro otevření okna konzoly – to bude jednodušší pro ladění.
    Poté zahájíme tok naší hlavní smyčkou bota – SHK();
    A zároveň pro pohodlí otevíráme formulář pro ovládání botů.

    Pak už zbývá jen implementovat funkci, kterou potřebujete.
    Zde je zbytek mého kódu - zde jsem implementoval automatický obchodní systém.
    Aby to fungovalo, musíte nejprve „cachovat“ vesnice v každé relaci – otevřít každou z vesnic, se kterou budete obchodovat.
    Tento kód má pochybnou pomoc a zatím jsem nepřišel na jiné způsoby, jak automaticky načíst vesnice:

    RozhraníMgr.Instance.selectVillage(VillageID); GameEngine.Instance.downloadCurrentVillage();

    Zde je kód funkce SHK:

    Skrytý text

    public void SHK() ( Console.WriteLine("Injekce dokončena!"); zatímco (!GameEngine.Instance.World.isDownloadComplete()) ( Console.WriteLine("Svět ještě nebyl stažen!"); Thread.Sleep (5000) ; // 5 s Console.Clear(); ) Console.WriteLine("Svět je načten! Spouštění operací jádra."); Console.WriteLine("\n======| INFORMACE O LADĚNÍ |= ==== ="); Console.WriteLine(RemoteServices.Instance.UserID); Console.WriteLine(RemoteServices.Instance.UserName); Seznam VillageIDs = GameEngine.Instance.World.getListOfUserVillages(); foreach (int VillageID v VillageID) ( WorldMap.VillageData Village = GameEngine.Instance.World.getVillageData(VillageID); Console.WriteLine("[Initialization] " + Village.m_villageName + " - " + VillageID); InterfaceMgr.Instance.selectVillage (VillageID); GameEngine.Instance.downloadCurrentVillage(); ) Console.WriteLine("======| ========== |======\n"); while (true) ( ​​zkuste ( // Zde můžete vložit něco vlastního ) catch (Exception ex) ( Console.WriteLine("\n======| EX INFO |======" ); Console .WriteLine(ex); Console.WriteLine("======| ======= |======\n"); ) ) )


    Kontrolní kód formuláře:

    Skrytý text

    pomocí systému; pomocí System.Collections.Generic; pomocí System.ComponentModel; pomocí System.Data; pomocí System.Drawing; pomocí System.Text; pomocí System.Windows.Forms; pomocí System.Threading; pomocí Kingdoms; pomocí System.CodeDom.Compiler; pomocí Microsoft.CSharp; pomocí System.Reflection; jmenný prostor BotDLL ( veřejná částečná třída BotForm: Form ( Thread TradeThread; bool IsTrading = false; public void Log(string Text) ( Console.WriteLine(Text); richTextBox_Log.Text = Text + "\r\n" + richTextBox_Log.Text; ) public BotForm() ( CheckForIllegalCrossThreadCalls = false; InitializeComponent(); this.Show(); Log("Formulář robota je zobrazen."); listBox_ResList.SelectedIndex = 0; Log("Zahájit obchodní vlákno..."); TradeThread = new Thread(Trade); TradeThread.Start(); ) private void button_Trade_Click(object sender, EventArgs e) ( // Pokud je svět již načten a cílové pole je vyplněno if (GameEngine.Instance.World.isDownloadComplete( ) && textBox_TradeTargetID.Text. Length > 0) ( try ( if (!IsTrading) // Pokud neobchodujeme ( button_Trade.Text = "Stop"; IsTrading = true; // Pak obchodujeme ) else // A naopak ( button_Trade.Text = "Obchod"; IsTrading = false; ) ) catch (Exception ex) ( Console.WriteLine("\n======| EX INFO |======"); Log(ex .ToString()); Console.WriteLine( "======| ======= |======\n"); ) ) ) public void Trade() ( Log("Obchodní tok vytvořen!"); int Sleep = 0; while (true) // Pokud obchodování ( Sleep = 60 + new Random().Next(-5, 60); if (IsTrading) ( Log("[" + DateTime.Now + "] Zadání s \"" + listBox_ResList.SelectedItem.ToString() + "\""); // Získání ID produktu ze seznamu int ResID = int.Parse(listBox_ResList.SelectedItem.ToString().Replace(" ", "").Split("-")); int TargetID = int. Parse(textBox_TradeTargetID.Text); // Získání ID seznamu cílové vesnice VillageIDs = GameEngine.Instance.World.getListOfUserVillages(); // Získejte seznam našich vesnic foreach (int VillageID v VillageIDs) // Projdeme je ( // Pokud je vesnice načtena (její mapa byla otevřena alespoň jednou v aktuální relaci) if (GameEngine.Instance.getVillage( VillageID) != null) ( // Získejte základní informace o naší vesnici WorldMap.VillageData Village = GameEngine.Instance.World.getVillageData(VillageID); Mapa vesnice = GameEngine.Instance.getVillage(VillageID); // Získejte kompletní informace int ResAmount = (int)Map.getResourceLevel(ResID ); // Počet zdrojů ve skladu int MerchantsCount = Map.calcTotalTradersAtHome(); // Počet obchodníků v něm Log("Ve vesnici jsou " + MerchantsCount + " obchodníci " + VillageID + "); // Ladění int SendWithOne = int.Parse(textBox_ResCount.Text); // Počet zdrojů na obchodníka int MaxAmount = MerchantsCount * SendWithOne; // Počet zdrojů bude odeslán, pokud (ResAmount< MaxAmount) // Если торговцы могут увезти больше чем есть MerchantsCount = (int)(ResAmount / SendWithOne); // Считаем сколько смогут увезти реально if (MerchantsCount >0) // Pokud jsou doma obchodníci ( TargetID = GameEngine.Instance.World.getRegionCapitalVillage(Village.regionID); // Obchodujte s regionem, dočasně textBox_TradeTargetID.Text = TargetID.ToString(); // Volejte high- funkce obchodování na úrovni s řadou zpětných volání GameEngine.Instance.getVillage(VillageID).stockExchangeTrade(TargetID, ResID, MerchantsCount * SendWithOne, false); AllVillagesPanel.travellersChanged(); // Potvrďte změny (obchodníci odešli) v klientovi GUI ) ) ) Log("Opakujte obchodní cyklus přes " + Sleep + " sekundy v " + DateTime.Now.AddSeconds(Sleep).ToString("HH:mm:ss")); Console.WriteLine(); ) Thread.Sleep(Sleep * 1000); // Spíme, abychom nespamovali. Takže méně plavé. ) ) private void BotForm_FormClosing(object sender, FormClosingEventArgs e) ( try ( TradeThread.Abort(); ) catch () ) private void button_MapEditing_Click(object sender, EventArgs e) ( button_MapEditing.Text = (!GameMapEditing.Ingine.In. ).ToString(); GameEngine.Instance.World.MapEditing = !GameEngine.Instance.World.MapEditing; ) private void button_Exec_Click(odesílatel objektu, EventArgs e) ( if (richTextBox_In.Text.Length == 0 || !Game Instance.World.isDownloadComplete()) return; richTextBox_Out.Text = ""; // *** Příklad vstupu formuláře má kód v řetězci textového pole lcCode = richTextBox_In.Text; ICodeCompiler loCompiler = new CSharpCodeProvider().CreateCompiler(); CompilerParameters loParameters = new CompilerParameters(); // *** Začněte přidáním jakýchkoli odkazovaných sestavení loParameters.ReferencedAssemblies.Add("System.dll"); loParameters.ReferencedAssemblies.Add("System.Data.dll"); loferencedParameters.References. .Add("System.Windows.Forms.dll"); loParameters.ReferencedAssemblies.Add("StrongholdKingdoms.exe"); // *** Musí vytvořit plně funkční sestavení jako řetězec lcCode = @"using System; using System.IO; using System.Windows.Forms; using System.Collections.Generic; using System.Text; using Kingdoms; namespace NSpace ( public class NClass ( public object DynamicCode(params object Parameters) ( " + lcCode + @" return null; ) ) )"; // *** Načte výslednou sestavu do paměti loParameters.GenerateInMemory = false; // *** Nyní to celé zkompilujte CompilerResults loCompiled = loCompiler.CompileAssemblyFromSource(loParameters, lcCode); if (loCompiled.Errors.HasErrors) ( string lcErrorMsg = ""; lcErrorMsg = loCompiled.Errors.Count.ToString() + " Errors:"; for (int x = 0; x< loCompiled.Errors.Count; x++) lcErrorMsg = lcErrorMsg + "\r\nLine: " + loCompiled.Errors[x].Line.ToString() + " - " + loCompiled.Errors[x].ErrorText; richTextBox_Out.Text = lcErrorMsg + "\r\n\r\n" + lcCode; return; } Assembly loAssembly = loCompiled.CompiledAssembly; // *** Retrieve an obj ref – generic type only object loObject = loAssembly.CreateInstance("NSpace.NClass"); if (loObject == null) { richTextBox_Out.Text = "Couldn"t load class."; return; } object loCodeParms = new object; loCodeParms = "SHKBot"; try { object loResult = loObject.GetType().InvokeMember("DynamicCode", BindingFlags.InvokeMethod, null, loObject, loCodeParms); //DateTime ltNow = (DateTime)loResult; if (loResult != null) richTextBox_Out.Text = "Method Call Result:\r\n\r\n" + loResult.ToString(); } catch (Exception ex) { Console.WriteLine("\n======| EX INFO |======"); Console.WriteLine(ex); Console.WriteLine("======| ======= |======\n"); } } } }

    Původně jsem chtěl do bota zapojit NLua (knihovnu Lua pro C#), ale protože podporuje pouze rámce 3.5+ a z nějakého důvodu jsem nechtěl používat starší verze, udělal jsem toto:
    Pro pohodlí jsem zavedl spouštění kódu v reálném čase na samotném Sharpu – už mě unavovalo restartovat hru po opakovaných rekompilacích.
    Použil jsem to.

    Sečteno a podtrženo
    Výhody tohoto řešení:
    1. Získejte přístup ke všem herním kódům, jako byste měli zdrojový kód.
    2. Můžete si vytvořit svůj vlastní prémiový mapový systém s frontou budov, neomezeným výzkumem a ještě více:
      • Algoritmus pro prodej zboží mezi regiony kolem vás.
      • Automatická výstavba vesnice „na základě modelu“ převzatého z existujícího, jako příklad.
      • Auto-pronájem různých jednotek.
      • Automatická oprava zámku, když jste pryč.
      • Automatické vyzvednutí garantované karty v průběhu času.
    3. A samozřejmě dynamické spouštění kódu.
    4. Ochrana proti směšné detekci. Ještě pár podmínek, abychom neposílali podezřelé fiktivní žádosti.
    mínusy:
    1. Pro každou verzi budete muset klienta opravit ručně. Nebo můžete napsat patcher pomocí Mono.Cecil nebo ekvivalentu v rámci.
    2. Na rozdíl od prémiových karet budete muset mít klienta stále zapnutého a online.
    3. Hra je poměrně velká, takže studium API vám určitě zabere hodinu. I když, kdyby měl touhu a nástroje, byl by zběhlý v letech - kdyby měl touhu. A v každém případě je to lepší, než se hrabat s balíčky.

    Takto to celé vypadá:

    Seznam tříd

    • GameEngine
    • GameEngine.Instance
    • GameEngine.Instance.World
    • Mapa světa
    • WorldMap.VillageData
    • RemoteServices
    • RemoteServices.Instance
    • AllVillagesPanel
    • Mapa vesnice

    V době psaní tohoto článku byla verze hry 2.0.18.6.
    Tuto konkrétní verzi si můžete stáhnout se spustitelným souborem hry a robota.
    Nebojte se, nekradu osobní údaje. =) Už mě ta hra nebaví, tak se o své zkušenosti dělím s komunitou.

    Zdrojové kódy jsou k dispozici.
    Pokud budete používat zdrojové kódy, použijte jako knihovnu tříd čistý spustitelný soubor (nezáplatovaný vámi) a také zakažte kopírování tohoto odkazu do cílového adresáře, aby nedošlo k náhodnému nahrazení záplatovaného.
    game bot Přidat štítky

    Ihned po zaplacení obdržíte digitální kopii licenčního klíče z krabice se hrou Stronghold Kingdoms od oficiálního dodavatele - společnosti Akella, kterou je nutné zadat na svůj osobní účet hry pro získání bonusů v hodnotě 750 Kč:
    2 tokeny měsíčně
    10 výrobních palub
    10 jídelen
    5 obranných balíčků (10 na balíček)
    4 válečné balíčky (10 na balíček)
    30 balíčků náhodných karet (10 na balíček)

    Starter Set je ideální pro nové hráče, kteří chtějí rychle začít se středověkou nadvládou v Stronghold Kingdoms. Ať už chcete mírumilovně farmařit, zapojit se do politických her nebo se pomstít svým zapřisáhlým nepřátelům, tato startovací sada vám poskytne silnou podporu na vaší cestě ke koruně.

    Chcete se stát baronem, vévodou nebo králem? Ponořte se do světa válčících feudálních pánů, do světa, kde vznikají a zanikají spojenectví a celé státy. Vyzkoušejte si roli středověkého vládce. Trůn na tebe čeká, Pane!

    Vlastnosti hry:
    - Připojte se k tisícům hráčů v realistickém středověkém světě.
    - Postavte velké pevnosti, které vydrží staletí!
    - Vyzbrojte své armády a dobývejte země svých sousedů!
    - Sledujte, jak vaše vesnice, města a hrady ožívají a rostou.
    - Prozkoumejte stovky důvěryhodných technologií.
    - Hrajte na mapě starověké Rusi!

    Tento kód nemá žádná územní omezení (Region Free)
    Jazyky: ruština, angličtina
    Vydavatel: Akella

    dodatečné informace

    Hra Stronghold Kingdoms je zdarma (Free to Play), můžete si ji stáhnout přes Steam - http://store.steampowered.com/app/47410/

    Pro aktivaci startovací sady bonusů za 750 korun je potřeba postupovat podle jednoduchého návodu:
    1. Přihlaste se ke svému stávajícímu účtu nebo si zaregistrujte nový na oficiálních stránkách hry http://login.strongholdkingdoms.com/kingdoms/account.php
    2. Do pole „Aktivovat kód“ zadejte aktivační kód obdržený po zaplacení a klikněte na potvrzovací tlačítko, které se zobrazí
    3. Bonusy v hodnotě 750 korun jsou již na vašem účtu!

    Buď opatrný! Tento kód můžete na svém účtu aktivovat pouze jednou!

    Doporučujeme také, abyste věnovali pozornost podobným produktům:
    STRONGHOLD KINGDOMS - BONUSY ZA 350 KORUN -

    Možná vás budou zajímat i další námi distribuované hry. Celý seznam je k dispozici na odkazu:

    Recenze

    54

    Žádná zpětná vazba od zákazníků.

    Za kladné hodnocení zakoupeného produktu Vám prodejce poskytne dárkový poukaz v hodnotě 5,99 RUB .

    Aby bylo možné čelit porušování autorských a vlastnických práv a také vyloučit nepodložená obvinění správy stránek ze spoluúčasti na takovém porušení, správa obchodní platformy Plati (http://www.site) se na vás obrací s výzvou žádost - v případě zjištění porušení na obchodní platformě Plati nás neprodleně informujte na adrese o takovém porušení a poskytněte nám spolehlivé informace potvrzující vaše autorská nebo vlastnická práva. V dopise nezapomeňte uvést své kontaktní údaje (celé jméno, telefonní číslo).

    Aby se vyloučila nepodložená a záměrně nepravdivá hlášení o porušení těchto práv, odmítne správa poskytovat služby na obchodní platformě Plati až poté, co od vás obdrží písemná prohlášení o porušení spolu s kopiemi dokumentů potvrzujících vaše autorská nebo vlastnická práva na adrese adresa: 123007, Moskva, ulička Malý Kalužskij. 4, budova 3, Advokátní kancelář "AKAR č. 380".

    Aby bylo možné rychle reagovat na porušování vašich práv a potřebu zablokovat jednání bezohledných prodejců, žádá vás Plati o zaslání certifikovaného telegramu, který bude základem pro zablokování jednání prodejce, tento telegram musí obsahovat označení : druh porušených práv, potvrzení vašich práv a vaše kontaktní údaje (organizačně - právní forma osoby, celé jméno). Blokace bude zrušena po 15 dnech, pokud neposkytnete advokátní kanceláři písemné dokumenty potvrzující vaše autorská nebo vlastnická práva.

    Firefly Studios vydala nový ambiciózní ruskojazyčný svět pro své hradní MMO Království pevnosti. World 6 otevřel své brány 15. června a tisíce hráčů se hrnuly, aby vyzkoušely čerstvý herní server s novými mechanikami, které byly do hry představeny v poslední aktualizaci. Nový svět je dostupný jak novým hráčům, tak veteránům království. Vychází z geografické mapy západní části Ruska, ale i jeho okolních regionů a zemí, včetně pobaltských států, Ukrajiny, Běloruska, Kazachstánu a dalších států.

    Hráči mohou bojovat o kontrolu nad těmito územími a spojovat se do mocných domů s vlastními pravidly a vlastnostmi. Tento svět se od předchozích liší aktualizovanými herními mechanismy, které omezují používání náboženství a poskytují více příležitostí pro začátečníky. Toto je druhý svět v Stronghold Kingdoms, který používá nová pravidla, a první „místní“ svět, kde byla tato pravidla zavedena.

    Kromě rusky mluvících království Existují také britské, německé, francouzské, španělské světy a světy založené na globální mapě. Právě teď si všichni hráči, kteří se připojili k novému světu, mohou aktivovat speciální promo kód, který na jejich účet přidá sadu herních předmětů, se kterými mohou hráči výrazně urychlit svůj vývoj v novém světě a nastolit pořádek ve svém království. .

    Kód: D1F9-33BA-0C7F-BAF5

    Tento promo kód lze ve hře aktivovat prostřednictvím registračního procesu. Bude platný do 1. července a lze jej použít pouze jednou na účet.