CREATE TABLE IF NOT EXISTS `victorina` ( `id` int(11) NOT NULL, `question` varchar(255) NOT NULL, `answer` varchar(255) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
2) Импортировать список вопросов: p/s вопросы все не влезли так что по аналогии добавите свои
Code
-- -- Дамп данных таблицы `victorina` --
INSERT INTO `victorina` VALUES (1, 'Чeлoвeк, изyчaющий иcтopию мaлeнькoй чacти cтpaны', 'краевед'); INSERT INTO `victorina` VALUES (2, 'Чeлoвeк, измeнивший cвoим yбeждeниям и пepeшeдший в лaгepь пpoтивникoв', 'ренегат'); INSERT INTO `victorina` VALUES (3, 'Чeлoвeк, имя кoтopoгo cтaлo нapицaтeльным для зaтepявшиxcя тypиcтoв', 'робинзон'); INSERT INTO `victorina` VALUES (4, 'Чeлoвeк, к кoтopoмy oбpaщeны пpoизвeдeния пиcьмeннocти', 'читатель'); INSERT INTO `victorina` VALUES (5, 'Чeлoвeк, кoтopoгo ocoбeннo любят', 'любимец'); INSERT INTO `victorina` VALUES (6, 'Чeлoвeк, кoтopoмy дoзвoлeнo cтpeлять нa cтaдиoнe из пиcтoлeтa', 'стартер'); INSERT INTO `victorina` VALUES (7, 'Чeлoвeк, кoтopoмy пpиcyщи нeycтoйчивocть нacтpoeния, тeaтpaльнocть пoвeдeния', 'истерик'); INSERT INTO `victorina` VALUES (8, 'Чeлoвeк, кoтopый coдepжитcя пoд cтpaжeй', 'арестант'); INSERT INTO `victorina` VALUES (9, 'Чeлoвeк, кoтopый cвoй глac cчитaeт глacoм нapoдa', 'депутат'); INSERT INTO `victorina` VALUES (10, 'Чeлoвeк, кoтopый oтнocитcя к кoмy-нибyдь c пoчитaниeм', 'поклонник'); INSERT INTO `victorina` VALUES (11, 'Чeлoвeк, кoтopый xoдит вo cнe', 'лунатик'); INSERT INTO `victorina` VALUES (12, 'Чeлoвeк, кoтopый xoчeт жeнитьcя и paдyeтcя, чтo eщe нe cдeлaл этoгo', 'холостяк'); INSERT INTO `victorina` VALUES (13, 'Чeлoвeк, кoтopый в лecy нaпopoлcя нa cyк. Cyки c визгoм paзбeжaлиcь. (aнeкдoт.)', 'штирлиц'); INSERT INTO `victorina` VALUES (14, 'Чeлoвeк, кoтopый гpyб и дepзoк в oбpaщeнии', 'грубиян'); INSERT INTO `victorina` VALUES (15, 'Чeлoвeк, кoтopый живeт нa чyжoй cчeт, чyжим тpyдoм', 'тунеядец'); INSERT INTO `victorina` VALUES (16, 'Чeлoвeк, кoтopый зaнимaeтcя cyтяжничecтвoм, кляyзaми', 'ябедник'); INSERT INTO `victorina` VALUES (17, 'Чeлoвeк, кoтopый зaнимaeтcя чeм-нибyдь в cвoбoднoe вpeмя, нe кaк пpoфeccиoнaл', 'любитель'); INSERT INTO `victorina` VALUES (18, 'Чeлoвeк, кoтopый знaeт, кaк вocпитывaть чyжиx дeтeй, лyчшe, чeм cвoиx. Жюльeн Фaлкeнape', 'педагог'); INSERT INTO `victorina` VALUES (19, 'Чeлoвeк, кoтopый имeeт cклoннocть, пpиcтpacтиe к чeмy-нибyдь', 'любитель'); INSERT INTO `victorina` VALUES (20, 'Чeлoвeк, кoтopый любит cвoю cтpaнy, зaтo гpaждaн ee тepпeть нe мoжeт. Эвaн Эзap', 'патриот');
3) Добавти это в ChatCommandProc:
Code
public RobQuiz quiz = null;
Это в основной парсер:
Code
if(quiz==null){ quiz= new RobQuiz(srv); quiz.start(); } quiz.parse(uin, mmsg, srv.us.getUser(uin).room);
case 9://!правила commandRules(proc, uin, parser.parseArgs(tmsg), mmsg); break;
Сам метод:
Code
public void commandRules(IcqProtocol proc, String uin, Vector v, String mmsg){ int number = 0; String c = "Правила чата:\n"; String a = "all"; boolean isRules = false; if(comNew.containsKey(uin + "_rules")){ try{ number = Integer.parseInt(mmsg); }catch(NumberFormatException e){ proc.mq.add(uin, "Выбирите раздел правил."); return; } if(number < 0 || number >4){ proc.mq.add(uin, "Номер введен не корректно!"); return; } isRules = true; comNew.remove(uin + "_rules"); } if(!isRules){ proc.mq.add(uin, "Выберите раздел правил:" + "\n1 - Пользователям чата" + "\n2 - Модераторам чата" + "\n3 - Админам чата" + "\n4 - Правила игр" + "\n0 - Выход"); comNew.put(uin + "_rules", new NewExtend(uin, mmsg, mmsg,v, 2*60000)); return; } switch(number){ case 0 : proc.mq.add(uin, "Вы вышли!"); break; case 1 : String g = "users"; c += srv.us.getRules(a); c += srv.us.getRules(g); cutsend(proc, uin, c); break; case 2 : String n = "moder"; c += srv.us.getRules(a); c += srv.us.getRules(n); cutsend(proc, uin, c); break; case 3 : String k = "admin"; c += srv.us.getRules(a); c += srv.us.getRules(k); cutsend(proc, uin, c); break; case 4 : String j = "game"; c += srv.us.getRules(j); cutsend(proc, uin, c); break;
} }
///////режет сообщение на куски)) public void cutsend(IcqProtocol proc, String uin, String s) { char[] c = s.toCharArray(); s = ""; for (int i = 0; i < c.length; i++){ if( i == 1200 || i == 2000 || i == 3000 || i == 4000 || i == 5000 || i == 6000 ){ proc.mq.add(uin, s+c[i]); s = ""; }else s += c[i]; } proc.mq.add(uin, s); }
В UserWork:
Code
public String getRules(String type){ // правила чата String s = ""; String e = type; if (e.equals("") || e.equals(" ")) return s; try{ PreparedStatement pst; pst = db.getDb().prepareStatement("SELECT `info` FROM `rules` WHERE type ='" + type + "'"); ResultSet rs = pst.executeQuery(); while(rs.next()){ s += rs.getString(1) + "\n"; } }catch(Exception ex){ ex.printStackTrace(); } return s; }
INSERT INTO `rules` VALUES (0, 'all', 'В чате запрещено:'); INSERT INTO `rules` VALUES (1, 'all', '1.Мат.'); INSERT INTO `rules` VALUES (2, 'all', '2.Оскорбительное поведение по отношению к другим пользователям.'); INSERT INTO `rules` VALUES (3, 'all', '3.Использование ников оскорбительного содержания'); INSERT INTO `rules` VALUES (4, 'all', '4.Любые действия способные нанести ущерб программному или аппаратному обеспечению чата'); INSERT INTO `rules` VALUES (5, 'all', '5.Флуд, капс, спам.'); INSERT INTO `rules` VALUES (7, 'all', '6.Писать UIN(уин) в общем потоке Чата.'); INSERT INTO `rules` VALUES (8, 'all', '7.Смаил в ник, и большое количество символов.'); INSERT INTO `rules` VALUES (9, 'all', '8.Выяснение отношений в прeделах Чата.'); INSERT INTO `rules` VALUES (10, 'all', '9.Подписывать ники - випом, модом и админом.'); INSERT INTO `rules` VALUES (11, 'all', '10.Обсуждение действий администрации Чата.'); INSERT INTO `rules` VALUES (12, 'all', '11.Писать сообщения, которые могут быть восприняты как:'); INSERT INTO `rules` VALUES (13, 'all', ' • разжигание межнациональной или религиозной вражды.'); INSERT INTO `rules` VALUES (14, 'all', ' • экстремистская деятельность.'); INSERT INTO `rules` VALUES (15, 'all', ' • посягательство на честь, достоинство и репутацию.'); INSERT INTO `rules` VALUES (16, 'users', 'Пользователь имеет право:'); INSERT INTO `rules` VALUES (17, 'users', ' 1.Общаться.'); INSERT INTO `rules` VALUES (18, 'users', ' 2.Не общаться.'); INSERT INTO `rules` VALUES (19, 'users', ' 3.Пригласить в чат другого пользователя.'); INSERT INTO `rules` VALUES (20, 'users', ' 4.Передавать свой UIN(уин) в привате.'); INSERT INTO `rules` VALUES (21, 'users', ' 5.Оказать материальную поддержку Чату.'); INSERT INTO `rules` VALUES (22, 'users', 'Пользователь обязан:'); INSERT INTO `rules` VALUES (23, 'users', ' 1.Соблюдать правила чата.'); INSERT INTO `rules` VALUES (24, 'users', ' 2.Уважительно относится к другим пользователям.'); INSERT INTO `rules` VALUES (25, 'users', ' 3.Соблюдать указания администраторов и модераторов чата.'); INSERT INTO `rules` VALUES (26, 'moder', 'Модератор имеет право:'); INSERT INTO `rules` VALUES (27, 'moder', ' 1.На все права пользователя.'); INSERT INTO `rules` VALUES (28, 'moder', ' 2.Выгонять пользователей из чата по своему усмотрению, в целях соблюдения правил чата.'); INSERT INTO `rules` VALUES (29, 'moder', 'Модератор обязан:'); INSERT INTO `rules` VALUES (30, 'moder', ' 1.Соблюдать правила чата.'); INSERT INTO `rules` VALUES (31, 'moder', ' 2.Контролировать соблюдение правил другими пользователями.'); INSERT INTO `rules` VALUES (32, 'admin', 'Администратор имеет право:'); INSERT INTO `rules` VALUES (33, 'admin', ' 1.На все права пользователя и модератора.'); INSERT INTO `rules` VALUES (34, 'admin', ' 2.Назначать и снимать модераторов чата.'); INSERT INTO `rules` VALUES (35, 'admin', ' 3.Банить пользователей.'); INSERT INTO `rules` VALUES (36, 'admin', ' 4.Выгонять пользователей из чата по своему усмотрению, в целях соблюдения правил чата.'); INSERT INTO `rules` VALUES (37, 'admin', 'Владелец чата имеет право:'); INSERT INTO `rules` VALUES (38, 'admin', ' 1.На все права пользователя, модератора и администратора.'); INSERT INTO `rules` VALUES (39, 'admin', ' 2.Назначать и снимать модераторов чата.'); INSERT INTO `rules` VALUES (40, 'admin', ' 3.Включать и выключать чат по своему усмотрению.'); INSERT INTO `rules` VALUES (41, 'admin', ' 4.Банить пользователей.'); INSERT INTO `rules` VALUES (42, 'admin', 'Владелец чата обязан:'); INSERT INTO `rules` VALUES (43, 'admin', '1.Ничего не обязан.'); INSERT INTO `rules` VALUES (44, 'game', 'Правила игр. v 1.0'); INSERT INTO `rules` VALUES (45, 'game', '1. Игра "Незнайка".'); INSERT INTO `rules` VALUES (46, 'game', 'В комнате где проводится игра.'); INSERT INTO `rules` VALUES (47, 'game', 'Незнайка, задает слова с перепутаными буквами.'); INSERT INTO `rules` VALUES (48, 'game', 'Ваша цель, отгадать слово первым.'); INSERT INTO `rules` VALUES (49, 'game', '2. Игра "Викторина".'); INSERT INTO `rules` VALUES (50, 'game', 'Смысл игры заключается в том, что вы должны правильно'); INSERT INTO `rules` VALUES (51, 'game', 'ответить вопросы из различных областей знания.'); INSERT INTO `rules` VALUES (52, 'game', '3. Игра "Кости".'); INSERT INTO `rules` VALUES (53, 'game', 'Играют два игрока, Каждый игрок бросает по две кости. '); INSERT INTO `rules` VALUES (54, 'game', 'Сумма чисел на выпавших костях будет считаться очками игроков.'); INSERT INTO `rules` VALUES (55, 'game', 'Выигрывает тот игрок, у которого сумма чисел будет больше.');
P.S. Редактировать под себя и удалить старые правила.
Добавлено (26.11.2011, 12:35) --------------------------------------------- Новый Логгер. Автор: Spark. Т.к. его проект бесплатный и распростроняется по лицензии GPL, выложу. Описание: простой логгер, который записывает отображаемые в консоли данные в файл. На 1 день 1 файл. Если пользоваться ботом на другой день, создастся еще один файл с другой дате в имени, файл создается в зависимости от использования типа лога.
Для начала удалите библиотеку log4j
Класс(адреса путей до класса отличается от стандартного прее 4.):
Если хотите чтоб в логах отображось имя используемного класса, то в каждый класс, где используется вызов логинирования, в глобальную переменную вставить это:
Code
private static String name = "WebPanel"; //имя в "" зависит от названия класса
Ну и пример вызова лога:
Code
Log.info(name,"Произошла ошибка при загрузке файла: "+PROPS_FILE+"");// name - "" с глобальной переменной.
Езе не забываем в главный класс добавить в самое начало это:
Code
Log.init();
Конфигурационный файл кладем непосредственно в сорцы так скажем, т.е. он должен находится после компиляции в *.jar файле.
new UserPreference(UserPreference.CATEGORY_TYPE,"statuszapret", "Проверка статуса",""), new UserPreference(UserPreference.BOOLEAN_TYPE, "statuszap", "Включить проверку статуса?", getBooleanProperty("statuszap")), new UserPreference(UserPreference.STRING_TYPE,"about.zapret.st", "Список запрещенных символов в статусе", getStringProperty("about.zapret.st")),
Code
commands.put("!статус", new Cmd("!статус", "$s", ***));
Code
case ***: commandStatus(proc, uin, parser.parseArgs(tmsg));
Code
public void commandStatus(IcqProtocol proc, String uin, Vector v) { if (!isChat(proc, uin) && !psp.testAdmin(uin)) return; if (!auth(proc, uin, "status")) return; try { String lstatus = (String) v.get(0); int len = lstatus.length(); if (lstatus.equals("")) { Users uss = srv.us.getUser(uin); srv.cq.addMsg(uss.localnick + " [" + uss.id + "]" + " убрал статус", uss.sn, uss.room); Log.talk(uss.localnick + " [" + uss.id + "]" + " убрал статус"); PreparedStatement pst = srv.us.db.getDb().prepareStatement("DELETE FROM info WHERE type = 'STATUS' and user_id =" + uss.id); pst.execute(); pst.close(); proc.mq.add(uin, "Вы убрали статус"); return; } if(psp.getBooleanProperty("statuszap")){ //Вкл/Выкл запрещенных символов String[] g = psp.getStringProperty("about.zapret.st").split(";"); //Список запрещенных символов, где ; - разделитель String g1 = lstatus.toLowerCase(); for(int i=0;i<g.length;i++) if (g1.toLowerCase().indexOf(g[i])>=0){ proc.mq.add(uin,"В статусе: [" + lstatus + "] запрещенные символы!"); return; } } if (!(len > psp.getIntProperty("about.user.st"))) { Users uss = srv.us.getUser(uin); srv.cq.addMsg(uss.localnick + "[" + uss.id + "]" + " меняет статус на " + lstatus , uss.sn, uss.room); Log.talk(uss.localnick + "[" + uss.id + "]" + " меняет статус на " + lstatus); PreparedStatement pst = srv.us.db.getDb().prepareStatement("DELETE FROM info WHERE type = 'STATUS' and user_id =" + uss.id); pst.execute(); pst.close(); srv.us.db.info(uss.id, "", "STATUS", 0, "", lstatus); proc.mq.add(uin, "Вы сменили статус на " + lstatus); } else { proc.mq.add(uin, "Слишком длинный статус > "+psp.getIntProperty("about.user.st")+ ". Статус не изменён."); } } catch (Exception ex) { ex.printStackTrace(); Log.talk("Error save msg: " + ex.getMessage()); proc.mq.add(uin, "Ошибка изменения инфы " + ex.getMessage()); } }
if (!(Manager.getInstance().getServiceNames().contains(ns))) { SrvUtil.error(con, "Отсутствует сервис с таким именем!"); return; } ChatProps.getInstance(ns).setIntProperty("room_v", Integer.parseInt(rm)); ChatProps.getInstance(ns).save();
srvs_Chat(con);
} public void srvs_Chat_send(HttpConnection con) throws IOException { String uid = con.get("uid"); if (!(checkSession(uid))) { SrvUtil.error(con, "Ошибка авторизации!"); return; }
public String getMesages(String room) { if(mesages.containsKey(room)){ String[] msg=mesages.get(room).split("<end>"); String s=""; String s2=""; int n=0; if (msg.length>11)n=msg.length-11;//число означает кол-во отображаемых строк чата for (int i = n; i < msg.length; ++i){ s=s+msg[i]+"\n"; s2=s2+msg[i]+"<end>"; } mesages.remove(room); mesages.put(room,s2);
return s; }else return ""; }
в ChatQueue
в public void addMsg(String m, String user, int room) немного подправить
Code
/** * Добавить сообщение в очередь */ public void addMsg(String m, String user, int room) { Log.debug("CHAT: Add msg "+m); isNewMsg=true; mq.add(new MsgElement(m, msgCounter++, user, room)); save_msg(m, String.valueOf(room)); } public void save_msg(String msg, String room) {
ну вот собственно и все, вроде ничего не забыл... останется только добавить кнопку в админке на srvs_Chat
что здесь есть: - текстовое поле где выводятся сообщения чата с определенной комнаты - выбор просматриваемой комнаты - текстовое поле для отправки сообщений в чат - текстовое поле куда можно вписать свой ник для отображения в чате
Пакет: Multi-administration Версия: 1.9 Дата реализации: 14.11.2010 Характеристика: * Ваши клиенты (арендаторы сервисов) смогут сами вручную настроить чат по своему вкусу и подобию. * Защита от взлома за счёт подмены URL-адреса и многократной подборки паролей. * Контролирование каждого аккаунта, позволяет администратору не тратить своё время на выяснения и на поиски не упладчиков, а установить таймер работу каждого аккаунта. * Персонализация настроек каждого аккаунта, позволит администратору настроить ограничения для каждого аккаунта индивидуально и установть дополнительные тарифы на их расширение. * Присутствуют такие новшества как "Заблокировать доступ к аккаунту" - блокирует попытки войти в аккаунт. * Автоматическое создание/удаление файла конфигурации при создании/удалении аккаунта. * Никаких дополнительных методов и создания специальным страничек для пользовательских аккаунтов!
# Список багов.
Критические ошибки: < критических ошибок на данный момент нет >
Прочии ошибки: 1. Сервис, срок аккаунта которого истёк, то при запуске такого сервиса от имени администратора, появляется уведомление об успешном запуске сервиса, когда на самом деле запуск блокируется. 2. Продливать срок службы каждого аккаунта, администрации потребуется вручную. 3. Контролирование срока службы аккаунта делает его довольно не устойчивым, поскольку хозяину сервисов (если он имеет их 2, 3 и более) приходиться платить за работу всех сервисов (чтобы продлить срок аккаунта), а не за некоторые сервисы как хотелось бы.
# Новые возможности в следующей версии.
1. Корректировка пакета автосоздания файлов и каталогов, при создании нового аккаунта (будет добавлен отладчик, который вернёт стандартные настройки аккаунта при повреждении файла внешним путём). 2. Контролирование будет осуществляться по сервисно (т.е. метод продливания который присутствует сейчас в каждом аккаунте, будет переведён к сервисам, чтобы пользователь смог оплатить за некоторые работы сервисов в случае личных денежных проблем). 3. Продливание срока службы сервиса (из пункта 3) будет осуществляться специальным кодом, получить который можно будет у администрации сервера либо через услугу смс, после введя код в соответствующем окне, срок службы сервиса продливается на определённый срок, а по истечению автоматически блокируется. 4. Уменьшение кода мульти-админки и его все сферы защиты. 5. Внешние настройки и прочии файлы сервисов будут расположены в каталогах аккаунта в соответствии с сервисов и аккаунтов.
============== вставьте следующую строку туда где происходит отправка сообщения (в методе parse) if(psp.getBooleanProperty("gldr.on.off")) leadergame.parse(proc, uin, mmsg, srv.us.getUser(uin).room);
Code
// Лидер 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"), ""),
public void Vic(String word) { this.word = word; starsCount = word.length(); mix = new char[starsCount]; Arrays.fill(mix, '*'); }
public String HintVic() { String s = ""; replaceOne(); s = String.valueOf(getMix()); return s; }
private boolean testTime() { int time = psp.getIntProperty("vic.time"); return (System.currentTimeMillis()-cTime)>time*60000; }
/** * Проверяет сколько чел в чате, что бы не забивать очередь * @return false - если в чате не кого нет */ private boolean TestCountChat(){ int cnt = 0; Enumeration<String> e = srv.cq.uq.keys(); while(e.hasMoreElements()){ String i = e.nextElement(); Users us = srv.us.getUser(i); if(us.state==UserWork.STATE_CHAT){ cnt++; } } if(cnt == 0){ return false; } return true; }
private int getRND(int i) { return r.nextInt(i); }
new UserPreference(UserPreference.CATEGORY_TYPE,"vic", "Настройки викторины",""), new UserPreference(UserPreference.BOOLEAN_TYPE,"vic.on","Использовать викторину в чате?",getBooleanProperty("vic.on")), new UserPreference(UserPreference.STRING_TYPE,"vic.nick","Ник игры:",getStringProperty("vic.nick")), new UserPreference(UserPreference.INTEGER_TYPE,"vic.room","Комната для игры:",getIntProperty("vic.room")), new UserPreference(UserPreference.BOOLEAN_TYPE,"vic.balls","Баллы по звёздам? (сколько звёзд - столько баллов)",getBooleanProperty("vic.balls")), new UserPreference(UserPreference.INTEGER_TYPE,"vic.ball","Баллов за правильный ответ:",getIntProperty("vic.ball")), new UserPreference(UserPreference.INTEGER_TYPE,"vic.time","Интервал подачи вопроса (мин):",getIntProperty("vic.time")),
в ChatCommandProc
Code
в метод public class ChatCommandProc extends AbstractCommandProcessor {
public Victorina vic = null;
в метод parse
перед firstMsg(proc); if(psp.getBooleanProperty("vic.on") && vic == null){ vic = new Victorina(srv); vic.start(); }
вставьте следующую строку туда где происходит отправка сообщения в методе parse (после строки if(psp.getBooleanProperty("adm.useAdmin")) radm.parse(proc,uin,s,srv.us.getUser(uin).room);) if(psp.getBooleanProperty("vic.on")) vic.parse(uin, mmsg, srv.us.getUser(uin).room);
int serv = MainProps.getIntProperty("srv.servicesCount"); if(serv >= 10){ printMsg(con,"srvs_create","Вы не можете создавать больше 10 сервисов!"); return; }
Ограничение на УИНы
В классе MainPage метод srvs_props_uin_add
Code
int uins = Manager.getInstance().getService(ns).getProps().getIntProperty("conn.uinCount"); if(uins >= 8){ SrvUtil.error(con,"Нельзя больше 8 уинов для сервиса!"); return; }
new UserPreference(UserPreference.CATEGORY_TYPE,"warn", "Настройки предупреждений",""), new UserPreference(UserPreference.INTEGER_TYPE,"kol.warn","Количество предупреждений",getIntProperty("kol.warn")), new UserPreference(UserPreference.INTEGER_TYPE,"kol.warns","Сколько снимать предупреждений",getIntProperty("kol.warns")), new UserPreference(UserPreference.INTEGER_TYPE,"kick.warn","Время кика ",getIntProperty("kick.warn")),
В ChatCommandProc:
Code
commands.put("!предупреждение", new Cmd("!предупреждение", "$n", ***)); commands.put("!спредупреждение", new Cmd("!спредупреждение", "$n", ***));
Code
case ***: commandwarning(proc, uin,parser.parseArgs(tmsg)); break;
case ***: commandSwarning(proc, uin,parser.parseArgs(tmsg)); break;
Code
/**Автор *xakerok*/ private void commandwarning(IcqProtocol proc, String uin, Vector v) { if (!isChat(proc, uin)) return; if (!auth(proc, uin, "warning")) return; int s = ((Integer)v.get(0)).intValue(); Users us = srv.us.getUser(s); Users uss = srv.us.getUser(uin); if (us.id == 0) { proc.mq.add(uin, "Данный пользователь ещё не зарегестрировался в чате"); return; } proc.mq.add(uin, "Вы выставили предупреждение пользователю [" + us.id + "] " + us.localnick +", всего у него их [" +us.birthday+ "]\nПо достижению [" + psp.getIntProperty("kol.warn") + "] предупреждений(я) пользователь вылетит из чата на [" + psp.getIntProperty("kick.warn") + "] минут"); int warning = us.birthday + 1; us.birthday = warning; srv.us.updateUser(us); srv.getIcqProcess(us.basesn).mq.add(us.sn, "Вам выставленно предупреждение от пользователя: [" + uss.id + "] " + uss.localnick + ", у вас теперь предупреждений: [" + warning + "]\nПо достижению [" + psp.getIntProperty("kol.warn") + "] ты вылетишь из чата на [" + psp.getIntProperty("kick.warn") + "] минут"); int vremya = psp.getIntProperty("kick.warn"); if(us.birthday==psp.getIntProperty("kol.warn")) { proc.mq.add(us.sn, "Вы были выпнуты из чата на " + vremya + ". Причина: вы набрали "+psp.getIntProperty("kol.warn")+" предупреждений(я)\nВ следущий раз сидите тихо!"); us.birthday = 0; tkick(proc, us.sn, vremya); srv.us.clearCashAuth(us.id); srv.us.updateUser(us); } }
private void commandSwarning(IcqProtocol proc, String uin, Vector v){ if (!isChat(proc, uin)) return; if (!auth(proc, uin, "warning")) return; int ss = (Integer)v.get(0); Users us = srv.us.getUser(ss); Users uss = srv.us.getUser(uin); if(us.id==0) { proc.mq.add(uin,"Данный пользователь ещё не зарегестрировался в чате"); return; } if(us.state!=UserWork.STATE_CHAT){ proc.mq.add(uin,"Данный пользователь не в чате"); return; } if(us.birthday==0){ proc.mq.add(uin,"У пользователя итак нет предупреждений"); return; } proc.mq.add(uin, "Вы сняли предупреждение пользователю [" + us.id + "] " + us.localnick +", всего у него их [" +us.birthday+ "]"); int sswarning = psp.getIntProperty("kol.warns"); int swarning = us.birthday - sswarning; us.birthday = swarning; if (us.birthday < 0) { us.birthday = 0; } srv.us.updateUser(us); srv.getIcqProcess(us.basesn).mq.add(us.sn, "Вам уменьшен уровень предупреждений от пользователя: [" + uss.id + "] " + uss.localnick + ", у вас теперь предупреждений: [" + swarning + "]"); }
public void commandFAQ(IcqProtocol proc, String uin){ // by MasteR try{ Users us = srv.us.getUser(uin); proc.mq.add(uin, "FAQ по чату:\n"+ "Если ты зашел впервые в чат,то\n" + "прочитай внимательно команды !правила и !справка\n"+ "В чате есть комнаты в которых люди общаються на разные темы.\n"+ "Например есть комната `викторина` там люди отвечают на вопросы.\n"+ "Есть комнаты для игр,\n" + "справку по играм можно получить отправив боту команду !справка\n"+ "Если по вам стреляли то не стоит жаловаться админу(администратору)\n"+ "или моду(модератору) чата т.к это игра!\n"+ "Если тебя кикнули или закрыли в тюрьме прочитай правила чата !правила\n"+ "Если админ или мод не правильно поступил,дал бан или кик просто так напиши гл.админу чата\n"+ "Если вдруг ты увидишь как кто то ругаеться матом,будь там мод или\n"+ "Админ накатай жалобу гл.админу(это не стукачество),а правила!\n"+ "Для этого есть специальная команда: !жалоба (ид нарушителя) текст.\n"+ "Еще раз повторяю,в чате запрещено:\n"+ "Мат(даже скрытый),наезды,угрозы,реклама,призыв к чему то.\n"+ "Если вы увидите нарушения,напишите на это жалобу!\n"+ "Админ или мод НЕ имеют право вам угрожать вам баном или киком!\n"+ "Если вас забанили или кикнули и в причине НЕ указали причину то вы\n"+ "смело можете обратиться к гл.администратору с целью получения ответа от него и дальшейщего разбирательства\n"+ "вплодь до снятия прав у админа/мода чата!\n"+ "Старайтесь ознакомиться со всеми командами чата и не нарушать правила!\n"+ "Номер ICQ гл.админа: " + psp.getStringProperty("bot.adminUIN")); } catch (Exception ex) { Log.getLogger(srv.getName()).error("Ошибка - " + ex.getMessage()); } }
if (!info.started) { //Выбор противника int botIndex = -1; try { botIndex = Integer.parseInt(mmsg); } catch (NumberFormatException ex) { } if (botIndex<0 || botIndex>names.length) { ucmd = new CommandExtend(uin,ucmd.getCmd(),null,v2,300000); comMap.put(uin, ucmd); proc.mq.add(uin, "Рефери: Нужно указать число от 0 до " + names.length + ". Попробуйте ещё раз."); return; } if (botIndex==0) { comMap.remove(uin); proc.mq.add(uin, "Рефери: Вы отменили битву."); return; } info.started = true; botIndex--; info.health = health[botIndex]; info.damage = damage[botIndex]; info.prize = prize[botIndex]; info.names = names[botIndex]; ucmd = new CommandExtend(uin,ucmd.getCmd(),null,v2,300000); comMap.put(uin, ucmd); proc.mq.add(uin, "Рефери: Ваш противник: "+names[botIndex]+". Бой начат, выбирайте, куда нанести удар ("+placesList+")."); srv.cq.addMsg("РОБО-ВОИНЫ: Начинается бой между роботом "+names[botIndex]+" и человеком ["+u.id+"]"+u.localnick, u.sn, u.room); return; }
//Бой String strPlace = mmsg.trim().toLowerCase(); int userPlace = -1; for (int i = 0; i<places.length; i++) { if (strPlace.equals(places[i])) { userPlace = i; break; } } if (userPlace<0) { proc.mq.add(uin, "Рефери: Вы должны указать место из списка ("+placesList+"). Попробуйте ещё раз."); comMap.put(uin, new CommandExtend(uin,ucmd.getCmd(),null,v2,300000)); return; } int botPlace = r.nextInt(places.length); String msg; if (info.bot) { //Бот атакует if (userPlace==botPlace) { msg = "Рефери: "+info.names+" пытался ударить Вас в " + placesv[userPlace] + ", удар не удался.\n"; } else { int damage2 = (int)(info.damage*(r.nextDouble()/2+0.75));//Плюс-минус 25%
u.hp -= damage2; if (u.hp<=0) { u.hp = 0; if (u.ball>0) u.ball = 0; } msg = "Рефери: "+info.names+" ударил Вас в " + placesv[botPlace] + ". Вам нанесён урон - " + damage2 + " нр%. Ваше здоровье: " + u.hp + " нр%.\n"; srv.us.updateUser(u); if (u.hp==0) { msg += "Рефери: Бой завершён - Вы проиграли. Вы потеряли все денежные средства."; srv.cq.addMsg("РОБО-ВОИНЫ: В бое между РОБОТОМ "+info.names+" && ЧЕЛОВЕКОМ ["+u.id+"]"+u.localnick +" - ПОБЕДИЛ робот!!!", u.sn, u.room); comMap.remove(uin); proc.mq.add(uin, msg); return; } } } else { //Пользователь атакует if (userPlace==botPlace) { msg = "Рефери: "+info.names+" поставил блок на " + placesv[userPlace] + ", удар не удался.\n"; } else { int damage2 = (int) ((Math.random()*50)); if (damage2<1) damage2 = 5; else if (damage2>10000) damage2 = 10000; msg = "Рефери: "+info.names+" поставил блок на " + placesv[botPlace] + ", удар удался! "+info.names+"[H-"+info.health+"] нанесён урон - " + damage2 + " нр%.\n"; info.health -= damage2; if (info.health<=0) { int prize2 = (int)(info.prize*(r.nextDouble()/2+0.75)); //Плюс-минус 25% u.ball += prize2; srv.us.updateUser(u); msg += "Рефери: Бой завершён - Вы победили! Вы получаете "+prize2+" рублей. Поздравляем ! *YAHOO*"; srv.cq.addMsg("РОБО-ВОИНЫ: В бое между РОБОТОМ "+info.names+" && ЧЕЛОВЕКОМ ["+u.id+"]"+u.localnick +" - ПОБЕДИЛ человек!!!", u.sn, u.room); comMap.remove(uin); proc.mq.add(uin, msg); return; } } } if (info.bot) { info.bot = false; msg += "Рефери: Теперь Вы атакуете - выбирайте, куда нанести удар (" + placesList + ")."; } else { info.bot = true; msg += "Рефери: Теперь Вы защищаетесь - выбирайте, куда поставить блок (" + placesList + ")."; } proc.mq.add(uin, msg); comMap.put(uin, new CommandExtend(uin,ucmd.getCmd(),null,v2,300000)); }
В ChatProps
Code
setIntProperty("robiki",3); new UserPreference(UserPreference.STRING_TYPE,"robiki", "Комнаты игры", getStringProperty("robiki")),