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

Ребят Помогите Сделать Отображение К Пути Файла

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

Ребят помогите реализовать вывод в чат названия открытой HTML.

Т.е. когда говоришь с НПЦ или открываешь Админку и т.д. - в чате показывало путь до HTML с открытым диалогом! Чтобы не копаться постоянно в файлах. Желательно чтобы показывало только Админу, а не всем игрокам!

В JAVA я еще пока 0, но хорошо разбираюсь в HTML. Хочу правельно РУССИФИЦИРОВАТЬ Диалоги!

Почитав форум понял что надо прописать значения в файл NpcHtmlMessage.java

 

Исходный Код Voron.dev Epilogue Last + Наработки Jloopchief

 

Код NpcHtmlMessage.java

package l2p.gameserver.serverpackets;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import l2p.extensions.scripts.ScriptManager;
import l2p.extensions.scripts.ScriptManager.ScriptClassAndMethod;
import l2p.gameserver.model.L2ObjectsStorage;
import l2p.gameserver.model.L2Player;
import l2p.gameserver.model.entity.SevenSignsFestival.SevenSignsFestival;
import l2p.gameserver.model.instances.L2NpcInstance;
import l2p.util.Files;
import l2p.util.GArray;
import l2p.util.Strings;
import l2p.util.Util;

public class NpcHtmlMessage extends L2GameServerPacket
{
private int _npcObjId, _questId;
private String _html;
private String _file = null;
private GArray<String> _replaces = new GArray<String>();
private int item_id = 0;
private boolean have_appends = false;
private final StackTraceElement[] ceatedFrom; //TODO убрать отладку
public NpcHtmlMessage(L2Player player, L2NpcInstance npc, String filename, int val)
{
_npcObjId = npc.getObjectId();
player.setLastNpc(npc);
GArray<ScriptClassAndMethod> appends = ScriptManager.dialogAppends.get(npc.getNpcId());
if(appends != null && appends.size() > 0)
{
have_appends = true;
if(filename != null && filename.equalsIgnoreCase("data/html/npcdefault.htm"))
{
setHtml(""); // контент задается скриптами через DialogAppend_
}
else
{
setFile(filename);
}
String replaces = "";
// Добавить в конец странички текст, определенный в скриптах.
Object[] script_args = new Object[] {new Integer(val)};
for(ScriptClassAndMethod append : appends)
{
Object obj = player.callScripts(append.scriptClass, append.method, script_args);
if(obj != null)
{
 replaces += obj;
}
}
if(!replaces.equals(""))
{
replace("</body>", "\n" + Strings.bbParse(replaces) + "</body>");
}
}
else
{
setFile(filename);
}
replace("%npcId%", String.valueOf(npc.getNpcId()));
replace("%npcname%", npc.getName());
replace("%festivalMins%", SevenSignsFestival.getInstance().getTimeToNextFestivalStr());
ceatedFrom = Thread.currentThread().getStackTrace();
}
public NpcHtmlMessage(L2Player player, L2NpcInstance npc)
{
if(npc == null)
{
_npcObjId = 5;
player.setLastNpc(null);
}
else
{
_npcObjId = npc.getObjectId();
player.setLastNpc(npc);
}
ceatedFrom = Thread.currentThread().getStackTrace();
}
public NpcHtmlMessage(int npcObjId)
{
_npcObjId = npcObjId;
// TODO player.setLastNpc(null);
ceatedFrom = Thread.currentThread().getStackTrace();
}
public final NpcHtmlMessage setHtml(String text)
{
if(!text.contains("<html>"))
{
text = "<html><body>" + text + "</body></html>";
} //<title>Message:</title> <br><br><br>
_html = text;
return this;
}
public final NpcHtmlMessage setFile(String file)
{
_file = file;
return this;
}
/**
* WTF is this? Never used.
*/
public final NpcHtmlMessage setItemId(int _item_id)
{
item_id = _item_id;
return this;
}
public void setQuest(int quest)
{
_questId = quest;
}
protected String html_load(String name, String lang)
{
String content = Files.read(name, lang);
if(content == null)
{
content = "Can't find file'" + name + "'";
}
return content;
}
public NpcHtmlMessage replace(String pattern, String value)
{
_replaces.add(pattern);
_replaces.add(value);
return this;
}
private static final Pattern objectId = Pattern.compile("%objectId%");
private static final Pattern playername = Pattern.compile("%playername%");
@Override
protected final void writeImpl()
{
L2Player player = getClient().getActiveChar();
if(player == null)
{
return;
}
if(_file != null) //TODO может быть не очень хорошо сдесь это делать...
{
String content = Files.read(_file, player);
if(content == null)
{
setHtml(have_appends && _file.endsWith(".htm") ? "" : _file);
}
else
{
setHtml(content);
}
}
for(int i = 0; i < _replaces.size(); i += 2)
{
_html = _html.replaceAll(_replaces.get(i), _replaces.get(i + 1));
}
if(objectId == null)
{
System.out.println("objectId == null");
Thread.dumpStack();
}
if(_html == null)
{
L2NpcInstance npc = L2ObjectsStorage.getNpc(_npcObjId);
System.out.println("[WARNING] NpcHtmlMessage, _html == null, npc: " + npc.toString());
for(StackTraceElement e : ceatedFrom)
{
System.out.println("\t" + e);
}
System.out.println(Util.dumpObject(this, true, false, true));
return;
}
Matcher m = objectId.matcher(_html);
if(m != null)
{
_html = m.replaceAll(String.valueOf(_npcObjId));
}
_html = playername.matcher(_html).replaceAll(player.getName());
player.cleanBypasses(false);
if(_questId > 0)
{
writeC(EXTENDED_PACKET);
writeH(0x8d);
writeD(_npcObjId);
writeS(_html);
writeD(_questId);
}
else
{
writeC(0x19);
writeD(_npcObjId);
writeS(_html);
writeD(item_id);
}
}
}

 

