Jump to content
  • Announcements

    • Xmat

      Pravidlo pro postování v TTT

      Do sekce Tipy, triky, tutoriály nepatří žádné dotazy.   Postujte sem vaše návody, tipy a různé další věci jež uznáte za vhodné sdělit zdejšímu osazenstvu, ale veškeré dotazy směřujte do sekce Všeobecná diskuse.
    • Replik

      Seznam návodů a důležitých témat v této sekci

      Pro lepší přehlednost jsem vytvořil tento seznam, který vás, méně zkušené, lépe provede touto sekcí. Věřím, že zde najdete, co hledáte. Vypsané jsou návody, které jsou oficiálně uznané jako návody. Běžné diskuze, které neposkytují postupy a rady zvěřejněny nejsou.   Instalace vlastního MaNGOS Serveru Díky těmto návodům budete (měli by jste být) schopni vytvořit a následně spustit váš vlastní server. Nastavení je pro verze s i bez datadisku.   Instalace MaNGOS Serveru (bez datadisku TBC) - Autor Benny Instalace MaNGOS Serveru (s datadiskem TBC) - Autor Malfik Instalace MaNGOS Serveru v prostředí Linux - Autor charlie Instalace MaNGOS Serveru v prostředí Linux - Autor kupkoid   Chyby a jejich řešení při přihlašování k serveru - Autor Cybe   Zálohování uživatelských dat   Dávkový soubor (BAT soubor) pro vytvoření SQL záloh - Autor Replik   Kompilování - tvoření vlastních release (revizí)   Tvorba kompilací pro Win32 (MangoScript) - Autor bLuma   Ostatní - těžko zařaditelné, ale neznamená to, že nejsou dobré   VIP Systém - Autor charlie Tvorba Webových stránek pro MaNGOS - Autor zahuba Tvorba teleportačních NPC (MangoScript) - Autor Replik Registrační web (původně předělaná SPORA) Funkční pro Antrix i MaNGOS - Autor Replik Nastavení a spuštění Minimanager pro MaNGOS - Autor BlackMartin Nastavení MaNGOS Website - Autor Artorius   Samozřejmě jsou zde i jiné návody, ale tyto jsou nejvíce používané, proto věřím, že vám budou nápomocné. Tuto sekci budeme upravovat podle potřeby. Pokud by jste něco nenašli nebo si nevěděli rady, hledejte na fóru a teprve potom založte vlastní topik. Pokud nějaký autor vytvoří kvalitní návod a chtěl by ho zveřejnit i v tomto seznamu, doporučuji, aby mi napsal zprávu skrze PM.   Díky a přeji hezký den na WoWResource   Replik
    • Aristo

      Příspěvky tam, kde nemají co dělat

      Dodržujte zákaz přispívání do topiků s repaky pokud si to zakladatelé nepřejí!! Opakované psaní příspěvků bude trestáno warnem.
    • Aristo

      Používání spoilerů

      Poslední dobou má většina uživatelů fora zvláštní nutkání postovat extrémně dlouhé texty nebo kódy, které zabírají v nejedenom případu i 80% obsahu celé stránky a hodně tak zvedají nepřehlednost v topiku. Chtěl bych všechny uživatele požádat, aby při postování citací, jakýchkoliv kódů, errorů, atp... delších než 30 řádků používali funkci spoileru.   Funkci vyvoláte příkazem [spoiler] text [/spoiler]   Ukázka:  
axxxa

[Release] Axxiny Launchery ^^

Recommended Posts

pěkný ja si udělal vlastní jen sem si pujčil dva řádky od Axxy ale mě spíš de o to aby každý nemusel stahovat patch aby mu ty správé stáhl sám launcher

Share this post


Link to post
Share on other sites

Já ti věřím, ale to dělat nebudu, jednak to neumím, druhak bys nějakým způsobem musel ověřovat aktuální verzi klienta (jak se pozná?) a za třetí si to muže každej stáhnout přes blizzardí launcher, nebo z odkazů které můžeš umístit třeba do toho launcheru ;) Dělat to nebudu, jestli se do toho někdo chce pustit, nebráním mu.

  • Upvote 1

Share this post


Link to post
Share on other sites
(jak se pozná?)

 

FileVersionInfo Class

http://msdn.microsoft.com/en-us/library/sy...ersioninfo.aspx

 

za třetí si to muže každej stáhnout přes blizzardí launcher, nebo z odkazů které můžeš umístit třeba do toho launcheru

 

http://eu.version.worldofwarcraft.com/upda...equenceFile.txt

Share this post


Link to post
Share on other sites

