26

» WarCraft 3 / Создание предмета через itemUserData

много чем, это Разные Предметы из Разных категорий из других Разрядов из Кампании и у них у всех отдельные значения
Ну так сгруппируй их
26

» WarCraft 3 / Создание предмета через itemUserData

привязывая данные к Предмету
А тебе не это надо? Что б по типу предметы получать номер массива
Тип предмета 'I03D', это 1227895620, если отнять 1227895619 тотполцчаешь 1
Вот у тебя I03D=1
А переменная с индектом 1 = 'I03D'
26

» WarCraft 3 / Создание предмета через itemUserData

Emafusail:
это всё числа, и 'I03D' тоже число.
да но оно возвращает 1227895620
а не значение 1
Ну так вычти из него 1227895619, и используй остаток как ИНДЕКС массива.
И будут у тебя типы предметов от 1227895620 до 1227895724
Emafusail:
ну хорошо, как ты это видишь?
Запись всех типов предметов в массив от 1 до 105
При подборе предмета проверка его на принадлежность к этим 105 предметам.
Нахождение совпадения, и, соответственно, его номера в массиве.
Работа с найденным номером.
Всё.
26

» WarCraft 3 / Создание предмета через itemUserData

Emafusail, еще раз пытаюсь тебе донести - это делать надо НЕ ТАК.
Ты, со стороны лог;ки движка, пишешь непонятно что непонятно и хочешь получать на выходе в непонятном месте весьма конкретный результат. Это так не работает. Тут нужно совсем по другому всё оформить.
26

» WarCraft 3 / Создание предмета через itemUserData

Emafusail:
при совпадении Типа конечно
Для этого нужно взять ТИП предмета (число в виде 'I03D'), и сравнить его сотвсеми из списка (а он у тебя длинной в 105), и при первомже совпадении вернуть его номер. Например это будет 37.
И уже с этими 37 делать всё что хочешь, т.к. номер имея ты и данные другие можно подтянуть.
Ну там еще можно лупить базу типа set t['I03D'] = 'I03D'
Хотя тут надо чуть по другому на индекс напирать, но смысмыс в общем такой.
Но одно другого не отменяет вообще

Emafusail, это всё числа, и 'I03D' тоже число.
26

» WarCraft 3 / Создание предмета через itemUserData

ДА! Но оно записывает Только Последний Индекс для всех предметов
SetItemUserData
не различает индекс 1 2 3 4 5 6 а записывает только Последний индекс т.е 105 Для всех предметов!
Не "только последний", а "все 105 поочереди с перезаписью".
Сначало предмет имеет значение 0 (видимо), цикл ему тут же делает 1...тут же делает 2...тут же 3...4...5...6...и так до 105, и только тогда отваливает от него.
26

» WarCraft 3 / Создание предмета через itemUserData

Вот смотри далее... Ты задаешь переменную для тела цикла, и считаешь её пока она не упрётся в лимит от инита = 105
Т.е. цикл отработает 105 раз и сделает следующее:
Записывает дату подобранного предмета как тело = это числа от 1 до 105, т.е. тут происходит перезапись сто раз.
Пишет в другую переменную с индексам тела цикла само значение тела цикла.
...всё
Что тут должно произойти? Кроме как дата предмета будет равно 105 после последней перезаписи, а переменная ItemUserDataMas[1...105] = 1...105

Emafusail:
здесь проверяю
Но здесь нигде нет проверки что UserData подобранного предмета равно 0.
Разве не это значит "предмет у которого нет значения" ?

меня интересует почему
call SetItemUserData(GetManipulatedItem(), Cnt_Item_Init)
устанавливает для всех предметов значение Item_Init_Number_End
а когда проверяю Значения в инвентаре у них у всех значение 105
а не 1 2 3 4 5 6 7 8 9 исходя из GetItemTypeId
Из-за того что ты перезаписываешь это UserData для подобранного предмета
26

» WarCraft 3 / Создание предмета через itemUserData

А где ты проверяешь чтоту предмета нет значений? Тут нет этого куска.
26

» WarCraft 3 / Создание предмета через itemUserData

Да, поэтому ставить его надо НЕ в конце.
Ты там делаешь x[a]=a, т.е. что бы ссослаться на индекс массива тебе нужно получить его номер, а его номер - это его же индекс... Зачем?
А после этого SetData(i,x[a]+1)
Хотя по сути это равно SetData(i,a+1)

Ааа...я понял, ты как раз этого и НЕ делаешь.
Ты пишешь set x[1]=1, и тут же после этого пишешь SetData(i,x[1+1]), т.е. ссылаешься на x[2], а оно у тебя будет записано только во время следующего такта цикла.
26

» WarCraft 3 / Создание предмета через itemUserData

А чего ты отладку вызываешь после цикла, а не внутри него? Раз ссылаешься на ту переменную, которая у тебя толкает сам цикл.
26

» WarCraft 3 / Пак способностей - Skeleton Archer

OVOgenez:
Варик мертв, анлаки, сейчас уже не 2007 год чтобы на серьезных щщах в редакторе залипать.
Переезжай в пираточек)
26

» WarCraft 3 / Система атаки не рабоатет

Хил делается через SetUnitState , а не через UnitDamageTarget
call SetUnitState( u , UNIT_STATE_LIFE, GetUnitState( u, UNIT_STATE_LIFE ) + heal)
Ну ты же видишь что он хочет сделать именно такой хил, который будет так же резиститься бронёй как и урон.
26

» WarCraft 3 / Система атаки не рабоатет

Тут важнее понять откуда берётся DamageFull
А еще ты обращаешься к переменоой, а значение ей задаёшь сразу после этого, т.е. при каждом новом ударе у тебя идёт "отхил" (через отрицательный урон) от того значения, которое было записано в момент предыдущей атаки...
Не понятно зачем тебе локейшн (точка).
На замахе далеко не уедешь. Надо отлавливать факт получения целью урона от авто-атаки героя, и работать уже с этим значением.
26

» WarCraft 3 / Пак способностей - Skeleton Archer

OVOgenez, это "Змеиная ловкость", самый НЕ скучный скилл из дефолтных, и на много интереснее того что предлагаешь ты:
Мультишот на 6 атак, как 3й Гирокоптера - пресная фигня;
Стандартные промахи - нон-стоп тема! хД
26

» WarCraft 3 / Стаки орб эффектов

Полностью избавляешься от стандартных орбов.
Делаешь полностью триггерные аналоги этих механик (по возможности).
Переносишь все абилки юнитов (орбы) и предметов (тоже орбы) на основу ЯДа.
При попытке атаковать с одной из абилок или одним из предметов - отлавливаешь урон по жертве.
Когда жертва получает урон от ЯДа - проверяешь обидчика на все абилки и предметы, и тут же вызываешь реакцию на них: т.е. если есть башер - считаешь как там башить (шанс,урон); если есть сфера замедления - считаешь шанс, накладываешь дебафф; если есть вампиризм - считаешь сколько отхилить надо.
Всё просто. Просто делать надо вручную абсолютно всё.
26

» WarCraft 3 / Как сделать repick

Для реализации подобного функционала нужно что бы для каждого игрока была вовремя произведена запись того героя, которого он себе выбирает. Далее нужно по команде проверять наличие записанного героя, и если некоторые условия подходят (например то что репик ещё не был использован, и/или герой не умер, и/или это только начало игры), удалять его с возвращать деньги владельцу.