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

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

Ответ
 
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Подскажите по Hashtable
Я немного запутался в childkey. Хотелось бы узнать, правильно я думаю или нет о следующем:
когда я делаю допустим SaveInteger (htable, GetHandleId(timer1), childkey, mynumber1), после чего вызываю SaveInteger (htable, GetHandleId(timer2), childkey, mynumber2), то первое число будет перезаписано на второе? Если да, то встает следующий вопрос - как мне узнать нужный childkey, когда я загружаю данные в функции, вызванной таймером?
Старый 25.02.2010, 21:25
RazArt

offline
Опыт: 11,197
Активность:
Если timer1 != timer2, то всё нормально будет
Старый 25.02.2010, 21:38
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
ну а массив таймеров не есть один таймер, так? ведь ID у всех в массиве разные..или я не прав?
Старый 25.02.2010, 21:43
St John

offline
Опыт: 156
Активность:
да, каждый элемент массива имеет свой Handle, если элементы не одинаковые
GetHandleId(timer[1])!=GetHandleId(timer[2]) если timer[1]!= timer[2]
Старый 25.02.2010, 22:16
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
ппц, я в замешательстве..в таком случае, почему при данном говно-коде двигается только юнит красного игрока?
function Trig_Pick_Actions takes nothing returns nothing
local integer i = GetPlayerId(GetOwningPlayer(GetSoldUnit()))
   
    set unit[i] = GetSoldUnit()
    call SaveUnitHandle(HTUnit, GetHandleId(t[i]), 1, GetSoldUnit())
    call SaveInteger (HTUnitNum, GetHandleId(t[i]), 1, i)
    
    if GetLocalPlayer() == GetOwningPlayer(GetSoldUnit()) then
        call SetCameraTargetController(GetSoldUnit(), 0, 0, false)
    endif
    
endfunction

//===========================================================================
function InitTrig_Pick takes nothing returns nothing
    set gg_trg_Pick = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Pick, EVENT_PLAYER_UNIT_SELL )
    call TriggerAddAction( gg_trg_Pick, function Trig_Pick_Actions )
endfunction
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function SS takes nothing returns nothing
local integer tn = LoadInteger (HTUnitNum, GetHandleId(GetExpiredTimer()), 1)

    if speed[tn] != 10 then 
        set speed[tn] = speed[tn]+1
    endif
       
endfunction

function SP takes nothing returns nothing
local integer tn = LoadInteger (HTUnitNum, GetHandleId(GetExpiredTimer()), 1)
local unit u = LoadUnitHandle(HTUnit, GetHandleId(GetExpiredTimer()), 1)

    if gear[tn] == 1 then
        call SetUnitX(u, GetUnitX(u)+speed[tn]*Cos(GetUnitFacing(u)*bj_DEGTORAD))
        call SetUnitY(u, GetUnitY(u)+speed[tn]*Sin(GetUnitFacing(u)*bj_DEGTORAD))
    
    else 
        call SetUnitX(u, GetUnitX(u)-speed[tn]*Cos(GetUnitFacing(u)*bj_DEGTORAD))
        call SetUnitY(u, GetUnitY(u)-speed[tn]*Sin(GetUnitFacing(u)*bj_DEGTORAD))
    
    endif
    
endfunction

function Trig_Move_Front_Actions takes nothing returns nothing
local integer p = GetPlayerId(GetTriggerPlayer())

    call TimerStart(ts[p],  0.6, true, function SS) 
    call TimerStart(t [p], 0.03, true, function SP)
    
endfunction

//===========================================================================
function InitTrig_Move takes nothing returns nothing
local integer i = 0

    set gg_trg_Move = CreateTrigger(  )
    loop
        call TriggerRegisterPlayerKeyEventBJ( gg_trg_Move, Player(i), bj_KEYEVENTTYPE_DEPRESS, bj_KEYEVENTKEY_UP )
        set i = i+1
        exitwhen i == 13
    endloop
    call TriggerAddAction( gg_trg_Move, function Trig_Move_Front_Actions )
    
endfunction
t[] и ts[] - глобальные таймеры-массивы, объявляющиеся и создающиеся при инициализации карты..
Старый 25.02.2010, 22:23
St John

offline
Опыт: 156
Активность:
что такое gear[] unit[]?
разве unit не зарезервированное слово?
ИМХО лучше делать на локальных таймерах
Старый 25.02.2010, 22:41
Mr_ILYAS
Kicked by XimikS
offline
Опыт: 492
Активность:
А зачем вообще ячейкам давать сложные имена. Ты боишься коллизий (совпадений) ???
у тя и так стоит в категории уникальная ссылка от таймера, так зачем занимаца гемороем, когда все данные можно просто нумеровать в своём по нраву порядке.
Я вот номерую просто по числам 1, 2 , 3, 4, и т.д., и этого достаточно.
Потом выгружаю (Load. . .Handle) нужное данное из соответствующей ячейки напрямую.
У мя всё работает, всё тип топ.

Отредактировано Mr_ILYAS, 26.02.2010 в 15:27.
Старый 25.02.2010, 22:56
Doc

offline
Опыт: 63,163
Активность:
Мне так кажется что ты неправильно берешь номер игрока в верхней функции, используй BJDebugMsg и выводи на экран i.
Старый 25.02.2010, 23:26
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
St_John, я не использую юнит..я в примере его так назвал просто + если я не использую локальные, значит они мне не подходят))
Mr_ILYAS, откровенно говоря, я нихрена не понял из того, что ты написал) кого куда выгружать и что нумеровать?)
DoctorGester, я думал об этом и тестил, вроде было правильно..но все таки сконцентрирую свое внимание на этом самом номере..я вообще понять не могу, то ли у меня косяк из-за невнимательности, то ли ХТ криво выдает данные, то ли мой говно-код просто неправильно написан О_о
Старый 26.02.2010, 00:27
Mr_ILYAS
Kicked by XimikS
offline
Опыт: 492
Активность:
ну вот уже изменил код))
собственно, это я и имел ввиду, чтоб в ячейках тупо цифры ставить и всего навсего . . .
Старый 26.02.2010, 15:17
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
Mr_ILYAS, ну глянул я этот код..если честно, то он вообще ни о чем..ничего нового/полезного/относящегося к теме я не узнал..а HT я итак использую без проблем с локальными простыми таймерами, но вот тут мне локальные таймеры не подходят
Старый 26.02.2010, 16:34
Mr_ILYAS
Kicked by XimikS
offline
Опыт: 492
Активность:
О каком коде идёт речь?
Старый 26.02.2010, 20:42
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
о том что ты удалил + Mr_ILYAS:
ну вот уже изменил код))
собственно, это я и имел ввиду, чтоб в ячейках тупо цифры ставить и всего навсего . . .
Старый 26.02.2010, 21:45
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
Vampirrr, эм... а ты таймеры хотябы создаешь? или просто используешь их пустые ячейки... просто у меня создалось такое впечатление.
Старый 27.02.2010, 00:58
Vampirrr
O_o
offline
Опыт: 19,286
Активность:
MrSmiLe, создаю конечно) в другом триггере =)
Старый 27.02.2010, 02:29
exAres
I love magic :)
offline
Опыт: 7,788
Активность:
Возможно что проблема совсем не в єтом коде + советую сделать как сказал DoctorGester, просто выводи на экран номер игрока юнитом которого манипулирует таймер в момент движения и от этого уже будешь отталкиватся.
Старый 27.02.2010, 12:46
Ответ

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

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

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

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



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