18.07.2005, 21:31 | #1 | ||
Мастер
Регистрация: 03.04.2007
Адрес: Сайтама
Сообщений: 391
Репутация: 92
|
Создание карт, модов для WarCraft 3
Прежде чем задать вопрос прочитайте следующее: Полезные ссылки, программы и прочее..., Оглавление "Библиотеки Творцов" Данная тема предназначена для решения каких либо проблем или помощи в создании карт и модов для игры Warcraft 3. Немного о наборе инструментов, которые понадобятся нам в создании и редактировании: WorldEditor Скрытый текст: Автор: Blizzard Entertainment Тип: Редактор мира Warcraft 3 Способ распространения: На диске с игрой Язык: Русский Версия: 1.21b О программе: Официальный редактор карт для вара очень удобен и вполне не сложен. Редактор похож на своего предшественника StarEdit (редактор мира StarCraft), но он все равно отличается большой функциональностью и интерфейсом. Больше информации можно узнать на WikpediaАльтернативные редакторы:Прочие программы:
Полезные ссылки: Последний раз редактировалось Emix; 04.01.2011 в 10:42. |
||
|
25.02.2008, 22:02 | #1561 | ||
Юзер
Регистрация: 07.06.2007
Сообщений: 307
Репутация: 14
|
|
||
|
25.02.2008, 22:03 | #1562 | ||
Новичок
Регистрация: 25.02.2008
Сообщений: 1
Репутация: 0
|
|||
|
25.02.2008, 22:18 | #1564 | ||
Юзер
Регистрация: 07.06.2007
Сообщений: 307
Репутация: 14
|
с выбранным из списка ордером не пашет
call IssueImmediateOrderBJ( udg_hren, 'A001:Abrf') пишет ошибку при компиляции "отсутсвует выражение" call IssueImmediateOrderBJ( udg_hren, 'A001') пишет ошибку при компиляции на СЛЕДУЮЩЕЙ строке "неверный тип аргумента (integer)" Добавлено через 7 минут Гхм... Попробовал просто дать ему эту абилку и поюзать ее вручную. Нифига. Попробую сделать на основе абилки от кибергоблина... Добавлено через 12 минут не получилось. А что ты там про реплэйс говорил? Последний раз редактировалось Malcolmishe; 25.02.2008 в 22:30. Причина: Добавлено сообщение |
||
|
25.02.2008, 22:39 | #1565 | ||
Юзер
Регистрация: 14.06.2005
Сообщений: 188
Репутация: 20
|
че-то странные у тебя ордерстринги
call IssueImmediateOrderBJ( udg_hren, "robogoblin" ) вот синтаксис, где "robogoblin" - стандартный ордерстринг A001:Abrf - не ордерстринг, а имя абилки Как я и думал, через ордерстринги не получается... Он не возвращается в начальную форму. Сейчас сделаю тебе пример через реплейс Последний раз редактировалось GadenbIsh; 25.02.2008 в 22:47. |
||
|
25.02.2008, 22:40 | #1566 | ||
Юзер
Регистрация: 07.06.2007
Сообщений: 307
Репутация: 14
|
Через реплейс получилось. Экспа сохраняеться, но параметры (сила, ловкость, инт) и абилки не передаются. Как их передать? Наверно через кэш как-то, но я им пользоваться не умею...
Добавлено через 34 секунды С ордерстрингом я тоже пробовал - не получилось. Последний раз редактировалось Malcolmishe; 25.02.2008 в 22:40. Причина: Добавлено сообщение |
||
|
25.02.2008, 22:53 | #1567 | ||
Юзер
Регистрация: 14.06.2005
Сообщений: 188
Репутация: 20
|
а, кеш тут ни при чем... передавать можно триггерами, сейчас напишу пример
Добавлено через 8 минут Вот триггер, передающий силу. Остальные параметры по аналогии. При желании можно избавиться от BJ: Код:
local integer str local unit her = GetSpellAbilityUnit() set str = GetHeroStatBJ(bj_HEROSTAT_STR, her, false) call ReplaceUnitBJ( her, 'Hamg', bj_UNIT_STATE_METHOD_RELATIVE ) set her = GetLastReplacedUnitBJ() call ModifyHeroStat( bj_HEROSTAT_STR, her, bj_MODIFYMETHOD_SET, str ) set her = null Можно сделать через триггеры, но придется юзать глобалки и + неоптимизированность: Set X = (Strength of (Casting unit) (Exclude bonuses)) Unit - Replace (Casting unit) with a Archmage using The old unit's relative life and mana Hero - Modify Strength of (Last replaced unit): Set to X Последний раз редактировалось GadenbIsh; 25.02.2008 в 23:05. Причина: Добавлено сообщение |
||
|
25.02.2008, 23:08 | #1568 | ||
Юзер
Регистрация: 07.06.2007
Сообщений: 307
Репутация: 14
|
А можешь то же самое с коментами? И аналогично для абилок. Я в джасе ноль полный, а хотелось бы знать что я делаю
|
||
|
25.02.2008, 23:14 | #1569 | ||
Юзер
Регистрация: 14.06.2005
Сообщений: 188
Репутация: 20
|
Конечно:
Код:
local integer str - локальная переменная, в ней будет храниться сила local unit her = GetSpellAbilityUnit() - локальная переменная, в ней будет храниться ссылка героя set str = GetHeroStatBJ(bj_HEROSTAT_STR, her, false) запоминаем в переменной str значение силы героя, который кастовал абилку, бонусы итемов и прочего не включаем call ReplaceUnitBJ( her, 'Hamg', bj_UNIT_STATE_METHOD_RELATIVE ) заменяем нашего героя на нового, сохраняя ману, экспу ит.п. set her = GetLastReplacedUnitBJ() в переменную героя записываем нового, на которого заменили call ModifyHeroStat( bj_HEROSTAT_STR, her, bj_MODIFYMETHOD_SET, str ) изменяем новому герою силу на значение str, которое было запомнено set her = null обнуляем ссылку на героя, чтобы не забивать ей память Событие: юнит кастует абилку Условие: кастуемая абилка = твоей дамми-абилке Действия выше описал |
||
|
25.02.2008, 23:25 | #1570 | ||
Юзер
Регистрация: 07.06.2007
Сообщений: 307
Репутация: 14
|
Ок. С этим понял. Более того, на сколько я понимаю - я могу интегрировать это в мой скрипт превращения в виде костам скрипт.
Остался вопрос - как передать абилки? |
||
|
25.02.2008, 23:30 | #1571 | ||
Юзер
Регистрация: 14.06.2005
Сообщений: 188
Репутация: 20
|
ну, формам героя дай одни и те же абилки.
Если ты про левел, то аналогично... Перед заменой сохраняем их уровень в переменной, а после замены повышаем его на сохраненное число. Или у тебя можно получить новые абилки во время игры? |
||
|
25.02.2008, 23:39 | #1572 | ||
Юзер
Регистрация: 07.06.2007
Сообщений: 307
Репутация: 14
|
Именно. Дело в том, что у героя нет своих абилок. Все абилки он получает триггерно через add abylity. Т.о. он может иметь до 7 абилок без дополнительных ухищьрений с книгами, временными юнитами и пр.
Смысл в том, что я хотел сделать, чтобы через некоторое время игры герой изменяется. Он меняет внешность, но сохраняет все параметры - жизнь, ману, эксп, левел, статы, скилы. И вариантов превращения несколько - в зависимости от того что он учил/будет учить зависит его внешность. Ну типа как получение второй профы в рагнарек он-лайн или линейдж. |
||
|
25.02.2008, 23:46 | #1573 | ||
Юзер
Регистрация: 14.06.2005
Сообщений: 188
Репутация: 20
|
а, так бы и сказал, я тебя сразу не понял...
Тогда создаешь семь глобальных переменных с типом Ability. При добавлении герою абилки записывай в свободную ту абилку, которую добвляешь. Перед заменой получай лвл каждой из семи записаных в глобальной переменной, а после замены добавляй записанные абилки и поднимай их лвл. Это немного геморно, но я другого выхода не вижу. |
||
|
25.02.2008, 23:57 | #1574 | ||
Юзер
Регистрация: 07.06.2007
Сообщений: 307
Репутация: 14
|
Хм. Думаю лучше создать не семь переменных, а одну-массив. Вопрос - нельзя ли триггерно узнать, какие абилки знает герой на данный момент?
Если нииизя, то как узнать, знает герой эту абилку уже или еще нет? Ибо от этого будет зависеть - писать его в новую переменную/ячейку массива, или игнорить. Как можно узнать уровень абилки? Пока я делаю так: герой повышает скилл (пока это временно сделано через нажатие кнопки диалога) боевая единица - увеличить уровень скилла боевая единица - add скилл т.о. если у героя нет еще этого скилла, то первая команда проходит бесследно, вторая добавляет скилл. Если скилл уже есть, первая повышает уровень, вторая проходит бесследно. Эта система в любомм случае должна быть изменена, чтобы не тратить поинты больше максимума (сумбурно я объясняю как-то...) Добавлено через 2 минуты и вот еще что. Когда я говорю создать массив и ставлю там циферку 7, что это значит? Какие номера ячеек будут доступны? 0 1 2 3 4 5 6 7 или 1 2 3 4 5 6 7 или 0 1 2 3 4 5 6 Последний раз редактировалось Malcolmishe; 26.02.2008 в 00:00. Причина: Добавлено сообщение |
||
|
26.02.2008, 00:08 | #1575 | ||
Юзер
Регистрация: 14.06.2005
Сообщений: 188
Репутация: 20
|
ну, массив по сути и есть семь переменных.
Цитата:
триггер в ГУИ: Set X = (Level of абилка for юнит) по второму вопросу - 0 1 2 3 4 5 6 7 Добавлено через 2 минуты Но я бы делал не так. При добавлении делал бы проверку на лвл. Если он 0, от добавляем, если больше, то повышаем. Добавлено через 3 минуты ну, и при добавлении записываем его в пустую переменную.. Последний раз редактировалось GadenbIsh; 26.02.2008 в 00:11. Причина: Добавлено сообщение |
||
|
26.02.2008, 00:13 | #1576 | ||
Юзер
Регистрация: 07.06.2007
Сообщений: 307
Репутация: 14
|
|||
|
26.02.2008, 00:20 | #1578 | ||
Юзер
Регистрация: 07.06.2007
Сообщений: 307
Репутация: 14
|
а если абилка нестандарная и имеет вид A000:Xyzx ?
Добавлено через 43 секунды Цитата:
Добавлено через 1 минуту Хм... тогда при добавлении надо делать цыкл, чтобы проверить все переменные. Последний раз редактировалось Malcolmishe; 26.02.2008 в 00:21. Причина: Добавлено сообщение |
||
|
26.02.2008, 00:25 | #1579 | ||
Юзер
Регистрация: 14.06.2005
Сообщений: 188
Репутация: 20
|
тогда просто 'A000'
Цитата:
|
||
|
26.02.2008, 00:28 | #1580 | ||
Юзер
Регистрация: 07.06.2007
Сообщений: 307
Репутация: 14
|
i - глобальная я так понимаю.
|
||
|
|