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

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

Ответ
 
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
Ошибок нет, но не работает...
» Вот код: (Корень карты)
constant hashtable h = InitHashtable()

function SR takes real x1, real y1, real x2, real y2 returns real
    return SquareRoot((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))
endfunction

function MissleMove2 takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local unit u = LoadUnitHandle(h,id,0)
    local unit c = LoadUnitHandle(h,id,1)
    local unit d = LoadUnitHandle(h,id,2)
    local real speed = LoadReal(h,id,4)
    local real x = GetUnitX(d)
    local real y = GetUnitY(d)
    local real x1 = GetUnitX(c)
    local real y1 = GetUnitY(c)
    local real a = Atan2(y1-y,x1-x)+LoadReal(h,id,3)
    if SR(x,y,x1,y1) > 40 and GetWidgetLife(c) > 0 then
        call SetUnitX(d,x+speed*Cos(a))
        call SetUnitY(d,y+speed*Sin(a))
        call SetUnitFacing(d,a*bj_DEGTORAD)
    else
        call UnitDamageTarget(u,c,LoadReal(h,id,5),false,false,null,null,null)
        call FlushChildHashtable(h,id)
        call DestroyTimer(t)
        call RemoveUnit(d)
    endif
    set d = null
    set c = null
    set t = null
    set u = null
endfunction

function MissleMove takes unit u,unit c,real speed,real angle,real dmg,integer ab returns nothing
    local timer t = CreateTimer()
    local integer id = GetHandleId(t)
    call SaveUnitHandle(h,id,0,u)
    call SaveUnitHandle(h,id,1,c)
    call SaveUnitHandle(h,id,2,CreateUnit(GetOwningPlayer(u),ab,GetUnitX(u),GetUnitY(u),GetUnitFacing(u)))
    call SaveReal(h,id,3,angle)
    call SaveReal(h,id,4,speed)
    call SaveReal(h,id,5,dmg)
    call TimerStart(t,0.04,true,function MissleMove2)
    set t = null
endfunction
» Код Спела:
function Trig_LaserStrike_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function Trig_LaserStrike_Actions2 takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local unit u = LoadUnitHandle(h,id,0)
    local unit c = LoadUnitHandle(h,id,1)
    local real m = GetUnitState(u,UNIT_STATE_MANA)
    if GetUnitCurrentOrder(u) == OrderId("channel") and m > 0 then
        call MissleMove(u,c,30,GetRandomReal(-1.2,1.2),GetHeroInt(u,true)*GetUnitAbilityLevel(u,'A000'),'e000')
        call SetUnitState(u,UNIT_STATE_MANA,m-m*0.01)
    else
        call FlushChildHashtable(h,id)
        call DestroyTimer(t)
    endif
    set t = null
    set c = null
    set u = null
endfunction

function Trig_LaserStrike_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local integer id = GetHandleId(t)
    call SaveUnitHandle(h,id,0,GetTriggerUnit())
    call SaveUnitHandle(h,id,1,GetSpellTargetUnit())
    call TimerStart(t,0.25,true,function Trig_LaserStrike_Actions2)
    set t = null
endfunction

//===========================================================================
function InitTrig_LaserStrike takes nothing returns nothing
    set gg_trg_LaserStrike = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_LaserStrike, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_LaserStrike, Condition( function Trig_LaserStrike_Conditions ) )
    call TriggerAddAction( gg_trg_LaserStrike, function Trig_LaserStrike_Actions )
endfunction
Старый 31.08.2012, 13:44
DualShock

