Сообщений: 135
Тем: 13
Зарегистрирован: Aug 2010
Репутация:
324
Есть идея сделать параметры для аи мобов в спаунлисте(каг на оффе...)
Пример с npcpos(ПТС спаунлист...:negodue
тык
Код: npc_ex_begin [ice_knight] pos={112942;-115480;-10960;52} total=10 respawn=20sec nickname=[2F-1] ai_parameters={[my_position]=21;[SuperPointName]=[IceQueen_2F_Left];[PosX]=113078;[PosY]=-115480;[PosZ]=-10984} npc_ex_end
npc_ex_begin [ice_knight] pos={112940;-115146;-10960;52} total=10 respawn=20sec nickname=[2F-2] ai_parameters={[my_position]=22;[SuperPointName]=[IceQueen_2F_Left];[PosX]=113079;[PosY]=-115154;[PosZ]=-10984} npc_ex_end
где
тык
Код: ai_parameters={[my_position]=22;[SuperPointName]=[IceQueen_2F_Left];[PosX]=113079;[PosY]=-115154;[PosZ]=-10984}
к примеру возьмём в яве сделать 10 мобов с одним и тем же идом которые при спауне идут каждый на свою координату...
В пример 1 точка...
Код: [PosX]=113079;[PosY]=-115154;[PosZ]=-10984
Идея в том чтобы сделать подобное в яве, одна проблема как вывести параметры чтобы к примеру пишим в спаунлисте
пример
Код: ai_parameters={[my_position]=22;[PosX]=113079;[PosY]=-115154;[PosZ]=-10984}
в аи чтобы было к примеру
аи
Код: private int my_position;
private int PosX;
private int PosY;
private int PosZ;
@Override
protected void onEvtSpawn()
{
if(my_position == 22)
{
moveToLocation(PosX, PosY, PosZ, 0, true);
}
}
Помогите кто знает  :negodue: извеняюсь если многобукаф и ошиб ак
Сообщений: 1,759
Тем: 13
Зарегистрирован: May 2011
Репутация:
3,205
пишеш загрузку этих параметров с sql или тxt файла со спауном(у кого как...)
пишеш сколько нужно get ,set методов(для каждого параметра)
при спауне моба проверяеш и присваиваеш мобу все что тебе нужно...
но это для несложных операций...
ПС: это так свои мысли)))
ПС2: вообще в идеале надо весь движек аи удалить и нормальный написать
Сообщений: 1,065
Тем: 20
Зарегистрирован: Mar 2010
Репутация:
3,855
как вариант добавить в спавнлист колонку, с уникальным ид данного спавна
далее завести таблицу наподобие ai_params (в феникасх подобная есть для задавания каких либо специфических параметров в аи и привязывающяя эти параметры к ид мобов) и привязывать в ней к этим уникальным ид нужные параметры.
ну и естесно в самом ядре делаешь загрузку и хранение данных параметров, а в базовых аи мобов, ну или не в базовых а тем где тебе нужно - проверяешь, задан ли уникальный идентификатор спавну конкретного моба и есть ли для этого идентификатора какие нибудь параметры.
Сообщений: 86
Тем: 2
Зарегистрирован: Sep 2010
Репутация:
757
clazz.getField("some_field").set(instance, val)
рефлексия уже не модно?
Сообщений: 135
Тем: 13
Зарегистрирован: Aug 2010
Репутация:
324
Если не ошибаюсь то вот нашёл вроде чтото подобное в L2P файл InstanceZone
тык
Код: for (Node event = spawn.getFirstChild(); event != null; event = event.getNextSibling())
if ("event".equalsIgnoreCase(event.getNodeName())) {
attrs = event.getAttributes();
String trigger = attrs.getNamedItem("trigger").getNodeValue();
GArray<String> pars = new GArray<String>();
for (Node param = event.getFirstChild(); param != null; param = param.getNextSibling())
if ("param".equalsIgnoreCase(param.getNodeName()))
pars.add(param.getAttributes().getNamedItem("value").getNodeValue());
String cl = attrs.getNamedItem("class").getNodeValue();
String me = attrs.getNamedItem("method").getNodeValue();
Integer del = Integer.parseInt(attrs.getNamedItem("delay").getNodeValue());
String[] param = pars.toArray(new String[pars.size()]);
SchedulableEvent se = new SchedulableEvent(cl, me, param, del);
if (spawnDat._events == null)
spawnDat._events = new HashMap<String, GArray<SchedulableEvent>>();
GArray<SchedulableEvent> arr = spawnDat._events.get(trigger);
if (arr == null) {
arr = new GArray<SchedulableEvent>();
spawnDat._events.put(trigger, arr);
}
arr.add(se);
}
Что в instance.xml выглядив вроде так
тык
Код: <spawn mobId="Ид моба" count="1" type="point">
<coords loc="Его координаты" />
<event trigger="Test" class="TestClass" method="debug_log" delay="20">
<param value="id = 1"/>
</event>
</spawn>
Только эффекта я не увидел...
если ошибаюсь подскажите тогда что делает данный код и как его использовать...
Обьясню что описывал
Файл TestClass к примеру лежит в папке scripts/ai
В этом классе у меня есть метод
Код: public static void debug_log(int id)
{
if(id == 1)
System.out.println("instances.xml event trigger test is Done");
else
System.out.println("instances.xml id2");
}
Если я правельно понял то в поле class пишим имя класса в method пишим используемый метод и этого класса а параметры это установка парметров в классе в данном случае id.... но ничего не происходит...
обьясните если кто знает плз, буду признателен
Сообщений: 608
Тем: 5
Зарегистрирован: Feb 2009
Репутация:
2,171
06-07-2011, 03:10 AM
(Сообщение последний раз редактировалось: 06-07-2011, 03:23 AM bloodshed.)
Малявко Написал:Если не ошибаюсь то вот нашёл вроде чтото подобное в L2P файл InstanceZone
тык
Код: for (Node event = spawn.getFirstChild(); event != null; event = event.getNextSibling())
if ("event".equalsIgnoreCase(event.getNodeName())) {
attrs = event.getAttributes();
String trigger = attrs.getNamedItem("trigger").getNodeValue();
GArray<String> pars = new GArray<String>();
for (Node param = event.getFirstChild(); param != null; param = param.getNextSibling())
if ("param".equalsIgnoreCase(param.getNodeName()))
pars.add(param.getAttributes().getNamedItem("value").getNodeValue());
String cl = attrs.getNamedItem("class").getNodeValue();
String me = attrs.getNamedItem("method").getNodeValue();
Integer del = Integer.parseInt(attrs.getNamedItem("delay").getNodeValue());
String[] param = pars.toArray(new String[pars.size()]);
SchedulableEvent se = new SchedulableEvent(cl, me, param, del);
if (spawnDat._events == null)
spawnDat._events = new HashMap<String, GArray<SchedulableEvent>>();
GArray<SchedulableEvent> arr = spawnDat._events.get(trigger);
if (arr == null) {
arr = new GArray<SchedulableEvent>();
spawnDat._events.put(trigger, arr);
}
arr.add(se);
}
Что в instance.xml выглядив вроде так
тык
Код: <spawn mobId="Ид моба" count="1" type="point">
<coords loc="Его координаты" />
<event trigger="Test" class="TestClass" method="debug_log" delay="20">
<param value="id = 1"/>
</event>
</spawn>
Только эффекта я не увидел...
если ошибаюсь подскажите тогда что делает данный код и как его использовать...
Обьясню что описывал
Файл TestClass к примеру лежит в папке scripts/ai
В этом классе у меня есть метод
Код: public static void debug_log(int id)
{
if(id == 1)
System.out.println("instances.xml event trigger test is Done");
else
System.out.println("instances.xml id2");
}
Если я правельно понял то в поле class пишим имя класса в method пишим используемый метод и этого класса а параметры это установка парметров в классе в данном случае id.... но ничего не происходит...
обьясните если кто знает плз, буду признателен 
Если хочешь делать как написал в этом примере, то использовать надо reflection, как сказал вышел izen.
Но так не выйдет мне кажется. Если хочешь это делать через таблицу спауна, то расширяй клаcc L2Spawn, в котором передавай параметры спауна, тому нпс которого спаунишь (можно как предложил Gaikotsu)
Добавлено через 12 минут
Ну и где нить в L2Spawn засунуть (лучше наверно метод intializeNpc), что-то типа этого:
Код: if(mob.getAI() instanceof DefaultAI)
{
DefaultAI ai = (DefaultAI) mob.getAI();
ai.set("my_position", 22);
}
передачу параметров в intializeNpc сами додумаете)
Сообщений: 135
Тем: 13
Зарегистрирован: Aug 2010
Репутация:
324
bloodshed Написал:Если хочешь делать как написал в этом примере, то использовать надо reflection, как сказал вышел izen.
Но так не выйдет мне кажется. Если хочешь это делать через таблицу спауна, то расширяй клаcc L2Spawn, в котором передавай параметры спауна, тому нпс которого спаунишь (можно как предложил Gaikotsu)
Добавлено через 12 минут
Ну и где нить в L2Spawn засунуть (лучше наверно метод intializeNpc), что-то типа этого:
Код: if(mob.getAI() instanceof DefaultAI)
{
DefaultAI ai = (DefaultAI) mob.getAI();
ai.set("my_position", 22);
}
передачу параметров в intializeNpc сами додумаете)
Ладно хорошо спасибо, немного уловил мысль как сделать  А что насчёт вопроса что я задал в предыдущем посту ?? Что делает тот код и как его использовать ? На сколько я понял он так же там стаит для большей функциональности АИ, или нет ??
Сообщений: 608
Тем: 5
Зарегистрирован: Feb 2009
Репутация:
2,171
Про какой код вы говорите? напишите ещё раз.
Сообщений: 135
Тем: 13
Зарегистрирован: Aug 2010
Репутация:
324
bloodshed Написал:Про какой код вы говорите? напишите ещё раз. В файле InstanceZoneManager есть вот такой код
Код
Код: for (Node event = spawn.getFirstChild(); event != null; event = event.getNextSibling())
if ("event".equalsIgnoreCase(event.getNodeName())) {
attrs = event.getAttributes();
String trigger = attrs.getNamedItem("trigger").getNodeValue();
GArray<String> pars = new GArray<String>();
for (Node param = event.getFirstChild(); param != null; param = param.getNextSibling())
if ("param".equalsIgnoreCase(param.getNodeName()))
pars.add(param.getAttributes().getNamedItem("value").getNodeValue());
String cl = attrs.getNamedItem("class").getNodeValue();
String me = attrs.getNamedItem("method").getNodeValue();
Integer del = Integer.parseInt(attrs.getNamedItem("delay").getNodeValue());
String[] param = pars.toArray(new String[pars.size()]);
SchedulableEvent se = new SchedulableEvent(cl, me, param, del);
if (spawnDat._events == null)
spawnDat._events = new HashMap<String, GArray<SchedulableEvent>>();
GArray<SchedulableEvent> arr = spawnDat._events.get(trigger);
if (arr == null) {
arr = new GArray<SchedulableEvent>();
spawnDat._events.put(trigger, arr);
}
arr.add(se);
}
Который в XML формате будет выглядеть примерно так...
так
Код: <event trigger="Test" class="TestClass" method="debug_log" delay="20">
<param value="id = 1"/>
</event>
Цитата:Обьясню что описывал
Файл TestClass к примеру лежит в папке scripts/ai
В этом классе у меня есть метод
Код:
public static void debug_log(int id)
{
if(id == 1)
System.out.println("instances.xml event trigger test is Done");
else
System.out.println("instances.xml id2");
}
Если я правельно понял то в поле class пишим имя класса в method пишим используемый метод и этого класса а параметры это установка парметров в классе в данном случае id.... но ничего не происходит...
обьясните если кто знает плз, буду признателен
Сообщений: 608
Тем: 5
Зарегистрирован: Feb 2009
Репутация:
2,171
<event trigger="startMove" class="scripts.ai.MoveNPC" method="moveToLocation" delay="20">
<param value="координаты x"/>
<param value="координаты y"/>
<param value="координаты z"/>
</event>
Метод в AI:
Код: public void moveToLocation(String[] param)
{
тут делай обработку координат из param
}
scripts.ai.MoveNPC
путь к аи твоих нпс
потом когда нужно будет выполнишь у своего нпс:
Код: npc.fireMethodInvoked("startMove", null);
Код не проверял, как то так должно быть.
|