Ige #1 - 5 месяцев назад (отредактировано ) 0

» WarCraft 3 / Откуда они берутся эти утечки...

а разве группу не нужно очищать перед удалением?
call GroupClear(udg_nospawn)
call GroupClear(udg_limit)
Ige #2 - 6 месяцев назад 1

» Edemium / Скачать Edemium

Plague Doctor, версия варика какая? в карте используются фишки мемхака => версия не должна быть новее 1.27, хотя скорее всего карта поддерживает только 1.26

в карте русская озвучка?*_*

на втором скриншоте указано, что необходимо 21 стойкость, хотя я прошел проверку при хар-ках 16 стойкости / 23 ловкости / 14 мудрости
прикреплены файлы
Ige #3 - 7 месяцев назад 0

» WarCraft 3 / Быстрый импорт

в jngp есть довольно удобная штука
//! external FileImporter
правда ее нужно настроить. Поищи в файлах jngp инструкцию (то ли GrimexManual, то ли jasshelpermanual)
Ige #4 - 7 месяцев назад 0

» WarCraft 3 / Версии war3 и нововведения

в папке, куда установлен варик, есть файл patch.txt, где записана история обновлений
прикреплены файлы
Ige #5 - 8 месяцев назад 2

» WarCraft 3 / Поиск элемента БД

avuremybe, в смысле "то же самое"?
У тебя в примере в таблицу сохраняется только код предмета
	call SaveInteger(udg_ht, GetUnitUserData(u), StringHash("I"+I2S(1)), 'U000')
    call SaveInteger(udg_ht, GetUnitUserData(u), StringHash("I"+I2S(2)), 'U001')
    call SaveInteger(udg_ht, GetUnitUserData(u), StringHash("I"+I2S(3)), 'U002')
я же (да и не только я) предлагаю тебе дополнительно сохранить пометку, что данный предмет добавлен в магазин
	call SaveInteger(ht, GetUnitUserData(shop), lastItem, itemid) 	// сохраняем код предмета
	call SaveBoolean(ht, GetUnitUserData(shop), itemid, true)		// пометка, что предмет добавлен в этот магазин
а затем с помощью всего 1 функции проверять, есть ли такой-то предмет в таком-то магазине
	function HaveItem takes unit shop, integer itemid returns boolean
		return LoadBoolean(ht, GetUnitUserData(shop), itemid)
	endfunction
Ige #6 - 8 месяцев назад (отредактировано ) 2

» WarCraft 3 / Поиск элемента БД

avuremybe, как тебе такой вариант?
	function HaveItem takes unit shop, integer itemid returns boolean
		return LoadBoolean(ht, GetUnitUserData(shop), itemid)
	endfunction

	function ShopAddItem takes unit shop, integer itemid returns nothing
		if not HaveItem(shop, itemid) then
			//...
			set lastItem = lastItem + 1
			call SaveInteger(ht, GetUnitUserData(shop), lastItem, itemid)
			call SaveBoolean(ht, GetUnitUserData(shop), itemid, true)
			//...
		endif
	endfunction
Ige #7 - 8 месяцев назад 3

» WarCraft 3 / common.ai

ScopteRectuS, скрипты для ии нужно импортировать в карту с расширением .ai. Часть функций из common.ai можно использовать в war3map.j
native UnitAlive takes unit id returns boolean
native GetUnitGoldCost takes integer unitid returns integer
native GetUnitWoodCost takes integer unitid returns integer
native GetUpgradeGoldCost takes integer id returns integer
native GetUpgradeWoodCost takes integer id returns integer
мб что-то еще, но уже не вспомню
кст, на сайте есть статья
Ige #8 - 8 месяцев назад 1
Ige #9 - 8 месяцев назад (отредактировано ) 0

» WarCraft 3 / Иногда хеш таблица запаздывает???

nvc123, инфа в мануале не соответствует действительности

