Перейти к содержанию

Сообщения от Скрипты

В ответ пользователю DevoRevo
Аватар пользователя
3 года назад
DevoRevo

Приветствую. Голову уже сломал, как работают SetHeroLootable и IsHeroLootable

Я попробовал IsHeroLootable(“heroname”, nil)
Пробовал SetHeroLootable(“heroname”,nil)
SetHeroLootable(“heroname”, disable)
 Все равно как не крути, артефакты у героя отбираются. 

Подскажите, что я делаю не так?

Консоль ни на что не жалуется?
В ответ пользователю DevoRevo
3 года назад
И у меня вопрос назрел. 
Скажите пожалуйста кто-нибудь, - есть ли какой-то способ скриптом перенести на карте предмет статик из одной точки в другую так, чтобы он по координате z был на новом месте выше или ниже нуля?
Позарез надо, и давно.
Как телепортировать на нуль я знаю, а вот выше или ниже - не попадалось.
В ответ пользователю DevoRevo
Аватар пользователя
3 года назад
DevoRevo

Приветствую. Голову уже сломал, как работают SetHeroLootable и IsHeroLootable

Я попробовал IsHeroLootable(“heroname”, nil)
Пробовал SetHeroLootable(“heroname”,nil)
SetHeroLootable(“heroname”, disable)
 Все равно как не крути, артефакты у героя отбираются. 

Подскажите, что я делаю не так?

В общем, сам решил данный вопрос. 
Написал так в общем коде:
SetHeroLootable("Berein", nil);

 

3 года назад
подскажите плиз кто шарит в скриптах.
у меня на карте есть хижина пророка. в ней дается задание повторяемое. саму хижину я настроил правильно. указано что нужно для выполнения задания. указана награда. указано что задание многоразовое.
проблема вот в чем - в виде награды выбрано выдача существа. но помимо этого мне нужно чтобы забирались определенные ресурсы у того героя который выполнит задание. причем это типа падлянка такая). принес игрок 20 дерева ему дали дендроида например но в виде подлянки забрали все имеющиеся у героя на этот момент ресурсы и снизили его удачу и мораль на 20 единиц. 
я так понимаю придется писать через скрипт так как все уже перепробовал. важно чтобы скрипт срабатывал именно в тот момент и именно по тому герою который сдаст квест в хижине. ну и соответственно скрипт многоразовый так как задание повторяемое. отпишите плиз в личку кто сможет помочь. заранее благодарен.
Аватар пользователя
3 года назад

Здравствуйте!

Нельзя ли как-нибудь прибить костыль к игре/карте, чтобы делать реквест на веб сервер? Я думал как-то попробовать через lua скрипты в карте это сделать... Не представляю честно с какой стороны подойти к игре в этом вопросе. Мне вообще кажется это маловозможным без правки в ехешнике игры. Все же интересны соображения старожил карто/модостроения.

Аватар пользователя
3 года назад
В игре есть кнопка "подключиться к ubi.com" в разделе сетевой игры, через эту кнопку можно подвязать любую ссылку (только скорее всего айпи адресом), а чисто теоретически её можно размножить на экран карты приключений и так далее.
Кроме того, если вы хороший программист с кучей свободного времени, то вы можете написать программу, в фоновом режиме обрабатывающию данные игры и по каким-либо ивентам (проще всего — комбинации клавиш) накладывать поверх либо окно со ссылкой, либо сразу открывать ссылку в браузере
3 года назад
Здравствуйте, есть ли возможность с помощью скриптов выставить определенную неделю?
Типа, выполнил условие, значит теперь будет неделя голубя 
Аватар пользователя
3 года назад
нет.
Аватар пользователя
3 года назад
Привет, возможно ли прописать какой-то скрипт, которым можно будет передавать название объекта в текст? Конкретно, хочу сделать квест на поиск случайного артефакта, т.е. через random будет выбираться id артефакта, однако не знаю можно ли передать название выбранного id артефакта в аргумент текста(не в тексты для квеста, а в Msg box), или же придётся создавать таблицу для всех айдишников артефактов?
В ответ пользователю Азгалор
Аватар пользователя
3 года назад
Азгалор
Привет, возможно ли прописать какой-то скрипт, которым можно будет передавать название объекта в текст? Конкретно, хочу сделать квест на поиск случайного артефакта, т.е. через random будет выбираться id артефакта, однако не знаю можно ли передать название выбранного id артефакта в аргумент текста(не в тексты для квеста, а в Msg box), или же придётся создавать таблицу для всех айдишников артефактов?
Можно создать массив, где в качестве позиции будет использован id артефакта, и там будет храниться имя. Например:

