26

» WarCraft 3 / Как найти ближайший разрушаемый объект?

Obelick:
Делать небольшой рект, и смещать его вокруг точки. Тогда за раз будет обрабатывается не большое количество декора. А за 2 секунды можно безболезненно обработать огромные площади.
26

» WarCraft 3 / Как найти ближайший разрушаемый объект?

Пример выше должен помочь, если перебирать не 900 декораций сразу, а например по 90 каждые 0.1. Если равномерно распределить, то по примерно по 5 декораций выбираться будет за кадр.

Я правильно понимаю тебе нужно отсортировать декорации по дальности от базы?
26

» WarCraft 3 / Как найти ближайший разрушаемый объект?

Obelick:
Все таки сколько одновременно юнитов выбираеют декор?
Возможно лагает какраз от того, что у тебя много юнитов делают enum одновременно в одном тике.
В таком случае неважно какая периодичность - лагать будет одинаково. Можно решить примерно
так

Очень утрированный пример:

таймер 0.01
выборка для unit[index]
index++
if index > 200 { index = 1}
на 200 юнитов хватит и будет периодичность 2 секунды.

Потом какие нибудь важные декорации которые ты ищешь можно найти один раз при загрузке карты, тем более что она у тебя генерируемая. Например создать отсортированные массивы определенного типа по которым можно делать более быстрый перебор, чем по всем декорациям на карте.
26

» WarCraft 3 / Как найти ближайший разрушаемый объект?

Obelick:
Лагать не должно, если правильно отсеивать.
У меня в карте более 30 к разрушаемых пропсов, заспавненных во время игры (около 30 декораций на радиус 500 ед.) Через енум и стрелы летят и проверка на зрение работает и все норм.
То что предложил Bergi_Bear самое оно, только ректы можно глобальные подготовить разных размеров заранее.

Obelick:
В 512 думаю около 10, интервал 2 секунды. Но фишка в том, что в этом радиусе может и не быть подходящих объектов.
Что то мне подсказывает что именно при "ненахождении" объектов возникают проблемы. Возможно вы что то упустили в этом месте.
26

» WarCraft 3 / Вопрос по поводу отлова точки

pro100master:
Надо погрешность учитывать, примерно 0.5 ед.
     boolean IsTerrainPathableTrue(real x, real y){
      boolean b = true
      SetUnitPosition  (PathableUnit,x,y) 
      if (RAbsBJ (GetUnitX(PathableUnit) - x)>0.5)or(RAbsBJ (GetUnitY(PathableUnit) - y)>0.5){
       b = false 
      }
      return b 
     }  
PathableLib
 //Для работы библиотеки нужно:
    //1. Указать ид в переменной PathableUnitId
    //2. Инициализировать библиотеку PathableIni()
    library PathableLib
     globals
      private integer PathableUnitId = 'h000' //ид даммика
      private unit    PathableUnit
      private real    PathableX
      private real    PathableY
     endglobals 

     boolean IsTerrainPathableTrue(real x,real y){
      SetUnitPosition   (PathableUnit,x,y) 
      PathableX = GetUnitX(PathableUnit) - x
      PathableY = GetUnitY(PathableUnit) - y
      if PathableX <= 0 {PathableX = -PathableX} //RAbsBJ
      if PathableY <= 0 {PathableY = -PathableY} //RAbsBJ   
      return PathableX < 0.5 or PathableY < 0.5
     }  
      
     define IsTerrainPathableFalse(x,y) = not(IsTerrainPathableTrue(x,y))     
     
    nothing PathableIni(){ 
     PathableUnit = CreateUnit(Player(PLAYER_NEUTRAL_PASSIVE),PathableUnitId,0,0,0) 
     ShowUnit (PathableUnit, false)
    }
    
    endlibrary
    
Загруженные файлы
26

» WarCraft 3 / Вопрос по поводу отлова точки

IsTerrainPathable криво работает с разрушаемыми объектами.

Однако можно написать свою функцию на даммике, перемещая его в точку и проверяя его смещение относительно заданных координат.
26

» WarCraft 3 / Красивые хп/мана бары

Во первых, если просадка идет не от цикла, а от многократного удаления/создания эффекта, то достаточно запоминать старое значение и сменять эффект, только если хп изменилось на 5%.
Если проблема все-таки в переборе большого кол-ва юнитов в циклом, то:

1.Попробовать событие "юнит хп изменилось".
Возможно тоже тяжело для каждого будет, надо тестить.

2.Свой таймер на каждого юнита, а лучше на небольшую группу (10+). Чтобы грубо говоря не 100 юнитов в один тик перебрались, а по 10 со смещением.

З. Не считать юнитов с полным хп.
26

» WarCraft 3 / Красивые хп/мана бары

Вот поделюсь примером, единственное они у меня ниже 0 слегка, надо мешь поднять наверно будет в mdlvis

менять модель примерно так:
 DestroyEffect(HpBar[i]) 
 HpBar[i] = AddSpecialEffectTarget("HpBar_"+I2S(R2I(GetUnitLifePercent(u)/5))+".mdx","overhead")
Загруженные файлы
26

» WarCraft 3 / Красивые хп/мана бары

кстати прогресс бар там нормально масштабируется.
а нет, он по дефолту выше
А так самый простой вариант это делать на эффектах, как советовал темой ниже и прикреплять на "overhead", тогда всегда на месте будет. Да и легче производительности, так как двигать их не надо будет.
26

» WarCraft 3 / Красивые хп/мана бары

Можно поменять порядок рендера материала для хп бара в его модели, тогда он будет рисоваться всегда поверх юнита.
кстати прогресс бар там нормально масштабируется.
Загруженные файлы
26