pro100master, скачал твою карту, вроде бы все работает о_О
Ige #10 - 8 месяцев назад 0

» Edemium / Главная страница

Arctide, ради такого интерфейса можно и не сохраняться :D
Ige #11 - 8 месяцев назад 0

» Edemium / Главная страница

Arctide, крутяк)
Arctide:
Правда, к сожалению, при использовании Memory Hack-а невозможно сохраняться в игре - вылетает фатал. Надеюсь проблемку исправят.
как вариант сделать свою систему сохранений с помощью кэша или прелоада
Ige #12 - 8 месяцев назад 1
Ige #13 - 8 месяцев назад 0

» WarCraft 3 / Ограничение для героев

Name Legion, игрок вводит -Arch, триггер проверяет, какой сейчас у игрока герой "тип боевой единицы Heroes[номер игрока] не равно Архимонд", если не Архимонд, то запускаются последующие действия
Ige #14 - 8 месяцев назад 0

» WarCraft 3 / Ограничение для героев

Name Legion, сделай условие "тип боевой единицы Heroes[номер игрока] не равно Архимонд"
Ige #15 - 8 месяцев назад 0

» WarCraft 3 / не отображается иконка добавленной триггерно способности

avuremybe, как и сказал nvc123, у канал по умолчанию нет иконки "Данные - параметры -> Изображение"
avuremybe, лучше сразу предоставлять скрины
Ige #16 - 8 месяцев назад (отредактировано ) 0

» Edemium / Главная страница

Arctide, выглядит прикольно, хотя и непривычно)
мб стоит заменить надписи "Атака" и пр. на иконки?
не поделишься адресом значений хп/мп?(их вроде бы нет в примере render edge)
Ige #17 - 8 месяцев назад 0

» RenderEdge / [RenderEdge] Memory Hack

ENAleksey, а кд и автокаст можно как-то исправить?
прикреплены файлы
Ige #18 - 8 месяцев назад 0

» WarCraft 3 / Освобождение хендла

ScopteRectuS, как делаю я
Когда креплю данные к юниту через хт, добавляю его в группу. По группе периодически пробегаюсь, ищу несуществующих юнитов (GetUnitTypeId() вернет 0, если юнита больше нет на карте) и если нахожу, то очищаю данные в хт.
Ige #19 - 8 месяцев назад 0

» WarCraft 3 / Освобождение хендла

GetUnitTypeId() вернет рав-код юнита, даже если он разлагается, что может помочь в поиске мусора
Ige #20 - 8 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

call WMem(offset+0x10,mR2I(bj_meleeNearestMineDist))
А вот это неожиданно!)
// либо так
WMem(offset+0x10, mI2R(newValue))
DracoL1ch:
просто вспомни, что там степени двойки должны быть, в типе атаки/урона, а не голые числа. ну а про отрицательные значения хз
Тип атаки,вроде бы имеет значения 0..6, т.е. без степени 2
	attackType[0] = "Заклинание"
	attackType[1] = "Обычная"
	attackType[2] = "Дальний бой"
	attackType[3] = "Артиллерия"
	attackType[4] = "Магическая"
	attackType[5] = "Сила Тьмы"
	attackType[6] = "Герой"

а еще стоит заметить, что источник урона это:
set tt_unit1=I2Unit(RMem(offset))//tt_unit1 == source
о чем я писал ранее
Я не сразу понял, что offset == источник урона (DamageSource)
Ige #21 - 9 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

quq_CCCP, пока нет какого-либо руководства, приходится все проверять эмпирическим методом.
Фигня или не фигня (хотя я склоняюсь как раз к первому варианту), только она пока что работает и без сбоев
прикреплены файлы
Ige #22 - 9 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

