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

Помогите группы игроков

Тема в разделе "Разработка плагинов для новичков", создана пользователем asdqwertypro, 3 янв 2017.

  1. Автор темы
    asdqwertypro

    asdqwertypro Активный участник Пользователь

    Баллы:
    76
    может го в скайп? мы тут писать по 100 раз ещё будим! го там чтобы сразу ответ за ответом а не 20 секунд + 5 минут ждать пока читатель проверит[DOUBLEPOST=1483594172,1483593808][/DOUBLEPOST]
    а пишет разное ну тип если убийцу убили то чо происходит? у меня плевать кого убили всегда одно и то же: пишет 2 раза и ничего более.[DOUBLEPOST=1483594320][/DOUBLEPOST]
    мне кажется или там тупо не добавляется группа убийцы? т. е. там игрок убивает кого-то и тупо никем не становится
     
  2. Хостинг MineCraft
    <
  3. Fenix78563

    Fenix78563 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Кароч я разобрался.

    У меня было много лажи, вот исправленно
    Код:
    private boolean setupEssentials() {
            if (getServer().getPluginManager().getPlugin("Essentials") == null) {
                return false;
                }
          
            ess = (Essentials) getServer().getPluginManager().getPlugin("Essentials");
            return true;
        }
    public YamlConfiguration getUserConfig(Player user){
            File uf = new File(getDataFolder(), "userdata"+File.separator+user.getName()+".yml");
            File folder =new File(getDataFolder(), "userdata");
            if (!folder.exists()) folder.mkdirs();
            YamlConfiguration uconfig;
            if (!uf.exists()) {
                getLogger().log(Level.SEVERE, "User file is not exists. Creating one new");
                try {
                    uf.createNewFile();
                    uconfig = YamlConfiguration.loadConfiguration(uf);
                    uconfig.set("killer", false);
                    uconfig.set("time", 0);
                    saveUserFile(uconfig, uf);
                } catch (IOException e) {
                    getLogger().log(Level.SEVERE, "Error while creating new user file");
                    e.printStackTrace();
                }
            }
            uconfig = YamlConfiguration.loadConfiguration(uf);
            return uconfig;
        }
        public void saveUserFile(YamlConfiguration uconfig, File uf){
            File folder =new File(getDataFolder(), "userdata");
            if (!folder.exists()) folder.mkdirs();
            try {
                uconfig.save(uf);
            } catch (IOException e) {
                getLogger().log(Level.SEVERE, "Error while saving user file \"" +uf.getName()+"\"");
                e.printStackTrace();
            }
        }
    Код:
    @EventHandler
        public void onDeath(final PlayerDeathEvent e) {
            Player killed = e.getEntity();
            Player killer = killed.getKiller();
            if (killer==null) return;
            YamlConfiguration killerconf = plugin.getUserConfig(killer);
            YamlConfiguration killedconf = plugin.getUserConfig(killed);
            if (killedconf.getBoolean("killer")){
                jailKilled(killed, killedconf.getInt("time"));
                killedconf.set("killer", false);
                killedconf.set("time", 0);
                plugin.saveUserFile(killedconf, new File(plugin.getDataFolder(), "userdata"+File.separator+killed.getName()+".yml"));
                plugin.econ.depositPlayer(killer, 100);
                killer.sendMessage("Вы убили киллера поэтому его отправили в тюрьму");
                updateKiller(killer);
            }else{
                if (!killerconf.getBoolean("killer")){ killer.sendMessage("Вы стали убийцей! Кровожадное животное!");}
                else {killer.sendMessage("Сколько можно лить крови? Бессердечная скотина! Тебе это припомнят, учти!");}
                killerconf.set("killer", true);
                killerconf.set("time", killerconf.getInt("time")+10);
                plugin.saveUserFile(killerconf, new File(plugin.getDataFolder(), "userdata"+File.separator+killer.getName()+".yml"));
            }  
        }  
    
        private void updateKiller(Player killer) {
            plugin.econ.depositPlayer(killer, 100);
            killer.sendMessage("Вы убили киллера и получили 100$");
            YamlConfiguration killerconf = plugin.getUserConfig(killer);
            if (killerconf.getBoolean("killer")){
                killerconf.set("time", (int)killerconf.getInt("time")*0.8);
                killer.sendMessage("Т.к. вы тоже убийца то ваш срок был уменьшен на 20%");
                plugin.saveUserFile(killerconf, new File(plugin.getDataFolder(), "userdata"+File.separator+killer.getName()+".yml"));
            }
        }
    
    
        private void jailKilled(Player killed, int time) {
            Collection<String> jails = new ArrayList<>();
            try {
                jails = plugin.ess.getJails().getList();
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (jails==null) return;
            for (String s:jails){
                try {
                    Bukkit.dispatchCommand(Bukkit.getServer().getConsoleSender(), "jail "+killed.getName()+" "+s+" "+Integer.toString(time)+"m");
                    killed.sendMessage("Вас поймали и посадили в тюрьму на срок "+ Integer.toString(time)+" минут");
                    killed.sendMessage("Когда вас выпустят, с вас будут сняты все обвинения. Удачного времяпрепровождения ;)");
                    break;
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
     
    Последнее редактирование: 5 янв 2017
  4. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Пора убивать видимо людей, ЗАЧЕМ вы постоянно конфиги грузите?! Не дано это 1 раз сделать
     
  5. Fenix78563

    Fenix78563 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    ты предлагаешь создать массив на 100к файлов?

    Производительность по п*зде? вот сам и грузи[DOUBLEPOST=1483614488,1483614330][/DOUBLEPOST]
    или может быть ты хочешь при отключении сохранять такую тучу данных?
     
  6. xDark

    xDark Активный участник Пользователь

    Баллы:
    96
    Skype:
    ailyashevich
    Имя в Minecraft:
    xDark
    Ты посмотри лучше как Essentials устроен - поймешь. Он только ОДИН раз подгружает файл с конфигами.
     
  7. Fenix78563

    Fenix78563 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    у них своя система, это написано в главном классе. и эта система на мой взгляд оч гамняная.

    кстати открой свой юзерфайл и выйди. ты будешь удивлен, но он будет перезаписан. а потом зайди. и файл снова будет перезаписан (причем он будет точно таким, каким он был когда ты вышел. т.е. он не выгружается) . у них подгрузка конфига каждый заход игрока с неподгруженным конфигом. А выгрузка происходит только при перезагрузке\отключении плагина. в конечном итоге при большой текучке, и круглосуточном аптайме память засирается на эти сраные конфиги
     
  8. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Чтение и запись файла никак не скажется на памяти. Если только кто то не написал файл клосе.
     
  9. Fenix78563

    Fenix78563 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    тогда какая нафиг разница как это реализованно
     
  10. Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Спасибо, поорал.

    Уже как несколько лет не актуально :с
     
  11. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    В ess то все правильно реализовано и там нет массивов по 100к файлов. Если игрок онлайн, читается из хеша, если офлайн, берется из файла. Но офлайн операций там немного, да и те админские, тп на чей то хом, инфа об игроке и т.п.
     
  12. Fenix78563

    Fenix78563 Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    если вы сами говорите что чтение\запись не засирают памать, то какая разница-то.[DOUBLEPOST=1483680433,1483678696][/DOUBLEPOST]кстати слабо верится, что берется из файла. зайди на серв, потом выйди, измени в фалйе допустим аланс, и вернись на сервер. баланс вернется на тот что был до выхода. так что в чтение из файла при оффлайне слабо верится
     
  13. alexandrage

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

    Баллы:
    173
    Skype:
    alexandr0116
    Ну значит не очищает кеш при выходе игрока.
     
  14. Shevchik

    Shevchik Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Так и есть, там LoadingCache из guava.
     

Поделиться этой страницей