главная турниры статьи wiki карта сайта логин
 

Нужна помощь со скриптами WML

Автор voin64s, ноября 18, 2017, 23:03:33

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

voin64s

Всем привет. Нужна небольшая помощь со скриптами. Заранее всем спасибо!
1) Как сделать событие с условием на смерть 4 юнитов с определенным ID (Ruffian1,Ruffian2,Ruffian3,Ruffian4) или лучше одного типа (Ruffian) тогда идут разные сообщения и variable...(в прочем это уже не важно главное как правильно составить условие и все)
2) Как сделать анимацию юнита для его новой атаки с помощью добавления новой атаки прямо в .cfg сценария или карты для мультиплеера.
3) Как сделать способность (ability) которая может снять заклятие окаменение.
4) Как сделать одноразовую атаку. Например даём кому-либо огненный шар с анимацией (missile) и с огнем и уроном 15-1, после первого использования эта атака должна пропасть.
5) Какие есть настройки для AI (ИИ - Искусственного интеллекта) и сколько их всего.
6) Как сделать возможность юнитам ходит по непроходимым местностям.
7) Как сделать тоже самое лидерство только и для союзнических войск.
8.) Как менять настройки AI походу самого сценария (например в самом старте просто защищается, а когда наступает 15 ход идет в атаку на врага)
9) Как сделать доход постоянным нулю.
10) Допустим юнит (мой или союзнический) встал на мост, а там с корабля высаживается группа врагов, так вот и один юнит оказывается в воде. Как оттолкнуть этого юнита с моста на берег прямо на немного со счетчиком его здоровья и опыта.
11) Как сделать что бы определенный юнит с определенным ID атаковал любого врага с 100% шансов на все его удары (одноразовый и постоянный)
12) Как сделать что бы любой враг который напал на определенного юнита умер (если попал) с эффектом (анимации) и со звуком молнии (одноразовый)
13) Как дать любому юниту хитпоинты и опыт (ХР)
14) Как узнать сколько нанесли юниту за 1 ход хитпоинтов и полностью исцелить его (одноразовый)
15) Если деревня принадлежала какому-то игроку, и например сменилась сама погода и эта деревня стала заснеженной. Появляется вопрос как вернуть игроку который ей владел до того как она стала заснеженной.
16) Как отобрать все ходы у любого юнита на постоянно? но при этом он мог бы атаковать кого-либо кто приблизился.
17) Как сделать так что бы юнит сделал idle анимацию.
18) Анимация. Как сделать так что бы Вор ударил Пикейщика и попал в него 1 раз, после пикейщик бьет его 2 раза, но сам Жулик уворачивается все два раза (при чем по разному, т.к он имеет две анимации защиты).
19) Как присвоить какому-то юниту особенность оружия "Чума", но при этом не добавляя новую атаку, а добавить ему эту особенность оружия на его первую ближнюю атаку или добавить на все его атаки.
20) Как сделать так что бы бот ходил туда куда я хочу и вербовал тех кого я хочу (как в обучении 2-ая миссия)
21) Как сделать случайное появление из двух типов врагов (Ополченец и Скороход) в известных координатах на карте X и Y.
22) Как заменять всю определенную местность (например воду) одного типа на другую любую (например на лед) местность
23) Как сделать деревню на горе (в карте "Командное выживание" на 6 игроков).
24) Как сделать событие с условием если Вор использовал особенность "Удар в спину".
25) Как сделать событие с условием если Вор использовал особенность "Удар в спину" и поразил цель хотя бы 1 раз.
26) Как изменить в любой момент Модификатор опыта.
27) Почему когда я создаю мультиплеерную карту с .cfg файлом и ставлю 2-ум игрокам одинаковые team_names например good и при этом одинаковые user_team_name например защитники, то появляется в выборе команд две одинаковых user_team_name, хотя у них team_names одинаковы. А вот у 3 и 4 игрока все в порядке :( даже если ставлю разные user_team_name.

Еще вопрос но уже не по скриптам: почему-то у меня некоторые моды и кампании и сценарии которые я скачиваю не работают и выдают ошибки. Моя версия игры 1.10.3. Это проблема из-за версии?

UPD:
28) Как сделать хвойный лес на траве.
29) Как сделать непроходимое место (в скрипте)
30) Как сделать "портал" который будет телепортировать юнита в другой такой же "портал" учитывая его имя, тип, особенности, уровень, здоровье и опыт.
31) Как сделать анимацию телепорта как у "Серебряного мага".
32) Как сделать анимацию исцеления как у "Белого мага" и юнит лечится на +8 здоровья.
33) Как изменить facing (direction - n,nw,ne,s,sw,se.) в любой момент.
34) Как изменить настройки игрока (side) в любой момент.
35) Как сделать анимацию отравления как у "Убийцы" и юнит соответственно отправляется.
Один в поле - не воин!


