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

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

Gektor ... применить апгрейд на ствол?

Если ты думаешь, что каждому ясно, что под этим ты подразумеваешь - то ошибаешься. Тем более тебя не поймет LUA (скрипты).

Нацепить глушитель иль прицел, увелисть точность иль скорострельность, увелисить магазин иль переделать под иной патрон - нет таких единых функций.

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

 

Gun12

Данный кусок кода по формированию из строки индексной таблицы нередко востребован.

Например, в конфигах нередко используют перечисления типа:

param1 = 30,50,75

param2 = item1,item2,item3

Вот и получается подобным кодом сразу массив значений ... cчитав 'param1' как строку и применив: Tbl = str_expl(param1, 1, ",")

Согласись, путей реализации далеко не один. Иной вопрос в оптимальности выбраного алгоритма и кодов для его реализации.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Доброго времени суток!

Делал квест, неудачным завершением которого, была бы полная зачистка военными лагеря новичков на Кордоне.

Столкнулся с проблемой: нпс не хотят заходить в некоторые дома дальше крыльца (пути много раз менял и перепроверял). Судя по имеющейся у меня информации - там нет ai-сетки. Возможно ли их туда провести, не прибегая к редактированию уровня? Видел, как некоторые люди сталкивались с "противоположной" проблемой: нпс ходили через стены, вроде как при указании неправильных level- и game- vertex'ов.

Заранее спасибо!

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

KASIMKA

Любое(!) управляемое движение НПС в игре возможно ТОЛЬКО по AI-сетке. Невозможно заставить НПС идти туда, где ее нет.

То, что порой НПС хотят через стены - результат некорректного спавна этих НПС за пределами AI-сетки, что порождает неуправляемое перемещение этого НПС как обычный объект/предмет к ближайшей доступной точке AI-сетки.

Тебе так же следует почитать информацию о параметре 'terrain' для сталкеров/монстров, т.к. и им можно задавать/ограничивать доступность тех или иных участков на AI-сетке.

Но в любом случае отсутствие AI-сетки там, где хочется чтобы ходили - влечет за собою перекомпиляцию уровня.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

НПС возможно заставить находится в местах с отсутствием аи сетки ,если в их логике пути отсутствуют вообще(логика типа remark) т.е нпс будет находится в точке спавна.Другой вариант запустить локацию кордон из ЧН (подключив к ТЧ или ЗП) -там сетка есть в домах ;) .Так же сетка есть во всех домах на складах(даже на кроватях,а местами проходит по воздуху,в метре от земли)

 

И без адресный и практически безинформативный пост, оторванный от ближайщих вопросов.

Если адресован для KASIMKA - то ему подобное не требуется. Если же 'вообще' - набор очевидностей ...

--/ Artos

[x]

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

Из категории: "Маленткие хитрости"

 

1. Нередко в модах можно встретить сохранение некоторых переменных в pstor актора (иль иного объекта) для хранения значений типа 'вкл/откл' в виде:

'xr_logic.pstor_store(db.actor, "var_name", 1)' или 'xr_logic.pstor_store(db.actor, "var_name", 0)'.

Можно подсчитать сколько байт займет данная переменная в сэйве:

Имя переменной займет string.len(var_name) + 1 = 9 байт

Значение переменной (число) займет float() = 4 байта.

Итого имеем: 9+4 = 13 байт

 

Если же использовать булевы значения (true/false), т.е.:

'xr_logic.pstor_store(db.actor, "var_name", true)' или 'xr_logic.pstor_store(db.actor, "var_name", false)'

то запись значения переменной будет занимать всего 1 байт ( bool() == u8() )

и на каждой подобной переменной экотомится целых 3 байта(!)

 

Напомню, что максимальный объем для psor'а ограничен 8192 байтами.

 

2. Нередко в модах используют сохранение таблиц в pstor, с использованием упаковки таблицы в строку функциями упаковки из АМК мода.

