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

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

Ответ
 
Kenshi245

offline
Опыт: 2,252
Активность:
Game Cache
Прочитал статью на сайте, принцип работы понял, но написать ничего не могу, все время пишет какие-то ошибки и вылетает. Напишите плиз элементарный пример работы с кешем+таймером, например скрипт создает юнита ичерез 5 сек удаляет его.
Старый 09.04.2008, 22:52
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
Код:
function bla takes nothing returns nothing
local unit u = CreateUnit(params)
local timer t = CreateTimer()
call StoreInteger(cache, I2S(H2I(t)), "unit", I2S(H2I(u)))
call TimerStart(t, 5, false, function remove)
endfunction

function remove takes nothing returns nothing
call RemoveUnit(I2U(GetStoredInteger(cache, I2S(H2I(GetExpiredTimer())), "unit")))
endfunction
тут чисто примерно, для нескольких действий лучше юзать локалки в функции ремув + у меня тут утечки, найдёшь их сам - больше будешь знать и для тебя будет лучше
хотя для ремува юнита лучше таймед лайф юзать
Старый 10.04.2008, 02:43
Toadcop

offline
Опыт: 54,313
Активность:
Код:
function remove takes nothing returns nothing
call RemoveUnit(I2U(GetStoredInteger(cache, I2S(H2I(GetExpiredTimer())), "unit")))
endfunction

function bla takes nothing returns nothing
local unit u = CreateUnit(params)
local timer t = CreateTimer()
call StoreInteger(cache, I2S(H2I(t)), "unit", I2S(H2I(u)))
call TimerStart(t, 5, false, function remove)
endfunction

ибо в джассе нету форвардинга =) как и в норм языках програмирования =) (ну конечно это грубо говоря.)
Старый 10.04.2008, 03:00
adic3x

offline
Опыт: 108,439
Активность:
кешь зло в плане того, что многие моменті его применения можно намного лучше организовать без него
Старый 10.04.2008, 10:29
Kenshi245

offline
Опыт: 2,252
Активность:
Пишет Expected a name. ((
А разве перед использованием кеша его не нужно инициализировать? И потом там получается что скрипт закладывает переменную в кеш и не удаляет ее, это уже утечка, или нет?
Старый 10.04.2008, 11:22
DFlyer
<3 MJ
offline
Опыт: 42,879
Активность:
Kenshi245
Естественно его надо сначала инициализировать.
На счёт утечки не понял, что ты имеешь в виду?
Старый 10.04.2008, 11:34
Kenshi245

offline
Опыт: 2,252
Активность:
Цитата:
Сообщение от DFlyer
Kenshi245
Естественно его надо сначала инициализировать.
На счёт утечки не понял, что ты имеешь в виду?


Ну то, что после удаления юнита всеравно остаются данные в кеше.
Сделал инициализацию, всеравно пишет кучу ошибок.
Старый 10.04.2008, 11:55
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
рб функции H2I и I2U создал?
Старый 10.04.2008, 13:40
Toadcop

offline
Опыт: 54,313
Активность:
H2I,I2U ^^ нету же...

вот они

Код:
function H2I takes handle x returns integer
    return x
    return 0
endfunction

function I2U takes integer x returns unit
    return x
    return null
endfunction

ну вставь этот код выше тех 2ух функций =)
Старый 10.04.2008, 13:40
Kenshi245

offline
Опыт: 2,252
Активность:
Всеравно пишет ошибу - Expected a name
Старый 10.04.2008, 16:06
adic3x

offline
Опыт: 108,439
Активность:
скрипт в студию, весь
Цитата:
Ну то, что после удаления юнита всеравно остаются данные в кеше
ФлушСторед_ххх
Старый 10.04.2008, 16:42
df Hunter
Нападатель
offline
Опыт: 5,749
Активность:
не все утечки назвал )
Старый 10.04.2008, 17:44
adic3x

offline
Опыт: 108,439
Активность:
string ?!
Старый 10.04.2008, 17:47
Kenshi245

offline
Опыт: 2,252
Активность:
Код:
function H2I takes handle x returns integer
    return x
    return 0
endfunction

function I2U takes integer x returns unit
    return x
    return null
endfunction

function remove takes nothing returns nothing
call RemoveUnit(I2U(GetStoredInteger(cache, I2S(H2I(GetExpiredTimer())), "unit")))
endfunction


function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local timer t = CreateTimer()
call InitGameCacheBJ( "cache" )
call StoreInteger(cache, I2S(H2I(t)), "unit", I2S(H2I(u)))
call TimerStart(t, 5, false, function remove)
endfunction
Старый 10.04.2008, 20:23
adic3x

offline
Опыт: 108,439
Активность:
обращение к кешу должно идти через переменную, т.е.
Код:
globals
 cache c=null
endglobals

 call FlushGameCache(InitGameCache("cachr.w3v"))
 set udg_dsc=InitGameCache("cachr.w3v.w3v")


т потом обращайся к с
Старый 10.04.2008, 22:18
Kenshi245

offline
Опыт: 2,252
Активность:
Не, че-то всеравно ошибка, ща попробую через GUI сделать а потом конвертировать и сравнить че там за фигня.
Старый 11.04.2008, 00:01
adic3x

offline
Опыт: 108,439
Активность:
TT, мну осексё, не cache - gamecache
Код:
globals
 gamecache c=null
endglobals

 call FlushGameCache(InitGameCache("cachr.w3v"))
 set c=InitGameCache("cachr.w3v")
вот вроде так (ну глобалку если что обьявляй в редакторе, если ген пак не юзаешь
Старый 11.04.2008, 13:35
Kenshi245

offline
Опыт: 2,252
Активность:
Адольф, а можешь целиком код выложить, а то у меня ошибка на ошибке.
з.ы. а этот генпак избавляет от постоянных крит ерроров при проверке скрипта?
Старый 11.04.2008, 16:01
adic3x

offline
Опыт: 108,439
Активность:
не, неизбавляет, он просто поддерживает более удобный синтаксис) т.е. обьявление глобалок в коде и т.д.
ну код почти полный, т.е. если создаешь глоболку типа буфер игры в редакторе переменных - в коде пиши не с а udg_c, ну и конечно вызывай функции из какой либо инициализирующей функции
Старый 11.04.2008, 16:06
Kenshi245

offline
Опыт: 2,252
Активность:
Вот так?


Код:
function H2I takes handle x returns integer
return x
return 0
endfunction

function I2U takes integer x returns unit
return x
return null
endfunction

function remove takes nothing returns nothing
call RemoveUnit(I2U(GetStoredInteger(cache, I2S(H2I(GetExpiredTimer())), "unit")))
endfunction

function Trig_Untitled_Trigger_001_Actions takes nothing returns nothing
local unit u = GetTriggerUnit()
local timer t = CreateTimer()
call FlushGameCache(InitGameCache("cachr.w3v"))
set udg_ddd=InitGameCache("cachr.w3v")
call StoreInteger(udg_ddd, I2S(H2I(t)), "unit", I2S(H2I(u)))
call TimerStart(t, 5, false, function remove)
endfunction
Старый 11.04.2008, 16:23
Ответ

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

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

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

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



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