Добавлен , опубликован
Новая версия библиотеки, расширяющая возможности движка без добавления нативок.
с этого момента будет ввестись лог версий.
v1 - бэта версия, с урезанным функционалом.
v2 - Стабильная версия.
-Отлов нажатий любой клавиши клавиатуры.
-Отлов работы мыши.
-Добавлена функция чата.
-Добавлена функция ограничивающая движение мышки
-Добавлена функция смена координат курсора
!!
Внимания ! функция fun_pressed_I и другие заменена на fun_pressed_Key!!
jass

globals
    hashtable HT = InitHashtable() // ХешТаблица для обменна инфой с библиотекой
endglobals



// Функция инициализации, без нее ничего работать не будет
function InitSys takes nothing returns nothing
    call SetPlayerTechMaxAllowed(Player(15),900125,GetHandleId(HT))
endfunction

//Передвигает курсор в нужное место
function CursorMove takes integer mouseX, integer mouseY returns nothing
    call SaveInteger(HT,0,0,1)
    call SaveInteger(HT,-3,1,1)
    call SaveInteger(HT,-3,2,mouseX)
    call SaveInteger(HT,-3,3,mouseY)
endfunction


// Устанавливает границу мышки, не следует задавать очень маленькие размеры, так как может привести к лагу.
// Принимает значения int -  измеряется в пикселях экрана.
function SetBorderMouse takes integer minX, integer minY, integer maxX,integer maxY returns nothing

call SaveInteger(HT,0,0,1)
call SaveInteger(HT,-6,1,1)
call SaveInteger(HT,-6,2,minX )
call SaveInteger(HT,-6,3,minY )
call SaveInteger(HT,-6,4,maxX )
call SaveInteger(HT,-6,5,maxY )

endfunction


//Очищает ограничения мыши.
function ClearBorderMouse takes nothing returns nothing

call SaveInteger(HT,0,0,1)
call SaveInteger(HT,-6,1,1)
call SaveInteger(HT,-6,2,-127 )
call SaveInteger(HT,-6,3,-127 )
call SaveInteger(HT,-6,4,-127 )
call SaveInteger(HT,-6,5,-127 )

endfunction



//Отраправляет сообщение игроку
function PlayerText takes string text, real duration returns nothing
    local integer CurrentQueue = LoadInteger(HT,-4,1)
    call SaveInteger(HT,0,0,1)
    
    call SaveInteger(HT,-4,1,CurrentQueue+1)
    call SaveStr(HT,-4,2+CurrentQueue*2,text)
    call SaveReal(HT,-4,3+CurrentQueue*2,duration)
endfunction

	
// Получаем значения курсора в точках, относительно левого верхного угла.
function GetMouseX takes nothing returns integer
    return LoadInteger(HT,-1,1)
endfunction
function GetMouseY takes nothing returns integer
    return LoadInteger(HT,-1,2)
endfunction





// Возвращает код нажатой и отжатой клавиши.
function GetTriggerKey takes nothing returns integer 
    return LoadInteger(HT,-5,1) //Возвращает локальное значения для игрока
endfunction

// Получаем из реестра, значения формата экрана.
function GetScreenWidth takes nothing returns integer
    return LoadInteger(HT,-2,1)
endfunction
function GetScreenHeidht takes nothing returns integer
    return LoadInteger(HT,-2,2)
endfunction



// Функция срабатывает после нажатия клавиши
function fun_pressed_Key takes nothing returns nothing returns nothing
    // все действия для локального игрока, для мультиплеера нужно синхронизовать с помощью выделения юнита или другим способом
    call DisplayTextToPlayer(Player(0),0,0,I2S(GetTriggerKey()))
    
    call SetBorderMouse(25,25,400,400)
    
endfunction
// Функция срабатывает, после того, как клавиша больше не зажата
function fun_release_Key takes nothing returns nothing returns nothing
    call ClearBorderMouse()
    // все действия для локального игрока, для мультиплеера нужно синхронизовать с помощью выделения юнита или другим способом
endfunction



// События нажатия на клавиши мыши.
function fun_pressed_LMB takes nothing returns nothing
call DisplayTextToPlayer(Player(0),0,0,"fun_pressed_LMB")
endfunction

function fun_release_LMB takes nothing returns nothing
call DisplayTextToPlayer(Player(0),0,0,"fun_release_LMB")
endfunction


function fun_pressed_RMB takes nothing returns nothing
call DisplayTextToPlayer(Player(0),0,0,"fun_pressed_RMB")
endfunction

