32

» WarCraft 3 / как написать *.mix камерахак? zoom

Мне непонятно, зачем? Этих камхаков 100500 сортов, для того же айкапа есть, почти все мх идет с камхаком, опции чита отруби и юзай как камхак, ептить проблема то..
32

» WarCraft 3 / Айсикап

Нужно написать автору этой программы, он здесь на хгм есть, он сделает фикс...
32

» IrInA Host Bot / Вылет из игры

Лог ошибки в студию, то причин фаталов может быть много.
32

» WarCraft 3 / Открытая виртуальная машина

IceFog, все продолжаешь делать апграйды вара, с анрайзом что-ли скопирируйтесь и сделайте нам новый сервер для игры в варик со всеми плюшками =)
32

» WarCraft 3 / Исправления ВОЛНЫ АТАКИ

Делать нормальную систему движения юнитов, если это 1 коридор, если это более сложная карта где юнитам нужно найти врага - пишем свой ИИ на эту тему.
32

» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?

Тут дело в том что от игры к игре это время рандомно, бывают случаи что синх длится секунд 5, то вовсе игроки таки отваливаются.
32

» WarCraft 3 / как присвоить локальные значения игрока в глобальные переменные?

В jass есть gamecache (кешь) и набор функций для его работы, в нем есть функции для синхронизации сохраненных в кешь данных между игроками, синхронизация кеша производится только в потоке триггера, и синхронизация не мгновенная, может понадобится несколько секунд.
Вот именно для синхронизации и нужны TriggerSleepAction и gamecache.
На сайте полно примеров работы с кешем, а так же статей по сихронизации.
32

» WarCraft 3 / Хэш-таблицы

Принятый ответ
Ну как насчет хотябы ошибки устранять и немного подумать:
function Delete_Destructable takes nothing returns nothing
    local timer t = GetExpiredTimer()                  //Наш таймер - истёкший
    local integer h = GetHandleId(t)                   //Узнаём id таймера
    local integer i = 1
   
   loop
        exitwhen i > 10
        call KillDestructable(LoadDestructableHandle(hash,h,i))
        set i = i + 1
    endloop
    
    call DestroyTimer(t) //Уничтожаем таймер
    //Очищаем хеш-таблицу, чтобы избежать утечек и наложений
    call FlushChildHashtable(hash,h) //Очищаем ключ по id
    
    //Не забываем устранять утечки
    set t = null
endfunction
 
function Hashtable_Actions takes nothing returns nothing
    local unit Caster = GetSpellAbilityUnit()
    local real cx 
    local real cy
    local timer t = CreateTimer()
    local integer id = GetHandleId(t)
    local integer i = 1
    local destructable d
    
    if GetSpellTargetUnit() == null then
        set cx = GetSpellTargetX()
        set cy = GetSpellTargetY()
    else
        set cx = GetUnitX(GetSpellTargetUnit())
        set cy = GetUnitY(GetSpellTargetUnit())
    endif
    loop
        exitwhen i > 1
            set d = CreateDeadDestructable('LTlt',cx + 200.00 * Cos( i * 0.6285708 ), cy + 200.00 * Sin( i * 0.6285708 ), 36.00 * i, 1.00, GetRandomInt(1, 10))
            call SetDestructableAnimation(d,"birth")
            call SaveDestructableHandle(hash, id, i, d )
            call SetDestructableLife( d, I2R(GetHeroStatBJ(bj_HEROSTAT_INT, Caster, true)) )
        set i = i + 1
    endloop

    call TimerStart(t, 10.00, false, function  Delete_Destructable)
    set Caster = null
    set t = null
    set d = null
endfunction

function Hashtable_Cond takes nothing returns boolean
    return GetSpellAbilityId() == 'A014'
endfunction

//===========================================================================
function InitTrig_Hashtable takes nothing returns nothing
    local trigger ForestKeeperTrees = CreateTrigger()
    local integer index = 0
    loop
        exitwhen index > 12
        call TriggerRegisterPlayerUnitEvent(ForestKeeperTrees,Player(index),EVENT_PLAYER_UNIT_SPELL_CAST,null)
        set index = index + 1
    endloop
    call TriggerAddCondition( ForestKeeperTrees, Condition(function Hashtable_Cond) )
    call TriggerAddAction( ForestKeeperTrees, function Hashtable_Actions )
    set ForestKeeperTrees = null