Ige:
quq_CCCP, суть было в том, что бы отловить урон ДО расчета брони
Сам сморозил глупость и сам повелся на нее -_- Хотел сказать не "отловить" урон, а "изменить" его.
Чем чреват подобный финт:
// чтение
DamageValues[DamageIncrementer]=mI2R(Memory[offset/4+0x10/4])
// запись (обратный процесс)
Memory[offset/4+0x10/4] = mI2R(newValue)
// либо так
WMem(offset+0x10, mI2R(newValue))
Ige #23 - 9 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

quq_CCCP, на скрине показан урон до расчета брони и после
50 -> 40
100 -> 35
51->41
Ige #24 - 9 месяцев назад (отредактировано ) 0

» WarCraft 3 / Ловим урон с Мемхаком

quq_CCCP, суть было в том, что бы отловить урон ДО расчета брони

quq_CCCP, над кодом еще работаю
Ige #25 - 9 месяцев назад 0
Ige #26 - 9 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

quq_CCCP, я, наверно, неправильно выразился. То что ты мне скинул - это совсем не то, что я имел ввиду. Минуту, я итоговый скрин сделаю.
Ige #27 - 9 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

Вроде бы откопал в доте, то что нужно. Проверю и отпишусь
    integer Int2Unit
    integer l__Int2Unit

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

    function Typecast4 takes nothing returns nothing
        local unit Int2Unit
    endfunction

    integer pGetUnitForAddress = 0
    function GetUnitForAddress takes integer addr returns integer // не знал какое имя дать -> дал первое, что пришло в голову)
        if pGetUnitForAddress == 0 then
            pGetUnitForAddress = GameDLL + 0x2DCC40
        endif

        return CallFastCallWith2Args(pGetUnitForAddress, addr, 0)
    endfunction

    function Int2Unit takes integer i returns unit
        call setInt2Unit(GetUnitForAddress(i))
        return l__Int2Unit
    endfunction
Ige #28 - 9 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

вот приблизительный пример того, что мне нужно
	integer Int2Unit
    integer l__Int2Unit

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

    function Typecast4 takes nothing returns nothing
        local unit Int2Unit
    endfunction

    function Int2Unit takes integer i returns unit
        call setInt2Unit(???) // вот что сюда писать?)
        return l__Int2Unit
    endfunction
Ige #29 - 9 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

quq_CCCP, так в том и дело, что GetTriggerUnit(), GetEventDamageSource() возвращают null
Ige #30 - 9 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

pro100master, очевидно, что RMem(pDamageTarget) возвращает адрес юнита, значит нужен некий "конвертер" (как я уже писал выше Int2Unit())
Ige #31 - 9 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

pro100master, как с помощью этого получить юнита(ов)?
Ige #32 - 9 месяцев назад 0

» WarCraft 3 / Ловим урон с Мемхаком

Как с этим вообще можно разобраться?
Код в шапке и в примере(карте) разный. Более того, в карте такой бардак, что пока найдешь что-нибудь и поймешь за что это отвечает, можно состариться. Словом, жуть какая-то =)
  • зачем здесь используется массив? - это что-то связанное с дотой, т.е. для работоспособности он не требуется?
  • как получить юнитов (GetTriggerUnit() и GetEventDamageSource() возвращают null)?
Вроде бы есть target, но это integer => нужно что-то типа Int2Unit();
Я не сразу понял, что offset == источник урона (DamageSource), мб тогда изменить имя переменной?
  • если перезаписать значение урона до расчета брони, не будет ли проблем?
Ige #33 - 9 месяцев назад (отредактировано ) 2

» RenderEdge / [RenderEdge] Memory Hack

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
Ige #34 - 9 месяцев назад 3

» WarCraft 3 / Как отследить цвет юнита?

