,

MemoryHackAPI v1.1

» опубликован

Внимание!

Сайт я более посещать не буду, все последующие обновления моих ресурсов будут делаться в моей ВК группе

Информация:

» Благодарности
Для начала, хочу поблагодарить quq_CCCP за как моральную поддержку, так и за советы, скорее всего без него, я бы не взялся доделать эту карту.
Отдельное спасибо: Dracol1ch, Karaul0v, ENAlexey и leafdropn за их вклад в целом развитие как Мемхака, так и в целом за всю работу проделанную ими.
» Ознакомление
Рад представить вам "плод" двух-недельной работы над WE-открываемой и редактируемой MemHack карты, которая полностью поддерживает 1.26а и 1.27а. В данной API карте присутствуют почти все функции из уже существующих МемХаков, а так же много нового, которое добавил лично я и часть, что я позаимствовал из YDWE, за что им отдельное спасибо.
Описание дальнейшее будет заполнено позже, в самой карте есть комментарии где они необходимы и в целом описано, что и как стоит делать (внимание, комментарии по понятным причинам в карте на английском!).

Список API:

» Unit Base API
Ниже предоставлены все доступные функции, внимание, эти функции модифицируют непосредственно структуру, а потому изменения могут потребовать вызова перерисовки юнита, а также эти изменения повлияют на будущих юнитов, которые основаны на модифицированной структуре.
Более простым языком - все изменения из этого API редактируют "slk таблицы" то бишь те мета-данные, которые берутся при создании юнита.
	function GetUnitBaseModelById takes integer uid returns string
	function SetUnitBaseModelById takes integer uid, string model returns nothing
	function GetUnitBasePortraitById takes integer uid returns string
	function SetUnitBasePortraitById takes integer uid, string model returns nothing
	function GetUnitBaseMissileArtById takes integer uid, string path returns string
	function SetUnitBaseMissileArtById takes integer uid, string model returns nothing
	function GetUnitBaseMissileSpeedById takes integer uid, integer index returns real
	function SetUnitBaseMissileSpeedById takes integer uid, integer index, real speed returns nothing
	function GetUnitBaseColorById takes integer uid returns integer
	function GetHeroBasePrimaryAttributeById takes integer uid returns integer
	function SetHeroBasePrimaryAttributeById takes integer uid, integer index returns nothing
	function GetUnitBaseTipById takes integer uid returns string
	function SetUnitBaseTipById takes integer uid, string text returns nothing
	function GetUnitBaseUbertipById takes integer uid returns string
	function SetUnitBaseUbertipById takes integer uid, string text returns nothing
	function GetUnitBaseHotkeyById takes integer uid returns integer
	function SetUnitBaseHotkeyById takes integer uid, integer key returns nothing

	// Делают всё тоже самое, что и функции выше, но принимают напрямую юнита, а не его TypeId
	function GetUnitBaseModel takes unit u returns string
	function SetUnitBaseModel takes unit u, string model returns nothing
	function GetUnitBasePortrait takes unit u returns string
	function SetUnitBasePortrait takes unit u, string model returns nothing
	function GetUnitBaseMissileArt takes unit u, string model returns string
	function SetUnitBaseMissileArt takes unit u, string model returns nothing
	function GetUnitBaseMissileSpeed takes unit u, integer index returns real
	function SetUnitBaseMissileSpeed takes unit u, integer index, real speed returns nothing
	function GetUnitBaseColor takes unit u returns integer
	function GetHeroBasePrimaryAttribute takes unit u returns integer
	function SetHeroBasePrimaryAttribute takes unit u, integer index returns nothing
	function GetUnitBaseTip takes unit u returns string
	function SetUnitBaseTip takes unit u, string text returns nothing
	function GetUnitBaseUbertip takes unit u returns string
	function SetUnitBaseUbertip takes unit u, string text returns nothing
	function GetUnitBaseHotkey takes unit u returns integer
	function SetUnitBaseHotkey takes unit u, integer key returns nothing
