Версия v1.0.5a
Дополнительные функции для редактирования стандартного интерфейса Варкрафта
212 47K
13
ввести заморозку курсора в мемхак
Добавлю функцию SetMousePos(x, y).
ledoed:
в мультиплеере работает не на всех компах, а точнее они вылетают
Можешь попробовать полностью удалить функции RenderEdge из карты и ещё раз протестировать в мультиплеере? Если не поможет, то можно попробовать удалить из карты RenderEdge_mini.dll.
Скорее всего это из-за того, как я отлавливаю экземпляр окна в RenderEdge_mini.dll. С эти также связаны проблемы, при которых функции из .dll возвращают 0, если во время загрузки карты свернуть игру или переключиться на другое окно. Уже исправил, в следующей версии подобных проблем не будет.
JaBeN_Симфер:
Было бы полезно отображать аттачи на портрете.
Это вряд ли это можно реализовать с помощью мемхака.
FrigatPlay:
Описание кнопок никак нельзя вернуть?
И я так понял что после установки библиотеки уже пользоватся GUI невозможно.
Я пока не нашёл адрес фрейма, отвечающего за всплывающие подсказки. В каком смысле невозможно пользоваться GUI, что вы имеете ввиду под этой аббревиатурой? Графические триггеры? Если да, то можно.
mishanka122:
чет на новой версии выскакивает такое
На предыдущей ошибки не было? Это ошибка компилятора PJass, вы точно скачали экспериментальную версию из поста? Выключен ли cJass?
Owain:
Версии новее 1.26а поддерживаются?
Только 1.26a.
Owain:
А расположение текста и портрета в cinematic mode возможно изменить?
Портрет изменяется той же функцией, что и в игровом режиме. А вот фрейм текста нужно сначала найти.
18
А расположение текста и портрета в cinematic mode возможно изменить?
32
Owain, 1.26 и 1.27а, далее поддержки нет и скорее всего не будет...
32
ADOLF, а рили будет апдейт cjass? То он много с чем не дружит, так же приходится спасать от его автоудаления ненужного кода глобалки и функции мемхака, которые нужны чтобы обойти защиту от возвращения не того типа...
18
чет на новой версии выскакивает такое
Загруженные файлы
23
Описание кнопок никак нельзя вернуть?
И я так понял что после установки библиотеки уже пользоватся GUI невозможно.
7
ADOLF, работает! я сам его использую)
Typecast
native MergeUnits	takes integer qty, integer a, integer b, integer make returns boolean
native ConvertUnits takes integer qty, integer id returns boolean
native IgnoredUnits takes integer unitid returns integer

