erlik
Универсального варианта врядли возможно добиться.
Можно и в самом теле определить - сепаратор одиночный стринг или таблица и ... в зависимости организовать внутренние подциклы.
Однако, в Сталкере скорее не это требуется, т.к. писать строки с кучей сепараторов разного вида вроде ка не стоит. А вот строки типа:
section = key1:val2,key2:val2, ... ,keyN:valN
как раз требуются гораздо чаще ...
Gun12
Так ведь erlik в своем примере не умножал ничего, а напрямую выдавал в стоку лога. У меня это же ( collectgarbage("count") ) выдает именно в килобайтах, без каких-либо десятичных ...
Struck
Переделать строку в таблицу (распарсить) можно тысячами способов.
Плюс разбираемого варианта - скорость, за счет уменьшения кол-ва 'медленных' операций, которые присущи многим кодам во многих модах.
Gun12
Тоже подозреваю, что прогонял в SciТЕ ...
А про нецелые - сам string.format не усекает стринг/число без спец.масок.
Ну да не важно, просто вновь задался вопросом, почему/для чего разрабы применяли двойной вызов 'collectgarbage("collect")' ... и до сих пор не понял. Struck
Странный вопрос о практической ценности более быстрого кода перед медленным ...
Конфиги ты сразу таблицами писать можешь? Ведь приведен же пример распарсивания строки с патронами, что требуется для каждого ствола ...
Тот же кастомдата - уже стрингом нам дается ...
Если подобное встречается в циклах - то практическая ценность в устранении лагов.
При загрузке - сотни строк парсятся из конфигов -> получаешь более быструю загрузку.
И т.п. ...
Artos
Да, я в SCITE тестил. Попробовал использовать разрабовский вариант проверки занимаемой памяти (с двойным циклом очистки мусора)- результаты стали другими:
Здравтсвуйте! А как можно усадить НПС к примеру на стул ... покапался в обычных анимация, попробовал не получаеться он мимо стула садиться ... подгонять мне кажеться бесполезно, ибо сама анимация означает сидеть на корточках ... Заранее спасибо!
добавлено спустя 20 минут
И еще как можно прописать логику НПС в скрипте?
отредактировал(а) psevdochel: 23-12-2010 18:30 GMT3 час.
erlik
Теперь понятно: В первом твоем замере (изначальный пост) были оч.неясные для меня цифры. А это оказывается 'мусор' в твоем стеке. Теперь же более-менее встало на свои места. Твой изначальный вариант отжирает под себя прилично ... Вероятно табличка и цикл парсинга сепататоров виноваты, хотя и что-то многовато для них.
Ну а 'str_explode' хоть и не прожорлив на память, но тормоз оказывается оч.нехилый ...
У меня (на скорую руку) на практическом примере в моде для таблички в 2 десятка строк, каждая из трех элементов (число, стринг, сложный стринг) получилось:
0.327 ms - для нового варианта (брал вариант от меня)
0.412 ms - для модернизированного варианта 'str_explode', который использовал в сборке.
По памяти - не различимы, в пределах погрешности в 1 байт.
psevdochel
Анимация 'сидеть на стуле' есть в моде "Восстановление старого сюжета (Мод)" от Максим Р.. Он же про эту анимацию где-то месяц назад в этом топике давал пояснение ... листай/ищи ...
Логику НПС прописывают не в скрипте, а скриптом. Тоже дня три назад все варианты (скриптом/в конфиге/в алл.спавне) в топике разбирались.
Artos
Мой первый вариант действительно "прожорлив" - если передавать табличку с сепаратором\ сепараторами . Без нее результат расхода памяти идентичен варианту Gun12: memory end: 479.1435546875
Тестил функции на строке в 10000 слов - так заметнее разница. Сначала циклом склеивал строку, затем передавал ее как аргумент в функции разбора. А почему время такое?
Я замерял время начала работы функции (time = os.clock()) и вычитал его из времени завершения.
отредактировал(а) erlik: 23-12-2010 19:39 GMT3 час. Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Если разбить лампы и перейти к диалогу с представителем О-сознания, то задание "найти монолит" засчитывается как проваленное.
Как сделать, чтобы проваливались при этом и удалялись из списка активных заданий не только это, но и все, что находятся в данный момент в ПДА игрока?
Artos
Чё то не понял.
Зачем в :
local tXY,sNum = {},nil
Задавать :
sNum = nil
Достаточно и
local tXY = {}
Или я не в курсе всей задумки
Ещё нужно проверить что быстрее :
table.insert(tXY, tonumber(sNum))
или :
tXY[#tXY+1] = tonumber(sNum)
Хотя тут МАЛОразовый вызов =) (по барабану), а вот для больших циклов ещё вопрос, что быстрее?
Gun12
Да там всего две цифры парсятся - из строки vid_mode 1024x768.
А объявление sNum действительно лишнее - в циклах существуют свои локальные переменные - и объявлять их дополнительно как локальные не требуется.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Gun12
Строка: local tXY,sNum = {},nil --/ объявление переменных (таблица и заготовка для стринга).
В принципе достаточно и : local tXY,sNum = {}
или так:
local tXY = {}
local sNum
Ну а для чего объявлять? Как и что использует загрузчик-перехватчик мне не ведомо (пока), могу только предполагать.
Предпочитаю не экономить в сомнительных местах на строках/байтах ...
Искать подобных грабли (если они все же присутствуют) потом ой как нелегко ...
В данном случае скорость не важна, важна надежность.
Gun12
Вначале сделал именно так (с %d), но ... тяга к универсальности (как и у erlik'а :-) ) пересилила.
Оставил пока как заготовку с использованием сепаратора для читалок и других подобных строк, где не только цифры могут встречаться.
; cse_alife_object_physic properties
physic_type = 0x3
mass = 10
Надо чтобы он спас12 появился на столе но не как оружие, а как физический объект, получилось но косяк в том что он появился стоячим ... то есть он не лежит на столе а стоит ... подскажите пожалуйста как его положить?
psevdochel нужно сообщить ему импульс, вопрос как.
С машинами ясно как, спавним в то же место тушканчика, который трогает машину и она нормально после этого себя ведет. Но в этом случае я не знаю как.
отредактировал(а) Mehanik Yar: 23-12-2010 21:39 GMT3 час.
Artos
У меня тут банальный вопрос возник: если в файлах (разных) присутствует функции с одним и тем же именем, то каковы возможные коллизии? Я просто всегда считал, что это критично если функции находятся в одном файле (в SCITE например из двух одноименных функций выполняется только последняя по считыванию строк кода) - но тут возникла ситуация, что функции и находясь вроде в разных файлах тем не менее вроде как (как одна из возможных причин глюка) мешают друг другу.
Она их них просто не выполняется.
ЗЫ: поясню - проблема не у меня, а у людей которые совмещают со своим модом одну из моих очень старых разработок - и одна из функций(элементарная функция починки брони) у них не выполняется. Выяснилось что в моде присутствует ее одноименный дубликат - я им посоветовал переименовать одну из функций. Пока не знаю - помогло ли.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Mister Blonde
Для провалить: 'db.actor:set_task_state(id_state, sTask, iSubTask)'
Извиняюсь, но как человек, знакомый с механизмом скриптования более чем поверхностно, прошу подсказать, как можно вызвать данную строку, чтобы она сработала в нужный момент, в тот же момент, когда проваливается задание "Придти к монолиту" перед диалогом с о-сознанием.
добавлено спустя 27 минут
Также мучаюсь вопросом по текстурам.
Прошу подробно объяснить, какие настройки нужно выставить при прогонке текстур через импорт СДК?
(я про actor(level) editor\images\chek new textures)
При прогонке бампов?
Также, может ли большое количество не прогнанных корректно через СДК текстур повысить шанс вылета out of memory?
Работают ли на ТЧ приложенный файл вида .thm вместо прописи в textures.ltx?
erlik
Помнится мы обсуждали преимущества использования префикса 'this.' перед вызовом функции из текущего модуля/скрипта. Пока при использовании этого способа, я не встречался с коллизиями из-за совпадающих имен функций неважно где.
Теоретически, наличие одноименных функций (о локальных функциях и речи нет) в разных скриптах (кроме конечно и с оговорками для _g.script) никак не должно вызывать коллизий. Не рекомендую размещать фунции и в db.script, хотя тут свои заморочки ...
Предполагаю все же у твоих знакомых причина затруднений в более очевидных ошибках, чем совпадение имен.
Порекомендуй им, если еще не справились, использовать 'this.' для локализации вызова. Если поможет - тогда нужна более подробная информация, чтобы хоть в какую то сторону копать, а не блуждать 'вообще' ... Mister Blonde
Не люблю, когда кто-то берется за сложную (для себя) задачку и ... пытается переложить часть груза на других, оправдываясь своей 'слабостью' ... даже еще не сделав и пары шажков ... Взялся за гуж не говори что не дюж. (поговорка)
Тебе дали направление. Простейший поиск по скриптам выдаст тебе несколько практических примеров использования указанного метода (set_task_state).
Очевидно, что момент когда проваливается твой исходный квест (ты даже его название пока не узнал) - и является моментом, когда нужно 'проваливать' и все остальные. 'Провалом' квестов занимается 'task_manager.script' и конфиги tasks_(LEVEL).xml. (см тэги ).
Какое имя у квеста с О-сознанием - мне искать и некогда и лень. Какие кветы тебе нужно проваливать - только тебе ведомо. Получить список активных квестов можно в том же 'task_manager'е.
Найдешь имя квеста, по способу откуда он 'проваливается' (менеджером или инфопоршнем) можно и дальше говорить ...
Artos а я не люблю, когда кто-то давит авторитетом, превращает тему, основная цель которой - "Основная цель темы - помочь новичкам-модостроителям," (цитиру
люди, помогите плиз!!! может я и не теда обращаюсь, но как мне сделать неуязвимость, если у меня в сталкер новые уровни есть только эти папки:
bin
gamedata (причём в ней только shaders и textures)
mods (nlc и файлы nlc и nlc init)
resolutions (файлы 16х10, 16х9, 4х3, 5х4)
userdata nlc6 (в ней logs, savedgames, screenshots и файл user)
Stalker_Alex333
Ну так кинь шейдер... Или поищи как такой шейдер можно поправить(если ничего не получится, то возьми шейдер или на крайний случай весь Мертвый город из Народной солянки)
Ma$ter
А при чём тут солянка. МГ и так уже несколько версий есть, напрямую от картоделов. Мне Марконовская больше всего нравится с Гейминатора. Там же ещё несколько версий МГ есть, адаптированных под ТЧ.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.