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

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

 

 

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

 

Именно. Но переделать партикл - не в моей компетенции.

А от кости или от камеры работать - не прокатит. Нужно именно работать с координатами.


 

 

тогда просто сними координаты ГГ и в демо рекорде+rs_stats координаты снега и посчитай разницу. А при спавне будешь делать эту поправку.

 

Вроде так и делал. Но видимо у меня с математикой плохо ^_^

Не соответствует правилам.

Ссылка на комментарий

А от кости или от камеры работать - не прокатит.

Еще как прокатит. У них также есть свои координаты.

Изменено пользователем Kondr48
Ссылка на комментарий

 

 

У них также есть свои координаты.

Они мало отличны от позиции самого ГГ.

Тут проблема осовная вот какая - сам партикл по сути своей "кривой" - со смещенным центром отрисовки...

Не соответствует правилам.

Ссылка на комментарий

 

 

править xr партиклов в партикл-эдиторе.

 

К сожалению использовать СДК возможности нет.

Не соответствует правилам.

Ссылка на комментарий

 

CRAZY_STALKER666, с телефона модостроем занимаетесь? Если интернет не позволяет скачать 300 мб дефолтного СДК, возьмите собранный из исходников, он весит мегабайт 20 что ли сжатый.

 

Ссылка на комментарий

Вопрос: как можно получить в скрипте значение консольной команды? Вот например, если в игре в консоли написать команду(напр. g_always_run), то мы получим текущее значение параметра(on/off или 0.0-1.0). А как получить это значение в скрипте?

 

update::

@Eugen81, Спасибо. Полезно). А возможно как-то проверить какая клавиша назначена на действие( например bind sprint_toggle kX)?

con:get_integer(...) - думаю не возвратит код клавиши X. Просто сейчас проверить не могу.  

Изменено пользователем TIGER_VLAD
Ссылка на комментарий

@TIGER_VLAD, код клавиши по экшену:

local dik = bind_to_dik(key_bindings.kSPRINT_TOGGLE)

 

upd: пардон, эта функция из X-Ray Extensions, в чистом ТЧ только dik_to_bind есть.

Изменено пользователем naxac
  • Спасибо 1

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Ссылка на комментарий
как мне сделать дубликат
Как тебе уже сказали - именно перебирать и переписывать каждое вложение.
Есть не мало вариантов функций сделать это.
Но при условии, что у тебя достаточно простая таблица.
Сделать полное копирование сложной таблицы (реально полное) проблематично.
(По крайней мере необходимости в этом не было, поэтому не делал. Да и не буду)
Поясню что я подразумеваю под простой сложной таблицей и почему проблематично.
Всё дело в ключах таблицы.
Если ключи НЕ объекты - то всё нормально.
Вот вариант копирования простой таблицы, в котором ключи не объекты, а строки или числа.
Если значением ключа будет таблица, то создается копия этой таблицы.
И так рекурсивно для всех степеней вложенности :

