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

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

Закрытая тема
 
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
cJass question
С помощью дефайнов и систем, сделал удобной формат для работы со способностями:
» пример

Код:
scope Kynai initializer Init

SpellData
    SPELL_RANG = E
    SPELL_ID = 'A000'
    SPELL_DUMMY_MODEL = "Kunai.mdl"
    SPELL_MODEL_SIZE = 1.0
    SPELL_DUMMY_COUNT = 5
    SPELL_SPEED = 30.0
    SPELL_ANG_AUTO = true
    SPELL_ANG_1 = 5.
    SPELL_ANG_2 = 0.
    SPELL_TIME = 1.0
    IS_REMOVE = true
    IS_DAMAGER = true
    IS_SHELL = true
    SPELL_DAMAGE = 200.0
    DAMAGE_TYPE = TAI
    DAMAGE_RANGE = 100.0
EndSpellData

SpellActions
    CreateMovingSpell()
EndSpellActions

endscope


Необходимо сделать так, что бы после компиляции было не:

Код:
// данная функция будет добавлена после компиляции.
function Kynai__Conditions takes nothing returns boolean
return ( GetSpellAbilityId() == SPELL_ID )
endfunction


А значение: SPELL_ID, т.е. что бы было так:

Код:
function Kynai__Conditions takes nothing returns boolean
return ( GetSpellAbilityId() == 'A000' )
endfunction


Код:
#define
{
    SPELL_ID = 'A000'
}


Нельзя, т.к. этот параметр перезаписывается.

В общем жду идей, предложений, адольфа, диода.
Старый 27.07.2011, 22:55
DotaMaster666
Silenced by GadenbIsh
offline
Опыт: 1,259
Активность:
Я например ничего не понял, можно показать весь код со всеми макросами?
Старый 28.07.2011, 11:07
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Нужно просто что бы вместо переменной было вписано значение которое содержит данная переменная ._.
Старый 28.07.2011, 12:08
DotaMaster666
Silenced by GadenbIsh
offline
Опыт: 1,259
Активность:
Если речь о именно о переменной - ее значение во время сохранения карты узнать не возможно (если это не константа), если это константа - то ее заменит оптимизатор векса на ее значение (в адике пока это не реализовано) или же ее надо делать макроопределением, собственно как и написано у Вас - #define SPELL_ID = 'A000'.
Старый 28.07.2011, 12:50
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Так и знал что над просить адольфа прикрутить подобную функцию...
Старый 28.07.2011, 13:16
DotaMaster666
Silenced by GadenbIsh
offline
Опыт: 1,259
Активность:
Ну, перед тем, как просить, надо хотя бы толково расписать, что именно нужно, возможно это уже реализовано)
Старый 28.07.2011, 19:27
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от DotaMaster666
Ну, перед тем, как просить, надо хотя бы толково расписать, что именно нужно, возможно это уже реализовано)


Я думаю ему будет понятно.
Старый 28.07.2011, 19:38
Clamp
Lost in space
offline
Опыт: 71,158
Активность:
Faion, не доходит, что он не понял?
Старый 28.07.2011, 19:48
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от Clamp
Faion, не доходит, что он не понял?

С помощью #define{} свернуто :

Код:
function Kynai__Conditions takes nothing returns boolean
return ( GetSpellAbilityId() == SPELL_ID )
endfunction


Т.е. этот код добавляется в спелл после обработки предпроцессором.

SPELL_ID не является константой и содержится внутри всех спеллов.

Мне нужно что бы после компиляции вместо SPELL_ID, на его месте был параметр который содержит глобалка, т.е. так:

Код:
function Kynai__Conditions takes nothing returns boolean
return ( GetSpellAbilityId() == 'A000' )
endfunction


Если внимательно прочитать вышеописанное, то станет ясно, что задефайнить SPELL_ID нельзя, т.е. нужен какой то другой способ.

Faion добавил:
Сейчас попробую пошаманить с setdef\undef
Старый 28.07.2011, 20:04
J64_

offline
Опыт: 4,724
Активность:
вроде для себя делал так
struct xdata{
    xunit cu1,cu2
    int ci1,ci2,ci3,ci4
    real cr1,cr2,cr3,cr4
}

scope spell_awadakeadawa{
    define{
        private <SPELL_ID> = 'A000'
        private <caster> = cu1
        private <x> = cr1
        private <y> = cr2
    }
    public void Action(){
        xdata d = xdata.Create()
        d.caster = GetTriggerUnit()
        d.x = GetUnitX(d.caster)
        d.y = GetUnitY(d.caster)
    }
    public void Init(){
        PreloadAbilityFunction(ABILITY_ID)
    }
}
Старый 03.08.2011, 23:44
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Цитата:
Сообщение от Faion
Если внимательно прочитать вышеописанное, то станет ясно, что задефайнить SPELL_ID нельзя
Старый 03.08.2011, 23:48
J64_

offline
Опыт: 4,724
Активность:
Faion:
ну а какого хрена директива private то имеется? ._.
Старый 03.08.2011, 23:58
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Такого, что у меня описанное в примере не разу не приватки. Это обычные глобалки зарезервированные под способности.
Старый 04.08.2011, 00:04
Elf_Stratigo

offline
Опыт: 4,699
Активность:
define msg(playerid,text) = {
...
DisplayTextToPlayer(Player(playerid), text, 0, 0)
...
}
нет?
Старый 04.08.2011, 09:13
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
В общем расслабьтесь, то что я хочу пока cjass не может, нужно будет попробовать Адольфа попросить прикрутить.

Тему закрыть.
Старый 04.08.2011, 11:18
Закрытая тема

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

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

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

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



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