» Unit Normal API
Ниже предоставлены все доступные функции, отличие от Unit Base API в том, что эти функции работают именно с юнитом, которого мы хотим модифицировать, а не вносит изменения в структуру, на базе которой основан юнит.
Более простым языком - это уникальное изменение непосредственно для модифицируемого юнита, не затронет других юнитов с идентичным TypeId.
	function SetUnitTypeId takes unit u, integer i returns nothing
	function GetUnitTypeIdReal takes unit u returns integer
	function GetUnitVertexColour takes unit u returns integer
	function GetUnitVertexColourA takes unit u returns integer
	function GetUnitVertexColourR takes unit u returns integer
	function GetUnitVertexColourG takes unit u returns integer
	function GetUnitVertexColourB takes unit u returns integer
	function SetUnitModel takes unit u, string model returns nothing
	function RedrawUnit takes unit u returns nothing
	function IsAttackDisabled takes unit u returns boolean
	function UnitDisableAttack takes unit u returns nothing
	function UnitEnableAttack takes unit u returns nothing
	function GetUnitCritterFlag takes unit u returns integer
	function SetUnitCritterFlag takes unit u, integer id returns nothing
	function GetUnitTimedLife takes unit u returns real
	function SetUnitTimedLife takes unit u, real dur returns nothing
	function SetUnitPhased takes unit u returns nothing
	function CommonSilenceApply takes unit u, boolean flag returns nothing
	function DisableAllUnitsAbilities takes unit u, boolean flag returns nothing
	function SetStunToUnit takes unit u, boolean add returns nothing
	function UnStunUnit takes unit u returns nothing //unsafe, do not use unless you tested it through
	function IsUnitStunned2 takes unit u returns boolean
	function SetUnitControl takes unit u, integer flagval, integer moveval, integer atackval, integer invval returns nothing
	function DisableUnitControl takes unit u returns nothing
	function EnableUnitControl takes unit u returns nothing
	function RemoveAllUnitMovementDisables takes unit u returns nothing
	function IsUnitMovementDisabled takes unit u returns boolean
	function SetUnitMovement takes integer pdata, integer d returns nothing
	function DisableUnitMovement takes unit u returns nothing
	function EnableUnitMovement takes unit u returns nothing
	function DisableUnitsMovement takes unit u, boolean disable returns nothing
	function UnitCanUseInventoryModify takes unit u, integer mod returns nothing
	function GetSomeAddressForLocustFlags takes integer pAddr1, integer pAddr2 returns integer
	function SetLocustFlags takes unit u, integer i returns nothing //These flags can make unit immune to truesight
	function EnableTruesightImmunity takes unit u returns nothing
	function DisableTruesightImmunity takes unit u returns nothing
	function GetUnitFlags takes unit u returns integer
	function SetUnitFlags takes unit u, integer i returns nothing
	function AddUnitFlags takes unit u, integer i returns nothing
	function GetUnitFlags_2 takes unit u returns integer
	function SetUnitFlags_2 takes unit u, integer i returns nothing
	function AddUnitFlags_2 takes unit u, integer i returns nothing
	function GetUnitVisibilityClass takes unit u returns integer
	function SetUnitVisibleByPlayer takes unit u, player p, integer c returns nothing
	function IsUnitInvulnerable takes unit u returns boolean
	function GetUnitInvulnerableCounter takes unit u returns integer
	function SetUnitInvulnerableCounter takes unit u, integer i returns nothing
	function ModifyInvulnerableCounter takes unit u, integer diff returns nothing
	function IsUnitInvulnerable2 takes unit u returns boolean
	function SetUnitFacingInstant takes unit u, real a returns nothing
	function GetUnitMoveType takes unit u returns integer
	function SetUnitMoveType takes unit u, integer m_type returns nothing
	function GetHeroPrimaryAttribute takes unit u returns integer //1 = str, 2 = int, 3 = agi
	function SetHeroPrimaryAttribute takes unit u, integer i returns nothing
	function GetUnitNextAttackTimestamp takes unit u returns real
	function ResetAttackCooldown takes unit u returns boolean
	function NullifyCurrentAttack takes unit u returns string
	function AddExtraAttack takes unit u returns boolean
	function GetUnitAttackAbility takes unit u returns integer
	function SetUnitAttackAbility takes unit u, integer pAddr returns nothing
	function GetUnitAttackOffsetValue takes unit u, integer pOff returns integer
	function GetUnitAttackTypeByIndex takes unit u, integer index returns integer
	function GetUnitAttackType1 takes unit u returns integer
	function GetUnitAttackType2 takes unit u returns integer
	function SetUnitAttackOffsetValue takes unit u, integer offset, integer val returns nothing
	function SetUnitAttackTypeByIndex takes unit u, integer i, integer attacknum returns nothing
	function SetUnitAttackType1 takes unit u, integer i returns nothing
	function SetUnitAttackType2 takes unit u, integer i returns nothing
	function GetUnitWeaponSound takes unit u returns integer
	function SetUnitWeaponSound takes unit u, integer i returns nothing
	function GetUnitWeaponType takes unit u returns integer
	function SetUnitWeaponType takes unit u, integer i returns nothing
	function GetUnitBaseDamage takes unit u returns integer
	function SetUnitBaseDamage takes unit u, integer i returns nothing
	function AddUnitBaseDamage takes unit u, integer bonus returns nothing
	function GetUnitGreenBonusDamage takes unit u returns integer
	function SetUnitGreenBonusDamage takes unit u, integer i returns nothing
	function AddUnitGreenBonusDamage takes unit u, integer i returns nothing
	function GetUnitTotalDamage takes unit u returns integer
	function GetUnitBaseAttributeDamage takes unit u returns integer
	function SetUnitBaseAttributeDamage takes unit u, integer i returns nothing
	function GetUnitDamageDicesSideCount takes unit u returns integer
	function SetUnitDamageDicesSideCount takes unit u, integer i returns nothing
	function GetUnitDamageDicesCount takes unit u returns integer
	function SetUnitDamageDicesCount takes unit u, integer i returns nothing
	function GetUnitAttackRangeByIndex takes unit u, integer index returns real
	function SetUnitAttackRangeByIndex takes unit u, integer index, real r returns nothing
	function GetUnitAttackRange1 takes unit u returns real
	function SetUnitAttackRange1 takes unit u, real r returns nothing
	function GetUnitAttackRange2 takes unit u returns real
	function SetUnitAttackRange2 takes unit u, real r returns nothing
	function GetUnitBATByIndex takes unit u, integer index returns real
	function SetUnitBATByIndex takes unit u, integer index, real r returns nothing
	function GetUnitBAT1 takes unit u returns real
	function SetUnitBAT1 takes unit u, real r returns nothing
	function GetUnitBAT2 takes unit u returns real
	function SetUnitBAT2 takes unit u, real r returns nothing
	function GetUnitAttackPointByIndex takes unit u, integer index returns real
	function SetUnitAttackPointByIndex takes unit u, integer index, real r returns nothing
	function GetUnitAttackPoint1 takes unit u returns real
	function SetUnitAttackPoint1 takes unit u, real r returns nothing
	function GetUnitAttackPoint2 takes unit u returns real
	function SetUnitAttackPoint2 takes unit u, real r returns nothing
	function GetUnitAttackEnabledIndex takes unit u returns integer
	function GetUnitAttackBackswing takes unit u returns real
	function SetUnitAttackBackswing takes unit u, real r returns nothing
	function GetUnitAttackSpeed takes unit u returns real
	function SetUnitAttackSpeed takes unit u, real r returns nothing
	function AddUnitAttackSpeed takes unit u, real r returns nothing
	function GetUnitAttackDamage takes unit u returns real
	function GetUnitArmourType takes unit u returns integer
	function SetUnitArmourType takes unit u, integer id returns nothing
	function GetUnitArmour takes unit u returns real
	function SetUnitArmour takes unit u, real r returns nothing
	function AddUnitArmour takes unit u, real value returns nothing
	function GetUnitTimeScale takes unit u returns real
	function GetUnitBaseMoveSpeed takes unit u returns real
	function GetUnitBonusMoveSpeed takes unit u returns real
	function SetUnitBonusMoveSpeed takes unit u, real r returns boolean
	function AddUnitBonusMovespeed takes unit u, real r returns nothing
	function SetUnitMaxLife takes unit u, real newhp returns nothing
	function AddUnitMaxLife takes unit u, real value returns nothing
	function SetUnitMaxMana takes unit u, real newmp returns nothing
	function AddUnitMaxMana takes unit u, real value returns nothing
	function GetWidgetLifeRegen takes widget u returns real
	function GetUnitLifeRegen takes unit u returns real
	function SetUnitLifeRegen takes unit u, real r returns nothing
	function AddUnitLifeRegen takes unit u, real r returns nothing
	function GetUnitManaRegen takes unit u returns real
	function SetUnitManaRegen takes unit u, real r returns nothing
	function AddUnitManaRegen takes unit u, real r returns nothing