Tady jsem se trochu nudil. Tak jsem napsal kód, který stáhne patch. Jde o to, že stažený patch je v MPQ formátu a musí se rozbalit. To se mi bohužel dělat už nechce. Možná někdy v budoucnu :) Pokud si to dopíšeš sama, tak to použí :) nebo počkej až to dodělám já. Kdybys to použila zanech muj copyright ;)

 

/*
*
* Copyright 2008 SneakerXZ
*
*/
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Text;
using System.IO;
using System.Net;

namespace Patch
{
   public class Patch
   {
       public Patch()
       {
           FillDictionary();
       }

       /// 
       /// Returns true if new patch is available
       /// 
       /// Should be patch installed?
       public bool IsNewPatchAvailable(bool install)
       {
           string currentBuild = GetBuild();

           if (currentBuild != NewestBuild)
           {
               if(install)
                   DownloadPatch(currentBuild);

               return true;
           }

           return false;
       }

       /// 
       /// Downloads specific patch by build
       /// 
       /// WoW build as string
       public void DownloadPatch(string build)
       {

           string file;

           try
           {
               file = m_entries[build];
           }
           catch (Exception e)
           {
               throw new Exception("Required patch isn't available", e);
           }

           if (!String.IsNullOrEmpty(file))
           {
               // Let's replace something!

               file = file.Replace("{CPU}", "x86");
               file = file.Replace("{PLATFORM}", "x86");
               file = file.Replace("{OS}", "Win");
               file = file.Replace("{LANG}", "enUS");

               string url = Path.Combine(Path.GetDirectoryName(m_PatchSequenceFile), file);

               // nifty trick!!
               url = url.Replace(@"\", @"/");
               url = url.Replace(@"http:/", @"http://");

               WebClient client = new WebClient();
               client.DownloadFile(url, file);

               /*
                * 
                * TODO!
                * file must be extracted in MPQ editor.
                * 
                * 
                * 
                * 
                * 
                */

           }
       }

       /// 
       /// Downloads specific patch by build
       /// 
       /// WoW build as int
       public void DownloadPatch(int build)
       {
           DownloadPatch(build.ToString());
       }

       /// 
       /// Gets build from WoW.exe
       /// 
       /// 
       public string GetBuild()
       {
           var info = System.Diagnostics.FileVersionInfo.GetVersionInfo("WoW.exe");
           return info.FilePrivatePart.ToString();
       }

       /// 
       /// Fill Dictionary with values from PatchSequenceFile from GAME category
       /// 
       private void FillDictionary()
       {
           WebClient client;

           try
           {
               client = new WebClient();
               client.DownloadFile(m_PatchSequenceFile, Path.GetFileName(m_PatchSequenceFile));
           }
           catch (Exception e)
           {
               throw new Exception("PatchSequenceFile couldn't be downloaded", e);
           }

           List keys = Ini.GetKeys(Path.Combine(System.Environment.CurrentDirectory, Path.GetFileName(m_PatchSequenceFile)), "GAME");
           foreach (string key in keys)
           {
               // Let's fill it!
               string content = Ini.GetIniFileString(Path.Combine(System.Environment.CurrentDirectory, Path.GetFileName(m_PatchSequenceFile)), "GAME", key, null);
               m_entries.Add(key, content);
           }

           try
           {
               // tidy up!
               client.Dispose();
               File.Delete(Path.GetFileName(m_PatchSequenceFile));
           }
           catch (Exception e)
           {
               throw new Exception("Cleaning couldn't be performed", e);
           }
       }

       /// 
       /// Gets or sets the PatchSequenceFile location
       /// 
       public string PatchSequenceFile { get { return m_PatchSequenceFile; } set { m_PatchSequenceFile = value; } }

       /// 
       /// Returns the value of newest build from PatchSequenceFile
       /// 
       public string NewestBuild { get { return m_entries["CurrentBuild"]; } }

       /// 
       /// Returns the collection from PatchSequenceFile for GAME category
       /// 
       public Dictionary AvailablePatches { get { return m_entries; } }

       private string m_PatchSequenceFile = "http://us.version.worldofwarcraft.com/update/PatchSequenceFile.txt";
       private Dictionary m_entries = new Dictionary();

   }

   public static class Ini
   {
       [DllImport("KERNEL32.DLL", EntryPoint = "GetPrivateProfileStringW",
           SetLastError = true,
           CharSet = CharSet.Unicode, ExactSpelling = true,
           CallingConvention = CallingConvention.StdCall)]
       private static extern int GetPrivateProfileString(
           string lpAppName,
           string lpKeyName,
           string lpDefault,
           string lpReturnString,
           int nSize,
           string lpFilename);

