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

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

Ответ
 
leorak

offline
Опыт: 825
Активность:
перевод переменной из одного типа в другой
есть 15 областей с названиями 1,2,3 ... 14,15
и надо сделать портование в рандомную область. (их может быть и больше а не только 15)
я решил сделать это способом совмещения строк
local string t = "gg_rct_" + I2S(GetRandomInt(1, 15))
call SetUnitPositionLoc( gg_unit_Hpal_0000, GetRectCenter(t) )
gg_rct_НАЗВАНИЕ - так в джасе выглядит область. получается что если соеденить строки gg_rct_ + ранд(1,15) то получится строка имеющая такое же значение как и настоящая область. т.е. gg_rct_3
но когда я нажимаю проверить редактор выдает ошибку неправильный тип аргумента.
попытка перевести из текста в область тоже успехом не увенчалась ибо опять ошибка несовпадения типов при присвоение
товарищи джасеры объясните по хардкору как быть. в Пыхе было все просто "строка".$переменная и все работало. а вот в джасе какая то подстава
Старый 22.07.2013, 21:12
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
В php используятся утиная типизация, в jass - строгая. Поэтому обычное присвоение не прокатит. Самый простой и 100% рабочий способ - забить локации в массив руками.
Старый 22.07.2013, 21:20
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Никак.
Старый 22.07.2013, 21:55
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Строка##Строка
Работает только при препроцессинге.
Clamp добавил:
Т.е. в функцию не вставить.

Отредактировано Clamp, 23.07.2013 в 14:00.
Старый 23.07.2013, 02:12
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
leorak, массив локейшенов, и GetRandomInt( от 0 и до макс локейшенов) и области для такой чепухи лучше не юзать, возьми камеру и помести ей на место куда нужно телепортироваться и скопируй её координаты в код.. пример - udg_LPoints[0] = Location(0.450,110.00)
Старый 23.07.2013, 02:31
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
library SuperLib
{
	private region array regions
	#define private count = 100500

	callback onInit()
	{
		#for i(0, count )
			regions[i] = gg_rct_##i
		#endfor
	}

	public region GetRandomRegion()
	{
		return regions[GetRandomInt(0,count ) ];
	}
}
Как то так. не проверял работоспособность, могут быть ошибки\опечатки.
Старый 23.07.2013, 11:20
DioD

offline
Опыт: 45,134
Активность:
такого объекта как переменная джас не имеет, соответственно вызвать переменную по имени нельзя.
то что отписал Faion выше самый быстрый метод, немножко более понятно будет использовать хеш таблицу или кеш, там можно использовать строки вместо чисел если хотеть.
Старый 23.07.2013, 13:29
J64_

offline
Опыт: 4,724
Активность:
globals
	hashtable hash
endglobals

function IntegerToRect takes integer id returns rect
	call SaveFogStateHandle(hash, 0, 0, ConvertFogState(id))
	return LoadRectHandle(hash, 0, 0)
endfunction

globals
	rect array Rects
endglobals

function LoadRectsEx takes integer offset, integer count returns nothing
	loop
		exitwhen (count <= 0)
		set count = count - 1
		set Rects[count] = IntegerToRect(offset - count)
	endloop
endfunction
function LoadRects takes rect firstRect, integer count returns nothing
	call LoadRectsEx(GetHandleId(firstRect), count)
endfunction

/////////////////////

call LoadRects(gg_rct_1, 15)
Так уже не работает?
Старый 23.07.2013, 15:34
DioD

offline
Опыт: 45,134
Активность:
для работы этого метода достаточно конвертировать
ConvertFogState(H2I(gg_rct_FIRST)+offset)
при этом никакие переменные не нужны, то что вы понаписали блот ненужный.
да и еще, это работает ЖУТКО медленно и близзы могут в любой момент внезапно решить закрыть и эту дырку тоже.
Старый 23.07.2013, 15:55
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Не думаю что это хороший пример.
Старый 23.07.2013, 16:24
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
DioD, я сперва хотел такое предложить, но где гарантия того, что регионы будут лежать с одинаковыми хендлами?
Старый 23.07.2013, 17:05
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Faion, кстати триггеры ровно 1 к 1 не лежат, тестил в своей карте, через один пару была... к
Так что DioD:
ConvertFogState(H2I(gg_rct_FIRST)+offset)
не всегда вернёт хендл....
Старый 23.07.2013, 17:09
DioD

offline
Опыт: 45,134
Активность:
Не думаю что это хороший пример.
хороший пример это перехватывать создание регионов и регистрировать гденить, vjass такую возможность даёт, однако это ответ на пост выше, а не пример хорошего кода, игра с указателями по умолчанию плохой код.
хендлы гарантированно лежат один за другим если не было освобождённых номеров, например если удалить хоть один триггер есть риск что остальные уже по порядку не будут лежать а какойто триггер займёт освободившийся слот.
Старый 23.07.2013, 17:15
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
DioD, имхо у Faion'а лучше получилось)
Старый 23.07.2013, 17:23
DioD

offline
Опыт: 45,134
Активность:
зато у меня без лишней воды
DioD добавил:
вот вам РАБОЧИЙ семпл, жать эскейп для теста
Прикрепленные файлы
Тип файла: w3x RawDeV.0002.w3x (74.3 Кбайт, 8 просмотров )
Старый 23.07.2013, 17:41
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
quq_CCCP:
Faion, кстати триггеры ровно 1 к 1 не лежат, тестил в своей карте, через один пару была... к
?
DioD:
хороший пример это перехватывать создание регионов и регистрировать гденить, vjass такую возможность даёт, однако это ответ на пост выше, а не пример хорошего кода, игра с указателями по умолчанию плохой код.
cjass так же дает эту возможность. В итоге получится костыль. Тем более нужно перехватывать конкретную группу ректов, а не все. Так что нет.
DioD:
зато у меня без лишней воды
Простите, где у меня там что лишнее? Инит + метод для получения рандомного ректа.
Старый 23.07.2013, 18:53
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Faion, кароче берём триггер (случайный, неважно какой) и находим его ИД, после приравниваем 2 инт переменных это ид и начниаем одно увеличивать на 1 а другое уменьшаеть, при каждом уменьшении и увеличении проверяем есть ли триггер в данной ячейке памяти, результат был таков отр. - да, да, нет и тд, в положительную сторону да, нет, да, да и тд...
\
Старый 24.07.2013, 14:39
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
quq_CCCP, не, я просто не понял, к чему мне это пояснять?) Я вообще не предлагал сканить объекты в памяти, это бредово т.к.
Старый 24.07.2013, 14:48
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Ну я просто ошибся, тыкнув ссылку на твой ник, я диоду, ну и всем что рез был такой...
Старый 24.07.2013, 14:59
DioD

offline
Опыт: 45,134
Активность:
карту пример скачай и посмотри, если руки из жопы это не ко мне.
Старый 24.07.2013, 18:29
Ответ

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

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

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

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



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