/**
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ru.jimbot.modules.chat;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.HashMap;
import java.util.Vector;
import ru.jimbot.modules.Cmd;
import ru.jimbot.modules.CommandParser;
import ru.jimbot.protocol.IcqProtocol;
/**
* в Обработку команд чата
*
* public IntBar bar = null;
*
* bar = new IntBar(this);
*
* в оснавной пассер
* if(bar.InterBar(proc, uin, mmsg)) return;
*
* @author StaTi©™
* Интерактивный бар :-)
**/
/**
CREATE TABLE `alcohol` (
`id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`alco` varchar(255) NOT NULL,
PRIMARY KEY (`id`));
*/
public class IntBar{
private HashMap<String, Cmd> commands = new HashMap<String, Cmd>();// Для хранения доступных команд
private HashMap<String, BarExtend> BarCom;//для расширенной обработки команд
private CommandParser parser;
private ChatCommandProc cmd;
/**Creates a new instance of IntBar*/
public IntBar(ChatCommandProc c){
parser = new CommandParser(commands);
BarCom = new HashMap();
cmd = c;
init();
}
/**Инициализация списка команд*/
private void init(){
commands.put("!бар", new Cmd("!бар","",1));// наш интерактивный бар
commands.put("!напитки", new Cmd("!напитки","",2));// вывод напитков купленых пользователем ))
commands.put("!выпить", new Cmd("!выпить","$n",3));// выпить напиток ))
commands.put("!подарить", new Cmd("!подарить","$n $n",4));// подарить напиток
commands.put("!угостить", new Cmd("!угостить","$n $n",4));
}
/**Добавление новой команды*/
public boolean addCommand(String name, Cmd c){
boolean f = commands.containsKey(name);
commands.put(name, c);
return f;
}
/**Основная процедура*/
public boolean InterBar(IcqProtocol proc, String uin, String mmsg) {
String tmsg = mmsg.trim();
int tp = parser.parseCommand(tmsg);
int tst = 0;
if (tp < 0)
tst = 0;
else
tst = tp;
boolean f = true;
switch (tst){
case 1:
commandBar(proc,uin,parser.parseArgs(tmsg),mmsg);
break;
case 2:
Listalcohol(proc, uin);
break;
case 3:
drink(proc, uin, parser.parseArgs(tmsg));
break;
default:
f = false;
break;
}
return f;
}
public void commandBar(IcqProtocol proc, String uin, Vector v, String mmsg){
if(!cmd.isChat(proc,uin) && !cmd.psp.testAdmin(uin)) return;
Users uss = cmd.srv.us.getUser(uin);
int i = 0;
boolean twoPart = false;
if (uss.state == UserWork.STATE_CHAT){
if(BarCom.containsKey(uin)){
if(BarCom.containsKey(uin)){
try{
i = Integer.parseInt(mmsg);
}catch(NumberFormatException e){
proc.mq.add(uin, "Укажите номер покупки\nДля выхода выберите |0|");
return;
}
twoPart = true;
BarCom.remove(uin);}
}
if(!twoPart){
Napitki(proc, uin);
BarCom.put(uin, new BarExtend(uin, mmsg, mmsg,v, 2*60000));
return;}
if(i == 0){Vihod(proc, uin);}
if(i == 1){Konjak(proc, uin);}
if(i == 2){Meri(proc, uin);}
if(i == 3){Viski(proc, uin);}
if(i == 4){Martini(proc, uin);}
if(i == 5){Beer(proc, uin);}
if(i == 6){Jaguar(proc, uin);}
if(i == 7){Djin(proc, uin);}
if(i == 8){Zum(proc, uin);}
if(i == 9){Samogon(proc, uin);}
if(i == 10){Schampan(proc, uin);}
}
}
public void Napitki(IcqProtocol proc, String uin){ //листинг спиртного ))
String n = "";
n += "Бармен:-) : здравствуйте я могу вам предложить";
n += "ИД|Название|ЦЕНА ";
n += "\n|1| - Коньяк 9 баллов";
n += "\n|2| - Кровавая Мэри 6 балла";
n += "\n|3| - Вмски 12 баллов";
n += "\n|4| - Мартини 10 баллов";
n += "\n|5| - Пиво 4 балла";
n += "\n|6| - Ягуар 7 баллов";
n += "\n|7| - Джин-Тоник 3 балла";
n += "\n|8| - Zum-Zum 4 балла";
n += "\n|9| - Самогон 1 балл";
n += "\n|10| - Шампанское 11 баллов";
n += "\n|0| - выход((((";
n += "\nВыберете цифру для покупки";
proc.mq.add(uin, n);
}
public void Vihod(IcqProtocol proc, String uin){// выход ))
proc.mq.add(uin, "Вы вышли");
return;
}
private void Konjak(IcqProtocol proc, String uin)
{
String a = "Коньяк";//товар
Users us = cmd.srv.us.getUser(uin);
if(cmd.srv.us.getUser(uin).ball<9){//не хватает баллов
proc.mq.add(uin, "Для получения этого напитка.Вам необходимо набрать 9 баллов");
return;
}
long z = cmd.srv.us.db.getLastIndex("alcohol"); // по идет записываем в бд alcoholBd(id, us.id, a);??(не дружу с базой)
int id = (int) z;// ???
alcoholBd(id, us.id, a);// ???
cmd.srv.us.getUser(uin).ball = cmd.srv.us.getUser(uin).ball-9;//забираем баллы
cmd.srv.us.updateUser(cmd.srv.us.getUser(uin));
proc.mq.add(uin,"Вы купили "+a+" у вас осталось "+ cmd.srv.us.getUser(uin).ball + " балл(ов)");//оповешаем пользователя об успешной покупке
}
private void Meri(IcqProtocol proc, String uin)
{
String a = "Кровавая Мэри";//товар
Users us = cmd.srv.us.getUser(uin);
if(cmd.srv.us.getUser(uin).ball<6){//не хватает баллов
proc.mq.add(uin, "Для получения этого напитка.Вам необходимо набрать 6 баллов");
return;
}
long z = cmd.srv.us.db.getLastIndex("alcohol");
int id = (int) z;
alcoholBd(id, us.id, a);
cmd.srv.us.getUser(uin).ball = cmd.srv.us.getUser(uin).ball-6;//забираем баллы
cmd.srv.us.updateUser(cmd.srv.us.getUser(uin));
proc.mq.add(uin,"Вы купили "+a+" у вас осталось "+ cmd.srv.us.getUser(uin).ball + " балл(ов)");//оповешаем пользователя об успешной покупке
}
private void Viski(IcqProtocol proc, String uin)
{
String a = "Виски";//товар
Users us = cmd.srv.us.getUser(uin);
if(cmd.srv.us.getUser(uin).ball<12){//не хватает баллов
proc.mq.add(uin, "Для получения этого напитка.Вам необходимо набрать 9 баллов");
return;
}
long z = cmd.srv.us.db.getLastIndex("alcohol");
int id = (int) z;
alcoholBd(id, us.id, a);
cmd.srv.us.getUser(uin).ball = cmd.srv.us.getUser(uin).ball-12;//забираем баллы
cmd.srv.us.updateUser(cmd.srv.us.getUser(uin));
proc.mq.add(uin,"Вы купили "+a+" у вас осталось "+ cmd.srv.us.getUser(uin).ball + " балл(ов)");//оповешаем пользователя об успешной покупке
}
private void Martini(IcqProtocol proc, String uin)
{
String a = "Мартини";//товар
Users us = cmd.srv.us.getUser(uin);
if(cmd.srv.us.getUser(uin).ball<10){//не хватает баллов
proc.mq.add(uin, "Для получения этого напитка.Вам необходимо набрать 10 баллов");
return;
}
long z = cmd.srv.us.db.getLastIndex("alcohol");
int id = (int) z;
alcoholBd(id, us.id, a);
cmd.srv.us.getUser(uin).ball = cmd.srv.us.getUser(uin).ball-10;//забираем баллы
cmd.srv.us.updateUser(cmd.srv.us.getUser(uin));
proc.mq.add(uin,"Вы купили "+a+" у вас осталось "+ cmd.srv.us.getUser(uin).ball + " балл(ов)");//оповешаем пользователя об успешной покупке
}
private void Beer(IcqProtocol proc, String uin)
{
String a = "Пиво";//товар
Users us = cmd.srv.us.getUser(uin);
if(cmd.srv.us.getUser(uin).ball<4){//не хватает баллов
proc.mq.add(uin, "Для получения этого напитка.Вам необходимо набрать 4 баллов");
return;
}
long z = cmd.srv.us.db.getLastIndex("alcohol");
int id = (int) z;
alcoholBd(id, us.id, a);
cmd.srv.us.getUser(uin).ball = cmd.srv.us.getUser(uin).ball-4;//забираем баллы
cmd.srv.us.updateUser(cmd.srv.us.getUser(uin));
proc.mq.add(uin,"Вы купили "+a+" у вас осталось "+ cmd.srv.us.getUser(uin).ball + " балл(ов)");//оповешаем пользователя об успешной покупке
}
private void Jaguar(IcqProtocol proc, String uin)
{
String a = "Ягуар";//товар
Users us = cmd.srv.us.getUser(uin);
if(cmd.srv.us.getUser(uin).ball<7){//не хватает баллов
proc.mq.add(uin, "Для получения этого напитка.Вам необходимо набрать 4 баллов");
return;
}
long z = cmd.srv.us.db.getLastIndex("alcohol");
int id = (int) z;
alcoholBd(id, us.id, a);
cmd.srv.us.getUser(uin).ball = cmd.srv.us.getUser(uin).ball-7;//забираем баллы
cmd.srv.us.updateUser(cmd.srv.us.getUser(uin));
proc.mq.add(uin,"Вы купили "+a+" у вас осталось "+ cmd.srv.us.getUser(uin).ball + " балл(ов)");//оповешаем пользователя об успешной покупке
}
private void Djin(IcqProtocol proc, String uin)
{
String a = "Джин-Тоник";//товар
Users us = cmd.srv.us.getUser(uin);
if(cmd.srv.us.getUser(uin).ball<3){//не хватает баллов
proc.mq.add(uin, "Для получения этого напитка.Вам необходимо набрать 3 баллов");
return;
}
long z = cmd.srv.us.db.getLastIndex("alcohol");
int id = (int) z;
alcoholBd(id, us.id, a);
cmd.srv.us.getUser(uin).ball = cmd.srv.us.getUser(uin).ball-3;//забираем баллы
cmd.srv.us.updateUser(cmd.srv.us.getUser(uin));
proc.mq.add(uin,"Вы купили "+a+" у вас осталось "+ cmd.srv.us.getUser(uin).ball + " балл(ов)");//оповешаем пользователя об успешной покупке
}
private void Zum(IcqProtocol proc, String uin)
{
String a = "Zum-Zum";//товар
Users us = cmd.srv.us.getUser(uin);
if(cmd.srv.us.getUser(uin).ball<4){//не хватает баллов
proc.mq.add(uin, "Для получения этого напитка.Вам необходимо набрать 4 баллов");
return;
}
long z = cmd.srv.us.db.getLastIndex("alcohol");
int id = (int) z;
alcoholBd(id, us.id, a);
cmd.srv.us.getUser(uin).ball = cmd.srv.us.getUser(uin).ball-4;//забираем баллы
cmd.srv.us.updateUser(cmd.srv.us.getUser(uin));
proc.mq.add(uin,"Вы купили "+a+" у вас осталось "+ cmd.srv.us.getUser(uin).ball + " балл(ов)");//оповешаем пользователя об успешной покупке
}
private void Samogon(IcqProtocol proc, String uin)
{
String a = "Самогон";//товар
Users us = cmd.srv.us.getUser(uin);
if(cmd.srv.us.getUser(uin).ball<1){//не хватает баллов
proc.mq.add(uin, "Для получения этого напитка.Вам необходимо набрать 4 баллов");
return;
}
long z = cmd.srv.us.db.getLastIndex("alcohol");
int id = (int) z;
alcoholBd(id, us.id, a);
cmd.srv.us.getUser(uin).ball = cmd.srv.us.getUser(uin).ball-1;//забираем баллы
cmd.srv.us.updateUser(cmd.srv.us.getUser(uin));
proc.mq.add(uin,"Вы купили "+a+" у вас осталось "+ cmd.srv.us.getUser(uin).ball + " балл(ов)");//оповешаем пользователя об успешной покупке
}
private void Schampan(IcqProtocol proc, String uin)
{
String a = "Шампанское";//товар
Users us = cmd.srv.us.getUser(uin);
if(cmd.srv.us.getUser(uin).ball<11){//не хватает баллов
proc.mq.add(uin, "Для получения этого напитка.Вам необходимо набрать 4 баллов");
return;
}
long z = cmd.srv.us.db.getLastIndex("alcohol");
int id = (int) z;
alcoholBd(id, us.id, a);
cmd.srv.us.getUser(uin).ball = cmd.srv.us.getUser(uin).ball-11;//забираем баллы
cmd.srv.us.updateUser(cmd.srv.us.getUser(uin));
proc.mq.add(uin,"Вы купили "+a+" у вас осталось "+ cmd.srv.us.getUser(uin).ball + " балл(ов)");//оповешаем пользователя об успешной покупке
}
//////////////////////
// Ну что пробуем )) //
//////////////////////
public void alcoholBd(int id, int user_id, String alcohol) {
try{
PreparedStatement pst = (PreparedStatement) cmd.srv.us.db.getDb().prepareStatement("insert into alcohol values(?, ?, ?)");
pst.setInt(1,id);
pst.setInt(2,user_id);
pst.setString(3,alcohol);
pst.execute();
pst.close();
}catch (Exception ex){
ex.printStackTrace();
}
}
/**Выводим список алкогольных напитков*/
private void Listalcohol(IcqProtocol proc, String uin) {
try{
if(!cmd.isChat(proc,uin) && !cmd.psp.testAdmin(uin)) return;
Users us = cmd.srv.us.getUser(uin);
proc.mq.add(uin, commandListalcohol(us.id));
}catch (Exception ex){
ex.printStackTrace();
proc.mq.add(uin,"При вызове листинга возникла ошибка - "+ex.getMessage());
}
}
/**Список алкогольных напитков*/
public String commandListalcohol(int id) {
String list = "Список алкогольных напитков у вас\n" +
"Id ~ Напитка|Название|\n";
try{
PreparedStatement pst = (PreparedStatement) cmd.srv.us.db.getDb().prepareStatement("select id, alcohol from alcohol WHERE user_id="+id);
ResultSet rs = pst.executeQuery();
while(rs.next()){
list += "|" + rs.getInt(1) + "|" + rs.getString(2) + '\n';
}
rs.close();
pst.close();
}catch (Exception ex){
ex.printStackTrace();
}
return list;
}
private void drink(IcqProtocol proc, String uin, Vector v) {// выжрать бутылку в одну харю (((ГГ)))
if(!cmd.isChat(proc,uin) && !cmd.psp.testAdmin(uin)) return;
int id = (Integer)v.get(0);//ид напитка
Users us = cmd.srv.us.getUser(uin);
String a = name(id);
cmd.srv.cq.addMsg("Пользователь "+us.localnick+" выпили "+a+" в одну харю ", us.sn, us.room);
proc.mq.add(uin,"Вы выпили "+a);
cmd.srv.us.db.executeQuery("DELETE FROM alcohol WHERE id=" + id);
}
/**
* Вывод имени напитка по иду ))
* Спосибо Александру ))
* @author Fraer72
*/
public String name(int id){
String name = "";
try{
PreparedStatement pst = (PreparedStatement) cmd.srv.us.db.getDb().prepareStatement("select alco from alcohol WHERE id="+id);
ResultSet rs = pst.executeQuery();
if(rs.next()){name += rs.getString(1);}
rs.close();
pst.close();
}catch (Exception ex){
ex.printStackTrace();
}
return name;
}
private void Regale(IcqProtocol proc, String uin, Vector v){ // угастить , подарить ))
if(!cmd.isChat(proc,uin) && !cmd.psp.testAdmin(uin)) return;
try{
Users us = cmd.srv.us.getUser(uin);// чел дарящий подарок
Users uss = cmd.srv.us.getUser(uin);// чел которому дарят подарок
int id_user = (Integer)v.get(0);//ид того кому дарим ))
int id = (Integer)v.get(1);// ид подарка (спиртного напитка)
// думаю причины , или пожелания смысла нет ставить )))
if (uss.state != UserWork.STATE_CHAT){// нет в сети
proc.mq.add(uin, "Этого пользователя нет в чате.");return;}
if (uss.id == 0){// нет такого пользователя в базе или ид равен 0
proc.mq.add(uin, "Пользователь не найден");return;}
if(id == us.id){//если пытаются подарить себе
proc.mq.add(uin,us.localnick +",нельзя дарить себе.");return;}
}catch (Exception ex){
ex.printStackTrace();
proc.mq.add(uin,"ошибка - "+ex.getMessage());
}
}
/**Масив для хранения промежуточных данных*/
public class BarExtend{
private String uin;
private long time;
private String msg;
private String cmd;
private Vector data;
/**Создание нового элемента*/
public BarExtend(String _uin, String _cmd, String _msg, Vector _data, long expire) {
time = System.currentTimeMillis() + expire;
uin = _uin;
cmd = _cmd;
msg = _msg;
data = _data;
}
public String getMsg(){
return msg;
}
public String getUin() {
return uin;
}
public String getCmd() {
return cmd;
}
public Vector getData() {
return data;
}
public boolean isExpire() {
return System.currentTimeMillis()>time;
}
}
}