library Typecast
//! nocjass
    globals
        code Code //This is not used, it's here just to fool Jasshelper
        code l__Code
        integer Int //This is not used, it's here just to fool Jasshelper
        integer l__Int
        string Str //This is not used, it's here just to fool Jasshelper
        string l__Str
        boolean Bool //This is not used, it's here just to fool Jasshelper
        boolean l__Bool
        
        integer Array
        integer array l__Array
        integer bytecode
        integer array l__bytecode
        integer array Memory
        integer bytecodedata //used to pass data between regular code and bytecode
    endglobals

    function InitArray takes integer vtable returns nothing
        set l__Array[4] = 0
        set l__Array[1] = vtable
        set l__Array[2] = -1
        set l__Array[3] = -1
    endfunction

    function TypecastArray takes nothing returns nothing
        local integer Array //typecast Array to integer
    endfunction

    //# +nosemanticerror
    function GetArrayAddress takes nothing returns integer //not really needed
        return l__Array
        return 0
    endfunction


    function setCode takes code c returns nothing
        set l__Code = c
        return //Prevents Jasshelper from inlining this function
    endfunction

    function setInt takes integer i returns nothing
        set l__Int = i
        return //Prevents JassHelper from inlining this function
    endfunction

    function setStr takes string s returns nothing
        set l__Str = s
        return //Prevents JassHelper from inlining this function
    endfunction

    function setBool takes boolean b returns nothing
        set l__Bool = b
        return //Prevents Jasshelper from inlining this function
    endfunction

    private function Typecast1 takes nothing returns nothing
        local integer Code //Jasshelper will implicitly rename this to l__Code
        local code Int     //Jasshelper will implicitly rename this to l__Int
    endfunction

    //# +nosemanticerror
    function C2I takes code c returns integer
        call setCode(c)
        return l__Code
    endfunction

    //# +nosemanticerror
    function I2C takes integer i returns code
        call setInt(i)
        return l__Int
    endfunction

    private function Typecast2 takes nothing returns nothing
        local integer Str //Jasshelper will implicitly rename this to l__Str
        local string Int   //Jasshelper will implicitly rename this to l__Int
    endfunction

    //# +nosemanticerror
    function SH2I takes string s returns integer
        call setStr(s)
        return l__Str
    endfunction

    //# +nosemanticerror
    function I2SH takes integer i returns string
        call setInt(i)
        return l__Int
    endfunction

    private function Typecast3 takes nothing returns nothing
        local integer Bool //Jasshelper will implicitly rename this to l__Bool
        local boolean Int  //Jasshelper will implicitly rename this to l__Int
    endfunction

    //# +nosemanticerror
    function B2I takes boolean b returns integer
        call setBool(b)
        return l__Bool
    endfunction

    //# +nosemanticerror
    function I2B takes integer i returns boolean
        call setInt(i)
        return l__Int
    endfunction

    //# +nosemanticerror
    function realToIndex takes real r returns integer
        return r
    endfunction

    function cleanInt takes integer i returns integer
        return i
    endfunction

    //# +nosemanticerror
    function indexToReal takes integer i returns real
        return i
    endfunction

    function cleanReal takes real r returns real
        return r
    endfunction
    
    function GetRealFromMemory takes integer i returns real
        return cleanReal(indexToReal(i))
    endfunction
    
    function SetRealIntoMemory takes real r returns integer
        return cleanInt(realToIndex(r))
    endfunction

    function ReadMemory takes integer address returns integer
        return Memory[address/4] //Inline-friendly
    endfunction

    function WriteMemory takes integer address, integer value returns nothing
        set Memory[address/4] = value //Inline-friendly
    endfunction

    function InitBytecode takes integer id, integer k returns nothing
        set l__bytecode[0] = 0x0C010900 	//op: 0C(LITERAL), type: 09(integer array), reg: 01,
        set l__bytecode[1] = k 			    //value: 0x2114D008
        set l__bytecode[2] = 0x11010000 	//op: 11(SETVAR), reg: 01
        set l__bytecode[3] = id		 	    //id of variable udg_Memory
        set l__bytecode[4] = 0x0C010400 	//op: 0C(LITERAL), type: 04(integer), reg: 01, value: 0
        set l__bytecode[6] = 0x27000000 	//op: 27(RETURN)

        set l__bytecode[8] = 0x07090000 	//op: 07(GLOBAL), type: 09 (integer array) //Create new array
        set l__bytecode[9] = 0x0C5F 		//name: C5F(?stand?)
        set l__bytecode[10] = 0x0E010400 	//op: 0E(GETVAR), type: 04(integer), reg: 01 //Obtain the desired amount of bytes
        set l__bytecode[11] = id+1		 	//id of variable bytecodedata (variable ids are sequential)
        set l__bytecode[12] = 0x12010100 	//op: 12(SETARRAY), index=reg01, value=reg01 //Set index of the array, forcing allocation of udg_Memory
        set l__bytecode[13] = 0x0C5F 		//name: C5F(?stand?)
        set l__bytecode[14] = 0x0E010400 	//op: 0E(GETVAR), type: 04(integer), reg: 01 //Read array variable as an integer
        set l__bytecode[15] = 0x0C5F 		//name: C5F(?stand?)
        set l__bytecode[16] = 0x11010000 	//op: 11(SETVAR), reg: 01 //pass the value to the jass world
        set l__bytecode[17] = id+1		 	//id of variable bytecodedata
        set l__bytecode[18] = 0x27000000 	//op: 27(RETURN)
    endfunction
                    
    function Typecast takes nothing returns nothing
        local integer bytecode
    endfunction

    //# +nosemanticerror
    function GetBytecodeAddress takes nothing returns integer
        return l__bytecode
        return 0
    endfunction

    function NewGlobal takes nothing returns integer
        return -0x0C5F0704 //op: 07(GLOBAL), type: 04(integer), name: 0x0C5F("stand")
        return 0x2700 //op: 27(RETURN)
    endfunction

    function SetGlobal takes nothing returns nothing
        //This will actually set the value of the global variable, not the local
        local integer stand = 0x2114D008
    endfunction

    //# +nosemanticerror
    function UnlockMemory takes nothing returns nothing
        local integer array stand //The execution of this line is skipped
        call ForForce(bj_FORCE_PLAYER[0], I2C(2+C2I(function NewGlobal)))
        call ForForce(bj_FORCE_PLAYER[0], I2C(8+C2I(function SetGlobal)))
        call InitArray( 0 )
        call InitArray(stand[GetArrayAddress()/4])
        call InitBytecode(stand[C2I(function ReadMemory)/4 + 13], stand[GetArrayAddress()/4+3]+4) //obtain the id of variable "Memory"
        call ForForce(bj_FORCE_PLAYER[0], I2C(stand[GetBytecodeAddress()/4+3])) //run bytecode from the array
    endfunction

    function ReadRealMemory takes integer addr returns integer
        if (addr/4*4 != addr) then
            call BJDebugMsg("ReadMemory WARNING!")
            //return ReadRealMemory_FIX(addr)
        endif
        return Memory[addr/4]
    endfunction

    function WriteRealMemory takes integer addr, integer val returns nothing
        if (addr/4*4 != addr) then
            call BJDebugMsg("WriteMemory WARNING!")
            //call WriteRealMemory_FIX(addr,val)
        else
            set Memory[addr/4] = val
        endif
    endfunction
//! endnocjass
endlibrary
32
то отключи cJass -> AdicParser и cJass -> AdicOptimizer
А вот сейчас обидно было. А что, ! nocjass не спасает? Если что, я могу попробовать проанализировать, что там именно ломается, если вы дадите мне материалы. Хотя кто-то писал, что после ! nocjass должно быть хотя бы два переноса строки...
4
function TriggerRegisterKeyEvent takes trigger trig, integer iKey, integer state returns nothing
это событие типа стандартного "нажата клавиша вниз и тд", только на любую кнопку?
но синхронизацию там все равно надо будет самому допиливать?