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

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

Ответ
 
biridius

offline
Опыт: 18,935
Активность:
триггерная смена текстур земли создает кадавров
Код:
void battle_landscape () {
 int land = GetRandomInt(0, 5)
 int array tile
 if land==0 {tile[0]='Ldrt'; tile[1]='Ldro'; tile[2]='Lrok'}
 elseif land==1 {tile[0]='Qcrp'; tile[1]='Qgrs'; tile[2]='Qdrt'}
 elseif land==2 {tile[0]='Agrs'; tile[1]='Agrd'; tile[2]='Avin'}
 elseif land==3 {tile[0]='Nice'; tile[1]='Isnw'; tile[2]='Nsnr'}
 elseif land==4 {tile[0]='Dlvc'; tile[1]='Drds'; tile[2]='Dgrs'}
 elseif land==5 {tile[0]='Zsan'; tile[1]='Ztil'; tile[2]='Zbkl'}
 int i=0
 loop {
      SetTerrainType(GetUnitX(grid[i]), GetUnitY(grid[i]), tile[GetRandomInt(0,2)], -1, 1, 0)
      i++; exitwhen (i>gridmax)
 }
}


юниты grid[i] - отдалены друг от друга на 80 пунктов

Функция должна менять текстуры ландшафта в начале каждой битвы, случайно заполняя поле боя текстурами из одного из 6-и наборов
В начале каждого боя она заменяет старый ландшафт новым.

Проблема:
Иногда (после нескольких применений функции) результат получается смешивающим несколько разных типов ландшафта, причем бывает, что вместо указанных id создается только ландшафт города (который начинается на 'Y' и его не может быть в массиве, но это основной тип ландшафта карты)

Что с этим делать?

Скрины кадавров приложены
Миниатюры
Кликните на картинку для увеличения
Название:  war3 2015-01-01 16-23-38-53.jpg
Просмотров: 53
Размер:  411.6 Кбайт  Кликните на картинку для увеличения
Название:  war3 2015-01-01 16-23-56-47.jpg
Просмотров: 55
Размер:  438.5 Кбайт  

Отредактировано biridius, 01.01.2015 в 16:37.
Старый 01.01.2015, 14:34
Hate
конь вакуумный
online
Опыт: 43,033
Активность:
а дебаг?
Старый 01.01.2015, 19:16
biridius

offline
Опыт: 18,935
Активность:
Hate, а что дебажить, код работает правильно же?
когда я меняю рандом на определенное число 0-5, все работает без смешиваний
но когда ландшафты разные, то они превращаются в разные куски ландшафта "Города" =(
Миниатюры
Кликните на картинку для увеличения
Название:  war3 2015-01-01 16-22-42-27.jpg
Просмотров: 33
Размер:  418.6 Кбайт  
Старый 01.01.2015, 20:37
Ancient
Щпаовапа
offline
Опыт: 38,370
Активность:
Ну вот рандом и дебаж.
Старый 01.01.2015, 20:40
biridius

offline
Опыт: 18,935
Активность:
Ancient, то есть узнать наложение какого на какой даст кривой? пока нашел 5->2, 1->2, 2->2, 5->3, и 4->3 но что с этим делать?
Старый 01.01.2015, 20:45
DioD

offline
Опыт: 45,134
Активность:
отладочные сообщения за вас никто делать не будет (есть конечно инвалиды, но они сейчас в санатории).
смотрите что происходит в коде когда выпадает город, делаете выводы.
Старый 02.01.2015, 06:57
biridius

offline
Опыт: 18,935
Активность:
DioD,
я убрал пятый ландшафт и попробовал дебажить все что можно:

дебаг мне говорит, что:
1) рандом набора дает от 0 до 4-и как надо
2) номер текстуры в массиве никогда не больше 2 и не меньше 0 как и надо
3) ид рандомных текстур при заполнении всегда выходит меньше 'Y000', а дальше идет ландшафт города ('Ydrt' и подобные), то есть текстуры кодом ставятся нужные, а превращаются в левые