avuremybe:
Ну и видимо да, мне придется писать свою функцию
cjass устроит?)
library UnitColor
{
	#define HASHTABLE =  // твоя хэш таблица
    #define HAVE_CUSTOM_COLOR = 0 //номер ячейки, где хранится метка (bool) о нестандартном цвете
    #define CUSTOM_COLOR_PLAYER = 0 //номер ячейки, где хранится игрок
    
    player Color2Player(playercolor color)
    {
        for(integer i = 0; i < 12; i++) {
            if color == ConvertPlayerColor(i) {
                return Player(i)
            }
        }

        return null
    }
    
    integer Color2PlayerId(playercolor color)
    {
        for(integer i = 0; i < 12; i++) {
            if color == ConvertPlayerColor(i) {
                return i
            }
        }

        return -1
    }

	#define SetUnitColor(u, c) = {
		SaveBoolean(HASHTABLE, GetHandleId(u), HAVE_CUSTOM_COLOR, true) //помечаем, что юнит имеет нестандартный цвет
		SavePlayerHandle(HASHTABLE, GetHandleId(u), CUSTOM_COLOR_PLAYER, Color2Player(c)) //т.к. playercolor нельзя сохранить в hashtable, то сохраняем игрока
		Set##UnitColor(u, c) //меняем цвет юниту
	}

	playercolor GetUnitColor(unit u) 
	{
		if LoadBoolean(HASHTABLE, GetHandleId(u), HAVE_CUSTOM_COLOR) { // проверяем, имеет ли юнит нестандартный цвет
			return GetPlayerColor(LoadPlayerHandle(HASHTABLE, GetHandleId(u), CUSTOM_COLOR_PLAYER)) // возвращаем нестандартный цвет
		}

		return GetPlayerColor(GetOwningPlayer(u)) // если нет, то возвращаем цвет владельца
	}
}
Ige #35 - 9 месяцев назад 2

» WarCraft 3 / Хак на память Warcraft3

ClotPh:
quq_CCCP, так, минутку, то есть равкод я не откопаю?
Ок, сейчас хоть цифры попробую снова... жопа =/
если я тебя правильно понял, то тебе нужна библиотека Ascii
пример использования
local integer id = 'hfoo'
local string raw = A2S(id) // raw == "hfoo" (строка)
id = S2A(raw) // id == 'hfoo' (число)
Ige #36 - 9 месяцев назад 2

» RenderEdge / [RenderEdge] Memory Hack

ENAleksey, в мемхаке есть функции
function GetFrameTextAddress takes string name, integer id returns integer
function GetFrameItemAddress takes string name, integer id returns integer
function GetFrameSkinAddress takes string name, integer id returns integer
С их помощью можно получить кое-какие адреса
GetFrameTextAddress("ResourceBarGoldText", 0)
GetFrameTextAddress("ResourceBarLumberText", 0)
GetFrameTextAddress("ResourceBarSupplyText", 0)
GetFrameTextAddress("ResourceBarUpkeepText", 0)

GetFrameTextAddress("InfoPanelIconHeroStrengthLabel", 6) //Сила (текст)
GetFrameTextAddress("InfoPanelIconHeroStrengthValue", 6) //Сила (значение)
GetFrameTextAddress("InfoPanelIconHeroAgilityLabel", 6) //Ловкость (текст)
GetFrameTextAddress("InfoPanelIconHeroAgilityValue", 6) //Ловкость (значение)
GetFrameTextAddress("InfoPanelIconHeroIntellectLabel", 6) //Разум (текст)
GetFrameTextAddress("InfoPanelIconHeroIntellectValue", 6) //Разум (значение)

GetFrameTextAddress("InfoPanelIconLabel", 0) //Атака 1
GetFrameTextAddress("InfoPanelIconLabel", 1) //Атака 2
GetFrameTextAddress("InfoPanelIconLabel", 2) //Защита
GetFrameTextAddress("InfoPanelIconLabel", 3) //Ранг
GetFrameTextAddress("InfoPanelIconLabel", 4) //Пища
GetFrameTextAddress("InfoPanelIconLabel", 5) //Золото
// и соответственно
GetFrameTextAddress("InfoPanelIconValue", 0) //значение Атака 1
GetFrameTextAddress("InfoPanelIconLevel", 0) //уровень Атака 1
Ige #37 - 9 месяцев назад 0

