OverWorld/LostWorld

Unix

Путник
Пользователь
Сообщения
54
Розыгрыши
0
Репутация
0
Реакции
3
Баллы
0
<javac srcdir="${src.commons}" destdir="${build.classes}" debug="${debug}" source="1.6" target="1.6" encoding="UTF-8" nowarn="off" classpath="${build.classpath}">
<compilerarg value="-Xlint:all" />
</javac>
В этих же строках версия явы указывается?
 
Есть проблемка завернул скрипты из даты в jar,сервер запускается все нормально,проблема в том что не работает quest,мой косяк или же в самом исходе?
Безымянный.jpg
 

Исходники не для вас :/
 
Если выложил бы году так в 2011

Если бы его и не впиливали то люди не тратили бы времени

это прям как в ново-русской народной поговорке...

...на каждую хитрую жопу найдется *уй с винтом, а на каждый *уй с винтом найдется жопа с закаулками...
 
это прям как в ново-русской народной поговорке...

...на каждую хитрую жопу найдется *уй с винтом, а на каждый *уй с винтом найдется жопа с закаулками...
История с javolution интересная и поучительная. Впилили, не впилили - но он был, его использовали. Другое дело отношение к происходящему.
 
Научится, быть может. Не все ж сразу код по ооп писали. Да и понимать местами не понимадли
Полностью согласен,есть люди кто по заканчивал институты и не бум бум,а есть люди которые увлекаются и это их хобби в свободное время и знают в итоге больше чем люди с аттестатом(дипломом)

Исходники не для вас :/
Если же "исходники не для вас" к чему тогда раздел на форуме вопросы новичков?Ведь если мне помогают,то свой опыт я смогу передать и дальше,но не умничать...

Нит(( открой, почитай, там же просто
Почитал,но мне кажется рыть нужно в Function
 
Если же "исходники не для вас" к чему тогда раздел на форуме вопросы новичков?Ведь если мне помогают,то свой опыт я смогу передать и дальше,но не умничать...
завернул скрипты из даты в jar
Соответственно вы не понимаете для чего скрипты держать в jar и естественно как все команды продавать топ сборочку скомпилив скрипты и вперед.
И Новички не полезут в исходный код и соответственно это не вопрос для новичков.
Почитал,но мне кажется рыть нужно в Function
:( Но почему же скрипты загружаются у вас из датапака а не из библиотека соответственно и нужно немного переписать Scripts.java
 

    ツsmile10ツ

    Баллов: 9
    Да покс зачем ему лоад из либки.
Я же указал где проблема, смысел спорить?)0)) Скинь под спойлер, гляну
package org.mmocore.gameserver.scripts;

import org.mmocore.commons.compiler.Compiler;
import org.mmocore.commons.compiler.MemoryClassLoader;
import org.mmocore.gameserver.Config;
import org.mmocore.gameserver.model.Player;
import org.mmocore.gameserver.model.quest.Quest;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.apache.commons.lang3.reflect.MethodUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;

