Сейчас 11:54:44 Воскресенье, 19 мая, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Добавление способности
Добавление способности
CHLSNДата: Вторник, 24 Мая 2011, 10:50:51 | Сообщение # 1
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
Вот мы использовали все бафы на снижение защиты, а надо бы еще.
Добавляем триггерно юниту способность, а по истечении таймера удаляем её.

Что происходит: если время действия = 5 сек. а cooldown = 2 сек. То, наложив на юнита заклинание несколько раз, оно не продлится, а удалится через 5 сек. Как дать понять машине, что не нужно удалять способность, если искуственный бафф (способность) еще на юните?




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

KartohaДата: Вторник, 24 Мая 2011, 13:33:05 | Сообщение # 2
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
CHLSN, проверка на наличие баффа:
Code
GetUnitAbilityLevel(whichUnit, buffcode) > 0

С помощью неё можно сделать цикл:
Code
loop
     exitwhen GetUnitAbilityLevel(whichUnit, buffcode) == 0
     call TriggerSleepAction (0.10)
endloop
call UnitRemoveAbility(whichUnit, abilityId)
    

Получится, что триггер подождет, пока бафф пропадет и тогда отберет способность.

Карта-пример по такому принципу.
 

CHLSNДата: Вторник, 24 Мая 2011, 13:36:04 | Сообщение # 3
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
Kartoha, а если я не использую бафф (ибо он у большинства способностей заменяется)?



Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

KartohaДата: Вторник, 24 Мая 2011, 13:38:21 | Сообщение # 4
10 уровень
Группа: Ветераны
Сообщений: 2851
Награды: 1
Блокировки:
CHLSN, ну аналогичный цикл на проверку того, с помощью чего ты заменил бафф, или так не получится?
 

CHLSNДата: Вторник, 24 Мая 2011, 13:44:40 | Сообщение # 5
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
Kartoha, есть заклинание. Его длительность = 0.01 (если поставить 0, то бафф будет вечным). Соответственно кастуем, добавляем юниту способность. Вот и все. И как бы юнит без баффа при этом остается.

Хотя если существуют заклинания с не сбивающимся баффом, то все гуд, но сомневаюсь, что такие есть:
Цель
Область - указатель
Область - площадь
Вызов единицы - без указания
Вызов единицы - указатель
Вызов единицы - площадь




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

FkoFFДата: Вторник, 24 Мая 2011, 13:48:36 | Сообщение # 6
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
присваивай по хэндлу юнита отсчет для таймера, и, если отсчет не равен нулю в момент добавления способности - всего лишь установить отсчет на новое значение, вместо создания таймера и прочих прилюдий.

 

CHLSNДата: Вторник, 24 Мая 2011, 13:52:11 | Сообщение # 7
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
FkoFF, не совсем понял идею, и про какой таймер ты говоришь



Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

FkoFFДата: Вторник, 24 Мая 2011, 14:00:52 | Сообщение # 8
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
CHLSN, эээм...

Code


function GATcb takes nothing returns nothing
local timer t=GetExpiredTimer()
local integer ti=GetHandleId(t)
local unit u=LoadUnitHandle(udg_Data,ti,0)
local integer ui=GetHandleId(u)
local integer abilcode=LoadInteger(udg_Data,ti,1)
local real time=LoadReal(udg_Data,ui,abilcode)

if time>0 then
set time=time-0.1
call SaveReal(udg_Data,ui,abilcode,time)
else
call UnitRemoveAbility(u,abilcode)
call SaveReal(udg_Data,ui,abilcode,0)
call FlushChildHashtable(udg_Data,GetHandleId(t))
call DestroyTimer(t)
set t=null
endif

endfunction

function GiveAbilityTimed takes unit u, integer abilcode, integer lvl, real duration returns nothing
local timer t
local integer ui =GetHandleId(u)
local integer ti
if LoadReal(udg_Data,ui,abilcode) == null or LoadReal(udg_Data,ui,abilcode)<=0 then
set t=CreateTimer()
set ti=GetHandleId(t)
call UnitAddAbility(u,abilcode)
call SetUnitAbilityLevel(u,abilcode,lvl)
call SaveInteger(udg_Data,ti,1,abilcode)
call SaveUnitHandle(udg_Data,ti,0,u)
call SaveReal(udg_Data,GetHandleId(u),abilcode,duration)
call TimerStart(t,0.1,true,function GATcb)
set t=null
else
call SaveReal(udg_Data,ui,abilcode,duration)
endif
endfunction


