Добавлен , опубликован
Алгоритмы, Наработки и Способности
Способ реализации:
vJass
Тип:
Наработка
Версия Warcraft:
1.26 и ниже
Собственно тот знаменитый хак на память который нам радостно предоставил DracoL1ch, который позволяет нам больше не морочится с системами отлова урона, или вовсе узнать координаты курсора без стороннего по.
Для сохранения требуется: экспериментальная версия pjass.exe
Причём не все подходят, меньше всего проблем было с этой версией
В хаке присутствует только 1 пример на изменение белой атаки у героя, остальные готовые функции можно найти на:
Хайве
Гитхабе
Просто копируем саму функцию, все остальное для её работы есть в наработке и сохраняем.
Так же на хайве есть инструкция по созданию собственных функций для чтения\изменения данных в памяти игры.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
6
7 лет назад
0
Но в игре существует ограничение на количество приказов, не знаю как его убрать. Если отправить в секунду где-то 30 пакетов, то игрок отправивший их не сможет ничего делать где-то несколько секунд.
Лимит отрубается у хоста...
в ghost боте это реализуется вроде как
0
2
7 лет назад
Отредактирован karaulov
0
Нет, даже в локальной игре такой лимит есть.
Это скорее лимит на отправку чем на прием
Dracol1ch не обновлял код на github/hive по этому там нет кода на отправку и прием своих пакетов, может он обновит незнаю)
0
32
7 лет назад
0
Alexander12:
Но в игре существует ограничение на количество приказов, не знаю как его убрать. Если отправить в секунду где-то 30 пакетов, то игрок отправивший их не сможет ничего делать где-то несколько секунд.
Лимит отрубается у хоста...
в ghost боте это реализуется вроде как
У хост игра почти что своя игра, для эмитации игрока и прочего, ему и game.dll ненужен, правда все зависит от самого бота и того кто его писал.
0
21
7 лет назад
Отредактирован ClotPh
0
Есть герой Психопомпа.
Из-за его способностей происходит следующее:
  • Каждый раз, когда любой герой кастует любой спелл и его перезарядка больше 1, перезарядка первой абилы Психопомпы приравнивается к перезарядке этой скастованной абилы, а манакост - к перезарядке этой абилы, умноженной x3/x4/x5/x6/x7 по лвлу прокачки.
  • Каждый раз, когда любой герой кастует любой спелл не-предмета и его перезарядка больше 1, Психомомпа ресает ману в 4 * перезарядка скастованной способности * уровень этой своей способности.
  • Каждый раз, когда любой герой кастует любой спелл не-предмета и его перезарядка больше 1, Психомомпа ресает здоровье в перезарядка скастованной способности * уровень этой своей способности.