endfunction
  1. нафига лишние действия и лишние переменные, будь проще.
  2. нахрена тебе упали локейшены, все делается без них.
  3. утечки, еще раз утечки... обнулять то хендлы кто будет, кастер, таймер, дерево - это все требует обнуления.
  4. Ты забываешь что останутся пеньки после смерти деревьев, нужно доработать код чтобы они исчезали.
32

» WarCraft 3 / Утечки?

Нахрена вам области, что мешает узнать в редакторе координаты и занести их в массив и спаунить юнитов по координатам?
32

» WarCraft 3 / Как сделать пассивную способность активной?

Сделать кастомный аналог, и никак больше, механику работы дефолтных способностей варкравта изменить никак нельзя, пассива ауры возмездия так и будет аурой возмездия, и точка. Собственно опишите подробнее, что вы собрались делать?
32

» WarCraft 3 / IssueImmediateOrderById

Код в студию, приказ способности можно узнать банальным дебагом, просто триггер с событием юнит отдал приказ, и дебаг сообщением с номером приказа, берем юзаем свиток защиты ручками и смотрим.
32

» WarCraft 3 / Адресса кнопок

Принятый ответ
Varzik, в мемхаке есть, 'Amov' называется, она как и прочие базовые абилки лежит по одному и тому же оффсету от адреса юнита.
/pointer to 'Amov' is located at offset 123 of unit object, Aatk is at offset 122, and AInv is offset 124

//Hides all command buttons and sets the Ward flag. Unit will keep its current order, and player can’t give new orders
//Notice the the unit can’t be ordered with triggers as well. To issue an order you need to temporarily reenable control
function DisableUnitControl takes unit u returns nothing
	local integer pUnit = ConvertHandle(u)
	local integer flags
	local integer Amov
	local integer Aatk
	local integer AInv
	if pUnit > 0 then
		set flags = RMem(pUnit+0x248)
		set Amov = RMem(pUnit+0x1EC)
		set Aatk = RMem(pUnit+0x1E8)
		set AInv = RMem(pUnit+0x1F8)
	//	call echo("disabled on "+GetUnitName(u))
		if not IsFlagBitSet(flags,512) then
			call WMem(pUnit+0x248, flags + 512)
		endif
		if Amov >0 then
			call WMem(Amov+0x40, RMem(Amov+0x40) + 1)
		endif
		if Aatk >0 then
			call WMem(Aatk+0x40, RMem(Aatk+0x40) + 1)
		endif
		if AInv >0 then
			call WMem(AInv+0x3C, RMem(AInv+0x3C) + 1)
		endif
		
	endif
endfunction
32

» WarCraft 3 / KillUnit

DazzleFirst, только не так, удаляешь неуязвимость и все астралы и наносишь несколько тысяч единиц физического урона, тогда цель наверняка умрет.
32

» WarCraft 3 / Нанесение урона триггерным способом

В игре одна функция нанесения урона -
UnitDamageTarget - её юзает что jass что остальная игра, все абилки и атаки юнитов. Ты указываешь кто источник урона а кто цель, какого количество этого урона, является урон атакой ближнего боя, или дальнего, а так же тип атаки, тип урона, тип оружия. Если источник урона еще существует в игре на момент смерти другого юнита от этого урона, то убийца будет источник этого урона.
Насчет подсчетов - непонял, а что вы там считаете и как?
32

» WarCraft 3 / Отслеживание статуса выполнения приказа юнита

Ну вот, тут код без сжатия имен, и все имена функуций и переменных на месте, отлично подъходит для изучения, эта версия доты без правки вряд-ли взлетит на 1.26а, но оно и не нужно, открываем и изучаем ИИ код, как проверяется может ли кастануть скилл юнит, и кастует ли он его в данный момент.
Загруженные файлы
32

» WarCraft 3 / Как восстановить триггеры

Начин, ну а что ты забыл тогда в чужой карте, меня это убивает, нет ну я ниче незнаю и не понимаю, то точно знаю что сделал бы карту лучше (нет), прежде чем что то собираться делать неплохо бы поучится, а еще есть карты которые изначально пишутся на jass и там привычных вам триггеров нету, и код весьма сложен, тот же пудж варс взять. Поэтому берем и учимся, за все все ваши хотелки никто не сделает, не говоря про то что если у тебя будет уровень чуть выше среднего - тебе не усрется ни одна чужая карта, сам сел и сделал с нуля за недельку, просто посмотрев что и как в игре работает.
Потом будьте оригинальны, сделайте что то свое, подсмотреть некоторые идеи у других, не стыдно, стыдно ломать чужие карты.