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

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

Закрытая тема
 
mm0zzy

offline
Опыт: 1,256
Активность:
Рандомные области
Здравствуйте! В общем, я когда то же задавал уже этот вопрос: "как сделать чтобы при перемещении юнита он попадал в случайную область?" и как я нашел к нему тогда решение:
Сделал это так:
-Сначала добавил все области в массив;
-Создал переменную типа "Целочисленная" дал ей преимущество (значение) "случайное целое число диапазоне от 1 до 12";
-И сделал триггер, что каждые 0,50 сек. будет устанавливаться все выше указано.
Потом при создании или перемещении юнита делал это так Пример: Создать 1 Тиренд для "Выбраный игрок"( или игрок, без разницы) в центр, (переменную типа область, с масивом указанного рандома). лицом там к чемуто и тд.
В общем к чему веду....Как сделать на гуи, чтобы перемещенный юнит, уже ниходящийся в области, в которую попал рандомно, нельзя было переместить рандомно еще 1 или больше героев пока сам герой не выйдет из области.
Если есть у кого время все сделать, и выложить на гуи, буду очень признателен!! Прошу не писать типа "библиотеку скорпа" или что то еще, перед написанием темы перелазил по поиску и пересмотрел. Если чесно не очень "прохаванный в Jass", понять могу только если хорошо прокомментировано...
Старый 14.11.2012, 01:39
MicroElf

offline
Опыт: 4,288
Активность:
При перемещении проверять наличие юнитов в области.
Вообще по сабжу я бы делал так:
Занести области в массив
Перед тем как нужно переместить кого-то в случайную область, давай созданной для этих целей целочисленной переменной значение от 1 до n (где n очевидно число областей)
После чего перемещать юнита в область по этому числу с проверкой условия на наличие юнитов.
При присвоения значение переменной можно сразу проверить условие и при необходимости заново присвоить ей другое значение.
Если хочется сделать совсем хорошо, то надо изначально исключить все области, в которых есть юнит. Т.е. чтобы не переприсываивать в некоторых случаях переменной значение по 10 раз. Но это чуть сложнее, и если вероятность и количество "занятых" областей мало, то можно забить.
MicroElf добавил:
Если не получится, выкладывай скрин ГУИ, я помогу довести до ума. Задача простая и на ГУИ точно решается без проблем.
Старый 14.11.2012, 10:46
DioD

offline
Опыт: 45,134
Активность:
в данном конкретном случае проще при телепорте проверять нет ли когонить в области и если есть вызывать рандом еще разок, шанс что многократно выпадет область в которой ктото есть стремится к нулю.
Старый 14.11.2012, 10:54
DemoN2099
annihilator
offline
Опыт: 4,418
Активность:
Как сделать на гуи, чтобы перемещенный юнит, уже ниходящийся в области, в которую попал рандомно, нельзя было переместить рандомно еще 1 или больше героев пока сам герой не выйдет из области.
Ты хочешь, чтобы триггер не думал, что герой, телепортировавшись в область, вошёл в неё для телепорта? Область для последующих телепортаций свободна? (вышел - зашёл - телепорт)
Прошу не писать типа "библиотеку скорпа"
lol'd
Старый 14.11.2012, 11:08
ScorpioT1000
Работаем
online
Опыт: отключен
шанс что многократно выпадет область в которой ктото есть стремится к нулю.
Всем должно быть известно, что при определённых условиях вполне может выпасть много раз подряд.
А вот если бы вы использовали библиотеку скорпа, то ...
добавляешь это в нестандартный код карты
смотри, я даже пример сделал:
Сделал это так:
-Сначала добавил все области в массив, например heroes, от 0 до 11
-Создал переменную типа "Целочисленная" например heroesCurrent
дальше вызываешь что-то вроде
custom script: call ClearRandomIntMem()
custom script: set udg_heroesCurrent = GetRandomIntMem(0,11)
Создать юнита 1 в heroes[heroesCurrent]
custom script: set udg_heroesCurrent = GetRandomIntMem(0,11)
Создать юнита 2 в heroes[heroesCurrent]
custom script: set udg_heroesCurrent = GetRandomIntMem(0,11)
Создать юнита 3 в heroes[heroesCurrent]
custom script: set udg_heroesCurrent = GetRandomIntMem(0,11)
Создать юнита 4 в heroes[heroesCurrent]
...
и не надо НИЧЕГО проверять, он не будет повторяться
Старый 14.11.2012, 12:21
mm0zzy

offline
Опыт: 1,256
Активность:
ScorpioT1000, закинул в нестандартный код карты, что-то нужно изменять в самом коде??
Так то все сделал, вот только там получается:
call ClearRandomIntMem() - это очистить (обнулить как я понял)
а set udg_RandomR = GetRandomIntMem(0,9) где 0 и 9 это значение между которым будет происходить шанс на выпдение того или иного числа так? ну как примерно случайное целое число в дипазоне...??
Вот только у меня выметает чегото много ошибок...
Старый 14.11.2012, 19:32
ScorpioT1000
Работаем
online
Опыт: отключен
Вот только у меня выметает чегото много ошибок...
ScorpioT1000 добавил:
а set udg_RandomR = GetRandomIntMem(0,9) где 0 и 9 это значение между которым будет происходить шанс на выпдение того или иного числа так? ну как примерно случайное целое число в дипазоне...??
да, границы включительно
Старый 14.11.2012, 19:51
mm0zzy

