Пример #1
0
        public void eliminar_Objeto(InventoryObject obj, int cantidad, bool paquete_eliminar)
        {
            if (obj == null)
            {
                return;
            }

            cantidad = cantidad == 0 ? obj.cantidad : cantidad > obj.cantidad ? obj.cantidad : cantidad;

            if (obj.cantidad > cantidad)
            {
                InventoryObject nuevo_objeto = obj;
                nuevo_objeto.cantidad -= cantidad;
                _objetos.TryUpdate(obj.id_inventario, nuevo_objeto, obj);
            }
            else
            {
                _objetos.TryRemove(obj.id_inventario, out InventoryObject objeto);
            }

            if (paquete_eliminar)
            {
                cuenta.connexion.SendPacket($"Od{obj.id_inventario}|{cantidad}");
                cuenta.Logger.LogInfo("INVENTAIRE", $"{cantidad} {obj.nombre} éliminée(s).");
            }

            inventario_actualizado?.Invoke(true);
        }
Пример #2
0
        public bool equipar_Objeto(InventoryObject objeto)
        {
            if (objeto == null || objeto.cantidad == 0 || cuenta.Is_Busy())
            {
                cuenta.Logger.LogError("INVENTAIRE", $"L'objet {objeto.nombre} ne peux être équipé");
                return(false);
            }

            if (objeto.nivel > cuenta.game.character.nivel)
            {
                cuenta.Logger.LogError("INVENTAIRE", $"Le niveau de l'objet {objeto.nombre} est supérieur à ton niveau");
                return(false);
            }

            if (objeto.posicion != InventorySlots.NOT_EQUIPPED)//objeto ya esta equipado
            {
                cuenta.Logger.LogError("INVENTAIRE", $"l'objet {objeto.nombre} est équipé");
                return(false);
            }

            List <InventorySlots> possibles_posiciones = InventoryUtilities.get_Posibles_Posiciones(objeto.tipo);

            if (possibles_posiciones == null || possibles_posiciones.Count == 0)//objeto no equipable
            {
                cuenta.Logger.LogError("INVENTARIO", $"L'objet {objeto.nombre} n'est pas équipable");
                return(false);
            }

            foreach (InventorySlots posicion in possibles_posiciones)
            {
                if (get_Objeto_en_Posicion(posicion) == null)
                {
                    cuenta.connexion.SendPacket("OM" + objeto.id_inventario + "|" + (sbyte)posicion, true);
                    cuenta.Logger.LogInfo("INVENTAIRE", $"{objeto.nombre} équipé.");
                    objeto.posicion = posicion;
                    inventario_actualizado?.Invoke(true);
                    return(true);
                }
            }

            //desequipa X objeto si ya esta equipado
            if (_objetos.TryGetValue(get_Objeto_en_Posicion(possibles_posiciones[0]).id_inventario, out InventoryObject objeto_equipado))
            {
                objeto_equipado.posicion = InventorySlots.NOT_EQUIPPED;
                cuenta.connexion.SendPacket("OM" + objeto_equipado.id_inventario + "|" + (sbyte)InventorySlots.NOT_EQUIPPED);
            }

            cuenta.connexion.SendPacket("OM" + objeto.id_inventario + "|" + (sbyte)possibles_posiciones[0]);

            if (objeto.cantidad == 1)
            {
                objeto.posicion = possibles_posiciones[0];
            }

            cuenta.Logger.LogInfo("INVENTAIRE", $"{objeto.nombre} équipé.");
            inventario_actualizado?.Invoke(true);
            return(true);
        }
Пример #3
0
        public void utilizar_Objeto(InventoryObject objeto)
        {
            if (objeto == null)
            {
                return;
            }

            if (objeto.cantidad == 0)
            {
                cuenta.Logger.LogError("INVENTAIRE", $"L'objet {objeto.nombre} ne peut être mis à cause de tes caractéristiques");
                return;
            }

            cuenta.connexion.SendPacket("OU" + objeto.id_inventario + "|");
            eliminar_Objeto(objeto, 1, false);
            cuenta.Logger.LogInfo("INVENTAIRE", $"{objeto.nombre} utilisée.");
        }
Пример #4
0
        public void agregar_Objetos(string paquete)
        {
            Task.Run(() =>
            {
                foreach (string obj in paquete.Split(';'))
                {
                    if (!string.IsNullOrEmpty(obj))
                    {
                        string[] separador     = obj.Split('~');
                        uint id_inventario     = Convert.ToUInt32(separador[0], 16);
                        InventoryObject objeto = new InventoryObject(obj);
                        _objetos.TryAdd(id_inventario, objeto);
                    }
                }
            }).Wait();

            inventario_actualizado?.Invoke(true);
        }
Пример #5
0
        public bool desequipar_Objeto(InventoryObject objeto)
        {
            if (objeto == null)
            {
                return(false);
            }

            if (objeto.posicion == InventorySlots.NOT_EQUIPPED)
            {
                return(false);
            }

            cuenta.connexion.SendPacket("OM" + objeto.id_inventario + "|" + (sbyte)InventorySlots.NOT_EQUIPPED);
            objeto.posicion = InventorySlots.NOT_EQUIPPED;
            cuenta.Logger.LogInfo("INVENTAIRE", $"{objeto.nombre} déséquipé.");
            inventario_actualizado?.Invoke(true);
            return(true);
        }
Пример #6
0
        public void modificar_Objetos(string paquete)
        {
            if (!string.IsNullOrEmpty(paquete))
            {
                string[]        separador = paquete.Split('|');
                InventoryObject objeto    = objetos.FirstOrDefault(f => f.id_inventario == uint.Parse(separador[0]));

                if (objeto != null)
                {
                    int             cantidad     = int.Parse(separador[1]);
                    InventoryObject nuevo_objeto = objeto;
                    nuevo_objeto.cantidad = cantidad;

                    if (_objetos.TryUpdate(objeto.id_inventario, nuevo_objeto, objeto))
                    {
                        inventario_actualizado?.Invoke(true);
                    }
                }
            }
        }
Пример #7
0
        public void agregar_Objetos(string paquete)
        {
            Task.Run(() =>
            {
                foreach (string obj in paquete.Split(';'))
                {
                    if (!string.IsNullOrEmpty(obj))
                    {
                        string[] separador = obj.Split('~');
                        if (separador.Length <= 3) // TODO: the last bit added after 1.33 has less than 3 parts
                        {
                            continue;
                        }
                        uint id_inventario     = Convert.ToUInt32(separador[0], 16);
                        InventoryObject objeto = new InventoryObject(obj);
                        _objetos.TryAdd(id_inventario, objeto);
                    }
                }
            }).Wait();

            inventario_actualizado?.Invoke(true);
        }