artefactArray = {}

artefactArray[4] = "Лук из рога единорога" --где 4 это id артефакта

rndArt = random(ваше число)

MessageBox({"Ссылка_на_текст"; artefact = artefactArray[rndArt]})--где artefact это в вашем текстовом файле

Добавлено через 12 часов 23 минуты
А так, я не нашел ни одной функции, которая бы возвращала текстовое имя объекта. Если нужен большой список возможных артефактов, то прийдётся писать таблицу
Аватар пользователя
3 года назад
Азгалор, ловите таблицу. Взято из моей карты Путь героя, поэтому не полностью универсально, но название и описание артефакта доступны по id с помощью функций GetArtefactName(id) / GetArtefactDesc(id). Если нужно будет, можете в карте найти файлик const.lua, там есть аналогичные таблицы и для заклинаний, существ, скиллов и прочего.
-- типы артефактов. распределял по логике, а не по слотам, в которые они ставятся
ART_TYPE_WEAPON = 1; -- оружие
ART_TYPE_SHIELD = 2; -- щиты
ART_TYPE_BOOTS = 3; -- сапоги и поножи
ART_TYPE_HELMET = 4; -- шлемы и шапки
ART_TYPE_ARMOR = 5; -- кирасы
ART_TYPE_CLOAK = 6; -- плащи
ART_TYPE_RING = 7; -- кольца
ART_TYPE_NECKLACE = 8; -- ожерелья
ART_TYPE_MISC = 9; -- прочее