» WarCraft 3 / Есть ли расширение для красных хп-баров?

Bergi_Bear:
ну если 20 то ещё куда не шло.. я та понял каждый % новый эффект да Jack-of-shadow, ?
По 1 на каждые 5 %. Общий вес, около 50 кб. получается. В узкой полоске юнита самое то.
Bergi_Bear:
но War Fortress что под 130 патч заточен?
Может и заточен, я не пробовал. Пока что управление на wasd не вводил. Все на стандарте так то, без хаков.
26

» WarCraft 3 / Есть ли расширение для красных хп-баров?

Bergi_Bear:
Так это надо даммиков иметь, много не поюзаешь
можно на эффектах аналог сделать.
большой плюс в том, что при движении апдейтить не надо.
20 моделей хватит, для плавного перехода.
развернуть
низковато правда повесил
26

» Hunter or Victim / Hunter or Victim

Обновление 0.83

подробнее

ИНТЕРФЕЙС
Добавлены описания приказов.
Изменены иконки.

КРИТИЧЕСКИЕ БАГИ И ОПТИМИЗАЦИЯ
Полностью переписано 70% кода карты
Большинство функций раньше были рассчитаны только на одного игрока, теперь все переписано под мультиплеер.
Раньше множество тяжелых функций, отвечающих за камеру, туман и звуки перебирались циклом для всех игроков, теперь функции не требующие синхронизации рассчитываются локально.
Убрано множество утечек памяти.
Исправлен баг прицельного выстрела ломающий анимацию и скорость передвижения.

ГЕНЕРАЦИЯ ТЕРРЕЙНА
Исправлены коллидеры пней.
Добавлены падающие листья.
Исправлен баг при котором всегда генерировался смешанный тип ландшафта вместо выбранного игроком.

ТУМАН И НЕБО
Теперь на карте генерируются до 20 зон тумана разных размеров, на кол-во зон влияет тип ландшафта.

ПРОКЛЯТЫЕ ЗОНЫ
Исправлено поведение тумана в проклятой зоне.
Временно выключен эффект потери создания.
Темный туман наносит урон.
Внутри зоны спавнятся тени.

ЗВУКИ
Теперь громкость всех звуков зависит от дальности источника.
Добавлены звуки шагов и плеск воды.

СКРЫТНОСТЬ И СИСТЕМА ШУМА
  • Добавлены индикаторы на миникарте показывающие красным цветом звуки врагов и желтым звуки героя.
  • Передвигаясь по лесу герой может встретить множество опасностей, избежать которые поможет осторожность и скрытность.
  • Шум привлекает хищников рядом с вами, и выдает ваше местоположение другим игрокам.

СУЩЕСТВА

Враждебные:
Кабан, Большой кабан Волк, Медведь, Морлок, Паук.
  • Избегают встречи с игроком. Нападают при близком контакте или агрессии игрока.
  • Не нападают если игрок преследуется существом другого типа.

Нейтральные:
Лань, Олень, Кабан (детеныш), Кролик, Енот, Краб, Рак, Крыса, Черепаха, Ящерица, Бабочки, Срекозы.
  • Прячутся услышав шум поблизости. Убегают при приближении.
  • После смерти животного может остаться мясо (тест), поедая которое герой может восстановить сытость и здоровье. Кол-во восстановленных очков зависит от уровня животного.

СИСТЕМА ГОЛОДА (Тест)
Герой имеет 100 очков сытости.
Ежесекундно значение сытости падает на некоторое кол-во очков.
Когда кол-во очков упадет до 0, герой начнет терять здоровье.
Для восстановления сытости можно поедать (пока что сырые) грибы или мясо.

ТРЯСИНА
Теперь проваливаясь в трясину герой теряет 10 ед. здоровья.

ГЕРОЙ
Исправлена скорость, при переключении состояний плаванья и скрытности.
Добавлен 5% шанс на кровотечение при получении урона. Любое лечение останавливает кровотечение.

НОВЫЕ КОМАНДЫ
Добавлены команды отображения объектов на миникарте:
showroad - отобразить дороги.
showriver - отобразить реки.
showswamp - отобразить болота.
shpwfog - отобразить туман.
showhero - отобразить героев.

26

» Crazy Dwarf Race / Crazy Dwarf Race

VetsaN:
Да, с фарами намного круче будет. Но есть техническое ограничение.
Поскольку превышение 3 источников света на квадрат в радиусе 500+- вызывает проблемы рендера. Лампочки могут не отображаться, мигать и так далее. Для фар одной машины нужно как минимум 5 ламп вряд. От 10 машин будет уже 50. Возможно в рефордж версии источники света будут работать нормально. Но пока я ищу способ решить проблему. Возможно единственный пока способ - отключать все остальные источники света на карте и оставлять только фары, и то локально, только для машины на которой едешь.
Есть ещё вариант - делать лампы из юнитов, удаляя лампы при пересечении, но это выглядит слегка кривовато, да очень прожорливо по ресурсам.
26

» WarCraft 3 / Ошибка Missing endblock, cJass

UrsaBoss:
я себе еще такую тему сделал)
развернуть
define for_i (max) = {integer i = 1;loop;exitwhen i > max}
define end_i () = {i ++;endloop}
define for_n (max) = {integer n = 1;loop;exitwhen n > max}
define end_n () = {n ++;endloop}
26

» WarCraft 3 / Ошибка Missing endblock, cJass

В общем я убрал заменил все твои глобалки (типо таких g_timeWater[]) из других либ на простые значения и все хорошо компилится.