В случае, упаковки таблицы типа простого списка {val1,val2,...valN} этот список упаковывается с порядковыми индексами всех значений в списке.

Учитывая изложенное в п.1 и, принимая во внимание, что на каждый разряд индекса тратится 1 байт, выходит, что списки, имеющие более чем 10 индексов, экономнее хранить используя упакованным как массив с булевыми значениями.

Если перед записью переводить подобный список в массив типа: {val1=true,val2=true,...valN=true}

- то экономия байт в сэйве будет достигать (N - 9) байт для списка менее 100 индексов! Для списков с более 100 индексов экономия еще более, т.к. на каждом более 100-ом индексе уже экономится по 2 байта.

Естественно при извлечении из сэйва (возможно) потребуется обратная конвертация в простой список.

 

Резюме: Храните переменные в pstor'ах по-возможности в булевых значениях и большие таблицы (списки) в массивах с булевыми значениями, а не списками.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

Ссылка на комментарий
Но в любом случае отсутствие AI-сетки там, где хочется чтобы ходили - влечет за собою перекомпиляцию уровня.

Достаточно перекомпилировать аи-сетку и спавн, что совсем недолго. Я так эксперементировал с бункером сидорыча на кордоне, когда хотел посадить туда обычного непися а не сидора, изначально там нету аи-сетки - добавил несколько нодов, вэй поинт для спавна, анимпоинт на стул (в ЗП) и вуаля - новый непись прекрасно спавнился и сидел там.

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

 

В процитированных словах есть упоминание про полную перекомпиляцию?

В исходном вопросе звучало про нежелательность 'редактирования уровня' ...

Под 'перекомпиляцией уровня' мною подразумевалось (см. контекст) именно создание необходимой AI-сетки для уровня и перекомпиляция/редактирование всего, на что это влияет.

--/ Artos

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

singapur22

Поступил по твоей аналогии и заключил все варианты в функции.

Оставил общую таблицу как "точку отсчёта".

a = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaa" --100 символов
b = "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
bbbbbbbbbbbbbbbbbbbbbbbb" --100 символов
c = "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
cccccccccccccccccccccccc" --100 символов
d = "dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd
dddddddddddddddddddddddd" --100 символов
e = "eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee
eeeeeeeeeeeeeeeeeeeeeeee" --100 символов

tb = {a, b, c, d, e} -- общая для всех таблица

function f_t(tb)
    t = os.clock()
    local q
    for i=1, 1000000 do
        q = table.concat(tb)
    end
    t2 = os.clock() - t
    print("table", t2)
end

function f_c(a,b,c,d,e)
    t = os.clock()
    local q
    for i=1, 1000000 do
        q = a..b..c..d..e
    end
    t2 = os.clock() - t
    print("concat", t2)
end

function f_f(...)
    t = os.clock()
    local q
    for i=1, 1000000 do
        q = string.format("%s%s%s%s%s", ...)
    end
    print("format", os.clock() - t)
end

f_t(tb)
f_c(unpack(tb))
f_f(unpack(tb))

Ускорилось. Теперь показания выглядят так :

table     0.921
concat    0.594
format    1.344

 

 

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

Gun12, singapur22

А почему бы не привязаться к реальным кодам игры и не точечно, а хотя бы точками из дапазона?

Что-то типа::

function test_concat()
  --/ предустановка
  local size = {1,25,50,75,100,125,150} --/ кол-ва  символов
  for _,v in ipairs(size) do --/ циклы проверки с различной длиной
    --/ предустановки для тест-циклов
    local a = string.rep("a",v)
    local b = string.rep("b",v)
    local c = string.rep("c",v)
    local d = string.rep("d",v)
    local e = string.rep("e",v)
    printf("Size=%s:%s", v, string.rep("~",50))
    --/ test table.concat
    local t1 = profile_timer()
    t1:start()
    local tb = {a, b, c, d, e} --/ таблица
    local s
    for i=1, 1000000 do
      s = table.concat(tb)
    end
    t1:stop()
    printf("table.concat:=%s", t1:time())
    --/ test strings concat
    local t2 = profile_timer()
    t2:start()
    local s
    for i=1, 1000000 do
      s = a .. b .. c .. d .. e
    end
    t2:stop()
    printf("strings_concat:=%s", t2:time())
    --/ test string.format
    local t3 = profile_timer()
    t3:start()
    local s
    for i=1, 1000000 do
      s = string.format("%s%s%s%s%s", a, b, c, d, e)
    end
    t3:stop()
    printf("string.format:=%s", t3:time())
  end