» Ability Base API
Данный API редактирует структуру, то бишь базу способностей, изменив которые, все способности с совпадающим Id будут затронуты!
	function GetAbilityBaseMaxLevel takes integer aid returns integer
	function GetAbilityBaseId takes ability a returns integer
	function GetAbilityBaseManaCost takes integer aid, integer level returns integer
	function SetAbilityBaseManaCost takes integer aid, integer level, integer cost returns nothing
	function GetAbilityBaseCooldown takes integer aid, integer level returns real
	function SetAbilityBaseCooldown takes integer aid, integer level, real cool returns nothing
	function GetAbilityBaseEffectSound takes integer aid returns string
	function SetAbilityBaseEffectSound takes integer aid, string s returns nothing
	function GetAbilityBaseGlobalMessage takes integer aid returns string
	function SetAbilityBaseGlobalMessage takes integer aid, string s returns nothing
	function GetAbilityBaseGlobalSound takes integer aid returns string
	function SetAbilityBaseGlobalSound takes integer aid, string s returns nothing
	function GetAbilityBaseButtonX takes integer aid returns integer
	function SetAbilityBaseButtonX takes integer aid, integer newX returns nothing
	function GetAbilityBaseButtonY takes integer aid returns integer
	function SetAbilityBaseButtonY takes integer aid, integer newY returns nothing
	function GetAbilityBaseUnButtonX takes integer aid returns integer
	function SetAbilityBaseUnButtonX takes integer aid, integer newX returns nothing
	function GetAbilityBaseUnButtonY takes integer aid returns integer
	function SetAbilityBaseUnButtonY takes integer aid, integer newY returns nothing
	function GetAbilityBaseResearchButtonX takes integer aid returns integer
	function SetAbilityBaseResearchButtonX takes integer aid, integer newX returns nothing
	function GetAbilityBaseResearchButtonY takes integer aid returns integer
	function SetAbilityBaseResearchButtonY takes integer aid, integer newY returns nothing
	function GetAbilityBaseMissileSpeed takes integer aid returns real
	function SetAbilityBaseMissileSpeed takes integer aid, real speed returns nothing
	function GetAbilityBaseMissileArc takes integer aid returns real
	function SetAbilityBaseMissileArc takes integer aid, real arc returns nothing
	function IsAbilityMissileHoming takes integer aid returns boolean
	function SetAbilityBaseMissileHoming takes integer aid, boolean homing returns nothing
	function GetAbilityBaseSpellDetails takes integer aid returns integer
	function SetAbilityBaseSpellDetails takes integer aid, integer det returns nothing
	function GetAbilityBaseHotkeyId takes integer aid returns integer
	function SetAbilityBaseHotkeyId takes integer aid, integer newVal returns nothing
	function GetAbilityBaseUnHotkeyId takes integer aid returns integer
	function SetAbilityBaseUnHotkeyId takes integer aid, integer newVal returns nothing
	function GetAbilityBaseResearchHotkeyId takes integer aid returns integer
	function SetAbilityBaseResearchHotkeyId takes integer aid, integer newVal returns nothing
	function GetAbilityBaseTip takes integer aid, integer lvl returns string
	function SetAbilityBaseTip takes integer aid, integer lvl, string s returns nothing
	function GetAbilityBaseUbertip takes integer aid, integer lvl returns string
	function SetAbilityBaseUbertip takes integer aid, integer lvl, string s returns nothing
	function SetAbilityBaseHotkeyCommon takes integer aid, integer newVal returns nothing
