Мекор писал(а):
Еще вапрос ) Даже два )
Скажем нада мне сделать чтобы группа из одинаковых мобов появлялась по триггеру.
Тут есть несколько моментов:
1. Все мобы, которые присутсвуют в зоне определены заранее и создание совершенно нового моба может приввести к утечке памяти (советую избегать подобных операций)
2. Во время загрузки до начала игрового цикла мобы не ходят.
3. Исходя из пунктов 1 и 2, на момент подготовки триггера у нас все мобы уже срепопились и находятся в известной нам зоне (комнате).
Поиск осуществляет следующим образом:
Код:
static CCharMob* mobs[MOB_COUNT];
static int mob_count = 0;
// ...
// Получаем колическтво комнат в зоне
int roomCount = s_zone->m_rooms.Count();
for (int i = 0; i < roomCount; i++) {
CRoom* room = s_zone->m_rooms[i];
for (CChar* cl = room->m_charList; cl; cl = cl->m_next) {
// Вообще в зони не должно быть никого кроме мобов, сервер только стартует
if (!cl->isMob()) continue;
CCharMob* mob = (CCharMob*) cl;
int protID = mob->prot()->m_id;
// Проверка может быть сделана много раз для разных идентификаторов
if (protID == /* нужный id моба */) {
mobs[count++] = mob;
}
}
}
На выходе цикла получаем полный список мобов и их количество (о размере массива позаботьтесь заранее или используйте PArray или PSet из Tools/Arrays.h)
Если мобы репопфтся на одной клетке и она заведомо известна, то все еще проще:
1. находим комнату по id.
2. выполняем поиск мобов только в этой комнате.