Перейти к содержанию
Авторизация  
Warframe

Bug Report Npc Для L2Jfrozen.

Рекомендуемые сообщения

Bug Report NPC для L2JFrozen, для других сборок/хроник переписать не составит труда.

 

Описание:

NPC, при обращении открывается диалоговое окно с возможностью указать баг, который вы нашли в игре. Удобно для администрации и игроков - не нужно писать на форуме.

 

Установка:

Создаем класс вот здесь: com.l2jfrozen.gameserver.model.actor.instance

 

Даем ему название: L2BugReportInstance.java

 

И копируем туда данный код:

 

/*
* This program is free software: you can redistribute it and/or modify it under
* the terms of the GNU General Public License as published by the Free Software
* Foundation, either version 3 of the License, or (at your option) any later
* version.
* 
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
* details.
* 
* You should have received a copy of the GNU General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.l2jfrozen.gameserver.model.actor.instance;

import java.io.*;
import java.util.StringTokenizer;

import javolution.text.TextBuilder;

import com.l2jfrozen.gameserver.ai.CtrlIntention;
import com.l2jfrozen.gameserver.model.L2World;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.network.L2GameClient;
import com.l2jfrozen.gameserver.network.clientpackets.Say2;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
import com.l2jfrozen.gameserver.network.serverpackets.CreatureSay;
import com.l2jfrozen.gameserver.network.serverpackets.MyTargetSelected;
import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jfrozen.gameserver.network.serverpackets.ValidateLocation;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;

/**
* @author squallcs
*
*/
public class L2BugReportInstance extends L2FolkInstance
{
private static String _type;

public L2BugReportInstance(int objectId, L2NpcTemplate template)
{
super(objectId, template);
}

@Override
public void onBypassFeedback(L2PcInstance player, String command)
{
if (command.startsWith("send_report"))
{
StringTokenizer st = new StringTokenizer(command);
st.nextToken();
String msg = null;
String type = null;
type = st.nextToken();
msg = st.nextToken();
try
{
while (st.hasMoreTokens())
{
msg = msg + " " + st.nextToken();
}

sendReport(player, type, msg);
}
catch (StringIndexOutOfBoundsException e)
{
}
}
}

static
{
new File("log/BugReports/").mkdirs();
}

private void sendReport(L2PcInstance player, String command, String msg)
{
String type = command;
L2GameClient info = player.getClient().getConnection().getClient();

if (type.equals("General"))
_type = "General";
if (type.equals("Fatal"))
_type = "Fatal";
if (type.equals("Misuse"))
_type = "Misuse";
if (type.equals("Balance"))
_type = "Balance";
if (type.equals("Other"))
_type = "Other";

try
{
String fname = "log/BugReports/" + player.getName() + ".txt";
File file = new File(fname);
boolean exist = file.createNewFile();
if (!exist)
{
player.sendMessage("You have already sent a bug report, GMs must check it first.");
return;
}
FileWriter fstream = new FileWriter(fname);
BufferedWriter out = new BufferedWriter(fstream);
out.write("Character Info: " + info + "\r\nBug Type: " + _type + "\r\nMessage: " + msg);
player.sendMessage("Report sent. GMs will check it soon. Thanks...");

for (L2PcInstance allgms : L2World.getInstance().getAllGMs())
allgms.sendPacket(new CreatureSay(0, Say2.SHOUT, "Bug Report Manager", player.getName() + " sent a bug report."));

System.out.println("Character: " + player.getName() + " sent a bug report.");
out.close();
}
catch (Exception e)
{
player.sendMessage("Something went wrong try again.");
}
}

@Override
public void onAction(L2PcInstance player)
{
if (!canTarget(player))
{
return;
}

if (this != player.getTarget())
{
player.setTarget(this);

player.sendPacket(new MyTargetSelected(getObjectId(), 0));

player.sendPacket(new ValidateLocation(this));
}
else if (!canInteract(player))
{
player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
}
else
{
showHtmlWindow(player);
}

player.sendPacket(new ActionFailed());
}

private void showHtmlWindow(L2PcInstance activeChar)
{
NpcHtmlMessage nhm = new NpcHtmlMessage(5);
TextBuilder replyMSG = new TextBuilder("");

replyMSG.append("<html><title>Bug Report Manager</title>");
replyMSG.append("<body><br><br><center>");
replyMSG.append("<table border=0 height=10 bgcolor=\"444444\" width=240>");
replyMSG.append("<tr><td align=center><font color=\"00FFFF\">Hello " + activeChar.getName() + ".</font></td></tr>");
replyMSG.append("<tr><td align=center><font color=\"00FFFF\">There are no Gms online</font></td></tr>");
replyMSG.append("<tr><td align=center><font color=\"00FFFF\">and you want to report something?</font></td></tr>");
replyMSG.append("</table><br>");
replyMSG.append("<img src=\"L2UI.SquareWhite\" width=280 height=1><br><br>");
replyMSG.append("<table width=250><tr>");
replyMSG.append("<td><font color=\"LEVEL\">Select Report Type:</font></td>");
replyMSG.append("<td><combobox width=105 var=type list=General;Fatal;Misuse;Balance;Other></td>");
replyMSG.append("</tr></table><br><br>");
replyMSG.append("<multiedit var=\"msg\" width=250 height=50><br>");
replyMSG.append("<br><img src=\"L2UI.SquareWhite\" width=280 height=1><br><br><br><br><br><br><br>");
replyMSG.append("<button value=\"Send Report\" action=\"bypass -h npc_" + getObjectId() + "_send_report $type $msg\" width=204 height=20 back=\"sek.cbui75\" fore=\"sek.cbui75\">");
replyMSG.append("</center></body></html>");

nhm.setHtml(replyMSG.toString());
activeChar.sendPacket(nhm);

activeChar.sendPacket(new ActionFailed());
}

}

 

