XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Барахолка
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
agentex

offline
Опыт: 34,834
Активность:
Neutral Creep Spawn System 2.3

Описание

Мощная система респавна нейтралов по лагерям либо по одиночке. Группы нейтралов определяются автоматически после загрузки карты. (Вам нужно только поставить юнитов на карту).
Система имеет множество настроек, удобна в использовании и проста в установке.

Установка

Установка системы максимальна упрощена, что делает ее доступной даже для новичков.
  1. Проверьте что включена опция "Автом. создавать неизв. переменные во время вставки триггеров" (Файл->Параметры->Общие)
  2. Скопируйте папку NCSS со всем содержимым на свою карту.
  3. Настройте систему под свои нужды через триггер NCSS Settings.
Настоятельно рекомендуется прочесть описание настроек и функций!!! (триггер NCSS Readme)

Особенности

  • не требуется JNGP или других надстроек
  • работает с любым патчем
  • режим одиночного респавна (лагеря не формируются, каждый крип респается независимо)
  • игроков-владельцев крипов может быть несколько
  • опция отсрочки таймера при видимости области респавна игроками-людьми, а также при нахождении поблизости посторонних юнитов
  • опция подмены групп (крипы заменяются крипами из другой группы, аналогичной по левелу)
  • плавное появление юнитов
  • множество настроек
  • внутренняя система карт дропа, по возможностям не уступающая стандартной

От автора

Система очень гибкая и может использоваться в картах любых жанров, настроить ее можно практически под любые задачи. Пользуйтесь наздоровье.
Данная система используется в проекте AoN

Версии системы

» список изменений 1.1:
  • оптимизирован код системы
  • система стала универсальной, для ее работы не требуется JNGP
  • добавлена возможность настройки визуального эффекта при спавне групп
  • добавлена настройка рандомизации времени до респавна
  • добавлена опция отсрочки таймера спавна в случае обнаружения вблизи области спавна юнитов, контроллируемых игроками
  • добавлена опция "перемешивания" групп (т.е. после смерти одной респавнится другая, аналогичная по уровням)
» список изменений 2.0:
  • переписан весь код
  • добавлены опции: [Developer mode], [Auto scan], [Single spawn mode], [Preventing Respawn Observation], [Fade in creep on spawn].
  • добавлены функции кустомизации
» список изменений 2.1:
  • оптимизирован и модернизирован код
  • добавлены новые функции для контроля над системой
  • переписано описание
  • исправлена проблема с инициализационной функцией триггера NCSS Settings (для тех у кого не JNGP)
  • новая опция для отсрочки респавна - камера игрока видит место спавна (тестируется, в МП возможны десинки)
» список изменений 2.2:
  • устранены проблемы с переносом системы на другие карты.
  • устранен баг с переманиванием крипов.
  • попытка сделать проверку на камеру с помощью синхронизации через кеш (десинков больше быть не должно, но не факт что проверка будет работать корректно)
» список изменений 2.2.1:
  • устранен баг с блокировкой респавна юнита\тип юнитов при включенном режиме одиночного респавна
» список изменений 2.2.2:
  • выпилена система проверки положений камер игроков, приводящая к десинкам.
» список изменений 2.3:
  • добавлена система дропа
  • добавлена опция: [Randomize creep respawn position]
  • мелкие исправления
» Известные баги
в версии 2.1 и ниже:
  • при копировании системы бывает так, что некоторые переменные не скопировались. для этого вручную создайте их в окне "Переменные" без префикса udg_
  • строки в функциях NCSS_BeforeScan и NCSS_AfterScan, что в триггере NCSS Settings - чисто для демонстрации возможностей. при копировании не забудьте их удалить.
в версии 2.2:
при смерти крипа на экране появляется дебаг-сообщение. для этого удалите строчку call BJDebugMsg("unit "+GetUnitName(t)+" died. ind="+I2S(ind)) из функции function NCSS_Creep_OnDie takes nothing returns nothing, которая находится в триггере NCSS Main
в версии 2.2.1:
по умолчанию включена проверку на положение камеры, которая приводит к десинхронизации. необходимо отключить данную опцию либо скачать новую версию системы.
Система обновлена: 31.08.2010

