Лось
offline
Опыт:
7,223Активность: |
В JNGP паке есть справочник по ф-иям, про struct написано в теме с JNGP'ом. Ещё можно юзать JassCraft там тоже спрвочник по ф-иям и хайтлайтер (он есть в утилитах на сайте). |
28.08.2008, 15:30 | #21
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
df Hunter
Нападатель
offline
Опыт:
5,749Активность: |
if IsUnitType(u, ut)==true then
как раз для некоторых ut это надо так делать вроде, ибо баг == =) sry for post edit :P Отредактировано Toadcop, 28.08.2008 в 20:04. |
28.08.2008, 17:03 | #22
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Цитата:
ибо багу в студию) я тестил оно норм работало... |
|
28.08.2008, 20:43 | #23
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Dragon27
offline
Опыт:
6,779Активность: |
ADOLF, эта ошибка вроде в статье описана: http://xgm.guru/articles.php?section=wc3&name=spellmaking3
» Из статьи function Trig_Lame_Condition takes nothing returns boolean return (IsUnitType(GetTriggerUnit() , UNIT_TYPE_TOWNHALL) == true) endfunction function Trig_Lame_Condition takes nothing returns boolean return IsUnitType(GetTriggerUnit() , UNIT_TYPE_TOWNHALL) endfunction На первый взгляд обе они верны, и должны работать одинаково. Первая из них работает правильно, в то время как вторая всегда возвращает false. Используем return bug, чтобы посмотреть, что на самом деле возвращает функция IsUnitType. В идеале 1 должна соответствовать значению true, а 0 – значению false. Воспользуемся функцией: function B2I takes boolean b returns integer return b return 0 endfunction Оказывается, что конструкция B2I(IsUnitType(whatever, UNIT_TYPE_TOWNHALL)) не возвращает 1, она возвращает 64! Таким образом, функция IsUnitType(whatever, UNIT_TYPE_TOWNHALL), в случае, когда юнит принадлежит типу TOWNHALL, вместо 'boolean 1', возвращает 'boolean 64' и это integer значение приводится к типу boolean. Сравнение этого булевого значения ('boolean 64') с true (==true) вернет true, и оно также будет корректно работать в операторах if, elseif и exitwhen. Но при использовании в булевских выражениях (boolexprs), величина 'boolean 64' будет равна значению false. Вот такой вот очередной забавный баг от blizzard. Функция IsUnitType также некорректно работает для типов юнитов: GROUND 8 FLYING 2 RANGED_ATTACKER 1 //как и HERO |
28.08.2008, 21:10 | #24
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
exploder
iOS zealot
offline
Опыт:
19,394Активность: |
Она же ошибка boolexpr. Довольно боянистая штука. Ссылка на тред с багом есть в статье Blade.dk, если вы внимаетльно читали мой перевод могли видет описание этого бага. Как это сделал комрад Dragon27.
|
29.08.2008, 00:46 | #25
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
а теперь скажу я - я тестил добавление юнита в группу через булекспр, и указывал через ib2 ретурн баговый любые значения (0x00000001 to 0xffffffff) - и юнит благополучно добавлялся в группу
то что описанно в статье либо следсвие кривых рук, либо старой версии вара Цитата:
любое ненулевое значение - труе |
|
29.08.2008, 02:07 | #26
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Integro
старожило
offline
Опыт:
630Активность: |
Покажите новичку в Jass на примере этого кода, как его монжно оптимизировать и способы, кому не лень объясните подробно):
Код:
|
08.09.2008, 17:58 | #27
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ScorpioT1000
Работаем
offline
Опыт: отключен
|
Цитата:
все геты в переменки ScorpioT1000 добавил: Цитата:
гет в переменку! |
||
09.09.2008, 00:56 | #28
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
dk
offline
Опыт:
60,293Активность: |
Все эти геты возвращают точку, которая успешно утекает... Вобще юзать лучше координаты
dk добавил: А в GameTime вобще оригинальный способ время считать) Количество итераций(прохождений) цикла в jass ограничено, да и вобще вайт в цикле не гуд... Лучше на подсчет времени отдельный триггер или таймер. |
09.09.2008, 11:57 | #29
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
ScorpioT1000, ты меня расстраиваешь...
Смысл заносить результат от Get...() в переменную, если она используется не более трех раз? Integro, для начала было бы неплохо раскрыть все BJ: Код:
Код:
Код:
Далее... Неправильный реализация алгоритма высчитывания прошедшего времени. Наиболее верное решение - использовать таймеры: Код:
Еще было бы неплохо вынести текст "Время игры:" в отдельный столбик (чтобы лишний раз не задавать его, ибо текст статичен). Ах да, еще и заинлайнить функцию Start() сразу в инициализацию. Отредактировано ShadoW DaemoN, 09.09.2008 в 17:34. |
09.09.2008, 12:08 | #30
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
Цитата:
нужно было просто сказать "юзай координаты" ShadoW DaemoN меня удивляет как только ты мог оставить без внимания "секнды, десятки секунд" логичнее было бы оставить просто секунды, и если сек больше 10 то добовлять "0" + у тебя ошибка в коде Отредактировано Jon, 09.09.2008 в 13:03. |
|
09.09.2008, 12:44 | #31
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
ShadoW DaemoN
offline
Опыт:
37,078Активность: |
Jon, я говорю про более общие случаи. В данном же коде целесообразней применить функции, работающие с координатами (что, собственно, и было мною показано).
А вот зачем результат от GetPlayerSlotState(Player(i)) заносить в переменную, для меня остается загадкой ^_^ |
09.09.2008, 12:49 | #32
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
Код:
насчет таймера пистаь щас влом) насчет счетчика игроков неуверен, надо зрить что и когда и как оно возращает, возможно там таки надо сравниваться с константой и использовать B2I заносить строки в массив - хз Отредактировано ADOLF, 09.09.2008 в 16:48. |
09.09.2008, 15:28 | #33
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
эм... чето я непонял причем тут udg_knb_unit[i] > udg_knb_msize... может быть имелось ввиду i > udg_knb_msize?
ответ - я предпочел бы первый вариант P.S. как я понял ты пишеш систему динамеческого выделения памяти, т.е. просто ищещ свободную ячейку в массиве, заполняш, ищещ еще, заполняеш, если удалить нужно то удаляеш и снава потом заполняеш.......... тут лучше использовать стек свободных индексом, тогда можно вообще без цыкла обойтись |
18.10.2008, 01:33 | #34
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
писал чисто отруки, непроверял, по теории должно робить...
Код:
Отредактировано Jon, 18.10.2008 в 02:22. |
18.10.2008, 01:57 | #35
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
имхо бредово =\ ... нехочю сейчас полностью в логику въезжать.
здесь ТОКА 2 фичи.
ну а оба вместе результат достигаютьса совмещением этих двух вещей =)
т.е.
иммем алгоритм типа
стек свободных хендлов - если он пустой - макс выделеный хендл +1 это уникальный ИД плотный стек (как я его называю ну или лист что бы там небыло) делаетьса примерно так
учитывая что у нас елементов не больше 8000... используем полученый уникальный ИД (см. выше) для записи в массив "позицый."
т.е. типо addelement ->
set max=max+1 set elem[max]=x наш уникальный ИД set pos[x]=max// нумеруем позицыю елемента. removeelement ->
здесь фичя заключаетьса в перетаскивание последнего елемента на позицыю удаляемого тем самым мы "заделываем" дыру и уменьшаем кол елементов. т.е. set elem[x]=elem[max]
set pos[elem[max]]=pos[x] ну там обнулять можно можно и не обнулять set max=max-1 ну на мой взгляд это "перфект метод" ибо это как бы 2 независимые структуры но тем не менее их можно легко и "правильно" связать.
не про ресайкл уникального ИД я просто не писал но там просто помещаетьса елемент в нужный стэк типо
set max=max+1 set stack[max]=x ... ну вот типо того вообще это обсуждалось не раз уже на форуме ^_^ |
18.10.2008, 02:16 | #36
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
J
expert
offline
Опыт:
48,447Активность: |
Uksus потомучто во перых, никакого цыкла не будет, т.к. я сказал тебе как делать выше, ну или как тоадкоп сказал, а иначе это уже ну никак не быстро
во вторых я неуверен в разности скорости работы локалок и глобалок, не ну в яп разница есть конешно, и чисто логически предпологается разница, но это же джасс, кто-нить пусть даст исходник инторпретатора и там посмотрим... ну даже если и есть разница я неуверен что она хоть както проявится... а создание локалки уже явно не в оптимальность |
18.10.2008, 02:48 | #37
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Toadcop
offline
Опыт:
54,313Активность: |
локалкам надо еще инцыализироватьса ;) т.е. если операцый до 6 где то... (с одной и той же переменой) то 100% лутче глобалку потом потихоньку локалки стают выгодней... но это зпдротство омг. ХОТЯ факт в том что иммено аллокацыя локальной пеменой не такая уж и быстрая почти как зипись в кеш чуть быстрей... (в статик кеш т.е. строки вбиты а не перемены и тем более не клеютьса) |
18.10.2008, 02:55 | #38
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
adic3x
offline
Опыт:
108,439Активность: |
сабж, локалки не будут намного быстрее, даже в нагруженном цикле)
кста позрить аллокацию свободного индекса в вЖасс, вполне этичная штука странный у жоника стек...) хотя, +1 к Тс в том плане что влом вникать чВ |
18.10.2008, 08:54 | #39
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Ranger21
I love beatiul days XD
offline
Опыт:
13,274Активность: |
Код:
Извиняюсь за поднятие топика, но лучше тут спросить... А собственно, эта функция подходит для MUI способностей? Я в плане том, что тут группа глобалка - хотя и происходит создание, но ведь она одна может быть ток? В одно время несколько раз может запускаться call GroupEnumUnitsInRange(gr_temp, x, y, r, ex) или нет? |
18.04.2009, 20:23 | #40
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|