Приношу извенения за столь длинный вставленный код- но так и не понял как это все спрятать под сполер!

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

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


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

в оверах уже это сделано можно и от туда вытянуть. кстати хорошая идея тоже копну гляну что и как и куда

 

если уж есть кто знает подскажите

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


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

public static void sendDebugMessage(L2Player player, String message)

{

Functions.sendMessage("HTML: " + _file );

if(!player.isGM())

return;

player.sendMessage(message);

}

 

Может я не туда вставлял, но при компиле куча ошибок получается. В результате не компилиться.

Если вам не сложно напишите куда вставить в какой строчке. JAVA пока не мой конек! mega_shok

 

Вот часть Ошибок

    [javac] O:\Lineage 2\Сервера\Сервера Gracia Epilogue\Исходники\voron-jloopchief_epilogue\java\l2p\gameserver\serverpackets\WrappedMessage.java:11: warning: [rawtypes] found raw type: MMOConnection
   [javac]     public WrappedMessage(byte[] data, MMOConnection con)
   [javac]    								    ^
   [javac]   missing type arguments for generic class MMOConnection<T>
   [javac]   where T is a type-variable:
   [javac]	 T extends MMOClient declared in class MMOConnection
   [javac] O:\Lineage 2\Сервера\Сервера Gracia Epilogue\Исходники\voron-jloopchief_epilogue\java\l2p\gameserver\skills\funcs\FuncEnchant.java:102: warning: [rawtypes] found raw type: Enum
   [javac]                 Enum itemType = item.getItemType();
   [javac]                 ^
   [javac]   missing type arguments for generic class Enum<E>
   [javac]   where E is a type-variable:
   [javac]	 E extends Enum<E> declared in class Enum
   [javac] O:\Lineage 2\Сервера\Сервера Gracia Epilogue\Исходники\voron-jloopchief_epilogue\java\l2p\gameserver\tables\NpcTable.java:54: warning: [rawtypes] found raw type: GArray
   [javac]         _npcsByLevel = new GArray[100];

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


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

