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

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

Ответ
 
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
Вопрос по библиотекам
Как поместить несколько триггеров в одну библиотеку?
Старый 25.01.2009, 22:15
Hellfim
Новичок
online
Опыт: 79,707
Активность:
Код:
library My_lib
//Your triggers
endlibrary

Как-то так
Старый 25.01.2009, 22:17
agentex

offline
Опыт: 34,834
Активность:
не совсем понял вопрос, могу привести пример кода с созданием тригеров внутри либы при иниц. мапы
Код:
library lib initilizer InitTriggers
private function trg_1_actions takes nothing returns nothing
//...
endfunction


private function trg_2_actions takes nothing returns nothing
//...
endfunction

private function InitTriggers takes nothing returns nothing
local trigger trg_1 = CreateTrigger()
local trigger trg_2 = CreateTrigger()
call TriggerAddAction(trg_1, function trg_1_actions)
call TriggerAddAction(trg_2, function trg_2_actions)
//...
endfunction
endlibrary
Старый 25.01.2009, 22:23
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
Я создал три триггера, а теперь мне надо сделать так, чтобы приватные переменные и структуры из одного триггера были также доступны в других двух триггерах, вот я и решил поместить их как-нибудь в одну библиотеку, или есть другие способы?
Старый 25.01.2009, 23:18
Hellfim
Новичок
online
Опыт: 79,707
Активность:
Igores, мб просто не делать их приватными?
Старый 25.01.2009, 23:26
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
Hellfim тогда могут совпадать имена переменных, я ведь не один карту делаю, вдруг другой джассер будет называть их так же и получится путанница.

Igores добавил:
Если я буду делать ссылки из библиотеки одного триггера на библиотеку другого - это поможет?

Igores добавил:
Еще один вопрос: если все библиотеки инициализируются в самом начале игры после глобалок, то не будет ли тормозить игра если у меня 100 библиотек?
Старый 25.01.2009, 23:58
Hellfim
Новичок
online
Опыт: 79,707
Активность:
Igores, почитай статьи по оптимизации, зачем тебе 100 библиотек? И ятд если ты назавешь свою структуру Имя спела(чего либо другого для чего она используется)+название структуры совпадений не будет.
Старый 26.01.2009, 00:04
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
Hellfim Да, теперь я тоже также начинаю думать.

Igores добавил:
Если честно, то было просто интересно, я ведь недавно вДжасс стал юзать. На свой вопрос сам нашел ответ, решил делать это дело не через библиотеки, а через области и паблики.
Старый 26.01.2009, 01:18
adic3x

offline
Опыт: 108,439
Активность:
есть кста фича типа
Код:
library b uses a
endlibrary

library a
endlibrary

так вот либа а будет в коде идти выше чем б, соотв. к ней мона обращаться из б
Старый 28.01.2009, 11:16
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
ADOLF, спасибо, но я это уже давно прочитал в твоем переводе. Эта фича не подходит, так как библиотеки инициализируются в начале игры, а для карты где будет играть максимум 10 героев из 40 это не очень подходит, ибо большая часть библиотек будет инициализирована просто так, поэтому сейчас делаю через области.
Старый 28.01.2009, 12:25
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
но я это уже давно прочитал в твоем переводе. Эта фича не подходит, так как библиотеки инициализируются в начале игры, а для карты где будет играть максимум 10 героев из 40 это не очень подходит, ибо большая часть библиотек будет инициализирована просто так, поэтому сейчас делаю через области.

эээ?! код в библиотеках и так добавляется в рабочий код карты, т.е. если ты имеешь ввиду что часть кода не будет использщованно то тебе это неизбежать. или я не понял суть твоего поста
Старый 28.01.2009, 12:29
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
ADOLF, ты же сам писал, что библиотеки объявляются сразу после глобалок?!?!?!

Igores добавил:
ADOLF, ну вообще то я думал, что код начинает использоваться только в момент указанного события, а до этого времени вар его не трогает.
Старый 28.01.2009, 12:36
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
ADOLF, ну вообще то я думал, что код начинает использоваться только в момент указанного события, а до этого времени вар его не трогает.

интерпритатор прогоняет сразу весь код, как минимум это доказывается тем, что при любой ошеибко характера синтаксического возможность карты загрузки отпадает совсем, логично предположить что он сразу его и делает "рабочим", более того библиоткеки никак не влияют на это
Цитата:
ADOLF, ты же сам писал, что библиотеки объявляются сразу после глобалок?!?!?!

да, исследуй дж файлы подробнее (мпку арзиватор и колупаем карты)
Старый 28.01.2009, 12:43
ScorpioT1000
Работаем
offline
Опыт: отключен
переменные на то и приватны чтобы никакие левые ублюдки не смогли их изменить. учи матчасть. тот мануал (про прайваты) раскрывает их неполностью
Старый 28.01.2009, 14:35
Hellfim
Новичок
online
Опыт: 79,707
Активность:
ScorpioT1000, объясни подробнее про "невозможность трогать приватные переменные левыми ублюками".
Старый 28.01.2009, 15:25
Igores
НИИ 4А-Во! Кафедра Джасс.
offline
Опыт: 5,325
Активность:
Что то я тоже не догнал про приватные переменные, их ведь любой в редакторе может изменить:)
[+] замечание от NETRAT: дабл пост, у тебя часто по 2-3 раза отправляются

Отредактировано NETRAT, 28.01.2009 в 18:39.
Старый 28.01.2009, 17:18
ScorpioT1000
Работаем
offline
Опыт: отключен
есть пример
Код:
struct One
    integer i
    real r
    private boolean flag = false //Этот флаг - приватный! Мы не можем трогать его извне *
    
    method ClearAll takes nothing returns nothing //какая-то ф-ция **
        if flag then
            set i = 0
            set r = 0.
            set flag = false
        endif
    endmethod
    
    method SetInt takes integer i returns nothing
        if i != 0 then
            set flag = true
        endif
        set .i = i
    endmethod
    
    // . . .
endstruct

// * вот, скажем, дали вы писать систему какому-нибудь китайцу на вашей библиотеке
function other takes nothing returns nothing
    local One temp = One.Create()
    call temp.SetInt(100500)
    set temp.flag = false //а он не шарит! сменил флаг, а он юзается в **
    //НО если она приватная, он обломится
endfunction

//естественно, в простых конструкциях все это наглядно,
//но всегда нужно закрывать внутренние данные системы от вторжения(где это требуется)


ScorpioT1000 добавил:
Цитата:
Hellfim тогда могут совпадать имена переменных, я ведь не один карту делаю, вдруг другой джассер будет называть их так же и получится путанница.

называй их уникально, либо пиши ф-ции для изменения приваток

ScorpioT1000 добавил:
Код:
library SuperMegoSystem

globals
    private integer a
    private real x
    private real y
    private real z 
endglobals

function SetA takes integer num returns nothing
    set a = num
endfunction

function GetA takes nothing returns integer
    return a
endfunction

function SetCoords takes real newX, real newY, real newZ returns nothing
    set x = newX
    set y = newY
    set z = newZ
endfunction

function GetX takes nothing returns real
// . . . 

endlibrary

//теперь меняешь приватные с пом. этих ф-ций извне

Отредактировано ScorpioT1000, 28.01.2009 в 19:35.
Старый 28.01.2009, 19:22
Ответ

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

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

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

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



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