Перейти к содержанию

guruw

Постоялец
  • Публикаций

    191
  • Зарегистрирован

  • Посещение

  • Отзывы

    0%

Весь контент guruw

  1. хоть хроники бы указали)
  2. Поделитесь кому не жалко - не реклама Наверняка, да у кого нибудь завалялось на харде...
  3. guruw

    Sell One Adena

    неактуально
  4. guruw

    Sell One Adena

    сборка оверворлд, там sql не помочь
  5. guruw

    Sell One Adena

    Поделитесь, пожалуйста данным конфигом, название аткже может быть SellAllItemsFree. Пробывал вытащить из других сборок ничего путного не нашел кроме прописание конфига в Config.java
  6. guruw

    Rebellion 688 Rguard

    большое спасибо, webdes27, что все разложил по полочкам, очень сильно благодарен
  7. guruw

    Rebellion 688 Rguard

    а чирканите в пм, пожалуйста свою icq или скайп, кое что не понятно
  8. guruw

    Rebellion 688 Rguard

    стринги разные ты не мог бы поподробнее раписать что нужно в них во всех прописать?
  9. guruw

    Rebellion 688 Rguard

    а как именно прописать в загрузку? скомпилить .dll файл для клиента я могу...
  10. guruw

    Rebellion 688 Rguard

    Я: как прикрутить к 688 исходам rGuard SmokiMo: Он прикручен уже фактически остается используя данный исходники скомпилить клиент часть, скомпилил в итоге доходит до выбора сервера и дальше уже никуда. Решил порыться в ядре и нашел что если защита включена то в геймсервере должна появиться надпись Protection: ON, но такого нет. Хотя абсолютно все файлы защиты (к примеру, исходники rGuard ALAN'a) присутсвуют в данной 688 реве. Итог: что же делать, где же тогда "обрыв"? p.s. знаю о неактуальности данной защиты, просто таким способом я решил учиться
  11. guruw

    Папка Scripts

    а если без удаление это реализовать? то есть сделать так чтобы подгружалась первой папка scripts... так ведь и должно быть? с удалением конечно же все получилось (просто грузит из папки скриптс)
  12. guruw

    Папка Scripts

    package l2r.gameserver.scripts; 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.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.TreeMap; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; import l2r.commons.compiler.Compiler; import l2r.commons.compiler.MemoryClassLoader; import l2r.gameserver.Config; import l2r.gameserver.model.Player; import l2r.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; public class Scripts { private static final Logger _log = LoggerFactory.getLogger(Scripts.class); private static final Scripts _instance = new Scripts(); public static final Map<Integer, List<ScriptClassAndMethod>> dialogAppends = new HashMap(); public static final Map<String, ScriptClassAndMethod> onAction = new HashMap(); public static final Map<String, ScriptClassAndMethod> onActionShift = new HashMap(); private final Compiler compiler = new Compiler(); private final Map<String, Class<?>> _classes = new TreeMap(); public static Scripts getInstance() { return _instance; } private Scripts() { load(); } private void load() { _log.info("Scripts: Loading..."); List jarClasses = new ArrayList(); List classes = new ArrayList(); File f = new File("./libs/l2r-scripts.jar"); if (f.exists()) { _log.info("Loading l2r-scripts.jar"); JarInputStream stream = null; try { stream = new JarInputStream(new FileInputStream(f)); 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 = getClass().getClassLoader().loadClass(name); if (!Modifier.isAbstract(clazz.getModifiers())) { jarClasses.add(clazz); } } } } catch (Exception e) { _log.error("Fail to load l2r-scripts.jar!", e); jarClasses.clear(); } finally { IOUtils.closeQuietly(stream); } } boolean result = load(classes, ""); classes.addAll(jarClasses); 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); this._classes.put(clazz.getName(), clazz); } } public void init() { for (Class clazz : this._classes.values()) { addHandlers(clazz); if ((!Config.DONTLOADQUEST) || (!ClassUtils.isAssignable(clazz, Quest.class))) { if (ClassUtils.isAssignable(clazz, ScriptFile.class)) try { ((ScriptFile)clazz.newInstance()).onLoad(); } catch (Exception e) { _log.error("Scripts: Failed running " + clazz.getName() + ".onLoad()", e); } } } } public boolean reload() { _log.info("Scripts: Reloading..."); return reload(""); } public boolean reload(String target) { List classes = new ArrayList(); if (load(classes, target)) { _log.info("Scripts: Reloaded " + classes.size() + " classes."); } else { _log.error("Scripts: Failed reloading script(s): " + target + "!"); return false; } for (int i = 0; i < classes.size(); i++) { Class clazz = (Class)classes.get(i); Class prevClazz = (Class)this._classes.put(clazz.getName(), clazz); if (prevClazz != null) { if (ClassUtils.isAssignable(prevClazz, ScriptFile.class)) { try { ((ScriptFile)prevClazz.newInstance()).onReload(); } catch (Exception e) { _log.error("Scripts: Failed running " + prevClazz.getName() + ".onReload()", e); } } removeHandlers(prevClazz); } if ((!Config.DONTLOADQUEST) || (!ClassUtils.isAssignable(clazz, Quest.class))) { if (ClassUtils.isAssignable(clazz, ScriptFile.class)) { try { ((ScriptFile)clazz.newInstance()).onLoad(); } catch (Exception e) { _log.error("Scripts: Failed running " + clazz.getName() + ".onLoad()", e); } } addHandlers(clazz); } } return true; } public void shutdown() { for (Class clazz : this._classes.values()) { if (!ClassUtils.isAssignable(clazz, Quest.class)) { if (ClassUtils.isAssignable(clazz, ScriptFile.class)) try { ((ScriptFile)clazz.newInstance()).onShutdown(); } catch (Exception e) { _log.error("Scripts: Failed running " + clazz.getName() + ".onShutdown()", e); } } } } private boolean load(List<Class<?>> classes, String target) { Collection scriptFiles = Collections.emptyList(); File file = new File(Config.DATAPACK_ROOT, "data/scripts/" + target.replace(".", "/") + ".java"); if (file.isFile()) { scriptFiles = new ArrayList(1); scriptFiles.add(file); } else { file = new File(Config.DATAPACK_ROOT, "data/scripts/" + target); if (file.isDirectory()) { scriptFiles = FileUtils.listFiles(file, FileFilterUtils.suffixFileFilter(".java"), FileFilterUtils.directoryFileFilter()); } } if (scriptFiles.isEmpty()) return true; 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; } private void addHandlers(Class<?> clazz) { try { for (Method method : clazz.getMethods()) if (method.getName().contains("DialogAppend_")) { Integer id = Integer.valueOf(Integer.parseInt(method.getName().substring(13))); List handlers = (List)dialogAppends.get(id); if (handlers == null) { handlers = new ArrayList(); 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 (Iterator i$ = dialogAppends.values().iterator(); i$.hasNext(); ) { entry = (List)i$.next(); List toRemove = new ArrayList(); for (ScriptClassAndMethod sc : entry) if (sc.className.equals(script.getName())) toRemove.add(sc); for (ScriptClassAndMethod sc : toRemove) entry.remove(sc); } List entry; List toRemove = new ArrayList(); for (Map.Entry entry : onAction.entrySet()) if (((ScriptClassAndMethod)entry.getValue()).className.equals(script.getName())) toRemove.add(entry.getKey()); for (String key : toRemove) { onAction.remove(key); } toRemove = new ArrayList(); for (Map.Entry entry : onActionShift.entrySet()) if (((ScriptClassAndMethod)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) { Class clazz = (Class)this._classes.get(className); if (clazz == null) { _log.error("Script class " + className + " not found!"); return null; } Object o; 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 param : variables.entrySet()) try { FieldUtils.writeField(o, (String)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[i] = (args[i] != null ? args[i].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 this._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; } } }
  13. guruw

    Папка Scripts

    разобрался спасибо, то есть я могу спокойно удалить папку скриптс чтобы не думалось?
  14. guruw

    Папка Scripts

    Только начал постигать прелести явы и разработки l2 эмулятора на основе оверов, так что строго мой вопрос не судите. Вообщем суть проблемы: Изменения вносимые в файлы эвента в папке scripts не применяются в игре. При этом в либах есть l2r-scripts где естественно вносимые изменения вступают в силу... Но эта трабла есть только у пары эвентов (остальные изменения в папке скриптс вступают в силу), и в принципе мне не жалко могу декомпилировать и вносить изменения прямо через l2r-scripts. Но стало интересно как именно папка scripts "объединяется" с тем файлом из либа и объединяется ли вообще, ну и следовательно что мне нужно прописать в код чтобы объединение этой пары эвентов произошли.
  15. одна на исходниках first team другая rebellion
  16. я рассчитывал на то что все знаю что где и как в оверах... неужели достаточно перенести эвент из папки скриптс и работа будет закончена?
  17. необходимо перенести один эвент с оверской сборки на другую сборку также оверов, что необходимо сделать? исходы есть... если можно то поподробнее, всем заранее thx
  18. а смысл от файлов лицензии с органичением на онлайн и сроком действия?..
  19. да... как же про оупенов я забыл... х10-х50 - все таки посмотрите на оупен Naik лови + за мою память
  20. скажи мне, что там такого "стоящего" что ты везде и повсюду ее рекламируешь?! ребов исходники взял (можно даже с защитой + гео от стазиса) получил бесплатно то что предлагает кекс, потом если есть критические баги за эту 1к руб в месяц можно купить его фикс, если руки из жопы Недостаточно того, что ты являешься партнером и говоришь "ооо сборка ваще 3.14здц классная", она является скорее переманиванием клиентов с l2j-dev цена и работа на публику кекеса говорит о своем. А вообще дай конкретики, обоснуй почему она так хороша.
  21. Всем спасибо, но все-таки хотелось бы услышать мнение тех, кто может работает с явой в каких то компаниях, на чем в свою очередь они учились и что из их учения им до сих пор не пригодилось.
  22. Ну и естественно под х10-х50 ставить шару или пилить на исходниках ребов неь смысла
  23. Приватка - altdev.biz (для любителей оверов в квартал 400$), l2emuent (для любителей лыж) Шара - lineage-dev (на исходниках l2emuent) честно на онлайне не стояла, но скорее всего скоро придется ставить - отпишусь, но функционал l2emuent 100% должен решать + защита + много всяких прелестей, но поговаривают крайне нестабильна Rebellion-Team 602 то ли 620 исходники лучше этих двух 100% нет без ограничения на онлайн, привязок и т.п. Шаровых команд которые работаю в актуальном времени нет, и скорее всего достойных после ребов не будет. Негатив: не берите l2j-dev или first-team, заклинаю xD. Первая не стоит ни копейки, все сперто, вторая - за такую цену можно поставить приватки что я писал где реализация в разы больше и стабильнее + кекс ниочень)))
  24. Всем вечер добрый, горю желанием выучить Java на всех стадиях его программирования, не знаю есть ли знатоки на форуме Макси, которые работают в сфере явы, и которые смогут подсказать учебник или гайд, но я прошу всех кто хоть как то причастен скинуть книгу, документацию, уроки и т.п. Как я понял программисты явы делятся на несколько стадий: юниор, энтерпайз - хотелось бы тоже почитать и попробывать стать и тем и другим. Желание есть, время есть, опыт программирования имеется, но я считаю он недостаточен, чтобы слету выучить такой язык Java.
  25. Отдам данную сборку без органичения на онлайн, но привяжу на ваш ип, за пивко
×
×
  • Создать...