DV

#1
1) проблемы тут две: А) ивент не может определить мертва ли толпа юнитов. он может только срабатывать каждый раз, когда умирает один из этой толпы. Б) ты не можешь проверить через have_unit потому что последний юнит, смерть которого запустила ивент, еще как бы существует, и проверка даст положительный результат. Решить можно так (count проверяет больше ли таких юнитов чем 2. если осталось меньше двух, и один прям ща загибается, значит уже никого нет):
[event]
name = last breath
first_time_only=no
[filter]
      id=Ruffian1,Ruffian2,Ruffian3,Ruffian4
[/filter]
[if]
[have_unit]
      id=Ruffian1,Ruffian2,Ruffian3,Ruffian4
      count=2-4
[/have_unit]
[then]
[/then]
[else]
... здесь то, что должно происходить, когда все мертвы ...
[/else]
[/if]
[/event]


2) при помощи [object] добавляешь юниту и атаку и анимацию к ней. см. вики по WML или файл data/core/scenario-test.cfg - и там и там видно, как это делается.

3) делаешь ability у которой есть только id и название с описанием. тип не особо важен. потом делаешь ивент, срабатывающий... а когда срабатывающий? либо в начале каждого хода, либо после каждого передвижения. находишь при помощи [store_unit] всех юнитов с абилкой с этим id потом идешь циклом по созданному массиву и для каждого юнита делаешь {VARIABLE переменная[$счетчик].status.disabled no} а затем [unstore_unit] - это если он снимает только с себя. либо на каждом шаге цикла забираешь в [store_unit] всех юнитов стоящих рядом с данном юнитом, идешь циклом уже по ним и той же командой снимаешь статус уже с них.

4) делаешь атаке special у которого есть id и название с описанием. тип снова не особо важен. потом делаешь ивент attack end с фильтром оружия атакующего на твой special а также отдельный ивент точно такой же но с фильтром оружия обороняющегося на твой special (если сделаешь один ивент с обоими фильтрами нефига работать не будет). в ивенте при помощи object на unit и second_unit соответственно удаляешь атаку. как это делать, есть в вики по WML

5) все очень-очень плохо. меньше знаешь - крепче спишь.

6) так же, как и по всем другим. в файле юнита в movement_costs добавляешь unwalkable=1 и impassable=1 и будет ходить как миленький. Если надо не типу юнитов а отдельному юниту, при помощи object меняешь ему movement_costs и тоже самое делаешь. точно таким же способом можно например совсем запретить юниту ходить по лесу и т.п. - непроходимый террайн ничем не отличается от всех остальных, просто на него в данный момент ни у одного юнита нет разрешения.

7) лидерство и так только и для союзнических войск.

8)
[modify_side]
side=НОМЕР
[ai]
... нужные настройки
[/ai]
[/modify_side]


9) вот так, но это не лишит тебя необходимости платить за кормежку каждого юнита, так что в реальности будут идти убытки, если все юниты не являются вернымиж.
[modify_side]
side=НОМЕР
income=0
village_gold=0
[/modify_side]


10) [move_unit] - предполагая что тебе известны координаты с какого гекса толкать и на какой толкать. "прям на немного вместе со счетчиком" юниты не движутся. юнит может стоять только на каком-то гексе и его счетчики стоят на том же гексе.

11) при помощи object дать всем атакам этого юнита

[special]
[chance_to_hit]
value=100
[/chance_to_hit]
[/special]


12) сделать ивент на attacker hit где в фильтре второго юнита проверить твоего юнита. внутри ивента сделать [kill] со включенной анимацией а затем при помощи [sound] сыграть молнию. примеров применения в этих тегах полно во всех кампаниях и, конечно, они описаны в вики по WML

13) при помощи object изменить их так, как это описано в вики по WML

14) никак. можно только в ивентах отслеживающих нанесение удара узнать сколько он потерял от этого удара. исцелять при помощи [heal_unit] без указания объема.

15) при помощи [capture_village] - раз ты изменил на заснеженную, значит знаешь координаты.

16) никак - 1 мувпоинт всегда останетеся. однако при помощи object можно задать movement_costs такими высокими, что он не сможет пройти ни по какой территории