       [DllImport("KERNEL32.DLL", EntryPoint = "WritePrivateProfileStringW",
           SetLastError = true,
           CharSet = CharSet.Unicode, ExactSpelling = true,
           CallingConvention = CallingConvention.StdCall)]
       private static extern int WritePrivateProfileString(
           string lpAppName,
           string lpKeyName,
           string lpString,
           string lpFilename);

       /// 
       /// Gets the content.
       /// 
       /// The ini file.
       /// The category.
       /// The key.
       /// The default value.
       /// 
       public static string GetIniFileString(string iniFile, string category, string key, string defaultValue)
       {
           string returnString = new string(' ', 1024);
           GetPrivateProfileString(category, key, defaultValue, returnString, 1024, iniFile);
           return returnString.Split('\')[0];
       }

       /// 
       /// Gets the keys.
       /// 
       /// The ini file.
       /// The category.
       public static List GetKeys(string iniFile, string category)
       {
           string returnString = new string(' ', 32768);
           GetPrivateProfileString(category, null, null, returnString, 32768, iniFile);
           List result = new List(returnString.Split('\'));
           result.RemoveRange(result.Count - 2, 2);
           return result;
       }

       /// 
       /// Gets the categories.
       /// 
       /// The ini file.
       /// 
       public static List GetCategories(string iniFile)
       {
           string returnString = new string(' ', 65536);
           GetPrivateProfileString(null, null, null, returnString, 65536, iniFile);
           List result = new List(returnString.Split('\'));
           result.RemoveRange(result.Count - 2, 2);
           return result;
       }
   }
}

Share this post


Link to post
Share on other sites

kouknu na to...rozbalit mpq už snad není problém, ne? Stáhneš to do složky s wow a pustíš bnupdate ;)

Edit: bože, to je na mě nějaký komplikovaný ;) No, uvidím, třeba se tím nějak prokoušu ;)

Edited by axxxa
  • Upvote 1

Share this post


Link to post
Share on other sites

Tak, ne že bych to tu chtěla zase vykopávat, ale upravila jsem si pro sebe pár věcí, které mě rozčilovaly, tak to hážu i sem. Zkoukněte první post.

 

Edit: Jinak sneaku, ten tvůj kód je na mě nějak moc ;)

 

Pokud někomu blbla průhlednost, zkuste fix v prvním topicu, nezaručuji že to bude fungovat, ale je to oficiální "workaround" od microsoftu ;)

 

Takže další změna, dneska jsem se nudila a dost dramaticky předělala design...myslím, že se povedl, viz první post ;)

Edited by axxxa
  • Upvote 1

Share this post


Link to post
Share on other sites

Ježiš ;) nějaká specifická část? Kdyžtak vysvětlím.

 

Jinak snad zítra(ale spíš ne) bych to mohl dodělat, aby to rozbalovalo ten patch, akorát to pak budu distribuovat jako solution, jelikož budu muset přidat nějaký knihovny a cpát všechno do jednoho souboru by nebylo dobrý.

 

BTW: Mohla bys mi prosím v PM poslat celý solution toho tvýho Launcheru? Uploadni to někam, třeba na RapidShare. Dík ;)

Share this post


Link to post
Share on other sites

pokud chces, aby to umisteni realmlistu a WoW.exe bralo automaticky z registru, dopln si tam tenhle kousek kodu

string Path = "";
RegistryKey reg = Registry.LocalMachine.OpenSubKey("SOFTWARE\\Blizzard Entertainment\\World of Warcraft");
           if (reg != null)            
               Path = reg.GetValue("InstallPath").ToString() ;
if (!System.IO.File.Exists(Path + "wow.exe")) throw new Exception("wow.exe nenalezen");
if (!System.IO.File.Exists(Path + "realmlist.wtf")) throw new Exception("realmlist.wtf nenalezen");

Share this post


Link to post
Share on other sites

Mohli by ste prosim niekdo uploadovat tu verziu kde sa nedaju menit realm listy? Z pravneho dovodu :D.

 

Za upload velmi pekne dakujem :).

Share this post


Link to post
Share on other sites

Launcher kompletně přepsán, přidáno pár zajímavých funkcí ;)

Viz první příspěvek, jestli vám něco nepůjde hned to hlaste, teď jsem to dopsala a asi v tom pár chyb bude ;)

  • Upvote 1

Share this post


Link to post
Share on other sites

Ještě si to tu trošku zaspamuji (byť vás to očividně všechny strašně zajímá :-P )

launcher20qw8.jpg

