Difference between revisions of "Event override/ru"

From Dragon Age Toolset Wiki
Jump to: navigation, search
m (Правка)
m (Правка)
Line 7: Line 7:
 
Самый безопасный и распространённый способ подмены обработки события, это написание скрипта для объекта, обработку событий которого вы хотите подменить. Этот скрипт используется для обработки определённого события с последующей передачей события основному скрипту.
 
Самый безопасный и распространённый способ подмены обработки события, это написание скрипта для объекта, обработку событий которого вы хотите подменить. Этот скрипт используется для обработки определённого события с последующей передачей события основному скрипту.
  
Для примера, если в вашем модуле есть существо по имени "Death Tyrant", которое должно реагировать определённым способом на получаемое им событие [[EVENT_TYPE_DEATH]], вы можете написать скрипт '''"death_tyrant_events"''' со следующим содержанием:
+
Для примера, если в вашем модуле есть существо по имени "Death Tyrant", которое должно реагировать определённым способом на получаемое им событие '''[[EVENT_TYPE_DEATH/ru|EVENT_TYPE_DEATH]]''' ''[[EVENT_TYPE_DEATH|(en)]]'', вы можете написать скрипт '''"death_tyrant_events"''' со следующим содержанием:
  
 
<dascript>
 
<dascript>
Line 43: Line 43:
 
=== С помощью Events 2DA ===
 
=== С помощью Events 2DA ===
  
C помощью 2DA вы сможете глобализировать этот процесс, перехватывая и переопределяя все события в игре.  
+
C помощью 2DA вы сможете глобализировать этот процесс, перехватывая и переопределяя больше событий в игре.  
  
Создайте файл [[Events.xls|Events]] M2DA - более подробную инструкцию смотрите '''[[2DA/ru#Расширение игры с помощью M2DA|Расширение игры с помощью M2DA]]''':
+
Создайте файл M2DA '''[[Events.xls/ru|Таблица событий]]''' ''[[Events.xls|(en)]]'' - более подробную инструкцию смотрите '''[[2DA/ru#Расширение игры с помощью M2DA|Расширение игры с помощью M2DA]]''' ''[[2DA|(en)]]'':
  
 
[[File:Events.png]]
 
[[File:Events.png]]
  
В данном случае я использую событие '''"EVENT_TYPE_INVENTORY_ADDED"''' и обрабатываю его в определённом мною скрипте '''"my_event_override"'''.
+
В данном случае я использую событие '''[[EVENT_TYPE_INVENTORY_ADDED/ru|EVENT_TYPE_INVENTORY_ADDED]]''' ''[[EVENT_TYPE_INVENTORY_ADDED|(en)]]'' и обрабатываю его в определённом мною скрипте '''"my_event_override"'''.
  
 
Теперь вы можете обрабатывать события, как вам будет угодно.
 
Теперь вы можете обрабатывать события, как вам будет угодно.
Line 90: Line 90:
  
 
== Переводчики ==
 
== Переводчики ==
kelamor / [[User:Kelamor|Страница]] / [mailto:kelamor@inbox.ru Почта]
+
kelamor / [[User:Kelamor|Страница]] / [mailto:kelamor@inbox.ru Почта] / [[Translation/ru|Как переводить DA Builder Wiki]]
 
{{Languages|Event override}}
 
{{Languages|Event override}}
 
[[Category:Events]]
 
[[Category:Events]]
 
[[Category:Translations_ru]]
 
[[Category:Translations_ru]]

Revision as of 02:18, 29 October 2010

Scripting

Как подменить(переопределить) обработку события?

Посредством скрипта

Самый безопасный и распространённый способ подмены обработки события, это написание скрипта для объекта, обработку событий которого вы хотите подменить. Этот скрипт используется для обработки определённого события с последующей передачей события основному скрипту.

Для примера, если в вашем модуле есть существо по имени "Death Tyrant", которое должно реагировать определённым способом на получаемое им событие EVENT_TYPE_DEATH (en), вы можете написать скрипт "death_tyrant_events" со следующим содержанием:

#include "utility_h"
#include "wrappers_h" 
#include "events_h"
 
void main()
{
    event ev = GetCurrentEvent();
    int nEventType = GetEventType(ev);
    string sDebug;     
    object oPC = GetHero();
    object oParty = GetParty(oPC);   
    int nEventHandled = FALSE;
 
    switch(nEventType)
    {
         case EVENT_TYPE_DEATH:
         {
             ...
             nEventHandled = TRUE; //Установите значение в TRUE, если обработка этого события больше не нужна
             break;
         }
    }
    if (!nEventHandled) //Если событие ещё нуждается в обработке, переправляем его основному скрипту
    {
        HandleEvent(ev, RESOURCE_SCRIPT_CREATURE_CORE);
    }
}

Далее назначаем его скриптом для нашего существа. Теперь, когда игра посылает нашему существу событие, оно сначала обрабатывается этим скриптом, и в случае, если событие не является EVENT_TYPE_DEATH, передаётся на обработку исходному скрипту обработки событий. Событие же EVENT_TYPE_DEATH перехватывается нашим скриптом и обрабатывается.

С помощью Events 2DA

C помощью 2DA вы сможете глобализировать этот процесс, перехватывая и переопределяя больше событий в игре.

Создайте файл M2DA Таблица событий (en) - более подробную инструкцию смотрите Расширение игры с помощью M2DA (en):

Events.png

В данном случае я использую событие EVENT_TYPE_INVENTORY_ADDED (en) и обрабатываю его в определённом мною скрипте "my_event_override".

Теперь вы можете обрабатывать события, как вам будет угодно.

Для примера, каждый раз, когда мне в инвентарь что-либо попадает, я хочу увидеть над головой своего перса всплывающее сообщение о том, что же мне туда попало:

// --- script start ---
// file: my_event_override.nss
// author: Pheelon
 
#include "utility_h"
#include "wrappers_h"
#include "events_h"
void main()
{
    event ev   = GetCurrentEvent();
    int nEvent = GetEventType(ev);
    object oOwner = GetEventCreator(ev);
 
    switch (nEvent)
    {
        case EVENT_TYPE_INVENTORY_ADDED:
        {
            object oItem = GetEventObject(ev, 0);
            if (IsPartyMember(oOwner)) // показывается только если предмет попадает в инвентарь игрока
            {
                DisplayFloatyMessage(oOwner, GetName(oItem) + " added", FLOATY_MESSAGE, 14654488, 10.0);
            }
            //Непосредственно событие мы здесь не обрабатывали, просто показали всплывающее сообщение, поэтому надо перенаправить событие дальше, в исходный скрипт
            HandleEvent(ev); // с помощью этой функции мы и перенаправим наше событие дальше
            break;
        }
 
    }
}
 
// --- script end ---

Переводчики

kelamor / Страница / Почта / Как переводить DA Builder Wiki

Язык: English  • русский