Главная » Статьи » JimBot » Скрипты для JimBot |
Игра "Лидер" by Sc@nO
Игра "Лидер" by Sc@nO В class ChatCommandProc: вверху... public LeaderGame leadergame; ============== в начале метода parse... if(psp.getBooleanProperty("gldr.on.off") && leadergame == null) { leadergame = new LeaderGame(srv); leadergame.start(); } ============== вставьте следующую строку туда где происходит отправка сообщения (в методе parse) if(psp.getBooleanProperty("gldr.on.off")) leadergame.parse(proc, uin, mmsg, srv.us.getUser(uin).room); ChatProps.java: // Лидер setBooleanProperty("gldr.on.off", false); //вкл/выкл игры setIntProperty("gldr.room", 123); //комната игры setIntProperty("gldr.money", 10); //размер ставки setIntProperty("gldr.mon", 1); //бонусные начисления setIntProperty("gldr.num.start", 4); //кол ставок при засчёте игры setIntProperty("gldr.dlot", 15); //проложительность игры setIntProperty("gldr.msg", 2); //интервал оповещения setBooleanProperty("gldr.patr.on.off", true); //вкл/выкл 2ое место (начисляются патроны) setIntProperty("gldr.patr", 20); //кол начисляемых патронов при ставке // Лидер new UserPreference(UserPreference.CATEGORY_TYPE,"gldr","Настройки игры 'Лидер'", "", ""), new UserPreference(UserPreference.BOOLEAN_TYPE,"gldr.on.off","Включить игру 'Лидер'", Boolean.valueOf(getBooleanProperty("gldr.on.off")), ""), new UserPreference(UserPreference.INTEGER_TYPE,"gldr.room","Комната игры",getIntProperty("gldr.room"), ""), new UserPreference(UserPreference.INTEGER_TYPE,"gldr.money","Размер ставки",getIntProperty("gldr.money"), ""), new UserPreference(UserPreference.INTEGER_TYPE,"gldr.mon","Размер прибавки при ставке ",getIntProperty("gldr.mon"), ""), new UserPreference(UserPreference.INTEGER_TYPE,"gldr.num.start","Засчитывать игру при ... ставок",getIntProperty("gldr.num.start"), ""), new UserPreference(UserPreference.INTEGER_TYPE,"gldr.dlot","Продолжительность игры (мин.)",getIntProperty("gldr.dlot"), ""), new UserPreference(UserPreference.INTEGER_TYPE,"gldr.msg","Интервал оповещения статистики (мин.)",getIntProperty("gldr.msg"), ""), new UserPreference(UserPreference.BOOLEAN_TYPE,"gldr.patr.on.off","Включить 2-ое место (патроны)", Boolean.valueOf(getBooleanProperty("gldr.patr.on.off")), ""), new UserPreference(UserPreference.INTEGER_TYPE,"gldr.patr","Размер начисления патронов при ставке",getIntProperty("gldr.patr"), ""), // LeaderGame.java: /* * To change this template, choose Tools | Templates * and open the template in the editor. */ package ru.jimbot.modules.chat; import ru.jimbot.protocol.IcqProtocol; /** * Игра "Лидер" (ver. 1.1) * @author scano */ public class LeaderGame implements Runnable { private ChatServer srv; private ChatProps psp; private Thread th; //приоритет игры private int sleepAmount = 1000; //интервал срабатывания игры //игровые ресурсы public boolean testStart = false; //статус внешней игры (онлайн/офлайн) public boolean testStat = false; //статус внутренней игры (засчитана ли игра?) public int id_1 = 0; //ид 1 игрока (1-ое место) public int id_2 = 0; //ид 2 игрока (2-ое место) public int money = 0; //количество ч$ public int patron = 0; //количество патронов public long time = 0; //время игры public long stat = 0; //время статистики public String users = ""; //ид пользователей (через ";"), поставшие ставки LeaderGame(ChatServer s) { srv = s; psp = ChatProps.getInstance(srv.getName()); } public void start() { th = new Thread(this); th.setPriority(Thread.NORM_PRIORITY); th.start(); } public synchronized void stop() { th = null; notify(); } public void run() { Thread me = Thread.currentThread(); while(th == me) { if(testStart) //проверка внешнего статуса игры LeaderGame(); //переход к обработчику try { Thread.sleep(sleepAmount); } catch (InterruptedException e) { break; } } th=null; } //парсер игры (процесс обработки ставок) public void parse(IcqProtocol proc, String uin, String msg, int room) { //процесс проверки игры if(room!=psp.getIntProperty("gldr.room")) return; //игнорим запуск с других комнат if(!TestStart(msg) && !TestStavka(msg)) return; //игнорим обработку при ложных запросах if(!psp.getBooleanProperty("gldr.on.off")){ proc.mq.add(uin,"Игра ''Лидер'' была отключена главным администратором чата."); return; } //игроки Users u = srv.us.getUser(uin); //участник //процесс if(u.ball<psp.getIntProperty("gldr.money")){ //игнорим запрос при нехватке денег proc.mq.add(uin,"Для участия в игре необходимо "+psp.getIntProperty("gldr.money")+psp.getStringProperty("valuta.chat")+" в соответствии с суммой ставки"); return; } //ЗАПУСК if(TestStart(msg)){ //попытка запустить игру if(testStart){ //игнорим запрос если игра и так запущена proc.mq.add(uin,"Игра уже запущена!\n" + "Чтобы начать игру заново дождитесь окончания текущей сессии."); return; } //обрабатываем игрока u.ball-=psp.getIntProperty("gldr.money"); srv.us.updateUser(u); //обрабатываем игровые данные money+=psp.getIntProperty("gldr.money"); money+=psp.getIntProperty("gldr.mon"); if(psp.getBooleanProperty("gldr.patr.on.off")) patron+=psp.getIntProperty("gldr.patr"); id_1=u.id; users+=u.id+";"; stat=System.currentTimeMillis()+psp.getIntProperty("gldr.msg")*60000; time=System.currentTimeMillis()+psp.getIntProperty("gldr.dlot")*60000; int stav = users.split(";").length; testStart=true; Users us = srv.us.getUser(id_1); //игрок 1-ого места proc.mq.add(uin,"Игра успешно запущена!\n" + "Внесенная ставка: "+psp.getIntProperty("gldr.money")+psp.getStringProperty("valuta.chat")+"\n" + "Ваш баланс: "+u.ball+psp.getStringProperty("valuta.chat")); srv.cq.addMsg("Игра ''Лидер'' запущена!\n" + "Количество ставок: "+stav+"\n" + "--- Статус\n" + "Сумма в банке: "+money+psp.getStringProperty("valuta.chat")+"\n" + (psp.getBooleanProperty("gldr.patr.on.off")?("Кол. патронов: "+patron+"\n"):"") + "--- Кандидаты\n" + "#1 место (вручение денег):\n"+us.localnick+"\n" + (psp.getBooleanProperty("gldr.patr.on.off")?("#2 место (вручение патронов):\n ~~~ Пусто ~~~ \n"):"")+ "\n" + "Сумма ставки: "+psp.getIntProperty("gldr.money")+psp.getStringProperty("valuta.chat")+"(+бонус "+psp.getIntProperty("gldr.mon")+psp.getStringProperty("valuta.chat")+")\n" + "Длительность игры: "+psp.getIntProperty("gldr.dlot")+"мин.\n" + "Для ставки отправьте слово ''ставка'' (без ковычек!)","",psp.getIntProperty("gldr.room")); return; } //СТАВКА if(TestStavka(msg)){ //попытка сделать ставку if(!testStart){ //игнорим ставку если ига не запущена proc.mq.add(uin,"Игра не запущена!\n" + "Для запуска игры отправьте слово ''лидер'' (без ковычек!)"); return; } if(u.id==id_1){ proc.mq.add(uin,"Ваша ставка уже была внесена!"); return; } Users us = srv.us.getUser(id_1); //игрок 1-ого места //обрабатываем игрока u.ball-=psp.getIntProperty("gldr.money"); srv.us.updateUser(u); //обрабатываем игровые данные money+=psp.getIntProperty("gldr.money"); money+=psp.getIntProperty("gldr.mon"); if(psp.getBooleanProperty("gldr.patr.on.off")){ patron+=psp.getIntProperty("gldr.patr"); id_2=us.id; } id_1=u.id; users+=u.id+";"; stat=System.currentTimeMillis()+psp.getIntProperty("gldr.msg")*60000; time=System.currentTimeMillis()+psp.getIntProperty("gldr.dlot")*60000; int stav = users.split(";").length; if(testStat==false && stav>=psp.getIntProperty("gldr.num.start")) testStat=true; Users uss = srv.us.getUser(id_1); //игрок 1-ого места Users usss = srv.us.getUser(id_2); //игрок 2-ого места proc.mq.add(uin,"Ставка успешно принята!\n" + "Внесенная ставка: "+psp.getIntProperty("gldr.money")+psp.getStringProperty("valuta.chat")+"\n" + "Ваш баланс: "+u.ball+psp.getStringProperty("valuta.chat")); srv.cq.addMsg("Внесена ставка!\n" + "Количество ставок: "+stav+"\n" + "--- Статус\n" + "Сумма в банке: "+money+psp.getStringProperty("valuta.chat")+"\n" + (psp.getBooleanProperty("gldr.patr.on.off")?("Число патронов: "+patron+"\n"):"") + "--- Кандидаты\n" + "#1 место (вручение денег):\n"+uss.localnick+"\n" + (psp.getBooleanProperty("gldr.patr.on.off")?("#2 место (вручение патронов):\n"+(usss.id!=0?(usss.localnick):" ~~~ Пусто ~~~ ")+"\n"):"") + "\n" + "Сумма ставки: "+psp.getIntProperty("gldr.money")+psp.getStringProperty("valuta.chat")+"(+бонус "+psp.getIntProperty("gldr.mon")+psp.getStringProperty("valuta.chat")+")\n" + "Длительность игры: "+psp.getIntProperty("gldr.dlot")+"мин.\n" + "Для ставки отправьте слово ''ставка'' (без ковычек!)","",psp.getIntProperty("gldr.room")); return; } } //процесс игры (онлайн выполнение) public void LeaderGame() { if(testStart==false) return; //игнорим процесс если сессия не активна if(!psp.getBooleanProperty("gldr.on.off")){ //отладчик, в случае отключения игры Debugger(); //отладчик EndGame(); //обнуляем ресурсы и отключаем сессию игры srv.cq.addMsg("Сессия игры прервана!\n" + "Игра была отключена главным админстратором чата, все поставленные деньги были возвращены.\n" + "Приносим вам свои извинения.","",psp.getIntProperty("gldr.room")); return; } //игроки Users us = srv.us.getUser(id_1); //игрок 1-ого места Users uss = srv.us.getUser(id_2); //игрок 2-ого места //ОКОНЧАНИЕ ИГРЫ if(TestTime()){ if(!testStat){ //если сессия не засчитана Debugger(); //отладчик EndGame(); //обнуляем ресурсы и отключаем сессию игры srv.cq.addMsg("Игра окончена, сессия не засчитана!\n" + "Все поставленные деньги возвращены\n" + "Для засчитывания игровой сессии требуется как минимум "+psp.getIntProperty("gldr.num.start")+" сделанн(ой/ых) став(ки/ок)","",psp.getIntProperty("gldr.room")); // testStart=false; //отключаем игру по требованию return; } //зачисляем призы us.ball+=money; srv.us.updateUser(us); if(psp.getBooleanProperty("gldr.patr.on.off") && uss.id!=0){ uss.birthyear+=patron; srv.us.updateUser(uss); } //уведомляем комнату srv.cq.addMsg("Игра окончена, сессия засчитана!\n" + "#1 место: "+us.localnick+"\n" + "Приз: "+money+psp.getStringProperty("valuta.chat")+"\n" + (psp.getBooleanProperty("gldr.patr.on.off")?("#2 место: "+(uss.id!=0?(uss.localnick):" ~~~ Пусто ~~~ ")+"\n"):"") + (psp.getBooleanProperty("gldr.patr.on.off")?("Приз: "+patron+"(патроны)"+"\n"):"") + "\nДля запуска игры отправьте слово ''лидер'' (без ковычек!)","",psp.getIntProperty("gldr.room")); //завершаем игровую сессию EndGame(); //обнуляем ресурсы и отключаем сессию игры return; } //ИНФОРМ-СТАТ if(TestInform()){ stat=System.currentTimeMillis()+psp.getIntProperty("gldr.msg")*60000; int stav = users.split(";").length; srv.cq.addMsg("Осталось времени: "+((time-System.currentTimeMillis())/60000)+"мин.\n" + "Количество ставок: "+stav+"\n" + "--- Статус\n" + "Сумма в банке: "+money+psp.getStringProperty("valuta.chat")+"\n" + (psp.getBooleanProperty("gldr.patr.on.off")?("Число патронов: "+patron+"\n"):"") + "--- Кандидаты\n" + "#1 место (вручение денег):\n"+us.localnick+"\n" + (psp.getBooleanProperty("gldr.patr.on.off")?("#2 место (вручение патронов):\n"+(uss.id!=0?(uss.localnick):" ~~~ Пусто ~~~ ")+"\n"):"") + "\n" + "Сумма ставки: "+psp.getIntProperty("gldr.money")+psp.getStringProperty("valuta.chat")+"(+бонус "+psp.getIntProperty("gldr.mon")+psp.getStringProperty("valuta.chat")+")\n" + "Для ставки отправьте слово ''ставка'' (без ковычек!)","",psp.getIntProperty("gldr.room")); return; } } //проверка на запуск игры public boolean TestStart(String msg) { if(msg.trim().toLowerCase().equals("лидер"))//удаляем пробелы;опускаем регистр и обрабатываем return true; else return false; } //проверка на запуск игры public boolean TestStavka(String msg) { if(msg.trim().toLowerCase().equals("ставка"))//удаляем пробелы;опускаем регистр и обрабатываем return true; else return false; } //проверка на истечении игровой сессии public boolean TestTime(){ return ((time-System.currentTimeMillis())/1000)<1; } //проверка на интервал вывода статистики игровой сессии public boolean TestInform(){ return ((stat-System.currentTimeMillis())/1000)<1; } //отладчик игры, возвращает вносиме суммы уцчастникам, в случае отключения самой игры public void Debugger(){ String[] s = users.split(";"); for(int i=0;i<s.length;i++){ int id = Integer.parseInt(s[i]); Users u = srv.us.getUser(id); //участник u.ball+=psp.getIntProperty("gldr.money"); //возвращаем $ srv.us.updateUser(u); //обновляем } } //отключение игры и обнулирование ресурсов public void EndGame(){ //обнуляем лидеров игры id_1=0; id_2=0; //обнуляем игровые призы money=0;patron=0; //обнуляем игровой тайм time=0;stat=0; //обнуляем список участников users=""; //устанавливаем параметры отключения testStart=false;testStat=false; } } | |
Просмотров: 966 | Комментарии: 5 | |
Всего комментариев: 0 | |