» RenderEdge / [RenderEdge] Memory Hack

ENAleksey, несколько предложений/просьб от меня :)
function GetHeroBarButton takes integer id returns integer // не хотелось бы терять аж 7 кнопок!
А еще я заметил, что отсутствуют функции, работающие с иконками и текстом. Например, что-то типа такого
function GetUpperButtonBarText takes integer id returns integer
function GetResourceBarText takes integer id returns integer
function GetResourceBarIcon takes integer id returns integer
function GetInfoBarText takes integer id returns integer
function GetInfoBarIcon takes integer id returns integer
Ige #38 - 9 месяцев назад 11
Ige #39 - 9 месяцев назад (отредактировано ) 0

» RenderEdge / [RenderEdge] Memory Hack

Кет,
  • скачиваешь PJass (ссылка в шапке) и переносишь его в \JNGP\jasshelper\ с заменой, предварительно сделав бэкап заменяемого файла
  • затем скачиваешь демонстрационную карту (тоже есть в шапке) и открываешь ее с помощью JNGP
  • если при сохранении карты выдаются ошибки, то отключи cJass -> AdicParser и cJass -> AdicOptimizer
  • наслаждайся новыми возможностями :)

в примере из шапки не хватает последних функций
А вот и функции для чтения данных о фрейме:
» раскрыть
function GetFrameWidth takes integer pFrame returns real
    return GetRealFromMemory(Memory[pFrame/4 + 22])
endfunction
    
function GetFrameHeight takes integer pFrame returns real
    return GetRealFromMemory(Memory[pFrame/4 + 23])
endfunction
    
function GetFramePointParent takes integer pFrame, integer point returns integer
    return Memory[Memory[pFrame/4 + point + 2]/4 + 1]
endfunction
    
function GetFramePointRelativePoint takes integer pFrame, integer point returns integer
    return Memory[Memory[pFrame/4 + point + 2]/4 + 2]
endfunction
    
function GetFramePointX takes integer pFrame, integer point returns real
    return GetRealFromMemory(Memory[Memory[pFrame/4 + point + 2]/4 + 3])
endfunction
    
function GetFramePointY takes integer pFrame, integer point returns real
    return GetRealFromMemory(Memory[Memory[pFrame/4 + point + 2]/4 + 4])
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
их можно добавить вручную или подождать пока ENAleksey обновит карту
Ige #40 - 9 месяцев назад (отредактировано ) 6

» WarCraft 3 / Почему в этом коде даммик не кидает сетку

ClotPh, GetLastCreatedUnit - это не native-функция, а BJ
function GetLastCreatedUnit takes nothing returns unit
    return bj_lastCreatedUnit
endfunction
bj_lastCreatedUnit - это глобалка, а значение, на которое она ссылается, указывается вручную. Например, как в BJ-функции
function CreateUnitAtLocSaveLast takes player id, integer unitid, location loc, real face returns unit
    if (unitid == 'ugol') then
        set bj_lastCreatedUnit = CreateBlightedGoldmine(id, GetLocationX(loc), GetLocationY(loc), face)
    else
        set bj_lastCreatedUnit = CreateUnitAtLoc(id, unitid, loc, face)
    endif

    return bj_lastCreatedUnit
endfunction

function CreateNUnitsAtLoc takes integer count, integer unitId, player whichPlayer, location loc, real face returns group
    call GroupClear(bj_lastCreatedGroup)
    loop
        set count = count - 1
        exitwhen count < 0
        call CreateUnitAtLocSaveLast(whichPlayer, unitId, loc, face)
        call GroupAddUnit(bj_lastCreatedGroup, bj_lastCreatedUnit)
    endloop
    return bj_lastCreatedGroup