А где, прости, ошибки? Ты слово Error от Warning не можешь отличить?

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


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

Суть не в том Error или Warning! Суть в том что не компилируется! Сразу куча Ошибок! А как их называть ваше право! Вы если можете помочь- то буду признателен. Ато критика есть, а помощи нет, кроме как от Расторгуев!

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


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

Суть не в том Error или Warning! Суть в том что не компилируется! Сразу куча Ошибок! А как их называть ваше право! Вы если можете помочь- то буду признателен. Ато критика есть, а помощи нет, кроме как от Расторгуев!

 

Ну так выложи лог ошибок, а не варнингов, чтобы помочь.

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


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

Вот лог ошибок

[javac] O:\Lineage 2\Сервера\Сервера Gracia Epilogue\Исходники\voron-jloopchief_epilogue\java\l2p\gameserver\serverpackets\NpcHtmlMessage.java:104: error: non-static variable _file cannot be referenced from a static context
[javac]		 Functions.sendMessage("HTML: " + _file );
[javac]										 ^
[javac] O:\Lineage 2\Сервера\Сервера Gracia Epilogue\Исходники\voron-jloopchief_epilogue\java\l2p\gameserver\serverpackets\NpcHtmlMessage.java:104: error: cannot find symbol
[javac]		 Functions.sendMessage("HTML: " + _file );
[javac]		 ^
[javac] symbol: variable Functions
[javac] location: class NpcHtmlMessage
[javac] 2 errors
[javac] 64 warnings
BUILD FAILED
O:\Lineage 2\Сервера\Сервера Gracia Epilogue\Исходники\voron-jloopchief_epilogue\build.xml:39: Compile failed; see the compiler error output for details.
Total time: 17 seconds

Изменено пользователем AwakenDev
Сказал же, только ошибок

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


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

Во первых добавь импорт для Functions.

 

Допустим, как у меня

 

import sw.awaken.gameserver.scripts.Functions;

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

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


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

Добавил строчку с таким кодом

import l2p.extensions.scripts.Functions;

Вот лог ошибок

   [javac] O:\Lineage 2\Сервера\Сервера Gracia Epilogue\Исходники\voron-jloopchief_epilogue\java\l2p\gameserver\serverpackets\NpcHtmlMessage.java:113: error: non-static variable _file cannot be referenced from a static context
   [javac]		 Functions.sendMessage("HTML: " + _file );
   [javac]										  ^
   [javac] O:\Lineage 2\Сервера\Сервера Gracia Epilogue\Исходники\voron-jloopchief_epilogue\java\l2p\gameserver\serverpackets\NpcHtmlMessage.java:113: error: no suitable method found for sendMessage(String)
   [javac]		 Functions.sendMessage("HTML: " + _file );
   [javac]				  ^
   [javac]	 method Functions.sendMessage(CustomMessage,L2Player) is not applicable
   [javac]	   (actual and formal argument lists differ in length)
   [javac]	 method Functions.sendMessage(String,L2Player) is not applicable
   [javac]	   (actual and formal argument lists differ in length)

Не компилиться, кстате посмотрел файл Functions у меня там даже упомянания нет для sendDebugMessage!

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

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


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

Посмотрел как сделано в другой сборке.

Вобщем в файл NpcHtmlMessage.java добавил код после 151 строчки

    if (player.isGM())
  {
    Functions.sendDebugMessage(player, "HTML: " + this._file);
  }

 

В файл Functions.java добавил код

  public static void sendDebugMessage(L2Player player, String message)
{
   if (!player.isGM())
 {
  return;
 }
   player.sendMessage(message);
}

 

Все теперь работает- показывает пути и названия самих HTML с диалогами, но вот пути и названия файлов с квестами не показывает!

Можно ли как-то доработать данный код? Квесты у меня находятся в датапаке по пути data\scripts\quests\папка с кветом\сами файлы квестов.htm

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


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

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

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

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

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

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

Войти

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

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

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

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

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