17) при помощи [animate_unit] как это описано в вики по WML

18) если тебе нужно чтобы создалась видимость нанесения ударов, то точно так же как в прошлом случае. если нужны реальные атаки со всеми последствиями, то через [do_command][attack] - читай об этом в вики и разбирайся, но это непросто.
   
19) при помощи object добавить атаке с определенным названием special как это описано в вики по WML

20) никак. ИИ на то интеллект, чтобы думать, а не делать то, что ты хочешь. Можно вовсе отключить интеллект, сделав врага пассивным, а все движения делать при помощи [move_unit] - тогда все будут идти точно туда куда надо, а юнитов врагу выдавать через тег [unit] - будут появляться те, кто скажешь. Если же нужно, чтобы интеллект играл, а не был марионеткой, то можно через ai указать приоритеты найма предпочтитетльные гексы - и там все зависит от того, насколько ты способен сформулировать критерии.

21) при помощи

    [set_variable]
name=type
rand=Название типа 1, Название типа 2, Название типа 3...сколько их там тебе надо
    [/set_variable]

в переменной окажется название типа юнита выбранное случайное. затем создаешь юнита где типом указываешь $type - и появится такой юнит.

22) при помощи тега [terrain] и фильтров, как они описаны в вики по WML

23) Также, как и в любом другом месте.

24) ивентом attack или attack end с фильтром на использование оружие со special=backstab и тип юнита, если необходимо.

25) ивентом attacker hits с теми же фильтрами

26) мне неизвестно о такой возможности. модификатор опыта принадлежит сценарию в целом, менять его по ходу игры не совсем верно, разве нет? это то же самое, что по ходу сценария изменить сценарий на другой сценарий... в сущности именно так я и предлагаю реализовывать.

27) user_team_name не влияет ни на что, а в team_name ты, очевидно, где-то ошибся. нет никаких запретов на то чтобы игроки 1 и 2 имели одну команду.

28) так же как любой террайн на любом террайне - зажать клавишу SHIFT и держа ее зажатой поставить лес поверх травы.

29) так же как и любой террайн в скрипте - при помощи [terrain]. при помощи редактора узнаешь террайн код непроходного места нужного тебе типа и создаешь его на нужном тебе месте.

30) при помощи [tunnel] как это описано в вики по WML

31) так же, как она сделана у серебряного мага - это свойство юнита, а не самого портала. при помощи object добавляешь нужным юнитам анимацию посомотрев в файле мага как она сделана.

32) так же как она сделана у белого мага - анимация лечения принадлежит юниту-лекарю. чтобы юнит лечился на хп надо дать тому кто лечит соответствующую ability. и анимации и абилки добавляются через object.

33)
[modify_unit]
     id=$unit.id
     facing=n
[/modify_unit]


34) при помощи modify_side как это описано в вики по WML

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

Так, а теперь в целом. ответы на все эти и многие другие вопросы можно почерпнуть из вики по wml:
https://wiki.wesnoth.org/EventWML
там сбоку есть список всех тегов по которому можно удобно перемещаться и узнавать как они работают. именно эту вики и надлежит читать всем, кто хочет научится использовать WML. Программист, который не желает читать мануал - дерьмо, а не программист. Программист, который не знает английского языка и потому не может прочесть мануал - дерьмо, а не программист. Веснот это не та игра, которую может модить дерьмо. Дерьмо может делать сценарии для героев 3, где интуитивно понятный интерфейс в редакторе. В Весноте такого нет - его может модить только программист. Поэтому learn english and read the fuckin' manual
Возглавляет силы зла

voin64s

DV, спасибо тебе большое. На счет лидерства оно только для своих войск, а к союзникам это не относится. Лично вчера проверял.
Один в поле - не воин!


DV

можно сделать лидерство со включенным affect_enemies а затем при помощи фильтра сделать так чтобы оно действовало только на "врагов", фракции которых не враждуют с тобой (is_enemy=no)
Возглавляет силы зла

voin64s

