コード例 #1
0
        public void eliminar_Objetos(ObjetosInventario 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)
            {
                _objetos.TryRemove(obj.id_inventario, out ObjetosInventario objeto);
            }
            else
            {
                ObjetosInventario nuevo_objeto = obj;
                nuevo_objeto.cantidad -= cantidad;
                _objetos.TryUpdate(obj.id_inventario, nuevo_objeto, obj);
            }

            if (paquete_eliminar)
            {
                cuenta.conexion.enviar_Paquete($"Od{obj.id_inventario}|{cantidad}");
                cuenta.logger.log_informacion("Inventario", $"{cantidad} {obj.nombre} eliminados(s).");
                inventario_actualizado?.Invoke(true);
            }
        }
コード例 #2
0
        public void agregar_Objetos(string paquete)
        {
            foreach (string obj in paquete.Split(';'))
            {
                if (!obj.Equals(string.Empty))
                {
                    string[] separador = obj.Split('~');
                    int      cantidad  = Convert.ToInt32(separador[2], 16);

                    ObjetosInventario objeto = objetos.FirstOrDefault(f => f.id_modelo == Convert.ToUInt32(separador[1], 16));

                    if (objeto != null)
                    {
                        ObjetosInventario nuevo_objeto = objeto;

                        if (cantidad > 0)
                        {
                            nuevo_objeto.cantidad += cantidad;
                        }
                        else
                        {
                            nuevo_objeto.cantidad -= cantidad;
                        }

                        _objetos.TryUpdate(objeto.id_inventario, nuevo_objeto, objeto);
                    }
                    else
                    {
                        _objetos.TryAdd(Convert.ToUInt32(separador[0], 16), new ObjetosInventario(obj));
                    }
                }
            }
            inventario_actualizado?.Invoke(true);
        }
コード例 #3
0
        public bool equipar_Objeto(ObjetosInventario objeto)
        {
            if (objeto == null)
            {
                return(false);
            }

            if (objeto.nivel > cuenta.juego.personaje.nivel)
            {
                cuenta.logger.log_Error("INVENTARIO", $"El nivel del objeto {objeto.nombre} es superior al nivel actual.");
                return(false);
            }

            if (objeto.posicion != InventarioPosiciones.NO_EQUIPADO)//objeto ya esta equipado
            {
                return(false);
            }

            List <InventarioPosiciones> possibles_posiciones = InventarioUtiles.get_Posibles_Posiciones(objeto.tipo);

            if (possibles_posiciones?.Count == 0)//objeto no equipable
            {
                return(false);
            }

            foreach (InventarioPosiciones posicion in possibles_posiciones)
            {
                if (get_Objeto_en_Posicion(posicion) == null)
                {
                    cuenta.conexion.enviar_Paquete("OM" + objeto.id_inventario + "|" + (sbyte)posicion);
                    cuenta.logger.log_informacion("INVENTARIO", $"{objeto.nombre} equipado.");
                    objeto.posicion = posicion;
                    inventario_actualizado?.Invoke(true);
                    return(true);
                }
            }

            //desequipa X objeto si ya esta equipado (antibot)
            if (_objetos.TryGetValue(get_Objeto_en_Posicion(possibles_posiciones[0]).id_inventario, out ObjetosInventario objeto_equipado))
            {
                objeto_equipado.posicion = InventarioPosiciones.NO_EQUIPADO;
                cuenta.conexion.enviar_Paquete("OM" + objeto_equipado.id_inventario + "|" + (sbyte)InventarioPosiciones.NO_EQUIPADO);
            }

            cuenta.conexion.enviar_Paquete("OM" + objeto.id_inventario + "|" + (sbyte)possibles_posiciones[0]);
            objeto.posicion = possibles_posiciones[0];
            cuenta.logger.log_informacion("INVENTARIO", $"{objeto.nombre} equipado.");

            inventario_actualizado?.Invoke(true);
            return(true);
        }
コード例 #4
0
        public void modificar_Objetos(string paquete)
        {
            if (!string.IsNullOrEmpty(paquete))
            {
                string[]          separador = paquete.Split('|');
                ObjetosInventario objeto    = objetos.FirstOrDefault(f => f.id_inventario == uint.Parse(separador[0]));

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

                    _objetos.TryUpdate(objeto.id_inventario, nuevo_objeto, objeto);
                }
                inventario_actualizado?.Invoke(true);
            }
        }
コード例 #5
0
        public void agregar_Objetos(string paquete)
        {
            foreach (string obj in paquete.Split(';'))
            {
                if (!obj.Equals(string.Empty))
                {
                    string[] separador     = obj.Split('~');
                    int      cantidad      = Convert.ToInt32(separador[2], 16);
                    uint     id_inventario = Convert.ToUInt32(separador[0], 16);

                    ObjetosInventario objeto = new ObjetosInventario(obj);

                    _objetos.TryAdd(Convert.ToUInt32(separador[0], 16), objeto);
                }
            }

            inventario_actualizado?.Invoke(true);
        }
コード例 #6
0
        public bool desequipar_Objeto(ObjetosInventario objeto)
        {
            if (objeto == null)
            {
                return(false);
            }

            if (objeto.posicion == InventarioPosiciones.NO_EQUIPADO)
            {
                return(false);
            }

            cuenta.conexion.enviar_Paquete("OM" + objeto.id_inventario + "|" + (sbyte)InventarioPosiciones.NO_EQUIPADO);
            objeto.posicion = InventarioPosiciones.NO_EQUIPADO;
            cuenta.logger.log_informacion("INVENTARIO", $"{objeto.nombre} desequipado.");
            inventario_actualizado?.Invoke(true);
            return(true);
        }