- Баллы
- 76
Краткая суть проблемы на 2-х скринах в конце темы!!!!!!!
Название немного непонятное, т. к. я не знаю, как её лучше назвать. Суть проблемы в чём: писал я анти-чит, точнее голосовой бан. (сказал, что игрок читер, ещё несколько игроков так же сказали - игрок забанен. Не надо говорить про "асечки".) Как всё должно работать: игрок пишет /cheat ник 2игрока, 2 игрок заносится в базу (пока что на yml, временно.) и тот, кто на него репорт кидал. Так же заносится в ArrayList. Если игрок 2 раз попытается кинуть репорт - не должно получаться. Но что мы видим на самом деле: всё работает нормально, при перезапуске в лист игроки добавляются нормально, но вот есть проблема: игроки могут повторно кидать репорт. При чём все старые почему-то становятся невидимыми! Сделал очень много тестовых сообщений... Не понимаю, почему оно так происходит. Вот код самой команды, которая кидает репорт:
Вот код из гл. класса, где происходят все действия с yml.
Вот вывод в чате от 1 раз команды
Вот вывод после 2 попытки
Я надеюсь, что не взорвал никому мозг...
Название немного непонятное, т. к. я не знаю, как её лучше назвать. Суть проблемы в чём: писал я анти-чит, точнее голосовой бан. (сказал, что игрок читер, ещё несколько игроков так же сказали - игрок забанен. Не надо говорить про "асечки".) Как всё должно работать: игрок пишет /cheat ник 2игрока, 2 игрок заносится в базу (пока что на yml, временно.) и тот, кто на него репорт кидал. Так же заносится в ArrayList. Если игрок 2 раз попытается кинуть репорт - не должно получаться. Но что мы видим на самом деле: всё работает нормально, при перезапуске в лист игроки добавляются нормально, но вот есть проблема: игроки могут повторно кидать репорт. При чём все старые почему-то становятся невидимыми! Сделал очень много тестовых сообщений... Не понимаю, почему оно так происходит. Вот код самой команды, которая кидает репорт:
Код:
public class cheat implements CommandExecutor {
ArrayList<String> pclist = main.pclist;
ArrayList<ArrayList<String>> pcll = main.pcll;
@SuppressWarnings("unused")
private main plugin;
public cheat(main plugin) {
this.plugin = plugin;
}
@Override
public boolean onCommand(CommandSender send, Command command, String label, String[] args) {
if(args.length == 0){
send.sendMessage(ChatColor.YELLOW + "На кого вы хотите сделать донос? " + ChatColor.AQUA + "/cheat НИК");
return true;
}
if(args.length >= 2){
send.sendMessage(ChatColor.YELLOW + "Если вы нашли много читеров, доносите о них по одному. " + ChatColor.AQUA + "/cheat НИК");
return true;
}
String name = args[0];
Player p = Bukkit.getPlayerExact(name);
if(p==null){send.sendMessage(ChatColor.YELLOW + "Этот игрок не в сети/не существует/не на этом сервере(миниигре).");return true;}
if(name.equalsIgnoreCase(send.getName())){send.sendMessage(ChatColor.RED + "Вы хотите донести на самого себя?");return true;}
if(p!=null){
for(int i=0;i<pclist.size();i++){
send.sendMessage("pclist:"+pclist.get(i));
}
for(int i=0;i<pcll.size();i++){
send.sendMessage("pcll:"+pcll.get(i));
}
send.sendMessage("p:"+p);
for(int i=0;i<pclist.size();i++){
send.sendMessage(i+" scanned");
if(pclist.get(i) == p.getName()){
send.sendMessage("founded!");
p.sendMessage("Ты уже в базе");
for(int a=0;a<pcll.get(i).size();a++){
if(pcll.get(i).get(a) == send.getName()){
send.sendMessage(ChatColor.RED + "Вы уже делали донос на этого игрока. Если вы будете делать слишком много доносов, вас забанят, а доносы будут отклонены.");
return true;
}
}
send.sendMessage(ChatColor.YELLOW + "Вы успешно отправили донос на игрока " + ChatColor.RED + "" + p.getName() + ", который уже числится в базе подозреваемых читеров. За ним будет вестись повышенная слежка.");
p.sendMessage(ChatColor.YELLOW + "" + send.getName() + ChatColor.RED + " Подозревает вас в читах. " + ChatColor.DARK_RED + "Возможность обвинить игрока в лже-доносе невозможна для вас." + send.getName());
pcll.get(i).add(send.getName());
return true;
}
}
send.sendMessage(ChatColor.YELLOW + "Вы успешно отправили донос на игрока " + ChatColor.RED + "" + p.getName() + ".");
p.sendMessage(ChatColor.YELLOW + "" + send.getName() + ChatColor.RED + " Подозревает вас в читах. Если вы не являетесь читером, обвините этого игрока в лже-доносе. " + ChatColor.YELLOW + "/fake " + send.getName());
pclist.add(p.getName());
ArrayList<String> who = new ArrayList<String>();
who.add(send.getName());
pcll.add(who);
}
return true;
}
}
Код:
onEnable(){
saveDefaultConfig();
for (String b : getConfig().getConfigurationSection("Cheaters").getKeys(false)) {
pclist.add(getConfig().getString("Cheaters." + b + ".player"));
ArrayList<String> pc = new ArrayList<String>();
for(int i=0;i<20;i++){
if(getConfig().getString("Cheaters." + b + ".reportby" + i) != null){
pc.add(getConfig().getString("Cheaters." + b + ".reportby" + i));
}
}
pcll.add(pc);
}
saveConfig();
}
onDisable(){
for (int i=0;i<pclist.size();i++) {
getConfig().set("Cheaters."+i+".player", pclist.get(i));
for(int a=0;a<pcll.get(i).size();a++){
getConfig().set("Cheaters."+i+".reportby"+a, pcll.get(i).get(a));
}
saveConfig();
}
}
Вот вывод после 2 попытки
Я надеюсь, что не взорвал никому мозг...