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

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


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

Может кто знает как работает константы\флажки из ui_events. Как работает кнопка я знаю, но как остальные не вполне понимаю.

Вот к примеру там есть "INVENTORY_ATTACH_ADDON", как это можно использовать и можно ли вообще?

 

Garry_Galler,

Спасибо, но я уже разобрался. Вот теперь вопрос по ui_events.

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

Слегка обновил информацию в одной из старых статей, а именно про управление задачами (они же квесты). В описание класса SGameTaskObjective добавил информацию по заданию предусловий на провал и успех а также действий по провалу и успеху. Указаны соответствущие теги в XML описании.

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

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

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

IQDDD,

нету. Да и посмотри сам класс-перечисление ui_events. Там всё, что есть.

Всё таки мне не понятно как испольовать этот класс ui_events. Вот к примеру, что как использовать UNDRESS_OUTFIT?

 

Real Wolf,

класс ui_events непосредственно использовать нельзя. Это просто набор именованных целочисленных констант. Использовать можно класс CUIScriptWnd, где можно регистрировать события от дочерних окошек. Там эти константы и используются для указания, какое именно событие регистрируется. Это было описано в посте про окна. При этом, часть событий недоступна для использования, поскольку не экспортированы классы окон, которые их генерируют. В частности UNDRESS_OUTFIT бесполезен, поскольку генерируется классом окна инвентаря, а оно никак в скриптах не доступно.

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

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

IQDDD,

почему же недоступно? доступно

В смысле доступны? Поясни, пожалуйста, или пример приведи.

 

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

Вроде имени нету, у меня возвращало nil.

 

Товарищи!

В посте про СConsole говорится:

local hud_crhr = con:get_bool("hud_crosshair") -- узнать, включён ли прицел (выдаст логическое значение)

А если узнавать аргумент у не зарегистрированного? Например:

local hud_crhr = con:get_bool("test")

Можно так делать?

DiXares,

Нет же такой консольной команды "test". Вылет будет или nil вернёт - какая разница. По-любому нет смысла так делать.

malandrinus, а можно как то в движок добавлять фейковые команды?

В соседней теме где-то читал про то, как kolmogor показывал, как добавлять, но не нашёл...

По идее, если сделать пару команд, то можно из консоли управлять скриптами.

DiXares,

можно добавлять. Пример там, посмотри в теме xray extentions. Там есть добавление команд.

 

По идее, если сделать пару команд, то можно из консоли управлять скриптами.

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

Даже если предположить реализацию с консолью. Как это будет выглядеть? Набираешь команду, аргумент - имя функции для выполнения. Так? А как передавать аргументы? Страшная морока для реализации.

И по любому, не вижу в этом ровно никаких преимуществ перед существующими способами.

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

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

IQDDD Ты сам ответил себе на первый вопрос во втором. Локация серверного объекта - видимо текущая

 

ЗЫ:

function check_type(obj)

if obj then

if type(obj)=="string" then

return "string"

elseif type(obj)=="number" then

return "number"

elseif type(obj)=="function" then

return "function"

elseif type(obj)=="boolean" then

return "boolean"

elseif type(obj)=="userdata" then

return "userdata"

elseif type(obj)=="table" then

return "table"

end

end

end

 

function check_type(obj)
if obj then
return type(obj)
end
end

вернет тоже самое

 

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

А теперь, товарищи, дружно забудем такой архаизм как амкашную функцию разделения строки str_explode (и ее варианты в других модах) и начинаем пользоваться быстрыми методами:

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

Авторы Gun12, Garry_Galler, Artos - изначально был мой вариант с одним шаблоном, потом Gun12 предложил более универсальный паттерн, Artos привел все в божеский вид, ну и общими усилиями получился такой вариант (последняя редакция - чисто моя)

 

Аргументы:

sStr -- cтрока для разбора

Mode -- режим заполнения таблицы

sDiv --сепаратор: если указываем, то обязательно указать режим Mode

sPattern -- свой шаблон:если указываем, то в аргументе sDiv передать nil и обязательно указать режим Mode

 

function StringSplit(sStr, Mode, sDiv, sPattern)
    local tRet = {}
    local sPatt
    if sDiv and  not sPattern then --// если сепаратор  задан: разделяем по нему
    --// если нет шаблона - используем универсальный
    sPatt = '[^%s%'..sDiv..']+'
--// если сепаратор указан как nil, но указан  шаблон: используем его
    elseif not sDiv and  sPattern then 
    sPatt=sPattern
    else--/ если сепаратор и шаблон  не указаны: разделяем слова
    sPatt = '[%w%_]+'
    end
    if Mode == nil then --// обычный массив
        for sValue in sStr:gmatch(sPatt) do
            table.insert(tRet, sValue)
        end
    elseif Mode == true then --// таблица '[значение]=true'
        for sValue in sStr:gmatch(sPatt) do
            tRet[sValue] = true
        end
    elseif type(Mode) == "number" then --//таблица '[idx] = число или стринг'
        for sValue in sStr:gmatch(sPatt) do
        tRet[#tRet+1] = tonumber(sValue) or sValue
        end
    end
  return tRet
end

--вызовы

local t =StringSplit("vid mode 1024x768", true, nil, "%d+")  --используем свой шаблон для получения из строки двух цифр
local t =StringSplit("ammo_9x18_fmj, ammo_9x18_pmm, ammo_11.43x23_fmj", 1,",") -- делим строку по разделителю-запятой
-- делим строку на слова независимо от имеющихся разделителей
local t =StringSplit(" There will come soft rains and the smell of the ground, And swallows circling with their shimmering sound")
-- когда в строке имеется несколько видов сепараторов и нужно все их указать, можно сделать так:
local s = "ammo_9x18_fmj, ammo_9x39_pab9! ammo_9x39_ap$ ammo_9x39_sp5? ammo_9x18_pmm; ammo_11.43x23_fmj"
local t =StringSplit(s, true,",%;%?%!%$")

 

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

Всех с наступающим! Подскажите, можно ли (и если да, то как) запретить выполнение какой-либо консольной команды?

Всех с наступающим Новым Годом!

 

Scarabay,

насколько я знаю, запретить выполнение консольных команд нельзя.

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

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

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

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