» Ability Unit API
Принимает в параметры юнита и Id способности, для более простого пользования.
	function GetUnitAbilityOrderId takes unit u, integer aid returns integer
	function IsUnitAbilityOnCooldown takes unit u, integer aid returns boolean
	function IsUnitAbilitySafe takes unit u, integer aid returns boolean
	function IsUnitAbilityUsable takes unit u, integer aid returns boolean
	function GetUnitAbilityCastpoint takes unit u, integer aid returns real
	function SetUnitAbilityCastpoint takes unit u, integer aid, real dur returns nothing
	function GetUnitAbilityBackswing takes unit u, integer aid returns real
	function SetUnitAbilityBackswing takes unit u, integer aid, real dur returns nothing
	function GetUnitAbilityManaCost takes unit u, integer aid, integer level returns integer
	function SetUnitAbilityManaCost takes unit u, integer aid, integer level, integer mc returns nothing
	function GetUnitAbilityCooldownStamp takes unit u, integer aid returns real
	function GetUnitAbilityCurrentCooldown takes unit u, integer aid returns real
	function SetUnitAbilityCooldown takes unit u, integer aid, real seconds, string mode returns nothing
	function AddUnitAbilityCooldown takes unit u, integer aid, real seconds returns nothing
	function ReduceUnitAbilityCooldown takes unit u, integer aid, real seconds returns nothing
	function ResetUnitAbilityCooldown takes unit u, integer aid returns nothing
	function StartUnitAbilityCooldown takes unit u, integer aid, real cd returns nothing
	function GetUnitAbilityCastTime takes unit u, integer aid returns real
	function SetUnitAbilityCastTime takes unit u, integer aid, real r returns nothing
	function SetUnitAbilityDisabled takes unit u, integer aid, integer count returns nothing
	function GetUnitAbilityDisabled takes unit u, integer aid returns integer
	function SetUnitAbilityHidden takes unit u, integer aid, integer count returns nothing
	function AddUnitAbilityHidden takes unit u, integer aid, integer count returns nothing
	function GetUnitAbilityDisabledEx takes unit u, integer aid returns integer
	function SetUnitAbilityDisabledEx takes unit u, integer aid, integer count returns nothing
	function SilenceUnitAbility takes unit u, integer aid returns nothing
	function UnsilenceUnitAbility takes unit u, integer aid returns nothing
	function HideUnitAbilityButton takes unit u, integer aid, boolean hide returns nothing
» Ability Normal API
Эти функции идентичны по работе Ability Unit API, однако принимают ability, то бишь GetSpellAbility( ), для тех кому это будет удобнее.
	function GetAbilityOrderId takes ability a returns integer
	function IsAbilityOnCooldown takes ability a returns boolean
	function IsAbilitySafe takes ability a returns boolean
	function IsAbilityUsable takes ability a returns boolean
	function GetAbilityCastpoint takes ability a returns real
	function SetAbilityCastpoint takes ability a, real dur returns nothing
	function GetAbilityBackswing takes ability a returns real
	function SetAbilityBackswing takes ability a, real dur returns nothing
	function GetAbilityManaCost takes ability a, integer level returns integer
	function SetAbilityManaCost takes ability a, integer level, integer mc returns nothing
	function GetAbilityCooldownStamp takes ability a returns real
	function GetAbilityCurrentCooldown takes ability a returns real
	function SetAbilityCooldown takes ability a, real seconds, string mode returns nothing
	function AddAbilityCooldown takes ability a, real seconds returns nothing
	function ReduceAbilityCooldown takes ability a, real seconds returns nothing
	function ResetAbilityCooldown takes ability a returns nothing
	function StartAbilityCooldown takes ability a, real cd returns nothing
	function GetAbilityCastTime takes ability a returns real
	function SetAbilityCastTime takes ability a, real r returns nothing
	function SetAbilityDisabled takes ability a, integer count returns nothing
	function GetAbilityDisabled takes ability a returns integer
	function SetAbilityHidden takes ability a, integer count returns nothing
	function AddAbilityHidden takes ability a, integer count returns nothing
	function GetAbilityDisabledEx takes ability a returns integer
	function SetAbilityDisabledEx takes ability a, integer count returns nothing
	function SilenceAbility takes ability a returns nothing
	function UnsilenceAbility takes ability a returns nothing
	function HideAbilityButton takes ability a, boolean hide returns nothing
» Cast Ability API
Данный код позволяет не только имитировать "дамми каст", также можно избегать возню с приказами и заставлять юнита применять указанное нами заклинание.
Настоятельно рекомендую посмотреть в карте эти функции подробнее!
	function CastAbilityPosition takes integer aid, unit source, real targX, real targY returns nothing
	function CastAbilityTarget takes integer aid, unit source, widget target returns nothing
	function CastAbilityTargetGround takes integer aid, unit source, integer lvl, real targX, real targY, boolean remove returns nothing
	function CastAbilityTargetWidget takes integer aid, unit source, widget target, integer lvl, boolean remove returns nothing
	function CastAbilityTargetSelf takes integer aid, unit source, integer lvl returns nothing
» Effect API
Внимание! Все углы принимаются в ГРАДУСАХ, это сделано для удобства пользования.
	function IsEffectHidden takes effect e returns boolean
	function ShowEffect takes effect e, boolean flag returns nothing
	function SetEffectAlpha takes effect e, integer alpha returns nothing
	function GetEffectColour takes effect e returns integer
	function SetEffectColour takes effect e, integer colour returns nothing
	function SetEffectColourEx takes effect e, integer red, integer green, integer blue, integer alpha returns nothing
	function SetEffectVertexColour takes effect e, integer red, integer green, integer blue, integer alpha returns nothing
	function GetEffectColourA takes effect e returns integer
	function SetEffectColourA takes effect e, integer alpha returns nothing
	function GetEffectColourR takes effect e returns integer
	function SetEffectColourR takes effect e, integer red returns nothing
	function GetEffectColourG takes effect e returns integer
	function SetEffectColourG takes effect e, integer green returns nothing
	function GetEffectColourB takes effect e returns integer
	function SetEffectColourB takes effect e, integer blue returns nothing
	function SetEffectAnimationByIndex takes effect e, integer index returns nothing
	function SetEffectModel takes effect e, string model returns nothing
	function GetEffectX takes effect e returns real
	function SetEffectX takes effect e, real x returns nothing
	function GetEffectY takes effect e returns real
	function SetEffectY takes effect e, real y returns nothing
	function GetEffectZ takes effect e returns real
	function SetEffectZ takes effect e, real z returns nothing
	function SetEffectPosition takes effect e, real x, real y, real z returns nothing
	function GetEffectTimeScale takes effect e returns real
	function SetEffectTimeScale takes effect e, real speed returns nothing
	function GetEffectScale takes effect e returns real
	function SetEffectScale takes effect e, real scale returns nothing
	function SetEffectScaleEx takes effect e, real x, real y, real z returns nothing
	function GetEffectRoll takes effect e returns real // X
	function SetEffectRoll takes effect e, real angle returns nothing // X
	function GetEffectPitch takes effect e returns real // Y
	function SetEffectPitch takes effect e, real angle returns nothing // Y
	function GetEffectFacing takes effect e returns real // Z
	function SetEffectFacing takes effect e, real angle returns nothing // Z
	function ResetEffectMatrix takes effect e returns nothing
» Trackable API
Внимание! Все углы принимаются в ГРАДУСАХ, это сделано для удобства пользования.
Структура эффектов и трекейблов идентична, более опытные пользователи могут переделать параметр в handle, если хочется сократить количество кода.
	function IsTrackableHidden takes trackable track returns boolean
	function ShowTrackable takes trackable track, boolean flag returns nothing
	function SetTrackableAlpha takes trackable track, integer alpha returns nothing
	function GetTrackableColour takes trackable track returns integer
	function SetTrackableColour takes trackable track, integer colour returns nothing
	function SetTrackableColourEx takes trackable track, integer red, integer green, integer blue, integer alpha returns nothing
	function SetTrackableVertexColour takes trackable track, integer red, integer green, integer blue, integer alpha returns nothing
	function GetTrackableColourA takes trackable track returns integer
	function SetTrackableColourA takes trackable track, integer alpha returns nothing
	function GetTrackableColourR takes trackable track returns integer
	function SetTrackableColourR takes trackable track, integer red returns nothing
	function GetTrackableColourG takes trackable track returns integer
	function SetTrackableColourG takes trackable track, integer green returns nothing
	function GetTrackableColourB takes trackable track returns integer
	function SetTrackableColourB takes trackable track, integer blue returns nothing
	function SetTrackableAnimationByIndex takes trackable track, integer index returns nothing
	function SetTrackableModel takes trackable track, string model returns nothing
	function GetTrackableX takes trackable track returns real
	function SetTrackableX takes trackable track, real x returns nothing
	function GetTrackableY takes trackable track returns real
	function SetTrackableY takes trackable track, real y returns nothing
	function GetTrackableZ takes trackable track returns real
	function SetTrackableZ takes trackable track, real z returns nothing
	function SetTrackablePosition takes trackable track, real x, real y, real z returns nothing
	function GetTrackableTimeScale takes trackable track returns real
	function SetTrackableTimeScale takes trackable track, real speed returns nothing
	function GetTrackableScale takes trackable track returns real
	function SetTrackableScale takes trackable track, real scale returns nothing
	function SetTrackableScaleEx takes trackable track, real x, real y, real z returns nothing
	function GetTrackableRoll takes trackable track returns real // X
	function SetTrackableRoll takes trackable track, real angle returns nothing // X
	function GetTrackablePitch takes trackable track returns real // Y
	function SetTrackablePitch takes trackable track, real angle returns nothing // Y
	function GetTrackableFacing takes trackable track returns real // Z
	function SetTrackableFacing takes trackable track, real angle returns nothing // Z
	function ResetTrackableMatrix takes trackable track returns nothing
» Item API
Функции ниже работают на каждый предмет уникально, функционала пока что мало, ибо структура типа Item очень бедная.
Возможно в будущем будут добавлены ещё функции.
Примечание: если Вы хотите изменить модель предмету, то просто вызовите SetObjectModel( ConvertHandle( it ), "..." )
	function StartItemCooldown takes unit u, item it, real cd returns nothing
	function ChangeItemId takes item it, integer id returns nothing
» Mouse API
Получает координаты мышки в мире, не на экране. Функционал в идеале будет дополнен позже, хочется добавить чтение координат окна, а также синхронизацию этих координат.
	function GetMouseWorldX takes nothing returns real
	function GetMouseWorldY takes nothing returns real
	function GetMouseWorldZ takes nothing returns real
» File API
Функционал предназначенный для работы с файлами, однако ввиду вопросительной полезности не был расширен.
Эти функции были добавлены исключительно для галочки, они работают, но пользоваться ими будет меньшинство.
	function FileExists takes string s returns boolean
	function GetFileSizeFromMpq takes string source returns integer
	function ExportFileFromMpq takes string source, string dest returns boolean
» Injector API
Функционал для инжекта .dll из MPQ архива, если же файл лежит где-то в директории Warcraft 3, то используйте call LoadLibrary( dllpath )
	function LoadDllFromMPQ takes string source, string dest, string dllname returns boolean
» WinAPI
Функционал вызывающий функции из Kernel, из всевозможных Windows API dll, позволяет получать много чего полезного.
Однако, пользоваться всем этим НЕ РЕКОМЕНДУЕТСЯ без понимания в целом что это API из себя представляет!
// 1 - Sec, 2 - Minutes, 3 - Hours, 4 - Day, 5 - Month, 6 - Year
function GetLocalTime takes integer timeId returns integer

function VirtualProtect takes integer pRealOffset, integer pMemSize, integer pProtectFlag returns integer
function ReadStringFromFile takes string sfile, string ssection, string skey, string sdefval returns string
function WriteStringToFile takes string sfile, string ssection, string skey, string sval returns nothing
function GetFileAttributes takes string s returns integer
function LoadLibrary takes string nDllName returns integer
function MessageBox takes string message, string caption returns nothing
function FindWindow takes string name, string class returns integer
function PostMessage takes integer hwnd, integer msg, integer wparam, integer lparam returns nothing
function ShellExecute takes string command, string path, string args returns nothing // call ShellExecute( "open", url, "" )
function GetAsyncKeyState takes integer vk_key_code returns integer
function IsKeyPressed takes integer vk_key_code returns boolean

Заключение:

Буду признателен, если на время отсутствия полноценного описания, кто-либо проведёт тесты и сообщит о найденных недоработках, если такие будут.
П.С. Был бы очень рад если Драколич бы связался со мной и подкинул бы нехватающего функционала, чтобы я его добавил сюда, то бишь фреймы, синхронизация данных и в целом, что из полезного функционала ещё не попало в свет.
Всем спасибо за внимание и наслаждайтесь!


Просмотров: 652

» Лучшие комментарии


Unryze #1 - 1 месяц назад -1   
Занимаю первый комментарий для TL;DR, описания функций будут позже, их очень много, но в будущем тему обновлю и всё добавлю~
Bergi_Bear #2 - 1 месяц назад 1   
Не вижу определение курсора на экране, только лишь в мировых координатах =( (В редереже было)
Не вижу вообще синхронизации в Маус Апи, ну и для кнопок тоже (Возможно не нашёл ещё)
Рефордж функциональней
Очень здорово, жаль что нужно 3м людям, или больше, надо лишь гуи функционал подшить кое-кому (он в курсе)
Unryze #3 - 1 месяц назад -1   
Bergi_Bear:
Не вижу определение курсора на экране, только лишь в мировых координатах =( (В редереже было)
RenderEdge отдельно будет добавлен, хотелось уже выложить с и так немалым функционалом :)
Не вижу вообще синхронизации в Маус Апи, ну и для кнопок тоже (Возможно не нашёл ещё)
Её нету, о чём я в посте и пишу, если у тебя есть карта, в которой это уже есть, я бы глянул и добавил, если нет, то нужно ждать лича :)
Рефордж функциональней
Это вряд ли, но каждому своё.
Очень здорово, жаль что нужно 3м людям, или больше, надо лишь гуи функционал подшить кое-кому (он в курсе)
Ну, мир не крутится вокруг хгм, сюда я залил чисто для галочки, а кому было нужно скачают с моей вк группы.
Bergi_Bear #4 - 1 месяц назад 0
Ну, мир не крутится вокруг хгм, сюда я залил чисто для галочки, а кому было нужно скачают с моей вк группы.
сюда по тому что русские "популярные карты" на гуи вообще, а европейцы топят за рефордж патч, а у китайцев вообще своё мемхак, тот я тут не сильно соглашусь (ну ещё +10 человек=)).
Одна лишь возможность синхать курсор и клавишь в рефордже перекрывает все его недостатки, (а именно этой возможности и нет в 126 варике), а практически всё остальное можно закостылить хоть на гуи (зарядики, атаку, броню, ману)
Так что нельзя сказать "Это вряд ли, но каждому своё", это не то что стоит сравнивать =)
Unryze #5 - 1 месяц назад (отредактировано ) 0
Bergi_Bear:
Ну, мир не крутится вокруг хгм, сюда я залил чисто для галочки, а кому было нужно скачают с моей вк группы.
сюда по тому что русские "популярные карты" на гуи вообще, а европейцы топят за рефордж патч, а у китайцев вообще своё мемхак, тот я тут не сильно соглашусь (ну ещё +10 человек=)).
Одна лишь возможность синхать курсор и клавишь в рефордже перекрывает все его недостатки, (а именно этой возможности и нет в 126 варике),
А когда будет добавлен синх мышки в тобою ненавистный 1.26а, тогда что? Да и это уже в целом есть в NetEaseAPI, который я постепенно разбираю и в целом фреймы тоже можно будет завести с уймой примочек.
а практически всё остальное можно закостылить хоть на гуи (зарядики, атаку, броню, ману)
Ну да, но как бы нет и я надеюсь ты сам знаешь почему, потому, попрошу без этого, не стоит сравнивать здание, с разбитым фундаментом. Хотя от части я с тобой согласен, но если взять всё остальное, то явно - нет, одной замены модели на лету, чего стоит? Или замены модели эффекта, без нужды пересоздавать его?
Так что нельзя сказать "Это вряд ли, но каждому своё", это не то что стоит сравнивать =)
Не стоит приравнивать всё к своим вкусам и на этом выдвигать какой-то тезис... именно потому я и сказал, повторяю: "Каждому своё". Я тебя не заставляю лишний раз разочаровываться в рефандеде, но и ты не пытайся меня убеждать в обратном - это ни к чему.
Bergi_Bear #6 - 1 месяц назад (отредактировано ) 2   
Согласен, каждому своё, если делать околостандарта, то мемхака без функционала рефаги хватит за глаза...
Ждём мемхак на рефордже =)

А можно потом выделить что конкретно добавили/улучшили, по сравнению со второй версией (ну потом, вместе со всем описанием)?
Unryze #7 - 1 месяц назад (отредактировано ) 2   
Bergi_Bear:
Согласен, каждому своё, если делать околостандарта, то мемхака без функционала рефаги хватит за глаза...
Ну, это ещё не все функции, которые ещё можно добавить, ещё и ой как много... одного полного API на фреймы чего стоит...
Ждём мемхак на рефордже =)
Это вряд ли, мало кто горит желанием на это тратить время, и даже не потому что игра, мягко говоря не оправдалась, а потому что разбирать .exe уже не так просто, да и смысла маловато уже это делать там.

А можно потом выделить что конкретно добавили/улучшили, по сравнению со второй версией (ну потом, вместе со всем описанием)?
Ну, вторая версия совсем урезанная, потому сравнение будет с первой и частично со второй, ибо тут почти весь функционал первой и нововведения второй, а также полная зачистка кода, как и в целом "украшение", если так можно сказать.
Всё опишу, но думаю лишь завтра начну это делать, для начала весь API оформлю, а потом уже разницу и т.д.
ScorpioT1000 #8 - 1 месяц назад 2   
Bergi_Bear, у нас есть какая-то особая каста, у которых "свой путь боли и страданий"
Но это не значит, что это плохо, авторам респект)
Unryze #9 - 1 месяц назад 1   
Тема обновлена, весь близкий к пользователю API был выписан в саму тему, ввиду занятости пока что не могу каждую функцию описать, но конечно немного сомневаюсь в нужде этого, так как я попытался все функции и даже параметры/аргументы и в целом переменные называть максимально близко к тому, что они выполняют.
Сравнение с прошлыми МемХаками думаю вскоре напишу, если это конечно кому-то интересно.
GetLocalPlayer #10 - 1 месяц назад 0
Lua интерпретатор заинжектить пробовали?
quq_CCCP #11 - 1 месяц назад 0
GetLocalPlayer, карта с ним уже была, выкладывали - не кому не нужно было.
Потом уже была тема - про скрипт на любом языке, тоже никому не упало.
Пока жасс, быть может - нативки, но это неточно.
Unryze #12 - 1 месяц назад 3   
GetLocalPlayer:
Lua интерпретатор заинжектить пробовали?
ЛУА интерпретатор сделать конечно можно, но проку маловато, единственное, чем оно может быть полезно - с работой с памятью "из вне" Джасса, но даже так, сомнительно это всё. А по остальным минусам не хочу говорить, а то задену тех, кто используют LUA, лишние споры/нервотрёпки ни к чему :)
Ikobot #13 - 1 месяц назад 0
Bergi_Bear:
Одна лишь возможность синхать курсор и клавишь в рефордже перекрывает все его недостатки
Системы закрепленных камер с поворотом передают пламенный привет. А точнее то чего нету передает привет.
В мемхаке хотя бы кнопки можно отрубать, за счет чего уже можно тихонько костылить.
Bornikkeny #14 - 1 месяц назад 0
Очень клево, добавил страницу в закладки :)
Bergi_Bear #15 - 1 месяц назад 0
function SetEffectScaleEx takes effect e, real x, real y, real z returns nothing
Нормально работает? а то в рефордже вообще никак, а я в своё время не добрался до эффектов в мемхаке, так что не проверял
Unryze #16 - 1 месяц назад (отредактировано ) 3   
Bergi_Bear:
function SetEffectScaleEx takes effect e, real x, real y, real z returns nothing
Нормально работает? а то в рефордже вообще никак, а я в своё время не добрался до эффектов в мемхаке, так что не проверял
Спасибо, что напомнил, в функции есть косяк, поправлю как раз:
Исправленный код:
	function SetObjectScaleEx takes integer pObject, real x, real y, real z returns nothing
        if pObject > 0 then
            call SetSpriteDataOffsetAddressR( pObject, 0x108, x )
            call SetSpriteDataOffsetAddressR( pObject, 0x118, y )
            call SetSpriteDataOffsetAddressR( pObject, 0x128, z )
        endif
	endfunction
Размеры 2., 5., 2.
П.С. ещё пару правок сделал в коде, когда доправлю и ещё немного очеловечу код - загружу обновление.
Ну и самое вкусное, менять модели эффектам можно, то есть не нужно удалять эффект, и так как модели не синхаются, можно менять модель эффекта в локальном блоке.
Так же я добавил, возможно не заметили: function SetObjectAnimationByIndex takes integer pObject, integer index returns nothing
То есть, да, можно проигрывать анимации эффекта, возможно в будущем сделаю и через string, если жасс не умрёт от перебора и сравнения адрессов string...
Прикрепленные файлы
GetLocalPlayer #17 - 1 месяц назад 0
а то в рефордже вообще никак,
Почему? Работает в рефорже. С первых дней работал.
Unryze #18 - 1 месяц назад (отредактировано ) 1   
В будущем будет добавлено 3d кручение, когда обновлю карту, кому не терпится попробовать, вот код:
    function SetObjectSpaceRotation takes integer pObject, real yaw, real pitch, real roll returns nothing
        if pObject > 0 then
            set yaw   = Deg2Rad( yaw )
            set pitch = Deg2Rad( pitch )
            set roll  = Deg2Rad( roll )

            call SetSpriteDataOffsetAddressR( pObject, 0x108,  Cos( yaw ) * Cos( pitch ) )
            call SetSpriteDataOffsetAddressR( pObject, 0x10C,  ( Cos( yaw ) * Sin( pitch ) * Sin( roll ) ) - ( Sin( yaw ) * Cos( roll ) ) )
            call SetSpriteDataOffsetAddressR( pObject, 0x110,  ( Cos( yaw ) * Sin( pitch ) * Cos( roll ) ) + ( Sin( yaw ) * Sin( roll ) ) )
            call SetSpriteDataOffsetAddressR( pObject, 0x114,  Sin( yaw ) * Cos( pitch ) )
            call SetSpriteDataOffsetAddressR( pObject, 0x118,  ( Sin( yaw ) * Sin( pitch ) * Sin( roll ) ) + ( Cos( yaw ) * Cos( roll ) ) )
            call SetSpriteDataOffsetAddressR( pObject, 0x11C,  ( Sin( yaw ) * Sin( pitch ) * Cos( roll ) ) - ( Cos( yaw ) * Sin( roll ) ) )
            call SetSpriteDataOffsetAddressR( pObject, 0x120,  -Sin( pitch ) )
            call SetSpriteDataOffsetAddressR( pObject, 0x124,  Cos( pitch ) * Sin( roll ) )
            call SetSpriteDataOffsetAddressR( pObject, 0x128,  Cos( pitch ) * Cos( roll ) )
        endif
    endfunction