-- список артефактов
ARTEFACT_TABLE_NAME = 1; -- файл с названием артефакта
ARTEFACT_TABLE_TYPE = 2; -- тип артефакта
ARTEFACT_TABLE_COST = 3; -- номинальная цена артефакта (не равна внутрегеройской)
artefact_table =
{
[ARTIFACT_SWORD_OF_RUINS] = {'SwordOfRuin', ART_TYPE_WEAPON, 2000}, -- Меч Мощи
[ARTIFACT_GREAT_AXE_OF_GIANT_SLAYING] = {'Great_Axe_of_giant_slaying', ART_TYPE_WEAPON, 8000}, -- Секира горного короля
[ARTIFACT_WAND_OF_X] = {'Wand_of_x', ART_TYPE_WEAPON, 4000}, -- Палочка с заклинанием
[ARTIFACT_UNICORN_HORN_BOW] = {'UnicornHornBow', ART_TYPE_WEAPON, 10000}, -- Лук из рога Единорога
[ARTIFACT_TITANS_TRIDENT] = {'Titan`s_trident', ART_TYPE_WEAPON, 4000}, -- Трезубец Титанов
[ARTIFACT_STAFF_OF_VEXINGS] = {'Staff_of_vexing', ART_TYPE_WEAPON, 16000}, -- Посох Преисподней
[ARTIFACT_SHACKLES_OF_WAR] = {'ShacklesOfWar', ART_TYPE_MISC, 20000}, -- Кандалы неизбежности
[ARTIFACT_FOUR_LEAF_CLOVER] = {'Four_leaf_clover', ART_TYPE_MISC, 2000}, -- Четырехлистный клевер
[ARTIFACT_ICEBERG_SHIELD] = {'Iceberg_shield', ART_TYPE_SHIELD, 5000}, -- Ледяной щит
[ARTIFACT_GOLDEN_SEXTANT] = {'Golden_sextant', ART_TYPE_MISC, 3000}, -- Секстант морских эльфов
[ARTIFACT_CROWN_OF_COURAGE] = {'Crown_of_courage', ART_TYPE_HELMET, 15000}, -- Корона льва
[ARTIFACT_CROWN_OF_MANY_EYES] = {'Crown_of_many_eyes', ART_TYPE_HELMET, 1000}, -- Корона всевидящего
[ARTIFACT_PLATE_MAIL_OF_STABILITY] = {'PlateMailOfStability', ART_TYPE_ARMOR, 20000}, -- Доспехи Забытого Героя
[ARTIFACT_BREASTPLATE_OF_PETRIFIED_WOOD] = {'Breastplate_of_petrified_wood', ART_TYPE_ARMOR, 2000}, -- Нагрудник огромной мощи
[ARTIFACT_PEDANT_OF_MASTERY] = {'Pedant_of_mastery', ART_TYPE_NECKLACE, 15000}, -- Кулон Мастерства
[ARTIFACT_NECKLACE_OF_BRAVERY] = {'Necklace_of_bravery', ART_TYPE_NECKLACE, 2000}, -- Ошейник льва
[ARTIFACT_WEREWOLF_CLAW_NECKLACE] = {'Werewolf_claw_necklace', ART_TYPE_NECKLACE, 6000}, -- Ожерелье Кровавого Когтя
[ARTIFACT_EVERCOLD_ICICLE] = {'Evercold_icicle', ART_TYPE_NECKLACE, 4000}, -- Кулон ледяных объятий
[ARTIFACT_NECKLACE_OF_POWER] = {'Necklace_of_power', ART_TYPE_NECKLACE, 8000}, -- Ожерелье победы
[ARTIFACT_RING_OF_LIGHTING_PROTECTION] = {'Ring_of_lightning_protection', ART_TYPE_RING, 3000}, -- Кольцо защиты от молний
[ARTIFACT_RING_OF_LIFE] = {'RingOfLife', ART_TYPE_RING, 7000}, -- Кольцо жизненной силы
[ARTIFACT_RING_OF_HASTE] = {'Ring_of_haste', ART_TYPE_RING, 18000}, -- Кольцо скорости
[ARTIFACT_NIGHTMARISH_RING] = {'Nightmarish_ring', ART_TYPE_RING, 7000}, -- Кольцо сломленного духа
[ARTIFACT_BOOTS_OF_SPEED] = {'BootsOfSpeed', ART_TYPE_BOOTS, 8000}, -- Сапоги путешественника
[ARTIFACT_GOLDEN_HORSESHOE] = {'Golden_horseshoe', ART_TYPE_MISC, 6000}, -- Золотая подкова
[ARTIFACT_WAYFARER_BOOTS] = {'Wayfarer_boots', ART_TYPE_BOOTS, 5000}, -- Сапоги открытого пути
[ARTIFACT_BOOTS_OF_INTERFERENCE] = {'Boots_of_interference', ART_TYPE_BOOTS, 1000}, -- Сапоги магической защиты
[ARTIFACT_ENDLESS_SACK_OF_GOLD] = {'EndlessSackOfGold', ART_TYPE_MISC, 40000}, -- Сума бесконечного золота
[ARTIFACT_ENDLESS_BAG_OF_GOLD] = {'Endless_bag_of_gold', ART_TYPE_MISC, 10000}, -- Мешочек бесконечного золота
[ARTIFACT_ANGEL_WINGS] = {'Angel_wings', ART_TYPE_CLOAK, 40000}, -- Крылья ангела
[ARTIFACT_LION_HIDE_CAPE] = {'Lion_hide_cape', ART_TYPE_CLOAK, 6000}, -- Накидка с гривой льва
[ARTIFACT_PHOENIX_FEATHER_CAPE] = {'Phoenix_feather_cape', ART_TYPE_CLOAK, 4000}, -- Накидка из перьев феникса
[ARTIFACT_CLOAK_OF_MOURNING] = {'Cloak_of_mourning', ART_TYPE_CLOAK, 12000}, -- Плащ Смертоносной Тени
[ARTIFACT_HELM_OF_ENLIGHTMENT] = {'Helm_of_enlightenment', ART_TYPE_HELMET, 4000}, -- Тюрбан просвещенности
[ARTIFACT_CHAIN_MAIL_OF_ENLIGHTMENT] = {'Chain_mail_of_enlightenment', ART_TYPE_ARMOR, 6000}, -- Кольчуга просвещенности
[ARTIFACT_DRAGON_SCALE_ARMOR] = {'Dragon_scale_armor', ART_TYPE_ARMOR, 10000}, -- Доспехи из чешуи дракона
[ARTIFACT_DRAGON_SCALE_SHIELD] = {'DragonscaleShield', ART_TYPE_SHIELD, 10000}, -- Щит из чешуи дракона
[ARTIFACT_DRAGON_BONE_GRAVES] = {'Dragon_bone_greaves', ART_TYPE_BOOTS, 10000}, -- Поножи из кости дракона
[ARTIFACT_DRAGON_WING_MANTLE] = {'Dragon_wing_mantle', ART_TYPE_CLOAK, 10000}, -- Мантия из крыльев дракона
[ARTIFACT_DRAGON_TEETH_NECKLACE] = {'Dragon_teeth_necklace', ART_TYPE_NECKLACE, 10000}, -- Ожерелье из зубов дракона
[ARTIFACT_DRAGON_TALON_CROWN] = {'Dragon_talon_crown', ART_TYPE_HELMET, 10000}, -- Корона из когтей дракона
[ARTIFACT_DRAGON_EYE_RING] = {'Dragon_eye_ring', ART_TYPE_RING, 10000}, -- Кольцо Глаз дракона
[ARTIFACT_DRAGON_FLAME_TONGUE] = {'Dragon_flame_tongue', ART_TYPE_WEAPON, 10000}, -- Пламенный язык дракона
[ARTIFACT_ROBE_OF_MAGI] = {'Robe_of_magi', ART_TYPE_ARMOR, 20000}, -- Халат Сар-Иссы
[ARTIFACT_STAFF_OF_MAGI] = {'Staff_of_magi', ART_TYPE_WEAPON, 20000}, -- Посох Сар-Иссы
[ARTIFACT_CROWN_OF_MAGI] = {'Crown_of_magi', ART_TYPE_HELMET, 20000}, -- Корона Сар-Иссы
[ARTIFACT_RING_OF_MAGI] = {'Ring_of_magi', ART_TYPE_RING, 20000}, -- Кольцо Сар-Иссы
[ARTIFACT_DWARVEN_MITHRAL_CUIRASS] = {'Dwarven_mithral_cuirass', ART_TYPE_ARMOR, 15000}, -- Кираса короля гномов
[ARTIFACT_DWARVEN_MITHRAL_GREAVES] = {'Dwarven_mithral_greaves', ART_TYPE_BOOTS, 15000}, -- Поножи короля гномов
[ARTIFACT_DWARVEN_MITHRAL_HELMET] = {'Dwarven_mithral_helmet', ART_TYPE_HELMET, 15000}, -- Шлем короля гномов
[ARTIFACT_DWARVEN_MITHRAL_SHIELD] = {'Dwarven_mithral_shield', ART_TYPE_SHIELD, 15000}, -- Щит короля гномов
[ARTIFACT_SCROLL_OF_SPELL_X] = {'ScrollOfSpell', ART_TYPE_MISC, 7000}, -- Магический свиток с заклинанием
[ARTIFACT_GRAAL] = {'Graal', ART_TYPE_MISC, 100000}, -- Слеза Асхи
[ARTIFACT_BOOTS_OF_LEVITATION] = {'Boots_of_levitation', ART_TYPE_BOOTS, 12000}, -- Сапоги левитации
[ARTIFACT_SKULL_HELMET] = {'Skull_Helmet', ART_TYPE_HELMET, 2000}, -- Шлем некроманта
[ARTIFACT_VALORIOUS_ARMOR] = {'Valorious_Armor', ART_TYPE_ARMOR, 3000}, -- Доспехи бесстрашия
[ARTIFACT_BOOTS_OF_SWIFTNESS] = {'Boots_of_Swiftness', ART_TYPE_BOOTS, 5000}, -- Сапоги странника
[ARTIFACT_MOONBLADE] = {'Moonblade', ART_TYPE_WEAPON, 4000}, -- Лунный клинок
[ARTIFACT_RING_OF_CELERITY] = {'Ring_of_Celerity', ART_TYPE_RING, 8000}, -- Кольцо стремительности
[ARTIFACT_BAND_OF_CONJURER] = {'Band_of_Conjurer', ART_TYPE_RING, 7000}, -- Пояс элементалей
[ARTIFACT_EARTHSLIDERS] = {'Earthsliders', ART_TYPE_BOOTS, 4000}, -- Изумрудные туфли
[ARTIFACT_RIGID_MANTLE] = {'Rigid_Mantle', ART_TYPE_CLOAK, 3000}, -- Плащ Силанны
[ARTIFACT_JINXING_BAND] = {'Jinxing_Band', ART_TYPE_RING, 6000}, -- Проклятое кольцо
[ARTIFACT_BONESTUDDED_LEATHER] = {'Bonestudded_Leather', ART_TYPE_ARMOR, 3000}, -- Туника из плоти
[ARTIFACT_WISPERING_RING] = {'Wispering_Ring', ART_TYPE_RING, 4000}, -- Кольцо предостережения
[ARTIFACT_HELM_OF_CHAOS] = {'Helm_of_Chaos', ART_TYPE_HELMET, 4000}, -- Шлем Хаоса
[ARTIFACT_TWISTING_NEITHER] = {'Twisting_neither', ART_TYPE_NECKLACE, 8000}, -- Кулон Поглощения
[ARTIFACT_SANDALS_OF_THE_SAINT] = {'Sandals_of_the_Saint', ART_TYPE_BOOTS, 12000}, -- Сандалии Святого
[ARTIFACT_SHAWL_OF_GREAT_LICH] = {'Shawl_of_the_great_lich', ART_TYPE_CLOAK, 14000}, -- Плащ Сандро
[ARTIFACT_RING_OF_DEATH] = {'Ring_of_Death', ART_TYPE_RING, 4000}, -- Кольцо Грешников
[ARTIFACT_NECROMANCER_PENDANT] = {'Necromancer_Pendant', ART_TYPE_NECKLACE, 7000}, -- Амулет некроманта
[ARTIFACT_FREIDA] = {'Freida', ART_TYPE_MISC, 1000}, -- Фрида (fake)
[ARTIFACT_RING_OF_THE_SHADOWBRAND] = {'Ring_of_the_Shadowbrand', ART_TYPE_RING, 1000}, -- Кольцо Заклейменных Тенью (fake)
[ARTIFACT_OGRE_CLUB] = {'Ogre_Club', ART_TYPE_WEAPON, 15000}, -- Дубина людоеда
[ARTIFACT_OGRE_SHIELD] = {'Ogre_Shield', ART_TYPE_SHIELD, 15000}, -- Щит людоеда
[ARTIFACT_TOME_OF_DESTRUCTION] = {'Tome_of_Destruction', ART_TYPE_MISC, 20000}, -- Том магии Хаоса
[ARTIFACT_TOME_OF_LIGHT_MAGIC] = {'Tome_of_Light_Magic', ART_TYPE_MISC, 20000}, -- Том магии Света
[ARTIFACT_TOME_OF_DARK_MAGIC] = {'Tome_of_Dark_Magic', ART_TYPE_MISC, 20000}, -- Том магии Тьмы
[ARTIFACT_TOME_OF_SUMMONING_MAGIC] = {'Tome_of_Summoning_Magic', ART_TYPE_MISC, 20000}, -- Том магии Призыва
[ARTIFACT_BEGINNER_MAGIC_STICK] = {'Beginer_Magic_Stick', ART_TYPE_WEAPON, 2000}, -- Волшебная палочка новичка
[ARTIFACT_RUNIC_WAR_AXE] = {'Runic_War_Axe', ART_TYPE_WEAPON, 10000}, -- Рунный боевой топор
[ARTIFACT_RUNIC_WAR_HARNESS] = {'Runic_War_Harness', ART_TYPE_ARMOR, 10000}, -- Рунная боевая упряжь
[ARTIFACT_SKULL_OF_MARKAL] = {'Skull_of_Markal', ART_TYPE_MISC, 18000}, -- Череп Маркела
[ARTIFACT_BEARHIDE_WRAPS] = {'Bearhide_Wraps', ART_TYPE_CLOAK, 3000}, -- Тайные защитные покровы
[ARTIFACT_DWARVEN_SMITHY_HUMMER] = {'Dwarven_Smithy_Hammer', ART_TYPE_WEAPON, 5000}, -- Гномий кузнечный молот
[ARTIFACT_RUNE_OF_FLAME] = {'Rune_of_Flame', ART_TYPE_MISC, 4000}, -- Руна пламени
[ARTIFACT_TAROT_DECK] = {'Tarot_Deck', ART_TYPE_MISC, 3000}, -- Колода Таро
[ARTIFACT_CROWN_OF_LEADER] = {'Crown_Of_Leader', ART_TYPE_HELMET, 5000}, -- Корона лидерства
[ARTIFACT_MASK_OF_DOPPELGANGER] = {'Mask_Of_Doppelganger', ART_TYPE_HELMET, 16000}, -- Маска справедливости
[ARTIFACT_EDGE_OF_BALANCE] = {'Edge_Of_Balance', ART_TYPE_WEAPON, 2000}, -- На грани равновесия
[ARTIFACT_RING_OF_MACHINE_AFFINITY] = {'Ring_Of_Machine_Affinity', ART_TYPE_RING, 18000}, -- Кольцо родства с машинами
[ARTIFACT_HORN_OF_PLENTY] = {'Horn_Of_Plenty', ART_TYPE_MISC, 20000}, -- Рог изобилия
[ARTIFACT_RING_OF_UNSUMMONING] = {'Ring_Of_Unsummoning', ART_TYPE_RING, 3000}, -- Кольцо изгнания
[ARTIFACT_BOOK_OF_POWER] = {'Book_Of_Power', ART_TYPE_MISC, 9000}, -- Том Силы
[ARTIFACT_TREEBORN_QUIVER] = {'Treeborn_Quiver', ART_TYPE_MISC, 10000}, -- Изумительный колчан
[ARTIFACT_PRINCESS] = {'Princess_Aelina', ART_TYPE_MISC, 1000}, -- Принцесса Аэлина (fake)
};

