Перейти к контенту

Справочник по функциям и классам


Рекомендуемые сообщения

(изменено)
C++ class [класс] {
     const [описание1] = [константа1];
     const [описание2] = [константа2];
     ...
     [константы заменяют описания при вызове методов классов];
     
     property [свойство1];
     property [свойство2];
     ...
     [свойства (property) - это характеристика какого-либо класса, которая может подвергаться мат. операциям, слияниям, присвояниям и пр.
     читаются через точку: obj.health];

     [глобальная(-ые) функция(-ии), которой вызывается класс];
     function [метод1] ([аргумент 1 функции 1], [аргумент 2 функции 1]...);
     function [метод2] ([аргумент 1 функции2]...);
             ...
     [методы - это специальные функции, выполняющие операции с классами и возвращающие значения после операций над классами.
     вызываются через двоеточие: obj:add_animation(...)];
}

 

 

C++ class fcolor {
    property a; --альфа-цвет, отвечающий за прозрачность.
    property b; --blue-цвет, отвечающий за синий оттенок цвета.
    property g; --green-цвет, отвечающий за зелёный оттенок цвета.
    property r; --red-цвет, отвечающий за красный оттенок цвет.

    fcolor ();

    function set(number, number, number, number); --установка цвета (r,g,b,a)
    function set(const fcolor&); --установка цвета по уже имеющемуся классу "fcolor()"
    function set(number); -- не знаю. предполагаю, что есть несколько заранее подготовленных цветов с индексами для каждого.

};

 

Например:

color = fcolor()
color.a = 50
color.g = 255
color.r = 100
color.b = 50

или

color = fcolor()
color:set(100,255,50,50)

 

 

Но где и как это использовать?

 

Бывают случаи, при которых необходимо нанести некоторый урон неписю или мобу, при этом имитировав попадание в него. Для этого существует метод класса game_object:

function hit(hit*);

Чтобы использовать этот метод, нужно указать аргументы. В данном случае имеет объект другого класса - hit. Вот его описание:

 

C++ class hit {
    const burn = 0; --здесь идут константы типов урона, используемых в свойстве "type". Все мы прекрасно знаем, что означает каждый.
    const chemical_burn = 6;
    const dummy = 11;
    const explosion = 7;
    const fire_wound = 8;
    const radiation = 4;
    const shock = 1;
    const strike = 2;
    const telepatic = 5;
    const wound = 3;

    property direction; --дирекция урона
    property draftsman; --обозначает персонажа, нанёсшего урон.
    property impulse; --импульс урона
    property power; --сила урона
    property type; -- тип урона (см. константы)

    hit ();
    hit (const hit*);

    function bone(string); --метод с указанием кости урона

};

 

Пример использования:

hit = hit() -- создание объекта класса hit
hit.direction = vector():set(1,0,0) --дирекция по оси x
hit.draftsman = db.actor --нанёс урон актор
hit.impulse = 600 --импульс
hit.power = 1.45 --хит
hit.type = 2 --тип урона - выстрел
hit:bone("bip01_head") -- удар приходится на голову
obj:hit(hit)

-- наносим урон

 

 

Изменено пользователем IQDDD

Поделиться этим сообщением


Ссылка на сообщение

Вот это дело!

 

Теперь осталось только ui_events. :)

Кстати, а какая константа обозначает коллбек флажка (checkbutton'а) на снятие/установку. Пробовал CHECK_BUTTON_SET, CHECK_BUTTON_RESET, PROPERTIES_CLICKED - не работают. :( И как сохранить значение флажка?)

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Да я понимаю, что есть check:GetCheck(). но разрабы сохраняют в оригинальных скриптах через некий класс COptionsManager() (см. ui_mm_opt_main)

BUTTON_CLICKED работает. :)

Изменено пользователем IQDDD

Поделиться этим сообщением


Ссылка на сообщение

да всё, вопрос исчерпан. Я просто хотел найти способ сохранять настройки мода иным способом, отличным от записи в pstor. в принципе, легче записать в него, чем копать потенциальный класс.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

да я уж понял. приходится всплывающим листбоксом делать. :(

зы: а по идее можно создать собственный ComboBox, используя классы CUIButtonWnd, CUIStaticWnd и CUIListWnd. Неполноценный, конечно, но всё равно. :) А есть коллбек на потерю фокуса окном?

