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

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

Закрытая тема
 
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Не срабатывает функция
Одна функция, написанная тем же методом и в принципе с которой и копировалась нерабочая - работает.
Текстовое сообщение нужно для проверки работает ли фрагмент кода.
function MakeWeaponDamage takes unit u, unit v, real r, real x returns nothing
//Функция - переработанный для скиллов вариант нанесения урона в зависимости от физ. урона героя
local real dmg
local real res
local integer i = 0
local integer ix = 0 
local real ab = 0

set dmg = ( r + ((WeaponDamage(u)/100)* x ))
 call DisplayTimedTextToForce( GetPlayersAll(), 15.00, ( "Weapon Damage: " + I2S(R2I(dmg)) ) )
//Это сообщение в игре выводится
 set i = 1
    loop
        exitwhen i > udg_DB_ITEMCOUNT
          set ix = 1
          loop
             exitwhen ix > 6
          if ( GetItemTypeId(UnitItemInSlotBJ(v, ix)) == udg_DB_Item[i] )  then
          if ( LoadRealBJ(( 17 ), i, udg_ITEM_STATS) != 0.00 ) then
           set res = res + ( LoadRealBJ(( 17 ), i, udg_ITEM_STATS))
 call DisplayTimedTextToForce( GetPlayersAll(), 15.00, ( "Resist: " + I2S(R2I(res)) ) )
//тестирование идет по не-героям, по этому в этом сообщении - тишина
           else
            endif
      else
      endif

       if ( GetItemTypeId(UnitItemInSlotBJ(v, ix)) == udg_DB_Item[i] )  then
          if ( LoadRealBJ(( 47 ), i, udg_ITEM_STATS) != 0.00 ) then
            set ab = ab + ( LoadRealBJ(( 47 ), i, udg_ITEM_STATS))
            call DisplayTimedTextToForce( GetPlayersAll(), 15.00, ( "Damage Reduce: " + I2S(R2I(ab)) ) )
//аналогичная ситуация тут
            else
            endif     
            else
            endif 

    set ix = ix + 1
    endloop
    set i = i + 1
    endloop

 if ( res > 50.00 ) then 
 set res = 50
 else
 endif
 
 set dmg = (( dmg  * ( 1.0 - (res / 100))))

call DisplayTimedTextToForce( GetPlayersAll(), 15.00, ( "Final Weapon Damage: " + I2S(R2I(dmg)) ) )
//это сообщение уже молчит

 if ( ab > dmg ) then
 set ab = ( ab - ( ( ab - dmg ) + 3 )) 
 else
 endif
 
 
 call UnitDamageTargetBJ( u, v, (dmg - ab) , ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL ) 

 set dmg = 0
 set res = 0
 set ix = 0
 set i = 0
 set ab = 0
 
 endfunction
Функцию WeaponDamage тоже могу выложить, если есть смысл.
FKoFF добавил:
забавно. заного скатал с оригинала и работает, хотя я до сих пор не могу увидеть разницу кроме разных имен у локалок.

function MakeWeaponDamage takes unit z, unit x, real d, real c returns nothing
local real dmg
local real r = 0
local integer i = 0
local integer ix = 0 
local real ab = 0

set dmg = ( d + ((WeaponDamage(z)/100)* c ))

 set i = 1
    loop
        exitwhen i > udg_DB_ITEMCOUNT
          set ix = 1
          loop
             exitwhen ix > 6
          if ( GetItemTypeId(UnitItemInSlotBJ(x, ix)) == udg_DB_Item[i] )  then
          if ( LoadRealBJ(( 17 ), i, udg_ITEM_STATS) != 0.00 ) then
            set r = r + ( LoadRealBJ(( 17 ), i, udg_ITEM_STATS))
            else
            endif
      else
      endif

       if ( GetItemTypeId(UnitItemInSlotBJ(x, ix)) == udg_DB_Item[i] )  then
          if ( LoadRealBJ(( 47 ), i, udg_ITEM_STATS) != 0.00 ) then
            set ab = ab + ( LoadRealBJ(( 47 ), i, udg_ITEM_STATS))
            else
            endif     
            else
            endif 

    set ix = ix + 1
    endloop
    set i = i + 1
    endloop


 if ( r > 50) then
 set r = 50
 else
 endif

 set dmg = (( dmg  * ( 1.0 - (r / 100))))


 if ( ab > dmg ) then
 set ab = ( ab - ( ( ab - dmg ) + 3 )) 
 else
 endif
 
 
 call UnitDamageTargetBJ( z, x, (dmg - ab) , ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL ) 

 set dmg = 0
 set r = 0
 set ix = 0
 set i = 0
 set ab = 0
 set z = null
 set x = null
 
 endfunction
Старый 03.11.2010, 17:18
Rampage
Бицепс
offline
Опыт: 9,722
Активность:
WeaponDamage выложи пожалуйста.
Старый 03.11.2010, 17:39
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Да уже разобрался, лучше сравни нерабочую (первую) и рабочую (вторую), в первой, в отличии от второй, что то не так, хотя на вид они идентичны.
Старый 03.11.2010, 18:31
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
В первой функции ты пытаешься неиницилизированной переменной res присваиваешь значение res + что-то.
Т.е. происходит что-то типа: res=(НЕЧТОВНЕЗАПНОЕ,ПРИСУТСТВУЮЩЕЕПОЭТОМУАДРЕСУ)+что-то обычное.
Hellfim добавил:
Именно поэтому нужно всегда инициализировать переменные. Ноль не присваивается автоматически.
Старый 03.11.2010, 20:04
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
Во втором триггере та же история с r = r + нечто внезапное + что то обычное )
Старый 03.11.2010, 20:30
Nekit1234007

offline
Опыт: 11,916
Активность:
Ты не понял
// 1
local real res // Внезапное
set res = res + ( LoadRealBJ(( 17 ), i, udg_ITEM_STATS)) // рес = внезапное + что-то

// 2
local real r = 0 // Не внезапное, да?
set r = r + ( LoadRealBJ(( 17 ), i, udg_ITEM_STATS)) // р = р + что-то
Старый 03.11.2010, 20:35
Hellfim
Новичок
offline
Опыт: 79,880
Активность:
FKoFF, в первом у тебя записывается:
res=SOMETHING + число
во втором
res=0 + число
Старый 03.11.2010, 21:51
FKoFF
Venomancer 89lvl. Europe
offline
Опыт: 5,975
Активность:
все, дошло где ошибка была ) спасибо.
Старый 03.11.2010, 22:12
Закрытая тема

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

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

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

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



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