Иногда (НЕ после каждой игры, но иногда) по выходу из вара происходит фатал.
Есть предположения о причинах? Или это само по себе потому, что постоянно передрачивается перезарядка способности и ее манакост?
КСТАТИ. У абилы не 10 лвлов, а 5, это "предусмотрительный" ифзенэлс из другого триггера. Так что loop каждый раз пытается вписать по 5 манакостов и перезарядок в первом триггере на несуществующие уровни абилы. Мб в этом причина??? Но почему тогда фатал иногда есть, а иногда не? Ну это я в люб. случае исправлю потом, главное, не забыть.
Коды ниже (триги, вызывающие эти функции, реагируют на каст любой абилы любым героем)
function MadBreathParametersChange takes nothing returns nothing
local integer i = 11
local real newcd = GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()))
if (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
ЗАДАЕМ ПЕРЕЗАРЯДКУ И МАНАКОСТ БЕЗУМНОГО ДЫХАНИЯ, УРОН УЖЕ ОТ НИХ ПОТОМ
loop
exitwhen i < 1
set i = i-1
call SetAbilityCD ('A27Q', i, newcd)
call SetAbilityManaCost('A27Q',i,R2I(GetAbilityCD('A27Q',i) * (2 + i)))
endloop
ЗАДАЕМ ПЕРЕЗАРЯДКУ И МАНАКОСТ БЕЗУМНОГО ДЫХАНИЯ, УРОН УЖЕ ОТ НИХ ПОТОМ - ЗАКРЫТО.
else
endif
endfunction
function DelicacyEffect takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
local unit u5
local group herounits = GetUnitsInRectAll(GetPlayableMapRect())
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ МАНУ
loop
set u5=FirstOfGroup(herounits)
exitwhen u5==null
call GroupRemoveUnit(herounits,u5)
if ( GetUnitAbilityLevelSwapped('A27S', u5) >= 1 ) then
call SetUnitState(u5, UNIT_STATE_MANA, GetUnitState(u5, UNIT_STATE_MANA) + 4 * GetUnitAbilityLevelSwapped('A27S',u5))
else
endif
endloop
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ МАНУ - ЗАКРЫТО.
else
endif
call DestroyGroup (herounits)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
set u5 = null
set herounits = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
function PerceptionEffect takes nothing returns nothing
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
local unit u5
local group herounits = GetUnitsInRectAll(GetPlayableMapRect())
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
if ( GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit()) >= 1 ) and (GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) >= 1) then
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ ЗДОРОВЬЕ
loop
set u5=FirstOfGroup(herounits)
exitwhen u5==null
call GroupRemoveUnit(herounits,u5)
if ( GetUnitAbilityLevelSwapped('A27T', u5) >= 1 ) then
call AddSpecialEffectTargetUnitBJ( "overhead", u5, "Psychopomp4.mdl" )
call ConditionalTriggerExecute( gg_trg_destroyspeceffect )
call SetUnitState(u5, UNIT_STATE_LIFE, GetUnitState(u5, UNIT_STATE_LIFE) + GetAbilityCD(GetSpellAbilityId(), GetUnitAbilityLevelSwapped(GetSpellAbilityId(), GetTriggerUnit())) * GetUnitAbilityLevelSwapped('A27T',u5))
else
endif
endloop
ИЩЕМ СРЕДИ ГЕРОЕВ ТЕХ, У КОГО ЕСТЬ ПАССИВКА И ДОБАВЛЯЕМ ЗДОРОВЬЕ - ЗАКРЫТО.
else
endif
call DestroyGroup (herounits)
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ: u5, herounits
set u5 = null
set herounits = null
ВНИМАНИЕ!!! ОБНУЛЯЕМЫЕ ПЕРЕМЕННЫЕ ЗДЕСЬ СПИСКОМ - НОВЫЙ ШАБЛОН СОВЕРШЕНСТВА, ВСЕ ТЕСТКАРТЫ БЕЗ ОНОГО БУДУТ УДАЛЕНЫ - ЗАКРЫТО
endfunction
0
32
7 лет назад
Отредактирован quq_CCCP
0
Функция установки видимости модели юнита в тумане войны
function SetAlwaysVisibleFlag takes unit u, boolean flag returns nothing
    local integer a = ConvertHandle( u )
    if a > 0 then
        if flag and not IsFlagBitSet( ReadMemory( a + 0x20 ), 0x10 )  then
            call WriteMemory( a + 0x20, ReadMemory( a + 0x20 ) + 0x10 )
        elseif IsFlagBitSet( ReadMemory( a + 0x20 ), 0x10 ) then
            call WriteMemory( a + 0x20, ReadMemory( a + 0x20 ) - 0x10 )
        endif
    endif
endfunction
При значении true модель юнита будет видна в тумане войны всегда, при false только если он будет обнаружен.
Не дает возможность выделить юнита, навести целевой навык и тому подобное.
Анимации юнита видны.
0
21
7 лет назад
0
А что там про лимиты на мс, если не секрет? Ломаются глобально для всех или для конкретной единицы? Сразу рабочие функции увидеть реально?
2
16
7 лет назад
2
и так и так, со своими недостатками каждый. функции нет рабочей, просто копал и знаю
0
21
7 лет назад
0
Ну если будут и если не жалко будет, то спасибо скажу за выкладывание их сюда (хотя сейчас не самое важное).
4
5
7 лет назад
4
ClotPh просил, выложу тут архив с MemoryHack, который я смог собрать. Если будет нужно, буду обновлять по возможности. Можно писать в лс, что поправить или добавить
0
30
7 лет назад
0
Позицию курсора отловить возможно?
Ну или как-то эмулировать клик мышкой, тоже сойдёт?
0
32
7 лет назад
Отредактирован quq_CCCP
0
Clamp:
Позицию курсора отловить возможно?
Ну или как-то эмулировать клик мышкой, тоже сойдёт?
Да, в начале темы было про это, кооринаты мыши ловить можно, но увы для сингла не очень, синхронизация не мгновенная.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.