function GetArtefactName(id)
if(id == ARTIFACT_BEARHIDE_WRAPS) then
return '/Text/Game/Artifacts/'..artefact_table[id][ARTEFACT_TABLE_NAME]..'/name.txt'
else
return '/Text/Game/Artifacts/'..artefact_table[id][ARTEFACT_TABLE_NAME]..'/Name.txt'
end
end

function GetArtefactDesc(id)
return '/Text/Game/Artifacts/'..artefact_table[id][ARTEFACT_TABLE_NAME]..'/Description.txt'
end

function GetArtefactType(id)
return artefact_table[id][ARTEFACT_TABLE_TYPE]
end

function GetArtefactCost(id)
return artefact_table[id][ARTEFACT_TABLE_COST]
end
3 года назад

Здравствуйте. Подскажите, пожалуйста: как в боевом скрипте дождаться окончания проигрываемой анимации. 

 

Обязательно ли запускать анимацию в отдельном потоке, или можно запускать её в основном?

 

Идея боя такая, что при ходе юнита, юнит накладывает на случайный стек игрока слепоту. Необходимые проверки на применимость вызваны до вызова этой функции. Проблема в том, что получается ситуация, когда юнит двигается, потом анимация движения прерывается, он начинает анимацию каста, и анимация каста прерывается не закончившись анимацией атаки, если юнит изначально планировал атаковать стек игрока. 

