Новая версия библиотеки, расширяющая возможности движка без добавления нативок.
с этого момента будет ввестись лог версий.
v1 - бэта версия, с урезанным функционалом.
v2 - Стабильная версия.
-Отлов нажатий любой клавиши клавиатуры.
-Отлов работы мыши.
-Добавлена функция чата.
-Добавлена функция ограничивающая движение мышки
-Добавлена функция смена координат курсора
-Отлов нажатий любой клавиши клавиатуры.
-Отлов работы мыши.
-Добавлена функция чата.
-Добавлена функция ограничивающая движение мышки
-Добавлена функция смена координат курсора
!!
Внимания ! функция fun_pressed_I и другие заменена на fun_pressed_Key!!
Внимания ! функция 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)
Ред. Alexander12
ENAleksey, текст.
Кстати, координаты GetMouseX() и GetMouseY() немного неудобны, ибо не совпадают с координатами карты. Начало координат там всегда в левом верхнем углу экрана. Пока не знаю, как их преобразовывать так, чтобы они были именно координатами того, куда ткнули. Я еще не тестировал, будут ли координаты меняться в зависимости от дальности камеры, но подозреваю, что да.
Ред. Alexander12
Новая версия готова ! жду когда опубликуют.
Опубликовали
Alexander12:
Скачал просто mix файл и вставил код из темы. Работает, как часы. Ни багов, ни вылетов)
А, не( В кампании по-прежнему вылетает.
тот код для превращения пиксельных координат в дробные относительно центра экрана
С кампанией пока думаю. Если отдельная карта работает без сбоев, то стоит её засунуть в только что созданную кампанию и пересохранить карту, как все - черный экран. Забавно, что если карту, которую всунул в кампанию, не пересохранять, то карта работает как надо. Заметил, что карта перестает запускаться, когда добавляешь инициализацию хеш-таблицы.
а с помощью выделения юнитов убираем десинхроны
это библиотека
"function fun_pressed_Key takes nothing returns nothing returns nothing"
"function fun_release_Key takes nothing returns nothing returns nothing"
Хотя функционал с помощью подобных вещей довольно велик.
Например