А может еще и интерфейс выложишь? :unsure: Чтоб уж совсем всё шикарно было.
2) Зачем устанавливать флэш О_О ты о чём вообще? оО Просто создал флэш плюшку и вставил в страничку и идёт уже как одно целое А Flash Player никто не отменял. (: Без его присутствия на компьютере ни одна флешка в браузере работать не станет.
Покапав классы айвеба, я нашел функцию бана чата персонажа и бана самого персонажа. Так что вполне можно сделать кнопочку "Бан чата" напротив ника персонажа) Мм.. Так я к тому и веду) Вообще в айвебе столько шикарных функций, которые многоуважаемый BlackPoint забыл или не захотел локализовать. Начиная от бана игрока, заканчивая отправкой вещей на почту. :D А так это всё можно перенести и в привычный нам айвеб. Делов, наверно, минут на 20. Это вместе с перерывом на покушать и туалет. Вот и сама функция(правда кусками): // forbidrole.jsp // Всё-таки громоздко для чата. Вот бан всего аккаунта без суда и следствия // нам подойдет ЛУЧШЕ! (: String fbdtype = request.getParameter("fbdtype"); String forbidtime = request.getParameter("forbidtime"); String roleid = request.getParameter("roleid"); String reason = reason = request.getParameter("reason"); if (fbdtype == null) fbdtype = ""; if (forbidtime == null) forbidtime = ""; if (roleid == null) roleid = ""; if (reason == null) reason = ""; if (userid == null) userid = ""; LogFactory.getLog("forbidrole.jsp").info( "operator=" + AuthFilter.getRemoteUser(session)); LogInfo info = null; int uid = -1; int rid = -1; GMService gs = new GMServiceImpl(); ............ int gmroleid = -1; int localsid = -1; int forbid_time = -1; byte fbd_type = -1; if (roleid != null && roleid.trim().length() > 0) { try { rid = Integer.parseInt(roleid); } catch (Exception e) { out.println("ID персонажа, Пожалуйста, введите номер! <font color=red size=2>" + e.getMessage() + "</font><br>"); } try { fbd_type = Byte.parseByte(fbdtype); } catch (Exception ex) { out.println("Тип бана, Пожалуйста, введите номер! <font color=red size=2>" + ex.getMessage() + "</font><br>"); } try { forbid_time = Integer.parseInt(forbidtime); forbid_time = forbid_time * 60; } catch (Exception exp) { out.println("Продолжительность бана, Пожалуйста, введите целое число! <font color=red size=2>" + exp.getMessage() + "</font><br>"); } info = new LogInfo(rid, "", "Персонаж забанен"); int flag = gs.forbidRole(fbd_type, gmroleid, localsid, rid, forbid_time, reason, info); String result = null; switch (flag) { case -1: result = "Ошибка"; break; default: result = flag + ""; } String fbdType = ""; switch (fbd_type) { case 100: fbdType = "Запрет на вход"; break; case 101: fbdType = "Бан чата"; break; case 102: fbdType = "Запрет на обмен"; break; case 103: fbdType = "Запрет на торговлю"; } Всё просто до безобразия)) Сам с удовольствием пользуюсь, в определенных случаях, конечно же!
Так я скопировал то, что ронни там в своем LiveChat'е понаписал. Много чего можно добавить... Например, добавить кнопочку забанить. Правда придется банить весь акк, но нам пох.. Мы же джедаи) Так же можно добавить, например, бан за оскорбление. Реализовать только сложно будет... Добавить как-нибудь там 2 массива: name[] = {'админ', 'admin', 'ADMIN', 'администратор'}; insult[] = {'лох', 'чмо', 'пидар', 'и т.д'}; // прошу прощения, привел только для примера И если после перебирания найдутся соответствия. Автоматически выдается бан на акк... Только думаю, что это замедлит парсинг логов. Но это всего лишь пример! Это уже тебе сидеть и думать! Много еще чего можно прикрутить)
Омг....читать логи чата-верх дибилизма и тупизма ага да... сделать может любой знающий пхп на уровне чтоб открыть файл и заюзать теги *_* Дайож конект к серверу и чтение чата в реальном времени >.> Вообще-то pwAdmin устроен точно таким же образом. Вот тебе даже кусочек кода: BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(pw_server_path + "/logservice/logs/world2.chat"))); while(i>lines.size()-show_lines && i>=0) { line = lines.get(i); color = "<font color=\"#aaaaaa\">"; time = line.substring(0, 19); line = line.substring(line.indexOf(": chat :")+9); sender = "*****"; recipient = "*****"; message = new String("*****"); byte[] temp = Base64.decode(line.substring(line.indexOf("msg=")+4)); // Whisper if(show_whisper && line.startsWith("Whisper")) { message = new String(temp, "UTF-16LE"); sender = line.substring(line.indexOf("src=")+4); sender = "Player(" + sender.substring(0, sender.indexOf(" ")) + ")"; recipient = line.substring(line.indexOf("dst=")+4); recipient = "Player(" + recipient.substring(0, recipient.indexOf(" ")) + ")"; color = "<font color=\"#ff00dd\">"; } // Faction if(show_faction && line.startsWith("Guild")) { message = new String(temp, "UTF-16LE"); sender = line.substring(line.indexOf("src=")+4); sender = "Player(" + sender.substring(0, sender.indexOf(" ")) + ")"; recipient = line.substring(line.indexOf("fid=")+4); recipient = "Faction(" + recipient.substring(0, recipient.indexOf(" ")) + ")"; color = "<font color=\"#00fffc\">"; } // Chatroom if(show_rooms && line.startsWith("Group")) { message = new String(temp, "UTF-16LE"); sender = line.substring(line.indexOf("src=")+4); sender = "Player(" + sender.substring(0, sender.indexOf(" ")) + ")"; recipient = line.substring(line.indexOf("room=")+5); recipient = "Room(" + recipient.substring(0, recipient.indexOf(" ")) + ")"; color = "<font color=\"#000000\">"; } if(line.startsWith("Chat")) { // Common if(show_common && line.indexOf("chl=0") != -1) { message = new String(temp, "UTF-16LE"); sender = line.substring(line.indexOf("src=")+4); sender = "Player(" + sender.substring(0, sender.indexOf(" ")) + ")"; recipient = "Common"; color = "<font color=\"#000000\">"; } // World if(show_world && line.indexOf("chl=1") != -1) { message = new String(temp, "UTF-16LE"); sender = line.substring(line.indexOf("src=")+4); sender = "Player(" + sender.substring(0, sender.indexOf(" ")) + ")"; recipient = "World"; color = "<font color=\"#ffee00\">"; } // Squad if(show_squad && line.indexOf("chl=2") != -1) { message = new String(temp, "UTF-16LE"); sender = line.substring(line.indexOf("src=")+4); sender = "Player(" + sender.substring(0, sender.indexOf(" ")) + ")"; recipient = "Squad"; color = "<font color=\"#00ff00\">"; } // Trade if(show_trade && line.indexOf("chl=7") != -1) { message = new String(temp, "UTF-16LE"); sender = line.substring(line.indexOf("src=")+4); sender = "Player(" + sender.substring(0, sender.indexOf(" ")) + ")"; recipient = "Trade"; color = "<font color=\"#ff8800\">"; } // Broadcast if(line.indexOf("chl=9") != -1) { message = new String(temp, "UTF-16LE"); sender = line.substring(line.indexOf("src=")+4); sender = "Player(" + sender.substring(0, sender.indexOf(" ")) + ")"; recipient = "System"; color = "<font color=\"#ff2200\">"; } } /* // Smileys causing errors... removing entries == 0 from byte array for(int n=0; n<temp.length; n++) { if(temp[n] != 0) { message += (char)(temp[n]); } } */ if(show_smiley_picture) { message = message.replaceAll(".<\\d+>...<\\d+.\\d+>", "<img src=\"smiley.gif\" align=\"absmiddle\"></img>"); } if(!show_colors) { color = "<font color=\"#000000\">"; } out.print("<tr>"); out.print("<td align=\"center\" style=\"border-bottom: 1px solid #cccccc;\"> time: </td>"); out.print("<td style=\"border-bottom: 1px solid #cccccc;\"><b>" + time + "</b></td>"); out.print("<td align=\"center\" style=\"border-bottom: 1px solid #cccccc;\"> from: </td>"); out.print("<td style=\"border-bottom: 1px solid #cccccc;\"><b>" + color + sender + "</font></b></td>"); out.print("<td align=\"center\" style=\"border-bottom: 1px solid #cccccc;\"> to: </td>"); out.print("<td style=\"border-bottom: 1px solid #cccccc;\"><b>" + color + recipient + "</font></b></td>"); out.print("<td align=\"center\" style=\"border-bottom: 1px solid #cccccc;\"> msg: </td>"); out.print("<td style=\"border-bottom: 1px solid #cccccc;\"><b>" + color + message + "</font></b></td>"); out.println("</tr>"); i--; } Kenpachi, можешь для своей 3ей версии скопировать сам алгоритм. Пробежался глазами, вроде довольно грамотно все раскидано. Я думаю, лучше великого ronny только Билл Гейтс. И то ему не до ПВ сейчас... Дайож чат на jsp Что же ты заладил со своей джавой... :D Включать, аж целый айвеб для того, чтобы почитать чат ИМХО глупо.
Ладно, ладно.. Извините!) Можно уже по сабжу
Ну я так и думал, что разделом ошибся. Да и там Общих вопросов нет. Только по языкам категории.
Доброго времени суток, уважаемые форумчане.. Подскажите, пожалуйста, как декомпелировать файлы сервера?. Такие как gs, gfactiond и др. Декомпелирую через IDA Pro Advanced как бинарник, мне выдает что-то вроде seg000:000000000010000B db 0 seg000:000000000010000C db 6Ch ; l seg000:000000000010000D db 0 seg000:000000000010000E db 0 seg000:000000000010000F db 0 Ну и собственно hex.. Только от него не много толку. Мне бы переменные, функции посмотреть. Заранее спасибо...
Имена участников (разделяйте запятой).