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

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

Закрытая тема
 
vdvMax
\\_Max_//
offline
Опыт: 4,123
Активность:
SCV + lightning
Мой второй опыт в системе SCV - не могу записать в кэш адреса молний плз помогите.
вроде всё что нужно зделал, а не фига!
Прикрепленные файлы
Тип файла: w3x magic kletka.w3x (22.2 Кбайт, 9 просмотров )

Отредактировано DFlyer, 27.09.2008 в 15:44.
Старый 26.09.2008, 19:11
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Уважаемый, такую проблему недавно обсуждали. Вот буквально здесь - http://xgm.guru/forum/showthread.php?t=19485 - читать первый ответ.
К слову, в примере касательно записи/чтения SCV все сделано нормально. Только вот зачем юзать кэш в пределах одной функции?
Старый 26.09.2008, 19:41
J
expert
offline
Опыт: 48,447
Активность:
*SCV

ну... если чуть чуть улучшить, почеркну что чуть чуть, т.к. можно лучше, то триггер Kletka будет выглядеть так
» code
поставь сфере высоту - 0
Код:
function KletkaTimer takes nothing returns nothing
    local timer ct = GetExpiredTimer()
    local integer Count = GetStoredInteger(udg_cache, I2S(H2I(ct)), "Count") 
    call RemoveUnit(I2U(GetStoredInteger(udg_cache, I2S(H2I(ct)), "unittop")))
    loop
        exitwhen Count <= 0
        call RemoveUnit(I2U(GetStoredInteger(udg_cache, I2S(H2I(ct)), "Effect"+I2S(Count))))
        call DestroyLightning(I2light(GetStoredInteger(udg_cache, I2S(H2I(ct)), "Light"+I2S(Count))))
        set Count = Count - 1
    endloop
    call FlushStoredMission(udg_cache, I2S(H2I(ct)))
    call DestroyTimer(ct)
    set ct = null
endfunction

function KletkaAction takes real Xcenter, real Ycenter, real Height, real radius, integer Count returns nothing
    local timer t = CreateTimer()
    local unit unittop = CreateUnit(Player(0), 'h000', Xcenter, Ycenter, 0)
    local real dAng = 2*bj_PI/Count
    local real X
    local real Y
    call SetUnitFlyHeight(unittop, Height, 0)
    call StoreInteger(udg_cache, I2S(H2I(t)), "unittop", H2I(unittop))
    call StoreInteger(udg_cache, I2S(H2I(t)), "Count", Count)
    loop
        exitwhen Count <= 0
        set X = Xcenter+radius*Cos(Count*dAng)
        set Y = Ycenter+radius*Sin(Count*dAng)
        call StoreInteger(udg_cache, I2S(H2I(t)), "Effect"+I2S(Count), H2I(CreateUnit(Player(0), 'h001', X, Y, (Count*dAng-bj_PI)*bj_RADTODEG)))
        call StoreInteger(udg_cache, I2S(H2I(t)), "Light"+I2S(Count), H2I(AddLightningEx("DRAM", true, X, Y, 0, Xcenter, Ycenter, Height)))    
        set Count = Count - 1
    endloop
    call TimerStart(t, 5, false, function KletkaTimer)
    set t = null
    set unittop = null
endfunction

function TrigKletkaConditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function TrigKletkaActions takes nothing returns nothing
    local location TargetLoc = GetSpellTargetLoc()
    call KletkaAction(GetLocationX(TargetLoc), GetLocationY(TargetLoc), 350, 256, 10)
    call RemoveLocation(TargetLoc)
    set TargetLoc = null
endfunction

function InitTrig_Kletka takes nothing returns nothing
    set gg_trg_Kletka = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Kletka, EVENT_PLAYER_UNIT_SPELL_CAST)
    call TriggerAddCondition(gg_trg_Kletka, Condition(function TrigKletkaConditions))
    call TriggerAddAction(gg_trg_Kletka, function TrigKletkaActions)
endfunction


Jon добавил:
также добавлю что ты неправельно ставиш молнии, т.к. в функции AddLightningEx() координаты молнии задаются без учета рельефа, потому тебе нужно получать высоту каждых точек где создаеш молнию чтобы она не уходила под землю
Старый 26.09.2008, 19:51
vdvMax
\\_Max_//
offline
Опыт: 4,123
Активность:
ShadoW DaemoN спс всё понял

Jon А как узнать высоту рельефа?

vdvMax добавил:
Цитата:
Только вот зачем юзать кэш в пределах одной функции?


это для проверки было, потом я бы создал другие функции
Старый 27.09.2008, 08:35
J
expert
offline
Опыт: 48,447
Активность:
Код:
globals
    location GL = Location(0,0)
endglobals

function GetTerrainZ takes real X, real Y returns real
    call MoveLocation(GL, X, Y)
    return GetLocationZ(GL)
endfunction

function GetUnitZ takes unit u returns real
    call MoveLocation(GL, GetUnitX(u), GetUnitY(u))
    return GetUnitFlyHeight(u) + GetLocationZ(GL)
endfunction

function SetUnitZ takes unit u, real z returns nothing
    call MoveLocation(GL, GetUnitX(u), GetUnitY(u))
    call SetUnitFlyHeight(u, z-GetLocationZ(GL), 0)
endfunction
Старый 27.09.2008, 09:10
Закрытая тема

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

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

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

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



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