Функция берет юнита U, равкод способности, нужный уровень способности, реальное число-длительность нахождения спелла у юнита.


 

CHLSNДата: Вторник, 24 Мая 2011, 14:16:21 | Сообщение # 9
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
FkoFF, отлично, все так, как я и предполагал, только я хотел не время сохранять, а количество скастованных на юнита заклинаний одного типа.
Вот только вопрос у меня возник и тогда и сейчас: LoadReal(udg_Data,ui,abilcode) == null or LoadReal(udg_Data,ui,abilcode)<=0 - эта строчка исключает возможность необнуленных значений в хеш? Или хеш инициализируется с нулями?




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

FkoFFДата: Вторник, 24 Мая 2011, 14:23:11 | Сообщение # 10
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
CHLSN, если значения в хэш нет то попытка вызвать его выдаст null, по этому проверяются оба варианта. Если там будет 0 то значит что заклинание уже было скастованно на героя и уже отвисело, хотя, впрочем, можно от этого избавиться вписав в функцию GATcb строчку call RemoveSavedReal(udg_Data,ui,abilcode) вместо call SaveReal(udg_Data,ui,abilcode,0)

 

CHLSNДата: Среда, 01 Июня 2011, 01:03:16 | Сообщение # 11
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
FkoFF, ок, если карта не вылетит после первого же запуска или не заторкает, помощь на счет хеша окажется очень уместной )

Добавлено (01-06-2011, 01:03)
---------------------------------------------
FkoFF, вспомнил охрененное НО.
Некоторые спеллы заносят данные в хеш по хендлу юнита, и, естественно, данные эти надо подчищать.

Дак вот, что делать? Удалять из хеш эти данные, и не юзать call FlushChildHashtable() (используя в качестве дочерних ключей исключительно известные константные значения (то бишь не хендлы объектов)) ?




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

SirNikolasДата: Среда, 01 Июня 2011, 06:51:18 | Сообщение # 12
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Создавать несколько хэш-таблиц.

 

CHLSNДата: Среда, 01 Июня 2011, 07:19:11 | Сообщение # 13
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
SirNikolas, спасибо, кэп )) сам-то что-то не додумался )



Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

FkoFFДата: Среда, 01 Июня 2011, 08:45:06 | Сообщение # 14
Группа: Заблокированные
Сообщений: 4356
Награды: 1
Репутация: 1413
Блокировки:
Quote (SirNikolas)
Создавать несколько хэш-таблиц.

Quote (CHLSN)
SirNikolas, спасибо, кэп )) сам-то что-то не додумался )

Не вздумай создавать хэштаблицы. Сами хэш таблицы -самые массивные объекты в игре и создавать много ХТ - опасно. Тоесть для каждого спелла своя хт - бред, а вот для каждой системы (сколько их будет, 20-30?) - можно себе позволить.

У меня был случай - сунул в периодический триггер строку set udg_Hash = InitHashtable() и удивлялся что через 20-30 минут игры у меня игра фаталила.

Quote (CHLSN)
FkoFF, вспомнил охрененное НО. Некоторые спеллы заносят данные в хеш по хендлу юнита, и, естественно, данные эти надо подчищать.

эмм, какие еще спеллы заносят инфу по хэндлу ЮНИТА а не таймера? в любом случае call FlushSaved[Real|Integer|String|Boolean|Handle](ht,parentkey,childkey),


 

CHLSNДата: Среда, 01 Июня 2011, 08:51:43 | Сообщение # 15
10 уровень
Группа: Проверенные
Сообщений: 1627
Награды: 0
Репутация: 132
Блокировки:
Quote (FkoFF)
эмм, какие еще спеллы заносят инфу по хэндлу ЮНИТА а не таймера?
Вот такие, хитроумные))

Quote (FkoFF)
а вот для каждой системы (сколько их будет, 20-30?) - можно себе позволить.
За всю историю карты пока что обошелся только одной, поэтому для этой системы думаю вполне можно выделить вторую.




Я в контакте и на warcraft3ft.info.
Кто может сказать, почему **** дизайнер писал вместо "pt" "px" в CSS, благодаря чему нужно смотреть форум через лупу с Ctrl++?
 

Форум о Warcraft 3 » Раздел для картостроителей » GUI / Jass » Добавление способности
  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz