0
7
4 года назад
0

» WarCraft 3 / Как играть в старый варик?

Переключатель находится в настройках. Он рабочий, просто у меня не куплен reforged.
Загруженные файлы
5
7
6 лет назад
5

» RenderEdge / [RenderEdge] Memory Hack

ClotPh, карта из шапки + код из сообщения, вроде бы ничего сложного :)
Держи
Загруженные файлы
6
7
6 лет назад
Отредактирован Ige
6

» RenderEdge / [RenderEdge] Memory Hack

дополнение к прошлому сообщению и несколько новых ф-ций:
// *ВАЖНО* перед манипулированием фреймом здоровья/маны нужно обязательно создать эти фреймы, просто триггерно выделив 1 раз любую боевую единицу и обязательно всем живым игрокам.
function GetHealthPointsFrame takes nothing returns integer // возвращает адрес фрейма очков здоровья
function GetManaPointsFrame takes nothing returns integer // возвращает адрес фрейма очков маны
function GetBuffBarButton takes integer id returns integer // возвращает адрес фрейма заклинания (баффа); id принимает значения 0..7

// готовые ф-ции
function EditHealthPointsFrame takes integer anchor, real offsetX, real offsetY returns nothing
function EditManaPointsFrame takes integer anchor, real offsetX, real offsetY returns nothing
function EditBuffBarButton takes integer buttonId, integer anchor, real offsetX, real offsetY, real width, real height returns nothing
сам код
function GetHealthPointsFrame takes nothing returns integer
    return Memory[ReadGameUIStruct(FRAME_Portrait)/4 + 144]
endfunction

function GetManaPointsFrame takes nothing returns integer
    return Memory[ReadGameUIStruct(FRAME_Portrait)/4 + 145]
endfunction

function GetBuffBarButton takes integer id returns integer
    return Memory[Memory[Memory[ReadGameUIStruct(FRAME_CommandBar)/4 + 85]/4 + 20]/4 + id]
endfunction

// =================================================

function EditHealthPointsFrame takes integer anchor, real offsetX, real offsetY returns nothing
    local integer pHealthPointsFrame = GetHealthPointsFrame()
    local integer pRootFrame = GetRootFrame()

    call SetFramePoint(pHealthPointsFrame, ANCHOR_TOPLEFT, pRootFrame, anchor, offsetX, offsetY)
endfunction

function EditManaPointsFrame takes integer anchor, real offsetX, real offsetY returns nothing
    local integer pManaPointsFrame = GetManaPointsFrame()
    local integer pRootFrame = GetRootFrame()

    call SetFramePoint(pManaPointsFrame, ANCHOR_TOPLEFT, pRootFrame, anchor, offsetX, offsetY)
endfunction

function EditBuffBarButton takes integer buttonId, integer anchor, real offsetX, real offsetY, real width, real height returns nothing
    local integer pButtonFrame = GetBuffBarButton(buttonId)
    local integer pRootFrame = GetRootFrame()

    if (width >= 0) then
        call SetFrameWidth(pButtonFrame, width)
    endif
    if (height >= 0) then
        call SetFrameHeight(pButtonFrame, height)
    endif

    call SetFramePoint(pButtonFrame, ANCHOR_TOPLEFT, pRootFrame, anchor, offsetX, offsetY)
endfunction
пример
	local real healthPointsX = FromPixelX(5)
	local real healthPointsY = FromPixelY(-175)
	local real manaPointsX   = FromPixelX(5)
	local real manaPointsY   = FromPixelY(-195)

	local real buffBarButtonStartX = FromPixelX(160)
	local real buffBarButtonStartY = FromPixelX(240)
	local real buffBarButtonDeltaX = FromPixelX(-40)
        
	call EditHealthPointsFrame(ANCHOR_TOPLEFT, healthPointsX, healthPointsY)
	call EditManaPointsFrame(ANCHOR_TOPLEFT, manaPointsX, manaPointsY)

	call EditBuffBarButton(0, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*0, buffBarButtonStartY, -1, -1) //дабы избежать изменения ширины/высоты, нужно указать отрицательное значение
	call EditBuffBarButton(1, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*1, buffBarButtonStartY, -1, -1)
	call EditBuffBarButton(2, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*2, buffBarButtonStartY, -1, -1)
	call EditBuffBarButton(3, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*3, buffBarButtonStartY, -1, -1)
	call EditBuffBarButton(4, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*4, buffBarButtonStartY, -1, -1)
	call EditBuffBarButton(5, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*5, buffBarButtonStartY, -1, -1)
	call EditBuffBarButton(6, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*6, buffBarButtonStartY, -1, -1)
	call EditBuffBarButton(7, ANCHOR_BOTTOM, buffBarButtonStartX + buffBarButtonDeltaX*0, buffBarButtonStartY, -1, -1)
Загруженные файлы
1
7
6 лет назад
Отредактирован Ige
1

» WarCraft 3 / Хендл

Недавно отвечал на похожий вопрос, но там это не пригодилось(
Typecasting (cjass)
//////////////////////////////////////////
//       Typecasting 2.0
//       by kingking
//
//  This library provides some type
//  converting functions.
///////////////////////////////////////

library Typecasting {

    private hashtable Data = InitHashtable()
    
    define private Typecasting(ParentName, parenttype, TypeName, type) = 
    {
        type ParentName##2##TypeName(parenttype object) {
            Save##ParentName##Handle(Data,0,0,object)
            return Load##TypeName##Handle(Data,0,0)
        }
    }

    Typecasting(Agent, agent, Widget, widget)
    Typecasting(Agent, agent, Group, group)
    Typecasting(Agent, agent, Trigger, trigger)
    Typecasting(Agent, agent, Timer, timer)
    Typecasting(Agent, agent, Location, location)
    Typecasting(Agent, agent, Effect, effect)
    Typecasting(Agent, agent, Unit, unit)
    Typecasting(Agent, agent, Item, item)
    Typecasting(Agent, agent, Lightning, lightning)
    Typecasting(Widget, widget, Unit, unit)
    Typecasting(Widget, widget, Destructable, destructable)
    Typecasting(Widget, widget, Item, item)


    
    define private Typecasting_I2X(TypeName, type) = 
    {
        type Int2##TypeName(integer id) {
            SaveFogStateHandle(Data, 0, 0, ConvertFogState(id))
            return Load##TypeName##Handle(Data, 0, 0)
        }
    }

    Typecasting_I2X(Unit, unit)
    Typecasting_I2X(Effect, effect)
    Typecasting_I2X(Trigger, trigger)
    Typecasting_I2X(Timer, timer)
    Typecasting_I2X(Widget, widget)
    Typecasting_I2X(Lightning, lightning)
    Typecasting_I2X(Group, group)
    Typecasting_I2X(Location, location)
    Typecasting_I2X(Item, item)
    Typecasting_I2X(Destructable, destructable)
    Typecasting_I2X(Ability, ability)
    Typecasting_I2X(TriggerCondition, triggercondition)
    Typecasting_I2X(TriggerAction, triggeraction)
    Typecasting_I2X(Force, force)
    Typecasting_I2X(Rect, rect)
    Typecasting_I2X(Sound, sound)
    Typecasting_I2X(UnitPool, unitpool)
    Typecasting_I2X(ItemPool, itempool)
    Typecasting_I2X(Quest, quest)
    Typecasting_I2X(QuestItem, questitem)
    Typecasting_I2X(DefeatCondition, defeatcondition)
    Typecasting_I2X(TimerDialog, timerdialog)
    Typecasting_I2X(Leaderboard, leaderboard)
    Typecasting_I2X(Multiboard, multiboard)
    Typecasting_I2X(MultiboardItem, multiboarditem)
    Typecasting_I2X(Trackable, trackable)
    Typecasting_I2X(Dialog, dialog)
    Typecasting_I2X(Button, button)
    Typecasting_I2X(TextTag, texttag)
    Typecasting_I2X(Image, image)
    Typecasting_I2X(Ubersplat, ubersplat)
    Typecasting_I2X(Region, region)
    Typecasting_I2X(FogState, fogstate)
    Typecasting_I2X(FogModifier, fogmodifier)
}
Библиотека содержит функции перевода хендла в объект. В твоем случае нужна:
function Int2Unit takes integer id returns unit // берет хэндл -> возвращает юнита
Ну, а дальше узнаешь имя с помощью нативной функции:
native GetUnitName takes unit whichUnit returns string
0
7
6 лет назад
0

» WarCraft 3 / I2H как сконвертировать

нашел у себя старинный способ получения объекта по его хэндлу, правда на cjass:
Typecasting
//////////////////////////////////////////
//       Typecasting 2.0
//       by kingking
//
//  This library provides some type
//  converting functions.
///////////////////////////////////////

