private void fswMonitor_Created(object sender, System.IO.FileSystemEventArgs e)
        {
            System.Threading.Thread.Sleep(500);
            string texto = File.ReadAllText(e.FullPath);
            texto = texto.Trim();
            int inicio = texto.IndexOf("\"");
            int fin = texto.IndexOf("\n");
            string valores;
            valores = texto;
            int charguid;
            valores = valores.Replace("\\\"", "\"");

            JsonObject jso = JsonObject.Parse(valores);
            JsonObject items;
            // Parsing the items

            JsonElement js = jso.GetElementByKey("items");
            if(js.Value.ToString()!="[]")
            {
                items = (JsonObject)js.Value;
                elementos.Clear();
                foreach (JsonElement j in items)
                {
                    Item it = new Item();
                    JsonObject propiedades = (JsonObject)j.Value;
                    it.ID = int.Parse(propiedades.GetElementByKey("I").Value.ToString());
                    it.Slot = int.Parse(propiedades.GetElementByKey("S").Value.ToString());
                    it.Bolsa = int.Parse(propiedades.GetElementByKey("B").Value.ToString());
                    it.Gema1 = int.Parse(propiedades.GetElementByKey("G1").Value.ToString());
                    it.Gema2 = int.Parse(propiedades.GetElementByKey("G2").Value.ToString());
                    it.Gema3 = int.Parse(propiedades.GetElementByKey("G3").Value.ToString());
                    it.Cantidad = int.Parse(propiedades.GetElementByKey("C").Value.ToString());
                    elementos.Add(it);
                }
            }

            // Parsing Equipment
            JsonElement jse = jso.GetElementByKey("equipo");
            if(jse.Value.ToString()!="[]")
            {
                items = (JsonObject)jse.Value;
                equipamento.Clear();
                foreach (JsonElement j in items)
                {
                    Equipo it = new Equipo();
                    JsonObject propiedades = (JsonObject)j.Value;
                    it.ID = int.Parse(propiedades.GetElementByKey("I").Value.ToString());
                    it.Gema1 = int.Parse(propiedades.GetElementByKey("G1").Value.ToString());
                    it.Gema2 = int.Parse(propiedades.GetElementByKey("G2").Value.ToString());
                    it.Gema3 = int.Parse(propiedades.GetElementByKey("G3").Value.ToString());
                    it.Cantidad = int.Parse(propiedades.GetElementByKey("C").Value.ToString());
                    if (it.Cantidad == 0)
                        it.Cantidad++;
                    it.Name = GetGearName(it.ID);
                    equipamento.Add(it);
                    //monturas
                }
            }

            // Parsing Equipment
            jse = jso.GetElementByKey("monturas");
            if (jse.Value.ToString() != "[]")
            {
                items = (JsonObject)jse.Value;
                monturas.Clear();
                foreach (JsonElement j in items)
                {
                    Montura it = new Montura();
                    it.ID = int.Parse(j.Value.ToString());
                    monturas.Add(it);
                    //monturas
                }
            }

            JsonElement obc = jso.GetElementByKey("creaturas");
            if (obc.Value.ToString() != "[]")
            {
                items= (JsonObject)obc.Value;
                creaturas.Clear();
                foreach (JsonElement j in items)
                {
                    Creatura it = new Creatura();
                    it.ID = int.Parse(j.Value.ToString());
                    creaturas.Add(it);
                }
            }
            jse = jso.GetElementByKey("spells");
            if (jse.Value.ToString() != "[]")
            {
                items = (JsonObject)jse.Value;
                conjuros.Clear();
                foreach (JsonElement j in items)
                {
                    Spell it = new Spell();
                    JsonObject propiedades = (JsonObject)j.Value;
                    it.Book = int.Parse(propiedades.GetElementByKey("ID").Value.ToString());
                    it.SpellId = int.Parse(propiedades.GetElementByKey("S").Value.ToString());
                    conjuros.Add(it);
                }
            }

            JsonElement ob = jso.GetElementByKey("skills");
            if (ob.Value.ToString() != "[]")
            {
                JsonArray ja = (JsonArray)ob.Value;
                skills.Clear();
                for (int k = 0; k < ja.Count; k++)
                {
                    Skill it = new Skill();
                    JsonObject propiedades = (JsonObject)ja[k];
                    it.MaxRank = int.Parse(propiedades.GetElementByKey("M").Value.ToString());
                    it.Rank = int.Parse(propiedades.GetElementByKey("C").Value.ToString());
                    it.Name = propiedades.GetElementByKey("N").Value.ToString();
                    skills.Add(it);
                }
            }

            JsonElement achi = jso.GetElementByKey("achiev");
            if (achi.Value.ToString() != "[]")
            {
                JsonArray ja2 = (JsonArray)achi.Value;
                logros.Clear();
                for (int k = 0; k < ja2.Count; k++)
                {
                    Logro it = new Logro();
                    JsonObject propiedades = (JsonObject)ja2[k];
                    it.Id = int.Parse(propiedades.GetElementByKey("I").Value.ToString());
                    it.Posix = int.Parse(propiedades.GetElementByKey("D").Value.ToString());
                    logros.Add(it);
                }
            }

            JsonElement glyphs = jso.GetElementByKey("glyphs");
            string[] glypslist = glyphs.ToString().Substring(glyphs.ToString().IndexOf(':') + 1).Trim().Replace("[", "").Replace("]", "").Split(',');

            JsonElement curr = jso.GetElementByKey("currency");
            if (curr.Value.ToString() != "[]")
            {
                JsonArray ja3 = (JsonArray)curr.Value;
                monedas.Clear();
                for (int l = 0; l < ja3.Count; l++)
                {
                    Currency it = new Currency();
                    JsonObject propiedades = (JsonObject)ja3[l];
                    it.Id = int.Parse(propiedades.GetElementByKey("I").Value.ToString());
                    it.Cantidad = int.Parse(propiedades.GetElementByKey("C").Value.ToString());
                    monedas.Add(it);
                }
            }
            jse = jso.GetElementByKey("uinf");
            items = (JsonObject)jse.Value;

            inf.Arena = int.Parse(items.GetElementByKey("arenapoints").Value.ToString());
            inf.Nombre = items.GetElementByKey("name").Value.ToString();
            charguid= GetCharGuid(inf.Nombre);
            inf.Clase = items.GetElementByKey("class").Value.ToString();
            inf.Nivel = int.Parse(items.GetElementByKey("level").Value.ToString());
            inf.Raza = items.GetElementByKey("race").Value.ToString();
            inf.Sexo = int.Parse(items.GetElementByKey("gender").Value.ToString());
            inf.Kills = int.Parse(items.GetElementByKey("kills").Value.ToString());
            inf.Honor = int.Parse(items.GetElementByKey("honor").Value.ToString());
            inf.Money = int.Parse(items.GetElementByKey("money").Value.ToString());
            inf.Specs = int.Parse(items.GetElementByKey("specs").Value.ToString());

            jse = jso.GetElementByKey("ginf");
            items = (JsonObject)jse.Value;
            ginf.Idioma = items.GetElementByKey("locale").Value.ToString();
            ginf.Realmlist = items.GetElementByKey("realmlist").Value.ToString();
            ginf.Build = items.GetElementByKey("clientbuild").Value.ToString();
            ginf.Realm = items.GetElementByKey("realm").Value.ToString();
            //inf.

            JsonElement repu = jso.GetElementByKey("rep");
            JsonArray ja4 = (JsonArray)repu.Value;
            reputaciones.Clear();
            for (int m = 0; m < ja4.Count; m++)
            {
                Reputacion it = new Reputacion();
                JsonObject propiedades = (JsonObject)ja4[m];
                it.Faccion = int.Parse(propiedades.GetElementByKey("F").Value.ToString());
                it.Valor = int.Parse(propiedades.GetElementByKey("V").Value.ToString());
                it.Nombre = propiedades.GetElementByKey("N").Value.ToString();
                reputaciones.Add(it);
            }

            txtLog.Text += Environment.NewLine + "Iniciando el proceso de migración de [" + inf.Nombre + "](" + charguid.ToString() + ").";
            txtLog.Text += Environment.NewLine + "Expulsando al jugador " + inf.Nombre + " en caso de estar Online por el proceso de migración.";
            Sandbox.SendCommand("kick " + inf.Nombre);

            txtLog.Text += Environment.NewLine + "Restaurando items a [" + inf.Nombre + "].";
            string command = "send items " + inf.Nombre + " \"Migracion de personaje\" \"Se envia este correo como parte de los item que se restauraran a su cuenta por el proceso de migracion\" ";
            string cadenaitems=string.Empty;
            List<string> cadenas = new List<string>();
            int contador = 0;
            foreach( Item item in elementos )
            {
                if(cadenaitems.Length==0)
                    cadenaitems = item.ID + ":" + item.Cantidad;
                else
                    cadenaitems += " " + item.ID + ":" + item.Cantidad;
                contador++;
                if(contador%12==0)
                {
                    cadenas.Add(cadenaitems);
                    cadenaitems=string.Empty;
                }
            }
            cadenas.Add(cadenaitems);
            foreach (string cadena in cadenas)
            {
                Sandbox.SendCommand(command + cadena);
                txtLog.Text += Environment.NewLine + "Enviando los items : " + cadena;
                System.Threading.Thread.Sleep(500);
            }

            ////////////////////////////

            txtLog.Text += Environment.NewLine + "Restaurando gear a [" + inf.Nombre + "].";
            command = "send items " + inf.Nombre + " \"Migracion de personaje\" \"Se envia este correo como parte del gear que se restaurará a su cuenta por el proceso de migracion\" ";
            cadenaitems = string.Empty;
            cadenas = new List<string>();
            List<string> nombres = new List<string>();
            string cadenanombres = string.Empty;
            contador = 0;
            foreach (Equipo gear in equipamento)
            {
                if (cadenaitems.Length == 0)
                {
                    if(!gear.Name.ToLower().Contains("quiver"))
                    {
                        cadenaitems = gear.ID + ":" + gear.Cantidad;
                        cadenanombres = gear.Name;
                        contador++;
                    }
                }

                else
                {
                    if(!gear.Name.ToLower().Contains("quiver"))
                    {
                        cadenaitems += " " + gear.ID + ":" + gear.Cantidad;
                        cadenanombres += ", " + gear.Name;
                        contador++;
                    }
                }

                if (contador % 12 == 0)
                {
                    cadenas.Add(cadenaitems);
                    nombres.Add(cadenanombres);
                    cadenanombres = string.Empty;
                    cadenaitems = string.Empty;
                }
            }
            cadenas.Add(cadenaitems);
            nombres.Add(cadenanombres);
            int ncontador = 0;
            foreach (string cadena in cadenas)
            {
                Sandbox.SendCommand(command + cadena);
                txtLog.Text += Environment.NewLine + "Enviando el gear : " + nombres[ncontador];
                ncontador++;
                System.Threading.Thread.Sleep(25);
            }

            ////////////////////////////
            txtLog.Text += Environment.NewLine + "Estableciendo el nivel de " + inf.Nombre + " en " + inf.Nivel + " de acuerdo al proceso de migración.";
            Sandbox.SendCommand("character level " + inf.Nombre + " " + inf.Nivel);

            txtLog.Text += Environment.NewLine + "Enviando oro a [" + inf.Nombre + "] = " + inf.Money.ToString() + "C.";
            SendGold(inf.Money, inf.Nombre);

            System.Threading.Thread.Sleep(500);
            txtLog.Text += Environment.NewLine + "Enviando monturas a [" + inf.Nombre + "] de acuerdo al proceso de migración.";
            List<String> mountlist= GetMounts(monturas);
            command = "send items " + inf.Nombre + " \"Migracion de personaje\" \"Se envia este correo como parte de la restauracion de las monturas.\" ";
            string sublist = string.Empty;
            for (int i = 0; i < mountlist.Count;i++ )
            {
                if(i==0)
                {
                    sublist = mountlist[i] + ":1";
                }
                else
                {
                    if(i%12!=0)
                    {
                        sublist += " " + mountlist[i] + ":1";
                    }
                    else
                    {
                        Sandbox.SendCommand(command + sublist);
                        sublist = mountlist[i] + ":1";
                    }
                }
                if(i==mountlist.Count -1)
                    Sandbox.SendCommand(command + sublist);
            }
            /////////////////////
            System.Threading.Thread.Sleep(250);
            txtLog.Text += Environment.NewLine + "Enviando mascotas a [" + inf.Nombre + "] de acuerdo al proceso de migración.";
            List<String> critterlist = GetCritters(creaturas);
            command = "send items " + inf.Nombre + " \"Migracion de personaje\" \"Se envia este correo como parte de la restauracion de las monturas.\" ";
            sublist = string.Empty;
            for (int i = 0; i < critterlist.Count; i++)
            {
                if (i == 0)
                {
                    sublist = critterlist[i] + ":1";
                }
                else
                {
                    if (i % 12 != 0)
                    {
                        sublist += " " + critterlist[i] + ":1";
                    }
                    else
                    {
                        Sandbox.SendCommand(command + sublist);
                        sublist = critterlist[i] + ":1";
                    }
                }
                if (i == critterlist.Count - 1)
                    Sandbox.SendCommand(command + sublist);
            }

            ///////////////////////
            if(SendArenaHonor(inf.Nombre, inf.Honor, inf.Arena))
                txtLog.Text += Environment.NewLine + "Puntos de Arena=" + inf.Arena.ToString() + "  y Honor=" + inf.Honor.ToString() + " de " + inf.Nombre + " restaurados de acuerdo al proceso de migración.";
            else
                txtLog.Text += Environment.NewLine + "No se pudieron restaurar los puntos de arena y honor para el jugador " + inf.Nombre + "Arena=" + inf.Arena.ToString() + " Honor=" + inf.Honor.ToString() + ".";

            foreach(Logro achiv in logros)
            {
                Logro acvtmp = new Logro();
                acvtmp.Id = achiv.Id;
                acvtmp.Posix = achiv.Posix;
                FillAchievement(ref acvtmp);
                if (!HasAchievement(charguid, acvtmp.Id) && !acvtmp.Name.StartsWith("Realm First!"))
                {
                    SaveAchievement(charguid, acvtmp);
                    txtLog.Text += Environment.NewLine + "Se restauró el logro " + acvtmp.Name + " para el jugador " + inf.Nombre + ".";
                }
                else
                    txtLog.Text += Environment.NewLine + "No fue posible restaurar el logro " + acvtmp.Name + " para el jugador " + inf.Nombre + ".";
            }

            //////////////////////////////
            command = "send items " + inf.Nombre + " \"Migracion de personaje\" \"Se envia este correo como parte de los tokens que se restauraran a su cuenta por el proceso de migracion\" ";
            cadenaitems = string.Empty;
            cadenas = new List<string>();
            contador = 0;
            foreach (Currency curre in monedas)
            {
                if (cadenaitems.Length == 0 && curre.Cantidad!=0)
                {
                    cadenaitems = curre.Id + ":" + curre.Cantidad;
                    contador++;
                }
                else
                {
                    if (curre.Cantidad != 0)
                    {
                        cadenaitems += " " + curre.Id + ":" + curre.Cantidad;
                        contador++;
                    }
                }
                if (contador % 12 == 0 && contador!=0)
                {
                    cadenas.Add(cadenaitems);
                    cadenaitems = string.Empty;
                }
            }
            cadenas.Add(cadenaitems);
            foreach (string cadena in cadenas)
            {
                Sandbox.SendCommand(command + cadena);
                txtLog.Text += Environment.NewLine + "Enviando las monedas: " + cadena;
                System.Threading.Thread.Sleep(500);
            }

            ///////////////////
            for (int gidx = 0; gidx < glypslist.Length; gidx++)
            {
                int glyphid = GetGlyphId(glypslist[gidx]);
                SaveGlyph(gidx, glyphid, charguid);
            }
        }
 private void SaveAchievement(int charguid, Logro acv)
 {
     if (con.charconn.State == ConnectionState.Open)
     {
         MySqlCommand cmd = new MySqlCommand("INSERT INTO character_achievement VALUES (" + charguid + "," + acv.Id + "," + acv.Posix +")", con.charconn);
         cmd.ExecuteNonQuery();
         cmd.Dispose();
     }
 }
 private void FillAchievement(ref Logro acvtmp)
 {
     if(con.evolvedconn.State== ConnectionState.Open)
     {
         MySqlCommand cmd = new MySqlCommand("SELECT * FROM achievements WHERE id=" + acvtmp.Id, con.evolvedconn);
         MySqlDataReader dr = cmd.ExecuteReader();
         if(dr.Read())
         {
             acvtmp.Name = dr[1].ToString();
             acvtmp.Description = dr[2].ToString();
         }
         dr.Close();
         dr.Dispose();
         cmd.Dispose();
     }
 }