|
|
|
|
Триггерно изменить модель юнита
|
|
FatalBlade | Дата: Четверг, 02 Февраля 2012, 20:51:34 | Сообщение # 1 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Собственно, нужно поменять юниту модель. На время. Не использовать Перевоплощение, потому что оно создаёт нового юнита, а мне обязательно нужен именно старый юнит, так как в его ID много чего сохраняется + есть много других вещей которые с ним связанны.
|
|
|
|
Dreii | Дата: Четверг, 02 Февраля 2012, 20:55:35 | Сообщение # 2 |
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
| FatalBlade, Никак.
|
|
|
|
Romalei | Дата: Четверг, 02 Февраля 2012, 20:56:36 | Сообщение # 3 |
8 уровень
Группа: Проверенные
Сообщений: 651
Награды: 0
Репутация: 208
Блокировки:
| никак! просто записавый все его параметры, предметы и т.п. в переменные
|
|
|
|
FatalBlade | Дата: Четверг, 02 Февраля 2012, 21:07:41 | Сообщение # 4 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (Romalei) никак! просто записавый все его параметры, предметы и т.п. в переменные Ну... а что если в хэш героя сохраннены несколько значений, а спеллы у героя - это не чистые спеллы, а какой то там уровень механики? А ведь у спеллов могут быть разные лвлы, которые тоже во время превращения могут изменяться. Ах да, есть ещё предмет, который выборочно даёт бонус к определённому стату, и который тоже можно в любую минуту менять... Не говорю уже о бонусах которые даются герою триггерно от предметов...
НУ... где то я точно видел, что можно отображать для одного игрока одну модель какого то юнита, для другого другую. Через локального игрока.
|
|
|
|
Diabfall | Дата: Четверг, 02 Февраля 2012, 21:39:24 | Сообщение # 5 |
Группа: Проверенные
Сообщений: 1231
Награды: 0
Блокировки:
| Quote (FatalBlade) НУ... где то я точно видел, что можно отображать для одного игрока одну модель какого то юнита, для другого другую. Через локального игрока. http://xgm.ru/p/wc3/getlocalplayer
|
|
|
|
SirNikolas | Дата: Пятница, 03 Февраля 2012, 13:49:55 | Сообщение # 6 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FatalBlade) Не использовать Перевоплощение, потому что оно создаёт нового юнита, а мне обязательно нужен именно старый юнит, так как в его ID много чего сохраняется + есть много других вещей, которые с ним связанны. Оно не создает нового юнита. Используй "Перевоплощение".
|
|
|
|
FatalBlade | Дата: Пятница, 03 Февраля 2012, 14:10:48 | Сообщение # 7 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) Оно не создает нового юнита. Используй "Перевоплощение". Оно удаляет все абилки. Я бы мог сделать так что бы абилки переносились, но они даются герою триггерно, и посредством механики. Точнее даётся герою механика какого то лвла. Я не могу никак триггерно узнать какая абилка сидит в данном уровне механики. Я не могу к ней обратиться, что бы например сохранить в хэш её лвл или её саму. Я могу конечно сохранять механику и нужный её уровень, и таким образом дать герою такую же абилку, но она будет лвл 1.
Единственное что вроде как можно сделать, это проверять все возможные абилки Короля Скелетов на их наличие. Например если уровень абилки 'A000' у героя больше 1 то сохранять её. Но тут опять же проблема - что например если герой ещё не выучил спелл? Например он выбрал его (щас не буду подробно описывать систему выбора спелов), но ещё не изучил. То есть у героя есть этот спелл, но он ещё 0-го уровня.
|
|
|
|
SirNikolas | Дата: Пятница, 03 Февраля 2012, 14:15:49 | Сообщение # 8 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FatalBlade) Оно удаляет все абилки. UnitMakeAbilityPermanent.
|
|
|
|
FatalBlade | Дата: Пятница, 03 Февраля 2012, 14:26:14 | Сообщение # 9 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) UnitMakeAbilityPermanent Опять же, я сделаю Механику N-ного лвла перманентной. Могу скинуть код выбора спеллов, что бы показать что я имею ввиду. Я никак не могу вычислить текущие абилки героя обычным способом. Разве что есть какой то метод/функция которую я не знаю, которая возвращает все спеллы которые есть у героя, неважно, изученные или нет.
З.Ы. Разве нету ничего что вычисляет абилку по её позиции в панели приказов. Например СпособностьЮнитаНаПозицииПанели( 0, 2 ) даст мне спелл который расположен в позиции 0, 2.
З.З.Ы. Если подобной функции нету, то буду рад если какой нибудь добрый джассер её напишет Это одним махом решит мою проблему
Сообщение отредактировал FatalBlade - Пятница, 03 Февраля 2012, 14:28:00 |
|
|
|
SirNikolas | Дата: Пятница, 03 Февраля 2012, 14:41:44 | Сообщение # 10 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| set GlobalIntArray[<номер игрока> * 3 + <номер способности (с нуля до двух)>] = <выбранная способность>
Потом через GlobalIntArray[<номер игрока> * 3] ты получишь первый спелл героя, GlobalIntArray[<номер игрока> * 3 + 1] - второй, а GlobalIntArray[<номер игрока> * 3 + 2] - третий.Добавлено (03 Февраль 2012, 14:41:44) --------------------------------------------- Изначально массив нужно забить нулями, как показатель отсутствия спеллов.
|
|
|
|
FkoFF | Дата: Пятница, 03 Февраля 2012, 14:44:43 | Сообщение # 11 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (Diabfall) http://xgm.ru/p/wc3/getlocalplayer Десинк будет, при условии что локально будет удален и заменен герой. И да, перевоплощение не заменяет юнита.
FatalBlade, С механикой все проще - отследи уровень механики (GetUnitAbilityLevel(unit,ability)) и запиши, впрочем механику и перманентной можно сделать. Не могу понять, что тебя смущает.
|
|
|
|
FatalBlade | Дата: Пятница, 03 Февраля 2012, 15:30:54 | Сообщение # 12 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (FkoFF) Не могу понять, что тебя смущает. set x = GetUnitAbilityLevel( unit, механика ) - даст мне уровень механики. Затем я дам перевоплощённому герою герою ту же механику: call UnitAddAbility( unit, механика ) call SetUnitAbilityLevel( unit, механика, x )
В результате перевоплощённый герой получает нужную абилку. Всё ок. Но ведь теперь надо выставить ей прежний уровень. А ведь GetUnitAbilityLevel( unit, механика ) даёт мне уровень механики, а не абилки которая там сидит. Как отследить уровень самой абилки которая сидит под тем уровнем механики?Добавлено (03 Февраль 2012, 15:30:54) ---------------------------------------------
Quote (SirNikolas) <выбранная способность> Вот именно об этом я говорю. Нету выбранной способности. Есть механика[1..3], уровень которой = загруженный из Хэша интежер. Под этой одной из 3-х механик данного уровня сидит апгрейд на нужную нам абилку. Герою триггерно изучается механика, выставляется нужный уровень и в результате он получает желаемую абилку, на которую нету никаких ссылок или указателей.
|
|
|
|
FkoFF | Дата: Пятница, 03 Февраля 2012, 15:37:13 | Сообщение # 13 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (FatalBlade) set x = GetUnitAbilityLevel( unit, механика ) - даст мне уровень механики. Затем я дам перевоплощённому герою герою ту же механику: call UnitAddAbility( unit, механика ) call SetUnitAbilityLevel( unit, механика, x ) В результате перевоплощённый герой получает нужную абилку. Всё ок. Но ведь теперь надо выставить ей прежний уровень. А ведь GetUnitAbilityLevel( unit, механика ) даёт мне уровень механики, а не абилки которая там сидит. Как отследить уровень самой абилки которая сидит под тем уровнем механики? Как бы сбросить уровень механики или удалить её, после записи её лвла и получить уровень исходной абилки в голову не пришло? Т.е GetUnitAbilityLevel(unit, mechraw) UnitRemoveAbility(unit,mechraw) GetUnitabilityLevel(unit,mainabil)
|
|
|
|
FatalBlade | Дата: Пятница, 03 Февраля 2012, 15:45:26 | Сообщение # 14 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (FkoFF) получить уровень исходной абилки в голову не пришло? Quote (FkoFF) GetUnitabilityLevel(unit,mainabil) А как мне получить саму Исходную абилку после того как я удаляю механику?
|
|
|
|
SirNikolas | Дата: Пятница, 03 Февраля 2012, 15:53:39 | Сообщение # 15 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (SirNikolas) <выбранная способность> В триггере изучения способности работниками. Там-то ты можешь ее узнать.
|
|
|
|
FkoFF | Дата: Пятница, 03 Февраля 2012, 15:56:08 | Сообщение # 16 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (FatalBlade) А как мне получить саму Исходную абилку после того как я удаляю механику? Как бы после удаления механики абилка вернется в исходное состояние. А какая абилка у тебя мейновая - ты должен знать сам (на крайняк посмотри, что стоит первым равкодом в механике). Если этого не произойдет то мы открыли любопытный баг который можно интересным способом применить )
|
|
|
|
FatalBlade | Дата: Пятница, 03 Февраля 2012, 16:04:31 | Сообщение # 17 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) В триггере изучения способности работниками. Там-то ты можешь ее узнать. Там я узнаю пустышку, на которую я просто нажимаю что бы выбрать спелл.
Добавлено (03 Февраль 2012, 16:04:31) --------------------------------------------- Quote (FkoFF) Как бы после удаления механики абилка вернется в исходное состояние. А какая абилка у тебя мейновая - ты должен знать сам (на крайняк посмотри, что стоит первым равкодом в механике). Понял. Так что, получается если потом я изучаю абилку полученую через механику, то все абилки в этой механике изучаются? Если моя абилка была 10 лвла, то и исходная тоже будет?
Quote (FkoFF) Если этого не произойдет то мы открыли любопытный баг который можно интересным способом применить ) А действительно, разве если герой получил механику лвл 30, то у него сохраняются все абилки записанные в механике от 1 до 30? И они ещё и улучшаются по уровням? Я то думал они удаляются.
Сообщение отредактировал FatalBlade - Пятница, 03 Февраля 2012, 16:05:15 |
|
|
|
FkoFF | Дата: Пятница, 03 Февраля 2012, 16:07:55 | Сообщение # 18 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (FatalBlade) Понял. Так что, получается если потом я изучаю абилку полученую через механику, то все абилки в этой механике изучаются? Если моя абилка была 10 лвла, то и исходная тоже будет? Факт - уровень обилки сохраняется при росте механики, обратное не проверял. Quote (FatalBlade) А действительно, разве если герой получил механику лвл 30, то у него сохраняются все абилки записанные в механике от 1 до 30? И они ещё и улучшаются по уровням? Я то думал они удаляются. Хуже того - все абилки подгружаются в момент установления уровня механики.
|
|
|
|
SirNikolas | Дата: Пятница, 03 Февраля 2012, 16:08:10 | Сообщение # 19 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Требуется эта библиотека.Code //! runtextmacro DeclareDictionary("integer","integer","IntegerComparison","8191")
globals Dictionary_integer_integer AbilityDict endglobals
function InitTrig_InitAbilities takes nothing returns nothing set AbilityDict = Dictionary_integer_integer.Create() //set AbilityDict[<пустышка>] = <способность> set AbilityDict['A000'] = 'A001' set AbilityDict['A002'] = 'A003' //... endfunction В триггере изучения выполняй описанные в сообщении №10 манипуляции с массивом, записывая туда AbilityDict[<пустышка, по которой щелкнул игрок>].
|
|
|
|
FatalBlade | Дата: Пятница, 03 Февраля 2012, 16:12:36 | Сообщение # 20 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (FkoFF) Хуже того - все абилки подгружаются в момент установления уровня механики. Это то я знаю, но проблема частично решена прелодом при ините.
Quote (SirNikolas) В триггере изучения описанные в сообщении №10 манипуляции с массивом, записывая туда AbilityDict[<пустышка, по которой щелкнул игрок>]. Это зачем? Вычислить пустышку я могу с помощью EVENT_PLAYER_UNIT_SPELL_EFFECT
|
|
|
|
FkoFF | Дата: Пятница, 03 Февраля 2012, 16:15:21 | Сообщение # 21 |
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
| Quote (FatalBlade) Это то я знаю, но проблема частично решена прелодом при ините. Я так же решил проблему в КЛС (там всего 180 спеллов в механиках) - просто сразу выдаю прелоадному юниту механику максимального уровня, тогда в игре не тормозило.Добавлено (03 Февраль 2012, 16:15:21) --------------------------------------------- Если проблема решена - ты свистни, тему прикроем.
|
|
|
|
SirNikolas | Дата: Пятница, 03 Февраля 2012, 16:16:11 | Сообщение # 22 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (FatalBlade) Это зачем? Вычислить пустышку я могу с помощью EVENT_PLAYER_UNIT_SPELL_EFFECT Вот именно. А по пустышке таким образом можно вычислить способность.
|
|
|
|
FatalBlade | Дата: Пятница, 03 Февраля 2012, 16:38:44 | Сообщение # 23 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| SirNikolas, Выбор спеллов и так работает по пустышкам. Дамми рабочий нажимает, на пустышку. Затем загружаются данные из ID пустышки: 1) - Номер механики, то есть массив от одного до 3-х - это столб спеллов в панели приказов дамми рабочего. То есть спелл из столба спеллов, из которого выбирается 1 спелл из 3-х. 2) - Уровень механики под которым сидит нужный нам уже настоящий спелл. 3) - Другой спелл-пустышка того же дамми из того же столба. Удаляется из панели даммика. 4) - Ещё один спелл-пустышка того же дамми из того же столба. Удаляется из панели даммика.
Так что по пустышки не вычислишь способность.Добавлено (03 Февраль 2012, 16:38:44) ---------------------------------------------
Quote (FkoFF) А какая абилка у тебя мейновая - ты должен знать сам (на крайняк посмотри, что стоит первым равкодом в механике). Стоп, ещё вопрос. После получения нужной мне абилки я удалю механику. Даже если выбранная абилка останется, мне же надо её сохранять. Если я сохраню равкод Исходника, то он сохранит мою абилку? Что то сомнительно. А равкод моей абилки я естественно вычислить немогу.
Сообщение отредактировал FatalBlade - Пятница, 03 Февраля 2012, 16:34:03 |
|
|
|
SirNikolas | Дата: Пятница, 03 Февраля 2012, 16:40:29 | Сообщение # 24 |
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
| Quote (SirNikolas) Требуется эта библиотека. Code //! runtextmacro DeclareDictionary("integer","integer","IntegerComparison","8191")
globals Dictionary_integer_integer AbilityDict endglobals
function InitTrig_InitAbilities takes nothing returns nothing set AbilityDict = Dictionary_integer_integer.Create() //set AbilityDict[<пустышка>] = <способность> set AbilityDict['A000'] = 'A001' set AbilityDict['A002'] = 'A003' //... endfunction В триггере изучения выполняй описанные в сообщении №10 манипуляции с массивом, записывая туда AbilityDict[<пустышка, по которой щелкнул игрок>]. Добавлено (03 Февраль 2012, 16:40:29) --------------------------------------------- Я же написал, как привязать способность к пустышке. >_<
|
|
|
|
FatalBlade | Дата: Пятница, 03 Февраля 2012, 16:46:03 | Сообщение # 25 |
10 уровень
Группа: Проверенные
Сообщений: 1523
Награды: 0
Репутация: 439
Блокировки:
| Quote (SirNikolas) Я же написал, как привязать способность к пустышке. >_< аааа.... понял Так впринципе я могу посохранять все абилки в ID пустышек... Так мне тогда и Механика не нужна наверно. Не закрывайте тему пока, я попробую решить проблему этим способом.
|
|
|
|
|
|
|
|
|
|
|