public class Scripts
{
private static final Logger _log = LoggerFactory.getLogger(Scripts.class);

private static final String SCRIPTS_JAR_FILE = "./lib/scripts.jar";

private static final Scripts _instance = new Scripts();

public static final Scripts getInstance()
{
return _instance;
}

public static final Map<Integer, List<ScriptClassAndMethod>> dialogAppends = new HashMap<Integer, List<ScriptClassAndMethod>>();
public static final Map<String, ScriptClassAndMethod> onAction = new HashMap<String, ScriptClassAndMethod>();
public static final Map<String, ScriptClassAndMethod> onActionShift = new HashMap<String, ScriptClassAndMethod>();

private final Compiler compiler = new Compiler();
private final Map<String, Class<?>> _classes = new TreeMap<String, Class<?>>();

private Scripts()
{
load();
}

private boolean loadJarFile(List<Class<?>> classes)
{
boolean result = false;
JarInputStream stream = null;
try
{
stream = new JarInputStream(new FileInputStream(SCRIPTS_JAR_FILE));
JarEntry entry = null;
while((entry = stream.getNextJarEntry()) != null)
{
if(entry.getName().contains(ClassUtils.INNER_CLASS_SEPARATOR) || !entry.getName().endsWith(".class"))
continue;
final String name = entry.getName().replace(".class", "").replace("/", ".");
Class<?> clazz = ClassLoader.getSystemClassLoader().loadClass(name);
if(Modifier.isAbstract(clazz.getModifiers()))
continue;
classes.add(clazz);
}
result = true;
}
catch(Exception e)
{
_log.error("Fail to load scripts.jar!", e);
classes.clear();
}
finally
{
IOUtils.closeQuietly(stream);
}
return result;
}

/**
* Вызывается при загрузке сервера. Загрузает все скрипты в data/scripts. Не
* инициирует объекты и обработчики.
*
* Return true, если загрузка прошла успешно
*/
private void load()
{
_log.info("Scripts: Loading...");
List<Class<?>> classes = new ArrayList<Class<?>>();
boolean result = false;

if(new File(SCRIPTS_JAR_FILE).exists())
result = loadJarFile(classes);

if(!result)
result = load(classes);

if(!result)
{
_log.error("Scripts: Failed loading scripts!");
Runtime.getRuntime().exit(0);
return;
}

_log.info("Scripts: Loaded " + classes.size() + " classes.");

Class<?> clazz;
for(int i = 0; i < classes.size(); i++)
{
clazz = classes.get(i);
if(Config.DONTLOADQUEST)
if(ClassUtils.isAssignable(clazz, Quest.class))
continue;
_classes.put(clazz.getName(), clazz);
}
}

/**
* Вызывается при загрузке сервера. Инициализирует объекты и обработчики.
*/
public void init()
{
for(Class<?> clazz : _classes.values())
{
addHandlers(clazz);

if(ClassUtils.isAssignable(clazz, ScriptFile.class))
try
{
((ScriptFile) clazz.newInstance()).onLoad();
}
catch(Exception e)
{
_log.error("Scripts: Failed running " + clazz.getName() + ".onLoad()", e);
}
}
}

/**
* Перезагрузить все скрипты в data/scripts
*
* Return true, если скрипты перезагружены успешно
*/
public boolean reload()
{
_log.info("Scripts: Reloading...");
for(Class<?> clazz : _classes.values())
{
if(ClassUtils.isAssignable(clazz, ScriptFile.class))
try
{
((ScriptFile) clazz.newInstance()).onReload();
}
catch(Exception e)
{
_log.error("Scripts: Failed running {}.onReload()", clazz.getName(), e);
}
removeHandlers(clazz);
}
_classes.clear();

load();
init();
return true;
}

/**
* Вызывается при завершении работы сервера
*/
public void shutdown()
{
for(Class<?> clazz : _classes.values())
{
if(ClassUtils.isAssignable(clazz, Quest.class))
continue;

if(ClassUtils.isAssignable(clazz, ScriptFile.class))
try
{
((ScriptFile) clazz.newInstance()).onShutdown();
}
catch(Exception e)
{
_log.error("Scripts: Failed running " + clazz.getName() + ".onShutdown()", e);
}
}
}

/**
* Перезагрузить все скрипты в data/scripts/target
*
* @param classes, для загруженных скриптов
* Return true, если загрузка прошла успешно
*/
private boolean load(List<Class<?>> classes)
{
Collection<File> scriptFiles = Collections.emptyList();

File file = new File(Config.DATAPACK_ROOT, "data/scripts/".replace(".", "/") + ".java");
if(file.isFile())
{
scriptFiles = new ArrayList<File>(1);
scriptFiles.add(file);
}
else
{
file = new File(Config.DATAPACK_ROOT, "data/scripts/");
if(file.isDirectory())
scriptFiles = FileUtils.listFiles(file, FileFilterUtils.suffixFileFilter(".java"), FileFilterUtils.directoryFileFilter());
}

if(scriptFiles.isEmpty())
return false;

Class<?> clazz;
boolean success;

if(success = compiler.compile(scriptFiles))
{
MemoryClassLoader classLoader = compiler.getClassLoader();
for(String name : classLoader.getLoadedClasses())
{
if(name.contains(ClassUtils.INNER_CLASS_SEPARATOR))
continue;

try
{
clazz = classLoader.loadClass(name);
if(Modifier.isAbstract(clazz.getModifiers()))
continue;
classes.add(clazz);
}
catch(ClassNotFoundException e)
{
success = false;
_log.error("Scripts: Can't load script class: " + name, e);
}
}
classLoader.clear();
}

return success;
}

private void addHandlers(Class<?> clazz)
{
try
{
for(Method method : clazz.getMethods())
if(method.getName().contains("DialogAppend_"))
{
Integer id = Integer.parseInt(method.getName().substring(13));
List<ScriptClassAndMethod> handlers = dialogAppends.get(id);
if(handlers == null)
{
handlers = new ArrayList<ScriptClassAndMethod>();
dialogAppends.put(id, handlers);
}
handlers.add(new ScriptClassAndMethod(clazz.getName(), method.getName()));
}
else if(method.getName().contains("OnAction_"))
{
String name = method.getName().substring(9);
onAction.put(name, new ScriptClassAndMethod(clazz.getName(), method.getName()));
}
else if(method.getName().contains("OnActionShift_"))
{
String name = method.getName().substring(14);
onActionShift.put(name, new ScriptClassAndMethod(clazz.getName(), method.getName()));
}
}
catch(Exception e)
{
_log.error("", e);
}
}

private void removeHandlers(Class<?> script)
{
try
{
for(List<ScriptClassAndMethod> entry : dialogAppends.values())
{
List<ScriptClassAndMethod> toRemove = new ArrayList<ScriptClassAndMethod>();
for(ScriptClassAndMethod sc : entry)
if(sc.className.equals(script.getName()))
toRemove.add(sc);
for(ScriptClassAndMethod sc : toRemove)
entry.remove(sc);
}

List<String> toRemove = new ArrayList<String>();
for(Map.Entry<String, ScriptClassAndMethod> entry : onAction.entrySet())
if(entry.getValue().className.equals(script.getName()))
toRemove.add(entry.getKey());
for(String key : toRemove)
onAction.remove(key);

toRemove = new ArrayList<String>();
for(Map.Entry<String, ScriptClassAndMethod> entry : onActionShift.entrySet())
if(entry.getValue().className.equals(script.getName()))
toRemove.add(entry.getKey());
for(String key : toRemove)
onActionShift.remove(key);
}
catch(Exception e)
{
_log.error("", e);
}
}

public Object callScripts(String className, String methodName)
{
return callScripts(null, className, methodName, null, null);
}

public Object callScripts(String className, String methodName, Object[] args)
{
return callScripts(null, className, methodName, args, null);
}

public Object callScripts(String className, String methodName, Map<String, Object> variables)
{
return callScripts(null, className, methodName, ArrayUtils.EMPTY_OBJECT_ARRAY, variables);
}

public Object callScripts(String className, String methodName, Object[] args, Map<String, Object> variables)
{
return callScripts(null, className, methodName, args, variables);
}

public Object callScripts(Player caller, String className, String methodName)
{
return callScripts(caller, className, methodName, ArrayUtils.EMPTY_OBJECT_ARRAY, null);
}

public Object callScripts(Player caller, String className, String methodName, Object[] args)
{
return callScripts(caller, className, methodName, args, null);
}

public Object callScripts(Player caller, String className, String methodName, Map<String, Object> variables)
{
return callScripts(caller, className, methodName, ArrayUtils.EMPTY_OBJECT_ARRAY, variables);
}

public Object callScripts(Player caller, String className, String methodName, Object[] args, Map<String, Object> variables)
{
Object o;
Class<?> clazz;

clazz = _classes.get(className);
if(clazz == null)
{
_log.error("Script class " + className + " not found!");
return null;
}

try
{
o = clazz.newInstance();
}
catch(Exception e)
{
_log.error("Scripts: Failed creating instance of " + clazz.getName(), e);
return null;
}

if(variables != null && !variables.isEmpty())
for(Map.Entry<String, Object> param : variables.entrySet())
try
{
FieldUtils.writeField(o, param.getKey(), param.getValue());
}
catch(Exception e)
{
_log.error("Scripts: Failed setting fields for " + clazz.getName(), e);
}

if(caller != null)
try
{
Field field = null;
if((field = FieldUtils.getField(clazz, "self")) != null)
FieldUtils.writeField(field, o, caller.getRef());
}
catch(Exception e)
{
_log.error("Scripts: Failed setting field for " + clazz.getName(), e);
}

Object ret = null;
try
{
Class<?>[] parameterTypes = new Class<?>[args.length];
for(int i = 0; i < args.length; i++)
parameterTypes = args != null ? args.getClass() : null;

ret = MethodUtils.invokeMethod(o, methodName, args, parameterTypes);
}
catch(NoSuchMethodException nsme)
{
_log.error("Scripts: No such method " + clazz.getName() + "." + methodName + "()!");
}
catch(InvocationTargetException ite)
{
_log.error("Scripts: Error while calling " + clazz.getName() + "." + methodName + "()", ite.getTargetException());
}
catch(Exception e)
{
_log.error("Scripts: Failed calling " + clazz.getName() + "." + methodName + "()", e);
}

return ret;
}

public Map<String, Class<?>> getClasses()
{
return _classes;
}

public static class ScriptClassAndMethod
{

public final String className;
public final String methodName;

public ScriptClassAndMethod(String className, String methodName)
{
this.className = className;
this.methodName = methodName;
}
}
}