beta 2:

  • opraveno pár drobných chybek
  • nový design
  • launcher se umí schovat do tray
  • ověřování nových verzí

takže, už klasicky, viz první post ;)

  • Upvote 1

Share this post


Link to post
Share on other sites

Again, říkám, že solution nedám ;) Můžu to hodit na pastebin a pod, ovšem když sem dám solution, první co někdo udělá bude, že smaže i ty zbytky copyrightu co tam mám a uveřejní to pod svým jménem... známe své lidi, že? ;)

  • Upvote 1

Share this post


Link to post
Share on other sites

Ahoj axxa .. pěkná práce , ale naskytl se mi u teho druheho launcheru trochu problém ... viz foto :

wotlklauncher.JPG

 

Je to celé nějaké rozházené :(

Edited by Mousik

Share this post


Link to post
Share on other sites

druhý už je v zásadě unsupported, ale tohle vidím poprvé...starý .NET framework? Jen hádám, nemám tušení čím to může být...prostě to má zhruba dvojnásobnou velikost, ale obrázek ne ;)

  • Upvote 1

Share this post


Link to post
Share on other sites

Mě jen šlo o soubor Form1.cs Teda aspoň tak je to dané jako default, když uděláš nový projekt, pochopitelně že si to někdo přejmenuje. A nechci celý projekt. Jinak jestli ti tohle někdy někdo udělal, že ti vzal autorství, tak to bych si za ním dojel a oddělal compa, protože to je podle mě prasárna. Akorát, když píšeš zdroják, tak není z přejmenovaných objektů úplně jasné, co je co (až teda po pečlivém prozkoumání) :-D

 

P.S.: nevíš, jak udělat aplikaci pro linuxáky? já si ani nepamatuju koncovku, jakou oni mají pro spustitelný soubor. Jestli by stačilo přejmenovat koncovku, nebo jestli bych musel sehnat kompilátor pro Linux zvlášť. Aspoň myslím, že .NET Framework pro Linux je, nejsem si tím jistý.

 

P.P.S.: Mimochodem, některé hlášky system message, které ten launcher má házet při chybách, jsou dost vtipné :-D

Edited by Danshaman

Share this post


Link to post
Share on other sites

No, "form 1", tam máš snad celej, ne? ;) Jinak pod linuxem s největší pravděpodobností ne, maximálně pomocí nějakého emulátoru .NET Frameworku, či co já vím, každopádně .NET je čistě windows záležitost. Ale třeba něco vygooglíš ;)

 

edit: Jinak kdyby to někoho čistě náhodou zajímalo, v příští verzi udělám z metody "load_data" samostatný thread, takže už by se to při zjišťování stavu realmu nemělo lagnout...až se k tomu dostanu ;)

Edited by axxxa
  • Upvote 1

Share this post


Link to post
Share on other sites

http://www.go-mono.com/mono-downloads/download.html - takže některé edice Linuxu .NET Framework podporují.

 

Náhodou, kdyby mě něco napadlo přidat něco k tvému WoW launcheru, mohl bych ti to poslat a udělala bys mi jeden zvlášť? :-)

 

Jinak zatím nevím, co je to threading, takže nevím, co to přinese to přeměnění load_data na thread :-)

Edited by Danshaman

Share this post


Link to post
Share on other sites

kdyř chci pouze vidět status serveru, stačí mi tohle? Mě to totiž nezobrazuje, tak nevím, jestli je to nesprávně vybraný objekt pro zobrazení, nekompatibilita kódu, nebo jestli mi tam něco chybí.

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;

namespace Cbs2
{
    public partial class Form1 : Form
    {
        string host = "dd2.servegame.com";
        int port = 3724;

        public Form1()
        {
            InitializeComponent();
        }

        public bool online(string host, int port)
        {
            string hostname = host;
            int portno = port;
            IPAddress ipa = (IPAddress)Dns.GetHostAddresses(hostname)[0];
            try
            {
                System.Net.Sockets.Socket sock = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork, System.Net.Sockets.SocketType.Stream, System.Net.Sockets.ProtocolType.Tcp);
                sock.Connect(ipa, portno);
                if (sock.Connected == true)
                    return true;
                else
                    return false;
                sock.Close();
            }

            catch (System.Net.Sockets.SocketException ex)
            {
                return false;
            }
        }

        public void server_info()
        {
            if (online(host, port) == true)
            {
                label2.Text = "ONLINE";
                label2.ForeColor = Color.DarkGreen;
            }

            else
            {
                label2.Text = "OFFLINE";
                label2.ForeColor = Color.Red;
            }
        }
    } 
}

Edited by Danshaman

Share this post


Link to post
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


×