Главная » Статьи » 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;
}

}
Категория: Скрипты для JimBot | Добавил: SuPeR_NiK (03.08.2011)
Просмотров: 966 | Комментарии: 5 | Рейтинг: 4.7/3
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]