Добавлено на сайт. Скачать
+280 опыта

Отредактировано agentex, 01.09.2010 в 00:54.
Старый 16.11.2008, 14:46
zer0ne

offline
Опыт: 11,219
Активность:
Ну сам смысл системы простой. Ещеб во время респавна какойнить эффект
Старый 16.11.2008, 14:56
agentex

offline
Опыт: 34,834
Активность:
мм какой например? ну во время респавна можно много че делать, мб добавлю такую настройку
Старый 16.11.2008, 15:00
zer0ne

offline
Опыт: 11,219
Активность:
как у гальвинизации
Старый 16.11.2008, 15:02
agentex

offline
Опыт: 34,834
Активность:
в версию 1.1 добавлена возможность отображения эффектов на юнитах при спауне. настройка - путь до модели.
Старый 16.11.2008, 15:16
ShadoW DaemoN

offline
Опыт: 36,798
Активность:
agentex, на твоем месте я бы серьезно поработал над кодом.

1. Использовать генпак ТОЛЬКО для объявления глобалок - не самая лучшая идея, с таким же успехом можно обойтись и без него. Или максимизируй использование возможностей vJass.
2. Не рекомендую использовать кеш. В случае с vJass следует прибегнуть к структурам.
3. Советую использовать имба-цикл и нормальную функцию для "пробега" по группе, да и вообще советую почитать про оптимизацию jass кода.
4. Элементарная эффективность:
Код:
set x = GetStoredReal(udg_cscache, I2S(H2I(g)), "x_pos_"+I2S(i))
set y = GetStoredReal(udg_cscache, I2S(H2I(g)), "y_pos_"+I2S(i))
set f = GetStoredReal(udg_cscache, I2S(H2I(g)), "facing_"+I2S(i))
// . . .

Не слишком ли много раз возвращается значение от I2S(H2I(g)), или хотя бы I2S(i)? Даже не учитывая цикл, было бы неплохо записывать результат I2S(H2I(g)) в локалку. Если будешь переходить на структуры, эта проблема отпадет сама собой.

Было бы неплохо прикрутить опциональную проверку на присутствие войск, управляемых игроком, поблизости - бывает не очень приятно, когда около твоих юнитов появляется толпа крипов.
Старый 16.11.2008, 15:53
agentex

offline
Опыт: 34,834
Активность:
ShadoW DaemoN, хорошо учту замечания
1. просто в vjass я не шарю абсолютно, а глобалки очень удобно обьявлять
2. про кеш сам знаю, а структы основаны на паралельных масивах или на чем?
3. а чем плох ForGroup?
4. иду корректировать.
насчет присутствия войск ты правильно подметил, в 1.1 это будет
Старый 16.11.2008, 16:07
ShadoW DaemoN

offline
Опыт: 36,798
Активность:
agentex,
1. http://xgm.guru/forum/showthread.php?t=13118, либо читай ..\JNGP\jasshelper\jasshelpermanual.html
2. По сути да. По структурам можно почитать материал в пункте 1.
3. Как раз ForGroup (если в группе УЖЕ присутствуют юниты и нужно произвести с ними определенные манипуляции) или GroupEnum (если нужно набирать юнитов и одновременно производить действия) и нужно юзать, а не вот такой код:
Код:
loop
  set t = FirstOfGroup(tg)
  exitwhen t == null
  call GroupRemoveUnit(tg, t)
  // . . .
endloop

Или возьмем вот это:
Код:
call GroupEnumUnitsOfPlayer(g, Player(creep_playerid), null)
loop
  set t = FirstOfGroup(g)
  // . . .
endloop

Переносим весь essential код из цикла в отдельную функцию:
Код:
function PlayerEnumFilter takes nothing returns boolean
  // GetFilterUnit() - взятый юнит
  // . . .
  // в данном случае явно заносить юниты в группу не нужно, поэтому false
  return false
endfunction

// . . .
call GroupEnumUnitsOfPlayer(g, Player(creep_playerid), Filter(function PlayerEnumFilter))
// . . .