end

 

Специально создание таблицы стрингов для 'table.concat' внес внутрь цикла, т.к. все же исходными являются именно строки, а шаг по формированию 'удобств' - это уже издержки самого выбираемого метода слияния.

 

Имеем (для реального x-Rey Stalker:SHoC):

Size=1:~~~~~~~~~~~~~~~~~~~~~~
table.concat  : 382377.4375
strings_concat: 126710.90625
string.format : 849551.875
Size=25:~~~~~~~~~~~~~~~~~~~~~
table.concat  :  560190.5625
strings_concat:  225513.09375
string.format : 2258268.75
Size=50:~~~~~~~~~~~~~~~~~~~~~
table.concat  :  612529.625
strings_concat:  288320.59375
string.format : 3637614
Size=75:~~~~~~~~~~~~~~~~~~~~~
table.concat  :  686650.125
strings_concat:  334355.90625
string.format : 5190542
Size=100:~~~~~~~~~~~~~~~~~~~~
table.concat  :  687361.375
strings_concat:  373632.84375
string.format :  759546.75
Size=125:~~~~~~~~~~~~~~~~~~~~
table.concat  : 1232452.5
strings_concat:  448679.375
string.format : 1306033.125
Size=150:~~~~~~~~~~~~~~~~~~~~
table.concat  : 1321812.875
strings_concat:  502137.53125
string.format : 1403406.5

 

Варьируя различными значениями можно подтвердить для LUA в применении к Сталкеру, что;

1. Самым оптимальным является 'чистый' concat, т.е. применение оператора '..';

2. Для коротких строк оптимальнее применять слияние строк при помощи 'table.concat', а не 'string.format';

3. Самым медленным вариантом является "string.format', хотя для длинных строк (>=100) его проигрыш уже не очевиден.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Приехали... :(

В общем, тут такое дело...

 

Что делаем:

 

1. Создаём базовый CustomStatic с прикреплённым на него CUIStatic-ом, далее создаём ещё дополнительный CustomStatic.

2. Удаляем дополнительный CustomStatic, через апдейт удаляем прикреплённый CUIStatic, и удаляем базовый CustomStatic.

Не срабатывает удаление прикреплённого CUIStatic-а.

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

 

Мне такой затык "не по зубам". Прошу помощи.

 

1. начинаем "новую игру", получаем предмет, делаем сохранение на будущее.

2. активируем предмет (stco2) (клавиша "2").

3. по клавише "6" долны переключаться экраны этого предмета - нажимаем.

4. скрипт "d2hud" виснет на 68 строке.

5. не выходя в систему загружаем сохранение.

6. активируем предмет stco2 (клавиша "2").

7. всё работает как задумано.

 

Не помогает:

0. проверка скриптов на ошибки.

1. увеличение числа апдейтов в задержке перед удалением прикреплённого CUIStatic.

2. перемещение всех функций в один файл (мало-ли!)...

3. устранение "load_string"-ов - замена на if... (мало-ли!)...

4. переход на другую локацию.

5. пережидание времени.

 

 

"Проект" целиком (1.3МБ): _http://narod.ru/disk/24294526001/2DHUD(test).7z.html

 

Если сохранится с зависшим скриптом - сейв будет битый.

Вылет при загрузке такого сейва, если сразу после запуска игры:

... LUA error: i:\stalker1\gamedata\scripts\bind_stalker.script:397: attempt to concatenate field '?' (a nil value)

 

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

