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

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

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

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

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

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

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

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

    У меня было много лажи, вот исправленно
    Code:
    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();
            }
        }
    Code:
    @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();
                }
            }
        }
     
    Last edited: Jan 5, 2017
  4. xDark

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Dereku Старожил

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

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

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

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

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

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

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

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

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

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

Share This Page