Вот код используемых функций:

function Cast(unit, target)
combatSetPause(not nil);
CastBlindForFree(unit, target);
playAnimation(target, 'hit', ONESHOT_STILL);
table.insert(blind_array, target);
combatSetPause(nil);
return not nil
end

function CastBlindForFree(caster, target)
SetUnitManaPoints(caster, 100);
local mana_before_cast = GetUnitManaPoints(caster);
repeat sleep(1) until(GetUnitManaPoints(caster) == 100);
UnitCastAimedSpell(caster, SPELL_BLIND, target);
sleep(4);
SetUnitManaPoints(caster, mana_before_cast);
repeat sleep(1) until(GetUnitManaPoints(caster) == mana_before_cast);
end

Другими словами именно логика отрабатывает корректно, а как синхронизировать анимации, чтобы они проигрывались последовательно, а не основные игровые анимации прерывали анимацию каста. 

 

Большое спасибо за уделённое время и внимание к прочтению вопроса, будут благодарен за информацию. 

В ответ пользователю MaiorPain
Аватар пользователя
3 года назад
MaiorPain

Здравствуйте. Подскажите, пожалуйста: как в боевом скрипте дождаться окончания проигрываемой анимации. 

 

Обязательно ли запускать анимацию в отдельном потоке, или можно запускать её в основном?

 

