Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Проблема с выводом статистики игрока из файла.

Discussion in 'Разработка плагинов для новичков' started by Slavkaa, May 17, 2017.

Thread Status:
Not open for further replies.
  1. Автор темы
    Slavkaa

    Slavkaa Новичок Пользователь

    Trophy Points:
    21
    Имя в Minecraft:
    Slavok2001
    Вопросы все по той же статистике. Вроде бы уже все готово, даже работало, но столкнулся с такой проблемой: изначально все данные игрока (убийства, смерти) равны нулю. Работает это так: заходит игрок, создается запись в файле, все данные равны нулю, и если игрок не сделает никаких действий, то будет невозможно просмотреть его стату. Т.е. когда все данные равны нулю, при вводе команды /stat nick, выводится ошибка "An internal...", а вот, если игрок уже один раз умер или кого-то убил, т.е. данные изменились, то статистику можно спокойно просмотреть.
    Код:
    Code:
        @EventHandler
        public void join(PlayerJoinEvent e) {
        Player p = e.getPlayer();
            String name = p.getName().toLowerCase();
            FileConfiguration c = plugin.getConfig();
            HashMap<String, Integer> addint = new HashMap<String, Integer>();  
            addint.put("kills", 0);
            addint.put("deaths", 0);
            addint.put("rating", 0);
            for (String d : addint.keySet()) {
                if (!c.isSet("players."+name+"."+d)) {
                    c.set("players."+name+"."+d, addint.get(d));
                    plugin.saveConfig();
                    }
                }
        }
        @EventHandler
        public void addkill(PlayerDeathEvent e) {
            Player player = e.getEntity().getPlayer();
            String name = player.getName().toLowerCase();
            player.sendMessage("Вы умерли :с");
            HashMap<String, Integer> addint = new HashMap<String, Integer>();  
            FileConfiguration c = plugin.getConfig();
            if(e.getEntity().getKiller() == null) {
                addint.put("players." + name + ".deaths", c.getInt("players." + name + ".deaths") + 1);  
                addint.put("players." + name + ".rating", c.getInt("players." + name + ".rating") - 8);  
            for(String d : addint.keySet()) {
                c.set(d, addint.get(d));
                plugin.saveConfig();
            }
            return;
            }
            addint.put("players." + name + ".deaths", c.getInt("players." + name + ".deaths") + 1);  
            addint.put("players." + e.getEntity().getKiller().getName().toLowerCase() + ".kills", c.getInt("players." + e.getEntity().getKiller().getName().toLowerCase() + ".kills") + 1);
            addint.put("players." + name + ".rating", c.getInt("players." + name + ".rating") - 8);  
            addint.put("players." + e.getEntity().getKiller().getName().toLowerCase() + ".rating", c.getInt("players." + e.getEntity().getKiller().getName().toLowerCase() + ".rating") + 6);  
            for(String d : addint.keySet()) {
                c.set(d, addint.get(d));
                plugin.saveConfig();
            }
          
        }
        @Override
        public boolean onCommand(CommandSender s, Command cmd, String label, String[] args) {
            String arg1 = args[0].toLowerCase();
            if(args.length != 1) {
                s.sendMessage("Неверное использование");
                return false;
            }
            if(!plugin.getConfig().contains("players." + arg1)) {
                s.sendMessage("Такого игрока нет");
                return true;
            }
            String status = Bukkit.getPlayerExact(args[0]) == null ? "Offline" : "Online";
            int kills = plugin.getConfig().getInt("players." + arg1 + ".kills");
            int deaths = plugin.getConfig().getInt("players." + arg1 + ".deaths");
            int rating = plugin.getConfig().getInt("players." + arg1 + ".rating");
            String skills = String.valueOf(kills);
           String sdeaths = String.valueOf(deaths);
           String srating = String.valueOf(rating);
           int percent = kills * 100 / (kills + deaths);
           String spercent = percent < 50 ? ChatColor.RED + String.valueOf(percent) : percent < 60 ? ChatColor.YELLOW + String.valueOf(percent) : percent < 75 ? ChatColor.DARK_AQUA + String.valueOf(percent) : percent < 95 ? ChatColor.DARK_PURPLE + String.valueOf(percent) : ChatColor.LIGHT_PURPLE + String.valueOf(percent);
            List<String> stat = plugin.getConfig().getStringList("message");
            for (String statlist : stat) {
                statlist = statlist.replace("&", "\u00a7");
                statlist = statlist.replaceAll("%kills", skills);
                statlist = statlist.replaceAll("%deaths", sdeaths);
                statlist = statlist.replaceAll("%rating", srating);
                statlist = statlist.replaceAll("%nick", args[0]);
                statlist = statlist.replaceAll("%percent", spercent);
                statlist = statlist.replaceAll("%status", status);
                s.sendMessage(statlist);
            }
            return true;
        }
    
    Конфиг:
    Code:
    message:
    - '&6==================='
    - '&6Ник: &e%nick'
    - '&6Убийств: &a%kills'
    - '&cСмертей: %deaths'
    - '&eБоевой рейтинг: &a%rating'
    - '&eПроцент побед: &a%percent%'
    - '&6Статус: %status'
    - '&6==================='
    config:
      rating-add: 6 #Это еще не доделано, но никак не влияет на работу
      rating-remove: 8 #Это еще не доделано, но никак не влияет на работу
    players:
      slavkaa
        kills: 0
        rating: -8
        deaths: 1
    
     
    Last edited: May 17, 2017
  2. Хостинг MineCraft
    <
  3. alexandrage

    alexandrage Администратор

    Trophy Points:
    173
    Skype:
    alexandr0116
    Потому что ты делишь на ноль. В школе совсем уже ничему не учат? Даже элементарных вещей уже не знают...
     
  4. Автор темы
    Slavkaa

    Slavkaa Новичок Пользователь

    Trophy Points:
    21
    Имя в Minecraft:
    Slavok2001
    Ахахах, точно. Никогда бы и не подумал, что проблема в этом. А не можешь подсказать, как это реализовать?[DOUBLEPOST=1495033262,1495032964][/DOUBLEPOST]
    Все, я это реализовал, причем, достаточно просто. Тема закрыта.
     
Thread Status:
Not open for further replies.

Share This Page