код работает правильно при использовании каждого одного ландшафта вместо разных (убирал рандом менял на 0-4)

косяки появляются на всех видах ландшафта, когда они накладываются на отличающийся от них, через какое-то количество применений

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

Код:
void battle_landscape () {
 int land = GetRandomInt(0, 4), a
 int array tile
 BJDebugMsg("land "+I2S(land))
 if land==0 {tile[0]='Ldrt'; tile[1]='Ldro'; tile[2]='Lrok'}
 elseif land==1 {tile[0]='Qcrp'; tile[1]='Qgrs'; tile[2]='Qdrt'}
 elseif land==2 {tile[0]='Agrs'; tile[1]='Agrd'; tile[2]='Avin'}
 elseif land==3 {tile[0]='Nice'; tile[1]='Isnw'; tile[2]='Nsnr'}
 elseif land==4 {tile[0]='Dlvc'; tile[1]='Drds'; tile[2]='Dgrs'}
 real x=gridx0, y, ymax=gridy0-gridd*9, xmax=gridx0+gridd*11
 loop {
  y=gridy0
  loop {
   a=GetRandomInt(0,2)
   if a>2 or a<0 {BJDebugMsg("wrong index")}
   if tile[a]>'Y000' {BJDebugMsg("town texture")}
   SetTerrainType(x, y, tile[a], -1, 1, 0)
   y-=64; exitwhen (y<ymax)
  }
  x+=64; exitwhen (x>xmax)
 }
}


при кадаврах ни разу не выводит, что неправильный индекс или текстура города, и наборы ландшафта разные берутся, работают отдельно нормально, а вместе превращаются в город

Отредактировано biridius, 02.01.2015 в 13:17.
Старый 02.01.2015, 13:04
DioD

offline
Опыт: 45,134
Активность:
  1. ид рандомных текстур при заполнении всегда выходит меньше 'Y000', а дальше идет ландшафт города ('Ydrt' и подобные), то есть текстуры кодом ставятся > > нужные, а превращаются в левые
и каким образом я это могу увидеть из представленого кода?
на отличающийся от них, через какое-то количество применений
состояние необратимое и больше такие тайлы не меняются вообще?
или меняются но не так как хотелось бы?
Старый 02.01.2015, 14:11
biridius

offline
Опыт: 18,935
Активность:
DioD,
Цитата:
Сообщение от DioD
состояние необратимое и больше такие тайлы не меняются вообще?
или меняются но не так как хотелось бы?

необратимо: некоторые тайлы превращаются в тайлы города и потом всегда генерируются как тайлы города

хотя поверх них иногда удается сгенерить правильный ландшафт, тайлы которого не заменились на город, но только двух видов - ашенваля и подземелья (которое с лавой)

Отредактировано biridius, 02.01.2015 в 17:27.
Старый 02.01.2015, 14:20
ScorpioT1000
Работаем
online
Опыт: отключен
у тебя на панели рельеф какие типы тайлов стоят, такие и дозволено проставлять, я думаю
ScorpioT1000 добавил:
Попробуй вот это изящное решение) xgm.guru/forum/showthread.php?t=44648 долго искал чтобы показать)
Старый 02.01.2015, 18:26
biridius

offline
Опыт: 18,935
Активность:
ScorpioT1000, Спасибо, попробую. Я так понял надо копать Splats\UberSplatData.slk и заменять соответствующие кодам текстуры через менеджер на тайлы для создания уберсплата кодом?
Тайлы в каком архиве вара лежат?
Старый 02.01.2015, 18:59
ScorpioT1000
Работаем
online
Опыт: отключен
тайлы надо делить на куски, они в terrain art где-то, лучше уж взять более красивые текстуры,
там в теме посмотри по ссылке на другую систему, где разных текстур насоздавали для них
Старый 02.01.2015, 19:35
DioD

offline
Опыт: 45,134
Активность:
небольшая "подсказка" посмотрите внимательно как игра хранит состояние тайла и сколько тайлов абсолютный предел, это поможет понять в чём именно проблема.
Старый 03.01.2015, 07:13
Ответ

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

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

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

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



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