! Unknown command: ОШИБКА:SAVE_FILE_IS_CORRUPT

... LUA error: i:\stalker1\gamedata\scripts\_g.script:1125: attempt to call global 'exit' (a nil value)

 

 

Добавлено:

Версия игры: ТЧ 1.006.

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

всё легко

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

7.9

Из лога ошибки ('bind_stalker.script:397'):

get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])

- т.е. ошибка чтения уже первого байта из пакета актора ('game_difficulty'), а значит природа обоих вылетов едина - 'битый' сэйв.

Просто неудачный вывод в лог (от разрабов) чуть раньше, чем прерывание по 'SAVE FILE IS CORRUPT'

СтОит немного подправить в любом случае для любых модов, типа:

if game_difficulty_by_num[game_difficulty] then
  get_console():execute("g_game_difficulty "..game_difficulty_by_num[game_difficulty])
else
  abort("SAVE FILE IS CORRUPT: Error read game_difficulty")
end

- тогда не будет ругаться на конкатенацию и выдаст причину ошибки.

 

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

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos, Да пост относился именно ему,т.к. был постом раннее.И из сообщения нельзя было понять ,что именно он хотел сделать,может ему нужно было,чтоб нпс просто находился в одном из домов.

П.С. если что то для вас лично -не информативный пост,это не значит,что для остальных так же.Для меня все ваши и большинство постов в теме ,совершенно не информативные,так как в скриптах я ноль.

 

Читаем в вопросе:

KASIMKA: ... Столкнулся с проблемой: нпс не хотят заходить в некоторые дома ...

И что тут непонятного? Если непонятно что-то в вопросе - это не повод флудить на тему ...

Ну а если в чем-то 'ноль' (по собственному признанию) - не следует выказывать своих суждений, а то становишься схож с персонажем басни дедушки Крылова "Мартышка и очки". :crazy:

--/ Artos

[x]

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

Artos

Наверное следует вспомнить про дедушку Эйнштейна.

Если смотреть относительно заранее проинициализированных строками переменных, то простая конкатенация конечно будет работать быстрее, чем tаblе.соnсаt, для использования которого необходимо понести накладные расходы на создание массива.

Если же смотреть относительно заранее созданой таблицы с массивом конкатенируемых строк, то быстрее будет tаblе.соnсаt, т.к. расход понесет простая конкатенация, для выполнения которой нужно выбирать значения из таблицы.

В общем нужно исходить из конкретных ситуаций.

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

7.9

Суть твоей ошибки:

1. Строкою:

st = get_hud():AddCustomStatic("d2hud", true)

- ты создаешь объект кастомстатика

 

2. Приаттачиваешь свою страничку (page_static) строкою:

st:wnd():AttachChild(page_static)

- Внимание! st:wnd() - это новый объект 'окно', т.е. ты приаттачиваешь не к 'st', а к его дочернему объекту ( 'wnd()' ).

 

3. Отключаешь свою страничку (page_static) строкою:

st:wnd():DetachChild(page_static)

- Внимание! Тут уже от родительского 'st' создается НОВЫЙ объект 'окна' st:wnd(), который совершенно иной, чем тот, к которому ты приаттачивал ранее.

В результате возникает фатальная ошибка попытки отключить то, что не было приаттачено -> зависает биндер актора (поток, откуда был вызов) -> рушатся сэйвы (пакет актора некому сохранять).

 

Решение:

Работать только с одним и тем же объектом окна. При создании 'st', запоминать не его, а сразу объект его 'окна', типа:

st_wnd = get_hud():AddCustomStatic("d2hud", true):wnd()

- и уже далее работать именно с ним (st_wnd). И удалять именно его.

 

Примечание: Удалять созданное 'st_wnd' нужно в обязательном порядке при любом выходе из игры. Если не удалять принудительно - перезагрузка сэйва без выхода в ОС может приводить к аналогичным фатальным ошибкам, т.к. объект 'st_wnd' не уничтожается чистильщиком LUA.

 