Изменено пользователем IQDDD

Поделиться этим сообщением


Ссылка на сообщение

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

и зарегистрированы ли под именами-тоже.

Поделиться этим сообщением


Ссылка на сообщение

1. Как узнать локацию серверного объекта? Смотрел справочник, смотрел состав net packet'ов, юзал поиск на форуме и google (возможно, плохо) - не нашёл.

2. Почему вызов level.add_map_object_spot_ser на объект из другой локации не ставит метку? (Перебирал все предметы alife'а, стоя на болотах. Метки появились только на болотах.

Поделиться этим сообщением


Ссылка на сообщение
(изменено)

Где у меня ошибка со скриптовым постэффектом? Метод process не вызывается почему-то.

Вот вызов:

local ppe=recovery_effect(max_restored_health-db.actor.health)
ppe:start()

Вот сам класс:

-- Постэффект
class "recovery_effect" (effector)
function recovery_effect:__init(add_health) super()
    self.params = effector_params()
    self.params.blur=0
    self.params.gray=0
    self.params.dual=duality(0,0)
    self.params.noise=noise(0,0,0)
    self.params.color_add=color(0,0,0)
    self.params.color_base=color(0,0,0)
    self.params.color_gray=color(0,0,0)
    
    self.max_add=add_health                                    -- Максимальная яркость
    self.time_start=time_global()                            -- Время начала
    self.time_in=self.time_start+add_health*1.5*1000        -- Время максимального осветления
    self.time_white_scr=self.time_in+add_health*2.5*1000    -- Время начала сброса осветления
    self.time_out=self.time_white_scr+add_health*0.75*1000    -- Время конца
    
    self.time_start_in=self.time_in-self.time_start
    self.time_white_scr_out=self.time_out-self.time_white_scr
    self.pi2=math.pi/2
end

function recovery_effect:process(pp)
    local time=time_global()
    msg("!")
    if time<self.time_in then
        local color_add_cur=self.max_add*math.cos(self.pi2*(self.time_in-time)/self.time_start_in)
        self.params.color_base=color(color_add_cur,color_add_cur,color_add_cur)
    elseif time<self.time_white_scr then
        self.params.color_base=colol(self.max_add,self.max_add,self.max_add)
    elseif time<self.time_out then
        local color_add_cur=self.max_add*math.sin(self.pi2*(self.time_out-time)/(self.time_white_scr_out))
        self.params.color_base=color(color_add_cur,color_add_cur,color_add_cur)
    end
    effector.process(self,pp)
    pp:assign(self.params)
    return true
end

function recovery_effect:finished()
    return self.time_out<time_global()
end

 

 

Где найти соответствие имен костей и номеров костей?

Изменено пользователем Cyclone

Поделиться этим сообщением


Ссылка на сообщение

Как работает level.vertex_in_direction? Конкретно алгоритм действия движка.

Поделиться этим сообщением


Ссылка на сообщение

Можно представить любую локацию как карту с графом, где вершины - level vertex'ы. С исходным вертексом и направлением более-менее понятно. А вот с третьим параметром не очень. Возможно, что движок тупо отсчитывает от данного в вертекса в таком-то направлении такое-то расстояние и выбирает ближайший к получившейся точке level vertex. Тогда вызов level.vertex_in_direction(lv,dir,dis) в модуле level эквивалентен:

function vertex_in_direction(lv,dir,dis)
local pos=vertex_position(lv)
dir=dir:normalize()
pos:add(dir*dis)
return position_to_vertex(pos) -- где position_to_vertex(pos) возвращает ближайший к точке pos level vertex.
end

Я прав?

Поделиться этим сообщением


Ссылка на сообщение
Так что функция получается быстрая - собственно такой формат аи-сетки для этого и делали smile.gif

А какой это "такой формат аи-сетки"? И что значит двоичный поиск?

 

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

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

Поделиться этим сообщением


Ссылка на сообщение

Как определить, к какому серверному классу принадлежит серверный объект?

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    Ни один зарегистрированный пользователь не просматривает эту страницу.

AMK-Team.ru

×
×
  • Создать...