Рейтинг темы:
  • 0 Голос(ов) - 0 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
AI камы 36
#1
Да, ретурн то я не заметил(((
Ответ
#2
Убери return из цикла, получается что первый моб удаляется и цикл завершается как и весь метод, т.е. по другим мобам он и не проверяет ничего.

И лучше - храни заспавненных мобов в листе и удаляй всех из листа когда босс отъедет. на случай если вдруг мобы будут вдали от него по каким-то причинам.
Код:
List<Mobs> mobsStorage = new ArrayList<>();
onSpawnMobs -> mobsStorage.add(mob)
onDeathBoss - > mobsStorage.forEach(n->n.deleteMe());
mobsStorage.clear();
Ответ
#3
Ну или если не хочется заводить отдельный список, то можно просто затребовать список всех существующих GameObject/Creature в инстансе и удалить по object.isMonster() && object.getNpcId() == 18560

Добавлено через 6 минут
Но вобще, логика босса реализована неправильно
по оффу он просто раз в минуту спавнит миньона, ограничиваясь не более чем 9 живыми миньонами
PHP код:
<?php 
class inzone_raid_36_normal_boss extends inzone_raid_boss_standard
{
parameters:
int Skill01 = @skill_4194_3;
int Skill01_Probablity = 30;
int Skill01_Target_Type = 0;
int Skill02 = @skill_4192_4;
int Skill02_Probablity = 40;
int Skill02_Target_Type = 0;

EventHandler CREATED()
{
myself->AddTimerEx(9004, 60 * 1000);
myself->i_ai3 = 0;
super;
}

EventHandler TIMER_FIRED_EX(timer_id, i0, i1, c0, party0, h0, private)
{
if (
timer_id == 9004)
{
if (
myself->i_ai0 == 1 && myself->i_ai3 < 9)
{
myself->CreateOnePrivateEx(1018560, "inzone_raid_36_normal_private", 0, 0, gg->FloatToInt(myself->sm->x + 10), gg->FloatToInt(myself->sm->y + 10), gg->FloatToInt(myself->sm->z), 0, 0, 0, 0);
myself->i_ai3 = myself->i_ai3 + 1;
}
myself->AddTimerEx(9004, 60 * 1000);
}
super;
}

EventHandler PARTY_DIED(private)
{
if (private !=
myself->sm)
{
myself->i_ai3 = myself->i_ai3 - 1;
}
}

}
Ответ
#4
finfan Написал:Убери return из цикла, получается что первый моб удаляется и цикл завершается как и весь метод, т.е. по другим мобам он и не проверяет ничего.

И лучше - храни заспавненных мобов в листе и удаляй всех из листа когда босс отъедет. на случай если вдруг мобы будут вдали от него по каким-то причинам.
Код:
List<Mobs> mobsStorage = new ArrayList<>();
onSpawnMobs -> mobsStorage.add(mob)
onDeathBoss - > mobsStorage.forEach(n->n.deleteMe());
mobsStorage.clear();
Да, ретурн то я не заметил (аж стыдно), как он туда закрался и всключил невидимость - понятия не имею)))
Убрал его и всех заспавненых миньонов стало удалять корректно.

Gaikotsu Написал:Ну или если не хочется заводить отдельный список, то можно просто затребовать список всех существующих GameObject/Creature в инстансе и удалить по object.isMonster() && object.getNpcId() == 18560

Добавлено через 6 минут
Но вобще, логика босса реализована неправильно
по оффу он просто раз в минуту спавнит миньона, ограничиваясь не более чем 9 живыми миньонами
PHP код:
<?php 
class inzone_raid_36_normal_boss extends inzone_raid_boss_standard
{
parameters:
int Skill01 = @skill_4194_3;
int Skill01_Probablity = 30;
int Skill01_Target_Type = 0;
int Skill02 = @skill_4192_4;
int Skill02_Probablity = 40;
int Skill02_Target_Type = 0;

EventHandler CREATED()
{
myself->AddTimerEx(9004, 60 * 1000);
myself->i_ai3 = 0;
super;
}

EventHandler TIMER_FIRED_EX(timer_id, i0, i1, c0, party0, h0, private)
{
if (
timer_id == 9004)
{
if (
myself->i_ai0 == 1 && myself->i_ai3 < 9)
{
myself->CreateOnePrivateEx(1018560, "inzone_raid_36_normal_private", 0, 0, gg->FloatToInt(myself->sm->x + 10), gg->FloatToInt(myself->sm->y + 10), gg->FloatToInt(myself->sm->z), 0, 0, 0, 0);
myself->i_ai3 = myself->i_ai3 + 1;
}
myself->AddTimerEx(9004, 60 * 1000);
}
super;
}

EventHandler PARTY_DIED(private)
{
if (private !=
myself->sm)
{
myself->i_ai3 = myself->i_ai3 - 1;
}
}

}
На счет сценария - я знаю, что реализовано не правильно. Помню, что на офе они респались с интервалом, но с каким и сколько штук в максимуме я не знал. Поэтому сделал по своему - чем сильнее на него наседают, тем выше шанс респа миньона.
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 2 Гость(ей)