4. Лучше сразу на структурах делай =)
Старый 16.11.2008, 16:38
V1ctor1ous

offline
Опыт: 23,781
Активность:
А можно ли изменять тех,кто спавнился,на других,как в доте?
Старый 17.11.2008, 13:20
agentex

offline
Опыт: 34,834
Активность:
Всмысле как в доте? а то есть вместо одной группы мобов спавнить другую и наоборот? ну впринципе это реально и даже не сложно...
Старый 17.11.2008, 13:25
V1ctor1ous

offline
Опыт: 23,781
Активность:
agentex Ну допустим,стояли два кентавра...им дали [censored] и спустя время(можно и рандомное) появились там же сатиры.А после ктонить другие,как пользователь захочет.
Старый 17.11.2008, 13:29
agentex

offline
Опыт: 34,834
Активность:
наоборот, пользователь тут не причем, рандом онли, не ну поставить проверку чтобы такой же уровень у мобов был из второй группы и усе
Старый 17.11.2008, 13:32
V1ctor1ous

offline
Опыт: 23,781
Активность:
agentex Кстати,неплохая идея,сделай из возможностей респауна и по времени и случайно,например от 25 до 100 сек.
Старый 17.11.2008, 13:35
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
agentex у тебя система регистрирует динамически создаваемых юнитов или только созданных юнитов при инициализации?
Старый 17.11.2008, 14:33
agentex

offline
Опыт: 34,834
Активность:
при инициализации, те которые на карте стоят, ну вернее там отсрочка 0.00 стоит можно поставить скока надо
не было цели такой регистрировать динамически создаваемых - хз зачем это надо
Старый 17.11.2008, 14:39
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Просто на некотороых картах могут сделать так:
События:
Юнит входит в регион
Условия Triggering Unit is Герой = Да или ещё кто-то
Действия:
Выключить This trigger
Создать тамто-тамто юнита
Ведь невозможно указать точное время,когда юнит войдёт в регион и получается,то что созданый(е) юнит(ы) не возродятся
Старый 17.11.2008, 14:48
agentex

offline
Опыт: 34,834
Активность:
чего? честно гря не понимаю о чем ты. а вообще в триггере Instruction в мапе есть описание работы системы, чтобы люди заранее знали как надо ее использовать - то есть никак просто ставить крипов на мапу
Старый 17.11.2008, 14:55
Dragon Knight
Меткий стрелок!!!
offline
Опыт: 4,138
Активность:
Я просто сказал тебе что может случиться во время игры,а как делаешь систему это дело твоё
Старый 17.11.2008, 15:01
agentex

offline
Опыт: 34,834
Активность:
Залита новая версия. комментируйте плз.
список изменений 1.1:
-оптимизирован код системы
-система стала универсальной, для ее работы не требуется JNGP
-добавлена возможность настройки визуального эффекта при спавне групп
-добавлена настройка рандомизации времени до респавна
-добавлена опция отсрочки таймера спавна в случае обнаружения вблизи области спавна юнитов, контроллируемых игроками
-добавлена опция "перемешивания" групп (т.е. после смерти одной респавнится другая, аналогичная по уровням)

agentex добавил:
таак свдн скачал, готовлюсь к критике..
Старый 22.11.2008, 19:37
ShadoW DaemoN

offline
Опыт: 36,798
Активность:
Цитата:
таак свдн скачал, готовлюсь к критике..

Не дождетесь ^_^ ©

Собственно, я не знаю, что тут можно комментить. Те же самые проблемы с кодом, что и в прошлой версии. Даже если бы не поленился и переделал все явные циклы (loop FirstOfGroup endloop) на условные (call GroupEnum(function blabla)), код бы избавился от кучи ненужных операций.
Несколько слов об оформлении:
1. Код читать неудобно, хоть бы нормальные отступы расставил...
2. Сделай префиксы для функций, чтобы исключить возможность совпадения имен.
3. Делай краткие комменты для функций, при просмотре которых у юзера могут возникнуть вопросы.
Старый 22.11.2008, 21:01
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 17:35.