library Typecasting {

    private hashtable Data = InitHashtable()
    
    define private Typecasting(ParentName, parenttype, TypeName, type) = 
    {
        type ParentName##2##TypeName(parenttype object) {
            Save##ParentName##Handle(Data,0,0,object)
            return Load##TypeName##Handle(Data,0,0)
        }
    }

    Typecasting(Agent, agent, Widget, widget)
    Typecasting(Agent, agent, Group, group)
    Typecasting(Agent, agent, Trigger, trigger)
    Typecasting(Agent, agent, Timer, timer)
    Typecasting(Agent, agent, Location, location)
    Typecasting(Agent, agent, Effect, effect)
    Typecasting(Agent, agent, Unit, unit)
    Typecasting(Agent, agent, Item, item)
    Typecasting(Agent, agent, Lightning, lightning)
    Typecasting(Widget, widget, Unit, unit)
    Typecasting(Widget, widget, Destructable, destructable)
    Typecasting(Widget, widget, Item, item)


    
    define private Typecasting_I2X(TypeName, type) = 
    {
        type Int2##TypeName(integer id) {
            SaveFogStateHandle(Data, 0, 0, ConvertFogState(id))
            return Load##TypeName##Handle(Data, 0, 0)
        }
    }

    Typecasting_I2X(Unit, unit)
    Typecasting_I2X(Effect, effect)
    Typecasting_I2X(Trigger, trigger)
    Typecasting_I2X(Timer, timer)
    Typecasting_I2X(Widget, widget)
    Typecasting_I2X(Lightning, lightning)
    Typecasting_I2X(Group, group)
    Typecasting_I2X(Location, location)
    Typecasting_I2X(Item, item)
    Typecasting_I2X(Destructable, destructable)
    Typecasting_I2X(Ability, ability)
    Typecasting_I2X(TriggerCondition, triggercondition)
    Typecasting_I2X(TriggerAction, triggeraction)
    Typecasting_I2X(Force, force)
    Typecasting_I2X(Rect, rect)
    Typecasting_I2X(Sound, sound)
    Typecasting_I2X(UnitPool, unitpool)
    Typecasting_I2X(ItemPool, itempool)
    Typecasting_I2X(Quest, quest)
    Typecasting_I2X(QuestItem, questitem)
    Typecasting_I2X(DefeatCondition, defeatcondition)
    Typecasting_I2X(TimerDialog, timerdialog)
    Typecasting_I2X(Leaderboard, leaderboard)
    Typecasting_I2X(Multiboard, multiboard)
    Typecasting_I2X(MultiboardItem, multiboarditem)
    Typecasting_I2X(Trackable, trackable)
    Typecasting_I2X(Dialog, dialog)
    Typecasting_I2X(Button, button)
    Typecasting_I2X(TextTag, texttag)
    Typecasting_I2X(Image, image)
    Typecasting_I2X(Ubersplat, ubersplat)
    Typecasting_I2X(Region, region)
    Typecasting_I2X(FogState, fogstate)
    Typecasting_I2X(FogModifier, fogmodifier)
}
функции
function Int2Unit takes integer id returns unit
function Int2Effect takes integer id returns effect
function Int2Trigger takes integer id returns trigger
и т.д
7
7
6 лет назад
7

» RenderEdge / [RenderEdge] Memory Hack

что-то давненько не было обновлений :(
вот нашел адреса очков здоровья и маны (те что под портретом персонажа):
    function GetHealthPointsFrame takes nothing returns integer
        return Memory[ReadGameUIStruct(FRAME_Portrait)/4 + 144]
    endfunction
    
    function GetManaPointsFrame takes nothing returns integer
        return Memory[ReadGameUIStruct(FRAME_Portrait)/4 + 145]
    endfunction
и простой пример кода, меняющий показатели местами:
    local integer pHealthPointsFrame = GetHealthPointsFrame()
    local integer pManaPointsFrame = GetManaPointsFrame()
    local integer pManaPointsParent = GetFramePointParent(pManaPointsFrame, ANCHOR_TOPLEFT)
    local integer pHealthPointsParent = GetFramePointParent(pHealthPointsFrame, ANCHOR_TOPLEFT)
    local real pHealthPointsX = GetFramePointX(pHealthPointsFrame, ANCHOR_TOPLEFT)
    local real pHealthPointsY = GetFramePointY(pHealthPointsFrame, ANCHOR_TOPLEFT)
    local real pManaPointsX = GetFramePointX(pManaPointsFrame, ANCHOR_TOPLEFT)
    local real pManaPointsY = GetFramePointY(pManaPointsFrame, ANCHOR_TOPLEFT)

    call SetFramePoint(pHealthPointsFrame, ANCHOR_TOPLEFT, pHealthPointsParent, ANCHOR_BOTTOMLEFT, pHealthPointsX, pManaPointsY)
    call SetFramePoint(pManaPointsFrame, ANCHOR_TOPLEFT, pManaPointsParent, ANCHOR_BOTTOMLEFT, pManaPointsX, pHealthPointsY)
результат
Загруженные файлы
0
7
6 лет назад
Отредактирован Ige
0

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

а разве группу не нужно очищать перед удалением?
call GroupClear(udg_nospawn)
call GroupClear(udg_limit)
1
7
6 лет назад
1

» Edemium / Скачать Edemium

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

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

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

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

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

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

в папке, куда установлен варик, есть файл patch.txt, где записана история обновлений
Загруженные файлы
2
7
7 лет назад
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
2
7
7 лет назад
Отредактирован Ige
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
6
7
7 лет назад
6

» 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
мб что-то еще, но уже не вспомню
кст, на сайте есть статья
1
7
7 лет назад
1

» WarCraft 3 / Как добавляются нативки?

ScopteRectuS, это функция из common.ai
0
7
7 лет назад
Отредактирован Ige
0

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

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

pro100master, скачал твою карту, вроде бы все работает о_О
0
7
7 лет назад
0

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

Arctide, ради такого интерфейса можно и не сохраняться :D
0
7
7 лет назад
0

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

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

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

Name Legion, не до этого сейчас)
0
7
7 лет назад
0

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

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

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

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

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

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

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

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

» RenderEdge / [RenderEdge] Memory Hack

ENAleksey, а кд и автокаст можно как-то исправить?
Загруженные файлы
0
7
7 лет назад
0

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

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

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

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