-
Публикаций
53 -
Зарегистрирован
-
Посещение
-
Отзывы
0%
Тип контента
Профили
Форумы
Загрузки
Магазин
Инструкции
Весь контент YuraAAA1
-
Смотрите. Сундук может быть Box (открывается, с точками), а может быть Chest (обычный сундук, дерётся). Если Вы атакуете Box - он исчезает, как Вы и описали (onDecay()). Если Вы атакуете Chest - он начинает драться с Вами. От количества урона не зависит. А как Вы хотите изменить? Чтобы он открывался?
-
Ну смотрите, всё верно. def onAttack(self,npc,player,damage,isPet) : npcId = npc.getNpcId() # check if the npc and skills used are valid for this script. Exit if invalid. if npcId not in self.chests : return При Атаке сунука: if Rnd.get(100) < IS_BOX : #Это бокс, он может быть открыт ключом npc.onDecay() #Удаляем его Всё верно, бьём box - вызываем onDecay() - удаляем его из игрового мира.
-
Есть исходы? Покажите AI Chest-ов
-
Чисто перебором можно (на базе acis-а) import javolution.util.FastList; import net.sf.l2j.gameserver.model.L2ItemInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.itemcontainer.PcInventory; import java.util.List; /** * Created by Юрий on 12.05.14. */ public class ItemManager { private static ItemManager instance; private static final Object MUTEX = new Object(); private List<Integer> itemDeniedList = new FastList<>(); //Double check-lock singleton access public static ItemManager getInstance() { if (instance == null) { synchronized (MUTEX) { if (instance == null) { instance = new ItemManager(); } } } return instance; } private ItemManager() { //Добавляем итемы: itemDeniedList.add(57); //Adena itemDeniedList.add(4448); //Краски } @SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter") public boolean isPlayerHasDeniedItem(L2PcInstance pcInstance) { PcInventory inventory = pcInstance.getInventory(); L2ItemInstance[] items = inventory.getItems(); synchronized (inventory) { for (L2ItemInstance l2ItemInstance : items) { if (itemDeniedList.contains(l2ItemInstance.getItemId())) return true; } } return false; } } И вызов: boolean canPlayerParticipate = !ItemManager.getInstance().isPlayerHasDeniedItem(player);
-
Как я понимаю, чисто в теории. AuthLogin.java:runImpl() Если: 1. В этом методе запросить accountsInGameServer из LoginServerThread. 2. Обернуть следующий код в syncronized блок. 3. Обойти коллекцию. Если имя аккаунта совпадает - closeNow(). Поможет ли это? Сильно ли увеличится нагрузка (за счёт synchronized).
-
Есть где-то нормальный фикс?
-
проморгал putIfAbsent. Вроде перестал баг работать, спасибо
-
Уважаемые форумчане. Подскажите пожалуйста, как профиксить дабл логин? Или хотя бы натолкните на правильный путь. http://www.youtube.com/watch?v=S0XTdqi-SeU&feature=youtu.be https://code.google.com/p/silentium-free/source/detail?r=6 этот фикс не подходит Фикс EnterWorld тоже не катит, так как нет двойного входа в игру. Почему-то не выкидывает клиент из игры. Сборка от Silentium (Acis based).
-
List это интерфейс, на минуточку, его просто не возьмёшь (разве что только анонимной реализацией). И ещё, выбор коллекции зависит от цели. ArrayList это коллекция, основанная на массиве, а вот, например, LinkedList связанный список со ссылками между объектами. Преимущество ArrayList будет в скорости доступа к произвольному элементу. А у LinkedList - вставка/удаление объектов из списка.
-
Вопросик, а почему именно XML RPC, а не JSON RPC? Вроде как JSON попроще будет.
-
Если я правильно понял - 1 общий ЛС, 3 разных машины ГС смотрящих в 1 базу + load balancer, который и является proxy
-
Хотя речь идёт именно об анимации, причём тут текстура
-
Ясно, спасибо
-
Это мы посмотрим в процессе) Как это делается? (В общих словах)
-
Бывает так, что дроп описывается в npcs.xml и выкинуть ненужный дроп достаточно муторное занятие. Хочу поделиться с форумчанами одним инструментом для быстрого удаления ненужного дропа: Надо создать папки xml/source и xml/output в папке с этим файлом. В source положить xml файл, в output будет отфильтрованный import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.*; import java.util.LinkedList; import java.util.List; public class Runner { static List<Integer> items = new LinkedList<Integer>(); static Integer[] helperArray; static { items.clear(); //Заталкиваем ID в коллекцию, например адену и краски items.add(57); items.add(4448); /* Для удобства можно добавлять через и массив: Раскомментируйте для работы через массив helperArray = new Integer[]{ 1518, 1518, 1518, 1518, 1518, 1518, 1518, }; items.addAll(Arrays.asList(helperArray)); */ } public static void main(String[] args) { File f = new File("xml\\source"); File[] files = f.listFiles(); for (File file : files) { try { if (!(file.exists() && file.isFile())) { System.out.println("File " + file.getName() + " doesn't exists or not a file"); continue; } File fXMlFile = file; DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = factory.newDocumentBuilder(); InputSource inputSource = new InputSource(); inputSource.setCharacterStream(new StringReader(convertXMLFileToString(fXMlFile.getAbsolutePath()))); Document parse = documentBuilder.parse(file); deleteDropDate(parse); File newFile = new File("xml\\output\\" + file.getName()); if (newFile.exists()) { newFile.delete(); } else { newFile.createNewFile(); } saveFile(parse, newFile); System.out.println("Success. Total affected rows: " + count); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (TransformerException e) { e.printStackTrace(); } } } static int count; public static void deleteDropDate(Document document) { count = 0; document.normalize(); NodeList nodes = document.getElementsByTagName("npc"); for (int i = 0; i < nodes.getLength(); i++) { Element element = (Element) nodes.item(i); NodeList drops = element.getElementsByTagName("drops"); for (int j = 0; j < drops.getLength(); j++) { NodeList category = element.getElementsByTagName("category"); for (int k = 0; k < category.getLength(); k++) { Element currDropData = (Element) category.item(k); NodeList drop = currDropData.getElementsByTagName("drop"); for (int l = 0; l < drop.getLength(); l++) { Node item = drop.item(l); Integer integer = Integer.valueOf(item.getAttributes().item(1).getTextContent()); if (items.contains(integer)) { item.getParentNode().removeChild(item); System.out.println("Removed " + integer); ++count; } } } } } } public static String convertXMLFileToString(String fileName) { try { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); InputStream inputStream = new FileInputStream(new File(fileName)); org.w3c.dom.Document doc = documentBuilderFactory.newDocumentBuilder().parse(inputStream); StringWriter stw = new StringWriter(); Transformer serializer = TransformerFactory.newInstance().newTransformer(); serializer.transform(new DOMSource(doc), new StreamResult(stw)); return stw.toString(); } catch (Exception e) { e.printStackTrace(); } return null; } public static void saveFile(Document document, File file) throws TransformerException { TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); DOMSource source = new DOMSource(document); StreamResult result = new StreamResult(file); transformer.transform(source, result); System.out.println("File saved!"); } }
-
Уважаемые гуру, подскажите пожалуйста. Реально ли (если да, то как) вытянуть анимации скилов из хроник Gracia и выше для Interlude? Спасибо
-
Добрый день. Ищу соло инстансы под interlude. Нашёл такой http://l2maxi.ru/java/addons/3394-interlude-instans-event.html но там битая ссылка. Если у кого-то есть, поделитесь пожалуйста. Заранее спасибо.
-
Добрый день. Есть квест, который спаунит мобов. На основе acis. Столкнулся с двумя проблемами: 1. Как сделать "эффект" появления моба? То есть чтобы моб кастовал скилл. 2. Как изменить конкретному мобу ник (или хотя бы title). L2Npc l2Npc = addSpawn(SOME_MOB_ID, X, Y, Z, H, false, 0, false); l2Npc.setName("TEST"); l2Npc.getAI().setIntention(CtrlIntention.ACTIVE); l2Npc.doSimultaneousCast(l2Skill); l2Npc.doCast(l2SKkll); //где скилл это L2Skill l2SkillSpawn = SkillTable.getInstance().getInfo(1001, 10); 1001 - Soul Cry где спаун-метод имеет следующую сигнатуру public L2Npc addSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffset, long despawnDelay, boolean isSummonSpawn) Спасибо P.S. нормально ли спаунить мобов "напрямую" из текущего потока, или же стоит использовать ThreadPoolManager.getInstance().scheduleAi
-
Спасибо, попробовал. Очень мощный инструмент, да. Но не совсем разобрался, как из ASM увидеть C (C++). Хочется посмотреть (а вообще изменить) getGradeFromString, так как надо добавить новый грейд. Спасибо
-
Хорошо, спасибо большое. Ответ ясен.
-
Ещё вопрос. u файлы содержат скрипты. Могу ли я изменить и скомпилить обратно такой файл? Если да, то каким инструментом. Спасибо
-
Форумчане, подскажите, пожалуйста, чем открыть nwindow.dll в читаемом виде. Спасибо P.S. цель - прочитать и изменить функции, на которые опирается nwindow.u как на нативные, такие как native final function string ConvertNumToTextNoAdena (string strInput); native final function Color GetNumericColor (string strCommaAdena); native final function int GetInventoryItemCount (int nID);
-
Большое спасибо, с сервером разобрался, почему-то проглядел skilltree. Подскажите, где находятся сами текстуры иконок грейда? Не могу найти. Спасибо
-
Может на каких-нибудь сборках да, но на этой нет) и в skilltree xml я тоже не нашёл этого
-
Но ведь, по идее, должно быть какое-то соответствие между ID и grade