Я даже хз
 
package org.mmocore.gameserver.scripts;

import org.mmocore.commons.compiler.Compiler;
import org.mmocore.commons.compiler.MemoryClassLoader;
import org.mmocore.gameserver.Config;
import org.mmocore.gameserver.model.Player;
import org.mmocore.gameserver.model.quest.Quest;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.ClassUtils;
import org.apache.commons.lang3.reflect.FieldUtils;
import org.apache.commons.lang3.reflect.MethodUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.*;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;

public class Scripts
{
private static final Logger _log = LoggerFactory.getLogger(Scripts.class);

private static final String SCRIPTS_JAR_FILE = "./lib/scripts.jar";

private static final Scripts _instance = new Scripts();

public static final Scripts getInstance()
{
return _instance;
}

public static final Map<Integer, List<ScriptClassAndMethod>> dialogAppends = new HashMap<Integer, List<ScriptClassAndMethod>>();
public static final Map<String, ScriptClassAndMethod> onAction = new HashMap<String, ScriptClassAndMethod>();
public static final Map<String, ScriptClassAndMethod> onActionShift = new HashMap<String, ScriptClassAndMethod>();

private final Compiler compiler = new Compiler();
private final Map<String, Class<?>> _classes = new TreeMap<String, Class<?>>();

private Scripts()
{
load();
}

private boolean loadJarFile(List<Class<?>> classes)
{
boolean result = false;
JarInputStream stream = null;
try
{
stream = new JarInputStream(new FileInputStream(SCRIPTS_JAR_FILE));
JarEntry entry = null;
while((entry = stream.getNextJarEntry()) != null)
{
if(entry.getName().contains(ClassUtils.INNER_CLASS_SEPARATOR) || !entry.getName().endsWith(".class"))
continue;
final String name = entry.getName().replace(".class", "").replace("/", ".");
Class<?> clazz = ClassLoader.getSystemClassLoader().loadClass(name);
if(Modifier.isAbstract(clazz.getModifiers()))
continue;
classes.add(clazz);
}
result = true;
}
catch(Exception e)
{
_log.error("Fail to load scripts.jar!", e);
classes.clear();
}
finally
{
IOUtils.closeQuietly(stream);
}
return result;
}

/**
* Вызывается при загрузке сервера. Загрузает все скрипты в data/scripts. Не
* инициирует объекты и обработчики.
*
* @return true, если загрузка прошла успешно
*/
private void load()
{
_log.info("Scripts: Loading...");
List<Class<?>> classes = new ArrayList<Class<?>>();
boolean result = false;

if(new File(SCRIPTS_JAR_FILE).exists())
result = loadJarFile(classes);

if(!result)
result = load(classes);

if(!result)
{
_log.error("Scripts: Failed loading scripts!");
Runtime.getRuntime().exit(0);
return;
}

_log.info("Scripts: Loaded " + classes.size() + " classes.");

Class<?> clazz;
for(int i = 0; i < classes.size(); i+:)
{
clazz = classes.get(i);
if(Config.DONTLOADQUEST)
if(ClassUtils.isAssignable(clazz, Quest.class))
continue;
_classes.put(clazz.getName(), clazz);
}
}

/**
* Вызывается при загрузке сервера. Инициализирует объекты и обработчики.
*/
public void init()
{
for(Class<?> clazz : _classes.values())
{
addHandlers(clazz);

if(ClassUtils.isAssignable(clazz, ScriptFile.class))
try
{
((ScriptFile) clazz.newInstance()).onLoad();
}
catch(Exception e)
{
_log.error("Scripts: Failed running " + clazz.getName() + ".onLoad()", e);
}
}
}

/**
* Перезагрузить все скрипты в data/scripts
*
* @return true, если скрипты перезагружены успешно
*/
public boolean reload()
{
_log.info("Scripts: Reloading...");
for(Class<?> clazz : _classes.values())
{
if(ClassUtils.isAssignable(clazz, ScriptFile.class))
try
{
((ScriptFile) clazz.newInstance()).onReload();
}
catch(Exception e)
{
_log.error("Scripts: Failed running {}.onReload()", clazz.getName(), e);
}
removeHandlers(clazz);
}
_classes.clear();

load();
init();
return true;
}

/**
* Вызывается при завершении работы сервера
*/
public void shutdown()
{
for(Class<?> clazz : _classes.values())
{
if(ClassUtils.isAssignable(clazz, Quest.class))
continue;

if(ClassUtils.isAssignable(clazz, ScriptFile.class))
try
{
((ScriptFile) clazz.newInstance()).onShutdown();
}
catch(Exception e)
{
_log.error("Scripts: Failed running " + clazz.getName() + ".onShutdown()", e);
}
}
}

/**
* Перезагрузить все скрипты в data/scripts/target
*
* @param classes, для загруженных скриптов
* @return true, если загрузка прошла успешно
*/
private boolean load(List<Class<?>> classes)
{
Collection<File> scriptFiles = Collections.emptyList();

File file = new File(Config.DATAPACK_ROOT, "data/scripts/".replace(".", "/") + ".java");
if(file.isFile())
{
scriptFiles = new ArrayList<File>(1);
scriptFiles.add(file);
}
else
{
file = new File(Config.DATAPACK_ROOT, "data/scripts/");
if(file.isDirectory())
scriptFiles = FileUtils.listFiles(file, FileFilterUtils.suffixFileFilter(".java"), FileFilterUtils.directoryFileFilter());
}

if(scriptFiles.isEmpty())
return false;

Class<?> clazz;
boolean success;

if(success = compiler.compile(scriptFiles))
{
MemoryClassLoader classLoader = compiler.getClassLoader();
for(String name : classLoader.getLoadedClasses())
{
if(name.contains(ClassUtils.INNER_CLASS_SEPARATOR))
continue;

try
{
clazz = classLoader.loadClass(name);
if(Modifier.isAbstract(clazz.getModifiers()))
continue;
classes.add(clazz);
}
catch(ClassNotFoundException e)
{
success = false;
_log.error("Scripts: Can't load script class: " + name, e);
}
}
classLoader.clear();
}

return success;
}

private void addHandlers(Class<?> clazz)
{
try
{
for(Method method : clazz.getMethods())
if(method.getName().contains("DialogAppend_"))
{
Integer id = Integer.parseInt(method.getName().substring(13));
List<ScriptClassAndMethod> handlers = dialogAppends.get(id);
if(handlers == null)
{
handlers = new ArrayList<ScriptClassAndMethod>();
dialogAppends.put(id, handlers);
}
handlers.add(new ScriptClassAndMethod(clazz.getName(), method.getName()));
}
else if(method.getName().contains("OnAction_"))
{
String name = method.getName().substring(9);
onAction.put(name, new ScriptClassAndMethod(clazz.getName(), method.getName()));
}
else if(method.getName().contains("OnActionShift_"))
{
String name = method.getName().substring(14);
onActionShift.put(name, new ScriptClassAndMethod(clazz.getName(), method.getName()));
}
}
catch(Exception e)
{
_log.error("", e);
}
}

private void removeHandlers(Class<?> script)
{
try
{
for(List<ScriptClassAndMethod> entry : dialogAppends.values())
{
List<ScriptClassAndMethod> toRemove = new ArrayList<ScriptClassAndMethod>();
for(ScriptClassAndMethod sc : entry)
if(sc.className.equals(script.getName()))
toRemove.add(sc);
for(ScriptClassAndMethod sc : toRemove)
entry.remove(sc);
}

List<String> toRemove = new ArrayList<String>();
for(Map.Entry<String, ScriptClassAndMethod> entry : onAction.entrySet())
if(entry.getValue().className.equals(script.getName()))
toRemove.add(entry.getKey());
for(String key : toRemove)
onAction.remove(key);

toRemove = new ArrayList<String>();
for(Map.Entry<String, ScriptClassAndMethod> entry : onActionShift.entrySet())
if(entry.getValue().className.equals(script.getName()))
toRemove.add(entry.getKey());
for(String key : toRemove)
onActionShift.remove(key);
}
catch(Exception e)
{
_log.error("", e);
}
}

public Object callScripts(String className, String methodName)
{
return callScripts(null, className, methodName, null, null);
}

public Object callScripts(String className, String methodName, Object[] args)
{
return callScripts(null, className, methodName, args, null);
}

public Object callScripts(String className, String methodName, Map<String, Object> variables)
{
return callScripts(null, className, methodName, ArrayUtils.EMPTY_OBJECT_ARRAY, variables);
}

public Object callScripts(String className, String methodName, Object[] args, Map<String, Object> variables)
{
return callScripts(null, className, methodName, args, variables);
}

public Object callScripts(Player caller, String className, String methodName)
{
return callScripts(caller, className, methodName, ArrayUtils.EMPTY_OBJECT_ARRAY, null);
}

public Object callScripts(Player caller, String className, String methodName, Object[] args)
{
return callScripts(caller, className, methodName, args, null);
}

public Object callScripts(Player caller, String className, String methodName, Map<String, Object> variables)
{
return callScripts(caller, className, methodName, ArrayUtils.EMPTY_OBJECT_ARRAY, variables);
}

public Object callScripts(Player caller, String className, String methodName, Object[] args, Map<String, Object> variables)
{
Object o;
Class<?> clazz;

clazz = _classes.get(className);
if(clazz == null)
{
_log.error("Script class " + className + " not found!");
return null;
}

try
{
o = clazz.newInstance();
}
catch(Exception e)
{
_log.error("Scripts: Failed creating instance of " + clazz.getName(), e);
return null;
}

if(variables != null && !variables.isEmpty())
for(Map.Entry<String, Object> param : variables.entrySet())
try
{
FieldUtils.writeField(o, param.getKey(), param.getValue());
}
catch(Exception e)
{
_log.error("Scripts: Failed setting fields for " + clazz.getName(), e);
}

if(caller != null)
try
{
Field field = null;
if((field = FieldUtils.getField(clazz, "self")) != null)
FieldUtils.writeField(field, o, caller.getRef());
}
catch(Exception e)
{
_log.error("Scripts: Failed setting field for " + clazz.getName(), e);
}

Object ret = null;
try
{
Class<?>[] parameterTypes = new Class<?>[args.length];
for(int i = 0; i < args.length; i+:)
parameterTypes = args != null ? args.getClass() : null;

ret = MethodUtils.invokeMethod(o, methodName, args, parameterTypes);
}
catch(NoSuchMethodException nsme)
{
_log.error("Scripts: No such method " + clazz.getName() + "." + methodName + "()!");
}
catch(InvocationTargetException ite)
{
_log.error("Scripts: Error while calling " + clazz.getName() + "." + methodName + "()", ite.getTargetException());
}
catch(Exception e)
{
_log.error("Scripts: Failed calling " + clazz.getName() + "." + methodName + "()", e);
}

return ret;
}

public Map<String, Class<?>> getClasses()
{
return _classes;
}

public static class ScriptClassAndMethod
{

public final String className;
public final String methodName;

public ScriptClassAndMethod(String className, String methodName)
{
this.className = className;
this.methodName = methodName;
}
}
}
Я даже хз
🤦 Откуда вы это взяли в лосте совсем по другому
 