Идея боя такая, что при ходе юнита, юнит накладывает на случайный стек игрока слепоту. Необходимые проверки на применимость вызваны до вызова этой функции. Проблема в том, что получается ситуация, когда юнит двигается, потом анимация движения прерывается, он начинает анимацию каста, и анимация каста прерывается не закончившись анимацией атаки, если юнит изначально планировал атаковать стек игрока. 

Вот код используемых функций:

function Cast(unit, target)
combatSetPause(not nil);
CastBlindForFree(unit, target);
playAnimation(target, 'hit', ONESHOT_STILL);
table.insert(blind_array, target);
combatSetPause(nil);
return not nil
end

function CastBlindForFree(caster, target)
SetUnitManaPoints(caster, 100);
local mana_before_cast = GetUnitManaPoints(caster);
repeat sleep(1) until(GetUnitManaPoints(caster) == 100);
UnitCastAimedSpell(caster, SPELL_BLIND, target);
sleep(4);
SetUnitManaPoints(caster, mana_before_cast);
repeat sleep(1) until(GetUnitManaPoints(caster) == mana_before_cast);
end

Другими словами именно логика отрабатывает корректно, а как синхронизировать анимации, чтобы они проигрывались последовательно, а не основные игровые анимации прерывали анимацию каста. 

 

Большое спасибо за уделённое время и внимание к прочтению вопроса, будут благодарен за информацию. 

while combatReadyPerson() == nil do sleep(1) end
Данный код "спит" пока ход не принадлежит никакому существу: в момент старта боя или во время проигрывания анимации. Если не поможет, то тогда только через ожидание, но стоит учитывать что sleep() в боевом скрипте отличается от аналога на карте приключений. Аргумент sleep() должен исчисляться сотнями чтобы выдать хоть какую-то видимую задержку в боевом скрипте
Аватар пользователя
3 года назад
MaiorPain в отдельном потоке имхо лучше, если вы в чём-то накосячите, то это приведёт только к неудачному касту, а без потока функция вылетит и не выполнит кусок кода.

И насколько я понимаю, вы же делаете каст юнитом во время его хода в хуке UnitMove(unit)? Тогда если каст состоялся, нужно просто чтобы эта функция вернула not nil и игра не будет сама управлять этим существом в этот ход.

Статистика

Приветствуем новейшего участника: recijeb

Сейчас на сайте 6 пользователей 1231 гостей