endfunction
Ige #41 - 9 месяцев назад 1

» WarCraft 3 / Добыча ресурсов

Поясняю, почему работает только красный игрок:
событие "Юнит получает урон" -> Атакующий юнит == null следовательно Владелец(null) вернет 0, а 0 - порядковый номер красного игрока.
Ige #42 - 9 месяцев назад 2

» WarCraft 3 / Система захвата зданий

Maniac_91, несколько предложений по улучшению
  • сделай из башни "транспорт" (чтобы были ячейки)
  • или сделай ячейки с помощью предметов (причем зарядами можно отображать здоровье юнитов)
  • перенеси уведомления ("в здании нет мест", "здание повреждено") в привычное место (посередине экрана), покрась в желтый цвет и добавь звуковое сопровождение (поищи SimError)
прикреплены файлы
Ige #43 - 9 месяцев назад 0

» WarCraft 3 / Пассивная способность с перезарядкой и с мана костом

ScopteRectuS, ну можно попробовать заменить DISBTN иконку на нормальную <- не проверял, т.ч. не уверен
Ige #44 - 9 месяцев назад 2

» WarCraft 3 / Пассивная способность с перезарядкой и с мана костом

ScopteRectuS:
Ige, но там нельзя сделать мана кост. И способность еще затемняется, чтр неекрасиво.
манакост указывается не у сферы, а у способности, которая должна использоваться
прикреплены файлы
Ige #45 - 9 месяцев назад 0

» WarCraft 3 / Пассивная способность с перезарядкой и с мана костом

ScopteRectuS, если нужно, чтобы способность срабатывала при атаке, то можно использовать способность Сфера замедления ('AIsb')
Ige #46 - 9 месяцев назад 3

» RenderEdge / [RenderEdge] Memory Hack

ENAleksey, замечательно! значит, все фреймы уже найдены? а то мне уже надоело баловаться с CE =)
И еще вопрос насчет фреймов - что из себя представляет фрейм? Изменяя координаты точек (top, left, и т.д.), можно ли создать произвольный 3-8угольник или фрейм всегда будет принимать форму прямоугольника?
прикреплены файлы
Ige #47 - 9 месяцев назад 0

» RenderEdge / [RenderEdge] Memory Hack

Alexander12, RawImage (если ты о нем) не выводит изображение/текст поверх интерфейса :(
Ige #48 - 9 месяцев назад 0

» RenderEdge / [RenderEdge] Memory Hack

ENAleksey, возможно ли в RenderEdge_mini добавить вывод текста на экран (поверх интерфейса) из основной версии? и планируешь ли расширять функционал редактирования интерфейса?
Пример функций, которые были бы кстати
function GetFrameWidth takes integer address returns real
function GetFrameHeight takes integer address returns real
function GetFramePointX takes integer address, integer point returns real
function GetFramePointY takes integer address, integer point returns real
function GetFrameParent takes integer address returns integer // возвращает адрес родителя
и кое-какие новые функции для редактирования
function SetFrameFont takes string font returns nothing
function SetFrameFontColor takes integer rgba returns nothing // 0xRRGGBBAA - ну вы поняли)
function SetFrameFontColor takes integer red, integer green, integer blue, integer alpha returns nothing
function SetFrameTextLength takes integer returns nothing // длина текста во фрейме
Ige #49 - 9 месяцев назад 0

» WarCraft 3 / Как использовать % ?

Game_Nikitav_1, зато у меня скриншот и код есть:Р
Ige #50 - 9 месяцев назад 0

» WarCraft 3 / Как использовать % ?

kometa99, просто же
if GetRandomInt(0, 99) < GetUnitAbilityLevel(GetAttacker(), 'A000') then	// вместо 'A000' твоя способность
	call CreateItem('shrs', GetUnitX(GetTriggerUnit()), GetUnitY(GetTriggerUnit())) //'shrs' предмет
endif
прикреплены файлы