function table.copy (tab)
    assert(type(tab) == 'table' , [[bad argument #1 to 'table.copy' => table expected, got ]] .. type(tab))
    
    local function tcopy(src)
        if type(src) ~= 'table' then
            return src
        end
            
        local new = {}
        
        for k, v in pairs(src) do
            new[k] = tcopy(v)
        end
        
        return new
    end
        
    return tcopy(tab)
end

 

Вот сложнее вариант.

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

function table.copy (tab, meta)
    assert(type(tab) == 'table' , [[bad argument #1 to 'table.copy' => table expected, got ]] .. type(tab))
        
    local function tcopy(src, meta)
        if type(src) ~= 'table' then
            return src
        end
            
        local new = {}
        
        for k, v in pairs(src) do
            new[k] = tcopy(v, meta)
        end
        
        if meta then
            setmetatable(new, tcopy(getmetatable(src), meta))
        end
        
        return new
    end
        
    return tcopy(tab, meta)
end

 

И вот теперь про самый сложный вариант и про "проблематично".
А если ключем будет таблица (не буду брать функции, потоки и тем более userdat-у).
По аналогии нужно копировать и эту таблицу-ключ.
Для этого нужно изменить :

new[k] = tcopy(v, meta)
-- на
new[tcopy(k, meta)] = tcopy(v, meta)

 

НО. При этом будет создана новая ключ-таблица, для которой не назначено никакого идентефикатора.
Т.е. она будет анонимна. Я вот о чем :

 
Например есть такой код :
t = {b=3}
x = {a=1, [t]=2}

y = table.copy(x)
Вариант с кодом - new[k] = tcopy(v)
В "new[k]"  будет использована ссылка на таблицу с именем "t".
Поэтому можно увидеть :
print(y[t]) --> 2
Но если использовать вариант с - new[tcopy(k, meta)] = tcopy(v, meta), то :
print(y[t]) --> nil
Обращаясь y[t] мы обращаемся к полю таблицы, именем которого является объект!!! с именем "t" .
Но в ключе была создана новая таблица(объект) - new[tcopy(k, meta)] - которая уже не является таблицей с именем "t".
Поэтому print(y[t]) --> nil - Действительно, ключ был переписан новым безымянным объектом.
 
Т.е. такое копирование ограничивает функционал, т.к. теперь нет поля y[t], к которому можно было просто обратиться.
И можно ли назвать подобное копирование копированием?
А если таких ключей множество, то при переборе for k, v in pairs как определить что этот ключ-таблица "k" именно то что нам нужно, если они все безымянны?
В функции копирования создавать сопоставления? Теоретически можно. А практически нужно?

Изменено пользователем Nazgool
  • Нравится 1
  • Полезно 1
Ссылка на комментарий

То есть, в последнем случае, можно будет максимум сравнить? Ни использовать ни прочитать(без сравнения) нельзя будет?

Недоработка самого Lua?

Ссылка на комментарий

То есть, в последнем случае, можно будет максимум сравнить? Ни использовать ни прочитать(без сравнения) нельзя будет?

Недоработка самого Lua?

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

Точно такой же проблемы можно добиться и с обычными числами. Создадим таблицу x вида x = {obj_id=32451}, где obj_id - это ид клиентского объекта.

 

Что надо сделать при создании дубликата этой таблицы? Должны ли мы просто создать y = {obj_id=32451}? Но тогда код

level.object(y.obj_id).unload_magazine() будет разряжать магазин у объекта из таблицы x.

 

Или надо заспавнить новый объект и тогда таблица y будут выглядеть y = {obj_id=2456} и магазины будут разряжаться у разных объектов.

А если obj_id сделать ключом, то естественно в таблице y не найдется запись с ключом 32451.

Ровно тоже самое проделал Nazgool с таблицами-ключами - он спавнил новые таблицы и старые ключи в новой таблице естественно не находились.

 

Или на самом деле это инвентарь НПЦ и надо создать еще одного НПЦ, а у него будет совсем другое содержимое инвентаря :)

 

Как правильно копировать, может решить только программист для каждого случая отдельно.

Изменено пользователем abramcumner
  • Согласен 1
Ссылка на комментарий

Такой вопрос, если я использовал один раз функцию:

function copy_tbl(tbl)
local tbl2 = {}
	for k, v in pairs(tbl) do
		table.insert(tbl2, v)
	end
	return tbl2
end

То при повторном её вызове создастся уже новый объект-таблица, или же эта функция при повторном использовании вернёт уже ссылку на ту таблицу что была создана при 1 её вызове?

Ссылка на комментарий

Тогда уж for i=1,#t - если, конечно, массив заполнен правильно и кол-во элементов в нём достаточно для того, чтобы заморачиваться скоростью.

Изменено пользователем Kirgudu
Ссылка на комментарий

@Kirgudu, Про оператор "#" я не так давно уже рассказывал. Это не надежно.

Поэтому всё-таки стоит пользоваться специально созданными для этого функциями ipairs и table.insert(remove)

Напомню

 

local t = {nil,nil,3}

for i = 1, #t do
    print(t[i])
end

--> nil
--> nil
--> 3

for i, v in ipairs(t) do
    print(i,v) --> ничего не печатает
end 
И хотя я считаю что работа оператора # более правильная, чем ipairs (как ни крути, но это массив. есть ключи 1.2.3 и есть соответствующее им lua-значения), он не гарантирует всегда правильной работы.
Но разработчики считают что nil не должен быть значением, поэтому пусть так и будет.
А в специальных случаях (как то мой пример выше) никто не запретит пользоваться # :)

 

 

Изменено пользователем Nazgool
Ссылка на комментарий

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

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

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

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

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

Войти

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

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

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