XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
нехочет добавлять ловкость целое число
call ModifyHeroStat( bj_HEROSTAT_AGI, udg_AiraAbilityCast[1], bj_MODIFYMETHOD_ADD, ( R2I(0.25) * GetUnitAbilityLevel(udg_AiraAbilityCast[1], 'A03I' )) )
Вот нехочет добавлять ловкость а если ставлю 1.05-1.90 без разницы то добавляет, но мне надо чтоб 0.25*уровень абилы тоесть за 4 каста на 1 уровне должна добавится 1 ловкость но ее нет(
Старый 25.04.2012, 13:00
Klop
Папа римский
offline
Опыт: 13,006
Активность:
native SetHeroAgi takes unit whichHero, integer newAgi, boolean permanent returns nothing
Klop добавил:
Cosonic5, ду маю в твоём случает нужна на хендл юнита сохранять ловкость за применение,при каждом применении проверять
real agi = LoadReal(hash,GetHandleId(caster),0)
if agi > 1 then
agi = agi - 1
SetHeroAgi(caster,GetHeroAgi(caster,true)+1,true)
SaveReal(hash,GetHandleId(caster),0,agi)
endif
что то вроде этого
Старый 25.04.2012, 13:19
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
call SetHeroAgi( udg_AiraAbilityCast[1], bj_MODIFYMETHOD_ADD, ( R2I(0.25) * GetUnitAbilityLevel(udg_AiraAbilityCast[1], 'A03I' )) )
так?
мне не надо эту ловкость удалять она дается навсегда
Старый 25.04.2012, 13:20
Klop
Папа римский
offline
Опыт: 13,006
Активность:
смотри пост выше
Старый 25.04.2012, 13:21
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
Klop, хмм походу ты непонял ? тут событие умирает цель (условие юнит цель способности)
действие добавить 0.25*ур спела герою кастеру.

Отредактировано Cosonic5, 25.04.2012 в 13:29.
Старый 25.04.2012, 13:23
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Cosonic5:
Klop, хмм походу ты глупый не?
ок,да уж куда мне понять,мелкую конструкцию которую я написал тебе не понять,за тебя надо всё написать и разжевать
Старый 25.04.2012, 13:31
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Cosonic5, учись думать головой, а не попой...
Или всё зя тебя опять сделать?
Старый 25.04.2012, 13:32
Klop
Папа римский
offline
Опыт: 13,006
Активность:
я написал имея ввиду то что
на юнита который применил спелл (и неважно какие там условия убил не убил сам ставь если надо) в Хеш на юнита сохраняем ловкость которую он получил например 0.25*уровень способности,затем проверяем что получения ловкость больше 1 тогда добавляем её вот этой функцией
SetHeroAgi(caster,GetHeroAgi(caster,true)+1,true)
и перезаписываем в хеш набираемую ловкость вычитая 1
вот это я написал,а ловкость я не кому не убирал,не умееш читать функции сочуствую доступно обьясню
Set (это слово присвоения почему перд переменными ставиться?) это значит мы присвоим в этой функции что то HeroAgi (присвоим герою ловкость)
параметры герой,количество,вкл бонусы?
далее
в параметре кол-во GetHeroAgi(Get - брать) GetHeroAgi значит берём текущую ловкость героя
GetHeroAgi+ 1 значит берём ловкость героя и добавили к ней 1
Klop добавил:
((кат Code
function GiveAgility takes unit u returns nothing
    local integer id = GetHandleId(u)
    local real agi = LoadReal(h,id,0)
    set agi = agi + .25*GetUnitAbilityLevel(u,'A000') //Поставь ID своего спелла
    if agi >= 1 then
        set agi = agi - 1
        call SetHeroAgi(u,GetHeroAgi(u,true)+1,true)
        call BJDebugMsg("+1 Ловкость")
    endif
    call SaveReal(h,id,0,agi)
endfunction
))
Вот должно работать
Старый 25.04.2012, 13:52
prog

offline
Опыт: 32,865
Активность:
Klop, хештаблица тут ни разу не упала, как и весь остальной бред, который ты написал.
upd: прошу прощения, погорячился, хештаблица, как один из вариантов решения проблемы невозможности добавить дробное значение стата, имеет право на существование.
Cosonic5, подумай что случится при преобразовании R2I(0.25), учитывая что это преобразование к целому числу и производится оно путем округления.
Правильно, получится 0, который ты умножишь на уровень способности и получишь нулевую прибавку стата.
Чтобы решить твою проблему тебе необходимо избавиться от этого преобразования.
Как это сделать думай сам.
Старый 25.04.2012, 13:56
Klop
Папа римский
offline
Опыт: 13,006
Активность:
prog:
Как это сделать думай сам.
вот оно самое точное решение всех проблем, красава пришёл показал ум
Старый 25.04.2012, 13:58
Cosonic5
Моймозггоритогнем
offline
Опыт: 13,584
Активность:
ладно всем спасибо за советы. Тему закрываем!
Старый 25.04.2012, 14:07
prog

offline
Опыт: 32,865
Активность:
Klop, обрати внимание, твой способ будет давать сбои в случае если способность может иметь более 4 уровней т.к. будет накапливаться остаток, который не может быть выдан по простой причине - за одно убийство не может быть выдано больше чем одну единицу ловкости.
Старый 25.04.2012, 14:12
Klop
Папа римский
offline
Опыт: 13,006
Активность:
prog, ну это уже пусть он сам дорабатывает,я просто сделал пример
Klop добавил:
вот переписал
function GiveAgility takes unit u returns nothing
    local integer id = GetHandleId(u)
    local real agi = LoadReal(h,id,0)
    set agi = agi + .25*GetUnitAbilityLevel(u,'A000') //Поставь ID своего спелла
    loop
    exitwhen agi < 1
           set agi = agi - 1
           call SetHeroAgi(u,GetHeroAgi(u,true)+1,true)
           call BJDebugMsg("+1 Ловкость")
    endloop
    call SaveReal(h,id,0,agi)
endfunction
Старый 25.04.2012, 14:34
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 00:25.