Viiict0r Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Olá.. Minha dúvida é a seguinte, como crio um sistema, de delay, onde o jogador usa tal função, e é setado um delay, e esse delay não reseta ao sair do servidor, e nem reiniciando-o... obrigado. Link para o comentário Compartilhar em outros sites More sharing options...
zDubsCrazy Banido Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 (editado) private HashMap<String, Long> cooldown = new HashMap<>(); private void setDelay(Player p) { // Adicionando delay de 3 horas. cooldown.put(p.getName(), System.currentTimeMillis() + TimeUnit.HOURS.toMillis(3)); } private boolean hasDelay(Player p) { return cooldown.containsKey(p.getName()) && (cooldown.get(p.getName()) > System.currentTimeMillis()); } private String getDelayString(Player p) { long time = cooldown.get(p.getName()) - System.currentTimeMillis(); return format(time); } private String format(long time) { String format = ""; long hours = TimeUnit.MILLISECONDS.toHours(time); long hoursInMillis = TimeUnit.HOURS.toMillis(hours); long minutes = TimeUnit.MILLISECONDS.toMinutes(time - hoursInMillis); long minutesInMillis = TimeUnit.MINUTES.toMillis(minutes); long seconds = TimeUnit.MILLISECONDS.toSeconds(time - (hoursInMillis + minutesInMillis)); if (hours > 0) format = hours + (hours > 1 ? " horas" : " hora"); if (minutes > 0) { if ((seconds > 0) && (hours > 0)) format += ", "; else if (hours > 0) format += " e "; format += minutes + (minutes > 1 ? " minutos" : " minuto"); } if (seconds > 0) { if ((hours > 0) || (minutes > 0)) format += " e "; format += seconds + (seconds > 1 ? " segundos" : " segundo"); } if (format.equals("")) { long rest = time / 100; if (rest == 0) rest = 1; format = "0." + rest + " segundo"; } return format; } private void save() { File f = new File(getDataFolder(), "cooldown.dat"); if (!(f.exists())) try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f)); oos.writeObject(cooldown); oos.close(); } catch (Exception e) { e.printStackTrace(); } } private void load() { File f = new File(getDataFolder(), "cooldown.dat"); if (f.exists()) { try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f)); cooldown = (HashMap<String, Long>) ois.readObject(); ois.close(); for (Entry<String, Long> entry : cooldown.entrySet()) { if (entry.getValue() <= System.currentTimeMillis()) cooldown.remove(entry.getKey()); } } catch (Exception e) { e.printStackTrace(); } } } O metodo save() tu chama no onDisable() e pra nao perder muito caso o server caia repentinamente, cria uma tarefa que chama ele a cada 1min por exemplo.... O metodo load() tu chama no onEnable() Os metodos já dizem tudo, dai tu aplica ao comando, evento. Editado Abril 3, 2016 por zDubsCrazy 1 Link para o comentário Compartilhar em outros sites More sharing options...
vitorrdgs Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Ja ouviu falar de Sql e hashmap? Link para o comentário Compartilhar em outros sites More sharing options...
Viiict0r Postado Abril 3, 2016 Autor Denunciar Compartilhar Postado Abril 3, 2016 Em 03/04/2016 em 14:52, vitorrdgs disse: Ja ouviu falar de Sql e hashmap? Já, mais a minha dúvida é como vou controlar o tempo... Link para o comentário Compartilhar em outros sites More sharing options...
Guest Mateus Demarchi Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Olha, se utilizar variáveis vai-se perder os dados ao reiniciar o servidor, um método para resolver isso seria salvar os delays ao plugin ser desabilitado, e colocar os valores na variável ao habilitar o plugin e deixar rodar o método para reduzir o valor do delay. Link para o comentário Compartilhar em outros sites More sharing options...
Viiict0r Postado Abril 3, 2016 Autor Denunciar Compartilhar Postado Abril 3, 2016 Em 03/04/2016 em 14:54, biterr disse: Olha, se utilizar variáveis vai-se perder os dados ao reiniciar o servidor, um método para resolver isso seria salvar os delays ao plugin ser desabilitado, e colocar os valores na variável ao habilitar o plugin e deixar rodar o método para reduzir o valor do delay. Huum, no caso usar um scheduler pra isso? Link para o comentário Compartilhar em outros sites More sharing options...
Guest Mateus Demarchi Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Em 03/04/2016 em 14:56, Viiict0r disse: Huum, no caso usar um scheduler pra isso? Sim. Link para o comentário Compartilhar em outros sites More sharing options...
vitorrdgs Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Em 03/04/2016 em 14:54, Viiict0r disse: Já, mais a minha dúvida é como vou controlar o tempo... Serio isso? Você faz tudo que diz q faz e não sabe fazer cooldown? Link para o comentário Compartilhar em outros sites More sharing options...
Viiict0r Postado Abril 3, 2016 Autor Denunciar Compartilhar Postado Abril 3, 2016 Em 03/04/2016 em 14:57, vitorrdgs disse: Serio isso? Você faz tudo que diz q faz e não sabe fazer cooldown? Cara, eu não sei se você percebeu, mais a minha dúvida não é como criar um cooldown, e sim um sistema pra não resetar o cooldown dos jogadores ao deslogarem, ou reiniciar o servidor. Link para o comentário Compartilhar em outros sites More sharing options...
Dery Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Em 03/04/2016 em 15:00, Viiict0r disse: Cara, eu não sei se você percebeu, mais a minha dúvida não é como criar um cooldown, e sim um sistema pra não resetar o cooldown dos jogadores ao deslogarem, ou reiniciar o servidor. Usa currentTimeMillis para salvar, só que salva em um arquivo externo (como .db), aí toda vez que for utilizar o comando ou outra coisa, verifica se o atual currentTimeMillis é maior ou igual ao que está registrado Link para o comentário Compartilhar em outros sites More sharing options...
Viiict0r Postado Abril 3, 2016 Autor Denunciar Compartilhar Postado Abril 3, 2016 Em 03/04/2016 em 15:03, zDubsCrazy disse: private HashMap<String, Long> cooldown = new HashMap<>(); private void setDelay(Player p) { // Adicionando delay de 3 horas. cooldown.put(p.getName(), System.currentTimeMillis() + TimeUnit.HOURS.toMillis(3)); } private boolean hasDelay(Player p) { return cooldown.containsKey(p.getName()) && (cooldown.get(p.getName()) > System.currentTimeMillis()); } private String getDelayString(Player p) { long time = cooldown.get(p.getName()) - System.currentTimeMillis(); return format(time); } private String format(long time) { String format = ""; long hours = TimeUnit.MILLISECONDS.toHours(time); long hoursInMillis = TimeUnit.HOURS.toMillis(hours); long minutes = TimeUnit.MILLISECONDS.toMinutes(time - hoursInMillis); long minutesInMillis = TimeUnit.MINUTES.toMillis(minutes); long seconds = TimeUnit.MILLISECONDS.toSeconds(time - (hoursInMillis + minutesInMillis)); if (hours > 0) format = hours + (hours > 1 ? " horas" : " hora"); if (minutes > 0) { if ((seconds > 0) && (hours > 0)) format += ", "; else if (hours > 0) format += " e "; format += minutes + (minutes > 1 ? " minutos" : " minuto"); } if (seconds > 0) { if ((hours > 0) || (minutes > 0)) format += " e "; format += seconds + (seconds > 1 ? " segundos" : " segundo"); } if (format.equals("")) { long rest = time / 100; if (rest == 0) rest = 1; format = "0." + rest + " segundo"; } return format; } private void save() { File f = new File(getDataFolder(), "cooldown.dat"); if (!(f.exists())) try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f)); oos.writeObject(cooldown); oos.close(); } catch (Exception e) { e.printStackTrace(); } } private void load() { File f = new File(getDataFolder(), "cooldown.dat"); if (f.exists()) { try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f)); cooldown = (HashMap<String, Long>) ois.readObject(); ois.close(); for (Entry<String, Long> entry : cooldown.entrySet()) { if (entry.getValue() <= System.currentTimeMillis()) cooldown.remove(entry.getKey()); } } catch (Exception e) { e.printStackTrace(); } } } O metodo save() tu chama no onDisable() e pra nao perder muito caso o server caia repentinamente, cria uma tarefa que chama ele a cada 1min por exemplo.... O metodo load() tu chama no onEnable() Os metodos já dizem tudo, dai tu aplica ao comando, evento. Obrigado, irei testar... Link para o comentário Compartilhar em outros sites More sharing options...
Viiict0r Postado Abril 3, 2016 Autor Denunciar Compartilhar Postado Abril 3, 2016 Resolvido... Link para o comentário Compartilhar em outros sites More sharing options...
leonardosc Postado Abril 3, 2016 Denunciar Compartilhar Postado Abril 3, 2016 Em 03/04/2016 em 15:03, zDubsCrazy disse: private HashMap<String, Long> cooldown = new HashMap<>(); private void setDelay(Player p) { // Adicionando delay de 3 horas. cooldown.put(p.getName(), System.currentTimeMillis() + TimeUnit.HOURS.toMillis(3)); } private boolean hasDelay(Player p) { return cooldown.containsKey(p.getName()) && (cooldown.get(p.getName()) > System.currentTimeMillis()); } private String getDelayString(Player p) { long time = cooldown.get(p.getName()) - System.currentTimeMillis(); return format(time); } private String format(long time) { String format = ""; long hours = TimeUnit.MILLISECONDS.toHours(time); long hoursInMillis = TimeUnit.HOURS.toMillis(hours); long minutes = TimeUnit.MILLISECONDS.toMinutes(time - hoursInMillis); long minutesInMillis = TimeUnit.MINUTES.toMillis(minutes); long seconds = TimeUnit.MILLISECONDS.toSeconds(time - (hoursInMillis + minutesInMillis)); if (hours > 0) format = hours + (hours > 1 ? " horas" : " hora"); if (minutes > 0) { if ((seconds > 0) && (hours > 0)) format += ", "; else if (hours > 0) format += " e "; format += minutes + (minutes > 1 ? " minutos" : " minuto"); } if (seconds > 0) { if ((hours > 0) || (minutes > 0)) format += " e "; format += seconds + (seconds > 1 ? " segundos" : " segundo"); } if (format.equals("")) { long rest = time / 100; if (rest == 0) rest = 1; format = "0." + rest + " segundo"; } return format; } private void save() { File f = new File(getDataFolder(), "cooldown.dat"); if (!(f.exists())) try { f.createNewFile(); } catch (IOException e) { e.printStackTrace(); } try { ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f)); oos.writeObject(cooldown); oos.close(); } catch (Exception e) { e.printStackTrace(); } } private void load() { File f = new File(getDataFolder(), "cooldown.dat"); if (f.exists()) { try { ObjectInputStream ois = new ObjectInputStream(new FileInputStream(f)); cooldown = (HashMap<String, Long>) ois.readObject(); ois.close(); for (Entry<String, Long> entry : cooldown.entrySet()) { if (entry.getValue() <= System.currentTimeMillis()) cooldown.remove(entry.getKey()); } } catch (Exception e) { e.printStackTrace(); } } } O metodo save() tu chama no onDisable() e pra nao perder muito caso o server caia repentinamente, cria uma tarefa que chama ele a cada 1min por exemplo.... O metodo load() tu chama no onEnable() Os metodos já dizem tudo, dai tu aplica ao comando, evento. StringBuilder mandou lembranças. Sua dúvida foi marcada como [Resolvido] e movido à área de dúvidas resolvidas. Atenciosamente, Gamer's Board Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Viiict0r
Olá..
Minha dúvida é a seguinte, como crio um sistema, de delay, onde o jogador usa tal função, e é setado um delay, e esse delay não reseta ao sair do servidor, e nem reiniciando-o...
obrigado.
Link para o comentário
Compartilhar em outros sites
12 respostass a esta questão
Posts Recomendados