Инфа 99,9% что дело в private static final String SCRIPTS_JAR_FILE = "./lib/scripts.jar";
 
Инфа 99,9% что дело в private static final String SCRIPTS_JAR_FILE = "./lib/scripts.jar";
Щас пороюсь,попробуй сам накалякать а не вырывать куски

Инфа 99,9% что дело в private static final String SCRIPTS_JAR_FILE = "./lib/scripts.jar";
? Откуда вы это взяли в лосте совсем по другому
Вашим подсказкам мне удалось это сделать,действительно в лостах не используются данные методы что было у меня в Scripts.java

Правильный вариант:
package org.mmocore.gameserver.scripts;

import org.mmocore.commons.compiler.Compiler;
import org.mmocore.commons.compiler.MemoryClassLoader;
import org.mmocore.commons.listener.Listener;
import org.mmocore.commons.listener.ListenerList;
import org.mmocore.gameserver.Config;
import org.mmocore.gameserver.handler.bypass.Bypass;
import org.mmocore.gameserver.handler.bypass.BypassHolder;
import org.mmocore.gameserver.listener.ScriptListener;
import org.mmocore.gameserver.listener.script.OnInitScriptListener;
import org.mmocore.gameserver.model.Player;
import org.mmocore.gameserver.model.instances.NpcInstance;
import org.mmocore.gameserver.model.quest.Quest;

