XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Закрытая тема
 
Goodie

offline
Опыт: 2,825
Активность:
Как подменить нативку?
я знаю что есть такая штука, можно подменять нативку либо дополнять их. Хук вроде.
Вобщем мне нужно чтобы вместо GetKillingUnit() появлялась моя переменная. Как это реализовать?
Старый 08.05.2013, 19:47
IceFog

offline
Опыт: 6,486
Активность:
Ты хочешь, чтоб эта функция возвращала твою переменную?
А почему свою функцию написать не можешь? Или напрямую к ней обращаться?
Старый 08.05.2013, 20:35
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
unit UnitEx
#define GetKillingUnit() UnitEx
Clamp добавил:
А вообще за такие тупые вопросы надо ввести предупреждения, всё есть в cJass мануале.
Старый 08.05.2013, 21:17
Goodie

offline
Опыт: 2,825
Активность:
Clamp, У меня переменная массив. забыл написать. так бы я давно юзал как делать нечего
есть такая штука hook называется, только вот как ей пользоваться и поможет ли мне она я не знаю
((код jass
unit SomeUnits[]
define <GetKillingUnit()> = SomeUnits[GetPlayerId(GetOwningPlayer(GetKillingUnit()))]
))
так нельзя. У меня кричит все в редакторе
вот еще
((код jass
hook GetKillingUnit GetKillingUnitZZ

unit GetKillingUnitZZ(){
BJDebugMsg("Hello World!")
return SomeUnits[GetPlayerId(GetOwningPlayer(GetKillingUnit()))]
}
/* void GetKillingUnitZZ(){
BJDebugMsg("Hello World!")
}*/
))
Та что сверху GetKillingUnitZZ даст вылет из игры при убийстве, а та что снизу, ничего не дает, как обычно сообщение, просто выполняется
Буду еще пополнять новостями, может решим проблему
Дефайн я кстати скомментил
Goodie добавил:
Проблему решил
Создал дефайн:
((код jass
define <GetKillingUnit()> = GetKillingUnitZZ()
))
и функция готовая:
((код jass
unit GetKillingUnitZZ(){
ID++
BJDebugMsg(I2S(ID))
return SomeUnits[GetPlayerId(GetOwningPlayer(GetKillingUnit()))]
}
))
Никакого хука и так далее. Только вот...Где я прибавляю ID там числа по 800 по 1500 по 4000, почему?
Goodie добавил:
А нет, проблема не решилась
Goodie добавил:
Я не знаю что делать, помогите
Старый 08.05.2013, 23:18
IceFog

offline
Опыт: 6,486
Активность:
У меня работает, а значит проблема у тебя в коде.
Тебе поможет только отладка .
Старый 08.05.2013, 23:38
Goodie

offline
Опыт: 2,825
Активность:
IceFog, Покажи свой код, а не слова на ветер, хотябы половину
Goodie добавил:
Логично же что я там ступил где я написал проблему решил. я заменяю GetKillingUnit() на другую функцию с использованием GetKillingUnit() вот те и ошибка
Хотя все работало и я даже запускал
Старый 09.05.2013, 00:11
IceFog

offline
Опыт: 6,486
Активность:
» спойлер
    define <GetKillingUnitEx()> = SomeUnits[GetPlayerId(GetOwningPlayer(GetKillingUnit()))]  
    
globals
    unit array SomeUnits
endglobals

function Test takes nothing returns nothing
    call KillUnit(GetKillingUnitEx())
endfunction

function Init takes nothing returns nothing
    set SomeUnits[0] = gg_unit_Hblm_0001
endfunction

function InitTrig_Test takes nothing returns nothing
    set gg_trg_Test = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Test, EVENT_PLAYER_UNIT_DEATH )
    call TriggerAddAction( gg_trg_Test, function Test )
    call TimerStart( CreateTimer(), 0.00, false, function Init )
endfunction
Когда я (игрок 1) убивал кого либо, юнит в переменной умирал.
Старый 09.05.2013, 00:34
Goodie

offline
Опыт: 2,825
Активность:
У тебя все не так...
Мне нужно GetKillingUnit() поменять на другое. Вникаешь? на SomeUnits[GetPlayerId(GetOwningPlayer(GetKillingUnit()))]
Старый 09.05.2013, 00:48
IceFog

offline
Опыт: 6,486
Активность:
А чем этот вариант тебе не подходит?
Старый 09.05.2013, 00:59
adic3x

offline
Опыт: 108,439
Активность:
#define <GetKillingUnit()> = SomeUnits[GetPlayerId(GetOwningPlayer(GetKilling##Unit()))]
Ведь так сложно дочитать абзац до конца.
ADOLF добавил:
Обратите внимание, что внутри макроса вызов перехватываемой функции записан с использованием оператора склеивания строк. Делается это для того, чтобы парсер не принимал данный вызов функции как вызов макроса и не заменял его при обработке.
Старый 09.05.2013, 01:36
Закрытая тема

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 18:37.