offline
Опыт: 1,256
Активность:
ScorpioT1000, вродебы все сдлелал, и jngp поставил и код вроде бы нормальный, не вылетает ошибки...хз все равно в меню кидает, загрзка карты не происходит. Что может быть?
З.Ы. говорил что jasse не понимаю...
Старый 14.11.2012, 20:15
влад10011

offline
Опыт: 2,337
Активность:
ScorpioT1000, А не легче сделать ему настройку под гуй в виде дефайна?
например никому из гуишников не нужна функция Min:

define IMinBJ(i,ii)=GetRandomIntMem(i,ii)

в гуй триггере:
Переменная типа целочисленная Random
Переменная типа область массив Rect
От 1 до N делать действия:
Set Variable: Random=Min(1,N)

создать юнита в Rect[Random]
Старый 14.11.2012, 20:25
mm0zzy

offline
Опыт: 1,256
Активность:
влад10011, тогда там только 1 область будет срабатывать, та, что указана самой первой, вроде бы...
Старый 14.11.2012, 20:39
влад10011

offline
Опыт: 2,337
Активность:
Цитата:
Сообщение от mm0zzy
От 1 до N делать действия:

цикл(да и с чего ты взял будет только 1вая если это рандом? Оо)
Старый 14.11.2012, 20:57
mm0zzy

offline
Опыт: 1,256
Активность:
влад10011, не знаю так ли
Миниатюры
Кликните на картинку для увеличения
Название:  Безымянный.png
Просмотров: 18
Размер:  282.6 Кбайт  
Старый 14.11.2012, 21:02
ScorpioT1000
Работаем
online
Опыт: отключен
влад10011, можно, да не нужно =)
mm0zzy, блин, ну я не знаю, отключи RtC в меню ве.. тут вообще ничего нету в коде кроме математики
Старый 14.11.2012, 21:03
mm0zzy

offline
Опыт: 1,256
Активность:
ScorpioT1000, так я его удалял перед установкой jngp, и редактировал файл вихак луа.
Я вообще понять не могу ничего...скрипт кинул в нестандартный код карты, все сделал как надо, перед перемещением героя, точнее в тригере...вот что и как у меня выходит и все триггеры что и как:
Миниатюры
Кликните на картинку для увеличения
Название:  Безымянный.png
Просмотров: 15
Размер:  300.8 Кбайт  Кликните на картинку для увеличения
Название:  Безымянный2.png
Просмотров: 11
Размер:  302.6 Кбайт  Кликните на картинку для увеличения
Название:  Безымянный3.png
Просмотров: 11
Размер:  192.8 Кбайт  Кликните на картинку для увеличения
Название:  Безымянный4.png
Просмотров: 12
Размер:  196.5 Кбайт  
Старый 14.11.2012, 21:14
влад10011

offline
Опыт: 2,337
Активность:
ScorpioT1000, Ну просто ему так будет удобней.
mm0zzy, так, но для начала:
1) сделай так чтобы система ScorpioT1000 работала(разберись с JNGP)
2)в самый вверх его кода вставь строчку: define IMinBJ(i,ii)=GetRandomIntMem(i,ii)
3)И сделай как ты делал на скрине можно сразу при создании указывать в качестве индекса массива Min, я это вообще просто как пример привёл
Старый 14.11.2012, 21:16
mm0zzy

offline
Опыт: 1,256
Активность:
mm0zzy, ну первый скрин это тот, что касается циклов, предлагал влад10011,
Старый 14.11.2012, 21:17
влад10011

offline
Опыт: 2,337
Активность:
mm0zzy, Судя по подсветке кода, у тебя выключен синтаксис vJass, поставь галочку в "Enable JassHelper" и он заработает.
Функция Min не даёт рандом!!!
Я предложил замену CS вставок на Min(путём define)
Старый 14.11.2012, 21:21
ScorpioT1000
Работаем
online
Опыт: отключен
все верно,но у тебя видимо жнгп не запустился. ты точно запускаешь New Gen WE.exe ?
Старый 14.11.2012, 21:22
mm0zzy

offline
Опыт: 1,256
Активность:
ScorpioT1000, нет то был через обычный, щяс залю скрины из jngp
mm0zzy добавил:
просто по сути если есть ошибки в коде то он ответственно должен показать где именно ошибка а он просто кидает в меню варика. Если удалить код то загружает карту...без проблем.
Старый 14.11.2012, 21:27
ScorpioT1000
Работаем
online
Опыт: отключен
обычный не сможет скомпилировать, т.к. код на vJass
Старый 14.11.2012, 21:30
Закрытая тема

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

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

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

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



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