Приветствую. Голову уже сломал, как работают SetHeroLootable и IsHeroLootable
Я попробовал IsHeroLootable(“heroname”, nil)
Пробовал SetHeroLootable(“heroname”,nil)
SetHeroLootable(“heroname”, disable)
Все равно как не крути, артефакты у героя отбираются.Подскажите, что я делаю не так?
Сообщения от Скрипты
Консоль ни на что не жалуется?
Абсолютно не на что.
Скажите пожалуйста кто-нибудь, - есть ли какой-то способ скриптом перенести на карте предмет статик из одной точки в другую так, чтобы он по координате z был на новом месте выше или ниже нуля?
Позарез надо, и давно.
Как телепортировать на нуль я знаю, а вот выше или ниже - не попадалось.
Приветствую. Голову уже сломал, как работают SetHeroLootable и IsHeroLootable
Я попробовал IsHeroLootable(“heroname”, nil)
Пробовал SetHeroLootable(“heroname”,nil)
SetHeroLootable(“heroname”, disable)
Все равно как не крути, артефакты у героя отбираются.Подскажите, что я делаю не так?
Написал так в общем коде:
SetHeroLootable("Berein", nil);
у меня на карте есть хижина пророка. в ней дается задание повторяемое. саму хижину я настроил правильно. указано что нужно для выполнения задания. указана награда. указано что задание многоразовое.
проблема вот в чем - в виде награды выбрано выдача существа. но помимо этого мне нужно чтобы забирались определенные ресурсы у того героя который выполнит задание. причем это типа падлянка такая). принес игрок 20 дерева ему дали дендроида например но в виде подлянки забрали все имеющиеся у героя на этот момент ресурсы и снизили его удачу и мораль на 20 единиц.
я так понимаю придется писать через скрипт так как все уже перепробовал. важно чтобы скрипт срабатывал именно в тот момент и именно по тому герою который сдаст квест в хижине. ну и соответственно скрипт многоразовый так как задание повторяемое. отпишите плиз в личку кто сможет помочь. заранее благодарен.
Здравствуйте!
Нельзя ли как-нибудь прибить костыль к игре/карте, чтобы делать реквест на веб сервер? Я думал как-то попробовать через lua скрипты в карте это сделать... Не представляю честно с какой стороны подойти к игре в этом вопросе. Мне вообще кажется это маловозможным без правки в ехешнике игры. Все же интересны соображения старожил карто/модостроения.
Кроме того, если вы хороший программист с кучей свободного времени, то вы можете написать программу, в фоновом режиме обрабатывающию данные игры и по каким-либо ивентам (проще всего — комбинации клавиш) накладывать поверх либо окно со ссылкой, либо сразу открывать ссылку в браузере
Типа, выполнил условие, значит теперь будет неделя голубя
Привет, возможно ли прописать какой-то скрипт, которым можно будет передавать название объекта в текст? Конкретно, хочу сделать квест на поиск случайного артефакта, т.е. через random будет выбираться id артефакта, однако не знаю можно ли передать название выбранного id артефакта в аргумент текста(не в тексты для квеста, а в Msg box), или же придётся создавать таблицу для всех айдишников артефактов?
artefactArray = {}
artefactArray[4] = "Лук из рога единорога" --где 4 это id артефакта
rndArt = random(ваше число)
MessageBox({"Ссылка_на_текст"; artefact = artefactArray[rndArt]})--где artefact это в вашем текстовом файле
Добавлено через 12 часов 23 минуты
А так, я не нашел ни одной функции, которая бы возвращала текстовое имя объекта. Если нужен большой список возможных артефактов, то прийдётся писать таблицу
-- типы артефактов. распределял по логике, а не по слотам, в которые они ставятся
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
Здравствуйте. Подскажите, пожалуйста: как в боевом скрипте дождаться окончания проигрываемой анимации.
Обязательно ли запускать анимацию в отдельном потоке, или можно запускать её в основном?
Идея боя такая, что при ходе юнита, юнит накладывает на случайный стек игрока слепоту. Необходимые проверки на применимость вызваны до вызова этой функции. Проблема в том, что получается ситуация, когда юнит двигается, потом анимация движения прерывается, он начинает анимацию каста, и анимация каста прерывается не закончившись анимацией атаки, если юнит изначально планировал атаковать стек игрока.
Вот код используемых функций:
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Другими словами именно логика отрабатывает корректно, а как синхронизировать анимации, чтобы они проигрывались последовательно, а не основные игровые анимации прерывали анимацию каста.
Большое спасибо за уделённое время и внимание к прочтению вопроса, будут благодарен за информацию.
Здравствуйте. Подскажите, пожалуйста: как в боевом скрипте дождаться окончания проигрываемой анимации.
Обязательно ли запускать анимацию в отдельном потоке, или можно запускать её в основном?
Идея боя такая, что при ходе юнита, юнит накладывает на случайный стек игрока слепоту. Необходимые проверки на применимость вызваны до вызова этой функции. Проблема в том, что получается ситуация, когда юнит двигается, потом анимация движения прерывается, он начинает анимацию каста, и анимация каста прерывается не закончившись анимацией атаки, если юнит изначально планировал атаковать стек игрока.
Вот код используемых функций:
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И насколько я понимаю, вы же делаете каст юнитом во время его хода в хуке UnitMove(unit)? Тогда если каст состоялся, нужно просто чтобы эта функция вернула not nil и игра не будет сама управлять этим существом в этот ход.