import java.io.File;
import java.io.FileInputStream;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
import java.util.jar.JarEntry;
import java.util.jar.JarInputStream;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.lang3.ClassUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class Scripts
{
public class ScriptListenerImpl
extends ListenerList<Scripts>
{
public ScriptListenerImpl() {}

public void init()
{
for (Listener<Scripts> listener : getListeners()) {
if (OnInitScriptListener.class.isInstance(listener)) {
((OnInitScriptListener)listener).onInit();
}
}
}
}
private static final Logger _log = LoggerFactory.getLogger(Scripts.class);
private static final String SCRIPTS_JAR_FILE = "./lib/scripts.jar";
private static final Scripts _instance = new Scripts();
public static Scripts getInstance()
{
return _instance;
}
private final Compiler compiler = new Compiler();
private final Map<String, Class<?>> _classes = new TreeMap();
private final ScriptListenerImpl _listeners = new ScriptListenerImpl();
private Scripts()
{
load();
}
private void load()
{
_log.info("Scripts: Loading...");

List<Class<?>> classes = new ArrayList();
boolean result = false;
if (new File("./lib/scripts.jar").exists()) {
result = loadJarFile(classes);
}
if (!result) {
result = load(classes);
}
if (!result)
{
_log.error("Scripts: Failed loading scripts!");
Runtime.getRuntime().exit(0);
return;
}
_log.info("Scripts: Loaded " + classes.size() + " classes.");
for (int i = 0; i < classes.size(); i++)
{
Class<?> clazz = (Class)classes.get(i);
if ((!Config.DONTLOADQUEST) ||
(!ClassUtils.isAssignable(clazz, Quest.class))) {
this._classes.put(clazz.getName(), clazz);
}
}
}
private boolean loadJarFile(List<Class<?>> classes)
{
boolean result = false;
JarInputStream stream = null;
try
{
stream = new JarInputStream(new FileInputStream("./lib/scripts.jar"));
JarEntry entry = null;
while ((entry = stream.getNextJarEntry()) != null) {
if ((!entry.getName().contains(ClassUtils.INNER_CLASS_SEPARATOR)) && (entry.getName().endsWith(".class")))
{
String name = entry.getName().replace(".class", "").replace("/", ".");
Class<?> clazz = ClassLoader.getSystemClassLoader().loadClass(name);
if (!Modifier.isAbstract(clazz.getModifiers())) {
classes.add(clazz);
}
}
}
result = true;
}
catch (Exception e)
{
_log.error("Fail to load scripts.jar!", e);
classes.clear();
}
finally
{
IOUtils.closeQuietly(stream);
}
return result;
}
public void init()
{
for (Class<?> clazz : this._classes.values()) {
init(clazz);
}
this._listeners.init();
}
private boolean load(List<Class<?>> classes)
{
Collection<File> scriptFiles = Collections.emptyList();

File file = new File(Config.DATAPACK_ROOT, "data/scripts/".replace(".", "/") + ".java");
if (file.isFile())
{
scriptFiles = new ArrayList(1);
scriptFiles.add(file);
}
else
{
file = new File(Config.DATAPACK_ROOT, "data/scripts/");
if (file.isDirectory()) {
scriptFiles = FileUtils.listFiles(file, FileFilterUtils.suffixFileFilter(".java"), FileFilterUtils.directoryFileFilter());
}
}
if (scriptFiles.isEmpty()) {
return false;
}
boolean success;
if ((success = this.compiler.compile(scriptFiles)))
{
MemoryClassLoader classLoader = this.compiler.getClassLoader();
for (String name : classLoader.getLoadedClasses()) {
if (!name.contains(ClassUtils.INNER_CLASS_SEPARATOR)) {
try
{
Class<?> clazz = classLoader.loadClass(name);
if (!Modifier.isAbstract(clazz.getModifiers())) {
classes.add(clazz);
}
}
catch (ClassNotFoundException e)
{
success = false;
_log.error("Scripts: Can't load script class: " + name, e);
}
}
}
classLoader.clear();
}
return success;
}
public List<Class<?>> load(File target)
{
Collection<File> scriptFiles = Collections.emptyList();
if (target.isFile())
{
scriptFiles = new ArrayList(1);
scriptFiles.add(target);
}
else if (target.isDirectory())
{
scriptFiles = FileUtils.listFiles(target, FileFilterUtils.suffixFileFilter(".java"), FileFilterUtils.directoryFileFilter());
}
if (scriptFiles.isEmpty()) {
return Collections.emptyList();
}
List<Class<?>> classes = new ArrayList();
Compiler compiler = new Compiler();
if (compiler.compile(scriptFiles))
{
MemoryClassLoader classLoader = compiler.getClassLoader();
for (String name : classLoader.getLoadedClasses()) {
if (!name.contains(ClassUtils.INNER_CLASS_SEPARATOR)) {
try
{
Class<?> clazz = classLoader.loadClass(name);
if (!Modifier.isAbstract(clazz.getModifiers())) {
classes.add(clazz);
}
}
catch (ClassNotFoundException e)
{
_log.error("Scripts: Can't load script class: " + name, e);
classes.clear();
break;
}
}
}
}
return classes;
}
private Object init(Class<?> clazz)
{
Object o = null;
try
{
if (ClassUtils.isAssignable(clazz, ScriptListener.class))
{
o = clazz.newInstance();

this._listeners.add((ScriptListener)o);
}
for (Method method : clazz.getMethods()) {
if (method.isAnnotationPresent(Bypass.class))
{
Bypass an = (Bypass)method.getAnnotation(Bypass.class);
if (o == null) {
o = clazz.newInstance();
}
Class[] par = method.getParameterTypes();
if ((par.length == 0) || (par[0] != Player.class) || (par[1] != NpcInstance.class) || (par[2] != String[].class)) {
_log.error("Wrong parameters for bypass method: " + method.getName() + ", class: " + clazz.getSimpleName());
} else {
BypassHolder.getInstance().registerBypass(an.value(), o, method);
}
}
}
}
catch (Exception e)
{
_log.error("", e);
}
return o;
}
public Map<String, Class<?>> getClasses()
{
return this._classes;
}
}

Реально ли в лостах избавиться от всех варингов?
 
Последнее редактирование модератором:
Назад
Сверху Снизу