Веселая система валидации байпасов который гордится гринд и заявляет типо он придумал и реализовал.
Смотрим и веселимся:
Сообщение от
Спойлер
package core.gameserver.enums;
public enum HtmlActionScope
{
NPC_HTML,
NPC_QUEST_HTML,
COMMUNITY_BOARD_HTML,
TUTORIAL_HTML
}
Смотрим лыжу:
http://svn.l2jserver.com/trunk/L2J_S...tionScope.java
Видимо лыжа украла у гринда создав машину времени и раньше залив себе. а FBIagent вообще не достоин быть автором.
Дальше смотрим его мего защиту байпассов:
[QUOTE="Спойлер"]
[COLOR="#363940"]
package core.gameserver.utils;
import java.util.Locale;
import core.gameserver.enums.HtmlActionScope;
import core.gameserver.model.Player;
public class ActionCacheUtil
{
public static final char VAR_PARAM_START_CHAR = '$';
private static final void buildHtmlBypassCache(Player player, HtmlActionScope scope, String html)
{
String htmlLower = html.toLowerCase(Locale.ENGLISH);
int bypassEnd = 0;
int bypassStart = htmlLower.indexOf("=\"bypass ", bypassEnd);
int bypassStartEnd;
while (bypassStart != -1)
{
bypassStartEnd = bypassStart + 9;
bypassEnd = htmlLower.indexOf("\"", bypassStartEnd);
if (bypassEnd == -1)
{
break;
}
int hParamPos = htmlLower.indexOf("-h ", bypassStartEnd);
String bypass;
if ((hParamPos != -1) && (hParamPos _replaces = new ArrayList();
protected boolean have_appends = false;
public NpcHtmlMessage(Player player, int npcId, String filename, int val)
{
List appends = Scripts.dialogAppends.get(npcId);
if(appends != null && appends.size() > 0)
{
have_appends = true;
if(filename != null && filename.equalsIgnoreCase("npcdefault.htm"))
setHtml(""); // контент задается скриптами через DialogAppend_
else
setFile(filename);
String replaces = "";
// Добавить в конец странички текст, определенный в скриптах.
Object[] script_args = new Object[] { new Integer(val) };
for(ScriptClassAndMethod append : appends)
{
Object obj = Scripts.getInstance().callScripts(player, append.className, append.methodName, script_args);
if(obj != null)
replaces += obj;
}
if(!replaces.equals(""))
replace("", "\n" + Strings.bbParse(replaces) + "");
}
else
setFile(filename);
}
public NpcHtmlMessage(Player player, NpcInstance npc, String filename, int val)
{
this(player, npc.getNpcId(), filename, val);
_npcObjId = npc.getObjectId();
//FIXME [G1ta0] не есть истина, исправить
player.setLastNpc(npc);
replace("%npcId%", String.valueOf(npc.getNpcId()));
replace("%npcname%", npc.getName());
replace("%festivalMins%", SevenSignsFestival.getInstance().getTimeToNextFest ivalStr());
}
public NpcHtmlMessage(Player player, NpcInstance npc)
{
if(npc == null)
{
_npcObjId = 5;
player.setLastNpc(null);
}
else
{
_npcObjId = npc.getObjectId();
player.setLastNpc(npc);
}
}
public NpcHtmlMessage(int npcObjId)
{
_npcObjId = npcObjId;
}
public final NpcHtmlMessage setHtml(String text)
{
if(!text.contains(""))
text = "" + text + ""; //Message:
_html = text;
return this;
}
public final NpcHtmlMessage setFile(String file)
{
_file = file;
if(_file.startsWith("data/html/"))
{
_log.info("NpcHtmlMessage: need fix : " + file, new Exception());
_file = _file.replace("data/html/", "");
}
return this;
}
public NpcHtmlMessage replace(String pattern, String value)
{
if(pattern == null || value == null)
return this;
_replaces.add(pattern);
_replaces.add(value);
return this;
}
// npcstring-?.dat
public NpcHtmlMessage replaceNpcString(String pattern, NpcString npcString, Object... arg)
{
if(pattern == null)
return this;
if(npcString.getSize() != arg.length)
throw new IllegalArgumentException("Not valid size of parameters: " + npcString);
_replaces.add(pattern);
_replaces.add(HtmlUtils.htmlNpcString(npcString, arg));
return this;
}
@Override
protected void writeImpl()
{
Player player = getClient().getActiveChar();
if(player == null)
return;
if(_file != null) //TODO может быть не очень хорошо здесь это делать...
{
if(player.isGM())
Functions.sendDebugMessage(player, "HTML: " + _file);
String content = HtmCache.getInstance().getNotNull(_file, player);
String content2 = HtmCache.getInstance().getNullable(_file, player);
if(content2 == null)
setHtml(have_appends && _file.endsWith(".htm") ? "" : content);
else
setHtml(content);
}
for(int i = 0; i