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

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

Ответ
 
Void

offline
Опыт: 1,632
Активность:
HandleUserDataSystem (HUDS)
Система позволяет сопоставить объекту(handle) число типа integer, что позволяет через таймер(триггер и т.д.) передать индекс массива или структуру в другую функцию.
P.S советую использовать систему для создания спеллов с периодическим движением "снаряда".
Прикрепленные файлы
Тип файла: w3x HandleUserDataSystem.w3x (44.2 Кбайт, 18 просмотров )
Старый 14.05.2008, 13:24
3uMvirAd

offline
Опыт: 9,047
Активность:
Я не теме - чё такое переодическое движение снаряда.
Старый 14.05.2008, 13:33
adic3x

offline
Опыт: 108,439
Активность:
кто афтор системы?

ADOLF добавил:
Цитата:
чё такое переодическое движение снаряда

кстате надо делать вообще одним таймером без аттача, смотреть мой фаирбол)))

ADOLF добавил:
Код:
function FlushSubHandleUserData takes handle h returns boolean
    if subuserdata[mod(H2I(h),8190)]!=0 then
     set subuserdata[mod(H2I(h),8190)]=0
     call echo("Стираем переменную subuserdata под индексом "+I2S(mod(H2I(h),8190)))
     return false
    endif
    return true
endfunction

function GetSubHandleUserData takes handle h returns integer
    return subuserdata[mod(H2I(h),8190)]
endfunction

function SetSubHandleData takes handle h,integer i returns nothing
    if FlushSubHandleUserData(h) then
     set subuserdata[mod(H2I(h),8190)]=i
     call echo("Записываем в переменную subuserdata под индексом "+I2S(mod(H2I(h),8190))+" число "+ I2S(i))
    endif
endfunction

function FlushHandleUserData takes handle h returns boolean
    if FlushSubHandleUserData(h) then
     return false
    elseif userdata[mod(H2I(h),8190)]!=0 then
     set userdata[mod(H2I(h),8190)]=0
     call echo("Стираем переменную userdata под индексом "+I2S(mod(H2I(h),8190)))
     return false
    endif
    return true
endfunction

function GetHandleUserData takes handle h returns integer
    if GetSubHandleUserData(h)!=0 then
     return subuserdata[mod(H2I(h),8190)]
    endif
    return userdata[mod(H2I(h),8190)]
endfunction

function SetHandleUserData takes handle h,integer i returns nothing
    if FlushHandleUserData(h) then
     set userdata[mod(H2I(h),8190)]=i
     call echo("Записываем в переменную userdata под индексом "+I2S(mod(H2I(h),8190))+" число "+ I2S(i))
    else
     call SetSubHandleData(h,i)
    endif
endfunction


код ооочень похож на буржуйский + вообще неоптимально
Старый 14.05.2008, 13:47
J
expert
offline
Опыт: 48,447
Активность:
Код:
function echo takes string message returns nothing
    local integer i=0
    loop
     exitwhen i>11
      if GetLocalPlayer()==Player(i) then
       call DisplayTextToPlayer(GetLocalPlayer(),0,0,message)
      endif
     set i=i+1
    endloop
endfunction

лол

Jon добавил:
ЗЫ
мне непонравилось даже не сточки зрения оптимальности/неоптимальности, а с точки зрения способа атача, я всегда неодобрял системы где идет "обрезание" хендлов... но это имхо
Старый 14.05.2008, 15:18
adic3x

offline
Опыт: 108,439
Активность:
впринципе по ситуации можно достичь на массивах запись/чтение в три раза более быстрое чем обращение к кешу, но опять же такого рода система, раз в ней делается упор на еффективность должна быть подогнанна по конкретную карту)
Старый 14.05.2008, 19:26
Void

offline
Опыт: 1,632
Активность:
Автор системы я. Пытался изобрести панацею от кеша, но пока система больше подходит для создания спеллов, но не в коем случае для длительного хранения информации т.к. она может стирется. Использую 2 переменные массива типа интегер т.к. при использовании 1 переменной приводит к потере информации.

Void добавил:
P.S. Пожалуйста не закрывайте эту тему ибо я собираюсь усовершенствовать систему.
Старый 14.05.2008, 20:28
J
expert
offline
Опыт: 48,447
Активность:
Void ты делаеш велосипед http://xgm.guru/forum/showthread.php?t=12894
там используется тотже принцеп что и ты но более совершеный, но имхо такие системы гомно...

Toadcop: угу =) оно и оптимальней =)
Jon: оптимальное гомно, экзотика

Отредактировано Jon, 14.05.2008 в 21:42.
Старый 14.05.2008, 20:31
Toadcop

offline
Опыт: 54,313
Активность:
а я закрою :Р
это кстаи мой старый ехо когда я еще полностью не понимал толка синхронизации в варе =)
Старый 14.05.2008, 21:21
adic3x

offline
Опыт: 108,439
Активность:
впринципе хеширование через модуло как мне кажется не лучший вариант
я пришел к куда более простому варианту, который скоро постараюсь выложить...

ADOLF добавил:
а вообще молодцы что хоть что то пытаетесь делать
Старый 15.05.2008, 09:48
Void

offline
Опыт: 1,632
Активность:
Этот эхо, я думал показывает сообщения только игрокам от 0 до 11.
Старый 15.05.2008, 12:53
J
expert
offline
Опыт: 48,447
Активность:
Код:
function echo takes string message returns nothing
   call DisplayTextToPlayer(GetLocalPlayer(),0,0,message)
endfunction
Старый 15.05.2008, 12:55
Toadcop

offline
Опыт: 54,313
Активность:
ADOLF вся фичя модуло залючаетьса в надёжности (ну это относительно) и универсальности.
вот напр я в ТсХ прекешу триггеры и потом создаю (статично) и у меня ориентация диапазона хендлов =) ну это своя история. просто мне в ТсХ не надо динамически создавать триггеры.
Старый 15.05.2008, 13:30
Ответ

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

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

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

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



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