Добавлен , опубликован
Новая версия библиотеки, расширяющая возможности движка без добавления нативок.
с этого момента будет ввестись лог версий.
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)
`
ОЖИДАНИЕ РЕКЛАМЫ...
13
Круто, даже с выключенным интерфейсом работает!
Если это не самописная dll'ка, то тогда как это реализовано?

Всё-таки это работа с юнитами, но как оно работает с отключенным интерфейсом?
Или в оригинале горячие клавиши так тоже работают?

Завтра, может быть, переделаю и выложу first/third person камеру из примера SharpCraft.
21
Эта штука умеет ловить нажатие/удержание/разжатие клавиш? Или я не так понял?
13
Классно, воистину. Подобное делали без миксов, но реализовано было очень не очень. Вот только жаль, что практически в 2016 году.
6
ENAleksey, я вызывал executefunc. Здесь все функции jass на с++.
Загруженные файлы
23
Вот это рили круто, столько открывается новых возможностей. НО как человеку, абсолютно не знающему джас, вынести из этого пользу? Ради интереса решил сменить клавишу, но она не фурычила почему то. Можешь пояснить для нубов как с этим работать?
13
У меня получилось поменять: уже пять основных клавиш для управления камерой настроил.
6
Obelick, как ты сменил ? достаточно создать новую функцию: fun_pressed_<Имя клавиши> и в теле поставить наше событие
ENAleksey, надеюсь ты не синхронизируешь юнитами камеру?) которую и не надо)
13
Alexander12, конечно, нет ;) А переделать ту fps камеру, которая у меня есть вообще не составит особого труда.
6
ENAleksey, я пока думаю, как из варика вызвать функции микса) предложение есть?)
13
вызываем из вне существующие функции карты
Карты или варкрафта? Просто я ещё не смотрел те исходники, что ты скинул (просто сейчас с телефона сижу), если это исходники.

Alexander12, если это дллка, то можно, если действовать по принципу sharpcraft'а.
А лучше посмотри исходники китайского YDWE.
6
ENAleksey, это библиотека) я имитировал в миксе вызов варовской функции ExecuteFunc, тем самым могу вызывать функции карты)
24
Карту загрузит и запустит и тот игрок, у которого нет данного микса.
Что самое замечательное, игрокам без микса можно представить краткую ссылку на архив
Возник вопрос, реально ли сюда привинтить вращение камеры мышкой, сохранив запуск у неимущего пользователя?
P.S Можешь куда-то сюда привинтить исходник?
6
darkowlom, реально, это будет позже
Так, что будет ? общение между миксом и игрой посредством HT таблицы (место скана памяти решил задействовать хештаблицу)
-отлов координат и кнопок мыши
-возможность задать координаты мыши
-save/load система
-отрисовка текста
в будущем планирую
-кастомный интерфейс
-общение с web ресурсами
Обновил, добавлена возможность отлова координат и нажатий клавиш мыши.
13
Очень круто, но с этим mix'ом игра и редактор начали иногда вылетать с ошибкой. А после последнего обновления - ещё чаще.
6
ENAleksey:
Очень круто, но с этим mix'ом игра и редактор начали иногда вылетать с ошибкой. А после последнего обновления - ещё чаще.
это подавлю, были запущены ещё какие-то проги?
13
начали иногда вылетать с ошибкой
А если точнее: игра и редактор иногда запускаются.
6
А если делать в одиночной кампании и потом передать кампанию тестеру, то файл mix ему надо в папку с вариком скидывать?
6
А если точнее: игра и редактор иногда запускаются.
может быть.. когда редактор запущен, так-как он и атачится и редактору, ну все это лечится.
А если делать в одиночной кампании и потом передать кампанию тестеру, то файл mix ему надо в папку с вариком скидывать?
Да. рекомендовал бы скачивать новый отсюда, так-как постоянно обновляется.
6
Объясните, зачем нужны триггеры Unit и UnitEnum? Я их удалил... И ничего не изменилось. Отлов клавиши "I" как был, так и остался.
6
Sumert:
Объясните, зачем нужны триггеры Unit и UnitEnum? Я их удалил... И ничего не изменилось. Отлов клавиши "I" как был, так и остался.
для синхронизации с другими игроками
6
для синхронизации с другими игроками
То есть для кампании они не нужны.
Шикарную работу вы проделали.
Сейчас попробовал в кампании... Не работает что-то. Создал кампанию, вставил туда карту, которую скачал отсюда. Ничего не менял. Сохранил - и все. Если пробовать проверкой, просто выкидывает в главное меню. Если через кампанию, то черный экран. С чем это может быть связано?
Загруженные файлы
6
выкидывает
видимо из за редактора, пользуешься стандартным WE ?
Такс... скоро обнова.
6
Alexander12:
выкидывает
видимо из за редактора, пользуешься стандартным WE ?
Такс... скоро обнова.
нет, jpng.
Версия: 5d
Сборка: Exp2
попробовал стандартным редактором, пришлось слегка код поменять. Отлов клавиш работает (добавил отлов других клавиш для теста - все пашет, как надо), а вот почему-то отлов мыши перестал. Не реагируют функции, хоть ты тресни. При чем перестал даже в обычной карте.
Заметил баг: если в процессе игры возникает диалоговое окно, то выйдя из него, отлов не работает.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.