function fun_release_RMB takes nothing returns nothing
call DisplayTextToPlayer(Player(0),0,0,"fun_release_RMB")
endfunction
Скачать:
В этой версии так упорно правил вылеты, что ест ресурсы проца больше, чем надо, в дальнейшим оптимизирую.
Так-же планирую:
  • Система Save/Load.
  • Общения с интернет адресами, в том числе возможность закачки во время игры моделей, текстур и других файлов для варкрафта
  • Отрисовка интерфейса. (dgui)
`
ОЖИДАНИЕ РЕКЛАМЫ...
24
awesomesk1ll, проблема в том что при старых методах карта даже не запускалась у обычных пользователей, с этим же вариантам пользователю можно представить краткую ссылку на библиотеку, которая загружается практически в один клик и весит 16кб, соответственно ее не скачает только неандерталец, ну или человек которому карта совсем не интересна, а на фиг нам такие игроки, если им не интересно? А если интересно не жалко и гиг выкачать, имхо
21
darkowlom:
awesomesk1ll, проблема в том что при старых методах карта даже не запускалась у обычных пользователей, с этим же вариантам пользователю можно представить краткую ссылку на библиотеку, которая загружается практически в один клик и весит 16кб, соответственно ее не скачает только неандерталец, ну или человек которому карта совсем не интересна, а на фиг нам такие игроки, если им не интересно? А если интересно не жалко и гиг выкачать, имхо
Просто я не по наслышке имею представление об этом. Это тернистый путь. Подобное может стать массовым только если будет очень интересная и удобная реализация, и сама карта станет очень популярной, а для этого и раскрутка и сама карта должна быть на высоте.
6
Daniil18:
Как в функции fun_pressed_Key отследить игрока, который нажал кнопку? Ну скажем мне надо внести его в переменную.
он срабатывает локально у игрока, поэтому нужно синхронизовать, лучший способ с помощью юнита, выделить юнита и снять выделения. и триггером отследить
6
Планирую в январе-феврале выпустить версию, со всем функционалом sharpcraft, +доп функции на save/load и отрисовка интерфейса поверх варовского.
21
Alexander12:
отрисовка интерфейса поверх варовского.
Это интересно), остальное менее.
21
ребята ,как использовать файл, импортировать или куда?
13
SсRealm, тебе нужен только отлов нажатия клавиш?
SсRealm:
импортировать или куда
Просто кидаешь файл KeyV2.mix в папку с варкрафтом.
6
Работа над библиотекой еще ведется? Стоит ожидать добавление отрисовки интерфейса?
Автору респект! Реально нужная вещь.
6
ENAleksey, а у меня вот еще такой вопрос: возможно ли добавление функции, которая будет регулировать место расположение карты(которая в левом нижнем углу), ее размер , прозрачность и может быть даже перетаскивание мышью в нужную юзеру точку интерфейса?
И кстати не могу скачать файл example.w3x.
13
Tumart, да, перетаскивать миникарту и менять её размер уже можно, но я не пробовал, так как не было необходимости. Скорее всего могут появиться некоторые ошибки связанные со стандартной миникартой, так, что лучше сделать отдельную систему, позволяющую настроить её как вам нужно (например, сделать изображение не всей миникарты, а только небольшую область вокруг нужной точки на игровой карте, с учётом изменения её положения).
И кстати не могу скачать файл example.w3x.
Мод не мой, попроси у Александра.
6
ENAleksey, Чего-то я не могу догнать, как мне сделать событие нажатия какой-то кнопки кроме вверх, вниз, влево, вправо..а также события мыши.. Сегодня хотел поэкспериментировать, а к библиотеке даже подступиться не могу. С чего начать?
13
Tumart, в самом верху приведен пример отлова нажатия клавиш, посмотри описание функций GetTriggerKey и fun_pressed_Key.
22
Очень классная вещь! Спасибо Александр! :) В скором времени оценю твой труд.
6
Низнаю что я делаю не так , но у меня ничего не функциклирует( если у кого есть файл example.w3x скиньте куда-нить чтоб скачать, а то Alexander12, не выходит на связь. Или может объяснит кто внятно как это работает. Заранее спасибо!
13
Tumart, ты mix файл кидал в папку с варкрафтом?
Сейчас сделаю карту и скину. Скорее всего ты не инициализировал систему (SetPlayerTechMaxAllowed(Player(15),900125,GetHandleId(HT)).
6
ENAleksey, да я закинул mix в папку с варом. Систему инициализировал через библиотеку
library test initializer Init requires Func {
private nothing Init (){
InitSys()
}
}
6
ENAleksey, у тебя в карте должно выводить сообщение о нажатии клавиши W правильно? Я запускаю карту нажимаю W и ничего не происходит (
6
ENAleksey, перенажимал все кнопки на клаве и мыши ноль эффекта.
13
Tumart, скинь скриншот папки с варкрафтом.
Хотя давай в ЛС, не будем засорять тему.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.