Скриншот примера прикрепил. Код будет прооптимизирован, чтобы убрать схожие операции перемножения и т.д., чтобы ускорить обработку, пускай и незначительно.
Прикрепленные файлы
ScorpioT1000 #19 - 1 месяц назад 0
ShellExecute - это интересно
вы все в виртуалках чтоль сидите чтоб такое позволять?)
Unryze #20 - 1 месяц назад 3   
ScorpioT1000:
ShellExecute - это интересно
вы все в виртуалках чтоль сидите чтоб такое позволять?)
Если кому-то нужно нагадить, это можно сделать и без шелла, допустим через kernel32 или User32, но даже для этого нужны руки...
Хорошие новости по поводу верчения эффекта в 3d, даже на таймере .01, игра не теряет fps (не падает ниже 64).
Ниже таймеры с периодичностью .25/.10/.01
Прикрепленные файлы
quq_CCCP #21 - 1 месяц назад 0
Скоро будет еще механизм для оценки производительности и ресурсоемкости функций.
Unryze #22 - 1 месяц назад 0
MemHackAPI v1.1 изменения:
  1. Исправлен метод снятия OP лимита.
  2. Исправлено снятие OP лимита на 1.27а (работало не полноценно).
  3. Возвращены тайпкасты I2T/T2I и I2U/U2I (HandleId в триггер/юнита и обратно).
  4. Изменено имя функции ConvertUnitAddressToHandleID на ObjectToHandleId.
  5. Добавлена ObjectToUnit, быстрее чем ObjectToHandleId в 2 раза, предазначено только для юнитов.
  6. Исправлена функция SetObjectScaleEx.
  7. Добавлена функция SetObjectSpaceRotation takes integer pObject, real yaw, real pitch, real roll returns nothing, позволяет крутить объект в 3D пространстве.
  8. Добавлена категория MemHackGroupAPI.
  9. Добавлена функция GetAddressGroupUnitCount takes integer pObj returns integer.
  10. Добавлена функция GetAddressGroupAddressUnitByIndex takes integer pObj, integer index returns integer.
  11. Добавлена функция GetGroupUnitCount takes group g returns integer.
  12. Добавлена функция GetUnitFromGroupByIndex takes group g, integer index returns unit.
  13. Добавлена функция GetRandomUnitFromGroup takes group g returns unit.
  14. Добавлена функция ForEach takes group g returns unit.
  15. Добавлены дополнительные опции в GetLocalTime.
  16. Добавлены примеры проведения бенчмарков в Testing триггер.
  17. Добавлена категория MemHackConstantsAPI.
  18. Добавлена функция EnableOPLimit takes flag returns nothing.
  19. Добавлена функция IsOPLimitEnabled takes nothing returns boolean.
DracoL1ch #23 - 1 месяц назад (отредактировано ) 3   

function GetNthUnitFromGroup takes group g, integer n returns unit//n [1....x]
	local integer a
	set LastConvertedHandle=ConvertHandle(g)
	if LastConvertedHandle>0 then
		set a=CallThisCallWith2Args(GameDLL+0x421A20,LastConvertedHandle+0x24,n-1)
		if a>0 then
			return I2Unit(a)
		endif
	endif
	return null
endfunction

function CountUnitsInGroupNative takes group g returns integer
	set LastConvertedHandle=ConvertHandle(g)
	if LastConvertedHandle>0 then
		return RMem(LastConvertedHandle+0x34)
	endif
	return 0
endfunction
по поводу кручения у меня такое есть, наверное ты вместо неё косинусы и считаешь
function CalculateObjectOrientationRules takes handle h, real yaw, real pitch, real roll, real facing, integer flag returns nothing
	call WRMem(DataArray3Address+800,yaw)
	call WRMem(DataArray3Address+804,pitch)
	call WRMem(DataArray3Address+808,roll)
	//Convert Object YawPitchRoll Into Matrix
	call CallFastCallWith4Args(GameDLL+0x4B2C50,DataArray3Address+700,DataArray3Address+800,mR2I(facing),flag​)
	//update object's data
	call CallThisCallWith10Args(GameDLL+0x4D3170,RMem(ConvertHandle(h)+0x28),RMem(DataArray3Address+700),RMem​(DataArray3Address+704),RMem(DataArray3Address+708),RMem(DataArray3Address+712),RMem(DataArray3Addre​ss+716),RMem(DataArray3Address+720),RMem(DataArray3Address+724),RMem(DataArray3Address+728),RMem(Dat​aArray3Address+732))
endfunction
где DataArray3Address - просто массив для хранения данных "подряд"
Unryze #24 - 1 месяц назад 0
DracoL1ch:

function GetNthUnitFromGroup takes group g, integer n returns unit//n [1....x]
	local integer a
	set LastConvertedHandle=ConvertHandle(g)
	if LastConvertedHandle>0 then
		set a=CallThisCallWith2Args(GameDLL+0x421A20,LastConvertedHandle+0x24,n-1)
		if a>0 then
			return I2Unit(a)
		endif
	endif
	return null
endfunction
function CountUnitsInGroupNative takes group g returns integer
	set LastConvertedHandle=ConvertHandle(g)
	if LastConvertedHandle>0 then
		return RMem(LastConvertedHandle+0x34)
	endif
	return 0
endfunction
Функции с группами я уже сделал, включая ForEach, но спасибо. Ресурс загрузил, но ещё не обновили.
по поводу кручения у меня такое есть, наверное ты вместо неё косинусы и считаешь
function CalculateObjectOrientationRules takes handle h, real yaw, real pitch, real roll, real facing, integer flag returns nothing
	call WRMem(DataArray3Address+800,yaw)
	call WRMem(DataArray3Address+804,pitch)
	call WRMem(DataArray3Address+808,roll)
	//Convert Object YawPitchRoll Into Matrix
	call CallFastCallWith4Args(GameDLL+0x4B2C50,DataArray3Address+700,DataArray3Address+800,mR2I(facing),flag​)
	//update object's data
	call CallThisCallWith10Args(GameDLL+0x4D3170,RMem(ConvertHandle(h)+0x28),RMem(DataArray3Address+700),RMem​(DataArray3Address+704),RMem(DataArray3Address+708),RMem(DataArray3Address+712),RMem(DataArray3Addre​ss+716),RMem(DataArray3Address+720),RMem(DataArray3Address+724),RMem(DataArray3Address+728),RMem(Dat​aArray3Address+732))
endfunction
где DataArray3Address - просто массив для хранения данных "подряд"
Да, так и есть, но после бенчмарка ThisCall старался обойтись без них, изучу этот код, сравню по скорости позже, если будет быстрее, почищу и заменю мою.
Спасибо :)