offline
Опыт: 5,023
Активность:
Vadik29, что именно не работает?
Старый 31.08.2012, 13:53
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
DualShock, вообще в меню выкидывает (сначала 2 раза сохраняю, потом проверка).
Старый 31.08.2012, 13:57
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Vadik29, ну во первых вот это constant hashtable h = InitHashtable() дело пишется так
((код jass
globals
constant hashtable h = null
endglobals
))
во вторых нельзя иницализировать хештаблицу при обьявлении переменной (константы)
только где небуть в левой функции
((код jass
library A initalizer InitHash
function InitHash takes nothing returns nothing
set h = InitHashtable()
endfunction
endlibrary
))
Старый 31.08.2012, 14:07
ScorpioT1000
Работаем
offline
Опыт: отключен
"constant hashtable" вы понимаете смысл данного выражения?
Старый 31.08.2012, 14:14
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
quq_CCCP, ScorpioT1000, Спасибо, я понял свою ошибку.
Старый 31.08.2012, 14:15
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ScorpioT1000, ну константа тип хештаблица, название h если что но нельзя инитить хеш при объявлении переменных и констант...
Старый 31.08.2012, 14:16
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
quq_CCCP, А на обычном джассе это бы выглядело как?
Старый 31.08.2012, 14:21
ScorpioT1000
Работаем
offline
Опыт: отключен
quq_CCCP, константность любого объекта означает, что его данные задаются только 1 раз при инициализации и далее ставится запрет на изменение и вызов любых функций изменения этих данных.
Хотя в jass странно что ты смог вообще это объявить, скорее всего оно ничего не даст
Старый 31.08.2012, 14:24
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Vadik29, Ну на обычном джасе ты бы в окошке где переменные создал...
Потом как в этом тригере:
((код jass
function Trig_Melee_Initialization_Actions takes nothing returns nothing
call InitHashtableBJ( )
set udg_Hash = GetLastCreatedHashtableBJ()
call MeleeStartingVisibility( )
call MeleeStartingHeroLimit( )
call MeleeGrantHeroItems( )
call MeleeStartingResources( )
call MeleeClearExcessUnits( )
call MeleeStartingUnits( )
call MeleeStartingAI( )
call MeleeInitVictoryDefeat( )
endfunction
===========================================================================
function InitTrig_Melee_Initialization takes nothing returns nothing
set gg_trg_Melee_Initialization = CreateTrigger( )
call TriggerAddAction( gg_trg_Melee_Initialization, function Trig_Melee_Initialization_Actions )
endfunction
ну конешно можно избавится от бж
set udg_Hash= InitHashtable()
или использовать бж глобалку bj_lastCreatedHashtable
))
Старый 31.08.2012, 14:26
Vadik29
Choice Battle 1.6а
offline
Опыт: 15,845
Активность:
quq_CCCP, ааа, тоесть на обычном джассе только через удги?
Старый 31.08.2012, 14:27
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
ScorpioT1000, ну оно и понятно, но константы можно обьявлять только в globals\endglobals разделе, и константу нельзя приравнять при объявлении какой либо функции, тк по идее переменные объявляются раньше функций... в ризультате ошибка, ну или константа\глобалка = null
quq_CCCP добавил:
Vadik29, ну ясно что на udg_ так все переменные обьявляются...
Старый 31.08.2012, 14:29
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
Хотя в jass странно что ты смог вообще это объявить, скорее всего оно ничего не даст
Константы в жассе местами работают как статики.
Старый 31.08.2012, 14:31
влад10011

offline
Опыт: 2,337
Активность:
Что за ересь вы несёте?!
я всё время юзаю инициализацию сразу на месте объявление
globals
constant hashtable Hash=InitHashtable()
endglobals
всё всегда работает
мб это баг в JNGP+cJass то что константы без глобалс нельзя инициализировать
попробуй сделать колонку глобалс
Старый 12.09.2012, 16:52
ScorpioT1000
Работаем
offline
Опыт: отключен
влад10011, с радостью послушаю твой вариант ответа на данный вопрос:
"constant hashtable" вы понимаете смысл данного выражения?
Старый 12.09.2012, 17:00
влад10011

offline
Опыт: 2,337
Активность:
Константа это переменная которую нельзя изменять(чо тут ещё сказать? Х_Х )
мы создаём хеш и инициализируем его и при этом мы не можем потом написать гденить в коде Hash=InitHashtable()
или ты имеешь в виду что потом нельзя будет удалить из него что-то?
впрочем можно и без констант обойтись просто написать hashtable Hash=InitHashtable()
Старый 12.09.2012, 18:46
ScorpioT1000
Работаем
offline
Опыт: отключен
в нормальном языке это бы заблокировало вообще все функции хештейбла на изменение) хотя я не знаю поведения жасс-констант
Старый 12.09.2012, 18:50
Doc

offline
Опыт: 63,163
Активность:
ScorpioT1000, в нормальном языке это бы заблокировало изменение ссылки на объект окда?
Старый 12.09.2012, 19:10
ScorpioT1000
Работаем
offline
Опыт: отключен
Doc, нет, все изменения
Старый 13.09.2012, 01:40
alexprey
познающий Unity
offline
Опыт: 68,501
Активность:
ScorpioT1000, да нет же, только изменение ссылки. Скорп совсем упоролся похоже
Старый 13.09.2012, 01:56
Ответ

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

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

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

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



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