Создаем NPC с любым id и типом L2BugReport.

 

Баг репорты игроков сохраняются здесь: /gameserver/logs/BugReport

 

Credits: sQuaLL (From L2jFrozen Forum)

  • Upvote 8

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

полезно )

 

Очень удобно, плюс есть категории багов, игрок при написании своего баг репорта может указать, к чему относится данная недоработка. (General;Fatal;Misuse;Balance;Other)

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Сделал как на данной картинке: pre_1374328990__gdsgsdgsdbgv.png

 

private void showHtmlWindow(L2PcInstance activeChar)
{
NpcHtmlMessage nhm = new NpcHtmlMessage(5);
TextBuilder replyMSG = new TextBuilder("");

replyMSG.append("<html><title>Баг Репорт Менеджер</title>");
replyMSG.append("<body><br><br><center>");
replyMSG.append("<table border=0 height=10 bgcolor=\"444444\" width=240>");
replyMSG.append("<tr><td align=center><font color=\"00FFFF\">Здравствуйте " + activeChar.getName() + ".</font></td></tr>");
replyMSG.append("<tr><td align=center><font color=\"00FFFF\">Нету Админов в онлайне</font></td></tr>");
replyMSG.append("<tr><td align=center><font color=\"00FFFF\">и Вы знаете баг?</font></td></tr>");
replyMSG.append("</table><br>");
replyMSG.append("<img src=\"L2UI.SquareWhite\" width=280 height=1><br><br>");
replyMSG.append("<table width=250><tr>");
replyMSG.append("<td><font color=\"LEVEL\">Выберите тип репорта:</font></td>");
replyMSG.append("<td><combobox width=105 var=type list=Общий;Критический;Дюпы;Баланс;Другое></td>");
replyMSG.append("</tr></table><br><br>");
replyMSG.append("<multiedit var=\"msg\" width=250 height=50><br>");
replyMSG.append("<br><img src=\"L2UI.SquareWhite\" width=280 height=1><br><br><br><br><br><br><br>");
replyMSG.append("<button value=\"Передать Репорт\" action=\"bypass -h npc_" + getObjectId() + "_send_report $type $msg\" width=204 height=20 back=\"sek.cbui75\" fore=\"sek.cbui75\">");
replyMSG.append("</center></body></html>");

nhm.setHtml(replyMSG.toString());
activeChar.sendPacket(nhm);

activeChar.sendPacket(new ActionFailed());
}

 