Добавлено через 32 мин.:

Gun12

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

Но в данном конкретном случае, даже вынесение из цикла подсчета времени формирования таблицы для табличного слиятия (table.concat) и принудительная конкатенация операторами '..' выборкой из из сформированной таблицы (s = tb[1]..tb[2]..tb[3]..tb[4]..tb[5]) - все одно приводит к одному и тому же результату: конкатенация операторами более чем в 2 раза быстрее любого другого метода.

Т.е. даже заведомое использование 'родной' заранее подготовленной таблицы со строками для "table.concat' и принудительное ее использование для 'обычной' (что добавляется к времени обычной конкатенации операторами '..') не приводит к преимуществам 'табличной конкатенации'.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

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

Не готов ответить. Причуд у движка сталкера немало ... Порой приходится эмпирически искать, и если решение есть - стОит ли тратить время на объяснения причуд? Все одно только предполагалки возможны. Будет время - подумаем ... поищем. :-)

--/ Artos

 

Точно, я ведь в динамическихиндикаторах так и делал...

hud_power = hud:GetCustomStatic("hud_power_level"):wnd()

но в этом случае так не сделал... Видимо, "не знал и забыл" :)

Буду пробовать...

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

всё легко

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

Раз уж зашел разговор о UI то у меня тоже давно был вопрос как с кастом статика убрать текстурку?

Я создал статик и установил текстуру:

self.picture = xml:InitStatic("picture", self)

self.picture:InitTexture("ui\\ui_disk_io")

Но как теперь убрать эту текстуру со статика?

 

Вариант 1: Убить старый объект и пересоздать без инициализации текстуры;

Вариант 2: Заменить прежнюю текстуру на 'пустышку' иль на прозрачную;

Вариант 3; Установить размер текстуры/окна в 1 пиксель ...

--/ Artos

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

Freedom

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

Gun12

Если результаты разнятся - значит есть различия в условиях тестирования ... их нужно или устранять или учитывать.

Я убираю различные субъективные причины: версия интерпретатора LUA на компе, его надстройка в SciTE (и пр.), оставив только то, что имеет отношение к собственно игре (к встроенному интерпретатору LUA).

Воспроизвести эту функция (аналог твоей) может каждый, даже не запуская игру (подключив в '_g'), а только выйдя в основное меню:

function test_concat()
  --/ предустановки
  local size = {1,25,50,75,100,125,150,175} --/ кол-ва  символов
  local a,b,c,d,e,s,tb,t1,t2,t3 --/ объявление переменных
  for k,v in ipairs(size) do --/ циклы проверки с различной длиной строк
    --/ (пере)учтановки
    a = string.rep("a",v)
    b = string.rep("b",v)
    c = string.rep("c",v)
    d = string.rep("d",v)
    e = string.rep("e",v)
    tb = {a, b, c, d, e} --/ таблица для 'table.concat'
    printf("Size=" .. tostring(v) .. ":" .. string.rep("~",22))
    --/ table.concat
    t1 = profile_timer()
    t1:start()
    for i=1, 1000000 do
      s = table.concat(tb)
    end
    t1:stop()
    printf("table.concat:=" .. tostring(t1:time()))
    --/ strings concat
    t2 = profile_timer()
    t2:start()
    for i=1, 1000000 do
--      s = a .. b .. c .. d .. e
      s = tb[1] .. tb[2] .. tb[3] .. tb[4] .. tb[5]
    end
    t2:stop()
    printf("strings_concat:=" .. tostring(t2:time()))
    --/ string.format
    t3 = profile_timer()
    t3:start()
    for i=1, 1000000 do
      s = string.format("%s%s%s%s%s", a, b, c, d, e)
    end
    t3:stop()
    printf("string.format:=" .. tostring(t3:time()))
  end
end

и