#4
Большое спасибо DV. И так после того что я узнал, появилось еще больше вопросов:
1) Существует некая команда которая позволяет наносить по любому юниту ( и не только) урон с определенным шансом, вот она - {FORCE_CHANCE_TO_HIT side=1,2 id="Dela Keshar" 0 ()} (Кампания "Спускаясь во тьму", сценарий №6 под названием "Возращение в Партфин")
Тогда у меня сразу появился вопрос, я знаю что в скриптах можно всё. Поэтому как убрать этот шанс на попадание и поставить обычный (ну юнит уже будет зависеть от защиты на местностях)?
2) Как узнать место смерти определенного юнита который например имел оверлей свитка, а этот свиток на самом деле "Призыв огненного стража" и после этого он бы заспавнился когда игрок наступил на него в том месте где лежал свиток.
3) Условие: Как узнать что Белый маг "вылечил" кого-то или "исцелил" и тоже самое с другими например как узнать что Беглец использовал "скрытность" и т.п
4) Допустим как заспавнить юнита (нежить), рядом с личом (Лидер) и он должен сделать интересную анимацию с некромантией...
5) Условие: Как узнать кол-во денег у игрока, как им управлять (вычитать и прибавлять)
6) И так как работает функция - {STARTING_VILLAGES 1 12} , лично я не понял.
7) Как сделать всех юнитов у бота - пасивными.
8.) Как добавить здоровье путем добавление effect и object.
9) Как сделать шанс попадания определенного оружия (как 1. но не совсем так)
10) Что это за функция - {MOVEMENT_RESTRICTION flat shallow_water} (которая была прописана в [modifications] у самого лидера)
11) Как понимать этот параметр - faction_from_recruit=yes
12) Как изменять сам распорядок дня в любой момент после определенных условий.
Пока всё. Если будут еще напишу. Заранее благодарен.
UPD: И так копаюсь целыми днями, все сложнее и сложнее. Срочно нужна помощь!
13) Как сделать уже более сложные функции. Например: ПКМ на лидере и вверху видим Помощь (звездочка), открываем и там много разной информации и еще можно сделать так что бы кликнул в любой части карты ПКМ и там вылезала "Помощь"?
14) Как изменить MOVEMENT (Штрафы ходов по определенным местностям прямо в .cfg сценария или мультиплеерной карты), например мне надо сделать так что бы лидер мог ходить только по замкам и цитаделям и все больше никуда не ходил и не выходил.
15) Подскажите названия всех типов местностей в Весноте
16) Как сделать вот такую вот интересную функцию. Стоит лучник в замках и он не может ходить, его радиус дальней атаки (3 тайла) и он мог бы обстреливать врагов издалека не получая ничего в ответ (даже если юнит имеет дальнюю атаку), так вот нужно грамотно составить анимацию + missile. И еще было бы неплохо убрать у лучника ближнюю атаку. Т.е ты выбираешь этого лучника, после врага и на нём нажимаешь ПКМ появляется строка "Стрелять" (Звездочка) и лучник стреляет. Если рядом с лучником стоит враг, то он уже не может стрелять таким образом, а атаковал бы обычным образом (вблизи). И еще не плохо было бы добавить HALO с радиусом стрельбы самого лучника, но это должно входить в саму строку "Радиус атаки" (Звездочка).
17) Как сделать тоже самое что в 16. но боту. Например враг для бота заходит в радиус и потом когда ход бота, то лучник стреляет в ближайщего врага стоящего от него.
Один в поле - не воин!

voin64s

И всем снова привет после продолжительной сессии. Итак появились новые вопросы по скриптам. Ну во-первых хотелось бы узнать как создавать юнитов, а именно рисовать и .cfg, во-вторых как узнать что у юнита меньше половина его здоровья и тогда ему добавляется одноразовая атака "ярость" (V-Trigger) которая действует на определенных типов юнитов, например на боссов она не должна действовать. В-третьих хотелось бы узнать как сделать так чтобы когда юнит увернулся (то есть в него не попали) появлялись над ним разные надписи определенных цветов, если точнее то типа "Dodge", "Evade", "Miss". В-четвертых как можно добавить такую особенность атаки как 100% шанс попадания по определенным юнитам, но не по боссам. И наконец последнее, можно ли сделать такое: если в юнита попадают, но у него есть 30% шанс увернуться (Dodge, Evade) тогда он уворачивается, или например заблокировать удар (Block) или сделать контр-атаку (V-Reversal & Counter-attack) и при контр-атаке все остальные кол-во ударов противника которые он еще должен нанести - сбиваются. Еще хотелось бы узнать, например что бы на атаку месть у некоторых юнитов было прописано в .cfg интересная анимация смерти (-минус голова), а у того кто атакует интересная анимации атаки и добивания (выстрел в голову). Все это дело хотелось бы реализовать, если конечно это возможно, как думаете? А вообще вопросов целое море, надеюсь кто-нибудь ответит знающий. Спасибо заранее.
Один в поле - не воин!