При русификации данного места: var=type list=Общий;Критический;Дюпы;Баланс;Другое , не забываем про:

if (type.equals("General"))
  _type = "General";
 if (type.equals("Fatal"))
  _type = "Fatal";
 if (type.equals("Misuse"))
  _type = "Misuse";
 if (type.equals("Balance"))
  _type = "Balance";
 if (type.equals("Other"))
  _type = "Other";

 

Всем спасибо за внимание!

  • Upvote 3

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чем петиции не устраивают? И я думаю админу каждый раз смотреть что там создало не в кайф

Форум по практичнее

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А чем петиции не устраивают? И я думаю админу каждый раз смотреть что там создало не в кайф

Форум по практичнее

 

Вполне удобно один раз в день зайти и скачать папку с баг репортами, чем следить за каждым сообщением на форуме, тем более игрокам свойственно флудить.

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Больше 1-го репорта не отправить. Пока админ не проверит

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

можно как-то защитить от спама?

 

Можно сделать ограничения на отправку баг репорта. Допустим: с одного IP/HWID дать возможность писать всего 3 раза в день.

 

А так, на данный момент, ограничения в одно сообщение до отправки администрацией (в целях защиты от спама).

Изменено пользователем Warframe
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как сделать что бы в игре сообщение в баг репорт! можно было писать по русски??

Изменено пользователем LionKnight

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неплохо. Спасибо за идею, дам своему кодеру эту же идею, пускай делает для хф мне =)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

замечательная идея, да и реализация нормальная.

ТС не будет против если я возьму за основу, и интегрирую в сборку эту фишку? Немного изменю, можно сделать связь с форумом )) и постить туда сразу...

Конечно с Вашим авторством...

Изменено пользователем DreamBoss

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ТС врятли будет против, т.к. данный функционал лежит в шаре на забугорских проектах уже больше 3 месяцев...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

замечательная идея, да и реализация нормальная.

ТС не будет против если я возьму за основу, и интегрирую в сборку эту фишку? Немного изменю, можно сделать связь с форумом )) и постить туда сразу...

Конечно с Вашим авторством...

Автор наработки не ТС

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Установка:

Создаем класс вот здесь: com.l2jfrozen.gameserver.model.actor.instance

Не могу разобраться с этим пунктом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Как сделать что бы в игре сообщение в баг репорт! можно было писать по русски??

нужно выполнить следующие танцы с бубном:

из этого

replyMSG.append("<myltiedit var=\"msg\" width=250 height=50><br>");

сделать это

replyMSG.append("<edit var=\"msg\" width=250 height=50><br>");

кто внимателен поймет)

 

 

 

ну а если помог?! ТЫ ЗНАЕШЬ ЧТО ДЕЛАТЬ ;)

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Установка:

Создаем класс вот здесь: com.l2jfrozen.gameserver.model.actor.instance

Не могу разобраться с этим пунктом

это путь com/l2jfrozen/gameserver/model/actor/instance [.=/]

Изменено пользователем yokki
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

нужно выполнить следующие танцы с бубном:

из этого

replyMSG.append("<myltiedit var=\"msg\" width=250 height=50><br>");

сделать это

replyMSG.append("<edit var=\"msg\" width=250 height=50><br>");

кто внимателен поймет)

 

 

 

ну а если помог?! ТЫ ЗНАЕШЬ ЧТО ДЕЛАТЬ ;)

 

Можешь скинуть исправленный класс? Дам пару плюсов :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...