Size=1:~~~~~~~~~~~~~~~~~~~~~~
table.concat  :  378829.9375
strings_concat:  115101.3671875
string.format :  885728.75
Size=25:~~~~~~~~~~~~~~~~~~~~~~
table.concat  :  556410.875
strings_concat:  239722.640625
string.format : 2280955.75
Size=50:~~~~~~~~~~~~~~~~~~~~~~
table.concat  :  614913.9375
strings_concat:  290451.71875
string.format : 3658724.5
Size=75:~~~~~~~~~~~~~~~~~~~~~~
table.concat  :  685291.0625
strings_concat:  352517.84375
string.format : 5199886
Size=100:~~~~~~~~~~~~~~~~~~~~~~
table.concat  :  692421.5
strings_concat:  379044.0625
string.format :  778628.3125
Size=125:~~~~~~~~~~~~~~~~~~~~~~
table.concat  : 1130261.5
strings_concat:  460861.65625
string.format : 1249460.5
Size=150:~~~~~~~~~~~~~~~~~~~~~~
table.concat  : 1326386.75
strings_concat:  493378.875
string.format : 1415757
Size=175:~~~~~~~~~~~~~~~~~~~~~~
table.concat  : 1426552.75
strings_concat:  569790.5625
string.format : 1558606.125

- как видно есть различия с твоими результатами ... Остается - набирать статистики в одинаковых условиях.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

_Призрак_

local sp = self.picture:InitTexture("ui\\ui_disk_io")

self.sp:Show(False) не пробовал?

Приведет к фатальной ошибке.

Локальная 'sp' никак не определяет 'self.sp', применение к которой любого метода приведет к ошибке с nil'ом

--/ Artos

 

В крайнем случае, если такой метод не работает, инициализируй картинку отдельно от self.picture:

 

self.sp = xml:InitTexture("ui\\ui_disk_io")

self.sp:Show(false)

Метод 'InitTexture' недоступен для об'ектов класса 'CScriptXmlInit'. --/ Artos

 

Один из двух методов точно будет работать, а результат врятле изменится.

Я кстати не понимаю, в чём принципиальная разница между InitTexture и InitStatic?

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

*Shoker*

Воздержись от ответов на вопросы в которых сам 'плаваешь'.

 

Разница между 'InitTexture' и 'InitStatic' достаточно огромна. Тебе следует поискать ответ в "Справочник по классам и функциям".

Кратко:

'InitStatic' - метод только для класса 'ScriptXmlInit', подразумевающего использование xml-файлы в качестве основы/параметров.

Инициализирует/создает (для CUIWindow) дочерний объект класса 'CUIStatic'.

'InitTexture' - метод, доступный для многих CUI-классов, которым инициализилуется/подключается заданная текстура (иль ее аналог).

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Как поставить машину на тормоз?

Ситуация такая: Спавню машину около остановки на Кордоне. Там небольшой склон. Рядом с машиной обязательно во время боя взрывается пара гранат. Из-за них машина в 100% случаях машина скатывается в овраг. Как бы мне сделать так чтобы машина не скатывалась в овраг от каждой шальной пули?

 

Для Artos'а

Ты сейчас скажешь что изначально машина спавнится точно по координатам и на нее не действуют законы физики и только когда по машине наносится хит, законы физики начинают на нее действовать, и она скатывается. Но у меня при старте игры наносится всем машинам хиты и машина при старте стоит нормально, она откатывается именно от взрывов других машин и от взрывов гранат.

Не знал, что на форуме имеются оракулы-предсказатели. Бум иметь ввиду и вместо 'Кашпировсого' направлять по адресу ... ;)

Может не стОит за меня что-то предсказывать и заранее приписывать что я могу сказать?! :angry:

--/ Artos

 

Я ни в коем случае не хотел тебя оскорбить, я просто хотел сказать что я предусмотрел этот вариант

Оскорбить и рассердить - разные вещи, но в любом случае не стОит заранее думать и говорить за другого ...

--/ Artos

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

Freedom

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

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

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

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

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

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

Войти

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

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

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